zenstack 0.1.0 → 0.1.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.
Files changed (55) hide show
  1. package/out/cli/index.js +4 -51
  2. package/out/cli/index.js.map +1 -1
  3. package/out/cli/package.template.json +10 -0
  4. package/out/cli/tsconfig.template.json +17 -0
  5. package/out/generator/constants.js +6 -0
  6. package/out/generator/constants.js.map +1 -0
  7. package/out/generator/index.js +76 -0
  8. package/out/generator/index.js.map +1 -0
  9. package/out/generator/next-auth/index.js +3 -3
  10. package/out/generator/package.template.json +9 -0
  11. package/out/generator/prisma/expression-writer.js +287 -0
  12. package/out/generator/prisma/expression-writer.js.map +1 -0
  13. package/out/generator/prisma/index.js +8 -182
  14. package/out/generator/prisma/index.js.map +1 -1
  15. package/out/generator/prisma/plain-expression-builder.js +69 -0
  16. package/out/generator/prisma/plain-expression-builder.js.map +1 -0
  17. package/out/generator/prisma/prisma-builder.js +1 -1
  18. package/out/generator/prisma/prisma-builder.js.map +1 -1
  19. package/out/generator/prisma/query-gard-generator.js +159 -0
  20. package/out/generator/prisma/query-gard-generator.js.map +1 -0
  21. package/out/generator/prisma/schema-generator.js +202 -0
  22. package/out/generator/prisma/schema-generator.js.map +1 -0
  23. package/out/generator/query-guard/index.js +2 -0
  24. package/out/generator/query-guard/index.js.map +1 -0
  25. package/out/generator/react-hooks/index.js +1 -1
  26. package/out/generator/react-hooks/index.js.map +1 -1
  27. package/out/generator/server/data/expression-writer.js +42 -36
  28. package/out/generator/server/data/expression-writer.js.map +1 -1
  29. package/out/generator/server/data/plain-expression-builder.js +18 -2
  30. package/out/generator/server/data/plain-expression-builder.js.map +1 -1
  31. package/out/generator/service/index.js +51 -1
  32. package/out/generator/service/index.js.map +1 -1
  33. package/out/generator/tsconfig.template.json +17 -0
  34. package/out/utils/indent-string.js +3 -19
  35. package/out/utils/indent-string.js.map +1 -1
  36. package/package.json +6 -3
  37. package/src/cli/index.ts +5 -33
  38. package/src/generator/constants.ts +2 -0
  39. package/src/generator/index.ts +59 -0
  40. package/src/generator/next-auth/index.ts +3 -3
  41. package/src/generator/package.template.json +9 -0
  42. package/src/generator/{server/data → prisma}/expression-writer.ts +65 -63
  43. package/src/generator/prisma/index.ts +10 -309
  44. package/src/generator/{server/data → prisma}/plain-expression-builder.ts +22 -3
  45. package/src/generator/prisma/prisma-builder.ts +1 -1
  46. package/src/generator/prisma/query-gard-generator.ts +208 -0
  47. package/src/generator/prisma/schema-generator.ts +295 -0
  48. package/src/generator/react-hooks/index.ts +2 -4
  49. package/src/generator/service/index.ts +54 -1
  50. package/src/generator/tsconfig.template.json +17 -0
  51. package/src/utils/indent-string.ts +3 -38
  52. package/src/generator/server/data/data-generator.ts +0 -483
  53. package/src/generator/server/function/function-generator.ts +0 -32
  54. package/src/generator/server/index.ts +0 -57
  55. package/src/generator/server/server-code-generator.ts +0 -6
package/out/cli/index.js CHANGED
@@ -1,27 +1,4 @@
1
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
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -31,45 +8,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
31
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
32
9
  });
33
10
  };
34
- var __importDefault = (this && this.__importDefault) || function (mod) {
35
- return (mod && mod.__esModule) ? mod : { "default": mod };
36
- };
37
11
  Object.defineProperty(exports, "__esModule", { value: true });
38
12
  exports.generateAction = void 0;
39
13
  const commander_1 = require("commander");
40
14
  const module_1 = require("../language-server/generated/module");
41
15
  const zmodel_module_1 = require("../language-server/zmodel-module");
42
16
  const cli_util_1 = require("./cli-util");
43
- const path = __importStar(require("path"));
44
- const fs = __importStar(require("fs"));
45
- const colors_1 = __importDefault(require("colors"));
46
- const prisma_1 = __importDefault(require("../generator/prisma"));
47
- const service_1 = __importDefault(require("../generator/service"));
48
- const react_hooks_1 = __importDefault(require("../generator/react-hooks"));
49
- const next_auth_1 = __importDefault(require("../generator/next-auth"));
50
- const server_1 = __importDefault(require("../generator/server"));
17
+ const generator_1 = require("../generator");
51
18
  const generateAction = (fileName, opts) => __awaiter(void 0, void 0, void 0, function* () {
52
19
  const services = (0, zmodel_module_1.createZModelServices)().ZModel;
53
20
  const model = yield (0, cli_util_1.extractAstNode)(fileName, services);
54
21
  const context = {
55
22
  schema: model,
56
- outDir: path.resolve(opts.destination),
23
+ outDir: opts.destination || 'node_modules/.zenstack',
57
24
  };
58
- if (!fs.existsSync(context.outDir)) {
59
- fs.mkdirSync(context.outDir);
60
- }
61
- console.log(colors_1.default.bold('⌛️ Running ZenStack generators'));
62
- const generators = [
63
- new prisma_1.default(),
64
- new service_1.default(),
65
- new react_hooks_1.default(),
66
- new server_1.default(),
67
- new next_auth_1.default(),
68
- ];
69
- for (const generator of generators) {
70
- yield generator.generate(context);
71
- }
72
- console.log(colors_1.default.green(colors_1.default.bold('👻 All generators completed successfully!')));
25
+ yield new generator_1.ZenStackGenerator().generate(context);
73
26
  });
74
27
  exports.generateAction = generateAction;
75
28
  function default_1() {
@@ -81,7 +34,7 @@ function default_1() {
81
34
  program
82
35
  .command('generate')
83
36
  .argument('<file>', `source file (possible file extensions: ${fileExtensions})`)
84
- .option('-d, --destination <dir>', 'destination directory of generating', '.zenstack')
37
+ .option('-d, --destination <dir>', 'destination directory of generating')
85
38
  .description('generates JavaScript code that prints "Hello, {name}!" for each greeting in a source file')
86
39
  .action(exports.generateAction);
87
40
  program.parse(process.argv);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AAEpC,gEAA6E;AAC7E,oEAAwE;AACxE,yCAA4C;AAE5C,2CAA6B;AAC7B,uCAAyB;AACzB,oDAA4B;AAC5B,iEAAkD;AAClD,mEAAoD;AACpD,2EAA2D;AAC3D,uEAAuD;AACvD,iEAAkD;AAE3C,MAAM,cAAc,GAAG,CAC1B,QAAgB,EAChB,IAAqB,EACR,EAAE;IACf,MAAM,QAAQ,GAAG,IAAA,oCAAoB,GAAE,CAAC,MAAM,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAc,EAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE9D,MAAM,OAAO,GAAY;QACrB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;KACzC,CAAC;IAEF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAChC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KAChC;IAED,OAAO,CAAC,GAAG,CAAC,gBAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAE3D,MAAM,UAAU,GAAG;QACf,IAAI,gBAAe,EAAE;QACrB,IAAI,iBAAgB,EAAE;QACtB,IAAI,qBAAmB,EAAE;QACzB,IAAI,gBAAe,EAAE;QACrB,IAAI,mBAAiB,EAAE;KAC1B,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;QAChC,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACrC;IAED,OAAO,CAAC,GAAG,CACP,gBAAM,CAAC,KAAK,CAAC,gBAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CACzE,CAAC;AACN,CAAC,CAAA,CAAC;AAjCW,QAAA,cAAc,kBAiCzB;AAMF;IACI,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;QACH,8DAA8D;SAC7D,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,cAAc,GAAG,+BAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,OAAO;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,QAAQ,CACL,QAAQ,EACR,0CAA0C,cAAc,GAAG,CAC9D;SACA,MAAM,CACH,yBAAyB,EACzB,qCAAqC,EACrC,WAAW,CACd;SACA,WAAW,CACR,2FAA2F,CAC9F;SACA,MAAM,CAAC,sBAAc,CAAC,CAAC;IAE5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAzBD,4BAyBC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAoC;AAEpC,gEAA6E;AAC7E,oEAAwE;AACxE,yCAA4C;AAE5C,4CAAiD;AAE1C,MAAM,cAAc,GAAG,CAC1B,QAAgB,EAChB,IAAqB,EACR,EAAE;IACf,MAAM,QAAQ,GAAG,IAAA,oCAAoB,GAAE,CAAC,MAAM,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,IAAA,yBAAc,EAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE9D,MAAM,OAAO,GAAY;QACrB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,IAAI,CAAC,WAAW,IAAI,wBAAwB;KACvD,CAAC;IAEF,MAAM,IAAI,6BAAiB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC,CAAA,CAAC;AAbW,QAAA,cAAc,kBAazB;AAMF;IACI,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;QACH,8DAA8D;SAC7D,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,cAAc,GAAG,+BAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,OAAO;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,QAAQ,CACL,QAAQ,EACR,0CAA0C,cAAc,GAAG,CAC9D;SACA,MAAM,CACH,yBAAyB,EACzB,qCAAqC,CACxC;SACA,WAAW,CACR,2FAA2F,CAC9F;SACA,MAAM,CAAC,sBAAc,CAAC,CAAC;IAE5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAxBD,4BAwBC"}
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": ".zenstack",
3
+ "version": "1.0.0",
4
+ "description": "ZenStack generated code",
5
+ "main": "service.js",
6
+ "types": "service.d.ts",
7
+ "files": ["lib"],
8
+ "author": "ZenStack",
9
+ "license": "MIT"
10
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES6",
4
+ "module": "CommonJS",
5
+ "lib": ["ESNext", "DOM"],
6
+ "sourceMap": true,
7
+ "outDir": "lib",
8
+ "strict": true,
9
+ "moduleResolution": "node",
10
+ "esModuleInterop": true,
11
+ "skipLibCheck": true,
12
+ "declaration": true,
13
+ "resolveJsonModule": true
14
+ },
15
+ "include": ["**/*.ts"],
16
+ "exclude": ["lib", ".prisma", "node_modules"]
17
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GUARD_FIELD_NAME = exports.RUNTIME_PACKAGE = void 0;
4
+ exports.RUNTIME_PACKAGE = '@zenstackhq/runtime';
5
+ exports.GUARD_FIELD_NAME = 'zenstack_guard';
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/generator/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,qBAAqB,CAAC;AACxC,QAAA,gBAAgB,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,76 @@
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.ZenStackGenerator = void 0;
39
+ const fs = __importStar(require("fs"));
40
+ const colors_1 = __importDefault(require("colors"));
41
+ const prisma_1 = __importDefault(require("./prisma"));
42
+ const service_1 = __importDefault(require("./service"));
43
+ const react_hooks_1 = __importDefault(require("./react-hooks"));
44
+ const next_auth_1 = __importDefault(require("./next-auth"));
45
+ const path_1 = __importDefault(require("path"));
46
+ const child_process_1 = require("child_process");
47
+ class ZenStackGenerator {
48
+ generate(context) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ if (!fs.existsSync(context.outDir)) {
51
+ fs.mkdirSync(context.outDir);
52
+ }
53
+ console.log(colors_1.default.bold('⌛️ Running ZenStack generators'));
54
+ const generators = [
55
+ new prisma_1.default(),
56
+ new service_1.default(),
57
+ new react_hooks_1.default(),
58
+ new next_auth_1.default(),
59
+ ];
60
+ for (const generator of generators) {
61
+ yield generator.generate(context);
62
+ }
63
+ // generate package.json
64
+ const packageJson = require(path_1.default.join(__dirname, 'package.template.json'));
65
+ fs.writeFileSync(path_1.default.join(context.outDir, 'package.json'), JSON.stringify(packageJson, undefined, 4));
66
+ // compile ts sources
67
+ const tsConfig = require(path_1.default.join(__dirname, 'tsconfig.template.json'));
68
+ fs.writeFileSync(path_1.default.join(context.outDir, 'tsconfig.json'), JSON.stringify(tsConfig, undefined, 4));
69
+ (0, child_process_1.execSync)(`npx tsc -p "${path_1.default.join(context.outDir, 'tsconfig.json')}"`);
70
+ console.log(colors_1.default.blue(' ✔️ Typescript source files transpiled'));
71
+ console.log(colors_1.default.green(colors_1.default.bold('👻 All generators completed successfully!')));
72
+ });
73
+ }
74
+ }
75
+ exports.ZenStackGenerator = ZenStackGenerator;
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAAyB;AACzB,oDAA4B;AAC5B,sDAAuC;AACvC,wDAAyC;AACzC,gEAAgD;AAChD,4DAA4C;AAC5C,gDAAwB;AACxB,iDAAyC;AAEzC,MAAa,iBAAiB;IACpB,QAAQ,CAAC,OAAgB;;YAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAChC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aAChC;YAED,OAAO,CAAC,GAAG,CAAC,gBAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAE3D,MAAM,UAAU,GAAG;gBACf,IAAI,gBAAe,EAAE;gBACrB,IAAI,iBAAgB,EAAE;gBACtB,IAAI,qBAAmB,EAAE;gBACzB,IAAI,mBAAiB,EAAE;aAC1B,CAAC;YAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;gBAChC,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aACrC;YAED,wBAAwB;YACxB,MAAM,WAAW,GAAG,OAAO,CAAC,cAAI,CAAC,IAAI,CACjC,SAAS,EACT,uBAAuB,CAC1B,CAAC,CAAC;YACH,EAAE,CAAC,aAAa,CACZ,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,EACzC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAC5C,CAAC;YAEF,qBAAqB;YACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAI,CAAC,IAAI,CAC9B,SAAS,EACT,wBAAwB,CAC3B,CAAC,CAAC;YACH,EAAE,CAAC,aAAa,CACZ,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,EAC1C,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CACzC,CAAC;YAEF,IAAA,wBAAQ,EAAC,eAAe,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,gBAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;YAEpE,OAAO,CAAC,GAAG,CACP,gBAAM,CAAC,KAAK,CACR,gBAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAC3D,CACJ,CAAC;QACN,CAAC;KAAA;CACJ;AAhDD,8CAgDC"}
@@ -54,9 +54,9 @@ class NextAuthGenerator {
54
54
  }
55
55
  generateAdapter(project, context) {
56
56
  const content = `
57
- import { ZenStackService } from '../service';
57
+ import { ZenStackService } from '..';
58
58
  import { Adapter } from 'next-auth/adapters';
59
- import { Prisma } from '@zenstack/.prisma';
59
+ import { Prisma } from '../.prisma';
60
60
 
61
61
  export function NextAuthAdapter(service: ZenStackService): Adapter {
62
62
  const db = service.db;
@@ -118,7 +118,7 @@ class NextAuthGenerator {
118
118
  }
119
119
  generateAuthorize(project, context) {
120
120
  const content = `
121
- import { ZenStackService } from '../service';
121
+ import { ZenStackService } from '..';
122
122
  import { hash, compare } from 'bcryptjs';
123
123
 
124
124
  async function hashPassword(password: string) {
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": ".zenstack",
3
+ "version": "1.0.0",
4
+ "description": "ZenStack generated code",
5
+ "main": "index.js",
6
+ "types": "index.d.ts",
7
+ "author": "ZenStack",
8
+ "license": "MIT"
9
+ }
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ast_1 = require("../../language-server/generated/ast");
7
+ const types_1 = require("../types");
8
+ const plain_expression_builder_1 = __importDefault(require("./plain-expression-builder"));
9
+ const AUX_GUARD_FIELD = 'zenstack_guard';
10
+ class ExpressionWriter {
11
+ constructor(writer) {
12
+ this.writer = writer;
13
+ this.plainExprBuilder = new plain_expression_builder_1.default();
14
+ }
15
+ write(expr) {
16
+ const _write = () => {
17
+ switch (expr.$type) {
18
+ case ast_1.LiteralExpr:
19
+ this.writeLiteral(expr);
20
+ break;
21
+ case ast_1.UnaryExpr:
22
+ this.writeUnary(expr);
23
+ break;
24
+ case ast_1.BinaryExpr:
25
+ this.writeBinary(expr);
26
+ break;
27
+ case ast_1.ReferenceExpr:
28
+ this.writeReference(expr);
29
+ break;
30
+ case ast_1.MemberAccessExpr:
31
+ this.writeMemberAccess(expr);
32
+ break;
33
+ default:
34
+ throw new Error(`Not implemented: ${expr.$type}`);
35
+ }
36
+ };
37
+ this.block(_write);
38
+ }
39
+ writeReference(expr) {
40
+ if ((0, ast_1.isEnumField)(expr.target.ref)) {
41
+ throw new Error('We should never get here');
42
+ }
43
+ else {
44
+ this.writer.write(`${expr.target.ref.name}: true`);
45
+ }
46
+ }
47
+ writeMemberAccess(expr) {
48
+ this.writeFieldCondition(expr.operand, () => {
49
+ this.block(() => {
50
+ var _a;
51
+ this.writer.write(`${(_a = expr.member.ref) === null || _a === void 0 ? void 0 : _a.name}: true`);
52
+ });
53
+ }, 'is');
54
+ }
55
+ writeExprList(exprs) {
56
+ this.writer.writeLine('[');
57
+ for (let i = 0; i < exprs.length; i++) {
58
+ this.write(exprs[i]);
59
+ if (i !== exprs.length - 1) {
60
+ this.writer.writeLine(',');
61
+ }
62
+ }
63
+ this.writer.writeLine(']');
64
+ }
65
+ writeBinary(expr) {
66
+ switch (expr.operator) {
67
+ case '&&':
68
+ case '||':
69
+ this.writeLogical(expr, expr.operator);
70
+ break;
71
+ case '==':
72
+ case '!=':
73
+ case '>':
74
+ case '>=':
75
+ case '<':
76
+ case '<=':
77
+ this.writeComparison(expr, expr.operator);
78
+ break;
79
+ case '?':
80
+ case '!':
81
+ case '^':
82
+ this.writeCollectionPredicate(expr, expr.operator);
83
+ break;
84
+ }
85
+ }
86
+ writeCollectionPredicate(expr, operator) {
87
+ this.writeFieldCondition(expr.left, () => {
88
+ this.write(expr.right);
89
+ }, operator === '?' ? 'some' : operator === '!' ? 'every' : 'none');
90
+ }
91
+ isFieldAccess(expr) {
92
+ if ((0, ast_1.isThisExpr)(expr)) {
93
+ return true;
94
+ }
95
+ if ((0, ast_1.isMemberAccessExpr)(expr)) {
96
+ return this.isFieldAccess(expr.operand);
97
+ }
98
+ if ((0, ast_1.isReferenceExpr)(expr) && (0, ast_1.isDataModelField)(expr.target.ref)) {
99
+ return true;
100
+ }
101
+ return false;
102
+ }
103
+ guard(write) {
104
+ this.writer.write(`${AUX_GUARD_FIELD}: `);
105
+ write();
106
+ }
107
+ plain(expr) {
108
+ this.writer.write(this.plainExprBuilder.build(expr));
109
+ }
110
+ writeComparison(expr, operator) {
111
+ const leftIsFieldAccess = this.isFieldAccess(expr.left);
112
+ const rightIsFieldAccess = this.isFieldAccess(expr.right);
113
+ if (leftIsFieldAccess && rightIsFieldAccess) {
114
+ throw new types_1.GeneratorError(`Comparison between fields are not supported yet`);
115
+ }
116
+ if (!leftIsFieldAccess && !rightIsFieldAccess) {
117
+ // compile down to a plain expression
118
+ this.guard(() => {
119
+ this.plain(expr.left);
120
+ this.writer.write(' ' + operator + ' ');
121
+ this.plain(expr.right);
122
+ });
123
+ return;
124
+ }
125
+ let fieldAccess;
126
+ let operand;
127
+ if (leftIsFieldAccess) {
128
+ fieldAccess = expr.left;
129
+ operand = expr.right;
130
+ }
131
+ else {
132
+ fieldAccess = expr.right;
133
+ operand = expr.left;
134
+ operator = this.negateOperator(operator);
135
+ }
136
+ this.writeFieldCondition(fieldAccess, () => {
137
+ this.block(() => {
138
+ if (this.isModelTyped(fieldAccess)) {
139
+ // comparing with an object, conver to "id" comparison instead
140
+ this.writer.write('id: ');
141
+ this.block(() => {
142
+ this.writeOperator(operator, () => {
143
+ this.plain(operand);
144
+ this.writer.write('?.id');
145
+ });
146
+ });
147
+ }
148
+ else {
149
+ this.writeOperator(operator, () => {
150
+ this.plain(operand);
151
+ });
152
+ }
153
+ },
154
+ // "this" expression is compiled away (to .id access), so we should
155
+ // avoid generating a new layer
156
+ !(0, ast_1.isThisExpr)(fieldAccess));
157
+ }, 'is');
158
+ }
159
+ writeOperator(operator, writeOperand) {
160
+ if (operator === '!=') {
161
+ // wrap a 'not'
162
+ this.writer.write('not: ');
163
+ this.block(() => {
164
+ this.writeOperator('==', writeOperand);
165
+ });
166
+ }
167
+ else {
168
+ this.writer.write(`${this.mapOperator(operator)}: `);
169
+ writeOperand();
170
+ }
171
+ }
172
+ writeFieldCondition(fieldAccess, writeCondition, relationOp) {
173
+ var _a, _b;
174
+ let selector;
175
+ let operand;
176
+ if ((0, ast_1.isThisExpr)(fieldAccess)) {
177
+ // pass on
178
+ writeCondition();
179
+ return;
180
+ }
181
+ else if ((0, ast_1.isReferenceExpr)(fieldAccess)) {
182
+ selector = (_a = fieldAccess.target.ref) === null || _a === void 0 ? void 0 : _a.name;
183
+ }
184
+ else if ((0, ast_1.isMemberAccessExpr)(fieldAccess)) {
185
+ selector = (_b = fieldAccess.member.ref) === null || _b === void 0 ? void 0 : _b.name;
186
+ operand = fieldAccess.operand;
187
+ }
188
+ else {
189
+ throw new types_1.GeneratorError(`Unsupported expression type: ${fieldAccess.$type}`);
190
+ }
191
+ if (operand) {
192
+ // member access expression
193
+ this.writeFieldCondition(operand, () => {
194
+ this.block(() => {
195
+ this.writer.write(selector + ': ');
196
+ if (this.isModelTyped(fieldAccess)) {
197
+ // expression is resolved to a model, generate relation query
198
+ this.block(() => {
199
+ this.writer.write(`${relationOp}: `);
200
+ writeCondition();
201
+ });
202
+ }
203
+ else {
204
+ // generate plain query
205
+ writeCondition();
206
+ }
207
+ },
208
+ // if operand is "this", it doesn't really generate a new layer of query,
209
+ // so we should avoid generating a new block
210
+ !(0, ast_1.isThisExpr)(operand));
211
+ }, 'is');
212
+ }
213
+ else if (this.isModelTyped(fieldAccess)) {
214
+ // reference resolved to a model, generate relation query
215
+ this.writer.write(selector + ': ');
216
+ this.block(() => {
217
+ this.writer.write(`${relationOp}: `);
218
+ writeCondition();
219
+ });
220
+ }
221
+ else {
222
+ // generate a plain query
223
+ this.writer.write(selector + ': ');
224
+ writeCondition();
225
+ }
226
+ }
227
+ block(write, condition = true) {
228
+ if (condition) {
229
+ this.writer.block(write);
230
+ }
231
+ else {
232
+ write();
233
+ }
234
+ }
235
+ isModelTyped(expr) {
236
+ var _a;
237
+ return (0, ast_1.isDataModel)((_a = expr.$resolvedType) === null || _a === void 0 ? void 0 : _a.decl);
238
+ }
239
+ mapOperator(operator) {
240
+ switch (operator) {
241
+ case '==':
242
+ return 'equals';
243
+ case '!=':
244
+ throw new Error('Operation != should have been compiled away');
245
+ case '>':
246
+ return 'gt';
247
+ case '>=':
248
+ return 'ge';
249
+ case '<':
250
+ return 'lt';
251
+ case '<=':
252
+ return 'le';
253
+ }
254
+ }
255
+ negateOperator(operator) {
256
+ switch (operator) {
257
+ case '>':
258
+ return '<=';
259
+ case '<':
260
+ return '>=';
261
+ case '>=':
262
+ return '<';
263
+ case '<=':
264
+ return '>';
265
+ default:
266
+ return operator;
267
+ }
268
+ }
269
+ writeLogical(expr, operator) {
270
+ this.writer.writeLine(`${operator === '&&' ? 'AND' : 'OR'}: `);
271
+ this.writeExprList([expr.left, expr.right]);
272
+ }
273
+ writeUnary(expr) {
274
+ if (expr.operator !== '!') {
275
+ throw new types_1.GeneratorError(`Unary operator "${expr.operator}" is not supported`);
276
+ }
277
+ this.writer.writeLine('NOT: ');
278
+ this.write(expr.operand);
279
+ }
280
+ writeLiteral(expr) {
281
+ this.guard(() => {
282
+ this.plain(expr);
283
+ });
284
+ }
285
+ }
286
+ exports.default = ExpressionWriter;
287
+ //# sourceMappingURL=expression-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression-writer.js","sourceRoot":"","sources":["../../../src/generator/prisma/expression-writer.ts"],"names":[],"mappings":";;;;;AAAA,6CAa6B;AAE7B,oCAA0C;AAE1C,0FAAgE;AAEhE,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAIzC,MAAqB,gBAAgB;IAGjC,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QAFnC,qBAAgB,GAAG,IAAI,kCAAsB,EAAE,CAAC;IAEV,CAAC;IAExD,KAAK,CAAC,IAAgB;QAClB,MAAM,MAAM,GAAG,GAAG,EAAE;YAChB,QAAQ,IAAI,CAAC,KAAK,EAAE;gBAChB,KAAK,iBAAW;oBACZ,IAAI,CAAC,YAAY,CAAC,IAAmB,CAAC,CAAC;oBACvC,MAAM;gBAEV,KAAK,eAAS;oBACV,IAAI,CAAC,UAAU,CAAC,IAAiB,CAAC,CAAC;oBACnC,MAAM;gBAEV,KAAK,gBAAU;oBACX,IAAI,CAAC,WAAW,CAAC,IAAkB,CAAC,CAAC;oBACrC,MAAM;gBAEV,KAAK,mBAAa;oBACd,IAAI,CAAC,cAAc,CAAC,IAAqB,CAAC,CAAC;oBAC3C,MAAM;gBAEV,KAAK,sBAAgB;oBACjB,IAAI,CAAC,iBAAiB,CAAC,IAAwB,CAAC,CAAC;oBACjD,MAAM;gBAEV;oBACI,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;aACzD;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAEO,cAAc,CAAC,IAAmB;QACtC,IAAI,IAAA,iBAAW,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC/C;aAAM;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;SACvD;IACL,CAAC;IAEO,iBAAiB,CAAC,IAAsB;QAC5C,IAAI,CAAC,mBAAmB,CACpB,IAAI,CAAC,OAAO,EACZ,GAAG,EAAE;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAA,IAAI,CAAC,MAAM,CAAC,GAAG,0CAAE,IAAI,QAAQ,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACP,CAAC,EACD,IAAI,CACP,CAAC;IACN,CAAC;IAEO,aAAa,CAAC,KAAmB;QACrC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;aAC9B;SACJ;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEO,WAAW,CAAC,IAAgB;QAChC,QAAQ,IAAI,CAAC,QAAQ,EAAE;YACnB,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACL,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvC,MAAM;YAEV,KAAK,IAAI,CAAC;YACV,KAAK,IAAI,CAAC;YACV,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,CAAC;YACV,KAAK,GAAG,CAAC;YACT,KAAK,IAAI;gBACL,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1C,MAAM;YAEV,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACJ,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnD,MAAM;SACb;IACL,CAAC;IAEO,wBAAwB,CAAC,IAAgB,EAAE,QAAgB;QAC/D,IAAI,CAAC,mBAAmB,CACpB,IAAI,CAAC,IAAI,EACT,GAAG,EAAE;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,EACD,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAClE,CAAC;IACN,CAAC;IAEO,aAAa,CAAC,IAAgB;QAClC,IAAI,IAAA,gBAAU,EAAC,IAAI,CAAC,EAAE;YAClB,OAAO,IAAI,CAAC;SACf;QACD,IAAI,IAAA,wBAAkB,EAAC,IAAI,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC3C;QACD,IAAI,IAAA,qBAAe,EAAC,IAAI,CAAC,IAAI,IAAA,sBAAgB,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC5D,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,KAAiB;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,IAAI,CAAC,CAAC;QAC1C,KAAK,EAAE,CAAC;IACZ,CAAC;IAEO,KAAK,CAAC,IAAgB;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC;IAEO,eAAe,CAAC,IAAgB,EAAE,QAA4B;QAClE,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1D,IAAI,iBAAiB,IAAI,kBAAkB,EAAE;YACzC,MAAM,IAAI,sBAAc,CACpB,iDAAiD,CACpD,CAAC;SACL;QAED,IAAI,CAAC,iBAAiB,IAAI,CAAC,kBAAkB,EAAE;YAC3C,qCAAqC;YACrC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,OAAO;SACV;QAED,IAAI,WAAuB,CAAC;QAC5B,IAAI,OAAmB,CAAC;QACxB,IAAI,iBAAiB,EAAE;YACnB,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;YACxB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;SACxB;aAAM;YACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;YACpB,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;SAC5C;QAED,IAAI,CAAC,mBAAmB,CACpB,WAAW,EACX,GAAG,EAAE;YACD,IAAI,CAAC,KAAK,CACN,GAAG,EAAE;gBACD,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;oBAChC,8DAA8D;oBAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;wBACZ,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE;4BAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;4BACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC9B,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;iBACN;qBAAM;oBACH,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE;wBAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACxB,CAAC,CAAC,CAAC;iBACN;YACL,CAAC;YACD,mEAAmE;YACnE,+BAA+B;YAC/B,CAAC,IAAA,gBAAU,EAAC,WAAW,CAAC,CAC3B,CAAC;QACN,CAAC,EACD,IAAI,CACP,CAAC;IACN,CAAC;IAEO,aAAa,CACjB,QAA4B,EAC5B,YAAwB;QAExB,IAAI,QAAQ,KAAK,IAAI,EAAE;YACnB,eAAe;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;SACN;aAAM;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrD,YAAY,EAAE,CAAC;SAClB;IACL,CAAC;IAEO,mBAAmB,CACvB,WAAuB,EACvB,cAA0B,EAC1B,UAA4C;;QAE5C,IAAI,QAAgB,CAAC;QACrB,IAAI,OAA+B,CAAC;QAEpC,IAAI,IAAA,gBAAU,EAAC,WAAW,CAAC,EAAE;YACzB,UAAU;YACV,cAAc,EAAE,CAAC;YACjB,OAAO;SACV;aAAM,IAAI,IAAA,qBAAe,EAAC,WAAW,CAAC,EAAE;YACrC,QAAQ,GAAG,MAAA,WAAW,CAAC,MAAM,CAAC,GAAG,0CAAE,IAAK,CAAC;SAC5C;aAAM,IAAI,IAAA,wBAAkB,EAAC,WAAW,CAAC,EAAE;YACxC,QAAQ,GAAG,MAAA,WAAW,CAAC,MAAM,CAAC,GAAG,0CAAE,IAAK,CAAC;YACzC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;SACjC;aAAM;YACH,MAAM,IAAI,sBAAc,CACpB,gCAAgC,WAAW,CAAC,KAAK,EAAE,CACtD,CAAC;SACL;QAED,IAAI,OAAO,EAAE;YACT,2BAA2B;YAC3B,IAAI,CAAC,mBAAmB,CACpB,OAAO,EACP,GAAG,EAAE;gBACD,IAAI,CAAC,KAAK,CACN,GAAG,EAAE;oBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;oBACnC,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;wBAChC,6DAA6D;wBAC7D,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;4BACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;4BACrC,cAAc,EAAE,CAAC;wBACrB,CAAC,CAAC,CAAC;qBACN;yBAAM;wBACH,uBAAuB;wBACvB,cAAc,EAAE,CAAC;qBACpB;gBACL,CAAC;gBACD,yEAAyE;gBACzE,4CAA4C;gBAC5C,CAAC,IAAA,gBAAU,EAAC,OAAO,CAAC,CACvB,CAAC;YACN,CAAC,EACD,IAAI,CACP,CAAC;SACL;aAAM,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;YACvC,yDAAyD;YACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;gBACrC,cAAc,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;SACN;aAAM;YACH,yBAAyB;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;YACnC,cAAc,EAAE,CAAC;SACpB;IACL,CAAC;IAEO,KAAK,CAAC,KAAiB,EAAE,SAAS,GAAG,IAAI;QAC7C,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC5B;aAAM;YACH,KAAK,EAAE,CAAC;SACX;IACL,CAAC;IAEO,YAAY,CAAC,IAAgB;;QACjC,OAAO,IAAA,iBAAW,EAAC,MAAC,IAAkB,CAAC,aAAa,0CAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,WAAW,CAAC,QAA+C;QACvD,QAAQ,QAAQ,EAAE;YACd,KAAK,IAAI;gBACL,OAAO,QAAQ,CAAC;YACpB,KAAK,IAAI;gBACL,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACnE,KAAK,GAAG;gBACJ,OAAO,IAAI,CAAC;YAChB,KAAK,IAAI;gBACL,OAAO,IAAI,CAAC;YAChB,KAAK,GAAG;gBACJ,OAAO,IAAI,CAAC;YAChB,KAAK,IAAI;gBACL,OAAO,IAAI,CAAC;SACnB;IACL,CAAC;IAEO,cAAc,CAAC,QAA+C;QAClE,QAAQ,QAAQ,EAAE;YACd,KAAK,GAAG;gBACJ,OAAO,IAAI,CAAC;YAChB,KAAK,GAAG;gBACJ,OAAO,IAAI,CAAC;YAChB,KAAK,IAAI;gBACL,OAAO,GAAG,CAAC;YACf,KAAK,IAAI;gBACL,OAAO,GAAG,CAAC;YACf;gBACI,OAAO,QAAQ,CAAC;SACvB;IACL,CAAC;IAEO,YAAY,CAAC,IAAgB,EAAE,QAAqB;QACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IAEO,UAAU,CAAC,IAAe;QAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE;YACvB,MAAM,IAAI,sBAAc,CACpB,mBAAmB,IAAI,CAAC,QAAQ,oBAAoB,CACvD,CAAC;SACL;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAEO,YAAY,CAAC,IAAiB;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAxUD,mCAwUC"}