@voxgig/build 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/build.js CHANGED
@@ -1,376 +1,26 @@
1
1
  "use strict";
2
- /* Copyright © 2022 Voxgig Ltd, MIT License. */
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
2
+ /* Copyright © 2022-2026 Voxgig Ltd, MIT License. */
6
3
  Object.defineProperty(exports, "__esModule", { value: true });
7
4
  exports.EnvLambda = void 0;
8
- const fs_1 = __importDefault(require("fs"));
9
- const path_1 = __importDefault(require("path"));
10
- const model_1 = require("@voxgig/model");
11
- const msg_1 = require("./shape/msg");
12
- const conf_1 = require("./shape/conf");
13
- const res_dynamo_yml_1 = require("./yml/res_dynamo_yml");
14
- // console.log('BUILD 1')
5
+ // EnvLambda: generation of the Lambda deployment templates, built on the
6
+ // jostraca templating library. The templates live in env/lambda/, one file
7
+ // per output for convenience:
8
+ //
9
+ // env/lambda/srv_yml.ts gen srv.yml (Serverless function defs)
10
+ // env/lambda/srv_handler.ts handler source (one per lambda service)
11
+ // env/lambda/res_yml.ts gen res.yml (queues, dynamo, IAM role)
12
+ //
13
+ // The output is byte-identical to the pre-jostraca (<= 3.1.0) generator;
14
+ // test/fixture pins this. All generators are async (jostraca generation is
15
+ // async); existing callers that did not await still work, as the writes
16
+ // complete before the process exits.
17
+ const srv_yml_1 = require("./env/lambda/srv_yml");
18
+ const srv_handler_1 = require("./env/lambda/srv_handler");
19
+ const res_yml_1 = require("./env/lambda/res_yml");
15
20
  const EnvLambda = {
16
- srv_yml: (model, spec) => {
17
- const core = (0, conf_1.CoreConfShape)(model.main.conf.core);
18
- let appname = core.name;
19
- let AppName = (0, model_1.camelify)(appname);
20
- let srv_yml_path = path_1.default.join(spec.folder, 'srv.yml');
21
- let srv_yml_prefix_path = path_1.default.join(spec.folder, 'srv.prefix.yml');
22
- let srv_yml_suffix_path = path_1.default.join(spec.folder, 'srv.suffix.yml');
23
- let prefixContent = fs_1.default.existsSync(srv_yml_prefix_path) ?
24
- fs_1.default.readFileSync(srv_yml_prefix_path) : '';
25
- let suffixContent = fs_1.default.existsSync(srv_yml_suffix_path) ?
26
- fs_1.default.readFileSync(srv_yml_suffix_path) : '';
27
- let content = prefixContent +
28
- Object
29
- .entries(model.main.srv)
30
- .filter((entry) => { var _a, _b; return (_b = (_a = entry[1].env) === null || _a === void 0 ? void 0 : _a.lambda) === null || _b === void 0 ? void 0 : _b.active; })
31
- .map((entry) => {
32
- var _a, _b, _c, _d;
33
- const name = entry[0];
34
- const srv = entry[1];
35
- const lambda = srv.env.lambda;
36
- const handler = lambda.handler;
37
- // NOTE: gen.custom convention: allows for complete overwrite
38
- // as a get-out-of-jail
39
- if ((_c = (_b = (_a = srv.gen) === null || _a === void 0 ? void 0 : _a.custom) === null || _b === void 0 ? void 0 : _b.lambda) === null || _c === void 0 ? void 0 : _c.srv_yml) {
40
- return srv.gen.custom.lambda.srv_yml;
41
- }
42
- // TODO: this should be a JSON structure exported as YAML
43
- let srvyml = `${name}:
44
- handler: ${handler.path.prefix}${name}${handler.path.suffix}
45
- role: Basic${AppName}LambdaRole
46
- timeout: ${lambda.timeout}
47
- memorySize: ${lambda.memory || 1024}
48
- `;
49
- const web = srv.api.web;
50
- let events = '';
51
- let onEvents = srv.on;
52
- if (onEvents) {
53
- Object.entries(onEvents).forEach((entry) => {
54
- // let name = entry[0]
55
- let spec = entry[1];
56
- if ('aws' === spec.provider) {
57
- spec.events.forEach((ev) => {
58
- if ('s3' === ev.source) {
59
- events += TM(`
60
- - s3:
61
- bucket: ${ev.bucket}
62
- event: ${ev.event}
63
- existing: true
64
- `);
65
- if (ev.rules) {
66
- events += TM(`
67
- rules:
68
- `);
69
- if (ev.rules.prefix) {
70
- events += TM(`
71
- - prefix: ${ev.rules.prefix}
72
- `);
73
- }
74
- if (ev.rules.suffix) {
75
- events += TM(`
76
- - suffix: ${ev.rules.suffix}
77
- `);
78
- }
79
- }
80
- }
81
- else if ('schedule' === ev.source) {
82
- let entries = 'string' === typeof ev.recur ? [ev.recur] : (ev.recur || []);
83
- let recur = entries.map((entry) => {
84
- let schedule = `
85
- - schedule:
86
- rate: ${entry}`;
87
- if (ev.msg) {
88
- schedule += `
89
- input:
90
- msg: ${JSON.stringify(ev.msg)} `;
91
- }
92
- return schedule;
93
- });
94
- events += TM(`
95
- ${recur}
96
- `);
97
- }
98
- else if ('sqs' === ev.source) {
99
- events += TM(`
100
- - sqs:
101
- arn:
102
- Fn::GetAtt:
103
- - ${ev.qrn}
104
- - Arn
105
- batchSize: 1
106
- `);
107
- }
108
- });
109
- }
110
- });
111
- }
112
- // TODO: move to `on`
113
- if (web.active) {
114
- let prefix = web.path.prefix;
115
- let suffix = web.path.suffix;
116
- let area = web.path.area;
117
- let method = web.method;
118
- let corsflag = 'false';
119
- let corsprops = '';
120
- let methods = method.split(',');
121
- // console.log('METHODS', methods)
122
- if (web.cors.active) {
123
- corsflag = 'true';
124
- if (web.cors.props && !empty(web.cors.props)) {
125
- corsflag = '';
126
- corsprops = Object
127
- .entries(web.cors.props)
128
- .reduce(((a, nv) => (a += ` ${nv[0]}: ${nv[1]}\n`
129
- , a)), '');
130
- }
131
- }
132
- if ('v2' === ((_d = web.lambda) === null || _d === void 0 ? void 0 : _d.gateway)) {
133
- for (let method of methods) {
134
- events += TM(`
135
- - httpApi:
136
- path: "${prefix}${area}${name}${suffix}"
137
- method: ${method}
138
- `);
139
- }
140
- }
141
- else {
142
- for (let method of methods) {
143
- events += TM(`
144
- - http:
145
- path: "${prefix}${area}${name}${suffix}"
146
- method: ${method}
147
- cors: ${corsflag}
148
- ${corsprops}
149
- `);
150
- }
151
- }
152
- }
153
- if ('' !== events) {
154
- srvyml += TM(`
155
- events:
156
- ${events}
157
- `);
158
- }
159
- return srvyml;
160
- }).join('\n\n\n') +
161
- suffixContent;
162
- fs_1.default.writeFileSync(srv_yml_path, content);
163
- },
164
- // Only create if does not exist
165
- srv_handler: (model, spec) => {
166
- let lang = spec.lang || 'js';
167
- let TS = 'ts' === lang;
168
- Object
169
- .entries(model.main.srv)
170
- .filter((entry) => { var _a; return (_a = entry[1].env) === null || _a === void 0 ? void 0 : _a.lambda; })
171
- .forEach((entry) => {
172
- var _a;
173
- const name = entry[0];
174
- const srv = entry[1];
175
- if ('custom' === srv.env.lambda.kind) {
176
- return;
177
- }
178
- let srv_handler_path = path_1.default.join(spec.folder, name + '.' + lang);
179
- let start = spec.start || 'setup';
180
- let envFolder = ((_a = spec.env) === null || _a === void 0 ? void 0 : _a.folder) || '../../../env/lambda';
181
- let handler = 'handler';
182
- let modify = '';
183
- // if (!srv.api.web.active) {
184
- // if (srv.on && 0 < Object.keys(srv.on).length) {
185
- // handler = 'eventhandler'
186
- // modify = `
187
- // event = {
188
- // ...event,
189
- // // TODO: @voxgig/system? util needed to handle this dynamically
190
- // seneca$: { msg: '${srv.on[Object.keys(srv.on)[0]].events[0].msg}' },
191
- // }
192
- // `
193
- // }
194
- // }
195
- let prepare = '';
196
- let complete = '';
197
- (0, model_1.dive)(model.main.msg.aim[name], 128).map((entry) => {
198
- var _a, _b;
199
- let path = ['aim', name, ...entry[0]];
200
- let msgMeta = (0, msg_1.MsgMetaShape)(entry[1]);
201
- let pin = (0, model_1.pinify)(path);
202
- if ((_b = (_a = msgMeta.transport) === null || _a === void 0 ? void 0 : _a.queue) === null || _b === void 0 ? void 0 : _b.active) {
203
- complete += `
204
- seneca.listen({type:'sqs',pin:'${pin}'})`;
205
- }
206
- });
207
- (0, model_1.dive)(model.main.srv[name].out, 128).map((entry) => {
208
- var _a, _b;
209
- let path = entry[0];
210
- let msgMetaMaybe = (0, model_1.get)(model.main.msg, path);
211
- // console.log(name, path, msgMetaMaybe)
212
- if (msgMetaMaybe === null || msgMetaMaybe === void 0 ? void 0 : msgMetaMaybe.$) {
213
- let msgMeta = (0, msg_1.MsgMetaShape)(msgMetaMaybe === null || msgMetaMaybe === void 0 ? void 0 : msgMetaMaybe.$);
214
- let pin = (0, model_1.pinify)(path);
215
- if ((_b = (_a = msgMeta.transport) === null || _a === void 0 ? void 0 : _a.queue) === null || _b === void 0 ? void 0 : _b.active) {
216
- complete += `
217
- seneca.client({type:'sqs',pin:'${pin}'})`;
218
- }
219
- }
220
- });
221
- let makeGatewayHandler = false;
222
- let onlist = model.main.srv[name].on || {};
223
- Object.entries(onlist).map((onitem) => {
224
- onitem[1].events.map((event) => {
225
- if ('s3' === event.source) {
226
- if (!makeGatewayHandler) {
227
- complete += `
228
-
229
- const makeGatewayHandler = seneca.export('s3-store/makeGatewayHandler')`;
230
- makeGatewayHandler = true;
231
- }
232
- complete += `
233
- seneca
234
- .act('sys:gateway,kind:lambda,add:hook,hook:handler', {
235
- handler: makeGatewayHandler('${event.msg}') })`;
236
- }
237
- });
238
- });
239
- let content = TS ? `import { getSeneca } from '${envFolder}/${start}'`
240
- :
241
- `const getSeneca = require('${envFolder}/${start}')`;
242
- content += `
243
-
244
- function complete(seneca: any) {${complete}
245
- }
246
-
247
- exports.handler = async (
248
- event${TS ? ':any' : ''},
249
- context${TS ? ':any' : ''}
250
- ) => {
251
- ${modify}
252
- let seneca = await getSeneca('${name}', complete)
253
- ${prepare}
254
- let handler = seneca.export('gateway-lambda/${handler}')
255
- let res = await handler(event, context)
256
- return res
257
- }
258
- `;
259
- // TODO: make this an option
260
- //if (!Fs.existsSync(srv_handler_path)) {
261
- fs_1.default.writeFileSync(srv_handler_path, content);
262
- });
263
- },
264
- resources_yml: async (model, spec) => {
265
- const core = (0, conf_1.CoreConfShape)(model.main.conf.core);
266
- const appname = core.name;
267
- const AppName = (0, model_1.camelify)(appname);
268
- const cloud = (0, conf_1.CloudConfShape)(model.main.conf.cloud);
269
- const region = cloud.aws.region;
270
- const accountid = cloud.aws.accountid;
271
- let filename = spec.filename || 'resources.yml';
272
- let resources_yml_path = path_1.default.join(spec.folder, filename);
273
- let resources_yml_prefix_path = path_1.default.join(spec.folder, 'res.prefix.yml');
274
- let resources_yml_suffix_path = path_1.default.join(spec.folder, 'res.suffix.yml');
275
- let prefixContent = fs_1.default.existsSync(resources_yml_prefix_path) ?
276
- fs_1.default.readFileSync(resources_yml_prefix_path) : '';
277
- let suffixContent = fs_1.default.existsSync(resources_yml_suffix_path) ?
278
- fs_1.default.readFileSync(resources_yml_suffix_path) : '';
279
- const dynamoResources = [];
280
- let content = `# START
281
- `;
282
- content +=
283
- prefixContent +
284
- await (0, res_dynamo_yml_1.res_dynamo_yml)(model, { dynamoResources, region, accountid });
285
- // content +=
286
- let queueDefs = (0, model_1.dive)(model.main.msg, 128).map((entry) => {
287
- var _a, _b, _c;
288
- let path = entry[0];
289
- let msgMeta = (0, msg_1.MsgMetaShape)(entry[1]);
290
- let pathname = path
291
- .map((p) => (p[0] + '').toUpperCase() + p.substring(1))
292
- .join('');
293
- // console.log('MQ', pathname, msgMeta)
294
- if ((_b = (_a = msgMeta.transport) === null || _a === void 0 ? void 0 : _a.queue) === null || _b === void 0 ? void 0 : _b.active) {
295
- // console.log('MM', path, msgMeta)
296
- let queue = msgMeta.transport.queue;
297
- let name = queue.name || pathname;
298
- // TODO: aontu should do this, but needs recursive child conjuncts
299
- let stage_suffix = (false === ((_c = queue.stage) === null || _c === void 0 ? void 0 : _c.active)) ? '' : '-${self:provider.stage,"dev"}';
300
- let queue_suffix = (null == queue.suffix || '' == queue.suffix) ? '' :
301
- '-' + queue.suffix;
302
- let resname = 'Queue' + name;
303
- let queueName = (queue.prefix || '') +
304
- path.reduce((s, p, i) => (s += p + (i % 2 ?
305
- (i == path.length - 1 ? '' : '-') : '_')), '') +
306
- (queue_suffix || '') +
307
- (stage_suffix || '');
308
- let queueTimeout = queue.timeout || 30;
309
- return `${resname}:
310
- Type: "AWS::SQS::Queue"
311
- Properties:
312
- QueueName: '${queueName}'
313
- VisibilityTimeout: ${queueTimeout}
314
- `;
315
- }
316
- return '';
317
- }).filter(n => '' !== n).join('');
318
- // console.log('queueDefs', queueDefs)
319
- content += '\n\n' + queueDefs;
320
- let customLambdaPolicyStatementPath = path_1.default.join(spec.folder, 'res.lambda.policy.statements.yml');
321
- let customLambdaPolicyStatementContent = fs_1.default.existsSync(customLambdaPolicyStatementPath) ?
322
- fs_1.default.readFileSync(customLambdaPolicyStatementPath) : '';
323
- content += `
324
- Basic${AppName}LambdaRole:
325
- Type: AWS::IAM::Role
326
- Properties:
327
- RoleName: Basic${AppName}LambdaRole\${self:custom.index.BasicLambdaRole,"01"}
328
- AssumeRolePolicyDocument:
329
- Version: '2012-10-17'
330
- Statement:
331
- - Effect: Allow
332
- Principal:
333
- Service:
334
- - lambda.amazonaws.com
335
- - events.amazonaws.com
336
- - ecs-tasks.amazonaws.com
337
- Action: sts:AssumeRole
338
- Policies:
339
- - PolicyName: LambdaServiceAccess
340
- PolicyDocument:
341
- Version: '2012-10-17'
342
- Statement:
343
- - Effect: Allow
344
- Action:
345
- - dynamodb:DescribeTable
346
- - dynamodb:GetItem
347
- - dynamodb:PutItem
348
- - dynamodb:UpdateItem
349
- - dynamodb:DeleteItem
350
- - dynamodb:Query
351
- - dynamodb:Scan
352
- Resource:
353
- ${dynamoResources.map(r => ' - ' + r.arn).join('\n')}
354
- ${customLambdaPolicyStatementContent}
355
- ManagedPolicyArns:
356
- - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
357
- `;
358
- if (spec.custom) {
359
- content = fs_1.default.readFileSync(spec.custom).toString() + '\n\n\n' + content;
360
- }
361
- content += suffixContent;
362
- content += `
363
- # END
364
- `;
365
- fs_1.default.writeFileSync(resources_yml_path, content);
366
- },
21
+ srv_yml: srv_yml_1.srv_yml,
22
+ srv_handler: srv_handler_1.srv_handler,
23
+ resources_yml: res_yml_1.resources_yml,
367
24
  };
368
25
  exports.EnvLambda = EnvLambda;
369
- function empty(o) {
370
- return null == o ? true : 0 === Object.keys(o).length;
371
- }
372
- // Strip inital newline
373
- function TM(str) {
374
- return str.replace(/^\n/, '');
375
- }
376
26
  //# sourceMappingURL=build.js.map
package/dist/build.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../build.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAEpD,yEAAyE;AACzE,2EAA2E;AAC3E,8BAA8B;AAC9B,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,yEAAyE;AACzE,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,wEAAwE;AACxE,qCAAqC;AAErC,kDAA8C;AAC9C,0DAAsD;AACtD,kDAAoD;AAGpD,MAAM,SAAS,GAAG;IAChB,OAAO,EAAP,iBAAO;IACP,WAAW,EAAX,yBAAW;IACX,aAAa,EAAb,uBAAa;CACd,CAAA;AAIC,8BAAS"}
@@ -0,0 +1,7 @@
1
+ declare function generate(folder: string, files: {
2
+ name: string;
3
+ content: string;
4
+ }[]): Promise<void>;
5
+ declare function empty(o: any): boolean;
6
+ declare function TM(str: string): string;
7
+ export { generate, empty, TM, };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /* Copyright © 2022-2026 Voxgig Ltd, MIT License. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.generate = generate;
5
+ exports.empty = empty;
6
+ exports.TM = TM;
7
+ // Shared generation utilities for the lambda templates. File output goes
8
+ // through the jostraca templating library (Project/File/Content components),
9
+ // which also maintains .jostraca/ build metadata next to the outputs.
10
+ const jostraca_1 = require("jostraca");
11
+ // Generate one or more files in folder, each with exact content.
12
+ async function generate(folder, files) {
13
+ const jostraca = (0, jostraca_1.Jostraca)();
14
+ await jostraca.generate({ folder }, () => {
15
+ (0, jostraca_1.Project)({}, () => {
16
+ for (const f of files) {
17
+ (0, jostraca_1.File)({ name: f.name }, () => {
18
+ (0, jostraca_1.Content)(f.content);
19
+ });
20
+ }
21
+ });
22
+ });
23
+ }
24
+ function empty(o) {
25
+ return null == o ? true : 0 === Object.keys(o).length;
26
+ }
27
+ // Strip inital newline
28
+ function TM(str) {
29
+ return str.replace(/^\n/, '');
30
+ }
31
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../env/lambda/generate.ts"],"names":[],"mappings":";AAAA,oDAAoD;;AAuClD,4BAAQ;AACR,sBAAK;AACL,gBAAE;AAvCJ,yEAAyE;AACzE,6EAA6E;AAC7E,sEAAsE;AAEtE,uCAA2D;AAG3D,iEAAiE;AACjE,KAAK,UAAU,QAAQ,CACrB,MAAc,EACd,KAA0C;IAE1C,MAAM,QAAQ,GAAG,IAAA,mBAAQ,GAAE,CAAA;IAE3B,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;QACvC,IAAA,kBAAO,EAAC,EAAE,EAAE,GAAG,EAAE;YACf,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE;oBAC1B,IAAA,kBAAO,EAAC,CAAC,CAAC,OAAO,CAAC,CAAA;gBACpB,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAGD,SAAS,KAAK,CAAC,CAAM;IACnB,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AACvD,CAAC;AAED,uBAAuB;AACvB,SAAS,EAAE,CAAC,GAAW;IACrB,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,6 @@
1
+ declare const resources_yml: (model: any, spec: {
2
+ folder: string;
3
+ filename: string;
4
+ custom: string;
5
+ }) => Promise<void>;
6
+ export { resources_yml, };
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /* Copyright © 2022-2026 Voxgig Ltd, MIT License. */
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.resources_yml = void 0;
8
+ // gen/serverless resources template: SQS queues, DynamoDB tables (via
9
+ // yml/res_dynamo_yml), and the basic Lambda IAM role.
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const util_1 = require("@voxgig/util");
13
+ const msg_1 = require("../../shape/msg");
14
+ const conf_1 = require("../../shape/conf");
15
+ const res_dynamo_yml_1 = require("../../yml/res_dynamo_yml");
16
+ const generate_1 = require("./generate");
17
+ const resources_yml = async (model, spec) => {
18
+ const core = (0, conf_1.CoreConfShape)(model.main.conf.core);
19
+ const appname = core.name;
20
+ const AppName = (0, util_1.camelify)(appname);
21
+ const cloud = (0, conf_1.CloudConfShape)(model.main.conf.cloud);
22
+ const region = cloud.aws.region;
23
+ const accountid = cloud.aws.accountid;
24
+ let filename = spec.filename || 'resources.yml';
25
+ let resources_yml_prefix_path = path_1.default.join(spec.folder, 'res.prefix.yml');
26
+ let resources_yml_suffix_path = path_1.default.join(spec.folder, 'res.suffix.yml');
27
+ let prefixContent = fs_1.default.existsSync(resources_yml_prefix_path) ?
28
+ fs_1.default.readFileSync(resources_yml_prefix_path) : '';
29
+ let suffixContent = fs_1.default.existsSync(resources_yml_suffix_path) ?
30
+ fs_1.default.readFileSync(resources_yml_suffix_path) : '';
31
+ const dynamoResources = [];
32
+ let content = `# START
33
+ `;
34
+ content +=
35
+ prefixContent +
36
+ await (0, res_dynamo_yml_1.res_dynamo_yml)(model, { dynamoResources, region, accountid });
37
+ // content +=
38
+ let queueDefs = (0, util_1.dive)(model.main.msg, 128).map((entry) => {
39
+ var _a, _b, _c;
40
+ let path = entry[0];
41
+ let msgMeta = (0, msg_1.MsgMetaShape)(entry[1]);
42
+ let pathname = path
43
+ .map((p) => (p[0] + '').toUpperCase() + p.substring(1))
44
+ .join('');
45
+ // console.log('MQ', pathname, msgMeta)
46
+ if ((_b = (_a = msgMeta.transport) === null || _a === void 0 ? void 0 : _a.queue) === null || _b === void 0 ? void 0 : _b.active) {
47
+ // console.log('MM', path, msgMeta)
48
+ let queue = msgMeta.transport.queue;
49
+ let name = queue.name || pathname;
50
+ // TODO: aontu should do this, but needs recursive child conjuncts
51
+ let stage_suffix = (false === ((_c = queue.stage) === null || _c === void 0 ? void 0 : _c.active)) ? '' : '-${self:provider.stage,"dev"}';
52
+ let queue_suffix = (null == queue.suffix || '' == queue.suffix) ? '' :
53
+ '-' + queue.suffix;
54
+ let resname = 'Queue' + name;
55
+ let queueName = (queue.prefix || '') +
56
+ path.reduce((s, p, i) => (s += p + (i % 2 ?
57
+ (i == path.length - 1 ? '' : '-') : '_')), '') +
58
+ (queue_suffix || '') +
59
+ (stage_suffix || '');
60
+ let queueTimeout = queue.timeout || 30;
61
+ return `${resname}:
62
+ Type: "AWS::SQS::Queue"
63
+ Properties:
64
+ QueueName: '${queueName}'
65
+ VisibilityTimeout: ${queueTimeout}
66
+ `;
67
+ }
68
+ return '';
69
+ }).filter(n => '' !== n).join('');
70
+ // console.log('queueDefs', queueDefs)
71
+ content += '\n\n' + queueDefs;
72
+ let customLambdaPolicyStatementPath = path_1.default.join(spec.folder, 'res.lambda.policy.statements.yml');
73
+ let customLambdaPolicyStatementContent = fs_1.default.existsSync(customLambdaPolicyStatementPath) ?
74
+ fs_1.default.readFileSync(customLambdaPolicyStatementPath) : '';
75
+ content += `
76
+ Basic${AppName}LambdaRole:
77
+ Type: AWS::IAM::Role
78
+ Properties:
79
+ RoleName: Basic${AppName}LambdaRole\${self:custom.index.BasicLambdaRole,"01"}
80
+ AssumeRolePolicyDocument:
81
+ Version: '2012-10-17'
82
+ Statement:
83
+ - Effect: Allow
84
+ Principal:
85
+ Service:
86
+ - lambda.amazonaws.com
87
+ - events.amazonaws.com
88
+ - ecs-tasks.amazonaws.com
89
+ Action: sts:AssumeRole
90
+ Policies:
91
+ - PolicyName: LambdaServiceAccess
92
+ PolicyDocument:
93
+ Version: '2012-10-17'
94
+ Statement:
95
+ - Effect: Allow
96
+ Action:
97
+ - dynamodb:DescribeTable
98
+ - dynamodb:GetItem
99
+ - dynamodb:PutItem
100
+ - dynamodb:UpdateItem
101
+ - dynamodb:DeleteItem
102
+ - dynamodb:Query
103
+ - dynamodb:Scan
104
+ Resource:
105
+ ${dynamoResources.map(r => ' - ' + r.arn).join('\n')}
106
+ ${customLambdaPolicyStatementContent}
107
+ ManagedPolicyArns:
108
+ - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
109
+ `;
110
+ if (spec.custom) {
111
+ content = fs_1.default.readFileSync(spec.custom).toString() + '\n\n\n' + content;
112
+ }
113
+ content += suffixContent;
114
+ content += `
115
+ # END
116
+ `;
117
+ await (0, generate_1.generate)(spec.folder, [{ name: filename, content }]);
118
+ };
119
+ exports.resources_yml = resources_yml;
120
+ //# sourceMappingURL=res_yml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"res_yml.js","sourceRoot":"","sources":["../../../env/lambda/res_yml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ declare const srv_handler: (model: any, spec: {
2
+ folder: string;
3
+ start?: string;
4
+ env?: {
5
+ folder: string;
6
+ };
7
+ lang?: string;
8
+ }) => Promise<void>;
9
+ export { srv_handler, };