@zenstackhq/testtools 1.0.0-beta.9 → 3.0.0-alpha.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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2022 ZenStack
3
+ Copyright (c) 2025 ZenStack
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/dist/index.cjs ADDED
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/index.ts
32
+ var src_exports = {};
33
+ __export(src_exports, {
34
+ generateTsSchema: () => generateTsSchema,
35
+ generateTsSchemaFromFile: () => generateTsSchemaFromFile
36
+ });
37
+ module.exports = __toCommonJS(src_exports);
38
+
39
+ // src/schema.ts
40
+ var import_sdk = require("@zenstackhq/sdk");
41
+ var import_glob = require("glob");
42
+ var import_node_child_process = require("child_process");
43
+ var import_node_fs = __toESM(require("fs"), 1);
44
+ var import_node_path = __toESM(require("path"), 1);
45
+ var import_tmp = __toESM(require("tmp"), 1);
46
+ var import_ts_pattern = require("ts-pattern");
47
+ function makePrelude(provider, dbName) {
48
+ return (0, import_ts_pattern.match)(provider).with("sqlite", () => {
49
+ return `
50
+ datasource db {
51
+ provider = 'sqlite'
52
+ url = '${dbName ?? ":memory:"}'
53
+ }
54
+ `;
55
+ }).with("postgresql", () => {
56
+ return `
57
+ datasource db {
58
+ provider = 'postgresql'
59
+ url = 'postgres://postgres:postgres@localhost:5432/${dbName}'
60
+ }
61
+ `;
62
+ }).exhaustive();
63
+ }
64
+ __name(makePrelude, "makePrelude");
65
+ async function generateTsSchema(schemaText, provider = "sqlite", dbName) {
66
+ const { name: workDir } = import_tmp.default.dirSync({
67
+ unsafeCleanup: true
68
+ });
69
+ console.log(`Working directory: ${workDir}`);
70
+ const zmodelPath = import_node_path.default.join(workDir, "schema.zmodel");
71
+ const noPrelude = schemaText.includes("datasource ");
72
+ import_node_fs.default.writeFileSync(zmodelPath, `${noPrelude ? "" : makePrelude(provider, dbName)}
73
+
74
+ ${schemaText}`);
75
+ const pluginModelFiles = import_glob.glob.sync(import_node_path.default.resolve(__dirname, "../../runtime/src/plugins/**/plugin.zmodel"));
76
+ const generator = new import_sdk.TsSchemaGenerator();
77
+ const tsPath = import_node_path.default.join(workDir, "schema.ts");
78
+ await generator.generate(zmodelPath, pluginModelFiles, tsPath);
79
+ import_node_fs.default.mkdirSync(import_node_path.default.join(workDir, "node_modules"));
80
+ const nodeModules = import_node_fs.default.readdirSync(import_node_path.default.join(__dirname, "../node_modules"));
81
+ for (const entry of nodeModules) {
82
+ if (entry.startsWith("@zenstackhq")) {
83
+ continue;
84
+ }
85
+ import_node_fs.default.symlinkSync(import_node_path.default.join(__dirname, "../node_modules", entry), import_node_path.default.join(workDir, "node_modules", entry), "dir");
86
+ }
87
+ const zenstackPackages = [
88
+ "language",
89
+ "sdk",
90
+ "runtime"
91
+ ];
92
+ import_node_fs.default.mkdirSync(import_node_path.default.join(workDir, "node_modules/@zenstackhq"));
93
+ for (const pkg of zenstackPackages) {
94
+ import_node_fs.default.symlinkSync(import_node_path.default.join(__dirname, `../../${pkg}/dist`), import_node_path.default.join(workDir, `node_modules/@zenstackhq/${pkg}`), "dir");
95
+ }
96
+ import_node_fs.default.writeFileSync(import_node_path.default.join(workDir, "package.json"), JSON.stringify({
97
+ name: "test",
98
+ version: "1.0.0",
99
+ type: "module"
100
+ }));
101
+ import_node_fs.default.writeFileSync(import_node_path.default.join(workDir, "tsconfig.json"), JSON.stringify({
102
+ compilerOptions: {
103
+ module: "ESNext",
104
+ target: "ESNext",
105
+ moduleResolution: "Bundler",
106
+ esModuleInterop: true,
107
+ skipLibCheck: true
108
+ }
109
+ }));
110
+ (0, import_node_child_process.execSync)("npx tsc", {
111
+ cwd: workDir,
112
+ stdio: "inherit"
113
+ });
114
+ const module2 = await import(import_node_path.default.join(workDir, "schema.js"));
115
+ return {
116
+ workDir,
117
+ schema: module2.schema
118
+ };
119
+ }
120
+ __name(generateTsSchema, "generateTsSchema");
121
+ function generateTsSchemaFromFile(filePath) {
122
+ const schemaText = import_node_fs.default.readFileSync(filePath, "utf8");
123
+ return generateTsSchema(schemaText);
124
+ }
125
+ __name(generateTsSchemaFromFile, "generateTsSchemaFromFile");
126
+ // Annotate the CommonJS export names for ESM import in node:
127
+ 0 && (module.exports = {
128
+ generateTsSchema,
129
+ generateTsSchemaFromFile
130
+ });
131
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/schema.ts"],"sourcesContent":["export * from './schema';\n","import { TsSchemaGenerator } from '@zenstackhq/sdk';\nimport type { SchemaDef } from '@zenstackhq/sdk/schema';\nimport { glob } from 'glob';\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport tmp from 'tmp';\nimport { match } from 'ts-pattern';\n\nfunction makePrelude(provider: 'sqlite' | 'postgresql', dbName?: string) {\n return match(provider)\n .with('sqlite', () => {\n return `\ndatasource db {\n provider = 'sqlite'\n url = '${dbName ?? ':memory:'}'\n}\n`;\n })\n .with('postgresql', () => {\n return `\ndatasource db {\n provider = 'postgresql'\n url = 'postgres://postgres:postgres@localhost:5432/${dbName}'\n}\n`;\n })\n .exhaustive();\n}\n\nexport async function generateTsSchema(\n schemaText: string,\n provider: 'sqlite' | 'postgresql' = 'sqlite',\n dbName?: string\n) {\n const { name: workDir } = tmp.dirSync({ unsafeCleanup: true });\n console.log(`Working directory: ${workDir}`);\n\n const zmodelPath = path.join(workDir, 'schema.zmodel');\n const noPrelude = schemaText.includes('datasource ');\n fs.writeFileSync(\n zmodelPath,\n `${noPrelude ? '' : makePrelude(provider, dbName)}\\n\\n${schemaText}`\n );\n\n const pluginModelFiles = glob.sync(\n path.resolve(__dirname, '../../runtime/src/plugins/**/plugin.zmodel')\n );\n\n const generator = new TsSchemaGenerator();\n const tsPath = path.join(workDir, 'schema.ts');\n await generator.generate(zmodelPath, pluginModelFiles, tsPath);\n\n fs.mkdirSync(path.join(workDir, 'node_modules'));\n\n // symlink all entries from \"node_modules\"\n const nodeModules = fs.readdirSync(path.join(__dirname, '../node_modules'));\n for (const entry of nodeModules) {\n if (entry.startsWith('@zenstackhq')) {\n continue;\n }\n fs.symlinkSync(\n path.join(__dirname, '../node_modules', entry),\n path.join(workDir, 'node_modules', entry),\n 'dir'\n );\n }\n\n // in addition, symlink zenstack packages\n const zenstackPackages = ['language', 'sdk', 'runtime'];\n fs.mkdirSync(path.join(workDir, 'node_modules/@zenstackhq'));\n for (const pkg of zenstackPackages) {\n fs.symlinkSync(\n path.join(__dirname, `../../${pkg}/dist`),\n path.join(workDir, `node_modules/@zenstackhq/${pkg}`),\n 'dir'\n );\n }\n\n fs.writeFileSync(\n path.join(workDir, 'package.json'),\n JSON.stringify({\n name: 'test',\n version: '1.0.0',\n type: 'module',\n })\n );\n\n fs.writeFileSync(\n path.join(workDir, 'tsconfig.json'),\n JSON.stringify({\n compilerOptions: {\n module: 'ESNext',\n target: 'ESNext',\n moduleResolution: 'Bundler',\n esModuleInterop: true,\n skipLibCheck: true,\n },\n })\n );\n\n // compile the generated TS schema\n execSync('npx tsc', {\n cwd: workDir,\n stdio: 'inherit',\n });\n\n // load the schema module\n const module = await import(path.join(workDir, 'schema.js'));\n return { workDir, schema: module.schema as SchemaDef };\n}\n\nexport function generateTsSchemaFromFile(filePath: string) {\n const schemaText = fs.readFileSync(filePath, 'utf8');\n return generateTsSchema(schemaText);\n}\n"],"mappings":"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","names":["makePrelude","provider","dbName","match","with","exhaustive","generateTsSchema","schemaText","name","workDir","tmp","dirSync","unsafeCleanup","console","log","zmodelPath","path","join","noPrelude","includes","fs","writeFileSync","pluginModelFiles","glob","sync","resolve","__dirname","generator","TsSchemaGenerator","tsPath","generate","mkdirSync","nodeModules","readdirSync","entry","startsWith","symlinkSync","zenstackPackages","pkg","JSON","stringify","version","type","compilerOptions","module","target","moduleResolution","esModuleInterop","skipLibCheck","execSync","cwd","stdio","schema","generateTsSchemaFromFile","filePath","readFileSync"]}
@@ -0,0 +1,12 @@
1
+ import { SchemaDef } from '@zenstackhq/sdk/schema';
2
+
3
+ declare function generateTsSchema(schemaText: string, provider?: 'sqlite' | 'postgresql', dbName?: string): Promise<{
4
+ workDir: string;
5
+ schema: SchemaDef;
6
+ }>;
7
+ declare function generateTsSchemaFromFile(filePath: string): Promise<{
8
+ workDir: string;
9
+ schema: SchemaDef;
10
+ }>;
11
+
12
+ export { generateTsSchema, generateTsSchemaFromFile };
@@ -0,0 +1,12 @@
1
+ import { SchemaDef } from '@zenstackhq/sdk/schema';
2
+
3
+ declare function generateTsSchema(schemaText: string, provider?: 'sqlite' | 'postgresql', dbName?: string): Promise<{
4
+ workDir: string;
5
+ schema: SchemaDef;
6
+ }>;
7
+ declare function generateTsSchemaFromFile(filePath: string): Promise<{
8
+ workDir: string;
9
+ schema: SchemaDef;
10
+ }>;
11
+
12
+ export { generateTsSchema, generateTsSchemaFromFile };
package/dist/index.js ADDED
@@ -0,0 +1,95 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/schema.ts
5
+ import { TsSchemaGenerator } from "@zenstackhq/sdk";
6
+ import { glob } from "glob";
7
+ import { execSync } from "node:child_process";
8
+ import fs from "node:fs";
9
+ import path from "node:path";
10
+ import tmp from "tmp";
11
+ import { match } from "ts-pattern";
12
+ function makePrelude(provider, dbName) {
13
+ return match(provider).with("sqlite", () => {
14
+ return `
15
+ datasource db {
16
+ provider = 'sqlite'
17
+ url = '${dbName ?? ":memory:"}'
18
+ }
19
+ `;
20
+ }).with("postgresql", () => {
21
+ return `
22
+ datasource db {
23
+ provider = 'postgresql'
24
+ url = 'postgres://postgres:postgres@localhost:5432/${dbName}'
25
+ }
26
+ `;
27
+ }).exhaustive();
28
+ }
29
+ __name(makePrelude, "makePrelude");
30
+ async function generateTsSchema(schemaText, provider = "sqlite", dbName) {
31
+ const { name: workDir } = tmp.dirSync({
32
+ unsafeCleanup: true
33
+ });
34
+ console.log(`Working directory: ${workDir}`);
35
+ const zmodelPath = path.join(workDir, "schema.zmodel");
36
+ const noPrelude = schemaText.includes("datasource ");
37
+ fs.writeFileSync(zmodelPath, `${noPrelude ? "" : makePrelude(provider, dbName)}
38
+
39
+ ${schemaText}`);
40
+ const pluginModelFiles = glob.sync(path.resolve(__dirname, "../../runtime/src/plugins/**/plugin.zmodel"));
41
+ const generator = new TsSchemaGenerator();
42
+ const tsPath = path.join(workDir, "schema.ts");
43
+ await generator.generate(zmodelPath, pluginModelFiles, tsPath);
44
+ fs.mkdirSync(path.join(workDir, "node_modules"));
45
+ const nodeModules = fs.readdirSync(path.join(__dirname, "../node_modules"));
46
+ for (const entry of nodeModules) {
47
+ if (entry.startsWith("@zenstackhq")) {
48
+ continue;
49
+ }
50
+ fs.symlinkSync(path.join(__dirname, "../node_modules", entry), path.join(workDir, "node_modules", entry), "dir");
51
+ }
52
+ const zenstackPackages = [
53
+ "language",
54
+ "sdk",
55
+ "runtime"
56
+ ];
57
+ fs.mkdirSync(path.join(workDir, "node_modules/@zenstackhq"));
58
+ for (const pkg of zenstackPackages) {
59
+ fs.symlinkSync(path.join(__dirname, `../../${pkg}/dist`), path.join(workDir, `node_modules/@zenstackhq/${pkg}`), "dir");
60
+ }
61
+ fs.writeFileSync(path.join(workDir, "package.json"), JSON.stringify({
62
+ name: "test",
63
+ version: "1.0.0",
64
+ type: "module"
65
+ }));
66
+ fs.writeFileSync(path.join(workDir, "tsconfig.json"), JSON.stringify({
67
+ compilerOptions: {
68
+ module: "ESNext",
69
+ target: "ESNext",
70
+ moduleResolution: "Bundler",
71
+ esModuleInterop: true,
72
+ skipLibCheck: true
73
+ }
74
+ }));
75
+ execSync("npx tsc", {
76
+ cwd: workDir,
77
+ stdio: "inherit"
78
+ });
79
+ const module = await import(path.join(workDir, "schema.js"));
80
+ return {
81
+ workDir,
82
+ schema: module.schema
83
+ };
84
+ }
85
+ __name(generateTsSchema, "generateTsSchema");
86
+ function generateTsSchemaFromFile(filePath) {
87
+ const schemaText = fs.readFileSync(filePath, "utf8");
88
+ return generateTsSchema(schemaText);
89
+ }
90
+ __name(generateTsSchemaFromFile, "generateTsSchemaFromFile");
91
+ export {
92
+ generateTsSchema,
93
+ generateTsSchemaFromFile
94
+ };
95
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schema.ts"],"sourcesContent":["import { TsSchemaGenerator } from '@zenstackhq/sdk';\nimport type { SchemaDef } from '@zenstackhq/sdk/schema';\nimport { glob } from 'glob';\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport tmp from 'tmp';\nimport { match } from 'ts-pattern';\n\nfunction makePrelude(provider: 'sqlite' | 'postgresql', dbName?: string) {\n return match(provider)\n .with('sqlite', () => {\n return `\ndatasource db {\n provider = 'sqlite'\n url = '${dbName ?? ':memory:'}'\n}\n`;\n })\n .with('postgresql', () => {\n return `\ndatasource db {\n provider = 'postgresql'\n url = 'postgres://postgres:postgres@localhost:5432/${dbName}'\n}\n`;\n })\n .exhaustive();\n}\n\nexport async function generateTsSchema(\n schemaText: string,\n provider: 'sqlite' | 'postgresql' = 'sqlite',\n dbName?: string\n) {\n const { name: workDir } = tmp.dirSync({ unsafeCleanup: true });\n console.log(`Working directory: ${workDir}`);\n\n const zmodelPath = path.join(workDir, 'schema.zmodel');\n const noPrelude = schemaText.includes('datasource ');\n fs.writeFileSync(\n zmodelPath,\n `${noPrelude ? '' : makePrelude(provider, dbName)}\\n\\n${schemaText}`\n );\n\n const pluginModelFiles = glob.sync(\n path.resolve(__dirname, '../../runtime/src/plugins/**/plugin.zmodel')\n );\n\n const generator = new TsSchemaGenerator();\n const tsPath = path.join(workDir, 'schema.ts');\n await generator.generate(zmodelPath, pluginModelFiles, tsPath);\n\n fs.mkdirSync(path.join(workDir, 'node_modules'));\n\n // symlink all entries from \"node_modules\"\n const nodeModules = fs.readdirSync(path.join(__dirname, '../node_modules'));\n for (const entry of nodeModules) {\n if (entry.startsWith('@zenstackhq')) {\n continue;\n }\n fs.symlinkSync(\n path.join(__dirname, '../node_modules', entry),\n path.join(workDir, 'node_modules', entry),\n 'dir'\n );\n }\n\n // in addition, symlink zenstack packages\n const zenstackPackages = ['language', 'sdk', 'runtime'];\n fs.mkdirSync(path.join(workDir, 'node_modules/@zenstackhq'));\n for (const pkg of zenstackPackages) {\n fs.symlinkSync(\n path.join(__dirname, `../../${pkg}/dist`),\n path.join(workDir, `node_modules/@zenstackhq/${pkg}`),\n 'dir'\n );\n }\n\n fs.writeFileSync(\n path.join(workDir, 'package.json'),\n JSON.stringify({\n name: 'test',\n version: '1.0.0',\n type: 'module',\n })\n );\n\n fs.writeFileSync(\n path.join(workDir, 'tsconfig.json'),\n JSON.stringify({\n compilerOptions: {\n module: 'ESNext',\n target: 'ESNext',\n moduleResolution: 'Bundler',\n esModuleInterop: true,\n skipLibCheck: true,\n },\n })\n );\n\n // compile the generated TS schema\n execSync('npx tsc', {\n cwd: workDir,\n stdio: 'inherit',\n });\n\n // load the schema module\n const module = await import(path.join(workDir, 'schema.js'));\n return { workDir, schema: module.schema as SchemaDef };\n}\n\nexport function generateTsSchemaFromFile(filePath: string) {\n const schemaText = fs.readFileSync(filePath, 'utf8');\n return generateTsSchema(schemaText);\n}\n"],"mappings":";;;;AAAA,SAASA,yBAAyB;AAElC,SAASC,YAAY;AACrB,SAASC,gBAAgB;AACzB,OAAOC,QAAQ;AACf,OAAOC,UAAU;AACjB,OAAOC,SAAS;AAChB,SAASC,aAAa;AAEtB,SAASC,YAAYC,UAAmCC,QAAe;AACnE,SAAOC,MAAMF,QAAAA,EACRG,KAAK,UAAU,MAAA;AACZ,WAAO;;;aAGNF,UAAU,UAAA;;;EAGf,CAAA,EACCE,KAAK,cAAc,MAAA;AAChB,WAAO;;;yDAGsCF,MAAAA;;;EAGjD,CAAA,EACCG,WAAU;AACnB;AAnBSL;AAqBT,eAAsBM,iBAClBC,YACAN,WAAoC,UACpCC,QAAe;AAEf,QAAM,EAAEM,MAAMC,QAAO,IAAKC,IAAIC,QAAQ;IAAEC,eAAe;EAAK,CAAA;AAC5DC,UAAQC,IAAI,sBAAsBL,OAAAA,EAAS;AAE3C,QAAMM,aAAaC,KAAKC,KAAKR,SAAS,eAAA;AACtC,QAAMS,YAAYX,WAAWY,SAAS,aAAA;AACtCC,KAAGC,cACCN,YACA,GAAGG,YAAY,KAAKlB,YAAYC,UAAUC,MAAAA,CAAAA;;EAAcK,UAAAA,EAAY;AAGxE,QAAMe,mBAAmBC,KAAKC,KAC1BR,KAAKS,QAAQC,WAAW,4CAAA,CAAA;AAG5B,QAAMC,YAAY,IAAIC,kBAAAA;AACtB,QAAMC,SAASb,KAAKC,KAAKR,SAAS,WAAA;AAClC,QAAMkB,UAAUG,SAASf,YAAYO,kBAAkBO,MAAAA;AAEvDT,KAAGW,UAAUf,KAAKC,KAAKR,SAAS,cAAA,CAAA;AAGhC,QAAMuB,cAAcZ,GAAGa,YAAYjB,KAAKC,KAAKS,WAAW,iBAAA,CAAA;AACxD,aAAWQ,SAASF,aAAa;AAC7B,QAAIE,MAAMC,WAAW,aAAA,GAAgB;AACjC;IACJ;AACAf,OAAGgB,YACCpB,KAAKC,KAAKS,WAAW,mBAAmBQ,KAAAA,GACxClB,KAAKC,KAAKR,SAAS,gBAAgByB,KAAAA,GACnC,KAAA;EAER;AAGA,QAAMG,mBAAmB;IAAC;IAAY;IAAO;;AAC7CjB,KAAGW,UAAUf,KAAKC,KAAKR,SAAS,0BAAA,CAAA;AAChC,aAAW6B,OAAOD,kBAAkB;AAChCjB,OAAGgB,YACCpB,KAAKC,KAAKS,WAAW,SAASY,GAAAA,OAAU,GACxCtB,KAAKC,KAAKR,SAAS,4BAA4B6B,GAAAA,EAAK,GACpD,KAAA;EAER;AAEAlB,KAAGC,cACCL,KAAKC,KAAKR,SAAS,cAAA,GACnB8B,KAAKC,UAAU;IACXhC,MAAM;IACNiC,SAAS;IACTC,MAAM;EACV,CAAA,CAAA;AAGJtB,KAAGC,cACCL,KAAKC,KAAKR,SAAS,eAAA,GACnB8B,KAAKC,UAAU;IACXG,iBAAiB;MACbC,QAAQ;MACRC,QAAQ;MACRC,kBAAkB;MAClBC,iBAAiB;MACjBC,cAAc;IAClB;EACJ,CAAA,CAAA;AAIJC,WAAS,WAAW;IAChBC,KAAKzC;IACL0C,OAAO;EACX,CAAA;AAGA,QAAMP,SAAS,MAAM,OAAO5B,KAAKC,KAAKR,SAAS,WAAA;AAC/C,SAAO;IAAEA;IAAS2C,QAAQR,OAAOQ;EAAoB;AACzD;AAhFsB9C;AAkFf,SAAS+C,yBAAyBC,UAAgB;AACrD,QAAM/C,aAAaa,GAAGmC,aAAaD,UAAU,MAAA;AAC7C,SAAOhD,iBAAiBC,UAAAA;AAC5B;AAHgB8C;","names":["TsSchemaGenerator","glob","execSync","fs","path","tmp","match","makePrelude","provider","dbName","match","with","exhaustive","generateTsSchema","schemaText","name","workDir","tmp","dirSync","unsafeCleanup","console","log","zmodelPath","path","join","noPrelude","includes","fs","writeFileSync","pluginModelFiles","glob","sync","resolve","__dirname","generator","TsSchemaGenerator","tsPath","generate","mkdirSync","nodeModules","readdirSync","entry","startsWith","symlinkSync","zenstackPackages","pkg","JSON","stringify","version","type","compilerOptions","module","target","moduleResolution","esModuleInterop","skipLibCheck","execSync","cwd","stdio","schema","generateTsSchemaFromFile","filePath","readFileSync"]}
package/package.json CHANGED
@@ -1,35 +1,48 @@
1
1
  {
2
2
  "name": "@zenstackhq/testtools",
3
- "version": "1.0.0-beta.9",
3
+ "version": "3.0.0-alpha.1",
4
4
  "description": "ZenStack Test Tools",
5
- "main": "index.js",
6
- "publishConfig": {
7
- "directory": "dist",
8
- "linkDirectory": true
9
- },
5
+ "type": "module",
10
6
  "keywords": [],
11
- "author": "",
7
+ "author": "ZenStack Team",
12
8
  "license": "MIT",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "exports": {
13
+ ".": {
14
+ "import": {
15
+ "types": "./dist/index.d.ts",
16
+ "default": "./dist/index.js"
17
+ },
18
+ "require": {
19
+ "types": "./dist/index.d.cts",
20
+ "default": "./dist/index.cjs"
21
+ }
22
+ }
23
+ },
13
24
  "dependencies": {
14
- "@prisma/generator-helper": "^5.0.0",
15
- "json5": "^2.2.3",
16
- "tmp": "^0.2.1",
17
- "@zenstackhq/language": "1.0.0-beta.9",
18
- "@zenstackhq/runtime": "1.0.0-beta.9",
19
- "@zenstackhq/sdk": "1.0.0-beta.9",
20
- "zenstack": "1.0.0-beta.9"
25
+ "@types/node": "^20.0.0",
26
+ "glob": "^11.0.2",
27
+ "tmp": "^0.2.3",
28
+ "ts-pattern": "^5.7.1",
29
+ "typescript": "^5.8.3",
30
+ "prisma": "^6.9.0",
31
+ "@zenstackhq/language": "3.0.0-alpha.1",
32
+ "@zenstackhq/sdk": "3.0.0-alpha.1"
33
+ },
34
+ "peerDependencies": {
35
+ "better-sqlite3": "^11.8.1",
36
+ "pg": "^8.13.1"
21
37
  },
22
38
  "devDependencies": {
23
- "@types/node": "^18.0.0",
24
- "@types/tmp": "^0.2.3",
25
- "copyfiles": "^2.4.1",
26
- "rimraf": "^3.0.2",
27
- "typescript": "^4.9.5"
39
+ "@types/tmp": "^0.2.6"
28
40
  },
29
41
  "scripts": {
30
- "clean": "rimraf dist",
42
+ "build": "tsup-node",
43
+ "watch": "tsup-node --watch",
31
44
  "lint": "eslint src --ext ts",
32
- "build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist && copyfiles -u 1 src/package.template.json src/.npmrc.template dist && pnpm pack dist --pack-destination '../../../.build'",
33
- "watch": "tsc --watch"
45
+ "test": "vitest",
46
+ "pack": "pnpm pack"
34
47
  }
35
48
  }
package/.npmrc.template DELETED
@@ -1 +0,0 @@
1
- cache=<root>/.npmcache
package/README.md DELETED
@@ -1 +0,0 @@
1
- # ZenStack Test Tools
package/index.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './schema';
package/index.js DELETED
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./schema"), exports);
18
- //# sourceMappingURL=index.js.map
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB"}
@@ -1,20 +0,0 @@
1
- {
2
- "name": "test-run",
3
- "version": "1.0.0",
4
- "description": "",
5
- "main": "index.js",
6
- "keywords": [],
7
- "author": "",
8
- "license": "ISC",
9
- "dependencies": {
10
- "@prisma/client": "^4.0.0",
11
- "@zenstackhq/runtime": "file:<root>/packages/runtime/dist",
12
- "@zenstackhq/swr": "file:<root>/packages/plugins/swr/dist",
13
- "@zenstackhq/trpc": "file:<root>/packages/plugins/trpc/dist",
14
- "@zenstackhq/openapi": "file:<root>/packages/plugins/openapi/dist",
15
- "prisma": "^4.0.0",
16
- "typescript": "^4.9.3",
17
- "zenstack": "file:<root>/packages/schema/dist",
18
- "zod": "3.21.1"
19
- }
20
- }
package/schema.d.ts DELETED
@@ -1,70 +0,0 @@
1
- import type { DMMF } from '@prisma/generator-helper';
2
- import type { Model } from '@zenstackhq/language/ast';
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#";
15
- export type WeakDbOperations = {
16
- [key in keyof DbOperations]: (...args: any[]) => Promise<any>;
17
- };
18
- export type WeakDbClientContract = Record<string, WeakDbOperations> & {
19
- $on(eventType: any, callback: (event: any) => void): void;
20
- $use(cb: any): void;
21
- $disconnect: () => Promise<void>;
22
- $transaction: (input: ((tx: WeakDbClientContract) => Promise<any>) | any[], options?: any) => Promise<any>;
23
- $queryRaw: (query: TemplateStringsArray, ...args: any[]) => Promise<any>;
24
- $executeRaw: (query: TemplateStringsArray, ...args: any[]) => Promise<number>;
25
- $extends: (args: any) => WeakDbClientContract;
26
- };
27
- export declare function run(cmd: string, env?: Record<string, string>, cwd?: string): void;
28
- export declare function getWorkspaceRoot(start: string): string | undefined;
29
- export declare function getWorkspaceNpmCacheFolder(start: string): string;
30
- export type SchemaLoadOptions = {
31
- addPrelude?: boolean;
32
- pushDb?: boolean;
33
- fullZod?: boolean;
34
- extraDependencies?: string[];
35
- compile?: boolean;
36
- customSchemaFilePath?: string;
37
- logPrismaQuery?: boolean;
38
- };
39
- export declare function loadSchemaFromFile(schemaFile: string, options?: SchemaLoadOptions): Promise<{
40
- projectDir: string;
41
- prisma: any;
42
- withPolicy: (user?: AuthUser | undefined) => WeakDbClientContract;
43
- withOmit: () => WeakDbClientContract;
44
- withPassword: () => WeakDbClientContract;
45
- withPresets: (user?: AuthUser | undefined) => WeakDbClientContract;
46
- policy: any;
47
- modelMeta: any;
48
- zodSchemas: any;
49
- }>;
50
- export declare function loadSchema(schema: string, options?: SchemaLoadOptions): Promise<{
51
- projectDir: string;
52
- prisma: any;
53
- withPolicy: (user?: AuthUser) => WeakDbClientContract;
54
- withOmit: () => WeakDbClientContract;
55
- withPassword: () => WeakDbClientContract;
56
- withPresets: (user?: AuthUser) => WeakDbClientContract;
57
- policy: any;
58
- modelMeta: any;
59
- zodSchemas: any;
60
- }>;
61
- /**
62
- * Load ZModel and Prisma DMM from a string without creating a NPM project.
63
- * @param content
64
- * @returns
65
- */
66
- export declare function loadZModelAndDmmf(content: string): Promise<{
67
- model: Model;
68
- dmmf: DMMF.Document;
69
- modelFile: string;
70
- }>;
package/schema.js DELETED
@@ -1,277 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
- var __importDefault = (this && this.__importDefault) || function (mod) {
35
- return (mod && mod.__esModule) ? mod : { "default": mod };
36
- };
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.loadZModelAndDmmf = exports.loadSchema = exports.loadSchemaFromFile = exports.getWorkspaceNpmCacheFolder = exports.getWorkspaceRoot = exports.run = exports.FILE_SPLITTER = void 0;
39
- const runtime_1 = require("@zenstackhq/runtime");
40
- const sdk_1 = require("@zenstackhq/sdk");
41
- const child_process_1 = require("child_process");
42
- const fs = __importStar(require("fs"));
43
- const json5_1 = __importDefault(require("json5"));
44
- const path = __importStar(require("path"));
45
- const tmp_1 = __importDefault(require("tmp"));
46
- const cli_util_1 = require("zenstack/cli/cli-util");
47
- const prisma_1 = __importDefault(require("zenstack/plugins/prisma"));
48
- /**
49
- * Use it to represent multiple files in a single string like this
50
- `schema.zmodel
51
- import "user"
52
- ${FILE_SPLITTER}user.zmodel
53
- import "schema"
54
- model User {
55
- ...
56
- }`
57
- */
58
- exports.FILE_SPLITTER = '#FILE_SPLITTER#';
59
- function run(cmd, env, cwd) {
60
- const start = Date.now();
61
- (0, child_process_1.execSync)(cmd, {
62
- stdio: 'pipe',
63
- encoding: 'utf-8',
64
- env: Object.assign(Object.assign(Object.assign({}, process.env), { DO_NOT_TRACK: '1' }), env),
65
- cwd,
66
- });
67
- console.log('Execution took', Date.now() - start, 'ms', '-', cmd);
68
- }
69
- exports.run = run;
70
- function normalizePath(p) {
71
- return p ? p.split(path.sep).join(path.posix.sep) : p;
72
- }
73
- function getWorkspaceRoot(start) {
74
- let curr = normalizePath(start);
75
- while (curr && curr !== '/') {
76
- if (fs.existsSync(path.join(curr, 'pnpm-workspace.yaml'))) {
77
- return curr;
78
- }
79
- else {
80
- curr = normalizePath(path.dirname(curr));
81
- }
82
- }
83
- return undefined;
84
- }
85
- exports.getWorkspaceRoot = getWorkspaceRoot;
86
- function getWorkspaceNpmCacheFolder(start) {
87
- const root = getWorkspaceRoot(start);
88
- return root ? path.join(root, '.npmcache') : './.npmcache';
89
- }
90
- exports.getWorkspaceNpmCacheFolder = getWorkspaceNpmCacheFolder;
91
- const MODEL_PRELUDE = `
92
- datasource db {
93
- provider = 'sqlite'
94
- url = 'file:./test.db'
95
- }
96
-
97
- generator js {
98
- provider = 'prisma-client-js'
99
- previewFeatures = ['clientExtensions']
100
- }
101
-
102
- plugin zod {
103
- provider = '@core/zod'
104
- modelOnly = true
105
- }
106
- `;
107
- const MODEL_PRELUDE_FULL_ZOD = `
108
- datasource db {
109
- provider = 'sqlite'
110
- url = 'file:./test.db'
111
- }
112
-
113
- generator js {
114
- provider = 'prisma-client-js'
115
- previewFeatures = ['clientExtensions']
116
- }
117
-
118
- plugin zod {
119
- provider = '@core/zod'
120
- modelOnly = false
121
- }
122
- `;
123
- const defaultOptions = {
124
- addPrelude: true,
125
- pushDb: true,
126
- fullZod: false,
127
- extraDependencies: [],
128
- compile: false,
129
- logPrismaQuery: false,
130
- };
131
- function loadSchemaFromFile(schemaFile, options) {
132
- return __awaiter(this, void 0, void 0, function* () {
133
- const content = fs.readFileSync(schemaFile, { encoding: 'utf-8' });
134
- return loadSchema(content, options);
135
- });
136
- }
137
- exports.loadSchemaFromFile = loadSchemaFromFile;
138
- function loadSchema(schema, options) {
139
- var _a;
140
- return __awaiter(this, void 0, void 0, function* () {
141
- const opt = Object.assign(Object.assign({}, defaultOptions), options);
142
- const { name: projectRoot } = tmp_1.default.dirSync({ unsafeCleanup: true });
143
- const root = getWorkspaceRoot(__dirname);
144
- if (!root) {
145
- throw new Error('Could not find workspace root');
146
- }
147
- const pkgContent = fs.readFileSync(path.join(__dirname, 'package.template.json'), { encoding: 'utf-8' });
148
- fs.writeFileSync(path.join(projectRoot, 'package.json'), pkgContent.replaceAll('<root>', root));
149
- const npmrcContent = fs.readFileSync(path.join(__dirname, '.npmrc.template'), { encoding: 'utf-8' });
150
- fs.writeFileSync(path.join(projectRoot, '.npmrc'), npmrcContent.replaceAll('<root>', root));
151
- console.log('Workdir:', projectRoot);
152
- process.chdir(projectRoot);
153
- let zmodelPath = path.join(projectRoot, 'schema.zmodel');
154
- const files = schema.split(exports.FILE_SPLITTER);
155
- if (files.length > 1) {
156
- // multiple files
157
- files.forEach((file, index) => {
158
- //first line is the file name
159
- const firstLine = file.indexOf('\n');
160
- const fileName = file.substring(0, firstLine).trim();
161
- let fileContent = file.substring(firstLine + 1);
162
- if (index === 0) {
163
- // The first file is the main schema file
164
- zmodelPath = path.join(projectRoot, fileName);
165
- if (opt.addPrelude) {
166
- // plugin need to be added after import statement
167
- fileContent = `${fileContent}\n${opt.fullZod ? MODEL_PRELUDE_FULL_ZOD : MODEL_PRELUDE}`;
168
- }
169
- }
170
- fileContent = fileContent.replaceAll('$projectRoot', projectRoot);
171
- const filePath = path.join(projectRoot, fileName);
172
- fs.writeFileSync(filePath, fileContent);
173
- });
174
- }
175
- else {
176
- schema = schema.replaceAll('$projectRoot', projectRoot);
177
- const content = opt.addPrelude ? `${opt.fullZod ? MODEL_PRELUDE_FULL_ZOD : MODEL_PRELUDE}\n${schema}` : schema;
178
- if (opt.customSchemaFilePath) {
179
- zmodelPath = path.join(projectRoot, opt.customSchemaFilePath);
180
- fs.mkdirSync(path.dirname(zmodelPath), { recursive: true });
181
- fs.writeFileSync(zmodelPath, content);
182
- }
183
- else {
184
- fs.writeFileSync('schema.zmodel', content);
185
- }
186
- }
187
- run('npm install');
188
- if (opt.customSchemaFilePath) {
189
- run(`npx zenstack generate --schema ${zmodelPath} --no-dependency-check`, {
190
- NODE_PATH: './node_modules',
191
- });
192
- }
193
- else {
194
- run('npx zenstack generate --no-dependency-check', { NODE_PATH: './node_modules' });
195
- }
196
- if (opt.pushDb) {
197
- run('npx prisma db push');
198
- }
199
- const PrismaClient = require(path.join(projectRoot, 'node_modules/.prisma/client')).PrismaClient;
200
- const prisma = new PrismaClient({ log: ['info', 'warn', 'error'] });
201
- (_a = opt.extraDependencies) === null || _a === void 0 ? void 0 : _a.forEach((dep) => {
202
- console.log(`Installing dependency ${dep}`);
203
- run(`npm install ${dep}`);
204
- });
205
- if (opt.compile) {
206
- console.log('Compiling...');
207
- run('npx tsc --init');
208
- // add genetated '.zenstack/zod' folder to typescript's search path,
209
- // so that it can be resolved from symbolic-linked files
210
- const tsconfig = json5_1.default.parse(fs.readFileSync(path.join(projectRoot, './tsconfig.json'), 'utf-8'));
211
- tsconfig.compilerOptions.paths = {
212
- '.zenstack/zod/input': ['./node_modules/.zenstack/zod/input/index.d.ts'],
213
- };
214
- fs.writeFileSync(path.join(projectRoot, './tsconfig.json'), JSON.stringify(tsconfig, null, 2));
215
- run('npx tsc --project tsconfig.json');
216
- }
217
- let policy;
218
- let modelMeta;
219
- let zodSchemas;
220
- const outputPath = path.join(projectRoot, 'node_modules');
221
- try {
222
- policy = require(path.join(outputPath, '.zenstack/policy')).default;
223
- }
224
- catch (_b) {
225
- /* noop */
226
- }
227
- try {
228
- modelMeta = require(path.join(outputPath, '.zenstack/model-meta')).default;
229
- }
230
- catch (_c) {
231
- /* noop */
232
- }
233
- try {
234
- zodSchemas = require(path.join(outputPath, '.zenstack/zod'));
235
- }
236
- catch (_d) {
237
- /* noop */
238
- }
239
- return {
240
- projectDir: projectRoot,
241
- prisma,
242
- withPolicy: (user) => (0, runtime_1.withPolicy)(prisma, { user }, { policy, modelMeta, zodSchemas, logPrismaQuery: opt.logPrismaQuery }),
243
- withOmit: () => (0, runtime_1.withOmit)(prisma, { modelMeta }),
244
- withPassword: () => (0, runtime_1.withPassword)(prisma, { modelMeta }),
245
- withPresets: (user) => (0, runtime_1.withPresets)(prisma, { user }, { policy, modelMeta, zodSchemas, logPrismaQuery: opt.logPrismaQuery }),
246
- policy,
247
- modelMeta,
248
- zodSchemas,
249
- };
250
- });
251
- }
252
- exports.loadSchema = loadSchema;
253
- /**
254
- * Load ZModel and Prisma DMM from a string without creating a NPM project.
255
- * @param content
256
- * @returns
257
- */
258
- function loadZModelAndDmmf(content) {
259
- return __awaiter(this, void 0, void 0, function* () {
260
- const prelude = `
261
- datasource db {
262
- provider = 'postgresql'
263
- url = env('DATABASE_URL')
264
- }
265
- `;
266
- const { name: modelFile } = tmp_1.default.fileSync({ postfix: '.zmodel' });
267
- fs.writeFileSync(modelFile, `${prelude}\n${content}`);
268
- const model = yield (0, cli_util_1.loadDocument)(modelFile);
269
- const { name: prismaFile } = tmp_1.default.fileSync({ postfix: '.prisma' });
270
- yield (0, prisma_1.default)(model, { schemaPath: modelFile, name: 'Prisma', output: prismaFile, generateClient: false });
271
- const prismaContent = fs.readFileSync(prismaFile, { encoding: 'utf-8' });
272
- const dmmf = yield (0, sdk_1.getDMMF)({ datamodel: prismaContent });
273
- return { model, dmmf, modelFile };
274
- });
275
- }
276
- exports.loadZModelAndDmmf = loadZModelAndDmmf;
277
- //# sourceMappingURL=schema.js.map
package/schema.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,iDAAwH;AACxH,yCAA0C;AAC1C,iDAAyC;AACzC,uCAAyB;AACzB,kDAAyB;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,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,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;IACH,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC;AATD,kBASC;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;;;;;;;;;;;;;;;CAerB,CAAC;AAEF,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;CAe9B,CAAC;AAYF,MAAM,cAAc,GAAsB;IACtC,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,KAAK;IACd,iBAAiB,EAAE,EAAE;IACrB,OAAO,EAAE,KAAK;IACd,cAAc,EAAE,KAAK;CACxB,CAAC;AAEF,SAAsB,kBAAkB,CAAC,UAAkB,EAAE,OAA2B;;QACpF,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;CAAA;AAHD,gDAGC;AAED,SAAsB,UAAU,CAAC,MAAc,EAAE,OAA2B;;;QACxE,MAAM,GAAG,mCAAQ,cAAc,GAAK,OAAO,CAAE,CAAC;QAE9C,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,GAAG,CAAC,UAAU,EAAE;wBAChB,iDAAiD;wBACjD,WAAW,GAAG,GAAG,WAAW,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;qBAC3F;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,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAC/G,IAAI,GAAG,CAAC,oBAAoB,EAAE;gBAC1B,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;gBAC9D,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,GAAG,CAAC,oBAAoB,EAAE;YAC1B,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,GAAG,CAAC,MAAM,EAAE;YACZ,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,MAAA,GAAG,CAAC,iBAAiB,0CAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACnC,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,OAAO,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAEtB,oEAAoE;YACpE,wDAAwD;YACxD,MAAM,QAAQ,GAAG,eAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACjG,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG;gBAC7B,qBAAqB,EAAE,CAAC,+CAA+C,CAAC;aAC3E,CAAC;YACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/F,GAAG,CAAC,iCAAiC,CAAC,CAAC;SAC1C;QAED,IAAI,MAAW,CAAC;QAChB,IAAI,SAAc,CAAC;QACnB,IAAI,UAAe,CAAC;QAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAE1D,IAAI;YACA,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;SACvE;QAAC,WAAM;YACJ,UAAU;SACb;QACD,IAAI;YACA,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC;SAC9E;QAAC,WAAM;YACJ,UAAU;SACb;QACD,IAAI;YACA,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;SAChE;QAAC,WAAM;YACJ,UAAU;SACb;QAED,OAAO;YACH,UAAU,EAAE,WAAW;YACvB,MAAM;YACN,UAAU,EAAE,CAAC,IAAe,EAAE,EAAE,CAC5B,IAAA,oBAAU,EACN,MAAM,EACN,EAAE,IAAI,EAAE,EACR,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,CACxE;YACL,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,EACP,MAAM,EACN,EAAE,IAAI,EAAE,EACR,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,CACxE;YACL,MAAM;YACN,SAAS;YACT,UAAU;SACb,CAAC;;CACL;AAvID,gCAuIC;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,aAAO,EAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtC,CAAC;CAAA;AAtBD,8CAsBC"}