@visulima/prisma-dmmf-transformer 1.0.1 → 1.0.3

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/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## @visulima/prisma-dmmf-transformer [1.0.3](https://github.com/visulima/visulima/compare/@visulima/prisma-dmmf-transformer@1.0.2...@visulima/prisma-dmmf-transformer@1.0.3) (2022-12-20)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * fixed found issues after upgrading vitest ([3ee9861](https://github.com/visulima/visulima/commit/3ee9861eeae72a6d0cc941e048d3860c5301ddc4))
7
+
8
+ ## @visulima/prisma-dmmf-transformer [1.0.2](https://github.com/visulima/visulima/compare/@visulima/prisma-dmmf-transformer@1.0.1...@visulima/prisma-dmmf-transformer@1.0.2) (2022-12-10)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * fixed wrong file name for module key in package.json ([2c90a2d](https://github.com/visulima/visulima/commit/2c90a2d75848a159bc33dc58f303af36ee127570))
14
+
1
15
  ## @visulima/prisma-dmmf-transformer [1.0.1](https://github.com/visulima/visulima/compare/@visulima/prisma-dmmf-transformer@1.0.0...@visulima/prisma-dmmf-transformer@1.0.1) (2022-12-01)
2
16
 
3
17
 
package/dist/index.js CHANGED
@@ -1,218 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/properties.ts
2
- var _assert = require('assert'); var _assert2 = _interopRequireDefault(_assert);
3
- function isDefined(value) {
4
- return value !== void 0 && value !== null;
5
- }
6
- var getJSONSchemaScalar = (fieldType) => {
7
- switch (fieldType) {
8
- case "Int":
9
- case "BigInt": {
10
- return "integer";
11
- }
12
- case "DateTime":
13
- case "Bytes":
14
- case "String": {
15
- return "string";
16
- }
17
- case "Float":
18
- case "Decimal": {
19
- return "number";
20
- }
21
- case "Json": {
22
- return ["number", "string", "boolean", "object", "array", "null"];
23
- }
24
- case "Boolean": {
25
- return "boolean";
26
- }
27
- default: {
28
- throw new Error(`Unhandled discriminated union member: ${JSON.stringify(fieldType)}`);
29
- }
30
- }
31
- };
32
- var getJSONSchemaType = (field) => {
33
- const {
34
- isList,
35
- isRequired,
36
- kind,
37
- type
38
- } = field;
39
- let scalarFieldType = "object";
40
- if (kind === "scalar" && !isList) {
41
- scalarFieldType = getJSONSchemaScalar(type);
42
- } else if (isList) {
43
- scalarFieldType = "array";
44
- } else if (kind === "enum") {
45
- scalarFieldType = "string";
46
- }
47
- if (isRequired || isList) {
48
- return scalarFieldType;
49
- }
50
- const isFieldUnion = Array.isArray(scalarFieldType);
51
- if (isFieldUnion) {
52
- return [.../* @__PURE__ */ new Set([...scalarFieldType, "null"])];
53
- }
54
- return [scalarFieldType, "null"];
55
- };
56
- var getDefaultValue = (field) => {
57
- const fieldDefault = field.default;
58
- if (!field.hasDefaultValue) {
59
- return null;
60
- }
61
- if (field.kind === "enum") {
62
- return typeof fieldDefault === "string" ? fieldDefault : null;
63
- }
64
- if (field.kind !== "scalar") {
65
- return null;
66
- }
67
- switch (field.type) {
68
- case "String":
69
- case "BigInt":
70
- case "DateTime": {
71
- return typeof fieldDefault === "string" ? fieldDefault : null;
72
- }
73
- case "Int":
74
- case "Float":
75
- case "Decimal": {
76
- return typeof fieldDefault === "number" ? fieldDefault : null;
77
- }
78
- case "Boolean": {
79
- return typeof fieldDefault === "boolean" ? fieldDefault : null;
80
- }
81
- case "Json":
82
- case "Bytes": {
83
- return null;
84
- }
85
- default: {
86
- throw new Error(`Unhandled discriminated union member: ${JSON.stringify(field.type)}`);
87
- }
88
- }
89
- };
90
- var getFormatByDMMFType = (fieldType) => {
91
- if (fieldType === "DateTime") {
92
- return "date-time";
93
- }
94
- return void 0;
95
- };
96
- var getJSONSchemaForPropertyReference = (field, { schemaId, persistOriginalType }) => {
97
- const notNullable = field.isRequired || field.isList;
98
- _assert2.default.equal(typeof field.type, "string");
99
- const typeReference = `#/definitions/${field.type}`;
100
- const reference = { $ref: schemaId ? `${schemaId}${typeReference}` : typeReference };
101
- return notNullable ? reference : {
102
- anyOf: [reference, { type: "null" }],
103
- ...persistOriginalType && {
104
- originalType: field.type
105
- }
106
- };
107
- };
108
- var getItemsByDMMFType = (field, transformOptions) => {
109
- if (field.kind === "scalar" && !field.isList || field.kind === "enum") {
110
- return void 0;
111
- }
112
- if (field.kind === "scalar" && field.isList) {
113
- return { type: getJSONSchemaScalar(field.type) };
114
- }
115
- return getJSONSchemaForPropertyReference(field, transformOptions);
116
- };
117
- var isSingleReference = (field) => field.kind !== "scalar" && !field.isList && field.kind !== "enum";
118
- var getEnumListByDMMFType = (modelMetaData) => (field) => {
119
- const enumItem = modelMetaData.enums.find(({ name }) => name === field.type);
120
- if (!enumItem) {
121
- return void 0;
122
- }
123
- return enumItem.values.map((item) => item.name);
124
- };
125
- var getDescription = (field) => field.documentation;
126
- var getPropertyDefinition = (modelMetaData, transformOptions, field) => {
127
- const type = getJSONSchemaType(field);
128
- const format = getFormatByDMMFType(field.type);
129
- const items = getItemsByDMMFType(field, transformOptions);
130
- const enumList = getEnumListByDMMFType(modelMetaData)(field);
131
- const defaultValue = getDefaultValue(field);
132
- const description = getDescription(field);
133
- return {
134
- type,
135
- ...transformOptions.persistOriginalType && {
136
- originalType: field.type
137
- },
138
- ...isDefined(defaultValue) && { default: defaultValue },
139
- ...isDefined(format) && { format },
140
- ...isDefined(items) && { items },
141
- ...isDefined(enumList) && { enum: enumList },
142
- ...isDefined(description) && { description }
143
- };
144
- };
145
- var getJSONSchemaProperty = (modelMetaData, transformOptions) => (field) => {
146
- const propertyMetaData = {
147
- required: field.isRequired,
148
- hasDefaultValue: field.hasDefaultValue,
149
- isScalar: field.kind === "scalar" || field.kind === "enum"
150
- };
151
- const property = isSingleReference(field) ? getJSONSchemaForPropertyReference(field, transformOptions) : getPropertyDefinition(modelMetaData, transformOptions, field);
152
- return [field.name, property, propertyMetaData];
153
- };
154
- var properties_default = getJSONSchemaProperty;
155
-
156
- // src/model.ts
157
- function getRelationScalarFields(model) {
158
- return model.fields.flatMap((field) => field.relationFromFields || []);
159
- }
160
- var getJSONSchemaModel = (modelMetaData, transformOptions) => (model) => {
161
- const definitionPropertiesMap = model.fields.map(properties_default(modelMetaData, transformOptions));
162
- const propertiesMap = definitionPropertiesMap.map(([name, definition2]) => [name, definition2]);
163
- const relationScalarFields = getRelationScalarFields(model);
164
- const propertiesWithoutRelationScalars = propertiesMap.filter((property) => !relationScalarFields.includes(property[0]));
165
- const properties = Object.fromEntries((transformOptions == null ? void 0 : transformOptions.keepRelationScalarFields) === "true" ? propertiesMap : propertiesWithoutRelationScalars);
166
- const definition = {
167
- type: "object",
168
- properties
169
- };
170
- if (transformOptions.includeRequiredFields) {
171
- definition.required = definitionPropertiesMap.reduce((filtered, [name, , fieldMetaData]) => {
172
- if (fieldMetaData.required && fieldMetaData.isScalar && !fieldMetaData.hasDefaultValue) {
173
- filtered.push(name);
174
- }
175
- return filtered;
176
- }, []);
177
- }
178
- return [model.name, definition];
179
- };
180
- var model_default = getJSONSchemaModel;
181
-
182
- // src/transform-dmmf.ts
183
- var toCamelCase = (name) => name.slice(0, 1).toLowerCase() + name.slice(1);
184
- var getPropertyDefinition2 = ({ schemaId }) => (model) => {
185
- const reference = `#/definitions/${model.name}`;
186
- return [
187
- toCamelCase(model.name),
188
- {
189
- $ref: schemaId ? `${schemaId}${reference}` : reference
190
- }
191
- ];
192
- };
193
- var transformDmmf = (dmmf, transformOptions = {}) => {
194
- const { models = [], enums = [], types = [] } = dmmf.datamodel;
195
- const initialJSON = {
196
- $schema: "http://json-schema.org/draft-07/schema#",
197
- definitions: {},
198
- type: "object"
199
- };
200
- const { schemaId } = transformOptions;
201
- const modelDefinitionsMap = models.map(model_default({ enums }, transformOptions));
202
- const typeDefinitionsMap = types.map(model_default({ enums }, transformOptions));
203
- const modelPropertyDefinitionsMap = models.map(getPropertyDefinition2(transformOptions));
204
- const definitions = Object.fromEntries([...modelDefinitionsMap, ...typeDefinitionsMap]);
205
- const properties = Object.fromEntries(modelPropertyDefinitionsMap);
206
- return {
207
- ...schemaId ? { $id: schemaId } : null,
208
- ...initialJSON,
209
- definitions,
210
- properties
211
- };
212
- };
213
- var transform_dmmf_default = transformDmmf;
214
-
215
-
216
-
217
- exports.getJSONSchemaProperty = properties_default; exports.transformDMMF = transform_dmmf_default;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _assert = require('assert'); var _assert2 = _interopRequireDefault(_assert);function l(e){return e!=null}var f=e=>{switch(e){case"Int":case"BigInt":return"integer";case"DateTime":case"Bytes":case"String":return"string";case"Float":case"Decimal":return"number";case"Json":return["number","string","boolean","object","array","null"];case"Boolean":return"boolean";default:throw new Error(`Unhandled discriminated union member: ${JSON.stringify(e)}`)}},D=e=>{let{isList:t,isRequired:r,kind:n,type:i}=e,a="object";return n==="scalar"&&!t?a=f(i):t?a="array":n==="enum"&&(a="string"),r||t?a:Array.isArray(a)?[...new Set([...a,"null"])]:[a,"null"]},h=e=>{let t=e.default;if(!e.hasDefaultValue)return null;if(e.kind==="enum")return typeof t=="string"?t:null;if(e.kind!=="scalar")return null;switch(e.type){case"String":case"BigInt":case"DateTime":return typeof t=="string"?t:null;case"Int":case"Float":case"Decimal":return typeof t=="number"?t:null;case"Boolean":return typeof t=="boolean"?t:null;case"Json":case"Bytes":return null;default:throw new Error(`Unhandled discriminated union member: ${JSON.stringify(e.type)}`)}},g=e=>{if(e==="DateTime")return"date-time"},d=(e,{schemaId:t,persistOriginalType:r})=>{let n=e.isRequired||e.isList;_assert2.default.equal(typeof e.type,"string");let i=`#/definitions/${e.type}`,a={$ref:t?`${t}${i}`:i};return n?a:{anyOf:[a,{type:"null"}],...r&&{originalType:e.type}}},F=(e,t)=>{if(!(e.kind==="scalar"&&!e.isList||e.kind==="enum"))return e.kind==="scalar"&&e.isList?{type:f(e.type)}:d(e,t)},N=e=>e.kind!=="scalar"&&!e.isList&&e.kind!=="enum",O=e=>t=>{let r=e.enums.find(({name:n})=>n===t.type);if(!!r)return r.values.map(n=>n.name)},J=e=>e.documentation,T=(e,t,r)=>{let n=D(r),i=g(r.type),a=F(r,t),o=O(e)(r),p=h(r),c=J(r);return{type:n,...t.persistOriginalType&&{originalType:r.type},...l(p)&&{default:p},...l(i)&&{format:i},...l(a)&&{items:a},...l(o)&&{enum:o},...l(c)&&{description:c}}},P=(e,t)=>r=>{let n={required:r.isRequired,hasDefaultValue:r.hasDefaultValue,isScalar:r.kind==="scalar"||r.kind==="enum"},i=N(r)?d(r,t):T(e,t,r);return[r.name,i,n]},y= exports.getJSONSchemaProperty =P;function b(e){return e.fields.flatMap(t=>t.relationFromFields||[])}var $=(e,t)=>r=>{let n=r.fields.map(y(e,t)),i=n.map(([s,m])=>[s,m]),a=b(r),o=i.filter(s=>!a.includes(s[0])),c={type:"object",properties:Object.fromEntries((t==null?void 0:t.keepRelationScalarFields)==="true"?i:o)};return t.includeRequiredFields&&(c.required=n.reduce((s,[m,,u])=>(u.required&&u.isScalar&&!u.hasDefaultValue&&s.push(m),s),[])),[r.name,c]},M=$;var j=e=>e.slice(0,1).toLowerCase()+e.slice(1),k=({schemaId:e})=>t=>{let r=`#/definitions/${t.name}`;return[j(t.name),{$ref:e?`${e}${r}`:r}]},R=(e,t={})=>{let{models:r=[],enums:n=[],types:i=[]}=e.datamodel,a={$schema:"http://json-schema.org/draft-07/schema#",definitions:{},type:"object"},{schemaId:o}=t,p=r.map(M({enums:n},t)),c=i.map(M({enums:n},t)),s=r.map(k(t)),m=Object.fromEntries([...p,...c]),u=Object.fromEntries(s);return{...o?{$id:o}:null,...a,definitions:m,properties:u}},B= exports.transformDMMF =R;exports.getJSONSchemaProperty = y; exports.transformDMMF = B;
218
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/properties.ts","../src/model.ts","../src/transform-dmmf.ts"],"names":["definition","getPropertyDefinition"],"mappings":"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","sourcesContent":["import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7, JSONSchema7TypeName } from \"json-schema\";\nimport assert from \"node:assert\";\n\nimport type {\n ModelMetaData, PrismaPrimitive, PropertyMap, PropertyMetaData, TransformOptions,\n} from \"./types.d\";\n\nfunction isDefined<T>(value: T | undefined | null): value is T {\n return value !== undefined && value !== null;\n}\n\nconst getJSONSchemaScalar = (fieldType: PrismaPrimitive): JSONSchema7TypeName | Array<JSONSchema7TypeName> => {\n switch (fieldType) {\n case \"Int\":\n case \"BigInt\": {\n return \"integer\";\n }\n case \"DateTime\":\n case \"Bytes\":\n case \"String\": {\n return \"string\";\n }\n case \"Float\":\n case \"Decimal\": {\n return \"number\";\n }\n case \"Json\": {\n return [\"number\", \"string\", \"boolean\", \"object\", \"array\", \"null\"];\n }\n case \"Boolean\": {\n return \"boolean\";\n }\n default: {\n throw new Error(`Unhandled discriminated union member: ${JSON.stringify(fieldType)}`);\n }\n }\n};\n\nconst getJSONSchemaType = (field: DMMF.Field): JSONSchema7[\"type\"] => {\n const {\n isList, isRequired, kind, type,\n } = field;\n\n let scalarFieldType: JSONSchema7[\"type\"] = \"object\";\n\n if (kind === \"scalar\" && !isList) {\n scalarFieldType = getJSONSchemaScalar(type as PrismaPrimitive);\n } else if (isList) {\n scalarFieldType = \"array\";\n } else if (kind === \"enum\") {\n scalarFieldType = \"string\";\n }\n\n if (isRequired || isList) {\n return scalarFieldType;\n }\n\n const isFieldUnion = Array.isArray(scalarFieldType);\n\n if (isFieldUnion) {\n return [...new Set([...scalarFieldType, \"null\"])] as JSONSchema7[\"type\"];\n }\n\n return [scalarFieldType as JSONSchema7TypeName, \"null\"];\n};\n\nconst getDefaultValue = (field: DMMF.Field): JSONSchema7[\"default\"] => {\n const fieldDefault = field.default;\n\n if (!field.hasDefaultValue) {\n return null;\n }\n\n if (field.kind === \"enum\") {\n return typeof fieldDefault === \"string\" ? fieldDefault : null;\n }\n\n if (field.kind !== \"scalar\") {\n return null;\n }\n\n switch (field.type) {\n case \"String\":\n case \"BigInt\":\n case \"DateTime\": {\n return typeof fieldDefault === \"string\" ? fieldDefault : null;\n }\n case \"Int\":\n case \"Float\":\n case \"Decimal\": {\n return typeof fieldDefault === \"number\" ? fieldDefault : null;\n }\n case \"Boolean\": {\n return typeof fieldDefault === \"boolean\" ? fieldDefault : null;\n }\n case \"Json\":\n case \"Bytes\": {\n return null;\n }\n default: {\n throw new Error(`Unhandled discriminated union member: ${JSON.stringify(field.type)}`);\n }\n }\n};\n\nconst getFormatByDMMFType = (fieldType: DMMF.Field[\"type\"]): string | undefined => {\n if (fieldType === \"DateTime\") {\n return \"date-time\";\n }\n\n return undefined;\n};\n\nconst getJSONSchemaForPropertyReference = (field: DMMF.Field, { schemaId, persistOriginalType }: TransformOptions): JSONSchema7 => {\n const notNullable = field.isRequired || field.isList;\n\n assert.equal(typeof field.type, \"string\");\n\n const typeReference = `#/definitions/${field.type}`;\n const reference = { $ref: schemaId ? `${schemaId}${typeReference}` : typeReference };\n\n return notNullable\n ? reference\n : {\n anyOf: [reference, { type: \"null\" }],\n ...(persistOriginalType && {\n originalType: field.type,\n }),\n };\n};\n\nconst getItemsByDMMFType = (field: DMMF.Field, transformOptions: TransformOptions): JSONSchema7[\"items\"] => {\n if ((field.kind === \"scalar\" && !field.isList) || field.kind === \"enum\") {\n return undefined;\n }\n\n if (field.kind === \"scalar\" && field.isList) {\n return { type: getJSONSchemaScalar(field.type as PrismaPrimitive) };\n }\n\n return getJSONSchemaForPropertyReference(field, transformOptions);\n};\n\nconst isSingleReference = (field: DMMF.Field) => field.kind !== \"scalar\" && !field.isList && field.kind !== \"enum\";\n\nconst getEnumListByDMMFType = (modelMetaData: ModelMetaData) => (field: DMMF.Field): string[] | undefined => {\n const enumItem = modelMetaData.enums.find(({ name }) => name === field.type);\n\n if (!enumItem) {\n return undefined;\n }\n\n return enumItem.values.map((item) => item.name);\n};\n\nconst getDescription = (field: DMMF.Field) => field.documentation;\n\nconst getPropertyDefinition = (modelMetaData: ModelMetaData, transformOptions: TransformOptions, field: DMMF.Field) => {\n const type = getJSONSchemaType(field);\n const format = getFormatByDMMFType(field.type);\n const items = getItemsByDMMFType(field, transformOptions);\n const enumList = getEnumListByDMMFType(modelMetaData)(field);\n const defaultValue = getDefaultValue(field);\n const description = getDescription(field);\n\n return {\n type,\n ...(transformOptions.persistOriginalType && {\n originalType: field.type,\n }),\n ...(isDefined(defaultValue) && { default: defaultValue }),\n ...(isDefined(format) && { format }),\n ...(isDefined(items) && { items }),\n ...(isDefined(enumList) && { enum: enumList }),\n ...(isDefined(description) && { description }),\n };\n};\n\nconst getJSONSchemaProperty = (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (field: DMMF.Field): PropertyMap => {\n const propertyMetaData: PropertyMetaData = {\n required: field.isRequired,\n hasDefaultValue: field.hasDefaultValue,\n isScalar: field.kind === \"scalar\" || field.kind === \"enum\",\n };\n\n const property = isSingleReference(field)\n ? getJSONSchemaForPropertyReference(field, transformOptions)\n : getPropertyDefinition(modelMetaData, transformOptions, field);\n\n return [field.name, property, propertyMetaData];\n};\n\nexport default getJSONSchemaProperty;\n","import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7Definition } from \"json-schema\";\n\nimport getJSONSchemaProperty from \"./properties\";\nimport type { DefinitionMap, ModelMetaData, TransformOptions } from \"./types.d\";\n\nfunction getRelationScalarFields(model: DMMF.Model): string[] {\n return model.fields.flatMap((field) => field.relationFromFields || []);\n}\n\nconst getJSONSchemaModel = (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (model: DMMF.Model): DefinitionMap => {\n const definitionPropertiesMap = model.fields.map(getJSONSchemaProperty(modelMetaData, transformOptions));\n\n const propertiesMap = definitionPropertiesMap.map(([name, definition]) => [name, definition] as DefinitionMap);\n const relationScalarFields = getRelationScalarFields(model);\n const propertiesWithoutRelationScalars = propertiesMap.filter((property) => !relationScalarFields.includes(property[0]));\n\n const properties = Object.fromEntries(transformOptions?.keepRelationScalarFields === \"true\" ? propertiesMap : propertiesWithoutRelationScalars);\n\n const definition: JSONSchema7Definition = {\n type: \"object\",\n properties,\n };\n\n if (transformOptions.includeRequiredFields) {\n definition.required = definitionPropertiesMap.reduce((filtered: string[], [name, , fieldMetaData]) => {\n if (fieldMetaData.required && fieldMetaData.isScalar && !fieldMetaData.hasDefaultValue) {\n filtered.push(name);\n }\n return filtered;\n }, []);\n }\n\n return [model.name, definition];\n};\n\nexport default getJSONSchemaModel;\n","import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7, JSONSchema7Definition } from \"json-schema\";\n\nimport getJSONSchemaModel from \"./model\";\nimport type { TransformOptions } from \"./types.d\";\n\nconst toCamelCase = (name: string): string => name.slice(0, 1).toLowerCase() + name.slice(1);\n\nconst getPropertyDefinition = ({ schemaId }: TransformOptions) => (model: DMMF.Model): [name: string, reference: JSONSchema7Definition] => {\n const reference = `#/definitions/${model.name}`;\n\n return [\n toCamelCase(model.name),\n {\n $ref: schemaId ? `${schemaId}${reference}` : reference,\n },\n ];\n};\n\nconst transformDmmf = (dmmf: DMMF.Document, transformOptions: TransformOptions = {}): JSONSchema7 => {\n // TODO: Remove default values as soon as prisma version < 3.10.0 doesn't have to be supported anymore\n const { models = [], enums = [], types = [] } = dmmf.datamodel;\n const initialJSON = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n definitions: {},\n type: \"object\",\n } as JSONSchema7;\n const { schemaId } = transformOptions;\n\n const modelDefinitionsMap = models.map(getJSONSchemaModel({ enums }, transformOptions));\n const typeDefinitionsMap = types.map(getJSONSchemaModel({ enums }, transformOptions));\n const modelPropertyDefinitionsMap = models.map(getPropertyDefinition(transformOptions));\n const definitions = Object.fromEntries([...modelDefinitionsMap, ...typeDefinitionsMap]);\n const properties = Object.fromEntries(modelPropertyDefinitionsMap);\n\n return {\n ...(schemaId ? { $id: schemaId } : null),\n ...initialJSON,\n definitions,\n properties,\n };\n};\n\nexport default transformDmmf;\n"]}
1
+ {"version":3,"sources":["../src/properties.ts","../src/model.ts","../src/transform-dmmf.ts"],"names":["assert","isDefined","value","getJSONSchemaScalar","fieldType","getJSONSchemaType","field","isList","isRequired","kind","type","scalarFieldType","getDefaultValue","fieldDefault","getFormatByDMMFType","getJSONSchemaForPropertyReference","schemaId","persistOriginalType","notNullable","typeReference","reference","getItemsByDMMFType","transformOptions","isSingleReference","getEnumListByDMMFType","modelMetaData","enumItem","name","item","getDescription","getPropertyDefinition","format","items","enumList","defaultValue","description","getJSONSchemaProperty","propertyMetaData","property","properties_default","getRelationScalarFields","model","getJSONSchemaModel","definitionPropertiesMap","propertiesMap","definition","relationScalarFields","propertiesWithoutRelationScalars","filtered","fieldMetaData","model_default","toCamelCase","transformDmmf","dmmf","models","enums","types","initialJSON","modelDefinitionsMap","typeDefinitionsMap","modelPropertyDefinitionsMap","definitions","properties","transform_dmmf_default"],"mappings":"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","sourcesContent":["import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7, JSONSchema7TypeName } from \"json-schema\";\nimport assert from \"node:assert\";\n\nimport type {\n ModelMetaData, PrismaPrimitive, PropertyMap, PropertyMetaData, TransformOptions,\n} from \"./types.d\";\n\nfunction isDefined<T>(value: T | undefined | null): value is T {\n return value !== undefined && value !== null;\n}\n\nconst getJSONSchemaScalar = (fieldType: PrismaPrimitive): JSONSchema7TypeName | Array<JSONSchema7TypeName> => {\n switch (fieldType) {\n case \"Int\":\n case \"BigInt\": {\n return \"integer\";\n }\n case \"DateTime\":\n case \"Bytes\":\n case \"String\": {\n return \"string\";\n }\n case \"Float\":\n case \"Decimal\": {\n return \"number\";\n }\n case \"Json\": {\n return [\"number\", \"string\", \"boolean\", \"object\", \"array\", \"null\"];\n }\n case \"Boolean\": {\n return \"boolean\";\n }\n default: {\n throw new Error(`Unhandled discriminated union member: ${JSON.stringify(fieldType)}`);\n }\n }\n};\n\nconst getJSONSchemaType = (field: DMMF.Field): JSONSchema7[\"type\"] => {\n const {\n isList, isRequired, kind, type,\n } = field;\n\n let scalarFieldType: JSONSchema7[\"type\"] = \"object\";\n\n if (kind === \"scalar\" && !isList) {\n scalarFieldType = getJSONSchemaScalar(type as PrismaPrimitive);\n } else if (isList) {\n scalarFieldType = \"array\";\n } else if (kind === \"enum\") {\n scalarFieldType = \"string\";\n }\n\n if (isRequired || isList) {\n return scalarFieldType;\n }\n\n const isFieldUnion = Array.isArray(scalarFieldType);\n\n if (isFieldUnion) {\n return [...new Set([...scalarFieldType, \"null\"])] as JSONSchema7[\"type\"];\n }\n\n return [scalarFieldType as JSONSchema7TypeName, \"null\"];\n};\n\nconst getDefaultValue = (field: DMMF.Field): JSONSchema7[\"default\"] => {\n const fieldDefault = field.default;\n\n if (!field.hasDefaultValue) {\n return null;\n }\n\n if (field.kind === \"enum\") {\n return typeof fieldDefault === \"string\" ? fieldDefault : null;\n }\n\n if (field.kind !== \"scalar\") {\n return null;\n }\n\n switch (field.type) {\n case \"String\":\n case \"BigInt\":\n case \"DateTime\": {\n return typeof fieldDefault === \"string\" ? fieldDefault : null;\n }\n case \"Int\":\n case \"Float\":\n case \"Decimal\": {\n return typeof fieldDefault === \"number\" ? fieldDefault : null;\n }\n case \"Boolean\": {\n return typeof fieldDefault === \"boolean\" ? fieldDefault : null;\n }\n case \"Json\":\n case \"Bytes\": {\n return null;\n }\n default: {\n throw new Error(`Unhandled discriminated union member: ${JSON.stringify(field.type)}`);\n }\n }\n};\n\nconst getFormatByDMMFType = (fieldType: DMMF.Field[\"type\"]): string | undefined => {\n if (fieldType === \"DateTime\") {\n return \"date-time\";\n }\n\n return undefined;\n};\n\nconst getJSONSchemaForPropertyReference = (field: DMMF.Field, { schemaId, persistOriginalType }: TransformOptions): JSONSchema7 => {\n const notNullable = field.isRequired || field.isList;\n\n assert.equal(typeof field.type, \"string\");\n\n const typeReference = `#/definitions/${field.type}`;\n const reference = { $ref: schemaId ? `${schemaId}${typeReference}` : typeReference };\n\n return notNullable\n ? reference\n : {\n anyOf: [reference, { type: \"null\" }],\n ...(persistOriginalType && {\n originalType: field.type,\n }),\n };\n};\n\nconst getItemsByDMMFType = (field: DMMF.Field, transformOptions: TransformOptions): JSONSchema7[\"items\"] => {\n if ((field.kind === \"scalar\" && !field.isList) || field.kind === \"enum\") {\n return undefined;\n }\n\n if (field.kind === \"scalar\" && field.isList) {\n return { type: getJSONSchemaScalar(field.type as PrismaPrimitive) };\n }\n\n return getJSONSchemaForPropertyReference(field, transformOptions);\n};\n\nconst isSingleReference = (field: DMMF.Field) => field.kind !== \"scalar\" && !field.isList && field.kind !== \"enum\";\n\nconst getEnumListByDMMFType = (modelMetaData: ModelMetaData) => (field: DMMF.Field): string[] | undefined => {\n const enumItem = modelMetaData.enums.find(({ name }) => name === field.type);\n\n if (!enumItem) {\n return undefined;\n }\n\n return enumItem.values.map((item) => item.name);\n};\n\nconst getDescription = (field: DMMF.Field) => field.documentation;\n\nconst getPropertyDefinition = (modelMetaData: ModelMetaData, transformOptions: TransformOptions, field: DMMF.Field) => {\n const type = getJSONSchemaType(field);\n const format = getFormatByDMMFType(field.type);\n const items = getItemsByDMMFType(field, transformOptions);\n const enumList = getEnumListByDMMFType(modelMetaData)(field);\n const defaultValue = getDefaultValue(field);\n const description = getDescription(field);\n\n return {\n type,\n ...(transformOptions.persistOriginalType && {\n originalType: field.type,\n }),\n ...(isDefined(defaultValue) && { default: defaultValue }),\n ...(isDefined(format) && { format }),\n ...(isDefined(items) && { items }),\n ...(isDefined(enumList) && { enum: enumList }),\n ...(isDefined(description) && { description }),\n };\n};\n\nconst getJSONSchemaProperty = (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (field: DMMF.Field): PropertyMap => {\n const propertyMetaData: PropertyMetaData = {\n required: field.isRequired,\n hasDefaultValue: field.hasDefaultValue,\n isScalar: field.kind === \"scalar\" || field.kind === \"enum\",\n };\n\n const property = isSingleReference(field)\n ? getJSONSchemaForPropertyReference(field, transformOptions)\n : getPropertyDefinition(modelMetaData, transformOptions, field);\n\n return [field.name, property, propertyMetaData];\n};\n\nexport default getJSONSchemaProperty;\n","import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7Definition } from \"json-schema\";\n\nimport getJSONSchemaProperty from \"./properties\";\nimport type { DefinitionMap, ModelMetaData, TransformOptions } from \"./types.d\";\n\nfunction getRelationScalarFields(model: DMMF.Model): string[] {\n return model.fields.flatMap((field) => field.relationFromFields || []);\n}\n\nconst getJSONSchemaModel = (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (model: DMMF.Model): DefinitionMap => {\n const definitionPropertiesMap = model.fields.map(getJSONSchemaProperty(modelMetaData, transformOptions));\n\n const propertiesMap = definitionPropertiesMap.map(([name, definition]) => [name, definition] as DefinitionMap);\n const relationScalarFields = getRelationScalarFields(model);\n const propertiesWithoutRelationScalars = propertiesMap.filter((property) => !relationScalarFields.includes(property[0]));\n\n const properties = Object.fromEntries(transformOptions?.keepRelationScalarFields === \"true\" ? propertiesMap : propertiesWithoutRelationScalars);\n\n const definition: JSONSchema7Definition = {\n type: \"object\",\n properties,\n };\n\n if (transformOptions.includeRequiredFields) {\n definition.required = definitionPropertiesMap.reduce((filtered: string[], [name, , fieldMetaData]) => {\n if (fieldMetaData.required && fieldMetaData.isScalar && !fieldMetaData.hasDefaultValue) {\n filtered.push(name);\n }\n return filtered;\n }, []);\n }\n\n return [model.name, definition];\n};\n\nexport default getJSONSchemaModel;\n","import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7, JSONSchema7Definition } from \"json-schema\";\n\nimport getJSONSchemaModel from \"./model\";\nimport type { TransformOptions } from \"./types.d\";\n\nconst toCamelCase = (name: string): string => name.slice(0, 1).toLowerCase() + name.slice(1);\n\nconst getPropertyDefinition = ({ schemaId }: TransformOptions) => (model: DMMF.Model): [name: string, reference: JSONSchema7Definition] => {\n const reference = `#/definitions/${model.name}`;\n\n return [\n toCamelCase(model.name),\n {\n $ref: schemaId ? `${schemaId}${reference}` : reference,\n },\n ];\n};\n\nconst transformDmmf = (dmmf: DMMF.Document, transformOptions: TransformOptions = {}): JSONSchema7 => {\n // TODO: Remove default values as soon as prisma version < 3.10.0 doesn't have to be supported anymore\n const { models = [], enums = [], types = [] } = dmmf.datamodel;\n const initialJSON = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n definitions: {},\n type: \"object\",\n } as JSONSchema7;\n const { schemaId } = transformOptions;\n\n const modelDefinitionsMap = models.map(getJSONSchemaModel({ enums }, transformOptions));\n const typeDefinitionsMap = types.map(getJSONSchemaModel({ enums }, transformOptions));\n const modelPropertyDefinitionsMap = models.map(getPropertyDefinition(transformOptions));\n const definitions = Object.fromEntries([...modelDefinitionsMap, ...typeDefinitionsMap]);\n const properties = Object.fromEntries(modelPropertyDefinitionsMap);\n\n return {\n ...(schemaId ? { $id: schemaId } : null),\n ...initialJSON,\n definitions,\n properties,\n };\n};\n\nexport default transformDmmf;\n"]}
package/dist/index.mjs CHANGED
@@ -1,218 +1,2 @@
1
- // src/properties.ts
2
- import assert from "assert";
3
- function isDefined(value) {
4
- return value !== void 0 && value !== null;
5
- }
6
- var getJSONSchemaScalar = (fieldType) => {
7
- switch (fieldType) {
8
- case "Int":
9
- case "BigInt": {
10
- return "integer";
11
- }
12
- case "DateTime":
13
- case "Bytes":
14
- case "String": {
15
- return "string";
16
- }
17
- case "Float":
18
- case "Decimal": {
19
- return "number";
20
- }
21
- case "Json": {
22
- return ["number", "string", "boolean", "object", "array", "null"];
23
- }
24
- case "Boolean": {
25
- return "boolean";
26
- }
27
- default: {
28
- throw new Error(`Unhandled discriminated union member: ${JSON.stringify(fieldType)}`);
29
- }
30
- }
31
- };
32
- var getJSONSchemaType = (field) => {
33
- const {
34
- isList,
35
- isRequired,
36
- kind,
37
- type
38
- } = field;
39
- let scalarFieldType = "object";
40
- if (kind === "scalar" && !isList) {
41
- scalarFieldType = getJSONSchemaScalar(type);
42
- } else if (isList) {
43
- scalarFieldType = "array";
44
- } else if (kind === "enum") {
45
- scalarFieldType = "string";
46
- }
47
- if (isRequired || isList) {
48
- return scalarFieldType;
49
- }
50
- const isFieldUnion = Array.isArray(scalarFieldType);
51
- if (isFieldUnion) {
52
- return [.../* @__PURE__ */ new Set([...scalarFieldType, "null"])];
53
- }
54
- return [scalarFieldType, "null"];
55
- };
56
- var getDefaultValue = (field) => {
57
- const fieldDefault = field.default;
58
- if (!field.hasDefaultValue) {
59
- return null;
60
- }
61
- if (field.kind === "enum") {
62
- return typeof fieldDefault === "string" ? fieldDefault : null;
63
- }
64
- if (field.kind !== "scalar") {
65
- return null;
66
- }
67
- switch (field.type) {
68
- case "String":
69
- case "BigInt":
70
- case "DateTime": {
71
- return typeof fieldDefault === "string" ? fieldDefault : null;
72
- }
73
- case "Int":
74
- case "Float":
75
- case "Decimal": {
76
- return typeof fieldDefault === "number" ? fieldDefault : null;
77
- }
78
- case "Boolean": {
79
- return typeof fieldDefault === "boolean" ? fieldDefault : null;
80
- }
81
- case "Json":
82
- case "Bytes": {
83
- return null;
84
- }
85
- default: {
86
- throw new Error(`Unhandled discriminated union member: ${JSON.stringify(field.type)}`);
87
- }
88
- }
89
- };
90
- var getFormatByDMMFType = (fieldType) => {
91
- if (fieldType === "DateTime") {
92
- return "date-time";
93
- }
94
- return void 0;
95
- };
96
- var getJSONSchemaForPropertyReference = (field, { schemaId, persistOriginalType }) => {
97
- const notNullable = field.isRequired || field.isList;
98
- assert.equal(typeof field.type, "string");
99
- const typeReference = `#/definitions/${field.type}`;
100
- const reference = { $ref: schemaId ? `${schemaId}${typeReference}` : typeReference };
101
- return notNullable ? reference : {
102
- anyOf: [reference, { type: "null" }],
103
- ...persistOriginalType && {
104
- originalType: field.type
105
- }
106
- };
107
- };
108
- var getItemsByDMMFType = (field, transformOptions) => {
109
- if (field.kind === "scalar" && !field.isList || field.kind === "enum") {
110
- return void 0;
111
- }
112
- if (field.kind === "scalar" && field.isList) {
113
- return { type: getJSONSchemaScalar(field.type) };
114
- }
115
- return getJSONSchemaForPropertyReference(field, transformOptions);
116
- };
117
- var isSingleReference = (field) => field.kind !== "scalar" && !field.isList && field.kind !== "enum";
118
- var getEnumListByDMMFType = (modelMetaData) => (field) => {
119
- const enumItem = modelMetaData.enums.find(({ name }) => name === field.type);
120
- if (!enumItem) {
121
- return void 0;
122
- }
123
- return enumItem.values.map((item) => item.name);
124
- };
125
- var getDescription = (field) => field.documentation;
126
- var getPropertyDefinition = (modelMetaData, transformOptions, field) => {
127
- const type = getJSONSchemaType(field);
128
- const format = getFormatByDMMFType(field.type);
129
- const items = getItemsByDMMFType(field, transformOptions);
130
- const enumList = getEnumListByDMMFType(modelMetaData)(field);
131
- const defaultValue = getDefaultValue(field);
132
- const description = getDescription(field);
133
- return {
134
- type,
135
- ...transformOptions.persistOriginalType && {
136
- originalType: field.type
137
- },
138
- ...isDefined(defaultValue) && { default: defaultValue },
139
- ...isDefined(format) && { format },
140
- ...isDefined(items) && { items },
141
- ...isDefined(enumList) && { enum: enumList },
142
- ...isDefined(description) && { description }
143
- };
144
- };
145
- var getJSONSchemaProperty = (modelMetaData, transformOptions) => (field) => {
146
- const propertyMetaData = {
147
- required: field.isRequired,
148
- hasDefaultValue: field.hasDefaultValue,
149
- isScalar: field.kind === "scalar" || field.kind === "enum"
150
- };
151
- const property = isSingleReference(field) ? getJSONSchemaForPropertyReference(field, transformOptions) : getPropertyDefinition(modelMetaData, transformOptions, field);
152
- return [field.name, property, propertyMetaData];
153
- };
154
- var properties_default = getJSONSchemaProperty;
155
-
156
- // src/model.ts
157
- function getRelationScalarFields(model) {
158
- return model.fields.flatMap((field) => field.relationFromFields || []);
159
- }
160
- var getJSONSchemaModel = (modelMetaData, transformOptions) => (model) => {
161
- const definitionPropertiesMap = model.fields.map(properties_default(modelMetaData, transformOptions));
162
- const propertiesMap = definitionPropertiesMap.map(([name, definition2]) => [name, definition2]);
163
- const relationScalarFields = getRelationScalarFields(model);
164
- const propertiesWithoutRelationScalars = propertiesMap.filter((property) => !relationScalarFields.includes(property[0]));
165
- const properties = Object.fromEntries((transformOptions == null ? void 0 : transformOptions.keepRelationScalarFields) === "true" ? propertiesMap : propertiesWithoutRelationScalars);
166
- const definition = {
167
- type: "object",
168
- properties
169
- };
170
- if (transformOptions.includeRequiredFields) {
171
- definition.required = definitionPropertiesMap.reduce((filtered, [name, , fieldMetaData]) => {
172
- if (fieldMetaData.required && fieldMetaData.isScalar && !fieldMetaData.hasDefaultValue) {
173
- filtered.push(name);
174
- }
175
- return filtered;
176
- }, []);
177
- }
178
- return [model.name, definition];
179
- };
180
- var model_default = getJSONSchemaModel;
181
-
182
- // src/transform-dmmf.ts
183
- var toCamelCase = (name) => name.slice(0, 1).toLowerCase() + name.slice(1);
184
- var getPropertyDefinition2 = ({ schemaId }) => (model) => {
185
- const reference = `#/definitions/${model.name}`;
186
- return [
187
- toCamelCase(model.name),
188
- {
189
- $ref: schemaId ? `${schemaId}${reference}` : reference
190
- }
191
- ];
192
- };
193
- var transformDmmf = (dmmf, transformOptions = {}) => {
194
- const { models = [], enums = [], types = [] } = dmmf.datamodel;
195
- const initialJSON = {
196
- $schema: "http://json-schema.org/draft-07/schema#",
197
- definitions: {},
198
- type: "object"
199
- };
200
- const { schemaId } = transformOptions;
201
- const modelDefinitionsMap = models.map(model_default({ enums }, transformOptions));
202
- const typeDefinitionsMap = types.map(model_default({ enums }, transformOptions));
203
- const modelPropertyDefinitionsMap = models.map(getPropertyDefinition2(transformOptions));
204
- const definitions = Object.fromEntries([...modelDefinitionsMap, ...typeDefinitionsMap]);
205
- const properties = Object.fromEntries(modelPropertyDefinitionsMap);
206
- return {
207
- ...schemaId ? { $id: schemaId } : null,
208
- ...initialJSON,
209
- definitions,
210
- properties
211
- };
212
- };
213
- var transform_dmmf_default = transformDmmf;
214
- export {
215
- properties_default as getJSONSchemaProperty,
216
- transform_dmmf_default as transformDMMF
217
- };
1
+ import S from"assert";function l(e){return e!=null}var f=e=>{switch(e){case"Int":case"BigInt":return"integer";case"DateTime":case"Bytes":case"String":return"string";case"Float":case"Decimal":return"number";case"Json":return["number","string","boolean","object","array","null"];case"Boolean":return"boolean";default:throw new Error(`Unhandled discriminated union member: ${JSON.stringify(e)}`)}},D=e=>{let{isList:t,isRequired:r,kind:n,type:i}=e,a="object";return n==="scalar"&&!t?a=f(i):t?a="array":n==="enum"&&(a="string"),r||t?a:Array.isArray(a)?[...new Set([...a,"null"])]:[a,"null"]},h=e=>{let t=e.default;if(!e.hasDefaultValue)return null;if(e.kind==="enum")return typeof t=="string"?t:null;if(e.kind!=="scalar")return null;switch(e.type){case"String":case"BigInt":case"DateTime":return typeof t=="string"?t:null;case"Int":case"Float":case"Decimal":return typeof t=="number"?t:null;case"Boolean":return typeof t=="boolean"?t:null;case"Json":case"Bytes":return null;default:throw new Error(`Unhandled discriminated union member: ${JSON.stringify(e.type)}`)}},g=e=>{if(e==="DateTime")return"date-time"},d=(e,{schemaId:t,persistOriginalType:r})=>{let n=e.isRequired||e.isList;S.equal(typeof e.type,"string");let i=`#/definitions/${e.type}`,a={$ref:t?`${t}${i}`:i};return n?a:{anyOf:[a,{type:"null"}],...r&&{originalType:e.type}}},F=(e,t)=>{if(!(e.kind==="scalar"&&!e.isList||e.kind==="enum"))return e.kind==="scalar"&&e.isList?{type:f(e.type)}:d(e,t)},N=e=>e.kind!=="scalar"&&!e.isList&&e.kind!=="enum",O=e=>t=>{let r=e.enums.find(({name:n})=>n===t.type);if(!!r)return r.values.map(n=>n.name)},J=e=>e.documentation,T=(e,t,r)=>{let n=D(r),i=g(r.type),a=F(r,t),o=O(e)(r),p=h(r),c=J(r);return{type:n,...t.persistOriginalType&&{originalType:r.type},...l(p)&&{default:p},...l(i)&&{format:i},...l(a)&&{items:a},...l(o)&&{enum:o},...l(c)&&{description:c}}},P=(e,t)=>r=>{let n={required:r.isRequired,hasDefaultValue:r.hasDefaultValue,isScalar:r.kind==="scalar"||r.kind==="enum"},i=N(r)?d(r,t):T(e,t,r);return[r.name,i,n]},y=P;function b(e){return e.fields.flatMap(t=>t.relationFromFields||[])}var $=(e,t)=>r=>{let n=r.fields.map(y(e,t)),i=n.map(([s,m])=>[s,m]),a=b(r),o=i.filter(s=>!a.includes(s[0])),c={type:"object",properties:Object.fromEntries((t==null?void 0:t.keepRelationScalarFields)==="true"?i:o)};return t.includeRequiredFields&&(c.required=n.reduce((s,[m,,u])=>(u.required&&u.isScalar&&!u.hasDefaultValue&&s.push(m),s),[])),[r.name,c]},M=$;var j=e=>e.slice(0,1).toLowerCase()+e.slice(1),k=({schemaId:e})=>t=>{let r=`#/definitions/${t.name}`;return[j(t.name),{$ref:e?`${e}${r}`:r}]},R=(e,t={})=>{let{models:r=[],enums:n=[],types:i=[]}=e.datamodel,a={$schema:"http://json-schema.org/draft-07/schema#",definitions:{},type:"object"},{schemaId:o}=t,p=r.map(M({enums:n},t)),c=i.map(M({enums:n},t)),s=r.map(k(t)),m=Object.fromEntries([...p,...c]),u=Object.fromEntries(s);return{...o?{$id:o}:null,...a,definitions:m,properties:u}},B=R;export{y as getJSONSchemaProperty,B as transformDMMF};
218
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/properties.ts","../src/model.ts","../src/transform-dmmf.ts"],"sourcesContent":["import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7, JSONSchema7TypeName } from \"json-schema\";\nimport assert from \"node:assert\";\n\nimport type {\n ModelMetaData, PrismaPrimitive, PropertyMap, PropertyMetaData, TransformOptions,\n} from \"./types.d\";\n\nfunction isDefined<T>(value: T | undefined | null): value is T {\n return value !== undefined && value !== null;\n}\n\nconst getJSONSchemaScalar = (fieldType: PrismaPrimitive): JSONSchema7TypeName | Array<JSONSchema7TypeName> => {\n switch (fieldType) {\n case \"Int\":\n case \"BigInt\": {\n return \"integer\";\n }\n case \"DateTime\":\n case \"Bytes\":\n case \"String\": {\n return \"string\";\n }\n case \"Float\":\n case \"Decimal\": {\n return \"number\";\n }\n case \"Json\": {\n return [\"number\", \"string\", \"boolean\", \"object\", \"array\", \"null\"];\n }\n case \"Boolean\": {\n return \"boolean\";\n }\n default: {\n throw new Error(`Unhandled discriminated union member: ${JSON.stringify(fieldType)}`);\n }\n }\n};\n\nconst getJSONSchemaType = (field: DMMF.Field): JSONSchema7[\"type\"] => {\n const {\n isList, isRequired, kind, type,\n } = field;\n\n let scalarFieldType: JSONSchema7[\"type\"] = \"object\";\n\n if (kind === \"scalar\" && !isList) {\n scalarFieldType = getJSONSchemaScalar(type as PrismaPrimitive);\n } else if (isList) {\n scalarFieldType = \"array\";\n } else if (kind === \"enum\") {\n scalarFieldType = \"string\";\n }\n\n if (isRequired || isList) {\n return scalarFieldType;\n }\n\n const isFieldUnion = Array.isArray(scalarFieldType);\n\n if (isFieldUnion) {\n return [...new Set([...scalarFieldType, \"null\"])] as JSONSchema7[\"type\"];\n }\n\n return [scalarFieldType as JSONSchema7TypeName, \"null\"];\n};\n\nconst getDefaultValue = (field: DMMF.Field): JSONSchema7[\"default\"] => {\n const fieldDefault = field.default;\n\n if (!field.hasDefaultValue) {\n return null;\n }\n\n if (field.kind === \"enum\") {\n return typeof fieldDefault === \"string\" ? fieldDefault : null;\n }\n\n if (field.kind !== \"scalar\") {\n return null;\n }\n\n switch (field.type) {\n case \"String\":\n case \"BigInt\":\n case \"DateTime\": {\n return typeof fieldDefault === \"string\" ? fieldDefault : null;\n }\n case \"Int\":\n case \"Float\":\n case \"Decimal\": {\n return typeof fieldDefault === \"number\" ? fieldDefault : null;\n }\n case \"Boolean\": {\n return typeof fieldDefault === \"boolean\" ? fieldDefault : null;\n }\n case \"Json\":\n case \"Bytes\": {\n return null;\n }\n default: {\n throw new Error(`Unhandled discriminated union member: ${JSON.stringify(field.type)}`);\n }\n }\n};\n\nconst getFormatByDMMFType = (fieldType: DMMF.Field[\"type\"]): string | undefined => {\n if (fieldType === \"DateTime\") {\n return \"date-time\";\n }\n\n return undefined;\n};\n\nconst getJSONSchemaForPropertyReference = (field: DMMF.Field, { schemaId, persistOriginalType }: TransformOptions): JSONSchema7 => {\n const notNullable = field.isRequired || field.isList;\n\n assert.equal(typeof field.type, \"string\");\n\n const typeReference = `#/definitions/${field.type}`;\n const reference = { $ref: schemaId ? `${schemaId}${typeReference}` : typeReference };\n\n return notNullable\n ? reference\n : {\n anyOf: [reference, { type: \"null\" }],\n ...(persistOriginalType && {\n originalType: field.type,\n }),\n };\n};\n\nconst getItemsByDMMFType = (field: DMMF.Field, transformOptions: TransformOptions): JSONSchema7[\"items\"] => {\n if ((field.kind === \"scalar\" && !field.isList) || field.kind === \"enum\") {\n return undefined;\n }\n\n if (field.kind === \"scalar\" && field.isList) {\n return { type: getJSONSchemaScalar(field.type as PrismaPrimitive) };\n }\n\n return getJSONSchemaForPropertyReference(field, transformOptions);\n};\n\nconst isSingleReference = (field: DMMF.Field) => field.kind !== \"scalar\" && !field.isList && field.kind !== \"enum\";\n\nconst getEnumListByDMMFType = (modelMetaData: ModelMetaData) => (field: DMMF.Field): string[] | undefined => {\n const enumItem = modelMetaData.enums.find(({ name }) => name === field.type);\n\n if (!enumItem) {\n return undefined;\n }\n\n return enumItem.values.map((item) => item.name);\n};\n\nconst getDescription = (field: DMMF.Field) => field.documentation;\n\nconst getPropertyDefinition = (modelMetaData: ModelMetaData, transformOptions: TransformOptions, field: DMMF.Field) => {\n const type = getJSONSchemaType(field);\n const format = getFormatByDMMFType(field.type);\n const items = getItemsByDMMFType(field, transformOptions);\n const enumList = getEnumListByDMMFType(modelMetaData)(field);\n const defaultValue = getDefaultValue(field);\n const description = getDescription(field);\n\n return {\n type,\n ...(transformOptions.persistOriginalType && {\n originalType: field.type,\n }),\n ...(isDefined(defaultValue) && { default: defaultValue }),\n ...(isDefined(format) && { format }),\n ...(isDefined(items) && { items }),\n ...(isDefined(enumList) && { enum: enumList }),\n ...(isDefined(description) && { description }),\n };\n};\n\nconst getJSONSchemaProperty = (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (field: DMMF.Field): PropertyMap => {\n const propertyMetaData: PropertyMetaData = {\n required: field.isRequired,\n hasDefaultValue: field.hasDefaultValue,\n isScalar: field.kind === \"scalar\" || field.kind === \"enum\",\n };\n\n const property = isSingleReference(field)\n ? getJSONSchemaForPropertyReference(field, transformOptions)\n : getPropertyDefinition(modelMetaData, transformOptions, field);\n\n return [field.name, property, propertyMetaData];\n};\n\nexport default getJSONSchemaProperty;\n","import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7Definition } from \"json-schema\";\n\nimport getJSONSchemaProperty from \"./properties\";\nimport type { DefinitionMap, ModelMetaData, TransformOptions } from \"./types.d\";\n\nfunction getRelationScalarFields(model: DMMF.Model): string[] {\n return model.fields.flatMap((field) => field.relationFromFields || []);\n}\n\nconst getJSONSchemaModel = (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (model: DMMF.Model): DefinitionMap => {\n const definitionPropertiesMap = model.fields.map(getJSONSchemaProperty(modelMetaData, transformOptions));\n\n const propertiesMap = definitionPropertiesMap.map(([name, definition]) => [name, definition] as DefinitionMap);\n const relationScalarFields = getRelationScalarFields(model);\n const propertiesWithoutRelationScalars = propertiesMap.filter((property) => !relationScalarFields.includes(property[0]));\n\n const properties = Object.fromEntries(transformOptions?.keepRelationScalarFields === \"true\" ? propertiesMap : propertiesWithoutRelationScalars);\n\n const definition: JSONSchema7Definition = {\n type: \"object\",\n properties,\n };\n\n if (transformOptions.includeRequiredFields) {\n definition.required = definitionPropertiesMap.reduce((filtered: string[], [name, , fieldMetaData]) => {\n if (fieldMetaData.required && fieldMetaData.isScalar && !fieldMetaData.hasDefaultValue) {\n filtered.push(name);\n }\n return filtered;\n }, []);\n }\n\n return [model.name, definition];\n};\n\nexport default getJSONSchemaModel;\n","import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7, JSONSchema7Definition } from \"json-schema\";\n\nimport getJSONSchemaModel from \"./model\";\nimport type { TransformOptions } from \"./types.d\";\n\nconst toCamelCase = (name: string): string => name.slice(0, 1).toLowerCase() + name.slice(1);\n\nconst getPropertyDefinition = ({ schemaId }: TransformOptions) => (model: DMMF.Model): [name: string, reference: JSONSchema7Definition] => {\n const reference = `#/definitions/${model.name}`;\n\n return [\n toCamelCase(model.name),\n {\n $ref: schemaId ? `${schemaId}${reference}` : reference,\n },\n ];\n};\n\nconst transformDmmf = (dmmf: DMMF.Document, transformOptions: TransformOptions = {}): JSONSchema7 => {\n // TODO: Remove default values as soon as prisma version < 3.10.0 doesn't have to be supported anymore\n const { models = [], enums = [], types = [] } = dmmf.datamodel;\n const initialJSON = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n definitions: {},\n type: \"object\",\n } as JSONSchema7;\n const { schemaId } = transformOptions;\n\n const modelDefinitionsMap = models.map(getJSONSchemaModel({ enums }, transformOptions));\n const typeDefinitionsMap = types.map(getJSONSchemaModel({ enums }, transformOptions));\n const modelPropertyDefinitionsMap = models.map(getPropertyDefinition(transformOptions));\n const definitions = Object.fromEntries([...modelDefinitionsMap, ...typeDefinitionsMap]);\n const properties = Object.fromEntries(modelPropertyDefinitionsMap);\n\n return {\n ...(schemaId ? { $id: schemaId } : null),\n ...initialJSON,\n definitions,\n properties,\n };\n};\n\nexport default transformDmmf;\n"],"mappings":"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","names":["definition","getPropertyDefinition"]}
1
+ {"version":3,"sources":["../src/properties.ts","../src/model.ts","../src/transform-dmmf.ts"],"sourcesContent":["import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7, JSONSchema7TypeName } from \"json-schema\";\nimport assert from \"node:assert\";\n\nimport type {\n ModelMetaData, PrismaPrimitive, PropertyMap, PropertyMetaData, TransformOptions,\n} from \"./types.d\";\n\nfunction isDefined<T>(value: T | undefined | null): value is T {\n return value !== undefined && value !== null;\n}\n\nconst getJSONSchemaScalar = (fieldType: PrismaPrimitive): JSONSchema7TypeName | Array<JSONSchema7TypeName> => {\n switch (fieldType) {\n case \"Int\":\n case \"BigInt\": {\n return \"integer\";\n }\n case \"DateTime\":\n case \"Bytes\":\n case \"String\": {\n return \"string\";\n }\n case \"Float\":\n case \"Decimal\": {\n return \"number\";\n }\n case \"Json\": {\n return [\"number\", \"string\", \"boolean\", \"object\", \"array\", \"null\"];\n }\n case \"Boolean\": {\n return \"boolean\";\n }\n default: {\n throw new Error(`Unhandled discriminated union member: ${JSON.stringify(fieldType)}`);\n }\n }\n};\n\nconst getJSONSchemaType = (field: DMMF.Field): JSONSchema7[\"type\"] => {\n const {\n isList, isRequired, kind, type,\n } = field;\n\n let scalarFieldType: JSONSchema7[\"type\"] = \"object\";\n\n if (kind === \"scalar\" && !isList) {\n scalarFieldType = getJSONSchemaScalar(type as PrismaPrimitive);\n } else if (isList) {\n scalarFieldType = \"array\";\n } else if (kind === \"enum\") {\n scalarFieldType = \"string\";\n }\n\n if (isRequired || isList) {\n return scalarFieldType;\n }\n\n const isFieldUnion = Array.isArray(scalarFieldType);\n\n if (isFieldUnion) {\n return [...new Set([...scalarFieldType, \"null\"])] as JSONSchema7[\"type\"];\n }\n\n return [scalarFieldType as JSONSchema7TypeName, \"null\"];\n};\n\nconst getDefaultValue = (field: DMMF.Field): JSONSchema7[\"default\"] => {\n const fieldDefault = field.default;\n\n if (!field.hasDefaultValue) {\n return null;\n }\n\n if (field.kind === \"enum\") {\n return typeof fieldDefault === \"string\" ? fieldDefault : null;\n }\n\n if (field.kind !== \"scalar\") {\n return null;\n }\n\n switch (field.type) {\n case \"String\":\n case \"BigInt\":\n case \"DateTime\": {\n return typeof fieldDefault === \"string\" ? fieldDefault : null;\n }\n case \"Int\":\n case \"Float\":\n case \"Decimal\": {\n return typeof fieldDefault === \"number\" ? fieldDefault : null;\n }\n case \"Boolean\": {\n return typeof fieldDefault === \"boolean\" ? fieldDefault : null;\n }\n case \"Json\":\n case \"Bytes\": {\n return null;\n }\n default: {\n throw new Error(`Unhandled discriminated union member: ${JSON.stringify(field.type)}`);\n }\n }\n};\n\nconst getFormatByDMMFType = (fieldType: DMMF.Field[\"type\"]): string | undefined => {\n if (fieldType === \"DateTime\") {\n return \"date-time\";\n }\n\n return undefined;\n};\n\nconst getJSONSchemaForPropertyReference = (field: DMMF.Field, { schemaId, persistOriginalType }: TransformOptions): JSONSchema7 => {\n const notNullable = field.isRequired || field.isList;\n\n assert.equal(typeof field.type, \"string\");\n\n const typeReference = `#/definitions/${field.type}`;\n const reference = { $ref: schemaId ? `${schemaId}${typeReference}` : typeReference };\n\n return notNullable\n ? reference\n : {\n anyOf: [reference, { type: \"null\" }],\n ...(persistOriginalType && {\n originalType: field.type,\n }),\n };\n};\n\nconst getItemsByDMMFType = (field: DMMF.Field, transformOptions: TransformOptions): JSONSchema7[\"items\"] => {\n if ((field.kind === \"scalar\" && !field.isList) || field.kind === \"enum\") {\n return undefined;\n }\n\n if (field.kind === \"scalar\" && field.isList) {\n return { type: getJSONSchemaScalar(field.type as PrismaPrimitive) };\n }\n\n return getJSONSchemaForPropertyReference(field, transformOptions);\n};\n\nconst isSingleReference = (field: DMMF.Field) => field.kind !== \"scalar\" && !field.isList && field.kind !== \"enum\";\n\nconst getEnumListByDMMFType = (modelMetaData: ModelMetaData) => (field: DMMF.Field): string[] | undefined => {\n const enumItem = modelMetaData.enums.find(({ name }) => name === field.type);\n\n if (!enumItem) {\n return undefined;\n }\n\n return enumItem.values.map((item) => item.name);\n};\n\nconst getDescription = (field: DMMF.Field) => field.documentation;\n\nconst getPropertyDefinition = (modelMetaData: ModelMetaData, transformOptions: TransformOptions, field: DMMF.Field) => {\n const type = getJSONSchemaType(field);\n const format = getFormatByDMMFType(field.type);\n const items = getItemsByDMMFType(field, transformOptions);\n const enumList = getEnumListByDMMFType(modelMetaData)(field);\n const defaultValue = getDefaultValue(field);\n const description = getDescription(field);\n\n return {\n type,\n ...(transformOptions.persistOriginalType && {\n originalType: field.type,\n }),\n ...(isDefined(defaultValue) && { default: defaultValue }),\n ...(isDefined(format) && { format }),\n ...(isDefined(items) && { items }),\n ...(isDefined(enumList) && { enum: enumList }),\n ...(isDefined(description) && { description }),\n };\n};\n\nconst getJSONSchemaProperty = (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (field: DMMF.Field): PropertyMap => {\n const propertyMetaData: PropertyMetaData = {\n required: field.isRequired,\n hasDefaultValue: field.hasDefaultValue,\n isScalar: field.kind === \"scalar\" || field.kind === \"enum\",\n };\n\n const property = isSingleReference(field)\n ? getJSONSchemaForPropertyReference(field, transformOptions)\n : getPropertyDefinition(modelMetaData, transformOptions, field);\n\n return [field.name, property, propertyMetaData];\n};\n\nexport default getJSONSchemaProperty;\n","import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7Definition } from \"json-schema\";\n\nimport getJSONSchemaProperty from \"./properties\";\nimport type { DefinitionMap, ModelMetaData, TransformOptions } from \"./types.d\";\n\nfunction getRelationScalarFields(model: DMMF.Model): string[] {\n return model.fields.flatMap((field) => field.relationFromFields || []);\n}\n\nconst getJSONSchemaModel = (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (model: DMMF.Model): DefinitionMap => {\n const definitionPropertiesMap = model.fields.map(getJSONSchemaProperty(modelMetaData, transformOptions));\n\n const propertiesMap = definitionPropertiesMap.map(([name, definition]) => [name, definition] as DefinitionMap);\n const relationScalarFields = getRelationScalarFields(model);\n const propertiesWithoutRelationScalars = propertiesMap.filter((property) => !relationScalarFields.includes(property[0]));\n\n const properties = Object.fromEntries(transformOptions?.keepRelationScalarFields === \"true\" ? propertiesMap : propertiesWithoutRelationScalars);\n\n const definition: JSONSchema7Definition = {\n type: \"object\",\n properties,\n };\n\n if (transformOptions.includeRequiredFields) {\n definition.required = definitionPropertiesMap.reduce((filtered: string[], [name, , fieldMetaData]) => {\n if (fieldMetaData.required && fieldMetaData.isScalar && !fieldMetaData.hasDefaultValue) {\n filtered.push(name);\n }\n return filtered;\n }, []);\n }\n\n return [model.name, definition];\n};\n\nexport default getJSONSchemaModel;\n","import type { DMMF } from \"@prisma/generator-helper\";\nimport type { JSONSchema7, JSONSchema7Definition } from \"json-schema\";\n\nimport getJSONSchemaModel from \"./model\";\nimport type { TransformOptions } from \"./types.d\";\n\nconst toCamelCase = (name: string): string => name.slice(0, 1).toLowerCase() + name.slice(1);\n\nconst getPropertyDefinition = ({ schemaId }: TransformOptions) => (model: DMMF.Model): [name: string, reference: JSONSchema7Definition] => {\n const reference = `#/definitions/${model.name}`;\n\n return [\n toCamelCase(model.name),\n {\n $ref: schemaId ? `${schemaId}${reference}` : reference,\n },\n ];\n};\n\nconst transformDmmf = (dmmf: DMMF.Document, transformOptions: TransformOptions = {}): JSONSchema7 => {\n // TODO: Remove default values as soon as prisma version < 3.10.0 doesn't have to be supported anymore\n const { models = [], enums = [], types = [] } = dmmf.datamodel;\n const initialJSON = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n definitions: {},\n type: \"object\",\n } as JSONSchema7;\n const { schemaId } = transformOptions;\n\n const modelDefinitionsMap = models.map(getJSONSchemaModel({ enums }, transformOptions));\n const typeDefinitionsMap = types.map(getJSONSchemaModel({ enums }, transformOptions));\n const modelPropertyDefinitionsMap = models.map(getPropertyDefinition(transformOptions));\n const definitions = Object.fromEntries([...modelDefinitionsMap, ...typeDefinitionsMap]);\n const properties = Object.fromEntries(modelPropertyDefinitionsMap);\n\n return {\n ...(schemaId ? { $id: schemaId } : null),\n ...initialJSON,\n definitions,\n properties,\n };\n};\n\nexport default transformDmmf;\n"],"mappings":"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","names":["assert","isDefined","value","getJSONSchemaScalar","fieldType","getJSONSchemaType","field","isList","isRequired","kind","type","scalarFieldType","getDefaultValue","fieldDefault","getFormatByDMMFType","getJSONSchemaForPropertyReference","schemaId","persistOriginalType","notNullable","typeReference","reference","getItemsByDMMFType","transformOptions","isSingleReference","getEnumListByDMMFType","modelMetaData","enumItem","name","item","getDescription","getPropertyDefinition","format","items","enumList","defaultValue","description","getJSONSchemaProperty","propertyMetaData","property","properties_default","getRelationScalarFields","model","field","getJSONSchemaModel","modelMetaData","transformOptions","definitionPropertiesMap","properties_default","propertiesMap","name","definition","relationScalarFields","propertiesWithoutRelationScalars","property","filtered","fieldMetaData","model_default","toCamelCase","name","getPropertyDefinition","schemaId","model","reference","transformDmmf","dmmf","transformOptions","models","enums","types","initialJSON","modelDefinitionsMap","model_default","typeDefinitionsMap","modelPropertyDefinitionsMap","definitions","properties","transform_dmmf_default"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/prisma-dmmf-transformer",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "A generator for Prisma to generate a valid JSON Schema v7.",
5
5
  "keywords": [
6
6
  "anolilab",
@@ -45,7 +45,7 @@
45
45
  "./package.json": "./package.json"
46
46
  },
47
47
  "main": "dist/index.js",
48
- "module": "dist/index.module.mjs",
48
+ "module": "dist/index.mjs",
49
49
  "source": "src/index.ts",
50
50
  "types": "dist/index.d.ts",
51
51
  "files": [
@@ -65,13 +65,13 @@
65
65
  "test": "vitest"
66
66
  },
67
67
  "dependencies": {
68
- "@prisma/generator-helper": "4.7.0",
69
- "@prisma/internals": "4.7.0"
68
+ "@prisma/generator-helper": "4.7.1",
69
+ "@prisma/internals": "4.7.1"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@anolilab/eslint-config": "^4.0.9",
73
73
  "@anolilab/semantic-release-preset": "^2.0.7",
74
- "@prisma/client": "4.7.0",
74
+ "@prisma/client": "4.7.1",
75
75
  "@rushstack/eslint-plugin-security": "^0.5.0",
76
76
  "@types/json-schema": "7.0.11",
77
77
  "@types/micromatch": "^4.0.2",
@@ -105,13 +105,13 @@
105
105
  "eslint-plugin-you-dont-need-lodash-underscore": "^6.12.0",
106
106
  "eslint-plugin-you-dont-need-momentjs": "^1.6.0",
107
107
  "prettier": "^2.7.1",
108
- "prisma": "4.7.0",
108
+ "prisma": "4.7.1",
109
109
  "read-pkg": "^7.1.0",
110
110
  "rimraf": "^3.0.2",
111
111
  "semantic-release": "^19.0.5",
112
112
  "tsup": "^6.2.3",
113
113
  "typescript": "^4.8.4",
114
- "vitest": "^0.25.0"
114
+ "vitest": "^0.26.1"
115
115
  },
116
116
  "peerDependencies": {
117
117
  "@prisma/client": "3.* || 4.*",