@zenstackhq/sdk 1.0.0-beta.2 → 1.0.0-beta.20
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/constants.d.ts +10 -1
- package/constants.js +16 -6
- package/constants.js.map +1 -1
- package/dmmf-helpers/aggregate-helpers.d.ts +1 -1
- package/dmmf-helpers/aggregate-helpers.js +2 -1
- package/dmmf-helpers/aggregate-helpers.js.map +1 -1
- package/dmmf-helpers/include-helpers.d.ts +1 -1
- package/dmmf-helpers/missing-types-helper.d.ts +1 -1
- package/dmmf-helpers/model-helpers.d.ts +1 -1
- package/dmmf-helpers/modelArgs-helpers.d.ts +1 -1
- package/dmmf-helpers/select-helpers.d.ts +1 -1
- package/index.d.ts +2 -0
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +11 -5
- package/policy.d.ts +0 -1
- package/policy.js +3 -15
- package/policy.js.map +1 -1
- package/prisma.d.ts +19 -0
- package/prisma.js +101 -0
- package/prisma.js.map +1 -0
- package/types.d.ts +1 -1
- package/utils.d.ts +17 -6
- package/utils.js +81 -8
- package/utils.js.map +1 -1
- package/validation.d.ts +6 -0
- package/validation.js +22 -0
- package/validation.js.map +1 -0
package/constants.d.ts
CHANGED
|
@@ -2,4 +2,13 @@
|
|
|
2
2
|
* @zenstackhq/runtime package name
|
|
3
3
|
*/
|
|
4
4
|
export declare const RUNTIME_PACKAGE = "@zenstackhq/runtime";
|
|
5
|
-
export { AUXILIARY_FIELDS, GUARD_FIELD_NAME, TRANSACTION_FIELD_NAME, CrudFailureReason
|
|
5
|
+
export { AUXILIARY_FIELDS, GUARD_FIELD_NAME, TRANSACTION_FIELD_NAME, CrudFailureReason } from '@zenstackhq/runtime';
|
|
6
|
+
/**
|
|
7
|
+
* Expression context
|
|
8
|
+
*/
|
|
9
|
+
export declare enum ExpressionContext {
|
|
10
|
+
DefaultValue = "DefaultValue",
|
|
11
|
+
AccessPolicy = "AccessPolicy",
|
|
12
|
+
ValidationRule = "ValidationRule"
|
|
13
|
+
}
|
|
14
|
+
export declare const STD_LIB_MODULE_NAME = "stdlib.zmodel";
|
package/constants.js
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CrudFailureReason = exports.TRANSACTION_FIELD_NAME = exports.GUARD_FIELD_NAME = exports.AUXILIARY_FIELDS = exports.RUNTIME_PACKAGE = void 0;
|
|
3
|
+
exports.STD_LIB_MODULE_NAME = exports.ExpressionContext = exports.CrudFailureReason = exports.TRANSACTION_FIELD_NAME = exports.GUARD_FIELD_NAME = exports.AUXILIARY_FIELDS = exports.RUNTIME_PACKAGE = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* @zenstackhq/runtime package name
|
|
6
6
|
*/
|
|
7
7
|
exports.RUNTIME_PACKAGE = '@zenstackhq/runtime';
|
|
8
|
-
var
|
|
9
|
-
Object.defineProperty(exports, "AUXILIARY_FIELDS", { enumerable: true, get: function () { return
|
|
10
|
-
Object.defineProperty(exports, "GUARD_FIELD_NAME", { enumerable: true, get: function () { return
|
|
11
|
-
Object.defineProperty(exports, "TRANSACTION_FIELD_NAME", { enumerable: true, get: function () { return
|
|
12
|
-
Object.defineProperty(exports, "CrudFailureReason", { enumerable: true, get: function () { return
|
|
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 = {}));
|
|
22
|
+
exports.STD_LIB_MODULE_NAME = 'stdlib.zmodel';
|
|
13
23
|
//# 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,eAAe,GAAG,qBAAqB,CAAC;AAErD
|
|
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;AAEY,QAAA,mBAAmB,GAAG,eAAe,CAAC"}
|
|
@@ -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,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resolveAggregateOperationSupport = exports.addMissingInputObjectTypesForAggregate = exports.isAggregateInputType = void 0;
|
|
4
|
+
const upper_case_first_1 = require("upper-case-first");
|
|
4
5
|
const isAggregateOutputType = (name) => /(?:Count|Avg|Sum|Min|Max)AggregateOutputType$/.test(name);
|
|
5
6
|
const isAggregateInputType = (name) => name.endsWith('CountAggregateInput') ||
|
|
6
7
|
name.endsWith('SumAggregateInput') ||
|
|
@@ -14,7 +15,7 @@ function addMissingInputObjectTypesForAggregate(inputObjectTypes, outputObjectTy
|
|
|
14
15
|
const name = aggregateOutputType.name.replace(/(?:OutputType|Output)$/, '');
|
|
15
16
|
inputObjectTypes.push({
|
|
16
17
|
constraints: { maxNumFields: null, minNumFields: null },
|
|
17
|
-
name: `${name}Input`,
|
|
18
|
+
name: `${(0, upper_case_first_1.upperCaseFirst)(name)}Input`,
|
|
18
19
|
fields: aggregateOutputType.fields.map((field) => ({
|
|
19
20
|
name: field.name,
|
|
20
21
|
isNullable: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-helpers.js","sourceRoot":"","sources":["../../src/dmmf-helpers/aggregate-helpers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"aggregate-helpers.js","sourceRoot":"","sources":["../../src/dmmf-helpers/aggregate-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
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-beta.
|
|
3
|
+
"version": "1.0.0-beta.20",
|
|
4
4
|
"description": "ZenStack plugin development SDK",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -11,13 +11,19 @@
|
|
|
11
11
|
"author": "",
|
|
12
12
|
"license": "MIT",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@prisma/generator-helper": "^
|
|
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
|
-
"
|
|
18
|
-
"@zenstackhq/
|
|
20
|
+
"upper-case-first": "^2.0.2",
|
|
21
|
+
"@zenstackhq/language": "1.0.0-beta.20",
|
|
22
|
+
"@zenstackhq/runtime": "1.0.0-beta.20"
|
|
19
23
|
},
|
|
20
24
|
"devDependencies": {
|
|
25
|
+
"@types/node": "^18.0.0",
|
|
26
|
+
"@types/semver": "^7.3.13",
|
|
21
27
|
"copyfiles": "^2.4.1",
|
|
22
28
|
"rimraf": "^3.0.2",
|
|
23
29
|
"typescript": "^4.9.4"
|
|
@@ -25,7 +31,7 @@
|
|
|
25
31
|
"scripts": {
|
|
26
32
|
"clean": "rimraf dist",
|
|
27
33
|
"lint": "eslint src --ext ts",
|
|
28
|
-
"build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist",
|
|
34
|
+
"build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist && pnpm pack dist --pack-destination '../../../.build'",
|
|
29
35
|
"watch": "tsc --watch",
|
|
30
36
|
"publish-dev": "pnpm build && pnpm publish --tag dev"
|
|
31
37
|
}
|
package/policy.d.ts
CHANGED
package/policy.js
CHANGED
|
@@ -1,20 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.analyzePolicies =
|
|
3
|
+
exports.analyzePolicies = void 0;
|
|
4
4
|
const utils_1 = require("./utils");
|
|
5
|
-
|
|
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 =
|
|
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":";;;AACA,mCAAqC;
|
|
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,19 @@
|
|
|
1
|
+
import type { DMMF } from '@prisma/generator-helper';
|
|
2
|
+
import { Model } from './ast';
|
|
3
|
+
export { getPrismaVersion } from '@zenstackhq/runtime';
|
|
4
|
+
/**
|
|
5
|
+
* Given a ZModel and an import context directory, compute the import spec for the Prisma Client.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getPrismaClientImportSpec(model: Model, importingFromDir: string): any;
|
|
8
|
+
export type GetDMMFOptions = {
|
|
9
|
+
datamodel?: string;
|
|
10
|
+
cwd?: string;
|
|
11
|
+
prismaPath?: string;
|
|
12
|
+
datamodelPath?: string;
|
|
13
|
+
retry?: number;
|
|
14
|
+
previewFeatures?: string[];
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Loads Prisma DMMF with appropriate version
|
|
18
|
+
*/
|
|
19
|
+
export declare function getDMMF(options: GetDMMFOptions): Promise<DMMF.Document>;
|
package/prisma.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.getDMMF = exports.getPrismaClientImportSpec = exports.getPrismaVersion = void 0;
|
|
31
|
+
const runtime_1 = require("@zenstackhq/runtime");
|
|
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
|
+
// reexport
|
|
37
|
+
var runtime_2 = require("@zenstackhq/runtime");
|
|
38
|
+
Object.defineProperty(exports, "getPrismaVersion", { enumerable: true, get: function () { return runtime_2.getPrismaVersion; } });
|
|
39
|
+
/**
|
|
40
|
+
* Given a ZModel and an import context directory, compute the import spec for the Prisma Client.
|
|
41
|
+
*/
|
|
42
|
+
function getPrismaClientImportSpec(model, importingFromDir) {
|
|
43
|
+
var _a;
|
|
44
|
+
const generator = model.declarations.find((d) => (0, ast_1.isGeneratorDecl)(d) &&
|
|
45
|
+
d.fields.some((f) => f.name === 'provider' && (0, utils_1.getLiteral)(f.value) === 'prisma-client-js'));
|
|
46
|
+
const clientOutputField = generator === null || generator === void 0 ? void 0 : generator.fields.find((f) => f.name === 'output');
|
|
47
|
+
const clientOutput = (0, utils_1.getLiteral)(clientOutputField === null || clientOutputField === void 0 ? void 0 : clientOutputField.value);
|
|
48
|
+
if (!clientOutput) {
|
|
49
|
+
// no user-declared Prisma Client output location
|
|
50
|
+
return '@prisma/client';
|
|
51
|
+
}
|
|
52
|
+
if (path_1.default.isAbsolute(clientOutput)) {
|
|
53
|
+
// absolute path
|
|
54
|
+
return clientOutput;
|
|
55
|
+
}
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
57
|
+
const zmodelDir = path_1.default.dirname(model.$document.uri.fsPath);
|
|
58
|
+
// compute prisma schema absolute output path
|
|
59
|
+
let prismaSchemaOutputDir = path_1.default.resolve(zmodelDir, './prisma');
|
|
60
|
+
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'));
|
|
61
|
+
if (prismaPlugin) {
|
|
62
|
+
const output = (0, utils_1.getLiteral)((_a = prismaPlugin.fields.find((f) => f.name === 'output')) === null || _a === void 0 ? void 0 : _a.value);
|
|
63
|
+
if (output) {
|
|
64
|
+
if (path_1.default.isAbsolute(output)) {
|
|
65
|
+
// absolute prisma schema output path
|
|
66
|
+
prismaSchemaOutputDir = path_1.default.dirname(output);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
prismaSchemaOutputDir = path_1.default.dirname(path_1.default.resolve(zmodelDir, output));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// resolve the prisma client output path, which is relative to the prisma schema
|
|
74
|
+
const resolvedPrismaClientOutput = path_1.default.resolve(prismaSchemaOutputDir, clientOutput);
|
|
75
|
+
// DEBUG:
|
|
76
|
+
// console.log('PRISMA SCHEMA PATH:', prismaSchemaOutputDir);
|
|
77
|
+
// console.log('PRISMA CLIENT PATH:', resolvedPrismaClientOutput);
|
|
78
|
+
// console.log('IMPORTING PATH:', importingFromDir);
|
|
79
|
+
// compute prisma client absolute output dir relative to the importing file
|
|
80
|
+
return normalizePath(path_1.default.relative(importingFromDir, resolvedPrismaClientOutput));
|
|
81
|
+
}
|
|
82
|
+
exports.getPrismaClientImportSpec = getPrismaClientImportSpec;
|
|
83
|
+
function normalizePath(p) {
|
|
84
|
+
return p ? p.split(path_1.default.sep).join(path_1.default.posix.sep) : p;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Loads Prisma DMMF with appropriate version
|
|
88
|
+
*/
|
|
89
|
+
function getDMMF(options) {
|
|
90
|
+
const prismaVersion = (0, runtime_1.getPrismaVersion)();
|
|
91
|
+
if (prismaVersion && semver.gte(prismaVersion, '5.0.0')) {
|
|
92
|
+
const _getDMMF = require('@prisma/internals-v5').getDMMF;
|
|
93
|
+
return _getDMMF(options);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const _getDMMF = require('@prisma/internals').getDMMF;
|
|
97
|
+
return _getDMMF(options);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.getDMMF = getDMMF;
|
|
101
|
+
//# 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
package/utils.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
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 { ExpressionContext } from './constants';
|
|
2
3
|
import { PluginOptions } from './types';
|
|
3
4
|
/**
|
|
4
5
|
* Gets data models that are not ignored
|
|
@@ -7,17 +8,23 @@ export declare function getDataModels(model: Model): DataModel[];
|
|
|
7
8
|
export declare function resolved<T extends AstNode>(ref: Reference<T>): T;
|
|
8
9
|
export declare function getLiteral<T extends string | number | boolean | any = any>(expr: Expression | undefined): T | undefined;
|
|
9
10
|
export declare function getArray(expr: Expression | undefined): Expression[] | undefined;
|
|
10
|
-
export declare function getLiteralArray<T extends string | number | boolean | any = any>(expr: Expression | undefined):
|
|
11
|
+
export declare function getLiteralArray<T extends string | number | boolean | any = any>(expr: Expression | undefined): T[] | undefined;
|
|
11
12
|
export declare function getObjectLiteral<T>(expr: Expression | undefined): T | undefined;
|
|
12
13
|
export default function indentString(string: string, count?: number): string;
|
|
13
14
|
export declare function hasAttribute(decl: DataModel | DataModelField | Enum | EnumField, name: string): boolean;
|
|
14
|
-
export declare function getAttributeArgs(attr: DataModelAttribute | DataModelFieldAttribute): Record<string, Expression>;
|
|
15
|
-
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;
|
|
16
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
|
+
export declare function isDataModelFieldReference(node: AstNode): node is ReferenceExpr;
|
|
17
20
|
/**
|
|
18
|
-
* Gets id fields declared at the data model level
|
|
21
|
+
* Gets `@@id` fields declared at the data model level
|
|
19
22
|
*/
|
|
20
|
-
export declare function
|
|
23
|
+
export declare function getModelIdFields(model: DataModel): DataModelField[];
|
|
24
|
+
/**
|
|
25
|
+
* Gets `@@unique` fields declared at the data model level
|
|
26
|
+
*/
|
|
27
|
+
export declare function getModelUniqueFields(model: DataModel): DataModelField[];
|
|
21
28
|
/**
|
|
22
29
|
* Returns if the given field is declared as an id field.
|
|
23
30
|
*/
|
|
@@ -32,3 +39,7 @@ export declare function isRelationshipField(field: DataModelField): boolean;
|
|
|
32
39
|
export declare function isForeignKeyField(field: DataModelField): boolean;
|
|
33
40
|
export declare function resolvePath(_path: string, options: PluginOptions): string;
|
|
34
41
|
export declare function requireOption<T>(options: PluginOptions, name: string): T;
|
|
42
|
+
export declare function getFunctionExpressionContext(funcDecl: FunctionDecl): ExpressionContext[];
|
|
43
|
+
export declare function isFutureExpr(node: AstNode): boolean;
|
|
44
|
+
export declare function isFromStdlib(node: AstNode): boolean;
|
|
45
|
+
export declare function getContainingModel(node: AstNode | undefined): Model | null;
|
package/utils.js
CHANGED
|
@@ -3,9 +3,10 @@ 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.requireOption = exports.resolvePath = exports.isForeignKeyField = exports.isRelationshipField = exports.isIdField = exports.
|
|
6
|
+
exports.getContainingModel = exports.isFromStdlib = exports.isFutureExpr = exports.getFunctionExpressionContext = exports.requireOption = exports.resolvePath = exports.isForeignKeyField = exports.isRelationshipField = exports.isIdField = exports.getModelUniqueFields = exports.getModelIdFields = exports.isDataModelFieldReference = exports.isEnumFieldReference = exports.getAttributeArgLiteral = exports.getAttributeArg = exports.getAttributeArgs = exports.hasAttribute = exports.getObjectLiteral = exports.getLiteralArray = exports.getArray = exports.getLiteral = exports.resolved = exports.getDataModels = void 0;
|
|
7
7
|
const ast_1 = require("@zenstackhq/language/ast");
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const constants_1 = require("./constants");
|
|
9
10
|
/**
|
|
10
11
|
* Gets data models that are not ignored
|
|
11
12
|
*/
|
|
@@ -37,7 +38,7 @@ function getLiteralArray(expr) {
|
|
|
37
38
|
if (!arr) {
|
|
38
39
|
return undefined;
|
|
39
40
|
}
|
|
40
|
-
return arr.map((item) => getLiteral(item));
|
|
41
|
+
return arr.map((item) => getLiteral(item)).filter((v) => v !== undefined);
|
|
41
42
|
}
|
|
42
43
|
exports.getLiteralArray = getLiteralArray;
|
|
43
44
|
function getObjectLiteral(expr) {
|
|
@@ -106,10 +107,18 @@ function getAttributeArgLiteral(attr, name) {
|
|
|
106
107
|
return undefined;
|
|
107
108
|
}
|
|
108
109
|
exports.getAttributeArgLiteral = getAttributeArgLiteral;
|
|
110
|
+
function isEnumFieldReference(node) {
|
|
111
|
+
return (0, ast_1.isReferenceExpr)(node) && (0, ast_1.isEnumField)(node.target.ref);
|
|
112
|
+
}
|
|
113
|
+
exports.isEnumFieldReference = isEnumFieldReference;
|
|
114
|
+
function isDataModelFieldReference(node) {
|
|
115
|
+
return (0, ast_1.isReferenceExpr)(node) && (0, ast_1.isDataModelField)(node.target.ref);
|
|
116
|
+
}
|
|
117
|
+
exports.isDataModelFieldReference = isDataModelFieldReference;
|
|
109
118
|
/**
|
|
110
|
-
* Gets id fields declared at the data model level
|
|
119
|
+
* Gets `@@id` fields declared at the data model level
|
|
111
120
|
*/
|
|
112
|
-
function
|
|
121
|
+
function getModelIdFields(model) {
|
|
113
122
|
const idAttr = model.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@id'; });
|
|
114
123
|
if (!idAttr) {
|
|
115
124
|
return [];
|
|
@@ -122,21 +131,52 @@ function getIdFields(model) {
|
|
|
122
131
|
.filter((item) => (0, ast_1.isReferenceExpr)(item))
|
|
123
132
|
.map((item) => resolved(item.target));
|
|
124
133
|
}
|
|
125
|
-
exports.
|
|
134
|
+
exports.getModelIdFields = getModelIdFields;
|
|
135
|
+
/**
|
|
136
|
+
* Gets `@@unique` fields declared at the data model level
|
|
137
|
+
*/
|
|
138
|
+
function getModelUniqueFields(model) {
|
|
139
|
+
const uniqueAttr = model.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@unique'; });
|
|
140
|
+
if (!uniqueAttr) {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
const fieldsArg = uniqueAttr.args.find((a) => { var _a; return ((_a = a.$resolvedParam) === null || _a === void 0 ? void 0 : _a.name) === 'fields'; });
|
|
144
|
+
if (!fieldsArg || !(0, ast_1.isArrayExpr)(fieldsArg.value)) {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
return fieldsArg.value.items
|
|
148
|
+
.filter((item) => (0, ast_1.isReferenceExpr)(item))
|
|
149
|
+
.map((item) => resolved(item.target));
|
|
150
|
+
}
|
|
151
|
+
exports.getModelUniqueFields = getModelUniqueFields;
|
|
126
152
|
/**
|
|
127
153
|
* Returns if the given field is declared as an id field.
|
|
128
154
|
*/
|
|
129
155
|
function isIdField(field) {
|
|
130
156
|
// field-level @id attribute
|
|
131
|
-
if (field
|
|
157
|
+
if (hasAttribute(field, '@id')) {
|
|
132
158
|
return true;
|
|
133
159
|
}
|
|
134
|
-
// model-level @@id attribute with a list of fields
|
|
135
160
|
const model = field.$container;
|
|
136
|
-
|
|
161
|
+
// model-level @@id attribute with a list of fields
|
|
162
|
+
const modelLevelIds = getModelIdFields(model);
|
|
137
163
|
if (modelLevelIds.includes(field)) {
|
|
138
164
|
return true;
|
|
139
165
|
}
|
|
166
|
+
if (model.fields.some((f) => hasAttribute(f, '@id')) || modelLevelIds.length > 0) {
|
|
167
|
+
// the model already has id field, don't check @unique and @@unique
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
// then, the first field with @unique can be used as id
|
|
171
|
+
const firstUniqueField = model.fields.find((f) => hasAttribute(f, '@unique'));
|
|
172
|
+
if (firstUniqueField) {
|
|
173
|
+
return firstUniqueField === field;
|
|
174
|
+
}
|
|
175
|
+
// last, the first model level @@unique can be used as id
|
|
176
|
+
const modelLevelUnique = getModelUniqueFields(model);
|
|
177
|
+
if (modelLevelUnique.includes(field)) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
140
180
|
return false;
|
|
141
181
|
}
|
|
142
182
|
exports.isIdField = isIdField;
|
|
@@ -192,4 +232,37 @@ function requireOption(options, name) {
|
|
|
192
232
|
return value;
|
|
193
233
|
}
|
|
194
234
|
exports.requireOption = requireOption;
|
|
235
|
+
function getFunctionExpressionContext(funcDecl) {
|
|
236
|
+
const funcAllowedContext = [];
|
|
237
|
+
const funcAttr = funcDecl.attributes.find((attr) => attr.decl.$refText === '@@@expressionContext');
|
|
238
|
+
if (funcAttr) {
|
|
239
|
+
const contextArg = funcAttr.args[0].value;
|
|
240
|
+
if ((0, ast_1.isArrayExpr)(contextArg)) {
|
|
241
|
+
contextArg.items.forEach((item) => {
|
|
242
|
+
if (isEnumFieldReference(item)) {
|
|
243
|
+
funcAllowedContext.push(item.target.$refText);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return funcAllowedContext;
|
|
249
|
+
}
|
|
250
|
+
exports.getFunctionExpressionContext = getFunctionExpressionContext;
|
|
251
|
+
function isFutureExpr(node) {
|
|
252
|
+
var _a;
|
|
253
|
+
return !!((0, ast_1.isInvocationExpr)(node) && ((_a = node.function.ref) === null || _a === void 0 ? void 0 : _a.name) === 'future' && isFromStdlib(node.function.ref));
|
|
254
|
+
}
|
|
255
|
+
exports.isFutureExpr = isFutureExpr;
|
|
256
|
+
function isFromStdlib(node) {
|
|
257
|
+
const model = getContainingModel(node);
|
|
258
|
+
return !!model && !!model.$document && model.$document.uri.path.endsWith(constants_1.STD_LIB_MODULE_NAME);
|
|
259
|
+
}
|
|
260
|
+
exports.isFromStdlib = isFromStdlib;
|
|
261
|
+
function getContainingModel(node) {
|
|
262
|
+
if (!node) {
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
return (0, ast_1.isModel)(node) ? node : getContainingModel(node.$container);
|
|
266
|
+
}
|
|
267
|
+
exports.getContainingModel = getContainingModel;
|
|
195
268
|
//# sourceMappingURL=utils.js.map
|
package/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/validation.d.ts
ADDED
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"}
|