@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.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.filter((attr2) => this.isPrismaAttribute(attr2) && !this.isInheritedMapAttribute(attr2, decl))) {
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 = this.getStringLiteral(fieldType.unsupported.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.type))
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(isDataSource);
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
- const type = providerExpr.value;
1066
- return {
1067
- type
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 fieldNames = this.getReferenceNames(attr.args[0].value);
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(e.fields.map((field) => ts.factory.createPropertyAssignment(field.name, ts.factory.createStringLiteral(field.name))), true);
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);