@exabugs/dynamodb-client 0.3.5 → 0.3.7
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/CHANGELOG.md +32 -0
- package/README.md +35 -23
- package/dist/server/handler.cjs +7539 -7401
- package/dist/server/handler.cjs.map +4 -4
- package/dist/server/shadow/config.d.ts +13 -13
- package/dist/server/shadow/config.d.ts.map +1 -1
- package/dist/server/shadow/config.js +10 -10
- package/dist/server/shadow/generator.d.ts +1 -1
- package/dist/server/shadow/generator.d.ts.map +1 -1
- package/dist/server/shadow/generator.js +5 -1
- package/dist/server/shadow/generator.js.map +1 -1
- package/dist/server/shadow/index.d.ts +2 -1
- package/dist/server/shadow/index.d.ts.map +1 -1
- package/dist/server/shadow/index.js.map +1 -1
- package/dist/server/shadow/types.d.ts +0 -24
- package/dist/server/shadow/types.d.ts.map +1 -1
- package/dist/shadows/differ.d.ts +12 -12
- package/dist/shadows/differ.js +15 -15
- package/dist/shadows/differ.js.map +1 -1
- package/dist/shadows/generator.d.ts +53 -31
- package/dist/shadows/generator.d.ts.map +1 -1
- package/dist/shadows/generator.js +79 -35
- package/dist/shadows/generator.js.map +1 -1
- package/dist/shadows/index.d.ts +8 -10
- package/dist/shadows/index.d.ts.map +1 -1
- package/dist/shadows/index.js +12 -11
- package/dist/shadows/index.js.map +1 -1
- package/dist/shadows/types.d.ts +8 -28
- package/dist/shadows/types.d.ts.map +1 -1
- package/package.json +6 -6
- package/terraform/README.md +8 -7
- package/dist/shadows/config.d.ts +0 -54
- package/dist/shadows/config.d.ts.map +0 -1
- package/dist/shadows/config.js +0 -95
- package/dist/shadows/config.js.map +0 -1
- package/dist/shadows/schema.d.ts +0 -63
- package/dist/shadows/schema.d.ts.map +0 -1
- package/dist/shadows/schema.js +0 -8
- package/dist/shadows/schema.js.map +0 -1
|
@@ -1,41 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Escape string values for shadow SK generation
|
|
3
|
+
* Rules: # → ##, space → #
|
|
4
4
|
*
|
|
5
|
-
* @param value -
|
|
6
|
-
* @returns
|
|
5
|
+
* @param value - String to escape
|
|
6
|
+
* @returns Escaped string
|
|
7
7
|
*/
|
|
8
8
|
export function escapeString(value) {
|
|
9
9
|
return value
|
|
10
|
-
.replace(/#/g, '##') // #
|
|
11
|
-
.replace(/ /g, '#'); //
|
|
10
|
+
.replace(/#/g, '##') // Replace # with ##
|
|
11
|
+
.replace(/ /g, '#'); // Replace space with #
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Convert number to 20-digit zero-padded string
|
|
15
15
|
*
|
|
16
|
-
* @param value -
|
|
17
|
-
* @returns 20
|
|
16
|
+
* @param value - Number to convert (null/undefined allowed)
|
|
17
|
+
* @returns 20-digit zero-padded string
|
|
18
18
|
*/
|
|
19
19
|
export function formatNumber(value) {
|
|
20
|
-
// null/undefined
|
|
20
|
+
// Return empty string for null/undefined
|
|
21
21
|
if (value === null || value === undefined) {
|
|
22
22
|
return '';
|
|
23
23
|
}
|
|
24
24
|
if (!Number.isFinite(value)) {
|
|
25
25
|
throw new Error(`Invalid number value: ${value}`);
|
|
26
26
|
}
|
|
27
|
-
//
|
|
27
|
+
// Treat negative numbers as 0
|
|
28
28
|
const normalized = Math.max(0, Math.floor(value));
|
|
29
29
|
return normalized.toString().padStart(20, '0');
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Format datetime to UTC ISO 8601 format
|
|
33
33
|
*
|
|
34
|
-
* @param value -
|
|
35
|
-
* @returns UTC ISO 8601
|
|
34
|
+
* @param value - Datetime string or Date object (null/undefined allowed)
|
|
35
|
+
* @returns UTC ISO 8601 format string
|
|
36
36
|
*/
|
|
37
37
|
export function formatDatetime(value) {
|
|
38
|
-
// null/undefined
|
|
38
|
+
// Return empty string for null/undefined
|
|
39
39
|
if (value === null || value === undefined) {
|
|
40
40
|
return '';
|
|
41
41
|
}
|
|
@@ -46,29 +46,61 @@ export function formatDatetime(value) {
|
|
|
46
46
|
return date.toISOString();
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
* boolean
|
|
49
|
+
* Format boolean value
|
|
50
50
|
*
|
|
51
|
-
* @param value -
|
|
52
|
-
* @returns 'true'
|
|
51
|
+
* @param value - Boolean value (null/undefined allowed)
|
|
52
|
+
* @returns 'true' or 'false' or empty string
|
|
53
53
|
*/
|
|
54
54
|
export function formatBoolean(value) {
|
|
55
|
-
// null/undefined
|
|
55
|
+
// Return empty string for null/undefined
|
|
56
56
|
if (value === null || value === undefined) {
|
|
57
57
|
return '';
|
|
58
58
|
}
|
|
59
59
|
return value ? 'true' : 'false';
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
62
|
+
* Format array to JSON string
|
|
63
63
|
*
|
|
64
|
-
* @param
|
|
65
|
-
* @
|
|
66
|
-
|
|
64
|
+
* @param value - Array (null/undefined allowed)
|
|
65
|
+
* @returns JSON string or empty string
|
|
66
|
+
*/
|
|
67
|
+
export function formatArray(value) {
|
|
68
|
+
// Return empty string for null/undefined
|
|
69
|
+
if (value === null || value === undefined) {
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
72
|
+
if (!Array.isArray(value)) {
|
|
73
|
+
throw new Error(`Invalid array value: ${value}`);
|
|
74
|
+
}
|
|
75
|
+
return JSON.stringify(value);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Format object to JSON string
|
|
79
|
+
*
|
|
80
|
+
* @param value - Object (null/undefined allowed)
|
|
81
|
+
* @returns JSON string or empty string
|
|
82
|
+
*/
|
|
83
|
+
export function formatObject(value) {
|
|
84
|
+
// Return empty string for null/undefined
|
|
85
|
+
if (value === null || value === undefined) {
|
|
86
|
+
return '';
|
|
87
|
+
}
|
|
88
|
+
if (typeof value !== 'object' || Array.isArray(value)) {
|
|
89
|
+
throw new Error(`Invalid object value: ${value}`);
|
|
90
|
+
}
|
|
91
|
+
return JSON.stringify(value);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Format field value according to its type
|
|
95
|
+
*
|
|
96
|
+
* @param type - Field type
|
|
97
|
+
* @param value - Value to format (null/undefined allowed)
|
|
98
|
+
* @returns Formatted string
|
|
67
99
|
*/
|
|
68
100
|
export function formatFieldValue(type, value) {
|
|
69
101
|
switch (type) {
|
|
70
102
|
case 'string':
|
|
71
|
-
//
|
|
103
|
+
// For string type, treat null/undefined as empty string
|
|
72
104
|
if (value === null || value === undefined) {
|
|
73
105
|
return '';
|
|
74
106
|
}
|
|
@@ -79,19 +111,23 @@ export function formatFieldValue(type, value) {
|
|
|
79
111
|
return formatDatetime(value);
|
|
80
112
|
case 'boolean':
|
|
81
113
|
return formatBoolean(value);
|
|
114
|
+
case 'array':
|
|
115
|
+
return formatArray(value);
|
|
116
|
+
case 'object':
|
|
117
|
+
return formatObject(value);
|
|
82
118
|
default:
|
|
83
119
|
throw new Error(`Unknown shadow field type: ${type}`);
|
|
84
120
|
}
|
|
85
121
|
}
|
|
86
122
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
123
|
+
* Generate shadow SK
|
|
124
|
+
* Format: {fieldName}#{formattedValue}#id#{recordId}
|
|
89
125
|
*
|
|
90
|
-
* @param fieldName -
|
|
91
|
-
* @param value -
|
|
92
|
-
* @param recordId -
|
|
93
|
-
* @param type -
|
|
94
|
-
* @returns
|
|
126
|
+
* @param fieldName - Field name
|
|
127
|
+
* @param value - Field value
|
|
128
|
+
* @param recordId - Record ID (ULID)
|
|
129
|
+
* @param type - Field type (default: 'string')
|
|
130
|
+
* @returns Generated shadow SK
|
|
95
131
|
*
|
|
96
132
|
* @example
|
|
97
133
|
* generateShadowSK('name', 'Tech News', '01HZXY123', 'string')
|
|
@@ -108,17 +144,25 @@ export function formatFieldValue(type, value) {
|
|
|
108
144
|
* @example
|
|
109
145
|
* generateShadowSK('isPublished', true, '01HZXY123', 'boolean')
|
|
110
146
|
* // => 'isPublished#true#id#01HZXY123'
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* generateShadowSK('tags', ['tech', 'aws'], '01HZXY123', 'array')
|
|
150
|
+
* // => 'tags#["tech","aws"]#id#01HZXY123'
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* generateShadowSK('metadata', { category: 'tech' }, '01HZXY123', 'object')
|
|
154
|
+
* // => 'metadata#{"category":"tech"}#id#01HZXY123'
|
|
111
155
|
*/
|
|
112
156
|
export function generateShadowSK(fieldName, value, recordId, type = 'string') {
|
|
113
157
|
const formattedValue = formatFieldValue(type, value);
|
|
114
158
|
return `${fieldName}#${formattedValue}#id#${recordId}`;
|
|
115
159
|
}
|
|
116
160
|
/**
|
|
117
|
-
*
|
|
118
|
-
*
|
|
161
|
+
* Generate main record SK from record ID
|
|
162
|
+
* Format: id#{recordId}
|
|
119
163
|
*
|
|
120
|
-
* @param recordId -
|
|
121
|
-
* @returns
|
|
164
|
+
* @param recordId - Record ID (ULID)
|
|
165
|
+
* @returns Main record SK
|
|
122
166
|
*/
|
|
123
167
|
export function generateMainRecordSK(recordId) {
|
|
124
168
|
return `id#${recordId}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/shadows/generator.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/shadows/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/shadows/index.d.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @exabugs/dynamodb-client/shadows -
|
|
2
|
+
* @exabugs/dynamodb-client/shadows - Shadow management library
|
|
3
3
|
*
|
|
4
|
-
* DynamoDB Single-Table
|
|
4
|
+
* Provides dynamic shadow record management for DynamoDB Single-Table design.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
6
|
+
* Main features:
|
|
7
|
+
* - Shadow SK generation (supports string/number/datetime/boolean/array/object)
|
|
8
|
+
* - Shadow difference calculation (comparing old and new shadows)
|
|
9
|
+
* - Configuration management utilities (for legacy compatibility)
|
|
10
10
|
*/
|
|
11
|
-
export type {
|
|
12
|
-
export
|
|
13
|
-
export { escapeString, formatNumber, formatDatetime, formatBoolean, formatFieldValue, generateShadowSK, generateMainRecordSK, } from './generator.js';
|
|
11
|
+
export type { ShadowFieldType, ShadowFieldConfig, ShadowDiff } from './types.js';
|
|
12
|
+
export { escapeString, formatNumber, formatDatetime, formatBoolean, formatArray, formatObject, formatFieldValue, generateShadowSK, generateMainRecordSK, } from './generator.js';
|
|
14
13
|
export { calculateShadowDiff, isDiffEmpty, mergeShadowDiffs } from './differ.js';
|
|
15
|
-
export { loadShadowConfig, getResourceConfig, getAllShadowFields, isValidShadowField, getDefaultSort, getConfigPathFromEnv, } from './config.js';
|
|
16
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shadows/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shadows/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAC;AAKpB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/shadows/index.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @exabugs/dynamodb-client/shadows -
|
|
2
|
+
* @exabugs/dynamodb-client/shadows - Shadow management library
|
|
3
3
|
*
|
|
4
|
-
* DynamoDB Single-Table
|
|
4
|
+
* Provides dynamic shadow record management for DynamoDB Single-Table design.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
6
|
+
* Main features:
|
|
7
|
+
* - Shadow SK generation (supports string/number/datetime/boolean/array/object)
|
|
8
|
+
* - Shadow difference calculation (comparing old and new shadows)
|
|
9
|
+
* - Configuration management utilities (for legacy compatibility)
|
|
10
10
|
*/
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
// Legacy types removed in v0.3.x - use environment variables for configuration
|
|
12
|
+
// Generator functions export
|
|
13
|
+
export { escapeString, formatNumber, formatDatetime, formatBoolean, formatArray, formatObject, formatFieldValue, generateShadowSK, generateMainRecordSK, } from './generator.js';
|
|
14
|
+
// Difference calculation functions export
|
|
14
15
|
export { calculateShadowDiff, isDiffEmpty, mergeShadowDiffs } from './differ.js';
|
|
15
|
-
//
|
|
16
|
-
|
|
16
|
+
// Note: Configuration management functions removed in v0.3.x
|
|
17
|
+
// Use environment variables for configuration instead
|
|
17
18
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shadows/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shadows/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,+EAA+E;AAE/E,6BAA6B;AAC7B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,0CAA0C;AAC1C,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjF,6DAA6D;AAC7D,sDAAsD"}
|
package/dist/shadows/types.d.ts
CHANGED
|
@@ -1,40 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Shadow field types supported by the automatic shadow generation system
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
5
|
-
type: 'string' | 'number' | 'datetime';
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* リソースごとのシャドー設定
|
|
9
|
-
*/
|
|
10
|
-
export interface ResourceShadowConfig {
|
|
11
|
-
sortDefaults: {
|
|
12
|
-
field: string;
|
|
13
|
-
order: 'ASC' | 'DESC';
|
|
14
|
-
};
|
|
15
|
-
shadows: {
|
|
16
|
-
[fieldName: string]: ShadowFieldConfig;
|
|
17
|
-
};
|
|
18
|
-
ttl?: {
|
|
19
|
-
days: number;
|
|
20
|
-
};
|
|
21
|
-
}
|
|
4
|
+
export type ShadowFieldType = 'string' | 'number' | 'datetime' | 'boolean' | 'array' | 'object';
|
|
22
5
|
/**
|
|
23
|
-
*
|
|
6
|
+
* Shadow field configuration
|
|
24
7
|
*/
|
|
25
|
-
export interface
|
|
26
|
-
|
|
27
|
-
resources: {
|
|
28
|
-
[resourceName: string]: ResourceShadowConfig;
|
|
29
|
-
};
|
|
8
|
+
export interface ShadowFieldConfig {
|
|
9
|
+
type: ShadowFieldType;
|
|
30
10
|
}
|
|
31
11
|
/**
|
|
32
|
-
*
|
|
12
|
+
* Result of shadow difference calculation
|
|
33
13
|
*/
|
|
34
14
|
export interface ShadowDiff {
|
|
35
|
-
/**
|
|
15
|
+
/** List of shadow SKs to delete */
|
|
36
16
|
toDelete: string[];
|
|
37
|
-
/**
|
|
17
|
+
/** List of shadow SKs to add */
|
|
38
18
|
toAdd: string[];
|
|
39
19
|
}
|
|
40
20
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shadows/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shadows/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;CACvB;AAKD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gCAAgC;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exabugs/dynamodb-client",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"description": "DynamoDB Single-Table Client SDK with MongoDB-like API, Shadow Records, and Lambda implementation for serverless applications",
|
|
5
5
|
"author": "exabugs",
|
|
6
6
|
"license": "MIT",
|
|
@@ -108,14 +108,14 @@
|
|
|
108
108
|
},
|
|
109
109
|
"dependencies": {
|
|
110
110
|
"@aws-crypto/sha256-js": "5.2.0",
|
|
111
|
-
"@aws-sdk/client-dynamodb": "3.
|
|
112
|
-
"@aws-sdk/credential-provider-node": "3.
|
|
113
|
-
"@aws-sdk/lib-dynamodb": "3.
|
|
111
|
+
"@aws-sdk/client-dynamodb": "3.946.0",
|
|
112
|
+
"@aws-sdk/credential-provider-node": "3.946.0",
|
|
113
|
+
"@aws-sdk/lib-dynamodb": "3.946.0",
|
|
114
114
|
"@smithy/protocol-http": "5.3.5",
|
|
115
115
|
"@smithy/signature-v4": "5.3.5",
|
|
116
116
|
"@smithy/util-utf8": "4.2.0",
|
|
117
117
|
"aws-jwt-verify": "5.1.1",
|
|
118
|
-
"ulid": "3.0.
|
|
118
|
+
"ulid": "3.0.2"
|
|
119
119
|
},
|
|
120
120
|
"devDependencies": {
|
|
121
121
|
"@eslint/js": "^9.0.0",
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
126
126
|
"@typescript-eslint/parser": "^8.0.0",
|
|
127
127
|
"@vitest/coverage-v8": "^2.0.0",
|
|
128
|
-
"esbuild": "^0.
|
|
128
|
+
"esbuild": "^0.27.1",
|
|
129
129
|
"eslint": "^9.0.0",
|
|
130
130
|
"globals": "^15.0.0",
|
|
131
131
|
"prettier": "^3.0.0",
|
package/terraform/README.md
CHANGED
|
@@ -30,8 +30,8 @@ module "lambda_records" {
|
|
|
30
30
|
# Cognito設定
|
|
31
31
|
cognito_user_pool_id = module.cognito.user_pool_id
|
|
32
32
|
|
|
33
|
-
# シャドウ設定(
|
|
34
|
-
shadow_config = base64encode(file("${path.root}/../packages/api-types/shadow.config.json"))
|
|
33
|
+
# シャドウ設定(v0.3.x以降は不要、レガシー互換性のため残存)
|
|
34
|
+
# shadow_config = base64encode(file("${path.root}/../packages/api-types/shadow.config.json"))
|
|
35
35
|
|
|
36
36
|
# ログ設定
|
|
37
37
|
log_retention_days = 7
|
|
@@ -56,8 +56,8 @@ module "lambda_records" {
|
|
|
56
56
|
# Cognito設定
|
|
57
57
|
cognito_user_pool_id = module.cognito.user_pool_id
|
|
58
58
|
|
|
59
|
-
# シャドウ設定(
|
|
60
|
-
shadow_config = base64encode(file("${path.root}/../packages/api-types/shadow.config.json"))
|
|
59
|
+
# シャドウ設定(v0.3.x以降は不要、レガシー互換性のため残存)
|
|
60
|
+
# shadow_config = base64encode(file("${path.root}/../packages/api-types/shadow.config.json"))
|
|
61
61
|
}
|
|
62
62
|
```
|
|
63
63
|
|
|
@@ -73,7 +73,7 @@ module "lambda_records" {
|
|
|
73
73
|
| `dynamodb_table_name` | string | DynamoDBテーブル名 |
|
|
74
74
|
| `dynamodb_table_arn` | string | DynamoDBテーブルARN |
|
|
75
75
|
| `cognito_user_pool_id` | string | Cognito User Pool ID(認証用) |
|
|
76
|
-
| `shadow_config` | string | シャドウ設定(
|
|
76
|
+
| `shadow_config` | string | シャドウ設定(v0.3.x以降は不要) |
|
|
77
77
|
|
|
78
78
|
### オプション変数
|
|
79
79
|
|
|
@@ -93,7 +93,7 @@ module "lambda_records" {
|
|
|
93
93
|
| `function_url` | Lambda Function URL |
|
|
94
94
|
| `log_group_name` | CloudWatch Logsロググループ名 |
|
|
95
95
|
| `role_arn` | Lambda実行ロールARN |
|
|
96
|
-
| `shadow_config` | シャドウ設定(
|
|
96
|
+
| `shadow_config` | シャドウ設定(v0.3.x以降は不要) |
|
|
97
97
|
|
|
98
98
|
## 要件
|
|
99
99
|
|
|
@@ -133,7 +133,8 @@ module "lambda_records" {
|
|
|
133
133
|
Terraformでは、シャドウ設定をbase64エンコードして渡します:
|
|
134
134
|
|
|
135
135
|
```hcl
|
|
136
|
-
|
|
136
|
+
# v0.3.x以降は不要(環境変数で自動設定)
|
|
137
|
+
# shadow_config = base64encode(file("${path.root}/../packages/api-types/shadow.config.json"))
|
|
137
138
|
```
|
|
138
139
|
|
|
139
140
|
## IAMポリシー
|
package/dist/shadows/config.d.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { ResourceShadowConfig, ShadowConfig, ShadowFieldConfig } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* shadow.config.jsonファイルから読み込む
|
|
4
|
-
*
|
|
5
|
-
* @param configPath - 設定ファイルのパス(デフォルト: './shadow.config.json')
|
|
6
|
-
* @returns パースされたシャドー設定
|
|
7
|
-
* @throws 設定ファイルが存在しない、または不正な形式の場合
|
|
8
|
-
*/
|
|
9
|
-
export declare function loadShadowConfig(configPath?: string): Promise<ShadowConfig>;
|
|
10
|
-
/**
|
|
11
|
-
* 特定のリソースのシャドー設定を取得する
|
|
12
|
-
*
|
|
13
|
-
* @param config - シャドー設定全体
|
|
14
|
-
* @param resourceName - リソース名(例: 'articles', 'tasks')
|
|
15
|
-
* @returns リソースのシャドー設定
|
|
16
|
-
* @throws リソースが設定に存在しない場合
|
|
17
|
-
*/
|
|
18
|
-
export declare function getResourceConfig(config: ShadowConfig, resourceName: string): ResourceShadowConfig;
|
|
19
|
-
/**
|
|
20
|
-
* リソースの全シャドーフィールドを取得する
|
|
21
|
-
*
|
|
22
|
-
* @param config - シャドー設定全体
|
|
23
|
-
* @param resourceName - リソース名
|
|
24
|
-
* @returns 全シャドーフィールドの設定
|
|
25
|
-
*/
|
|
26
|
-
export declare function getAllShadowFields(config: ShadowConfig, resourceName: string): Record<string, ShadowFieldConfig>;
|
|
27
|
-
/**
|
|
28
|
-
* 指定されたフィールドが有効なシャドーフィールドかどうかを検証する
|
|
29
|
-
*
|
|
30
|
-
* @param config - シャドー設定全体
|
|
31
|
-
* @param resourceName - リソース名
|
|
32
|
-
* @param fieldName - 検証するフィールド名
|
|
33
|
-
* @returns フィールドが有効な場合true
|
|
34
|
-
*/
|
|
35
|
-
export declare function isValidShadowField(config: ShadowConfig, resourceName: string, fieldName: string): boolean;
|
|
36
|
-
/**
|
|
37
|
-
* リソースのデフォルトソート設定を取得する
|
|
38
|
-
*
|
|
39
|
-
* @param config - シャドー設定全体
|
|
40
|
-
* @param resourceName - リソース名
|
|
41
|
-
* @returns デフォルトソート設定
|
|
42
|
-
*/
|
|
43
|
-
export declare function getDefaultSort(config: ShadowConfig, resourceName: string): {
|
|
44
|
-
field: string;
|
|
45
|
-
order: 'ASC' | 'DESC';
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* 設定ファイルから環境変数経由でパスを取得する
|
|
49
|
-
*
|
|
50
|
-
* @param envVar - 環境変数名(デフォルト: 'SHADOW_CONFIG_PATH')
|
|
51
|
-
* @returns 設定ファイルのパス
|
|
52
|
-
*/
|
|
53
|
-
export declare function getConfigPathFromEnv(envVar?: string): string;
|
|
54
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/shadows/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAExF;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,GAAE,MAA+B,GAC1C,OAAO,CAAC,YAAY,CAAC,CAuBvB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,GACnB,oBAAoB,CAQtB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAGnC;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAOT;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,GACnB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE,CAG1C;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,MAA6B,GAAG,MAAM,CAElF"}
|
package/dist/shadows/config.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import { resolve } from 'node:path';
|
|
3
|
-
/**
|
|
4
|
-
* shadow.config.jsonファイルから読み込む
|
|
5
|
-
*
|
|
6
|
-
* @param configPath - 設定ファイルのパス(デフォルト: './shadow.config.json')
|
|
7
|
-
* @returns パースされたシャドー設定
|
|
8
|
-
* @throws 設定ファイルが存在しない、または不正な形式の場合
|
|
9
|
-
*/
|
|
10
|
-
export async function loadShadowConfig(configPath = './shadow.config.json') {
|
|
11
|
-
try {
|
|
12
|
-
// ファイルシステムから読み込む
|
|
13
|
-
const absolutePath = resolve(configPath);
|
|
14
|
-
const content = await readFile(absolutePath, 'utf-8');
|
|
15
|
-
const config = JSON.parse(content);
|
|
16
|
-
// 基本的なバリデーション
|
|
17
|
-
if (!config.$schemaVersion) {
|
|
18
|
-
throw new Error('Missing $schemaVersion in shadow.config.json');
|
|
19
|
-
}
|
|
20
|
-
if (!config.resources || typeof config.resources !== 'object') {
|
|
21
|
-
throw new Error('Missing or invalid resources in shadow.config.json');
|
|
22
|
-
}
|
|
23
|
-
return config;
|
|
24
|
-
}
|
|
25
|
-
catch (error) {
|
|
26
|
-
if (error instanceof Error) {
|
|
27
|
-
throw new Error(`Failed to load shadow config: ${error.message}`);
|
|
28
|
-
}
|
|
29
|
-
throw error;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* 特定のリソースのシャドー設定を取得する
|
|
34
|
-
*
|
|
35
|
-
* @param config - シャドー設定全体
|
|
36
|
-
* @param resourceName - リソース名(例: 'articles', 'tasks')
|
|
37
|
-
* @returns リソースのシャドー設定
|
|
38
|
-
* @throws リソースが設定に存在しない場合
|
|
39
|
-
*/
|
|
40
|
-
export function getResourceConfig(config, resourceName) {
|
|
41
|
-
const resourceConfig = config.resources[resourceName];
|
|
42
|
-
if (!resourceConfig) {
|
|
43
|
-
throw new Error(`Resource '${resourceName}' not found in shadow config`);
|
|
44
|
-
}
|
|
45
|
-
return resourceConfig;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* リソースの全シャドーフィールドを取得する
|
|
49
|
-
*
|
|
50
|
-
* @param config - シャドー設定全体
|
|
51
|
-
* @param resourceName - リソース名
|
|
52
|
-
* @returns 全シャドーフィールドの設定
|
|
53
|
-
*/
|
|
54
|
-
export function getAllShadowFields(config, resourceName) {
|
|
55
|
-
const resourceConfig = getResourceConfig(config, resourceName);
|
|
56
|
-
return resourceConfig.shadows;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* 指定されたフィールドが有効なシャドーフィールドかどうかを検証する
|
|
60
|
-
*
|
|
61
|
-
* @param config - シャドー設定全体
|
|
62
|
-
* @param resourceName - リソース名
|
|
63
|
-
* @param fieldName - 検証するフィールド名
|
|
64
|
-
* @returns フィールドが有効な場合true
|
|
65
|
-
*/
|
|
66
|
-
export function isValidShadowField(config, resourceName, fieldName) {
|
|
67
|
-
try {
|
|
68
|
-
const allFields = getAllShadowFields(config, resourceName);
|
|
69
|
-
return fieldName in allFields;
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* リソースのデフォルトソート設定を取得する
|
|
77
|
-
*
|
|
78
|
-
* @param config - シャドー設定全体
|
|
79
|
-
* @param resourceName - リソース名
|
|
80
|
-
* @returns デフォルトソート設定
|
|
81
|
-
*/
|
|
82
|
-
export function getDefaultSort(config, resourceName) {
|
|
83
|
-
const resourceConfig = getResourceConfig(config, resourceName);
|
|
84
|
-
return resourceConfig.sortDefaults;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* 設定ファイルから環境変数経由でパスを取得する
|
|
88
|
-
*
|
|
89
|
-
* @param envVar - 環境変数名(デフォルト: 'SHADOW_CONFIG_PATH')
|
|
90
|
-
* @returns 設定ファイルのパス
|
|
91
|
-
*/
|
|
92
|
-
export function getConfigPathFromEnv(envVar = 'SHADOW_CONFIG_PATH') {
|
|
93
|
-
return process.env[envVar] || './shadow.config.json';
|
|
94
|
-
}
|
|
95
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/shadows/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAqB,sBAAsB;IAE3C,IAAI,CAAC;QACH,iBAAiB;QACjB,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;QAEnD,cAAc;QACd,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAoB,EACpB,YAAoB;IAEpB,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAEtD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,8BAA8B,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAoB,EACpB,YAAoB;IAEpB,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/D,OAAO,cAAc,CAAC,OAAO,CAAC;AAChC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAoB,EACpB,YAAoB,EACpB,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC3D,OAAO,SAAS,IAAI,SAAS,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAoB,EACpB,YAAoB;IAEpB,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/D,OAAO,cAAc,CAAC,YAAY,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB,oBAAoB;IACxE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,sBAAsB,CAAC;AACvD,CAAC"}
|
package/dist/shadows/schema.d.ts
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shadow Config スキーマ定義
|
|
3
|
-
*
|
|
4
|
-
* TypeScript でリソーススキーマを定義し、shadow.config.json を自動生成するための型定義。
|
|
5
|
-
* これにより、型安全性を保ちながら Shadow Config を管理できる。
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* シャドーフィールドの型
|
|
9
|
-
*/
|
|
10
|
-
export type ShadowFieldType = 'string' | 'number' | 'datetime' | 'boolean';
|
|
11
|
-
/**
|
|
12
|
-
* シャドーフィールドの定義
|
|
13
|
-
*/
|
|
14
|
-
export interface ShadowFieldDefinition {
|
|
15
|
-
type: ShadowFieldType;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* リソーススキーマの定義
|
|
19
|
-
*
|
|
20
|
-
* @template T - リソースの型(例: Article, Task など)
|
|
21
|
-
*
|
|
22
|
-
* @exabugs/dynamodb-client v0.3.x では、シャドウ設定は環境変数ベースになりました。
|
|
23
|
-
* shadows プロパティは後方互換性のために残されていますが、省略可能です。
|
|
24
|
-
*/
|
|
25
|
-
export interface ResourceSchema<T = any> {
|
|
26
|
-
/** リソース名(複数形、例: "articles", "tasks") */
|
|
27
|
-
resource: string;
|
|
28
|
-
/** リソースの型定義(型チェック用) */
|
|
29
|
-
type: T;
|
|
30
|
-
/** シャドー設定(省略可、v0.3.x では不要) */
|
|
31
|
-
shadows?: {
|
|
32
|
-
/** ソート可能なフィールドの定義 */
|
|
33
|
-
sortableFields: Record<string, ShadowFieldDefinition>;
|
|
34
|
-
};
|
|
35
|
-
/** デフォルトソート設定(省略時は自動決定) */
|
|
36
|
-
sortDefaults?: {
|
|
37
|
-
field: string;
|
|
38
|
-
order: 'ASC' | 'DESC';
|
|
39
|
-
};
|
|
40
|
-
/** TTL 設定(省略可) */
|
|
41
|
-
ttl?: {
|
|
42
|
-
days: number;
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* スキーマレジストリの設定
|
|
47
|
-
*
|
|
48
|
-
* アプリケーション全体のリソーススキーマを定義する。
|
|
49
|
-
* この設定から shadow.config.json を自動生成する。
|
|
50
|
-
*/
|
|
51
|
-
export interface SchemaRegistryConfig {
|
|
52
|
-
/** データベース設定 */
|
|
53
|
-
database: {
|
|
54
|
-
/** タイムスタンプフィールド名 */
|
|
55
|
-
timestamps: {
|
|
56
|
-
createdAt: string;
|
|
57
|
-
updatedAt: string;
|
|
58
|
-
};
|
|
59
|
-
};
|
|
60
|
-
/** リソーススキーマの定義 */
|
|
61
|
-
resources: Record<string, ResourceSchema>;
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/shadows/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,eAAe,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,GAAG;IACrC,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IAEjB,uBAAuB;IACvB,IAAI,EAAE,CAAC,CAAC;IAER,8BAA8B;IAC9B,OAAO,CAAC,EAAE;QACR,qBAAqB;QACrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;KACvD,CAAC;IAEF,2BAA2B;IAC3B,YAAY,CAAC,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;KACvB,CAAC;IAEF,kBAAkB;IAClB,GAAG,CAAC,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,eAAe;IACf,QAAQ,EAAE;QACR,oBAAoB;QACpB,UAAU,EAAE;YACV,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IAEF,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC3C"}
|