@zenstackhq/testtools 1.0.0-alpha.99 → 1.0.0-beta.1
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/package.json +4 -4
- package/package.template.json +1 -1
- package/schema.d.ts +17 -2
- package/schema.js +68 -18
- package/schema.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zenstackhq/testtools",
|
|
3
|
-
"version": "1.0.0-
|
|
3
|
+
"version": "1.0.0-beta.1",
|
|
4
4
|
"description": "ZenStack Test Tools",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"@prisma/internals": "^4.7.1",
|
|
17
17
|
"prisma": "~4.7.0",
|
|
18
18
|
"tmp": "^0.2.1",
|
|
19
|
-
"@zenstackhq/
|
|
20
|
-
"
|
|
21
|
-
"
|
|
19
|
+
"@zenstackhq/language": "1.0.0-beta.1",
|
|
20
|
+
"@zenstackhq/runtime": "1.0.0-beta.1",
|
|
21
|
+
"zenstack": "1.0.0-beta.1"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/node": "^18.14.2",
|
package/package.template.json
CHANGED
package/schema.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type { DMMF } from '@prisma/generator-helper';
|
|
2
2
|
import type { Model } from '@zenstackhq/language/ast';
|
|
3
3
|
import { type AuthUser, type DbOperations } from '@zenstackhq/runtime';
|
|
4
|
+
/**
|
|
5
|
+
* Use it to represent multiple files in a single string like this
|
|
6
|
+
`schema.zmodel
|
|
7
|
+
import "user"
|
|
8
|
+
${FILE_SPLITTER}user.zmodel
|
|
9
|
+
import "schema"
|
|
10
|
+
model User {
|
|
11
|
+
...
|
|
12
|
+
}`
|
|
13
|
+
*/
|
|
14
|
+
export declare const FILE_SPLITTER = "#FILE_SPLITTER#";
|
|
4
15
|
export type WeakDbOperations = {
|
|
5
16
|
[key in keyof DbOperations]: (...args: any[]) => Promise<any>;
|
|
6
17
|
};
|
|
@@ -16,22 +27,26 @@ export type WeakDbClientContract = Record<string, WeakDbOperations> & {
|
|
|
16
27
|
export declare function run(cmd: string, env?: Record<string, string>, cwd?: string): void;
|
|
17
28
|
export declare function getWorkspaceRoot(start: string): string | undefined;
|
|
18
29
|
export declare function getWorkspaceNpmCacheFolder(start: string): string;
|
|
19
|
-
export declare function loadSchemaFromFile(schemaFile: string, addPrelude?: boolean, pushDb?: boolean): Promise<{
|
|
30
|
+
export declare function loadSchemaFromFile(schemaFile: string, addPrelude?: boolean, pushDb?: boolean, logPrismaQuery?: boolean): Promise<{
|
|
20
31
|
projectDir: string;
|
|
21
32
|
prisma: any;
|
|
22
33
|
withPolicy: (user?: AuthUser | undefined) => WeakDbClientContract;
|
|
23
34
|
withOmit: () => WeakDbClientContract;
|
|
24
35
|
withPassword: () => WeakDbClientContract;
|
|
25
36
|
withPresets: (user?: AuthUser | undefined) => WeakDbClientContract;
|
|
37
|
+
policy: any;
|
|
38
|
+
modelMeta: any;
|
|
26
39
|
zodSchemas: any;
|
|
27
40
|
}>;
|
|
28
|
-
export declare function loadSchema(schema: string, addPrelude?: boolean, pushDb?: boolean, extraDependencies?: string[], compile?: boolean): Promise<{
|
|
41
|
+
export declare function loadSchema(schema: string, addPrelude?: boolean, pushDb?: boolean, extraDependencies?: string[], compile?: boolean, customSchemaFilePath?: string, logPrismaQuery?: boolean): Promise<{
|
|
29
42
|
projectDir: string;
|
|
30
43
|
prisma: any;
|
|
31
44
|
withPolicy: (user?: AuthUser) => WeakDbClientContract;
|
|
32
45
|
withOmit: () => WeakDbClientContract;
|
|
33
46
|
withPassword: () => WeakDbClientContract;
|
|
34
47
|
withPresets: (user?: AuthUser) => WeakDbClientContract;
|
|
48
|
+
policy: any;
|
|
49
|
+
modelMeta: any;
|
|
35
50
|
zodSchemas: any;
|
|
36
51
|
}>;
|
|
37
52
|
/**
|
package/schema.js
CHANGED
|
@@ -35,7 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.loadZModelAndDmmf = exports.loadSchema = exports.loadSchemaFromFile = exports.getWorkspaceNpmCacheFolder = exports.getWorkspaceRoot = exports.run = void 0;
|
|
38
|
+
exports.loadZModelAndDmmf = exports.loadSchema = exports.loadSchemaFromFile = exports.getWorkspaceNpmCacheFolder = exports.getWorkspaceRoot = exports.run = exports.FILE_SPLITTER = void 0;
|
|
39
39
|
const internals_1 = require("@prisma/internals");
|
|
40
40
|
const runtime_1 = require("@zenstackhq/runtime");
|
|
41
41
|
const child_process_1 = require("child_process");
|
|
@@ -44,6 +44,17 @@ const path = __importStar(require("path"));
|
|
|
44
44
|
const tmp_1 = __importDefault(require("tmp"));
|
|
45
45
|
const cli_util_1 = require("zenstack/cli/cli-util");
|
|
46
46
|
const prisma_1 = __importDefault(require("zenstack/plugins/prisma"));
|
|
47
|
+
/**
|
|
48
|
+
* Use it to represent multiple files in a single string like this
|
|
49
|
+
`schema.zmodel
|
|
50
|
+
import "user"
|
|
51
|
+
${FILE_SPLITTER}user.zmodel
|
|
52
|
+
import "schema"
|
|
53
|
+
model User {
|
|
54
|
+
...
|
|
55
|
+
}`
|
|
56
|
+
*/
|
|
57
|
+
exports.FILE_SPLITTER = '#FILE_SPLITTER#';
|
|
47
58
|
function run(cmd, env, cwd) {
|
|
48
59
|
(0, child_process_1.execSync)(cmd, {
|
|
49
60
|
stdio: 'pipe',
|
|
@@ -100,32 +111,69 @@ plugin zod {
|
|
|
100
111
|
output = '.zenstack/zod'
|
|
101
112
|
}
|
|
102
113
|
`;
|
|
103
|
-
function loadSchemaFromFile(schemaFile, addPrelude = true, pushDb = true) {
|
|
114
|
+
function loadSchemaFromFile(schemaFile, addPrelude = true, pushDb = true, logPrismaQuery = false) {
|
|
104
115
|
return __awaiter(this, void 0, void 0, function* () {
|
|
105
116
|
const content = fs.readFileSync(schemaFile, { encoding: 'utf-8' });
|
|
106
|
-
return loadSchema(content, addPrelude, pushDb);
|
|
117
|
+
return loadSchema(content, addPrelude, pushDb, [], false, undefined, logPrismaQuery);
|
|
107
118
|
});
|
|
108
119
|
}
|
|
109
120
|
exports.loadSchemaFromFile = loadSchemaFromFile;
|
|
110
|
-
function loadSchema(schema, addPrelude = true, pushDb = true, extraDependencies = [], compile = false) {
|
|
121
|
+
function loadSchema(schema, addPrelude = true, pushDb = true, extraDependencies = [], compile = false, customSchemaFilePath, logPrismaQuery = false) {
|
|
111
122
|
return __awaiter(this, void 0, void 0, function* () {
|
|
112
|
-
const { name: projectRoot } = tmp_1.default.dirSync();
|
|
123
|
+
const { name: projectRoot } = tmp_1.default.dirSync({ unsafeCleanup: true });
|
|
113
124
|
const root = getWorkspaceRoot(__dirname);
|
|
114
125
|
if (!root) {
|
|
115
126
|
throw new Error('Could not find workspace root');
|
|
116
127
|
}
|
|
117
|
-
console.log('Workspace root:', root);
|
|
118
128
|
const pkgContent = fs.readFileSync(path.join(__dirname, 'package.template.json'), { encoding: 'utf-8' });
|
|
119
129
|
fs.writeFileSync(path.join(projectRoot, 'package.json'), pkgContent.replaceAll('<root>', root));
|
|
120
130
|
const npmrcContent = fs.readFileSync(path.join(__dirname, '.npmrc.template'), { encoding: 'utf-8' });
|
|
121
131
|
fs.writeFileSync(path.join(projectRoot, '.npmrc'), npmrcContent.replaceAll('<root>', root));
|
|
122
132
|
console.log('Workdir:', projectRoot);
|
|
123
133
|
process.chdir(projectRoot);
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
|
|
134
|
+
let zmodelPath = path.join(projectRoot, 'schema.zmodel');
|
|
135
|
+
const files = schema.split(exports.FILE_SPLITTER);
|
|
136
|
+
if (files.length > 1) {
|
|
137
|
+
// multiple files
|
|
138
|
+
files.forEach((file, index) => {
|
|
139
|
+
//first line is the file name
|
|
140
|
+
const firstLine = file.indexOf('\n');
|
|
141
|
+
const fileName = file.substring(0, firstLine).trim();
|
|
142
|
+
let fileContent = file.substring(firstLine + 1);
|
|
143
|
+
if (index === 0) {
|
|
144
|
+
// The first file is the main schema file
|
|
145
|
+
zmodelPath = path.join(projectRoot, fileName);
|
|
146
|
+
if (addPrelude) {
|
|
147
|
+
// plugin need to be added after import statement
|
|
148
|
+
fileContent = `${fileContent}\n${MODEL_PRELUDE}`;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
fileContent = fileContent.replaceAll('$projectRoot', projectRoot);
|
|
152
|
+
const filePath = path.join(projectRoot, fileName);
|
|
153
|
+
fs.writeFileSync(filePath, fileContent);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
schema = schema.replaceAll('$projectRoot', projectRoot);
|
|
158
|
+
const content = addPrelude ? `${MODEL_PRELUDE}\n${schema}` : schema;
|
|
159
|
+
if (customSchemaFilePath) {
|
|
160
|
+
zmodelPath = path.join(projectRoot, customSchemaFilePath);
|
|
161
|
+
fs.mkdirSync(path.dirname(zmodelPath), { recursive: true });
|
|
162
|
+
fs.writeFileSync(zmodelPath, content);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
fs.writeFileSync('schema.zmodel', content);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
127
168
|
run('npm install');
|
|
128
|
-
|
|
169
|
+
if (customSchemaFilePath) {
|
|
170
|
+
run(`npx zenstack generate --schema ${zmodelPath} --no-dependency-check`, {
|
|
171
|
+
NODE_PATH: './node_modules',
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
run('npx zenstack generate --no-dependency-check', { NODE_PATH: './node_modules' });
|
|
176
|
+
}
|
|
129
177
|
if (pushDb) {
|
|
130
178
|
run('npx prisma db push');
|
|
131
179
|
}
|
|
@@ -140,16 +188,18 @@ function loadSchema(schema, addPrelude = true, pushDb = true, extraDependencies
|
|
|
140
188
|
run('npx tsc --init');
|
|
141
189
|
run('npx tsc --project tsconfig.json');
|
|
142
190
|
}
|
|
143
|
-
const policy = require(path.join(
|
|
144
|
-
const modelMeta = require(path.join(
|
|
145
|
-
const zodSchemas = require(path.join(
|
|
191
|
+
const policy = require(path.join(path.dirname(zmodelPath), '.zenstack/policy')).default;
|
|
192
|
+
const modelMeta = require(path.join(path.dirname(zmodelPath), '.zenstack/model-meta')).default;
|
|
193
|
+
const zodSchemas = require(path.join(path.dirname(zmodelPath), '.zenstack/zod'));
|
|
146
194
|
return {
|
|
147
195
|
projectDir: projectRoot,
|
|
148
196
|
prisma,
|
|
149
|
-
withPolicy: (user) => (0, runtime_1.withPolicy)(prisma, { user }, policy, modelMeta),
|
|
150
|
-
withOmit: () => (0, runtime_1.withOmit)(prisma, modelMeta),
|
|
151
|
-
withPassword: () => (0, runtime_1.withPassword)(prisma, modelMeta),
|
|
152
|
-
withPresets: (user) => (0, runtime_1.withPresets)(prisma, { user }, policy, modelMeta),
|
|
197
|
+
withPolicy: (user) => (0, runtime_1.withPolicy)(prisma, { user }, { policy, modelMeta, logPrismaQuery }),
|
|
198
|
+
withOmit: () => (0, runtime_1.withOmit)(prisma, { modelMeta }),
|
|
199
|
+
withPassword: () => (0, runtime_1.withPassword)(prisma, { modelMeta }),
|
|
200
|
+
withPresets: (user) => (0, runtime_1.withPresets)(prisma, { user }, { policy, modelMeta, logPrismaQuery }),
|
|
201
|
+
policy,
|
|
202
|
+
modelMeta,
|
|
153
203
|
zodSchemas,
|
|
154
204
|
};
|
|
155
205
|
});
|
|
@@ -172,7 +222,7 @@ function loadZModelAndDmmf(content) {
|
|
|
172
222
|
fs.writeFileSync(modelFile, `${prelude}\n${content}`);
|
|
173
223
|
const model = yield (0, cli_util_1.loadDocument)(modelFile);
|
|
174
224
|
const { name: prismaFile } = tmp_1.default.fileSync({ postfix: '.prisma' });
|
|
175
|
-
yield (0, prisma_1.default)(model, { schemaPath: modelFile, output: prismaFile, generateClient: false });
|
|
225
|
+
yield (0, prisma_1.default)(model, { schemaPath: modelFile, name: 'Prisma', output: prismaFile, generateClient: false });
|
|
176
226
|
const prismaContent = fs.readFileSync(prismaFile, { encoding: 'utf-8' });
|
|
177
227
|
const dmmf = yield (0, internals_1.getDMMF)({ datamodel: prismaContent });
|
|
178
228
|
return { model, dmmf, modelFile };
|
package/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,iDAA4C;AAE5C,iDAAwH;AACxH,iDAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAC7B,8CAAsB;AACtB,oDAAqD;AACrD,qEAAmD;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,iDAA4C;AAE5C,iDAAwH;AACxH,iDAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAC7B,8CAAsB;AACtB,oDAAqD;AACrD,qEAAmD;AAEnD;;;;;;;;;EASE;AACW,QAAA,aAAa,GAAG,iBAAiB,CAAC;AAgB/C,SAAgB,GAAG,CAAC,GAAW,EAAE,GAA4B,EAAE,GAAY;IACvE,IAAA,wBAAQ,EAAC,GAAG,EAAE;QACV,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,OAAO;QACjB,GAAG,gDAAO,OAAO,CAAC,GAAG,KAAE,YAAY,EAAE,GAAG,KAAK,GAAG,CAAE;QAClD,GAAG;KACN,CAAC,CAAC;AACP,CAAC;AAPD,kBAOC;AAED,SAAS,aAAa,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAa;IAC1C,IAAI,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE;QACzB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,EAAE;YACvD,OAAO,IAAI,CAAC;SACf;aAAM;YACH,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SAC5C;KACJ;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAVD,4CAUC;AAED,SAAgB,0BAA0B,CAAC,KAAa;IACpD,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;AAC/D,CAAC;AAHD,gEAGC;AAED,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBrB,CAAC;AAEF,SAAsB,kBAAkB,CAAC,UAAkB,EAAE,UAAU,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,GAAG,KAAK;;QACjH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IACzF,CAAC;CAAA;AAHD,gDAGC;AAED,SAAsB,UAAU,CAC5B,MAAc,EACd,UAAU,GAAG,IAAI,EACjB,MAAM,GAAG,IAAI,EACb,oBAA8B,EAAE,EAChC,OAAO,GAAG,KAAK,EACf,oBAA6B,EAC7B,cAAc,GAAG,KAAK;;QAEtB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,aAAG,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnE,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEzC,IAAI,CAAC,IAAI,EAAE;YACP,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SACpD;QAED,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACzG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAEhG,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACrG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAE5F,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE3B,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAa,CAAC,CAAC;QAE1C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,iBAAiB;YACjB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC1B,6BAA6B;gBAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrD,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBAChD,IAAI,KAAK,KAAK,CAAC,EAAE;oBACb,yCAAyC;oBACzC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;oBAC9C,IAAI,UAAU,EAAE;wBACZ,iDAAiD;wBACjD,WAAW,GAAG,GAAG,WAAW,KAAK,aAAa,EAAE,CAAC;qBACpD;iBACJ;gBAED,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gBAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBAClD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;SACN;aAAM;YACH,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACpE,IAAI,oBAAoB,EAAE;gBACtB,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;gBAC1D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;aACzC;iBAAM;gBACH,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;aAC9C;SACJ;QAED,GAAG,CAAC,aAAa,CAAC,CAAC;QAEnB,IAAI,oBAAoB,EAAE;YACtB,GAAG,CAAC,kCAAkC,UAAU,wBAAwB,EAAE;gBACtE,SAAS,EAAE,gBAAgB;aAC9B,CAAC,CAAC;SACN;aAAM;YACH,GAAG,CAAC,6CAA6C,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;SACvF;QAED,IAAI,MAAM,EAAE;YACR,GAAG,CAAC,oBAAoB,CAAC,CAAC;SAC7B;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC,CAAC,YAAY,CAAC;QACjG,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAEpE,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACtB,GAAG,CAAC,iCAAiC,CAAC,CAAC;SAC1C;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;QACxF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC;QAC/F,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;QAEjF,OAAO;YACH,UAAU,EAAE,WAAW;YACvB,MAAM;YACN,UAAU,EAAE,CAAC,IAAe,EAAE,EAAE,CAC5B,IAAA,oBAAU,EAAuB,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;YAC7F,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAA,kBAAQ,EAAuB,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC;YACrE,YAAY,EAAE,GAAG,EAAE,CAAC,IAAA,sBAAY,EAAuB,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC;YAC7E,WAAW,EAAE,CAAC,IAAe,EAAE,EAAE,CAC7B,IAAA,qBAAW,EAAuB,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;YAC9F,MAAM;YACN,SAAS;YACT,UAAU;SACb,CAAC;IACN,CAAC;CAAA;AA3GD,gCA2GC;AAED;;;;GAIG;AACH,SAAsB,iBAAiB,CACnC,OAAe;;QAEf,MAAM,OAAO,GAAG;;;;;CAKnB,CAAC;QAEE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,aAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACjE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,MAAM,IAAA,uBAAY,EAAC,SAAS,CAAC,CAAC;QAE5C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,aAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,MAAM,IAAA,gBAAY,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhH,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAEzE,MAAM,IAAI,GAAG,MAAM,IAAA,mBAAO,EAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtC,CAAC;CAAA;AAtBD,8CAsBC"}
|