zenstack 1.0.0-beta.9 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/cli/actions/generate.d.ts +13 -0
- package/cli/actions/generate.js +71 -0
- package/cli/actions/generate.js.map +1 -0
- package/cli/actions/index.d.ts +3 -0
- package/cli/actions/index.js +20 -0
- package/cli/actions/index.js.map +1 -0
- package/cli/actions/info.d.ts +4 -0
- package/cli/actions/info.js +63 -0
- package/cli/actions/info.js.map +1 -0
- package/cli/actions/init.d.ts +12 -0
- package/cli/actions/init.js +83 -0
- package/cli/actions/init.js.map +1 -0
- package/cli/cli-util.d.ts +7 -10
- package/cli/cli-util.js +48 -130
- package/cli/cli-util.js.map +1 -1
- package/cli/config.d.ts +1 -10
- package/cli/config.js +2 -7
- package/cli/config.js.map +1 -1
- package/cli/index.d.ts +3 -12
- package/cli/index.js +12 -30
- package/cli/index.js.map +1 -1
- package/cli/plugin-runner.d.ts +11 -2
- package/cli/plugin-runner.js +66 -41
- package/cli/plugin-runner.js.map +1 -1
- package/language-server/utils.d.ts +1 -10
- package/language-server/utils.js +1 -20
- package/language-server/utils.js.map +1 -1
- package/language-server/validator/attribute-application-validator.d.ts +15 -0
- package/language-server/validator/attribute-application-validator.js +246 -0
- package/language-server/validator/attribute-application-validator.js.map +1 -0
- package/language-server/validator/attribute-validator.d.ts +1 -1
- package/language-server/validator/attribute-validator.js +4 -1
- package/language-server/validator/attribute-validator.js.map +1 -1
- package/language-server/validator/datamodel-validator.js +5 -6
- package/language-server/validator/datamodel-validator.js.map +1 -1
- package/language-server/validator/enum-validator.js +3 -6
- package/language-server/validator/enum-validator.js.map +1 -1
- package/language-server/validator/expression-validator.d.ts +0 -1
- package/language-server/validator/expression-validator.js +48 -7
- package/language-server/validator/expression-validator.js.map +1 -1
- package/language-server/validator/function-decl-validator.js +2 -4
- package/language-server/validator/function-decl-validator.js.map +1 -1
- package/language-server/validator/function-invocation-validator.js +5 -6
- package/language-server/validator/function-invocation-validator.js.map +1 -1
- package/language-server/validator/utils.d.ts +0 -1
- package/language-server/validator/utils.js +3 -119
- package/language-server/validator/utils.js.map +1 -1
- package/language-server/zmodel-linker.js +33 -25
- package/language-server/zmodel-linker.js.map +1 -1
- package/package.json +8 -5
- package/plugins/access-policy/expression-writer.d.ts +5 -0
- package/plugins/access-policy/expression-writer.js +123 -64
- package/plugins/access-policy/expression-writer.js.map +1 -1
- package/plugins/access-policy/index.d.ts +3 -3
- package/plugins/access-policy/index.js +3 -5
- package/plugins/access-policy/index.js.map +1 -1
- package/plugins/access-policy/policy-guard-generator.d.ts +10 -3
- package/plugins/access-policy/policy-guard-generator.js +321 -71
- package/plugins/access-policy/policy-guard-generator.js.map +1 -1
- package/plugins/model-meta/index.d.ts +3 -3
- package/plugins/model-meta/index.js +90 -34
- package/plugins/model-meta/index.js.map +1 -1
- package/plugins/plugin-utils.d.ts +5 -3
- package/plugins/plugin-utils.js +22 -5
- package/plugins/plugin-utils.js.map +1 -1
- package/plugins/prisma/index.d.ts +3 -4
- package/plugins/prisma/index.js +3 -5
- package/plugins/prisma/index.js.map +1 -1
- package/plugins/prisma/prisma-builder.d.ts +4 -14
- package/plugins/prisma/prisma-builder.js +16 -42
- package/plugins/prisma/prisma-builder.js.map +1 -1
- package/plugins/prisma/schema-generator.d.ts +5 -4
- package/plugins/prisma/schema-generator.js +77 -164
- package/plugins/prisma/schema-generator.js.map +1 -1
- package/plugins/prisma/zmodel-code-generator.js +4 -2
- package/plugins/prisma/zmodel-code-generator.js.map +1 -1
- package/plugins/zod/generator.d.ts +2 -2
- package/plugins/zod/generator.js +36 -33
- package/plugins/zod/generator.js.map +1 -1
- package/plugins/zod/index.d.ts +3 -4
- package/plugins/zod/index.js +8 -5
- package/plugins/zod/index.js.map +1 -1
- package/plugins/zod/transformer.d.ts +6 -5
- package/plugins/zod/transformer.js +123 -81
- package/plugins/zod/transformer.js.map +1 -1
- package/plugins/zod/types.d.ts +2 -1
- package/plugins/zod/utils/schema-gen.js +14 -4
- package/plugins/zod/utils/schema-gen.js.map +1 -1
- package/res/stdlib.zmodel +19 -3
- package/telemetry.js +1 -1
- package/telemetry.js.map +1 -1
- package/utils/ast-utils.d.ts +2 -1
- package/utils/ast-utils.js +7 -3
- package/utils/ast-utils.js.map +1 -1
- package/utils/typescript-expression-transformer.d.ts +3 -2
- package/utils/typescript-expression-transformer.js +48 -17
- package/utils/typescript-expression-transformer.js.map +1 -1
- package/utils/version-utils.js +7 -2
- package/utils/version-utils.js.map +1 -1
- package/plugins/access-policy/utils.d.ts +0 -5
- package/plugins/access-policy/utils.js +0 -14
- package/plugins/access-policy/utils.js.map +0 -1
- package/types.d.ts +0 -12
- package/types.js +0 -3
- package/types.js.map +0 -1
package/cli/config.js
CHANGED
|
@@ -27,17 +27,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.loadConfig = exports.config = void 0;
|
|
30
|
-
const sdk_1 = require("@zenstackhq/sdk");
|
|
31
30
|
const fs_1 = __importDefault(require("fs"));
|
|
32
31
|
const zod_1 = __importStar(require("zod"));
|
|
33
32
|
const zod_validation_error_1 = require("zod-validation-error");
|
|
34
33
|
const cli_error_1 = require("./cli-error");
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
guardFieldName: zod_1.default.string().default(sdk_1.GUARD_FIELD_NAME),
|
|
38
|
-
transactionFieldName: zod_1.default.string().default(sdk_1.TRANSACTION_FIELD_NAME),
|
|
39
|
-
})
|
|
40
|
-
.strict();
|
|
34
|
+
// TODO: future use
|
|
35
|
+
const schema = zod_1.default.object({});
|
|
41
36
|
exports.config = schema.parse({});
|
|
42
37
|
/**
|
|
43
38
|
* Loads and validates CLI configuration file.
|
package/cli/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,2CAAkC;AAClC,+DAAoD;AACpD,2CAAuC;AAEvC,mBAAmB;AACnB,MAAM,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAIjB,QAAA,MAAM,GAAe,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAEjD;;;GAGG;AACH,SAAgB,UAAU,CAAC,QAAgB;IACvC,IAAI;QACA,MAAM,QAAQ,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrC,cAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,8DAA8D;KACjE;IAAC,OAAO,GAAQ,EAAE;QACf,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,MAAK,QAAQ,EAAE;YACxB,MAAM,IAAI,oBAAQ,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;SACrE;QACD,IAAI,GAAG,YAAY,WAAW,EAAE;YAC5B,MAAM,IAAI,oBAAQ,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;SACtE;QACD,IAAI,GAAG,YAAY,cAAQ,EAAE;YACzB,MAAM,IAAI,oBAAQ,CAAC,eAAe,QAAQ,kBAAkB,IAAA,mCAAY,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACpF;QACD,MAAM,IAAI,oBAAQ,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;KAC3D;AACL,CAAC;AAlBD,gCAkBC"}
|
package/cli/index.d.ts
CHANGED
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const initAction: (projectPath: string, options: {
|
|
5
|
-
prisma: string | undefined;
|
|
6
|
-
packageManager: PackageManagers | undefined;
|
|
7
|
-
tag?: string;
|
|
8
|
-
}) => Promise<void>;
|
|
2
|
+
import * as actions from './actions';
|
|
3
|
+
export declare const initAction: (projectPath: string, options: Parameters<typeof actions.init>[1]) => Promise<void>;
|
|
9
4
|
export declare const infoAction: (projectPath: string) => Promise<void>;
|
|
10
|
-
export declare const generateAction: (options:
|
|
11
|
-
schema: string;
|
|
12
|
-
packageManager: PackageManagers | undefined;
|
|
13
|
-
dependencyCheck: boolean;
|
|
14
|
-
}) => Promise<void>;
|
|
5
|
+
export declare const generateAction: (options: Parameters<typeof actions.generate>[1]) => Promise<void>;
|
|
15
6
|
export declare function createProgram(): Command;
|
|
16
7
|
export default function (): Promise<void>;
|
package/cli/index.js
CHANGED
|
@@ -35,52 +35,29 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.createProgram = exports.generateAction = exports.infoAction = exports.initAction =
|
|
38
|
+
exports.createProgram = exports.generateAction = exports.infoAction = exports.initAction = void 0;
|
|
39
39
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
40
40
|
const module_1 = require("@zenstackhq/language/module");
|
|
41
41
|
const colors_1 = __importDefault(require("colors"));
|
|
42
42
|
const commander_1 = require("commander");
|
|
43
43
|
const fs_1 = __importDefault(require("fs"));
|
|
44
|
-
const semver = __importStar(require("semver"));
|
|
45
44
|
const telemetry_1 = __importDefault(require("../telemetry"));
|
|
46
45
|
const version_utils_1 = require("../utils/version-utils");
|
|
47
|
-
const
|
|
48
|
-
const cli_util_1 = require("./cli-util");
|
|
46
|
+
const actions = __importStar(require("./actions"));
|
|
49
47
|
const config_1 = require("./config");
|
|
50
|
-
// required minimal version of Prisma
|
|
51
|
-
exports.requiredPrismaVersion = '4.0.0';
|
|
52
48
|
const DEFAULT_CONFIG_FILE = 'zenstack.config.json';
|
|
53
49
|
const initAction = (projectPath, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
-
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'init' }, () =>
|
|
50
|
+
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'init' }, () => actions.init(projectPath, options));
|
|
55
51
|
});
|
|
56
52
|
exports.initAction = initAction;
|
|
57
53
|
const infoAction = (projectPath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
58
|
-
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'info' }, () =>
|
|
54
|
+
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'info' }, () => actions.info(projectPath));
|
|
59
55
|
});
|
|
60
56
|
exports.infoAction = infoAction;
|
|
61
57
|
const generateAction = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
62
|
-
|
|
63
|
-
checkRequiredPackage('prisma', exports.requiredPrismaVersion);
|
|
64
|
-
checkRequiredPackage('@prisma/client', exports.requiredPrismaVersion);
|
|
65
|
-
}
|
|
66
|
-
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'generate' }, () => (0, cli_util_1.runPlugins)(options));
|
|
58
|
+
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'generate' }, () => actions.generate(process.cwd(), options));
|
|
67
59
|
});
|
|
68
60
|
exports.generateAction = generateAction;
|
|
69
|
-
const checkRequiredPackage = (packageName, minVersion) => {
|
|
70
|
-
let packageVersion;
|
|
71
|
-
try {
|
|
72
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
73
|
-
packageVersion = require(`${packageName}/package.json`).version;
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
console.error(colors_1.default.red(`${packageName} not found, please install it`));
|
|
77
|
-
throw new cli_error_1.CliError(`${packageName} not found`);
|
|
78
|
-
}
|
|
79
|
-
if (minVersion && semver.lt(packageVersion, minVersion)) {
|
|
80
|
-
console.error(colors_1.default.red(`${packageName} needs to be above ${minVersion}, the installed version is ${packageVersion}, please upgrade it`));
|
|
81
|
-
throw new cli_error_1.CliError(`${packageName} version is too low`);
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
61
|
function createProgram() {
|
|
85
62
|
const program = new commander_1.Command('zenstack');
|
|
86
63
|
program.version((0, version_utils_1.getVersion)(), '-v --version', 'display CLI version');
|
|
@@ -96,6 +73,7 @@ function createProgram() {
|
|
|
96
73
|
'yarn',
|
|
97
74
|
'pnpm',
|
|
98
75
|
]);
|
|
76
|
+
const noVersionCheckOption = new commander_1.Option('--no-version-check', 'do not check for new version');
|
|
99
77
|
const noDependencyCheck = new commander_1.Option('--no-dependency-check', 'do not check if dependencies are installed');
|
|
100
78
|
program
|
|
101
79
|
.command('info')
|
|
@@ -108,15 +86,19 @@ function createProgram() {
|
|
|
108
86
|
.addOption(configOption)
|
|
109
87
|
.addOption(pmOption)
|
|
110
88
|
.addOption(new commander_1.Option('--prisma <file>', 'location of Prisma schema file to bootstrap from'))
|
|
111
|
-
.addOption(new commander_1.Option('--tag
|
|
89
|
+
.addOption(new commander_1.Option('--tag <tag>', 'the NPM package tag to use when installing dependencies'))
|
|
90
|
+
.addOption(noVersionCheckOption)
|
|
112
91
|
.argument('[path]', 'project path', '.')
|
|
113
92
|
.action(exports.initAction);
|
|
114
93
|
program
|
|
115
94
|
.command('generate')
|
|
116
95
|
.description('Run code generation.')
|
|
117
96
|
.addOption(schemaOption)
|
|
97
|
+
.addOption(new commander_1.Option('-o, --output <path>', 'default output directory for built-in plugins'))
|
|
118
98
|
.addOption(configOption)
|
|
119
|
-
.addOption(
|
|
99
|
+
.addOption(new commander_1.Option('--no-default-plugins', 'do not run default plugins'))
|
|
100
|
+
.addOption(new commander_1.Option('--no-compile', 'do not compile the output of built-in plugins'))
|
|
101
|
+
.addOption(noVersionCheckOption)
|
|
120
102
|
.addOption(noDependencyCheck)
|
|
121
103
|
.action(exports.generateAction);
|
|
122
104
|
// make sure config is loaded before actions run
|
package/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAuD;AACvD,wDAAqE;AACrE,oDAA4B;AAC5B,yCAA4C;AAC5C,4CAAoB;AACpB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAuD;AACvD,wDAAqE;AACrE,oDAA4B;AAC5B,yCAA4C;AAC5C,4CAAoB;AACpB,6DAAqC;AACrC,0DAAoD;AACpD,mDAAqC;AACrC,qCAAsC;AAEtC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAE5C,MAAM,UAAU,GAAG,CAAO,WAAmB,EAAE,OAA2C,EAAiB,EAAE;IAChH,MAAM,mBAAS,CAAC,SAAS,CACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,EAAE,OAAO,EAAE,MAAM,EAAE,EACnB,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAC3C,CAAC;AACN,CAAC,CAAA,CAAC;AARW,QAAA,UAAU,cAQrB;AAEK,MAAM,UAAU,GAAG,CAAO,WAAmB,EAAiB,EAAE;IACnE,MAAM,mBAAS,CAAC,SAAS,CACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,EAAE,OAAO,EAAE,MAAM,EAAE,EACnB,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAClC,CAAC;AACN,CAAC,CAAA,CAAC;AARW,QAAA,UAAU,cAQrB;AAEK,MAAM,cAAc,GAAG,CAAO,OAA+C,EAAiB,EAAE;IACnG,MAAM,mBAAS,CAAC,SAAS,CACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,EAAE,OAAO,EAAE,UAAU,EAAE,EACvB,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CACjD,CAAC;AACN,CAAC,CAAA,CAAC;AARW,QAAA,cAAc,kBAQzB;AAEF,SAAgB,aAAa;IACzB,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,UAAU,CAAC,CAAC;IAExC,OAAO,CAAC,OAAO,CAAC,IAAA,0BAAU,GAAE,EAAE,cAAc,EAAE,qBAAqB,CAAC,CAAC;IAErE,MAAM,gBAAgB,GAAG,+BAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1E,OAAO;SACF,WAAW,CACR,GAAG,gBAAM,CAAC,IAAI,CAAC,IAAI,CACf,GAAG,CACN,wGAAwG,CAC5G;SACA,kBAAkB,EAAE;SACpB,wBAAwB,EAAE,CAAC;IAEhC,MAAM,YAAY,GAAG,IAAI,kBAAM,CAAC,iBAAiB,EAAE,+BAA+B,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAC1G,iBAAiB,CACpB,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,kBAAM,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAI,kBAAM,CAAC,4BAA4B,EAAE,wBAAwB,CAAC,CAAC,OAAO,CAAC;QACxF,KAAK;QACL,MAAM;QACN,MAAM;KACT,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,IAAI,kBAAM,CAAC,oBAAoB,EAAE,8BAA8B,CAAC,CAAC;IAC9F,MAAM,iBAAiB,GAAG,IAAI,kBAAM,CAAC,uBAAuB,EAAE,4CAA4C,CAAC,CAAC;IAE5G,OAAO;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6DAA6D,CAAC;SAC1E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC;SACvC,MAAM,CAAC,kBAAU,CAAC,CAAC;IAExB,OAAO;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8CAA8C,CAAC;SAC3D,SAAS,CAAC,YAAY,CAAC;SACvB,SAAS,CAAC,QAAQ,CAAC;SACnB,SAAS,CAAC,IAAI,kBAAM,CAAC,iBAAiB,EAAE,kDAAkD,CAAC,CAAC;SAC5F,SAAS,CAAC,IAAI,kBAAM,CAAC,aAAa,EAAE,yDAAyD,CAAC,CAAC;SAC/F,SAAS,CAAC,oBAAoB,CAAC;SAC/B,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC;SACvC,MAAM,CAAC,kBAAU,CAAC,CAAC;IAExB,OAAO;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,sBAAsB,CAAC;SACnC,SAAS,CAAC,YAAY,CAAC;SACvB,SAAS,CAAC,IAAI,kBAAM,CAAC,qBAAqB,EAAE,+CAA+C,CAAC,CAAC;SAC7F,SAAS,CAAC,YAAY,CAAC;SACvB,SAAS,CAAC,IAAI,kBAAM,CAAC,sBAAsB,EAAE,4BAA4B,CAAC,CAAC;SAC3E,SAAS,CAAC,IAAI,kBAAM,CAAC,cAAc,EAAE,+CAA+C,CAAC,CAAC;SACtF,SAAS,CAAC,oBAAoB,CAAC;SAC/B,SAAS,CAAC,iBAAiB,CAAC;SAC5B,MAAM,CAAC,sBAAc,CAAC,CAAC;IAE5B,gDAAgD;IAChD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAO,CAAC,EAAE,aAAa,EAAE,EAAE;QACjD,IAAI,UAAU,GAAuB,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;QAEjE,IAAI,CAAC,UAAU,IAAI,YAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;YACnD,UAAU,GAAG,mBAAmB,CAAC;SACpC;QAED,IAAI,UAAU,EAAE;YACZ,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;SAC1B;IACL,CAAC,CAAA,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACnB,CAAC;AAxED,sCAwEC;AAED;;QACI,MAAM,mBAAS,CAAC,SAAS,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,GAAS,EAAE;YACnG,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAEhC,+CAA+C;YAC/C,OAAO,CAAC,YAAY,EAAE,CAAC;YAEvB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAA,CAAC,CAAC;IACP,CAAC;CAAA;AATD,4BASC"}
|
package/cli/plugin-runner.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Model } from '@zenstackhq/language/ast';
|
|
2
|
+
export declare type PluginRunnerOptions = {
|
|
3
|
+
schema: Model;
|
|
4
|
+
schemaPath: string;
|
|
5
|
+
output?: string;
|
|
6
|
+
defaultPlugins: boolean;
|
|
7
|
+
compile: boolean;
|
|
8
|
+
};
|
|
2
9
|
/**
|
|
3
10
|
* ZenStack plugin runner
|
|
4
11
|
*/
|
|
@@ -6,7 +13,9 @@ export declare class PluginRunner {
|
|
|
6
13
|
/**
|
|
7
14
|
* Runs a series of nested generators
|
|
8
15
|
*/
|
|
9
|
-
run(
|
|
16
|
+
run(options: PluginRunnerOptions): Promise<void>;
|
|
17
|
+
private calculateCorePlugins;
|
|
18
|
+
private hasValidation;
|
|
10
19
|
private getPluginName;
|
|
11
20
|
private getPluginDependencies;
|
|
12
21
|
private getPluginProvider;
|
package/cli/plugin-runner.js
CHANGED
|
@@ -22,7 +22,6 @@ const path_1 = __importDefault(require("path"));
|
|
|
22
22
|
const plugin_utils_1 = require("../plugins/plugin-utils");
|
|
23
23
|
const telemetry_1 = __importDefault(require("../telemetry"));
|
|
24
24
|
const version_utils_1 = require("../utils/version-utils");
|
|
25
|
-
const config_1 = require("./config");
|
|
26
25
|
/**
|
|
27
26
|
* ZenStack plugin runner
|
|
28
27
|
*/
|
|
@@ -30,14 +29,14 @@ class PluginRunner {
|
|
|
30
29
|
/**
|
|
31
30
|
* Runs a series of nested generators
|
|
32
31
|
*/
|
|
33
|
-
run(
|
|
32
|
+
run(options) {
|
|
34
33
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
34
|
const version = (0, version_utils_1.getVersion)();
|
|
36
35
|
console.log(colors_1.default.bold(`⌛️ ZenStack CLI v${version}, running plugins`));
|
|
37
|
-
(0, plugin_utils_1.ensureDefaultOutputFolder)();
|
|
36
|
+
(0, plugin_utils_1.ensureDefaultOutputFolder)(options);
|
|
38
37
|
const plugins = [];
|
|
39
|
-
const pluginDecls =
|
|
40
|
-
let prismaOutput = (0, sdk_1.resolvePath)('./prisma/schema.prisma', { schemaPath:
|
|
38
|
+
const pluginDecls = options.schema.declarations.filter((d) => (0, ast_1.isPlugin)(d));
|
|
39
|
+
let prismaOutput = (0, sdk_1.resolvePath)('./prisma/schema.prisma', { schemaPath: options.schemaPath, name: '' });
|
|
41
40
|
for (const pluginDecl of pluginDecls) {
|
|
42
41
|
const pluginProvider = this.getPluginProvider(pluginDecl);
|
|
43
42
|
if (!pluginProvider) {
|
|
@@ -60,54 +59,31 @@ class PluginRunner {
|
|
|
60
59
|
}
|
|
61
60
|
const dependencies = this.getPluginDependencies(pluginModule);
|
|
62
61
|
const pluginName = this.getPluginName(pluginModule, pluginProvider);
|
|
63
|
-
const
|
|
62
|
+
const pluginOptions = { schemaPath: options.schemaPath, name: pluginName };
|
|
64
63
|
pluginDecl.fields.forEach((f) => {
|
|
65
64
|
var _a;
|
|
66
65
|
const value = (_a = (0, sdk_1.getLiteral)(f.value)) !== null && _a !== void 0 ? _a : (0, sdk_1.getLiteralArray)(f.value);
|
|
67
66
|
if (value === undefined) {
|
|
68
67
|
throw new sdk_1.PluginError(pluginName, `Invalid option value for ${f.name}`);
|
|
69
68
|
}
|
|
70
|
-
|
|
69
|
+
pluginOptions[f.name] = value;
|
|
71
70
|
});
|
|
72
71
|
plugins.push({
|
|
73
72
|
name: pluginName,
|
|
74
73
|
provider: pluginProvider,
|
|
75
74
|
dependencies,
|
|
76
|
-
options,
|
|
75
|
+
options: pluginOptions,
|
|
77
76
|
run: pluginModule.default,
|
|
78
77
|
module: pluginModule,
|
|
79
78
|
});
|
|
80
|
-
if (pluginProvider === '@core/prisma' && typeof
|
|
79
|
+
if (pluginProvider === '@core/prisma' && typeof pluginOptions.output === 'string') {
|
|
81
80
|
// record custom prisma output path
|
|
82
|
-
prismaOutput = (0, sdk_1.resolvePath)(
|
|
81
|
+
prismaOutput = (0, sdk_1.resolvePath)(pluginOptions.output, pluginOptions);
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
|
-
//
|
|
86
|
-
const corePlugins =
|
|
87
|
-
|
|
88
|
-
{ provider: '@core/model-meta' },
|
|
89
|
-
{ provider: '@core/access-policy' },
|
|
90
|
-
];
|
|
91
|
-
if ((0, sdk_1.getDataModels)(context.schema).some((model) => (0, sdk_1.hasValidationAttributes)(model))) {
|
|
92
|
-
// '@core/zod' plugin is auto-enabled if there're validation rules
|
|
93
|
-
corePlugins.push({ provider: '@core/zod', options: { modelOnly: true } });
|
|
94
|
-
}
|
|
95
|
-
// core plugins introduced by dependencies
|
|
96
|
-
plugins
|
|
97
|
-
.flatMap((p) => p.dependencies)
|
|
98
|
-
.forEach((dep) => {
|
|
99
|
-
if (dep.startsWith('@core/')) {
|
|
100
|
-
const existing = corePlugins.find((p) => p.provider === dep);
|
|
101
|
-
if (existing) {
|
|
102
|
-
// reset options to default
|
|
103
|
-
existing.options = undefined;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
// add core dependency
|
|
107
|
-
corePlugins.push({ provider: dep });
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
});
|
|
84
|
+
// get core plugins that need to be enabled
|
|
85
|
+
const corePlugins = this.calculateCorePlugins(options, plugins);
|
|
86
|
+
// shift/insert core plugins to the front
|
|
111
87
|
for (const corePlugin of corePlugins.reverse()) {
|
|
112
88
|
const existingIdx = plugins.findIndex((p) => p.provider === corePlugin.provider);
|
|
113
89
|
if (existingIdx >= 0) {
|
|
@@ -124,7 +100,7 @@ class PluginRunner {
|
|
|
124
100
|
name: pluginName,
|
|
125
101
|
provider: corePlugin.provider,
|
|
126
102
|
dependencies: [],
|
|
127
|
-
options: Object.assign({ schemaPath:
|
|
103
|
+
options: Object.assign({ schemaPath: options.schemaPath, name: pluginName }, corePlugin.options),
|
|
128
104
|
run: pluginModule.default,
|
|
129
105
|
module: pluginModule,
|
|
130
106
|
});
|
|
@@ -139,11 +115,15 @@ class PluginRunner {
|
|
|
139
115
|
}
|
|
140
116
|
}
|
|
141
117
|
}
|
|
118
|
+
if (plugins.length === 0) {
|
|
119
|
+
console.log(colors_1.default.yellow('No plugins configured.'));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
142
122
|
const warnings = [];
|
|
143
123
|
let dmmf = undefined;
|
|
144
|
-
for (const { name, provider, run, options } of plugins) {
|
|
124
|
+
for (const { name, provider, run, options: pluginOptions } of plugins) {
|
|
145
125
|
// const start = Date.now();
|
|
146
|
-
yield this.runPlugin(name, run,
|
|
126
|
+
yield this.runPlugin(name, run, options, pluginOptions, dmmf, warnings);
|
|
147
127
|
// console.log(`✅ Plugin ${colors.bold(name)} (${provider}) completed in ${Date.now() - start}ms`);
|
|
148
128
|
if (provider === '@core/prisma') {
|
|
149
129
|
// load prisma DMMF
|
|
@@ -157,6 +137,48 @@ class PluginRunner {
|
|
|
157
137
|
console.log(`Don't forget to restart your dev server to let the changes take effect.`);
|
|
158
138
|
});
|
|
159
139
|
}
|
|
140
|
+
calculateCorePlugins(options, plugins) {
|
|
141
|
+
const corePlugins = [];
|
|
142
|
+
if (options.defaultPlugins) {
|
|
143
|
+
corePlugins.push({ provider: '@core/prisma' }, { provider: '@core/model-meta' }, { provider: '@core/access-policy' });
|
|
144
|
+
}
|
|
145
|
+
else if (plugins.length > 0) {
|
|
146
|
+
// "@core/prisma" plugin is always enabled if any plugin is configured
|
|
147
|
+
corePlugins.push({ provider: '@core/prisma' });
|
|
148
|
+
}
|
|
149
|
+
// "@core/access-policy" has implicit requirements
|
|
150
|
+
if ([...plugins, ...corePlugins].find((p) => p.provider === '@core/access-policy')) {
|
|
151
|
+
// make sure "@core/model-meta" is enabled
|
|
152
|
+
if (!corePlugins.find((p) => p.provider === '@core/model-meta')) {
|
|
153
|
+
corePlugins.push({ provider: '@core/model-meta' });
|
|
154
|
+
}
|
|
155
|
+
// '@core/zod' plugin is auto-enabled by "@core/access-policy"
|
|
156
|
+
// if there're validation rules
|
|
157
|
+
if (!corePlugins.find((p) => p.provider === '@core/zod') && this.hasValidation(options.schema)) {
|
|
158
|
+
corePlugins.push({ provider: '@core/zod', options: { modelOnly: true } });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// core plugins introduced by dependencies
|
|
162
|
+
plugins
|
|
163
|
+
.flatMap((p) => p.dependencies)
|
|
164
|
+
.forEach((dep) => {
|
|
165
|
+
if (dep.startsWith('@core/')) {
|
|
166
|
+
const existing = corePlugins.find((p) => p.provider === dep);
|
|
167
|
+
if (existing) {
|
|
168
|
+
// reset options to default
|
|
169
|
+
existing.options = undefined;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
// add core dependency
|
|
173
|
+
corePlugins.push({ provider: dep });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
return corePlugins;
|
|
178
|
+
}
|
|
179
|
+
hasValidation(schema) {
|
|
180
|
+
return (0, sdk_1.getDataModels)(schema).some((model) => (0, sdk_1.hasValidationAttributes)(model));
|
|
181
|
+
}
|
|
160
182
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
161
183
|
getPluginName(pluginModule, pluginProvider) {
|
|
162
184
|
return typeof pluginModule.name === 'string' ? pluginModule.name : pluginProvider;
|
|
@@ -168,7 +190,7 @@ class PluginRunner {
|
|
|
168
190
|
const providerField = plugin.fields.find((f) => f.name === 'provider');
|
|
169
191
|
return (0, sdk_1.getLiteral)(providerField === null || providerField === void 0 ? void 0 : providerField.value);
|
|
170
192
|
}
|
|
171
|
-
runPlugin(name, run,
|
|
193
|
+
runPlugin(name, run, runnerOptions, options, dmmf, warnings) {
|
|
172
194
|
return __awaiter(this, void 0, void 0, function* () {
|
|
173
195
|
const spinner = (0, ora_1.default)(`Running plugin ${colors_1.default.cyan(name)}`).start();
|
|
174
196
|
try {
|
|
@@ -176,7 +198,10 @@ class PluginRunner {
|
|
|
176
198
|
plugin: name,
|
|
177
199
|
options,
|
|
178
200
|
}, () => __awaiter(this, void 0, void 0, function* () {
|
|
179
|
-
let result = run(
|
|
201
|
+
let result = run(runnerOptions.schema, options, dmmf, {
|
|
202
|
+
output: runnerOptions.output,
|
|
203
|
+
compile: runnerOptions.compile,
|
|
204
|
+
});
|
|
180
205
|
if (result instanceof Promise) {
|
|
181
206
|
result = yield result;
|
|
182
207
|
}
|
package/cli/plugin-runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-runner.js","sourceRoot":"","sources":["../../src/cli/plugin-runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,
|
|
1
|
+
{"version":3,"file":"plugin-runner.js","sourceRoot":"","sources":["../../src/cli/plugin-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
import { DataModel, DataModelField
|
|
2
|
-
import { AstNode } from 'langium';
|
|
3
|
-
/**
|
|
4
|
-
* Gets the toplevel Model containing the given node.
|
|
5
|
-
*/
|
|
6
|
-
export declare function getContainingModel(node: AstNode | undefined): Model | null;
|
|
7
|
-
/**
|
|
8
|
-
* Returns if the given node is declared in stdlib.
|
|
9
|
-
*/
|
|
10
|
-
export declare function isFromStdlib(node: AstNode): boolean;
|
|
1
|
+
import { DataModel, DataModelField } from '@zenstackhq/language/ast';
|
|
11
2
|
/**
|
|
12
3
|
* Gets lists of unique fields declared at the data model level
|
|
13
4
|
*/
|
package/language-server/utils.js
CHANGED
|
@@ -1,27 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getUniqueFields =
|
|
3
|
+
exports.getUniqueFields = void 0;
|
|
4
4
|
const ast_1 = require("@zenstackhq/language/ast");
|
|
5
5
|
const sdk_1 = require("@zenstackhq/sdk");
|
|
6
|
-
const constants_1 = require("./constants");
|
|
7
|
-
/**
|
|
8
|
-
* Gets the toplevel Model containing the given node.
|
|
9
|
-
*/
|
|
10
|
-
function getContainingModel(node) {
|
|
11
|
-
if (!node) {
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
return (0, ast_1.isModel)(node) ? node : getContainingModel(node.$container);
|
|
15
|
-
}
|
|
16
|
-
exports.getContainingModel = getContainingModel;
|
|
17
|
-
/**
|
|
18
|
-
* Returns if the given node is declared in stdlib.
|
|
19
|
-
*/
|
|
20
|
-
function isFromStdlib(node) {
|
|
21
|
-
const model = getContainingModel(node);
|
|
22
|
-
return !!model && !!model.$document && model.$document.uri.path.endsWith(constants_1.STD_LIB_MODULE_NAME);
|
|
23
|
-
}
|
|
24
|
-
exports.isFromStdlib = isFromStdlib;
|
|
25
6
|
/**
|
|
26
7
|
* Gets lists of unique fields declared at the data model level
|
|
27
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/language-server/utils.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/language-server/utils.ts"],"names":[],"mappings":";;;AAAA,kDAAkH;AAClH,yCAA2C;AAE3C;;GAEG;AACH,SAAgB,eAAe,CAAC,KAAgB;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CACvC,CAAC,IAAI,EAAE,EAAE,eAAC,OAAA,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,0CAAE,IAAI,MAAK,UAAU,IAAI,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,0CAAE,IAAI,MAAK,MAAM,CAAA,EAAA,CACjF,CAAC;IACF,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QAClC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,cAAc,0CAAE,IAAI,MAAK,QAAQ,CAAA,EAAA,CAAC,CAAC;QACnF,IAAI,CAAC,SAAS,IAAI,CAAC,IAAA,iBAAW,EAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAC7C,OAAO,EAAE,CAAC;SACb;QAED,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK;aACvB,MAAM,CAAC,CAAC,IAAI,EAAyB,EAAE,CAAC,IAAA,qBAAe,EAAC,IAAI,CAAC,CAAC;aAC9D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,cAAQ,EAAC,IAAI,CAAC,MAAM,CAAmB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACP,CAAC;AAdD,0CAcC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DataModelAttribute, DataModelFieldAttribute, InternalAttribute } from '@zenstackhq/language/ast';
|
|
2
|
+
import { ValidationAcceptor } from 'langium';
|
|
3
|
+
import { AstValidator } from '../types';
|
|
4
|
+
declare type AttributeApplication = DataModelAttribute | DataModelFieldAttribute | InternalAttribute;
|
|
5
|
+
/**
|
|
6
|
+
* Validates function declarations.
|
|
7
|
+
*/
|
|
8
|
+
export default class AttributeApplicationValidator implements AstValidator<AttributeApplication> {
|
|
9
|
+
validate(attr: AttributeApplication, accept: ValidationAcceptor): void;
|
|
10
|
+
private _checkModelLevelPolicy;
|
|
11
|
+
private _checkFieldLevelPolicy;
|
|
12
|
+
private validatePolicyKinds;
|
|
13
|
+
}
|
|
14
|
+
export declare function validateAttributeApplication(attr: AttributeApplication, accept: ValidationAcceptor): void;
|
|
15
|
+
export {};
|