zenstack 1.0.0-alpha.23 → 1.0.0-alpha.24

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 (84) hide show
  1. package/README.md +79 -9
  2. package/cli/cli-error.js +3 -5
  3. package/cli/cli-error.js.map +1 -1
  4. package/cli/cli-util.js +123 -105
  5. package/cli/cli-util.js.map +1 -1
  6. package/cli/index.js +105 -63
  7. package/cli/index.js.map +1 -1
  8. package/cli/plugin-runner.js +130 -127
  9. package/cli/plugin-runner.js.map +1 -1
  10. package/language-server/constants.js +5 -13
  11. package/language-server/constants.js.map +1 -1
  12. package/language-server/main.js +8 -15
  13. package/language-server/main.js.map +1 -1
  14. package/language-server/types.js +3 -1
  15. package/language-server/types.js.map +1 -1
  16. package/language-server/utils.js +13 -16
  17. package/language-server/utils.js.map +1 -1
  18. package/language-server/validator/attribute-validator.js +3 -7
  19. package/language-server/validator/attribute-validator.js.map +1 -1
  20. package/language-server/validator/datamodel-validator.js +293 -347
  21. package/language-server/validator/datamodel-validator.js.map +1 -1
  22. package/language-server/validator/datasource-validator.js +61 -71
  23. package/language-server/validator/datasource-validator.js.map +1 -1
  24. package/language-server/validator/enum-validator.js +6 -10
  25. package/language-server/validator/enum-validator.js.map +1 -1
  26. package/language-server/validator/expression-validator.js +25 -31
  27. package/language-server/validator/expression-validator.js.map +1 -1
  28. package/language-server/validator/schema-validator.js +18 -25
  29. package/language-server/validator/schema-validator.js.map +1 -1
  30. package/language-server/validator/utils.js +86 -85
  31. package/language-server/validator/utils.js.map +1 -1
  32. package/language-server/validator/zmodel-validator.js +55 -58
  33. package/language-server/validator/zmodel-validator.js.map +1 -1
  34. package/language-server/zmodel-formatter.js +40 -21
  35. package/language-server/zmodel-formatter.js.map +1 -1
  36. package/language-server/zmodel-linker.js +328 -331
  37. package/language-server/zmodel-linker.js.map +1 -1
  38. package/language-server/zmodel-module.js +50 -59
  39. package/language-server/zmodel-module.js.map +1 -1
  40. package/language-server/zmodel-scope.js +35 -25
  41. package/language-server/zmodel-scope.js.map +1 -1
  42. package/language-server/zmodel-workspace-manager.js +30 -18
  43. package/language-server/zmodel-workspace-manager.js.map +1 -1
  44. package/package.json +8 -12
  45. package/plugins/access-policy/expression-writer.js +301 -292
  46. package/plugins/access-policy/expression-writer.js.map +1 -1
  47. package/plugins/access-policy/index.js +20 -11
  48. package/plugins/access-policy/index.js.map +1 -1
  49. package/plugins/access-policy/policy-guard-generator.js +327 -321
  50. package/plugins/access-policy/policy-guard-generator.js.map +1 -1
  51. package/plugins/access-policy/typescript-expression-transformer.js +94 -95
  52. package/plugins/access-policy/typescript-expression-transformer.js.map +1 -1
  53. package/plugins/access-policy/utils.js +7 -9
  54. package/plugins/access-policy/utils.js.map +1 -1
  55. package/plugins/access-policy/zod-schema-generator.js +143 -159
  56. package/plugins/access-policy/zod-schema-generator.js.map +1 -1
  57. package/plugins/model-meta/index.js +97 -102
  58. package/plugins/model-meta/index.js.map +1 -1
  59. package/plugins/plugin-utils.js +34 -40
  60. package/plugins/plugin-utils.js.map +1 -1
  61. package/plugins/prisma/indent-string.js +4 -8
  62. package/plugins/prisma/indent-string.js.map +1 -1
  63. package/plugins/prisma/index.js +20 -11
  64. package/plugins/prisma/index.js.map +1 -1
  65. package/plugins/prisma/prisma-builder.js +235 -213
  66. package/plugins/prisma/prisma-builder.js.map +1 -1
  67. package/plugins/prisma/schema-generator.js +205 -192
  68. package/plugins/prisma/schema-generator.js.map +1 -1
  69. package/plugins/prisma/zmodel-code-generator.js +109 -114
  70. package/plugins/prisma/zmodel-code-generator.js.map +1 -1
  71. package/telemetry.js +107 -90
  72. package/telemetry.js.map +1 -1
  73. package/types.js +3 -1
  74. package/types.js.map +1 -1
  75. package/utils/ast-utils.js +67 -67
  76. package/utils/ast-utils.js.map +1 -1
  77. package/utils/exec-utils.js +6 -15
  78. package/utils/exec-utils.js.map +1 -1
  79. package/utils/pkg-utils.js +38 -35
  80. package/utils/pkg-utils.js.map +1 -1
  81. package/utils/version-utils.js +9 -10
  82. package/utils/version-utils.js.map +1 -1
  83. package/global.d.js +0 -1
  84. package/global.d.js.map +0 -1
@@ -1,58 +1,52 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.RUNTIME_PACKAGE = exports.ALL_OPERATION_KINDS = void 0;
7
- exports.ensureNodeModuleFolder = ensureNodeModuleFolder;
8
- exports.getDefaultOutputFolder = getDefaultOutputFolder;
9
- exports.getNodeModulesFolder = getNodeModulesFolder;
10
- var _fs = _interopRequireDefault(require("fs"));
11
- var _path = _interopRequireDefault(require("path"));
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
- const RUNTIME_PACKAGE = '@zenstackhq/runtime';
14
- exports.RUNTIME_PACKAGE = RUNTIME_PACKAGE;
15
- const ALL_OPERATION_KINDS = ['create', 'update', 'postUpdate', 'read', 'delete'];
16
-
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
+ exports.ensureNodeModuleFolder = exports.getDefaultOutputFolder = exports.getNodeModulesFolder = exports.ALL_OPERATION_KINDS = exports.RUNTIME_PACKAGE = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ exports.RUNTIME_PACKAGE = '@zenstackhq/runtime';
10
+ exports.ALL_OPERATION_KINDS = ['create', 'update', 'postUpdate', 'read', 'delete'];
17
11
  /**
18
12
  * Gets the nearest "node_modules" folder by walking up froma start path.
19
13
  */
20
- exports.ALL_OPERATION_KINDS = ALL_OPERATION_KINDS;
21
14
  function getNodeModulesFolder(startPath) {
22
- startPath = startPath ?? process.cwd();
23
- if (_fs.default.existsSync(_path.default.join(startPath, 'node_modules'))) {
24
- return _path.default.join(startPath, 'node_modules');
25
- } else if (startPath !== '/') {
26
- const parent = _path.default.join(startPath, '..');
27
- return getNodeModulesFolder(parent);
28
- } else {
29
- return undefined;
30
- }
15
+ startPath = startPath !== null && startPath !== void 0 ? startPath : process.cwd();
16
+ if (fs_1.default.existsSync(path_1.default.join(startPath, 'node_modules'))) {
17
+ return path_1.default.join(startPath, 'node_modules');
18
+ }
19
+ else if (startPath !== '/') {
20
+ const parent = path_1.default.join(startPath, '..');
21
+ return getNodeModulesFolder(parent);
22
+ }
23
+ else {
24
+ return undefined;
25
+ }
31
26
  }
32
-
27
+ exports.getNodeModulesFolder = getNodeModulesFolder;
33
28
  /**
34
29
  * Gets the default node_modules/.zenstack output folder for plugins.
35
30
  * @returns
36
31
  */
37
32
  function getDefaultOutputFolder() {
38
- const modulesFolder = getNodeModulesFolder();
39
- return modulesFolder ? _path.default.join(modulesFolder, '.zenstack') : undefined;
33
+ const modulesFolder = getNodeModulesFolder();
34
+ return modulesFolder ? path_1.default.join(modulesFolder, '.zenstack') : undefined;
40
35
  }
41
-
36
+ exports.getDefaultOutputFolder = getDefaultOutputFolder;
42
37
  /**
43
38
  * Ensure a folder exists and has a package.json in it.
44
39
  */
45
40
  function ensureNodeModuleFolder(folder) {
46
- if (!_fs.default.existsSync(folder)) {
47
- _fs.default.mkdirSync(folder, {
48
- recursive: true
49
- });
50
- }
51
- if (!_fs.default.existsSync(_path.default.join(folder, 'package.json'))) {
52
- _fs.default.writeFileSync(_path.default.join(folder, 'package.json'), JSON.stringify({
53
- name: '.zenstack',
54
- version: '1.0.0'
55
- }));
56
- }
41
+ if (!fs_1.default.existsSync(folder)) {
42
+ fs_1.default.mkdirSync(folder, { recursive: true });
43
+ }
44
+ if (!fs_1.default.existsSync(path_1.default.join(folder, 'package.json'))) {
45
+ fs_1.default.writeFileSync(path_1.default.join(folder, 'package.json'), JSON.stringify({
46
+ name: '.zenstack',
47
+ version: '1.0.0',
48
+ }));
49
+ }
57
50
  }
51
+ exports.ensureNodeModuleFolder = ensureNodeModuleFolder;
58
52
  //# sourceMappingURL=plugin-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-utils.js","names":["RUNTIME_PACKAGE","ALL_OPERATION_KINDS","getNodeModulesFolder","startPath","process","cwd","fs","existsSync","path","join","parent","undefined","getDefaultOutputFolder","modulesFolder","ensureNodeModuleFolder","folder","mkdirSync","recursive","writeFileSync","JSON","stringify","name","version"],"sources":["../../src/plugins/plugin-utils.ts"],"sourcesContent":["import { PolicyOperationKind } from '@zenstackhq/runtime';\nimport fs from 'fs';\nimport path from 'path';\n\nexport const RUNTIME_PACKAGE = '@zenstackhq/runtime';\nexport const ALL_OPERATION_KINDS: PolicyOperationKind[] = ['create', 'update', 'postUpdate', 'read', 'delete'];\n\n/**\n * Gets the nearest \"node_modules\" folder by walking up froma start path.\n */\nexport function getNodeModulesFolder(startPath?: string): string | undefined {\n startPath = startPath ?? process.cwd();\n if (fs.existsSync(path.join(startPath, 'node_modules'))) {\n return path.join(startPath, 'node_modules');\n } else if (startPath !== '/') {\n const parent = path.join(startPath, '..');\n return getNodeModulesFolder(parent);\n } else {\n return undefined;\n }\n}\n\n/**\n * Gets the default node_modules/.zenstack output folder for plugins.\n * @returns\n */\nexport function getDefaultOutputFolder() {\n const modulesFolder = getNodeModulesFolder();\n return modulesFolder ? path.join(modulesFolder, '.zenstack') : undefined;\n}\n\n/**\n * Ensure a folder exists and has a package.json in it.\n */\nexport function ensureNodeModuleFolder(folder: string) {\n if (!fs.existsSync(folder)) {\n fs.mkdirSync(folder, { recursive: true });\n }\n if (!fs.existsSync(path.join(folder, 'package.json'))) {\n fs.writeFileSync(\n path.join(folder, 'package.json'),\n JSON.stringify({\n name: '.zenstack',\n version: '1.0.0',\n })\n );\n }\n}\n"],"mappings":";;;;;;;;;AACA;AACA;AAAwB;AAEjB,MAAMA,eAAe,GAAG,qBAAqB;AAAC;AAC9C,MAAMC,mBAA0C,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC;;AAE9G;AACA;AACA;AAFA;AAGO,SAASC,oBAAoB,CAACC,SAAkB,EAAsB;EACzEA,SAAS,GAAGA,SAAS,IAAIC,OAAO,CAACC,GAAG,EAAE;EACtC,IAAIC,WAAE,CAACC,UAAU,CAACC,aAAI,CAACC,IAAI,CAACN,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE;IACrD,OAAOK,aAAI,CAACC,IAAI,CAACN,SAAS,EAAE,cAAc,CAAC;EAC/C,CAAC,MAAM,IAAIA,SAAS,KAAK,GAAG,EAAE;IAC1B,MAAMO,MAAM,GAAGF,aAAI,CAACC,IAAI,CAACN,SAAS,EAAE,IAAI,CAAC;IACzC,OAAOD,oBAAoB,CAACQ,MAAM,CAAC;EACvC,CAAC,MAAM;IACH,OAAOC,SAAS;EACpB;AACJ;;AAEA;AACA;AACA;AACA;AACO,SAASC,sBAAsB,GAAG;EACrC,MAAMC,aAAa,GAAGX,oBAAoB,EAAE;EAC5C,OAAOW,aAAa,GAAGL,aAAI,CAACC,IAAI,CAACI,aAAa,EAAE,WAAW,CAAC,GAAGF,SAAS;AAC5E;;AAEA;AACA;AACA;AACO,SAASG,sBAAsB,CAACC,MAAc,EAAE;EACnD,IAAI,CAACT,WAAE,CAACC,UAAU,CAACQ,MAAM,CAAC,EAAE;IACxBT,WAAE,CAACU,SAAS,CAACD,MAAM,EAAE;MAAEE,SAAS,EAAE;IAAK,CAAC,CAAC;EAC7C;EACA,IAAI,CAACX,WAAE,CAACC,UAAU,CAACC,aAAI,CAACC,IAAI,CAACM,MAAM,EAAE,cAAc,CAAC,CAAC,EAAE;IACnDT,WAAE,CAACY,aAAa,CACZV,aAAI,CAACC,IAAI,CAACM,MAAM,EAAE,cAAc,CAAC,EACjCI,IAAI,CAACC,SAAS,CAAC;MACXC,IAAI,EAAE,WAAW;MACjBC,OAAO,EAAE;IACb,CAAC,CAAC,CACL;EACL;AACJ"}
1
+ {"version":3,"file":"plugin-utils.js","sourceRoot":"","sources":["../../src/plugins/plugin-utils.ts"],"names":[],"mappings":";;;;;;AACA,4CAAoB;AACpB,gDAAwB;AAEX,QAAA,eAAe,GAAG,qBAAqB,CAAC;AACxC,QAAA,mBAAmB,GAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE/G;;GAEG;AACH,SAAgB,oBAAoB,CAAC,SAAkB;IACnD,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE;QACrD,OAAO,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;KAC/C;SAAM,IAAI,SAAS,KAAK,GAAG,EAAE;QAC1B,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;KACvC;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAVD,oDAUC;AAED;;;GAGG;AACH,SAAgB,sBAAsB;IAClC,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAC7C,OAAO,aAAa,CAAC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAHD,wDAGC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,MAAc;IACjD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACxB,YAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;KAC7C;IACD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EAAE;QACnD,YAAE,CAAC,aAAa,CACZ,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC;YACX,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;SACnB,CAAC,CACL,CAAC;KACL;AACL,CAAC;AAbD,wDAaC"}
@@ -1,16 +1,12 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = indentString;
7
2
  // https://github.com/sindresorhus/indent-string
8
-
3
+ Object.defineProperty(exports, "__esModule", { value: true });
9
4
  /**
10
5
  * Utility for indenting strings
11
6
  */
12
7
  function indentString(string, count = 4) {
13
- const indent = ' ';
14
- return string.replace(/^(?!\s*$)/gm, indent.repeat(count));
8
+ const indent = ' ';
9
+ return string.replace(/^(?!\s*$)/gm, indent.repeat(count));
15
10
  }
11
+ exports.default = indentString;
16
12
  //# sourceMappingURL=indent-string.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"indent-string.js","names":["indentString","string","count","indent","replace","repeat"],"sources":["../../../src/plugins/prisma/indent-string.ts"],"sourcesContent":["// https://github.com/sindresorhus/indent-string\n\n/**\n * Utility for indenting strings\n */\nexport default function indentString(string: string, count = 4): string {\n const indent = ' ';\n return string.replace(/^(?!\\s*$)/gm, indent.repeat(count));\n}\n"],"mappings":";;;;;;AAAA;;AAEA;AACA;AACA;AACe,SAASA,YAAY,CAACC,MAAc,EAAEC,KAAK,GAAG,CAAC,EAAU;EACpE,MAAMC,MAAM,GAAG,GAAG;EAClB,OAAOF,MAAM,CAACG,OAAO,CAAC,aAAa,EAAED,MAAM,CAACE,MAAM,CAACH,KAAK,CAAC,CAAC;AAC9D"}
1
+ {"version":3,"file":"indent-string.js","sourceRoot":"","sources":["../../../src/plugins/prisma/indent-string.ts"],"names":[],"mappings":";AAAA,gDAAgD;;AAEhD;;GAEG;AACH,SAAwB,YAAY,CAAC,MAAc,EAAE,KAAK,GAAG,CAAC;IAC1D,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAHD,+BAGC"}
@@ -1,15 +1,24 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = run;
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
7
15
  exports.name = void 0;
8
- var _schemaGenerator = _interopRequireDefault(require("./schema-generator"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
- const name = 'Prisma';
11
- exports.name = name;
12
- async function run(model, options) {
13
- return new _schemaGenerator.default().generate(model, options);
16
+ const schema_generator_1 = __importDefault(require("./schema-generator"));
17
+ exports.name = 'Prisma';
18
+ function run(model, options) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ return new schema_generator_1.default().generate(model, options);
21
+ });
14
22
  }
23
+ exports.default = run;
15
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["name","run","model","options","PrismaSchemaGenerator","generate"],"sources":["../../../src/plugins/prisma/index.ts"],"sourcesContent":["import { Model } from '@zenstackhq/language/ast';\nimport { PluginOptions } from '@zenstackhq/sdk';\nimport PrismaSchemaGenerator from './schema-generator';\n\nexport const name = 'Prisma';\n\nexport default async function run(model: Model, options: PluginOptions) {\n return new PrismaSchemaGenerator().generate(model, options);\n}\n"],"mappings":";;;;;;;AAEA;AAAuD;AAEhD,MAAMA,IAAI,GAAG,QAAQ;AAAC;AAEd,eAAeC,GAAG,CAACC,KAAY,EAAEC,OAAsB,EAAE;EACpE,OAAO,IAAIC,wBAAqB,EAAE,CAACC,QAAQ,CAACH,KAAK,EAAEC,OAAO,CAAC;AAC/D"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/prisma/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,0EAAuD;AAE1C,QAAA,IAAI,GAAG,QAAQ,CAAC;AAE7B,SAA8B,GAAG,CAAC,KAAY,EAAE,OAAsB;;QAClE,OAAO,IAAI,0BAAqB,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CAAA;AAFD,sBAEC"}