@zenstackhq/sdk 3.0.0-beta.20 → 3.0.0-beta.21
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/dist/index.cjs +61 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +66 -21
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.d.cts
CHANGED
|
@@ -100,10 +100,12 @@ declare class PrismaSchemaGenerator {
|
|
|
100
100
|
private literalToText;
|
|
101
101
|
private generateGenerator;
|
|
102
102
|
private generateModel;
|
|
103
|
+
private getDatasourceField;
|
|
104
|
+
private datasourceHasSchemasSetting;
|
|
105
|
+
private getDefaultPostgresSchemaName;
|
|
103
106
|
private isInheritedMapAttribute;
|
|
104
107
|
private isPrismaAttribute;
|
|
105
108
|
private getUnsupportedFieldType;
|
|
106
|
-
private getStringLiteral;
|
|
107
109
|
private generateModelField;
|
|
108
110
|
private isDefaultWithAuthInvocation;
|
|
109
111
|
private isInheritedFromDelegate;
|
|
@@ -144,6 +146,7 @@ declare class TsSchemaGenerator {
|
|
|
144
146
|
private createDataFieldObject;
|
|
145
147
|
private isDiscriminatorField;
|
|
146
148
|
private getDataSourceProvider;
|
|
149
|
+
private getDataSourceDefaultSchema;
|
|
147
150
|
private getFieldMappedDefault;
|
|
148
151
|
private getMappedValue;
|
|
149
152
|
private getMemberAccessChain;
|
package/dist/index.d.ts
CHANGED
|
@@ -100,10 +100,12 @@ declare class PrismaSchemaGenerator {
|
|
|
100
100
|
private literalToText;
|
|
101
101
|
private generateGenerator;
|
|
102
102
|
private generateModel;
|
|
103
|
+
private getDatasourceField;
|
|
104
|
+
private datasourceHasSchemasSetting;
|
|
105
|
+
private getDefaultPostgresSchemaName;
|
|
103
106
|
private isInheritedMapAttribute;
|
|
104
107
|
private isPrismaAttribute;
|
|
105
108
|
private getUnsupportedFieldType;
|
|
106
|
-
private getStringLiteral;
|
|
107
109
|
private generateModelField;
|
|
108
110
|
private isDefaultWithAuthInvocation;
|
|
109
111
|
private isInheritedFromDelegate;
|
|
@@ -144,6 +146,7 @@ declare class TsSchemaGenerator {
|
|
|
144
146
|
private createDataFieldObject;
|
|
145
147
|
private isDiscriminatorField;
|
|
146
148
|
private getDataSourceProvider;
|
|
149
|
+
private getDataSourceDefaultSchema;
|
|
147
150
|
private getFieldMappedDefault;
|
|
148
151
|
private getMappedValue;
|
|
149
152
|
private getMemberAccessChain;
|
package/dist/index.js
CHANGED
|
@@ -104,8 +104,8 @@ var DELEGATE_AUX_RELATION_PREFIX = "delegate_aux";
|
|
|
104
104
|
// src/prisma/prisma-schema-generator.ts
|
|
105
105
|
import { lowerCaseFirst } from "@zenstackhq/common-helpers";
|
|
106
106
|
import { ZModelCodeGenerator } from "@zenstackhq/language";
|
|
107
|
-
import { BooleanLiteral, DataModel, DataSource as DataSource2, Enum as Enum2, GeneratorDecl, isArrayExpr, isDataModel as isDataModel2, isInvocationExpr, isLiteralExpr as isLiteralExpr2, isNullExpr, isReferenceExpr, isStringLiteral, isTypeDef as isTypeDef2, NumberLiteral, StringLiteral } from "@zenstackhq/language/ast";
|
|
108
|
-
import { getAllAttributes, getAllFields as getAllFields2, isAuthInvocation, isDelegateModel as isDelegateModel2 } from "@zenstackhq/language/utils";
|
|
107
|
+
import { BooleanLiteral, DataModel, DataSource as DataSource2, Enum as Enum2, GeneratorDecl, isArrayExpr, isDataModel as isDataModel2, isDataSource, isInvocationExpr, isLiteralExpr as isLiteralExpr2, isNullExpr, isReferenceExpr, isStringLiteral, isTypeDef as isTypeDef2, NumberLiteral, StringLiteral } from "@zenstackhq/language/ast";
|
|
108
|
+
import { getAllAttributes, getAllFields as getAllFields2, getStringLiteral, isAuthInvocation, isDelegateModel as isDelegateModel2 } from "@zenstackhq/language/utils";
|
|
109
109
|
import { AstUtils } from "langium";
|
|
110
110
|
import { match } from "ts-pattern";
|
|
111
111
|
|
|
@@ -501,6 +501,9 @@ var EnumField = class extends DeclarationBase {
|
|
|
501
501
|
|
|
502
502
|
// src/prisma/prisma-schema-generator.ts
|
|
503
503
|
var IDENTIFIER_NAME_MAX_LENGTH = 50 - DELEGATE_AUX_RELATION_PREFIX.length;
|
|
504
|
+
var NON_PRISMA_DATASOURCE_FIELDS = [
|
|
505
|
+
"defaultSchema"
|
|
506
|
+
];
|
|
504
507
|
var PrismaSchemaGenerator = class {
|
|
505
508
|
static {
|
|
506
509
|
__name(this, "PrismaSchemaGenerator");
|
|
@@ -538,7 +541,7 @@ var PrismaSchemaGenerator = class {
|
|
|
538
541
|
return this.PRELUDE + prisma.toString();
|
|
539
542
|
}
|
|
540
543
|
generateDataSource(prisma, dataSource) {
|
|
541
|
-
const fields = dataSource.fields.map((f) => ({
|
|
544
|
+
const fields = dataSource.fields.filter((f) => !NON_PRISMA_DATASOURCE_FIELDS.includes(f.name)).map((f) => ({
|
|
542
545
|
name: f.name,
|
|
543
546
|
text: this.configExprToText(f.value)
|
|
544
547
|
}));
|
|
@@ -586,14 +589,30 @@ var PrismaSchemaGenerator = class {
|
|
|
586
589
|
this.generateModelField(model, field, decl);
|
|
587
590
|
}
|
|
588
591
|
}
|
|
589
|
-
const allAttributes = getAllAttributes(decl);
|
|
590
|
-
for (const attr of allAttributes
|
|
592
|
+
const allAttributes = getAllAttributes(decl).filter((attr) => this.isPrismaAttribute(attr) && !this.isInheritedMapAttribute(attr, decl));
|
|
593
|
+
for (const attr of allAttributes) {
|
|
591
594
|
this.generateContainerAttribute(model, attr);
|
|
592
595
|
}
|
|
596
|
+
if (this.datasourceHasSchemasSetting(decl.$container) && !allAttributes.some((attr) => attr.decl.ref?.name === "@@schema")) {
|
|
597
|
+
model.addAttribute("@@schema", [
|
|
598
|
+
new AttributeArg(void 0, new AttributeArgValue("String", this.getDefaultPostgresSchemaName(decl.$container)))
|
|
599
|
+
]);
|
|
600
|
+
}
|
|
593
601
|
decl.comments.forEach((c) => model.addComment(c));
|
|
594
602
|
this.generateDelegateRelationForBase(model, decl);
|
|
595
603
|
this.generateDelegateRelationForConcrete(model, decl);
|
|
596
604
|
}
|
|
605
|
+
getDatasourceField(zmodel, fieldName) {
|
|
606
|
+
const dataSource = zmodel.declarations.find(isDataSource);
|
|
607
|
+
return dataSource?.fields.find((f) => f.name === fieldName);
|
|
608
|
+
}
|
|
609
|
+
datasourceHasSchemasSetting(zmodel) {
|
|
610
|
+
return !!this.getDatasourceField(zmodel, "schemas");
|
|
611
|
+
}
|
|
612
|
+
getDefaultPostgresSchemaName(zmodel) {
|
|
613
|
+
const defaultSchemaField = this.getDatasourceField(zmodel, "defaultSchema");
|
|
614
|
+
return getStringLiteral(defaultSchemaField?.value) ?? "public";
|
|
615
|
+
}
|
|
597
616
|
isInheritedMapAttribute(attr, contextModel) {
|
|
598
617
|
if (attr.$container === contextModel) {
|
|
599
618
|
return false;
|
|
@@ -609,7 +628,7 @@ var PrismaSchemaGenerator = class {
|
|
|
609
628
|
}
|
|
610
629
|
getUnsupportedFieldType(fieldType) {
|
|
611
630
|
if (fieldType.unsupported) {
|
|
612
|
-
const value =
|
|
631
|
+
const value = getStringLiteral(fieldType.unsupported.value);
|
|
613
632
|
if (value) {
|
|
614
633
|
return `Unsupported("${value}")`;
|
|
615
634
|
} else {
|
|
@@ -619,9 +638,6 @@ var PrismaSchemaGenerator = class {
|
|
|
619
638
|
return void 0;
|
|
620
639
|
}
|
|
621
640
|
}
|
|
622
|
-
getStringLiteral(node) {
|
|
623
|
-
return isStringLiteral(node) ? node.value : void 0;
|
|
624
|
-
}
|
|
625
641
|
generateModelField(model, field, contextModel, addToFront = false) {
|
|
626
642
|
let fieldType;
|
|
627
643
|
if (field.type.type) {
|
|
@@ -782,8 +798,8 @@ var PrismaSchemaGenerator = class {
|
|
|
782
798
|
|
|
783
799
|
// src/ts-schema-generator.ts
|
|
784
800
|
import { invariant } from "@zenstackhq/common-helpers";
|
|
785
|
-
import { isArrayExpr as isArrayExpr2, isBinaryExpr, isDataField, isDataModel as isDataModel3, isDataSource, isEnum, isEnumField, isInvocationExpr as isInvocationExpr2, isLiteralExpr as isLiteralExpr3, isMemberAccessExpr, isNullExpr as isNullExpr2, isProcedure, isReferenceExpr as isReferenceExpr2, isThisExpr, isTypeDef as isTypeDef3, isUnaryExpr } from "@zenstackhq/language/ast";
|
|
786
|
-
import { getAllAttributes as getAllAttributes2, getAllFields as getAllFields3, isDataFieldReference } from "@zenstackhq/language/utils";
|
|
801
|
+
import { isArrayExpr as isArrayExpr2, isBinaryExpr, isDataField, isDataModel as isDataModel3, isDataSource as isDataSource2, isEnum, isEnumField, isInvocationExpr as isInvocationExpr2, isLiteralExpr as isLiteralExpr3, isMemberAccessExpr, isNullExpr as isNullExpr2, isProcedure, isReferenceExpr as isReferenceExpr2, isThisExpr, isTypeDef as isTypeDef3, isUnaryExpr } from "@zenstackhq/language/ast";
|
|
802
|
+
import { getAllAttributes as getAllAttributes2, getAllFields as getAllFields3, getAttributeArg, isDataFieldReference } from "@zenstackhq/language/utils";
|
|
787
803
|
import fs from "fs";
|
|
788
804
|
import path from "path";
|
|
789
805
|
import { match as match2 } from "ts-pattern";
|
|
@@ -883,8 +899,12 @@ var TsSchemaGenerator = class {
|
|
|
883
899
|
}
|
|
884
900
|
createProviderObject(model) {
|
|
885
901
|
const dsProvider = this.getDataSourceProvider(model);
|
|
902
|
+
const defaultSchema = this.getDataSourceDefaultSchema(model);
|
|
886
903
|
return ts.factory.createObjectLiteralExpression([
|
|
887
|
-
ts.factory.createPropertyAssignment("type", ts.factory.createStringLiteral(dsProvider
|
|
904
|
+
ts.factory.createPropertyAssignment("type", ts.factory.createStringLiteral(dsProvider)),
|
|
905
|
+
...defaultSchema ? [
|
|
906
|
+
ts.factory.createPropertyAssignment("defaultSchema", ts.factory.createStringLiteral(defaultSchema))
|
|
907
|
+
] : []
|
|
888
908
|
], true);
|
|
889
909
|
}
|
|
890
910
|
createModelsObject(model, lite) {
|
|
@@ -1058,14 +1078,21 @@ var TsSchemaGenerator = class {
|
|
|
1058
1078
|
return getAttribute(origin, "@@delegate")?.args.some((arg) => arg.$resolvedParam.name === "discriminator" && isDataFieldReference(arg.value) && arg.value.target.ref === field);
|
|
1059
1079
|
}
|
|
1060
1080
|
getDataSourceProvider(model) {
|
|
1061
|
-
const dataSource = model.declarations.find(
|
|
1081
|
+
const dataSource = model.declarations.find(isDataSource2);
|
|
1062
1082
|
invariant(dataSource, "No data source found in the model");
|
|
1063
1083
|
const providerExpr = dataSource.fields.find((f) => f.name === "provider")?.value;
|
|
1064
|
-
invariant(isLiteralExpr3(providerExpr), "Provider must be a literal");
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1084
|
+
invariant(isLiteralExpr3(providerExpr) && typeof providerExpr.value === "string", "Provider must be a string literal");
|
|
1085
|
+
return providerExpr.value;
|
|
1086
|
+
}
|
|
1087
|
+
getDataSourceDefaultSchema(model) {
|
|
1088
|
+
const dataSource = model.declarations.find(isDataSource2);
|
|
1089
|
+
invariant(dataSource, "No data source found in the model");
|
|
1090
|
+
const defaultSchemaExpr = dataSource.fields.find((f) => f.name === "defaultSchema")?.value;
|
|
1091
|
+
if (!defaultSchemaExpr) {
|
|
1092
|
+
return void 0;
|
|
1093
|
+
}
|
|
1094
|
+
invariant(isLiteralExpr3(defaultSchemaExpr) && typeof defaultSchemaExpr.value === "string", "Default schema must be a string literal");
|
|
1095
|
+
return defaultSchemaExpr.value;
|
|
1069
1096
|
}
|
|
1070
1097
|
getFieldMappedDefault(field) {
|
|
1071
1098
|
const defaultAttr = getAttribute(field, "@default");
|
|
@@ -1231,7 +1258,11 @@ var TsSchemaGenerator = class {
|
|
|
1231
1258
|
const seenKeys = /* @__PURE__ */ new Set();
|
|
1232
1259
|
for (const attr of allAttributes) {
|
|
1233
1260
|
if (attr.decl.$refText === "@@id" || attr.decl.$refText === "@@unique") {
|
|
1234
|
-
const
|
|
1261
|
+
const fieldsArg = getAttributeArg(attr, "fields");
|
|
1262
|
+
if (!fieldsArg) {
|
|
1263
|
+
continue;
|
|
1264
|
+
}
|
|
1265
|
+
const fieldNames = this.getReferenceNames(fieldsArg);
|
|
1235
1266
|
if (!fieldNames) {
|
|
1236
1267
|
continue;
|
|
1237
1268
|
}
|
|
@@ -1270,7 +1301,21 @@ var TsSchemaGenerator = class {
|
|
|
1270
1301
|
return field.type.type ? ts.factory.createStringLiteral(field.type.type) : field.type.reference ? ts.factory.createStringLiteral(field.type.reference.$refText) : ts.factory.createStringLiteral("Unsupported");
|
|
1271
1302
|
}
|
|
1272
1303
|
createEnumObject(e) {
|
|
1273
|
-
return ts.factory.createObjectLiteralExpression(
|
|
1304
|
+
return ts.factory.createObjectLiteralExpression([
|
|
1305
|
+
ts.factory.createPropertyAssignment("values", ts.factory.createObjectLiteralExpression(e.fields.map((f) => ts.factory.createPropertyAssignment(f.name, ts.factory.createStringLiteral(f.name))), true)),
|
|
1306
|
+
// only generate `fields` if there are attributes on the fields
|
|
1307
|
+
...e.fields.some((f) => f.attributes.length > 0) ? [
|
|
1308
|
+
ts.factory.createPropertyAssignment("fields", ts.factory.createObjectLiteralExpression(e.fields.map((field) => ts.factory.createPropertyAssignment(field.name, ts.factory.createObjectLiteralExpression([
|
|
1309
|
+
ts.factory.createPropertyAssignment("name", ts.factory.createStringLiteral(field.name)),
|
|
1310
|
+
...field.attributes.length > 0 ? [
|
|
1311
|
+
ts.factory.createPropertyAssignment("attributes", ts.factory.createArrayLiteralExpression(field.attributes?.map((attr) => this.createAttributeObject(attr)) ?? [], true))
|
|
1312
|
+
] : []
|
|
1313
|
+
], true))), true))
|
|
1314
|
+
] : [],
|
|
1315
|
+
...e.attributes.length > 0 ? [
|
|
1316
|
+
ts.factory.createPropertyAssignment("attributes", ts.factory.createArrayLiteralExpression(e.attributes.map((attr) => this.createAttributeObject(attr)), true))
|
|
1317
|
+
] : []
|
|
1318
|
+
], true);
|
|
1274
1319
|
}
|
|
1275
1320
|
getLiteral(expr) {
|
|
1276
1321
|
if (!isLiteralExpr3(expr)) {
|
|
@@ -1459,7 +1504,7 @@ var TsSchemaGenerator = class {
|
|
|
1459
1504
|
let enumDecl = ts.factory.createVariableStatement([
|
|
1460
1505
|
ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)
|
|
1461
1506
|
], ts.factory.createVariableDeclarationList([
|
|
1462
|
-
ts.factory.createVariableDeclaration(e.name, void 0, void 0, ts.factory.createPropertyAccessExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("$schema"), ts.factory.createIdentifier("enums")), ts.factory.createIdentifier(e.name)))
|
|
1507
|
+
ts.factory.createVariableDeclaration(e.name, void 0, void 0, ts.factory.createPropertyAccessExpression(ts.factory.createPropertyAccessExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("$schema"), ts.factory.createIdentifier("enums")), ts.factory.createIdentifier(e.name)), ts.factory.createIdentifier("values")))
|
|
1463
1508
|
], ts.NodeFlags.Const));
|
|
1464
1509
|
if (e.comments.length > 0) {
|
|
1465
1510
|
enumDecl = this.generateDocs(enumDecl, e);
|