@kensio/yulin 1.10.3 → 1.10.4
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/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.d.ts.map +1 -1
- package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.js +7 -1
- package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.js.map +1 -1
- package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts +16 -0
- package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts.map +1 -1
- package/dist/service/s3/bucket/sim-s3-bucket-access.js +22 -1
- package/dist/service/s3/bucket/sim-s3-bucket-access.js.map +1 -1
- package/dist/service/s3/command/get-object/get-object-loader.d.ts +2 -1
- package/dist/service/s3/command/get-object/get-object-loader.d.ts.map +1 -1
- package/dist/service/s3/command/get-object/get-object-loader.js +5 -1
- package/dist/service/s3/command/get-object/get-object-loader.js.map +1 -1
- package/dist/service/s3/command/get-object/get-object.command.d.ts +5 -0
- package/dist/service/s3/command/get-object/get-object.command.d.ts.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts +3 -3
- package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects-page-builder.js +13 -17
- package/dist/service/s3/command/list-objects/list-objects-page-builder.js.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects.command.d.ts +3 -8
- package/dist/service/s3/command/list-objects/list-objects.command.d.ts.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects.handler.d.ts +3 -0
- package/dist/service/s3/command/list-objects/list-objects.handler.d.ts.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects.handler.js +6 -2
- package/dist/service/s3/command/list-objects/list-objects.handler.js.map +1 -1
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.d.ts +20 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.d.ts.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.js +29 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-continuation-token.js.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts +31 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js +48 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts +41 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.js +2 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.js.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.d.ts +41 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.d.ts.map +1 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js +64 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js.map +1 -0
- package/dist/service/s3/command/object/sim-s3-object-commands.d.ts +8 -0
- package/dist/service/s3/command/object/sim-s3-object-commands.d.ts.map +1 -1
- package/dist/service/s3/command/object/sim-s3-object-commands.js +13 -0
- package/dist/service/s3/command/object/sim-s3-object-commands.js.map +1 -1
- package/dist/service/s3/command/put-object/put-object-builder.d.ts +10 -0
- package/dist/service/s3/command/put-object/put-object-builder.d.ts.map +1 -1
- package/dist/service/s3/command/put-object/put-object-builder.js +8 -0
- package/dist/service/s3/command/put-object/put-object-builder.js.map +1 -1
- package/dist/service/s3/command/put-object/put-object.command.d.ts +4 -0
- package/dist/service/s3/command/put-object/put-object.command.d.ts.map +1 -1
- package/dist/service/s3/command/put-object/put-object.handler.d.ts.map +1 -1
- package/dist/service/s3/command/put-object/put-object.handler.js +4 -1
- package/dist/service/s3/command/put-object/put-object.handler.js.map +1 -1
- package/dist/service/s3/command/sim-s3-bucket-command-state.d.ts +4 -1
- package/dist/service/s3/command/sim-s3-bucket-command-state.d.ts.map +1 -1
- package/dist/service/s3/command/sim-s3-command.types.d.ts +2 -1
- package/dist/service/s3/command/sim-s3-command.types.d.ts.map +1 -1
- package/dist/service/s3/notification/event/sim-s3-object-event-builder.d.ts.map +1 -1
- package/dist/service/s3/notification/event/sim-s3-object-event-builder.js +1 -2
- package/dist/service/s3/notification/event/sim-s3-object-event-builder.js.map +1 -1
- package/dist/service/s3/object/s3-object-etag.d.ts +20 -0
- package/dist/service/s3/object/s3-object-etag.d.ts.map +1 -0
- package/dist/service/s3/object/s3-object-etag.js +25 -0
- package/dist/service/s3/object/s3-object-etag.js.map +1 -0
- package/dist/service/s3/object/s3-object-listing-limits.d.ts +26 -0
- package/dist/service/s3/object/s3-object-listing-limits.d.ts.map +1 -0
- package/dist/service/s3/object/s3-object-listing-limits.js +46 -0
- package/dist/service/s3/object/s3-object-listing-limits.js.map +1 -0
- package/dist/service/s3/object/s3-object-listing.d.ts +51 -0
- package/dist/service/s3/object/s3-object-listing.d.ts.map +1 -0
- package/dist/service/s3/object/s3-object-listing.js +64 -0
- package/dist/service/s3/object/s3-object-listing.js.map +1 -0
- package/dist/service/s3/object/s3-object-response-headers.d.ts +23 -6
- package/dist/service/s3/object/s3-object-response-headers.d.ts.map +1 -1
- package/dist/service/s3/object/s3-object-response-headers.js +18 -8
- package/dist/service/s3/object/s3-object-response-headers.js.map +1 -1
- package/dist/service/s3/object/s3-object-summary.d.ts +33 -0
- package/dist/service/s3/object/s3-object-summary.d.ts.map +1 -0
- package/dist/service/s3/object/s3-object-summary.js +40 -0
- package/dist/service/s3/object/s3-object-summary.js.map +1 -0
- package/dist/service/s3/object/s3-object.d.ts +25 -0
- package/dist/service/s3/object/s3-object.d.ts.map +1 -1
- package/dist/service/s3/object/s3-object.js +31 -1
- package/dist/service/s3/object/s3-object.js.map +1 -1
- package/dist/service/s3/sdk/sim-s3-sdk-command-router.d.ts.map +1 -1
- package/dist/service/s3/sdk/sim-s3-sdk-command-router.js +4 -0
- package/dist/service/s3/sdk/sim-s3-sdk-command-router.js.map +1 -1
- package/dist/service/s3/serve/sim-s3-rest-object-reader.d.ts.map +1 -1
- package/dist/service/s3/serve/sim-s3-rest-object-reader.js +6 -1
- package/dist/service/s3/serve/sim-s3-rest-object-reader.js.map +1 -1
- package/dist/service/s3/serve/website/sim-s3-website-object-loader.d.ts.map +1 -1
- package/dist/service/s3/serve/website/sim-s3-website-object-loader.js +6 -1
- package/dist/service/s3/serve/website/sim-s3-website-object-loader.js.map +1 -1
- package/dist/service/s3/serve/website/sim-s3-website-object.d.ts +13 -4
- package/dist/service/s3/serve/website/sim-s3-website-object.d.ts.map +1 -1
- package/dist/service/s3/serve/website/sim-s3-website-object.js +15 -6
- package/dist/service/s3/serve/website/sim-s3-website-object.js.map +1 -1
- package/dist/service/s3/sim-s3-commands.d.ts +6 -0
- package/dist/service/s3/sim-s3-commands.d.ts.map +1 -1
- package/dist/service/s3/sim-s3-commands.js +2 -0
- package/dist/service/s3/sim-s3-commands.js.map +1 -1
- package/dist/service/s3/sim-s3.d.ts +24 -34
- package/dist/service/s3/sim-s3.d.ts.map +1 -1
- package/dist/service/s3/sim-s3.js +32 -40
- package/dist/service/s3/sim-s3.js.map +1 -1
- package/dist/service/s3/storage/filesystem/filesystem-path-exists.d.ts +8 -0
- package/dist/service/s3/storage/filesystem/filesystem-path-exists.d.ts.map +1 -1
- package/dist/service/s3/storage/filesystem/filesystem-path-exists.js +11 -1
- package/dist/service/s3/storage/filesystem/filesystem-path-exists.js.map +1 -1
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.d.ts +19 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.d.ts.map +1 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.js +55 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-file.js.map +1 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.d.ts +14 -4
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.d.ts.map +1 -1
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.js +27 -5
- package/dist/service/s3/storage/filesystem/s3-filesystem-object-keys.js.map +1 -1
- package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts +1 -2
- package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts.map +1 -1
- package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js +10 -36
- package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js.map +1 -1
- package/package.json +1 -1
- package/dist/service/s3/notification/event/sim-s3-object-etag.d.ts +0 -8
- package/dist/service/s3/notification/event/sim-s3-object-etag.d.ts.map +0 -1
- package/dist/service/s3/notification/event/sim-s3-object-etag.js +0 -11
- package/dist/service/s3/notification/event/sim-s3-object-etag.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-commands.d.ts","sourceRoot":"","sources":["../../../src/service/s3/sim-s3-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0DAA0D,CAAC;AACrG,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,sEAAsE,CAAC;AAEtH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,+DAA+D,CAAC;AAEnH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3-commands.d.ts","sourceRoot":"","sources":["../../../src/service/s3/sim-s3-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0DAA0D,CAAC;AACrG,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,sEAAsE,CAAC;AAEtH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,+DAA+D,CAAC;AAEnH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAE/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IACvD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IAChD,QAAQ,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,6BAA6B,CAAC;IAClE;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,UAAU,uBAAwB,SAAQ,eAAe;IACvD,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;IACtD,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;CACrD;AAED;;;;;;;GAOG;AACH,qBAAa,aAAa;IACxB,SAAgB,OAAO,EAAE,mBAAmB,CAAC;IAC7C,SAAgB,cAAc,EAAE,yBAAyB,CAAC;IAC1D,SAAgB,kBAAkB,EAAE,8BAA8B,CAAC;IACnE,SAAgB,aAAa,EAAE,yBAAyB,CAAC;IACzD,SAAgB,OAAO,EAAE,mBAAmB,CAAC;IAC7C,SAAgB,cAAc,EAAE,mBAAmB,CAAC;IAEpD,YAAY,UAAU,EAAE,uBAAuB,EA8B9C;CACF"}
|
|
@@ -7,6 +7,7 @@ import { SimS3ObjectCommands } from "./command/object/sim-s3-object-commands.js"
|
|
|
7
7
|
import { SimS3PublicAccessBlockCommands } from "./command/public-access-block/sim-s3-public-access-block-commands.js";
|
|
8
8
|
import { SimS3NoNotificationDestinations } from "./notification/destination/sim-s3-service-notification-destinations.js";
|
|
9
9
|
import { SimS3ObjectNotifier } from "./notification/sim-s3-object-notifier.js";
|
|
10
|
+
import { SimS3ObjectListingLimits } from "./object/s3-object-listing-limits.js";
|
|
10
11
|
/**
|
|
11
12
|
* The command areas of one simulated S3 scope, and the state they share.
|
|
12
13
|
*
|
|
@@ -34,6 +35,7 @@ export class SimS3Commands {
|
|
|
34
35
|
background,
|
|
35
36
|
notificationDestinations,
|
|
36
37
|
notifications: this.objectNotifier,
|
|
38
|
+
listing: new SimS3ObjectListingLimits(properties.maxKeysPerPage),
|
|
37
39
|
};
|
|
38
40
|
this.buckets = new SimS3BucketCommands({
|
|
39
41
|
...state,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-commands.js","sourceRoot":"","sources":["../../../src/service/s3/sim-s3-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,kBAAkB,GAEnB,MAAM,kDAAkD,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0DAA0D,CAAC;AACrG,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,sEAAsE,CAAC;AAGtH,OAAO,EAAE,+BAA+B,EAAE,MAAM,wEAAwE,CAAC;AACzH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3-commands.js","sourceRoot":"","sources":["../../../src/service/s3/sim-s3-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,kBAAkB,GAEnB,MAAM,kDAAkD,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0DAA0D,CAAC;AACrG,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,sEAAsE,CAAC;AAGtH,OAAO,EAAE,+BAA+B,EAAE,MAAM,wEAAwE,CAAC;AACzH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AA+BhF;;;;;;;GAOG;AACH,MAAM,OAAO,aAAa;IACR,OAAO,CAAsB;IAC7B,cAAc,CAA4B;IAC1C,kBAAkB,CAAiC;IACnD,aAAa,CAA4B;IACzC,OAAO,CAAsB;IAC7B,cAAc,CAAsB;IAEpD,YAAY,UAAmC;QAC7C,MAAM,EACJ,GAAG,GAAG,IAAI,kBAAkB,EAAE,EAC9B,UAAU,GAAG,IAAI,eAAe,EAAE,EAClC,wBAAwB,GAAG,IAAI,+BAA+B,EAAE,GACjE,GAAG,UAAU,CAAC;QAEf,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC;YAC5C,YAAY,EAAE,wBAAwB;YACtC,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,KAAK,GAA4B;YACrC,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,GAAG;YACH,UAAU;YACV,wBAAwB;YACxB,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,OAAO,EAAE,IAAI,wBAAwB,CAAC,UAAU,CAAC,cAAc,CAAC;SACjE,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAmB,CAAC;YACrC,GAAG,KAAK;YACR,kBAAkB,EAAE,UAAU,CAAC,kBAAkB;YACjD,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,kBAAkB,GAAG,IAAI,8BAA8B,CAAC,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,GAAG,IAAI,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -14,8 +14,6 @@ import type { SimS3MountFilesystemOptions } from "./mount/sim-s3-mount.type.js";
|
|
|
14
14
|
*/
|
|
15
15
|
export declare class SimS3 {
|
|
16
16
|
private readonly buckets;
|
|
17
|
-
private readonly accountRegionScope;
|
|
18
|
-
private readonly s3GlobalRegistry;
|
|
19
17
|
private readonly commands;
|
|
20
18
|
private readonly bucketAccess;
|
|
21
19
|
private readonly cfnFactory;
|
|
@@ -55,6 +53,16 @@ export declare class SimS3 {
|
|
|
55
53
|
deleteObjects(command: simS3Commands.SimDeleteObjectsCommand, options?: SimS3RequestOptions): Promise<simS3Commands.SimDeleteObjectsCommandOutput>;
|
|
56
54
|
/** Handle a List Objects Command from the SDK. */
|
|
57
55
|
listObjects(command: simS3Commands.SimListObjectsCommand, options?: SimS3RequestOptions): Promise<simS3Commands.SimListObjectsCommandOutput>;
|
|
56
|
+
/** Handle a List Objects V2 Command from the SDK. */
|
|
57
|
+
listObjectsV2(command: simS3Commands.SimListObjectsV2Command, options?: SimS3RequestOptions): Promise<simS3Commands.SimListObjectsV2CommandOutput>;
|
|
58
|
+
/**
|
|
59
|
+
* Change how many keys one page of an Object listing holds, which real S3
|
|
60
|
+
* fixes at a thousand.
|
|
61
|
+
*
|
|
62
|
+
* Lowering it is how a test gets a caller to walk a continuation without
|
|
63
|
+
* storing a thousand and one Objects to provoke one.
|
|
64
|
+
*/
|
|
65
|
+
configureMaxKeysPerPage(maxKeys: number): void;
|
|
58
66
|
/** Get a simulated S3 Bucket instance by name. */
|
|
59
67
|
getSimBucketByName(bucketName: SimS3BucketName | string): SimS3Bucket | undefined;
|
|
60
68
|
/**
|
|
@@ -64,11 +72,8 @@ export declare class SimS3 {
|
|
|
64
72
|
*/
|
|
65
73
|
getNotificationDeliveryFailures(): readonly SimS3NotificationDeliveryFailure[];
|
|
66
74
|
/**
|
|
67
|
-
* Get the simulated S3 REST API endpoint URL for this Region
|
|
68
|
-
*
|
|
69
|
-
* This is the endpoint an AWS SDK S3 client is configured with, so that the
|
|
70
|
-
* client, and the presigner built on it, address simulated S3 the same way
|
|
71
|
-
* they address the real thing.
|
|
75
|
+
* Get the simulated S3 REST API endpoint URL for this Region, which is what
|
|
76
|
+
* an AWS SDK S3 client, and the presigner built on it, is configured with.
|
|
72
77
|
*/
|
|
73
78
|
getServiceUrl(): URL;
|
|
74
79
|
/** Get the simulated S3 REST API endpoint URL for one Bucket. */
|
|
@@ -80,42 +85,27 @@ export declare class SimS3 {
|
|
|
80
85
|
*/
|
|
81
86
|
findBucketScope(bucketName: SimS3BucketName | string): SimAwsAccountRegionScope | undefined;
|
|
82
87
|
/**
|
|
83
|
-
* Have a simulated S3 Bucket use a local filesystem directory for storage
|
|
84
|
-
*
|
|
85
|
-
* Passing somewhere to reload, as `{ reload: srv }`, also watches the
|
|
86
|
-
* directory: a build that writes into it reloads the connected browsers once
|
|
87
|
-
* the writes stop, without the Bucket having to be filled again.
|
|
88
|
+
* Have a simulated S3 Bucket use a local filesystem directory for storage,
|
|
89
|
+
* watching it when `{ reload: srv }` says where to reload.
|
|
88
90
|
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* Objects the mount replaced: a CDK `BucketDeployment` into the same Bucket
|
|
92
|
-
* says what it publishes, which is how a mounted directory of brotli files
|
|
93
|
-
* keeps its `content-encoding`. `systemMetadata` declares the rest for a key
|
|
94
|
-
* prefix, and goes over the top of anything inherited.
|
|
91
|
+
* See `SimS3BucketAccess.mountFilesystem`, which describes what a mounted
|
|
92
|
+
* directory does about the metadata a file cannot carry.
|
|
95
93
|
*/
|
|
96
94
|
mountBucketFilesystem(bucketName: SimS3BucketName | string, directoryPath: string, options?: SimS3MountFilesystemOptions): void;
|
|
97
|
-
/**
|
|
98
|
-
* The mounted directories being watched for changes.
|
|
99
|
-
*
|
|
100
|
-
* A directory mounted with somewhere to reload is watched from then on, and
|
|
101
|
-
* a build in it reloads the browser rather than restarting anything.
|
|
102
|
-
*/
|
|
95
|
+
/** The mounted directories being watched for changes. */
|
|
103
96
|
watchedMountedDirectories(): readonly string[];
|
|
104
|
-
/**
|
|
105
|
-
* Stop watching mounted directories.
|
|
106
|
-
*
|
|
107
|
-
* A watch holds an open filesystem handle, so a process with one open does
|
|
108
|
-
* not exit on its own. A dev process wants exactly that and never calls this;
|
|
109
|
-
* anything with an end, such as a test, calls it when it is done.
|
|
110
|
-
*/
|
|
97
|
+
/** Stop watching mounted directories, as `close` does. */
|
|
111
98
|
stopWatchingMountedDirectories(): void;
|
|
112
99
|
/**
|
|
113
100
|
* Let go of everything this simulated S3 is holding open.
|
|
114
101
|
*
|
|
115
102
|
* The mounted directory watches, which is what `SimAws.close()` reaches to
|
|
116
|
-
* release when a simulated environment is closed as a whole.
|
|
117
|
-
*
|
|
118
|
-
*
|
|
103
|
+
* release when a simulated environment is closed as a whole. A watch holds an
|
|
104
|
+
* open filesystem handle, so a process with one open does not exit on its
|
|
105
|
+
* own: a dev process wants exactly that, and anything with an end, such as a
|
|
106
|
+
* test, closes when it is done. The Buckets and the Objects in them are left
|
|
107
|
+
* where they are, mounts included: this is the open filesystem handles going,
|
|
108
|
+
* not the storage behind them.
|
|
119
109
|
*/
|
|
120
110
|
close(): void;
|
|
121
111
|
/** Get this service's CloudFormation Resource factory. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3.d.ts","sourceRoot":"","sources":["../../../src/service/s3/sim-s3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,KAAK,aAAa,MAAM,mCAAmC,CAAC;AAExE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3.d.ts","sourceRoot":"","sources":["../../../src/service/s3/sim-s3.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { SimS3GlobalRegistry } from "./sim-s3-global-registry.js";
|
|
2
2
|
import { SimS3BucketAccess } from "./bucket/sim-s3-bucket-access.js";
|
|
3
|
-
import { simS3ServiceUrl } from "./bucket/sim-s3-endpoint-url.js";
|
|
4
3
|
import { SimS3CloudFormationResourceFactory } from "./cfn/sim-cfn-s3-resource-factory.js";
|
|
5
4
|
import { simAwsAccountRegionScopeFactory } from "../aws/sim-aws-account-region-scope.factory.js";
|
|
6
5
|
import { SimS3Commands } from "./sim-s3-commands.js";
|
|
@@ -12,16 +11,12 @@ import { SimS3SdkCommandRouter } from "./sdk/sim-s3-sdk-command-router.js";
|
|
|
12
11
|
*/
|
|
13
12
|
export class SimS3 {
|
|
14
13
|
buckets = new Map();
|
|
15
|
-
accountRegionScope;
|
|
16
|
-
s3GlobalRegistry;
|
|
17
14
|
commands;
|
|
18
15
|
bucketAccess;
|
|
19
16
|
cfnFactory = new SimS3CloudFormationResourceFactory(this);
|
|
20
17
|
sdkRouter = new SimS3SdkCommandRouter(this);
|
|
21
18
|
constructor(properties = {}) {
|
|
22
19
|
const { accountRegionScope = simAwsAccountRegionScopeFactory.make(), s3GlobalRegistry = new SimS3GlobalRegistry(), } = properties;
|
|
23
|
-
this.accountRegionScope = accountRegionScope;
|
|
24
|
-
this.s3GlobalRegistry = s3GlobalRegistry;
|
|
25
20
|
this.commands = new SimS3Commands({
|
|
26
21
|
...properties,
|
|
27
22
|
accountRegionScope,
|
|
@@ -31,6 +26,7 @@ export class SimS3 {
|
|
|
31
26
|
this.bucketAccess = new SimS3BucketAccess({
|
|
32
27
|
buckets: this.buckets,
|
|
33
28
|
accountRegionScope,
|
|
29
|
+
s3GlobalRegistry,
|
|
34
30
|
});
|
|
35
31
|
}
|
|
36
32
|
/** Handle a Create Bucket Command from the SDK. */
|
|
@@ -101,9 +97,23 @@ export class SimS3 {
|
|
|
101
97
|
async listObjects(command, options) {
|
|
102
98
|
return await this.commands.objects.list(command, options);
|
|
103
99
|
}
|
|
100
|
+
/** Handle a List Objects V2 Command from the SDK. */
|
|
101
|
+
async listObjectsV2(command, options) {
|
|
102
|
+
return await this.commands.objects.listV2(command, options);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Change how many keys one page of an Object listing holds, which real S3
|
|
106
|
+
* fixes at a thousand.
|
|
107
|
+
*
|
|
108
|
+
* Lowering it is how a test gets a caller to walk a continuation without
|
|
109
|
+
* storing a thousand and one Objects to provoke one.
|
|
110
|
+
*/
|
|
111
|
+
configureMaxKeysPerPage(maxKeys) {
|
|
112
|
+
this.commands.objects.configureMaxKeysPerPage(maxKeys);
|
|
113
|
+
}
|
|
104
114
|
/** Get a simulated S3 Bucket instance by name. */
|
|
105
115
|
getSimBucketByName(bucketName) {
|
|
106
|
-
return this.
|
|
116
|
+
return this.bucketAccess.find(bucketName);
|
|
107
117
|
}
|
|
108
118
|
/**
|
|
109
119
|
* Get the Bucket event notifications this S3 could not deliver, which is the
|
|
@@ -114,14 +124,11 @@ export class SimS3 {
|
|
|
114
124
|
return this.commands.objectNotifier.deliveryFailures;
|
|
115
125
|
}
|
|
116
126
|
/**
|
|
117
|
-
* Get the simulated S3 REST API endpoint URL for this Region
|
|
118
|
-
*
|
|
119
|
-
* This is the endpoint an AWS SDK S3 client is configured with, so that the
|
|
120
|
-
* client, and the presigner built on it, address simulated S3 the same way
|
|
121
|
-
* they address the real thing.
|
|
127
|
+
* Get the simulated S3 REST API endpoint URL for this Region, which is what
|
|
128
|
+
* an AWS SDK S3 client, and the presigner built on it, is configured with.
|
|
122
129
|
*/
|
|
123
130
|
getServiceUrl() {
|
|
124
|
-
return
|
|
131
|
+
return this.bucketAccess.serviceUrl();
|
|
125
132
|
}
|
|
126
133
|
/** Get the simulated S3 REST API endpoint URL for one Bucket. */
|
|
127
134
|
getBucketUrl(bucketName) {
|
|
@@ -135,41 +142,23 @@ export class SimS3 {
|
|
|
135
142
|
* Find the Account Region scope for a globally registered simulated S3 Bucket.
|
|
136
143
|
*/
|
|
137
144
|
findBucketScope(bucketName) {
|
|
138
|
-
return this.
|
|
145
|
+
return this.bucketAccess.scopeOf(bucketName);
|
|
139
146
|
}
|
|
140
147
|
/**
|
|
141
|
-
* Have a simulated S3 Bucket use a local filesystem directory for storage
|
|
148
|
+
* Have a simulated S3 Bucket use a local filesystem directory for storage,
|
|
149
|
+
* watching it when `{ reload: srv }` says where to reload.
|
|
142
150
|
*
|
|
143
|
-
*
|
|
144
|
-
* directory
|
|
145
|
-
* the writes stop, without the Bucket having to be filled again.
|
|
146
|
-
*
|
|
147
|
-
* A file on disk carries no metadata, so an Object read out of one is
|
|
148
|
-
* described by its extension and by what the Bucket was told about the
|
|
149
|
-
* Objects the mount replaced: a CDK `BucketDeployment` into the same Bucket
|
|
150
|
-
* says what it publishes, which is how a mounted directory of brotli files
|
|
151
|
-
* keeps its `content-encoding`. `systemMetadata` declares the rest for a key
|
|
152
|
-
* prefix, and goes over the top of anything inherited.
|
|
151
|
+
* See `SimS3BucketAccess.mountFilesystem`, which describes what a mounted
|
|
152
|
+
* directory does about the metadata a file cannot carry.
|
|
153
153
|
*/
|
|
154
154
|
mountBucketFilesystem(bucketName, directoryPath, options = {}) {
|
|
155
155
|
this.bucketAccess.mountFilesystem(bucketName, directoryPath, options);
|
|
156
156
|
}
|
|
157
|
-
/**
|
|
158
|
-
* The mounted directories being watched for changes.
|
|
159
|
-
*
|
|
160
|
-
* A directory mounted with somewhere to reload is watched from then on, and
|
|
161
|
-
* a build in it reloads the browser rather than restarting anything.
|
|
162
|
-
*/
|
|
157
|
+
/** The mounted directories being watched for changes. */
|
|
163
158
|
watchedMountedDirectories() {
|
|
164
159
|
return this.bucketAccess.watchedMounts();
|
|
165
160
|
}
|
|
166
|
-
/**
|
|
167
|
-
* Stop watching mounted directories.
|
|
168
|
-
*
|
|
169
|
-
* A watch holds an open filesystem handle, so a process with one open does
|
|
170
|
-
* not exit on its own. A dev process wants exactly that and never calls this;
|
|
171
|
-
* anything with an end, such as a test, calls it when it is done.
|
|
172
|
-
*/
|
|
161
|
+
/** Stop watching mounted directories, as `close` does. */
|
|
173
162
|
stopWatchingMountedDirectories() {
|
|
174
163
|
this.bucketAccess.stopWatchingMounts();
|
|
175
164
|
}
|
|
@@ -177,9 +166,12 @@ export class SimS3 {
|
|
|
177
166
|
* Let go of everything this simulated S3 is holding open.
|
|
178
167
|
*
|
|
179
168
|
* The mounted directory watches, which is what `SimAws.close()` reaches to
|
|
180
|
-
* release when a simulated environment is closed as a whole.
|
|
181
|
-
*
|
|
182
|
-
*
|
|
169
|
+
* release when a simulated environment is closed as a whole. A watch holds an
|
|
170
|
+
* open filesystem handle, so a process with one open does not exit on its
|
|
171
|
+
* own: a dev process wants exactly that, and anything with an end, such as a
|
|
172
|
+
* test, closes when it is done. The Buckets and the Objects in them are left
|
|
173
|
+
* where they are, mounts included: this is the open filesystem handles going,
|
|
174
|
+
* not the storage behind them.
|
|
183
175
|
*/
|
|
184
176
|
close() {
|
|
185
177
|
this.stopWatchingMountedDirectories();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3.js","sourceRoot":"","sources":["../../../src/service/s3/sim-s3.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sim-s3.js","sourceRoot":"","sources":["../../../src/service/s3/sim-s3.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a filesystem error is the one meaning nothing is at that path.
|
|
3
|
+
*
|
|
4
|
+
* Reading a file that is not there is not a failure to anything mapping a
|
|
5
|
+
* directory onto a Bucket: it is an Object the Bucket does not hold. Every
|
|
6
|
+
* other error still is one, so only this code is answered rather than raised.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isMissingFilesystemPathError(error: unknown): boolean;
|
|
1
9
|
/**
|
|
2
10
|
* Check whether a filesystem path exists.
|
|
3
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-path-exists.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/filesystem-path-exists.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAazE"}
|
|
1
|
+
{"version":3,"file":"filesystem-path-exists.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/filesystem-path-exists.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAazE"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { stat } from "node:fs/promises";
|
|
2
|
+
/**
|
|
3
|
+
* Whether a filesystem error is the one meaning nothing is at that path.
|
|
4
|
+
*
|
|
5
|
+
* Reading a file that is not there is not a failure to anything mapping a
|
|
6
|
+
* directory onto a Bucket: it is an Object the Bucket does not hold. Every
|
|
7
|
+
* other error still is one, so only this code is answered rather than raised.
|
|
8
|
+
*/
|
|
9
|
+
export function isMissingFilesystemPathError(error) {
|
|
10
|
+
return error instanceof Error && "code" in error && error.code === "ENOENT";
|
|
11
|
+
}
|
|
2
12
|
/**
|
|
3
13
|
* Check whether a filesystem path exists.
|
|
4
14
|
*/
|
|
@@ -9,7 +19,7 @@ export async function filesystemPathExists(path) {
|
|
|
9
19
|
return true;
|
|
10
20
|
}
|
|
11
21
|
catch (error) {
|
|
12
|
-
if (error
|
|
22
|
+
if (isMissingFilesystemPathError(error)) {
|
|
13
23
|
return false;
|
|
14
24
|
}
|
|
15
25
|
/* v8 ignore next */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-path-exists.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/filesystem-path-exists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,
|
|
1
|
+
{"version":3,"file":"filesystem-path-exists.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/filesystem-path-exists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAc;IACzD,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oBAAoB;QACpB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SimS3ObjectMetadata } from "../../object/s3-object.js";
|
|
2
|
+
import { SimS3Object } from "../../object/s3-object.js";
|
|
3
|
+
interface FilesystemS3ObjectFile {
|
|
4
|
+
readonly key: string;
|
|
5
|
+
readonly filePath: string;
|
|
6
|
+
readonly metadata: SimS3ObjectMetadata;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Read a file as the Object a Bucket holds at a key, or nothing when the file
|
|
10
|
+
* is not there.
|
|
11
|
+
*
|
|
12
|
+
* The file's own modification time becomes the Object's, since it is the one
|
|
13
|
+
* thing about a mounted file that is not a guess: a directory is written to
|
|
14
|
+
* behind S3's back, so when S3 was told about the Object says nothing useful.
|
|
15
|
+
* Everything else a file cannot say for itself arrives here already decided.
|
|
16
|
+
*/
|
|
17
|
+
export declare function filesystemS3ObjectFile(file: FilesystemS3ObjectFile): Promise<SimS3Object | undefined>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=s3-filesystem-object-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-filesystem-object-file.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-object-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CA0BlC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { open } from "node:fs/promises";
|
|
2
|
+
import { SimS3Object } from "../../object/s3-object.js";
|
|
3
|
+
import { isMissingFilesystemPathError } from "./filesystem-path-exists.js";
|
|
4
|
+
/**
|
|
5
|
+
* Read a file as the Object a Bucket holds at a key, or nothing when the file
|
|
6
|
+
* is not there.
|
|
7
|
+
*
|
|
8
|
+
* The file's own modification time becomes the Object's, since it is the one
|
|
9
|
+
* thing about a mounted file that is not a guess: a directory is written to
|
|
10
|
+
* behind S3's back, so when S3 was told about the Object says nothing useful.
|
|
11
|
+
* Everything else a file cannot say for itself arrives here already decided.
|
|
12
|
+
*/
|
|
13
|
+
export async function filesystemS3ObjectFile(file) {
|
|
14
|
+
// One open handle for both, because the bytes and the time they were written
|
|
15
|
+
// have to describe the same file. A mounted directory is rebuilt while it is
|
|
16
|
+
// being served, so reading the path twice can pair one file's content with
|
|
17
|
+
// its replacement's timestamp.
|
|
18
|
+
const handle = await openFileToRead(file.filePath);
|
|
19
|
+
if (handle === undefined) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const [body, fileStats] = await Promise.all([
|
|
24
|
+
handle.readFile(),
|
|
25
|
+
handle.stat(),
|
|
26
|
+
]);
|
|
27
|
+
return new SimS3Object({
|
|
28
|
+
key: file.key,
|
|
29
|
+
body,
|
|
30
|
+
metadata: file.metadata,
|
|
31
|
+
lastModified: fileStats.mtime,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
await handle.close();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Open a file, or answer with nothing when there is no such file, since a key
|
|
40
|
+
* a Bucket does not hold is not a failure to read.
|
|
41
|
+
*/
|
|
42
|
+
async function openFileToRead(filePath) {
|
|
43
|
+
try {
|
|
44
|
+
// oxlint-disable-next-line security/detect-non-literal-fs-filename
|
|
45
|
+
return await open(filePath);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (isMissingFilesystemPathError(error)) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
/* v8 ignore next */
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=s3-filesystem-object-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-filesystem-object-file.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-object-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAQ3E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAA4B;IAE5B,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,+BAA+B;IAC/B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEnD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC1C,MAAM,CAAC,QAAQ,EAAE;YACjB,MAAM,CAAC,IAAI,EAAE;SACd,CAAC,CAAC;QAEH,OAAO,IAAI,WAAW,CAAC;YACrB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,SAAS,CAAC,KAAK;SAC9B,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,cAAc,CAC3B,QAAgB;IAEhB,IAAI,CAAC;QACH,mEAAmE;QACnE,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,oBAAoB;QACpB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -4,23 +4,33 @@ interface FilesystemS3ObjectKeysProperties {
|
|
|
4
4
|
readonly safety: FilesystemS3StorageSafety;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Maps between the Object keys of a Bucket and the files of a directory.
|
|
8
8
|
*
|
|
9
9
|
* A directory tree is a listing here, so the walk lives on its own rather than
|
|
10
10
|
* in the storage class: files become keys relative to the directory root, with
|
|
11
|
-
* platform separators normalised to the `/` an S3 key uses
|
|
11
|
+
* platform separators normalised to the `/` an S3 key uses, and a key becomes
|
|
12
|
+
* the file path under the root it names.
|
|
12
13
|
*/
|
|
13
14
|
export declare class FilesystemS3ObjectKeys {
|
|
14
15
|
private readonly directoryPath;
|
|
15
16
|
private readonly safety;
|
|
16
17
|
constructor(properties: FilesystemS3ObjectKeysProperties);
|
|
17
18
|
/**
|
|
18
|
-
* List
|
|
19
|
+
* List the Object keys under the storage directory, under a prefix when one
|
|
20
|
+
* is given.
|
|
19
21
|
*
|
|
20
22
|
* A directory that is not there holds nothing, which is what an empty Bucket
|
|
21
23
|
* looks like.
|
|
22
24
|
*/
|
|
23
|
-
list(): Promise<string[]>;
|
|
25
|
+
list(prefix?: string): Promise<string[]>;
|
|
26
|
+
/**
|
|
27
|
+
* The file an Object key names, once the key is known to be safe to follow.
|
|
28
|
+
*
|
|
29
|
+
* The guard after resolving is defensive rather than the check that matters:
|
|
30
|
+
* key validation has already rejected anything that could climb out, and this
|
|
31
|
+
* is the assertion that it did.
|
|
32
|
+
*/
|
|
33
|
+
filePathFor(key: string): string;
|
|
24
34
|
private listInDirectory;
|
|
25
35
|
}
|
|
26
36
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-filesystem-object-keys.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-object-keys.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAG3E,UAAU,gCAAgC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;CAC5C;AAED
|
|
1
|
+
{"version":3,"file":"s3-filesystem-object-keys.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-object-keys.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAG3E,UAAU,gCAAgC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;CAC5C;AAED;;;;;;;GAOG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IAEnD,YAAY,UAAU,EAAE,gCAAgC,EAGvD;IAED;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAU7C;IAED;;;;;;OAMG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgB/B;YAEa,eAAe;CA8B9B"}
|
|
@@ -2,11 +2,12 @@ import { readdir } from "node:fs/promises";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { filesystemPathExists } from "./filesystem-path-exists.js";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Maps between the Object keys of a Bucket and the files of a directory.
|
|
6
6
|
*
|
|
7
7
|
* A directory tree is a listing here, so the walk lives on its own rather than
|
|
8
8
|
* in the storage class: files become keys relative to the directory root, with
|
|
9
|
-
* platform separators normalised to the `/` an S3 key uses
|
|
9
|
+
* platform separators normalised to the `/` an S3 key uses, and a key becomes
|
|
10
|
+
* the file path under the root it names.
|
|
10
11
|
*/
|
|
11
12
|
export class FilesystemS3ObjectKeys {
|
|
12
13
|
directoryPath;
|
|
@@ -16,16 +17,37 @@ export class FilesystemS3ObjectKeys {
|
|
|
16
17
|
this.safety = properties.safety;
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
|
-
* List
|
|
20
|
+
* List the Object keys under the storage directory, under a prefix when one
|
|
21
|
+
* is given.
|
|
20
22
|
*
|
|
21
23
|
* A directory that is not there holds nothing, which is what an empty Bucket
|
|
22
24
|
* looks like.
|
|
23
25
|
*/
|
|
24
|
-
async list() {
|
|
26
|
+
async list(prefix) {
|
|
25
27
|
if (!(await filesystemPathExists(this.directoryPath))) {
|
|
26
28
|
return [];
|
|
27
29
|
}
|
|
28
|
-
|
|
30
|
+
const keys = await this.listInDirectory(this.directoryPath);
|
|
31
|
+
return prefix === undefined
|
|
32
|
+
? keys
|
|
33
|
+
: keys.filter((key) => key.startsWith(prefix));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The file an Object key names, once the key is known to be safe to follow.
|
|
37
|
+
*
|
|
38
|
+
* The guard after resolving is defensive rather than the check that matters:
|
|
39
|
+
* key validation has already rejected anything that could climb out, and this
|
|
40
|
+
* is the assertion that it did.
|
|
41
|
+
*/
|
|
42
|
+
filePathFor(key) {
|
|
43
|
+
this.safety.assertSafeObjectKey(key);
|
|
44
|
+
const filePath = path.resolve(this.directoryPath, key);
|
|
45
|
+
/* v8 ignore if -- defensive guard after object key validation */
|
|
46
|
+
if (filePath !== this.directoryPath &&
|
|
47
|
+
!filePath.startsWith(`${this.directoryPath}${path.sep}`)) {
|
|
48
|
+
throw new Error(`Invalid S3 Object key outside storage directory: ${key}`);
|
|
49
|
+
}
|
|
50
|
+
return filePath;
|
|
29
51
|
}
|
|
30
52
|
async listInDirectory(directoryPath) {
|
|
31
53
|
// oxlint-disable-next-line security/detect-non-literal-fs-filename
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-filesystem-object-keys.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-object-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAOnE
|
|
1
|
+
{"version":3,"file":"s3-filesystem-object-keys.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-object-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAOnE;;;;;;;GAOG;AACH,MAAM,OAAO,sBAAsB;IAChB,aAAa,CAAS;IACtB,MAAM,CAA4B;IAEnD,YAAY,UAA4C;QACtD,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAClC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,CAAC,MAAe;QACxB,IAAI,CAAC,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE5D,OAAO,MAAM,KAAK,SAAS;YACzB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,GAAW;QACrB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAEvD,iEAAiE;QACjE,IACE,QAAQ,KAAK,IAAI,CAAC,aAAa;YAC/B,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EACxD,CAAC;YACD,MAAM,IAAI,KAAK,CACb,oDAAoD,GAAG,EAAE,CAC1D,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,aAAqB;QACjD,mEAAmE;QACnE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,iBAAiB,GAAwB,EAAE,CAAC;QAElD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEvD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;gBACxD,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,IAAI;qBACb,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;qBACvC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;qBACf,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEb,IAAI,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAExD,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SimS3BucketStorage } from "../s3-bucket-storage.js";
|
|
2
|
-
import { SimS3Object } from "../../object/s3-object.js";
|
|
2
|
+
import type { SimS3Object } from "../../object/s3-object.js";
|
|
3
3
|
import { SimS3DeclaredSystemMetadata } from "../../object/s3-declared-system-metadata.js";
|
|
4
4
|
interface FilesystemS3BucketStorageProperties {
|
|
5
5
|
readonly directoryPath: string;
|
|
@@ -48,7 +48,6 @@ export declare class FilesystemS3BucketStorage implements SimS3BucketStorage {
|
|
|
48
48
|
* filesystem-backed Buckets are read and written but never emptied.
|
|
49
49
|
*/
|
|
50
50
|
deleteObject(key: string): Promise<boolean>;
|
|
51
|
-
private filePathForObjectKey;
|
|
52
51
|
}
|
|
53
52
|
export {};
|
|
54
53
|
//# sourceMappingURL=s3-filesystem-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-filesystem-storage.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"s3-filesystem-storage.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAQ7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAG1F,UAAU,mCAAmC;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,2BAA2B,CAAC;CACvD;AAED;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IAClE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAE7D,YAAY,UAAU,EAAE,mCAAmC,EAa1D;IAED;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAc7D;IAED;;OAEG;IACG,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAWzD;IAED;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAOlD;IAED;;;;;;;;OAQG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ1C;CACF"}
|