1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', { value: true });
|
4 |
|
5 | function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
6 |
|
7 | var fs = require('fs');
|
8 | var path = require('path');
|
9 | var load = require('@faasjs/load');
|
10 | var Logger = _interopDefault(require('@faasjs/logger'));
|
11 | var deepMerge = _interopDefault(require('@faasjs/deep_merge'));
|
12 | var cloud_function = require('@faasjs/cloud_function');
|
13 |
|
14 | class Deployer {
|
15 | constructor(data) {
|
16 | data.name = data.filename.replace(data.root, '').replace('.func.ts', '');
|
17 | data.version = new Date().toLocaleString('zh-CN', {
|
18 | hour12: false,
|
19 | timeZone: 'Asia/Shanghai',
|
20 | }).replace(/[^0-9]+/g, '_');
|
21 | data.logger = new Logger('Deployer');
|
22 | const Config = load.loadConfig(data.root, data.filename);
|
23 | if (!data.env)
|
24 | data.env = process.env.FaasEnv || Config.defaults.deploy.env;
|
25 | data.config = Config[data.env];
|
26 | if (!data.config)
|
27 | throw Error(`Config load failed: ${data.env}`);
|
28 | data.tmp = path.join(data.root, 'tmp', data.env, data.name, data.version) + path.sep;
|
29 | data.tmp.split(path.sep).reduce(function (acc, cur) {
|
30 | acc += path.sep + cur;
|
31 | if (!fs.existsSync(acc))
|
32 | fs.mkdirSync(acc);
|
33 | return acc;
|
34 | });
|
35 | this.deployData = data;
|
36 | }
|
37 | async deploy() {
|
38 | const data = this.deployData;
|
39 | const loadResult = await load.loadTs(data.filename, { tmp: true });
|
40 | const func = loadResult.module;
|
41 | if (!func)
|
42 | throw Error(`Func load failed: ${data.filename}`);
|
43 | if (func.config)
|
44 | data.config = deepMerge(data.config, func.config);
|
45 | data.dependencies = deepMerge(loadResult.dependencies, func.dependencies);
|
46 |
|
47 | const includedCloudFunction = [];
|
48 | for (let i = 0; i < func.plugins.length; i++) {
|
49 | const plugin = func.plugins[i];
|
50 | if (!plugin.type) {
|
51 | data.logger.error('Unknow plugin type: %o', plugin);
|
52 | throw Error('[Deployer] Unknow plugin type');
|
53 | }
|
54 | if (plugin.type === 'cloud_function')
|
55 | includedCloudFunction.push({
|
56 | index: i,
|
57 | plugin
|
58 | });
|
59 | }
|
60 |
|
61 | if (includedCloudFunction.length)
|
62 | for (const plugin of includedCloudFunction) {
|
63 | func.plugins.splice(plugin.index, 1);
|
64 | func.plugins.push(plugin.plugin);
|
65 | }
|
66 | else {
|
67 | const functionPlugin = new cloud_function.CloudFunction();
|
68 | func.plugins.push(functionPlugin);
|
69 | }
|
70 | await func.deploy(this.deployData);
|
71 | return this.deployData;
|
72 | }
|
73 | }
|
74 |
|
75 | exports.Deployer = Deployer;
|