@kensio/yulin 1.18.0 → 1.18.1

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.
Files changed (85) hide show
  1. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.d.ts +8 -2
  2. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.d.ts.map +1 -1
  3. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.js +9 -3
  4. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.js.map +1 -1
  5. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-web-acl.d.ts +25 -0
  6. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-web-acl.d.ts.map +1 -0
  7. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-web-acl.js +36 -0
  8. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-web-acl.js.map +1 -0
  9. package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.d.ts.map +1 -1
  10. package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.js +6 -5
  11. package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.js.map +1 -1
  12. package/dist/service/s3/command/list-objects/list-objects-authorizer.d.ts +6 -4
  13. package/dist/service/s3/command/list-objects/list-objects-authorizer.d.ts.map +1 -1
  14. package/dist/service/s3/command/list-objects/list-objects-authorizer.js +6 -4
  15. package/dist/service/s3/command/list-objects/list-objects-authorizer.js.map +1 -1
  16. package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts +4 -2
  17. package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts.map +1 -1
  18. package/dist/service/s3/command/list-objects/list-objects-page-builder.js +8 -2
  19. package/dist/service/s3/command/list-objects/list-objects-page-builder.js.map +1 -1
  20. package/dist/service/s3/command/list-objects/list-objects.command.d.ts +7 -0
  21. package/dist/service/s3/command/list-objects/list-objects.command.d.ts.map +1 -1
  22. package/dist/service/s3/command/list-objects/list-objects.handler.d.ts.map +1 -1
  23. package/dist/service/s3/command/list-objects/list-objects.handler.js +2 -0
  24. package/dist/service/s3/command/list-objects/list-objects.handler.js.map +1 -1
  25. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts +1 -0
  26. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts.map +1 -1
  27. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js +6 -1
  28. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js.map +1 -1
  29. package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts +8 -2
  30. package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts.map +1 -1
  31. package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.d.ts.map +1 -1
  32. package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js +2 -0
  33. package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js.map +1 -1
  34. package/dist/service/s3/object/s3-common-prefix.d.ts +22 -0
  35. package/dist/service/s3/object/s3-common-prefix.d.ts.map +1 -0
  36. package/dist/service/s3/object/s3-common-prefix.js +16 -0
  37. package/dist/service/s3/object/s3-common-prefix.js.map +1 -0
  38. package/dist/service/s3/object/s3-object-listing.d.ts +9 -2
  39. package/dist/service/s3/object/s3-object-listing.d.ts.map +1 -1
  40. package/dist/service/s3/object/s3-object-listing.js +70 -13
  41. package/dist/service/s3/object/s3-object-listing.js.map +1 -1
  42. package/dist/service/s3/serve/api/sim-s3-api-input.d.ts.map +1 -1
  43. package/dist/service/s3/serve/api/sim-s3-api-input.js +2 -0
  44. package/dist/service/s3/serve/api/sim-s3-api-input.js.map +1 -1
  45. package/dist/service/s3/serve/api/sim-s3-api-listing.d.ts +5 -0
  46. package/dist/service/s3/serve/api/sim-s3-api-listing.d.ts.map +1 -1
  47. package/dist/service/s3/serve/api/sim-s3-api-listing.js +6 -1
  48. package/dist/service/s3/serve/api/sim-s3-api-listing.js.map +1 -1
  49. package/dist/service/wafv2/cfn/association/sim-cfn-waf-association-creator.d.ts +4 -0
  50. package/dist/service/wafv2/cfn/association/sim-cfn-waf-association-creator.d.ts.map +1 -1
  51. package/dist/service/wafv2/cfn/association/sim-cfn-waf-association-creator.js +9 -0
  52. package/dist/service/wafv2/cfn/association/sim-cfn-waf-association-creator.js.map +1 -1
  53. package/dist/service/wafv2/cfn/association/sim-cfn-waf-association-skip.d.ts +22 -0
  54. package/dist/service/wafv2/cfn/association/sim-cfn-waf-association-skip.d.ts.map +1 -0
  55. package/dist/service/wafv2/cfn/association/sim-cfn-waf-association-skip.js +28 -0
  56. package/dist/service/wafv2/cfn/association/sim-cfn-waf-association-skip.js.map +1 -0
  57. package/dist/service/wafv2/cfn/sim-cfn-waf-resource-error.d.ts +25 -6
  58. package/dist/service/wafv2/cfn/sim-cfn-waf-resource-error.d.ts.map +1 -1
  59. package/dist/service/wafv2/cfn/sim-cfn-waf-resource-error.js +32 -7
  60. package/dist/service/wafv2/cfn/sim-cfn-waf-resource-error.js.map +1 -1
  61. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-evaluatable-rules.d.ts +16 -0
  62. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-evaluatable-rules.d.ts.map +1 -0
  63. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-evaluatable-rules.js +22 -0
  64. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-evaluatable-rules.js.map +1 -0
  65. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-web-acl-config.d.ts +13 -4
  66. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-web-acl-config.d.ts.map +1 -1
  67. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-web-acl-config.js +21 -11
  68. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-web-acl-config.js.map +1 -1
  69. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-web-acl-creator.d.ts +11 -1
  70. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-web-acl-creator.d.ts.map +1 -1
  71. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-web-acl-creator.js +19 -2
  72. package/dist/service/wafv2/cfn/web-acl/sim-cfn-waf-web-acl-creator.js.map +1 -1
  73. package/dist/service/wafv2/command/web-acl/sim-wafv2-unsimulated-web-acl-input.d.ts +9 -0
  74. package/dist/service/wafv2/command/web-acl/sim-wafv2-unsimulated-web-acl-input.d.ts.map +1 -1
  75. package/dist/service/wafv2/command/web-acl/sim-wafv2-unsimulated-web-acl-input.js +9 -0
  76. package/dist/service/wafv2/command/web-acl/sim-wafv2-unsimulated-web-acl-input.js.map +1 -1
  77. package/dist/service/wafv2/sim-wafv2.d.ts +12 -0
  78. package/dist/service/wafv2/sim-wafv2.d.ts.map +1 -1
  79. package/dist/service/wafv2/sim-wafv2.js +17 -0
  80. package/dist/service/wafv2/sim-wafv2.js.map +1 -1
  81. package/dist/service/wafv2/web-acl/sim-waf-unevaluatable-rules.d.ts +26 -0
  82. package/dist/service/wafv2/web-acl/sim-waf-unevaluatable-rules.d.ts.map +1 -0
  83. package/dist/service/wafv2/web-acl/sim-waf-unevaluatable-rules.js +34 -0
  84. package/dist/service/wafv2/web-acl/sim-waf-unevaluatable-rules.js.map +1 -0
  85. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import type { SimCfnResource } from "../../../cloudformation/resource/sim-cfn-resource.js";
1
+ import type { SimCfnResource, SimCloudFormationResourceCreateContext } from "../../../cloudformation/resource/sim-cfn-resource.js";
2
2
  import type { SimCloudFront } from "../../sim-cloudfront.js";
3
3
  import type { SimCloudFrontDistribution } from "../../distribution/sim-cloudfront-distribution.js";
4
4
  import type { SimCfnTemplateValueRecord } from "../../../cloudformation/template/value/sim-cfn-template-value.js";
@@ -7,6 +7,12 @@ interface SimCfnCfDistroCreatorProperties {
7
7
  }
8
8
  /**
9
9
  * Creates simulated CloudFront Distributions from CloudFormation Resources.
10
+ *
11
+ * A `WebACLId` naming a web ACL this simulation does not hold is left out and
12
+ * recorded. CloudFront has no association Resource, so the reference lives on
13
+ * the Distribution itself, and refusing it would take the Distribution down
14
+ * over a web ACL that was never the point of the template. The site a local
15
+ * dev server and a suite of tests make requests to has to survive that.
10
16
  */
11
17
  export declare class SimCfnCfDistroCreator {
12
18
  private readonly cloudFront;
@@ -15,7 +21,7 @@ export declare class SimCfnCfDistroCreator {
15
21
  * Create a simulated CloudFront Distribution from an
16
22
  * AWS::CloudFront::Distribution Resource.
17
23
  */
18
- create(resource: SimCfnResource, properties: SimCfnTemplateValueRecord): Promise<SimCloudFrontDistribution>;
24
+ create(resource: SimCfnResource, properties: SimCfnTemplateValueRecord, context: SimCloudFormationResourceCreateContext): Promise<SimCloudFrontDistribution>;
19
25
  }
20
26
  export {};
21
27
  //# sourceMappingURL=sim-cfn-cf-distro-creator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sim-cfn-cf-distro-creator.d.ts","sourceRoot":"","sources":["../../../../../src/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mDAAmD,CAAC;AACnG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kEAAkE,CAAC;AAGlH,UAAU,+BAA+B;IACvC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;CACpC;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAE3C,YAAY,UAAU,EAAE,+BAA+B,EAEtD;IAED;;;OAGG;IACG,MAAM,CACV,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,yBAAyB,GACpC,OAAO,CAAC,yBAAyB,CAAC,CAsCpC;CACF"}
1
+ {"version":3,"file":"sim-cfn-cf-distro-creator.d.ts","sourceRoot":"","sources":["../../../../../src/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,sCAAsC,EACvC,MAAM,sDAAsD,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mDAAmD,CAAC;AACnG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kEAAkE,CAAC;AAIlH,UAAU,+BAA+B;IACvC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAE3C,YAAY,UAAU,EAAE,+BAA+B,EAEtD;IAED;;;OAGG;IACG,MAAM,CACV,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,yBAAyB,EACrC,OAAO,EAAE,sCAAsC,GAC9C,OAAO,CAAC,yBAAyB,CAAC,CAwCpC;CACF"}
@@ -1,7 +1,14 @@
1
1
  import { assertDefined, assertNotNull, } from "../../../../util/type-guard/defined.js";
2
2
  import { SimCfnCfDistroConfigValidator } from "./sim-cfn-cf-distro-config-validator.js";
3
+ import { simCfnCfDistroWithoutAbsentWebAcl } from "./sim-cfn-cf-distro-web-acl.js";
3
4
  /**
4
5
  * Creates simulated CloudFront Distributions from CloudFormation Resources.
6
+ *
7
+ * A `WebACLId` naming a web ACL this simulation does not hold is left out and
8
+ * recorded. CloudFront has no association Resource, so the reference lives on
9
+ * the Distribution itself, and refusing it would take the Distribution down
10
+ * over a web ACL that was never the point of the template. The site a local
11
+ * dev server and a suite of tests make requests to has to survive that.
5
12
  */
6
13
  export class SimCfnCfDistroCreator {
7
14
  cloudFront;
@@ -12,7 +19,7 @@ export class SimCfnCfDistroCreator {
12
19
  * Create a simulated CloudFront Distribution from an
13
20
  * AWS::CloudFront::Distribution Resource.
14
21
  */
15
- async create(resource, properties) {
22
+ async create(resource, properties, context) {
16
23
  const distributionConfigValue = properties["DistributionConfig"];
17
24
  assertDefined(distributionConfigValue, `AWS::CloudFront::Distribution ${resource.logicalId} DistributionConfig`);
18
25
  assertNotNull(distributionConfigValue, `AWS::CloudFront::Distribution ${resource.logicalId} DistributionConfig`);
@@ -20,10 +27,9 @@ export class SimCfnCfDistroCreator {
20
27
  logicalId: resource.logicalId,
21
28
  distributionConfig: distributionConfigValue,
22
29
  });
23
- const distributionConfig = validator.validate();
24
30
  const output = await this.cloudFront.createDistribution({
25
31
  input: {
26
- DistributionConfig: distributionConfig,
32
+ DistributionConfig: simCfnCfDistroWithoutAbsentWebAcl(resource, validator.validate(), context.simAws),
27
33
  },
28
34
  });
29
35
  const distributionId = output.Distribution?.Id;
@@ -1 +1 @@
1
- {"version":3,"file":"sim-cfn-cf-distro-creator.js","sourceRoot":"","sources":["../../../../../src/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,aAAa,GACd,MAAM,wCAAwC,CAAC;AAKhD,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AAMxF;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACf,UAAU,CAAgB;IAE3C,YAAY,UAA2C;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,QAAwB,EACxB,UAAqC;QAErC,MAAM,uBAAuB,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;QAEjE,aAAa,CACX,uBAAuB,EACvB,iCAAiC,QAAQ,CAAC,SAAS,qBAAqB,CACzE,CAAC;QACF,aAAa,CACX,uBAAuB,EACvB,iCAAiC,QAAQ,CAAC,SAAS,qBAAqB,CACzE,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;YAClD,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,kBAAkB,EAAE,uBAAuB;SAC5C,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QAEhD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;YACtD,KAAK,EAAE;gBACL,kBAAkB,EAAE,kBAAkB;aACvC;SACF,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;QAC/C,aAAa,CACX,cAAc,EACd,iCAAiC,QAAQ,CAAC,SAAS,0BAA0B,CAC9E,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAE5E,aAAa,CACX,YAAY,EACZ,wCAAwC,cAAc,yCAAyC,CAChG,CAAC;QAEF,OAAO,YAAY,CAAC;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"sim-cfn-cf-distro-creator.js","sourceRoot":"","sources":["../../../../../src/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,aAAa,GACd,MAAM,wCAAwC,CAAC;AAQhD,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AAMnF;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAqB;IACf,UAAU,CAAgB;IAE3C,YAAY,UAA2C;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,QAAwB,EACxB,UAAqC,EACrC,OAA+C;QAE/C,MAAM,uBAAuB,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;QAEjE,aAAa,CACX,uBAAuB,EACvB,iCAAiC,QAAQ,CAAC,SAAS,qBAAqB,CACzE,CAAC;QACF,aAAa,CACX,uBAAuB,EACvB,iCAAiC,QAAQ,CAAC,SAAS,qBAAqB,CACzE,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;YAClD,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,kBAAkB,EAAE,uBAAuB;SAC5C,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;YACtD,KAAK,EAAE;gBACL,kBAAkB,EAAE,iCAAiC,CACnD,QAAQ,EACR,SAAS,CAAC,QAAQ,EAAE,EACpB,OAAO,CAAC,MAAM,CACf;aACF;SACF,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;QAC/C,aAAa,CACX,cAAc,EACd,iCAAiC,QAAQ,CAAC,SAAS,0BAA0B,CAC9E,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAE5E,aAAa,CACX,YAAY,EACZ,wCAAwC,cAAc,yCAAyC,CAChG,CAAC;QAEF,OAAO,YAAY,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { SimAws } from "../../../aws/sim-aws.js";
2
+ import type { SimCfnResource } from "../../../cloudformation/resource/sim-cfn-resource.js";
3
+ import type { SimCloudFrontDistributionConfig } from "../../command/create-distribution/create-distribution.command.js";
4
+ /**
5
+ * The DistributionConfig to deploy, without a `WebACLId` naming a web ACL this
6
+ * simulation does not hold.
7
+ *
8
+ * `CreateDistribution` refuses such a `WebACLId`, as real CloudFront refuses
9
+ * one, and a Distribution deployed from a template is the one place that
10
+ * refusal costs more than it is worth. A stack naming a web ACL from a real
11
+ * account is ordinary. So is one whose web ACL lost a rule this simulation
12
+ * cannot evaluate. Neither says anything about the site the Distribution
13
+ * serves, and a Distribution that failed to deploy takes every request a local
14
+ * dev server and a test suite make with it.
15
+ *
16
+ * So the property is left out and recorded on `stack.ignoredProperties`. The
17
+ * Distribution deploys and serves every request, including the ones the web
18
+ * ACL was written to block. A test that cares reads the record.
19
+ *
20
+ * A `WebACLId` naming a web ACL that is here goes through untouched, wrong
21
+ * scope and all, so a `REGIONAL` web ACL on a Distribution still fails the
22
+ * deployment the way real CloudFront fails it.
23
+ */
24
+ export declare function simCfnCfDistroWithoutAbsentWebAcl(resource: SimCfnResource, distributionConfig: SimCloudFrontDistributionConfig, simAws: SimAws): SimCloudFrontDistributionConfig;
25
+ //# sourceMappingURL=sim-cfn-cf-distro-web-acl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sim-cfn-cf-distro-web-acl.d.ts","sourceRoot":"","sources":["../../../../../src/service/cloudfront/cfn/distro/sim-cfn-cf-distro-web-acl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AAIxH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,cAAc,EACxB,kBAAkB,EAAE,+BAA+B,EACnD,MAAM,EAAE,MAAM,GACb,+BAA+B,CAmBjC"}
@@ -0,0 +1,36 @@
1
+ import { simCfWebAclArn } from "../../web-acl/sim-cf-distribution-web-acl.js";
2
+ import { makeSimCfWebAclResolver } from "../../web-acl/sim-cf-web-acl-resolver.factory.js";
3
+ /**
4
+ * The DistributionConfig to deploy, without a `WebACLId` naming a web ACL this
5
+ * simulation does not hold.
6
+ *
7
+ * `CreateDistribution` refuses such a `WebACLId`, as real CloudFront refuses
8
+ * one, and a Distribution deployed from a template is the one place that
9
+ * refusal costs more than it is worth. A stack naming a web ACL from a real
10
+ * account is ordinary. So is one whose web ACL lost a rule this simulation
11
+ * cannot evaluate. Neither says anything about the site the Distribution
12
+ * serves, and a Distribution that failed to deploy takes every request a local
13
+ * dev server and a test suite make with it.
14
+ *
15
+ * So the property is left out and recorded on `stack.ignoredProperties`. The
16
+ * Distribution deploys and serves every request, including the ones the web
17
+ * ACL was written to block. A test that cares reads the record.
18
+ *
19
+ * A `WebACLId` naming a web ACL that is here goes through untouched, wrong
20
+ * scope and all, so a `REGIONAL` web ACL on a Distribution still fails the
21
+ * deployment the way real CloudFront fails it.
22
+ */
23
+ export function simCfnCfDistroWithoutAbsentWebAcl(resource, distributionConfig, simAws) {
24
+ const webAclArn = simCfWebAclArn(distributionConfig);
25
+ if (webAclArn === undefined) {
26
+ return distributionConfig;
27
+ }
28
+ if (makeSimCfWebAclResolver(simAws)(webAclArn) !== undefined) {
29
+ return distributionConfig;
30
+ }
31
+ resource.ignoreProperty("DistributionConfig.WebACLId", `web ACL ${webAclArn} is not held by this simulation, so the ` +
32
+ `Distribution is deployed with nothing in front of it and serves every ` +
33
+ `request that web ACL would have decided`);
34
+ return { ...distributionConfig, WebACLId: undefined };
35
+ }
36
+ //# sourceMappingURL=sim-cfn-cf-distro-web-acl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sim-cfn-cf-distro-web-acl.js","sourceRoot":"","sources":["../../../../../src/service/cloudfront/cfn/distro/sim-cfn-cf-distro-web-acl.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,iCAAiC,CAC/C,QAAwB,EACxB,kBAAmD,EACnD,MAAc;IAEd,MAAM,SAAS,GAAG,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAErD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;QAC7D,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,cAAc,CACrB,6BAA6B,EAC7B,WAAW,SAAS,0CAA0C;QAC5D,wEAAwE;QACxE,yCAAyC,CAC5C,CAAC;IAEF,OAAO,EAAE,GAAG,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACxD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sim-cfn-cloudfront-resource-factory.d.ts","sourceRoot":"","sources":["../../../../src/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wEAAwE,CAAC;AAC3H,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EACV,cAAc,EACd,sCAAsC,EACvC,MAAM,mDAAmD,CAAC;AAU3D;;GAEG;AACH,qBAAa,0CAA2C,YAAW,4BAA4B;IAC7F,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAuC;IACpF,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAqC;IAChF,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA+B;IAEpE,YAAY,UAAU,EAAE,aAAa,EAapC;IAED;;OAEG;IACG,MAAM,CACV,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,sCAAsC,GAC9C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuC7B;IAED;;;OAGG;IACG,MAAM,CACV,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Bf;YAEa,cAAc;CAa7B"}
1
+ {"version":3,"file":"sim-cfn-cloudfront-resource-factory.d.ts","sourceRoot":"","sources":["../../../../src/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wEAAwE,CAAC;AAC3H,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EACV,cAAc,EACd,sCAAsC,EACvC,MAAM,mDAAmD,CAAC;AAU3D;;GAEG;AACH,qBAAa,0CAA2C,YAAW,4BAA4B;IAC7F,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAuC;IACpF,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAqC;IAChF,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA+B;IAEpE,YAAY,UAAU,EAAE,aAAa,EAapC;IAED;;OAEG;IACG,MAAM,CACV,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,sCAAsC,GAC9C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAyB7B;IAED;;;OAGG;IACG,MAAM,CACV,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Bf;YAEa,cAAc;CAa7B"}
@@ -34,21 +34,22 @@ export class SimCloudFrontCloudFormationResourceFactory {
34
34
  * Create a simulated CloudFront resource from a CloudFormation Resource.
35
35
  */
36
36
  async create(resourceTypeName, resource, context) {
37
+ const properties = context.resolvedProperties ?? resource.properties;
37
38
  switch (resourceTypeName) {
38
39
  case "Distribution": {
39
- return await this.distroCreator.create(resource, context.resolvedProperties ?? resource.properties);
40
+ return await this.distroCreator.create(resource, properties, context);
40
41
  }
41
42
  case "Function": {
42
- return await this.functionCreator.create(resource, context.resolvedProperties ?? resource.properties, context);
43
+ return await this.functionCreator.create(resource, properties, context);
43
44
  }
44
45
  case "ResponseHeadersPolicy": {
45
- return this.responseHeadersPolicyCreator.create(resource, context.resolvedProperties ?? resource.properties);
46
+ return this.responseHeadersPolicyCreator.create(resource, properties);
46
47
  }
47
48
  case "OriginAccessControl": {
48
- return this.originAccessControlCreator.create(resource, context.resolvedProperties ?? resource.properties);
49
+ return this.originAccessControlCreator.create(resource, properties);
49
50
  }
50
51
  case "KeyValueStore": {
51
- return await this.keyValueStoreCreator.create(resource, context.resolvedProperties ?? resource.properties);
52
+ return await this.keyValueStoreCreator.create(resource, properties);
52
53
  }
53
54
  default: {
54
55
  throw new Error(`Unsupported sim CloudFront CloudFormation Resource ${resourceTypeName}`);
@@ -1 +1 @@
1
- {"version":3,"file":"sim-cfn-cloudfront-resource-factory.js","sourceRoot":"","sources":["../../../../src/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,oCAAoC,EAAE,MAAM,2DAA2D,CAAC;AACjH,OAAO,EAAE,kCAAkC,EAAE,MAAM,mDAAmD,CAAC;AACvG,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE;;GAEG;AACH,MAAM,OAAO,0CAA0C;IACpC,UAAU,CAAgB;IAC1B,aAAa,CAAwB;IACrC,eAAe,CAAmB;IAClC,aAAa,CAAwB;IACrC,4BAA4B,CAAuC;IACnE,0BAA0B,CAAqC;IAC/D,oBAAoB,CAA+B;IAEpE,YAAY,UAAyB;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAqB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,GAAG,IAAI,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAqB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,4BAA4B;YAC/B,IAAI,oCAAoC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,0BAA0B,GAAG,IAAI,kCAAkC,CAAC;YACvE,UAAU;SACX,CAAC,CAAC;QACH,IAAI,CAAC,oBAAoB,GAAG,IAAI,4BAA4B,CAAC;YAC3D,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,gBAAwB,EACxB,QAAwB,EACxB,OAA+C;QAE/C,QAAQ,gBAAgB,EAAE,CAAC;YACzB,KAAK,cAAc,EAAE,CAAC;gBACpB,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CACpC,QAAQ,EACR,OAAO,CAAC,kBAAkB,IAAI,QAAQ,CAAC,UAAU,CAClD,CAAC;YACJ,CAAC;YACD,KAAK,UAAU,EAAE,CAAC;gBAChB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CACtC,QAAQ,EACR,OAAO,CAAC,kBAAkB,IAAI,QAAQ,CAAC,UAAU,EACjD,OAAO,CACR,CAAC;YACJ,CAAC;YACD,KAAK,uBAAuB,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAC7C,QAAQ,EACR,OAAO,CAAC,kBAAkB,IAAI,QAAQ,CAAC,UAAU,CAClD,CAAC;YACJ,CAAC;YACD,KAAK,qBAAqB,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAC3C,QAAQ,EACR,OAAO,CAAC,kBAAkB,IAAI,QAAQ,CAAC,UAAU,CAClD,CAAC;YACJ,CAAC;YACD,KAAK,eAAe,EAAE,CAAC;gBACrB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAC3C,QAAQ,EACR,OAAO,CAAC,kBAAkB,IAAI,QAAQ,CAAC,UAAU,CAClD,CAAC;YACJ,CAAC;YACD,SAAS,CAAC;gBACR,MAAM,IAAI,KAAK,CACb,sDAAsD,gBAAgB,EAAE,CACzE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,gBAAwB,EACxB,QAAwB;QAExB,QAAQ,gBAAgB,EAAE,CAAC;YACzB,KAAK,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,KAAK,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YACD,KAAK,uBAAuB,EAAE,CAAC;gBAC7B,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YACD,KAAK,qBAAqB,EAAE,CAAC;gBAC3B,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YACD,KAAK,eAAe,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YACD,SAAS,CAAC;gBACR,MAAM,IAAI,KAAK,CACb,sDAAsD,gBAAgB,WAAW,CAClF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAwB;QACnD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAEvB,CAAC;QACd,aAAa,CACX,kBAAkB,EAClB,uDAAuD,QAAQ,CAAC,SAAS,EAAE,CAC5E,CAAC;QAEF,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;YACnC,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"sim-cfn-cloudfront-resource-factory.js","sourceRoot":"","sources":["../../../../src/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ interface ListObjectsAuthorizerProperties {
7
7
  interface ListObjectsAuthorizationInput {
8
8
  readonly bucket: SimS3Bucket;
9
9
  readonly prefix?: string | undefined;
10
+ readonly delimiter?: string | undefined;
10
11
  readonly maxKeys: number;
11
12
  readonly options?: SimS3RequestOptions | undefined;
12
13
  }
@@ -17,10 +18,11 @@ interface ListObjectsAuthorizationInput {
17
18
  * action. The resource is the Bucket ARN because listing examines a Bucket's
18
19
  * key namespace rather than reading any individual Object.
19
20
  *
20
- * Prefix and maximum-result constraints are request attributes used by IAM
21
- * policies to limit which listings a principal may perform. They are supplied
22
- * as S3 condition keys so policy evaluation can distinguish, for example, a
23
- * permitted app prefix from a restricted private prefix.
21
+ * Prefix, delimiter and maximum-result constraints are request attributes used
22
+ * by IAM policies to limit which listings a principal may perform. They are
23
+ * supplied as S3 condition keys so policy evaluation can distinguish, for
24
+ * example, a permitted app prefix from a restricted private prefix, or a
25
+ * listing of one folder from a listing of a whole Bucket.
24
26
  */
25
27
  export declare class ListObjectsAuthorizer {
26
28
  private static readonly action;
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects-authorizer.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-authorizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wDAAwD,CAAC;AAEtG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,UAAU,+BAA+B;IACvC,QAAQ,CAAC,GAAG,EAAE,uBAAuB,CAAC;CACvC;AAED,UAAU,6BAA6B;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACpD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAEjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0B;IAE9C,YAAY,UAAU,EAAE,+BAA+B,EAEtD;IAED;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,6BAA6B,GAAG,IAAI,CA+BpD;CACF"}
1
+ {"version":3,"file":"list-objects-authorizer.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-authorizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wDAAwD,CAAC;AAEtG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,UAAU,+BAA+B;IACvC,QAAQ,CAAC,GAAG,EAAE,uBAAuB,CAAC;CACvC;AAED,UAAU,6BAA6B;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACpD;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAEjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0B;IAE9C,YAAY,UAAU,EAAE,+BAA+B,EAEtD;IAED;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,6BAA6B,GAAG,IAAI,CAgCpD;CACF"}
@@ -7,10 +7,11 @@ import { simS3ConditionContext } from "../authorize/sim-s3-condition-context.js"
7
7
  * action. The resource is the Bucket ARN because listing examines a Bucket's
8
8
  * key namespace rather than reading any individual Object.
9
9
  *
10
- * Prefix and maximum-result constraints are request attributes used by IAM
11
- * policies to limit which listings a principal may perform. They are supplied
12
- * as S3 condition keys so policy evaluation can distinguish, for example, a
13
- * permitted app prefix from a restricted private prefix.
10
+ * Prefix, delimiter and maximum-result constraints are request attributes used
11
+ * by IAM policies to limit which listings a principal may perform. They are
12
+ * supplied as S3 condition keys so policy evaluation can distinguish, for
13
+ * example, a permitted app prefix from a restricted private prefix, or a
14
+ * listing of one folder from a listing of a whole Bucket.
14
15
  */
15
16
  export class ListObjectsAuthorizer {
16
17
  static action = "s3:ListBucket";
@@ -31,6 +32,7 @@ export class ListObjectsAuthorizer {
31
32
  conditionContext: {
32
33
  ...simS3ConditionContext(input.options),
33
34
  "s3:prefix": input.prefix ?? "",
35
+ "s3:delimiter": input.delimiter ?? "",
34
36
  "s3:max-keys": input.maxKeys,
35
37
  },
36
38
  resourcePolicies: policy === undefined
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects-authorizer.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-authorizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAcjF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,qBAAqB;IACxB,MAAM,CAAU,MAAM,GAAG,eAAe,CAAC;IAEhC,GAAG,CAA0B;IAE9C,YAAY,UAA2C;QACrD,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAoC;QAC5C,MAAM,QAAQ,GAAG,gBAAgB,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAClC,MAAM,EAAE,qBAAqB,CAAC,MAAM;YACpC,QAAQ;YACR,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM;YAC7B,gBAAgB,EAAE;gBAChB,GAAG,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC;gBACvC,WAAW,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;gBAC/B,aAAa,EAAE,KAAK,CAAC,OAAO;aAC7B;YACD,gBAAgB,EACd,MAAM,KAAK,SAAS;gBAClB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE;wBACE,QAAQ,EAAE,MAAM;wBAChB,UAAU,EAAE,cAAc;wBAC1B,WAAW,EAAE,QAAQ;qBACtB;iBACF;SACR,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,kBAAkB,CAAC;gBAC3B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;gBACpC,MAAM,EAAE,qBAAqB,CAAC,MAAM;gBACpC,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"list-objects-authorizer.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-authorizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAejF;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,qBAAqB;IACxB,MAAM,CAAU,MAAM,GAAG,eAAe,CAAC;IAEhC,GAAG,CAA0B;IAE9C,YAAY,UAA2C;QACrD,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAoC;QAC5C,MAAM,QAAQ,GAAG,gBAAgB,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAClC,MAAM,EAAE,qBAAqB,CAAC,MAAM;YACpC,QAAQ;YACR,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM;YAC7B,gBAAgB,EAAE;gBAChB,GAAG,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC;gBACvC,WAAW,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;gBAC/B,cAAc,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;gBACrC,aAAa,EAAE,KAAK,CAAC,OAAO;aAC7B;YACD,gBAAgB,EACd,MAAM,KAAK,SAAS;gBAClB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE;wBACE,QAAQ,EAAE,MAAM;wBAChB,UAAU,EAAE,cAAc;wBAC1B,WAAW,EAAE,QAAQ;qBACtB;iBACF;SACR,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,kBAAkB,CAAC;gBAC3B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;gBACpC,MAAM,EAAE,qBAAqB,CAAC,MAAM;gBACpC,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
@@ -3,6 +3,7 @@ import type { SimListObjectsCommandOutput } from "./list-objects.command.js";
3
3
  interface ListObjectsPageInput {
4
4
  readonly bucket: SimS3Bucket;
5
5
  readonly prefix?: string | undefined;
6
+ readonly delimiter?: string | undefined;
6
7
  readonly marker?: string | undefined;
7
8
  readonly maxKeys: number;
8
9
  }
@@ -17,8 +18,9 @@ interface ListObjectsPageInput {
17
18
  * operations differ in how a caller names where to resume rather than in which
18
19
  * keys a page holds. The marker is exclusive, so a page begins after it.
19
20
  *
20
- * NextMarker is returned only when another page exists and identifies the final
21
- * key in the current page.
21
+ * NextMarker is returned only when another page exists, and identifies the
22
+ * final entry in the current page. That entry is a common prefix where the
23
+ * page ended on one, and the marker steps over the whole rolled-up prefix.
22
24
  */
23
25
  export declare class ListObjectsPageBuilder {
24
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects-page-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-page-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAE7E,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACG,KAAK,CACT,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,2BAA2B,CAAC,CAiBtC;CACF"}
1
+ {"version":3,"file":"list-objects-page-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-page-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAIjE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAE7E,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACG,KAAK,CACT,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,2BAA2B,CAAC,CAqBtC;CACF"}
@@ -1,3 +1,4 @@
1
+ import { simS3CommonPrefixes } from "../../object/s3-common-prefix.js";
1
2
  import { simS3ObjectPage } from "../../object/s3-object-listing.js";
2
3
  import { simS3ObjectSummaries } from "../../object/s3-object-summary.js";
3
4
  /**
@@ -11,8 +12,9 @@ import { simS3ObjectSummaries } from "../../object/s3-object-summary.js";
11
12
  * operations differ in how a caller names where to resume rather than in which
12
13
  * keys a page holds. The marker is exclusive, so a page begins after it.
13
14
  *
14
- * NextMarker is returned only when another page exists and identifies the final
15
- * key in the current page.
15
+ * NextMarker is returned only when another page exists, and identifies the
16
+ * final entry in the current page. That entry is a common prefix where the
17
+ * page ended on one, and the marker steps over the whole rolled-up prefix.
16
18
  */
17
19
  export class ListObjectsPageBuilder {
18
20
  /**
@@ -21,13 +23,17 @@ export class ListObjectsPageBuilder {
21
23
  async build(input) {
22
24
  const page = simS3ObjectPage({
23
25
  objects: await input.bucket.listObjects(input.prefix),
26
+ prefix: input.prefix,
27
+ delimiter: input.delimiter,
24
28
  startAfter: input.marker,
25
29
  maxKeys: input.maxKeys,
26
30
  });
27
31
  return {
28
32
  Contents: simS3ObjectSummaries(page.objects),
33
+ CommonPrefixes: simS3CommonPrefixes(page.commonPrefixes),
29
34
  Name: input.bucket.bucketName,
30
35
  Prefix: input.prefix,
36
+ Delimiter: input.delimiter,
31
37
  Marker: input.marker,
32
38
  MaxKeys: input.maxKeys,
33
39
  IsTruncated: page.isTruncated,
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects-page-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-page-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAUzE;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,sBAAsB;IACjC;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,KAA2B;QAE3B,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,OAAO,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YACrD,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5C,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"list-objects-page-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects-page-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAWzE;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,sBAAsB;IACjC;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,KAA2B;QAE3B,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,OAAO,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YACrD,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5C,cAAc,EAAE,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC;YACxD,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import type { SimResponseMetadata } from "../../../aws/metadata/response-metadata.type.js";
2
+ import type { SimS3CommonPrefix } from "../../object/s3-common-prefix.js";
2
3
  import type { SimS3ObjectSummary } from "../../object/s3-object-summary.js";
3
4
  export type { SimS3ObjectSummary } from "../../object/s3-object-summary.js";
4
5
  /**
@@ -9,10 +10,14 @@ export interface SimListObjectsCommand {
9
10
  }
10
11
  /**
11
12
  * Minimal structural sim S3 ListObjects input.
13
+ *
14
+ * `Delimiter` rolls every key holding it after the `Prefix` up into a common
15
+ * prefix, which is how a Bucket is walked one folder at a time.
12
16
  */
13
17
  export interface SimListObjectsCommandInput {
14
18
  readonly Bucket?: string | undefined;
15
19
  readonly Prefix?: string | undefined;
20
+ readonly Delimiter?: string | undefined;
16
21
  readonly Marker?: string | undefined;
17
22
  readonly MaxKeys?: number | undefined;
18
23
  }
@@ -21,8 +26,10 @@ export interface SimListObjectsCommandInput {
21
26
  */
22
27
  export interface SimListObjectsCommandOutput {
23
28
  readonly Contents?: SimS3ObjectSummary[] | undefined;
29
+ readonly CommonPrefixes?: SimS3CommonPrefix[] | undefined;
24
30
  readonly Name?: string;
25
31
  readonly Prefix?: string | undefined;
32
+ readonly Delimiter?: string | undefined;
26
33
  readonly Marker?: string | undefined;
27
34
  readonly MaxKeys?: number;
28
35
  readonly IsTruncated?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E,YAAY,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC"}
1
+ {"version":3,"file":"list-objects.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E,YAAY,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EACV,qBAAqB,EACrB,2BAA2B,EAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wDAAwD,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,UAAU,mCAAmC;IAC3C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAC;CAC7C;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,YAAW,cAAc,CAC9D,qBAAqB,EACrB,2BAA2B,CAC5B;IACC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD,YAAY,UAAU,EAAE,mCAAmC,EAY1D;IAED;;;;;;OAMG;IACG,MAAM,CACV,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,2BAA2B,CAAC,CA8BtC;CACF"}
1
+ {"version":3,"file":"list-objects.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EACV,qBAAqB,EACrB,2BAA2B,EAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wDAAwD,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,UAAU,mCAAmC;IAC3C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAC;CAC7C;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,YAAW,cAAc,CAC9D,qBAAqB,EACrB,2BAA2B,CAC5B;IACC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD,YAAY,UAAU,EAAE,mCAAmC,EAY1D;IAED;;;;;;OAMG;IACG,MAAM,CACV,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,2BAA2B,CAAC,CAgCtC;CACF"}
@@ -44,12 +44,14 @@ export class ListObjectsCommandHandler {
44
44
  this.authorizer.authorize({
45
45
  bucket,
46
46
  prefix: command.input.Prefix,
47
+ delimiter: command.input.Delimiter,
47
48
  maxKeys,
48
49
  options,
49
50
  });
50
51
  return await this.pageBuilder.build({
51
52
  bucket,
52
53
  prefix: command.input.Prefix,
54
+ delimiter: command.input.Delimiter,
53
55
  marker: command.input.Marker,
54
56
  maxKeys,
55
57
  });
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAEL,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,kBAAkB,GAEnB,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAEpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AASxE;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IAInB,OAAO,CAAoC;IAC3C,UAAU,CAAwB;IAClC,WAAW,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC3C,UAAU,CAAsB;IAChC,OAAO,CAA2B;IAEnD,YAAY,UAA+C;QACzD,MAAM,EACJ,OAAO,EACP,GAAG,GAAG,IAAI,kBAAkB,EAAE,EAC9B,UAAU,GAAG,IAAI,eAAe,EAAE,EAClC,OAAO,GAAG,IAAI,wBAAwB,EAAE,GACzC,GAAG,UAAU,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,qBAAqB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,OAA8B,EAC9B,OAA6B;QAE7B,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QAEvE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAyB,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,uEAAuE;QACvE,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAEjC,MAAM,OAAO,GAAG,qBAAqB,CACnC,OAAO,CAAC,KAAK,CAAC,OAAO,EACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAC5B,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACxB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAClC,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"list-objects.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAEL,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,kBAAkB,GAEnB,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAEpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AASxE;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IAInB,OAAO,CAAoC;IAC3C,UAAU,CAAwB;IAClC,WAAW,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC3C,UAAU,CAAsB;IAChC,OAAO,CAA2B;IAEnD,YAAY,UAA+C;QACzD,MAAM,EACJ,OAAO,EACP,GAAG,GAAG,IAAI,kBAAkB,EAAE,EAC9B,UAAU,GAAG,IAAI,eAAe,EAAE,EAClC,OAAO,GAAG,IAAI,wBAAwB,EAAE,GACzC,GAAG,UAAU,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,qBAAqB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,OAA8B,EAC9B,OAA6B;QAE7B,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QAEvE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAyB,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,uEAAuE;QACvE,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAEjC,MAAM,OAAO,GAAG,qBAAqB,CACnC,OAAO,CAAC,KAAK,CAAC,OAAO,EACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAC5B,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACxB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;YAClC,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAClC,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;YAClC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -3,6 +3,7 @@ import type { SimListObjectsV2CommandOutput } from "./list-objects-v2.command.js
3
3
  interface ListObjectsV2PageInput {
4
4
  readonly bucket: SimS3Bucket;
5
5
  readonly prefix?: string | undefined;
6
+ readonly delimiter?: string | undefined;
6
7
  readonly continuationToken?: string | undefined;
7
8
  readonly startAfter?: string | undefined;
8
9
  readonly maxKeys: number;
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects-v2-page-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2-page-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAOjE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAElF,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAwB;IACnC;;OAEG;IACG,KAAK,CACT,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,6BAA6B,CAAC,CAsBxC;IAED,OAAO,CAAC,WAAW;CAKpB"}
1
+ {"version":3,"file":"list-objects-v2-page-builder.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2-page-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAQjE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAElF,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAwB;IACnC;;OAEG;IACG,KAAK,CACT,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,6BAA6B,CAAC,CA0BxC;IAED,OAAO,CAAC,WAAW;CAKpB"}
@@ -1,3 +1,4 @@
1
+ import { simS3CommonPrefixes } from "../../object/s3-common-prefix.js";
1
2
  import { simS3ObjectPage } from "../../object/s3-object-listing.js";
2
3
  import { simS3ObjectSummaries } from "../../object/s3-object-summary.js";
3
4
  import { simS3ContinuationToken, simS3ContinuationTokenKey, } from "./list-objects-v2-continuation-token.js";
@@ -21,15 +22,19 @@ export class ListObjectsV2PageBuilder {
21
22
  async build(input) {
22
23
  const page = simS3ObjectPage({
23
24
  objects: await input.bucket.listObjects(input.prefix),
25
+ prefix: input.prefix,
26
+ delimiter: input.delimiter,
24
27
  startAfter: this.resumeAfter(input),
25
28
  maxKeys: input.maxKeys,
26
29
  });
27
30
  return {
28
31
  Contents: simS3ObjectSummaries(page.objects),
32
+ CommonPrefixes: simS3CommonPrefixes(page.commonPrefixes),
29
33
  Name: input.bucket.bucketName,
30
34
  Prefix: input.prefix,
35
+ Delimiter: input.delimiter,
31
36
  MaxKeys: input.maxKeys,
32
- KeyCount: page.objects.length,
37
+ KeyCount: page.objects.length + page.commonPrefixes.length,
33
38
  IsTruncated: page.isTruncated,
34
39
  ContinuationToken: input.continuationToken,
35
40
  NextContinuationToken: page.resumeAfter === undefined
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects-v2-page-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2-page-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,yCAAyC,CAAC;AAWjD;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAwB;IACnC;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,KAA6B;QAE7B,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,OAAO,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YACrD,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACnC,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5C,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,qBAAqB,EACnB,IAAI,CAAC,WAAW,KAAK,SAAS;gBAC5B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC;YAC9C,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,KAA6B;QAC/C,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS;YAC1C,CAAC,CAAC,KAAK,CAAC,UAAU;YAClB,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzD,CAAC;CACF"}
1
+ {"version":3,"file":"list-objects-v2-page-builder.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2-page-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,yCAAyC,CAAC;AAYjD;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAwB;IACnC;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,KAA6B;QAE7B,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,OAAO,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YACrD,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACnC,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5C,cAAc,EAAE,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC;YACxD,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM;YAC1D,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,qBAAqB,EACnB,IAAI,CAAC,WAAW,KAAK,SAAS;gBAC5B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC;YAC9C,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,KAA6B;QAC/C,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS;YAC1C,CAAC,CAAC,KAAK,CAAC,UAAU;YAClB,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzD,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import type { SimResponseMetadata } from "../../../aws/metadata/response-metadata.type.js";
2
+ import type { SimS3CommonPrefix } from "../../object/s3-common-prefix.js";
2
3
  import type { SimS3ObjectSummary } from "../../object/s3-object-summary.js";
3
4
  /**
4
5
  * Minimal structural sim S3 ListObjectsV2 command.
@@ -10,11 +11,13 @@ export interface SimListObjectsV2Command {
10
11
  * Minimal structural sim S3 ListObjectsV2 input.
11
12
  *
12
13
  * `ContinuationToken` resumes a truncated listing and takes precedence over
13
- * `StartAfter`, which only positions the first page.
14
+ * `StartAfter`, which only positions the first page. `Delimiter` rolls every
15
+ * key holding it after the `Prefix` up into a common prefix.
14
16
  */
15
17
  export interface SimListObjectsV2CommandInput {
16
18
  readonly Bucket?: string | undefined;
17
19
  readonly Prefix?: string | undefined;
20
+ readonly Delimiter?: string | undefined;
18
21
  readonly MaxKeys?: number | undefined;
19
22
  readonly ContinuationToken?: string | undefined;
20
23
  readonly StartAfter?: string | undefined;
@@ -24,12 +27,15 @@ export interface SimListObjectsV2CommandInput {
24
27
  *
25
28
  * `KeyCount` is what makes this version worth using over the first: it says how
26
29
  * many keys came back without the caller having to measure `Contents`, which
27
- * may be absent rather than empty.
30
+ * may be absent rather than empty. It counts the common prefixes alongside the
31
+ * keys, as real S3 counts them.
28
32
  */
29
33
  export interface SimListObjectsV2CommandOutput {
30
34
  readonly Contents?: SimS3ObjectSummary[] | undefined;
35
+ readonly CommonPrefixes?: SimS3CommonPrefix[] | undefined;
31
36
  readonly Name?: string;
32
37
  readonly Prefix?: string | undefined;
38
+ readonly Delimiter?: string | undefined;
33
39
  readonly MaxKeys?: number;
34
40
  readonly KeyCount?: number;
35
41
  readonly IsTruncated?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects-v2.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;CAC9C;AAED;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC"}
1
+ {"version":3,"file":"list-objects-v2.command.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects-v2.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EACV,uBAAuB,EACvB,6BAA6B,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wDAAwD,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,UAAU,qCAAqC;IAC7C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAC;CAC7C;AAED;;;;;;;;;GASG;AACH,qBAAa,2BAA4B,YAAW,cAAc,CAChE,uBAAuB,EACvB,6BAA6B,CAC9B;IACC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD,YAAY,UAAU,EAAE,qCAAqC,EAY5D;IAED;;;;;;OAMG;IACG,MAAM,CACV,OAAO,EAAE,uBAAuB,EAChC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,6BAA6B,CAAC,CA+BxC;CACF"}
1
+ {"version":3,"file":"list-objects-v2.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EACV,uBAAuB,EACvB,6BAA6B,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wDAAwD,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,UAAU,qCAAqC;IAC7C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAC;CAC7C;AAED;;;;;;;;;GASG;AACH,qBAAa,2BAA4B,YAAW,cAAc,CAChE,uBAAuB,EACvB,6BAA6B,CAC9B;IACC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD,YAAY,UAAU,EAAE,qCAAqC,EAY5D;IAED;;;;;;OAMG;IACG,MAAM,CACV,OAAO,EAAE,uBAAuB,EAChC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,6BAA6B,CAAC,CAiCxC;CACF"}
@@ -49,12 +49,14 @@ export class ListObjectsV2CommandHandler {
49
49
  this.authorizer.authorize({
50
50
  bucket,
51
51
  prefix: command.input.Prefix,
52
+ delimiter: command.input.Delimiter,
52
53
  maxKeys,
53
54
  options,
54
55
  });
55
56
  return await this.pageBuilder.build({
56
57
  bucket,
57
58
  prefix: command.input.Prefix,
59
+ delimiter: command.input.Delimiter,
58
60
  continuationToken: command.input.ContinuationToken,
59
61
  startAfter: command.input.StartAfter,
60
62
  maxKeys,
@@ -1 +1 @@
1
- {"version":3,"file":"list-objects-v2.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2.handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAEL,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,kBAAkB,GAEnB,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAEpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAS7E;;;;;;;;;GASG;AACH,MAAM,OAAO,2BAA2B;IAIrB,OAAO,CAAoC;IAC3C,UAAU,CAAwB;IAClC,WAAW,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAC7C,UAAU,CAAsB;IAChC,OAAO,CAA2B;IAEnD,YAAY,UAAiD;QAC3D,MAAM,EACJ,OAAO,EACP,GAAG,GAAG,IAAI,kBAAkB,EAAE,EAC9B,UAAU,GAAG,IAAI,eAAe,EAAE,EAClC,OAAO,GAAG,IAAI,wBAAwB,EAAE,GACzC,GAAG,UAAU,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,qBAAqB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,OAAgC,EAChC,OAA6B;QAE7B,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;QAEzE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAyB,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,uEAAuE;QACvE,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAEjC,MAAM,OAAO,GAAG,qBAAqB,CACnC,OAAO,CAAC,KAAK,CAAC,OAAO,EACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAC5B,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACxB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAClC,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,iBAAiB;YAClD,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;YACpC,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"list-objects-v2.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects-v2/list-objects-v2.handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAEL,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,kBAAkB,GAEnB,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAEpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAS7E;;;;;;;;;GASG;AACH,MAAM,OAAO,2BAA2B;IAIrB,OAAO,CAAoC;IAC3C,UAAU,CAAwB;IAClC,WAAW,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAC7C,UAAU,CAAsB;IAChC,OAAO,CAA2B;IAEnD,YAAY,UAAiD;QAC3D,MAAM,EACJ,OAAO,EACP,GAAG,GAAG,IAAI,kBAAkB,EAAE,EAC9B,UAAU,GAAG,IAAI,eAAe,EAAE,EAClC,OAAO,GAAG,IAAI,wBAAwB,EAAE,GACzC,GAAG,UAAU,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,qBAAqB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,OAAgC,EAChC,OAA6B;QAE7B,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;QAEzE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAyB,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,uEAAuE;QACvE,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAEjC,MAAM,OAAO,GAAG,qBAAqB,CACnC,OAAO,CAAC,KAAK,CAAC,OAAO,EACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAC5B,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACxB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;YAClC,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAClC,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC5B,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;YAClC,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,iBAAiB;YAClD,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;YACpC,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * One folder of a Bucket, as a listing under a delimiter describes it.
3
+ *
4
+ * Both list operations answer with these. A common prefix stands in for every
5
+ * key beneath it, and carries no size, entity tag or timestamp of its own,
6
+ * because S3 stores no such folder.
7
+ */
8
+ export interface SimS3CommonPrefix {
9
+ readonly Prefix?: string;
10
+ }
11
+ /**
12
+ * Describe the prefixes a page rolled keys up into, or nothing when it rolled
13
+ * up none.
14
+ *
15
+ * Real S3 leaves `CommonPrefixes` out of a listing that rolled nothing up,
16
+ * matching the way it leaves `Contents` out of one that found no keys. A
17
+ * caller written against AWS reaches for `CommonPrefixes ?? []`, and answering
18
+ * with an empty array here would let one that skipped the guard pass a test
19
+ * and fail against AWS.
20
+ */
21
+ export declare function simS3CommonPrefixes(prefixes: readonly string[]): SimS3CommonPrefix[] | undefined;
22
+ //# sourceMappingURL=s3-common-prefix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-common-prefix.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-common-prefix.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,iBAAiB,EAAE,GAAG,SAAS,CAIjC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Describe the prefixes a page rolled keys up into, or nothing when it rolled
3
+ * up none.
4
+ *
5
+ * Real S3 leaves `CommonPrefixes` out of a listing that rolled nothing up,
6
+ * matching the way it leaves `Contents` out of one that found no keys. A
7
+ * caller written against AWS reaches for `CommonPrefixes ?? []`, and answering
8
+ * with an empty array here would let one that skipped the guard pass a test
9
+ * and fail against AWS.
10
+ */
11
+ export function simS3CommonPrefixes(prefixes) {
12
+ return prefixes.length === 0
13
+ ? undefined
14
+ : prefixes.map((prefix) => ({ Prefix: prefix }));
15
+ }
16
+ //# sourceMappingURL=s3-common-prefix.js.map