@momentumcms/storage 0.4.1 → 0.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/CHANGELOG.md +8 -0
- package/package.json +1 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +4 -1
- package/src/index.js.map +1 -1
- package/src/lib/storage-local.js +2 -26
- package/src/lib/storage-local.js.map +1 -1
- package/src/lib/storage-s3.js +2 -26
- package/src/lib/storage-s3.js.map +1 -1
- package/src/lib/storage-utils.d.ts +8 -0
- package/src/lib/storage-utils.js +33 -0
- package/src/lib/storage-utils.js.map +1 -0
- package/src/test-setup/ensure-minio.d.ts +8 -0
- package/src/test-setup/ensure-minio.js +75 -0
- package/src/test-setup/ensure-minio.js.map +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## 0.5.0 (2026-02-23)
|
|
2
|
+
|
|
3
|
+
This was a version bump only for storage to align it with other projects, there were no code changes.
|
|
4
|
+
|
|
5
|
+
## 0.4.1 (2026-02-22)
|
|
6
|
+
|
|
7
|
+
This was a version bump only for storage to align it with other projects, there were no code changes.
|
|
8
|
+
|
|
1
9
|
## 0.4.0 (2026-02-22)
|
|
2
10
|
|
|
3
11
|
### 🚀 Features
|
package/package.json
CHANGED
package/src/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './lib/storage.types';
|
|
2
2
|
export { localStorageAdapter } from './lib/storage-local';
|
|
3
3
|
export { s3StorageAdapter } from './lib/storage-s3';
|
|
4
|
+
export { getExtensionFromMimeType } from './lib/storage-utils';
|
|
4
5
|
export { validateMimeType, isMimeTypeAllowed, detectMimeType, mimeTypeMatches, } from './lib/mime-validator';
|
package/src/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mimeTypeMatches = exports.detectMimeType = exports.isMimeTypeAllowed = exports.validateMimeType = exports.s3StorageAdapter = exports.localStorageAdapter = void 0;
|
|
3
|
+
exports.mimeTypeMatches = exports.detectMimeType = exports.isMimeTypeAllowed = exports.validateMimeType = exports.getExtensionFromMimeType = exports.s3StorageAdapter = exports.localStorageAdapter = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
// Storage types
|
|
6
6
|
tslib_1.__exportStar(require("./lib/storage.types"), exports);
|
|
@@ -9,6 +9,9 @@ var storage_local_1 = require("./lib/storage-local");
|
|
|
9
9
|
Object.defineProperty(exports, "localStorageAdapter", { enumerable: true, get: function () { return storage_local_1.localStorageAdapter; } });
|
|
10
10
|
var storage_s3_1 = require("./lib/storage-s3");
|
|
11
11
|
Object.defineProperty(exports, "s3StorageAdapter", { enumerable: true, get: function () { return storage_s3_1.s3StorageAdapter; } });
|
|
12
|
+
// Utilities
|
|
13
|
+
var storage_utils_1 = require("./lib/storage-utils");
|
|
14
|
+
Object.defineProperty(exports, "getExtensionFromMimeType", { enumerable: true, get: function () { return storage_utils_1.getExtensionFromMimeType; } });
|
|
12
15
|
// MIME validation
|
|
13
16
|
var mime_validator_1 = require("./lib/mime-validator");
|
|
14
17
|
Object.defineProperty(exports, "validateMimeType", { enumerable: true, get: function () { return mime_validator_1.validateMimeType; } });
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/storage/src/index.ts"],"names":[],"mappings":";;;;AAAA,gBAAgB;AAChB,8DAAoC;AAEpC,mBAAmB;AACnB,qDAA0D;AAAjD,oHAAA,mBAAmB,OAAA;AAC5B,+CAAoD;AAA3C,8GAAA,gBAAgB,OAAA;AAEzB,kBAAkB;AAClB,uDAK8B;AAJ7B,kHAAA,gBAAgB,OAAA;AAChB,mHAAA,iBAAiB,OAAA;AACjB,gHAAA,cAAc,OAAA;AACd,iHAAA,eAAe,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/storage/src/index.ts"],"names":[],"mappings":";;;;AAAA,gBAAgB;AAChB,8DAAoC;AAEpC,mBAAmB;AACnB,qDAA0D;AAAjD,oHAAA,mBAAmB,OAAA;AAC5B,+CAAoD;AAA3C,8GAAA,gBAAgB,OAAA;AAEzB,YAAY;AACZ,qDAA+D;AAAtD,yHAAA,wBAAwB,OAAA;AAEjC,kBAAkB;AAClB,uDAK8B;AAJ7B,kHAAA,gBAAgB,OAAA;AAChB,mHAAA,iBAAiB,OAAA;AACjB,gHAAA,cAAc,OAAA;AACd,iHAAA,eAAe,OAAA"}
|
package/src/lib/storage-local.js
CHANGED
|
@@ -9,6 +9,7 @@ const tslib_1 = require("tslib");
|
|
|
9
9
|
const node_fs_1 = require("node:fs");
|
|
10
10
|
const node_path_1 = require("node:path");
|
|
11
11
|
const node_crypto_1 = require("node:crypto");
|
|
12
|
+
const storage_utils_1 = require("./storage-utils");
|
|
12
13
|
/**
|
|
13
14
|
* Creates a local filesystem storage adapter.
|
|
14
15
|
*
|
|
@@ -52,7 +53,7 @@ function localStorageAdapter(options) {
|
|
|
52
53
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
53
54
|
var _a;
|
|
54
55
|
// Generate unique filename
|
|
55
|
-
const ext = (0, node_path_1.extname)(file.originalName) || getExtensionFromMimeType(file.mimeType);
|
|
56
|
+
const ext = (0, node_path_1.extname)(file.originalName) || (0, storage_utils_1.getExtensionFromMimeType)(file.mimeType);
|
|
56
57
|
const filename = (uploadOptions === null || uploadOptions === void 0 ? void 0 : uploadOptions.filename)
|
|
57
58
|
? `${uploadOptions.filename}${ext}`
|
|
58
59
|
: `${(0, node_crypto_1.randomUUID)()}${ext}`;
|
|
@@ -108,29 +109,4 @@ function localStorageAdapter(options) {
|
|
|
108
109
|
},
|
|
109
110
|
};
|
|
110
111
|
}
|
|
111
|
-
/**
|
|
112
|
-
* Get file extension from MIME type.
|
|
113
|
-
*/
|
|
114
|
-
function getExtensionFromMimeType(mimeType) {
|
|
115
|
-
var _a;
|
|
116
|
-
const mimeToExt = {
|
|
117
|
-
'image/jpeg': '.jpg',
|
|
118
|
-
'image/png': '.png',
|
|
119
|
-
'image/gif': '.gif',
|
|
120
|
-
'image/webp': '.webp',
|
|
121
|
-
'image/svg+xml': '.svg',
|
|
122
|
-
'application/pdf': '.pdf',
|
|
123
|
-
'application/json': '.json',
|
|
124
|
-
'text/plain': '.txt',
|
|
125
|
-
'text/html': '.html',
|
|
126
|
-
'text/css': '.css',
|
|
127
|
-
'application/javascript': '.js',
|
|
128
|
-
'video/mp4': '.mp4',
|
|
129
|
-
'video/webm': '.webm',
|
|
130
|
-
'audio/mpeg': '.mp3',
|
|
131
|
-
'audio/wav': '.wav',
|
|
132
|
-
'application/zip': '.zip',
|
|
133
|
-
};
|
|
134
|
-
return (_a = mimeToExt[mimeType]) !== null && _a !== void 0 ? _a : '';
|
|
135
|
-
}
|
|
136
112
|
//# sourceMappingURL=storage-local.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-local.js","sourceRoot":"","sources":["../../../../../libs/storage/src/lib/storage-local.ts"],"names":[],"mappings":";AAAA;;;GAGG;;
|
|
1
|
+
{"version":3,"file":"storage-local.js","sourceRoot":"","sources":["../../../../../libs/storage/src/lib/storage-local.ts"],"names":[],"mappings":"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"}
|
package/src/lib/storage-s3.js
CHANGED
|
@@ -8,6 +8,7 @@ exports.s3StorageAdapter = s3StorageAdapter;
|
|
|
8
8
|
const tslib_1 = require("tslib");
|
|
9
9
|
const node_crypto_1 = require("node:crypto");
|
|
10
10
|
const node_path_1 = require("node:path");
|
|
11
|
+
const storage_utils_1 = require("./storage-utils");
|
|
11
12
|
// Dynamic import for AWS SDK to avoid bundling issues
|
|
12
13
|
let S3Client;
|
|
13
14
|
let PutObjectCommand;
|
|
@@ -95,7 +96,7 @@ function s3StorageAdapter(options) {
|
|
|
95
96
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
96
97
|
const s3 = yield getClient();
|
|
97
98
|
// Generate unique key
|
|
98
|
-
const ext = (0, node_path_1.extname)(file.originalName) || getExtensionFromMimeType(file.mimeType);
|
|
99
|
+
const ext = (0, node_path_1.extname)(file.originalName) || (0, storage_utils_1.getExtensionFromMimeType)(file.mimeType);
|
|
99
100
|
const filename = (uploadOptions === null || uploadOptions === void 0 ? void 0 : uploadOptions.filename)
|
|
100
101
|
? `${uploadOptions.filename}${ext}`
|
|
101
102
|
: `${(0, node_crypto_1.randomUUID)()}${ext}`;
|
|
@@ -207,29 +208,4 @@ function s3StorageAdapter(options) {
|
|
|
207
208
|
},
|
|
208
209
|
};
|
|
209
210
|
}
|
|
210
|
-
/**
|
|
211
|
-
* Get file extension from MIME type.
|
|
212
|
-
*/
|
|
213
|
-
function getExtensionFromMimeType(mimeType) {
|
|
214
|
-
var _a;
|
|
215
|
-
const mimeToExt = {
|
|
216
|
-
'image/jpeg': '.jpg',
|
|
217
|
-
'image/png': '.png',
|
|
218
|
-
'image/gif': '.gif',
|
|
219
|
-
'image/webp': '.webp',
|
|
220
|
-
'image/svg+xml': '.svg',
|
|
221
|
-
'application/pdf': '.pdf',
|
|
222
|
-
'application/json': '.json',
|
|
223
|
-
'text/plain': '.txt',
|
|
224
|
-
'text/html': '.html',
|
|
225
|
-
'text/css': '.css',
|
|
226
|
-
'application/javascript': '.js',
|
|
227
|
-
'video/mp4': '.mp4',
|
|
228
|
-
'video/webm': '.webm',
|
|
229
|
-
'audio/mpeg': '.mp3',
|
|
230
|
-
'audio/wav': '.wav',
|
|
231
|
-
'application/zip': '.zip',
|
|
232
|
-
};
|
|
233
|
-
return (_a = mimeToExt[mimeType]) !== null && _a !== void 0 ? _a : '';
|
|
234
|
-
}
|
|
235
211
|
//# sourceMappingURL=storage-s3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-s3.js","sourceRoot":"","sources":["../../../../../libs/storage/src/lib/storage-s3.ts"],"names":[],"mappings":";AAAA;;;GAGG;;
|
|
1
|
+
{"version":3,"file":"storage-s3.js","sourceRoot":"","sources":["../../../../../libs/storage/src/lib/storage-s3.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared utilities for storage adapters.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getExtensionFromMimeType = getExtensionFromMimeType;
|
|
7
|
+
const MIME_TO_EXT = {
|
|
8
|
+
'image/jpeg': '.jpg',
|
|
9
|
+
'image/png': '.png',
|
|
10
|
+
'image/gif': '.gif',
|
|
11
|
+
'image/webp': '.webp',
|
|
12
|
+
'image/svg+xml': '.svg',
|
|
13
|
+
'application/pdf': '.pdf',
|
|
14
|
+
'application/json': '.json',
|
|
15
|
+
'text/plain': '.txt',
|
|
16
|
+
'text/html': '.html',
|
|
17
|
+
'text/css': '.css',
|
|
18
|
+
'application/javascript': '.js',
|
|
19
|
+
'video/mp4': '.mp4',
|
|
20
|
+
'video/webm': '.webm',
|
|
21
|
+
'audio/mpeg': '.mp3',
|
|
22
|
+
'audio/wav': '.wav',
|
|
23
|
+
'application/zip': '.zip',
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Get file extension from MIME type.
|
|
27
|
+
* Returns empty string for unknown MIME types.
|
|
28
|
+
*/
|
|
29
|
+
function getExtensionFromMimeType(mimeType) {
|
|
30
|
+
var _a;
|
|
31
|
+
return (_a = MIME_TO_EXT[mimeType]) !== null && _a !== void 0 ? _a : '';
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=storage-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-utils.js","sourceRoot":"","sources":["../../../../../libs/storage/src/lib/storage-utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAyBH,4DAEC;AAzBD,MAAM,WAAW,GAA2B;IAC3C,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,MAAM;IACnB,WAAW,EAAE,MAAM;IACnB,YAAY,EAAE,OAAO;IACrB,eAAe,EAAE,MAAM;IACvB,iBAAiB,EAAE,MAAM;IACzB,kBAAkB,EAAE,OAAO;IAC3B,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,OAAO;IACpB,UAAU,EAAE,MAAM;IAClB,wBAAwB,EAAE,KAAK;IAC/B,WAAW,EAAE,MAAM;IACnB,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,MAAM;IACnB,iBAAiB,EAAE,MAAM;CACzB,CAAC;AAEF;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,QAAgB;;IACxD,OAAO,MAAA,WAAW,CAAC,QAAQ,CAAC,mCAAI,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vitest globalSetup — ensures MinIO is available for S3 integration tests.
|
|
3
|
+
*
|
|
4
|
+
* 1. Probes MinIO health endpoint (already running?)
|
|
5
|
+
* 2. If not, tries `docker compose up -d minio` and polls for readiness
|
|
6
|
+
* 3. Sets MINIO_AVAILABLE and MINIO_ENDPOINT env vars for the test suite
|
|
7
|
+
*/
|
|
8
|
+
export declare function setup(): Promise<void>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vitest globalSetup — ensures MinIO is available for S3 integration tests.
|
|
4
|
+
*
|
|
5
|
+
* 1. Probes MinIO health endpoint (already running?)
|
|
6
|
+
* 2. If not, tries `docker compose up -d minio` and polls for readiness
|
|
7
|
+
* 3. Sets MINIO_AVAILABLE and MINIO_ENDPOINT env vars for the test suite
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.setup = setup;
|
|
11
|
+
const tslib_1 = require("tslib");
|
|
12
|
+
/* eslint-disable local/no-direct-browser-apis */
|
|
13
|
+
const node_child_process_1 = require("node:child_process");
|
|
14
|
+
const DEFAULT_ENDPOINT = 'http://localhost:9000';
|
|
15
|
+
const HEALTH_PATH = '/minio/health/live';
|
|
16
|
+
const MAX_RETRIES = 15;
|
|
17
|
+
const RETRY_DELAY_MS = 1000;
|
|
18
|
+
function sleep(ms) {
|
|
19
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
20
|
+
}
|
|
21
|
+
function isMinioHealthy(endpoint) {
|
|
22
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
try {
|
|
24
|
+
const controller = new AbortController();
|
|
25
|
+
const timeout = setTimeout(() => controller.abort(), 2000);
|
|
26
|
+
const res = yield fetch(`${endpoint}${HEALTH_PATH}`, { signal: controller.signal });
|
|
27
|
+
clearTimeout(timeout);
|
|
28
|
+
return res.ok;
|
|
29
|
+
}
|
|
30
|
+
catch (_a) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function waitForMinio(endpoint) {
|
|
36
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
for (let i = 0; i < MAX_RETRIES; i++) {
|
|
38
|
+
if (yield isMinioHealthy(endpoint)) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
yield sleep(RETRY_DELAY_MS);
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function setup() {
|
|
47
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
var _a, _b;
|
|
49
|
+
const endpoint = (_a = process.env['MINIO_ENDPOINT']) !== null && _a !== void 0 ? _a : DEFAULT_ENDPOINT;
|
|
50
|
+
// 1. Check if MinIO is already running
|
|
51
|
+
if (yield isMinioHealthy(endpoint)) {
|
|
52
|
+
process.env['MINIO_AVAILABLE'] = 'true';
|
|
53
|
+
process.env['MINIO_ENDPOINT'] = endpoint;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// 2. Try to start MinIO via docker compose (no shell, safe args)
|
|
57
|
+
try {
|
|
58
|
+
(0, node_child_process_1.execFileSync)('docker', ['compose', 'up', '-d', 'minio'], {
|
|
59
|
+
cwd: (_b = process.env['NX_WORKSPACE_ROOT']) !== null && _b !== void 0 ? _b : process.cwd(),
|
|
60
|
+
stdio: 'pipe',
|
|
61
|
+
timeout: 30000,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (_c) {
|
|
65
|
+
// Docker not available or compose failed — skip S3 tests
|
|
66
|
+
process.env['MINIO_AVAILABLE'] = 'false';
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// 3. Poll for readiness
|
|
70
|
+
const healthy = yield waitForMinio(endpoint);
|
|
71
|
+
process.env['MINIO_AVAILABLE'] = healthy ? 'true' : 'false';
|
|
72
|
+
process.env['MINIO_ENDPOINT'] = endpoint;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=ensure-minio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-minio.js","sourceRoot":"","sources":["../../../../../libs/storage/src/test-setup/ensure-minio.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAoCH,sBA2BC;;AA7DD,iDAAiD;AACjD,2DAAkD;AAElD,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACjD,MAAM,WAAW,GAAG,oBAAoB,CAAC;AACzC,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B,SAAS,KAAK,CAAC,EAAU;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAe,cAAc,CAAC,QAAgB;;QAC7C,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACpF,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC,EAAE,CAAC;QACf,CAAC;QAAC,WAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;CAAA;AAED,SAAe,YAAY,CAAC,QAAgB;;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,MAAM,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC;YACb,CAAC;YACD,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;CAAA;AAED,SAAsB,KAAK;;;QAC1B,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,mCAAI,gBAAgB,CAAC;QAEnE,uCAAuC;QACvC,IAAI,MAAM,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;YACzC,OAAO;QACR,CAAC;QAED,iEAAiE;QACjE,IAAI,CAAC;YACJ,IAAA,iCAAY,EAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;gBACxD,GAAG,EAAE,MAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,mCAAI,OAAO,CAAC,GAAG,EAAE;gBACtD,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,KAAM;aACf,CAAC,CAAC;QACJ,CAAC;QAAC,WAAM,CAAC;YACR,yDAAyD;YACzD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC;YACzC,OAAO;QACR,CAAC;QAED,wBAAwB;QACxB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;IAC1C,CAAC;CAAA"}
|