1 | var fs = require('fs'),
|
2 | path = require('path'),
|
3 | srcpath = path.resolve(__dirname + '/../src');
|
4 |
|
5 | function 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 |
|
31 | function 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 |
|
64 | function 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 |
|
91 | function 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 |
|
109 | generateCasualBrowserify();
|
110 |
|
111 |
|
112 |
|