UNPKG

2.6 kBJavaScriptView Raw
1var fs = require('fs'),
2 path = require('path'),
3 srcpath = path.resolve(__dirname + '/../src');
4
5function getDataSources() {
6 var providers = [],
7 locales = {};
8
9 fs.readdirSync(srcpath + '/providers/').forEach(function (item) {
10 if (item.match(/\.js$/)) {
11 providers.push(item.replace('.js', ''));
12 } else if (item.match(/^[a-z]{2}_[A-Z]{2}$/)) {
13 locales[item] = [];
14 }
15 });
16
17 Object.keys(locales).forEach(function (locale) {
18 fs.readdirSync(srcpath + '/providers/' + locale).forEach(function (item) {
19 if (item.match(/\.js$/)) {
20 locales[locale].push(item.replace(/.js$/, ''));
21 }
22 });
23 });
24
25 return {
26 providers: providers,
27 locales: locales
28 };
29}
30
31function toRequires(sources) {
32 var out = [],
33 asObject = function (obj, prefix, indent) {
34 var out = [];
35 prefix = prefix || '';
36 indent = indent || '';
37 obj.forEach(function (item) {
38 out.push(indent + item + ": require('" + prefix + item + "')");
39 });
40 return out.join(',\n');
41 },
42 a = function (x) {
43 out.push(x);
44 return out;
45 };
46
47 a('var providers = {\n');
48 a(asObject(sources.providers, './providers/', ' '));
49 a('\n};\n\n');
50
51 a('var locales = {\n');
52
53 Object.keys(sources.locales).forEach(function (locale) {
54 a(' \'' + locale + '\': {\n');
55 a(asObject(sources.locales[locale], './providers/' + locale + '/', ' '));
56 a('\n },\n');
57 });
58 out.pop();
59 a('\n }\n};');
60
61 return out.join('');
62}
63
64function createTemplate() {
65 var source = fs.readFileSync(srcpath + '/casual.js').toString(),
66 start = source.indexOf('var safe_require = '),
67 findFunction = function (src, start) {
68 var perenCount = 0,
69 add, remove;
70 do {
71 add = src.indexOf('{', start);
72 remove = src.indexOf('}', start);
73 if (add < remove) {
74 perenCount += 1;
75 start = add + 1;
76 } else {
77 perenCount -= 1;
78 start = remove + 1;
79 }
80 } while (perenCount > 0);
81 return start;
82 },
83 end = findFunction(source, start);
84
85 return {
86 start: source.slice(0, start),
87 end: source.slice(end + 1)
88 };
89}
90
91function generateCasualBrowserify(done) {
92 var data = getDataSources(),
93 template = createTemplate(),
94 safeRequireSource = fs.readFileSync(srcpath + '/safe_require_browserify.js');
95
96 fs.open(srcpath + '/casual_browserify.js', 'w', function (err, fd) {
97 if (err) {
98 throw err;
99 }
100 fs.writeSync(fd, "var helpers = require('./helpers');\n\n");
101 fs.writeSync(fd, toRequires(data));
102 fs.writeSync(fd, safeRequireSource.toString());
103 fs.writeSync(fd, template.end);
104 fs.close(fd, done);
105 console.log('Generated casual_browserify.js');
106 });
107}
108
109generateCasualBrowserify();
110
111
112