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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["name","run","model","options","PrismaSchemaGenerator","generate"],"sources":["../../../src/plugins/prisma/index.ts"],"sourcesContent":["import { Model } from '@zenstackhq/language/ast';\nimport { PluginOptions } from '@zenstackhq/sdk';\nimport PrismaSchemaGenerator from './schema-generator';\n\nexport const name = 'Prisma';\n\nexport default async function run(model: Model, options: PluginOptions) {\n return new PrismaSchemaGenerator().generate(model, options);\n}\n"],"mappings":";;;;;;;AAEA;AAAuD;AAEhD,MAAMA,IAAI,GAAG,QAAQ;AAAC;AAEd,eAAeC,GAAG,CAACC,KAAY,EAAEC,OAAsB,EAAE;EACpE,OAAO,IAAIC,wBAAqB,EAAE,CAACC,QAAQ,CAACH,KAAK,EAAEC,OAAO,CAAC;AAC/D"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma schema builder
|
|
3
|
+
*/
|
|
4
|
+
export declare class PrismaModel {
|
|
5
|
+
private datasources;
|
|
6
|
+
private generators;
|
|
7
|
+
private models;
|
|
8
|
+
private enums;
|
|
9
|
+
addDataSource(name: string, provider: string, url: DataSourceUrl, shadowDatabaseUrl?: DataSourceUrl): DataSource;
|
|
10
|
+
addGenerator(name: string, fields: Array<{
|
|
11
|
+
name: string;
|
|
12
|
+
value: string | string[];
|
|
13
|
+
}>): Generator;
|
|
14
|
+
addModel(name: string): Model;
|
|
15
|
+
addEnum(name: string, fields: string[]): Enum;
|
|
16
|
+
toString(): string;
|
|
17
|
+
}
|
|
18
|
+
export declare class DataSource {
|
|
19
|
+
name: string;
|
|
20
|
+
provider: string;
|
|
21
|
+
url: DataSourceUrl;
|
|
22
|
+
shadowDatabaseUrl?: DataSourceUrl | undefined;
|
|
23
|
+
constructor(name: string, provider: string, url: DataSourceUrl, shadowDatabaseUrl?: DataSourceUrl | undefined);
|
|
24
|
+
toString(): string;
|
|
25
|
+
}
|
|
26
|
+
export declare class DataSourceUrl {
|
|
27
|
+
value: string;
|
|
28
|
+
isEnv: boolean;
|
|
29
|
+
constructor(value: string, isEnv: boolean);
|
|
30
|
+
toString(): string;
|
|
31
|
+
}
|
|
32
|
+
export declare class Generator {
|
|
33
|
+
name: string;
|
|
34
|
+
fields: Array<{
|
|
35
|
+
name: string;
|
|
36
|
+
value: string | string[];
|
|
37
|
+
}>;
|
|
38
|
+
constructor(name: string, fields: Array<{
|
|
39
|
+
name: string;
|
|
40
|
+
value: string | string[];
|
|
41
|
+
}>);
|
|
42
|
+
toString(): string;
|
|
43
|
+
}
|
|
44
|
+
export declare class DeclarationBase {
|
|
45
|
+
documentations: string[];
|
|
46
|
+
addComment(name: string): string;
|
|
47
|
+
toString(): string;
|
|
48
|
+
}
|
|
49
|
+
export declare class Model extends DeclarationBase {
|
|
50
|
+
name: string;
|
|
51
|
+
documentations: string[];
|
|
52
|
+
fields: ModelField[];
|
|
53
|
+
attributes: ModelAttribute[];
|
|
54
|
+
constructor(name: string, documentations?: string[]);
|
|
55
|
+
addField(name: string, type: ModelFieldType | string, attributes?: FieldAttribute[], documentations?: string[]): ModelField;
|
|
56
|
+
addAttribute(name: string, args?: AttributeArg[]): ModelAttribute;
|
|
57
|
+
toString(): string;
|
|
58
|
+
}
|
|
59
|
+
export declare type ScalarTypes = 'String' | 'Boolean' | 'Int' | 'BigInt' | 'Float' | 'Decimal' | 'DateTime' | 'Json' | 'Bytes' | 'Unsupported';
|
|
60
|
+
export declare class ModelFieldType {
|
|
61
|
+
type: ScalarTypes | string;
|
|
62
|
+
array?: boolean | undefined;
|
|
63
|
+
optional?: boolean | undefined;
|
|
64
|
+
constructor(type: ScalarTypes | string, array?: boolean | undefined, optional?: boolean | undefined);
|
|
65
|
+
toString(): string;
|
|
66
|
+
}
|
|
67
|
+
export declare class ModelField extends DeclarationBase {
|
|
68
|
+
name: string;
|
|
69
|
+
type: ModelFieldType | string;
|
|
70
|
+
attributes: FieldAttribute[];
|
|
71
|
+
documentations: string[];
|
|
72
|
+
constructor(name: string, type: ModelFieldType | string, attributes?: FieldAttribute[], documentations?: string[]);
|
|
73
|
+
addAttribute(name: string, args?: AttributeArg[]): FieldAttribute;
|
|
74
|
+
toString(): string;
|
|
75
|
+
}
|
|
76
|
+
export declare class FieldAttribute {
|
|
77
|
+
name: string;
|
|
78
|
+
args: AttributeArg[];
|
|
79
|
+
constructor(name: string, args?: AttributeArg[]);
|
|
80
|
+
toString(): string;
|
|
81
|
+
}
|
|
82
|
+
export declare class ModelAttribute {
|
|
83
|
+
name: string;
|
|
84
|
+
args: AttributeArg[];
|
|
85
|
+
constructor(name: string, args?: AttributeArg[]);
|
|
86
|
+
toString(): string;
|
|
87
|
+
}
|
|
88
|
+
export declare class AttributeArg {
|
|
89
|
+
name: string | undefined;
|
|
90
|
+
value: AttributeArgValue;
|
|
91
|
+
constructor(name: string | undefined, value: AttributeArgValue);
|
|
92
|
+
toString(): string;
|
|
93
|
+
}
|
|
94
|
+
export declare class AttributeArgValue {
|
|
95
|
+
type: 'String' | 'FieldReference' | 'Number' | 'Boolean' | 'Array' | 'FunctionCall';
|
|
96
|
+
value: string | number | boolean | FieldReference | FunctionCall | AttributeArgValue[];
|
|
97
|
+
constructor(type: 'String' | 'FieldReference' | 'Number' | 'Boolean' | 'Array' | 'FunctionCall', value: string | number | boolean | FieldReference | FunctionCall | AttributeArgValue[]);
|
|
98
|
+
toString(): string;
|
|
99
|
+
}
|
|
100
|
+
export declare class FieldReference {
|
|
101
|
+
field: string;
|
|
102
|
+
args: FieldReferenceArg[];
|
|
103
|
+
constructor(field: string, args?: FieldReferenceArg[]);
|
|
104
|
+
}
|
|
105
|
+
export declare class FieldReferenceArg {
|
|
106
|
+
name: 'sort';
|
|
107
|
+
value: 'Asc' | 'Desc';
|
|
108
|
+
constructor(name: 'sort', value: 'Asc' | 'Desc');
|
|
109
|
+
toString(): string;
|
|
110
|
+
}
|
|
111
|
+
export declare class FunctionCall {
|
|
112
|
+
func: string;
|
|
113
|
+
args: FunctionCallArg[];
|
|
114
|
+
constructor(func: string, args?: FunctionCallArg[]);
|
|
115
|
+
toString(): string;
|
|
116
|
+
}
|
|
117
|
+
export declare class FunctionCallArg {
|
|
118
|
+
name: string | undefined;
|
|
119
|
+
value: any;
|
|
120
|
+
constructor(name: string | undefined, value: any);
|
|
121
|
+
toString(): string;
|
|
122
|
+
}
|
|
123
|
+
export declare class Enum {
|
|
124
|
+
name: string;
|
|
125
|
+
fields: EnumField[];
|
|
126
|
+
constructor(name: string, fields: EnumField[]);
|
|
127
|
+
toString(): string;
|
|
128
|
+
}
|
|
129
|
+
declare type EnumField = string;
|
|
130
|
+
export {};
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PrismaModel = exports.ModelFieldType = exports.ModelField = exports.ModelAttribute = exports.Model = exports.Generator = exports.FunctionCallArg = exports.FunctionCall = exports.FieldReferenceArg = exports.FieldReference = exports.FieldAttribute = exports.Enum = exports.DeclarationBase = exports.DataSourceUrl = exports.DataSource = exports.AttributeArgValue = exports.AttributeArg = void 0;
|
|
7
|
+
var _indentString = _interopRequireDefault(require("./indent-string"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
/**
|
|
10
|
+
* Prisma schema builder
|
|
11
|
+
*/
|
|
12
|
+
class PrismaModel {
|
|
13
|
+
datasources = [];
|
|
14
|
+
generators = [];
|
|
15
|
+
models = [];
|
|
16
|
+
enums = [];
|
|
17
|
+
addDataSource(name, provider, url, shadowDatabaseUrl) {
|
|
18
|
+
const ds = new DataSource(name, provider, url, shadowDatabaseUrl);
|
|
19
|
+
this.datasources.push(ds);
|
|
20
|
+
return ds;
|
|
21
|
+
}
|
|
22
|
+
addGenerator(name, fields) {
|
|
23
|
+
const generator = new Generator(name, fields);
|
|
24
|
+
this.generators.push(generator);
|
|
25
|
+
return generator;
|
|
26
|
+
}
|
|
27
|
+
addModel(name) {
|
|
28
|
+
const model = new Model(name);
|
|
29
|
+
this.models.push(model);
|
|
30
|
+
return model;
|
|
31
|
+
}
|
|
32
|
+
addEnum(name, fields) {
|
|
33
|
+
const e = new Enum(name, fields);
|
|
34
|
+
this.enums.push(e);
|
|
35
|
+
return e;
|
|
36
|
+
}
|
|
37
|
+
toString() {
|
|
38
|
+
return [...this.datasources, ...this.generators, ...this.enums, ...this.models].map(d => d.toString()).join('\n\n');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.PrismaModel = PrismaModel;
|
|
42
|
+
class DataSource {
|
|
43
|
+
constructor(name, provider, url, shadowDatabaseUrl) {
|
|
44
|
+
this.name = name;
|
|
45
|
+
this.provider = provider;
|
|
46
|
+
this.url = url;
|
|
47
|
+
this.shadowDatabaseUrl = shadowDatabaseUrl;
|
|
48
|
+
}
|
|
49
|
+
toString() {
|
|
50
|
+
return `datasource ${this.name} {\n` + (0, _indentString.default)(`provider="${this.provider}"\n`) + (0, _indentString.default)(`url=${this.url}\n`) + (this.shadowDatabaseUrl ? (0, _indentString.default)(`shadowDatabaseurl=${this.shadowDatabaseUrl}\n`) : '') + `}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.DataSource = DataSource;
|
|
54
|
+
class DataSourceUrl {
|
|
55
|
+
constructor(value, isEnv) {
|
|
56
|
+
this.value = value;
|
|
57
|
+
this.isEnv = isEnv;
|
|
58
|
+
}
|
|
59
|
+
toString() {
|
|
60
|
+
return this.isEnv ? `env("${this.value}")` : `"${this.value}"`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.DataSourceUrl = DataSourceUrl;
|
|
64
|
+
class Generator {
|
|
65
|
+
constructor(name, fields) {
|
|
66
|
+
this.name = name;
|
|
67
|
+
this.fields = fields;
|
|
68
|
+
}
|
|
69
|
+
toString() {
|
|
70
|
+
return `generator ${this.name} {\n` + this.fields.map(f => (0, _indentString.default)(`${f.name} = ${JSON.stringify(f.value)}`)).join('\n') + `\n}`;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.Generator = Generator;
|
|
74
|
+
class DeclarationBase {
|
|
75
|
+
documentations = [];
|
|
76
|
+
addComment(name) {
|
|
77
|
+
this.documentations.push(name);
|
|
78
|
+
return name;
|
|
79
|
+
}
|
|
80
|
+
toString() {
|
|
81
|
+
return this.documentations.map(x => `/// ${x}\n`).join('');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.DeclarationBase = DeclarationBase;
|
|
85
|
+
class Model extends DeclarationBase {
|
|
86
|
+
fields = [];
|
|
87
|
+
attributes = [];
|
|
88
|
+
constructor(name, documentations = []) {
|
|
89
|
+
super();
|
|
90
|
+
this.name = name;
|
|
91
|
+
this.documentations = documentations;
|
|
92
|
+
}
|
|
93
|
+
addField(name, type, attributes = [], documentations = []) {
|
|
94
|
+
const field = new ModelField(name, type, attributes, documentations);
|
|
95
|
+
this.fields.push(field);
|
|
96
|
+
return field;
|
|
97
|
+
}
|
|
98
|
+
addAttribute(name, args = []) {
|
|
99
|
+
const attr = new ModelAttribute(name, args);
|
|
100
|
+
this.attributes.push(attr);
|
|
101
|
+
return attr;
|
|
102
|
+
}
|
|
103
|
+
toString() {
|
|
104
|
+
return super.toString() + `model ${this.name} {\n` + (0, _indentString.default)([...this.fields, ...this.attributes].map(d => d.toString()).join('\n')) + `\n}`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.Model = Model;
|
|
108
|
+
class ModelFieldType {
|
|
109
|
+
constructor(type, array, optional) {
|
|
110
|
+
this.type = type;
|
|
111
|
+
this.array = array;
|
|
112
|
+
this.optional = optional;
|
|
113
|
+
}
|
|
114
|
+
toString() {
|
|
115
|
+
return `${this.type}${this.array ? '[]' : ''}${this.optional ? '?' : ''}`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.ModelFieldType = ModelFieldType;
|
|
119
|
+
class ModelField extends DeclarationBase {
|
|
120
|
+
constructor(name, type, attributes = [], documentations = []) {
|
|
121
|
+
super();
|
|
122
|
+
this.name = name;
|
|
123
|
+
this.type = type;
|
|
124
|
+
this.attributes = attributes;
|
|
125
|
+
this.documentations = documentations;
|
|
126
|
+
}
|
|
127
|
+
addAttribute(name, args = []) {
|
|
128
|
+
const attr = new FieldAttribute(name, args);
|
|
129
|
+
this.attributes.push(attr);
|
|
130
|
+
return attr;
|
|
131
|
+
}
|
|
132
|
+
toString() {
|
|
133
|
+
return super.toString() + `${this.name} ${this.type}` + (this.attributes.length > 0 ? ' ' + this.attributes.map(a => a.toString()).join(' ') : '');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.ModelField = ModelField;
|
|
137
|
+
class FieldAttribute {
|
|
138
|
+
constructor(name, args = []) {
|
|
139
|
+
this.name = name;
|
|
140
|
+
this.args = args;
|
|
141
|
+
}
|
|
142
|
+
toString() {
|
|
143
|
+
return `${this.name}(` + this.args.map(a => a.toString()).join(', ') + `)`;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.FieldAttribute = FieldAttribute;
|
|
147
|
+
class ModelAttribute {
|
|
148
|
+
constructor(name, args = []) {
|
|
149
|
+
this.name = name;
|
|
150
|
+
this.args = args;
|
|
151
|
+
}
|
|
152
|
+
toString() {
|
|
153
|
+
return `${this.name}(` + this.args.map(a => a.toString()).join(', ') + `)`;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.ModelAttribute = ModelAttribute;
|
|
157
|
+
class AttributeArg {
|
|
158
|
+
constructor(name, value) {
|
|
159
|
+
this.name = name;
|
|
160
|
+
this.value = value;
|
|
161
|
+
}
|
|
162
|
+
toString() {
|
|
163
|
+
return this.name ? `${this.name}: ${this.value}` : this.value.toString();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.AttributeArg = AttributeArg;
|
|
167
|
+
class AttributeArgValue {
|
|
168
|
+
constructor(type, value) {
|
|
169
|
+
this.type = type;
|
|
170
|
+
this.value = value;
|
|
171
|
+
switch (type) {
|
|
172
|
+
case 'String':
|
|
173
|
+
if (typeof value !== 'string') throw new Error('Value must be string');
|
|
174
|
+
break;
|
|
175
|
+
case 'Number':
|
|
176
|
+
if (typeof value !== 'number') throw new Error('Value must be number');
|
|
177
|
+
break;
|
|
178
|
+
case 'Boolean':
|
|
179
|
+
if (typeof value !== 'boolean') throw new Error('Value must be boolean');
|
|
180
|
+
break;
|
|
181
|
+
case 'Array':
|
|
182
|
+
if (!Array.isArray(value)) throw new Error('Value must be array');
|
|
183
|
+
break;
|
|
184
|
+
case 'FieldReference':
|
|
185
|
+
if (typeof value !== 'string' && !(value instanceof FieldReference)) throw new Error('Value must be string or FieldReference');
|
|
186
|
+
break;
|
|
187
|
+
case 'FunctionCall':
|
|
188
|
+
if (!(value instanceof FunctionCall)) throw new Error('Value must be FunctionCall');
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
toString() {
|
|
193
|
+
switch (this.type) {
|
|
194
|
+
case 'String':
|
|
195
|
+
return `"${this.value}"`;
|
|
196
|
+
case 'Number':
|
|
197
|
+
return this.value.toString();
|
|
198
|
+
case 'FieldReference':
|
|
199
|
+
{
|
|
200
|
+
if (typeof this.value === 'string') {
|
|
201
|
+
return this.value;
|
|
202
|
+
} else {
|
|
203
|
+
const fr = this.value;
|
|
204
|
+
let r = fr.field;
|
|
205
|
+
if (fr.args.length > 0) {
|
|
206
|
+
r += '(' + fr.args.map(a => a.toString()).join(',') + ')';
|
|
207
|
+
}
|
|
208
|
+
return r;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
case 'FunctionCall':
|
|
212
|
+
return this.value.toString();
|
|
213
|
+
case 'Boolean':
|
|
214
|
+
return this.value ? 'true' : 'false';
|
|
215
|
+
case 'Array':
|
|
216
|
+
return '[' + this.value.map(v => v.toString()).join(', ') + ']';
|
|
217
|
+
default:
|
|
218
|
+
throw new Error(`Unknown attribute value type ${this.type}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.AttributeArgValue = AttributeArgValue;
|
|
223
|
+
class FieldReference {
|
|
224
|
+
constructor(field, args = []) {
|
|
225
|
+
this.field = field;
|
|
226
|
+
this.args = args;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
exports.FieldReference = FieldReference;
|
|
230
|
+
class FieldReferenceArg {
|
|
231
|
+
constructor(name, value) {
|
|
232
|
+
this.name = name;
|
|
233
|
+
this.value = value;
|
|
234
|
+
}
|
|
235
|
+
toString() {
|
|
236
|
+
return `${this.name}: ${this.value}`;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
exports.FieldReferenceArg = FieldReferenceArg;
|
|
240
|
+
class FunctionCall {
|
|
241
|
+
constructor(func, args = []) {
|
|
242
|
+
this.func = func;
|
|
243
|
+
this.args = args;
|
|
244
|
+
}
|
|
245
|
+
toString() {
|
|
246
|
+
return `${this.func}` + '(' + this.args.map(a => a.toString()).join(', ') + ')';
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
exports.FunctionCall = FunctionCall;
|
|
250
|
+
class FunctionCallArg {
|
|
251
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
|
252
|
+
constructor(name, value) {
|
|
253
|
+
this.name = name;
|
|
254
|
+
this.value = value;
|
|
255
|
+
}
|
|
256
|
+
toString() {
|
|
257
|
+
return this.name ? `${this.name}: ${this.value}` : this.value;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
exports.FunctionCallArg = FunctionCallArg;
|
|
261
|
+
class Enum {
|
|
262
|
+
constructor(name, fields) {
|
|
263
|
+
this.name = name;
|
|
264
|
+
this.fields = fields;
|
|
265
|
+
}
|
|
266
|
+
toString() {
|
|
267
|
+
return `enum ${this.name} {\n` + (0, _indentString.default)(this.fields.join('\n')) + '\n}';
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
exports.Enum = Enum;
|
|
271
|
+
//# sourceMappingURL=prisma-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-builder.js","names":["PrismaModel","datasources","generators","models","enums","addDataSource","name","provider","url","shadowDatabaseUrl","ds","DataSource","push","addGenerator","fields","generator","Generator","addModel","model","Model","addEnum","e","Enum","toString","map","d","join","constructor","indentString","DataSourceUrl","value","isEnv","f","JSON","stringify","DeclarationBase","documentations","addComment","x","attributes","addField","type","field","ModelField","addAttribute","args","attr","ModelAttribute","ModelFieldType","array","optional","FieldAttribute","length","a","AttributeArg","AttributeArgValue","Error","Array","isArray","FieldReference","FunctionCall","fr","r","v","FieldReferenceArg","func","FunctionCallArg"],"sources":["../../../src/plugins/prisma/prisma-builder.ts"],"sourcesContent":["import indentString from './indent-string';\n\n/**\n * Prisma schema builder\n */\nexport class PrismaModel {\n private datasources: DataSource[] = [];\n private generators: Generator[] = [];\n private models: Model[] = [];\n private enums: Enum[] = [];\n\n addDataSource(name: string, provider: string, url: DataSourceUrl, shadowDatabaseUrl?: DataSourceUrl): DataSource {\n const ds = new DataSource(name, provider, url, shadowDatabaseUrl);\n this.datasources.push(ds);\n return ds;\n }\n\n addGenerator(name: string, fields: Array<{ name: string; value: string | string[] }>): Generator {\n const generator = new Generator(name, fields);\n this.generators.push(generator);\n return generator;\n }\n\n addModel(name: string): Model {\n const model = new Model(name);\n this.models.push(model);\n return model;\n }\n\n addEnum(name: string, fields: string[]): Enum {\n const e = new Enum(name, fields);\n this.enums.push(e);\n return e;\n }\n\n toString(): string {\n return [...this.datasources, ...this.generators, ...this.enums, ...this.models]\n .map((d) => d.toString())\n .join('\\n\\n');\n }\n}\n\nexport class DataSource {\n constructor(\n public name: string,\n public provider: string,\n public url: DataSourceUrl,\n public shadowDatabaseUrl?: DataSourceUrl\n ) {}\n\n toString(): string {\n return (\n `datasource ${this.name} {\\n` +\n indentString(`provider=\"${this.provider}\"\\n`) +\n indentString(`url=${this.url}\\n`) +\n (this.shadowDatabaseUrl ? indentString(`shadowDatabaseurl=${this.shadowDatabaseUrl}\\n`) : '') +\n `}`\n );\n }\n}\n\nexport class DataSourceUrl {\n constructor(public value: string, public isEnv: boolean) {}\n\n toString(): string {\n return this.isEnv ? `env(\"${this.value}\")` : `\"${this.value}\"`;\n }\n}\n\nexport class Generator {\n constructor(public name: string, public fields: Array<{ name: string; value: string | string[] }>) {}\n\n toString(): string {\n return (\n `generator ${this.name} {\\n` +\n this.fields.map((f) => indentString(`${f.name} = ${JSON.stringify(f.value)}`)).join('\\n') +\n `\\n}`\n );\n }\n}\n\nexport class DeclarationBase {\n public documentations: string[] = [];\n\n addComment(name: string): string {\n this.documentations.push(name);\n return name;\n }\n\n toString(): string {\n return this.documentations.map((x) => `/// ${x}\\n`).join('');\n }\n}\nexport class Model extends DeclarationBase {\n public fields: ModelField[] = [];\n public attributes: ModelAttribute[] = [];\n constructor(public name: string, public documentations: string[] = []) {\n super();\n }\n\n addField(\n name: string,\n type: ModelFieldType | string,\n attributes: FieldAttribute[] = [],\n documentations: string[] = []\n ): ModelField {\n const field = new ModelField(name, type, attributes, documentations);\n this.fields.push(field);\n return field;\n }\n\n addAttribute(name: string, args: AttributeArg[] = []): ModelAttribute {\n const attr = new ModelAttribute(name, args);\n this.attributes.push(attr);\n return attr;\n }\n\n toString(): string {\n return (\n super.toString() +\n `model ${this.name} {\\n` +\n indentString([...this.fields, ...this.attributes].map((d) => d.toString()).join('\\n')) +\n `\\n}`\n );\n }\n}\n\nexport type ScalarTypes =\n | 'String'\n | 'Boolean'\n | 'Int'\n | 'BigInt'\n | 'Float'\n | 'Decimal'\n | 'DateTime'\n | 'Json'\n | 'Bytes'\n | 'Unsupported';\n\nexport class ModelFieldType {\n constructor(public type: ScalarTypes | string, public array?: boolean, public optional?: boolean) {}\n\n toString(): string {\n return `${this.type}${this.array ? '[]' : ''}${this.optional ? '?' : ''}`;\n }\n}\n\nexport class ModelField extends DeclarationBase {\n constructor(\n public name: string,\n public type: ModelFieldType | string,\n public attributes: FieldAttribute[] = [],\n public documentations: string[] = []\n ) {\n super();\n }\n\n addAttribute(name: string, args: AttributeArg[] = []): FieldAttribute {\n const attr = new FieldAttribute(name, args);\n this.attributes.push(attr);\n return attr;\n }\n\n toString(): string {\n return (\n super.toString() +\n `${this.name} ${this.type}` +\n (this.attributes.length > 0 ? ' ' + this.attributes.map((a) => a.toString()).join(' ') : '')\n );\n }\n}\n\nexport class FieldAttribute {\n constructor(public name: string, public args: AttributeArg[] = []) {}\n\n toString(): string {\n return `${this.name}(` + this.args.map((a) => a.toString()).join(', ') + `)`;\n }\n}\n\nexport class ModelAttribute {\n constructor(public name: string, public args: AttributeArg[] = []) {}\n\n toString(): string {\n return `${this.name}(` + this.args.map((a) => a.toString()).join(', ') + `)`;\n }\n}\n\nexport class AttributeArg {\n constructor(public name: string | undefined, public value: AttributeArgValue) {}\n\n toString(): string {\n return this.name ? `${this.name}: ${this.value}` : this.value.toString();\n }\n}\n\nexport class AttributeArgValue {\n constructor(\n public type: 'String' | 'FieldReference' | 'Number' | 'Boolean' | 'Array' | 'FunctionCall',\n public value: string | number | boolean | FieldReference | FunctionCall | AttributeArgValue[]\n ) {\n switch (type) {\n case 'String':\n if (typeof value !== 'string') throw new Error('Value must be string');\n break;\n case 'Number':\n if (typeof value !== 'number') throw new Error('Value must be number');\n break;\n case 'Boolean':\n if (typeof value !== 'boolean') throw new Error('Value must be boolean');\n break;\n case 'Array':\n if (!Array.isArray(value)) throw new Error('Value must be array');\n break;\n case 'FieldReference':\n if (typeof value !== 'string' && !(value instanceof FieldReference))\n throw new Error('Value must be string or FieldReference');\n break;\n case 'FunctionCall':\n if (!(value instanceof FunctionCall)) throw new Error('Value must be FunctionCall');\n break;\n }\n }\n\n toString(): string {\n switch (this.type) {\n case 'String':\n return `\"${this.value}\"`;\n case 'Number':\n return this.value.toString();\n case 'FieldReference': {\n if (typeof this.value === 'string') {\n return this.value;\n } else {\n const fr = this.value as FieldReference;\n let r = fr.field;\n if (fr.args.length > 0) {\n r += '(' + fr.args.map((a) => a.toString()).join(',') + ')';\n }\n return r;\n }\n }\n case 'FunctionCall':\n return this.value.toString();\n case 'Boolean':\n return this.value ? 'true' : 'false';\n case 'Array':\n return '[' + (this.value as AttributeArgValue[]).map((v) => v.toString()).join(', ') + ']';\n default:\n throw new Error(`Unknown attribute value type ${this.type}`);\n }\n }\n}\n\nexport class FieldReference {\n constructor(public field: string, public args: FieldReferenceArg[] = []) {}\n}\n\nexport class FieldReferenceArg {\n constructor(public name: 'sort', public value: 'Asc' | 'Desc') {}\n\n toString(): string {\n return `${this.name}: ${this.value}`;\n }\n}\n\nexport class FunctionCall {\n constructor(public func: string, public args: FunctionCallArg[] = []) {}\n\n toString(): string {\n return `${this.func}` + '(' + this.args.map((a) => a.toString()).join(', ') + ')';\n }\n}\n\nexport class FunctionCallArg {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n constructor(public name: string | undefined, public value: any) {}\n\n toString(): string {\n return this.name ? `${this.name}: ${this.value}` : this.value;\n }\n}\n\nexport class Enum {\n constructor(public name: string, public fields: EnumField[]) {}\n\n toString(): string {\n return `enum ${this.name} {\\n` + indentString(this.fields.join('\\n')) + '\\n}';\n }\n}\n\ntype EnumField = string;\n"],"mappings":";;;;;;AAAA;AAA2C;AAE3C;AACA;AACA;AACO,MAAMA,WAAW,CAAC;EACbC,WAAW,GAAiB,EAAE;EAC9BC,UAAU,GAAgB,EAAE;EAC5BC,MAAM,GAAY,EAAE;EACpBC,KAAK,GAAW,EAAE;EAE1BC,aAAa,CAACC,IAAY,EAAEC,QAAgB,EAAEC,GAAkB,EAAEC,iBAAiC,EAAc;IAC7G,MAAMC,EAAE,GAAG,IAAIC,UAAU,CAACL,IAAI,EAAEC,QAAQ,EAAEC,GAAG,EAAEC,iBAAiB,CAAC;IACjE,IAAI,CAACR,WAAW,CAACW,IAAI,CAACF,EAAE,CAAC;IACzB,OAAOA,EAAE;EACb;EAEAG,YAAY,CAACP,IAAY,EAAEQ,MAAyD,EAAa;IAC7F,MAAMC,SAAS,GAAG,IAAIC,SAAS,CAACV,IAAI,EAAEQ,MAAM,CAAC;IAC7C,IAAI,CAACZ,UAAU,CAACU,IAAI,CAACG,SAAS,CAAC;IAC/B,OAAOA,SAAS;EACpB;EAEAE,QAAQ,CAACX,IAAY,EAAS;IAC1B,MAAMY,KAAK,GAAG,IAAIC,KAAK,CAACb,IAAI,CAAC;IAC7B,IAAI,CAACH,MAAM,CAACS,IAAI,CAACM,KAAK,CAAC;IACvB,OAAOA,KAAK;EAChB;EAEAE,OAAO,CAACd,IAAY,EAAEQ,MAAgB,EAAQ;IAC1C,MAAMO,CAAC,GAAG,IAAIC,IAAI,CAAChB,IAAI,EAAEQ,MAAM,CAAC;IAChC,IAAI,CAACV,KAAK,CAACQ,IAAI,CAACS,CAAC,CAAC;IAClB,OAAOA,CAAC;EACZ;EAEAE,QAAQ,GAAW;IACf,OAAO,CAAC,GAAG,IAAI,CAACtB,WAAW,EAAE,GAAG,IAAI,CAACC,UAAU,EAAE,GAAG,IAAI,CAACE,KAAK,EAAE,GAAG,IAAI,CAACD,MAAM,CAAC,CAC1EqB,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACF,QAAQ,EAAE,CAAC,CACxBG,IAAI,CAAC,MAAM,CAAC;EACrB;AACJ;AAAC;AAEM,MAAMf,UAAU,CAAC;EACpBgB,WAAW,CACArB,IAAY,EACZC,QAAgB,EAChBC,GAAkB,EAClBC,iBAAiC,EAC1C;IAAA,KAJSH,IAAY,GAAZA,IAAY;IAAA,KACZC,QAAgB,GAAhBA,QAAgB;IAAA,KAChBC,GAAkB,GAAlBA,GAAkB;IAAA,KAClBC,iBAAiC,GAAjCA,iBAAiC;EACzC;EAEHc,QAAQ,GAAW;IACf,OACK,cAAa,IAAI,CAACjB,IAAK,MAAK,GAC7B,IAAAsB,qBAAY,EAAE,aAAY,IAAI,CAACrB,QAAS,KAAI,CAAC,GAC7C,IAAAqB,qBAAY,EAAE,OAAM,IAAI,CAACpB,GAAI,IAAG,CAAC,IAChC,IAAI,CAACC,iBAAiB,GAAG,IAAAmB,qBAAY,EAAE,qBAAoB,IAAI,CAACnB,iBAAkB,IAAG,CAAC,GAAG,EAAE,CAAC,GAC5F,GAAE;EAEX;AACJ;AAAC;AAEM,MAAMoB,aAAa,CAAC;EACvBF,WAAW,CAAQG,KAAa,EAASC,KAAc,EAAE;IAAA,KAAtCD,KAAa,GAAbA,KAAa;IAAA,KAASC,KAAc,GAAdA,KAAc;EAAG;EAE1DR,QAAQ,GAAW;IACf,OAAO,IAAI,CAACQ,KAAK,GAAI,QAAO,IAAI,CAACD,KAAM,IAAG,GAAI,IAAG,IAAI,CAACA,KAAM,GAAE;EAClE;AACJ;AAAC;AAEM,MAAMd,SAAS,CAAC;EACnBW,WAAW,CAAQrB,IAAY,EAASQ,MAAyD,EAAE;IAAA,KAAhFR,IAAY,GAAZA,IAAY;IAAA,KAASQ,MAAyD,GAAzDA,MAAyD;EAAG;EAEpGS,QAAQ,GAAW;IACf,OACK,aAAY,IAAI,CAACjB,IAAK,MAAK,GAC5B,IAAI,CAACQ,MAAM,CAACU,GAAG,CAAEQ,CAAC,IAAK,IAAAJ,qBAAY,EAAE,GAAEI,CAAC,CAAC1B,IAAK,MAAK2B,IAAI,CAACC,SAAS,CAACF,CAAC,CAACF,KAAK,CAAE,EAAC,CAAC,CAAC,CAACJ,IAAI,CAAC,IAAI,CAAC,GACxF,KAAI;EAEb;AACJ;AAAC;AAEM,MAAMS,eAAe,CAAC;EAClBC,cAAc,GAAa,EAAE;EAEpCC,UAAU,CAAC/B,IAAY,EAAU;IAC7B,IAAI,CAAC8B,cAAc,CAACxB,IAAI,CAACN,IAAI,CAAC;IAC9B,OAAOA,IAAI;EACf;EAEAiB,QAAQ,GAAW;IACf,OAAO,IAAI,CAACa,cAAc,CAACZ,GAAG,CAAEc,CAAC,IAAM,OAAMA,CAAE,IAAG,CAAC,CAACZ,IAAI,CAAC,EAAE,CAAC;EAChE;AACJ;AAAC;AACM,MAAMP,KAAK,SAASgB,eAAe,CAAC;EAChCrB,MAAM,GAAiB,EAAE;EACzByB,UAAU,GAAqB,EAAE;EACxCZ,WAAW,CAAQrB,IAAY,EAAS8B,cAAwB,GAAG,EAAE,EAAE;IACnE,KAAK,EAAE;IAAC,KADO9B,IAAY,GAAZA,IAAY;IAAA,KAAS8B,cAAwB,GAAxBA,cAAwB;EAEhE;EAEAI,QAAQ,CACJlC,IAAY,EACZmC,IAA6B,EAC7BF,UAA4B,GAAG,EAAE,EACjCH,cAAwB,GAAG,EAAE,EACnB;IACV,MAAMM,KAAK,GAAG,IAAIC,UAAU,CAACrC,IAAI,EAAEmC,IAAI,EAAEF,UAAU,EAAEH,cAAc,CAAC;IACpE,IAAI,CAACtB,MAAM,CAACF,IAAI,CAAC8B,KAAK,CAAC;IACvB,OAAOA,KAAK;EAChB;EAEAE,YAAY,CAACtC,IAAY,EAAEuC,IAAoB,GAAG,EAAE,EAAkB;IAClE,MAAMC,IAAI,GAAG,IAAIC,cAAc,CAACzC,IAAI,EAAEuC,IAAI,CAAC;IAC3C,IAAI,CAACN,UAAU,CAAC3B,IAAI,CAACkC,IAAI,CAAC;IAC1B,OAAOA,IAAI;EACf;EAEAvB,QAAQ,GAAW;IACf,OACI,KAAK,CAACA,QAAQ,EAAE,GACf,SAAQ,IAAI,CAACjB,IAAK,MAAK,GACxB,IAAAsB,qBAAY,EAAC,CAAC,GAAG,IAAI,CAACd,MAAM,EAAE,GAAG,IAAI,CAACyB,UAAU,CAAC,CAACf,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACF,QAAQ,EAAE,CAAC,CAACG,IAAI,CAAC,IAAI,CAAC,CAAC,GACrF,KAAI;EAEb;AACJ;AAAC;AAcM,MAAMsB,cAAc,CAAC;EACxBrB,WAAW,CAAQc,IAA0B,EAASQ,KAAe,EAASC,QAAkB,EAAE;IAAA,KAA/ET,IAA0B,GAA1BA,IAA0B;IAAA,KAASQ,KAAe,GAAfA,KAAe;IAAA,KAASC,QAAkB,GAAlBA,QAAkB;EAAG;EAEnG3B,QAAQ,GAAW;IACf,OAAQ,GAAE,IAAI,CAACkB,IAAK,GAAE,IAAI,CAACQ,KAAK,GAAG,IAAI,GAAG,EAAG,GAAE,IAAI,CAACC,QAAQ,GAAG,GAAG,GAAG,EAAG,EAAC;EAC7E;AACJ;AAAC;AAEM,MAAMP,UAAU,SAASR,eAAe,CAAC;EAC5CR,WAAW,CACArB,IAAY,EACZmC,IAA6B,EAC7BF,UAA4B,GAAG,EAAE,EACjCH,cAAwB,GAAG,EAAE,EACtC;IACE,KAAK,EAAE;IAAC,KALD9B,IAAY,GAAZA,IAAY;IAAA,KACZmC,IAA6B,GAA7BA,IAA6B;IAAA,KAC7BF,UAA4B,GAA5BA,UAA4B;IAAA,KAC5BH,cAAwB,GAAxBA,cAAwB;EAGnC;EAEAQ,YAAY,CAACtC,IAAY,EAAEuC,IAAoB,GAAG,EAAE,EAAkB;IAClE,MAAMC,IAAI,GAAG,IAAIK,cAAc,CAAC7C,IAAI,EAAEuC,IAAI,CAAC;IAC3C,IAAI,CAACN,UAAU,CAAC3B,IAAI,CAACkC,IAAI,CAAC;IAC1B,OAAOA,IAAI;EACf;EAEAvB,QAAQ,GAAW;IACf,OACI,KAAK,CAACA,QAAQ,EAAE,GACf,GAAE,IAAI,CAACjB,IAAK,IAAG,IAAI,CAACmC,IAAK,EAAC,IAC1B,IAAI,CAACF,UAAU,CAACa,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAACb,UAAU,CAACf,GAAG,CAAE6B,CAAC,IAAKA,CAAC,CAAC9B,QAAQ,EAAE,CAAC,CAACG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;EAEpG;AACJ;AAAC;AAEM,MAAMyB,cAAc,CAAC;EACxBxB,WAAW,CAAQrB,IAAY,EAASuC,IAAoB,GAAG,EAAE,EAAE;IAAA,KAAhDvC,IAAY,GAAZA,IAAY;IAAA,KAASuC,IAAoB,GAApBA,IAAoB;EAAQ;EAEpEtB,QAAQ,GAAW;IACf,OAAQ,GAAE,IAAI,CAACjB,IAAK,GAAE,GAAG,IAAI,CAACuC,IAAI,CAACrB,GAAG,CAAE6B,CAAC,IAAKA,CAAC,CAAC9B,QAAQ,EAAE,CAAC,CAACG,IAAI,CAAC,IAAI,CAAC,GAAI,GAAE;EAChF;AACJ;AAAC;AAEM,MAAMqB,cAAc,CAAC;EACxBpB,WAAW,CAAQrB,IAAY,EAASuC,IAAoB,GAAG,EAAE,EAAE;IAAA,KAAhDvC,IAAY,GAAZA,IAAY;IAAA,KAASuC,IAAoB,GAApBA,IAAoB;EAAQ;EAEpEtB,QAAQ,GAAW;IACf,OAAQ,GAAE,IAAI,CAACjB,IAAK,GAAE,GAAG,IAAI,CAACuC,IAAI,CAACrB,GAAG,CAAE6B,CAAC,IAAKA,CAAC,CAAC9B,QAAQ,EAAE,CAAC,CAACG,IAAI,CAAC,IAAI,CAAC,GAAI,GAAE;EAChF;AACJ;AAAC;AAEM,MAAM4B,YAAY,CAAC;EACtB3B,WAAW,CAAQrB,IAAwB,EAASwB,KAAwB,EAAE;IAAA,KAA3DxB,IAAwB,GAAxBA,IAAwB;IAAA,KAASwB,KAAwB,GAAxBA,KAAwB;EAAG;EAE/EP,QAAQ,GAAW;IACf,OAAO,IAAI,CAACjB,IAAI,GAAI,GAAE,IAAI,CAACA,IAAK,KAAI,IAAI,CAACwB,KAAM,EAAC,GAAG,IAAI,CAACA,KAAK,CAACP,QAAQ,EAAE;EAC5E;AACJ;AAAC;AAEM,MAAMgC,iBAAiB,CAAC;EAC3B5B,WAAW,CACAc,IAAmF,EACnFX,KAAsF,EAC/F;IAAA,KAFSW,IAAmF,GAAnFA,IAAmF;IAAA,KACnFX,KAAsF,GAAtFA,KAAsF;IAE7F,QAAQW,IAAI;MACR,KAAK,QAAQ;QACT,IAAI,OAAOX,KAAK,KAAK,QAAQ,EAAE,MAAM,IAAI0B,KAAK,CAAC,sBAAsB,CAAC;QACtE;MACJ,KAAK,QAAQ;QACT,IAAI,OAAO1B,KAAK,KAAK,QAAQ,EAAE,MAAM,IAAI0B,KAAK,CAAC,sBAAsB,CAAC;QACtE;MACJ,KAAK,SAAS;QACV,IAAI,OAAO1B,KAAK,KAAK,SAAS,EAAE,MAAM,IAAI0B,KAAK,CAAC,uBAAuB,CAAC;QACxE;MACJ,KAAK,OAAO;QACR,IAAI,CAACC,KAAK,CAACC,OAAO,CAAC5B,KAAK,CAAC,EAAE,MAAM,IAAI0B,KAAK,CAAC,qBAAqB,CAAC;QACjE;MACJ,KAAK,gBAAgB;QACjB,IAAI,OAAO1B,KAAK,KAAK,QAAQ,IAAI,EAAEA,KAAK,YAAY6B,cAAc,CAAC,EAC/D,MAAM,IAAIH,KAAK,CAAC,wCAAwC,CAAC;QAC7D;MACJ,KAAK,cAAc;QACf,IAAI,EAAE1B,KAAK,YAAY8B,YAAY,CAAC,EAAE,MAAM,IAAIJ,KAAK,CAAC,4BAA4B,CAAC;QACnF;IAAM;EAElB;EAEAjC,QAAQ,GAAW;IACf,QAAQ,IAAI,CAACkB,IAAI;MACb,KAAK,QAAQ;QACT,OAAQ,IAAG,IAAI,CAACX,KAAM,GAAE;MAC5B,KAAK,QAAQ;QACT,OAAO,IAAI,CAACA,KAAK,CAACP,QAAQ,EAAE;MAChC,KAAK,gBAAgB;QAAE;UACnB,IAAI,OAAO,IAAI,CAACO,KAAK,KAAK,QAAQ,EAAE;YAChC,OAAO,IAAI,CAACA,KAAK;UACrB,CAAC,MAAM;YACH,MAAM+B,EAAE,GAAG,IAAI,CAAC/B,KAAuB;YACvC,IAAIgC,CAAC,GAAGD,EAAE,CAACnB,KAAK;YAChB,IAAImB,EAAE,CAAChB,IAAI,CAACO,MAAM,GAAG,CAAC,EAAE;cACpBU,CAAC,IAAI,GAAG,GAAGD,EAAE,CAAChB,IAAI,CAACrB,GAAG,CAAE6B,CAAC,IAAKA,CAAC,CAAC9B,QAAQ,EAAE,CAAC,CAACG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;YAC/D;YACA,OAAOoC,CAAC;UACZ;QACJ;MACA,KAAK,cAAc;QACf,OAAO,IAAI,CAAChC,KAAK,CAACP,QAAQ,EAAE;MAChC,KAAK,SAAS;QACV,OAAO,IAAI,CAACO,KAAK,GAAG,MAAM,GAAG,OAAO;MACxC,KAAK,OAAO;QACR,OAAO,GAAG,GAAI,IAAI,CAACA,KAAK,CAAyBN,GAAG,CAAEuC,CAAC,IAAKA,CAAC,CAACxC,QAAQ,EAAE,CAAC,CAACG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;MAC9F;QACI,MAAM,IAAI8B,KAAK,CAAE,gCAA+B,IAAI,CAACf,IAAK,EAAC,CAAC;IAAC;EAEzE;AACJ;AAAC;AAEM,MAAMkB,cAAc,CAAC;EACxBhC,WAAW,CAAQe,KAAa,EAASG,IAAyB,GAAG,EAAE,EAAE;IAAA,KAAtDH,KAAa,GAAbA,KAAa;IAAA,KAASG,IAAyB,GAAzBA,IAAyB;EAAQ;AAC9E;AAAC;AAEM,MAAMmB,iBAAiB,CAAC;EAC3BrC,WAAW,CAAQrB,IAAY,EAASwB,KAAqB,EAAE;IAAA,KAA5CxB,IAAY,GAAZA,IAAY;IAAA,KAASwB,KAAqB,GAArBA,KAAqB;EAAG;EAEhEP,QAAQ,GAAW;IACf,OAAQ,GAAE,IAAI,CAACjB,IAAK,KAAI,IAAI,CAACwB,KAAM,EAAC;EACxC;AACJ;AAAC;AAEM,MAAM8B,YAAY,CAAC;EACtBjC,WAAW,CAAQsC,IAAY,EAASpB,IAAuB,GAAG,EAAE,EAAE;IAAA,KAAnDoB,IAAY,GAAZA,IAAY;IAAA,KAASpB,IAAuB,GAAvBA,IAAuB;EAAQ;EAEvEtB,QAAQ,GAAW;IACf,OAAQ,GAAE,IAAI,CAAC0C,IAAK,EAAC,GAAG,GAAG,GAAG,IAAI,CAACpB,IAAI,CAACrB,GAAG,CAAE6B,CAAC,IAAKA,CAAC,CAAC9B,QAAQ,EAAE,CAAC,CAACG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;EACrF;AACJ;AAAC;AAEM,MAAMwC,eAAe,CAAC;EACzB;EACAvC,WAAW,CAAQrB,IAAwB,EAASwB,KAAU,EAAE;IAAA,KAA7CxB,IAAwB,GAAxBA,IAAwB;IAAA,KAASwB,KAAU,GAAVA,KAAU;EAAG;EAEjEP,QAAQ,GAAW;IACf,OAAO,IAAI,CAACjB,IAAI,GAAI,GAAE,IAAI,CAACA,IAAK,KAAI,IAAI,CAACwB,KAAM,EAAC,GAAG,IAAI,CAACA,KAAK;EACjE;AACJ;AAAC;AAEM,MAAMR,IAAI,CAAC;EACdK,WAAW,CAAQrB,IAAY,EAASQ,MAAmB,EAAE;IAAA,KAA1CR,IAAY,GAAZA,IAAY;IAAA,KAASQ,MAAmB,GAAnBA,MAAmB;EAAG;EAE9DS,QAAQ,GAAW;IACf,OAAQ,QAAO,IAAI,CAACjB,IAAK,MAAK,GAAG,IAAAsB,qBAAY,EAAC,IAAI,CAACd,MAAM,CAACY,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK;EACjF;AACJ;AAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { InvocationExpr, Model } from '@zenstackhq/language/ast';
|
|
2
|
+
import { PluginOptions } from '@zenstackhq/sdk';
|
|
3
|
+
import { FunctionCall as PrismaFunctionCall } from './prisma-builder';
|
|
4
|
+
/**
|
|
5
|
+
* Generates Prisma schema file
|
|
6
|
+
*/
|
|
7
|
+
export default class PrismaSchemaGenerator {
|
|
8
|
+
private zModelGenerator;
|
|
9
|
+
private readonly PRELUDE;
|
|
10
|
+
generate(model: Model, options: PluginOptions): Promise<void>;
|
|
11
|
+
private generateDataSource;
|
|
12
|
+
private extractDataSourceUrl;
|
|
13
|
+
private generateGenerator;
|
|
14
|
+
private generateModel;
|
|
15
|
+
private isPrismaAttribute;
|
|
16
|
+
private generateModelField;
|
|
17
|
+
private makeFieldAttribute;
|
|
18
|
+
private makeAttributeArg;
|
|
19
|
+
private makeAttributeArgValue;
|
|
20
|
+
makeFunctionCall(node: InvocationExpr): PrismaFunctionCall;
|
|
21
|
+
private generateModelAttribute;
|
|
22
|
+
private generateEnum;
|
|
23
|
+
private isStringLiteral;
|
|
24
|
+
}
|