@awsless/cli 0.0.32 → 0.0.34

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/bin.js CHANGED
@@ -3543,6 +3543,57 @@ var formatByteSize = (size) => {
3543
3543
  return color.attr(number) + color.attr.dim(unit);
3544
3544
  };
3545
3545
 
3546
+ // src/util/policy.ts
3547
+ import { pascalCase } from "change-case";
3548
+ var sortKeysDeep = (value) => {
3549
+ if (Array.isArray(value)) {
3550
+ return value.map(sortKeysDeep);
3551
+ }
3552
+ if (value && typeof value === "object") {
3553
+ const entries = Object.entries(value);
3554
+ return Object.fromEntries(
3555
+ entries.sort(([a], [b]) => a.localeCompare(b)).map(([key, entry]) => {
3556
+ return [key, sortKeysDeep(entry)];
3557
+ })
3558
+ );
3559
+ }
3560
+ return value;
3561
+ };
3562
+ var unique = (list3) => {
3563
+ return [...new Set(list3)];
3564
+ };
3565
+ var mergePolicyStatements = (statements) => {
3566
+ const merged = /* @__PURE__ */ new Map();
3567
+ for (const statement of statements) {
3568
+ const effect = statement.effect ?? "allow";
3569
+ const actions = unique(statement.actions).sort();
3570
+ const key = JSON.stringify([effect, actions, sortKeysDeep(statement.conditions) ?? null]);
3571
+ const entry = merged.get(key);
3572
+ if (entry) {
3573
+ entry.resources = unique([...entry.resources, ...statement.resources]);
3574
+ } else {
3575
+ merged.set(key, {
3576
+ effect,
3577
+ actions,
3578
+ resources: unique(statement.resources),
3579
+ conditions: statement.conditions
3580
+ });
3581
+ }
3582
+ }
3583
+ return [...merged.values()];
3584
+ };
3585
+ var formatPolicyDocument = (statements) => {
3586
+ return {
3587
+ Version: "2012-10-17",
3588
+ Statement: mergePolicyStatements(statements).map((statement) => ({
3589
+ Effect: pascalCase(statement.effect ?? "allow"),
3590
+ Action: statement.actions,
3591
+ Resource: statement.resources,
3592
+ Condition: statement.conditions
3593
+ }))
3594
+ };
3595
+ };
3596
+
3546
3597
  // src/feature/on-failure/util.ts
3547
3598
  var getGlobalOnFailure = (ctx) => {
3548
3599
  return ctx.shared.get("on-failure", "bucket-arn");
@@ -3572,7 +3623,6 @@ var zipFiles = (files) => {
3572
3623
  // src/feature/function/util.ts
3573
3624
  import { toDays as toDays5, toSeconds } from "@awsless/duration";
3574
3625
  import { toMebibytes as toMebibytes3 } from "@awsless/size";
3575
- import { pascalCase } from "change-case";
3576
3626
 
3577
3627
  // src/util/cache.ts
3578
3628
  import { lstat as lstat2, readdir } from "fs/promises";
@@ -3871,17 +3921,7 @@ var createLambdaFunction = (parentGroup, ctx, ns, id, local) => {
3871
3921
  name: "lambda-policy",
3872
3922
  policy: new Output3(statementDeps, async (resolve2) => {
3873
3923
  const list3 = await resolveInputs(statements);
3874
- resolve2(
3875
- JSON.stringify({
3876
- Version: "2012-10-17",
3877
- Statement: list3.map((statement) => ({
3878
- Effect: pascalCase(statement.effect ?? "allow"),
3879
- Action: statement.actions,
3880
- Resource: statement.resources,
3881
- Condition: statement.conditions
3882
- }))
3883
- })
3884
- );
3924
+ resolve2(JSON.stringify(formatPolicyDocument(list3)));
3885
3925
  })
3886
3926
  });
3887
3927
  let dependsOn = [];
@@ -4550,7 +4590,6 @@ import { days as days8, seconds as seconds5, toDays as toDays6, toSeconds as toS
4550
4590
  import { mebibytes as mebibytes2, toMebibytes as toMebibytes4 } from "@awsless/size";
4551
4591
  import { aws as aws8 } from "@terraforge/aws";
4552
4592
  import { Output as Output4, findInputDeps as findInputDeps2, resolveInputs as resolveInputs2 } from "@terraforge/core";
4553
- import { pascalCase as pascalCase2 } from "change-case";
4554
4593
  var createPrebuildLambdaFunction = (group, ctx, ns, id, props) => {
4555
4594
  let name;
4556
4595
  let roleName;
@@ -4641,16 +4680,7 @@ var createPrebuildLambdaFunction = (group, ctx, ns, id, props) => {
4641
4680
  name: "lambda-policy",
4642
4681
  policy: new Output4(statementDeps, async (resolve2) => {
4643
4682
  const list3 = await resolveInputs2(statements);
4644
- resolve2(
4645
- JSON.stringify({
4646
- Version: "2012-10-17",
4647
- Statement: list3.map((statement) => ({
4648
- Effect: pascalCase2(statement.effect ?? "allow"),
4649
- Action: statement.actions,
4650
- Resource: statement.resources
4651
- }))
4652
- })
4653
- );
4683
+ resolve2(JSON.stringify(formatPolicyDocument(list3)));
4654
4684
  })
4655
4685
  });
4656
4686
  const variables = {};
@@ -5103,7 +5133,7 @@ import { toDays as toDays7 } from "@awsless/duration";
5103
5133
  import { stringify } from "@awsless/json";
5104
5134
  import { aws as aws11 } from "@terraforge/aws";
5105
5135
  import { Group as Group10, Output as Output5, findInputDeps as findInputDeps3, resolveInputs as resolveInputs3 } from "@terraforge/core";
5106
- import { pascalCase as pascalCase3 } from "change-case";
5136
+ import { pascalCase as pascalCase2 } from "change-case";
5107
5137
  import { createHash as createHash4 } from "crypto";
5108
5138
  import { readFile as readFile5 } from "fs/promises";
5109
5139
  import { fileURLToPath } from "url";
@@ -5244,7 +5274,7 @@ var createPubSubService = (parentGroup, ctx, id, props, inputs) => {
5244
5274
  Version: "2012-10-17",
5245
5275
  Statement: [
5246
5276
  {
5247
- Effect: pascalCase3("allow"),
5277
+ Effect: pascalCase2("allow"),
5248
5278
  Action: ["s3:getObject", "s3:HeadObject"],
5249
5279
  Resource: `arn:aws:s3:::${bucket}/${key}`
5250
5280
  }
@@ -5265,16 +5295,7 @@ var createPubSubService = (parentGroup, ctx, id, props, inputs) => {
5265
5295
  name: "task-policy",
5266
5296
  policy: new Output5(statementDeps, async (resolve2) => {
5267
5297
  const list3 = await resolveInputs3(statements);
5268
- resolve2(
5269
- JSON.stringify({
5270
- Version: "2012-10-17",
5271
- Statement: list3.map((statement) => ({
5272
- Effect: pascalCase3(statement.effect ?? "allow"),
5273
- Action: statement.actions,
5274
- Resource: statement.resources
5275
- }))
5276
- })
5277
- );
5298
+ resolve2(JSON.stringify(formatPolicyDocument(list3)));
5278
5299
  })
5279
5300
  });
5280
5301
  const addPermission = (...permissions) => {
@@ -6695,12 +6716,12 @@ var storeFeature = defineFeature({
6695
6716
  ctx.addAppPermission({
6696
6717
  actions: [
6697
6718
  "s3:ListBucket",
6698
- "s3:ListBucketV2",
6699
- "s3:HeadObject",
6719
+ // 's3:ListBucketV2',
6720
+ // 's3:HeadObject',
6700
6721
  "s3:GetObject",
6701
6722
  "s3:PutObject",
6702
6723
  "s3:DeleteObject",
6703
- "s3:CopyObject",
6724
+ // 's3:CopyObject',
6704
6725
  "s3:GetObjectAttributes"
6705
6726
  ],
6706
6727
  resources: [
@@ -7017,7 +7038,6 @@ var tableFeature = defineFeature({
7017
7038
  "dynamodb:GetItem",
7018
7039
  "dynamodb:UpdateItem",
7019
7040
  "dynamodb:DeleteItem",
7020
- "dynamodb:TransactWrite",
7021
7041
  "dynamodb:BatchWriteItem",
7022
7042
  "dynamodb:BatchGetItem",
7023
7043
  "dynamodb:ConditionCheckItem",
@@ -7895,7 +7915,7 @@ import { toMebibytes as toMebibytes5 } from "@awsless/size";
7895
7915
  import { generateFileHash as generateFileHash2 } from "@awsless/ts-file-cache";
7896
7916
  import { aws as aws27 } from "@terraforge/aws";
7897
7917
  import { Group as Group26, Output as Output7, findInputDeps as findInputDeps4, resolveInputs as resolveInputs4 } from "@terraforge/core";
7898
- import { constantCase as constantCase12, pascalCase as pascalCase4 } from "change-case";
7918
+ import { constantCase as constantCase12, pascalCase as pascalCase3 } from "change-case";
7899
7919
  import deepmerge4 from "deepmerge";
7900
7920
 
7901
7921
  // src/feature/job/build/executable.ts
@@ -8043,7 +8063,7 @@ var createFargateJob = (parentGroup, ctx, ns, id, local) => {
8043
8063
  Version: "2012-10-17",
8044
8064
  Statement: [
8045
8065
  {
8046
- Effect: pascalCase4("allow"),
8066
+ Effect: pascalCase3("allow"),
8047
8067
  Action: ["s3:GetObject", "s3:HeadObject"],
8048
8068
  Resource: [`arn:aws:s3:::${bucket}/${key}`, `arn:aws:s3:::${bucket}/payloads/*`]
8049
8069
  }
@@ -8064,16 +8084,7 @@ var createFargateJob = (parentGroup, ctx, ns, id, local) => {
8064
8084
  name: "task-policy",
8065
8085
  policy: new Output7(statementDeps, async (resolve2) => {
8066
8086
  const list3 = await resolveInputs4(statements);
8067
- resolve2(
8068
- JSON.stringify({
8069
- Version: "2012-10-17",
8070
- Statement: list3.map((statement) => ({
8071
- Effect: pascalCase4(statement.effect ?? "allow"),
8072
- Action: statement.actions,
8073
- Resource: statement.resources
8074
- }))
8075
- })
8076
- );
8087
+ resolve2(JSON.stringify(formatPolicyDocument(list3)));
8077
8088
  })
8078
8089
  });
8079
8090
  const addPermission = (...permissions) => {
@@ -8474,7 +8485,7 @@ import { toMebibytes as toMebibytes6 } from "@awsless/size";
8474
8485
  import { generateFileHash as generateFileHash3 } from "@awsless/ts-file-cache";
8475
8486
  import { aws as aws29 } from "@terraforge/aws";
8476
8487
  import { Group as Group28, Output as Output9, findInputDeps as findInputDeps6, resolveInputs as resolveInputs6 } from "@terraforge/core";
8477
- import { constantCase as constantCase13, pascalCase as pascalCase5 } from "change-case";
8488
+ import { constantCase as constantCase13, pascalCase as pascalCase4 } from "change-case";
8478
8489
  import { createHash as createHash7 } from "crypto";
8479
8490
  import deepmerge6 from "deepmerge";
8480
8491
  import { join as join21 } from "path";
@@ -8554,7 +8565,7 @@ var createFargateTask = (parentGroup, ctx, ns, id, local) => {
8554
8565
  Version: "2012-10-17",
8555
8566
  Statement: [
8556
8567
  {
8557
- Effect: pascalCase5("allow"),
8568
+ Effect: pascalCase4("allow"),
8558
8569
  Action: ["s3:getObject", "s3:HeadObject"],
8559
8570
  Resource: `arn:aws:s3:::${bucket}/${key}`
8560
8571
  }
@@ -8575,16 +8586,7 @@ var createFargateTask = (parentGroup, ctx, ns, id, local) => {
8575
8586
  name: "task-policy",
8576
8587
  policy: new Output9(statementDeps, async (resolve2) => {
8577
8588
  const list3 = await resolveInputs6(statements);
8578
- resolve2(
8579
- JSON.stringify({
8580
- Version: "2012-10-17",
8581
- Statement: list3.map((statement) => ({
8582
- Effect: pascalCase5(statement.effect ?? "allow"),
8583
- Action: statement.actions,
8584
- Resource: statement.resources
8585
- }))
8586
- })
8587
- );
8589
+ resolve2(JSON.stringify(formatPolicyDocument(list3)));
8588
8590
  })
8589
8591
  });
8590
8592
  const addPermission = (...permissions) => {
Binary file
Binary file
Binary file
@@ -1 +1 @@
1
- 21bcb63caa4b42c523fd0aaf72bc4dc13ab42a60
1
+ 7669ae3aa167b158129e305933548bfced402e16