neft
Version:
Universal Platform
68 lines (50 loc) • 1.89 kB
text/coffeescript
# script
'use strict'
fs = require 'fs-extra'
os = require 'os'
utils = require 'src/utils'
pathUtils = require 'path'
{getFilePath} = require './links'
DEFAULT_FILE_EXT = '.js'
isCoffee = (path) -> /\.(?:coffee|litcoffee|coffee\.md)$/.test(path)
module.exports = (File) -> (file) ->
if file instanceof File.Iterator
return
scripts = []
for tag, i in file.node.queryAll('script')
omit = false
for prop of tag.props
if prop not in ['src', 'href', 'filename']
omit = true
break
if omit
continue
tag.parent = null
{src} = tag.props
src ||= tag.props.href
if src
# file
filename = getFilePath File, file, src
script = fs.readFileSync filename, 'utf-8'
else
# tag
script = tag.stringifyChildren()
{filename} = tag.props
if isCoffee(filename)
script = "`module.exports = function(){`\n\n#{script}\n\n`};`"
else
script = "module.exports = function(){\n\n#{script}\n\n};"
filePath = file.path
# support win absolute paths
if pathUtils.isAbsolute(filePath)
filePath = encodeURIComponent filePath
name = "#{filePath}##{i}"
extname = (filename and pathUtils.extname(filename)) or DEFAULT_FILE_EXT
path = pathUtils.join File.SCRIPTS_PATH, name + extname
fs.outputFileSync path, script
File.Scripts.scripts[name] = require path
scripts.push name
file.scripts = new File.Scripts file, scripts
return
# Glossary
- [script](#neftscript)