@kensio/yulin 0.0.2 → 0.1.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/.nvmrc +1 -1
- package/README.md +1 -1
- package/dist/command/command-handler.d.ts +4 -0
- package/dist/command/command-handler.d.ts.map +1 -0
- package/dist/command/command-handler.js +2 -0
- package/dist/command/command-handler.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/service/cloudfront/factory/cloudfront-functions.factory.d.ts +7 -0
- package/dist/service/cloudfront/factory/cloudfront-functions.factory.d.ts.map +1 -0
- package/dist/service/cloudfront/factory/cloudfront-functions.factory.js +33 -0
- package/dist/service/cloudfront/factory/cloudfront-functions.factory.js.map +1 -0
- package/dist/service/cloudfront/index.d.ts +3 -0
- package/dist/service/cloudfront/index.d.ts.map +1 -0
- package/dist/service/cloudfront/index.js +2 -0
- package/dist/service/cloudfront/index.js.map +1 -0
- package/dist/service/cloudfront/typings/cloudfront-functions.d.ts +37 -0
- package/dist/service/cloudfront/typings/cloudfront-functions.d.ts.map +1 -0
- package/dist/service/cloudfront/typings/cloudfront-functions.js +2 -0
- package/dist/service/cloudfront/typings/cloudfront-functions.js.map +1 -0
- package/dist/service/dynamodb/command/create-table/create-table.handler.d.ts +20 -0
- package/dist/service/dynamodb/command/create-table/create-table.handler.d.ts.map +1 -0
- package/dist/service/dynamodb/command/create-table/create-table.handler.js +47 -0
- package/dist/service/dynamodb/command/create-table/create-table.handler.js.map +1 -0
- package/dist/service/dynamodb/command/describe-table/describe-table.handler.d.ts +17 -0
- package/dist/service/dynamodb/command/describe-table/describe-table.handler.d.ts.map +1 -0
- package/dist/service/dynamodb/command/describe-table/describe-table.handler.js +37 -0
- package/dist/service/dynamodb/command/describe-table/describe-table.handler.js.map +1 -0
- package/dist/service/dynamodb/command/list-tables/list-tables.handler.d.ts +17 -0
- package/dist/service/dynamodb/command/list-tables/list-tables.handler.d.ts.map +1 -0
- package/dist/service/dynamodb/command/list-tables/list-tables.handler.js +32 -0
- package/dist/service/dynamodb/command/list-tables/list-tables.handler.js.map +1 -0
- package/dist/service/dynamodb/command/put-item/put-item.handler.d.ts +17 -0
- package/dist/service/dynamodb/command/put-item/put-item.handler.d.ts.map +1 -0
- package/dist/service/dynamodb/command/put-item/put-item.handler.js +39 -0
- package/dist/service/dynamodb/command/put-item/put-item.handler.js.map +1 -0
- package/dist/service/dynamodb/dynamodb.d.ts +27 -0
- package/dist/service/dynamodb/dynamodb.d.ts.map +1 -0
- package/dist/service/dynamodb/dynamodb.js +43 -0
- package/dist/service/dynamodb/dynamodb.js.map +1 -0
- package/dist/service/dynamodb/index.d.ts +2 -0
- package/dist/service/dynamodb/index.d.ts.map +1 -0
- package/dist/service/dynamodb/index.js +2 -0
- package/dist/service/dynamodb/index.js.map +1 -0
- package/dist/service/dynamodb/item/dynamodb-item-attribute.d.ts +21 -0
- package/dist/service/dynamodb/item/dynamodb-item-attribute.d.ts.map +1 -0
- package/dist/service/dynamodb/item/dynamodb-item-attribute.js +92 -0
- package/dist/service/dynamodb/item/dynamodb-item-attribute.js.map +1 -0
- package/dist/service/dynamodb/item/dynamodb-item.d.ts +18 -0
- package/dist/service/dynamodb/item/dynamodb-item.d.ts.map +1 -0
- package/dist/service/dynamodb/item/dynamodb-item.js +29 -0
- package/dist/service/dynamodb/item/dynamodb-item.js.map +1 -0
- package/dist/service/dynamodb/table/dynamodb-key-schema.d.ts +30 -0
- package/dist/service/dynamodb/table/dynamodb-key-schema.d.ts.map +1 -0
- package/dist/service/dynamodb/table/dynamodb-key-schema.js +61 -0
- package/dist/service/dynamodb/table/dynamodb-key-schema.js.map +1 -0
- package/dist/service/dynamodb/table/dynamodb-table.d.ts +34 -0
- package/dist/service/dynamodb/table/dynamodb-table.d.ts.map +1 -0
- package/dist/service/dynamodb/table/dynamodb-table.js +55 -0
- package/dist/service/dynamodb/table/dynamodb-table.js.map +1 -0
- package/dist/service/organizations/index.d.ts +2 -0
- package/dist/service/organizations/index.d.ts.map +1 -0
- package/dist/service/organizations/index.js +2 -0
- package/dist/service/organizations/index.js.map +1 -0
- package/dist/service/organizations/sim-aws-account.d.ts +19 -0
- package/dist/service/organizations/sim-aws-account.d.ts.map +1 -0
- package/dist/service/organizations/sim-aws-account.js +26 -0
- package/dist/service/organizations/sim-aws-account.js.map +1 -0
- package/dist/service/s3/index.d.ts +2 -0
- package/dist/service/s3/index.d.ts.map +1 -0
- package/dist/service/s3/index.js +3 -0
- package/dist/service/s3/index.js.map +1 -0
- package/dist/util/background/background.d.ts +28 -0
- package/dist/util/background/background.d.ts.map +1 -0
- package/dist/util/background/background.js +44 -0
- package/dist/util/background/background.js.map +1 -0
- package/dist/util/brand.type.d.ts +8 -0
- package/dist/util/brand.type.d.ts.map +1 -0
- package/dist/util/brand.type.js +2 -0
- package/dist/util/brand.type.js.map +1 -0
- package/dist/util/defined.d.ts +5 -0
- package/dist/util/defined.d.ts.map +1 -0
- package/dist/util/defined.js +11 -0
- package/dist/util/defined.js.map +1 -0
- package/dist/util/memo/memo.d.ts +15 -0
- package/dist/util/memo/memo.d.ts.map +1 -0
- package/dist/util/memo/memo.js +24 -0
- package/dist/util/memo/memo.js.map +1 -0
- package/dist/util/sleep.d.ts +10 -0
- package/dist/util/sleep.d.ts.map +1 -0
- package/dist/util/sleep.js +16 -0
- package/dist/util/sleep.js.map +1 -0
- package/eslint.config.ts +18 -4
- package/package.json +32 -19
- package/pnpm-workspace.yaml +23 -1
- package/scripts/publish.sh +14 -0
- package/src/index.ts +0 -0
- package/src/service/cloudfront/factory/cloudfront-functions.factory.iso.test.ts +10 -0
- package/src/service/cloudfront/factory/cloudfront-functions.factory.ts +34 -0
- package/src/service/cloudfront/index.ts +13 -0
- package/src/service/cloudfront/typings/cloudfront-functions.ts +48 -0
- package/src/service/dynamodb/command/create-table/create-table.handler.ts +5 -3
- package/src/service/dynamodb/command/create-table/create-table.iso.test.ts +36 -4
- package/src/service/dynamodb/command/describe-table/describe-table.handler.ts +3 -1
- package/src/service/dynamodb/command/describe-table/describe-table.iso.test.ts +18 -3
- package/src/service/dynamodb/command/list-tables/list-tables.handler.ts +3 -1
- package/src/service/dynamodb/command/list-tables/list-tables.iso.test.ts +54 -9
- package/src/service/dynamodb/command/put-item/put-item.handler.ts +56 -0
- package/src/service/dynamodb/command/put-item/put-item.iso.test.ts +354 -0
- package/src/service/dynamodb/dynamodb.ts +15 -1
- package/src/service/dynamodb/index.ts +0 -0
- package/src/service/dynamodb/item/dynamodb-item-attribute.iso.test.ts +19 -0
- package/src/service/dynamodb/item/dynamodb-item-attribute.ts +116 -0
- package/src/service/dynamodb/item/dynamodb-item.ts +39 -0
- package/src/service/dynamodb/table/dynamodb-key-schema.ts +94 -0
- package/src/service/dynamodb/{dynamodb-table.iso.test.ts → table/dynamodb-table.iso.test.ts} +8 -3
- package/src/service/dynamodb/table/dynamodb-table.ts +75 -0
- package/src/service/organizations/index.ts +0 -0
- package/src/service/s3/index.ts +1 -0
- package/src/util/background/background.ts +1 -1
- package/src/util/defined.ts +15 -0
- package/src/util/sleep.ts +1 -1
- package/tsconfig.json +11 -8
- package/src/service/dynamodb/dynamodb-table.ts +0 -46
- package/typings/eslint-plugin-promise.d.ts +0 -11
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single attribute of a DynamoDB Item.
|
|
3
|
+
*/
|
|
4
|
+
export class DynamoDBItemAttribute {
|
|
5
|
+
value;
|
|
6
|
+
constructor(value) {
|
|
7
|
+
this.value = value;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Convert a DynamoDB AttributeValue structure to a DynamoDBItemAttribute
|
|
11
|
+
* instance.
|
|
12
|
+
*/
|
|
13
|
+
static fromAttributeValue(value) {
|
|
14
|
+
if (value.BOOL !== undefined) {
|
|
15
|
+
return new DynamoDBItemAttribute(value.BOOL);
|
|
16
|
+
}
|
|
17
|
+
if (value.NULL !== undefined) {
|
|
18
|
+
return new DynamoDBItemAttribute(null);
|
|
19
|
+
}
|
|
20
|
+
if (value.S !== undefined) {
|
|
21
|
+
return new DynamoDBItemAttribute(value.S);
|
|
22
|
+
}
|
|
23
|
+
if (value.N !== undefined) {
|
|
24
|
+
return new DynamoDBItemAttribute(Number(value.N));
|
|
25
|
+
}
|
|
26
|
+
if (value.B !== undefined) {
|
|
27
|
+
return new DynamoDBItemAttribute(value.B);
|
|
28
|
+
}
|
|
29
|
+
if (value.SS !== undefined) {
|
|
30
|
+
return new DynamoDBItemAttribute(new Set(value.SS));
|
|
31
|
+
}
|
|
32
|
+
if (value.NS !== undefined) {
|
|
33
|
+
return new DynamoDBItemAttribute(new Set(value.NS.map(Number)));
|
|
34
|
+
}
|
|
35
|
+
if (value.BS !== undefined) {
|
|
36
|
+
return new DynamoDBItemAttribute(new Set(value.BS));
|
|
37
|
+
}
|
|
38
|
+
if (value.L !== undefined) {
|
|
39
|
+
return new DynamoDBItemAttribute(value.L.map((el) => DynamoDBItemAttribute.fromAttributeValue(el).value));
|
|
40
|
+
}
|
|
41
|
+
if (value.M !== undefined) {
|
|
42
|
+
return new DynamoDBItemAttribute(Object.fromEntries(Object.entries(value.M).map(([key, val]) => [
|
|
43
|
+
key,
|
|
44
|
+
DynamoDBItemAttribute.fromAttributeValue(val).value,
|
|
45
|
+
])));
|
|
46
|
+
}
|
|
47
|
+
throw new Error(`Unsupported AttributeValue type: ${JSON.stringify(value)}`);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Convert this DynamoDBItemAttribute to a DynamoDB AttributeValue structure.
|
|
51
|
+
*/
|
|
52
|
+
toAttributeValue() {
|
|
53
|
+
const value = this.value;
|
|
54
|
+
if (value === null) {
|
|
55
|
+
return { NULL: true };
|
|
56
|
+
}
|
|
57
|
+
if (typeof value === "string") {
|
|
58
|
+
return { S: value };
|
|
59
|
+
}
|
|
60
|
+
if (typeof value === "number") {
|
|
61
|
+
return { N: String(value) };
|
|
62
|
+
}
|
|
63
|
+
if (typeof value === "boolean") {
|
|
64
|
+
return { BOOL: value };
|
|
65
|
+
}
|
|
66
|
+
if (ArrayBuffer.isView(value)) {
|
|
67
|
+
return { B: value };
|
|
68
|
+
}
|
|
69
|
+
if (Array.isArray(value)) {
|
|
70
|
+
return {
|
|
71
|
+
L: value.map((el) => new DynamoDBItemAttribute(el).toAttributeValue()),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (value instanceof Set) {
|
|
75
|
+
const firstValue = value.values().next().value;
|
|
76
|
+
if (firstValue !== undefined && ArrayBuffer.isView(firstValue)) {
|
|
77
|
+
return { BS: [...value] };
|
|
78
|
+
}
|
|
79
|
+
if (typeof firstValue === "number") {
|
|
80
|
+
return { NS: [...value].map(String) };
|
|
81
|
+
}
|
|
82
|
+
return { SS: [...value] };
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
M: Object.fromEntries(Object.entries(value).map(([key, val]) => [
|
|
86
|
+
key,
|
|
87
|
+
new DynamoDBItemAttribute(val).toAttributeValue(),
|
|
88
|
+
])),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=dynamodb-item-attribute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamodb-item-attribute.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/item/dynamodb-item-attribute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AttributeValue } from "@aws-sdk/client-dynamodb";
|
|
2
|
+
import { DynamoDBItemAttribute } from "./dynamodb-item-attribute.js";
|
|
3
|
+
/**
|
|
4
|
+
* A single Item in a DynamoDB Table.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DynamoDbItem {
|
|
7
|
+
readonly attributes: Record<string, DynamoDBItemAttribute>;
|
|
8
|
+
constructor(attributes?: Record<string, DynamoDBItemAttribute>);
|
|
9
|
+
/**
|
|
10
|
+
* Convert an AttributeValue structure to a DynamoDbItem instance.
|
|
11
|
+
*/
|
|
12
|
+
static fromAttributeValues(attributeValues: Record<string, AttributeValue>): DynamoDbItem;
|
|
13
|
+
/**
|
|
14
|
+
* Convert this DynamoDbItem to an AttributeValue structure.
|
|
15
|
+
*/
|
|
16
|
+
toAttributeValues(): Record<string, AttributeValue>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=dynamodb-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamodb-item.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/item/dynamodb-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;GAEG;AACH,qBAAa,YAAY;IAErB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC;gBAAjD,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAM;IAGjE;;OAEG;IACH,MAAM,CAAC,mBAAmB,CACxB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAC9C,YAAY;IAWf;;OAEG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;CAQpD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DynamoDBItemAttribute } from "./dynamodb-item-attribute.js";
|
|
2
|
+
/**
|
|
3
|
+
* A single Item in a DynamoDB Table.
|
|
4
|
+
*/
|
|
5
|
+
export class DynamoDbItem {
|
|
6
|
+
attributes;
|
|
7
|
+
constructor(attributes = {}) {
|
|
8
|
+
this.attributes = attributes;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Convert an AttributeValue structure to a DynamoDbItem instance.
|
|
12
|
+
*/
|
|
13
|
+
static fromAttributeValues(attributeValues) {
|
|
14
|
+
return new DynamoDbItem(Object.fromEntries(Object.entries(attributeValues).map(([key, value]) => [
|
|
15
|
+
key,
|
|
16
|
+
DynamoDBItemAttribute.fromAttributeValue(value),
|
|
17
|
+
])));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Convert this DynamoDbItem to an AttributeValue structure.
|
|
21
|
+
*/
|
|
22
|
+
toAttributeValues() {
|
|
23
|
+
return Object.fromEntries(Object.entries(this.attributes).map(([key, value]) => [
|
|
24
|
+
key,
|
|
25
|
+
value.toAttributeValue(),
|
|
26
|
+
]));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=dynamodb-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamodb-item.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/item/dynamodb-item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;GAEG;AACH,MAAM,OAAO,YAAY;IAEZ;IADX,YACW,aAAoD,EAAE;QAAtD,eAAU,GAAV,UAAU,CAA4C;IAC9D,CAAC;IAEJ;;OAEG;IACH,MAAM,CAAC,mBAAmB,CACxB,eAA+C;QAE/C,OAAO,IAAI,YAAY,CACrB,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YACpD,GAAG;YACH,qBAAqB,CAAC,kBAAkB,CAAC,KAAK,CAAC;SAChD,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YACpD,GAAG;YACH,KAAK,CAAC,gBAAgB,EAAE;SACzB,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { CreateTableInput, KeyType } from "@aws-sdk/client-dynamodb";
|
|
2
|
+
import type { DynamoDbItem } from "../item/dynamodb-item.js";
|
|
3
|
+
import type { DynamoDBAttrType } from "../item/dynamodb-item-attribute.js";
|
|
4
|
+
type DynamoDbKey = string | number;
|
|
5
|
+
/**
|
|
6
|
+
* Extractor for DynamoDB KeySchema from CreateTableCommand input.
|
|
7
|
+
*
|
|
8
|
+
* https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_KeySchemaElement.html
|
|
9
|
+
*/
|
|
10
|
+
export declare class DynamoDbKeySchema {
|
|
11
|
+
readonly partitionKey: {
|
|
12
|
+
AttributeName: string;
|
|
13
|
+
KeyType: KeyType;
|
|
14
|
+
};
|
|
15
|
+
readonly sortKey?: {
|
|
16
|
+
AttributeName: string;
|
|
17
|
+
KeyType: KeyType;
|
|
18
|
+
};
|
|
19
|
+
constructor(createTableInput: Pick<CreateTableInput, "KeySchema">);
|
|
20
|
+
/**
|
|
21
|
+
* Make a primary key string for an item based on this key schema.
|
|
22
|
+
*/
|
|
23
|
+
makeItemKey(item: DynamoDbItem): string;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a given value can be used as a DynamoDB partition key or sort key.
|
|
26
|
+
*/
|
|
27
|
+
static canBeDynamoDbKey(value: DynamoDBAttrType): value is DynamoDbKey;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=dynamodb-key-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamodb-key-schema.d.ts","sourceRoot":"","sources":["../../../../src/service/dynamodb/table/dynamodb-key-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnC;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,SAAgB,YAAY,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAE1E,SAAgB,OAAO,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;gBAE1D,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC;IAkCjE;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAiCvC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,IAAI,WAAW;CAGvE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { assertDefined } from "../../../util/defined.js";
|
|
2
|
+
/**
|
|
3
|
+
* Extractor for DynamoDB KeySchema from CreateTableCommand input.
|
|
4
|
+
*
|
|
5
|
+
* https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_KeySchemaElement.html
|
|
6
|
+
*/
|
|
7
|
+
export class DynamoDbKeySchema {
|
|
8
|
+
partitionKey;
|
|
9
|
+
sortKey;
|
|
10
|
+
constructor(createTableInput) {
|
|
11
|
+
assertDefined(createTableInput.KeySchema, "createTableInput.KeySchema");
|
|
12
|
+
const partitionKeyElement = createTableInput.KeySchema.find((el) => el.KeyType === "HASH");
|
|
13
|
+
assertDefined(partitionKeyElement, '"CreateTableInput.KeySchema partition key (KeyType=HASH)');
|
|
14
|
+
assertDefined(partitionKeyElement.AttributeName, "Partition Key AttributeName");
|
|
15
|
+
assertDefined(partitionKeyElement.KeyType, "Partition Key KeyType");
|
|
16
|
+
this.partitionKey = {
|
|
17
|
+
AttributeName: partitionKeyElement.AttributeName,
|
|
18
|
+
KeyType: partitionKeyElement.KeyType,
|
|
19
|
+
};
|
|
20
|
+
const sortKeyElement = createTableInput.KeySchema.find((el) => el.KeyType === "RANGE");
|
|
21
|
+
if (sortKeyElement === undefined) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
assertDefined(sortKeyElement.AttributeName, "Sort Key AttributeName");
|
|
25
|
+
assertDefined(sortKeyElement.KeyType, "Sort Key KeyType");
|
|
26
|
+
this.sortKey = {
|
|
27
|
+
AttributeName: sortKeyElement.AttributeName,
|
|
28
|
+
KeyType: sortKeyElement.KeyType,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Make a primary key string for an item based on this key schema.
|
|
33
|
+
*/
|
|
34
|
+
makeItemKey(item) {
|
|
35
|
+
const partitionKeyAttr = item.attributes[this.partitionKey.AttributeName];
|
|
36
|
+
assertDefined(partitionKeyAttr, `DynamoDB Item partition key ${this.partitionKey.AttributeName}`);
|
|
37
|
+
const partitionKey = partitionKeyAttr.value;
|
|
38
|
+
if (!DynamoDbKeySchema.canBeDynamoDbKey(partitionKey)) {
|
|
39
|
+
throw new TypeError(`DynamoDB Item partition key ${this.partitionKey.AttributeName} must be string or number`);
|
|
40
|
+
}
|
|
41
|
+
const keyParts = { partitionKey };
|
|
42
|
+
if (this.sortKey?.AttributeName !== undefined) {
|
|
43
|
+
const sortKey = item.attributes[this.sortKey.AttributeName];
|
|
44
|
+
if (sortKey === undefined) {
|
|
45
|
+
throw new TypeError(`DynamoDB Item sort key ${this.sortKey.AttributeName} is undefined`);
|
|
46
|
+
}
|
|
47
|
+
if (!DynamoDbKeySchema.canBeDynamoDbKey(sortKey.value)) {
|
|
48
|
+
throw new TypeError(`DynamoDB Item sort key ${this.sortKey.AttributeName} must be string or number`);
|
|
49
|
+
}
|
|
50
|
+
keyParts[this.sortKey.AttributeName] = sortKey.value;
|
|
51
|
+
}
|
|
52
|
+
return JSON.stringify(keyParts);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if a given value can be used as a DynamoDB partition key or sort key.
|
|
56
|
+
*/
|
|
57
|
+
static canBeDynamoDbKey(value) {
|
|
58
|
+
return typeof value === "string" || typeof value === "number";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=dynamodb-key-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamodb-key-schema.js","sourceRoot":"","sources":["../../../../src/service/dynamodb/table/dynamodb-key-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Brand } from "../../../util/brand.type.js";
|
|
2
|
+
import type { CreateTableCommand, TableStatus } from "@aws-sdk/client-dynamodb";
|
|
3
|
+
import type { DynamoDbItem } from "../item/dynamodb-item.js";
|
|
4
|
+
import type { BackgroundScheduler } from "../../../util/background/background.js";
|
|
5
|
+
export type DynamoDbTableName = Brand<string, "DynamoDbTableName">;
|
|
6
|
+
/**
|
|
7
|
+
* Simulated DynamoDB Table.
|
|
8
|
+
*/
|
|
9
|
+
export declare class SimDynamoDbTable {
|
|
10
|
+
private readonly background;
|
|
11
|
+
readonly creationDateTime: Date;
|
|
12
|
+
private readonly _tableName;
|
|
13
|
+
private readonly _keySchema;
|
|
14
|
+
private _status;
|
|
15
|
+
private readonly items;
|
|
16
|
+
constructor(createCommand: CreateTableCommand, background: BackgroundScheduler);
|
|
17
|
+
/**
|
|
18
|
+
* Simulate the table entering ACTIVE status.
|
|
19
|
+
*/
|
|
20
|
+
activate(): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Get the DynamoDB table name.
|
|
23
|
+
*/
|
|
24
|
+
get tableName(): DynamoDbTableName;
|
|
25
|
+
/**
|
|
26
|
+
* Get the current table status.
|
|
27
|
+
*/
|
|
28
|
+
get status(): TableStatus;
|
|
29
|
+
/**
|
|
30
|
+
* Put an item into the table.
|
|
31
|
+
*/
|
|
32
|
+
putItem(item: DynamoDbItem): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=dynamodb-table.d.ts.map
|
|
@@ -0,0 +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;IAWzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAV7B,SAAgB,gBAAgB,EAAE,IAAI,CAAC;IAEvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,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,SAAS,IAAI,iBAAiB,CAExC;IAED;;OAEG;IACH,IAAW,MAAM,IAAI,WAAW,CAE/B;IAED;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAQlD"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { DynamoDbKeySchema } from "./dynamodb-key-schema.js";
|
|
2
|
+
import { assertDefined } from "../../../util/defined.js";
|
|
3
|
+
/**
|
|
4
|
+
* Simulated DynamoDB Table.
|
|
5
|
+
*/
|
|
6
|
+
export class SimDynamoDbTable {
|
|
7
|
+
background;
|
|
8
|
+
creationDateTime;
|
|
9
|
+
_tableName;
|
|
10
|
+
_keySchema;
|
|
11
|
+
_status = "CREATING";
|
|
12
|
+
items = new Map();
|
|
13
|
+
constructor(createCommand, background) {
|
|
14
|
+
this.background = background;
|
|
15
|
+
assertDefined(createCommand.input.TableName, "createCommand.input.TableName");
|
|
16
|
+
this._tableName = createCommand.input.TableName;
|
|
17
|
+
this.creationDateTime = new Date();
|
|
18
|
+
if (createCommand.input.KeySchema === undefined ||
|
|
19
|
+
createCommand.input.KeySchema.length === 0) {
|
|
20
|
+
throw new Error("Table KeySchema is not defined");
|
|
21
|
+
}
|
|
22
|
+
this._keySchema = new DynamoDbKeySchema(createCommand.input);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Simulate the table entering ACTIVE status.
|
|
26
|
+
*/
|
|
27
|
+
activate() {
|
|
28
|
+
this._status = "ACTIVE";
|
|
29
|
+
return Promise.resolve();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the DynamoDB table name.
|
|
33
|
+
*/
|
|
34
|
+
get tableName() {
|
|
35
|
+
return this._tableName;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the current table status.
|
|
39
|
+
*/
|
|
40
|
+
get status() {
|
|
41
|
+
return this._status;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Put an item into the table.
|
|
45
|
+
*/
|
|
46
|
+
putItem(item) {
|
|
47
|
+
const keyString = this._keySchema.makeItemKey(item);
|
|
48
|
+
this.background.schedule(() => {
|
|
49
|
+
this.items.set(keyString, item);
|
|
50
|
+
return Promise.resolve();
|
|
51
|
+
});
|
|
52
|
+
return Promise.resolve();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=dynamodb-table.js.map
|
|
@@ -0,0 +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;IAWR;IAVH,gBAAgB,CAAO;IAEtB,UAAU,CAAoB;IAC9B,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,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,SAA8B,CAAC;QACrE,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,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/service/organizations/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/service/organizations/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type BackgroundCompleter, type BackgroundScheduler } from "../../util/background/background.js";
|
|
2
|
+
import { SimDynamoDb } from "../dynamodb/dynamodb.js";
|
|
3
|
+
/**
|
|
4
|
+
* Container for simulated AWS services.
|
|
5
|
+
*/
|
|
6
|
+
export declare class SimAwsAccount {
|
|
7
|
+
private readonly background;
|
|
8
|
+
private readonly memo;
|
|
9
|
+
constructor(background?: BackgroundScheduler & BackgroundCompleter);
|
|
10
|
+
/**
|
|
11
|
+
* Wait for all outstanding background tasks in this Account to complete.
|
|
12
|
+
*/
|
|
13
|
+
backgroundTasksComplete(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Get the simulated DynamoDB service in this simulated Account.
|
|
16
|
+
*/
|
|
17
|
+
getDynamoDb(): SimDynamoDb;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=sim-aws-account.d.ts.map
|
|
@@ -0,0 +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;AAGtD;;GAEG;AACH,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAH7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;gBAGxB,UAAU,GAAE,mBAAmB,GAC9C,mBAA2C;IAG/C;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9C;;OAEG;IACH,WAAW,IAAI,WAAW;CAM3B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BackgroundTasks, } from "../../util/background/background.js";
|
|
2
|
+
import { SimDynamoDb } from "../dynamodb/dynamodb.js";
|
|
3
|
+
import { Memo } from "../../util/memo/memo.js";
|
|
4
|
+
/**
|
|
5
|
+
* Container for simulated AWS services.
|
|
6
|
+
*/
|
|
7
|
+
export class SimAwsAccount {
|
|
8
|
+
background;
|
|
9
|
+
memo = new Memo();
|
|
10
|
+
constructor(background = new BackgroundTasks()) {
|
|
11
|
+
this.background = background;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Wait for all outstanding background tasks in this Account to complete.
|
|
15
|
+
*/
|
|
16
|
+
async backgroundTasksComplete() {
|
|
17
|
+
await this.background.complete();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get the simulated DynamoDB service in this simulated Account.
|
|
21
|
+
*/
|
|
22
|
+
getDynamoDb() {
|
|
23
|
+
return this.memo.getOrCreate("DynamoDB", () => new SimDynamoDb(this.background));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=sim-aws-account.js.map
|
|
@@ -0,0 +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;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C;;GAEG;AACH,MAAM,OAAO,aAAa;IAIL;IAHF,IAAI,GAAG,IAAI,IAAI,EAAU,CAAC;IAE3C,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,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;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/service/s3/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/service/s3/index.ts"],"names":[],"mappings":";AAAA,EAAE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type BackgroundTask = () => Promise<void>;
|
|
2
|
+
export interface BackgroundScheduler {
|
|
3
|
+
schedule(task: BackgroundTask): void;
|
|
4
|
+
}
|
|
5
|
+
export interface BackgroundCompleter {
|
|
6
|
+
complete(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Simple async background tasks scheduler, to simulate asynchronous distributed
|
|
10
|
+
* operations occurring in a non-deterministic sequence.
|
|
11
|
+
*/
|
|
12
|
+
export declare class BackgroundTasks implements BackgroundScheduler, BackgroundCompleter {
|
|
13
|
+
private readonly pending;
|
|
14
|
+
/**
|
|
15
|
+
* Schedule a task to happen asynchronously in the background.
|
|
16
|
+
*/
|
|
17
|
+
schedule(task: BackgroundTask): void;
|
|
18
|
+
/**
|
|
19
|
+
* Wait until all tasks currently scheduled have finished.
|
|
20
|
+
* If tasks schedule more tasks, this will continue draining until idle.
|
|
21
|
+
*/
|
|
22
|
+
complete(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* See how many outstanding background tasks are scheduled.
|
|
25
|
+
*/
|
|
26
|
+
get size(): number;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=background.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../../src/util/background/background.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;GAGG;AACH,qBAAa,eACX,YAAW,mBAAmB,EAAE,mBAAmB;IAEnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAsBpC;;;OAGG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtC;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple async background tasks scheduler, to simulate asynchronous distributed
|
|
3
|
+
* operations occurring in a non-deterministic sequence.
|
|
4
|
+
*/
|
|
5
|
+
export class BackgroundTasks {
|
|
6
|
+
pending = new Set();
|
|
7
|
+
/**
|
|
8
|
+
* Schedule a task to happen asynchronously in the background.
|
|
9
|
+
*/
|
|
10
|
+
schedule(task) {
|
|
11
|
+
const promise = new Promise((resolve) => {
|
|
12
|
+
setTimeout(resolve, Math.random());
|
|
13
|
+
})
|
|
14
|
+
.then(task)
|
|
15
|
+
.then(() => {
|
|
16
|
+
//
|
|
17
|
+
}, (error) => {
|
|
18
|
+
// Keep the promise rejected so drain() can surface failures
|
|
19
|
+
// deterministically.
|
|
20
|
+
throw error;
|
|
21
|
+
})
|
|
22
|
+
.finally(() => {
|
|
23
|
+
this.pending.delete(promise);
|
|
24
|
+
});
|
|
25
|
+
this.pending.add(promise);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Wait until all tasks currently scheduled have finished.
|
|
29
|
+
* If tasks schedule more tasks, this will continue draining until idle.
|
|
30
|
+
*/
|
|
31
|
+
async complete() {
|
|
32
|
+
while (this.pending.size > 0) {
|
|
33
|
+
// eslint-disable-next-line no-await-in-loop
|
|
34
|
+
await Promise.all(this.pending);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* See how many outstanding background tasks are scheduled.
|
|
39
|
+
*/
|
|
40
|
+
get size() {
|
|
41
|
+
return this.pending.size;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=background.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.js","sourceRoot":"","sources":["../../../src/util/background/background.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,OAAO,eAAe;IAGT,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,IAAoB;QAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5C,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC;aACC,IAAI,CAAC,IAAI,CAAC;aACV,IAAI,CACH,GAAG,EAAE;YACH,EAAE;QACJ,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,4DAA4D;YAC5D,qBAAqB;YACrB,MAAM,KAAK,CAAC;QACd,CAAC,CACF;aACA,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC7B,4CAA4C;YAC5C,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type Brand<K, T extends string> = K & Record<T, never>;
|
|
2
|
+
export type ISODateString = Brand<`${number}-${number}-${number}T${number}:${number}:${number}.${number}Z`, "ISODateString">;
|
|
3
|
+
declare global {
|
|
4
|
+
interface Date {
|
|
5
|
+
toISOString(): ISODateString;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=brand.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand.type.d.ts","sourceRoot":"","sources":["../../src/util/brand.type.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAE9D,MAAM,MAAM,aAAa,GAAG,KAAK,CAC/B,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG,EACxE,eAAe,CAChB,CAAC;AACF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI;QACZ,WAAW,IAAI,aAAa,CAAC;KAC9B;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand.type.js","sourceRoot":"","sources":["../../src/util/brand.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defined.d.ts","sourceRoot":"","sources":["../../src/util/defined.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,GAAG,SAAS,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,IAAI,CAAC,CAIpB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class RequiredValueUndefinedError extends Error {
|
|
2
|
+
}
|
|
3
|
+
/**
|
|
4
|
+
* Require that a given value is defined.
|
|
5
|
+
*/
|
|
6
|
+
export function assertDefined(value, description) {
|
|
7
|
+
if (value === undefined) {
|
|
8
|
+
throw new RequiredValueUndefinedError(`${description} must be defined`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=defined.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defined.js","sourceRoot":"","sources":["../../src/util/defined.ts"],"names":[],"mappings":"AAAA,MAAM,2BAA4B,SAAQ,KAAK;CAE9C;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAoB,EACpB,WAAmB;IAEnB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,2BAA2B,CAAC,GAAG,WAAW,kBAAkB,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple memoization cache.
|
|
3
|
+
*/
|
|
4
|
+
export declare class Memo<T> {
|
|
5
|
+
private readonly cache;
|
|
6
|
+
/**
|
|
7
|
+
* Returns the cached value for the given key, or creates/caches it using `factory`.
|
|
8
|
+
*/
|
|
9
|
+
getOrCreate<V extends T>(key: PropertyKey, factory: () => V): V;
|
|
10
|
+
/**
|
|
11
|
+
* Returns whether the cache contains `key`.
|
|
12
|
+
*/
|
|
13
|
+
has(key: PropertyKey): boolean;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=memo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../../../src/util/memo/memo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,IAAI,CAAC,CAAC;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IAEnD;;OAEG;IACH,WAAW,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;IAU/D;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO;CAG/B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple memoization cache.
|
|
3
|
+
*/
|
|
4
|
+
export class Memo {
|
|
5
|
+
cache = new Map();
|
|
6
|
+
/**
|
|
7
|
+
* Returns the cached value for the given key, or creates/caches it using `factory`.
|
|
8
|
+
*/
|
|
9
|
+
getOrCreate(key, factory) {
|
|
10
|
+
if (this.cache.has(key)) {
|
|
11
|
+
return this.cache.get(key);
|
|
12
|
+
}
|
|
13
|
+
const value = factory();
|
|
14
|
+
this.cache.set(key, value);
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns whether the cache contains `key`.
|
|
19
|
+
*/
|
|
20
|
+
has(key) {
|
|
21
|
+
return this.cache.has(key);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=memo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memo.js","sourceRoot":"","sources":["../../../src/util/memo/memo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,IAAI;IACE,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEnD;;OAEG;IACH,WAAW,CAAc,GAAgB,EAAE,OAAgB;QACzD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC;QAClC,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,GAAgB;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF"}
|