prisma-effect-kysely 1.10.0 → 1.12.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/dist/effect/generator.d.ts +4 -0
- package/dist/effect/generator.d.ts.map +1 -1
- package/dist/effect/generator.js +7 -0
- package/dist/effect/generator.js.map +1 -1
- package/dist/effect/join-table.d.ts +4 -0
- package/dist/effect/join-table.d.ts.map +1 -1
- package/dist/effect/join-table.js +16 -0
- package/dist/effect/join-table.js.map +1 -1
- package/dist/effect/type.d.ts +1 -1
- package/dist/effect/type.d.ts.map +1 -1
- package/dist/effect/type.js +18 -12
- package/dist/effect/type.js.map +1 -1
- package/dist/generator/config.d.ts +58 -0
- package/dist/generator/config.d.ts.map +1 -0
- package/dist/generator/config.js +109 -0
- package/dist/generator/config.js.map +1 -0
- package/dist/generator/contract-scaffolder.d.ts +45 -0
- package/dist/generator/contract-scaffolder.d.ts.map +1 -0
- package/dist/generator/contract-scaffolder.js +244 -0
- package/dist/generator/contract-scaffolder.js.map +1 -0
- package/dist/generator/domain-detector.d.ts +50 -0
- package/dist/generator/domain-detector.d.ts.map +1 -0
- package/dist/generator/domain-detector.js +187 -0
- package/dist/generator/domain-detector.js.map +1 -0
- package/dist/generator/orchestrator.d.ts +24 -4
- package/dist/generator/orchestrator.d.ts.map +1 -1
- package/dist/generator/orchestrator.js +139 -21
- package/dist/generator/orchestrator.js.map +1 -1
- package/dist/kysely/generator.d.ts +4 -0
- package/dist/kysely/generator.d.ts.map +1 -1
- package/dist/kysely/generator.js +6 -0
- package/dist/kysely/generator.js.map +1 -1
- package/dist/kysely/helpers.d.ts +5 -1
- package/dist/kysely/helpers.d.ts.map +1 -1
- package/dist/kysely/helpers.js +54 -27
- package/dist/kysely/helpers.js.map +1 -1
- package/dist/kysely/type.d.ts +19 -2
- package/dist/kysely/type.d.ts.map +1 -1
- package/dist/kysely/type.js +82 -4
- package/dist/kysely/type.js.map +1 -1
- package/dist/utils/annotations.d.ts.map +1 -1
- package/dist/utils/codegen.d.ts.map +1 -1
- package/dist/utils/naming.d.ts.map +1 -1
- package/package.json +16 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-scaffolder.js","sourceRoot":"","sources":["../../src/generator/contract-scaffolder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Detection
|
|
3
|
+
*
|
|
4
|
+
* Detects domains from Prisma multi-file schema organization.
|
|
5
|
+
* Supports Prisma's multi-file schema feature (v5.15.0+) where schemas
|
|
6
|
+
* are organized in separate files per domain (e.g., user.prisma, product.prisma).
|
|
7
|
+
*/
|
|
8
|
+
import type { DMMF } from '@prisma/generator-helper';
|
|
9
|
+
/**
|
|
10
|
+
* Information about a detected domain
|
|
11
|
+
*/
|
|
12
|
+
export interface DomainInfo {
|
|
13
|
+
/**
|
|
14
|
+
* Domain name (e.g., "user", "product")
|
|
15
|
+
* Derived from schema file name
|
|
16
|
+
*/
|
|
17
|
+
name: string;
|
|
18
|
+
/**
|
|
19
|
+
* Models belonging to this domain
|
|
20
|
+
*/
|
|
21
|
+
models: readonly DMMF.Model[];
|
|
22
|
+
/**
|
|
23
|
+
* Source file path for this domain
|
|
24
|
+
* @example "prisma/schemas/user.prisma"
|
|
25
|
+
*/
|
|
26
|
+
sourceFile?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Detect domains from Prisma schema file structure
|
|
30
|
+
*
|
|
31
|
+
* Strategy:
|
|
32
|
+
* 1. If multiSchema preview feature is enabled, use DMMF schema information
|
|
33
|
+
* 2. Otherwise, scan prisma/schemas/ directory for *.prisma files
|
|
34
|
+
* 3. Group models by domain based on file names
|
|
35
|
+
* 4. Default domain is "shared" for models without explicit domain
|
|
36
|
+
*
|
|
37
|
+
* @param dmmf - Prisma DMMF (Data Model Meta Format)
|
|
38
|
+
* @param schemaPath - Path to prisma schema directory
|
|
39
|
+
* @returns Array of detected domains with their models
|
|
40
|
+
*/
|
|
41
|
+
export declare function detectDomains(dmmf: DMMF.Document, schemaPath?: string): DomainInfo[];
|
|
42
|
+
/**
|
|
43
|
+
* Get all unique domain names from detected domains
|
|
44
|
+
*/
|
|
45
|
+
export declare function getDomainNames(domains: DomainInfo[]): string[];
|
|
46
|
+
/**
|
|
47
|
+
* Get models for a specific domain
|
|
48
|
+
*/
|
|
49
|
+
export declare function getModelsForDomain(domains: DomainInfo[], domainName: string): readonly DMMF.Model[];
|
|
50
|
+
//# sourceMappingURL=domain-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-detector.d.ts","sourceRoot":"","sources":["../../src/generator/domain-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAIrD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;IAE9B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAsBpF;AAgHD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAE9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,EAAE,MAAM,GACjB,SAAS,IAAI,CAAC,KAAK,EAAE,CAGvB"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Domain Detection
|
|
4
|
+
*
|
|
5
|
+
* Detects domains from Prisma multi-file schema organization.
|
|
6
|
+
* Supports Prisma's multi-file schema feature (v5.15.0+) where schemas
|
|
7
|
+
* are organized in separate files per domain (e.g., user.prisma, product.prisma).
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.detectDomains = detectDomains;
|
|
44
|
+
exports.getDomainNames = getDomainNames;
|
|
45
|
+
exports.getModelsForDomain = getModelsForDomain;
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const fs = __importStar(require("fs"));
|
|
48
|
+
/**
|
|
49
|
+
* Detect domains from Prisma schema file structure
|
|
50
|
+
*
|
|
51
|
+
* Strategy:
|
|
52
|
+
* 1. If multiSchema preview feature is enabled, use DMMF schema information
|
|
53
|
+
* 2. Otherwise, scan prisma/schemas/ directory for *.prisma files
|
|
54
|
+
* 3. Group models by domain based on file names
|
|
55
|
+
* 4. Default domain is "shared" for models without explicit domain
|
|
56
|
+
*
|
|
57
|
+
* @param dmmf - Prisma DMMF (Data Model Meta Format)
|
|
58
|
+
* @param schemaPath - Path to prisma schema directory
|
|
59
|
+
* @returns Array of detected domains with their models
|
|
60
|
+
*/
|
|
61
|
+
function detectDomains(dmmf, schemaPath) {
|
|
62
|
+
// Strategy 1: Use DMMF schema locations if available (Prisma 5.15.0+)
|
|
63
|
+
const domainsByDmmf = detectDomainsFromDMMF(dmmf);
|
|
64
|
+
if (domainsByDmmf.length > 0) {
|
|
65
|
+
return domainsByDmmf;
|
|
66
|
+
}
|
|
67
|
+
// Strategy 2: Scan file system for schema files
|
|
68
|
+
if (schemaPath) {
|
|
69
|
+
const domainsByFiles = detectDomainsFromFiles(dmmf, schemaPath);
|
|
70
|
+
if (domainsByFiles.length > 0) {
|
|
71
|
+
return domainsByFiles;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Fallback: Single "shared" domain with all models
|
|
75
|
+
return [
|
|
76
|
+
{
|
|
77
|
+
name: 'shared',
|
|
78
|
+
models: dmmf.datamodel.models,
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Detect domains from DMMF schema metadata (Prisma 5.15.0+)
|
|
84
|
+
*/
|
|
85
|
+
function detectDomainsFromDMMF(dmmf) {
|
|
86
|
+
const domains = new Map();
|
|
87
|
+
// Check if models have schema location metadata
|
|
88
|
+
for (const model of dmmf.datamodel.models) {
|
|
89
|
+
// @ts-expect-error - schema location may not be in type definitions yet
|
|
90
|
+
const schemaLocation = model.schemaLocation;
|
|
91
|
+
if (schemaLocation && typeof schemaLocation === 'string') {
|
|
92
|
+
const domainName = extractDomainFromPath(schemaLocation);
|
|
93
|
+
const existing = domains.get(domainName) || [];
|
|
94
|
+
// Cast to readonly to match DMMF type signature
|
|
95
|
+
domains.set(domainName, [...existing, model]);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Convert map to DomainInfo array
|
|
99
|
+
return Array.from(domains.entries()).map(([name, models]) => ({
|
|
100
|
+
name,
|
|
101
|
+
models,
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Detect domains by scanning prisma/schemas/ directory
|
|
106
|
+
*/
|
|
107
|
+
function detectDomainsFromFiles(dmmf, schemaPath) {
|
|
108
|
+
const schemasDir = path.join(path.dirname(schemaPath), 'schemas');
|
|
109
|
+
// Check if schemas directory exists
|
|
110
|
+
if (!fs.existsSync(schemasDir)) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
const domainModels = new Map();
|
|
114
|
+
const domainSourceFiles = new Map();
|
|
115
|
+
// Read all .prisma files in schemas directory
|
|
116
|
+
const schemaFiles = fs.readdirSync(schemasDir).filter((file) => file.endsWith('.prisma'));
|
|
117
|
+
if (schemaFiles.length === 0) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
// Create domain entries for each schema file
|
|
121
|
+
for (const file of schemaFiles) {
|
|
122
|
+
const domainName = path.basename(file, '.prisma');
|
|
123
|
+
const sourceFile = path.join(schemasDir, file);
|
|
124
|
+
domainModels.set(domainName, []);
|
|
125
|
+
domainSourceFiles.set(domainName, sourceFile);
|
|
126
|
+
}
|
|
127
|
+
// Assign models to domains based on file content
|
|
128
|
+
// For now, we rely on naming conventions or explicit comments
|
|
129
|
+
// This is a heuristic - in practice, Prisma's DMMF should provide this
|
|
130
|
+
for (const model of dmmf.datamodel.models) {
|
|
131
|
+
const domainName = inferDomainFromModel(model, domainModels);
|
|
132
|
+
const models = domainModels.get(domainName);
|
|
133
|
+
if (models) {
|
|
134
|
+
domainModels.set(domainName, [...models, model]);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Build final DomainInfo array
|
|
138
|
+
return Array.from(domainModels.entries()).map(([name, models]) => ({
|
|
139
|
+
name,
|
|
140
|
+
models: models,
|
|
141
|
+
sourceFile: domainSourceFiles.get(name),
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Extract domain name from schema file path
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* extractDomainFromPath("prisma/schemas/user.prisma") // "user"
|
|
149
|
+
* extractDomainFromPath("schemas/product.prisma") // "product"
|
|
150
|
+
*/
|
|
151
|
+
function extractDomainFromPath(filePath) {
|
|
152
|
+
const fileName = path.basename(filePath, '.prisma');
|
|
153
|
+
return fileName.toLowerCase();
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Infer domain from model name using heuristics
|
|
157
|
+
*
|
|
158
|
+
* Strategy:
|
|
159
|
+
* 1. Check if model name starts with domain name (UserProfile → user)
|
|
160
|
+
* 2. Check for common prefixes (User, Product, Order, etc.)
|
|
161
|
+
* 3. Fall back to "shared" domain
|
|
162
|
+
*/
|
|
163
|
+
function inferDomainFromModel(model, domainModels) {
|
|
164
|
+
const modelName = model.name.toLowerCase();
|
|
165
|
+
// Try exact domain prefix match
|
|
166
|
+
for (const domainName of domainModels.keys()) {
|
|
167
|
+
if (modelName.startsWith(domainName)) {
|
|
168
|
+
return domainName;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Fall back to "shared" domain
|
|
172
|
+
return domainModels.has('shared') ? 'shared' : Array.from(domainModels.keys())[0] || 'shared';
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get all unique domain names from detected domains
|
|
176
|
+
*/
|
|
177
|
+
function getDomainNames(domains) {
|
|
178
|
+
return domains.map((d) => d.name);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get models for a specific domain
|
|
182
|
+
*/
|
|
183
|
+
function getModelsForDomain(domains, domainName) {
|
|
184
|
+
const domain = domains.find((d) => d.name === domainName);
|
|
185
|
+
return domain?.models || [];
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=domain-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-detector.js","sourceRoot":"","sources":["../../src/generator/domain-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,22 +2,42 @@ import type { GeneratorOptions } from '@prisma/generator-helper';
|
|
|
2
2
|
/**
|
|
3
3
|
* Orchestrates the generation of Effect Schema types from Prisma schema
|
|
4
4
|
* Uses domain-driven generators: Prisma → Effect → Kysely
|
|
5
|
+
*
|
|
6
|
+
* Supports two modes:
|
|
7
|
+
* 1. Single output (default): All schemas in one directory
|
|
8
|
+
* 2. Multi-domain: Separate contract libraries per domain
|
|
5
9
|
*/
|
|
6
10
|
export declare class GeneratorOrchestrator {
|
|
11
|
+
private readonly config;
|
|
7
12
|
private readonly fileManager;
|
|
8
13
|
private readonly prismaGen;
|
|
9
14
|
private readonly effectGen;
|
|
10
15
|
private readonly kyselyGen;
|
|
11
16
|
constructor(options: GeneratorOptions);
|
|
12
|
-
/**
|
|
13
|
-
* Validate and extract output path from generator options
|
|
14
|
-
*/
|
|
15
|
-
private validateOutputPath;
|
|
16
17
|
/**
|
|
17
18
|
* Main generation entry point
|
|
18
19
|
* Orchestrates all generation steps
|
|
20
|
+
*
|
|
21
|
+
* Flow:
|
|
22
|
+
* 1. Detect domains if multi-domain mode enabled
|
|
23
|
+
* 2. Scaffold contract libraries if scaffolding enabled
|
|
24
|
+
* 3. Generate schemas (single or per-domain)
|
|
19
25
|
*/
|
|
20
26
|
generate(options: GeneratorOptions): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Generate schemas in single-output mode (default)
|
|
29
|
+
* All schemas in one directory
|
|
30
|
+
*/
|
|
31
|
+
private generateSingleOutput;
|
|
32
|
+
/**
|
|
33
|
+
* Generate schemas in multi-domain mode
|
|
34
|
+
* Separate contract libraries per domain
|
|
35
|
+
*/
|
|
36
|
+
private generateMultiDomain;
|
|
37
|
+
/**
|
|
38
|
+
* Generate schemas for a specific domain
|
|
39
|
+
*/
|
|
40
|
+
private generateForDomain;
|
|
21
41
|
/**
|
|
22
42
|
* Generate enums.ts file
|
|
23
43
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/generator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/generator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAcjE;;;;;;;GAOG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;gBAEhC,OAAO,EAAE,gBAAgB;IASrC;;;;;;;;OAQG;IACG,QAAQ,CAAC,OAAO,EAAE,gBAAgB;IAaxC;;;OAGG;YACW,oBAAoB;IAQlC;;;OAGG;YACW,mBAAmB;IAsBjC;;OAEG;YACW,iBAAiB;IAmF/B;;OAEG;YACW,aAAa;IAM3B;;OAEG;YACW,aAAa;IAwD3B;;OAEG;YACW,aAAa;IAK3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAehB;;OAEG;IACH,OAAO,CAAC,WAAW;CAWpB"}
|
|
@@ -5,40 +5,136 @@ const file_manager_1 = require("../utils/file-manager");
|
|
|
5
5
|
const generator_1 = require("../prisma/generator");
|
|
6
6
|
const generator_2 = require("../effect/generator");
|
|
7
7
|
const generator_3 = require("../kysely/generator");
|
|
8
|
+
const config_1 = require("./config");
|
|
9
|
+
const domain_detector_1 = require("./domain-detector");
|
|
10
|
+
const contract_scaffolder_1 = require("./contract-scaffolder");
|
|
8
11
|
/**
|
|
9
12
|
* Orchestrates the generation of Effect Schema types from Prisma schema
|
|
10
13
|
* Uses domain-driven generators: Prisma → Effect → Kysely
|
|
14
|
+
*
|
|
15
|
+
* Supports two modes:
|
|
16
|
+
* 1. Single output (default): All schemas in one directory
|
|
17
|
+
* 2. Multi-domain: Separate contract libraries per domain
|
|
11
18
|
*/
|
|
12
19
|
class GeneratorOrchestrator {
|
|
13
20
|
constructor(options) {
|
|
14
|
-
|
|
15
|
-
this.fileManager = new file_manager_1.FileManager(
|
|
21
|
+
this.config = (0, config_1.parseGeneratorConfig)(options);
|
|
22
|
+
this.fileManager = new file_manager_1.FileManager(this.config.output);
|
|
16
23
|
this.prismaGen = new generator_1.PrismaGenerator(options.dmmf);
|
|
17
24
|
this.effectGen = new generator_2.EffectGenerator(options.dmmf);
|
|
18
25
|
this.kyselyGen = new generator_3.KyselyGenerator(options.dmmf);
|
|
19
26
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Validate and extract output path from generator options
|
|
22
|
-
*/
|
|
23
|
-
validateOutputPath(options) {
|
|
24
|
-
const outputPath = options.generator.output?.value;
|
|
25
|
-
if (!outputPath) {
|
|
26
|
-
throw new Error('Prisma Effect Generator: output path not configured.\n' +
|
|
27
|
-
'Add "output" to your generator block in schema.prisma');
|
|
28
|
-
}
|
|
29
|
-
return outputPath;
|
|
30
|
-
}
|
|
31
27
|
/**
|
|
32
28
|
* Main generation entry point
|
|
33
29
|
* Orchestrates all generation steps
|
|
30
|
+
*
|
|
31
|
+
* Flow:
|
|
32
|
+
* 1. Detect domains if multi-domain mode enabled
|
|
33
|
+
* 2. Scaffold contract libraries if scaffolding enabled
|
|
34
|
+
* 3. Generate schemas (single or per-domain)
|
|
34
35
|
*/
|
|
35
36
|
async generate(options) {
|
|
36
37
|
this.logStart(options);
|
|
38
|
+
// Check if multi-domain mode is enabled
|
|
39
|
+
if ((0, config_1.isMultiDomainEnabled)(this.config)) {
|
|
40
|
+
await this.generateMultiDomain(options);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
await this.generateSingleOutput();
|
|
44
|
+
}
|
|
45
|
+
this.logComplete();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate schemas in single-output mode (default)
|
|
49
|
+
* All schemas in one directory
|
|
50
|
+
*/
|
|
51
|
+
async generateSingleOutput() {
|
|
37
52
|
// Ensure output directory exists
|
|
38
53
|
await this.fileManager.ensureDirectory();
|
|
39
54
|
// Generate all files in parallel for better performance
|
|
40
55
|
await Promise.all([this.generateEnums(), this.generateTypes(), this.generateIndex()]);
|
|
41
|
-
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Generate schemas in multi-domain mode
|
|
59
|
+
* Separate contract libraries per domain
|
|
60
|
+
*/
|
|
61
|
+
async generateMultiDomain(options) {
|
|
62
|
+
// 1. Detect domains from schema structure
|
|
63
|
+
const schemaPath = options.schemaPath;
|
|
64
|
+
const domains = (0, domain_detector_1.detectDomains)(options.dmmf, schemaPath);
|
|
65
|
+
console.log(`[Multi-Domain] Detected ${domains.length} domains:`, domains.map((d) => d.name).join(', '));
|
|
66
|
+
// 2. Scaffold contract libraries if enabled
|
|
67
|
+
if ((0, config_1.isScaffoldingEnabled)(this.config)) {
|
|
68
|
+
const scaffoldResults = await (0, contract_scaffolder_1.scaffoldContractLibraries)(domains, this.config);
|
|
69
|
+
(0, contract_scaffolder_1.logScaffoldResults)(scaffoldResults);
|
|
70
|
+
}
|
|
71
|
+
// 3. Generate schemas for each domain
|
|
72
|
+
for (const domain of domains) {
|
|
73
|
+
await this.generateForDomain(domain);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Generate schemas for a specific domain
|
|
78
|
+
*/
|
|
79
|
+
async generateForDomain(domain) {
|
|
80
|
+
const domainOutputPath = `${this.config.output}/${domain.name}/src/generated`;
|
|
81
|
+
const domainFileManager = new file_manager_1.FileManager(domainOutputPath);
|
|
82
|
+
await domainFileManager.ensureDirectory();
|
|
83
|
+
console.log(`[Multi-Domain] Generating ${domain.name}...`);
|
|
84
|
+
// Generate enums (shared across all domains for now)
|
|
85
|
+
const enums = this.prismaGen.getEnums();
|
|
86
|
+
if (enums.length > 0) {
|
|
87
|
+
const enumsContent = this.effectGen.generateEnums(enums);
|
|
88
|
+
await domainFileManager.writeFile('enums.ts', enumsContent);
|
|
89
|
+
}
|
|
90
|
+
// Generate types for this domain's models only
|
|
91
|
+
const joinTables = this.prismaGen.getManyToManyJoinTables();
|
|
92
|
+
const hasEnums = enums.length > 0;
|
|
93
|
+
// Filter join tables to only those relevant to this domain
|
|
94
|
+
const domainJoinTables = joinTables.filter((jt) => domain.models.some((m) => m.name === jt.modelA || m.name === jt.modelB));
|
|
95
|
+
// Generate header with imports
|
|
96
|
+
const header = this.effectGen.generateTypesHeader(hasEnums);
|
|
97
|
+
// Generate model schemas for this domain only
|
|
98
|
+
const modelSchemas = domain.models
|
|
99
|
+
.map((model) => {
|
|
100
|
+
const fields = this.prismaGen.getModelFields(model);
|
|
101
|
+
const baseSchemaName = `_${model.name}`;
|
|
102
|
+
// Generate Kysely table interface
|
|
103
|
+
const kyselyTable = this.kyselyGen.generateTableInterface(model, fields);
|
|
104
|
+
// Generate base schema with Kysely fields
|
|
105
|
+
const kyselyFields = this.kyselyGen.generateModelFields(fields);
|
|
106
|
+
const baseSchema = `// ${model.name} Base Schema
|
|
107
|
+
export const ${baseSchemaName} = Schema.Struct({
|
|
108
|
+
${kyselyFields}
|
|
109
|
+
});`;
|
|
110
|
+
// Generate operational schemas and type exports
|
|
111
|
+
const operationalSchema = this.effectGen.generateOperationalSchemas(model);
|
|
112
|
+
const typeExports = this.effectGen.generateTypeExports(model, fields);
|
|
113
|
+
return `${kyselyTable}\n\n${baseSchema}\n\n${operationalSchema}\n\n${typeExports}`;
|
|
114
|
+
})
|
|
115
|
+
.join('\n\n');
|
|
116
|
+
// Generate join table Kysely interfaces for this domain
|
|
117
|
+
const joinTableKyselyInterfaces = domainJoinTables.length > 0
|
|
118
|
+
? this.effectGen.generateJoinTableKyselyInterfaces(domainJoinTables)
|
|
119
|
+
: '';
|
|
120
|
+
// Generate join table schemas for this domain
|
|
121
|
+
const joinTableSchemas = domainJoinTables.length > 0 ? this.effectGen.generateJoinTableSchemas(domainJoinTables) : '';
|
|
122
|
+
// Generate DB interface for this domain
|
|
123
|
+
const dbInterface = this.kyselyGen.generateDBInterface(domain.models, domainJoinTables);
|
|
124
|
+
// Assemble content with proper spacing
|
|
125
|
+
let content = `${header}\n\n${modelSchemas}`;
|
|
126
|
+
if (joinTableKyselyInterfaces) {
|
|
127
|
+
content += `\n\n${joinTableKyselyInterfaces}`;
|
|
128
|
+
}
|
|
129
|
+
if (joinTableSchemas) {
|
|
130
|
+
content += `\n\n${joinTableSchemas}`;
|
|
131
|
+
}
|
|
132
|
+
content += `\n\n${dbInterface}`;
|
|
133
|
+
await domainFileManager.writeFile('types.ts', content);
|
|
134
|
+
// Generate index file
|
|
135
|
+
const indexContent = this.kyselyGen.generateIndexFile();
|
|
136
|
+
await domainFileManager.writeFile('index.ts', indexContent);
|
|
137
|
+
console.log(`[Multi-Domain] ✓ Generated ${domain.name} (${domain.models.length} models)`);
|
|
42
138
|
}
|
|
43
139
|
/**
|
|
44
140
|
* Generate enums.ts file
|
|
@@ -57,11 +153,13 @@ class GeneratorOrchestrator {
|
|
|
57
153
|
const hasEnums = this.prismaGen.getEnums().length > 0;
|
|
58
154
|
// Generate header with imports
|
|
59
155
|
const header = this.effectGen.generateTypesHeader(hasEnums);
|
|
60
|
-
// Generate all model schemas
|
|
156
|
+
// Generate all model schemas (Kysely tables + Effect schemas)
|
|
61
157
|
const modelSchemas = models
|
|
62
158
|
.map((model) => {
|
|
63
159
|
const fields = this.prismaGen.getModelFields(model);
|
|
64
160
|
const baseSchemaName = `_${model.name}`;
|
|
161
|
+
// Generate Kysely table interface
|
|
162
|
+
const kyselyTable = this.kyselyGen.generateTableInterface(model, fields);
|
|
65
163
|
// Generate base schema with Kysely fields
|
|
66
164
|
const kyselyFields = this.kyselyGen.generateModelFields(fields);
|
|
67
165
|
const baseSchema = `// ${model.name} Base Schema
|
|
@@ -71,16 +169,24 @@ ${kyselyFields}
|
|
|
71
169
|
// Generate operational schemas and type exports
|
|
72
170
|
const operationalSchema = this.effectGen.generateOperationalSchemas(model);
|
|
73
171
|
const typeExports = this.effectGen.generateTypeExports(model, fields);
|
|
74
|
-
return `${baseSchema}\n\n${operationalSchema}\n\n${typeExports}`;
|
|
172
|
+
return `${kyselyTable}\n\n${baseSchema}\n\n${operationalSchema}\n\n${typeExports}`;
|
|
75
173
|
})
|
|
76
174
|
.join('\n\n');
|
|
175
|
+
// Generate join table Kysely interfaces
|
|
176
|
+
const joinTableKyselyInterfaces = joinTables.length > 0 ? this.effectGen.generateJoinTableKyselyInterfaces(joinTables) : '';
|
|
77
177
|
// Generate join table schemas
|
|
78
178
|
const joinTableSchemas = joinTables.length > 0 ? this.effectGen.generateJoinTableSchemas(joinTables) : '';
|
|
79
179
|
// Generate DB interface with join tables
|
|
80
180
|
const dbInterface = this.kyselyGen.generateDBInterface(models, joinTables);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
181
|
+
// Assemble content with proper spacing
|
|
182
|
+
let content = `${header}\n\n${modelSchemas}`;
|
|
183
|
+
if (joinTableKyselyInterfaces) {
|
|
184
|
+
content += `\n\n${joinTableKyselyInterfaces}`;
|
|
185
|
+
}
|
|
186
|
+
if (joinTableSchemas) {
|
|
187
|
+
content += `\n\n${joinTableSchemas}`;
|
|
188
|
+
}
|
|
189
|
+
content += `\n\n${dbInterface}`;
|
|
84
190
|
await this.fileManager.writeFile('types.ts', content);
|
|
85
191
|
}
|
|
86
192
|
/**
|
|
@@ -98,14 +204,26 @@ ${kyselyFields}
|
|
|
98
204
|
const enumCount = options.dmmf.datamodel.enums.length;
|
|
99
205
|
console.log('[Prisma Effect Kysely Generator] Starting generation...');
|
|
100
206
|
console.log(`[Effect Generator] Processing ${modelCount} models, ${enumCount} enums`);
|
|
207
|
+
if ((0, config_1.isMultiDomainEnabled)(this.config)) {
|
|
208
|
+
console.log('[Effect Generator] Multi-domain mode: ENABLED');
|
|
209
|
+
if ((0, config_1.isScaffoldingEnabled)(this.config)) {
|
|
210
|
+
console.log('[Effect Generator] Library scaffolding: ENABLED');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
101
213
|
}
|
|
102
214
|
/**
|
|
103
215
|
* Log generation completion
|
|
104
216
|
*/
|
|
105
217
|
logComplete() {
|
|
106
218
|
const outputPath = this.fileManager.getOutputPath();
|
|
107
|
-
|
|
108
|
-
|
|
219
|
+
if ((0, config_1.isMultiDomainEnabled)(this.config)) {
|
|
220
|
+
console.log(`[Effect Generator] ✓ Multi-domain generation complete`);
|
|
221
|
+
console.log(`[Effect Generator] Base output: ${this.config.output}`);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
console.log(`[Effect Generator] ✓ Generated to ${outputPath}`);
|
|
225
|
+
console.log(`[Effect Generator] Files: enums.ts, types.ts, index.ts`);
|
|
226
|
+
}
|
|
109
227
|
}
|
|
110
228
|
}
|
|
111
229
|
exports.GeneratorOrchestrator = GeneratorOrchestrator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/generator/orchestrator.ts"],"names":[],"mappings":";;;AACA,wDAAoD;AACpD,mDAAsD;AACtD,mDAAsD;AACtD,mDAAsD;
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/generator/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,10 @@ export declare class KyselyGenerator {
|
|
|
15
15
|
* Generate all fields for a model with Kysely integration
|
|
16
16
|
*/
|
|
17
17
|
generateModelFields(fields: readonly DMMF.Field[]): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generate Kysely table interface for a model
|
|
20
|
+
*/
|
|
21
|
+
generateTableInterface(model: DMMF.Model, fields: readonly DMMF.Field[]): string;
|
|
18
22
|
/**
|
|
19
23
|
* Generate DB interface for all models and join tables
|
|
20
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/kysely/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;GAGG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI,CAAC,QAAQ;IAEhD;;OAEG;IACH,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK;IAUzC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;IAMjD;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,GAAE,aAAa,EAAO;IAInF;;OAEG;IACH,iBAAiB;CAGlB"}
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/kysely/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;GAGG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI,CAAC,QAAQ;IAEhD;;OAEG;IACH,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK;IAUzC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;IAMjD;;OAEG;IACH,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;IAIvE;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,GAAE,aAAa,EAAO;IAInF;;OAEG;IACH,iBAAiB;CAGlB"}
|
package/dist/kysely/generator.js
CHANGED
|
@@ -29,6 +29,12 @@ class KyselyGenerator {
|
|
|
29
29
|
.map((field) => this.generateFieldWithKysely(field))
|
|
30
30
|
.join(',\n');
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Generate Kysely table interface for a model
|
|
34
|
+
*/
|
|
35
|
+
generateTableInterface(model, fields) {
|
|
36
|
+
return (0, type_1.generateKyselyTableInterface)(model, fields, this.dmmf);
|
|
37
|
+
}
|
|
32
38
|
/**
|
|
33
39
|
* Generate DB interface for all models and join tables
|
|
34
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/kysely/generator.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/kysely/generator.ts"],"names":[],"mappings":";;;AACA,iCAAiG;AACjG,yCAAgD;AAGhD;;;GAGG;AACH,MAAa,eAAe;IAC1B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD;;OAEG;IACH,uBAAuB,CAAC,KAAiB;QACvC,uBAAuB;QACvB,MAAM,aAAa,GAAG,IAAA,qBAAc,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvD,gCAAgC;QAChC,MAAM,eAAe,GAAG,IAAA,2BAAoB,EAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAEnE,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAA6B;QAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;aACtB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;aACnD,IAAI,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,KAAiB,EAAE,MAA6B;QACrE,OAAO,IAAA,mCAA4B,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAA6B,EAAE,aAA8B,EAAE;QACjF,OAAO,IAAA,0BAAmB,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,oDAAoD,CAAC;IAC9D,CAAC;CACF;AA7CD,0CA6CC"}
|
package/dist/kysely/helpers.d.ts
CHANGED
|
@@ -42,7 +42,11 @@ export interface Schemas<Type, Encoded> {
|
|
|
42
42
|
* Generate all operational schemas (Selectable/Insertable/Updateable) from base schema
|
|
43
43
|
* Used in generated code
|
|
44
44
|
*/
|
|
45
|
-
export declare const getSchemas: <Type, Encoded>(baseSchema: Schema.Schema<Type, Encoded>) =>
|
|
45
|
+
export declare const getSchemas: <Type, Encoded>(baseSchema: Schema.Schema<Type, Encoded>) => {
|
|
46
|
+
Selectable: Schema.Schema<import("kysely/dist/cjs/util/type-utils").DrainOuterGeneric<{ [K_1 in { [K in keyof Type]: import("kysely").SelectType<Type[K]> extends infer T ? T extends import("kysely").SelectType<Type[K]> ? T extends never ? never : K : never : never; }[keyof Type]]: import("kysely").SelectType<Type[K_1]>; }>, import("kysely/dist/cjs/util/type-utils").DrainOuterGeneric<{ [K_3 in { [K_2 in keyof Encoded]: import("kysely").SelectType<Encoded[K_2]> extends infer T ? T extends import("kysely").SelectType<Encoded[K_2]> ? T extends never ? never : K_2 : never : never; }[keyof Encoded]]: import("kysely").SelectType<Encoded[K_3]>; }>, never>;
|
|
47
|
+
Insertable: Schema.Schema<import("kysely/dist/cjs/util/type-utils").DrainOuterGeneric<{ [K_4 in import("kysely").NonNullableInsertKeys<Type>]: import("kysely").InsertType<Type[K_4]>; } & { [K_5 in import("kysely").NullableInsertKeys<Type>]?: import("kysely").InsertType<Type[K_5]> | undefined; }>, import("kysely/dist/cjs/util/type-utils").DrainOuterGeneric<{ [K_6 in import("kysely").NonNullableInsertKeys<Encoded>]: import("kysely").InsertType<Encoded[K_6]>; } & { [K_7 in import("kysely").NullableInsertKeys<Encoded>]?: import("kysely").InsertType<Encoded[K_7]> | undefined; }>, never>;
|
|
48
|
+
Updateable: Schema.Schema<import("kysely/dist/cjs/util/type-utils").DrainOuterGeneric<{ [K_8 in import("kysely").UpdateKeys<Type>]?: import("kysely").UpdateType<Type[K_8]> | undefined; }>, import("kysely/dist/cjs/util/type-utils").DrainOuterGeneric<{ [K_9 in import("kysely").UpdateKeys<Encoded>]?: import("kysely").UpdateType<Encoded[K_9]> | undefined; }>, never>;
|
|
49
|
+
};
|
|
46
50
|
export interface GetTypes<T extends Schemas<unknown, unknown>> {
|
|
47
51
|
Selectable: Schema.Schema.Type<T['Selectable']>;
|
|
48
52
|
Insertable: Schema.Schema.Type<T['Insertable']>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/kysely/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEjE;;;GAGG;AAEH,eAAO,MAAM,YAAY,eAA8B,CAAC;AACxD,eAAO,MAAM,WAAW,eAA6B,CAAC;AAQtD;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EACtF,cAAc,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAChD,cAAc,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAChD,cAAc,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAC/C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAQnC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,EAAE,QAAQ,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/kysely/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEjE;;;GAGG;AAEH,eAAO,MAAM,YAAY,eAA8B,CAAC;AACxD,eAAO,MAAM,WAAW,eAA6B,CAAC;AAQtD;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EACtF,cAAc,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAChD,cAAc,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAChD,cAAc,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAC/C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAQnC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,sCAEtF,CAAC;AA8FF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,IAAI,EAAE,OAAO,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,gEAkB7E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,IAAI,EAAE,OAAO,EACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,KACnC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,CAoD5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,IAAI,EAAE,OAAO,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,gEAgC7E,CAAC;AAEF,MAAM,WAAW,OAAO,CAAC,IAAI,EAAE,OAAO;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;CAClE;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,IAAI,EAAE,OAAO,EAAE,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;;;;CAIhF,CAAC;AAEH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3D,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;CACjD"}
|