zenstack 1.8.2 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/cli/actions/repl.js +31 -4
  2. package/cli/actions/repl.js.map +1 -1
  3. package/cli/cli-util.js +1 -1
  4. package/cli/cli-util.js.map +1 -1
  5. package/language-server/validator/datamodel-validator.js +22 -16
  6. package/language-server/validator/datamodel-validator.js.map +1 -1
  7. package/language-server/validator/function-invocation-validator.js +1 -0
  8. package/language-server/validator/function-invocation-validator.js.map +1 -1
  9. package/language-server/validator/schema-validator.js +2 -1
  10. package/language-server/validator/schema-validator.js.map +1 -1
  11. package/language-server/zmodel-completion-provider.js +5 -5
  12. package/language-server/zmodel-completion-provider.js.map +1 -1
  13. package/language-server/zmodel-linker.js +10 -2
  14. package/language-server/zmodel-linker.js.map +1 -1
  15. package/language-server/zmodel-module.js +4 -0
  16. package/language-server/zmodel-module.js.map +1 -1
  17. package/package.json +6 -6
  18. package/plugins/prisma/prisma-builder.d.ts +4 -5
  19. package/plugins/prisma/prisma-builder.js +2 -3
  20. package/plugins/prisma/prisma-builder.js.map +1 -1
  21. package/plugins/prisma/schema-generator.d.ts +1 -0
  22. package/plugins/prisma/schema-generator.js +10 -7
  23. package/plugins/prisma/schema-generator.js.map +1 -1
  24. package/plugins/zod/generator.js +4 -1
  25. package/plugins/zod/generator.js.map +1 -1
  26. package/plugins/zod/utils/schema-gen.js +1 -1
  27. package/plugins/zod/utils/schema-gen.js.map +1 -1
  28. package/res/stdlib.zmodel +94 -7
  29. package/utils/exec-utils.d.ts +4 -0
  30. package/utils/exec-utils.js +11 -1
  31. package/utils/exec-utils.js.map +1 -1
  32. package/utils/pkg-utils.d.ts +29 -0
  33. package/utils/pkg-utils.js +42 -22
  34. package/utils/pkg-utils.js.map +1 -1
@@ -1,5 +1,34 @@
1
1
  export type PackageManagers = 'npm' | 'yarn' | 'pnpm';
2
+ /**
3
+ * A type named FindUp that takes a type parameter e which extends boolean.
4
+ * If e extends true, it returns a union type of string[] or undefined.
5
+ * If e does not extend true, it returns a union type of string or undefined.
6
+ *
7
+ * @export
8
+ * @template e A type parameter that extends boolean
9
+ */
10
+ export type FindUp<e extends boolean> = e extends true ? string[] | undefined : string | undefined;
11
+ /**
12
+ * Find and return file paths by searching parent directories based on the given names list and current working directory (cwd) path.
13
+ * Optionally return a single path or multiple paths.
14
+ * If multiple allowed, return all paths found.
15
+ * If no paths are found, return undefined.
16
+ *
17
+ * @export
18
+ * @template [e=false]
19
+ * @param names An array of strings representing names to search for within the directory
20
+ * @param cwd A string representing the current working directory
21
+ * @param [multiple=false as e] A boolean flag indicating whether to search for multiple levels. Useful for finding node_modules directories...
22
+ * @param [result=[]] An array of strings representing the accumulated results used in multiple results
23
+ * @returns Path(s) to a specific file or folder within the directory or parent directories
24
+ */
25
+ export declare function findUp<e extends boolean = false>(names: string[], cwd?: string, multiple?: e, result?: string[]): FindUp<e>;
2
26
  export declare function installPackage(pkg: string, dev: boolean, pkgManager?: PackageManagers | undefined, tag?: string, projectPath?: string, exactVersion?: boolean): void;
3
27
  export declare function ensurePackage(pkg: string, dev: boolean, pkgManager?: PackageManagers | undefined, tag?: string, projectPath?: string, exactVersion?: boolean): void;
28
+ /**
29
+ * A function that searches for the nearest package.json file starting from the provided search path or the current working directory if no search path is provided.
30
+ * It iterates through the directory structure going one level up at a time until it finds a package.json file. If no package.json file is found, it returns undefined.
31
+ * @deprecated Use findUp instead @see findUp
32
+ */
4
33
  export declare function findPackageJson(searchPath?: string): string | undefined;
5
34
  export declare function getPackageJson(searchPath?: string): any;
@@ -3,30 +3,45 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getPackageJson = exports.findPackageJson = exports.ensurePackage = exports.installPackage = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
6
+ exports.getPackageJson = exports.findPackageJson = exports.ensurePackage = exports.installPackage = exports.findUp = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
9
  const exec_utils_1 = require("./exec-utils");
10
- function findUp(names, cwd) {
11
- let dir = cwd;
12
- // eslint-disable-next-line no-constant-condition
13
- while (true) {
14
- const target = names.find((name) => fs_1.default.existsSync(path_1.default.join(dir, name)));
15
- if (target)
16
- return target;
17
- const up = path_1.default.resolve(dir, '..');
18
- if (up === dir)
19
- return undefined; // it'll fail anyway
20
- dir = up;
21
- }
10
+ /**
11
+ * Find and return file paths by searching parent directories based on the given names list and current working directory (cwd) path.
12
+ * Optionally return a single path or multiple paths.
13
+ * If multiple allowed, return all paths found.
14
+ * If no paths are found, return undefined.
15
+ *
16
+ * @export
17
+ * @template [e=false]
18
+ * @param names An array of strings representing names to search for within the directory
19
+ * @param cwd A string representing the current working directory
20
+ * @param [multiple=false as e] A boolean flag indicating whether to search for multiple levels. Useful for finding node_modules directories...
21
+ * @param [result=[]] An array of strings representing the accumulated results used in multiple results
22
+ * @returns Path(s) to a specific file or folder within the directory or parent directories
23
+ */
24
+ function findUp(names, cwd = process.cwd(), multiple = false, result = []) {
25
+ if (!names.some((name) => !!name))
26
+ return undefined;
27
+ const target = names.find((name) => node_fs_1.default.existsSync(node_path_1.default.join(cwd, name)));
28
+ if (multiple == false && target)
29
+ return node_path_1.default.join(cwd, target);
30
+ if (target)
31
+ result.push(node_path_1.default.join(cwd, target));
32
+ const up = node_path_1.default.resolve(cwd, '..');
33
+ if (up === cwd)
34
+ return (multiple && result.length > 0 ? result : undefined); // it'll fail anyway
35
+ return findUp(names, up, multiple, result);
22
36
  }
37
+ exports.findUp = findUp;
23
38
  function getPackageManager(projectPath = '.') {
24
39
  const lockFile = findUp(['yarn.lock', 'pnpm-lock.yaml', 'package-lock.json'], projectPath);
25
40
  if (!lockFile) {
26
41
  // default use npm
27
42
  return 'npm';
28
43
  }
29
- switch (path_1.default.basename(lockFile)) {
44
+ switch (node_path_1.default.basename(lockFile)) {
30
45
  case 'yarn.lock':
31
46
  return 'yarn';
32
47
  case 'pnpm-lock.yaml':
@@ -52,7 +67,7 @@ function installPackage(pkg, dev, pkgManager = undefined, tag = 'latest', projec
52
67
  }
53
68
  exports.installPackage = installPackage;
54
69
  function ensurePackage(pkg, dev, pkgManager = undefined, tag = 'latest', projectPath = '.', exactVersion = false) {
55
- const resolvePath = path_1.default.resolve(projectPath);
70
+ const resolvePath = node_path_1.default.resolve(projectPath);
56
71
  try {
57
72
  require.resolve(pkg, { paths: [resolvePath] });
58
73
  }
@@ -61,14 +76,19 @@ function ensurePackage(pkg, dev, pkgManager = undefined, tag = 'latest', project
61
76
  }
62
77
  }
63
78
  exports.ensurePackage = ensurePackage;
79
+ /**
80
+ * A function that searches for the nearest package.json file starting from the provided search path or the current working directory if no search path is provided.
81
+ * It iterates through the directory structure going one level up at a time until it finds a package.json file. If no package.json file is found, it returns undefined.
82
+ * @deprecated Use findUp instead @see findUp
83
+ */
64
84
  function findPackageJson(searchPath) {
65
85
  let currDir = searchPath !== null && searchPath !== void 0 ? searchPath : process.cwd();
66
86
  while (currDir) {
67
- const pkgJsonPath = path_1.default.join(currDir, 'package.json');
68
- if (fs_1.default.existsSync(pkgJsonPath)) {
87
+ const pkgJsonPath = node_path_1.default.join(currDir, 'package.json');
88
+ if (node_fs_1.default.existsSync(pkgJsonPath)) {
69
89
  return pkgJsonPath;
70
90
  }
71
- const up = path_1.default.resolve(currDir, '..');
91
+ const up = node_path_1.default.resolve(currDir, '..');
72
92
  if (up === currDir) {
73
93
  return undefined;
74
94
  }
@@ -78,9 +98,9 @@ function findPackageJson(searchPath) {
78
98
  }
79
99
  exports.findPackageJson = findPackageJson;
80
100
  function getPackageJson(searchPath) {
81
- const pkgJsonPath = findPackageJson(searchPath);
101
+ const pkgJsonPath = findUp(['package.json'], searchPath !== null && searchPath !== void 0 ? searchPath : process.cwd());
82
102
  if (pkgJsonPath) {
83
- return JSON.parse(fs_1.default.readFileSync(pkgJsonPath, 'utf-8'));
103
+ return JSON.parse(node_fs_1.default.readFileSync(pkgJsonPath, 'utf-8'));
84
104
  }
85
105
  else {
86
106
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"pkg-utils.js","sourceRoot":"","sources":["../../src/utils/pkg-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pkg-utils.js","sourceRoot":"","sources":["../../src/utils/pkg-utils.ts"],"names":[],"mappings":"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"}