@kensio/yulin 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/service/dynamodb/command/create-table/create-table.handler.d.ts.map +1 -1
- package/dist/service/dynamodb/command/create-table/create-table.handler.js +2 -3
- package/dist/service/dynamodb/command/create-table/create-table.handler.js.map +1 -1
- package/dist/service/dynamodb/table/dynamodb-table.d.ts +1 -5
- package/dist/service/dynamodb/table/dynamodb-table.d.ts.map +1 -1
- package/dist/service/dynamodb/table/dynamodb-table.js +2 -8
- package/dist/service/dynamodb/table/dynamodb-table.js.map +1 -1
- package/dist/service/organizations/sim-aws-account.d.ts +12 -1
- package/dist/service/organizations/sim-aws-account.d.ts.map +1 -1
- package/dist/service/organizations/sim-aws-account.js +15 -2
- package/dist/service/organizations/sim-aws-account.js.map +1 -1
- package/dist/service/organizations/sim-aws-region.d.ts +23 -0
- package/dist/service/organizations/sim-aws-region.d.ts.map +1 -0
- package/dist/service/organizations/sim-aws-region.js +27 -0
- package/dist/service/organizations/sim-aws-region.js.map +1 -0
- package/dist/service/s3/bucket/s3-bucket.d.ts +26 -0
- package/dist/service/s3/bucket/s3-bucket.d.ts.map +1 -0
- package/dist/service/s3/bucket/s3-bucket.js +42 -0
- package/dist/service/s3/bucket/s3-bucket.js.map +1 -0
- package/dist/service/s3/command/create-bucket/create-bucket.handler.d.ts +17 -0
- package/dist/service/s3/command/create-bucket/create-bucket.handler.d.ts.map +1 -0
- package/dist/service/s3/command/create-bucket/create-bucket.handler.js +37 -0
- package/dist/service/s3/command/create-bucket/create-bucket.handler.js.map +1 -0
- package/dist/service/s3/command/get-object/get-object.handler.d.ts +17 -0
- package/dist/service/s3/command/get-object/get-object.handler.d.ts.map +1 -0
- package/dist/service/s3/command/get-object/get-object.handler.js +44 -0
- package/dist/service/s3/command/get-object/get-object.handler.js.map +1 -0
- package/dist/service/s3/command/list-buckets/list-buckets.handler.d.ts +19 -0
- package/dist/service/s3/command/list-buckets/list-buckets.handler.d.ts.map +1 -0
- package/dist/service/s3/command/list-buckets/list-buckets.handler.js +52 -0
- package/dist/service/s3/command/list-buckets/list-buckets.handler.js.map +1 -0
- package/dist/service/s3/command/list-objects/list-objects.handler.d.ts +17 -0
- package/dist/service/s3/command/list-objects/list-objects.handler.d.ts.map +1 -0
- package/dist/service/s3/command/list-objects/list-objects.handler.js +54 -0
- package/dist/service/s3/command/list-objects/list-objects.handler.js.map +1 -0
- package/dist/service/s3/command/put-object/put-object.handler.d.ts +18 -0
- package/dist/service/s3/command/put-object/put-object.handler.d.ts.map +1 -0
- package/dist/service/s3/command/put-object/put-object.handler.js +49 -0
- package/dist/service/s3/command/put-object/put-object.handler.js.map +1 -0
- package/dist/service/s3/index.js +0 -1
- package/dist/service/s3/index.js.map +1 -1
- package/dist/service/s3/object/s3-object.d.ts +17 -0
- package/dist/service/s3/object/s3-object.d.ts.map +1 -0
- package/dist/service/s3/object/s3-object.js +23 -0
- package/dist/service/s3/object/s3-object.js.map +1 -0
- package/dist/service/s3/s3.d.ts +33 -0
- package/dist/service/s3/s3.d.ts.map +1 -0
- package/dist/service/s3/s3.js +56 -0
- package/dist/service/s3/s3.js.map +1 -0
- package/dist/service/s3/storage/s3-body-buffer.d.ts +5 -0
- package/dist/service/s3/storage/s3-body-buffer.d.ts.map +1 -0
- package/dist/service/s3/storage/s3-body-buffer.js +11 -0
- package/dist/service/s3/storage/s3-body-buffer.js.map +1 -0
- package/dist/service/s3/storage/s3-bucket-storage.d.ts +34 -0
- package/dist/service/s3/storage/s3-bucket-storage.d.ts.map +1 -0
- package/dist/service/s3/storage/s3-bucket-storage.js +64 -0
- package/dist/service/s3/storage/s3-bucket-storage.js.map +1 -0
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-table.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/dynamodb/command/create-table/create-table.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAE9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"create-table.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/dynamodb/command/create-table/create-table.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAE9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAI7E;;;;GAIG;AACH,qBAAa,yBAA0B,YAAW,cAAc,CAC9D,kBAAkB,EAClB,wBAAwB,CACzB;IAEG,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,MAAM,EAAE,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,EAChD,UAAU,EAAE,mBAAmB;IAGlD;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CA8BzE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SimDynamoDbTable } from "../../table/dynamodb-table.js";
|
|
2
2
|
import { ResourceInUseException, } from "@aws-sdk/client-dynamodb";
|
|
3
3
|
import { jitter } from "../../../../util/sleep.js";
|
|
4
|
+
import { assertDefined } from "../../../../util/defined.js";
|
|
4
5
|
/**
|
|
5
6
|
* DynamoDB CreateTableCommand handler.
|
|
6
7
|
*
|
|
@@ -17,9 +18,7 @@ export class CreateTableCommandHandler {
|
|
|
17
18
|
* Handle creation of a new DynamoDB Table.
|
|
18
19
|
*/
|
|
19
20
|
async handle(cmd) {
|
|
20
|
-
|
|
21
|
-
throw new Error("CreateTableCommand.input.TableName is required");
|
|
22
|
-
}
|
|
21
|
+
assertDefined(cmd.input.TableName, "CreateTableCommand.input.TableName");
|
|
23
22
|
const tableName = cmd.input.TableName;
|
|
24
23
|
if (this.tables.has(tableName)) {
|
|
25
24
|
throw new ResourceInUseException({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-table.handler.js","sourceRoot":"","sources":["../../../../../src/service/dynamodb/command/create-table/create-table.handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAGL,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"create-table.handler.js","sourceRoot":"","sources":["../../../../../src/service/dynamodb/command/create-table/create-table.handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAGL,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IAKjB;IACA;IAFnB,YACmB,MAAgD,EAChD,UAA+B;QAD/B,WAAM,GAAN,MAAM,CAA0C;QAChD,eAAU,GAAV,UAAU,CAAqB;IAC/C,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAuB;QAClC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAEzE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAA8B,CAAC;QAC3D,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,sBAAsB,CAAC;gBAC/B,OAAO,EAAE,kBAAkB,SAAS,iBAAiB;gBACrD,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAElC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEjD,OAAO;YACL,gBAAgB,EAAE;gBAChB,oBAAoB,EAAE,EAAE;gBACxB,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,EAAE;gBACb,WAAW,EAAE,KAAK,CAAC,MAAM;gBACzB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,sBAAsB,EAAE,EAAE;aAC3B;YACD,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -9,7 +9,7 @@ export type DynamoDbTableName = Brand<string, "DynamoDbTableName">;
|
|
|
9
9
|
export declare class SimDynamoDbTable {
|
|
10
10
|
private readonly background;
|
|
11
11
|
readonly creationDateTime: Date;
|
|
12
|
-
|
|
12
|
+
readonly tableName: DynamoDbTableName;
|
|
13
13
|
private readonly _keySchema;
|
|
14
14
|
private _status;
|
|
15
15
|
private readonly items;
|
|
@@ -18,10 +18,6 @@ export declare class SimDynamoDbTable {
|
|
|
18
18
|
* Simulate the table entering ACTIVE status.
|
|
19
19
|
*/
|
|
20
20
|
activate(): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Get the DynamoDB table name.
|
|
23
|
-
*/
|
|
24
|
-
get tableName(): DynamoDbTableName;
|
|
25
21
|
/**
|
|
26
22
|
* Get the current table status.
|
|
27
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamodb-table.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/table/dynamodb-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAElF,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAEnE;;GAEG;AACH,qBAAa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"dynamodb-table.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/table/dynamodb-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAElF,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAEnE;;GAEG;AACH,qBAAa,gBAAgB;IAYzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAX7B,SAAgB,gBAAgB,EAAE,IAAI,CAAC;IAEvC,SAAgB,SAAS,EAAE,iBAAiB,CAAC;IAE7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;gBAGvD,aAAa,EAAE,kBAAkB,EAChB,UAAU,EAAE,mBAAmB;IAkBlD;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB;;OAEG;IACH,IAAW,MAAM,IAAI,WAAW,CAE/B;IAED;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAQlD"}
|
|
@@ -6,14 +6,14 @@ import { assertDefined } from "../../../util/defined.js";
|
|
|
6
6
|
export class SimDynamoDbTable {
|
|
7
7
|
background;
|
|
8
8
|
creationDateTime;
|
|
9
|
-
|
|
9
|
+
tableName;
|
|
10
10
|
_keySchema;
|
|
11
11
|
_status = "CREATING";
|
|
12
12
|
items = new Map();
|
|
13
13
|
constructor(createCommand, background) {
|
|
14
14
|
this.background = background;
|
|
15
15
|
assertDefined(createCommand.input.TableName, "createCommand.input.TableName");
|
|
16
|
-
this.
|
|
16
|
+
this.tableName = createCommand.input.TableName;
|
|
17
17
|
this.creationDateTime = new Date();
|
|
18
18
|
if (createCommand.input.KeySchema === undefined ||
|
|
19
19
|
createCommand.input.KeySchema.length === 0) {
|
|
@@ -28,12 +28,6 @@ export class SimDynamoDbTable {
|
|
|
28
28
|
this._status = "ACTIVE";
|
|
29
29
|
return Promise.resolve();
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Get the DynamoDB table name.
|
|
33
|
-
*/
|
|
34
|
-
get tableName() {
|
|
35
|
-
return this._tableName;
|
|
36
|
-
}
|
|
37
31
|
/**
|
|
38
32
|
* Get the current table status.
|
|
39
33
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamodb-table.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/table/dynamodb-table.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD;;GAEG;AACH,MAAM,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"dynamodb-table.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/table/dynamodb-table.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAYR;IAXH,gBAAgB,CAAO;IAEvB,SAAS,CAAoB;IAE5B,UAAU,CAAoB;IACvC,OAAO,GAAgB,UAAU,CAAC;IAEzB,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEzD,YACE,aAAiC,EAChB,UAA+B;QAA/B,eAAU,GAAV,UAAU,CAAqB;QAEhD,aAAa,CACX,aAAa,CAAC,KAAK,CAAC,SAAS,EAC7B,+BAA+B,CAChC,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,SAA8B,CAAC;QACpE,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC;QAEnC,IACE,aAAa,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;YAC3C,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAC1C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,IAAkB;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
import { type BackgroundCompleter, type BackgroundScheduler } from "../../util/background/background.js";
|
|
2
|
-
import { SimDynamoDb } from "../dynamodb/dynamodb.js";
|
|
2
|
+
import type { SimDynamoDb } from "../dynamodb/dynamodb.js";
|
|
3
|
+
import { type AwsRegionName, SimAwsRegion } from "./sim-aws-region.js";
|
|
4
|
+
import type { SimS3 } from "../s3/s3.js";
|
|
3
5
|
/**
|
|
4
6
|
* Container for simulated AWS services.
|
|
5
7
|
*/
|
|
6
8
|
export declare class SimAwsAccount {
|
|
7
9
|
private readonly background;
|
|
8
10
|
private readonly memo;
|
|
11
|
+
private readonly defaultRegion;
|
|
9
12
|
constructor(background?: BackgroundScheduler & BackgroundCompleter);
|
|
10
13
|
/**
|
|
11
14
|
* Wait for all outstanding background tasks in this Account to complete.
|
|
12
15
|
*/
|
|
13
16
|
backgroundTasksComplete(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Get a simulated AWS Region in this simulated Account.
|
|
19
|
+
*/
|
|
20
|
+
getRegion(region?: AwsRegionName): SimAwsRegion;
|
|
14
21
|
/**
|
|
15
22
|
* Get the simulated DynamoDB service in this simulated Account.
|
|
16
23
|
*/
|
|
17
24
|
getDynamoDb(): SimDynamoDb;
|
|
25
|
+
/**
|
|
26
|
+
* Get the simulated S3 service in this simulated Account.
|
|
27
|
+
*/
|
|
28
|
+
getS3(): SimS3;
|
|
18
29
|
}
|
|
19
30
|
//# sourceMappingURL=sim-aws-account.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-aws-account.d.ts","sourceRoot":"","sources":["../../../src/service/organizations/sim-aws-account.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-aws-account.d.ts","sourceRoot":"","sources":["../../../src/service/organizations/sim-aws-account.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EACL,KAAK,aAAa,EAElB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,qBAAa,aAAa;IAMtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;IAE3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0B;gBAGrC,UAAU,GAAE,mBAAmB,GAC9C,mBAA2C;IAG/C;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9C;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,YAAY;IAO/C;;OAEG;IACH,WAAW,IAAI,WAAW;IAI1B;;OAEG;IACH,KAAK,IAAI,KAAK;CAGf"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { BackgroundTasks, } from "../../util/background/background.js";
|
|
2
|
-
import { SimDynamoDb } from "../dynamodb/dynamodb.js";
|
|
3
2
|
import { Memo } from "../../util/memo/memo.js";
|
|
3
|
+
import { DEFAULT_SIM_AWS_REGION, SimAwsRegion, } from "./sim-aws-region.js";
|
|
4
4
|
/**
|
|
5
5
|
* Container for simulated AWS services.
|
|
6
6
|
*/
|
|
7
7
|
export class SimAwsAccount {
|
|
8
8
|
background;
|
|
9
9
|
memo = new Memo();
|
|
10
|
+
defaultRegion = DEFAULT_SIM_AWS_REGION;
|
|
10
11
|
constructor(background = new BackgroundTasks()) {
|
|
11
12
|
this.background = background;
|
|
12
13
|
}
|
|
@@ -16,11 +17,23 @@ export class SimAwsAccount {
|
|
|
16
17
|
async backgroundTasksComplete() {
|
|
17
18
|
await this.background.complete();
|
|
18
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Get a simulated AWS Region in this simulated Account.
|
|
22
|
+
*/
|
|
23
|
+
getRegion(region) {
|
|
24
|
+
return this.memo.getOrCreate(`Region:${region ?? this.defaultRegion}`, () => new SimAwsRegion(this.background));
|
|
25
|
+
}
|
|
19
26
|
/**
|
|
20
27
|
* Get the simulated DynamoDB service in this simulated Account.
|
|
21
28
|
*/
|
|
22
29
|
getDynamoDb() {
|
|
23
|
-
return this.
|
|
30
|
+
return this.getRegion().getDynamoDb();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get the simulated S3 service in this simulated Account.
|
|
34
|
+
*/
|
|
35
|
+
getS3() {
|
|
36
|
+
return this.getRegion().getS3();
|
|
24
37
|
}
|
|
25
38
|
}
|
|
26
39
|
//# sourceMappingURL=sim-aws-account.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-aws-account.js","sourceRoot":"","sources":["../../../src/service/organizations/sim-aws-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,GAChB,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-aws-account.js","sourceRoot":"","sources":["../../../src/service/organizations/sim-aws-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAEL,sBAAsB,EACtB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAG7B;;GAEG;AACH,MAAM,OAAO,aAAa;IAML;IALF,IAAI,GAAG,IAAI,IAAI,EAAU,CAAC;IAE1B,aAAa,GAAG,sBAAsB,CAAC;IAExD,YACmB,aACO,IAAI,eAAe,EAAE;QAD5B,eAAU,GAAV,UAAU,CACkB;IAC5C,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,uBAAuB;QAC3B,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAsB;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAC1B,UAAU,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,EACxC,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { BackgroundScheduler } from "../../util/background/background.js";
|
|
2
|
+
import type { Brand } from "../../util/brand.type.js";
|
|
3
|
+
import { SimDynamoDb } from "../dynamodb/dynamodb.js";
|
|
4
|
+
import { SimS3 } from "../s3/s3.js";
|
|
5
|
+
export type AwsRegionName = Brand<string, "AwsRegionName">;
|
|
6
|
+
export declare const DEFAULT_SIM_AWS_REGION: AwsRegionName;
|
|
7
|
+
/**
|
|
8
|
+
* Container for simulated AWS services in one Region.
|
|
9
|
+
*/
|
|
10
|
+
export declare class SimAwsRegion {
|
|
11
|
+
private readonly background;
|
|
12
|
+
private readonly memo;
|
|
13
|
+
constructor(background: BackgroundScheduler);
|
|
14
|
+
/**
|
|
15
|
+
* Get the simulated DynamoDB service in this simulated Region.
|
|
16
|
+
*/
|
|
17
|
+
getDynamoDb(): SimDynamoDb;
|
|
18
|
+
/**
|
|
19
|
+
* Get the simulated S3 service in this simulated Region.
|
|
20
|
+
*/
|
|
21
|
+
getS3(): SimS3;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=sim-aws-region.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-aws-region.d.ts","sourceRoot":"","sources":["../../../src/service/organizations/sim-aws-region.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAE3D,eAAO,MAAM,sBAAsB,EAAkB,aAAa,CAAC;AAEnE;;GAEG;AACH,qBAAa,YAAY;IAGX,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;gBAEd,UAAU,EAAE,mBAAmB;IAE5D;;OAEG;IACH,WAAW,IAAI,WAAW;IAO1B;;OAEG;IACH,KAAK,IAAI,KAAK;CAGf"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Memo } from "../../util/memo/memo.js";
|
|
2
|
+
import { SimDynamoDb } from "../dynamodb/dynamodb.js";
|
|
3
|
+
import { SimS3 } from "../s3/s3.js";
|
|
4
|
+
export const DEFAULT_SIM_AWS_REGION = "us-east-1";
|
|
5
|
+
/**
|
|
6
|
+
* Container for simulated AWS services in one Region.
|
|
7
|
+
*/
|
|
8
|
+
export class SimAwsRegion {
|
|
9
|
+
background;
|
|
10
|
+
memo = new Memo();
|
|
11
|
+
constructor(background) {
|
|
12
|
+
this.background = background;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get the simulated DynamoDB service in this simulated Region.
|
|
16
|
+
*/
|
|
17
|
+
getDynamoDb() {
|
|
18
|
+
return this.memo.getOrCreate("DynamoDB", () => new SimDynamoDb(this.background));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get the simulated S3 service in this simulated Region.
|
|
22
|
+
*/
|
|
23
|
+
getS3() {
|
|
24
|
+
return this.memo.getOrCreate("S3", () => new SimS3());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=sim-aws-region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-aws-region.js","sourceRoot":"","sources":["../../../src/service/organizations/sim-aws-region.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAA4B,CAAC;AAEnE;;GAEG;AACH,MAAM,OAAO,YAAY;IAGM;IAFZ,IAAI,GAAG,IAAI,IAAI,EAAU,CAAC;IAE3C,YAA6B,UAA+B;QAA/B,eAAU,GAAV,UAAU,CAAqB;IAAG,CAAC;IAEhE;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAC1B,UAAU,EACV,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CACvC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CreateBucketCommand } from "@aws-sdk/client-s3";
|
|
2
|
+
import type { Brand } from "../../../util/brand.type.js";
|
|
3
|
+
import { type SimS3BucketStorage } from "../storage/s3-bucket-storage.js";
|
|
4
|
+
import type { SimS3Object } from "../object/s3-object.js";
|
|
5
|
+
export type S3BucketName = Brand<string, "S3BucketName">;
|
|
6
|
+
/**
|
|
7
|
+
* Simulated S3 Bucket.
|
|
8
|
+
*/
|
|
9
|
+
export declare class SimS3Bucket {
|
|
10
|
+
private readonly storage;
|
|
11
|
+
readonly bucketName: string;
|
|
12
|
+
constructor(createCommand: CreateBucketCommand, storage?: SimS3BucketStorage);
|
|
13
|
+
/**
|
|
14
|
+
* Put a simulated S3 Object into storage.
|
|
15
|
+
*/
|
|
16
|
+
putObject(object: SimS3Object): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Get a simulated S3 Object from storage.
|
|
19
|
+
*/
|
|
20
|
+
getObject(key: string): Promise<SimS3Object | undefined>;
|
|
21
|
+
/**
|
|
22
|
+
* List simulated S3 Objects from storage.
|
|
23
|
+
*/
|
|
24
|
+
listObjects(prefix?: string): Promise<SimS3Object[]>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=s3-bucket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-bucket.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/bucket/s3-bucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAEzD;;GAEG;AACH,qBAAa,WAAW;IAKpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAGjC,aAAa,EAAE,mBAAmB,EACjB,OAAO,GAAE,kBAAgD;IAgB5E;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAI9D;;OAEG;IACG,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAG3D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { assertDefined } from "../../../util/defined.js";
|
|
2
|
+
import { MemoryS3BucketStorage, } from "../storage/s3-bucket-storage.js";
|
|
3
|
+
/**
|
|
4
|
+
* Simulated S3 Bucket.
|
|
5
|
+
*/
|
|
6
|
+
export class SimS3Bucket {
|
|
7
|
+
storage;
|
|
8
|
+
bucketName;
|
|
9
|
+
constructor(createCommand, storage = new MemoryS3BucketStorage()) {
|
|
10
|
+
this.storage = storage;
|
|
11
|
+
assertDefined(createCommand.input.Bucket, "createCommand.input.Bucket");
|
|
12
|
+
this.bucketName = createCommand.input.Bucket;
|
|
13
|
+
}
|
|
14
|
+
// /**
|
|
15
|
+
// * Change the storage implementation for this simulated S3 Bucket.
|
|
16
|
+
// */
|
|
17
|
+
// configureSimStorage(storage: SimS3BucketStorage): void {
|
|
18
|
+
// if (!this.storage.allowChangeStorage()) {
|
|
19
|
+
// throw new Error("Cannot change simulated S3 storage implementation");
|
|
20
|
+
// }
|
|
21
|
+
// this.storage = storage;
|
|
22
|
+
// }
|
|
23
|
+
/**
|
|
24
|
+
* Put a simulated S3 Object into storage.
|
|
25
|
+
*/
|
|
26
|
+
async putObject(object) {
|
|
27
|
+
await this.storage.putObject(object);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get a simulated S3 Object from storage.
|
|
31
|
+
*/
|
|
32
|
+
async getObject(key) {
|
|
33
|
+
return await this.storage.getObject(key);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* List simulated S3 Objects from storage.
|
|
37
|
+
*/
|
|
38
|
+
async listObjects(prefix) {
|
|
39
|
+
return await this.storage.listObjects(prefix);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=s3-bucket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-bucket.js","sourceRoot":"","sources":["../../../../src/service/s3/bucket/s3-bucket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EACL,qBAAqB,GAEtB,MAAM,iCAAiC,CAAC;AAKzC;;GAEG;AACH,MAAM,OAAO,WAAW;IAKH;IAJH,UAAU,CAAS;IAEnC,YACE,aAAkC,EACjB,UAA8B,IAAI,qBAAqB,EAAE;QAAzD,YAAO,GAAP,OAAO,CAAkD;QAE1E,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QACxE,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/C,CAAC;IAED,MAAM;IACN,qEAAqE;IACrE,MAAM;IACN,2DAA2D;IAC3D,8CAA8C;IAC9C,4EAA4E;IAC5E,MAAM;IACN,4BAA4B;IAC5B,IAAI;IAEJ;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,MAAmB;QACjC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAAe;QAC/B,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CommandHandler } from "../../../../command/command-handler.js";
|
|
2
|
+
import { type CreateBucketCommand, type CreateBucketCommandOutput } from "@aws-sdk/client-s3";
|
|
3
|
+
import { SimS3Bucket } from "../../bucket/s3-bucket.js";
|
|
4
|
+
/**
|
|
5
|
+
* S3 CreateBucketCommand handler.
|
|
6
|
+
*
|
|
7
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/CreateBucketCommand/
|
|
8
|
+
*/
|
|
9
|
+
export declare class CreateBucketCommandHandler implements CommandHandler<CreateBucketCommand, CreateBucketCommandOutput> {
|
|
10
|
+
private readonly buckets;
|
|
11
|
+
constructor(buckets: Map<string, SimS3Bucket>);
|
|
12
|
+
/**
|
|
13
|
+
* Handle creation of a new S3 Bucket.
|
|
14
|
+
*/
|
|
15
|
+
handle(cmd: CreateBucketCommand): Promise<CreateBucketCommandOutput>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=create-bucket.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-bucket.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/create-bucket/create-bucket.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAE/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAqB,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAI3E;;;;GAIG;AACH,qBAAa,0BAA2B,YAAW,cAAc,CAC/D,mBAAmB,EACnB,yBAAyB,CAC1B;IACa,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAE9D;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAsB3E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BucketAlreadyExists, } from "@aws-sdk/client-s3";
|
|
2
|
+
import { SimS3Bucket } from "../../bucket/s3-bucket.js";
|
|
3
|
+
import { assertDefined } from "../../../../util/defined.js";
|
|
4
|
+
import { jitter } from "../../../../util/sleep.js";
|
|
5
|
+
/**
|
|
6
|
+
* S3 CreateBucketCommand handler.
|
|
7
|
+
*
|
|
8
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/CreateBucketCommand/
|
|
9
|
+
*/
|
|
10
|
+
export class CreateBucketCommandHandler {
|
|
11
|
+
buckets;
|
|
12
|
+
constructor(buckets) {
|
|
13
|
+
this.buckets = buckets;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Handle creation of a new S3 Bucket.
|
|
17
|
+
*/
|
|
18
|
+
async handle(cmd) {
|
|
19
|
+
assertDefined(cmd.input.Bucket, "CreateBucketCommand.input.Bucket");
|
|
20
|
+
const bucketName = cmd.input.Bucket;
|
|
21
|
+
if (this.buckets.has(bucketName)) {
|
|
22
|
+
throw new BucketAlreadyExists({
|
|
23
|
+
message: `S3 Bucket ${bucketName} already exists`,
|
|
24
|
+
$metadata: {},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
await jitter();
|
|
28
|
+
const bucket = new SimS3Bucket(cmd);
|
|
29
|
+
this.buckets.set(bucketName, bucket);
|
|
30
|
+
return {
|
|
31
|
+
BucketArn: `arn:aws:s3:::${bucketName}`,
|
|
32
|
+
Location: `/${bucketName}`,
|
|
33
|
+
$metadata: {},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=create-bucket.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-bucket.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/create-bucket/create-bucket.handler.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAqB,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD;;;;GAIG;AACH,MAAM,OAAO,0BAA0B;IAIR;IAA7B,YAA6B,OAAiC;QAAjC,YAAO,GAAP,OAAO,CAA0B;IAAG,CAAC;IAElE;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAwB;QACnC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;QAEpE,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAsB,CAAC;QACpD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,mBAAmB,CAAC;gBAC5B,OAAO,EAAE,aAAa,UAAU,iBAAiB;gBACjD,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAErC,OAAO;YACL,SAAS,EAAE,gBAAgB,UAAU,EAAE;YACvC,QAAQ,EAAE,IAAI,UAAU,EAAE;YAC1B,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CommandHandler } from "../../../../command/command-handler.js";
|
|
2
|
+
import { type GetObjectCommand, type GetObjectCommandOutput } from "@aws-sdk/client-s3";
|
|
3
|
+
import type { S3BucketName, SimS3Bucket } from "../../bucket/s3-bucket.js";
|
|
4
|
+
/**
|
|
5
|
+
* Simulated S3 GetObjectCommand handler.
|
|
6
|
+
*
|
|
7
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/GetObjectCommand/
|
|
8
|
+
*/
|
|
9
|
+
export declare class GetObjectCommandHandler implements CommandHandler<GetObjectCommand, GetObjectCommandOutput> {
|
|
10
|
+
private readonly buckets;
|
|
11
|
+
constructor(buckets: Map<S3BucketName, SimS3Bucket>);
|
|
12
|
+
/**
|
|
13
|
+
* Simulate getting an Object from an S3 Bucket.
|
|
14
|
+
*/
|
|
15
|
+
handle(cmd: GetObjectCommand): Promise<GetObjectCommandOutput>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=get-object.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-object.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/get-object/get-object.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAI3E;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,cAAc,CAC5D,gBAAgB,EAChB,sBAAsB,CACvB;IACa,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;IAEpE;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CA+BrE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { NoSuchBucket, NoSuchKey, } from "@aws-sdk/client-s3";
|
|
2
|
+
import { Readable } from "node:stream";
|
|
3
|
+
import { assertDefined } from "../../../../util/defined.js";
|
|
4
|
+
import { jitter } from "../../../../util/sleep.js";
|
|
5
|
+
/**
|
|
6
|
+
* Simulated S3 GetObjectCommand handler.
|
|
7
|
+
*
|
|
8
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/GetObjectCommand/
|
|
9
|
+
*/
|
|
10
|
+
export class GetObjectCommandHandler {
|
|
11
|
+
buckets;
|
|
12
|
+
constructor(buckets) {
|
|
13
|
+
this.buckets = buckets;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Simulate getting an Object from an S3 Bucket.
|
|
17
|
+
*/
|
|
18
|
+
async handle(cmd) {
|
|
19
|
+
assertDefined(cmd.input.Bucket, "GetObjectCommand.input.Bucket");
|
|
20
|
+
assertDefined(cmd.input.Key, "GetObjectCommand.input.Key");
|
|
21
|
+
const bucketName = cmd.input.Bucket;
|
|
22
|
+
const bucket = this.buckets.get(bucketName);
|
|
23
|
+
if (bucket === undefined) {
|
|
24
|
+
throw new NoSuchBucket({
|
|
25
|
+
message: `No S3 Bucket named ${bucketName}`,
|
|
26
|
+
$metadata: {},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
await jitter();
|
|
30
|
+
const object = await bucket.getObject(cmd.input.Key);
|
|
31
|
+
if (object === undefined) {
|
|
32
|
+
throw new NoSuchKey({
|
|
33
|
+
message: `No S3 Object named ${cmd.input.Key}`,
|
|
34
|
+
$metadata: {},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
Body: Readable.from([object.body]),
|
|
39
|
+
Metadata: object.metadata.values,
|
|
40
|
+
$metadata: {},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=get-object.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-object.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/get-object/get-object.handler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,SAAS,GAGV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAIL;IAA7B,YAA6B,OAAuC;QAAvC,YAAO,GAAP,OAAO,CAAgC;IAAG,CAAC;IAExE;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAqB;QAChC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;QACjE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;QAE3D,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAsB,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,YAAY,CAAC;gBACrB,OAAO,EAAE,sBAAsB,UAAU,EAAE;gBAC3C,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,SAAS,CAAC;gBAClB,OAAO,EAAE,sBAAsB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC9C,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAEhC;YACD,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAChC,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CommandHandler } from "../../../../command/command-handler.js";
|
|
2
|
+
import type { ListBucketsCommand, ListBucketsCommandOutput } from "@aws-sdk/client-s3";
|
|
3
|
+
import type { S3BucketName, SimS3Bucket } from "../../bucket/s3-bucket.js";
|
|
4
|
+
/**
|
|
5
|
+
* Simulated S3 ListBucketsCommand handler.
|
|
6
|
+
*
|
|
7
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/ListBucketsCommand/
|
|
8
|
+
*/
|
|
9
|
+
export declare class ListBucketsCommandHandler implements CommandHandler<ListBucketsCommand, ListBucketsCommandOutput> {
|
|
10
|
+
private readonly buckets;
|
|
11
|
+
constructor(buckets: Map<S3BucketName, SimS3Bucket>);
|
|
12
|
+
/**
|
|
13
|
+
* Simulate listing S3 Buckets.
|
|
14
|
+
*/
|
|
15
|
+
handle(cmd: ListBucketsCommand): Promise<ListBucketsCommandOutput>;
|
|
16
|
+
private static makeContinuationToken;
|
|
17
|
+
private static parseContinuationToken;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=list-buckets.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-buckets.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-buckets/list-buckets.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG3E;;;;GAIG;AACH,qBAAa,yBAA0B,YAAW,cAAc,CAC9D,kBAAkB,EAClB,wBAAwB,CACzB;IACa,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;IAEpE;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAiDxE,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAIpC,OAAO,CAAC,MAAM,CAAC,sBAAsB;CAGtC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jitter } from "../../../../util/sleep.js";
|
|
2
|
+
/**
|
|
3
|
+
* Simulated S3 ListBucketsCommand handler.
|
|
4
|
+
*
|
|
5
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/ListBucketsCommand/
|
|
6
|
+
*/
|
|
7
|
+
export class ListBucketsCommandHandler {
|
|
8
|
+
buckets;
|
|
9
|
+
constructor(buckets) {
|
|
10
|
+
this.buckets = buckets;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Simulate listing S3 Buckets.
|
|
14
|
+
*/
|
|
15
|
+
async handle(cmd) {
|
|
16
|
+
await jitter();
|
|
17
|
+
const buckets = [...this.buckets.values()];
|
|
18
|
+
buckets.sort((a, b) => a.bucketName.localeCompare(b.bucketName));
|
|
19
|
+
const prefix = cmd.input.Prefix;
|
|
20
|
+
const continuationToken = cmd.input.ContinuationToken;
|
|
21
|
+
const maxBuckets = cmd.input.MaxBuckets ?? 10_000;
|
|
22
|
+
const matchingBuckets = prefix === undefined
|
|
23
|
+
? buckets
|
|
24
|
+
: buckets.filter((bucket) => bucket.bucketName.startsWith(prefix));
|
|
25
|
+
const startBucketName = continuationToken === undefined
|
|
26
|
+
? undefined
|
|
27
|
+
: ListBucketsCommandHandler.parseContinuationToken(continuationToken);
|
|
28
|
+
const startIndex = startBucketName === undefined
|
|
29
|
+
? 0
|
|
30
|
+
: Math.max(0, matchingBuckets.findIndex((bucket) => bucket.bucketName === startBucketName) + 1);
|
|
31
|
+
const page = matchingBuckets.slice(startIndex, startIndex + maxBuckets);
|
|
32
|
+
const lastBucket = page.at(-1);
|
|
33
|
+
const hasMoreBuckets = startIndex + page.length < matchingBuckets.length;
|
|
34
|
+
return {
|
|
35
|
+
Buckets: page.map((bucket) => ({
|
|
36
|
+
Name: bucket.bucketName,
|
|
37
|
+
})),
|
|
38
|
+
ContinuationToken: hasMoreBuckets && lastBucket !== undefined
|
|
39
|
+
? ListBucketsCommandHandler.makeContinuationToken(lastBucket.bucketName)
|
|
40
|
+
: undefined,
|
|
41
|
+
Prefix: prefix,
|
|
42
|
+
$metadata: {},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
static makeContinuationToken(bucketName) {
|
|
46
|
+
return Buffer.from(bucketName, "utf8").toString("base64url");
|
|
47
|
+
}
|
|
48
|
+
static parseContinuationToken(token) {
|
|
49
|
+
return Buffer.from(token, "base64url").toString("utf8");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=list-buckets.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-buckets.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-buckets/list-buckets.handler.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IAIP;IAA7B,YAA6B,OAAuC;QAAvC,YAAO,GAAP,OAAO,CAAgC;IAAG,CAAC;IAExE;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAuB;QAClC,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QAChC,MAAM,iBAAiB,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACtD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC;QAElD,MAAM,eAAe,GACnB,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvE,MAAM,eAAe,GACnB,iBAAiB,KAAK,SAAS;YAC7B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QAE1E,MAAM,UAAU,GACd,eAAe,KAAK,SAAS;YAC3B,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,CAAC,EACD,eAAe,CAAC,SAAS,CACvB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,eAAe,CAClD,GAAG,CAAC,CACN,CAAC;QAER,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,cAAc,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QAEzE,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC7B,IAAI,EAAE,MAAM,CAAC,UAAU;aACxB,CAAC,CAAC;YACH,iBAAiB,EACf,cAAc,IAAI,UAAU,KAAK,SAAS;gBACxC,CAAC,CAAC,yBAAyB,CAAC,qBAAqB,CAC7C,UAAU,CAAC,UAAU,CACtB;gBACH,CAAC,CAAC,SAAS;YACf,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,UAAkB;QACrD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;IAEO,MAAM,CAAC,sBAAsB,CAAC,KAAa;QACjD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CommandHandler } from "../../../../command/command-handler.js";
|
|
2
|
+
import { type ListObjectsCommand, type ListObjectsCommandOutput } from "@aws-sdk/client-s3";
|
|
3
|
+
import type { S3BucketName, SimS3Bucket } from "../../bucket/s3-bucket.js";
|
|
4
|
+
/**
|
|
5
|
+
* Simulated S3 ListObjectsCommand handler.
|
|
6
|
+
*
|
|
7
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/ListObjectsCommand/
|
|
8
|
+
*/
|
|
9
|
+
export declare class ListObjectsCommandHandler implements CommandHandler<ListObjectsCommand, ListObjectsCommandOutput> {
|
|
10
|
+
private readonly buckets;
|
|
11
|
+
constructor(buckets: Map<S3BucketName, SimS3Bucket>);
|
|
12
|
+
/**
|
|
13
|
+
* Simulate listing Objects in an S3 Bucket.
|
|
14
|
+
*/
|
|
15
|
+
handle(cmd: ListObjectsCommand): Promise<ListObjectsCommandOutput>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=list-objects.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAI3E;;;;GAIG;AACH,qBAAa,yBAA0B,YAAW,cAAc,CAC9D,kBAAkB,EAClB,wBAAwB,CACzB;IACa,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;IAEpE;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CA6CzE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { NoSuchBucket, } from "@aws-sdk/client-s3";
|
|
2
|
+
import { assertDefined } from "../../../../util/defined.js";
|
|
3
|
+
import { jitter } from "../../../../util/sleep.js";
|
|
4
|
+
/**
|
|
5
|
+
* Simulated S3 ListObjectsCommand handler.
|
|
6
|
+
*
|
|
7
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/ListObjectsCommand/
|
|
8
|
+
*/
|
|
9
|
+
export class ListObjectsCommandHandler {
|
|
10
|
+
buckets;
|
|
11
|
+
constructor(buckets) {
|
|
12
|
+
this.buckets = buckets;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Simulate listing Objects in an S3 Bucket.
|
|
16
|
+
*/
|
|
17
|
+
async handle(cmd) {
|
|
18
|
+
assertDefined(cmd.input.Bucket, "ListObjectsCommand.input.Bucket");
|
|
19
|
+
const bucketName = cmd.input.Bucket;
|
|
20
|
+
const bucket = this.buckets.get(bucketName);
|
|
21
|
+
if (bucket === undefined) {
|
|
22
|
+
throw new NoSuchBucket({
|
|
23
|
+
message: `No S3 Bucket named ${bucketName}`,
|
|
24
|
+
$metadata: {},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
await jitter();
|
|
28
|
+
const prefix = cmd.input.Prefix;
|
|
29
|
+
const marker = cmd.input.Marker;
|
|
30
|
+
const maxKeys = cmd.input.MaxKeys ?? 1000;
|
|
31
|
+
const objects = await bucket.listObjects(prefix);
|
|
32
|
+
objects.sort((a, b) => a.key.localeCompare(b.key));
|
|
33
|
+
const startIndex = marker === undefined
|
|
34
|
+
? 0
|
|
35
|
+
: Math.max(0, objects.findIndex((object) => object.key === marker) + 1);
|
|
36
|
+
const page = objects.slice(startIndex, startIndex + maxKeys);
|
|
37
|
+
const lastObject = page.at(-1);
|
|
38
|
+
const isTruncated = startIndex + page.length < objects.length;
|
|
39
|
+
return {
|
|
40
|
+
Contents: page.map((object) => ({
|
|
41
|
+
Key: object.key,
|
|
42
|
+
Size: object.body.length,
|
|
43
|
+
})),
|
|
44
|
+
Name: bucket.bucketName,
|
|
45
|
+
Prefix: prefix,
|
|
46
|
+
Marker: marker,
|
|
47
|
+
MaxKeys: maxKeys,
|
|
48
|
+
IsTruncated: isTruncated,
|
|
49
|
+
NextMarker: isTruncated && lastObject !== undefined ? lastObject.key : undefined,
|
|
50
|
+
$metadata: {},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=list-objects.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/list-objects/list-objects.handler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IAIP;IAA7B,YAA6B,OAAuC;QAAvC,YAAO,GAAP,OAAO,CAAgC;IAAG,CAAC;IAExE;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAuB;QAClC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAsB,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,YAAY,CAAC;gBACrB,OAAO,EAAE,sBAAsB,UAAU,EAAE;gBAC3C,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QAChC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC;QAE1C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnD,MAAM,UAAU,GACd,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAE5E,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9D,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC9B,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;aACzB,CAAC,CAAC;YACH,IAAI,EAAE,MAAM,CAAC,UAAU;YACvB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,WAAW;YACxB,UAAU,EACR,WAAW,IAAI,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YACtE,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CommandHandler } from "../../../../command/command-handler.js";
|
|
2
|
+
import { type PutObjectCommand, type PutObjectCommandOutput } from "@aws-sdk/client-s3";
|
|
3
|
+
import type { S3BucketName, SimS3Bucket } from "../../bucket/s3-bucket.js";
|
|
4
|
+
/**
|
|
5
|
+
* Simulated S3 PutObjectCommand handler.
|
|
6
|
+
*
|
|
7
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/PutObjectCommand/
|
|
8
|
+
*/
|
|
9
|
+
export declare class PutObjectCommandHandler implements CommandHandler<PutObjectCommand, PutObjectCommandOutput> {
|
|
10
|
+
private readonly buckets;
|
|
11
|
+
constructor(buckets: Map<S3BucketName, SimS3Bucket>);
|
|
12
|
+
/**
|
|
13
|
+
* Simulate putting an Object into an S3 Bucket.
|
|
14
|
+
*/
|
|
15
|
+
handle(cmd: PutObjectCommand): Promise<PutObjectCommandOutput>;
|
|
16
|
+
private static toBuffer;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=put-object.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"put-object.handler.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-object.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAK3E;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,cAAc,CAC5D,gBAAgB,EAChB,sBAAsB,CACvB;IACa,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;IAEpE;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA2BpE,OAAO,CAAC,MAAM,CAAC,QAAQ;CAiBxB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { NoSuchBucket, } from "@aws-sdk/client-s3";
|
|
2
|
+
import { SimS3Object, SimS3ObjectMetadata } from "../../object/s3-object.js";
|
|
3
|
+
import { assertDefined } from "../../../../util/defined.js";
|
|
4
|
+
import { jitter } from "../../../../util/sleep.js";
|
|
5
|
+
/**
|
|
6
|
+
* Simulated S3 PutObjectCommand handler.
|
|
7
|
+
*
|
|
8
|
+
* https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/PutObjectCommand/
|
|
9
|
+
*/
|
|
10
|
+
export class PutObjectCommandHandler {
|
|
11
|
+
buckets;
|
|
12
|
+
constructor(buckets) {
|
|
13
|
+
this.buckets = buckets;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Simulate putting an Object into an S3 Bucket.
|
|
17
|
+
*/
|
|
18
|
+
async handle(cmd) {
|
|
19
|
+
assertDefined(cmd.input.Bucket, "PutObjectCommand.input.Bucket");
|
|
20
|
+
assertDefined(cmd.input.Key, "PutObjectCommand.input.Key");
|
|
21
|
+
const bucketName = cmd.input.Bucket;
|
|
22
|
+
const bucket = this.buckets.get(bucketName);
|
|
23
|
+
if (bucket === undefined) {
|
|
24
|
+
throw new NoSuchBucket({
|
|
25
|
+
message: `No S3 Bucket named ${bucketName}`,
|
|
26
|
+
$metadata: {},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
await jitter();
|
|
30
|
+
const object = new SimS3Object(cmd.input.Key, PutObjectCommandHandler.toBuffer(cmd.input.Body), new SimS3ObjectMetadata(cmd.input.Metadata));
|
|
31
|
+
await bucket.putObject(object);
|
|
32
|
+
return {
|
|
33
|
+
$metadata: {},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
static toBuffer(body) {
|
|
37
|
+
if (body === undefined) {
|
|
38
|
+
return Buffer.alloc(0);
|
|
39
|
+
}
|
|
40
|
+
if (typeof body === "string") {
|
|
41
|
+
return Buffer.from(body);
|
|
42
|
+
}
|
|
43
|
+
if (body instanceof Uint8Array) {
|
|
44
|
+
return Buffer.from(body);
|
|
45
|
+
}
|
|
46
|
+
throw new Error("PutObjectCommand.input.Body must be a string or Uint8Array");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=put-object.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"put-object.handler.js","sourceRoot":"","sources":["../../../../../src/service/s3/command/put-object/put-object.handler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAIL;IAA7B,YAA6B,OAAuC;QAAvC,YAAO,GAAP,OAAO,CAAgC;IAAG,CAAC;IAExE;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAqB;QAChC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;QACjE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;QAE3D,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAsB,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,YAAY,CAAC;gBACrB,OAAO,EAAE,sBAAsB,UAAU,EAAE;gBAC3C,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,MAAM,GAAG,IAAI,WAAW,CAC5B,GAAG,CAAC,KAAK,CAAC,GAAG,EACb,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAChD,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC5C,CAAC;QACF,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE/B,OAAO;YACL,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,QAAQ,CAAC,IAAuC;QAC7D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;CACF"}
|
package/dist/service/s3/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/service/s3/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/service/s3/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simulated S3 object metadata.
|
|
3
|
+
*/
|
|
4
|
+
export declare class SimS3ObjectMetadata {
|
|
5
|
+
readonly values: Record<string, string>;
|
|
6
|
+
constructor(values?: Record<string, string>);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Simulated S3 object.
|
|
10
|
+
*/
|
|
11
|
+
export declare class SimS3Object {
|
|
12
|
+
readonly key: string;
|
|
13
|
+
readonly body: Buffer;
|
|
14
|
+
readonly metadata: SimS3ObjectMetadata;
|
|
15
|
+
constructor(key: string, body?: Buffer, metadata?: SimS3ObjectMetadata);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=s3-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-object.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/object/s3-object.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,mBAAmB;aACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;gBAA9B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;CAChE;AAED;;GAEG;AACH,qBAAa,WAAW;aAEJ,GAAG,EAAE,MAAM;aACX,IAAI,EAAE,MAAM;aACZ,QAAQ,EAAE,mBAAmB;gBAF7B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAwB,EAC9B,QAAQ,GAAE,mBAA+C;CAE5E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simulated S3 object metadata.
|
|
3
|
+
*/
|
|
4
|
+
export class SimS3ObjectMetadata {
|
|
5
|
+
values;
|
|
6
|
+
constructor(values = {}) {
|
|
7
|
+
this.values = values;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Simulated S3 object.
|
|
12
|
+
*/
|
|
13
|
+
export class SimS3Object {
|
|
14
|
+
key;
|
|
15
|
+
body;
|
|
16
|
+
metadata;
|
|
17
|
+
constructor(key, body = Buffer.alloc(0), metadata = new SimS3ObjectMetadata()) {
|
|
18
|
+
this.key = key;
|
|
19
|
+
this.body = body;
|
|
20
|
+
this.metadata = metadata;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=s3-object.js.map
|
|
@@ -0,0 +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;IAA5B,YAA4B,SAAiC,EAAE;QAAnC,WAAM,GAAN,MAAM,CAA6B;IAAG,CAAC;CACpE;AAED;;GAEG;AACH,MAAM,OAAO,WAAW;IAEJ;IACA;IACA;IAHlB,YACkB,GAAW,EACX,OAAe,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAC9B,WAAgC,IAAI,mBAAmB,EAAE;QAFzD,QAAG,GAAH,GAAG,CAAQ;QACX,SAAI,GAAJ,IAAI,CAA0B;QAC9B,aAAQ,GAAR,QAAQ,CAAiD;IACxE,CAAC;CACL"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { S3BucketName, SimS3Bucket } from "./bucket/s3-bucket.js";
|
|
2
|
+
import type { CreateBucketCommand, CreateBucketCommandOutput, GetObjectCommand, GetObjectCommandOutput, ListBucketsCommand, ListBucketsCommandOutput, ListObjectsCommand, ListObjectsCommandOutput, PutObjectCommand, PutObjectCommandOutput } from "@aws-sdk/client-s3";
|
|
3
|
+
/**
|
|
4
|
+
* Simulated S3. Handles SDK commands. Emulates AWS behaviour and state.
|
|
5
|
+
*/
|
|
6
|
+
export declare class SimS3 {
|
|
7
|
+
private readonly buckets;
|
|
8
|
+
/**
|
|
9
|
+
* Handle a Create Bucket Command from the SDK.
|
|
10
|
+
*/
|
|
11
|
+
createBucket(cmd: CreateBucketCommand): Promise<CreateBucketCommandOutput>;
|
|
12
|
+
/**
|
|
13
|
+
* Handle a List Buckets Command from the SDK.
|
|
14
|
+
*/
|
|
15
|
+
listBuckets(cmd: ListBucketsCommand): Promise<ListBucketsCommandOutput>;
|
|
16
|
+
/**
|
|
17
|
+
* Handle a Put Object Command from the SDK.
|
|
18
|
+
*/
|
|
19
|
+
putObject(cmd: PutObjectCommand): Promise<PutObjectCommandOutput>;
|
|
20
|
+
/**
|
|
21
|
+
* Handle a Get Object Command from the SDK.
|
|
22
|
+
*/
|
|
23
|
+
getObject(cmd: GetObjectCommand): Promise<GetObjectCommandOutput>;
|
|
24
|
+
/**
|
|
25
|
+
* Handle a List Objects Command from the SDK.
|
|
26
|
+
*/
|
|
27
|
+
listObjects(cmd: ListObjectsCommand): Promise<ListObjectsCommandOutput>;
|
|
28
|
+
/**
|
|
29
|
+
* Get a simulated S3 Bucket instance by name.
|
|
30
|
+
*/
|
|
31
|
+
getSimBucketByName(bucketName: S3BucketName): SimS3Bucket;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=s3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../../../src/service/s3/s3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAQ5B;;GAEG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAEhE;;OAEG;IACG,YAAY,CAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,yBAAyB,CAAC;IAKrC;;OAEG;IACG,WAAW,CACf,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,wBAAwB,CAAC;IAKpC;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAKvE;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAKvE;;OAEG;IACG,WAAW,CACf,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,wBAAwB,CAAC;IAKpC;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,YAAY,GAAG,WAAW;CAK1D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { CreateBucketCommandHandler } from "./command/create-bucket/create-bucket.handler.js";
|
|
2
|
+
import { ListBucketsCommandHandler } from "./command/list-buckets/list-buckets.handler.js";
|
|
3
|
+
import { assertDefined } from "../../util/defined.js";
|
|
4
|
+
import { PutObjectCommandHandler } from "./command/put-object/put-object.handler.js";
|
|
5
|
+
import { GetObjectCommandHandler } from "./command/get-object/get-object.handler.js";
|
|
6
|
+
import { ListObjectsCommandHandler } from "./command/list-objects/list-objects.handler.js";
|
|
7
|
+
/**
|
|
8
|
+
* Simulated S3. Handles SDK commands. Emulates AWS behaviour and state.
|
|
9
|
+
*/
|
|
10
|
+
export class SimS3 {
|
|
11
|
+
buckets = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Handle a Create Bucket Command from the SDK.
|
|
14
|
+
*/
|
|
15
|
+
async createBucket(cmd) {
|
|
16
|
+
const handler = new CreateBucketCommandHandler(this.buckets);
|
|
17
|
+
return await handler.handle(cmd);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Handle a List Buckets Command from the SDK.
|
|
21
|
+
*/
|
|
22
|
+
async listBuckets(cmd) {
|
|
23
|
+
const handler = new ListBucketsCommandHandler(this.buckets);
|
|
24
|
+
return await handler.handle(cmd);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Handle a Put Object Command from the SDK.
|
|
28
|
+
*/
|
|
29
|
+
async putObject(cmd) {
|
|
30
|
+
const handler = new PutObjectCommandHandler(this.buckets);
|
|
31
|
+
return await handler.handle(cmd);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Handle a Get Object Command from the SDK.
|
|
35
|
+
*/
|
|
36
|
+
async getObject(cmd) {
|
|
37
|
+
const handler = new GetObjectCommandHandler(this.buckets);
|
|
38
|
+
return await handler.handle(cmd);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Handle a List Objects Command from the SDK.
|
|
42
|
+
*/
|
|
43
|
+
async listObjects(cmd) {
|
|
44
|
+
const handler = new ListObjectsCommandHandler(this.buckets);
|
|
45
|
+
return await handler.handle(cmd);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get a simulated S3 Bucket instance by name.
|
|
49
|
+
*/
|
|
50
|
+
getSimBucketByName(bucketName) {
|
|
51
|
+
const simBucket = this.buckets.get(bucketName);
|
|
52
|
+
assertDefined(simBucket, `Simulated S3 Bucket named '${bucketName}'`);
|
|
53
|
+
return simBucket;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=s3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.js","sourceRoot":"","sources":["../../../src/service/s3/s3.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAE3F;;GAEG;AACH,MAAM,OAAO,KAAK;IACC,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEhE;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,GAAwB;QAExB,MAAM,OAAO,GAAG,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,GAAuB;QAEvB,MAAM,OAAO,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5D,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,GAAqB;QACnC,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,GAAqB;QACnC,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,GAAuB;QAEvB,MAAM,OAAO,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5D,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,UAAwB;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,aAAa,CAAC,SAAS,EAAE,8BAA8B,UAAU,GAAG,CAAC,CAAC;QACtE,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-body-buffer.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/storage/s3-body-buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAC1B,OAAO,CAAC,MAAM,CAAC,CAQjB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert an AsyncIterable<Buffer> simulated S3 Object body to a Buffer.
|
|
3
|
+
*/
|
|
4
|
+
export async function simS3BodyToBuffer(body) {
|
|
5
|
+
const chunks = [];
|
|
6
|
+
for await (const chunk of body) {
|
|
7
|
+
chunks.push(chunk);
|
|
8
|
+
}
|
|
9
|
+
return Buffer.concat(chunks);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=s3-body-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-body-buffer.js","sourceRoot":"","sources":["../../../../src/service/s3/storage/s3-body-buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA2B;IAE3B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { SimS3Object } from "../object/s3-object.js";
|
|
2
|
+
export interface SimS3BucketStorage {
|
|
3
|
+
/**
|
|
4
|
+
* Put a simulated Object into storage.
|
|
5
|
+
*/
|
|
6
|
+
putObject(object: SimS3Object): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Get a simulated Object from storage.
|
|
9
|
+
*/
|
|
10
|
+
getObject(key: string): Promise<SimS3Object | undefined>;
|
|
11
|
+
/**
|
|
12
|
+
* List simulated Objects in storage.
|
|
13
|
+
*/
|
|
14
|
+
listObjects(prefix?: string): Promise<SimS3Object[]>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Default in-memory simulated S3 Bucket storage.
|
|
18
|
+
*/
|
|
19
|
+
export declare class MemoryS3BucketStorage implements SimS3BucketStorage {
|
|
20
|
+
private readonly objects;
|
|
21
|
+
/**
|
|
22
|
+
* Get a simulated Object from in-memory storage.
|
|
23
|
+
*/
|
|
24
|
+
getObject(key: string): Promise<SimS3Object | undefined>;
|
|
25
|
+
/**
|
|
26
|
+
* List simulated Objects in in-memory storage.
|
|
27
|
+
*/
|
|
28
|
+
listObjects(prefix?: string): Promise<SimS3Object[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Put a simulated Object into in-memory storage.
|
|
31
|
+
*/
|
|
32
|
+
putObject(object: SimS3Object): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=s3-bucket-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-bucket-storage.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/storage/s3-bucket-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAEzD;;OAEG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAMtD;AAED;;GAEG;AACH,qBAAa,qBAAsB,YAAW,kBAAkB;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAIxD;;OAEG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAQpD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAa9C"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default in-memory simulated S3 Bucket storage.
|
|
3
|
+
*/
|
|
4
|
+
export class MemoryS3BucketStorage {
|
|
5
|
+
objects = new Map();
|
|
6
|
+
/**
|
|
7
|
+
* Get a simulated Object from in-memory storage.
|
|
8
|
+
*/
|
|
9
|
+
getObject(key) {
|
|
10
|
+
return Promise.resolve(this.objects.get(key));
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* List simulated Objects in in-memory storage.
|
|
14
|
+
*/
|
|
15
|
+
listObjects(prefix) {
|
|
16
|
+
const objects = [...this.objects.entries()]
|
|
17
|
+
.filter(([key]) => prefix === undefined || key.startsWith(prefix))
|
|
18
|
+
.map(([, object]) => object);
|
|
19
|
+
return Promise.resolve(objects);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Put a simulated Object into in-memory storage.
|
|
23
|
+
*/
|
|
24
|
+
putObject(object) {
|
|
25
|
+
this.objects.set(object.key, object);
|
|
26
|
+
return Promise.resolve();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// /**
|
|
30
|
+
// * Maps simulated S3 Objects to files under a directory.
|
|
31
|
+
// */
|
|
32
|
+
// export class FilesystemS3BucketStorage implements SimS3BucketStorage {
|
|
33
|
+
// /**
|
|
34
|
+
// * Get a simulated Object from a file in the directory.
|
|
35
|
+
// */
|
|
36
|
+
// getObject(key: string): Promise<SimS3Object | undefined> {
|
|
37
|
+
// return Promise.resolve();
|
|
38
|
+
// }
|
|
39
|
+
//
|
|
40
|
+
// /**
|
|
41
|
+
// * List simulated Objects based on files in the directory.
|
|
42
|
+
// */
|
|
43
|
+
// listObjects(prefix?: string): Promise<SimS3Object[]> {
|
|
44
|
+
// return Promise.resolve([]);
|
|
45
|
+
// }
|
|
46
|
+
//
|
|
47
|
+
// /**
|
|
48
|
+
// * Store a simulated Object as a file in the directory.
|
|
49
|
+
// * TODO: Keep some kind of manifest for object metadata.
|
|
50
|
+
// */
|
|
51
|
+
// putObject(object: SimS3Object): Promise<void> {
|
|
52
|
+
// return Promise.resolve();
|
|
53
|
+
// }
|
|
54
|
+
//
|
|
55
|
+
// /**
|
|
56
|
+
// * Is it OK to change to a different storage implementation?
|
|
57
|
+
// * For now, we're assuming that a user should not need to change from a
|
|
58
|
+
// * filesystem storage at runtime, so this is always false.
|
|
59
|
+
// */
|
|
60
|
+
// allowChangeStorage(): boolean {
|
|
61
|
+
// return false;
|
|
62
|
+
// }
|
|
63
|
+
// }
|
|
64
|
+
//# sourceMappingURL=s3-bucket-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-bucket-storage.js","sourceRoot":"","sources":["../../../../src/service/s3/storage/s3-bucket-storage.ts"],"names":[],"mappings":"AAwBA;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACf,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE1D;;OAEG;IACH,SAAS,CAAC,GAAW;QACnB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,MAAe;QACzB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACxC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aACjE,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QAE/B,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAmB;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CAUF;AAED,MAAM;AACN,2DAA2D;AAC3D,MAAM;AACN,yEAAyE;AACzE,QAAQ;AACR,4DAA4D;AAC5D,QAAQ;AACR,+DAA+D;AAC/D,gCAAgC;AAChC,MAAM;AACN,EAAE;AACF,QAAQ;AACR,+DAA+D;AAC/D,QAAQ;AACR,2DAA2D;AAC3D,kCAAkC;AAClC,MAAM;AACN,EAAE;AACF,QAAQ;AACR,4DAA4D;AAC5D,6DAA6D;AAC7D,QAAQ;AACR,oDAAoD;AACpD,gCAAgC;AAChC,MAAM;AACN,EAAE;AACF,QAAQ;AACR,iEAAiE;AACjE,4EAA4E;AAC5E,+DAA+D;AAC/D,QAAQ;AACR,oCAAoC;AACpC,oBAAoB;AACpB,MAAM;AACN,IAAI"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kensio/yulin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "AWS system behaviour simulation for isolated unit testing",
|
|
5
5
|
"repository": "https://github.com/KensioSoftware/yulin",
|
|
6
6
|
"type": "module",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
"author": "Kensio Software",
|
|
38
38
|
"license": "AGPL-3.0",
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@aws-sdk/client-dynamodb": "^3.
|
|
41
|
-
"@aws-sdk/client-s3": "^3.
|
|
40
|
+
"@aws-sdk/client-dynamodb": "^3.1057.0",
|
|
41
|
+
"@aws-sdk/client-s3": "^3.1057.0",
|
|
42
42
|
"@eslint/js": "^10.0.1",
|
|
43
43
|
"@faker-js/faker": "^10.4.0",
|
|
44
|
-
"@kensio/smartass": "^1.0.
|
|
44
|
+
"@kensio/smartass": "^1.0.2",
|
|
45
45
|
"@smithy/smithy-client": "^4.13.5",
|
|
46
46
|
"@smithy/types": "^4.14.2",
|
|
47
47
|
"@types/eslint-plugin-security": "^3.0.1",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@vitest/coverage-v8": "^4.1.7",
|
|
51
51
|
"@vitest/eslint-plugin": "^1.6.18",
|
|
52
52
|
"aws-sdk-client-mock": "^4.1.0",
|
|
53
|
-
"eslint": "^10.4.
|
|
53
|
+
"eslint": "^10.4.1",
|
|
54
54
|
"eslint-config-prettier": "^10.1.8",
|
|
55
55
|
"eslint-plugin-jsdoc": "^62.9.0",
|
|
56
56
|
"eslint-plugin-no-secrets": "^2.3.3",
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"peerDependencies": {
|
|
66
66
|
"@aws-sdk/client-dynamodb": "^3.1001.0",
|
|
67
67
|
"@aws-sdk/client-s3": "^3.1001.0",
|
|
68
|
+
"@faker-js/faker": "^10.4.0",
|
|
68
69
|
"@smithy/smithy-client": "^4.12.1"
|
|
69
70
|
},
|
|
70
71
|
"peerDependenciesMeta": {
|