zenstack 1.0.0 → 1.0.16
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/LICENSE +1 -1
- package/README.md +126 -1
- package/bin/cli +3 -0
- package/bin/post-install.js +24 -0
- package/cli/cli-error.d.ts +5 -0
- package/cli/cli-error.js +10 -0
- package/cli/cli-error.js.map +1 -0
- package/cli/cli-util.d.ts +18 -0
- package/cli/cli-util.js +143 -0
- package/cli/cli-util.js.map +1 -0
- package/cli/index.d.ts +15 -0
- package/cli/index.js +121 -0
- package/cli/index.js.map +1 -0
- package/cli/plugin-runner.d.ts +14 -0
- package/cli/plugin-runner.js +145 -0
- package/cli/plugin-runner.js.map +1 -0
- package/constants.d.ts +1 -0
- package/constants.js +6 -0
- package/constants.js.map +1 -0
- package/language-server/constants.d.ts +15 -0
- package/language-server/constants.js +20 -0
- package/language-server/constants.js.map +1 -0
- package/language-server/main.d.ts +1 -0
- package/language-server/main.js +13 -0
- package/language-server/main.js.map +1 -0
- package/language-server/types.d.ts +10 -0
- package/language-server/types.js +3 -0
- package/language-server/types.js.map +1 -0
- package/language-server/utils.d.ts +18 -0
- package/language-server/utils.js +58 -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 +11 -0
- package/language-server/validator/attribute-validator.js.map +1 -0
- package/language-server/validator/datamodel-validator.d.ts +15 -0
- package/language-server/validator/datamodel-validator.js +278 -0
- package/language-server/validator/datamodel-validator.js.map +1 -0
- package/language-server/validator/datasource-validator.d.ts +12 -0
- package/language-server/validator/datasource-validator.js +66 -0
- package/language-server/validator/datasource-validator.js.map +1 -0
- package/language-server/validator/enum-validator.d.ts +11 -0
- package/language-server/validator/enum-validator.js +28 -0
- package/language-server/validator/enum-validator.js.map +1 -0
- package/language-server/validator/expression-validator.d.ts +10 -0
- package/language-server/validator/expression-validator.js +30 -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 +28 -0
- package/language-server/validator/schema-validator.js.map +1 -0
- package/language-server/validator/utils.d.ts +25 -0
- package/language-server/validator/utils.js +257 -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 +69 -0
- package/language-server/validator/zmodel-validator.js.map +1 -0
- package/language-server/zmodel-code-action.d.ts +14 -0
- package/language-server/zmodel-code-action.js +93 -0
- package/language-server/zmodel-code-action.js.map +1 -0
- package/language-server/zmodel-formatter.d.ts +9 -0
- package/language-server/zmodel-formatter.js +76 -0
- package/language-server/zmodel-formatter.js.map +1 -0
- package/language-server/zmodel-linker.d.ts +29 -0
- package/language-server/zmodel-linker.js +366 -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 +80 -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 +44 -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 +37 -0
- package/language-server/zmodel-workspace-manager.js.map +1 -0
- package/package.json +133 -8
- package/plugins/access-policy/expression-writer.d.ts +39 -0
- package/plugins/access-policy/expression-writer.js +361 -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 +24 -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 +349 -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 +111 -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 +14 -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 +158 -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 +168 -0
- package/plugins/model-meta/index.js.map +1 -0
- package/plugins/plugin-utils.d.ts +16 -0
- package/plugins/plugin-utils.js +54 -0
- package/plugins/plugin-utils.js.map +1 -0
- package/plugins/prisma/indent-string.d.ts +4 -0
- package/plugins/prisma/indent-string.js +12 -0
- package/plugins/prisma/indent-string.js.map +1 -0
- package/plugins/prisma/index.d.ts +4 -0
- package/plugins/prisma/index.js +24 -0
- package/plugins/prisma/index.js.map +1 -0
- package/plugins/prisma/prisma-builder.d.ts +152 -0
- package/plugins/prisma/prisma-builder.js +363 -0
- package/plugins/prisma/prisma-builder.js.map +1 -0
- package/plugins/prisma/schema-generator.d.ts +25 -0
- package/plugins/prisma/schema-generator.js +292 -0
- package/plugins/prisma/schema-generator.js.map +1 -0
- package/plugins/prisma/zmodel-code-generator.d.ts +28 -0
- package/plugins/prisma/zmodel-code-generator.js +114 -0
- package/plugins/prisma/zmodel-code-generator.js.map +1 -0
- package/res/prism-zmodel.js +20 -0
- package/res/starter.zmodel +51 -0
- package/res/stdlib.zmodel +346 -0
- package/telemetry.d.ts +20 -0
- package/telemetry.js +119 -0
- package/telemetry.js.map +1 -0
- package/types.d.ts +12 -0
- package/types.js +3 -0
- package/types.js.map +1 -0
- package/utils/ast-utils.d.ts +16 -0
- package/utils/ast-utils.js +85 -0
- package/utils/ast-utils.js.map +1 -0
- package/utils/exec-utils.d.ts +6 -0
- package/utils/exec-utils.js +13 -0
- package/utils/exec-utils.js.map +1 -0
- package/utils/pkg-utils.d.ts +3 -0
- package/utils/pkg-utils.js +46 -0
- package/utils/pkg-utils.js.map +1 -0
- package/utils/version-utils.d.ts +1 -0
- package/utils/version-utils.js +14 -0
- package/utils/version-utils.js.map +1 -0
- package/.vscode/extensions.json +0 -7
- package/.vscode/launch.json +0 -49
- package/.vscode/settings.json +0 -4
- package/packages/internal/jest.config.ts +0 -32
- package/packages/internal/package.json +0 -42
- package/packages/internal/src/constants.ts +0 -1
- package/packages/internal/src/handler/data/guard-utils.ts +0 -7
- package/packages/internal/src/handler/data/handler.ts +0 -415
- package/packages/internal/src/handler/data/query-processor.ts +0 -504
- package/packages/internal/src/handler/index.ts +0 -1
- package/packages/internal/src/handler/types.ts +0 -20
- package/packages/internal/src/index.ts +0 -3
- package/packages/internal/src/request-handler.ts +0 -27
- package/packages/internal/src/request.ts +0 -101
- package/packages/internal/src/types.ts +0 -40
- package/packages/internal/tests/query-processor.test.ts +0 -172
- package/packages/internal/tsconfig.json +0 -21
- package/packages/runtime/auth.d.ts +0 -1
- package/packages/runtime/auth.js +0 -3
- package/packages/runtime/hooks.d.ts +0 -10
- package/packages/runtime/hooks.js +0 -3
- package/packages/runtime/index.d.ts +0 -3
- package/packages/runtime/index.js +0 -1
- package/packages/runtime/package-lock.json +0 -512
- package/packages/runtime/package.json +0 -16
- package/packages/runtime/server.d.ts +0 -1
- package/packages/runtime/server.js +0 -3
- package/packages/runtime/types.d.ts +0 -1
- package/packages/runtime/types.js +0 -3
- package/packages/schema/.eslintrc.json +0 -13
- package/packages/schema/.vscodeignore +0 -4
- package/packages/schema/asset/logo-dark.png +0 -0
- package/packages/schema/asset/logo-light.png +0 -0
- package/packages/schema/bin/cli +0 -3
- package/packages/schema/jest.config.ts +0 -32
- package/packages/schema/langium-config.json +0 -14
- package/packages/schema/langium-quickstart.md +0 -41
- package/packages/schema/language-configuration.json +0 -30
- package/packages/schema/package.json +0 -96
- package/packages/schema/src/cli/cli-util.ts +0 -80
- package/packages/schema/src/cli/index.ts +0 -64
- package/packages/schema/src/extension.ts +0 -76
- package/packages/schema/src/generator/constants.ts +0 -5
- package/packages/schema/src/generator/index.ts +0 -92
- package/packages/schema/src/generator/next-auth/index.ts +0 -197
- package/packages/schema/src/generator/package.template.json +0 -9
- package/packages/schema/src/generator/prisma/expression-writer.ts +0 -352
- package/packages/schema/src/generator/prisma/index.ts +0 -32
- package/packages/schema/src/generator/prisma/plain-expression-builder.ts +0 -91
- package/packages/schema/src/generator/prisma/prisma-builder.ts +0 -366
- package/packages/schema/src/generator/prisma/query-gard-generator.ts +0 -208
- package/packages/schema/src/generator/prisma/schema-generator.ts +0 -300
- package/packages/schema/src/generator/react-hooks/index.ts +0 -181
- package/packages/schema/src/generator/service/index.ts +0 -107
- package/packages/schema/src/generator/tsconfig.template.json +0 -17
- package/packages/schema/src/generator/types.ts +0 -17
- package/packages/schema/src/generator/utils.ts +0 -9
- package/packages/schema/src/language-server/generated/ast.ts +0 -603
- package/packages/schema/src/language-server/generated/grammar.ts +0 -2190
- package/packages/schema/src/language-server/generated/module.ts +0 -24
- package/packages/schema/src/language-server/main.ts +0 -12
- package/packages/schema/src/language-server/stdlib.zmodel +0 -22
- package/packages/schema/src/language-server/types.ts +0 -9
- package/packages/schema/src/language-server/zmodel-index.ts +0 -33
- package/packages/schema/src/language-server/zmodel-linker.ts +0 -409
- package/packages/schema/src/language-server/zmodel-module.ts +0 -90
- package/packages/schema/src/language-server/zmodel-scope.ts +0 -21
- package/packages/schema/src/language-server/zmodel-validator.ts +0 -35
- package/packages/schema/src/language-server/zmodel.langium +0 -186
- package/packages/schema/src/utils/exec-utils.ts +0 -5
- package/packages/schema/src/utils/indent-string.ts +0 -6
- package/packages/schema/syntaxes/zmodel.json +0 -57
- package/packages/schema/syntaxes/zmodel.tmLanguage.json +0 -57
- package/packages/schema/tests/generator/expression-writer.test.ts +0 -676
- package/packages/schema/tests/generator/prisma-builder.test.ts +0 -138
- package/packages/schema/tests/schema/parser.test.ts +0 -423
- package/packages/schema/tests/schema/sample-todo.test.ts +0 -14
- package/packages/schema/tests/utils.ts +0 -38
- package/packages/schema/tsconfig.json +0 -23
- package/pnpm-workspace.yaml +0 -3
- package/samples/todo/.env +0 -2
- package/samples/todo/.eslintrc.json +0 -3
- package/samples/todo/.vscode/launch.json +0 -11
- package/samples/todo/README.md +0 -34
- package/samples/todo/components/AuthGuard.tsx +0 -17
- package/samples/todo/components/Avatar.tsx +0 -22
- package/samples/todo/components/BreadCrumb.tsx +0 -44
- package/samples/todo/components/ManageMembers.tsx +0 -134
- package/samples/todo/components/NavBar.tsx +0 -57
- package/samples/todo/components/SpaceMembers.tsx +0 -76
- package/samples/todo/components/Spaces.tsx +0 -28
- package/samples/todo/components/TimeInfo.tsx +0 -17
- package/samples/todo/components/Todo.tsx +0 -72
- package/samples/todo/components/TodoList.tsx +0 -77
- package/samples/todo/lib/context.ts +0 -31
- package/samples/todo/next.config.js +0 -10
- package/samples/todo/package-lock.json +0 -7527
- package/samples/todo/package.json +0 -45
- package/samples/todo/pages/_app.tsx +0 -50
- package/samples/todo/pages/api/auth/[...nextauth].ts +0 -83
- package/samples/todo/pages/api/zenstack/[...path].ts +0 -16
- package/samples/todo/pages/create-space.tsx +0 -114
- package/samples/todo/pages/index.tsx +0 -32
- package/samples/todo/pages/space/[slug]/[listId]/index.tsx +0 -88
- package/samples/todo/pages/space/[slug]/index.tsx +0 -169
- package/samples/todo/postcss.config.js +0 -6
- package/samples/todo/public/avatar.jpg +0 -0
- package/samples/todo/public/favicon.ico +0 -0
- package/samples/todo/public/logo.png +0 -0
- package/samples/todo/public/vercel.svg +0 -4
- package/samples/todo/styles/globals.css +0 -7
- package/samples/todo/tailwind.config.js +0 -11
- package/samples/todo/tsconfig.json +0 -28
- package/samples/todo/types/next-auth.d.ts +0 -14
- package/samples/todo/types/next.d.ts +0 -16
- package/samples/todo/zenstack/migrations/20221014084317_init/migration.sql +0 -153
- package/samples/todo/zenstack/migrations/20221020094651_upate_cli/migration.sql +0 -23
- package/samples/todo/zenstack/migrations/migration_lock.toml +0 -3
- package/samples/todo/zenstack/schema.prisma +0 -126
- package/samples/todo/zenstack/schema.zmodel +0 -161
- package/tests/integration/jest.config.ts +0 -16
- package/tests/integration/package-lock.json +0 -1081
- package/tests/integration/package.json +0 -27
- package/tests/integration/tests/operation-coverate.test.ts +0 -563
- package/tests/integration/tests/operations.zmodel +0 -69
- package/tests/integration/tests/todo-e2e.test.ts +0 -577
- package/tests/integration/tests/todo.zmodel +0 -123
- package/tests/integration/tests/tsconfig.template.json +0 -10
- package/tests/integration/tests/utils.ts +0 -133
- package/tests/integration/tsconfig.json +0 -10
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ZodSchemaGenerator = void 0;
|
|
4
|
+
const ast_1 = require("@zenstackhq/language/ast");
|
|
5
|
+
const sdk_1 = require("@zenstackhq/sdk");
|
|
6
|
+
const change_case_1 = require("change-case");
|
|
7
|
+
const ast_utils_1 = require("../../utils/ast-utils");
|
|
8
|
+
/**
|
|
9
|
+
* Writes Zod schema for data models.
|
|
10
|
+
*/
|
|
11
|
+
class ZodSchemaGenerator {
|
|
12
|
+
generate(writer, models) {
|
|
13
|
+
writer.inlineBlock(() => {
|
|
14
|
+
models.forEach((model) => {
|
|
15
|
+
const fields = model.fields.filter((field) => {
|
|
16
|
+
var _a;
|
|
17
|
+
return !sdk_1.AUXILIARY_FIELDS.includes(field.name) &&
|
|
18
|
+
// scalar fields only
|
|
19
|
+
!(0, ast_1.isDataModelField)((_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref) &&
|
|
20
|
+
this.hasValidationAttributes(field);
|
|
21
|
+
});
|
|
22
|
+
if (fields.length === 0) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
writer.write(`${(0, change_case_1.camelCase)(model.name)}: z.object(`);
|
|
26
|
+
writer.inlineBlock(() => {
|
|
27
|
+
fields.forEach((field) => {
|
|
28
|
+
writer.writeLine(`${field.name}: ${this.makeFieldValidator(field)},`);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
writer.writeLine(').partial(),');
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
hasValidationAttributes(field) {
|
|
36
|
+
return field.attributes.some((attr) => ast_utils_1.VALIDATION_ATTRIBUTES.includes(attr.decl.$refText));
|
|
37
|
+
}
|
|
38
|
+
makeFieldValidator(field) {
|
|
39
|
+
var _a;
|
|
40
|
+
let schema = this.makeZodSchema(field);
|
|
41
|
+
// translate field constraint attributes to zod schema
|
|
42
|
+
for (const attr of field.attributes) {
|
|
43
|
+
switch ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) {
|
|
44
|
+
case '@length': {
|
|
45
|
+
const min = this.getAttrLiteralArg(attr, 'min');
|
|
46
|
+
if (min) {
|
|
47
|
+
schema += `.min(${min})`;
|
|
48
|
+
}
|
|
49
|
+
const max = this.getAttrLiteralArg(attr, 'max');
|
|
50
|
+
if (max) {
|
|
51
|
+
schema += `.max(${max})`;
|
|
52
|
+
}
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
case '@regex': {
|
|
56
|
+
const expr = this.getAttrLiteralArg(attr, 'regex');
|
|
57
|
+
if (expr) {
|
|
58
|
+
schema += `.regex(/${expr}/)`;
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case '@startsWith': {
|
|
63
|
+
const text = this.getAttrLiteralArg(attr, 'text');
|
|
64
|
+
if (text) {
|
|
65
|
+
schema += `.startsWith(${JSON.stringify(text)})`;
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case '@endsWith': {
|
|
70
|
+
const text = this.getAttrLiteralArg(attr, 'text');
|
|
71
|
+
if (text) {
|
|
72
|
+
schema += `.endsWith(${JSON.stringify(text)})`;
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case '@email': {
|
|
77
|
+
schema += `.email()`;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case '@url': {
|
|
81
|
+
schema += `.url()`;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
case '@datetime': {
|
|
85
|
+
schema += `.datetime({ offset: true })`;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case '@gt': {
|
|
89
|
+
const value = this.getAttrLiteralArg(attr, 'value');
|
|
90
|
+
if (value !== undefined) {
|
|
91
|
+
schema += `.gt(${value})`;
|
|
92
|
+
}
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case '@gte': {
|
|
96
|
+
const value = this.getAttrLiteralArg(attr, 'value');
|
|
97
|
+
if (value !== undefined) {
|
|
98
|
+
schema += `.gte(${value})`;
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case '@lt': {
|
|
103
|
+
const value = this.getAttrLiteralArg(attr, 'value');
|
|
104
|
+
if (value !== undefined) {
|
|
105
|
+
schema += `.lt(${value})`;
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
case '@lte': {
|
|
110
|
+
const value = this.getAttrLiteralArg(attr, 'value');
|
|
111
|
+
if (value !== undefined) {
|
|
112
|
+
schema += `.lte(${value})`;
|
|
113
|
+
}
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (field.type.optional) {
|
|
119
|
+
schema += '.nullable()';
|
|
120
|
+
}
|
|
121
|
+
return schema;
|
|
122
|
+
}
|
|
123
|
+
makeZodSchema(field) {
|
|
124
|
+
let schema;
|
|
125
|
+
switch (field.type.type) {
|
|
126
|
+
case 'Int':
|
|
127
|
+
case 'Float':
|
|
128
|
+
case 'Decimal':
|
|
129
|
+
schema = 'z.number()';
|
|
130
|
+
break;
|
|
131
|
+
case 'BigInt':
|
|
132
|
+
schema = 'z.bigint()';
|
|
133
|
+
break;
|
|
134
|
+
case 'String':
|
|
135
|
+
schema = 'z.string()';
|
|
136
|
+
break;
|
|
137
|
+
case 'Boolean':
|
|
138
|
+
schema = 'z.boolean()';
|
|
139
|
+
break;
|
|
140
|
+
case 'DateTime':
|
|
141
|
+
schema = 'z.date()';
|
|
142
|
+
break;
|
|
143
|
+
default:
|
|
144
|
+
schema = 'z.any()';
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
if (field.type.array) {
|
|
148
|
+
schema = `z.array(${schema})`;
|
|
149
|
+
}
|
|
150
|
+
return schema;
|
|
151
|
+
}
|
|
152
|
+
getAttrLiteralArg(attr, paramName) {
|
|
153
|
+
const arg = attr.args.find((arg) => { var _a; return ((_a = arg.$resolvedParam) === null || _a === void 0 ? void 0 : _a.name) === paramName; });
|
|
154
|
+
return arg && (0, sdk_1.getLiteral)(arg.value);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.ZodSchemaGenerator = ZodSchemaGenerator;
|
|
158
|
+
//# sourceMappingURL=zod-schema-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod-schema-generator.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/zod-schema-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.name = void 0;
|
|
16
|
+
const ast_1 = require("@zenstackhq/language/ast");
|
|
17
|
+
const sdk_1 = require("@zenstackhq/sdk");
|
|
18
|
+
const change_case_1 = require("change-case");
|
|
19
|
+
const path_1 = __importDefault(require("path"));
|
|
20
|
+
const ts_morph_1 = require("ts-morph");
|
|
21
|
+
const utils_1 = require("../../language-server/utils");
|
|
22
|
+
const plugin_utils_1 = require("../plugin-utils");
|
|
23
|
+
exports.name = 'Model Metadata';
|
|
24
|
+
function run(model, options) {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
const output = options.output ? options.output : (0, plugin_utils_1.getDefaultOutputFolder)();
|
|
27
|
+
if (!output) {
|
|
28
|
+
console.error(`Unable to determine output path, not running plugin ${exports.name}`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const dataModels = model.declarations.filter((d) => (0, ast_1.isDataModel)(d));
|
|
32
|
+
const project = new ts_morph_1.Project();
|
|
33
|
+
if (!options.output) {
|
|
34
|
+
(0, plugin_utils_1.ensureNodeModuleFolder)(output);
|
|
35
|
+
}
|
|
36
|
+
const sf = project.createSourceFile(path_1.default.join(output, 'model-meta.ts'), undefined, { overwrite: true });
|
|
37
|
+
sf.addVariableStatement({
|
|
38
|
+
declarationKind: ts_morph_1.VariableDeclarationKind.Const,
|
|
39
|
+
declarations: [{ name: 'metadata', initializer: (writer) => generateModelMetadata(dataModels, writer) }],
|
|
40
|
+
});
|
|
41
|
+
sf.addStatements('export default metadata;');
|
|
42
|
+
sf.formatText();
|
|
43
|
+
yield project.save();
|
|
44
|
+
yield project.emit();
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
exports.default = run;
|
|
48
|
+
function generateModelMetadata(dataModels, writer) {
|
|
49
|
+
writer.block(() => {
|
|
50
|
+
writer.write('fields:');
|
|
51
|
+
writer.block(() => {
|
|
52
|
+
for (const model of dataModels) {
|
|
53
|
+
writer.write(`${(0, change_case_1.camelCase)(model.name)}:`);
|
|
54
|
+
writer.block(() => {
|
|
55
|
+
var _a;
|
|
56
|
+
for (const f of model.fields) {
|
|
57
|
+
const backlink = getBackLink(f);
|
|
58
|
+
writer.write(`${f.name}: {
|
|
59
|
+
name: "${f.name}",
|
|
60
|
+
type: "${f.type.reference
|
|
61
|
+
? f.type.reference.$refText
|
|
62
|
+
: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
63
|
+
f.type.type}",
|
|
64
|
+
isId: ${isIdField(f)},
|
|
65
|
+
isDataModel: ${(0, ast_1.isDataModel)((_a = f.type.reference) === null || _a === void 0 ? void 0 : _a.ref)},
|
|
66
|
+
isArray: ${f.type.array},
|
|
67
|
+
isOptional: ${f.type.optional},
|
|
68
|
+
attributes: ${JSON.stringify(getFieldAttributes(f))},
|
|
69
|
+
backLink: ${backlink ? "'" + backlink + "'" : 'undefined'}
|
|
70
|
+
},`);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
writer.write(',');
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
writer.write(',');
|
|
77
|
+
writer.write('uniqueConstraints:');
|
|
78
|
+
writer.block(() => {
|
|
79
|
+
for (const model of dataModels) {
|
|
80
|
+
writer.write(`${(0, change_case_1.camelCase)(model.name)}:`);
|
|
81
|
+
writer.block(() => {
|
|
82
|
+
for (const constraint of getUniqueConstraints(model)) {
|
|
83
|
+
writer.write(`${constraint.name}: {
|
|
84
|
+
name: "${constraint.name}",
|
|
85
|
+
fields: ${JSON.stringify(constraint.fields)}
|
|
86
|
+
},`);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
writer.write(',');
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
writer.write(',');
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function getBackLink(field) {
|
|
96
|
+
var _a, _b, _c;
|
|
97
|
+
if (!((_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref) || !(0, ast_1.isDataModel)((_b = field.type.reference) === null || _b === void 0 ? void 0 : _b.ref)) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
const relName = getRelationName(field);
|
|
101
|
+
const sourceModel = field.$container;
|
|
102
|
+
const targetModel = field.type.reference.ref;
|
|
103
|
+
for (const otherField of targetModel.fields) {
|
|
104
|
+
if (((_c = otherField.type.reference) === null || _c === void 0 ? void 0 : _c.ref) === sourceModel) {
|
|
105
|
+
if (relName) {
|
|
106
|
+
const otherRelName = getRelationName(otherField);
|
|
107
|
+
if (relName === otherRelName) {
|
|
108
|
+
return otherField.name;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return otherField.name;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
function getRelationName(field) {
|
|
119
|
+
var _a, _b;
|
|
120
|
+
const relAttr = field.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === 'relation'; });
|
|
121
|
+
const relName = relAttr && ((_a = relAttr.args) === null || _a === void 0 ? void 0 : _a[0]) && (0, sdk_1.getLiteral)((_b = relAttr.args) === null || _b === void 0 ? void 0 : _b[0].value);
|
|
122
|
+
return relName;
|
|
123
|
+
}
|
|
124
|
+
function getFieldAttributes(field) {
|
|
125
|
+
return field.attributes
|
|
126
|
+
.map((attr) => {
|
|
127
|
+
const args = [];
|
|
128
|
+
for (const arg of attr.args) {
|
|
129
|
+
if (!(0, ast_1.isLiteralExpr)(arg.value)) {
|
|
130
|
+
// attributes with non-literal args are skipped
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
args.push({ name: arg.name, value: arg.value.value });
|
|
134
|
+
}
|
|
135
|
+
return { name: (0, sdk_1.resolved)(attr.decl).name, args };
|
|
136
|
+
})
|
|
137
|
+
.filter((d) => !!d);
|
|
138
|
+
}
|
|
139
|
+
function isIdField(field) {
|
|
140
|
+
// field-level @id attribute
|
|
141
|
+
if (field.attributes.some((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@id'; })) {
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
// model-level @@id attribute with a list of fields
|
|
145
|
+
const model = field.$container;
|
|
146
|
+
const modelLevelIds = (0, utils_1.getIdFields)(model);
|
|
147
|
+
if (modelLevelIds.includes(field)) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
function getUniqueConstraints(model) {
|
|
153
|
+
const constraints = [];
|
|
154
|
+
for (const attr of model.attributes.filter((attr) => { var _a, _b; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@unique' || ((_b = attr.decl.ref) === null || _b === void 0 ? void 0 : _b.name) === '@@id'; })) {
|
|
155
|
+
const argsMap = (0, sdk_1.getAttributeArgs)(attr);
|
|
156
|
+
if (argsMap.fields) {
|
|
157
|
+
const fieldNames = argsMap.fields.items.map((item) => (0, sdk_1.resolved)(item.target).name);
|
|
158
|
+
let constraintName = argsMap.name && (0, sdk_1.getLiteral)(argsMap.name);
|
|
159
|
+
if (!constraintName) {
|
|
160
|
+
// default constraint name is fields concatenated with underscores
|
|
161
|
+
constraintName = fieldNames.join('_');
|
|
162
|
+
}
|
|
163
|
+
constraints.push({ name: constraintName, fields: fieldNames });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return constraints;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/model-meta/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PolicyOperationKind } from '@zenstackhq/runtime';
|
|
2
|
+
export declare const RUNTIME_PACKAGE = "@zenstackhq/runtime";
|
|
3
|
+
export declare const ALL_OPERATION_KINDS: PolicyOperationKind[];
|
|
4
|
+
/**
|
|
5
|
+
* Gets the nearest "node_modules" folder by walking up from start path.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getNodeModulesFolder(startPath?: string): string | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Gets the default node_modules/.zenstack output folder for plugins.
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare function getDefaultOutputFolder(): string | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Ensure a folder exists and has a package.json in it.
|
|
15
|
+
*/
|
|
16
|
+
export declare function ensureNodeModuleFolder(folder: string): void;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ensureNodeModuleFolder = exports.getDefaultOutputFolder = exports.getNodeModulesFolder = exports.ALL_OPERATION_KINDS = exports.RUNTIME_PACKAGE = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
exports.RUNTIME_PACKAGE = '@zenstackhq/runtime';
|
|
10
|
+
exports.ALL_OPERATION_KINDS = ['create', 'update', 'postUpdate', 'read', 'delete'];
|
|
11
|
+
/**
|
|
12
|
+
* Gets the nearest "node_modules" folder by walking up from start path.
|
|
13
|
+
*/
|
|
14
|
+
function getNodeModulesFolder(startPath) {
|
|
15
|
+
startPath = startPath !== null && startPath !== void 0 ? startPath : process.cwd();
|
|
16
|
+
if (fs_1.default.existsSync(path_1.default.join(startPath, 'node_modules'))) {
|
|
17
|
+
return path_1.default.join(startPath, 'node_modules');
|
|
18
|
+
}
|
|
19
|
+
else if (startPath !== '/') {
|
|
20
|
+
const parent = path_1.default.join(startPath, '..');
|
|
21
|
+
return getNodeModulesFolder(parent);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.getNodeModulesFolder = getNodeModulesFolder;
|
|
28
|
+
/**
|
|
29
|
+
* Gets the default node_modules/.zenstack output folder for plugins.
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
function getDefaultOutputFolder() {
|
|
33
|
+
// Find the real runtime module path, it might be a symlink in pnpm
|
|
34
|
+
const runtimeModulePath = require.resolve('@zenstackhq/runtime');
|
|
35
|
+
const modulesFolder = getNodeModulesFolder(runtimeModulePath);
|
|
36
|
+
return modulesFolder ? path_1.default.join(modulesFolder, '.zenstack') : undefined;
|
|
37
|
+
}
|
|
38
|
+
exports.getDefaultOutputFolder = getDefaultOutputFolder;
|
|
39
|
+
/**
|
|
40
|
+
* Ensure a folder exists and has a package.json in it.
|
|
41
|
+
*/
|
|
42
|
+
function ensureNodeModuleFolder(folder) {
|
|
43
|
+
if (!fs_1.default.existsSync(folder)) {
|
|
44
|
+
fs_1.default.mkdirSync(folder, { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
if (!fs_1.default.existsSync(path_1.default.join(folder, 'package.json'))) {
|
|
47
|
+
fs_1.default.writeFileSync(path_1.default.join(folder, 'package.json'), JSON.stringify({
|
|
48
|
+
name: '.zenstack',
|
|
49
|
+
version: '1.0.0',
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.ensureNodeModuleFolder = ensureNodeModuleFolder;
|
|
54
|
+
//# sourceMappingURL=plugin-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-utils.js","sourceRoot":"","sources":["../../src/plugins/plugin-utils.ts"],"names":[],"mappings":";;;;;;AACA,4CAAoB;AACpB,gDAAwB;AAEX,QAAA,eAAe,GAAG,qBAAqB,CAAC;AACxC,QAAA,mBAAmB,GAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE/G;;GAEG;AACH,SAAgB,oBAAoB,CAAC,SAAkB;IACnD,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE;QACrD,OAAO,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;KAC/C;SAAM,IAAI,SAAS,KAAK,GAAG,EAAE;QAC1B,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;KACvC;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAVD,oDAUC;AAED;;;GAGG;AACH,SAAgB,sBAAsB;IAClC,mEAAmE;IACnE,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC9D,OAAO,aAAa,CAAC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AALD,wDAKC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,MAAc;IACjD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACxB,YAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;KAC7C;IACD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EAAE;QACnD,YAAE,CAAC,aAAa,CACZ,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC;YACX,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;SACnB,CAAC,CACL,CAAC;KACL;AACL,CAAC;AAbD,wDAaC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// https://github.com/sindresorhus/indent-string
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
/**
|
|
5
|
+
* Utility for indenting strings
|
|
6
|
+
*/
|
|
7
|
+
function indentString(string, count = 4) {
|
|
8
|
+
const indent = ' ';
|
|
9
|
+
return string.replace(/^(?!\s*$)/gm, indent.repeat(count));
|
|
10
|
+
}
|
|
11
|
+
exports.default = indentString;
|
|
12
|
+
//# sourceMappingURL=indent-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indent-string.js","sourceRoot":"","sources":["../../../src/plugins/prisma/indent-string.ts"],"names":[],"mappings":";AAAA,gDAAgD;;AAEhD;;GAEG;AACH,SAAwB,YAAY,CAAC,MAAc,EAAE,KAAK,GAAG,CAAC;IAC1D,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAHD,+BAGC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.name = void 0;
|
|
16
|
+
const schema_generator_1 = __importDefault(require("./schema-generator"));
|
|
17
|
+
exports.name = 'Prisma';
|
|
18
|
+
function run(model, options) {
|
|
19
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
return new schema_generator_1.default().generate(model, options);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
exports.default = run;
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/prisma/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,0EAAuD;AAE1C,QAAA,IAAI,GAAG,QAAQ,CAAC;AAE7B,SAA8B,GAAG,CAAC,KAAY,EAAE,OAAsB;;QAClE,OAAO,IAAI,0BAAqB,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CAAA;AAFD,sBAEC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field used by datasource and generator declarations.
|
|
3
|
+
*/
|
|
4
|
+
export declare type SimpleField = {
|
|
5
|
+
name: string;
|
|
6
|
+
value: string | string[];
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Prisma schema builder
|
|
10
|
+
*/
|
|
11
|
+
export declare class PrismaModel {
|
|
12
|
+
private datasources;
|
|
13
|
+
private generators;
|
|
14
|
+
private models;
|
|
15
|
+
private enums;
|
|
16
|
+
addDataSource(name: string, provider: string, url: DataSourceUrl, shadowDatabaseUrl?: DataSourceUrl, restFields?: SimpleField[]): DataSource;
|
|
17
|
+
addGenerator(name: string, fields: SimpleField[]): Generator;
|
|
18
|
+
addModel(name: string): Model;
|
|
19
|
+
addEnum(name: string): Enum;
|
|
20
|
+
toString(): string;
|
|
21
|
+
}
|
|
22
|
+
export declare class DataSource {
|
|
23
|
+
name: string;
|
|
24
|
+
provider: string;
|
|
25
|
+
url: DataSourceUrl;
|
|
26
|
+
shadowDatabaseUrl?: DataSourceUrl | undefined;
|
|
27
|
+
restFields: SimpleField[];
|
|
28
|
+
constructor(name: string, provider: string, url: DataSourceUrl, shadowDatabaseUrl?: DataSourceUrl | undefined, restFields?: SimpleField[]);
|
|
29
|
+
toString(): string;
|
|
30
|
+
}
|
|
31
|
+
export declare class DataSourceUrl {
|
|
32
|
+
value: string;
|
|
33
|
+
isEnv: boolean;
|
|
34
|
+
constructor(value: string, isEnv: boolean);
|
|
35
|
+
toString(): string;
|
|
36
|
+
}
|
|
37
|
+
export declare class Generator {
|
|
38
|
+
name: string;
|
|
39
|
+
fields: SimpleField[];
|
|
40
|
+
constructor(name: string, fields: SimpleField[]);
|
|
41
|
+
toString(): string;
|
|
42
|
+
}
|
|
43
|
+
export declare class DeclarationBase {
|
|
44
|
+
documentations: string[];
|
|
45
|
+
constructor(documentations?: string[]);
|
|
46
|
+
addComment(name: string): string;
|
|
47
|
+
toString(): string;
|
|
48
|
+
}
|
|
49
|
+
export declare class ContainerDeclaration extends DeclarationBase {
|
|
50
|
+
attributes: (ContainerAttribute | PassThroughAttribute)[];
|
|
51
|
+
constructor(documentations?: string[], attributes?: (ContainerAttribute | PassThroughAttribute)[]);
|
|
52
|
+
}
|
|
53
|
+
export declare class FieldDeclaration extends DeclarationBase {
|
|
54
|
+
attributes: (FieldAttribute | PassThroughAttribute)[];
|
|
55
|
+
constructor(documentations?: string[], attributes?: (FieldAttribute | PassThroughAttribute)[]);
|
|
56
|
+
}
|
|
57
|
+
export declare class Model extends ContainerDeclaration {
|
|
58
|
+
name: string;
|
|
59
|
+
fields: ModelField[];
|
|
60
|
+
constructor(name: string, documentations?: string[]);
|
|
61
|
+
addField(name: string, type: ModelFieldType | string, attributes?: (FieldAttribute | PassThroughAttribute)[], documentations?: string[]): ModelField;
|
|
62
|
+
addAttribute(name: string, args?: AttributeArg[]): ContainerAttribute;
|
|
63
|
+
toString(): string;
|
|
64
|
+
}
|
|
65
|
+
export declare type ScalarTypes = 'String' | 'Boolean' | 'Int' | 'BigInt' | 'Float' | 'Decimal' | 'DateTime' | 'Json' | 'Bytes' | 'Unsupported';
|
|
66
|
+
export declare class ModelFieldType {
|
|
67
|
+
type: ScalarTypes | string;
|
|
68
|
+
array?: boolean | undefined;
|
|
69
|
+
optional?: boolean | undefined;
|
|
70
|
+
constructor(type: ScalarTypes | string, array?: boolean | undefined, optional?: boolean | undefined);
|
|
71
|
+
toString(): string;
|
|
72
|
+
}
|
|
73
|
+
export declare class ModelField extends FieldDeclaration {
|
|
74
|
+
name: string;
|
|
75
|
+
type: ModelFieldType | string;
|
|
76
|
+
constructor(name: string, type: ModelFieldType | string, attributes?: (FieldAttribute | PassThroughAttribute)[], documentations?: string[]);
|
|
77
|
+
addAttribute(name: string, args?: AttributeArg[]): FieldAttribute;
|
|
78
|
+
toString(): string;
|
|
79
|
+
}
|
|
80
|
+
export declare class FieldAttribute {
|
|
81
|
+
name: string;
|
|
82
|
+
args: AttributeArg[];
|
|
83
|
+
constructor(name: string, args?: AttributeArg[]);
|
|
84
|
+
toString(): string;
|
|
85
|
+
}
|
|
86
|
+
export declare class ContainerAttribute {
|
|
87
|
+
name: string;
|
|
88
|
+
args: AttributeArg[];
|
|
89
|
+
constructor(name: string, args?: AttributeArg[]);
|
|
90
|
+
toString(): string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Represents @@prisma.passthrough and @prisma.passthrough
|
|
94
|
+
*/
|
|
95
|
+
export declare class PassThroughAttribute {
|
|
96
|
+
text: string;
|
|
97
|
+
constructor(text: string);
|
|
98
|
+
toString(): string;
|
|
99
|
+
}
|
|
100
|
+
export declare class AttributeArg {
|
|
101
|
+
name: string | undefined;
|
|
102
|
+
value: AttributeArgValue;
|
|
103
|
+
constructor(name: string | undefined, value: AttributeArgValue);
|
|
104
|
+
toString(): string;
|
|
105
|
+
}
|
|
106
|
+
export declare class AttributeArgValue {
|
|
107
|
+
type: 'String' | 'FieldReference' | 'Number' | 'Boolean' | 'Array' | 'FunctionCall';
|
|
108
|
+
value: string | number | boolean | FieldReference | FunctionCall | AttributeArgValue[];
|
|
109
|
+
constructor(type: 'String' | 'FieldReference' | 'Number' | 'Boolean' | 'Array' | 'FunctionCall', value: string | number | boolean | FieldReference | FunctionCall | AttributeArgValue[]);
|
|
110
|
+
toString(): string;
|
|
111
|
+
}
|
|
112
|
+
export declare class FieldReference {
|
|
113
|
+
field: string;
|
|
114
|
+
args: FieldReferenceArg[];
|
|
115
|
+
constructor(field: string, args?: FieldReferenceArg[]);
|
|
116
|
+
}
|
|
117
|
+
export declare class FieldReferenceArg {
|
|
118
|
+
name: 'sort';
|
|
119
|
+
value: 'Asc' | 'Desc';
|
|
120
|
+
constructor(name: 'sort', value: 'Asc' | 'Desc');
|
|
121
|
+
toString(): string;
|
|
122
|
+
}
|
|
123
|
+
export declare class FunctionCall {
|
|
124
|
+
func: string;
|
|
125
|
+
args: FunctionCallArg[];
|
|
126
|
+
constructor(func: string, args?: FunctionCallArg[]);
|
|
127
|
+
toString(): string;
|
|
128
|
+
}
|
|
129
|
+
export declare class FunctionCallArg {
|
|
130
|
+
name: string | undefined;
|
|
131
|
+
value: any;
|
|
132
|
+
constructor(name: string | undefined, value: any);
|
|
133
|
+
toString(): string;
|
|
134
|
+
}
|
|
135
|
+
export declare class Enum extends ContainerDeclaration {
|
|
136
|
+
name: string;
|
|
137
|
+
documentations: string[];
|
|
138
|
+
fields: EnumField[];
|
|
139
|
+
constructor(name: string, documentations?: string[]);
|
|
140
|
+
addField(name: string, attributes?: (FieldAttribute | PassThroughAttribute)[], documentations?: string[]): EnumField;
|
|
141
|
+
addAttribute(name: string, args?: AttributeArg[]): ContainerAttribute;
|
|
142
|
+
addComment(name: string): string;
|
|
143
|
+
toString(): string;
|
|
144
|
+
}
|
|
145
|
+
export declare class EnumField extends DeclarationBase {
|
|
146
|
+
name: string;
|
|
147
|
+
attributes: (FieldAttribute | PassThroughAttribute)[];
|
|
148
|
+
documentations: string[];
|
|
149
|
+
constructor(name: string, attributes?: (FieldAttribute | PassThroughAttribute)[], documentations?: string[]);
|
|
150
|
+
addAttribute(name: string, args?: AttributeArg[]): FieldAttribute;
|
|
151
|
+
toString(): string;
|
|
152
|
+
}
|