UNPKG

1.26 kBJavaScriptView Raw
1var vm = require('vm');
2var path = require('path');
3
4
5// TODO(vojta): improve, this is lame
6var parseProvideRequire = function(str) {
7 var provides = [];
8 var requires = [];
9 var match;
10
11 str.split('\n').forEach(function(line) {
12 match = line.match(/^\s*goog\.provide\([\"\'](.*)[\"\']\)/);
13 if (match) {
14 provides.push(match[1]);
15 }
16
17 match = line.match(/^\s*goog\.require\([\"\'](.*)[\"\']\)/);
18 if (match) {
19 requires.push(match[1]);
20 }
21 });
22
23 return {
24 provides: provides.sort(),
25 requires: requires.sort()
26 };
27};
28
29var parseDepsJs = function(filepath, content) {
30 var parsed = {
31 fileMap: Object.create(null),
32 provideMap: Object.create(null)
33 };
34 var sandbox = {
35 parsed: parsed,
36 goog: {
37 addDependency: function(relativePath, provides, requires) {
38 var absolutePath = path.resolve(path.dirname(filepath), relativePath);
39
40 parsed.fileMap[absolutePath] = {provides: provides, requires: requires};
41 provides.forEach(function(dep) {
42 parsed.provideMap[dep] = absolutePath;
43 });
44 }
45 }
46 };
47
48 vm.runInNewContext(content, sandbox, filepath);
49
50 return parsed;
51};
52
53exports.parseDepsJs = parseDepsJs;
54exports.parseProvideRequire = parseProvideRequire;