Skip to content

Commit 6576cd3

Browse files
committed
Update transformers logic
1 parent ee52e98 commit 6576cd3

2 files changed

Lines changed: 78 additions & 45 deletions

File tree

cli/local_http.js

Lines changed: 4 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
const fs = require('fs');
21
const path = require('path');
32

43
const { Daemon, FunctionParser } = require('functionscript');
54
const LocalGateway = require('./local_gateway');
5+
const Transformers = require('./transformers');
66
const chalk = require('chalk');
77

88
const processArgs = process.argv.slice(2).reduce((processArgs, val) => {
@@ -40,33 +40,8 @@ if (cluster.isMaster) {
4040
process.exit(1);
4141
}
4242

43-
// Load transformers
44-
let transformers = [];
45-
if (stdlib.transformers) {
46-
if (!Array.isArray(stdlib.transformers)) {
47-
throw new Error(`"stdlib.json": "transformers" must be an array`);
48-
}
49-
transformers = stdlib.transformers.map(transformerData => {
50-
let Transformer;
51-
let transformer;
52-
if (!transformerData.pathname) {
53-
throw new Error(`"stdlib.json": "transformers" object must contain "pathname"`);
54-
}
55-
try {
56-
Transformer = require(path.join(process.cwd(), transformerData.pathname));
57-
let config = transformerData.config || {};
58-
if (!config || typeof config !== 'object') {
59-
throw new Error(`"stdlib.json": "transformers[].config" must be empty or contain an object`);
60-
}
61-
transformer = new Transformer(config);
62-
transformer.config = transformerData.config;
63-
} catch (e) {
64-
console.error(e);
65-
throw new Error(`Could not load transformer: "${transformerData.pathname}"`);
66-
}
67-
return transformer;
68-
});
69-
}
43+
const transformers = new Transformers(env, stdlib, 'local');
44+
transformers.load();
7045

7146
// Cluster to Gateway
7247
let gateway = new LocalGateway({
@@ -76,23 +51,7 @@ if (cluster.isMaster) {
7651
});
7752
let functionParser = new FunctionParser();
7853
try {
79-
let preloadFiles = {};
80-
transformers.forEach(transformer => {
81-
let name = transformer.name || transformer.constructor.name;
82-
let t = new Date().valueOf();
83-
console.log(`\n[Transformer: ${name}] Execution starting`);
84-
console.log(`[Transformer: ${name}] Using config ${JSON.stringify(transformer.config)}`);
85-
let files = transformer.compile(process.cwd(), env.local);
86-
Object.keys(files).forEach(pathname => {
87-
if (preloadFiles[pathname]) {
88-
throw new Error(`[Transformer: ${name}]: Previous Transformer has already defined "${pathname}"`);
89-
} else {
90-
preloadFiles[pathname] = files[pathname];
91-
}
92-
});
93-
let t0 = new Date().valueOf() - t;
94-
console.log(`[Transformer: ${name}] Executed in ${t0} ms`);
95-
});
54+
let preloadFiles = transformers.compile();
9655
gateway.service(ROUTE);
9756
gateway.environment(env.local || {});
9857
gateway.define(

cli/transformers.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
const path = require('path');
2+
3+
class Transformers {
4+
5+
constructor (env, stdlib, environment) {
6+
this.env = env;
7+
this.stdlib = stdlib;
8+
this.environment = environment;
9+
this.list = [];
10+
}
11+
12+
load () {
13+
let stdlib = this.stdlib;
14+
let transformers = [];
15+
if (stdlib.transformers) {
16+
if (!Array.isArray(stdlib.transformers)) {
17+
throw new Error(`"stdlib.json": "transformers" must be an array`);
18+
}
19+
transformers = stdlib.transformers.map(transformerData => {
20+
let Transformer;
21+
let transformer;
22+
if (!transformerData.pathname) {
23+
throw new Error(`"stdlib.json": "transformers" object must contain "pathname"`);
24+
}
25+
try {
26+
Transformer = require(path.join(process.cwd(), transformerData.pathname));
27+
let config = transformerData.config || {};
28+
if (!config || typeof config !== 'object') {
29+
throw new Error(`"stdlib.json": "transformers[].config" must be empty or contain an object`);
30+
}
31+
let configEnv = config[this.environment] || {};
32+
if (!config[this.environment] || typeof config[this.environment] !== 'object') {
33+
throw new Error(`"stdlib.json": "transformers[].config['${this.environment}']" must be empty or contain an object`);
34+
}
35+
transformer = new Transformer(config[this.environment]);
36+
transformer.config = transformerData.config[this.environment];
37+
} catch (e) {
38+
console.error(e);
39+
throw new Error(`Could not load transformer: "${transformerData.pathname}"`);
40+
}
41+
return transformer;
42+
});
43+
}
44+
return this.list = transformers;
45+
}
46+
47+
compile () {
48+
let preloadFiles = {};
49+
this.list.forEach(transformer => {
50+
let name = transformer.name || transformer.constructor.name;
51+
let t = new Date().valueOf();
52+
console.log(`\n[Transformer: ${name}] Execution starting`);
53+
console.log(
54+
`[Transformer: ${name}] Using config from stdlib.json: ` +
55+
`transformers[].config.local\n` +
56+
`${JSON.stringify(transformer.config, null, 2)}`
57+
);
58+
let files = transformer.compile(process.cwd(), this.env[this.environment]);
59+
Object.keys(files).forEach(pathname => {
60+
if (preloadFiles[pathname]) {
61+
throw new Error(`[Transformer: ${name}]: Previous Transformer has already defined "${pathname}"`);
62+
} else {
63+
preloadFiles[pathname] = files[pathname];
64+
}
65+
});
66+
let t0 = new Date().valueOf() - t;
67+
console.log(`[Transformer: ${name}] Executed in ${t0} ms`);
68+
});
69+
return preloadFiles;
70+
}
71+
72+
}
73+
74+
module.exports = Transformers;

0 commit comments

Comments
 (0)