UNPKG

5.31 kBJavaScriptView Raw
1// Generated by CoffeeScript 2.0.0-beta6
2void function () {
3 var badRequireError, canonicalise, CoffeeScript, esprima, estraverse, fs, md5, path, relativeResolve;
4 fs = require('fs');
5 path = require('path');
6 CoffeeScript = require('coffee-script-redux');
7 esprima = require('esprima');
8 estraverse = require('estraverse');
9 md5 = require('MD5');
10 canonicalise = require('./canonicalise');
11 relativeResolve = require('./relative-resolve');
12 badRequireError = function (filename, node, msg) {
13 if (null != node.loc && null != (null != node.loc ? node.loc.start : void 0))
14 filename = '' + filename + ':' + node.loc.start.line + ':' + node.loc.start.column;
15 throw 'illegal require: ' + msg + '\n `' + require('escodegen').generate(node) + '`\n in ' + filename + '';
16 };
17 module.exports = function (entryPoint, root, options) {
18 var aliases, ast, astOrJs, cache$, cache$1, canonicalName, digest, ext, extensions, extname, fileContents, filename, handler, handlers, processed, worklist;
19 if (null == root)
20 root = process.cwd();
21 if (null == options)
22 options = {};
23 aliases = null != options.aliases ? options.aliases : {};
24 handlers = {
25 '.coffee': function (coffee, canonicalName) {
26 return CoffeeScript.compile(CoffeeScript.parse(coffee, { raw: true }), { bare: true });
27 },
28 '.json': function (json, canonicalName) {
29 return esprima.parse('module.exports = ' + json, {
30 loc: true,
31 source: canonicalName
32 });
33 }
34 };
35 for (ext in cache$ = null != options.handlers ? options.handlers : {}) {
36 if (!isOwn$(cache$, ext))
37 continue;
38 handler = cache$[ext];
39 handlers[ext] = handler;
40 }
41 extensions = ['.js'].concat([].slice.call(function (accum$) {
42 for (ext in handlers) {
43 if (!isOwn$(handlers, ext))
44 continue;
45 accum$.push(ext);
46 }
47 return accum$;
48 }.call(this, [])));
49 worklist = [relativeResolve({
50 extensions: extensions,
51 aliases: aliases,
52 root: root,
53 path: entryPoint
54 })];
55 processed = {};
56 while (worklist.length) {
57 cache$1 = worklist.pop();
58 filename = cache$1.filename;
59 canonicalName = cache$1.canonicalName;
60 if (!filename)
61 continue;
62 if ({}.hasOwnProperty.call(processed, filename))
63 continue;
64 extname = path.extname(filename);
65 fileContents = fs.readFileSync(filename).toString();
66 if (options.cache) {
67 digest = md5(fileContents.toString());
68 if (options.cache[filename] === digest)
69 continue;
70 options.cache[filename] = digest;
71 }
72 astOrJs = {}.hasOwnProperty.call(handlers, extname) ? handlers[extname](fileContents, canonicalName) : fileContents;
73 ast = typeof astOrJs === 'string' ? function () {
74 var e;
75 try {
76 return esprima.parse(astOrJs, {
77 loc: true,
78 source: canonicalName
79 });
80 } catch (e$) {
81 e = e$;
82 throw new Error('Syntax error in ' + filename + ' at line ' + e.lineNumber + ', column ' + e.column + e.message.slice(e.message.indexOf(':')));
83 }
84 }.call(this) : astOrJs;
85 processed[filename] = {
86 canonicalName: canonicalName,
87 ast: ast,
88 fileContents: fileContents
89 };
90 if (null != ast.loc)
91 ast.loc;
92 else
93 ast.loc = {};
94 estraverse.replace(ast, {
95 enter: function (node, parents) {
96 var cwd, e, resolved;
97 if (null != node.loc)
98 node.loc.source = canonicalName;
99 if (!(node.type === 'CallExpression' && node.callee.type === 'Identifier' && node.callee.name === 'require'))
100 return;
101 if (!(node['arguments'].length === 1))
102 badRequireError(filename, node, 'require must be given exactly one argument');
103 if (!(node['arguments'][0].type === 'Literal' && typeof node['arguments'][0].value === 'string'))
104 badRequireError(filename, node, 'argument of require must be a constant string');
105 cwd = path.dirname(fs.realpathSync(filename));
106 if (options.verbose)
107 console.error('required "' + node['arguments'][0].value + '" from "' + canonicalName + '"');
108 try {
109 resolved = relativeResolve({
110 extensions: extensions,
111 aliases: aliases,
112 root: root,
113 cwd: cwd,
114 path: node['arguments'][0].value
115 });
116 worklist.push(resolved);
117 } catch (e$) {
118 e = e$;
119 if (options.ignoreMissing) {
120 return {
121 type: 'Literal',
122 value: null
123 };
124 } else {
125 throw e;
126 }
127 }
128 return {
129 type: 'CallExpression',
130 callee: node.callee,
131 'arguments': [
132 {
133 type: 'Literal',
134 value: resolved.canonicalName
135 },
136 {
137 type: 'Identifier',
138 name: 'module'
139 }
140 ]
141 };
142 }
143 });
144 }
145 return processed;
146 };
147 function isOwn$(o, p) {
148 return {}.hasOwnProperty.call(o, p);
149 }
150}.call(this);