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.
Files changed (133) hide show
  1. package/cli/cli-error.d.ts +5 -0
  2. package/cli/cli-error.js +12 -0
  3. package/cli/cli-error.js.map +1 -0
  4. package/cli/cli-util.d.ts +18 -0
  5. package/cli/cli-util.js +122 -0
  6. package/cli/cli-util.js.map +1 -0
  7. package/cli/index.d.ts +14 -0
  8. package/cli/index.js +72 -6529
  9. package/cli/index.js.map +1 -0
  10. package/cli/plugin-runner.d.ts +14 -0
  11. package/cli/plugin-runner.js +133 -0
  12. package/cli/plugin-runner.js.map +1 -0
  13. package/global.d.js +1 -0
  14. package/global.d.js.map +1 -0
  15. package/language-server/constants.d.ts +12 -0
  16. package/language-server/constants.js +24 -0
  17. package/language-server/constants.js.map +1 -0
  18. package/language-server/main.d.ts +1 -0
  19. package/language-server/main.js +20 -6436
  20. package/language-server/main.js.map +1 -0
  21. package/language-server/types.d.ts +10 -0
  22. package/language-server/types.js +1 -0
  23. package/language-server/types.js.map +1 -0
  24. package/language-server/utils.d.ts +10 -0
  25. package/language-server/utils.js +28 -0
  26. package/language-server/utils.js.map +1 -0
  27. package/language-server/validator/attribute-validator.d.ts +9 -0
  28. package/language-server/validator/attribute-validator.js +15 -0
  29. package/language-server/validator/attribute-validator.js.map +1 -0
  30. package/language-server/validator/datamodel-validator.d.ts +16 -0
  31. package/language-server/validator/datamodel-validator.js +365 -0
  32. package/language-server/validator/datamodel-validator.js.map +1 -0
  33. package/language-server/validator/datasource-validator.d.ts +13 -0
  34. package/language-server/validator/datasource-validator.js +85 -0
  35. package/language-server/validator/datasource-validator.js.map +1 -0
  36. package/language-server/validator/enum-validator.d.ts +9 -0
  37. package/language-server/validator/enum-validator.js +18 -0
  38. package/language-server/validator/enum-validator.js.map +1 -0
  39. package/language-server/validator/expression-validator.d.ts +11 -0
  40. package/language-server/validator/expression-validator.js +40 -0
  41. package/language-server/validator/expression-validator.js.map +1 -0
  42. package/language-server/validator/schema-validator.d.ts +10 -0
  43. package/language-server/validator/schema-validator.js +35 -0
  44. package/language-server/validator/schema-validator.js.map +1 -0
  45. package/language-server/validator/utils.d.ts +24 -0
  46. package/language-server/validator/utils.js +116 -0
  47. package/language-server/validator/utils.js.map +1 -0
  48. package/language-server/validator/zmodel-validator.d.ts +21 -0
  49. package/language-server/validator/zmodel-validator.js +72 -0
  50. package/language-server/validator/zmodel-validator.js.map +1 -0
  51. package/language-server/zmodel-linker.d.ts +29 -0
  52. package/language-server/zmodel-linker.js +364 -0
  53. package/language-server/zmodel-linker.js.map +1 -0
  54. package/language-server/zmodel-module.d.ts +41 -0
  55. package/language-server/zmodel-module.js +83 -0
  56. package/language-server/zmodel-module.js.map +1 -0
  57. package/language-server/zmodel-scope.d.ts +10 -0
  58. package/language-server/zmodel-scope.js +34 -0
  59. package/language-server/zmodel-scope.js.map +1 -0
  60. package/language-server/zmodel-workspace-manager.d.ts +8 -0
  61. package/language-server/zmodel-workspace-manager.js +25 -0
  62. package/language-server/zmodel-workspace-manager.js.map +1 -0
  63. package/package.json +23 -18
  64. package/plugins/access-policy/expression-writer.d.ts +38 -0
  65. package/plugins/access-policy/expression-writer.js +323 -0
  66. package/plugins/access-policy/expression-writer.js.map +1 -0
  67. package/plugins/access-policy/index.d.ts +4 -0
  68. package/plugins/access-policy/index.js +15 -0
  69. package/plugins/access-policy/index.js.map +1 -0
  70. package/plugins/access-policy/policy-guard-generator.d.ts +15 -0
  71. package/plugins/access-policy/policy-guard-generator.js +345 -0
  72. package/plugins/access-policy/policy-guard-generator.js.map +1 -0
  73. package/plugins/access-policy/typescript-expression-transformer.d.ts +26 -0
  74. package/plugins/access-policy/typescript-expression-transformer.js +110 -0
  75. package/plugins/access-policy/typescript-expression-transformer.js.map +1 -0
  76. package/plugins/access-policy/utils.d.ts +5 -0
  77. package/plugins/access-policy/utils.js +16 -0
  78. package/plugins/access-policy/utils.js.map +1 -0
  79. package/plugins/access-policy/zod-schema-generator.d.ts +12 -0
  80. package/plugins/access-policy/zod-schema-generator.js +174 -0
  81. package/plugins/access-policy/zod-schema-generator.js.map +1 -0
  82. package/plugins/model-meta/index.d.ts +4 -0
  83. package/plugins/model-meta/index.js +130 -0
  84. package/plugins/model-meta/index.js.map +1 -0
  85. package/plugins/plugin-utils.d.ts +16 -0
  86. package/plugins/plugin-utils.js +58 -0
  87. package/plugins/plugin-utils.js.map +1 -0
  88. package/plugins/prisma/indent-string.d.ts +4 -0
  89. package/plugins/prisma/indent-string.js +16 -0
  90. package/plugins/prisma/indent-string.js.map +1 -0
  91. package/plugins/prisma/index.d.ts +4 -0
  92. package/plugins/prisma/index.js +15 -3740
  93. package/plugins/prisma/index.js.map +1 -0
  94. package/plugins/prisma/prisma-builder.d.ts +130 -0
  95. package/plugins/prisma/prisma-builder.js +271 -0
  96. package/plugins/prisma/prisma-builder.js.map +1 -0
  97. package/plugins/prisma/schema-generator.d.ts +24 -0
  98. package/plugins/prisma/schema-generator.js +212 -0
  99. package/plugins/prisma/schema-generator.js.map +1 -0
  100. package/plugins/prisma/zmodel-code-generator.d.ts +27 -0
  101. package/plugins/prisma/zmodel-code-generator.js +110 -0
  102. package/plugins/prisma/zmodel-code-generator.js.map +1 -0
  103. package/res/prism-zmodel.js +2 -4
  104. package/res/starter.zmodel +47 -0
  105. package/res/stdlib.zmodel +12 -1
  106. package/telemetry.d.ts +21 -0
  107. package/telemetry.js +102 -0
  108. package/telemetry.js.map +1 -0
  109. package/types.d.ts +11 -0
  110. package/types.js +1 -0
  111. package/types.js.map +1 -0
  112. package/utils/ast-utils.d.ts +15 -0
  113. package/utils/ast-utils.js +79 -0
  114. package/utils/ast-utils.js.map +1 -0
  115. package/utils/exec-utils.d.ts +6 -0
  116. package/utils/exec-utils.js +22 -0
  117. package/utils/exec-utils.js.map +1 -0
  118. package/utils/pkg-utils.d.ts +3 -0
  119. package/utils/pkg-utils.js +43 -0
  120. package/utils/pkg-utils.js.map +1 -0
  121. package/utils/version-utils.d.ts +1 -0
  122. package/utils/version-utils.js +15 -0
  123. package/utils/version-utils.js.map +1 -0
  124. package/asset/logo-256-bg.png +0 -0
  125. package/asset/logo-dark-256.png +0 -0
  126. package/asset/logo-light-256.png +0 -0
  127. package/extension.js +0 -39
  128. package/plugins/policy-guard/index.js +0 -4289
  129. package/plugins/react-hooks/index.js +0 -4318
  130. package/plugins/trpc/index.js +0 -5386
  131. package/plugins/zod/index.js +0 -4808
  132. package/res/package.template.json +0 -9
  133. package/res/tsconfig.template.json +0 -17
@@ -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";
@@ -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 {};