@kensio/yulin 0.2.0 → 0.3.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/README.md +76 -1
- package/dist/serve/controller/sim-aws-service-controller-container.d.ts +17 -0
- package/dist/serve/controller/sim-aws-service-controller-container.d.ts.map +1 -0
- package/dist/serve/controller/sim-aws-service-controller-container.js +29 -0
- package/dist/serve/controller/sim-aws-service-controller-container.js.map +1 -0
- package/dist/serve/controller/sim-service-controller.d.ts +22 -0
- package/dist/serve/controller/sim-service-controller.d.ts.map +1 -0
- package/dist/serve/controller/sim-service-controller.js +2 -0
- package/dist/serve/controller/sim-service-controller.js.map +1 -0
- package/dist/serve/http/sim-aws-http.d.ts +20 -0
- package/dist/serve/http/sim-aws-http.d.ts.map +1 -0
- package/dist/serve/http/sim-aws-http.js +57 -0
- package/dist/serve/http/sim-aws-http.js.map +1 -0
- package/dist/serve/http/sim-aws-local-server.d.ts +37 -0
- package/dist/serve/http/sim-aws-local-server.d.ts.map +1 -0
- package/dist/serve/http/sim-aws-local-server.js +132 -0
- package/dist/serve/http/sim-aws-local-server.js.map +1 -0
- package/dist/serve/http/sim-aws-local.conf.d.ts +8 -0
- package/dist/serve/http/sim-aws-local.conf.d.ts.map +1 -0
- package/dist/serve/http/sim-aws-local.conf.js +8 -0
- package/dist/serve/http/sim-aws-local.conf.js.map +1 -0
- package/dist/serve/index.d.ts +3 -0
- package/dist/serve/index.d.ts.map +1 -0
- package/dist/serve/index.js +3 -0
- package/dist/serve/index.js.map +1 -0
- package/dist/serve/resolve/sim-aws-local-service-resolver.d.ts +13 -0
- package/dist/serve/resolve/sim-aws-local-service-resolver.d.ts.map +1 -0
- package/dist/serve/resolve/sim-aws-local-service-resolver.js +38 -0
- package/dist/serve/resolve/sim-aws-local-service-resolver.js.map +1 -0
- package/dist/service/aws/arn.d.ts +17 -0
- package/dist/service/aws/arn.d.ts.map +1 -0
- package/dist/service/aws/arn.js +21 -0
- package/dist/service/aws/arn.js.map +1 -0
- package/dist/service/aws/sim-aws-account-region-scope.d.ts +38 -0
- package/dist/service/aws/sim-aws-account-region-scope.d.ts.map +1 -0
- package/dist/service/aws/sim-aws-account-region-scope.js +52 -0
- package/dist/service/aws/sim-aws-account-region-scope.js.map +1 -0
- package/dist/service/aws/sim-aws-account.d.ts +33 -0
- package/dist/service/aws/sim-aws-account.d.ts.map +1 -0
- package/dist/service/aws/sim-aws-account.js +38 -0
- package/dist/service/aws/sim-aws-account.js.map +1 -0
- package/dist/service/aws/sim-aws-region.d.ts +33 -0
- package/dist/service/aws/sim-aws-region.d.ts.map +1 -0
- package/dist/service/aws/sim-aws-region.js +74 -0
- package/dist/service/aws/sim-aws-region.js.map +1 -0
- package/dist/service/aws/sim-aws-services.d.ts +21 -0
- package/dist/service/aws/sim-aws-services.d.ts.map +1 -0
- package/dist/service/aws/sim-aws-services.js +2 -0
- package/dist/service/aws/sim-aws-services.js.map +1 -0
- package/dist/service/aws/sim-aws.d.ts +50 -0
- package/dist/service/aws/sim-aws.d.ts.map +1 -0
- package/dist/service/aws/sim-aws.js +82 -0
- package/dist/service/aws/sim-aws.js.map +1 -0
- package/dist/service/dynamodb/command/create-table/create-table.handler.d.ts +3 -1
- 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 +7 -3
- package/dist/service/dynamodb/command/create-table/create-table.handler.js.map +1 -1
- package/dist/service/dynamodb/index.d.ts +1 -1
- package/dist/service/dynamodb/index.d.ts.map +1 -1
- package/dist/service/dynamodb/index.js +1 -1
- package/dist/service/dynamodb/index.js.map +1 -1
- package/dist/service/dynamodb/sim-dynamodb.d.ts +29 -0
- package/dist/service/dynamodb/sim-dynamodb.d.ts.map +1 -0
- package/dist/service/dynamodb/sim-dynamodb.js +47 -0
- package/dist/service/dynamodb/sim-dynamodb.js.map +1 -0
- package/dist/service/dynamodb/table/dynamodb-table.d.ts +7 -1
- package/dist/service/dynamodb/table/dynamodb-table.d.ts.map +1 -1
- package/dist/service/dynamodb/table/dynamodb-table.js +14 -1
- package/dist/service/dynamodb/table/dynamodb-table.js.map +1 -1
- package/dist/service/s3/bucket/s3-bucket.d.ts +7 -3
- package/dist/service/s3/bucket/s3-bucket.d.ts.map +1 -1
- package/dist/service/s3/bucket/s3-bucket.js +10 -10
- package/dist/service/s3/bucket/s3-bucket.js.map +1 -1
- package/dist/service/s3/command/create-bucket/create-bucket.handler.d.ts +5 -1
- package/dist/service/s3/command/create-bucket/create-bucket.handler.d.ts.map +1 -1
- package/dist/service/s3/command/create-bucket/create-bucket.handler.js +26 -5
- package/dist/service/s3/command/create-bucket/create-bucket.handler.js.map +1 -1
- package/dist/service/s3/command/get-object/get-object.handler.d.ts +2 -2
- package/dist/service/s3/command/get-object/get-object.handler.d.ts.map +1 -1
- package/dist/service/s3/command/get-object/get-object.handler.js.map +1 -1
- package/dist/service/s3/command/list-buckets/list-buckets.handler.d.ts +2 -2
- package/dist/service/s3/command/list-buckets/list-buckets.handler.d.ts.map +1 -1
- package/dist/service/s3/command/list-buckets/list-buckets.handler.js.map +1 -1
- package/dist/service/s3/command/list-objects/list-objects.handler.d.ts +2 -2
- 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.map +1 -1
- package/dist/service/s3/command/put-object/put-object.handler.d.ts +3 -2
- 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 +9 -1
- package/dist/service/s3/command/put-object/put-object.handler.js.map +1 -1
- package/dist/service/s3/index.d.ts +1 -1
- package/dist/service/s3/index.d.ts.map +1 -1
- package/dist/service/s3/index.js +1 -1
- package/dist/service/s3/index.js.map +1 -1
- package/dist/service/s3/serve/sim-s3-controller.d.ts +15 -0
- package/dist/service/s3/serve/sim-s3-controller.d.ts.map +1 -0
- package/dist/service/s3/serve/sim-s3-controller.js +29 -0
- package/dist/service/s3/serve/sim-s3-controller.js.map +1 -0
- package/dist/service/s3/serve/sim-s3-get-obj-controller.d.ts +11 -0
- package/dist/service/s3/serve/sim-s3-get-obj-controller.d.ts.map +1 -0
- package/dist/service/s3/serve/sim-s3-get-obj-controller.js +35 -0
- package/dist/service/s3/serve/sim-s3-get-obj-controller.js.map +1 -0
- package/dist/service/s3/serve/sim-s3-req-router.d.ts +26 -0
- package/dist/service/s3/serve/sim-s3-req-router.d.ts.map +1 -0
- package/dist/service/s3/serve/sim-s3-req-router.js +79 -0
- package/dist/service/s3/serve/sim-s3-req-router.js.map +1 -0
- package/dist/service/s3/sim-s3-global-registry.d.ts +20 -0
- package/dist/service/s3/sim-s3-global-registry.d.ts.map +1 -0
- package/dist/service/s3/sim-s3-global-registry.js +22 -0
- package/dist/service/s3/sim-s3-global-registry.js.map +1 -0
- package/dist/service/s3/sim-s3.d.ts +38 -0
- package/dist/service/s3/sim-s3.d.ts.map +1 -0
- package/dist/service/s3/sim-s3.js +61 -0
- package/dist/service/s3/sim-s3.js.map +1 -0
- package/dist/service/s3/storage/s3-bucket-storage.d.ts +2 -16
- package/dist/service/s3/storage/s3-bucket-storage.d.ts.map +1 -1
- package/dist/service/s3/storage/s3-bucket-storage.js +1 -63
- package/dist/service/s3/storage/s3-bucket-storage.js.map +1 -1
- package/dist/service/s3/storage/s3-filesystem-storage.d.ts +59 -0
- package/dist/service/s3/storage/s3-filesystem-storage.d.ts.map +1 -0
- package/dist/service/s3/storage/s3-filesystem-storage.js +266 -0
- package/dist/service/s3/storage/s3-filesystem-storage.js.map +1 -0
- package/dist/service/s3/storage/s3-memory-storage.d.ts +27 -0
- package/dist/service/s3/storage/s3-memory-storage.d.ts.map +1 -0
- package/dist/service/s3/storage/s3-memory-storage.js +37 -0
- package/dist/service/s3/storage/s3-memory-storage.js.map +1 -0
- package/package.json +20 -8
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves HTTP requests into simulated S3 actions.
|
|
3
|
+
*/
|
|
4
|
+
export class SimS3RequestRouter {
|
|
5
|
+
simAws;
|
|
6
|
+
constructor(simAws) {
|
|
7
|
+
this.simAws = simAws;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Route an incoming service target and HTTP request to a simulated S3 action.
|
|
11
|
+
*/
|
|
12
|
+
route(target, request) {
|
|
13
|
+
if (request.method !== "GET" && request.method !== "HEAD") {
|
|
14
|
+
return {
|
|
15
|
+
action: "failure",
|
|
16
|
+
statusCode: 405,
|
|
17
|
+
message: "Method not allowed\n",
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (target.resourceName.length === 0) {
|
|
21
|
+
return {
|
|
22
|
+
action: "failure",
|
|
23
|
+
statusCode: 400,
|
|
24
|
+
message: "Missing S3 Bucket name\n",
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (target.regionName === undefined) {
|
|
28
|
+
return {
|
|
29
|
+
action: "failure",
|
|
30
|
+
statusCode: 400,
|
|
31
|
+
message: "Missing S3 Bucket region\n",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const url = new URL(request.url);
|
|
35
|
+
const objectKey = decodeURIComponent(url.pathname.replace(/^\/+/u, ""));
|
|
36
|
+
if (objectKey.length === 0) {
|
|
37
|
+
return {
|
|
38
|
+
action: "failure",
|
|
39
|
+
statusCode: 501,
|
|
40
|
+
message: "S3 Bucket indexes are not implemented\n",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const bucketName = target.resourceName;
|
|
44
|
+
const bucketScope = this.simAws
|
|
45
|
+
.s3GlobalRegistry()
|
|
46
|
+
.findBucketScope(bucketName);
|
|
47
|
+
if (bucketScope === undefined) {
|
|
48
|
+
return {
|
|
49
|
+
action: "failure",
|
|
50
|
+
statusCode: 404,
|
|
51
|
+
message: `S3 bucket named ${bucketName} not found`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (bucketScope.regionName !== target.regionName) {
|
|
55
|
+
return {
|
|
56
|
+
action: "failure",
|
|
57
|
+
statusCode: 404,
|
|
58
|
+
message: `S3 bucket named ${bucketName} is in region ${bucketScope.regionName}, not requested ${target.regionName}`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const bucket = this.simAws
|
|
62
|
+
.accountRegionScope(bucketScope.accountId, bucketScope.regionName)
|
|
63
|
+
.s3()
|
|
64
|
+
.getSimBucketByName(bucketName);
|
|
65
|
+
if (bucket === undefined) {
|
|
66
|
+
return {
|
|
67
|
+
action: "failure",
|
|
68
|
+
statusCode: 404,
|
|
69
|
+
message: `S3 bucket named ${bucketName} not found`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
action: "getObject",
|
|
74
|
+
bucket,
|
|
75
|
+
objectKey,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=sim-s3-req-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-s3-req-router.js","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-req-router.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C;;OAEG;IACH,KAAK,CAAC,MAA2B,EAAE,OAAgB;QACjD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1D,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,sBAAsB;aAChC,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,0BAA0B;aACpC,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,4BAA4B;aACtC,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAExE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,yCAAyC;aACnD,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,YAA+B,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM;aAC5B,gBAAgB,EAAE;aAClB,eAAe,CAAC,UAAU,CAAC,CAAC;QAE/B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,mBAAmB,UAAU,YAAY;aACnD,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;YACjD,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,mBAAmB,UAAU,iBAAiB,WAAW,CAAC,UAAU,mBAAmB,MAAM,CAAC,UAAU,EAAE;aACpH,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;aACvB,kBAAkB,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC;aACjE,EAAE,EAAE;aACJ,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAElC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,mBAAmB,UAAU,YAAY;aACnD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,MAAM;YACN,SAAS;SACV,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SimS3BucketName } from "./bucket/s3-bucket.js";
|
|
2
|
+
import type { SimAwsAccountRegionScope } from "../aws/sim-aws-account-region-scope.js";
|
|
3
|
+
/**
|
|
4
|
+
* Simulate global existence of S3 Buckets across Account and Region scopes.
|
|
5
|
+
* Note that despite the label "global", this is still encapsulated.
|
|
6
|
+
* SimAws manages a singleton of this registry, but it can be freely
|
|
7
|
+
* instantiated for isolated state.
|
|
8
|
+
*/
|
|
9
|
+
export declare class SimS3GlobalRegistry {
|
|
10
|
+
private readonly bucketScopes;
|
|
11
|
+
/**
|
|
12
|
+
* Register a Bucket with its Account and Region scope.
|
|
13
|
+
*/
|
|
14
|
+
registerBucket(bucketName: SimS3BucketName, scope: SimAwsAccountRegionScope): void;
|
|
15
|
+
/**
|
|
16
|
+
* Look up the Account Region scope for a Bucket by Bucket name.
|
|
17
|
+
*/
|
|
18
|
+
findBucketScope(bucketName: SimS3BucketName): SimAwsAccountRegionScope | undefined;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=sim-s3-global-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-s3-global-registry.d.ts","sourceRoot":"","sources":["../../../src/service/s3/sim-s3-global-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAEvF;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAGzB;IAEJ;;OAEG;IACH,cAAc,CACZ,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,wBAAwB,GAC9B,IAAI;IAIP;;OAEG;IACH,eAAe,CACb,UAAU,EAAE,eAAe,GAC1B,wBAAwB,GAAG,SAAS;CAGxC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simulate global existence of S3 Buckets across Account and Region scopes.
|
|
3
|
+
* Note that despite the label "global", this is still encapsulated.
|
|
4
|
+
* SimAws manages a singleton of this registry, but it can be freely
|
|
5
|
+
* instantiated for isolated state.
|
|
6
|
+
*/
|
|
7
|
+
export class SimS3GlobalRegistry {
|
|
8
|
+
bucketScopes = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* Register a Bucket with its Account and Region scope.
|
|
11
|
+
*/
|
|
12
|
+
registerBucket(bucketName, scope) {
|
|
13
|
+
this.bucketScopes.set(bucketName, scope);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Look up the Account Region scope for a Bucket by Bucket name.
|
|
17
|
+
*/
|
|
18
|
+
findBucketScope(bucketName) {
|
|
19
|
+
return this.bucketScopes.get(bucketName);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=sim-s3-global-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-s3-global-registry.js","sourceRoot":"","sources":["../../../src/service/s3/sim-s3-global-registry.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IACb,YAAY,GAAG,IAAI,GAAG,EAGpC,CAAC;IAEJ;;OAEG;IACH,cAAc,CACZ,UAA2B,EAC3B,KAA+B;QAE/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,eAAe,CACb,UAA2B;QAE3B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SimS3Bucket, SimS3BucketName } from "./bucket/s3-bucket.js";
|
|
2
|
+
import type { CreateBucketCommand, CreateBucketCommandOutput, GetObjectCommand, GetObjectCommandOutput, ListBucketsCommand, ListBucketsCommandOutput, ListObjectsCommand, ListObjectsCommandOutput, PutObjectCommand, PutObjectCommandOutput } from "@aws-sdk/client-s3";
|
|
3
|
+
import { SimS3GlobalRegistry } from "./sim-s3-global-registry.js";
|
|
4
|
+
import { type SimAwsAccountRegionScope } from "../aws/sim-aws-account-region-scope.js";
|
|
5
|
+
/**
|
|
6
|
+
* Simulated S3. Handles SDK commands. Emulates AWS behaviour and state.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SimS3 {
|
|
9
|
+
private readonly accountRegionScope;
|
|
10
|
+
private readonly s3GlobalRegistry;
|
|
11
|
+
private readonly buckets;
|
|
12
|
+
constructor(accountRegionScope?: SimAwsAccountRegionScope, s3GlobalRegistry?: SimS3GlobalRegistry);
|
|
13
|
+
/**
|
|
14
|
+
* Handle a Create Bucket Command from the SDK.
|
|
15
|
+
*/
|
|
16
|
+
createBucket(cmd: CreateBucketCommand): Promise<CreateBucketCommandOutput>;
|
|
17
|
+
/**
|
|
18
|
+
* Handle a List Buckets Command from the SDK.
|
|
19
|
+
*/
|
|
20
|
+
listBuckets(cmd: ListBucketsCommand): Promise<ListBucketsCommandOutput>;
|
|
21
|
+
/**
|
|
22
|
+
* Handle a Put Object Command from the SDK.
|
|
23
|
+
*/
|
|
24
|
+
putObject(cmd: PutObjectCommand): Promise<PutObjectCommandOutput>;
|
|
25
|
+
/**
|
|
26
|
+
* Handle a Get Object Command from the SDK.
|
|
27
|
+
*/
|
|
28
|
+
getObject(cmd: GetObjectCommand): Promise<GetObjectCommandOutput>;
|
|
29
|
+
/**
|
|
30
|
+
* Handle a List Objects Command from the SDK.
|
|
31
|
+
*/
|
|
32
|
+
listObjects(cmd: ListObjectsCommand): Promise<ListObjectsCommandOutput>;
|
|
33
|
+
/**
|
|
34
|
+
* Get a simulated S3 Bucket instance by name.
|
|
35
|
+
*/
|
|
36
|
+
getSimBucketByName(bucketName: SimS3BucketName): SimS3Bucket | undefined;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=sim-s3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-s3.d.ts","sourceRoot":"","sources":["../../../src/service/s3/sim-s3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,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;AAM5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,wCAAwC,CAAC;AAEhD;;GAEG;AACH,qBAAa,KAAK;IAId,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAJnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;gBAGhD,kBAAkB,GAAE,wBAAiE,EACrF,gBAAgB,GAAE,mBAA+C;IAGpF;;OAEG;IACG,YAAY,CAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,yBAAyB,CAAC;IASrC;;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,eAAe,GAAG,WAAW,GAAG,SAAS;CAGzE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { CreateBucketCommandHandler } from "./command/create-bucket/create-bucket.handler.js";
|
|
2
|
+
import { ListBucketsCommandHandler } from "./command/list-buckets/list-buckets.handler.js";
|
|
3
|
+
import { PutObjectCommandHandler } from "./command/put-object/put-object.handler.js";
|
|
4
|
+
import { GetObjectCommandHandler } from "./command/get-object/get-object.handler.js";
|
|
5
|
+
import { ListObjectsCommandHandler } from "./command/list-objects/list-objects.handler.js";
|
|
6
|
+
import { SimS3GlobalRegistry } from "./sim-s3-global-registry.js";
|
|
7
|
+
import { simAwsAccountRegionScopeFactory, } from "../aws/sim-aws-account-region-scope.js";
|
|
8
|
+
/**
|
|
9
|
+
* Simulated S3. Handles SDK commands. Emulates AWS behaviour and state.
|
|
10
|
+
*/
|
|
11
|
+
export class SimS3 {
|
|
12
|
+
accountRegionScope;
|
|
13
|
+
s3GlobalRegistry;
|
|
14
|
+
buckets = new Map();
|
|
15
|
+
constructor(accountRegionScope = simAwsAccountRegionScopeFactory.make(), s3GlobalRegistry = new SimS3GlobalRegistry()) {
|
|
16
|
+
this.accountRegionScope = accountRegionScope;
|
|
17
|
+
this.s3GlobalRegistry = s3GlobalRegistry;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Handle a Create Bucket Command from the SDK.
|
|
21
|
+
*/
|
|
22
|
+
async createBucket(cmd) {
|
|
23
|
+
const handler = new CreateBucketCommandHandler(this.accountRegionScope, this.buckets, this.s3GlobalRegistry);
|
|
24
|
+
return await handler.handle(cmd);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Handle a List Buckets Command from the SDK.
|
|
28
|
+
*/
|
|
29
|
+
async listBuckets(cmd) {
|
|
30
|
+
const handler = new ListBucketsCommandHandler(this.buckets);
|
|
31
|
+
return await handler.handle(cmd);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Handle a Put Object Command from the SDK.
|
|
35
|
+
*/
|
|
36
|
+
async putObject(cmd) {
|
|
37
|
+
const handler = new PutObjectCommandHandler(this.buckets);
|
|
38
|
+
return await handler.handle(cmd);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Handle a Get Object Command from the SDK.
|
|
42
|
+
*/
|
|
43
|
+
async getObject(cmd) {
|
|
44
|
+
const handler = new GetObjectCommandHandler(this.buckets);
|
|
45
|
+
return await handler.handle(cmd);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Handle a List Objects Command from the SDK.
|
|
49
|
+
*/
|
|
50
|
+
async listObjects(cmd) {
|
|
51
|
+
const handler = new ListObjectsCommandHandler(this.buckets);
|
|
52
|
+
return await handler.handle(cmd);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get a simulated S3 Bucket instance by name.
|
|
56
|
+
*/
|
|
57
|
+
getSimBucketByName(bucketName) {
|
|
58
|
+
return this.buckets.get(bucketName);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=sim-s3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-s3.js","sourceRoot":"","sources":["../../../src/service/s3/sim-s3.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAEL,+BAA+B,GAChC,MAAM,wCAAwC,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,KAAK;IAIG;IACA;IAJF,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEnE,YACmB,qBAA+C,+BAA+B,CAAC,IAAI,EAAE,EACrF,mBAAwC,IAAI,mBAAmB,EAAE;QADjE,uBAAkB,GAAlB,kBAAkB,CAAmE;QACrF,qBAAgB,GAAhB,gBAAgB,CAAiD;IACjF,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,GAAwB;QAExB,MAAM,OAAO,GAAG,IAAI,0BAA0B,CAC5C,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,gBAAgB,CACtB,CAAC;QACF,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,UAA2B;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -12,23 +12,9 @@ export interface SimS3BucketStorage {
|
|
|
12
12
|
* List simulated Objects in storage.
|
|
13
13
|
*/
|
|
14
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
15
|
/**
|
|
26
|
-
*
|
|
16
|
+
* Is it OK to change to a different storage implementation?
|
|
27
17
|
*/
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Put a simulated Object into in-memory storage.
|
|
31
|
-
*/
|
|
32
|
-
putObject(object: SimS3Object): Promise<void>;
|
|
18
|
+
allowChangeStorage(): boolean;
|
|
33
19
|
}
|
|
34
20
|
//# sourceMappingURL=s3-bucket-storage.d.ts.map
|
|
@@ -1 +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;
|
|
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;IAErD;;OAEG;IACH,kBAAkB,IAAI,OAAO,CAAC;CAC/B"}
|
|
@@ -1,64 +1,2 @@
|
|
|
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
|
-
// }
|
|
1
|
+
export {};
|
|
64
2
|
//# sourceMappingURL=s3-bucket-storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-bucket-storage.js","sourceRoot":"","sources":["../../../../src/service/s3/storage/s3-bucket-storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"s3-bucket-storage.js","sourceRoot":"","sources":["../../../../src/service/s3/storage/s3-bucket-storage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { SimS3BucketStorage } from "./s3-bucket-storage.js";
|
|
2
|
+
import { SimS3Object } from "../object/s3-object.js";
|
|
3
|
+
/**
|
|
4
|
+
* Maps simulated S3 Objects to files under a directory.
|
|
5
|
+
* This is useful for local development, such as serving a static website
|
|
6
|
+
* locally out of simulated S3.
|
|
7
|
+
* This class has some simple checks to reduce the risk of reading or writing
|
|
8
|
+
* files that might be unsafe, but it cannot completely protect against all
|
|
9
|
+
* potential safety issues.
|
|
10
|
+
*/
|
|
11
|
+
export declare class FilesystemS3BucketStorage implements SimS3BucketStorage {
|
|
12
|
+
private readonly directoryPath;
|
|
13
|
+
private readonly allowedDirectoryNames;
|
|
14
|
+
constructor(directoryPath: string, options?: FilesystemS3BucketStorageOptions);
|
|
15
|
+
/**
|
|
16
|
+
* Get a simulated Object from a file in the directory.
|
|
17
|
+
*/
|
|
18
|
+
getObject(key: string): Promise<SimS3Object | undefined>;
|
|
19
|
+
/**
|
|
20
|
+
* List simulated Objects based on files in the directory.
|
|
21
|
+
*/
|
|
22
|
+
listObjects(prefix?: string): Promise<SimS3Object[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Store a simulated Object as a file in the directory.
|
|
25
|
+
*/
|
|
26
|
+
putObject(object: SimS3Object): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Is it OK to change to a different storage implementation?
|
|
29
|
+
* For now, we're assuming that a user should not need to change from a
|
|
30
|
+
* filesystem storage at runtime, so this is always false.
|
|
31
|
+
*/
|
|
32
|
+
allowChangeStorage(): boolean;
|
|
33
|
+
private filePathForObjectKey;
|
|
34
|
+
private listObjectKeys;
|
|
35
|
+
private listObjectKeysInDirectory;
|
|
36
|
+
/**
|
|
37
|
+
* Make up reasonable metadata for an Object based on the file on disk.
|
|
38
|
+
*/
|
|
39
|
+
private metadataForObjectKey;
|
|
40
|
+
/**
|
|
41
|
+
* Guess a reasonable content type for an Object key based on its file
|
|
42
|
+
* extension on disk.
|
|
43
|
+
*/
|
|
44
|
+
private contentTypeForObjectKey;
|
|
45
|
+
private assertSafeDirectoryPath;
|
|
46
|
+
private assertSafeObjectKey;
|
|
47
|
+
private pathContainsParentDirectorySegment;
|
|
48
|
+
private isAllowedObjectKeyExtension;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Options for filesystem-based simulated S3 Bucket storage.
|
|
52
|
+
*/
|
|
53
|
+
export interface FilesystemS3BucketStorageOptions {
|
|
54
|
+
/**
|
|
55
|
+
* Directory names that are safe to use as filesystem storage roots.
|
|
56
|
+
*/
|
|
57
|
+
readonly allowedDirectoryNames?: readonly string[];
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=s3-filesystem-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-filesystem-storage.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/storage/s3-filesystem-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAuB,MAAM,wBAAwB,CAAC;AAK1E;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IAClE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAoB;gBAGxD,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,gCAAqC;IAQhD;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAqB9D;;OAEG;IACG,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmB1D;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IASnD;;;;OAIG;IACH,kBAAkB,IAAI,OAAO;IAI7B,OAAO,CAAC,oBAAoB;YAkBd,cAAc;YAoBd,yBAAyB;IAiCvC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAqD/B,OAAO,CAAC,uBAAuB;IAuC/B,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,kCAAkC;IAI1C,OAAO,CAAC,2BAA2B;CAGpC;AAED;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C;;OAEG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpD"}
|