@zenstackhq/sdk 1.0.0-alpha.99 → 1.0.0-beta.10

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/code-gen.d.ts CHANGED
@@ -1,5 +1,13 @@
1
- import { Project } from 'ts-morph';
1
+ import { CompilerOptions, Project } from 'ts-morph';
2
+ /**
3
+ * Creates a TS code generation project
4
+ */
5
+ export declare function createProject(options?: CompilerOptions): Project;
6
+ /**
7
+ * Persists a TS project to disk.
8
+ */
9
+ export declare function saveProject(project: Project): Promise<void>;
2
10
  /**
3
11
  * Emit a TS project to JS files.
4
12
  */
5
- export declare function emitProject(project: Project, format?: boolean): Promise<void>;
13
+ export declare function emitProject(project: Project): Promise<void>;
package/code-gen.js CHANGED
@@ -12,8 +12,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.emitProject = void 0;
15
+ exports.emitProject = exports.saveProject = exports.createProject = void 0;
16
16
  const prettier_1 = __importDefault(require("prettier"));
17
+ const ts_morph_1 = require("ts-morph");
18
+ const types_1 = require("./types");
17
19
  const formatOptions = {
18
20
  trailingComma: 'all',
19
21
  tabWidth: 4,
@@ -37,17 +39,47 @@ function formatFile(sourceFile) {
37
39
  }
38
40
  });
39
41
  }
42
+ /**
43
+ * Creates a TS code generation project
44
+ */
45
+ function createProject(options) {
46
+ return new ts_morph_1.Project({
47
+ compilerOptions: Object.assign({ target: ts_morph_1.ScriptTarget.ES2016, module: ts_morph_1.ModuleKind.CommonJS, esModuleInterop: true, declaration: true, strict: true, skipLibCheck: true, noEmitOnError: true }, options),
48
+ });
49
+ }
50
+ exports.createProject = createProject;
51
+ /**
52
+ * Persists a TS project to disk.
53
+ */
54
+ function saveProject(project) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ yield Promise.all(project.getSourceFiles().map((sf) => __awaiter(this, void 0, void 0, function* () {
57
+ yield formatFile(sf);
58
+ })));
59
+ yield project.save();
60
+ });
61
+ }
62
+ exports.saveProject = saveProject;
40
63
  /**
41
64
  * Emit a TS project to JS files.
42
65
  */
43
- function emitProject(project, format = true) {
66
+ function emitProject(project) {
44
67
  return __awaiter(this, void 0, void 0, function* () {
45
- if (format) {
46
- yield Promise.all(project.getSourceFiles().map((sf) => __awaiter(this, void 0, void 0, function* () {
47
- yield formatFile(sf);
48
- })));
68
+ const errors = project.getPreEmitDiagnostics().filter((d) => d.getCategory() === ts_morph_1.DiagnosticCategory.Error);
69
+ if (errors.length > 0) {
70
+ console.error('Error compiling generated code:');
71
+ console.error(project.formatDiagnosticsWithColorAndContext(errors.slice(0, 10)));
72
+ yield project.save();
73
+ throw new types_1.PluginError('', `Error compiling generated code`);
74
+ }
75
+ const result = yield project.emit();
76
+ const emitErrors = result.getDiagnostics().filter((d) => d.getCategory() === ts_morph_1.DiagnosticCategory.Error);
77
+ if (emitErrors.length > 0) {
78
+ console.error('Some generated code is not emitted:');
79
+ console.error(project.formatDiagnosticsWithColorAndContext(emitErrors.slice(0, 10)));
80
+ yield project.save();
81
+ throw new types_1.PluginError('', `Error emitting generated code`);
49
82
  }
50
- yield project.emit();
51
83
  });
52
84
  }
53
85
  exports.emitProject = emitProject;
package/code-gen.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"code-gen.js","sourceRoot":"","sources":["../src/code-gen.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wDAAgC;AAGhC,MAAM,aAAa,GAAG;IAClB,aAAa,EAAE,KAAK;IACpB,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,GAAG;IACf,cAAc,EAAE,IAAI;IACpB,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,YAAY;CACd,CAAC;AAEX,SAAe,UAAU,CAAC,UAAsB;;QAC5C,IAAI;YACA,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,kBAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAC1D,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;SAC3B;QAAC,WAAM;YACJ,WAAW;SACd;IACL,CAAC;CAAA;AAED;;GAEG;AACH,SAAsB,WAAW,CAAC,OAAgB,EAAE,MAAM,GAAG,IAAI;;QAC7D,IAAI,MAAM,EAAE;YACR,MAAM,OAAO,CAAC,GAAG,CACb,OAAO,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAO,EAAE,EAAE,EAAE;gBACtC,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC,CAAA,CAAC,CACL,CAAC;SACL;QACD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;CAAA;AATD,kCASC"}
1
+ {"version":3,"file":"code-gen.js","sourceRoot":"","sources":["../src/code-gen.ts"],"names":[],"mappings":"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"}
package/constants.d.ts CHANGED
@@ -1,25 +1,13 @@
1
1
  /**
2
- * Auxiliary database field for supporting policy check for nested writes
3
- */
4
- export declare const TRANSACTION_FIELD_NAME = "zenstack_transaction";
5
- /**
6
- * Auxiliary database field for building up policy check queries
7
- */
8
- export declare const GUARD_FIELD_NAME = "zenstack_guard";
9
- /**
10
- * All Auxiliary fields.
2
+ * @zenstackhq/runtime package name
11
3
  */
12
- export declare const AUXILIARY_FIELDS: string[];
4
+ export declare const RUNTIME_PACKAGE = "@zenstackhq/runtime";
5
+ export { AUXILIARY_FIELDS, GUARD_FIELD_NAME, TRANSACTION_FIELD_NAME, CrudFailureReason } from '@zenstackhq/runtime';
13
6
  /**
14
- * Reasons for a CRUD operation to fail.
7
+ * Expression context
15
8
  */
16
- export declare enum CrudFailureReason {
17
- /**
18
- * CRUD suceeded but the result was not readable.
19
- */
20
- RESULT_NOT_READABLE = "RESULT_NOT_READABLE"
9
+ export declare enum ExpressionContext {
10
+ DefaultValue = "DefaultValue",
11
+ AccessPolicy = "AccessPolicy",
12
+ ValidationRule = "ValidationRule"
21
13
  }
22
- /**
23
- * @zenstackhq/runtime package name
24
- */
25
- export declare const RUNTIME_PACKAGE = "@zenstackhq/runtime";
package/constants.js CHANGED
@@ -1,30 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RUNTIME_PACKAGE = exports.CrudFailureReason = exports.AUXILIARY_FIELDS = exports.GUARD_FIELD_NAME = exports.TRANSACTION_FIELD_NAME = void 0;
4
- /**
5
- * Auxiliary database field for supporting policy check for nested writes
6
- */
7
- exports.TRANSACTION_FIELD_NAME = 'zenstack_transaction';
8
- /**
9
- * Auxiliary database field for building up policy check queries
10
- */
11
- exports.GUARD_FIELD_NAME = 'zenstack_guard';
12
- /**
13
- * All Auxiliary fields.
14
- */
15
- exports.AUXILIARY_FIELDS = [exports.TRANSACTION_FIELD_NAME, exports.GUARD_FIELD_NAME];
16
- /**
17
- * Reasons for a CRUD operation to fail.
18
- */
19
- var CrudFailureReason;
20
- (function (CrudFailureReason) {
21
- /**
22
- * CRUD suceeded but the result was not readable.
23
- */
24
- CrudFailureReason["RESULT_NOT_READABLE"] = "RESULT_NOT_READABLE";
25
- })(CrudFailureReason = exports.CrudFailureReason || (exports.CrudFailureReason = {}));
3
+ exports.ExpressionContext = exports.CrudFailureReason = exports.TRANSACTION_FIELD_NAME = exports.GUARD_FIELD_NAME = exports.AUXILIARY_FIELDS = exports.RUNTIME_PACKAGE = void 0;
26
4
  /**
27
5
  * @zenstackhq/runtime package name
28
6
  */
29
7
  exports.RUNTIME_PACKAGE = '@zenstackhq/runtime';
8
+ var runtime_1 = require("@zenstackhq/runtime");
9
+ Object.defineProperty(exports, "AUXILIARY_FIELDS", { enumerable: true, get: function () { return runtime_1.AUXILIARY_FIELDS; } });
10
+ Object.defineProperty(exports, "GUARD_FIELD_NAME", { enumerable: true, get: function () { return runtime_1.GUARD_FIELD_NAME; } });
11
+ Object.defineProperty(exports, "TRANSACTION_FIELD_NAME", { enumerable: true, get: function () { return runtime_1.TRANSACTION_FIELD_NAME; } });
12
+ Object.defineProperty(exports, "CrudFailureReason", { enumerable: true, get: function () { return runtime_1.CrudFailureReason; } });
13
+ /**
14
+ * Expression context
15
+ */
16
+ var ExpressionContext;
17
+ (function (ExpressionContext) {
18
+ ExpressionContext["DefaultValue"] = "DefaultValue";
19
+ ExpressionContext["AccessPolicy"] = "AccessPolicy";
20
+ ExpressionContext["ValidationRule"] = "ValidationRule";
21
+ })(ExpressionContext = exports.ExpressionContext || (exports.ExpressionContext = {}));
30
22
  //# sourceMappingURL=constants.js.map
package/constants.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,sBAAsB,GAAG,sBAAsB,CAAC;AAE7D;;GAEG;AACU,QAAA,gBAAgB,GAAG,gBAAgB,CAAC;AAEjD;;GAEG;AACU,QAAA,gBAAgB,GAAG,CAAC,8BAAsB,EAAE,wBAAgB,CAAC,CAAC;AAE3E;;GAEG;AACH,IAAY,iBAKX;AALD,WAAY,iBAAiB;IACzB;;OAEG;IACH,gEAA2C,CAAA;AAC/C,CAAC,EALW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAK5B;AAED;;GAEG;AACU,QAAA,eAAe,GAAG,qBAAqB,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,eAAe,GAAG,qBAAqB,CAAC;AAErD,+CAAoH;AAA3G,2GAAA,gBAAgB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,iHAAA,sBAAsB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAEtF;;GAEG;AACH,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,kDAA6B,CAAA;IAC7B,kDAA6B,CAAA;IAC7B,sDAAiC,CAAA;AACrC,CAAC,EAJW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAI5B"}
@@ -1,4 +1,4 @@
1
- import { DMMF } from '@prisma/generator-helper';
1
+ import type { DMMF } from '@prisma/generator-helper';
2
2
  import { AggregateOperationSupport } from './types';
3
3
  export declare const isAggregateInputType: (name: string) => boolean;
4
4
  export declare function addMissingInputObjectTypesForAggregate(inputObjectTypes: DMMF.InputType[], outputObjectTypes: DMMF.OutputType[]): void;
@@ -1,2 +1,2 @@
1
- import { DMMF } from '@prisma/generator-helper';
1
+ import type { DMMF } from '@prisma/generator-helper';
2
2
  export declare function addMissingInputObjectTypesForInclude(inputObjectTypes: DMMF.InputType[], models: DMMF.Model[]): void;
@@ -1,2 +1,2 @@
1
- import { DMMF } from '@prisma/generator-helper';
1
+ import type { DMMF } from '@prisma/generator-helper';
2
2
  export declare function addMissingInputObjectTypes(inputObjectTypes: DMMF.InputType[], outputObjectTypes: DMMF.OutputType[], models: DMMF.Model[]): void;
@@ -1,4 +1,4 @@
1
- import { DMMF } from '@prisma/generator-helper';
1
+ import type { DMMF } from '@prisma/generator-helper';
2
2
  export declare function checkModelHasModelRelation(model: DMMF.Model): boolean;
3
3
  export declare function checkModelHasManyModelRelation(model: DMMF.Model): boolean;
4
4
  export declare function checkIsModelRelationField(modelField: DMMF.Field): boolean;
@@ -1,2 +1,2 @@
1
- import { DMMF } from '@prisma/generator-helper';
1
+ import type { DMMF } from '@prisma/generator-helper';
2
2
  export declare function addMissingInputObjectTypesForModelArgs(inputObjectTypes: DMMF.InputType[], models: DMMF.Model[]): void;
@@ -1,2 +1,2 @@
1
- import { DMMF } from '@prisma/generator-helper';
1
+ import type { DMMF } from '@prisma/generator-helper';
2
2
  export declare function addMissingInputObjectTypesForSelect(inputObjectTypes: DMMF.InputType[], outputObjectTypes: DMMF.OutputType[], models: DMMF.Model[]): void;
package/index.d.ts CHANGED
@@ -3,3 +3,5 @@ export * from './constants';
3
3
  export * from './types';
4
4
  export * from './utils';
5
5
  export * from './policy';
6
+ export * from './validation';
7
+ export * from './prisma';
package/index.js CHANGED
@@ -19,4 +19,6 @@ __exportStar(require("./constants"), exports);
19
19
  __exportStar(require("./types"), exports);
20
20
  __exportStar(require("./utils"), exports);
21
21
  __exportStar(require("./policy"), exports);
22
+ __exportStar(require("./validation"), exports);
23
+ __exportStar(require("./prisma"), exports);
22
24
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,8CAA4B;AAC5B,0CAAwB;AACxB,0CAAwB;AACxB,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,8CAA4B;AAC5B,0CAAwB;AACxB,0CAAwB;AACxB,2CAAyB;AACzB,+CAA6B;AAC7B,2CAAyB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenstackhq/sdk",
3
- "version": "1.0.0-alpha.99",
3
+ "version": "1.0.0-beta.10",
4
4
  "description": "ZenStack plugin development SDK",
5
5
  "main": "index.js",
6
6
  "publishConfig": {
@@ -11,12 +11,17 @@
11
11
  "author": "",
12
12
  "license": "MIT",
13
13
  "dependencies": {
14
- "@prisma/generator-helper": "^4.7.1",
14
+ "@prisma/generator-helper": "^5.0.0",
15
+ "@prisma/internals": "4.10.0",
16
+ "@prisma/internals-v5": "npm:@prisma/internals@^5.0.0",
15
17
  "prettier": "^2.8.3",
18
+ "semver": "^7.3.8",
16
19
  "ts-morph": "^16.0.0",
17
- "@zenstackhq/language": "1.0.0-alpha.99"
20
+ "@zenstackhq/language": "1.0.0-beta.10",
21
+ "@zenstackhq/runtime": "1.0.0-beta.10"
18
22
  },
19
23
  "devDependencies": {
24
+ "@types/semver": "^7.3.13",
20
25
  "copyfiles": "^2.4.1",
21
26
  "rimraf": "^3.0.2",
22
27
  "typescript": "^4.9.4"
@@ -24,7 +29,7 @@
24
29
  "scripts": {
25
30
  "clean": "rimraf dist",
26
31
  "lint": "eslint src --ext ts",
27
- "build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist",
32
+ "build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist && pnpm pack dist --pack-destination '../../../.build'",
28
33
  "watch": "tsc --watch",
29
34
  "publish-dev": "pnpm build && pnpm publish --tag dev"
30
35
  }
package/policy.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import type { DataModel, DataModelAttribute } from './ast';
2
- export declare const VALIDATION_ATTRIBUTES: string[];
3
2
  export declare function analyzePolicies(dataModel: DataModel): {
4
3
  allows: DataModelAttribute[];
5
4
  denies: DataModelAttribute[];
package/policy.js CHANGED
@@ -1,20 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyzePolicies = exports.VALIDATION_ATTRIBUTES = void 0;
3
+ exports.analyzePolicies = void 0;
4
4
  const utils_1 = require("./utils");
5
- exports.VALIDATION_ATTRIBUTES = [
6
- '@length',
7
- '@regex',
8
- '@startsWith',
9
- '@endsWith',
10
- '@email',
11
- '@url',
12
- '@datetime',
13
- '@gt',
14
- '@gte',
15
- '@lt',
16
- '@lte',
17
- ];
5
+ const validation_1 = require("./validation");
18
6
  function analyzePolicies(dataModel) {
19
7
  const allows = dataModel.attributes.filter((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@allow'; });
20
8
  const denies = dataModel.attributes.filter((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@deny'; });
@@ -22,7 +10,7 @@ function analyzePolicies(dataModel) {
22
10
  const read = toStaticPolicy('read', allows, denies);
23
11
  const update = toStaticPolicy('update', allows, denies);
24
12
  const del = toStaticPolicy('delete', allows, denies);
25
- const hasFieldValidation = dataModel.fields.some((field) => field.attributes.some((attr) => exports.VALIDATION_ATTRIBUTES.includes(attr.decl.$refText)));
13
+ const hasFieldValidation = (0, validation_1.hasValidationAttributes)(dataModel);
26
14
  return {
27
15
  allows,
28
16
  denies,
package/policy.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
package/prisma.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ import type { DMMF } from '@prisma/generator-helper';
2
+ import { Model } from './ast';
3
+ /**
4
+ * Given a ZModel and an import context directory, compute the import spec for the Prisma Client.
5
+ */
6
+ export declare function getPrismaClientImportSpec(model: Model, importingFromDir: string): any;
7
+ /**
8
+ * Gets installed Prisma version by first checking "@prisma/client" and if not available,
9
+ * "prisma".
10
+ */
11
+ export declare function getPrismaVersion(): string | undefined;
12
+ export type GetDMMFOptions = {
13
+ datamodel?: string;
14
+ cwd?: string;
15
+ prismaPath?: string;
16
+ datamodelPath?: string;
17
+ retry?: number;
18
+ previewFeatures?: string[];
19
+ };
20
+ /**
21
+ * Loads Prisma DMMF with appropriate version
22
+ */
23
+ export declare function getDMMF(options: GetDMMFOptions): Promise<DMMF.Document>;
package/prisma.js ADDED
@@ -0,0 +1,116 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.getDMMF = exports.getPrismaVersion = exports.getPrismaClientImportSpec = void 0;
30
+ const internals_1 = require("@prisma/internals");
31
+ const internals_v5_1 = require("@prisma/internals-v5");
32
+ const path_1 = __importDefault(require("path"));
33
+ const semver = __importStar(require("semver"));
34
+ const ast_1 = require("./ast");
35
+ const utils_1 = require("./utils");
36
+ /**
37
+ * Given a ZModel and an import context directory, compute the import spec for the Prisma Client.
38
+ */
39
+ function getPrismaClientImportSpec(model, importingFromDir) {
40
+ var _a;
41
+ const generator = model.declarations.find((d) => (0, ast_1.isGeneratorDecl)(d) &&
42
+ d.fields.some((f) => f.name === 'provider' && (0, utils_1.getLiteral)(f.value) === 'prisma-client-js'));
43
+ const clientOutputField = generator === null || generator === void 0 ? void 0 : generator.fields.find((f) => f.name === 'output');
44
+ const clientOutput = (0, utils_1.getLiteral)(clientOutputField === null || clientOutputField === void 0 ? void 0 : clientOutputField.value);
45
+ if (!clientOutput) {
46
+ // no user-declared Prisma Client output location
47
+ return '@prisma/client';
48
+ }
49
+ if (path_1.default.isAbsolute(clientOutput)) {
50
+ // absolute path
51
+ return clientOutput;
52
+ }
53
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
54
+ const zmodelDir = path_1.default.dirname(model.$document.uri.fsPath);
55
+ // compute prisma schema absolute output path
56
+ let prismaSchemaOutputDir = path_1.default.resolve(zmodelDir, './prisma');
57
+ const prismaPlugin = model.declarations.find((d) => (0, ast_1.isPlugin)(d) && d.fields.some((f) => f.name === 'provider' && (0, utils_1.getLiteral)(f.value) === '@core/prisma'));
58
+ if (prismaPlugin) {
59
+ const output = (0, utils_1.getLiteral)((_a = prismaPlugin.fields.find((f) => f.name === 'output')) === null || _a === void 0 ? void 0 : _a.value);
60
+ if (output) {
61
+ if (path_1.default.isAbsolute(output)) {
62
+ // absolute prisma schema output path
63
+ prismaSchemaOutputDir = path_1.default.dirname(output);
64
+ }
65
+ else {
66
+ prismaSchemaOutputDir = path_1.default.dirname(path_1.default.resolve(zmodelDir, output));
67
+ }
68
+ }
69
+ }
70
+ // resolve the prisma client output path, which is relative to the prisma schema
71
+ const resolvedPrismaClientOutput = path_1.default.resolve(prismaSchemaOutputDir, clientOutput);
72
+ // DEBUG:
73
+ // console.log('PRISMA SCHEMA PATH:', prismaSchemaOutputDir);
74
+ // console.log('PRISMA CLIENT PATH:', resolvedPrismaClientOutput);
75
+ // console.log('IMPORTING PATH:', importingFromDir);
76
+ // compute prisma client absolute output dir relative to the importing file
77
+ return normalizePath(path_1.default.relative(importingFromDir, resolvedPrismaClientOutput));
78
+ }
79
+ exports.getPrismaClientImportSpec = getPrismaClientImportSpec;
80
+ function normalizePath(p) {
81
+ return p ? p.split(path_1.default.sep).join(path_1.default.posix.sep) : p;
82
+ }
83
+ /**
84
+ * Gets installed Prisma version by first checking "@prisma/client" and if not available,
85
+ * "prisma".
86
+ */
87
+ function getPrismaVersion() {
88
+ try {
89
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
90
+ return require('@prisma/client/package.json').version;
91
+ }
92
+ catch (_a) {
93
+ try {
94
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
95
+ return require('prisma/package.json').version;
96
+ }
97
+ catch (_b) {
98
+ return undefined;
99
+ }
100
+ }
101
+ }
102
+ exports.getPrismaVersion = getPrismaVersion;
103
+ /**
104
+ * Loads Prisma DMMF with appropriate version
105
+ */
106
+ function getDMMF(options) {
107
+ const prismaVersion = getPrismaVersion();
108
+ if (prismaVersion && semver.gte(prismaVersion, '5.0.0')) {
109
+ return (0, internals_v5_1.getDMMF)(options);
110
+ }
111
+ else {
112
+ return (0, internals_1.getDMMF)(options);
113
+ }
114
+ }
115
+ exports.getDMMF = getDMMF;
116
+ //# sourceMappingURL=prisma.js.map
package/prisma.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../src/prisma.ts"],"names":[],"mappings":"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"}
package/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { DMMF } from '@prisma/generator-helper';
1
+ import type { DMMF } from '@prisma/generator-helper';
2
2
  import { Model } from '@zenstackhq/language/ast';
3
3
  /**
4
4
  * Plugin configuration option value type
@@ -10,6 +10,7 @@ export type OptionValue = string | number | boolean;
10
10
  export type PluginOptions = {
11
11
  provider?: string;
12
12
  schemaPath: string;
13
+ name: string;
13
14
  } & Record<string, OptionValue | OptionValue[]>;
14
15
  /**
15
16
  * Plugin entry point function definition
@@ -19,5 +20,6 @@ export type PluginFunction = (model: Model, options: PluginOptions, dmmf?: DMMF.
19
20
  * Plugin error
20
21
  */
21
22
  export declare class PluginError extends Error {
22
- constructor(message: string);
23
+ plugin: string;
24
+ constructor(plugin: string, message: string);
23
25
  }
package/types.js CHANGED
@@ -5,8 +5,9 @@ exports.PluginError = void 0;
5
5
  * Plugin error
6
6
  */
7
7
  class PluginError extends Error {
8
- constructor(message) {
8
+ constructor(plugin, message) {
9
9
  super(message);
10
+ this.plugin = plugin;
10
11
  }
11
12
  }
12
13
  exports.PluginError = PluginError;
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAuBA;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IAClC,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;CACJ;AAJD,kCAIC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA0BA;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IAClC,YAAmB,MAAc,EAAE,OAAe;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QADA,WAAM,GAAN,MAAM,CAAQ;IAEjC,CAAC;CACJ;AAJD,kCAIC"}
package/utils.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- import { AstNode, DataModel, DataModelAttribute, DataModelField, DataModelFieldAttribute, Enum, EnumField, Expression, Model, Reference } from '@zenstackhq/language/ast';
1
+ import { AstNode, DataModel, DataModelAttribute, DataModelField, DataModelFieldAttribute, Enum, EnumField, Expression, FunctionDecl, InternalAttribute, Model, Reference, ReferenceExpr } from '@zenstackhq/language/ast';
2
+ import { PluginOptions } from './types';
3
+ import { ExpressionContext } from './constants';
2
4
  /**
3
5
  * Gets data models that are not ignored
4
6
  */
@@ -6,10 +8,34 @@ export declare function getDataModels(model: Model): DataModel[];
6
8
  export declare function resolved<T extends AstNode>(ref: Reference<T>): T;
7
9
  export declare function getLiteral<T extends string | number | boolean | any = any>(expr: Expression | undefined): T | undefined;
8
10
  export declare function getArray(expr: Expression | undefined): Expression[] | undefined;
9
- export declare function getLiteralArray<T extends string | number | boolean | any = any>(expr: Expression | undefined): (T | undefined)[] | undefined;
11
+ export declare function getLiteralArray<T extends string | number | boolean | any = any>(expr: Expression | undefined): T[] | undefined;
10
12
  export declare function getObjectLiteral<T>(expr: Expression | undefined): T | undefined;
11
13
  export default function indentString(string: string, count?: number): string;
12
14
  export declare function hasAttribute(decl: DataModel | DataModelField | Enum | EnumField, name: string): boolean;
13
- export declare function getAttributeArgs(attr: DataModelAttribute | DataModelFieldAttribute): Record<string, Expression>;
14
- export declare function getAttributeArg(attr: DataModelAttribute | DataModelFieldAttribute, name: string): Expression | undefined;
15
+ export declare function getAttributeArgs(attr: DataModelAttribute | DataModelFieldAttribute | InternalAttribute): Record<string, Expression>;
16
+ export declare function getAttributeArg(attr: DataModelAttribute | DataModelFieldAttribute | InternalAttribute, name: string): Expression | undefined;
15
17
  export declare function getAttributeArgLiteral<T extends string | number | boolean>(attr: DataModelAttribute | DataModelFieldAttribute, name: string): T | undefined;
18
+ export declare function isEnumFieldReference(node: AstNode): node is ReferenceExpr;
19
+ /**
20
+ * Gets `@@id` fields declared at the data model level
21
+ */
22
+ export declare function getModelIdFields(model: DataModel): DataModelField[];
23
+ /**
24
+ * Gets `@@unique` fields declared at the data model level
25
+ */
26
+ export declare function getModelUniqueFields(model: DataModel): DataModelField[];
27
+ /**
28
+ * Returns if the given field is declared as an id field.
29
+ */
30
+ export declare function isIdField(field: DataModelField): boolean;
31
+ /**
32
+ * Returns if the given field is a relation field.
33
+ */
34
+ export declare function isRelationshipField(field: DataModelField): boolean;
35
+ /**
36
+ * Returns if the given field is a relation foreign key field.
37
+ */
38
+ export declare function isForeignKeyField(field: DataModelField): boolean;
39
+ export declare function resolvePath(_path: string, options: PluginOptions): string;
40
+ export declare function requireOption<T>(options: PluginOptions, name: string): T;
41
+ export declare function getFunctionExpressionContext(funcDecl: FunctionDecl): ExpressionContext[];
package/utils.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAttributeArgLiteral = exports.getAttributeArg = exports.getAttributeArgs = exports.hasAttribute = exports.getObjectLiteral = exports.getLiteralArray = exports.getArray = exports.getLiteral = exports.resolved = exports.getDataModels = void 0;
6
+ exports.getFunctionExpressionContext = exports.requireOption = exports.resolvePath = exports.isForeignKeyField = exports.isRelationshipField = exports.isIdField = exports.getModelUniqueFields = exports.getModelIdFields = exports.isEnumFieldReference = exports.getAttributeArgLiteral = exports.getAttributeArg = exports.getAttributeArgs = exports.hasAttribute = exports.getObjectLiteral = exports.getLiteralArray = exports.getArray = exports.getLiteral = exports.resolved = exports.getDataModels = void 0;
4
7
  const ast_1 = require("@zenstackhq/language/ast");
8
+ const path_1 = __importDefault(require("path"));
5
9
  /**
6
10
  * Gets data models that are not ignored
7
11
  */
@@ -19,7 +23,7 @@ exports.resolved = resolved;
19
23
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
24
  function getLiteral(expr) {
21
25
  if (!(0, ast_1.isLiteralExpr)(expr)) {
22
- return undefined;
26
+ return getObjectLiteral(expr);
23
27
  }
24
28
  return expr.value;
25
29
  }
@@ -33,7 +37,7 @@ function getLiteralArray(expr) {
33
37
  if (!arr) {
34
38
  return undefined;
35
39
  }
36
- return arr.map((item) => { var _a; return (_a = getLiteral(item)) !== null && _a !== void 0 ? _a : getObjectLiteral(item); });
40
+ return arr.map((item) => getLiteral(item)).filter((v) => v !== undefined);
37
41
  }
38
42
  exports.getLiteralArray = getLiteralArray;
39
43
  function getObjectLiteral(expr) {
@@ -102,4 +106,141 @@ function getAttributeArgLiteral(attr, name) {
102
106
  return undefined;
103
107
  }
104
108
  exports.getAttributeArgLiteral = getAttributeArgLiteral;
109
+ function isEnumFieldReference(node) {
110
+ return (0, ast_1.isReferenceExpr)(node) && (0, ast_1.isEnumField)(node.target.ref);
111
+ }
112
+ exports.isEnumFieldReference = isEnumFieldReference;
113
+ /**
114
+ * Gets `@@id` fields declared at the data model level
115
+ */
116
+ function getModelIdFields(model) {
117
+ const idAttr = model.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@id'; });
118
+ if (!idAttr) {
119
+ return [];
120
+ }
121
+ const fieldsArg = idAttr.args.find((a) => { var _a; return ((_a = a.$resolvedParam) === null || _a === void 0 ? void 0 : _a.name) === 'fields'; });
122
+ if (!fieldsArg || !(0, ast_1.isArrayExpr)(fieldsArg.value)) {
123
+ return [];
124
+ }
125
+ return fieldsArg.value.items
126
+ .filter((item) => (0, ast_1.isReferenceExpr)(item))
127
+ .map((item) => resolved(item.target));
128
+ }
129
+ exports.getModelIdFields = getModelIdFields;
130
+ /**
131
+ * Gets `@@unique` fields declared at the data model level
132
+ */
133
+ function getModelUniqueFields(model) {
134
+ const uniqueAttr = model.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@unique'; });
135
+ if (!uniqueAttr) {
136
+ return [];
137
+ }
138
+ const fieldsArg = uniqueAttr.args.find((a) => { var _a; return ((_a = a.$resolvedParam) === null || _a === void 0 ? void 0 : _a.name) === 'fields'; });
139
+ if (!fieldsArg || !(0, ast_1.isArrayExpr)(fieldsArg.value)) {
140
+ return [];
141
+ }
142
+ return fieldsArg.value.items
143
+ .filter((item) => (0, ast_1.isReferenceExpr)(item))
144
+ .map((item) => resolved(item.target));
145
+ }
146
+ exports.getModelUniqueFields = getModelUniqueFields;
147
+ /**
148
+ * Returns if the given field is declared as an id field.
149
+ */
150
+ function isIdField(field) {
151
+ // field-level @id attribute
152
+ if (hasAttribute(field, '@id')) {
153
+ return true;
154
+ }
155
+ const model = field.$container;
156
+ // model-level @@id attribute with a list of fields
157
+ const modelLevelIds = getModelIdFields(model);
158
+ if (modelLevelIds.includes(field)) {
159
+ return true;
160
+ }
161
+ if (model.fields.some((f) => hasAttribute(f, '@id')) || modelLevelIds.length > 0) {
162
+ // the model already has id field, don't check @unique and @@unique
163
+ return false;
164
+ }
165
+ // then, the first field with @unique can be used as id
166
+ const firstUniqueField = model.fields.find((f) => hasAttribute(f, '@unique'));
167
+ if (firstUniqueField) {
168
+ return firstUniqueField === field;
169
+ }
170
+ // last, the first model level @@unique can be used as id
171
+ const modelLevelUnique = getModelUniqueFields(model);
172
+ if (modelLevelUnique.includes(field)) {
173
+ return true;
174
+ }
175
+ return false;
176
+ }
177
+ exports.isIdField = isIdField;
178
+ /**
179
+ * Returns if the given field is a relation field.
180
+ */
181
+ function isRelationshipField(field) {
182
+ var _a;
183
+ return (0, ast_1.isDataModel)((_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref);
184
+ }
185
+ exports.isRelationshipField = isRelationshipField;
186
+ /**
187
+ * Returns if the given field is a relation foreign key field.
188
+ */
189
+ function isForeignKeyField(field) {
190
+ const model = field.$container;
191
+ return model.fields.some((f) => {
192
+ // find @relation attribute
193
+ const relAttr = f.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@relation'; });
194
+ if (relAttr) {
195
+ // find "fields" arg
196
+ const fieldsArg = relAttr.args.find((a) => { var _a; return ((_a = a.$resolvedParam) === null || _a === void 0 ? void 0 : _a.name) === 'fields'; });
197
+ if (fieldsArg && (0, ast_1.isArrayExpr)(fieldsArg.value)) {
198
+ // find a matching field reference
199
+ return fieldsArg.value.items.some((item) => {
200
+ if ((0, ast_1.isReferenceExpr)(item)) {
201
+ return item.target.ref === field;
202
+ }
203
+ else {
204
+ return false;
205
+ }
206
+ });
207
+ }
208
+ }
209
+ return false;
210
+ });
211
+ }
212
+ exports.isForeignKeyField = isForeignKeyField;
213
+ function resolvePath(_path, options) {
214
+ if (path_1.default.isAbsolute(_path)) {
215
+ return _path;
216
+ }
217
+ else {
218
+ return path_1.default.join(path_1.default.dirname(options.schemaPath), _path);
219
+ }
220
+ }
221
+ exports.resolvePath = resolvePath;
222
+ function requireOption(options, name) {
223
+ const value = options[name];
224
+ if (value === undefined) {
225
+ throw new Error(`Plugin "${options.name}" is missing required option: ${name}`);
226
+ }
227
+ return value;
228
+ }
229
+ exports.requireOption = requireOption;
230
+ function getFunctionExpressionContext(funcDecl) {
231
+ const funcAllowedContext = [];
232
+ const funcAttr = funcDecl.attributes.find((attr) => attr.decl.$refText === '@@@expressionContext');
233
+ if (funcAttr) {
234
+ const contextArg = funcAttr.args[0].value;
235
+ if ((0, ast_1.isArrayExpr)(contextArg)) {
236
+ contextArg.items.forEach((item) => {
237
+ if (isEnumFieldReference(item)) {
238
+ funcAllowedContext.push(item.target.$refText);
239
+ }
240
+ });
241
+ }
242
+ }
243
+ return funcAllowedContext;
244
+ }
245
+ exports.getFunctionExpressionContext = getFunctionExpressionContext;
105
246
  //# sourceMappingURL=utils.js.map
package/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DataModel } from './ast';
2
+ /**
3
+ * Returns if the given model contains any data validation rules (both at the model
4
+ * level and at the field level).
5
+ */
6
+ export declare function hasValidationAttributes(model: DataModel): boolean;
package/validation.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasValidationAttributes = void 0;
4
+ function isValidationAttribute(attr) {
5
+ var _a;
6
+ return (_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.attributes.some((attr) => attr.decl.$refText === '@@@validation');
7
+ }
8
+ /**
9
+ * Returns if the given model contains any data validation rules (both at the model
10
+ * level and at the field level).
11
+ */
12
+ function hasValidationAttributes(model) {
13
+ if (model.attributes.some((attr) => isValidationAttribute(attr))) {
14
+ return true;
15
+ }
16
+ if (model.fields.some((field) => field.attributes.some((attr) => isValidationAttribute(attr)))) {
17
+ return true;
18
+ }
19
+ return false;
20
+ }
21
+ exports.hasValidationAttributes = hasValidationAttributes;
22
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":";;;AAEA,SAAS,qBAAqB,CAAC,IAAkD;;IAC7E,OAAO,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,0CAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,eAAe,CAAC,CAAC;AAC5F,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CAAC,KAAgB;IACpD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE;QAC9D,OAAO,IAAI,CAAC;KACf;IAED,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAC5F,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAVD,0DAUC"}