@opensaas/stack-cli 0.39.1 → 0.40.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/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +0 -5
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/generate.d.ts +0 -6
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +12 -30
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts +1 -6
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +1 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +0 -2
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/migrate.d.ts +2 -17
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +3 -59
- package/dist/commands/migrate.js.map +1 -1
- package/dist/generator/context.d.ts +0 -12
- package/dist/generator/context.d.ts.map +1 -1
- package/dist/generator/context.js +9 -44
- package/dist/generator/context.js.map +1 -1
- package/dist/generator/extension.d.ts +0 -9
- package/dist/generator/extension.d.ts.map +1 -1
- package/dist/generator/extension.js +5 -37
- package/dist/generator/extension.js.map +1 -1
- package/dist/generator/index.d.ts +0 -1
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +0 -1
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/lists.d.ts +2 -5
- package/dist/generator/lists.d.ts.map +1 -1
- package/dist/generator/lists.js +2 -12
- package/dist/generator/lists.js.map +1 -1
- package/dist/generator/node-build.d.ts.map +1 -1
- package/dist/generator/node-build.js +6 -12
- package/dist/generator/node-build.js.map +1 -1
- package/dist/generator/output-paths.d.ts +4 -18
- package/dist/generator/output-paths.d.ts.map +1 -1
- package/dist/generator/output-paths.js +3 -15
- package/dist/generator/output-paths.js.map +1 -1
- package/dist/generator/plugin-types.d.ts +0 -6
- package/dist/generator/plugin-types.d.ts.map +1 -1
- package/dist/generator/plugin-types.js +3 -28
- package/dist/generator/plugin-types.js.map +1 -1
- package/dist/generator/prisma-config.d.ts +6 -25
- package/dist/generator/prisma-config.d.ts.map +1 -1
- package/dist/generator/prisma-config.js +6 -27
- package/dist/generator/prisma-config.js.map +1 -1
- package/dist/generator/prisma.d.ts +0 -8
- package/dist/generator/prisma.d.ts.map +1 -1
- package/dist/generator/prisma.js +24 -63
- package/dist/generator/prisma.js.map +1 -1
- package/dist/generator/types.d.ts +0 -6
- package/dist/generator/types.d.ts.map +1 -1
- package/dist/generator/types.js +25 -149
- package/dist/generator/types.js.map +1 -1
- package/dist/mcp/lib/documentation-provider.d.ts +0 -36
- package/dist/mcp/lib/documentation-provider.d.ts.map +1 -1
- package/dist/mcp/lib/documentation-provider.js +1 -49
- package/dist/mcp/lib/documentation-provider.js.map +1 -1
- package/dist/mcp/lib/features/catalog.d.ts +0 -15
- package/dist/mcp/lib/features/catalog.d.ts.map +1 -1
- package/dist/mcp/lib/features/catalog.js +0 -15
- package/dist/mcp/lib/features/catalog.js.map +1 -1
- package/dist/mcp/lib/generators/feature-generator.d.ts +3 -24
- package/dist/mcp/lib/generators/feature-generator.d.ts.map +1 -1
- package/dist/mcp/lib/generators/feature-generator.js +4 -38
- package/dist/mcp/lib/generators/feature-generator.js.map +1 -1
- package/dist/mcp/lib/types.d.ts +0 -3
- package/dist/mcp/lib/types.d.ts.map +1 -1
- package/dist/mcp/lib/types.js +0 -3
- package/dist/mcp/lib/types.js.map +1 -1
- package/dist/mcp/lib/wizards/migration-wizard.d.ts +0 -70
- package/dist/mcp/lib/wizards/migration-wizard.d.ts.map +1 -1
- package/dist/mcp/lib/wizards/migration-wizard.js +1 -87
- package/dist/mcp/lib/wizards/migration-wizard.js.map +1 -1
- package/dist/mcp/lib/wizards/wizard-engine.d.ts +0 -39
- package/dist/mcp/lib/wizards/wizard-engine.d.ts.map +1 -1
- package/dist/mcp/lib/wizards/wizard-engine.js +0 -49
- package/dist/mcp/lib/wizards/wizard-engine.js.map +1 -1
- package/dist/mcp/server/index.d.ts +0 -3
- package/dist/mcp/server/index.d.ts.map +1 -1
- package/dist/mcp/server/index.js +1 -9
- package/dist/mcp/server/index.js.map +1 -1
- package/dist/mcp/server/stack-mcp-server.d.ts +0 -42
- package/dist/mcp/server/stack-mcp-server.d.ts.map +1 -1
- package/dist/mcp/server/stack-mcp-server.js +1 -47
- package/dist/mcp/server/stack-mcp-server.js.map +1 -1
- package/dist/migration/generators/migration-generator.d.ts +0 -55
- package/dist/migration/generators/migration-generator.d.ts.map +1 -1
- package/dist/migration/generators/migration-generator.js +3 -97
- package/dist/migration/generators/migration-generator.js.map +1 -1
- package/dist/migration/introspectors/index.d.ts +0 -6
- package/dist/migration/introspectors/index.d.ts.map +1 -1
- package/dist/migration/introspectors/index.js +0 -6
- package/dist/migration/introspectors/index.js.map +1 -1
- package/dist/migration/introspectors/keystone-introspector.d.ts +0 -27
- package/dist/migration/introspectors/keystone-introspector.d.ts.map +1 -1
- package/dist/migration/introspectors/keystone-introspector.js +0 -40
- package/dist/migration/introspectors/keystone-introspector.js.map +1 -1
- package/dist/migration/introspectors/nextjs-introspector.d.ts +0 -36
- package/dist/migration/introspectors/nextjs-introspector.d.ts.map +1 -1
- package/dist/migration/introspectors/nextjs-introspector.js +0 -39
- package/dist/migration/introspectors/nextjs-introspector.js.map +1 -1
- package/dist/migration/introspectors/prisma-introspector.d.ts +0 -30
- package/dist/migration/introspectors/prisma-introspector.d.ts.map +1 -1
- package/dist/migration/introspectors/prisma-introspector.js +1 -42
- package/dist/migration/introspectors/prisma-introspector.js.map +1 -1
- package/dist/migration/types.d.ts +1 -5
- package/dist/migration/types.d.ts.map +1 -1
- package/dist/migration/types.js +0 -3
- package/dist/migration/types.js.map +1 -1
- package/package.json +2 -2
- package/dist/generator/prisma-extensions.d.ts +0 -14
- package/dist/generator/prisma-extensions.d.ts.map +0 -1
- package/dist/generator/prisma-extensions.js +0 -172
- package/dist/generator/prisma-extensions.js.map +0 -1
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { withTsExtension } from './extension.js';
|
|
4
|
-
/**
|
|
5
|
-
* Generate Prisma result extensions configuration
|
|
6
|
-
* This creates a Prisma client extension that calls field resolveOutput hooks
|
|
7
|
-
*/
|
|
8
|
-
export function generatePrismaExtensions(config, configImport) {
|
|
9
|
-
const lines = [];
|
|
10
|
-
// Module specifier for importing the project's opensaas.config from inside
|
|
11
|
-
// the `.opensaas` bundle. Defaults to the legacy `../opensaas.config`; the
|
|
12
|
-
// output-path resolver supplies a recomputed value when the bundle is
|
|
13
|
-
// relocated via the `output` config block.
|
|
14
|
-
//
|
|
15
|
-
// The explicit `.ts` extension (see ./extension.ts) keeps the bundle loadable
|
|
16
|
-
// by the host bundler / plain Node without an `extensionAlias`.
|
|
17
|
-
const configImportPath = withTsExtension(configImport ?? '../opensaas.config');
|
|
18
|
-
// Add header comment
|
|
19
|
-
lines.push('/**');
|
|
20
|
-
lines.push(' * Generated Prisma result extensions from OpenSaas configuration');
|
|
21
|
-
lines.push(' * DO NOT EDIT - This file is automatically generated');
|
|
22
|
-
lines.push(' */');
|
|
23
|
-
lines.push('');
|
|
24
|
-
// Add imports
|
|
25
|
-
lines.push("import { Prisma } from './prisma-client/client.ts'");
|
|
26
|
-
lines.push(`import configOrPromise from '${configImportPath}'`);
|
|
27
|
-
lines.push('');
|
|
28
|
-
// Resolve config synchronously if possible (will be resolved by context.ts anyway)
|
|
29
|
-
lines.push('// Resolve config - may be a promise if plugins are present');
|
|
30
|
-
lines.push('let resolvedConfig: any = null');
|
|
31
|
-
lines.push('const configPromise = Promise.resolve(configOrPromise)');
|
|
32
|
-
lines.push('configPromise.then(cfg => { resolvedConfig = cfg })');
|
|
33
|
-
lines.push('');
|
|
34
|
-
// Check if any fields have result extensions or are virtual
|
|
35
|
-
let hasExtensions = false;
|
|
36
|
-
for (const listConfig of Object.values(config.lists)) {
|
|
37
|
-
for (const fieldConfig of Object.values(listConfig.fields)) {
|
|
38
|
-
if (fieldConfig.resultExtension || fieldConfig.virtual) {
|
|
39
|
-
hasExtensions = true;
|
|
40
|
-
break;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (hasExtensions)
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
if (!hasExtensions) {
|
|
47
|
-
// No extensions needed - export a no-op
|
|
48
|
-
lines.push('/**');
|
|
49
|
-
lines.push(' * No result extensions configured');
|
|
50
|
-
lines.push(' */');
|
|
51
|
-
lines.push('export const prismaExtensions = {}');
|
|
52
|
-
lines.push('');
|
|
53
|
-
return lines.join('\n');
|
|
54
|
-
}
|
|
55
|
-
// Generate result extensions
|
|
56
|
-
lines.push('/**');
|
|
57
|
-
lines.push(' * Prisma result extensions for field transformations and virtual fields');
|
|
58
|
-
lines.push(' * Delegates to field resolveOutput hooks from config for runtime transformations');
|
|
59
|
-
lines.push(' */');
|
|
60
|
-
lines.push('export const prismaExtensions = Prisma.defineExtension({');
|
|
61
|
-
lines.push(' result: {');
|
|
62
|
-
// Generate extensions for each list
|
|
63
|
-
for (const [listName, listConfig] of Object.entries(config.lists)) {
|
|
64
|
-
// Include both fields with resultExtension AND virtual fields
|
|
65
|
-
const fieldsWithExtensions = Object.entries(listConfig.fields).filter(([_, config]) => config.resultExtension || config.virtual);
|
|
66
|
-
if (fieldsWithExtensions.length === 0)
|
|
67
|
-
continue;
|
|
68
|
-
const modelKey = listName.charAt(0).toLowerCase() + listName.slice(1); // camelCase
|
|
69
|
-
lines.push(` ${modelKey}: {`);
|
|
70
|
-
for (const [fieldName, fieldConfig] of fieldsWithExtensions) {
|
|
71
|
-
const isVirtual = fieldConfig.virtual;
|
|
72
|
-
// Multi-column storage fields (e.g. image()/file() in keystone-columns
|
|
73
|
-
// mode) spread across several part columns (image_url, image_pathname, …)
|
|
74
|
-
// and have no single logical scalar on the model. Their logical value is
|
|
75
|
-
// re-assembled by core's read pipeline (assembleColumns), not by this
|
|
76
|
-
// result extension, so the compute here must not reference a scalar that
|
|
77
|
-
// doesn't exist. See #559.
|
|
78
|
-
const isMultiColumn = !isVirtual && typeof fieldConfig.getColumnNames === 'function';
|
|
79
|
-
lines.push(` ${fieldName}: {`);
|
|
80
|
-
if (isVirtual) {
|
|
81
|
-
// Virtual fields don't need database fields - they compute from the full item
|
|
82
|
-
lines.push(` needs: {},`);
|
|
83
|
-
}
|
|
84
|
-
else if (isMultiColumn && fieldConfig.getColumnNames) {
|
|
85
|
-
// Prisma types `needs` against the model's scalar fields. Referencing the
|
|
86
|
-
// logical field name here would type the literal `true` against `never`
|
|
87
|
-
// (no such scalar exists). Derive `needs` from the physical part columns
|
|
88
|
-
// instead. getColumnNames already returns the resolved/overridden names,
|
|
89
|
-
// so custom column maps Just Work. See #559.
|
|
90
|
-
const columnNames = fieldConfig.getColumnNames(fieldName);
|
|
91
|
-
const needsEntries = columnNames.map((column) => `${column}: true`).join(', ');
|
|
92
|
-
lines.push(` needs: { ${needsEntries} },`);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
// Non-virtual single-column fields need their database value
|
|
96
|
-
lines.push(` needs: { ${fieldName}: true },`);
|
|
97
|
-
}
|
|
98
|
-
lines.push(` compute: (${modelKey}) => {`);
|
|
99
|
-
if (isMultiColumn) {
|
|
100
|
-
// The logical value lives across part columns and is assembled elsewhere;
|
|
101
|
-
// there is no scalar to read or transform here. Returning undefined keeps
|
|
102
|
-
// the assembled value (re-added via TransformedFields) authoritative.
|
|
103
|
-
lines.push(` return undefined`);
|
|
104
|
-
lines.push(` },`);
|
|
105
|
-
lines.push(` },`);
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
if (!isVirtual) {
|
|
109
|
-
// For non-virtual fields, get the database value and check nullability
|
|
110
|
-
lines.push(` const value = ${modelKey}.${fieldName}`);
|
|
111
|
-
lines.push(` if (value === null || value === undefined) {`);
|
|
112
|
-
lines.push(` return undefined`);
|
|
113
|
-
lines.push(` }`);
|
|
114
|
-
}
|
|
115
|
-
lines.push(` // Call field's resolveOutput hook if available (synchronously)`);
|
|
116
|
-
lines.push(` if (!resolvedConfig) {`);
|
|
117
|
-
lines.push(` // Config not yet resolved - return undefined for virtual, value for regular`);
|
|
118
|
-
if (isVirtual) {
|
|
119
|
-
lines.push(` return undefined`);
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
lines.push(` return value`);
|
|
123
|
-
}
|
|
124
|
-
lines.push(` }`);
|
|
125
|
-
lines.push(` const fieldConfig = resolvedConfig.lists['${listName}'].fields['${fieldName}']`);
|
|
126
|
-
lines.push(` if (fieldConfig.hooks?.resolveOutput) {`);
|
|
127
|
-
lines.push(` return fieldConfig.hooks.resolveOutput({`);
|
|
128
|
-
lines.push(` operation: 'query',`);
|
|
129
|
-
if (isVirtual) {
|
|
130
|
-
lines.push(` value: undefined, // Virtual fields have no stored value`);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
lines.push(` value,`);
|
|
134
|
-
}
|
|
135
|
-
lines.push(` item: ${modelKey},`);
|
|
136
|
-
lines.push(` listKey: '${listName}',`);
|
|
137
|
-
lines.push(` fieldName: '${fieldName}',`);
|
|
138
|
-
lines.push(` context: null as any, // Extension context doesn't have full context`);
|
|
139
|
-
lines.push(` })`);
|
|
140
|
-
lines.push(` }`);
|
|
141
|
-
if (isVirtual) {
|
|
142
|
-
lines.push(` return undefined`);
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
lines.push(` return value`);
|
|
146
|
-
}
|
|
147
|
-
lines.push(` },`);
|
|
148
|
-
lines.push(` },`);
|
|
149
|
-
}
|
|
150
|
-
lines.push(` },`);
|
|
151
|
-
}
|
|
152
|
-
lines.push(' },');
|
|
153
|
-
lines.push('})');
|
|
154
|
-
lines.push('');
|
|
155
|
-
return lines.join('\n');
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Write Prisma extensions configuration to file
|
|
159
|
-
*
|
|
160
|
-
* @param configImport - Optional override for the `opensaas.config` import
|
|
161
|
-
* specifier, forwarded to {@link generatePrismaExtensions}.
|
|
162
|
-
*/
|
|
163
|
-
export function writePrismaExtensions(config, outputPath, configImport) {
|
|
164
|
-
const extensions = generatePrismaExtensions(config, configImport);
|
|
165
|
-
// Ensure directory exists
|
|
166
|
-
const dir = path.dirname(outputPath);
|
|
167
|
-
if (!fs.existsSync(dir)) {
|
|
168
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
169
|
-
}
|
|
170
|
-
fs.writeFileSync(outputPath, extensions, 'utf-8');
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=prisma-extensions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prisma-extensions.js","sourceRoot":"","sources":["../../src/generator/prisma-extensions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAsB,EAAE,YAAqB;IACpF,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,2EAA2E;IAC3E,2EAA2E;IAC3E,sEAAsE;IACtE,2CAA2C;IAC3C,EAAE;IACF,8EAA8E;IAC9E,gEAAgE;IAChE,MAAM,gBAAgB,GAAG,eAAe,CAAC,YAAY,IAAI,oBAAoB,CAAC,CAAA;IAE9E,qBAAqB;IACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;IAC/E,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;IACnE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,cAAc;IACd,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IAChE,KAAK,CAAC,IAAI,CAAC,gCAAgC,gBAAgB,GAAG,CAAC,CAAA;IAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,mFAAmF;IACnF,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;IACzE,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC5C,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;IACpE,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;IACjE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,4DAA4D;IAC5D,IAAI,aAAa,GAAG,KAAK,CAAA;IACzB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,IAAI,WAAW,CAAC,eAAe,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACvD,aAAa,GAAG,IAAI,CAAA;gBACpB,MAAK;YACP,CAAC;QACH,CAAC;QACD,IAAI,aAAa;YAAE,MAAK;IAC1B,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,wCAAwC;QACxC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjB,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;QAChD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjB,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;QAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAA;IACtF,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAA;IAC/F,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IACtE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAEzB,oCAAoC;IACpC,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,8DAA8D;QAC9D,MAAM,oBAAoB,GAAiC,MAAM,CAAC,OAAO,CACvE,UAAU,CAAC,MAAM,CAClB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;QAEnE,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAE/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,YAAY;QAElF,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,KAAK,CAAC,CAAA;QAEhC,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,oBAAoB,EAAE,CAAC;YAC5D,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAA;YACrC,uEAAuE;YACvE,0EAA0E;YAC1E,yEAAyE;YACzE,sEAAsE;YACtE,yEAAyE;YACzE,2BAA2B;YAC3B,MAAM,aAAa,GAAG,CAAC,SAAS,IAAI,OAAO,WAAW,CAAC,cAAc,KAAK,UAAU,CAAA;YAEpF,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,KAAK,CAAC,CAAA;YAEnC,IAAI,SAAS,EAAE,CAAC;gBACd,8EAA8E;gBAC9E,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;YAClC,CAAC;iBAAM,IAAI,aAAa,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;gBACvD,0EAA0E;gBAC1E,wEAAwE;gBACxE,yEAAyE;gBACzE,yEAAyE;gBACzE,6CAA6C;gBAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;gBACzD,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC9E,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,KAAK,CAAC,CAAA;YACnD,CAAC;iBAAM,CAAC;gBACN,6DAA6D;gBAC7D,KAAK,CAAC,IAAI,CAAC,oBAAoB,SAAS,WAAW,CAAC,CAAA;YACtD,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,qBAAqB,QAAQ,QAAQ,CAAC,CAAA;YAEjD,IAAI,aAAa,EAAE,CAAC;gBAClB,0EAA0E;gBAC1E,0EAA0E;gBAC1E,sEAAsE;gBACtE,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;gBACxC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBACxB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBACtB,SAAQ;YACV,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,uEAAuE;gBACvE,KAAK,CAAC,IAAI,CAAC,2BAA2B,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAA;gBAC9D,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;gBACpE,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;gBAC1C,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YAC3B,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAA;YACvF,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;YAC9C,KAAK,CAAC,IAAI,CACR,0FAA0F,CAC3F,CAAA;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;YAC5C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;YACxC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACzB,KAAK,CAAC,IAAI,CACR,uDAAuD,QAAQ,cAAc,SAAS,IAAI,CAC3F,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;YAC/D,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;YAClE,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;YACtF,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;YACpC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,GAAG,CAAC,CAAA;YAC9C,KAAK,CAAC,IAAI,CAAC,2BAA2B,QAAQ,IAAI,CAAC,CAAA;YACnD,KAAK,CAAC,IAAI,CAAC,6BAA6B,SAAS,IAAI,CAAC,CAAA;YACtD,KAAK,CAAC,IAAI,CACR,oFAAoF,CACrF,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC5B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACzB,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;YAC1C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;YACtC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACxB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAsB,EACtB,UAAkB,EAClB,YAAqB;IAErB,MAAM,UAAU,GAAG,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAEjE,0BAA0B;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;AACnD,CAAC"}
|