@kensio/yulin 1.4.1 → 1.5.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/serve/http/url/sim-aws-request-hostname.d.ts +13 -0
- package/dist/serve/http/url/sim-aws-request-hostname.d.ts.map +1 -0
- package/dist/serve/http/url/sim-aws-request-hostname.js +19 -0
- package/dist/serve/http/url/sim-aws-request-hostname.js.map +1 -0
- package/dist/service/aws/sim-aws-properties.d.ts +6 -1
- package/dist/service/aws/sim-aws-properties.d.ts.map +1 -1
- package/dist/service/aws/sim-aws.js.map +1 -1
- package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.d.ts +9 -0
- package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.d.ts.map +1 -1
- package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.js +12 -0
- package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.js.map +1 -1
- package/dist/service/cloudfront/cff/adapter/sim-cff-request-response-adapter.d.ts +19 -0
- package/dist/service/cloudfront/cff/adapter/sim-cff-request-response-adapter.d.ts.map +1 -1
- package/dist/service/cloudfront/cff/adapter/sim-cff-request-response-adapter.js +35 -2
- package/dist/service/cloudfront/cff/adapter/sim-cff-request-response-adapter.js.map +1 -1
- package/dist/service/cloudfront/command/create-distribution/create-distribution.command.d.ts +16 -0
- package/dist/service/cloudfront/command/create-distribution/create-distribution.command.d.ts.map +1 -1
- package/dist/service/cloudfront/command/create-distribution/sim-cf-distro-config-normalizer.d.ts.map +1 -1
- package/dist/service/cloudfront/command/create-distribution/sim-cf-distro-config-normalizer.js +1 -0
- package/dist/service/cloudfront/command/create-distribution/sim-cf-distro-config-normalizer.js.map +1 -1
- package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.d.ts +3 -0
- package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.d.ts.map +1 -1
- package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.js +11 -3
- package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.js.map +1 -1
- package/dist/service/cloudfront/controller/error/sim-cf-custom-error-responder.d.ts +29 -0
- package/dist/service/cloudfront/controller/error/sim-cf-custom-error-responder.d.ts.map +1 -0
- package/dist/service/cloudfront/controller/error/sim-cf-custom-error-responder.js +58 -0
- package/dist/service/cloudfront/controller/error/sim-cf-custom-error-responder.js.map +1 -0
- package/dist/service/cloudfront/controller/root-object/sim-cf-default-root-object-request.d.ts +17 -0
- package/dist/service/cloudfront/controller/root-object/sim-cf-default-root-object-request.d.ts.map +1 -0
- package/dist/service/cloudfront/controller/root-object/sim-cf-default-root-object-request.js +35 -0
- package/dist/service/cloudfront/controller/root-object/sim-cf-default-root-object-request.js.map +1 -0
- package/dist/service/cloudfront/controller/sim-cloudfront-request-pipeline.d.ts +5 -2
- package/dist/service/cloudfront/controller/sim-cloudfront-request-pipeline.d.ts.map +1 -1
- package/dist/service/cloudfront/controller/sim-cloudfront-request-pipeline.js +13 -3
- package/dist/service/cloudfront/controller/sim-cloudfront-request-pipeline.js.map +1 -1
- package/dist/service/cloudfront/custom-error/sim-cloudfront-custom-error-response.d.ts +24 -0
- package/dist/service/cloudfront/custom-error/sim-cloudfront-custom-error-response.d.ts.map +1 -0
- package/dist/service/cloudfront/custom-error/sim-cloudfront-custom-error-response.js +14 -0
- package/dist/service/cloudfront/custom-error/sim-cloudfront-custom-error-response.js.map +1 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-custom-error-configurator.d.ts +19 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-custom-error-configurator.d.ts.map +1 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-custom-error-configurator.js +53 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-custom-error-configurator.js.map +1 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-distribution-configurator.d.ts +11 -1
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-distribution-configurator.d.ts.map +1 -1
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-distribution-configurator.js +26 -1
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-distribution-configurator.js.map +1 -1
- package/dist/service/cloudfront/distribution/sim-cloudfront-distribution.d.ts +14 -0
- package/dist/service/cloudfront/distribution/sim-cloudfront-distribution.d.ts.map +1 -1
- package/dist/service/cloudfront/distribution/sim-cloudfront-distribution.js +20 -0
- package/dist/service/cloudfront/distribution/sim-cloudfront-distribution.js.map +1 -1
- package/dist/service/cloudfront/error/sim-cloudfront.error.d.ts +31 -0
- package/dist/service/cloudfront/error/sim-cloudfront.error.d.ts.map +1 -1
- package/dist/service/cloudfront/error/sim-cloudfront.error.js +39 -0
- package/dist/service/cloudfront/error/sim-cloudfront.error.js.map +1 -1
- package/dist/service/cloudfront/router/sim-cloud-front-distro-router.d.ts.map +1 -1
- package/dist/service/cloudfront/router/sim-cloud-front-distro-router.js +2 -7
- package/dist/service/cloudfront/router/sim-cloud-front-distro-router.js.map +1 -1
- package/dist/service/dynamodb/document/sim-dynamodb-document-command-paths.d.ts +12 -3
- package/dist/service/dynamodb/document/sim-dynamodb-document-command-paths.d.ts.map +1 -1
- package/dist/service/dynamodb/document/sim-dynamodb-document-command-paths.js +28 -3
- package/dist/service/dynamodb/document/sim-dynamodb-document-command-paths.js.map +1 -1
- package/dist/service/dynamodb/document/sim-dynamodb-document-command.d.ts +2 -8
- package/dist/service/dynamodb/document/sim-dynamodb-document-command.d.ts.map +1 -1
- package/dist/service/dynamodb/document/sim-dynamodb-document-command.js +3 -20
- package/dist/service/dynamodb/document/sim-dynamodb-document-command.js.map +1 -1
- package/dist/service/dynamodb/document/sim-dynamodb-document-routes.d.ts +22 -6
- package/dist/service/dynamodb/document/sim-dynamodb-document-routes.d.ts.map +1 -1
- package/dist/service/dynamodb/document/sim-dynamodb-document-routes.js +43 -22
- package/dist/service/dynamodb/document/sim-dynamodb-document-routes.js.map +1 -1
- package/dist/service/dynamodb/document/sim-dynamodb-document-shared-name-route.d.ts +26 -0
- package/dist/service/dynamodb/document/sim-dynamodb-document-shared-name-route.d.ts.map +1 -0
- package/dist/service/dynamodb/document/sim-dynamodb-document-shared-name-route.js +31 -0
- package/dist/service/dynamodb/document/sim-dynamodb-document-shared-name-route.js.map +1 -0
- package/dist/service/dynamodb/sdk/sim-dynamodb-sdk-command-router.d.ts.map +1 -1
- package/dist/service/dynamodb/sdk/sim-dynamodb-sdk-command-router.js +13 -14
- package/dist/service/dynamodb/sdk/sim-dynamodb-sdk-command-router.js.map +1 -1
- package/dist/service/route53/command/create-hosted-zone/sim-route53-zone-id.d.ts +9 -2
- package/dist/service/route53/command/create-hosted-zone/sim-route53-zone-id.d.ts.map +1 -1
- package/dist/service/route53/command/create-hosted-zone/sim-route53-zone-id.js +25 -6
- package/dist/service/route53/command/create-hosted-zone/sim-route53-zone-id.js.map +1 -1
- package/dist/service/route53/error/sim-route53.error.d.ts +7 -0
- package/dist/service/route53/error/sim-route53.error.d.ts.map +1 -1
- package/dist/service/route53/error/sim-route53.error.js +9 -0
- package/dist/service/route53/error/sim-route53.error.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,6 +14,22 @@ const writtenAttributes = simDynamoDbDocumentFields({
|
|
|
14
14
|
* answered items both are.
|
|
15
15
|
*/
|
|
16
16
|
const valueRecords = simDynamoDbDocumentEach(simDynamoDbDocumentValues());
|
|
17
|
+
/**
|
|
18
|
+
* What a read is given: where to carry on from, and the values its expressions
|
|
19
|
+
* compare against. A Query and a Scan take the same ones.
|
|
20
|
+
*/
|
|
21
|
+
const readInput = simDynamoDbDocumentFields({
|
|
22
|
+
ExclusiveStartKey: simDynamoDbDocumentValues(),
|
|
23
|
+
ExpressionAttributeValues: simDynamoDbDocumentValues(),
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* What a read answers with: the items it found, and where the page after it
|
|
27
|
+
* carries on from.
|
|
28
|
+
*/
|
|
29
|
+
const readPage = simDynamoDbDocumentFields({
|
|
30
|
+
Items: valueRecords,
|
|
31
|
+
LastEvaluatedKey: simDynamoDbDocumentValues(),
|
|
32
|
+
});
|
|
17
33
|
/**
|
|
18
34
|
* One put or delete in a batch write.
|
|
19
35
|
*/
|
|
@@ -41,9 +57,10 @@ const batchGetKeys = simDynamoDbDocumentEach(simDynamoDbDocumentFields({ Keys: v
|
|
|
41
57
|
*
|
|
42
58
|
* They stop short of the real ones in one place. `Expected`,
|
|
43
59
|
* `ConditionalOperator` and `AttributeUpdates` are the conditional write and
|
|
44
|
-
* the update that expressions replaced, and
|
|
45
|
-
*
|
|
46
|
-
*
|
|
60
|
+
* the update that expressions replaced, and `KeyConditions`, `QueryFilter` and
|
|
61
|
+
* `ScanFilter` are the read the same expressions replaced. Simulated DynamoDB
|
|
62
|
+
* refuses all six, so a request carrying one never reaches a conversion.
|
|
63
|
+
* Converting input that is about to be refused would only move the refusal.
|
|
47
64
|
*/
|
|
48
65
|
export const simDynamoDbDocumentCommandPaths = {
|
|
49
66
|
put: {
|
|
@@ -71,6 +88,14 @@ export const simDynamoDbDocumentCommandPaths = {
|
|
|
71
88
|
}),
|
|
72
89
|
output: writtenAttributes,
|
|
73
90
|
},
|
|
91
|
+
query: {
|
|
92
|
+
input: readInput,
|
|
93
|
+
output: readPage,
|
|
94
|
+
},
|
|
95
|
+
scan: {
|
|
96
|
+
input: readInput,
|
|
97
|
+
output: readPage,
|
|
98
|
+
},
|
|
74
99
|
batchWrite: {
|
|
75
100
|
input: simDynamoDbDocumentFields({ RequestItems: batchWriteRequests }),
|
|
76
101
|
output: simDynamoDbDocumentFields({ UnprocessedItems: batchWriteRequests }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-dynamodb-document-command-paths.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-command-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EAEzB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAUzC;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;IAClD,UAAU,EAAE,yBAAyB,EAAE;CACxC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,YAAY,GAAG,uBAAuB,CAAC,yBAAyB,EAAE,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;IAClD,UAAU,EAAE,yBAAyB,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,CAAC;IAC5E,aAAa,EAAE,yBAAyB,CAAC;QACvC,GAAG,EAAE,yBAAyB,EAAE;KACjC,CAAC;CACH,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,kBAAkB,GAAG,uBAAuB,CAChD,uBAAuB,CAAC,iBAAiB,CAAC,CAC3C,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAG,uBAAuB,CAC1C,yBAAyB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAClD,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"sim-dynamodb-document-command-paths.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-command-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EAEzB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAUzC;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;IAClD,UAAU,EAAE,yBAAyB,EAAE;CACxC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,YAAY,GAAG,uBAAuB,CAAC,yBAAyB,EAAE,CAAC,CAAC;AAE1E;;;GAGG;AACH,MAAM,SAAS,GAAG,yBAAyB,CAAC;IAC1C,iBAAiB,EAAE,yBAAyB,EAAE;IAC9C,yBAAyB,EAAE,yBAAyB,EAAE;CACvD,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,QAAQ,GAAG,yBAAyB,CAAC;IACzC,KAAK,EAAE,YAAY;IACnB,gBAAgB,EAAE,yBAAyB,EAAE;CAC9C,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;IAClD,UAAU,EAAE,yBAAyB,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,CAAC;IAC5E,aAAa,EAAE,yBAAyB,CAAC;QACvC,GAAG,EAAE,yBAAyB,EAAE;KACjC,CAAC;CACH,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,kBAAkB,GAAG,uBAAuB,CAChD,uBAAuB,CAAC,iBAAiB,CAAC,CAC3C,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAG,uBAAuB,CAC1C,yBAAyB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAClD,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,GAAG,EAAE;QACH,KAAK,EAAE,yBAAyB,CAAC;YAC/B,IAAI,EAAE,yBAAyB,EAAE;YACjC,yBAAyB,EAAE,yBAAyB,EAAE;SACvD,CAAC;QACF,MAAM,EAAE,iBAAiB;KAC1B;IACD,GAAG,EAAE;QACH,KAAK,EAAE,yBAAyB,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE,EAAE,CAAC;QACtE,MAAM,EAAE,yBAAyB,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,CAAC;KACzE;IACD,MAAM,EAAE;QACN,KAAK,EAAE,yBAAyB,CAAC;YAC/B,GAAG,EAAE,yBAAyB,EAAE;YAChC,yBAAyB,EAAE,yBAAyB,EAAE;SACvD,CAAC;QACF,MAAM,EAAE,iBAAiB;KAC1B;IACD,MAAM,EAAE;QACN,KAAK,EAAE,yBAAyB,CAAC;YAC/B,GAAG,EAAE,yBAAyB,EAAE;YAChC,yBAAyB,EAAE,yBAAyB,EAAE;SACvD,CAAC;QACF,MAAM,EAAE,iBAAiB;KAC1B;IACD,KAAK,EAAE;QACL,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,QAAQ;KACjB;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,QAAQ;KACjB;IACD,UAAU,EAAE;QACV,KAAK,EAAE,yBAAyB,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC;QACtE,MAAM,EAAE,yBAAyB,CAAC,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;KAC5E;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,yBAAyB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;QAChE,MAAM,EAAE,yBAAyB,CAAC;YAChC,sEAAsE;YACtE,SAAS,EAAE,uBAAuB,CAAC,YAAY,CAAC;YAChD,eAAe,EAAE,YAAY;SAC9B,CAAC;KACH;CAC2E,CAAC"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The SDK router keys on the Command's class name, and `QueryCommand` and
|
|
5
|
-
* `ScanCommand` are named the same in `@aws-sdk/client-dynamodb` and in
|
|
6
|
-
* `@aws-sdk/lib-dynamodb`, unlike `PutCommand` and `PutItemCommand`. A document
|
|
7
|
-
* Command reaching the client operation would have its native JavaScript values
|
|
8
|
-
* read as AttributeValues, so it is refused by name instead.
|
|
2
|
+
* Whether an intercepted Command came from the document client.
|
|
9
3
|
*/
|
|
10
|
-
export declare function
|
|
4
|
+
export declare function isSimDynamoDbDocumentCommand(command: object): boolean;
|
|
11
5
|
//# sourceMappingURL=sim-dynamodb-document-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-dynamodb-document-command.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sim-dynamodb-document-command.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-command.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIrE"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { SimDynamoDbUnsupportedOperation } from "../error/dynamodb.error.js";
|
|
2
1
|
/**
|
|
3
2
|
* The properties `@aws-sdk/lib-dynamodb` declares on every one of its Commands.
|
|
4
3
|
*
|
|
5
4
|
* They are TypeScript `protected`, which means nothing at runtime, so a
|
|
6
5
|
* document Command carries them where the client Command of the same name does
|
|
7
|
-
* not.
|
|
6
|
+
* not. That is what tells a document `QueryCommand` from a client one, since
|
|
7
|
+
* the two share a class name.
|
|
8
8
|
*/
|
|
9
9
|
const documentCommandProperties = [
|
|
10
10
|
"inputKeyNodes",
|
|
@@ -14,24 +14,7 @@ const documentCommandProperties = [
|
|
|
14
14
|
/**
|
|
15
15
|
* Whether an intercepted Command came from the document client.
|
|
16
16
|
*/
|
|
17
|
-
function isSimDynamoDbDocumentCommand(command) {
|
|
17
|
+
export function isSimDynamoDbDocumentCommand(command) {
|
|
18
18
|
return documentCommandProperties.every((property) => Object.hasOwn(command, property));
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Refuse a document Command that shares its name with a client Command.
|
|
22
|
-
*
|
|
23
|
-
* The SDK router keys on the Command's class name, and `QueryCommand` and
|
|
24
|
-
* `ScanCommand` are named the same in `@aws-sdk/client-dynamodb` and in
|
|
25
|
-
* `@aws-sdk/lib-dynamodb`, unlike `PutCommand` and `PutItemCommand`. A document
|
|
26
|
-
* Command reaching the client operation would have its native JavaScript values
|
|
27
|
-
* read as AttributeValues, so it is refused by name instead.
|
|
28
|
-
*/
|
|
29
|
-
export function refuseSimDynamoDbDocumentCommand(command, commandName) {
|
|
30
|
-
if (!isSimDynamoDbDocumentCommand(command)) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
throw new SimDynamoDbUnsupportedOperation(`The document client's ${commandName} is not simulated. It shares its ` +
|
|
34
|
-
`name with the ${commandName} of @aws-sdk/client-dynamodb, which is, so ` +
|
|
35
|
-
`it is refused rather than read as though it carried AttributeValues.`);
|
|
36
|
-
}
|
|
37
20
|
//# sourceMappingURL=sim-dynamodb-document-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-dynamodb-document-command.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-command.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sim-dynamodb-document-command.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,yBAAyB,GAAsB;IACnD,eAAe;IACf,gBAAgB;IAChB,eAAe;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,OAAe;IAC1D,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAClD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CACjC,CAAC;AACJ,CAAC"}
|
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
import type { SimSdkCommandRoute } from "../../../sdk/index.js";
|
|
2
2
|
import type { SimDynamoDb } from "../sim-dynamodb.js";
|
|
3
3
|
/**
|
|
4
|
-
* The routes
|
|
4
|
+
* The document routes for the two Commands `@aws-sdk/lib-dynamodb` names
|
|
5
|
+
* exactly as `@aws-sdk/client-dynamodb` does.
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
|
|
7
|
+
* These cannot be routed by name on their own. Each is paired with the client
|
|
8
|
+
* route of the same name by `SimDynamoDbSharedNameRoute`, which asks the
|
|
9
|
+
* Command which client it came from.
|
|
10
|
+
*/
|
|
11
|
+
export declare function simDynamoDbDocumentSharedNameRoutes(dynamoDb: SimDynamoDb): {
|
|
12
|
+
readonly query: SimSdkCommandRoute;
|
|
13
|
+
readonly scan: SimSdkCommandRoute;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The routes that handle the `@aws-sdk/lib-dynamodb` document client Commands
|
|
17
|
+
* with a name of their own.
|
|
18
|
+
*
|
|
19
|
+
* Most document Commands are named differently to the Command they stand for,
|
|
20
|
+
* so `PutCommand` and `PutItemCommand` route separately and only the document
|
|
21
|
+
* one converts. Everything after the conversion is the ordinary operation: the
|
|
22
|
+
* same validation, the same authorization, the same simulated table.
|
|
23
|
+
*
|
|
24
|
+
* `QueryCommand` and `ScanCommand` share their names with client Commands and
|
|
25
|
+
* so are routed by `simDynamoDbDocumentSharedNameRoutes` instead.
|
|
10
26
|
*
|
|
11
|
-
* An operation with no document route
|
|
27
|
+
* An operation with no document route at all, such as a document
|
|
12
28
|
* `TransactWriteCommand`, is refused by name like any other unsupported
|
|
13
29
|
* Command, rather than failing part way through a conversion.
|
|
14
30
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-dynamodb-document-routes.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-dynamodb-document-routes.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAyCtD;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,CAAC,QAAQ,EAAE,WAAW,GAAG;IAC1E,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;CACnC,CAaA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,GACpB,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAyCpD"}
|
|
@@ -1,38 +1,59 @@
|
|
|
1
1
|
import { simDynamoDbDocumentCommandPaths as paths, } from "./sim-dynamodb-document-command-paths.js";
|
|
2
2
|
import { SimDynamoDbDocumentRoute } from "./sim-dynamodb-document-route.js";
|
|
3
3
|
/**
|
|
4
|
-
* Build the
|
|
4
|
+
* Build the route for one document Command.
|
|
5
5
|
*/
|
|
6
|
-
function documentRoute(
|
|
7
|
-
return
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
function documentRoute(commandPaths, send) {
|
|
7
|
+
return new SimDynamoDbDocumentRoute({
|
|
8
|
+
input: commandPaths.input,
|
|
9
|
+
output: commandPaths.output,
|
|
10
|
+
send: async (input, options) => await send(input, options),
|
|
11
|
+
}).route();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Build the routed entry for one document Command with a name of its own.
|
|
15
|
+
*/
|
|
16
|
+
function namedDocumentRoute(name, commandPaths, send) {
|
|
17
|
+
return [name, documentRoute(commandPaths, send)];
|
|
15
18
|
}
|
|
16
19
|
/**
|
|
17
|
-
* The routes
|
|
20
|
+
* The document routes for the two Commands `@aws-sdk/lib-dynamodb` names
|
|
21
|
+
* exactly as `@aws-sdk/client-dynamodb` does.
|
|
22
|
+
*
|
|
23
|
+
* These cannot be routed by name on their own. Each is paired with the client
|
|
24
|
+
* route of the same name by `SimDynamoDbSharedNameRoute`, which asks the
|
|
25
|
+
* Command which client it came from.
|
|
26
|
+
*/
|
|
27
|
+
export function simDynamoDbDocumentSharedNameRoutes(dynamoDb) {
|
|
28
|
+
return {
|
|
29
|
+
query: documentRoute(paths.query, async (input, options) => await dynamoDb.query({ input }, options)),
|
|
30
|
+
scan: documentRoute(paths.scan, async (input, options) => await dynamoDb.scan({ input }, options)),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The routes that handle the `@aws-sdk/lib-dynamodb` document client Commands
|
|
35
|
+
* with a name of their own.
|
|
36
|
+
*
|
|
37
|
+
* Most document Commands are named differently to the Command they stand for,
|
|
38
|
+
* so `PutCommand` and `PutItemCommand` route separately and only the document
|
|
39
|
+
* one converts. Everything after the conversion is the ordinary operation: the
|
|
40
|
+
* same validation, the same authorization, the same simulated table.
|
|
18
41
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* converts. Everything after the conversion is the ordinary operation: the same
|
|
22
|
-
* validation, the same authorization, the same simulated table.
|
|
42
|
+
* `QueryCommand` and `ScanCommand` share their names with client Commands and
|
|
43
|
+
* so are routed by `simDynamoDbDocumentSharedNameRoutes` instead.
|
|
23
44
|
*
|
|
24
|
-
* An operation with no document route
|
|
45
|
+
* An operation with no document route at all, such as a document
|
|
25
46
|
* `TransactWriteCommand`, is refused by name like any other unsupported
|
|
26
47
|
* Command, rather than failing part way through a conversion.
|
|
27
48
|
*/
|
|
28
49
|
export function simDynamoDbDocumentRoutes(dynamoDb) {
|
|
29
50
|
return [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
51
|
+
namedDocumentRoute("PutCommand", paths.put, async (input, options) => await dynamoDb.putItem({ input }, options)),
|
|
52
|
+
namedDocumentRoute("GetCommand", paths.get, async (input, options) => await dynamoDb.getItem({ input }, options)),
|
|
53
|
+
namedDocumentRoute("DeleteCommand", paths.remove, async (input, options) => await dynamoDb.deleteItem({ input }, options)),
|
|
54
|
+
namedDocumentRoute("UpdateCommand", paths.update, async (input, options) => await dynamoDb.updateItem({ input }, options)),
|
|
55
|
+
namedDocumentRoute("BatchWriteCommand", paths.batchWrite, async (input, options) => await dynamoDb.batchWriteItem({ input }, options)),
|
|
56
|
+
namedDocumentRoute("BatchGetCommand", paths.batchGet, async (input, options) => await dynamoDb.batchGetItem({ input }, options)),
|
|
36
57
|
];
|
|
37
58
|
}
|
|
38
59
|
//# sourceMappingURL=sim-dynamodb-document-routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-dynamodb-document-routes.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-routes.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,+BAA+B,IAAI,KAAK,GACzC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAU5E;;GAEG;AACH,SAAS,aAAa,CACpB,
|
|
1
|
+
{"version":3,"file":"sim-dynamodb-document-routes.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-routes.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,+BAA+B,IAAI,KAAK,GACzC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAU5E;;GAEG;AACH,SAAS,aAAa,CACpB,YAA6C,EAC7C,IAA6B;IAE7B,OAAO,IAAI,wBAAwB,CAAC;QAClC,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,KAAc,EAAE,OAAO,CAAC;KACpE,CAAC,CAAC,KAAK,EAAE,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,IAAY,EACZ,YAA6C,EAC7C,IAA6B;IAE7B,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mCAAmC,CAAC,QAAqB;IAIvE,OAAO;QACL,KAAK,EAAE,aAAa,CAClB,KAAK,CAAC,KAAK,EACX,KAAK,EAAE,KAA+C,EAAE,OAAO,EAAE,EAAE,CACjE,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAC3C;QACD,IAAI,EAAE,aAAa,CACjB,KAAK,CAAC,IAAI,EACV,KAAK,EAAE,KAA8C,EAAE,OAAO,EAAE,EAAE,CAChE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAC1C;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAqB;IAErB,OAAO;QACL,kBAAkB,CAChB,YAAY,EACZ,KAAK,CAAC,GAAG,EACT,KAAK,EAAE,KAAiD,EAAE,OAAO,EAAE,EAAE,CACnE,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAC7C;QACD,kBAAkB,CAChB,YAAY,EACZ,KAAK,CAAC,GAAG,EACT,KAAK,EAAE,KAAiD,EAAE,OAAO,EAAE,EAAE,CACnE,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAC7C;QACD,kBAAkB,CAChB,eAAe,EACf,KAAK,CAAC,MAAM,EACZ,KAAK,EAAE,KAAoD,EAAE,OAAO,EAAE,EAAE,CACtE,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAChD;QACD,kBAAkB,CAChB,eAAe,EACf,KAAK,CAAC,MAAM,EACZ,KAAK,EAAE,KAAoD,EAAE,OAAO,EAAE,EAAE,CACtE,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAChD;QACD,kBAAkB,CAChB,mBAAmB,EACnB,KAAK,CAAC,UAAU,EAChB,KAAK,EACH,KAAwD,EACxD,OAAO,EACP,EAAE,CAAC,MAAM,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CACvD;QACD,kBAAkB,CAChB,iBAAiB,EACjB,KAAK,CAAC,QAAQ,EACd,KAAK,EAAE,KAAsD,EAAE,OAAO,EAAE,EAAE,CACxE,MAAM,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAClD;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { SimSdkCommandRoute } from "../../../sdk/index.js";
|
|
2
|
+
interface SimDynamoDbSharedNameRouteProperties {
|
|
3
|
+
readonly document: SimSdkCommandRoute;
|
|
4
|
+
readonly client: SimSdkCommandRoute;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* One Command name both DynamoDB clients use, routed by the client it came
|
|
8
|
+
* from.
|
|
9
|
+
*
|
|
10
|
+
* The SDK router keys on the Command's class name, and `@aws-sdk/lib-dynamodb`
|
|
11
|
+
* names its `QueryCommand` and `ScanCommand` exactly as
|
|
12
|
+
* `@aws-sdk/client-dynamodb` does, unlike `PutCommand` and `PutItemCommand`. So
|
|
13
|
+
* the name alone cannot say whether the request carries native JavaScript
|
|
14
|
+
* values or AttributeValues, and the Command is asked instead.
|
|
15
|
+
*/
|
|
16
|
+
export declare class SimDynamoDbSharedNameRoute {
|
|
17
|
+
private readonly document;
|
|
18
|
+
private readonly client;
|
|
19
|
+
constructor(properties: SimDynamoDbSharedNameRouteProperties);
|
|
20
|
+
/**
|
|
21
|
+
* The route the SDK interception engine calls.
|
|
22
|
+
*/
|
|
23
|
+
route(): SimSdkCommandRoute;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=sim-dynamodb-document-shared-name-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-dynamodb-document-shared-name-route.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-shared-name-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,UAAU,oCAAoC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC;AAED;;;;;;;;;GASG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,YAAY,UAAU,EAAE,oCAAoC,EAG3D;IAED;;OAEG;IACH,KAAK,IAAI,kBAAkB,CAQ1B;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { isSimDynamoDbDocumentCommand } from "./sim-dynamodb-document-command.js";
|
|
2
|
+
/**
|
|
3
|
+
* One Command name both DynamoDB clients use, routed by the client it came
|
|
4
|
+
* from.
|
|
5
|
+
*
|
|
6
|
+
* The SDK router keys on the Command's class name, and `@aws-sdk/lib-dynamodb`
|
|
7
|
+
* names its `QueryCommand` and `ScanCommand` exactly as
|
|
8
|
+
* `@aws-sdk/client-dynamodb` does, unlike `PutCommand` and `PutItemCommand`. So
|
|
9
|
+
* the name alone cannot say whether the request carries native JavaScript
|
|
10
|
+
* values or AttributeValues, and the Command is asked instead.
|
|
11
|
+
*/
|
|
12
|
+
export class SimDynamoDbSharedNameRoute {
|
|
13
|
+
document;
|
|
14
|
+
client;
|
|
15
|
+
constructor(properties) {
|
|
16
|
+
this.document = properties.document;
|
|
17
|
+
this.client = properties.client;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The route the SDK interception engine calls.
|
|
21
|
+
*/
|
|
22
|
+
route() {
|
|
23
|
+
return async (command, context) => {
|
|
24
|
+
if (isSimDynamoDbDocumentCommand(command)) {
|
|
25
|
+
return await this.document(command, context);
|
|
26
|
+
}
|
|
27
|
+
return await this.client(command, context);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=sim-dynamodb-document-shared-name-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-dynamodb-document-shared-name-route.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/document/sim-dynamodb-document-shared-name-route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAOlF;;;;;;;;;GASG;AACH,MAAM,OAAO,0BAA0B;IACpB,QAAQ,CAAqB;IAC7B,MAAM,CAAqB;IAE5C,YAAY,UAAgD;QAC1D,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAoB,EAAE;YAClD,IAAI,4BAA4B,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1C,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-dynamodb-sdk-command-router.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/sdk/sim-dynamodb-sdk-command-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-dynamodb-sdk-command-router.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/sdk/sim-dynamodb-sdk-command-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAsC/B,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE3E;;GAEG;AACH,qBAAa,iCAAkC,YAAW,mBAAmB;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAEjE,YAAY,iBAAiB,EAAE,iBAAiB,EAiL/C;IAED;;OAEG;IACH,qBAAqB,IAAI,SAAS,MAAM,EAAE,CAEzC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEzD;CACF"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { simSdkCallerOptions, } from "../../../sdk/index.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { simDynamoDbDocumentRoutes, simDynamoDbDocumentSharedNameRoutes, } from "../document/sim-dynamodb-document-routes.js";
|
|
3
|
+
import { SimDynamoDbSharedNameRoute } from "../document/sim-dynamodb-document-shared-name-route.js";
|
|
4
4
|
/**
|
|
5
5
|
* Routes intercepted SDK Commands to one scoped simulated DynamoDB instance.
|
|
6
6
|
*/
|
|
7
7
|
export class SimDynamoDatabaseSdkCommandRouter {
|
|
8
8
|
routes;
|
|
9
9
|
constructor(simDynamoDatabase) {
|
|
10
|
+
// The document Commands named the same as a client Command, each paired
|
|
11
|
+
// below with the client route it shares its name with.
|
|
12
|
+
const documentShared = simDynamoDbDocumentSharedNameRoutes(simDynamoDatabase);
|
|
10
13
|
this.routes = new Map([
|
|
11
14
|
[
|
|
12
15
|
"CreateTableCommand",
|
|
@@ -46,21 +49,17 @@ export class SimDynamoDatabaseSdkCommandRouter {
|
|
|
46
49
|
],
|
|
47
50
|
[
|
|
48
51
|
"QueryCommand",
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return await simDynamoDatabase.query(command, simSdkCallerOptions(context));
|
|
54
|
-
},
|
|
52
|
+
new SimDynamoDbSharedNameRoute({
|
|
53
|
+
document: documentShared.query,
|
|
54
|
+
client: async (command, context) => await simDynamoDatabase.query(command, simSdkCallerOptions(context)),
|
|
55
|
+
}).route(),
|
|
55
56
|
],
|
|
56
57
|
[
|
|
57
58
|
"ScanCommand",
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return await simDynamoDatabase.scan(command, simSdkCallerOptions(context));
|
|
63
|
-
},
|
|
59
|
+
new SimDynamoDbSharedNameRoute({
|
|
60
|
+
document: documentShared.scan,
|
|
61
|
+
client: async (command, context) => await simDynamoDatabase.scan(command, simSdkCallerOptions(context)),
|
|
62
|
+
}).route(),
|
|
64
63
|
],
|
|
65
64
|
[
|
|
66
65
|
"BatchWriteItemCommand",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-dynamodb-sdk-command-router.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/sdk/sim-dynamodb-sdk-command-router.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,GAGpB,MAAM,uBAAuB,CAAC;AAiC/B,OAAO,
|
|
1
|
+
{"version":3,"file":"sim-dynamodb-sdk-command-router.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/sdk/sim-dynamodb-sdk-command-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,17 @@ export type SimRoute53HostedZoneId = Brand<string, "SimRoute53HostedZoneId">;
|
|
|
5
5
|
*/
|
|
6
6
|
export declare function makeSimRoute53HostedZoneId(existing?: Set<SimRoute53HostedZoneId>): SimRoute53HostedZoneId;
|
|
7
7
|
/**
|
|
8
|
-
* Normalize a Route53 Hosted Zone ID from either a bare zone ID
|
|
9
|
-
* prefixed ID.
|
|
8
|
+
* Normalize a caller-supplied Route53 Hosted Zone ID from either a bare zone ID
|
|
9
|
+
* or /hostedzone/ prefixed ID.
|
|
10
|
+
*
|
|
11
|
+
* A malformed ID is rejected here with InvalidInput. A well-formed ID that no
|
|
12
|
+
* simulated hosted zone owns is left to fail later with NoSuchHostedZone.
|
|
10
13
|
*/
|
|
11
14
|
export declare function normalizeSimRoute53HostedZoneId(value: string | undefined): SimRoute53HostedZoneId;
|
|
15
|
+
/**
|
|
16
|
+
* Whether a value has the shape of a Route53 Hosted Zone ID.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isSimRoute53HostedZoneId(value: unknown): value is SimRoute53HostedZoneId;
|
|
12
19
|
/**
|
|
13
20
|
* Assert that a value is a sim Route53 Hosted Zone ID.
|
|
14
21
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-route53-zone-id.d.ts","sourceRoot":"","sources":["../../../../../src/service/route53/command/create-hosted-zone/sim-route53-zone-id.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-route53-zone-id.d.ts","sourceRoot":"","sources":["../../../../../src/service/route53/command/create-hosted-zone/sim-route53-zone-id.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAG5D,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;AAY7E;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,8BAAoC,GAC3C,sBAAsB,CAaxB;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,sBAAsB,CAUxB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,sBAAsB,CAEjC;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,KAAK,IAAI,sBAAsB,CAIzC"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { faker } from "@faker-js/faker";
|
|
2
|
+
import { SimRoute53InvalidInput } from "../../error/sim-route53.error.js";
|
|
3
|
+
/**
|
|
4
|
+
* Route53 Hosted Zone IDs are a `Z` prefix followed by uppercase alphanumerics.
|
|
5
|
+
* Real IDs are not a fixed length: the API documents a maximum of 32
|
|
6
|
+
* characters, and IDs in the wild are commonly 14 or 21 characters. Only the
|
|
7
|
+
* shape is checked so real IDs copied from an AWS account are accepted.
|
|
8
|
+
*
|
|
9
|
+
* https://docs.aws.amazon.com/Route53/latest/APIReference/API_HostedZone.html
|
|
10
|
+
*/
|
|
11
|
+
const simRoute53HostedZoneIdPattern = /^Z[\dA-Z]{1,31}$/u;
|
|
2
12
|
/**
|
|
3
13
|
* Allocate a unique simulated Route53 Hosted Zone ID.
|
|
4
14
|
*/
|
|
@@ -15,21 +25,30 @@ export function makeSimRoute53HostedZoneId(existing = new Set()) {
|
|
|
15
25
|
throw new Error("Could not allocate unique Route53 Hosted Zone ID");
|
|
16
26
|
}
|
|
17
27
|
/**
|
|
18
|
-
* Normalize a Route53 Hosted Zone ID from either a bare zone ID
|
|
19
|
-
* prefixed ID.
|
|
28
|
+
* Normalize a caller-supplied Route53 Hosted Zone ID from either a bare zone ID
|
|
29
|
+
* or /hostedzone/ prefixed ID.
|
|
30
|
+
*
|
|
31
|
+
* A malformed ID is rejected here with InvalidInput. A well-formed ID that no
|
|
32
|
+
* simulated hosted zone owns is left to fail later with NoSuchHostedZone.
|
|
20
33
|
*/
|
|
21
34
|
export function normalizeSimRoute53HostedZoneId(value) {
|
|
22
35
|
const hostedZoneId = value?.replace(/^\/?hostedzone\//u, "");
|
|
23
|
-
|
|
36
|
+
if (!isSimRoute53HostedZoneId(hostedZoneId)) {
|
|
37
|
+
throw new SimRoute53InvalidInput(`Invalid Route53 Hosted Zone ID: ${value ?? "(missing)"}`);
|
|
38
|
+
}
|
|
24
39
|
return hostedZoneId;
|
|
25
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Whether a value has the shape of a Route53 Hosted Zone ID.
|
|
43
|
+
*/
|
|
44
|
+
export function isSimRoute53HostedZoneId(value) {
|
|
45
|
+
return typeof value === "string" && simRoute53HostedZoneIdPattern.test(value);
|
|
46
|
+
}
|
|
26
47
|
/**
|
|
27
48
|
* Assert that a value is a sim Route53 Hosted Zone ID.
|
|
28
49
|
*/
|
|
29
50
|
export function assertIsSimRoute53HostedZoneId(value) {
|
|
30
|
-
if (
|
|
31
|
-
!value.startsWith("Z") ||
|
|
32
|
-
value.length !== 22) {
|
|
51
|
+
if (!isSimRoute53HostedZoneId(value)) {
|
|
33
52
|
throw new Error("Not a SimRoute53HostedZoneId");
|
|
34
53
|
}
|
|
35
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-route53-zone-id.js","sourceRoot":"","sources":["../../../../../src/service/route53/command/create-hosted-zone/sim-route53-zone-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"sim-route53-zone-id.js","sourceRoot":"","sources":["../../../../../src/service/route53/command/create-hosted-zone/sim-route53-zone-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAI1E;;;;;;;GAOG;AACH,MAAM,6BAA6B,GAAG,mBAAmB,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,QAAQ,GAAG,IAAI,GAAG,EAA0B;IAE5C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,MAAM;aAClC,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;aAC5B,WAAW,EAAE,EAA4B,CAAC;QAE7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,+BAA+B,CAC7C,KAAyB;IAEzB,MAAM,YAAY,GAAG,KAAK,EAAE,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAE7D,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,sBAAsB,CAC9B,mCAAmC,KAAK,IAAI,WAAW,EAAE,CAC1D,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAC5C,KAAc;IAEd,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
|
|
@@ -18,6 +18,13 @@ export declare class SimRoute53NoSuchHostedZone extends SimRoute53Error {
|
|
|
18
18
|
readonly name = "NoSuchHostedZone";
|
|
19
19
|
constructor(message: string);
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Simulated Route53 InvalidInput error.
|
|
23
|
+
*/
|
|
24
|
+
export declare class SimRoute53InvalidInput extends SimRoute53Error {
|
|
25
|
+
readonly name = "InvalidInput";
|
|
26
|
+
constructor(message: string);
|
|
27
|
+
}
|
|
21
28
|
/**
|
|
22
29
|
* Simulated Route53 HostedZoneAlreadyExists error.
|
|
23
30
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-route53.error.d.ts","sourceRoot":"","sources":["../../../../src/service/route53/error/sim-route53.error.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,SAAS,EAAE,uBAAuB;IAFpD,YACE,OAAO,EAAE,MAAM,EACC,SAAS,GAAE,uBAA4B,EAGxD;CACF;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,eAAe;IAC7D,SAAyB,IAAI,sBAAsB;IAEnD,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED;;GAEG;AACH,qBAAa,iCAAkC,SAAQ,eAAe;IACpE,SAAyB,IAAI,6BAA6B;IAE1D,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF"}
|
|
1
|
+
{"version":3,"file":"sim-route53.error.d.ts","sourceRoot":"","sources":["../../../../src/service/route53/error/sim-route53.error.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,SAAS,EAAE,uBAAuB;IAFpD,YACE,OAAO,EAAE,MAAM,EACC,SAAS,GAAE,uBAA4B,EAGxD;CACF;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,eAAe;IAC7D,SAAyB,IAAI,sBAAsB;IAEnD,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,eAAe;IACzD,SAAyB,IAAI,kBAAkB;IAE/C,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED;;GAEG;AACH,qBAAa,iCAAkC,SAAQ,eAAe;IACpE,SAAyB,IAAI,6BAA6B;IAE1D,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF"}
|
|
@@ -17,6 +17,15 @@ export class SimRoute53NoSuchHostedZone extends SimRoute53Error {
|
|
|
17
17
|
super(message, { httpStatusCode: 404 });
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Simulated Route53 InvalidInput error.
|
|
22
|
+
*/
|
|
23
|
+
export class SimRoute53InvalidInput extends SimRoute53Error {
|
|
24
|
+
name = "InvalidInput";
|
|
25
|
+
constructor(message) {
|
|
26
|
+
super(message, { httpStatusCode: 400 });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
20
29
|
/**
|
|
21
30
|
* Simulated Route53 HostedZoneAlreadyExists error.
|
|
22
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim-route53.error.js","sourceRoot":"","sources":["../../../../src/service/route53/error/sim-route53.error.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGtB,SAAS;IAF3B,YACE,OAAe,EACC,SAAS,GAA4B,EAAE;QAEvD,KAAK,CAAC,OAAO,CAAC,CAAC;yBAFC,SAAS;IAG3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,eAAe;IACpC,IAAI,GAAG,kBAAkB,CAAC;IAEnD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iCAAkC,SAAQ,eAAe;IAC3C,IAAI,GAAG,yBAAyB,CAAC;IAE1D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"sim-route53.error.js","sourceRoot":"","sources":["../../../../src/service/route53/error/sim-route53.error.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGtB,SAAS;IAF3B,YACE,OAAe,EACC,SAAS,GAA4B,EAAE;QAEvD,KAAK,CAAC,OAAO,CAAC,CAAC;yBAFC,SAAS;IAG3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,eAAe;IACpC,IAAI,GAAG,kBAAkB,CAAC;IAEnD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,eAAe;IAChC,IAAI,GAAG,cAAc,CAAC;IAE/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iCAAkC,SAAQ,eAAe;IAC3C,IAAI,GAAG,yBAAyB,CAAC;IAE1D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF"}
|