@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
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { SimS3Object } from "./s3-object.js";
|
|
2
|
+
/**
|
|
3
|
+
* The most keys real S3 returns in one page of a listing.
|
|
4
|
+
*
|
|
5
|
+
* A caller asking for more gets this many, which is the whole reason listing
|
|
6
|
+
* code has to handle a continuation at all.
|
|
7
|
+
*/
|
|
8
|
+
export declare const simS3DefaultMaxKeysPerPage = 1000;
|
|
9
|
+
interface SimS3ObjectPageRequest {
|
|
10
|
+
readonly objects: readonly SimS3Object[];
|
|
11
|
+
/** The key to resume after, exclusive, or nothing to start at the first. */
|
|
12
|
+
readonly startAfter?: string | undefined;
|
|
13
|
+
readonly maxKeys: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* One page of a Bucket listing, and whether the Bucket holds more.
|
|
17
|
+
*/
|
|
18
|
+
export interface SimS3ObjectPage {
|
|
19
|
+
readonly objects: readonly SimS3Object[];
|
|
20
|
+
readonly isTruncated: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* The key the next page resumes after, which is there exactly when the
|
|
23
|
+
* listing is truncated, so a caller cannot be offered one that goes nowhere.
|
|
24
|
+
*/
|
|
25
|
+
readonly resumeAfter: string | undefined;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Order a Bucket's Objects and take the page a listing asked for.
|
|
29
|
+
*
|
|
30
|
+
* ListObjects and ListObjectsV2 share this because they share it in real S3:
|
|
31
|
+
* they differ in how a caller names where to resume and in how the response
|
|
32
|
+
* reports it, never in which keys come back.
|
|
33
|
+
*
|
|
34
|
+
* S3 orders keys by their UTF-8 bytes and resumes strictly after the key it is
|
|
35
|
+
* given, whether or not the Bucket still holds that key. Both are done here by
|
|
36
|
+
* comparing the strings directly, which agrees with S3 for every key that is
|
|
37
|
+
* not made of characters outside the basic multilingual plane.
|
|
38
|
+
*/
|
|
39
|
+
export declare function simS3ObjectPage(request: SimS3ObjectPageRequest): SimS3ObjectPage;
|
|
40
|
+
/**
|
|
41
|
+
* How many keys a listing will actually return.
|
|
42
|
+
*
|
|
43
|
+
* Real S3 treats MaxKeys as an upper bound it is free to lower, and never
|
|
44
|
+
* returns more than a page holds however many the caller asks for. A request
|
|
45
|
+
* that names no MaxKeys is asking for a full page. Asking for none is allowed
|
|
46
|
+
* and answers with none; asking for fewer than none is refused, as real S3
|
|
47
|
+
* refuses it, rather than being read as some number of keys from the end.
|
|
48
|
+
*/
|
|
49
|
+
export declare function simS3EffectiveMaxKeys(requestedMaxKeys: number | undefined, maxKeysPerPage: number): number;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=s3-object-listing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-object-listing.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-listing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAyBjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,cAAc,EAAE,MAAM,GACrB,MAAM,CAQR"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { SimS3InvalidArgument } from "../error/sim-s3.error.js";
|
|
2
|
+
/**
|
|
3
|
+
* The most keys real S3 returns in one page of a listing.
|
|
4
|
+
*
|
|
5
|
+
* A caller asking for more gets this many, which is the whole reason listing
|
|
6
|
+
* code has to handle a continuation at all.
|
|
7
|
+
*/
|
|
8
|
+
export const simS3DefaultMaxKeysPerPage = 1000;
|
|
9
|
+
/**
|
|
10
|
+
* Order a Bucket's Objects and take the page a listing asked for.
|
|
11
|
+
*
|
|
12
|
+
* ListObjects and ListObjectsV2 share this because they share it in real S3:
|
|
13
|
+
* they differ in how a caller names where to resume and in how the response
|
|
14
|
+
* reports it, never in which keys come back.
|
|
15
|
+
*
|
|
16
|
+
* S3 orders keys by their UTF-8 bytes and resumes strictly after the key it is
|
|
17
|
+
* given, whether or not the Bucket still holds that key. Both are done here by
|
|
18
|
+
* comparing the strings directly, which agrees with S3 for every key that is
|
|
19
|
+
* not made of characters outside the basic multilingual plane.
|
|
20
|
+
*/
|
|
21
|
+
export function simS3ObjectPage(request) {
|
|
22
|
+
const ordered = request.objects.toSorted(compareObjectKeys);
|
|
23
|
+
const startAfter = request.startAfter;
|
|
24
|
+
const remaining = startAfter === undefined
|
|
25
|
+
? ordered
|
|
26
|
+
: ordered.filter((object) => object.key > startAfter);
|
|
27
|
+
// A negative page size would slice keys off the end rather than take none,
|
|
28
|
+
// so a page with no room is empty rather than backwards.
|
|
29
|
+
const objects = remaining.slice(0, Math.max(0, request.maxKeys));
|
|
30
|
+
const lastKey = objects.at(-1)?.key;
|
|
31
|
+
// A page that returned no keys has nowhere for a caller to carry on from, so
|
|
32
|
+
// it is complete however much the Bucket still holds. Reporting it truncated
|
|
33
|
+
// would offer a continuation that cannot exist, and a caller looping until
|
|
34
|
+
// the listing is complete would never stop.
|
|
35
|
+
const isTruncated = lastKey !== undefined && objects.length < remaining.length;
|
|
36
|
+
return {
|
|
37
|
+
objects,
|
|
38
|
+
isTruncated,
|
|
39
|
+
resumeAfter: isTruncated ? lastKey : undefined,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* How many keys a listing will actually return.
|
|
44
|
+
*
|
|
45
|
+
* Real S3 treats MaxKeys as an upper bound it is free to lower, and never
|
|
46
|
+
* returns more than a page holds however many the caller asks for. A request
|
|
47
|
+
* that names no MaxKeys is asking for a full page. Asking for none is allowed
|
|
48
|
+
* and answers with none; asking for fewer than none is refused, as real S3
|
|
49
|
+
* refuses it, rather than being read as some number of keys from the end.
|
|
50
|
+
*/
|
|
51
|
+
export function simS3EffectiveMaxKeys(requestedMaxKeys, maxKeysPerPage) {
|
|
52
|
+
if (requestedMaxKeys !== undefined && requestedMaxKeys < 0) {
|
|
53
|
+
throw new SimS3InvalidArgument(`MaxKeys must not be negative, rather than ${requestedMaxKeys}`);
|
|
54
|
+
}
|
|
55
|
+
return Math.min(requestedMaxKeys ?? maxKeysPerPage, maxKeysPerPage);
|
|
56
|
+
}
|
|
57
|
+
function compareObjectKeys(a, b) {
|
|
58
|
+
/* v8 ignore if -- a Bucket holds one Object per key, so no two keys are equal */
|
|
59
|
+
if (a.key === b.key) {
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
return a.key < b.key ? -1 : 1;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=s3-object-listing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-object-listing.js","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-listing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAsB/C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA+B;IAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,MAAM,SAAS,GACb,UAAU,KAAK,SAAS;QACtB,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC;IAE1D,2EAA2E;IAC3E,yDAAyD;IACzD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IAEpC,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,4CAA4C;IAC5C,MAAM,WAAW,GACf,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAE7D,OAAO;QACL,OAAO;QACP,WAAW;QACX,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;KAC/C,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,gBAAoC,EACpC,cAAsB;IAEtB,IAAI,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,oBAAoB,CAC5B,6CAA6C,gBAAgB,EAAE,CAChE,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,cAAc,EAAE,cAAc,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAc,EAAE,CAAc;IACvD,iFAAiF;IACjF,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -1,17 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What an endpoint knows about the Object it is about to serve.
|
|
3
|
+
*/
|
|
4
|
+
export interface SimS3ObjectResponseDescription {
|
|
5
|
+
/** The system metadata S3 was told when the Object was written. */
|
|
6
|
+
readonly metadata?: Readonly<Record<string, string>> | undefined;
|
|
7
|
+
/** The length of the body being served, in bytes. */
|
|
8
|
+
readonly bodyLength: number;
|
|
9
|
+
/** The Object's ETag, quoted as an HTTP entity tag. */
|
|
10
|
+
readonly etag?: string | undefined;
|
|
11
|
+
/** When S3 last wrote the Object. */
|
|
12
|
+
readonly lastModified?: Date | undefined;
|
|
13
|
+
}
|
|
1
14
|
/**
|
|
2
15
|
* The headers S3 sets on a read from what it was told when the Object was
|
|
3
16
|
* written.
|
|
4
17
|
*
|
|
5
|
-
* S3 keeps
|
|
6
|
-
* unchanged, on every read. That matters most for `Content-Encoding`: an
|
|
7
|
-
* stored as brotli and served without its encoding header is bytes no
|
|
8
|
-
* can decode. `Cache-Control` matters for a different reason, being the
|
|
9
|
-
* one of these a caller can set per Object rather than per response.
|
|
18
|
+
* S3 keeps the metadata ones as Object system metadata and hands them straight
|
|
19
|
+
* back, unchanged, on every read. That matters most for `Content-Encoding`: an
|
|
20
|
+
* Object stored as brotli and served without its encoding header is bytes no
|
|
21
|
+
* client can decode. `Cache-Control` matters for a different reason, being the
|
|
22
|
+
* only one of these a caller can set per Object rather than per response.
|
|
23
|
+
*
|
|
24
|
+
* `ETag` and `Last-Modified` are not metadata but facts about the stored bytes,
|
|
25
|
+
* and are what makes a conditional request or a content-hash comparison
|
|
26
|
+
* possible over HTTP.
|
|
10
27
|
*
|
|
11
28
|
* Every path that serves an Object goes through here, so they agree on what
|
|
12
29
|
* reading one looks like.
|
|
13
30
|
*
|
|
14
31
|
* https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html
|
|
15
32
|
*/
|
|
16
|
-
export declare function simS3ObjectResponseHeaders(
|
|
33
|
+
export declare function simS3ObjectResponseHeaders(description: SimS3ObjectResponseDescription): Record<string, string>;
|
|
17
34
|
//# sourceMappingURL=s3-object-response-headers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-object-response-headers.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-response-headers.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"s3-object-response-headers.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-response-headers.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACjE,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,qCAAqC;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,8BAA8B,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBxB"}
|
|
@@ -3,27 +3,37 @@ import { simS3SystemMetadataHeaders } from "./s3-system-metadata.js";
|
|
|
3
3
|
* The headers S3 sets on a read from what it was told when the Object was
|
|
4
4
|
* written.
|
|
5
5
|
*
|
|
6
|
-
* S3 keeps
|
|
7
|
-
* unchanged, on every read. That matters most for `Content-Encoding`: an
|
|
8
|
-
* stored as brotli and served without its encoding header is bytes no
|
|
9
|
-
* can decode. `Cache-Control` matters for a different reason, being the
|
|
10
|
-
* one of these a caller can set per Object rather than per response.
|
|
6
|
+
* S3 keeps the metadata ones as Object system metadata and hands them straight
|
|
7
|
+
* back, unchanged, on every read. That matters most for `Content-Encoding`: an
|
|
8
|
+
* Object stored as brotli and served without its encoding header is bytes no
|
|
9
|
+
* client can decode. `Cache-Control` matters for a different reason, being the
|
|
10
|
+
* only one of these a caller can set per Object rather than per response.
|
|
11
|
+
*
|
|
12
|
+
* `ETag` and `Last-Modified` are not metadata but facts about the stored bytes,
|
|
13
|
+
* and are what makes a conditional request or a content-hash comparison
|
|
14
|
+
* possible over HTTP.
|
|
11
15
|
*
|
|
12
16
|
* Every path that serves an Object goes through here, so they agree on what
|
|
13
17
|
* reading one looks like.
|
|
14
18
|
*
|
|
15
19
|
* https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html
|
|
16
20
|
*/
|
|
17
|
-
export function simS3ObjectResponseHeaders(
|
|
21
|
+
export function simS3ObjectResponseHeaders(description) {
|
|
18
22
|
const headers = {
|
|
19
|
-
"content-length": String(bodyLength),
|
|
23
|
+
"content-length": String(description.bodyLength),
|
|
20
24
|
};
|
|
21
25
|
for (const header of simS3SystemMetadataHeaders) {
|
|
22
|
-
const value = metadata?.[header.name];
|
|
26
|
+
const value = description.metadata?.[header.name];
|
|
23
27
|
if (value !== undefined) {
|
|
24
28
|
headers[header.name] = value;
|
|
25
29
|
}
|
|
26
30
|
}
|
|
31
|
+
if (description.etag !== undefined) {
|
|
32
|
+
headers["etag"] = description.etag;
|
|
33
|
+
}
|
|
34
|
+
if (description.lastModified !== undefined) {
|
|
35
|
+
headers["last-modified"] = description.lastModified.toUTCString();
|
|
36
|
+
}
|
|
27
37
|
return headers;
|
|
28
38
|
}
|
|
29
39
|
//# sourceMappingURL=s3-object-response-headers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-object-response-headers.js","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-response-headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"s3-object-response-headers.js","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-response-headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAgBrE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,0BAA0B,CACxC,WAA2C;IAE3C,MAAM,OAAO,GAA2B;QACtC,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;KACjD,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,0BAA0B,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAElD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,CAAC,eAAe,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { SimS3Object } from "./s3-object.js";
|
|
2
|
+
/**
|
|
3
|
+
* One Object as a listing describes it.
|
|
4
|
+
*
|
|
5
|
+
* Both list operations answer with these, because ListObjects and
|
|
6
|
+
* ListObjectsV2 differ in how a caller asks for a page and how the page is
|
|
7
|
+
* bounded, never in what an Object in one looks like.
|
|
8
|
+
*/
|
|
9
|
+
export interface SimS3ObjectSummary {
|
|
10
|
+
readonly Key?: string;
|
|
11
|
+
readonly Size?: number;
|
|
12
|
+
readonly ETag?: string;
|
|
13
|
+
readonly LastModified?: Date;
|
|
14
|
+
readonly StorageClass?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Describe a stored Object the way a listing does.
|
|
18
|
+
*
|
|
19
|
+
* The ETag is the quoted form, matching what GetObject and PutObject answer
|
|
20
|
+
* with, so a caller can compare a listed Object against one it has read without
|
|
21
|
+
* having to know that S3 quotes an entity tag in one place and not another.
|
|
22
|
+
*/
|
|
23
|
+
export declare function simS3ObjectSummary(object: SimS3Object): SimS3ObjectSummary;
|
|
24
|
+
/**
|
|
25
|
+
* Describe the Objects on a page of a listing, or nothing when it holds none.
|
|
26
|
+
*
|
|
27
|
+
* A listing that found no keys has no `Contents` at all in real S3, rather than
|
|
28
|
+
* an empty one, which is why every caller written against it reaches for
|
|
29
|
+
* `Contents ?? []`. Answering with an empty array here would let a caller that
|
|
30
|
+
* skipped the guard pass a test and fail against AWS.
|
|
31
|
+
*/
|
|
32
|
+
export declare function simS3ObjectSummaries(objects: readonly SimS3Object[]): SimS3ObjectSummary[] | undefined;
|
|
33
|
+
//# sourceMappingURL=s3-object-summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-object-summary.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-summary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAYlD;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,kBAAkB,CAQ1E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,WAAW,EAAE,GAC9B,kBAAkB,EAAE,GAAG,SAAS,CAIlC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { simS3QuotedETag } from "./s3-object-etag.js";
|
|
2
|
+
/**
|
|
3
|
+
* The storage class S3 reports for an Object nobody asked to store elsewhere.
|
|
4
|
+
*
|
|
5
|
+
* Storage classes are not simulated, and this is the one real S3 puts an Object
|
|
6
|
+
* in unless told otherwise. It is reported rather than omitted because a
|
|
7
|
+
* listing that leaves it out reads as an Object of unknown class, which is a
|
|
8
|
+
* different thing from a Standard one.
|
|
9
|
+
*/
|
|
10
|
+
const defaultStorageClass = "STANDARD";
|
|
11
|
+
/**
|
|
12
|
+
* Describe a stored Object the way a listing does.
|
|
13
|
+
*
|
|
14
|
+
* The ETag is the quoted form, matching what GetObject and PutObject answer
|
|
15
|
+
* with, so a caller can compare a listed Object against one it has read without
|
|
16
|
+
* having to know that S3 quotes an entity tag in one place and not another.
|
|
17
|
+
*/
|
|
18
|
+
export function simS3ObjectSummary(object) {
|
|
19
|
+
return {
|
|
20
|
+
Key: object.key,
|
|
21
|
+
Size: object.body.length,
|
|
22
|
+
ETag: simS3QuotedETag(object.etag),
|
|
23
|
+
LastModified: object.lastModified,
|
|
24
|
+
StorageClass: defaultStorageClass,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Describe the Objects on a page of a listing, or nothing when it holds none.
|
|
29
|
+
*
|
|
30
|
+
* A listing that found no keys has no `Contents` at all in real S3, rather than
|
|
31
|
+
* an empty one, which is why every caller written against it reaches for
|
|
32
|
+
* `Contents ?? []`. Answering with an empty array here would let a caller that
|
|
33
|
+
* skipped the guard pass a test and fail against AWS.
|
|
34
|
+
*/
|
|
35
|
+
export function simS3ObjectSummaries(objects) {
|
|
36
|
+
return objects.length === 0
|
|
37
|
+
? undefined
|
|
38
|
+
: objects.map((object) => simS3ObjectSummary(object));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=s3-object-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-object-summary.js","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD;;;;;;;GAOG;AACH,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAiBvC;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;QACxB,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;QAClC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,mBAAmB;KAClC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAA+B;IAE/B,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;QACzB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -9,6 +9,7 @@ interface SimS3ObjectProperties {
|
|
|
9
9
|
readonly key?: string;
|
|
10
10
|
readonly body?: Buffer;
|
|
11
11
|
readonly metadata?: SimS3ObjectMetadata;
|
|
12
|
+
readonly lastModified?: Date;
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
15
|
* Simulated S3 object.
|
|
@@ -17,7 +18,31 @@ export declare class SimS3Object {
|
|
|
17
18
|
readonly key: string;
|
|
18
19
|
readonly body: Buffer;
|
|
19
20
|
readonly metadata: SimS3ObjectMetadata;
|
|
21
|
+
private readonly writtenAt;
|
|
20
22
|
constructor(properties?: SimS3ObjectProperties);
|
|
23
|
+
/**
|
|
24
|
+
* When S3 last wrote these bytes.
|
|
25
|
+
*
|
|
26
|
+
* The write path passes the simulation's own clock, so a frozen clock dates
|
|
27
|
+
* an Object at the instant it was frozen at, and filesystem-backed storage
|
|
28
|
+
* passes the file's modification time. The default is for an Object made
|
|
29
|
+
* outside either, which has no clock to ask and is being made now.
|
|
30
|
+
*
|
|
31
|
+
* A copy, because a Date is mutable and every read of an Object hands this
|
|
32
|
+
* one out: a caller that adjusted the Date it was given would otherwise
|
|
33
|
+
* change what the Bucket reports from then on.
|
|
34
|
+
*/
|
|
35
|
+
get lastModified(): Date;
|
|
36
|
+
/**
|
|
37
|
+
* The ETag S3 identifies this Object's content by.
|
|
38
|
+
*
|
|
39
|
+
* Held as the bare digest rather than the quoted form a response carries,
|
|
40
|
+
* because the two surfaces disagree about the quotes and only one of them can
|
|
41
|
+
* be the stored value. It is computed on each read rather than kept, since a
|
|
42
|
+
* Buffer can be written to in place and an ETag remembered from before that
|
|
43
|
+
* would describe bytes the Bucket no longer holds.
|
|
44
|
+
*/
|
|
45
|
+
get etag(): string;
|
|
21
46
|
}
|
|
22
47
|
export {};
|
|
23
48
|
//# sourceMappingURL=s3-object.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-object.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"s3-object.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,mBAAmB;aACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAA1D,YAA4B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAAI;CACpE;AAED,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,QAAQ,EAAE,mBAAmB,CAAC;IAE9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAO;IAEjC,YAAY,UAAU,GAAE,qBAA0B,EAYjD;IAED;;;;;;;;;;;OAWG;IACH,IAAI,YAAY,IAAI,IAAI,CAEvB;IAED;;;;;;;;OAQG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { simS3ObjectETag } from "./s3-object-etag.js";
|
|
1
2
|
/**
|
|
2
3
|
* Simulated S3 object metadata.
|
|
3
4
|
*/
|
|
@@ -14,11 +15,40 @@ export class SimS3Object {
|
|
|
14
15
|
key;
|
|
15
16
|
body;
|
|
16
17
|
metadata;
|
|
18
|
+
writtenAt;
|
|
17
19
|
constructor(properties = {}) {
|
|
18
|
-
const { key = "object.json", body = Buffer.alloc(0), metadata = new SimS3ObjectMetadata(), } = properties;
|
|
20
|
+
const { key = "object.json", body = Buffer.alloc(0), metadata = new SimS3ObjectMetadata(), lastModified = new Date(), } = properties;
|
|
19
21
|
this.key = key;
|
|
20
22
|
this.body = body;
|
|
21
23
|
this.metadata = metadata;
|
|
24
|
+
this.writtenAt = new Date(lastModified);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* When S3 last wrote these bytes.
|
|
28
|
+
*
|
|
29
|
+
* The write path passes the simulation's own clock, so a frozen clock dates
|
|
30
|
+
* an Object at the instant it was frozen at, and filesystem-backed storage
|
|
31
|
+
* passes the file's modification time. The default is for an Object made
|
|
32
|
+
* outside either, which has no clock to ask and is being made now.
|
|
33
|
+
*
|
|
34
|
+
* A copy, because a Date is mutable and every read of an Object hands this
|
|
35
|
+
* one out: a caller that adjusted the Date it was given would otherwise
|
|
36
|
+
* change what the Bucket reports from then on.
|
|
37
|
+
*/
|
|
38
|
+
get lastModified() {
|
|
39
|
+
return new Date(this.writtenAt);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The ETag S3 identifies this Object's content by.
|
|
43
|
+
*
|
|
44
|
+
* Held as the bare digest rather than the quoted form a response carries,
|
|
45
|
+
* because the two surfaces disagree about the quotes and only one of them can
|
|
46
|
+
* be the stored value. It is computed on each read rather than kept, since a
|
|
47
|
+
* Buffer can be written to in place and an ETag remembered from before that
|
|
48
|
+
* would describe bytes the Bucket no longer holds.
|
|
49
|
+
*/
|
|
50
|
+
get etag() {
|
|
51
|
+
return simS3ObjectETag(this.body);
|
|
22
52
|
}
|
|
23
53
|
}
|
|
24
54
|
//# sourceMappingURL=s3-object.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-object.js","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACF,MAAM;IAAlC,YAA4B,MAAM,GAA2B,EAAE;sBAAnC,MAAM;IAAgC,CAAC;CACpE;
|
|
1
|
+
{"version":3,"file":"s3-object.js","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACF,MAAM;IAAlC,YAA4B,MAAM,GAA2B,EAAE;sBAAnC,MAAM;IAAgC,CAAC;CACpE;AASD;;GAEG;AACH,MAAM,OAAO,WAAW;IACN,GAAG,CAAS;IACZ,IAAI,CAAS;IACb,QAAQ,CAAsB;IAE7B,SAAS,CAAO;IAEjC,YAAY,UAAU,GAA0B,EAAE;QAChD,MAAM,EACJ,GAAG,GAAG,aAAa,EACnB,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EACtB,QAAQ,GAAG,IAAI,mBAAmB,EAAE,EACpC,YAAY,GAAG,IAAI,IAAI,EAAE,GAC1B,GAAG,UAAU,CAAC;QAEf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;;;;;OAWG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,IAAI;QACN,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-sdk-command-router.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/sdk/sim-s3-sdk-command-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3-sdk-command-router.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/sdk/sim-s3-sdk-command-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAuB/B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,qBAAa,qBAAsB,YAAW,mBAAmB;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAEjE,YAAY,KAAK,EAAE,KAAK,EAoJvB;IAED;;OAEG;IACH,qBAAqB,IAAI,SAAS,MAAM,EAAE,CAEzC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEzD;CACF"}
|
|
@@ -42,6 +42,10 @@ export class SimS3SdkCommandRouter {
|
|
|
42
42
|
"ListObjectsCommand",
|
|
43
43
|
async (command, context) => await simS3.listObjects(command, simSdkCallerOptions(context)),
|
|
44
44
|
],
|
|
45
|
+
[
|
|
46
|
+
"ListObjectsV2Command",
|
|
47
|
+
async (command, context) => await simS3.listObjectsV2(command, simSdkCallerOptions(context)),
|
|
48
|
+
],
|
|
45
49
|
[
|
|
46
50
|
"PutBucketPolicyCommand",
|
|
47
51
|
async (command, context) => await simS3.putBucketPolicy(command, simSdkCallerOptions(context)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-sdk-command-router.js","sourceRoot":"","sources":["../../../../src/service/s3/sdk/sim-s3-sdk-command-router.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3-sdk-command-router.js","sourceRoot":"","sources":["../../../../src/service/s3/sdk/sim-s3-sdk-command-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-rest-object-reader.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-rest-object-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAGhG;;;;;;GAMG;AACH,qBAAa,qBAAqB;IAChC;;OAEG;IACG,IAAI,CACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"sim-s3-rest-object-reader.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-rest-object-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAGhG;;;;;;GAMG;AACH,qBAAa,qBAAqB;IAChC;;OAEG;IACG,IAAI,CACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,QAAQ,CAAC,CAmBnB;CACF"}
|
|
@@ -13,7 +13,12 @@ export class SimS3RestObjectReader {
|
|
|
13
13
|
async read(simS3, route, serviceRequest) {
|
|
14
14
|
const output = await simS3.getObject({ input: { Bucket: route.bucket.bucketName, Key: route.objectKey } }, { caller: serviceRequest.caller.toCaller() });
|
|
15
15
|
const body = await bodyBytes(output.Body);
|
|
16
|
-
const headers = simS3ObjectResponseHeaders(
|
|
16
|
+
const headers = simS3ObjectResponseHeaders({
|
|
17
|
+
metadata: output.Metadata,
|
|
18
|
+
bodyLength: body.length,
|
|
19
|
+
etag: output.ETag,
|
|
20
|
+
lastModified: output.LastModified,
|
|
21
|
+
});
|
|
17
22
|
if (serviceRequest.request.method === "HEAD") {
|
|
18
23
|
return new Response(undefined, { status: 200, headers });
|
|
19
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-rest-object-reader.js","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-rest-object-reader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAErF;;;;;;GAMG;AACH,MAAM,OAAO,qBAAqB;IAChC;;OAEG;IACH,KAAK,CAAC,IAAI,CACR,KAAY,EACZ,KAA2B,EAC3B,cAAoC;QAEpC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,CAClC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EACpE,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAC7C,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3-rest-object-reader.js","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-rest-object-reader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAErF;;;;;;GAMG;AACH,MAAM,OAAO,qBAAqB;IAChC;;OAEG;IACH,KAAK,CAAC,IAAI,CACR,KAAY,EACZ,KAA2B,EAC3B,cAAoC;QAEpC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,CAClC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EACpE,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAC7C,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,0BAA0B,CAAC;YACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC,CAAC;QAEH,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7C,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;CACF;AAED;;GAEG;AACH,KAAK,UAAU,SAAS,CACtB,IAAsE;IAEtE,2DAA2D;IAC3D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-website-object-loader.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/serve/website/sim-s3-website-object-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,UAAU,kCAAkC;IAC1C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IAEtC,YAAY,UAAU,EAAE,kCAAkC,EAIzD;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,CACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,iBAAiB,EACxB,cAAc,EAAE,oBAAoB,GACnC,wBAAwB,CAW1B;IAED;;;;;OAKG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"sim-s3-website-object-loader.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/serve/website/sim-s3-website-object-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,UAAU,kCAAkC;IAC1C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IAEtC,YAAY,UAAU,EAAE,kCAAkC,EAIzD;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,CACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,iBAAiB,EACxB,cAAc,EAAE,oBAAoB,GACnC,wBAAwB,CAW1B;IAED;;;;;OAKG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAoBrE;IAED;;;;;;;;OAQG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAUzC;CACF"}
|
|
@@ -42,7 +42,12 @@ export class SimS3WebsiteObjectLoader {
|
|
|
42
42
|
async load(objectKey) {
|
|
43
43
|
try {
|
|
44
44
|
const output = await this.simS3.getObject({ input: { Bucket: this.bucketName, Key: objectKey } }, { caller: this.caller });
|
|
45
|
-
return new SimS3WebsiteObject(
|
|
45
|
+
return new SimS3WebsiteObject({
|
|
46
|
+
body: await simS3BodyToBuffer(output.Body),
|
|
47
|
+
metadata: output.Metadata,
|
|
48
|
+
etag: output.ETag,
|
|
49
|
+
lastModified: output.LastModified,
|
|
50
|
+
});
|
|
46
51
|
}
|
|
47
52
|
catch (error) {
|
|
48
53
|
if (error instanceof SimS3NoSuchKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-website-object-loader.js","sourceRoot":"","sources":["../../../../../src/service/s3/serve/website/sim-s3-website-object-loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAQhE;;;;;;;;GAQG;AACH,MAAM,OAAO,wBAAwB;IAClB,KAAK,CAAQ;IACb,UAAU,CAAkB;IAC5B,MAAM,CAAe;IAEtC,YAAY,UAA8C;QACxD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,CACb,MAAc,EACd,KAAwB,EACxB,cAAoC;QAEpC,OAAO,IAAI,wBAAwB,CAAC;YAClC,KAAK,EAAE,MAAM;iBACV,kBAAkB,CACjB,KAAK,CAAC,WAAW,CAAC,SAAS,EAC3B,KAAK,CAAC,WAAW,CAAC,UAAU,CAC7B;iBACA,EAAE,EAAE;YACP,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;YACnC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CACvC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EACtD,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CACxB,CAAC;YAEF,OAAO,IAAI,kBAAkB,
|
|
1
|
+
{"version":3,"file":"sim-s3-website-object-loader.js","sourceRoot":"","sources":["../../../../../src/service/s3/serve/website/sim-s3-website-object-loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAQhE;;;;;;;;GAQG;AACH,MAAM,OAAO,wBAAwB;IAClB,KAAK,CAAQ;IACb,UAAU,CAAkB;IAC5B,MAAM,CAAe;IAEtC,YAAY,UAA8C;QACxD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,CACb,MAAc,EACd,KAAwB,EACxB,cAAoC;QAEpC,OAAO,IAAI,wBAAwB,CAAC;YAClC,KAAK,EAAE,MAAM;iBACV,kBAAkB,CACjB,KAAK,CAAC,WAAW,CAAC,SAAS,EAC3B,KAAK,CAAC,WAAW,CAAC,UAAU,CAC7B;iBACA,EAAE,EAAE;YACP,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;YACnC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CACvC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EACtD,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CACxB,CAAC;YAEF,OAAO,IAAI,kBAAkB,CAAC;gBAC5B,IAAI,EAAE,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAA6B,CAAC;gBACnE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;gBACpC,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,eAAe,CACnB,SAAiB;QAEjB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,17 +1,26 @@
|
|
|
1
|
+
interface SimS3WebsiteObjectProperties {
|
|
2
|
+
readonly body: Buffer;
|
|
3
|
+
readonly metadata?: Readonly<Record<string, string>> | undefined;
|
|
4
|
+
readonly etag?: string | undefined;
|
|
5
|
+
readonly lastModified?: Date | undefined;
|
|
6
|
+
}
|
|
1
7
|
/**
|
|
2
8
|
* An Object the static website endpoint is about to serve.
|
|
3
9
|
*
|
|
4
10
|
* The website endpoint reads Objects through the ordinary GetObject command
|
|
5
|
-
* rather than out of Bucket storage, so what it gets back is a stream and
|
|
6
|
-
*
|
|
11
|
+
* rather than out of Bucket storage, so what it gets back is a stream and what
|
|
12
|
+
* S3 remembers about the Object. This is that, with the stream drained.
|
|
7
13
|
*/
|
|
8
14
|
export declare class SimS3WebsiteObject {
|
|
9
15
|
readonly body: Buffer;
|
|
10
|
-
readonly metadata
|
|
11
|
-
|
|
16
|
+
private readonly metadata;
|
|
17
|
+
private readonly etag;
|
|
18
|
+
private readonly lastModified;
|
|
19
|
+
constructor(properties: SimS3WebsiteObjectProperties);
|
|
12
20
|
/**
|
|
13
21
|
* The headers describing this Object in a website response.
|
|
14
22
|
*/
|
|
15
23
|
headers(): Record<string, string>;
|
|
16
24
|
}
|
|
25
|
+
export {};
|
|
17
26
|
//# sourceMappingURL=sim-s3-website-object.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-website-object.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/serve/website/sim-s3-website-object.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"sim-s3-website-object.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/serve/website/sim-s3-website-object.ts"],"names":[],"mappings":"AAEA,UAAU,4BAA4B;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAC7B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+C;IACxE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAEhD,YAAY,UAAU,EAAE,4BAA4B,EAKnD;IAED;;OAEG;IACH,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOhC;CACF"}
|
|
@@ -3,21 +3,30 @@ import { simS3ObjectResponseHeaders } from "../../object/s3-object-response-head
|
|
|
3
3
|
* An Object the static website endpoint is about to serve.
|
|
4
4
|
*
|
|
5
5
|
* The website endpoint reads Objects through the ordinary GetObject command
|
|
6
|
-
* rather than out of Bucket storage, so what it gets back is a stream and
|
|
7
|
-
*
|
|
6
|
+
* rather than out of Bucket storage, so what it gets back is a stream and what
|
|
7
|
+
* S3 remembers about the Object. This is that, with the stream drained.
|
|
8
8
|
*/
|
|
9
9
|
export class SimS3WebsiteObject {
|
|
10
10
|
body;
|
|
11
11
|
metadata;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
etag;
|
|
13
|
+
lastModified;
|
|
14
|
+
constructor(properties) {
|
|
15
|
+
this.body = properties.body;
|
|
16
|
+
this.metadata = properties.metadata;
|
|
17
|
+
this.etag = properties.etag;
|
|
18
|
+
this.lastModified = properties.lastModified;
|
|
15
19
|
}
|
|
16
20
|
/**
|
|
17
21
|
* The headers describing this Object in a website response.
|
|
18
22
|
*/
|
|
19
23
|
headers() {
|
|
20
|
-
return simS3ObjectResponseHeaders(
|
|
24
|
+
return simS3ObjectResponseHeaders({
|
|
25
|
+
metadata: this.metadata,
|
|
26
|
+
bodyLength: this.body.length,
|
|
27
|
+
etag: this.etag,
|
|
28
|
+
lastModified: this.lastModified,
|
|
29
|
+
});
|
|
21
30
|
}
|
|
22
31
|
}
|
|
23
32
|
//# sourceMappingURL=sim-s3-website-object.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-s3-website-object.js","sourceRoot":"","sources":["../../../../../src/service/s3/serve/website/sim-s3-website-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-s3-website-object.js","sourceRoot":"","sources":["../../../../../src/service/s3/serve/website/sim-s3-website-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AASxF;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IACb,IAAI,CAAS;IAEZ,QAAQ,CAA+C;IACvD,IAAI,CAAqB;IACzB,YAAY,CAAmB;IAEhD,YAAY,UAAwC;QAClD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,0BAA0B,CAAC;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -24,6 +24,12 @@ export interface SimS3Properties {
|
|
|
24
24
|
* destination.
|
|
25
25
|
*/
|
|
26
26
|
readonly notificationDestinations?: SimS3NotificationDestinations;
|
|
27
|
+
/**
|
|
28
|
+
* The most keys one page of an Object listing holds, which real S3 fixes at
|
|
29
|
+
* a thousand. Lower it to exercise a caller's pagination without having to
|
|
30
|
+
* store a thousand and one Objects first.
|
|
31
|
+
*/
|
|
32
|
+
readonly maxKeysPerPage?: number;
|
|
27
33
|
}
|
|
28
34
|
interface SimS3CommandsProperties extends SimS3Properties {
|
|
29
35
|
readonly accountRegionScope: SimAwsAccountRegionScope;
|