@effortless-aws/cli 0.5.0 → 0.7.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/cli/index.js +69 -29
- package/package.json +3 -3
package/dist/cli/index.js
CHANGED
|
@@ -3832,6 +3832,7 @@ var ensureFifoQueue = (input) => Effect22.gen(function* () {
|
|
|
3832
3832
|
name,
|
|
3833
3833
|
visibilityTimeout = 30,
|
|
3834
3834
|
retentionPeriod = 345600,
|
|
3835
|
+
delay = 0,
|
|
3835
3836
|
contentBasedDeduplication = true,
|
|
3836
3837
|
tags
|
|
3837
3838
|
} = input;
|
|
@@ -3854,7 +3855,8 @@ var ensureFifoQueue = (input) => Effect22.gen(function* () {
|
|
|
3854
3855
|
FifoQueue: "true",
|
|
3855
3856
|
ContentBasedDeduplication: String(contentBasedDeduplication),
|
|
3856
3857
|
VisibilityTimeout: String(visibilityTimeout),
|
|
3857
|
-
MessageRetentionPeriod: String(retentionPeriod)
|
|
3858
|
+
MessageRetentionPeriod: String(retentionPeriod),
|
|
3859
|
+
DelaySeconds: String(delay)
|
|
3858
3860
|
},
|
|
3859
3861
|
...tags ? { tags } : {}
|
|
3860
3862
|
});
|
|
@@ -3867,7 +3869,8 @@ var ensureFifoQueue = (input) => Effect22.gen(function* () {
|
|
|
3867
3869
|
Attributes: {
|
|
3868
3870
|
ContentBasedDeduplication: String(contentBasedDeduplication),
|
|
3869
3871
|
VisibilityTimeout: String(visibilityTimeout),
|
|
3870
|
-
MessageRetentionPeriod: String(retentionPeriod)
|
|
3872
|
+
MessageRetentionPeriod: String(retentionPeriod),
|
|
3873
|
+
DelaySeconds: String(delay)
|
|
3871
3874
|
}
|
|
3872
3875
|
});
|
|
3873
3876
|
if (tags) {
|
|
@@ -4052,7 +4055,14 @@ var extractDepsKeys = (obj) => {
|
|
|
4052
4055
|
return false;
|
|
4053
4056
|
});
|
|
4054
4057
|
if (!depsProp || depsProp.getKind() !== SyntaxKind.PropertyAssignment) return [];
|
|
4055
|
-
|
|
4058
|
+
let init = depsProp.getInitializer();
|
|
4059
|
+
if (!init) return [];
|
|
4060
|
+
if (init.getKind() === SyntaxKind.ArrowFunction) {
|
|
4061
|
+
const body = init.getBody();
|
|
4062
|
+
if (body.getKind() === SyntaxKind.ParenthesizedExpression) {
|
|
4063
|
+
init = body.getExpression();
|
|
4064
|
+
}
|
|
4065
|
+
}
|
|
4056
4066
|
if (!init || init.getKind() !== SyntaxKind.ObjectLiteralExpression) return [];
|
|
4057
4067
|
const depsObj = init;
|
|
4058
4068
|
return depsObj.getProperties().map((p) => {
|
|
@@ -4434,6 +4444,7 @@ var checkMissingParams = (params) => Effect25.gen(function* () {
|
|
|
4434
4444
|
|
|
4435
4445
|
// src/deploy/deploy-table.ts
|
|
4436
4446
|
import { Effect as Effect27 } from "effect";
|
|
4447
|
+
import { toSeconds } from "effortless-aws";
|
|
4437
4448
|
|
|
4438
4449
|
// src/deploy/shared.ts
|
|
4439
4450
|
import { Effect as Effect26 } from "effect";
|
|
@@ -4554,9 +4565,9 @@ var deployTableFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsP
|
|
|
4554
4565
|
handlerName,
|
|
4555
4566
|
defaultPermissions: TABLE_DEFAULT_PERMISSIONS,
|
|
4556
4567
|
bundleType: "table",
|
|
4557
|
-
...config.permissions ? { permissions: config.permissions } : {},
|
|
4558
|
-
...config.memory ? { memory: config.memory } : {},
|
|
4559
|
-
...config.timeout ? { timeout: config.timeout } : {},
|
|
4568
|
+
...config.lambda?.permissions ? { permissions: config.lambda.permissions } : {},
|
|
4569
|
+
...config.lambda?.memory ? { memory: config.lambda.memory } : {},
|
|
4570
|
+
...config.lambda?.timeout ? { timeout: toSeconds(config.lambda.timeout) } : {},
|
|
4560
4571
|
...layerArn ? { layerArn } : {},
|
|
4561
4572
|
...external ? { external } : {},
|
|
4562
4573
|
depsEnv: selfEnv,
|
|
@@ -4568,7 +4579,7 @@ var deployTableFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsP
|
|
|
4568
4579
|
functionArn,
|
|
4569
4580
|
streamArn,
|
|
4570
4581
|
batchSize: config.batchSize ?? 100,
|
|
4571
|
-
batchWindow: config.batchWindow ?? 2,
|
|
4582
|
+
batchWindow: toSeconds(config.batchWindow ?? 2),
|
|
4572
4583
|
startingPosition: config.startingPosition ?? "LATEST"
|
|
4573
4584
|
});
|
|
4574
4585
|
yield* Effect27.logDebug(`Table deployment complete! Table: ${tableArn}`);
|
|
@@ -4646,6 +4657,7 @@ var deployAllTables = (input) => Effect27.gen(function* () {
|
|
|
4646
4657
|
|
|
4647
4658
|
// src/deploy/deploy-api.ts
|
|
4648
4659
|
import { Effect as Effect28 } from "effect";
|
|
4660
|
+
import { toSeconds as toSeconds2 } from "effortless-aws";
|
|
4649
4661
|
var deployApiFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsPermissions, staticGlobs }) => Effect28.gen(function* () {
|
|
4650
4662
|
const { exportName, config } = fn13;
|
|
4651
4663
|
const handlerName = exportName;
|
|
@@ -4654,9 +4666,9 @@ var deployApiFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsPer
|
|
|
4654
4666
|
exportName,
|
|
4655
4667
|
handlerName,
|
|
4656
4668
|
bundleType: "api",
|
|
4657
|
-
...config.permissions ? { permissions: config.permissions } : {},
|
|
4658
|
-
...config.memory ? { memory: config.memory } : {},
|
|
4659
|
-
...config.timeout ? { timeout: config.timeout } : {},
|
|
4669
|
+
...config.lambda?.permissions ? { permissions: config.lambda.permissions } : {},
|
|
4670
|
+
...config.lambda?.memory ? { memory: config.lambda.memory } : {},
|
|
4671
|
+
...config.lambda?.timeout ? { timeout: toSeconds2(config.lambda.timeout) } : {},
|
|
4660
4672
|
...layerArn ? { layerArn } : {},
|
|
4661
4673
|
...external ? { external } : {},
|
|
4662
4674
|
...depsEnv ? { depsEnv } : {},
|
|
@@ -4712,6 +4724,7 @@ var deploy = (input) => Effect28.gen(function* () {
|
|
|
4712
4724
|
|
|
4713
4725
|
// src/deploy/deploy-app.ts
|
|
4714
4726
|
import { Effect as Effect29 } from "effect";
|
|
4727
|
+
import { toSeconds as toSeconds3 } from "effortless-aws";
|
|
4715
4728
|
import { execSync } from "child_process";
|
|
4716
4729
|
import * as path5 from "path";
|
|
4717
4730
|
var deployApp = (input) => Effect29.gen(function* () {
|
|
@@ -4749,7 +4762,7 @@ var deployApp = (input) => Effect29.gen(function* () {
|
|
|
4749
4762
|
const serverDir = path5.resolve(projectDir, config.server);
|
|
4750
4763
|
yield* Effect29.logDebug(`Zipping server directory: ${serverDir}`);
|
|
4751
4764
|
const code = yield* zipDirectory(serverDir);
|
|
4752
|
-
const permissions = config.permissions ?? [];
|
|
4765
|
+
const permissions = config.lambda?.permissions ?? [];
|
|
4753
4766
|
const roleArn = yield* ensureRole(
|
|
4754
4767
|
project,
|
|
4755
4768
|
stage,
|
|
@@ -4765,8 +4778,8 @@ var deployApp = (input) => Effect29.gen(function* () {
|
|
|
4765
4778
|
roleArn,
|
|
4766
4779
|
code,
|
|
4767
4780
|
handler: "index.handler",
|
|
4768
|
-
memory: config.memory ?? 1024,
|
|
4769
|
-
timeout: config.timeout ?? 30,
|
|
4781
|
+
memory: config.lambda?.memory ?? 1024,
|
|
4782
|
+
timeout: toSeconds3(config.lambda?.timeout ?? 30),
|
|
4770
4783
|
tags: makeTags(tagCtx, "lambda"),
|
|
4771
4784
|
environment: {
|
|
4772
4785
|
EFF_PROJECT: project,
|
|
@@ -5282,6 +5295,7 @@ var deployStaticSite = (input) => Effect31.gen(function* () {
|
|
|
5282
5295
|
|
|
5283
5296
|
// src/deploy/deploy-fifo-queue.ts
|
|
5284
5297
|
import { Effect as Effect32 } from "effect";
|
|
5298
|
+
import { toSeconds as toSeconds4 } from "effortless-aws";
|
|
5285
5299
|
var FIFO_QUEUE_DEFAULT_PERMISSIONS = ["sqs:*", "logs:*"];
|
|
5286
5300
|
var deployFifoQueueFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsPermissions, staticGlobs }) => Effect32.gen(function* () {
|
|
5287
5301
|
const { exportName, config } = fn13;
|
|
@@ -5293,11 +5307,12 @@ var deployFifoQueueFunction = ({ input, fn: fn13, layerArn, external, depsEnv, d
|
|
|
5293
5307
|
};
|
|
5294
5308
|
yield* Effect32.logDebug("Creating SQS FIFO queue...");
|
|
5295
5309
|
const queueName = `${input.project}-${tagCtx.stage}-${handlerName}`;
|
|
5296
|
-
const timeout = config.timeout ?? 30;
|
|
5310
|
+
const timeout = toSeconds4(config.lambda?.timeout ?? 30);
|
|
5297
5311
|
const { queueUrl, queueArn } = yield* ensureFifoQueue({
|
|
5298
5312
|
name: queueName,
|
|
5299
|
-
visibilityTimeout: Math.max(config.visibilityTimeout
|
|
5300
|
-
retentionPeriod: config.retentionPeriod,
|
|
5313
|
+
visibilityTimeout: Math.max(config.visibilityTimeout ? toSeconds4(config.visibilityTimeout) : timeout, timeout),
|
|
5314
|
+
retentionPeriod: config.retentionPeriod ? toSeconds4(config.retentionPeriod) : void 0,
|
|
5315
|
+
delay: config.delay ? toSeconds4(config.delay) : void 0,
|
|
5301
5316
|
contentBasedDeduplication: config.contentBasedDeduplication ?? true,
|
|
5302
5317
|
tags: makeTags(tagCtx, "sqs")
|
|
5303
5318
|
});
|
|
@@ -5312,9 +5327,9 @@ var deployFifoQueueFunction = ({ input, fn: fn13, layerArn, external, depsEnv, d
|
|
|
5312
5327
|
handlerName,
|
|
5313
5328
|
defaultPermissions: FIFO_QUEUE_DEFAULT_PERMISSIONS,
|
|
5314
5329
|
bundleType: "fifoQueue",
|
|
5315
|
-
...config.permissions ? { permissions: config.permissions } : {},
|
|
5316
|
-
...config.memory ? { memory: config.memory } : {},
|
|
5317
|
-
...config.timeout ? { timeout: config.timeout } : {},
|
|
5330
|
+
...config.lambda?.permissions ? { permissions: config.lambda.permissions } : {},
|
|
5331
|
+
...config.lambda?.memory ? { memory: config.lambda.memory } : {},
|
|
5332
|
+
...config.lambda?.timeout ? { timeout: toSeconds4(config.lambda.timeout) } : {},
|
|
5318
5333
|
...layerArn ? { layerArn } : {},
|
|
5319
5334
|
...external ? { external } : {},
|
|
5320
5335
|
depsEnv: queueEnv,
|
|
@@ -5326,7 +5341,7 @@ var deployFifoQueueFunction = ({ input, fn: fn13, layerArn, external, depsEnv, d
|
|
|
5326
5341
|
functionArn,
|
|
5327
5342
|
queueArn,
|
|
5328
5343
|
batchSize: config.batchSize ?? 10,
|
|
5329
|
-
batchWindow: config.batchWindow
|
|
5344
|
+
batchWindow: config.batchWindow ? toSeconds4(config.batchWindow) : void 0
|
|
5330
5345
|
});
|
|
5331
5346
|
yield* Effect32.logDebug(`FIFO queue deployment complete! Queue: ${queueUrl}`);
|
|
5332
5347
|
return {
|
|
@@ -5340,6 +5355,7 @@ var deployFifoQueueFunction = ({ input, fn: fn13, layerArn, external, depsEnv, d
|
|
|
5340
5355
|
|
|
5341
5356
|
// src/deploy/deploy-bucket.ts
|
|
5342
5357
|
import { Effect as Effect33 } from "effect";
|
|
5358
|
+
import { toSeconds as toSeconds5 } from "effortless-aws";
|
|
5343
5359
|
var BUCKET_DEFAULT_PERMISSIONS = ["s3:*", "logs:*"];
|
|
5344
5360
|
var deployBucketFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsPermissions, staticGlobs }) => Effect33.gen(function* () {
|
|
5345
5361
|
const { exportName, config, hasHandler } = fn13;
|
|
@@ -5372,9 +5388,9 @@ var deployBucketFunction = ({ input, fn: fn13, layerArn, external, depsEnv, deps
|
|
|
5372
5388
|
handlerName,
|
|
5373
5389
|
defaultPermissions: BUCKET_DEFAULT_PERMISSIONS,
|
|
5374
5390
|
bundleType: "bucket",
|
|
5375
|
-
...config.permissions ? { permissions: config.permissions } : {},
|
|
5376
|
-
...config.memory ? { memory: config.memory } : {},
|
|
5377
|
-
...config.timeout ? { timeout: config.timeout } : {},
|
|
5391
|
+
...config.lambda?.permissions ? { permissions: config.lambda.permissions } : {},
|
|
5392
|
+
...config.lambda?.memory ? { memory: config.lambda.memory } : {},
|
|
5393
|
+
...config.lambda?.timeout ? { timeout: toSeconds5(config.lambda.timeout) } : {},
|
|
5378
5394
|
...layerArn ? { layerArn } : {},
|
|
5379
5395
|
...external ? { external } : {},
|
|
5380
5396
|
depsEnv: selfEnv,
|
|
@@ -5541,6 +5557,11 @@ var SES_PERMISSIONS = [
|
|
|
5541
5557
|
"ses:SendEmail",
|
|
5542
5558
|
"ses:SendRawEmail"
|
|
5543
5559
|
];
|
|
5560
|
+
var QUEUE_CLIENT_PERMISSIONS = [
|
|
5561
|
+
"sqs:SendMessage",
|
|
5562
|
+
"sqs:SendMessageBatch",
|
|
5563
|
+
"sqs:GetQueueUrl"
|
|
5564
|
+
];
|
|
5544
5565
|
var buildMailerDomainMap = (mailerHandlers) => {
|
|
5545
5566
|
const map = /* @__PURE__ */ new Map();
|
|
5546
5567
|
for (const { exports } of mailerHandlers) {
|
|
@@ -5570,7 +5591,16 @@ var buildBucketNameMap = (bucketHandlers, project, stage) => {
|
|
|
5570
5591
|
}
|
|
5571
5592
|
return map;
|
|
5572
5593
|
};
|
|
5573
|
-
var
|
|
5594
|
+
var buildQueueNameMap = (fifoQueueHandlers, project, stage) => {
|
|
5595
|
+
const map = /* @__PURE__ */ new Map();
|
|
5596
|
+
for (const { exports } of fifoQueueHandlers) {
|
|
5597
|
+
for (const fn13 of exports) {
|
|
5598
|
+
map.set(fn13.exportName, `${project}-${stage}-${fn13.exportName}`);
|
|
5599
|
+
}
|
|
5600
|
+
}
|
|
5601
|
+
return map;
|
|
5602
|
+
};
|
|
5603
|
+
var validateDeps = (discovered, tableNameMap, bucketNameMap, mailerDomainMap, queueNameMap) => {
|
|
5574
5604
|
const errors = [];
|
|
5575
5605
|
const allGroups = [
|
|
5576
5606
|
...discovered.apiHandlers,
|
|
@@ -5584,9 +5614,9 @@ var validateDeps = (discovered, tableNameMap, bucketNameMap, mailerDomainMap) =>
|
|
|
5584
5614
|
for (const { exports } of allGroups) {
|
|
5585
5615
|
for (const fn13 of exports) {
|
|
5586
5616
|
for (const key of fn13.depsKeys) {
|
|
5587
|
-
if (!tableNameMap.has(key) && !bucketNameMap.has(key) && !mailerDomainMap.has(key)) {
|
|
5617
|
+
if (!tableNameMap.has(key) && !bucketNameMap.has(key) && !mailerDomainMap.has(key) && !queueNameMap.has(key)) {
|
|
5588
5618
|
errors.push(
|
|
5589
|
-
`Handler "${fn13.exportName}" depends on "${key}", but no matching table, bucket, or
|
|
5619
|
+
`Handler "${fn13.exportName}" depends on "${key}", but no matching table, bucket, mailer, or queue handler was found. Make sure it is exported.`
|
|
5590
5620
|
);
|
|
5591
5621
|
}
|
|
5592
5622
|
}
|
|
@@ -5594,12 +5624,13 @@ var validateDeps = (discovered, tableNameMap, bucketNameMap, mailerDomainMap) =>
|
|
|
5594
5624
|
}
|
|
5595
5625
|
return errors;
|
|
5596
5626
|
};
|
|
5597
|
-
var resolveDeps = (depsKeys, tableNameMap, bucketNameMap, mailerDomainMap) => {
|
|
5627
|
+
var resolveDeps = (depsKeys, tableNameMap, bucketNameMap, mailerDomainMap, queueNameMap) => {
|
|
5598
5628
|
if (depsKeys.length === 0) return void 0;
|
|
5599
5629
|
const depsEnv = {};
|
|
5600
5630
|
let hasTable = false;
|
|
5601
5631
|
let hasBucket = false;
|
|
5602
5632
|
let hasMailer = false;
|
|
5633
|
+
let hasQueue = false;
|
|
5603
5634
|
for (const key of depsKeys) {
|
|
5604
5635
|
const tableName = tableNameMap.get(key);
|
|
5605
5636
|
if (tableName) {
|
|
@@ -5617,6 +5648,12 @@ var resolveDeps = (depsKeys, tableNameMap, bucketNameMap, mailerDomainMap) => {
|
|
|
5617
5648
|
if (mailerDomain) {
|
|
5618
5649
|
depsEnv[`EFF_DEP_${key}`] = `mailer:${mailerDomain}`;
|
|
5619
5650
|
hasMailer = true;
|
|
5651
|
+
continue;
|
|
5652
|
+
}
|
|
5653
|
+
const queueName = queueNameMap.get(key);
|
|
5654
|
+
if (queueName) {
|
|
5655
|
+
depsEnv[`EFF_DEP_${key}`] = `queue:${queueName}`;
|
|
5656
|
+
hasQueue = true;
|
|
5620
5657
|
}
|
|
5621
5658
|
}
|
|
5622
5659
|
if (Object.keys(depsEnv).length === 0) return void 0;
|
|
@@ -5624,6 +5661,7 @@ var resolveDeps = (depsKeys, tableNameMap, bucketNameMap, mailerDomainMap) => {
|
|
|
5624
5661
|
if (hasTable) permissions.push(...TABLE_CLIENT_PERMISSIONS);
|
|
5625
5662
|
if (hasBucket) permissions.push(...BUCKET_CLIENT_PERMISSIONS);
|
|
5626
5663
|
if (hasMailer) permissions.push(...SES_PERMISSIONS);
|
|
5664
|
+
if (hasQueue) permissions.push(...QUEUE_CLIENT_PERMISSIONS);
|
|
5627
5665
|
return { depsEnv, depsPermissions: permissions };
|
|
5628
5666
|
};
|
|
5629
5667
|
var SSM_PERMISSIONS = [
|
|
@@ -5654,7 +5692,7 @@ var makeDeployInput = (ctx, file) => ({
|
|
|
5654
5692
|
});
|
|
5655
5693
|
var resolveHandlerEnv = (depsKeys, paramEntries, ctx) => {
|
|
5656
5694
|
const resolved = mergeResolved(
|
|
5657
|
-
resolveDeps(depsKeys, ctx.tableNameMap, ctx.bucketNameMap, ctx.mailerDomainMap),
|
|
5695
|
+
resolveDeps(depsKeys, ctx.tableNameMap, ctx.bucketNameMap, ctx.mailerDomainMap, ctx.queueNameMap),
|
|
5658
5696
|
resolveParams(paramEntries, ctx.input.project, ctx.stage)
|
|
5659
5697
|
);
|
|
5660
5698
|
return {
|
|
@@ -5901,7 +5939,8 @@ var deployProject = (input) => Effect35.gen(function* () {
|
|
|
5901
5939
|
const tableNameMap = buildTableNameMap(tableHandlers, input.project, stage);
|
|
5902
5940
|
const bucketNameMap = buildBucketNameMap(bucketHandlers, input.project, stage);
|
|
5903
5941
|
const mailerDomainMap = buildMailerDomainMap(mailerHandlers);
|
|
5904
|
-
const
|
|
5942
|
+
const queueNameMap = buildQueueNameMap(fifoQueueHandlers, input.project, stage);
|
|
5943
|
+
const depsErrors = validateDeps(discovered, tableNameMap, bucketNameMap, mailerDomainMap, queueNameMap);
|
|
5905
5944
|
if (depsErrors.length > 0) {
|
|
5906
5945
|
yield* Console2.log("");
|
|
5907
5946
|
for (const err of depsErrors) {
|
|
@@ -5948,6 +5987,7 @@ var deployProject = (input) => Effect35.gen(function* () {
|
|
|
5948
5987
|
tableNameMap,
|
|
5949
5988
|
bucketNameMap,
|
|
5950
5989
|
mailerDomainMap,
|
|
5990
|
+
queueNameMap,
|
|
5951
5991
|
logComplete
|
|
5952
5992
|
};
|
|
5953
5993
|
const tableResults = [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effortless-aws/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "CLI and deploy tooling for effortless-aws",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@aws-sdk/client-resource-groups-tagging-api": "^3.975.0",
|
|
29
29
|
"@aws-sdk/client-s3": "^3.989.0",
|
|
30
30
|
"@aws-sdk/client-sesv2": "^3.994.0",
|
|
31
|
-
"@aws-sdk/client-sqs": "
|
|
31
|
+
"@aws-sdk/client-sqs": "3.989.0",
|
|
32
32
|
"@aws-sdk/client-ssm": "^3.985.0",
|
|
33
33
|
"@aws-sdk/util-dynamodb": "^3.975.0",
|
|
34
34
|
"@effect/cli": "^0.73.1",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"esbuild": "^0.25.0",
|
|
40
40
|
"glob": "^13.0.0",
|
|
41
41
|
"ts-morph": "^27.0.2",
|
|
42
|
-
"effortless-aws": "0.
|
|
42
|
+
"effortless-aws": "0.23.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@effect-ak/aws-sdk": "1.0.0-rc.3",
|