@visulima/prisma-dmmf-transformer 2.0.30 → 2.0.32
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 +21 -0
- package/LICENSE.md +1 -130
- package/dist/index.cjs +1 -11
- package/dist/index.d.cts +193 -3
- package/dist/index.d.mts +193 -3
- package/dist/index.d.ts +193 -3
- package/dist/index.mjs +1 -2
- package/dist/packem_shared/getJSONSchemaProperty-BJUSxFNN.mjs +1 -0
- package/dist/packem_shared/getJSONSchemaProperty-DRt6R_Y4.cjs +1 -0
- package/dist/packem_shared/transformDMMF-B3i5bZr6.mjs +1 -0
- package/dist/packem_shared/transformDMMF-CNWOKGfH.cjs +1 -0
- package/package.json +3 -2
- package/dist/model.d.cts +0 -4
- package/dist/model.d.mts +0 -4
- package/dist/model.d.ts +0 -4
- package/dist/packem_shared/getJSONSchemaProperty-DulgsLKr.mjs +0 -150
- package/dist/packem_shared/getJSONSchemaProperty-E2OXsCgc.cjs +0 -156
- package/dist/packem_shared/transformDMMF-CAcG255G.cjs +0 -62
- package/dist/packem_shared/transformDMMF-DvU3tZ1x.mjs +0 -60
- package/dist/properties.d.cts +0 -4
- package/dist/properties.d.mts +0 -4
- package/dist/properties.d.ts +0 -4
- package/dist/transform-dmmf.d.cts +0 -5
- package/dist/transform-dmmf.d.mts +0 -5
- package/dist/transform-dmmf.d.ts +0 -5
- package/dist/types.d.cts +0 -20
- package/dist/types.d.mts +0 -20
- package/dist/types.d.ts +0 -20
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,193 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { DMMF } from '@prisma/generator-helper';
|
|
2
|
+
import { ReadonlyDeep } from 'type-fest';
|
|
3
|
+
|
|
4
|
+
// ==================================================================================================
|
|
5
|
+
// JSON Schema Draft 07
|
|
6
|
+
// ==================================================================================================
|
|
7
|
+
// https://tools.ietf.org/html/draft-handrews-json-schema-validation-01
|
|
8
|
+
// --------------------------------------------------------------------------------------------------
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Primitive type
|
|
12
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1.1
|
|
13
|
+
*/
|
|
14
|
+
type JSONSchema7TypeName =
|
|
15
|
+
| "string" //
|
|
16
|
+
| "number"
|
|
17
|
+
| "integer"
|
|
18
|
+
| "boolean"
|
|
19
|
+
| "object"
|
|
20
|
+
| "array"
|
|
21
|
+
| "null";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Primitive type
|
|
25
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1.1
|
|
26
|
+
*/
|
|
27
|
+
type JSONSchema7Type =
|
|
28
|
+
| string //
|
|
29
|
+
| number
|
|
30
|
+
| boolean
|
|
31
|
+
| JSONSchema7Object
|
|
32
|
+
| JSONSchema7Array
|
|
33
|
+
| null;
|
|
34
|
+
|
|
35
|
+
// Workaround for infinite type recursion
|
|
36
|
+
interface JSONSchema7Object {
|
|
37
|
+
[key: string]: JSONSchema7Type;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Workaround for infinite type recursion
|
|
41
|
+
// https://github.com/Microsoft/TypeScript/issues/3496#issuecomment-128553540
|
|
42
|
+
interface JSONSchema7Array extends Array<JSONSchema7Type> {}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Meta schema
|
|
46
|
+
*
|
|
47
|
+
* Recommended values:
|
|
48
|
+
* - 'http://json-schema.org/schema#'
|
|
49
|
+
* - 'http://json-schema.org/hyper-schema#'
|
|
50
|
+
* - 'http://json-schema.org/draft-07/schema#'
|
|
51
|
+
* - 'http://json-schema.org/draft-07/hyper-schema#'
|
|
52
|
+
*
|
|
53
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-5
|
|
54
|
+
*/
|
|
55
|
+
type JSONSchema7Version = string;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* JSON Schema v7
|
|
59
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01
|
|
60
|
+
*/
|
|
61
|
+
type JSONSchema7Definition = JSONSchema7 | boolean;
|
|
62
|
+
interface JSONSchema7 {
|
|
63
|
+
$id?: string | undefined;
|
|
64
|
+
$ref?: string | undefined;
|
|
65
|
+
$schema?: JSONSchema7Version | undefined;
|
|
66
|
+
$comment?: string | undefined;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @see https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-00#section-8.2.4
|
|
70
|
+
* @see https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-validation-00#appendix-A
|
|
71
|
+
*/
|
|
72
|
+
$defs?: {
|
|
73
|
+
[key: string]: JSONSchema7Definition;
|
|
74
|
+
} | undefined;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1
|
|
78
|
+
*/
|
|
79
|
+
type?: JSONSchema7TypeName | JSONSchema7TypeName[] | undefined;
|
|
80
|
+
enum?: JSONSchema7Type[] | undefined;
|
|
81
|
+
const?: JSONSchema7Type | undefined;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.2
|
|
85
|
+
*/
|
|
86
|
+
multipleOf?: number | undefined;
|
|
87
|
+
maximum?: number | undefined;
|
|
88
|
+
exclusiveMaximum?: number | undefined;
|
|
89
|
+
minimum?: number | undefined;
|
|
90
|
+
exclusiveMinimum?: number | undefined;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.3
|
|
94
|
+
*/
|
|
95
|
+
maxLength?: number | undefined;
|
|
96
|
+
minLength?: number | undefined;
|
|
97
|
+
pattern?: string | undefined;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.4
|
|
101
|
+
*/
|
|
102
|
+
items?: JSONSchema7Definition | JSONSchema7Definition[] | undefined;
|
|
103
|
+
additionalItems?: JSONSchema7Definition | undefined;
|
|
104
|
+
maxItems?: number | undefined;
|
|
105
|
+
minItems?: number | undefined;
|
|
106
|
+
uniqueItems?: boolean | undefined;
|
|
107
|
+
contains?: JSONSchema7Definition | undefined;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.5
|
|
111
|
+
*/
|
|
112
|
+
maxProperties?: number | undefined;
|
|
113
|
+
minProperties?: number | undefined;
|
|
114
|
+
required?: string[] | undefined;
|
|
115
|
+
properties?: {
|
|
116
|
+
[key: string]: JSONSchema7Definition;
|
|
117
|
+
} | undefined;
|
|
118
|
+
patternProperties?: {
|
|
119
|
+
[key: string]: JSONSchema7Definition;
|
|
120
|
+
} | undefined;
|
|
121
|
+
additionalProperties?: JSONSchema7Definition | undefined;
|
|
122
|
+
dependencies?: {
|
|
123
|
+
[key: string]: JSONSchema7Definition | string[];
|
|
124
|
+
} | undefined;
|
|
125
|
+
propertyNames?: JSONSchema7Definition | undefined;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.6
|
|
129
|
+
*/
|
|
130
|
+
if?: JSONSchema7Definition | undefined;
|
|
131
|
+
then?: JSONSchema7Definition | undefined;
|
|
132
|
+
else?: JSONSchema7Definition | undefined;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.7
|
|
136
|
+
*/
|
|
137
|
+
allOf?: JSONSchema7Definition[] | undefined;
|
|
138
|
+
anyOf?: JSONSchema7Definition[] | undefined;
|
|
139
|
+
oneOf?: JSONSchema7Definition[] | undefined;
|
|
140
|
+
not?: JSONSchema7Definition | undefined;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7
|
|
144
|
+
*/
|
|
145
|
+
format?: string | undefined;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-8
|
|
149
|
+
*/
|
|
150
|
+
contentMediaType?: string | undefined;
|
|
151
|
+
contentEncoding?: string | undefined;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-9
|
|
155
|
+
*/
|
|
156
|
+
definitions?: {
|
|
157
|
+
[key: string]: JSONSchema7Definition;
|
|
158
|
+
} | undefined;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-10
|
|
162
|
+
*/
|
|
163
|
+
title?: string | undefined;
|
|
164
|
+
description?: string | undefined;
|
|
165
|
+
default?: JSONSchema7Type | undefined;
|
|
166
|
+
readOnly?: boolean | undefined;
|
|
167
|
+
writeOnly?: boolean | undefined;
|
|
168
|
+
examples?: JSONSchema7Type | undefined;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
interface PropertyMetaData {
|
|
172
|
+
hasDefaultValue: boolean;
|
|
173
|
+
isScalar: boolean;
|
|
174
|
+
required: boolean;
|
|
175
|
+
}
|
|
176
|
+
interface ModelMetaData {
|
|
177
|
+
enums: ReadonlyDeep<DMMF.DatamodelEnum[]>;
|
|
178
|
+
}
|
|
179
|
+
type DefinitionMap = [name: string, definition: JSONSchema7Definition];
|
|
180
|
+
type PropertyMap = [...DefinitionMap, PropertyMetaData];
|
|
181
|
+
interface TransformOptions {
|
|
182
|
+
includeRequiredFields?: "false" | "true";
|
|
183
|
+
keepRelationScalarFields?: "false" | "true";
|
|
184
|
+
persistOriginalType?: "false" | "true";
|
|
185
|
+
schemaId?: string;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
declare const getJSONSchemaProperty: (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (field: DMMF.Field) => PropertyMap;
|
|
189
|
+
|
|
190
|
+
declare const transformDmmf: (dmmf: DMMF.Document, transformOptions?: TransformOptions) => JSONSchema7;
|
|
191
|
+
|
|
192
|
+
export { getJSONSchemaProperty, transformDmmf as transformDMMF };
|
|
193
|
+
export type { DefinitionMap, ModelMetaData, PropertyMap, PropertyMetaData, TransformOptions };
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { default as transformDMMF } from './packem_shared/transformDMMF-DvU3tZ1x.mjs';
|
|
1
|
+
import{default as t}from"./packem_shared/getJSONSchemaProperty-BJUSxFNN.mjs";import{default as o}from"./packem_shared/transformDMMF-B3i5bZr6.mjs";export{t as getJSONSchemaProperty,o as transformDMMF};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var f=Object.defineProperty;var c=(e,t)=>f(e,"name",{value:t,configurable:!0});import{createRequire as g}from"node:module";const h=g(import.meta.url),o=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,S=c(e=>{if(typeof o<"u"&&o.versions&&o.versions.node){const[t,r]=o.versions.node.split(".").map(Number);if(t>22||t===22&&r>=3||t===20&&r>=16)return o.getBuiltinModule(e)}return h(e)},"__cjs_getBuiltinModule"),b=S("node:assert");var D=Object.defineProperty,s=c((e,t)=>D(e,"name",{value:t,configurable:!0}),"a");const u=s(e=>e!=null,"isDefined"),m=s(e=>{switch(e){case"BigInt":case"Int":return"integer";case"Boolean":return"boolean";case"Bytes":case"DateTime":case"String":return"string";case"Decimal":case"Float":return"number";case"Json":return["number","string","boolean","object","array","null"];default:throw new Error(`Unhandled discriminated union member: ${JSON.stringify(e)}`)}},"getJSONSchemaScalar"),T=s(e=>{const{isList:t,isRequired:r,kind:n,type:a}=e;let i="object";return n==="scalar"&&!t?i=m(a):t?i="array":n==="enum"&&(i="string"),r||t?i:Array.isArray(i)?[...new Set(["null",...i])]:[i,"null"]},"getJSONSchemaType"),_=s(e=>{const t=e.default;if(e.hasDefaultValue){if(e.kind==="enum")return typeof t=="string"?t:void 0;if(e.kind==="scalar")switch(e.type){case"BigInt":case"DateTime":case"String":return typeof t=="string"?t:void 0;case"Boolean":return typeof t=="boolean"?t:void 0;case"Bytes":case"Json":return;case"Decimal":case"Float":case"Int":return typeof t=="number"?t:void 0;default:throw new Error(`Unhandled discriminated union member: ${JSON.stringify(e.type)}`)}}},"getDefaultValue"),v=s(e=>{if(e==="DateTime")return"date-time"},"getFormatByDMMFType"),y=s((e,{persistOriginalType:t,schemaId:r})=>{const n=e.isRequired||e.isList;b.equal(typeof e.type,"string");const a=`#/definitions/${e.type}`,i={$ref:r?`${r}${a}`:a};return n?i:{anyOf:[i,{type:"null"}],...t&&{originalType:e.type}}},"getJSONSchemaForPropertyReference"),B=s((e,t)=>{if(!(e.kind==="scalar"&&!e.isList||e.kind==="enum"))return e.kind==="scalar"&&e.isList?{type:m(e.type)}:y(e,t)},"getItemsByDMMFType"),O=s(e=>e.kind!=="scalar"&&!e.isList&&e.kind!=="enum","isSingleReference"),k=s(e=>t=>{const r=e.enums.find(({name:n})=>n===t.type);if(r)return r.values.map(n=>n.name)},"getEnumListByDMMFType"),M=s(e=>e.documentation,"getDescription"),j=s((e,t,r)=>{const n=T(r),a=v(r.type),i=B(r,t),l=k(e)(r),d=_(r),p=M(r);return{type:n,...t.persistOriginalType&&{originalType:r.type},...u(d)&&{default:d},...u(a)&&{format:a},...u(i)&&{items:i},...u(l)&&{enum:l},...u(p)&&{description:p}}},"getPropertyDefinition"),J=s((e,t)=>r=>{const n={hasDefaultValue:r.hasDefaultValue,isScalar:r.kind==="scalar"||r.kind==="enum",required:r.isRequired},a=O(r)?y(r,t):j(e,t,r);return[r.name,a,n]},"getJSONSchemaProperty");export{J as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var p=Object.defineProperty;var u=(e,t)=>p(e,"name",{value:t,configurable:!0});const f=require("node:assert"),g=u(e=>e&&typeof e=="object"&&"default"in e?e.default:e,"_interopDefaultCompat"),D=g(f);var S=Object.defineProperty,a=u((e,t)=>S(e,"name",{value:t,configurable:!0}),"a");const o=a(e=>e!=null,"isDefined"),d=a(e=>{switch(e){case"BigInt":case"Int":return"integer";case"Boolean":return"boolean";case"Bytes":case"DateTime":case"String":return"string";case"Decimal":case"Float":return"number";case"Json":return["number","string","boolean","object","array","null"];default:throw new Error(`Unhandled discriminated union member: ${JSON.stringify(e)}`)}},"getJSONSchemaScalar"),h=a(e=>{const{isList:t,isRequired:r,kind:n,type:s}=e;let i="object";return n==="scalar"&&!t?i=d(s):t?i="array":n==="enum"&&(i="string"),r||t?i:Array.isArray(i)?[...new Set(["null",...i])]:[i,"null"]},"getJSONSchemaType"),b=a(e=>{const t=e.default;if(e.hasDefaultValue){if(e.kind==="enum")return typeof t=="string"?t:void 0;if(e.kind==="scalar")switch(e.type){case"BigInt":case"DateTime":case"String":return typeof t=="string"?t:void 0;case"Boolean":return typeof t=="boolean"?t:void 0;case"Bytes":case"Json":return;case"Decimal":case"Float":case"Int":return typeof t=="number"?t:void 0;default:throw new Error(`Unhandled discriminated union member: ${JSON.stringify(e.type)}`)}}},"getDefaultValue"),O=a(e=>{if(e==="DateTime")return"date-time"},"getFormatByDMMFType"),m=a((e,{persistOriginalType:t,schemaId:r})=>{const n=e.isRequired||e.isList;D.equal(typeof e.type,"string");const s=`#/definitions/${e.type}`,i={$ref:r?`${r}${s}`:s};return n?i:{anyOf:[i,{type:"null"}],...t&&{originalType:e.type}}},"getJSONSchemaForPropertyReference"),T=a((e,t)=>{if(!(e.kind==="scalar"&&!e.isList||e.kind==="enum"))return e.kind==="scalar"&&e.isList?{type:d(e.type)}:m(e,t)},"getItemsByDMMFType"),k=a(e=>e.kind!=="scalar"&&!e.isList&&e.kind!=="enum","isSingleReference"),B=a(e=>t=>{const r=e.enums.find(({name:n})=>n===t.type);if(r)return r.values.map(n=>n.name)},"getEnumListByDMMFType"),v=a(e=>e.documentation,"getDescription"),F=a((e,t,r)=>{const n=h(r),s=O(r.type),i=T(r,t),c=B(e)(r),l=b(r),y=v(r);return{type:n,...t.persistOriginalType&&{originalType:r.type},...o(l)&&{default:l},...o(s)&&{format:s},...o(i)&&{items:i},...o(c)&&{enum:c},...o(y)&&{description:y}}},"getPropertyDefinition"),J=a((e,t)=>r=>{const n={hasDefaultValue:r.hasDefaultValue,isScalar:r.kind==="scalar"||r.kind==="enum",required:r.isRequired},s=k(r)?m(r,t):F(e,t,r);return[r.name,s,n]},"getJSONSchemaProperty");module.exports=J;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var b=Object.defineProperty;var d=(r,e)=>b(r,"name",{value:e,configurable:!0});import j from"./getJSONSchemaProperty-BJUSxFNN.mjs";var v=Object.defineProperty,p=d((r,e)=>v(r,"name",{value:e,configurable:!0}),"n");const O=p(r=>r.fields.flatMap(e=>e.relationFromFields??[]),"getRelationScalarFields"),u=p((r,e)=>t=>{const i=t.fields.map(j(r,e)),o=i.map(([a,s])=>[a,s]),c=O(t),m=o.filter(a=>!c.includes(a[0])),l={properties:Object.fromEntries(e.keepRelationScalarFields==="true"?o:m),type:"object"};return e.includeRequiredFields&&(l.required=i.reduce((a,[s,,n])=>(n.required&&n.isScalar&&!n.hasDefaultValue&&a.push(s),a),[])),[t.name,l]},"getJSONSchemaModel");var g=Object.defineProperty,f=d((r,e)=>g(r,"name",{value:e,configurable:!0}),"o");const y=f(r=>r.slice(0,1).toLowerCase()+r.slice(1),"toCamelCase"),S=f(({schemaId:r})=>e=>{const t=`#/definitions/${e.name}`;return[y(e.name),{$ref:r?`${r}${t}`:t}]},"getPropertyDefinition"),D=f((r,e={})=>{const{enums:t=[],models:i=[],types:o=[]}=r.datamodel,c={$schema:"http://json-schema.org/draft-07/schema#",definitions:{},type:"object"},{schemaId:m}=e,l=i.map(u({enums:t},e)),a=o.map(u({enums:t},e)),s=i.map(S(e)),n=Object.fromEntries([...l,...a]),h=Object.fromEntries(s);return{...m?{$id:m}:void 0,...c,definitions:n,properties:h}},"transformDmmf");export{D as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var b=Object.defineProperty;var d=(r,e)=>b(r,"name",{value:e,configurable:!0});const j=require("./getJSONSchemaProperty-DRt6R_Y4.cjs");var S=Object.defineProperty,f=d((r,e)=>S(r,"name",{value:e,configurable:!0}),"n");const g=f(r=>r.fields.flatMap(e=>e.relationFromFields??[]),"getRelationScalarFields"),p=f((r,e)=>t=>{const s=t.fields.map(j(r,e)),o=s.map(([a,i])=>[a,i]),l=g(t),c=o.filter(a=>!l.includes(a[0])),m={properties:Object.fromEntries(e.keepRelationScalarFields==="true"?o:c),type:"object"};return e.includeRequiredFields&&(m.required=s.reduce((a,[i,,n])=>(n.required&&n.isScalar&&!n.hasDefaultValue&&a.push(i),a),[])),[t.name,m]},"getJSONSchemaModel");var v=Object.defineProperty,u=d((r,e)=>v(r,"name",{value:e,configurable:!0}),"o");const y=u(r=>r.slice(0,1).toLowerCase()+r.slice(1),"toCamelCase"),O=u(({schemaId:r})=>e=>{const t=`#/definitions/${e.name}`;return[y(e.name),{$ref:r?`${r}${t}`:t}]},"getPropertyDefinition"),$=u((r,e={})=>{const{enums:t=[],models:s=[],types:o=[]}=r.datamodel,l={$schema:"http://json-schema.org/draft-07/schema#",definitions:{},type:"object"},{schemaId:c}=e,m=s.map(p({enums:t},e)),a=o.map(p({enums:t},e)),i=s.map(O(e)),n=Object.fromEntries([...m,...a]),h=Object.fromEntries(i);return{...c?{$id:c}:void 0,...l,definitions:n,properties:h}},"transformDmmf");module.exports=$;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visulima/prisma-dmmf-transformer",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.32",
|
|
4
4
|
"description": "A generator for Prisma to generate a valid JSON Schema v7.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"anolilab",
|
|
@@ -66,7 +66,8 @@
|
|
|
66
66
|
"LICENSE.md"
|
|
67
67
|
],
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@prisma/generator-helper": "6.
|
|
69
|
+
"@prisma/generator-helper": "6.17.1",
|
|
70
|
+
"type-fest": "5.1.0"
|
|
70
71
|
},
|
|
71
72
|
"peerDependencies": {
|
|
72
73
|
"@prisma/client": "3.* || 4.* || 5.* || 6.*",
|
package/dist/model.d.cts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { DMMF } from "@prisma/generator-helper";
|
|
2
|
-
import type { DefinitionMap, ModelMetaData, TransformOptions } from "./types.d.cts";
|
|
3
|
-
declare const getJSONSchemaModel: (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (model: DMMF.Model) => DefinitionMap;
|
|
4
|
-
export = getJSONSchemaModel;
|
package/dist/model.d.mts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { DMMF } from "@prisma/generator-helper";
|
|
2
|
-
import type { DefinitionMap, ModelMetaData, TransformOptions } from "./types.d.mts";
|
|
3
|
-
declare const getJSONSchemaModel: (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (model: DMMF.Model) => DefinitionMap;
|
|
4
|
-
export default getJSONSchemaModel;
|
package/dist/model.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { DMMF } from "@prisma/generator-helper";
|
|
2
|
-
import type { DefinitionMap, ModelMetaData, TransformOptions } from "./types.d.ts";
|
|
3
|
-
declare const getJSONSchemaModel: (modelMetaData: ModelMetaData, transformOptions: TransformOptions) => (model: DMMF.Model) => DefinitionMap;
|
|
4
|
-
export = getJSONSchemaModel;
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert';
|
|
2
|
-
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
5
|
-
const isDefined = /* @__PURE__ */ __name((value) => value !== void 0 && value !== null, "isDefined");
|
|
6
|
-
const getJSONSchemaScalar = /* @__PURE__ */ __name((fieldType) => {
|
|
7
|
-
switch (fieldType) {
|
|
8
|
-
case "BigInt":
|
|
9
|
-
case "Int": {
|
|
10
|
-
return "integer";
|
|
11
|
-
}
|
|
12
|
-
case "Boolean": {
|
|
13
|
-
return "boolean";
|
|
14
|
-
}
|
|
15
|
-
case "Bytes":
|
|
16
|
-
case "DateTime":
|
|
17
|
-
case "String": {
|
|
18
|
-
return "string";
|
|
19
|
-
}
|
|
20
|
-
case "Decimal":
|
|
21
|
-
case "Float": {
|
|
22
|
-
return "number";
|
|
23
|
-
}
|
|
24
|
-
case "Json": {
|
|
25
|
-
return ["number", "string", "boolean", "object", "array", "null"];
|
|
26
|
-
}
|
|
27
|
-
default: {
|
|
28
|
-
throw new Error(`Unhandled discriminated union member: ${JSON.stringify(fieldType)}`);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}, "getJSONSchemaScalar");
|
|
32
|
-
const getJSONSchemaType = /* @__PURE__ */ __name((field) => {
|
|
33
|
-
const { isList, isRequired, kind, type } = field;
|
|
34
|
-
let scalarFieldType = "object";
|
|
35
|
-
if (kind === "scalar" && !isList) {
|
|
36
|
-
scalarFieldType = getJSONSchemaScalar(type);
|
|
37
|
-
} else if (isList) {
|
|
38
|
-
scalarFieldType = "array";
|
|
39
|
-
} else if (kind === "enum") {
|
|
40
|
-
scalarFieldType = "string";
|
|
41
|
-
}
|
|
42
|
-
if (isRequired || isList) {
|
|
43
|
-
return scalarFieldType;
|
|
44
|
-
}
|
|
45
|
-
const isFieldUnion = Array.isArray(scalarFieldType);
|
|
46
|
-
if (isFieldUnion) {
|
|
47
|
-
return [.../* @__PURE__ */ new Set(["null", ...scalarFieldType])];
|
|
48
|
-
}
|
|
49
|
-
return [scalarFieldType, "null"];
|
|
50
|
-
}, "getJSONSchemaType");
|
|
51
|
-
const getDefaultValue = /* @__PURE__ */ __name((field) => {
|
|
52
|
-
const fieldDefault = field.default;
|
|
53
|
-
if (!field.hasDefaultValue) {
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
if (field.kind === "enum") {
|
|
57
|
-
return typeof fieldDefault === "string" ? fieldDefault : null;
|
|
58
|
-
}
|
|
59
|
-
if (field.kind !== "scalar") {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
switch (field.type) {
|
|
63
|
-
case "BigInt":
|
|
64
|
-
case "DateTime":
|
|
65
|
-
case "String": {
|
|
66
|
-
return typeof fieldDefault === "string" ? fieldDefault : null;
|
|
67
|
-
}
|
|
68
|
-
case "Boolean": {
|
|
69
|
-
return typeof fieldDefault === "boolean" ? fieldDefault : null;
|
|
70
|
-
}
|
|
71
|
-
case "Bytes":
|
|
72
|
-
case "Json": {
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
case "Decimal":
|
|
76
|
-
case "Float":
|
|
77
|
-
case "Int": {
|
|
78
|
-
return typeof fieldDefault === "number" ? fieldDefault : null;
|
|
79
|
-
}
|
|
80
|
-
default: {
|
|
81
|
-
throw new Error(`Unhandled discriminated union member: ${JSON.stringify(field.type)}`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}, "getDefaultValue");
|
|
85
|
-
const getFormatByDMMFType = /* @__PURE__ */ __name((fieldType) => {
|
|
86
|
-
if (fieldType === "DateTime") {
|
|
87
|
-
return "date-time";
|
|
88
|
-
}
|
|
89
|
-
return void 0;
|
|
90
|
-
}, "getFormatByDMMFType");
|
|
91
|
-
const getJSONSchemaForPropertyReference = /* @__PURE__ */ __name((field, { persistOriginalType, schemaId }) => {
|
|
92
|
-
const notNullable = field.isRequired || field.isList;
|
|
93
|
-
assert.equal(typeof field.type, "string");
|
|
94
|
-
const typeReference = `#/definitions/${field.type}`;
|
|
95
|
-
const reference = { $ref: schemaId ? `${schemaId}${typeReference}` : typeReference };
|
|
96
|
-
return notNullable ? reference : {
|
|
97
|
-
anyOf: [reference, { type: "null" }],
|
|
98
|
-
...persistOriginalType && {
|
|
99
|
-
originalType: field.type
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
}, "getJSONSchemaForPropertyReference");
|
|
103
|
-
const getItemsByDMMFType = /* @__PURE__ */ __name((field, transformOptions) => {
|
|
104
|
-
if (field.kind === "scalar" && !field.isList || field.kind === "enum") {
|
|
105
|
-
return void 0;
|
|
106
|
-
}
|
|
107
|
-
if (field.kind === "scalar" && field.isList) {
|
|
108
|
-
return { type: getJSONSchemaScalar(field.type) };
|
|
109
|
-
}
|
|
110
|
-
return getJSONSchemaForPropertyReference(field, transformOptions);
|
|
111
|
-
}, "getItemsByDMMFType");
|
|
112
|
-
const isSingleReference = /* @__PURE__ */ __name((field) => field.kind !== "scalar" && !field.isList && field.kind !== "enum", "isSingleReference");
|
|
113
|
-
const getEnumListByDMMFType = /* @__PURE__ */ __name((modelMetaData) => (field) => {
|
|
114
|
-
const enumItem = modelMetaData.enums.find(({ name }) => name === field.type);
|
|
115
|
-
if (!enumItem) {
|
|
116
|
-
return void 0;
|
|
117
|
-
}
|
|
118
|
-
return enumItem.values.map((item) => item.name);
|
|
119
|
-
}, "getEnumListByDMMFType");
|
|
120
|
-
const getDescription = /* @__PURE__ */ __name((field) => field.documentation, "getDescription");
|
|
121
|
-
const getPropertyDefinition = /* @__PURE__ */ __name((modelMetaData, transformOptions, field) => {
|
|
122
|
-
const type = getJSONSchemaType(field);
|
|
123
|
-
const format = getFormatByDMMFType(field.type);
|
|
124
|
-
const items = getItemsByDMMFType(field, transformOptions);
|
|
125
|
-
const enumList = getEnumListByDMMFType(modelMetaData)(field);
|
|
126
|
-
const defaultValue = getDefaultValue(field);
|
|
127
|
-
const description = getDescription(field);
|
|
128
|
-
return {
|
|
129
|
-
type,
|
|
130
|
-
...transformOptions.persistOriginalType && {
|
|
131
|
-
originalType: field.type
|
|
132
|
-
},
|
|
133
|
-
...isDefined(defaultValue) && { default: defaultValue },
|
|
134
|
-
...isDefined(format) && { format },
|
|
135
|
-
...isDefined(items) && { items },
|
|
136
|
-
...isDefined(enumList) && { enum: enumList },
|
|
137
|
-
...isDefined(description) && { description }
|
|
138
|
-
};
|
|
139
|
-
}, "getPropertyDefinition");
|
|
140
|
-
const getJSONSchemaProperty = /* @__PURE__ */ __name((modelMetaData, transformOptions) => (field) => {
|
|
141
|
-
const propertyMetaData = {
|
|
142
|
-
hasDefaultValue: field.hasDefaultValue,
|
|
143
|
-
isScalar: field.kind === "scalar" || field.kind === "enum",
|
|
144
|
-
required: field.isRequired
|
|
145
|
-
};
|
|
146
|
-
const property = isSingleReference(field) ? getJSONSchemaForPropertyReference(field, transformOptions) : getPropertyDefinition(modelMetaData, transformOptions, field);
|
|
147
|
-
return [field.name, property, propertyMetaData];
|
|
148
|
-
}, "getJSONSchemaProperty");
|
|
149
|
-
|
|
150
|
-
export { getJSONSchemaProperty as default };
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('node:assert');
|
|
4
|
-
|
|
5
|
-
const _interopDefaultCompat = e => e && typeof e === 'object' && 'default' in e ? e.default : e;
|
|
6
|
-
|
|
7
|
-
const assert__default = /*#__PURE__*/_interopDefaultCompat(assert);
|
|
8
|
-
|
|
9
|
-
var __defProp = Object.defineProperty;
|
|
10
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
11
|
-
const isDefined = /* @__PURE__ */ __name((value) => value !== void 0 && value !== null, "isDefined");
|
|
12
|
-
const getJSONSchemaScalar = /* @__PURE__ */ __name((fieldType) => {
|
|
13
|
-
switch (fieldType) {
|
|
14
|
-
case "BigInt":
|
|
15
|
-
case "Int": {
|
|
16
|
-
return "integer";
|
|
17
|
-
}
|
|
18
|
-
case "Boolean": {
|
|
19
|
-
return "boolean";
|
|
20
|
-
}
|
|
21
|
-
case "Bytes":
|
|
22
|
-
case "DateTime":
|
|
23
|
-
case "String": {
|
|
24
|
-
return "string";
|
|
25
|
-
}
|
|
26
|
-
case "Decimal":
|
|
27
|
-
case "Float": {
|
|
28
|
-
return "number";
|
|
29
|
-
}
|
|
30
|
-
case "Json": {
|
|
31
|
-
return ["number", "string", "boolean", "object", "array", "null"];
|
|
32
|
-
}
|
|
33
|
-
default: {
|
|
34
|
-
throw new Error(`Unhandled discriminated union member: ${JSON.stringify(fieldType)}`);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}, "getJSONSchemaScalar");
|
|
38
|
-
const getJSONSchemaType = /* @__PURE__ */ __name((field) => {
|
|
39
|
-
const { isList, isRequired, kind, type } = field;
|
|
40
|
-
let scalarFieldType = "object";
|
|
41
|
-
if (kind === "scalar" && !isList) {
|
|
42
|
-
scalarFieldType = getJSONSchemaScalar(type);
|
|
43
|
-
} else if (isList) {
|
|
44
|
-
scalarFieldType = "array";
|
|
45
|
-
} else if (kind === "enum") {
|
|
46
|
-
scalarFieldType = "string";
|
|
47
|
-
}
|
|
48
|
-
if (isRequired || isList) {
|
|
49
|
-
return scalarFieldType;
|
|
50
|
-
}
|
|
51
|
-
const isFieldUnion = Array.isArray(scalarFieldType);
|
|
52
|
-
if (isFieldUnion) {
|
|
53
|
-
return [.../* @__PURE__ */ new Set(["null", ...scalarFieldType])];
|
|
54
|
-
}
|
|
55
|
-
return [scalarFieldType, "null"];
|
|
56
|
-
}, "getJSONSchemaType");
|
|
57
|
-
const getDefaultValue = /* @__PURE__ */ __name((field) => {
|
|
58
|
-
const fieldDefault = field.default;
|
|
59
|
-
if (!field.hasDefaultValue) {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
if (field.kind === "enum") {
|
|
63
|
-
return typeof fieldDefault === "string" ? fieldDefault : null;
|
|
64
|
-
}
|
|
65
|
-
if (field.kind !== "scalar") {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
switch (field.type) {
|
|
69
|
-
case "BigInt":
|
|
70
|
-
case "DateTime":
|
|
71
|
-
case "String": {
|
|
72
|
-
return typeof fieldDefault === "string" ? fieldDefault : null;
|
|
73
|
-
}
|
|
74
|
-
case "Boolean": {
|
|
75
|
-
return typeof fieldDefault === "boolean" ? fieldDefault : null;
|
|
76
|
-
}
|
|
77
|
-
case "Bytes":
|
|
78
|
-
case "Json": {
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
case "Decimal":
|
|
82
|
-
case "Float":
|
|
83
|
-
case "Int": {
|
|
84
|
-
return typeof fieldDefault === "number" ? fieldDefault : null;
|
|
85
|
-
}
|
|
86
|
-
default: {
|
|
87
|
-
throw new Error(`Unhandled discriminated union member: ${JSON.stringify(field.type)}`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}, "getDefaultValue");
|
|
91
|
-
const getFormatByDMMFType = /* @__PURE__ */ __name((fieldType) => {
|
|
92
|
-
if (fieldType === "DateTime") {
|
|
93
|
-
return "date-time";
|
|
94
|
-
}
|
|
95
|
-
return void 0;
|
|
96
|
-
}, "getFormatByDMMFType");
|
|
97
|
-
const getJSONSchemaForPropertyReference = /* @__PURE__ */ __name((field, { persistOriginalType, schemaId }) => {
|
|
98
|
-
const notNullable = field.isRequired || field.isList;
|
|
99
|
-
assert__default.equal(typeof field.type, "string");
|
|
100
|
-
const typeReference = `#/definitions/${field.type}`;
|
|
101
|
-
const reference = { $ref: schemaId ? `${schemaId}${typeReference}` : typeReference };
|
|
102
|
-
return notNullable ? reference : {
|
|
103
|
-
anyOf: [reference, { type: "null" }],
|
|
104
|
-
...persistOriginalType && {
|
|
105
|
-
originalType: field.type
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
}, "getJSONSchemaForPropertyReference");
|
|
109
|
-
const getItemsByDMMFType = /* @__PURE__ */ __name((field, transformOptions) => {
|
|
110
|
-
if (field.kind === "scalar" && !field.isList || field.kind === "enum") {
|
|
111
|
-
return void 0;
|
|
112
|
-
}
|
|
113
|
-
if (field.kind === "scalar" && field.isList) {
|
|
114
|
-
return { type: getJSONSchemaScalar(field.type) };
|
|
115
|
-
}
|
|
116
|
-
return getJSONSchemaForPropertyReference(field, transformOptions);
|
|
117
|
-
}, "getItemsByDMMFType");
|
|
118
|
-
const isSingleReference = /* @__PURE__ */ __name((field) => field.kind !== "scalar" && !field.isList && field.kind !== "enum", "isSingleReference");
|
|
119
|
-
const getEnumListByDMMFType = /* @__PURE__ */ __name((modelMetaData) => (field) => {
|
|
120
|
-
const enumItem = modelMetaData.enums.find(({ name }) => name === field.type);
|
|
121
|
-
if (!enumItem) {
|
|
122
|
-
return void 0;
|
|
123
|
-
}
|
|
124
|
-
return enumItem.values.map((item) => item.name);
|
|
125
|
-
}, "getEnumListByDMMFType");
|
|
126
|
-
const getDescription = /* @__PURE__ */ __name((field) => field.documentation, "getDescription");
|
|
127
|
-
const getPropertyDefinition = /* @__PURE__ */ __name((modelMetaData, transformOptions, field) => {
|
|
128
|
-
const type = getJSONSchemaType(field);
|
|
129
|
-
const format = getFormatByDMMFType(field.type);
|
|
130
|
-
const items = getItemsByDMMFType(field, transformOptions);
|
|
131
|
-
const enumList = getEnumListByDMMFType(modelMetaData)(field);
|
|
132
|
-
const defaultValue = getDefaultValue(field);
|
|
133
|
-
const description = getDescription(field);
|
|
134
|
-
return {
|
|
135
|
-
type,
|
|
136
|
-
...transformOptions.persistOriginalType && {
|
|
137
|
-
originalType: field.type
|
|
138
|
-
},
|
|
139
|
-
...isDefined(defaultValue) && { default: defaultValue },
|
|
140
|
-
...isDefined(format) && { format },
|
|
141
|
-
...isDefined(items) && { items },
|
|
142
|
-
...isDefined(enumList) && { enum: enumList },
|
|
143
|
-
...isDefined(description) && { description }
|
|
144
|
-
};
|
|
145
|
-
}, "getPropertyDefinition");
|
|
146
|
-
const getJSONSchemaProperty = /* @__PURE__ */ __name((modelMetaData, transformOptions) => (field) => {
|
|
147
|
-
const propertyMetaData = {
|
|
148
|
-
hasDefaultValue: field.hasDefaultValue,
|
|
149
|
-
isScalar: field.kind === "scalar" || field.kind === "enum",
|
|
150
|
-
required: field.isRequired
|
|
151
|
-
};
|
|
152
|
-
const property = isSingleReference(field) ? getJSONSchemaForPropertyReference(field, transformOptions) : getPropertyDefinition(modelMetaData, transformOptions, field);
|
|
153
|
-
return [field.name, property, propertyMetaData];
|
|
154
|
-
}, "getJSONSchemaProperty");
|
|
155
|
-
|
|
156
|
-
module.exports = getJSONSchemaProperty;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const getJSONSchemaProperty = require('./getJSONSchemaProperty-E2OXsCgc.cjs');
|
|
4
|
-
|
|
5
|
-
var __defProp$1 = Object.defineProperty;
|
|
6
|
-
var __name$1 = (target, value) => __defProp$1(target, "name", { value, configurable: true });
|
|
7
|
-
const getRelationScalarFields = /* @__PURE__ */ __name$1((model) => model.fields.flatMap((field) => field.relationFromFields ?? []), "getRelationScalarFields");
|
|
8
|
-
const getJSONSchemaModel = /* @__PURE__ */ __name$1((modelMetaData, transformOptions) => (model) => {
|
|
9
|
-
const definitionPropertiesMap = model.fields.map(getJSONSchemaProperty(modelMetaData, transformOptions));
|
|
10
|
-
const propertiesMap = definitionPropertiesMap.map(([name, definition2]) => [name, definition2]);
|
|
11
|
-
const relationScalarFields = getRelationScalarFields(model);
|
|
12
|
-
const propertiesWithoutRelationScalars = propertiesMap.filter((property) => !relationScalarFields.includes(property[0]));
|
|
13
|
-
const properties = Object.fromEntries(transformOptions.keepRelationScalarFields === "true" ? propertiesMap : propertiesWithoutRelationScalars);
|
|
14
|
-
const definition = {
|
|
15
|
-
properties,
|
|
16
|
-
type: "object"
|
|
17
|
-
};
|
|
18
|
-
if (transformOptions.includeRequiredFields) {
|
|
19
|
-
definition.required = definitionPropertiesMap.reduce((filtered, [name, , fieldMetaData]) => {
|
|
20
|
-
if (fieldMetaData.required && fieldMetaData.isScalar && !fieldMetaData.hasDefaultValue) {
|
|
21
|
-
filtered.push(name);
|
|
22
|
-
}
|
|
23
|
-
return filtered;
|
|
24
|
-
}, []);
|
|
25
|
-
}
|
|
26
|
-
return [model.name, definition];
|
|
27
|
-
}, "getJSONSchemaModel");
|
|
28
|
-
|
|
29
|
-
var __defProp = Object.defineProperty;
|
|
30
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
31
|
-
const toCamelCase = /* @__PURE__ */ __name((name) => name.slice(0, 1).toLowerCase() + name.slice(1), "toCamelCase");
|
|
32
|
-
const getPropertyDefinition = /* @__PURE__ */ __name(({ schemaId }) => (model) => {
|
|
33
|
-
const reference = `#/definitions/${model.name}`;
|
|
34
|
-
return [
|
|
35
|
-
toCamelCase(model.name),
|
|
36
|
-
{
|
|
37
|
-
$ref: schemaId ? `${schemaId}${reference}` : reference
|
|
38
|
-
}
|
|
39
|
-
];
|
|
40
|
-
}, "getPropertyDefinition");
|
|
41
|
-
const transformDmmf = /* @__PURE__ */ __name((dmmf, transformOptions = {}) => {
|
|
42
|
-
const { enums = [], models = [], types = [] } = dmmf.datamodel;
|
|
43
|
-
const initialJSON = {
|
|
44
|
-
$schema: "http://json-schema.org/draft-07/schema#",
|
|
45
|
-
definitions: {},
|
|
46
|
-
type: "object"
|
|
47
|
-
};
|
|
48
|
-
const { schemaId } = transformOptions;
|
|
49
|
-
const modelDefinitionsMap = models.map(getJSONSchemaModel({ enums }, transformOptions));
|
|
50
|
-
const typeDefinitionsMap = types.map(getJSONSchemaModel({ enums }, transformOptions));
|
|
51
|
-
const modelPropertyDefinitionsMap = models.map(getPropertyDefinition(transformOptions));
|
|
52
|
-
const definitions = Object.fromEntries([...modelDefinitionsMap, ...typeDefinitionsMap]);
|
|
53
|
-
const properties = Object.fromEntries(modelPropertyDefinitionsMap);
|
|
54
|
-
return {
|
|
55
|
-
...schemaId ? { $id: schemaId } : null,
|
|
56
|
-
...initialJSON,
|
|
57
|
-
definitions,
|
|
58
|
-
properties
|
|
59
|
-
};
|
|
60
|
-
}, "transformDmmf");
|
|
61
|
-
|
|
62
|
-
module.exports = transformDmmf;
|