@powerhousedao/vetra 5.1.0-dev.4 → 5.1.0-dev.40
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/document-models/app-module/gen/document-schema.d.ts +24 -170
- package/dist/document-models/app-module/gen/document-schema.d.ts.map +1 -1
- package/dist/document-models/app-module/gen/schema/types.d.ts +15 -3
- package/dist/document-models/app-module/gen/schema/types.d.ts.map +1 -1
- package/dist/document-models/app-module/gen/schema/zod.d.ts +7 -4
- package/dist/document-models/app-module/gen/schema/zod.d.ts.map +1 -1
- package/dist/document-models/app-module/gen/schema/zod.js +2 -2
- package/dist/document-models/app-module/src/tests/base-operations.test.js +52 -1
- package/dist/document-models/document-editor/gen/document-schema.d.ts +21 -151
- package/dist/document-models/document-editor/gen/document-schema.d.ts.map +1 -1
- package/dist/document-models/document-editor/gen/schema/types.d.ts +15 -3
- package/dist/document-models/document-editor/gen/schema/types.d.ts.map +1 -1
- package/dist/document-models/document-editor/gen/schema/zod.d.ts +7 -4
- package/dist/document-models/document-editor/gen/schema/zod.d.ts.map +1 -1
- package/dist/document-models/document-editor/gen/schema/zod.js +2 -2
- package/dist/document-models/document-editor/src/tests/base-operations.test.js +42 -1
- package/dist/document-models/processor-module/gen/document-schema.d.ts +24 -170
- package/dist/document-models/processor-module/gen/document-schema.d.ts.map +1 -1
- package/dist/document-models/processor-module/gen/schema/types.d.ts +15 -3
- package/dist/document-models/processor-module/gen/schema/types.d.ts.map +1 -1
- package/dist/document-models/processor-module/gen/schema/zod.d.ts +7 -4
- package/dist/document-models/processor-module/gen/schema/zod.d.ts.map +1 -1
- package/dist/document-models/processor-module/gen/schema/zod.js +2 -2
- package/dist/document-models/processor-module/src/tests/base-operations.test.js +52 -1
- package/dist/document-models/subgraph-module/gen/document-schema.d.ts +18 -132
- package/dist/document-models/subgraph-module/gen/document-schema.d.ts.map +1 -1
- package/dist/document-models/subgraph-module/gen/schema/types.d.ts +15 -3
- package/dist/document-models/subgraph-module/gen/schema/types.d.ts.map +1 -1
- package/dist/document-models/subgraph-module/gen/schema/zod.d.ts +7 -4
- package/dist/document-models/subgraph-module/gen/schema/zod.d.ts.map +1 -1
- package/dist/document-models/subgraph-module/gen/schema/zod.js +1 -1
- package/dist/document-models/subgraph-module/src/tests/base-operations.test.js +22 -1
- package/dist/document-models/vetra-package/gen/document-schema.d.ts +33 -227
- package/dist/document-models/vetra-package/gen/document-schema.d.ts.map +1 -1
- package/dist/document-models/vetra-package/gen/schema/types.d.ts +17 -1
- package/dist/document-models/vetra-package/gen/schema/types.d.ts.map +1 -1
- package/dist/document-models/vetra-package/gen/schema/zod.d.ts +3 -3
- package/dist/document-models/vetra-package/gen/schema/zod.d.ts.map +1 -1
- package/dist/document-models/vetra-package/gen/schema/zod.js +10 -10
- package/dist/document-models/vetra-package/src/tests/base-operations.test.js +127 -28
- package/dist/editors/document-editor/components/DocumentEditorForm.d.ts.map +1 -1
- package/dist/editors/document-editor/components/DocumentEditorForm.js +32 -26
- package/dist/processors/codegen/__tests__/codegen-processor-e2e.test.js +98 -47
- package/dist/processors/codegen/document-handlers/generators/app-generator.js +2 -2
- package/dist/processors/codegen/document-handlers/generators/constants.d.ts +2 -1
- package/dist/processors/codegen/document-handlers/generators/constants.d.ts.map +1 -1
- package/dist/processors/codegen/document-handlers/generators/constants.js +2 -1
- package/dist/processors/codegen/document-handlers/generators/document-editor-generator.js +2 -2
- package/dist/processors/codegen/document-handlers/generators/document-model-generator.d.ts.map +1 -1
- package/dist/processors/codegen/document-handlers/generators/document-model-generator.js +8 -5
- package/dist/processors/codegen/factory.d.ts.map +1 -1
- package/dist/processors/codegen/factory.js +3 -0
- package/dist/processors/codegen/index.js +1 -1
- package/dist/subgraphs/app-module/resolvers.d.ts.map +1 -1
- package/dist/subgraphs/app-module/resolvers.js +4 -4
- package/dist/subgraphs/app-module/schema.d.ts.map +1 -1
- package/dist/subgraphs/app-module/schema.js +2 -17
- package/dist/subgraphs/document-editor/index.d.ts +3 -2
- package/dist/subgraphs/document-editor/index.d.ts.map +1 -1
- package/dist/subgraphs/document-editor/index.js +1 -1
- package/dist/subgraphs/document-editor/resolvers.d.ts +1 -1
- package/dist/subgraphs/document-editor/resolvers.d.ts.map +1 -1
- package/dist/subgraphs/document-editor/resolvers.js +12 -16
- package/dist/subgraphs/document-editor/schema.d.ts.map +1 -1
- package/dist/subgraphs/document-editor/schema.js +2 -21
- package/dist/subgraphs/index.d.ts +4 -4
- package/dist/subgraphs/index.d.ts.map +1 -1
- package/dist/subgraphs/index.js +4 -4
- package/dist/subgraphs/processor-module/index.d.ts +1 -1
- package/dist/subgraphs/processor-module/index.d.ts.map +1 -1
- package/dist/subgraphs/processor-module/resolvers.d.ts +1 -1
- package/dist/subgraphs/processor-module/resolvers.d.ts.map +1 -1
- package/dist/subgraphs/processor-module/resolvers.js +12 -16
- package/dist/subgraphs/processor-module/schema.d.ts.map +1 -1
- package/dist/subgraphs/processor-module/schema.js +2 -22
- package/dist/subgraphs/subgraph-module/index.d.ts +1 -1
- package/dist/subgraphs/subgraph-module/index.d.ts.map +1 -1
- package/dist/subgraphs/subgraph-module/resolvers.d.ts +1 -1
- package/dist/subgraphs/subgraph-module/resolvers.d.ts.map +1 -1
- package/dist/subgraphs/subgraph-module/resolvers.js +12 -16
- package/dist/subgraphs/subgraph-module/schema.d.ts.map +1 -1
- package/dist/subgraphs/subgraph-module/schema.js +2 -15
- package/dist/subgraphs/vetra-package/index.d.ts +1 -1
- package/dist/subgraphs/vetra-package/index.d.ts.map +1 -1
- package/dist/subgraphs/vetra-package/resolvers.d.ts +1 -1
- package/dist/subgraphs/vetra-package/resolvers.d.ts.map +1 -1
- package/dist/subgraphs/vetra-package/resolvers.js +137 -94
- package/dist/subgraphs/vetra-package/schema.d.ts.map +1 -1
- package/dist/subgraphs/vetra-package/schema.js +3 -26
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +17 -17
|
@@ -1,6 +1,32 @@
|
|
|
1
|
+
import path from "path";
|
|
1
2
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import {
|
|
3
|
+
import { USE_TS_MORPH, USE_VERSIONING, } from "../document-handlers/generators/constants.js";
|
|
3
4
|
import { CodegenProcessor } from "../index.js";
|
|
5
|
+
const defaultManifest = {
|
|
6
|
+
name: "",
|
|
7
|
+
description: "",
|
|
8
|
+
category: "",
|
|
9
|
+
publisher: {
|
|
10
|
+
name: "",
|
|
11
|
+
url: "",
|
|
12
|
+
},
|
|
13
|
+
documentModels: [],
|
|
14
|
+
editors: [],
|
|
15
|
+
apps: [],
|
|
16
|
+
subgraphs: [],
|
|
17
|
+
importScripts: [],
|
|
18
|
+
};
|
|
19
|
+
function mockGetPHConfig() {
|
|
20
|
+
return {
|
|
21
|
+
logLevel: "verbose",
|
|
22
|
+
skipFormat: true,
|
|
23
|
+
documentModelsDir: path.join(process.cwd(), "document-models"),
|
|
24
|
+
editorsDir: path.join(process.cwd(), "editors"),
|
|
25
|
+
processorsDir: path.join(process.cwd(), "processors"),
|
|
26
|
+
subgraphsDir: path.join(process.cwd(), "subgraphs"),
|
|
27
|
+
importScriptsDir: path.join(process.cwd(), "import-scripts"),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
4
30
|
// Mock ONLY the external codegen library boundary
|
|
5
31
|
vi.mock("@powerhousedao/codegen", () => ({
|
|
6
32
|
generateEditor: vi.fn(),
|
|
@@ -14,7 +40,7 @@ vi.mock("@powerhousedao/codegen", () => ({
|
|
|
14
40
|
}));
|
|
15
41
|
// Mock config functions
|
|
16
42
|
vi.mock("@powerhousedao/config/node", () => ({
|
|
17
|
-
getConfig: vi.fn(
|
|
43
|
+
getConfig: vi.fn(mockGetPHConfig),
|
|
18
44
|
}));
|
|
19
45
|
// Mock kebabCase
|
|
20
46
|
vi.mock("change-case", () => ({
|
|
@@ -37,7 +63,7 @@ describe("CodegenProcessor E2E Tests", () => {
|
|
|
37
63
|
// Use fake timers to control setTimeout
|
|
38
64
|
vi.useFakeTimers();
|
|
39
65
|
mockConfig = {
|
|
40
|
-
PH_CONFIG:
|
|
66
|
+
PH_CONFIG: mockGetPHConfig(),
|
|
41
67
|
// Use the actual working directory for consistency
|
|
42
68
|
CURRENT_WORKING_DIR: process.cwd(),
|
|
43
69
|
};
|
|
@@ -45,15 +71,16 @@ describe("CodegenProcessor E2E Tests", () => {
|
|
|
45
71
|
processor = new CodegenProcessor();
|
|
46
72
|
// Reset all codegen function mocks to resolve successfully
|
|
47
73
|
const codegen = await import("@powerhousedao/codegen");
|
|
48
|
-
vi.mocked(codegen.generateEditor).mockResolvedValue(
|
|
49
|
-
vi.mocked(codegen.generateFromDocument).mockResolvedValue(
|
|
50
|
-
vi.mocked(codegen.generateSubgraphFromDocumentModel).mockResolvedValue(
|
|
51
|
-
vi.mocked(codegen.generateManifest).mockResolvedValue(
|
|
52
|
-
vi.mocked(codegen.generateDriveEditor).mockResolvedValue(
|
|
53
|
-
vi.mocked(codegen.generateSubgraph).mockResolvedValue(
|
|
54
|
-
vi.mocked(codegen.generateProcessor).mockResolvedValue(
|
|
74
|
+
vi.mocked(codegen.generateEditor).mockResolvedValue();
|
|
75
|
+
vi.mocked(codegen.generateFromDocument).mockResolvedValue();
|
|
76
|
+
vi.mocked(codegen.generateSubgraphFromDocumentModel).mockResolvedValue();
|
|
77
|
+
vi.mocked(codegen.generateManifest).mockResolvedValue(JSON.stringify(defaultManifest));
|
|
78
|
+
vi.mocked(codegen.generateDriveEditor).mockResolvedValue();
|
|
79
|
+
vi.mocked(codegen.generateSubgraph).mockResolvedValue();
|
|
80
|
+
vi.mocked(codegen.generateProcessor).mockResolvedValue();
|
|
55
81
|
vi.mocked(codegen.validateDocumentModelState).mockReturnValue({
|
|
56
82
|
isValid: true,
|
|
83
|
+
errors: [],
|
|
57
84
|
});
|
|
58
85
|
});
|
|
59
86
|
afterEach(() => {
|
|
@@ -79,28 +106,35 @@ describe("CodegenProcessor E2E Tests", () => {
|
|
|
79
106
|
await processor.onStrands([strand]);
|
|
80
107
|
// Advance timers to trigger debounced generation
|
|
81
108
|
await vi.runAllTimersAsync();
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
"
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
109
|
+
const generateEditorArgs = [
|
|
110
|
+
{
|
|
111
|
+
name: "Test Editor",
|
|
112
|
+
documentTypes: [
|
|
113
|
+
"powerhouse/document-model",
|
|
114
|
+
"powerhouse/budget-statement",
|
|
115
|
+
],
|
|
116
|
+
config: mockConfig.PH_CONFIG,
|
|
117
|
+
editorId: "test-editor",
|
|
118
|
+
useTsMorph: USE_TS_MORPH,
|
|
119
|
+
},
|
|
120
|
+
];
|
|
121
|
+
expect(generateEditor).toHaveBeenCalledWith(...generateEditorArgs);
|
|
122
|
+
const generateManifestArgs = [
|
|
123
|
+
{
|
|
124
|
+
editors: [
|
|
125
|
+
{
|
|
126
|
+
id: "test-editor",
|
|
127
|
+
name: "Test Editor",
|
|
128
|
+
documentTypes: [
|
|
129
|
+
"powerhouse/document-model",
|
|
130
|
+
"powerhouse/budget-statement",
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
mockConfig.CURRENT_WORKING_DIR,
|
|
136
|
+
];
|
|
137
|
+
expect(generateManifest).toHaveBeenCalledWith(...generateManifestArgs);
|
|
104
138
|
});
|
|
105
139
|
it("should not call codegen functions for invalid document-editor strand (missing name)", async () => {
|
|
106
140
|
const { generateEditor, generateManifest } = await import("@powerhousedao/codegen");
|
|
@@ -159,8 +193,8 @@ describe("CodegenProcessor E2E Tests", () => {
|
|
|
159
193
|
});
|
|
160
194
|
});
|
|
161
195
|
describe("Document Model E2E", () => {
|
|
162
|
-
it("should process valid document-model strand and call
|
|
163
|
-
const { generateFromDocument,
|
|
196
|
+
it("should process valid document-model strand and call model and manifest codegen functions", async () => {
|
|
197
|
+
const { generateFromDocument, generateManifest } = await import("@powerhousedao/codegen");
|
|
164
198
|
const validState = {
|
|
165
199
|
id: "test-model-id",
|
|
166
200
|
name: "Test Model",
|
|
@@ -172,8 +206,15 @@ describe("CodegenProcessor E2E Tests", () => {
|
|
|
172
206
|
};
|
|
173
207
|
await processor.onStrands([strand]);
|
|
174
208
|
await vi.runAllTimersAsync();
|
|
175
|
-
|
|
176
|
-
|
|
209
|
+
const generateFromDocumentArgs = [
|
|
210
|
+
{
|
|
211
|
+
useTsMorph: USE_TS_MORPH,
|
|
212
|
+
useVersioning: USE_VERSIONING,
|
|
213
|
+
documentModelState: validState,
|
|
214
|
+
config: mockConfig.PH_CONFIG,
|
|
215
|
+
},
|
|
216
|
+
];
|
|
217
|
+
expect(generateFromDocument).toHaveBeenCalledWith(...generateFromDocumentArgs);
|
|
177
218
|
expect(generateManifest).toHaveBeenCalledWith({
|
|
178
219
|
documentModels: [
|
|
179
220
|
{
|
|
@@ -209,6 +250,13 @@ describe("CodegenProcessor E2E Tests", () => {
|
|
|
209
250
|
const validState = {
|
|
210
251
|
id: "test-model-id",
|
|
211
252
|
name: "Test Model",
|
|
253
|
+
author: {
|
|
254
|
+
name: "test",
|
|
255
|
+
website: "https://test.com",
|
|
256
|
+
},
|
|
257
|
+
description: "",
|
|
258
|
+
extension: ".phd",
|
|
259
|
+
specifications: [],
|
|
212
260
|
};
|
|
213
261
|
const strand = {
|
|
214
262
|
documentId: "test-doc-1",
|
|
@@ -316,14 +364,17 @@ describe("CodegenProcessor E2E Tests", () => {
|
|
|
316
364
|
};
|
|
317
365
|
await processor.onStrands([strand]);
|
|
318
366
|
await vi.runAllTimersAsync();
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
367
|
+
const generateDriveEditorArgs = [
|
|
368
|
+
{
|
|
369
|
+
name: "Test App",
|
|
370
|
+
config: mockConfig.PH_CONFIG,
|
|
371
|
+
appId: "test-app",
|
|
372
|
+
allowedDocumentTypes: "",
|
|
373
|
+
isDragAndDropEnabled: false,
|
|
374
|
+
useTsMorph: USE_TS_MORPH,
|
|
375
|
+
},
|
|
376
|
+
];
|
|
377
|
+
expect(generateDriveEditor).toHaveBeenCalledWith(...generateDriveEditorArgs);
|
|
327
378
|
expect(generateManifest).toHaveBeenCalledWith({
|
|
328
379
|
apps: [
|
|
329
380
|
{
|
|
@@ -358,7 +409,7 @@ describe("CodegenProcessor E2E Tests", () => {
|
|
|
358
409
|
appId: "test-app",
|
|
359
410
|
allowedDocumentTypes: "powerhouse/document-model,powerhouse/budget-statement",
|
|
360
411
|
isDragAndDropEnabled: true,
|
|
361
|
-
|
|
412
|
+
useTsMorph: USE_TS_MORPH,
|
|
362
413
|
});
|
|
363
414
|
expect(generateManifest).toHaveBeenCalled();
|
|
364
415
|
});
|
|
@@ -510,7 +561,7 @@ describe("CodegenProcessor E2E Tests", () => {
|
|
|
510
561
|
documentTypes: ["powerhouse/document-model"],
|
|
511
562
|
config: mockConfig.PH_CONFIG,
|
|
512
563
|
editorId: "test-editor",
|
|
513
|
-
|
|
564
|
+
useTsMorph: USE_TS_MORPH,
|
|
514
565
|
});
|
|
515
566
|
expect(generateSubgraph).toHaveBeenCalledWith("Test Subgraph", null, mockConfig.PH_CONFIG);
|
|
516
567
|
// generateManifest should be called twice (once for each strand)
|
|
@@ -549,7 +600,7 @@ describe("CodegenProcessor E2E Tests", () => {
|
|
|
549
600
|
documentTypes: ["powerhouse/document-model"],
|
|
550
601
|
config: mockConfig.PH_CONFIG,
|
|
551
602
|
editorId: "test-editor",
|
|
552
|
-
|
|
603
|
+
useTsMorph: USE_TS_MORPH,
|
|
553
604
|
});
|
|
554
605
|
// Invalid strand should NOT be processed
|
|
555
606
|
expect(generateSubgraph).not.toHaveBeenCalled();
|
|
@@ -2,7 +2,7 @@ import { generateDriveEditor, generateManifest } from "@powerhousedao/codegen";
|
|
|
2
2
|
import { kebabCase } from "change-case";
|
|
3
3
|
import { logger } from "../../logger.js";
|
|
4
4
|
import { BaseDocumentGen } from "../base-document-gen.js";
|
|
5
|
-
import {
|
|
5
|
+
import { USE_TS_MORPH } from "./constants.js";
|
|
6
6
|
import { backupDocument } from "./utils.js";
|
|
7
7
|
/**
|
|
8
8
|
* Generator for app documents
|
|
@@ -48,7 +48,7 @@ export class AppGenerator extends BaseDocumentGen {
|
|
|
48
48
|
appId: appId,
|
|
49
49
|
allowedDocumentTypes: state.allowedDocumentTypes?.join(","),
|
|
50
50
|
isDragAndDropEnabled: state.isDragAndDropEnabled,
|
|
51
|
-
|
|
51
|
+
useTsMorph: USE_TS_MORPH,
|
|
52
52
|
});
|
|
53
53
|
logger.info(`✅ Drive editor generation completed successfully for app: ${state.name}`);
|
|
54
54
|
// Update the manifest with the new app
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../processors/codegen/document-handlers/generators/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../processors/codegen/document-handlers/generators/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,cAAc,QAAQ,CAAC"}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const USE_TS_MORPH = true;
|
|
2
|
+
export const USE_VERSIONING = false;
|
|
@@ -2,7 +2,7 @@ import { generateEditor, generateManifest } from "@powerhousedao/codegen";
|
|
|
2
2
|
import { kebabCase } from "change-case";
|
|
3
3
|
import { logger } from "../../logger.js";
|
|
4
4
|
import { BaseDocumentGen } from "../base-document-gen.js";
|
|
5
|
-
import {
|
|
5
|
+
import { USE_TS_MORPH } from "./constants.js";
|
|
6
6
|
import { backupDocument } from "./utils.js";
|
|
7
7
|
/**
|
|
8
8
|
* Generator for document editor documents
|
|
@@ -52,7 +52,7 @@ export class DocumentEditorGenerator extends BaseDocumentGen {
|
|
|
52
52
|
documentTypes: documentTypes,
|
|
53
53
|
config: this.config.PH_CONFIG,
|
|
54
54
|
editorId: editorId,
|
|
55
|
-
|
|
55
|
+
useTsMorph: USE_TS_MORPH,
|
|
56
56
|
});
|
|
57
57
|
logger.info(`✅ Editor generation completed successfully for: ${state.name}`);
|
|
58
58
|
// Update the manifest with the new editor
|
package/dist/processors/codegen/document-handlers/generators/document-model-generator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-model-generator.d.ts","sourceRoot":"","sources":["../../../../../processors/codegen/document-handlers/generators/document-model-generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"document-model-generator.d.ts","sourceRoot":"","sources":["../../../../../processors/codegen/document-handlers/generators/document-model-generator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI1D;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,eAAe;IACzD,QAAQ,CAAC,sBAAsB,+BAA+B;IAE9D;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO;IAiCnD,QAAQ,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;CA4DjE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { generateFromDocument, generateManifest,
|
|
1
|
+
import { generateFromDocument, generateManifest, validateDocumentModelState, } from "@powerhousedao/codegen";
|
|
2
2
|
import { logger } from "../../logger.js";
|
|
3
3
|
import { BaseDocumentGen } from "../base-document-gen.js";
|
|
4
|
-
import {
|
|
4
|
+
import { USE_TS_MORPH, USE_VERSIONING } from "./constants.js";
|
|
5
5
|
import { backupDocument } from "./utils.js";
|
|
6
6
|
/**
|
|
7
7
|
* Generator for document model documents
|
|
@@ -30,6 +30,7 @@ export class DocumentModelGenerator extends BaseDocumentGen {
|
|
|
30
30
|
logger.info(`⚠️ Skipped code generation for '${state.name || strand.documentId}' due to validation errors:\n${errorList}`);
|
|
31
31
|
return false;
|
|
32
32
|
}
|
|
33
|
+
logger.info(`Document model ${state.name} is valid, proceeding with code generation`);
|
|
33
34
|
return true;
|
|
34
35
|
}
|
|
35
36
|
async generate(strand) {
|
|
@@ -37,10 +38,12 @@ export class DocumentModelGenerator extends BaseDocumentGen {
|
|
|
37
38
|
// Validation is already done in shouldProcess, so we can proceed directly
|
|
38
39
|
logger.debug(`🔄 Starting code generation for document model: ${state.name}`);
|
|
39
40
|
try {
|
|
40
|
-
await generateFromDocument(
|
|
41
|
-
|
|
41
|
+
await generateFromDocument({
|
|
42
|
+
documentModelState: state,
|
|
43
|
+
config: this.config.PH_CONFIG,
|
|
44
|
+
useTsMorph: USE_TS_MORPH,
|
|
45
|
+
useVersioning: USE_VERSIONING,
|
|
42
46
|
});
|
|
43
|
-
await generateSubgraphFromDocumentModel(state.name, state, this.config.PH_CONFIG, { verbose: false });
|
|
44
47
|
logger.info(`✅ Code generation completed successfully for: ${state.name}`);
|
|
45
48
|
// Update the manifest with the new document model
|
|
46
49
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../processors/codegen/factory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../processors/codegen/factory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAgCvD,eAAO,MAAM,uBAAuB,GACjC,QAAQ,oBAAoB,MAC5B,aAAa,gBAAgB,KAAG,eAAe,EAsC/C,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { VETRA_PROCESSOR_CONFIG_KEY } from "@powerhousedao/config";
|
|
2
2
|
import { CodegenProcessor } from "./index.js";
|
|
3
|
+
import { logger } from "./logger.js";
|
|
3
4
|
/**
|
|
4
5
|
* Determines if a drive header matches the Vetra drive criteria.
|
|
5
6
|
* @param driveHeader - The drive header to check
|
|
@@ -26,8 +27,10 @@ export const codegenProcessorFactory = (module) => (driveHeader) => {
|
|
|
26
27
|
const vetraConfig = processorsConfig.get(VETRA_PROCESSOR_CONFIG_KEY);
|
|
27
28
|
// Check if this drive should use the Vetra processor
|
|
28
29
|
if (!isDriveVetra(driveHeader, vetraConfig?.driveId)) {
|
|
30
|
+
logger.info(`Drive ${driveHeader.slug} is not a Vetra drive, skipping codegen processor`);
|
|
29
31
|
return [];
|
|
30
32
|
}
|
|
33
|
+
logger.info(`Drive ${driveHeader.slug} is a Vetra drive, using codegen processor`);
|
|
31
34
|
const processor = new CodegenProcessor(vetraConfig?.interactive);
|
|
32
35
|
return [
|
|
33
36
|
{
|
|
@@ -18,7 +18,7 @@ export class CodegenProcessor {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
async onStrands(strands) {
|
|
21
|
-
logger.
|
|
21
|
+
logger.info(">>> onStrands()");
|
|
22
22
|
// Filter strands to only include those that should be processed
|
|
23
23
|
const validStrands = strands.filter((strand) => {
|
|
24
24
|
const generator = this.manager.getGenerator(strand.documentType);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/app-module/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/app-module/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAkB/D,eAAO,MAAM,YAAY,GACvB,UAAU,YAAY,KACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAkOxB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { addFile } from "document-drive";
|
|
2
|
-
import { actions, } from "../../document-models/app-module/index.js";
|
|
3
2
|
import { setName } from "document-model";
|
|
3
|
+
import { actions, appModuleDocumentType, } from "@powerhousedao/vetra/document-models/app-module";
|
|
4
4
|
export const getResolvers = (subgraph) => {
|
|
5
5
|
const reactor = subgraph.reactor;
|
|
6
6
|
return {
|
|
@@ -46,7 +46,7 @@ export const getResolvers = (subgraph) => {
|
|
|
46
46
|
revision: doc.header?.revision?.global ?? 0,
|
|
47
47
|
};
|
|
48
48
|
}));
|
|
49
|
-
return docs.filter((doc) => doc.header.documentType ===
|
|
49
|
+
return docs.filter((doc) => doc.header.documentType === appModuleDocumentType);
|
|
50
50
|
},
|
|
51
51
|
};
|
|
52
52
|
},
|
|
@@ -54,12 +54,12 @@ export const getResolvers = (subgraph) => {
|
|
|
54
54
|
Mutation: {
|
|
55
55
|
AppModule_createDocument: async (_, args) => {
|
|
56
56
|
const { driveId, name } = args;
|
|
57
|
-
const document = await reactor.addDocument(
|
|
57
|
+
const document = await reactor.addDocument(appModuleDocumentType);
|
|
58
58
|
if (driveId) {
|
|
59
59
|
await reactor.addAction(driveId, addFile({
|
|
60
60
|
name,
|
|
61
61
|
id: document.header.id,
|
|
62
|
-
documentType:
|
|
62
|
+
documentType: appModuleDocumentType,
|
|
63
63
|
}));
|
|
64
64
|
}
|
|
65
65
|
if (name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../subgraphs/app-module/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../subgraphs/app-module/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,MAAM,EAAE,YA4EpB,CAAC"}
|
|
@@ -1,22 +1,7 @@
|
|
|
1
1
|
import { gql } from "graphql-tag";
|
|
2
2
|
export const schema = gql `
|
|
3
3
|
"""
|
|
4
|
-
|
|
5
|
-
"""
|
|
6
|
-
type AppModuleState {
|
|
7
|
-
name: String!
|
|
8
|
-
status: StatusType!
|
|
9
|
-
allowedDocumentTypes: [String!]
|
|
10
|
-
isDragAndDropEnabled: Boolean!
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
enum StatusType {
|
|
14
|
-
DRAFT
|
|
15
|
-
CONFIRMED
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
"""
|
|
19
|
-
Queries: AppModule
|
|
4
|
+
Queries: AppModule Document
|
|
20
5
|
"""
|
|
21
6
|
type AppModuleQueries {
|
|
22
7
|
getDocument(docId: PHID!, driveId: PHID): AppModule
|
|
@@ -72,7 +57,7 @@ export const schema = gql `
|
|
|
72
57
|
name: String!
|
|
73
58
|
}
|
|
74
59
|
input AppModule_SetAppStatusInput {
|
|
75
|
-
status:
|
|
60
|
+
status: AppModule_StatusType!
|
|
76
61
|
}
|
|
77
62
|
input AppModule_AddDocumentTypeInput {
|
|
78
63
|
documentType: String!
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { BaseSubgraph } from "@powerhousedao/reactor-api";
|
|
2
|
+
import type { DocumentNode } from "graphql";
|
|
2
3
|
export declare class DocumentEditorSubgraph extends BaseSubgraph {
|
|
3
4
|
name: string;
|
|
4
|
-
typeDefs:
|
|
5
|
-
resolvers: Record<string,
|
|
5
|
+
typeDefs: DocumentNode;
|
|
6
|
+
resolvers: Record<string, unknown>;
|
|
6
7
|
additionalContextFields: {};
|
|
7
8
|
onSetup(): Promise<void>;
|
|
8
9
|
onDisconnect(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../subgraphs/document-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../subgraphs/document-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,IAAI,SAAqB;IACzB,QAAQ,EAAE,YAAY,CAAU;IAChC,SAAS,0BAAsB;IAC/B,uBAAuB,KAAM;IACvB,OAAO;IACP,YAAY;CACnB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseSubgraph } from "@powerhousedao/reactor-api";
|
|
2
|
-
import { getResolvers } from "./resolvers.js";
|
|
3
2
|
import { schema } from "./schema.js";
|
|
3
|
+
import { getResolvers } from "./resolvers.js";
|
|
4
4
|
export class DocumentEditorSubgraph extends BaseSubgraph {
|
|
5
5
|
name = "document-editor";
|
|
6
6
|
typeDefs = schema;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { BaseSubgraph } from "@powerhousedao/reactor-api";
|
|
2
|
-
export declare const getResolvers: (subgraph: BaseSubgraph) => Record<string,
|
|
2
|
+
export declare const getResolvers: (subgraph: BaseSubgraph) => Record<string, unknown>;
|
|
3
3
|
//# sourceMappingURL=resolvers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/document-editor/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/document-editor/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAgB/D,eAAO,MAAM,YAAY,GACvB,UAAU,YAAY,KACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAoLxB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { addFile } from "document-drive";
|
|
2
2
|
import { setName } from "document-model";
|
|
3
|
-
import { actions } from "
|
|
3
|
+
import { actions, documentEditorDocumentType, } from "@powerhousedao/vetra/document-models/document-editor";
|
|
4
4
|
export const getResolvers = (subgraph) => {
|
|
5
5
|
const reactor = subgraph.reactor;
|
|
6
6
|
return {
|
|
@@ -23,12 +23,10 @@ export const getResolvers = (subgraph) => {
|
|
|
23
23
|
driveId: driveId,
|
|
24
24
|
...doc,
|
|
25
25
|
...doc.header,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
|
31
|
-
stateJSON: doc.state.global ?? "{}",
|
|
26
|
+
created: doc.header.createdAtUtcIso,
|
|
27
|
+
lastModified: doc.header.lastModifiedAtUtcIso,
|
|
28
|
+
state: doc.state.global,
|
|
29
|
+
stateJSON: doc.state.global,
|
|
32
30
|
revision: doc.header?.revision?.global ?? 0,
|
|
33
31
|
};
|
|
34
32
|
},
|
|
@@ -41,16 +39,14 @@ export const getResolvers = (subgraph) => {
|
|
|
41
39
|
driveId: driveId,
|
|
42
40
|
...doc,
|
|
43
41
|
...doc.header,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
|
49
|
-
stateJSON: doc.state.global ?? "{}",
|
|
42
|
+
created: doc.header.createdAtUtcIso,
|
|
43
|
+
lastModified: doc.header.lastModifiedAtUtcIso,
|
|
44
|
+
state: doc.state.global,
|
|
45
|
+
stateJSON: doc.state.global,
|
|
50
46
|
revision: doc.header?.revision?.global ?? 0,
|
|
51
47
|
};
|
|
52
48
|
}));
|
|
53
|
-
return docs.filter((doc) => doc.header.documentType ===
|
|
49
|
+
return docs.filter((doc) => doc.header.documentType === documentEditorDocumentType);
|
|
54
50
|
},
|
|
55
51
|
};
|
|
56
52
|
},
|
|
@@ -58,12 +54,12 @@ export const getResolvers = (subgraph) => {
|
|
|
58
54
|
Mutation: {
|
|
59
55
|
DocumentEditor_createDocument: async (_, args) => {
|
|
60
56
|
const { driveId, name } = args;
|
|
61
|
-
const document = await reactor.addDocument(
|
|
57
|
+
const document = await reactor.addDocument(documentEditorDocumentType);
|
|
62
58
|
if (driveId) {
|
|
63
59
|
await reactor.addAction(driveId, addFile({
|
|
64
60
|
name,
|
|
65
61
|
id: document.header.id,
|
|
66
|
-
documentType:
|
|
62
|
+
documentType: documentEditorDocumentType,
|
|
67
63
|
}));
|
|
68
64
|
}
|
|
69
65
|
if (name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../subgraphs/document-editor/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../subgraphs/document-editor/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,MAAM,EAAE,YAyDpB,CAAC"}
|
|
@@ -1,26 +1,7 @@
|
|
|
1
1
|
import { gql } from "graphql-tag";
|
|
2
2
|
export const schema = gql `
|
|
3
3
|
"""
|
|
4
|
-
|
|
5
|
-
"""
|
|
6
|
-
type DocumentEditorState {
|
|
7
|
-
name: String!
|
|
8
|
-
documentTypes: [DocumentTypeItem!]!
|
|
9
|
-
status: StatusType!
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
type DocumentTypeItem {
|
|
13
|
-
id: OID!
|
|
14
|
-
documentType: String!
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
enum StatusType {
|
|
18
|
-
DRAFT
|
|
19
|
-
CONFIRMED
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
"""
|
|
23
|
-
Queries: DocumentEditor
|
|
4
|
+
Queries: DocumentEditor Document
|
|
24
5
|
"""
|
|
25
6
|
type DocumentEditorQueries {
|
|
26
7
|
getDocument(docId: PHID!, driveId: PHID): DocumentEditor
|
|
@@ -73,6 +54,6 @@ export const schema = gql `
|
|
|
73
54
|
id: OID!
|
|
74
55
|
}
|
|
75
56
|
input DocumentEditor_SetEditorStatusInput {
|
|
76
|
-
status:
|
|
57
|
+
status: DocumentEditor_StatusType!
|
|
77
58
|
}
|
|
78
59
|
`;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * as DocumentEditorSubgraph from "./document-editor/index.js";
|
|
2
|
-
export * as VetraPackageSubgraph from "./vetra-package/index.js";
|
|
3
|
-
export * as SubgraphModuleSubgraph from "./subgraph-module/index.js";
|
|
4
|
-
export * as ProcessorModuleSubgraph from "./processor-module/index.js";
|
|
5
1
|
export * as AppModuleSubgraph from "./app-module/index.js";
|
|
2
|
+
export * as ProcessorModuleSubgraph from "./processor-module/index.js";
|
|
3
|
+
export * as SubgraphModuleSubgraph from "./subgraph-module/index.js";
|
|
4
|
+
export * as VetraPackageSubgraph from "./vetra-package/index.js";
|
|
6
5
|
export * as VetraReadModelSubgraph from "./vetra-read-model/index.js";
|
|
6
|
+
export * as DocumentEditorSubgraph from "./document-editor/index.js";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../subgraphs/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../subgraphs/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,iBAAiB,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,uBAAuB,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,sBAAsB,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,oBAAoB,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,sBAAsB,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,sBAAsB,MAAM,4BAA4B,CAAC"}
|
package/dist/subgraphs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * as DocumentEditorSubgraph from "./document-editor/index.js";
|
|
2
|
-
export * as VetraPackageSubgraph from "./vetra-package/index.js";
|
|
3
|
-
export * as SubgraphModuleSubgraph from "./subgraph-module/index.js";
|
|
4
|
-
export * as ProcessorModuleSubgraph from "./processor-module/index.js";
|
|
5
1
|
export * as AppModuleSubgraph from "./app-module/index.js";
|
|
2
|
+
export * as ProcessorModuleSubgraph from "./processor-module/index.js";
|
|
3
|
+
export * as SubgraphModuleSubgraph from "./subgraph-module/index.js";
|
|
4
|
+
export * as VetraPackageSubgraph from "./vetra-package/index.js";
|
|
6
5
|
export * as VetraReadModelSubgraph from "./vetra-read-model/index.js";
|
|
6
|
+
export * as DocumentEditorSubgraph from "./document-editor/index.js";
|
|
@@ -2,7 +2,7 @@ import { BaseSubgraph } from "@powerhousedao/reactor-api";
|
|
|
2
2
|
export declare class ProcessorModuleSubgraph extends BaseSubgraph {
|
|
3
3
|
name: string;
|
|
4
4
|
typeDefs: import("graphql").DocumentNode;
|
|
5
|
-
resolvers: Record<string,
|
|
5
|
+
resolvers: Record<string, unknown>;
|
|
6
6
|
additionalContextFields: {};
|
|
7
7
|
onSetup(): Promise<void>;
|
|
8
8
|
onDisconnect(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../subgraphs/processor-module/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI1D,qBAAa,uBAAwB,SAAQ,YAAY;IACvD,IAAI,SAAsB;IAC1B,QAAQ,iCAAU;IAClB,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../subgraphs/processor-module/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI1D,qBAAa,uBAAwB,SAAQ,YAAY;IACvD,IAAI,SAAsB;IAC1B,QAAQ,iCAAU;IAClB,SAAS,0BAAsB;IAC/B,uBAAuB,KAAM;IACvB,OAAO;IACP,YAAY;CACnB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { BaseSubgraph } from "@powerhousedao/reactor-api";
|
|
2
|
-
export declare const getResolvers: (subgraph: BaseSubgraph) => Record<string,
|
|
2
|
+
export declare const getResolvers: (subgraph: BaseSubgraph) => Record<string, unknown>;
|
|
3
3
|
//# sourceMappingURL=resolvers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/processor-module/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/processor-module/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAiB/D,eAAO,MAAM,YAAY,GACvB,UAAU,YAAY,KACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAgNxB,CAAC"}
|