zenstack 0.6.0-pre.8 ā 1.0.0-alpha.19
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/cli/cli-error.d.ts +5 -0
- package/cli/cli-error.js +12 -0
- package/cli/cli-error.js.map +1 -0
- package/cli/cli-util.d.ts +18 -0
- package/cli/cli-util.js +122 -0
- package/cli/cli-util.js.map +1 -0
- package/cli/index.d.ts +14 -0
- package/cli/index.js +72 -6529
- package/cli/index.js.map +1 -0
- package/cli/plugin-runner.d.ts +14 -0
- package/cli/plugin-runner.js +133 -0
- package/cli/plugin-runner.js.map +1 -0
- package/global.d.js +1 -0
- package/global.d.js.map +1 -0
- package/language-server/constants.d.ts +12 -0
- package/language-server/constants.js +24 -0
- package/language-server/constants.js.map +1 -0
- package/language-server/main.d.ts +1 -0
- package/language-server/main.js +20 -6436
- package/language-server/main.js.map +1 -0
- package/language-server/types.d.ts +10 -0
- package/language-server/types.js +1 -0
- package/language-server/types.js.map +1 -0
- package/language-server/utils.d.ts +10 -0
- package/language-server/utils.js +28 -0
- package/language-server/utils.js.map +1 -0
- package/language-server/validator/attribute-validator.d.ts +9 -0
- package/language-server/validator/attribute-validator.js +15 -0
- package/language-server/validator/attribute-validator.js.map +1 -0
- package/language-server/validator/datamodel-validator.d.ts +16 -0
- package/language-server/validator/datamodel-validator.js +365 -0
- package/language-server/validator/datamodel-validator.js.map +1 -0
- package/language-server/validator/datasource-validator.d.ts +13 -0
- package/language-server/validator/datasource-validator.js +85 -0
- package/language-server/validator/datasource-validator.js.map +1 -0
- package/language-server/validator/enum-validator.d.ts +9 -0
- package/language-server/validator/enum-validator.js +18 -0
- package/language-server/validator/enum-validator.js.map +1 -0
- package/language-server/validator/expression-validator.d.ts +11 -0
- package/language-server/validator/expression-validator.js +40 -0
- package/language-server/validator/expression-validator.js.map +1 -0
- package/language-server/validator/schema-validator.d.ts +10 -0
- package/language-server/validator/schema-validator.js +35 -0
- package/language-server/validator/schema-validator.js.map +1 -0
- package/language-server/validator/utils.d.ts +24 -0
- package/language-server/validator/utils.js +116 -0
- package/language-server/validator/utils.js.map +1 -0
- package/language-server/validator/zmodel-validator.d.ts +21 -0
- package/language-server/validator/zmodel-validator.js +72 -0
- package/language-server/validator/zmodel-validator.js.map +1 -0
- package/language-server/zmodel-linker.d.ts +29 -0
- package/language-server/zmodel-linker.js +364 -0
- package/language-server/zmodel-linker.js.map +1 -0
- package/language-server/zmodel-module.d.ts +41 -0
- package/language-server/zmodel-module.js +83 -0
- package/language-server/zmodel-module.js.map +1 -0
- package/language-server/zmodel-scope.d.ts +10 -0
- package/language-server/zmodel-scope.js +34 -0
- package/language-server/zmodel-scope.js.map +1 -0
- package/language-server/zmodel-workspace-manager.d.ts +8 -0
- package/language-server/zmodel-workspace-manager.js +25 -0
- package/language-server/zmodel-workspace-manager.js.map +1 -0
- package/package.json +23 -18
- package/plugins/access-policy/expression-writer.d.ts +38 -0
- package/plugins/access-policy/expression-writer.js +323 -0
- package/plugins/access-policy/expression-writer.js.map +1 -0
- package/plugins/access-policy/index.d.ts +4 -0
- package/plugins/access-policy/index.js +15 -0
- package/plugins/access-policy/index.js.map +1 -0
- package/plugins/access-policy/policy-guard-generator.d.ts +15 -0
- package/plugins/access-policy/policy-guard-generator.js +345 -0
- package/plugins/access-policy/policy-guard-generator.js.map +1 -0
- package/plugins/access-policy/typescript-expression-transformer.d.ts +26 -0
- package/plugins/access-policy/typescript-expression-transformer.js +110 -0
- package/plugins/access-policy/typescript-expression-transformer.js.map +1 -0
- package/plugins/access-policy/utils.d.ts +5 -0
- package/plugins/access-policy/utils.js +16 -0
- package/plugins/access-policy/utils.js.map +1 -0
- package/plugins/access-policy/zod-schema-generator.d.ts +12 -0
- package/plugins/access-policy/zod-schema-generator.js +174 -0
- package/plugins/access-policy/zod-schema-generator.js.map +1 -0
- package/plugins/model-meta/index.d.ts +4 -0
- package/plugins/model-meta/index.js +130 -0
- package/plugins/model-meta/index.js.map +1 -0
- package/plugins/plugin-utils.d.ts +16 -0
- package/plugins/plugin-utils.js +58 -0
- package/plugins/plugin-utils.js.map +1 -0
- package/plugins/prisma/indent-string.d.ts +4 -0
- package/plugins/prisma/indent-string.js +16 -0
- package/plugins/prisma/indent-string.js.map +1 -0
- package/plugins/prisma/index.d.ts +4 -0
- package/plugins/prisma/index.js +15 -3740
- package/plugins/prisma/index.js.map +1 -0
- package/plugins/prisma/prisma-builder.d.ts +130 -0
- package/plugins/prisma/prisma-builder.js +271 -0
- package/plugins/prisma/prisma-builder.js.map +1 -0
- package/plugins/prisma/schema-generator.d.ts +24 -0
- package/plugins/prisma/schema-generator.js +212 -0
- package/plugins/prisma/schema-generator.js.map +1 -0
- package/plugins/prisma/zmodel-code-generator.d.ts +27 -0
- package/plugins/prisma/zmodel-code-generator.js +110 -0
- package/plugins/prisma/zmodel-code-generator.js.map +1 -0
- package/res/prism-zmodel.js +2 -4
- package/res/starter.zmodel +47 -0
- package/res/stdlib.zmodel +12 -1
- package/telemetry.d.ts +21 -0
- package/telemetry.js +102 -0
- package/telemetry.js.map +1 -0
- package/types.d.ts +11 -0
- package/types.js +1 -0
- package/types.js.map +1 -0
- package/utils/ast-utils.d.ts +15 -0
- package/utils/ast-utils.js +79 -0
- package/utils/ast-utils.js.map +1 -0
- package/utils/exec-utils.d.ts +6 -0
- package/utils/exec-utils.js +22 -0
- package/utils/exec-utils.js.map +1 -0
- package/utils/pkg-utils.d.ts +3 -0
- package/utils/pkg-utils.js +43 -0
- package/utils/pkg-utils.js.map +1 -0
- package/utils/version-utils.d.ts +1 -0
- package/utils/version-utils.js +15 -0
- package/utils/version-utils.js.map +1 -0
- package/asset/logo-256-bg.png +0 -0
- package/asset/logo-dark-256.png +0 -0
- package/asset/logo-light-256.png +0 -0
- package/extension.js +0 -39
- package/plugins/policy-guard/index.js +0 -4289
- package/plugins/react-hooks/index.js +0 -4318
- package/plugins/trpc/index.js +0 -5386
- package/plugins/zod/index.js +0 -4808
- package/res/package.template.json +0 -9
- package/res/tsconfig.template.json +0 -17
package/cli/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["requiredPrismaVersion","initAction","projectPath","options","telemetry","trackSpan","command","initProject","prisma","packageManager","tag","generateAction","checkRequiredPackage","runPlugins","packageName","minVersion","packageVersion","require","version","error","console","colors","red","CliError","semver","lt","createProgram","program","Command","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","default","pmOption","choices","addOption","argument","action","args","process","argv","exitOverride","parseAsync"],"sources":["../../src/cli/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ZModelLanguageMetaData } from '@zenstackhq/language/module';\nimport colors from 'colors';\nimport { Command, Option } from 'commander';\nimport * as semver from 'semver';\nimport telemetry from '../telemetry';\nimport { PackageManagers } from '../utils/pkg-utils';\nimport { getVersion } from '../utils/version-utils';\nimport { CliError } from './cli-error';\nimport { initProject, runPlugins } from './cli-util';\n\n// required minimal version of Prisma\nexport const requiredPrismaVersion = '4.0.0';\n\nexport const initAction = async (\n projectPath: string,\n options: {\n prisma: string | undefined;\n packageManager: PackageManagers | undefined;\n tag: string;\n }\n): Promise<void> => {\n await telemetry.trackSpan(\n 'cli:command:start',\n 'cli:command:complete',\n 'cli:command:error',\n { command: 'init' },\n () => initProject(projectPath, options.prisma, options.packageManager, options.tag)\n );\n};\n\nexport const generateAction = async (options: {\n schema: string;\n packageManager: PackageManagers | undefined;\n}): Promise<void> => {\n checkRequiredPackage('prisma', requiredPrismaVersion);\n checkRequiredPackage('@prisma/client', requiredPrismaVersion);\n await telemetry.trackSpan(\n 'cli:command:start',\n 'cli:command:complete',\n 'cli:command:error',\n { command: 'generate' },\n () => runPlugins(options)\n );\n};\n\nconst checkRequiredPackage = (packageName: string, minVersion?: string) => {\n let packageVersion: string;\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n packageVersion = require(`${packageName}/package.json`).version;\n } catch (error) {\n console.error(colors.red(`${packageName} not found, please install it`));\n throw new CliError(`${packageName} not found`);\n }\n\n if (minVersion && semver.lt(packageVersion, minVersion)) {\n console.error(\n colors.red(\n `${packageName} needs to be above ${minVersion}, the installed version is ${packageVersion}, please upgrade it`\n )\n );\n throw new CliError(`${packageName} version is too low`);\n }\n};\n\nexport function createProgram() {\n const program = new Command('zenstack');\n\n program.version(getVersion(), '-v --version', 'display CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ'\n )} ZenStack is a Prisma power pack for building full-stack apps.\\n\\nDocumentation: https://zenstack.dev.`\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option('--schema <file>', `schema file (with extension ${schemaExtensions})`).default(\n './schema.zmodel'\n );\n\n const pmOption = new Option('-p, --package-manager <pm>', 'package manager to use').choices([\n 'npm',\n 'yarn',\n 'pnpm',\n ]);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack.')\n .addOption(pmOption)\n .addOption(new Option('--prisma <file>', 'location of Prisma schema file to bootstrap from'))\n .addOption(\n new Option('--tag <tag>', 'the NPM package tag to use when installing dependencies').default(\n '<DEFAULT_NPM_TAG>'\n )\n )\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n program\n .command('generate')\n .description('Generates RESTful API and Typescript client for your data model.')\n .addOption(schemaOption)\n .addOption(pmOption)\n .action(generateAction);\n return program;\n}\n\nexport default async function (): Promise<void> {\n await telemetry.trackSpan('cli:start', 'cli:complete', 'cli:error', { args: process.argv }, async () => {\n const program = createProgram();\n\n // handle errors explicitly to ensure telemetry\n program.exitOverride();\n\n await program.parseAsync(process.argv);\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Context } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* ZenStack code generator
|
|
4
|
+
*/
|
|
5
|
+
export declare class PluginRunner {
|
|
6
|
+
/**
|
|
7
|
+
* Runs a series of nested generators
|
|
8
|
+
*/
|
|
9
|
+
run(context: Context): Promise<void>;
|
|
10
|
+
private getPluginName;
|
|
11
|
+
private getPluginProvider;
|
|
12
|
+
private runPlugin;
|
|
13
|
+
private getPluginModulePath;
|
|
14
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PluginRunner = void 0;
|
|
7
|
+
var _internals = require("@prisma/internals");
|
|
8
|
+
var _ast = require("@zenstackhq/language/ast");
|
|
9
|
+
var _sdk = require("@zenstackhq/sdk");
|
|
10
|
+
var _colors = _interopRequireDefault(require("colors"));
|
|
11
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
12
|
+
var _ora = _interopRequireDefault(require("ora"));
|
|
13
|
+
var _path = _interopRequireDefault(require("path"));
|
|
14
|
+
var _telemetry = _interopRequireDefault(require("../telemetry"));
|
|
15
|
+
var _cliError = require("./cli-error");
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* ZenStack code generator
|
|
21
|
+
*/
|
|
22
|
+
class PluginRunner {
|
|
23
|
+
/**
|
|
24
|
+
* Runs a series of nested generators
|
|
25
|
+
*/
|
|
26
|
+
async run(context) {
|
|
27
|
+
const version = require('../package.json').version;
|
|
28
|
+
console.log(_colors.default.bold(`āļø ZenStack CLI v${version}, running plugins`));
|
|
29
|
+
const plugins = [];
|
|
30
|
+
const pluginDecls = context.schema.declarations.filter(d => (0, _ast.isPlugin)(d));
|
|
31
|
+
const prereqPlugins = ['@zenstack/prisma', '@zenstack/model-meta', '@zenstack/access-policy'];
|
|
32
|
+
const allPluginProviders = prereqPlugins.concat(pluginDecls.map(p => this.getPluginProvider(p)).filter(p => !!p && !prereqPlugins.includes(p)));
|
|
33
|
+
let prismaOutput = './prisma/schema.prisma';
|
|
34
|
+
for (const pluginProvider of allPluginProviders) {
|
|
35
|
+
const plugin = pluginDecls.find(p => this.getPluginProvider(p) === pluginProvider);
|
|
36
|
+
if (plugin) {
|
|
37
|
+
const options = {};
|
|
38
|
+
plugin.fields.forEach(f => {
|
|
39
|
+
const value = (0, _sdk.getLiteral)(f.value) || (0, _sdk.getLiteralArray)(f.value);
|
|
40
|
+
if (!value) {
|
|
41
|
+
throw new _cliError.CliError(`Invalid plugin value for ${f.name}`);
|
|
42
|
+
}
|
|
43
|
+
options[f.name] = value;
|
|
44
|
+
});
|
|
45
|
+
const pluginModulePath = this.getPluginModulePath(pluginProvider);
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
|
+
let pluginModule;
|
|
48
|
+
try {
|
|
49
|
+
pluginModule = require(pluginModulePath);
|
|
50
|
+
} catch (err) {
|
|
51
|
+
console.error(`Unable to load plugin module ${pluginProvider}: ${pluginModulePath}, ${err}`);
|
|
52
|
+
throw new _cliError.CliError(`Unable to load plugin module ${pluginProvider}`);
|
|
53
|
+
}
|
|
54
|
+
if (!pluginModule.default || typeof pluginModule.default !== 'function') {
|
|
55
|
+
console.error(`Plugin provider ${pluginProvider} is missing a default function export`);
|
|
56
|
+
throw new _cliError.CliError(`Plugin provider ${pluginProvider} is missing a default function export`);
|
|
57
|
+
}
|
|
58
|
+
plugins.push({
|
|
59
|
+
name: this.getPluginName(pluginModule, pluginProvider),
|
|
60
|
+
provider: pluginProvider,
|
|
61
|
+
run: pluginModule.default,
|
|
62
|
+
options
|
|
63
|
+
});
|
|
64
|
+
if (pluginProvider === '@zenstack/prisma' && options.output) {
|
|
65
|
+
// record custom prisma output path
|
|
66
|
+
prismaOutput = options.output;
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
// synthesize a plugin
|
|
70
|
+
const pluginModule = require(this.getPluginModulePath(pluginProvider));
|
|
71
|
+
plugins.push({
|
|
72
|
+
name: this.getPluginName(pluginModule, pluginProvider),
|
|
73
|
+
provider: pluginProvider,
|
|
74
|
+
run: pluginModule.default,
|
|
75
|
+
options: {}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const warnings = [];
|
|
80
|
+
let dmmf = undefined;
|
|
81
|
+
for (const {
|
|
82
|
+
name,
|
|
83
|
+
provider,
|
|
84
|
+
run,
|
|
85
|
+
options
|
|
86
|
+
} of plugins) {
|
|
87
|
+
await this.runPlugin(name, run, context, options, dmmf, warnings);
|
|
88
|
+
if (provider === '@zenstack/prisma') {
|
|
89
|
+
// load prisma DMMF
|
|
90
|
+
dmmf = await (0, _internals.getDMMF)({
|
|
91
|
+
datamodel: _fs.default.readFileSync(prismaOutput, {
|
|
92
|
+
encoding: 'utf-8'
|
|
93
|
+
})
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
console.log(_colors.default.green(_colors.default.bold('\nš» All plugins completed successfully!')));
|
|
98
|
+
warnings.forEach(w => console.warn(_colors.default.yellow(w)));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
102
|
+
getPluginName(pluginModule, pluginProvider) {
|
|
103
|
+
return typeof pluginModule.name === 'string' ? pluginModule.name : pluginProvider;
|
|
104
|
+
}
|
|
105
|
+
getPluginProvider(plugin) {
|
|
106
|
+
const providerField = plugin.fields.find(f => f.name === 'provider');
|
|
107
|
+
return (0, _sdk.getLiteral)(providerField === null || providerField === void 0 ? void 0 : providerField.value);
|
|
108
|
+
}
|
|
109
|
+
async runPlugin(name, run, context, options, dmmf, warnings) {
|
|
110
|
+
const spinner = (0, _ora.default)(`Running plugin ${_colors.default.cyan(name)}`).start();
|
|
111
|
+
await _telemetry.default.trackSpan('cli:plugin:start', 'cli:plugin:complete', 'cli:plugin:error', {
|
|
112
|
+
plugin: name
|
|
113
|
+
}, async () => {
|
|
114
|
+
let result = run(context.schema, options, dmmf);
|
|
115
|
+
if (result instanceof Promise) {
|
|
116
|
+
result = await result;
|
|
117
|
+
}
|
|
118
|
+
if (Array.isArray(result)) {
|
|
119
|
+
warnings.push(...result);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
spinner.succeed();
|
|
123
|
+
}
|
|
124
|
+
getPluginModulePath(provider) {
|
|
125
|
+
let pluginModulePath = provider;
|
|
126
|
+
if (pluginModulePath.startsWith('@zenstack/')) {
|
|
127
|
+
pluginModulePath = pluginModulePath.replace(/^@zenstack/, _path.default.join(__dirname, '../plugins'));
|
|
128
|
+
}
|
|
129
|
+
return pluginModulePath;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.PluginRunner = PluginRunner;
|
|
133
|
+
//# sourceMappingURL=plugin-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-runner.js","names":["PluginRunner","run","context","version","require","console","log","colors","bold","plugins","pluginDecls","schema","declarations","filter","d","isPlugin","prereqPlugins","allPluginProviders","concat","map","p","getPluginProvider","includes","prismaOutput","pluginProvider","plugin","find","options","fields","forEach","f","value","getLiteral","getLiteralArray","CliError","name","pluginModulePath","getPluginModulePath","pluginModule","err","error","default","push","getPluginName","provider","output","warnings","dmmf","undefined","runPlugin","getDMMF","datamodel","fs","readFileSync","encoding","green","w","warn","yellow","providerField","spinner","ora","cyan","start","telemetry","trackSpan","result","Promise","Array","isArray","succeed","startsWith","replace","path","join","__dirname"],"sources":["../../src/cli/plugin-runner.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport { DMMF } from '@prisma/generator-helper';\nimport { getDMMF } from '@prisma/internals';\nimport { Plugin, isPlugin } from '@zenstackhq/language/ast';\nimport { PluginFunction, PluginOptions, getLiteral, getLiteralArray } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'fs';\nimport ora from 'ora';\nimport path from 'path';\nimport telemetry from '../telemetry';\nimport { Context } from '../types';\nimport { CliError } from './cli-error';\n\n/**\n * ZenStack code generator\n */\nexport class PluginRunner {\n /**\n * Runs a series of nested generators\n */\n async run(context: Context): Promise<void> {\n const version = require('../package.json').version;\n console.log(colors.bold(`āļø ZenStack CLI v${version}, running plugins`));\n\n const plugins: Array<{\n provider: string;\n name: string;\n run: PluginFunction;\n options: PluginOptions;\n }> = [];\n\n const pluginDecls = context.schema.declarations.filter((d): d is Plugin => isPlugin(d));\n const prereqPlugins = ['@zenstack/prisma', '@zenstack/model-meta', '@zenstack/access-policy'];\n const allPluginProviders = prereqPlugins.concat(\n pluginDecls\n .map((p) => this.getPluginProvider(p))\n .filter((p): p is string => !!p && !prereqPlugins.includes(p))\n );\n let prismaOutput = './prisma/schema.prisma';\n\n for (const pluginProvider of allPluginProviders) {\n const plugin = pluginDecls.find((p) => this.getPluginProvider(p) === pluginProvider);\n if (plugin) {\n const options: PluginOptions = {};\n\n plugin.fields.forEach((f) => {\n const value = getLiteral(f.value) || getLiteralArray(f.value);\n if (!value) {\n throw new CliError(`Invalid plugin value for ${f.name}`);\n }\n options[f.name] = value;\n });\n\n const pluginModulePath = this.getPluginModulePath(pluginProvider);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let pluginModule: any;\n try {\n pluginModule = require(pluginModulePath);\n } catch (err) {\n console.error(`Unable to load plugin module ${pluginProvider}: ${pluginModulePath}, ${err}`);\n throw new CliError(`Unable to load plugin module ${pluginProvider}`);\n }\n\n if (!pluginModule.default || typeof pluginModule.default !== 'function') {\n console.error(`Plugin provider ${pluginProvider} is missing a default function export`);\n throw new CliError(`Plugin provider ${pluginProvider} is missing a default function export`);\n }\n plugins.push({\n name: this.getPluginName(pluginModule, pluginProvider),\n provider: pluginProvider,\n run: pluginModule.default as PluginFunction,\n options,\n });\n\n if (pluginProvider === '@zenstack/prisma' && options.output) {\n // record custom prisma output path\n prismaOutput = options.output as string;\n }\n } else {\n // synthesize a plugin\n const pluginModule = require(this.getPluginModulePath(pluginProvider));\n plugins.push({\n name: this.getPluginName(pluginModule, pluginProvider),\n provider: pluginProvider,\n run: pluginModule.default,\n options: {},\n });\n }\n }\n\n const warnings: string[] = [];\n\n let dmmf: DMMF.Document | undefined = undefined;\n for (const { name, provider, run, options } of plugins) {\n await this.runPlugin(name, run, context, options, dmmf, warnings);\n if (provider === '@zenstack/prisma') {\n // load prisma DMMF\n dmmf = await getDMMF({\n datamodel: fs.readFileSync(prismaOutput, { encoding: 'utf-8' }),\n });\n }\n }\n\n console.log(colors.green(colors.bold('\\nš» All plugins completed successfully!')));\n\n warnings.forEach((w) => console.warn(colors.yellow(w)));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private getPluginName(pluginModule: any, pluginProvider: string): string {\n return typeof pluginModule.name === 'string' ? (pluginModule.name as string) : pluginProvider;\n }\n\n private getPluginProvider(plugin: Plugin) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n return getLiteral<string>(providerField?.value);\n }\n\n private async runPlugin(\n name: string,\n run: PluginFunction,\n context: Context,\n options: PluginOptions,\n dmmf: DMMF.Document | undefined,\n warnings: string[]\n ) {\n const spinner = ora(`Running plugin ${colors.cyan(name)}`).start();\n await telemetry.trackSpan(\n 'cli:plugin:start',\n 'cli:plugin:complete',\n 'cli:plugin:error',\n {\n plugin: name,\n },\n async () => {\n let result = run(context.schema, options, dmmf);\n if (result instanceof Promise) {\n result = await result;\n }\n if (Array.isArray(result)) {\n warnings.push(...result);\n }\n }\n );\n spinner.succeed();\n }\n\n private getPluginModulePath(provider: string) {\n let pluginModulePath = provider;\n if (pluginModulePath.startsWith('@zenstack/')) {\n pluginModulePath = pluginModulePath.replace(/^@zenstack/, path.join(__dirname, '../plugins'));\n }\n return pluginModulePath;\n }\n}\n"],"mappings":"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"}
|
package/global.d.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/global.d.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global.d.js","names":[],"sources":["../src/global.d.ts"],"sourcesContent":["declare module 'env' {\n export const TELEMETRY_TRACKING_TOKEN: string;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported Prisma db providers
|
|
3
|
+
*/
|
|
4
|
+
export declare const SUPPORTED_PROVIDERS: string[];
|
|
5
|
+
/**
|
|
6
|
+
* All scalar types
|
|
7
|
+
*/
|
|
8
|
+
export declare const SCALAR_TYPES: string[];
|
|
9
|
+
/**
|
|
10
|
+
* Name of standard library module
|
|
11
|
+
*/
|
|
12
|
+
export declare const STD_LIB_MODULE_NAME = "stdlib.zmodel";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SUPPORTED_PROVIDERS = exports.STD_LIB_MODULE_NAME = exports.SCALAR_TYPES = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Supported Prisma db providers
|
|
9
|
+
*/
|
|
10
|
+
const SUPPORTED_PROVIDERS = ['sqlite', 'postgresql', 'mysql', 'sqlserver', 'cockroachdb'];
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* All scalar types
|
|
14
|
+
*/
|
|
15
|
+
exports.SUPPORTED_PROVIDERS = SUPPORTED_PROVIDERS;
|
|
16
|
+
const SCALAR_TYPES = ['String', 'Int', 'Float', 'Decimal', 'BigInt', 'Boolean', 'Bytes', 'DateTime'];
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Name of standard library module
|
|
20
|
+
*/
|
|
21
|
+
exports.SCALAR_TYPES = SCALAR_TYPES;
|
|
22
|
+
const STD_LIB_MODULE_NAME = 'stdlib.zmodel';
|
|
23
|
+
exports.STD_LIB_MODULE_NAME = STD_LIB_MODULE_NAME;
|
|
24
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":["SUPPORTED_PROVIDERS","SCALAR_TYPES","STD_LIB_MODULE_NAME"],"sources":["../../src/language-server/constants.ts"],"sourcesContent":["/**\n * Supported Prisma db providers\n */\nexport const SUPPORTED_PROVIDERS = ['sqlite', 'postgresql', 'mysql', 'sqlserver', 'cockroachdb'];\n\n/**\n * All scalar types\n */\nexport const SCALAR_TYPES = ['String', 'Int', 'Float', 'Decimal', 'BigInt', 'Boolean', 'Bytes', 'DateTime'];\n\n/**\n * Name of standard library module\n */\nexport const STD_LIB_MODULE_NAME = 'stdlib.zmodel';\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACO,MAAMA,mBAAmB,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC;;AAEhG;AACA;AACA;AAFA;AAGO,MAAMC,YAAY,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC;;AAE3G;AACA;AACA;AAFA;AAGO,MAAMC,mBAAmB,GAAG,eAAe;AAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|