@powerhousedao/codegen 6.0.0-dev.35 → 6.0.0-dev.36

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.
@@ -1,179 +1,185 @@
1
- import path from "node:path";
2
- import { afterAll, beforeAll, beforeEach, describe, expect, it, } from "vitest";
1
+ import { $ } from "bun";
2
+ import { describe, expect, test } from "bun:test";
3
+ import { cp, readdir } from "node:fs/promises";
4
+ import path from "path";
5
+ import { Project, ts } from "ts-morph";
3
6
  import { generateDocumentModel } from "../generate.js";
4
7
  import { loadDocumentModel } from "../utils.js";
5
- import { USE_TS_MORPH } from "./config.js";
6
- import { DOCUMENT_MODELS_TEST_PROJECT, GENERATE_DOC_MODEL_TEST_OUTPUT_DIR, TEST_PACKAGE_NAME, } from "./constants.js";
7
- import { runGeneratedTests } from "./fixtures/run-generated-tests.js";
8
- import { copyAllFiles, getTestDataDir, getTestOutDirPath, getTestOutputDir, purgeDirAfterTest, resetDirForTest, } from "./utils.js";
9
- import { compile } from "./fixtures/typecheck.js";
10
- import { readFile, rm } from "node:fs/promises";
11
- describe("document model", () => {
12
- const testDir = import.meta.dirname;
13
- const outDirName = getTestOutputDir(testDir, GENERATE_DOC_MODEL_TEST_OUTPUT_DIR);
14
- const testDataDir = getTestDataDir(testDir, DOCUMENT_MODELS_TEST_PROJECT);
15
- let testOutDirPath = getTestOutDirPath("initial", outDirName);
16
- const documentModelsSrcPath = path.join(testDir, "data", "document-models");
17
- let documentModelsDirName = path.join(testOutDirPath, "document-models");
18
- async function setupTest(context, dataDir = testDataDir) {
19
- testOutDirPath = getTestOutDirPath(context.task.name, outDirName);
20
- await copyAllFiles(dataDir, testOutDirPath);
21
- documentModelsDirName = path.join(testOutDirPath, "document-models");
22
- process.chdir(testOutDirPath);
23
- }
24
- beforeEach(async (context) => {
25
- await setupTest(context);
26
- });
27
- beforeAll(async () => {
28
- await resetDirForTest(outDirName);
29
- });
30
- afterAll(async () => {
31
- await purgeDirAfterTest(outDirName);
32
- });
33
- const generate = async () => {
34
- const billingStatementDocumentModel = await loadDocumentModel(path.join(documentModelsSrcPath, "billing-statement", "billing-statement.json"));
8
+ const testsDir = import.meta.dirname;
9
+ const testOutputDir = path.join(testsDir, ".test-output");
10
+ function getDocumentModelJsonFilePath(basePath, dirName) {
11
+ return path.join(basePath, dirName, `${dirName}.json`);
12
+ }
13
+ async function loadDocumentModelsInDir(documentModelsInDir, testOutDir, useVersioning = true) {
14
+ const documentModelsOutDir = path.join(testOutDir, "document-models");
15
+ const documentModelDirs = (await readdir(documentModelsInDir, {
16
+ withFileTypes: true,
17
+ }))
18
+ .filter((value) => value.isDirectory())
19
+ .map((value) => value.name);
20
+ const documentModelStates = await Promise.all(documentModelDirs.map(async (dirName) => await loadDocumentModel(getDocumentModelJsonFilePath(documentModelsInDir, dirName))));
21
+ for (const documentModelState of documentModelStates) {
35
22
  await generateDocumentModel({
36
- dir: documentModelsDirName,
37
- specifiedPackageName: TEST_PACKAGE_NAME,
38
- documentModelState: billingStatementDocumentModel,
39
- useTsMorph: USE_TS_MORPH,
40
- useVersioning: false,
41
- skipFormat: true,
23
+ documentModelState,
24
+ dir: documentModelsOutDir,
25
+ useTsMorph: true,
26
+ useVersioning,
27
+ specifiedPackageName: "test",
42
28
  });
43
- const testDocDocumentModel = await loadDocumentModel(path.join(documentModelsSrcPath, "test-doc", "test-doc.json"));
44
- await generateDocumentModel({
45
- useTsMorph: USE_TS_MORPH,
46
- useVersioning: false,
47
- dir: documentModelsDirName,
48
- specifiedPackageName: TEST_PACKAGE_NAME,
49
- documentModelState: testDocDocumentModel,
50
- skipFormat: true,
51
- });
52
- };
53
- it("should generate a document model", {
54
- timeout: 100000,
55
- }, async (context) => {
56
- await setupTest(context);
57
- await generate();
58
- await compile(testOutDirPath);
59
- await runGeneratedTests(testOutDirPath);
29
+ }
30
+ }
31
+ async function runDocumentModelTests(args) {
32
+ const { inDirName, specDirName, testsDataDir, testOutputParentDir, useVersioning = true, } = args;
33
+ const dataDir = path.join(testsDataDir, inDirName);
34
+ const documentModelsInDir = path.join(testsDataDir, specDirName);
35
+ const outDir = path.join(testOutputParentDir, `${inDirName}-${specDirName}`);
36
+ await cp(dataDir, outDir, {
37
+ recursive: true,
38
+ force: true,
60
39
  });
61
- it("should generate a document model when previous document models exist", {
62
- timeout: 100000,
63
- }, async (context) => {
64
- const dataDirOverride = getTestDataDir(testDir, "document-models-test-project-with-existing-document-models");
65
- await setupTest(context, dataDirOverride);
66
- await generate();
67
- await compile(testOutDirPath);
68
- await runGeneratedTests(testOutDirPath);
40
+ await loadDocumentModelsInDir(documentModelsInDir, outDir, useVersioning);
41
+ await $ `bun run --cwd ${outDir} tsc`;
42
+ await $ `bun run --cwd ${outDir} vitest --run --silent passed-only`;
43
+ return outDir;
44
+ }
45
+ async function checkFileContents(outDir) {
46
+ const project = new Project({
47
+ tsConfigFilePath: path.join(outDir, "tsconfig.json"),
48
+ skipAddingFilesFromTsConfig: true,
49
+ skipFileDependencyResolution: true,
50
+ skipLoadingLibFiles: true,
69
51
  });
70
- it("should create the document-models.ts file if it does not exist", {
71
- timeout: 100000,
72
- }, async (context) => {
73
- await setupTest(context);
74
- const documentModelsFilePath = path.join(documentModelsDirName, "document-models.ts");
75
- await rm(documentModelsFilePath, { force: true });
76
- await generate();
77
- await compile(testOutDirPath);
78
- const documentModelsContent = await readFile(documentModelsFilePath, "utf-8");
79
- // Check that both models are exported
80
- expect(documentModelsContent).toContain(`import { BillingStatement } from "./billing-statement/module.js";`);
81
- expect(documentModelsContent).toContain(`import { TestDoc } from "./test-doc/module.js";`);
82
- expect(documentModelsContent).toContain("export const documentModels: DocumentModelModule<any>[] = [");
83
- expect(documentModelsContent).toContain("BillingStatement");
84
- expect(documentModelsContent).toContain("TestDoc");
85
- expect(documentModelsContent).toContain("]");
52
+ project.addSourceFilesAtPaths(path.join(outDir, "document-models/**/*"));
53
+ const documentModelsFile = project.getSourceFileOrThrow("document-models.ts");
54
+ const documentModelsArray = documentModelsFile
55
+ .getVariableStatementOrThrow("documentModels")
56
+ .getDescendantsOfKind(ts.SyntaxKind.ArrayLiteralExpression)
57
+ .at(0);
58
+ const elements = documentModelsArray
59
+ .getElements()
60
+ .map((e) => e.getText())
61
+ .join(" ");
62
+ expect(elements).toContain("BillingStatement");
63
+ expect(elements).toContain("TestDoc");
64
+ const billingStatementErrorFile = await Bun.file(path.join(outDir, "document-models", "billing-statement", "gen", "general", "error.ts")).text();
65
+ expect(billingStatementErrorFile).toContain("export type ErrorCode");
66
+ expect(billingStatementErrorFile).toContain(`"InvalidStatusTransition"`);
67
+ expect(billingStatementErrorFile).toContain("export class InvalidStatusTransition extends Error implements ReducerError");
68
+ expect(billingStatementErrorFile).toContain(`errorCode = "InvalidStatusTransition" as ErrorCode`);
69
+ const lineItemsErrorFile = await Bun.file(path.join(outDir, "document-models", "billing-statement", "gen", "line-items", "error.ts")).text();
70
+ expect(lineItemsErrorFile).toContain("export type ErrorCode =");
71
+ expect(lineItemsErrorFile).toContain(`"DuplicateLineItem"`);
72
+ expect(lineItemsErrorFile).toContain(`"InvalidStatusTransition"`);
73
+ expect(lineItemsErrorFile).toContain("export class DuplicateLineItem extends Error implements ReducerError");
74
+ expect(lineItemsErrorFile).toContain("export class InvalidStatusTransition extends Error implements ReducerError");
75
+ const errorCodeMatches = lineItemsErrorFile.match(/"InvalidStatusTransition"/g);
76
+ expect(errorCodeMatches?.length).toBe(3);
77
+ }
78
+ describe("generate doc model", () => {
79
+ const parentOutDirName = "generate-doc-model";
80
+ const testOutputParentDir = path.join(testOutputDir, parentOutDirName);
81
+ const testsDataDir = path.join(testsDir, "data");
82
+ const useVersioning = false;
83
+ test("generate document models", async () => {
84
+ const outDir = await runDocumentModelTests({
85
+ inDirName: "document-models-test-project",
86
+ specDirName: "document-models",
87
+ testOutputParentDir,
88
+ testsDataDir,
89
+ useVersioning,
90
+ });
91
+ await checkFileContents(outDir);
86
92
  });
87
- it("should generate multiple document models and export both in document-models.ts", {
88
- timeout: 100000,
89
- }, async (context) => {
90
- await setupTest(context);
91
- await generate();
92
- await compile(testOutDirPath);
93
- const documentModelsFilePath = path.join(documentModelsDirName, "document-models.ts");
94
- const documentModelsContent = await readFile(documentModelsFilePath, "utf-8");
95
- // Check that both models are exported
96
- expect(documentModelsContent).toContain(`import { BillingStatement } from "./billing-statement/module.js";`);
97
- expect(documentModelsContent).toContain(`import { TestDoc } from "./test-doc/module.js";`);
98
- expect(documentModelsContent).toContain("export const documentModels: DocumentModelModule<any>[] = [");
99
- expect(documentModelsContent).toContain("BillingStatement");
100
- expect(documentModelsContent).toContain("TestDoc");
101
- expect(documentModelsContent).toContain("]");
93
+ test("generate document models in existing project", async () => {
94
+ const outDir = await runDocumentModelTests({
95
+ inDirName: "document-models-test-project-with-existing-document-models",
96
+ specDirName: "document-models",
97
+ testOutputParentDir,
98
+ testsDataDir,
99
+ useVersioning,
100
+ });
101
+ await checkFileContents(outDir);
102
102
  });
103
- it("should generate an updated version of test-doc", { timeout: 100000 }, async (context) => {
104
- await setupTest(context);
105
- await generate();
106
- await compile(testOutDirPath);
107
- const testDocDocumentModelV2 = await loadDocumentModel(path.join(documentModelsSrcPath, "..", "test-doc-versions", "test-doc-v2", "test-doc.json"));
108
- // TODO: this is a hack to get the test to pass, we should be able to update the reducer file once is generated
109
- // remove .out/document-model/test-doc/src/reducers/base-operations.ts file
110
- await rm(path.join(documentModelsDirName, "test-doc", "src", "reducers", "base-operations.ts"), { force: true });
111
- await generateDocumentModel({
112
- useTsMorph: USE_TS_MORPH,
113
- useVersioning: false,
114
- dir: documentModelsDirName,
115
- specifiedPackageName: TEST_PACKAGE_NAME,
116
- documentModelState: testDocDocumentModelV2,
117
- skipFormat: true,
103
+ });
104
+ describe("versioned document models", () => {
105
+ const parentOutDirName = "versioned-document-models";
106
+ const testOutputParentDir = path.join(testOutputDir, parentOutDirName);
107
+ const testsDataDir = path.join(testsDir, "data", "versioned-document-models");
108
+ describe("v1", () => {
109
+ test("should generate new document models as v1", async () => {
110
+ await runDocumentModelTests({
111
+ inDirName: "empty-project",
112
+ specDirName: "spec-version-1",
113
+ testOutputParentDir,
114
+ testsDataDir,
115
+ });
116
+ });
117
+ test("should persist existing reducers, tests, utils, and custom files when generating for the same spec version", async () => {
118
+ await runDocumentModelTests({
119
+ inDirName: "project-with-existing-document-models-at-spec-1",
120
+ specDirName: "spec-version-1-with-more-operations",
121
+ testOutputParentDir,
122
+ testsDataDir,
123
+ });
118
124
  });
119
- // expect .out/document-model/test-doc/src/reducers/base-operations.ts to contain setTestIdOperation, setTestNameOperation, setTestDescriptionOperation and setTestValueOperation
120
- const baseOperationsPath = path.join(documentModelsDirName, "test-doc", "src", "reducers", "base-operations.ts");
121
- const baseOperationsContent = await readFile(baseOperationsPath, "utf-8");
122
- expect(baseOperationsContent).toContain("setTestIdOperation");
123
- expect(baseOperationsContent).toContain("setTestNameOperation");
124
- expect(baseOperationsContent).toContain("setTestDescriptionOperation");
125
- expect(baseOperationsContent).toContain("setTestValueOperation");
126
125
  });
127
- it("should generate error classes and types from billing statement errors", { timeout: 100000 }, async (context) => {
128
- await setupTest(context);
129
- await generate();
130
- await compile(testOutDirPath);
131
- // Check general module errors
132
- const generalErrorPath = path.join(documentModelsDirName, "billing-statement", "gen", "general", "error.ts");
133
- const generalErrorContent = await readFile(generalErrorPath, "utf-8");
134
- // Check that InvalidStatusTransition error is generated
135
- expect(generalErrorContent).toContain("export type ErrorCode =");
136
- expect(generalErrorContent).toContain(`"InvalidStatusTransition"`);
137
- expect(generalErrorContent).toContain("export class InvalidStatusTransition extends Error implements ReducerError");
138
- expect(generalErrorContent).toContain(`errorCode = "InvalidStatusTransition" as ErrorCode`);
139
- // Check line_items module errors
140
- const lineItemsErrorPath = path.join(documentModelsDirName, "billing-statement", "gen", "line-items", "error.ts");
141
- const lineItemsErrorContent = await readFile(lineItemsErrorPath, "utf-8");
142
- // Check that both DuplicateLineItem and InvalidStatusTransition errors are generated (but deduplicated)
143
- expect(lineItemsErrorContent).toContain("export type ErrorCode =");
144
- expect(lineItemsErrorContent).toContain(`"DuplicateLineItem"`);
145
- expect(lineItemsErrorContent).toContain(`"InvalidStatusTransition"`);
146
- expect(lineItemsErrorContent).toContain("export class DuplicateLineItem extends Error implements ReducerError");
147
- expect(lineItemsErrorContent).toContain("export class InvalidStatusTransition extends Error implements ReducerError");
148
- // Verify that InvalidStatusTransition only appears once in the ErrorCode type (deduplication test)
149
- const errorCodeMatches = lineItemsErrorContent.match(/"InvalidStatusTransition"/g);
150
- expect(errorCodeMatches?.length).toBe(3); // Once in type definition, once in each class
126
+ describe("v2", () => {
127
+ test("should handle generating document models as v2", async () => {
128
+ const testOutDir = await runDocumentModelTests({
129
+ inDirName: "empty-project",
130
+ specDirName: "spec-version-2",
131
+ testOutputParentDir,
132
+ testsDataDir,
133
+ });
134
+ const v1ModulePath = path.join(testOutDir, "document-models", "test-doc", "v1", "module.ts");
135
+ const v2ModulePath = path.join(testOutDir, "document-models", "test-doc", "v2", "module.ts");
136
+ const v1ModuleContent = await Bun.file(v1ModulePath).text();
137
+ const v2ModuleContent = await Bun.file(v2ModulePath).text();
138
+ expect(v1ModuleContent).toContain("version: 1,");
139
+ expect(v2ModuleContent).toContain("version: 2,");
140
+ });
141
+ test("should persist existing reducers, tests, utils, and custom files when generating a new spec version", async () => {
142
+ await runDocumentModelTests({
143
+ inDirName: "project-with-existing-document-models-at-spec-1",
144
+ specDirName: "spec-version-2",
145
+ testOutputParentDir,
146
+ testsDataDir,
147
+ });
148
+ });
149
+ test("should throw a typescript error in upgrades when new state does not match old state", () => {
150
+ expect(async () => await runDocumentModelTests({
151
+ inDirName: "project-with-existing-document-models-at-spec-1",
152
+ specDirName: "spec-version-2-with-state-changes",
153
+ testOutputParentDir,
154
+ testsDataDir,
155
+ })).toThrow();
156
+ });
151
157
  });
152
- it("should generate error codes for legacy documents with empty error codes", { timeout: 100000 }, async (context) => {
153
- await setupTest(context);
154
- await generate();
155
- const testEmptyCodesDocumentModel = await loadDocumentModel(path.join(documentModelsSrcPath, "test-empty-error-codes", "test-empty-error-codes.json"));
156
- await generateDocumentModel({
157
- useTsMorph: USE_TS_MORPH,
158
- useVersioning: false,
159
- dir: documentModelsDirName,
160
- specifiedPackageName: TEST_PACKAGE_NAME,
161
- documentModelState: testEmptyCodesDocumentModel,
162
- skipFormat: true,
158
+ describe("v3", () => {
159
+ test("should handle generating document models as v3", async () => {
160
+ await runDocumentModelTests({
161
+ inDirName: "empty-project",
162
+ specDirName: "spec-version-3",
163
+ testOutputParentDir,
164
+ testsDataDir,
165
+ });
166
+ });
167
+ test("should persist existing reducers, tests, utils, and custom files when generating a new spec version", async () => {
168
+ await runDocumentModelTests({
169
+ inDirName: "project-with-existing-document-models-at-spec-2",
170
+ specDirName: "spec-version-3",
171
+ testOutputParentDir,
172
+ testsDataDir,
173
+ });
174
+ });
175
+ test("should throw a typescript error in upgrades when new state does not match old state", () => {
176
+ expect(async () => await runDocumentModelTests({
177
+ inDirName: "project-with-existing-document-models-at-spec-2",
178
+ specDirName: "spec-version-3-with-state-changes",
179
+ testOutputParentDir,
180
+ testsDataDir,
181
+ })).toThrow();
163
182
  });
164
- // Check that error codes are generated from error names
165
- const testOperationsErrorPath = path.join(documentModelsDirName, "test-empty-codes", "gen", "test-operations", "error.ts");
166
- const testOperationsErrorContent = await readFile(testOperationsErrorPath, "utf-8");
167
- // Check that error codes are generated from names in PascalCase when empty
168
- expect(testOperationsErrorContent).toContain("export type ErrorCode =");
169
- expect(testOperationsErrorContent).toContain(`"InvalidValue"`);
170
- expect(testOperationsErrorContent).toContain(`"EmptyValue"`);
171
- // Check that error classes are generated
172
- expect(testOperationsErrorContent).toContain("export class InvalidValue extends Error implements ReducerError");
173
- expect(testOperationsErrorContent).toContain("export class EmptyValue extends Error implements ReducerError");
174
- // Verify error code constants are set properly in PascalCase
175
- expect(testOperationsErrorContent).toContain(`errorCode = "InvalidValue" as ErrorCode`);
176
- expect(testOperationsErrorContent).toContain(`errorCode = "EmptyValue" as ErrorCode`);
177
183
  });
178
184
  });
179
185
  //# sourceMappingURL=generate-doc-model.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-doc-model.test.js","sourceRoot":"","sources":["../../../../src/codegen/__tests__/generate-doc-model.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,EAAE,GAEH,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,4BAA4B,EAC5B,kCAAkC,EAClC,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEhD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IACpC,MAAM,UAAU,GAAG,gBAAgB,CACjC,OAAO,EACP,kCAAkC,CACnC,CAAC;IACF,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;IAE1E,IAAI,cAAc,GAAG,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5E,IAAI,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IACzE,KAAK,UAAU,SAAS,CAAC,OAAoB,EAAE,OAAO,GAAG,WAAW;QAClE,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAElE,MAAM,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAE5C,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAErE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC;IAED,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QAC3B,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,6BAA6B,GAAG,MAAM,iBAAiB,CAC3D,IAAI,CAAC,IAAI,CACP,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,CACzB,CACF,CAAC;QAEF,MAAM,qBAAqB,CAAC;YAC1B,GAAG,EAAE,qBAAqB;YAC1B,oBAAoB,EAAE,iBAAiB;YACvC,kBAAkB,EAAE,6BAA6B;YACjD,UAAU,EAAE,YAAY;YACxB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,MAAM,oBAAoB,GAAG,MAAM,iBAAiB,CAClD,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAU,EAAE,eAAe,CAAC,CAC9D,CAAC;QAEF,MAAM,qBAAqB,CAAC;YAC1B,UAAU,EAAE,YAAY;YACxB,aAAa,EAAE,KAAK;YACpB,GAAG,EAAE,qBAAqB;YAC1B,oBAAoB,EAAE,iBAAiB;YACvC,kBAAkB,EAAE,oBAAoB;YACxC,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,EAAE,CACA,kCAAkC,EAClC;QACE,OAAO,EAAE,MAAM;KAChB,EACD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,QAAQ,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;QAC9B,MAAM,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC,CACF,CAAC;IAEF,EAAE,CACA,sEAAsE,EACtE;QACE,OAAO,EAAE,MAAM;KAChB,EACD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,eAAe,GAAG,cAAc,CACpC,OAAO,EACP,4DAA4D,CAC7D,CAAC;QACF,MAAM,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC1C,MAAM,QAAQ,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;QAC9B,MAAM,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC,CACF,CAAC;IAEF,EAAE,CACA,gEAAgE,EAChE;QACE,OAAO,EAAE,MAAM;KAChB,EACD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CACtC,qBAAqB,EACrB,oBAAoB,CACrB,CAAC;QAEF,MAAM,EAAE,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,MAAM,QAAQ,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;QAE9B,MAAM,qBAAqB,GAAG,MAAM,QAAQ,CAC1C,sBAAsB,EACtB,OAAO,CACR,CAAC;QAEF,sCAAsC;QACtC,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CACrC,mEAAmE,CACpE,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CACrC,iDAAiD,CAClD,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CACrC,6DAA6D,CAC9D,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC5D,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,CACF,CAAC;IAEF,EAAE,CACA,gFAAgF,EAChF;QACE,OAAO,EAAE,MAAM;KAChB,EACD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,QAAQ,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;QAE9B,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CACtC,qBAAqB,EACrB,oBAAoB,CACrB,CAAC;QACF,MAAM,qBAAqB,GAAG,MAAM,QAAQ,CAC1C,sBAAsB,EACtB,OAAO,CACR,CAAC;QAEF,sCAAsC;QACtC,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CACrC,mEAAmE,CACpE,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CACrC,iDAAiD,CAClD,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CACrC,6DAA6D,CAC9D,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC5D,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,CACF,CAAC;IAEF,EAAE,CACA,gDAAgD,EAChD,EAAE,OAAO,EAAE,MAAM,EAAE,EACnB,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,QAAQ,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;QAE9B,MAAM,sBAAsB,GAAG,MAAM,iBAAiB,CACpD,IAAI,CAAC,IAAI,CACP,qBAAqB,EACrB,IAAI,EACJ,mBAAmB,EACnB,aAAa,EACb,eAAe,CAChB,CACF,CAAC;QAEF,+GAA+G;QAC/G,2EAA2E;QAC3E,MAAM,EAAE,CACN,IAAI,CAAC,IAAI,CACP,qBAAqB,EACrB,UAAU,EACV,KAAK,EACL,UAAU,EACV,oBAAoB,CACrB,EACD,EAAE,KAAK,EAAE,IAAI,EAAE,CAChB,CAAC;QAEF,MAAM,qBAAqB,CAAC;YAC1B,UAAU,EAAE,YAAY;YACxB,aAAa,EAAE,KAAK;YACpB,GAAG,EAAE,qBAAqB;YAC1B,oBAAoB,EAAE,iBAAiB;YACvC,kBAAkB,EAAE,sBAAsB;YAC1C,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,iLAAiL;QACjL,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAClC,qBAAqB,EACrB,UAAU,EACV,KAAK,EACL,UAAU,EACV,oBAAoB,CACrB,CAAC;QACF,MAAM,qBAAqB,GAAG,MAAM,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC1E,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC9D,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAChE,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACvE,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACnE,CAAC,CACF,CAAC;IAEF,EAAE,CACA,uEAAuE,EACvE,EAAE,OAAO,EAAE,MAAM,EAAE,EACnB,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,QAAQ,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;QAE9B,8BAA8B;QAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,EACL,SAAS,EACT,UAAU,CACX,CAAC;QACF,MAAM,mBAAmB,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAEtE,wDAAwD;QACxD,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACjE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACnE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,CACnC,4EAA4E,CAC7E,CAAC;QACF,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,CACnC,oDAAoD,CACrD,CAAC;QAEF,iCAAiC;QACjC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAClC,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,EACL,YAAY,EACZ,UAAU,CACX,CAAC;QACF,MAAM,qBAAqB,GAAG,MAAM,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAE1E,wGAAwG;QACxG,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACnE,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC/D,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACrE,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CACrC,sEAAsE,CACvE,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CACrC,4EAA4E,CAC7E,CAAC;QAEF,mGAAmG;QACnG,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,KAAK,CAClD,4BAA4B,CAC7B,CAAC;QACF,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,8CAA8C;IAC1F,CAAC,CACF,CAAC;IAEF,EAAE,CACA,yEAAyE,EACzE,EAAE,OAAO,EAAE,MAAM,EAAE,EACnB,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,QAAQ,EAAE,CAAC;QAEjB,MAAM,2BAA2B,GAAG,MAAM,iBAAiB,CACzD,IAAI,CAAC,IAAI,CACP,qBAAqB,EACrB,wBAAwB,EACxB,6BAA6B,CAC9B,CACF,CAAC;QAEF,MAAM,qBAAqB,CAAC;YAC1B,UAAU,EAAE,YAAY;YACxB,aAAa,EAAE,KAAK;YACpB,GAAG,EAAE,qBAAqB;YAC1B,oBAAoB,EAAE,iBAAiB;YACvC,kBAAkB,EAAE,2BAA2B;YAC/C,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,wDAAwD;QACxD,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CACvC,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,EACL,iBAAiB,EACjB,UAAU,CACX,CAAC;QACF,MAAM,0BAA0B,GAAG,MAAM,QAAQ,CAC/C,uBAAuB,EACvB,OAAO,CACR,CAAC;QAEF,2EAA2E;QAC3E,MAAM,CAAC,0BAA0B,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACxE,MAAM,CAAC,0BAA0B,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC/D,MAAM,CAAC,0BAA0B,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAE7D,yCAAyC;QACzC,MAAM,CAAC,0BAA0B,CAAC,CAAC,SAAS,CAC1C,iEAAiE,CAClE,CAAC;QACF,MAAM,CAAC,0BAA0B,CAAC,CAAC,SAAS,CAC1C,+DAA+D,CAChE,CAAC;QAEF,6DAA6D;QAC7D,MAAM,CAAC,0BAA0B,CAAC,CAAC,SAAS,CAC1C,yCAAyC,CAC1C,CAAC;QACF,MAAM,CAAC,0BAA0B,CAAC,CAAC,SAAS,CAC1C,uCAAuC,CACxC,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"generate-doc-model.test.js","sourceRoot":"","sources":["../../../../src/codegen/__tests__/generate-doc-model.test.ts"],"names":[],"mappings":"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"}