Skip to content

Commit bc59dca

Browse files
committed
Better transformer support
1 parent b80a7fb commit bc59dca

4 files changed

Lines changed: 138 additions & 121 deletions

File tree

cli/commands/up.js

Lines changed: 95 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ class UpCommand extends Command {
151151

152152
// Load transformers
153153
let env, stdlib;
154-
154+
155155
try {
156156
env = require(path.join(process.cwd(), 'env.json'));
157157
} catch (e) {
@@ -169,101 +169,109 @@ class UpCommand extends Command {
169169
}
170170

171171
const transformers = new Transformers(env, stdlib, environment);
172-
let preloadFiles = transformers.compile();
173-
174-
let data = readFiles(
175-
process.cwd(),
176-
{ignore: ignore},
177-
);
178-
179-
data.forEach(file => {
180-
if (preloadFiles[file.filename]) {
181-
throw new Error(
182-
`Error with file "${file.filename}":` +
183-
`This file was preloaded as part of a transformer, ` +
184-
`it can not be overwritten.`
185-
);
186-
}
187-
});
188-
189-
Object.keys(preloadFiles).forEach(filename => {
190-
data.push({filename: filename, buffer: preloadFiles[filename]});
191-
});
192-
193-
// pipe the pack stream to your file
194-
pack.pipe(tarball);
195-
196-
// Run everything in parallel...
197-
198-
async.parallel(data.map(file => {
199-
return (callback) => {
200-
pack.entry({name: file.filename}, file.buffer, callback);
201-
};
202-
}), (err) => {
203-
204-
if (err) {
205-
return callback(err);
206-
}
207-
208-
pack.finalize();
209-
210-
});
211-
212-
tarball.on('close', () => {
213-
214-
let buffer = fs.readFileSync(tmpPath);
215-
fs.unlinkSync(tmpPath);
172+
transformers.compile()
173+
.then(
174+
preloadFiles => {
175+
176+
let data = readFiles(
177+
process.cwd(),
178+
{ignore: ignore},
179+
);
180+
181+
data.forEach(file => {
182+
if (preloadFiles[file.filename]) {
183+
throw new Error(
184+
`Error with file "${file.filename}":` +
185+
`This file was preloaded as part of a transformer, ` +
186+
`it can not be overwritten.`
187+
);
188+
}
189+
});
216190

217-
zlib.gzip(buffer, (err, result) => {
191+
Object.keys(preloadFiles).forEach(filename => {
192+
data.push({filename: filename, buffer: preloadFiles[filename]});
193+
});
218194

219-
if (err) {
220-
return callback(err);
221-
}
222-
223-
console.log(`Packaging complete, total size is ${result.byteLength} bytes!`);
224-
console.log(`Uploading ${chalk.bold(`${pkg.stdlib.name}@${environment === RELEASE_ENV ? version || pkg.stdlib.version : environment}`)} to Autocode at ${host}:${port}...`);
225-
226-
let registryParams = {channel: '1234'};
227-
if (environment === RELEASE_ENV) {
228-
registryParams.release = 't';
229-
if (version) {
230-
registryParams.version = version;
231-
}
232-
} else {
233-
registryParams.environment = environment;
234-
}
195+
// pipe the pack stream to your file
196+
pack.pipe(tarball);
235197

236-
if (force) {
237-
registryParams.force = 't';
238-
}
198+
// Run everything in parallel...
239199

240-
return registry.request(
241-
'up/verify',
242-
registryParams,
243-
result,
244-
(err, response) => {
200+
async.parallel(data.map(file => {
201+
return (callback) => {
202+
pack.entry({name: file.filename}, file.buffer, callback);
203+
};
204+
}), (err) => {
245205

246206
if (err) {
247-
console.log();
248207
return callback(err);
249-
} else {
250-
let t = new Date().valueOf() - start;
251-
console.log()
252-
console.log(`${chalk.bold(`${response.name}@${response.environment || response.version}`)} uploaded successfully in ${t} ms!`);
253-
console.log(`${chalk.bold.green('Live URL:')} https://${response.name.split('/')[0]}.api.stdlib.com/${response.name.split('/')[1]}@${response.environment || response.version}/`);
254-
console.log();
255-
return callback(null);
256208
}
257209

258-
},
259-
(data) => {
260-
console.log(`Registry :: ${data.message}`);
261-
}
262-
);
263-
264-
});
265-
266-
});
210+
pack.finalize();
211+
212+
});
213+
214+
tarball.on('close', () => {
215+
216+
let buffer = fs.readFileSync(tmpPath);
217+
fs.unlinkSync(tmpPath);
218+
219+
zlib.gzip(buffer, (err, result) => {
220+
221+
if (err) {
222+
return callback(err);
223+
}
224+
225+
console.log(`Packaging complete, total size is ${result.byteLength} bytes!`);
226+
console.log(`Uploading ${chalk.bold(`${pkg.stdlib.name}@${environment === RELEASE_ENV ? version || pkg.stdlib.version : environment}`)} to Autocode at ${host}:${port}...`);
227+
228+
let registryParams = {channel: '1234'};
229+
if (environment === RELEASE_ENV) {
230+
registryParams.release = 't';
231+
if (version) {
232+
registryParams.version = version;
233+
}
234+
} else {
235+
registryParams.environment = environment;
236+
}
237+
238+
if (force) {
239+
registryParams.force = 't';
240+
}
241+
242+
return registry.request(
243+
'up/verify',
244+
registryParams,
245+
result,
246+
(err, response) => {
247+
248+
if (err) {
249+
console.log();
250+
return callback(err);
251+
} else {
252+
let t = new Date().valueOf() - start;
253+
console.log()
254+
console.log(`${chalk.bold(`${response.name}@${response.environment || response.version}`)} uploaded successfully in ${t} ms!`);
255+
console.log(`${chalk.bold.green('Live URL:')} https://${response.name.split('/')[0]}.api.stdlib.com/${response.name.split('/')[1]}@${response.environment || response.version}/`);
256+
console.log();
257+
return callback(null);
258+
}
259+
260+
},
261+
(data) => {
262+
console.log(`Registry :: ${data.message}`);
263+
}
264+
);
265+
266+
});
267+
268+
});
269+
270+
},
271+
(err) => {
272+
callback(err);
273+
}
274+
);
267275

268276
}
269277

cli/local_http.js

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -51,33 +51,34 @@ if (cluster.isMaster) {
5151
debug: true
5252
});
5353
let functionParser = new FunctionParser();
54-
try {
55-
let preloadFiles = transformers.compile();
56-
gateway.service(ROUTE);
57-
gateway.environment(env.local || {});
58-
gateway.define(
59-
functionParser.load(
60-
process.cwd(),
61-
'functions',
62-
'www',
63-
null,
64-
preloadFiles
65-
),
66-
preloadFiles
54+
transformers.compile()
55+
.then(
56+
preloadFiles => {
57+
gateway.service(ROUTE);
58+
gateway.environment(env.local || {});
59+
gateway.define(
60+
functionParser.load(
61+
process.cwd(),
62+
'functions',
63+
'www',
64+
null,
65+
preloadFiles
66+
),
67+
preloadFiles
68+
);
69+
gateway.listen(PORT);
70+
console.log();
71+
console.log(`Autocode API:`);
72+
console.log(`\t${chalk.bold.blue(NAME)}`);
73+
console.log();
74+
console.log(`Running on:`);
75+
console.log(`\t${chalk.bold.green(`localhost:${PORT}${ROUTE}`)}`);
76+
console.log();
77+
},
78+
err => {
79+
console.error(err),
80+
process.exit(1);
81+
}
6782
);
68-
} catch (err) {
69-
console.error(err);
70-
process.exit(1);
71-
}
72-
73-
gateway.listen(PORT);
74-
75-
console.log();
76-
console.log(`Autocode API:`);
77-
console.log(`\t${chalk.bold.blue(NAME)}`);
78-
console.log();
79-
console.log(`Running on:`);
80-
console.log(`\t${chalk.bold.green(`localhost:${PORT}${ROUTE}`)}`);
81-
console.log();
8283

8384
}

cli/transformers.js

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const path = require('path');
2+
const fs = require('fs');
23

34
class Transformers {
45

@@ -33,7 +34,7 @@ class Transformers {
3334
if (!config[this.environment] || typeof config[this.environment] !== 'object') {
3435
throw new Error(`"stdlib.json": "transformers[].config['${this.environment}']" must be empty or contain an object`);
3536
}
36-
transformer = new Transformer(config[this.environment]);
37+
transformer = new Transformer(config[this.environment], stdlib, this.environment);
3738
transformer.config = transformerData.config[this.environment];
3839
} catch (e) {
3940
console.error(e);
@@ -45,9 +46,11 @@ class Transformers {
4546
return this.list = transformers;
4647
}
4748

48-
compile () {
49+
async compile () {
4950
let preloadFiles = {};
50-
this.list.forEach(transformer => {
51+
let metadata = {};
52+
for (let i = 0; i < this.list.length; i++) {
53+
let transformer = this.list[i];
5154
let name = transformer.name || transformer.constructor.name;
5255
let t = new Date().valueOf();
5356
console.log(`\n[Transformer: ${name}] Execution starting`);
@@ -56,17 +59,22 @@ class Transformers {
5659
`transformers[].config['${this.environment}']\n` +
5760
`${JSON.stringify(transformer.config, null, 2)}`
5861
);
59-
let files = transformer.compile(process.cwd(), this.env[this.environment]);
62+
let result = await transformer.compile(process.cwd(), this.env[this.environment], metadata);
63+
let files = result.files || {};
64+
metadata = result.metadata || {};
6065
Object.keys(files).forEach(pathname => {
6166
if (preloadFiles[pathname]) {
6267
throw new Error(`[Transformer: ${name}]: Previous Transformer has already defined "${pathname}"`);
6368
} else {
6469
preloadFiles[pathname] = files[pathname];
6570
}
71+
if (!pathname.startsWith('www/') && !pathname.startsWith('functions/')) {
72+
throw new Error(`[Transformer: ${name}]: Invalid pathname "${pathname}", can only add endpoints in "functions/" and "www/"`);
73+
}
6674
});
6775
let t0 = new Date().valueOf() - t;
6876
console.log(`[Transformer: ${name}] Executed in ${t0} ms`);
69-
});
77+
};
7078
return preloadFiles;
7179
}
7280

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "lib.cli",
3-
"version": "5.5.1",
3+
"version": "5.5.2",
44
"description": "Command Line tools for Autocode - autocode.com",
55
"main": "index.js",
66
"scripts": {
@@ -38,7 +38,7 @@
3838
"async": "^2.6.4",
3939
"chalk": "^1.1.3",
4040
"cmnd": "~0.3.0",
41-
"functionscript": "^2.6.0",
41+
"functionscript": "^2.6.3",
4242
"inquirer": "^7.3.3",
4343
"lib": "^4.3.0",
4444
"minimatch": "^3.0.4",

0 commit comments

Comments
 (0)