@orion-js/models 4.0.5 → 4.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +33 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +33 -4
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -73,6 +73,36 @@ var clone_default = clone;
|
|
|
73
73
|
|
|
74
74
|
// src/createModel/modelToSchema.ts
|
|
75
75
|
var import_schema = require("@orion-js/schema");
|
|
76
|
+
|
|
77
|
+
// ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js
|
|
78
|
+
function type(input) {
|
|
79
|
+
if (input === null) {
|
|
80
|
+
return "Null";
|
|
81
|
+
} else if (input === void 0) {
|
|
82
|
+
return "Undefined";
|
|
83
|
+
} else if (Number.isNaN(input)) {
|
|
84
|
+
return "NaN";
|
|
85
|
+
}
|
|
86
|
+
const typeResult = Object.prototype.toString.call(input).slice(8, -1);
|
|
87
|
+
return typeResult === "AsyncFunction" ? "Promise" : typeResult;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js
|
|
91
|
+
function isEmpty(input) {
|
|
92
|
+
const inputType = type(input);
|
|
93
|
+
if (["Undefined", "NaN", "Number", "Null"].includes(inputType))
|
|
94
|
+
return false;
|
|
95
|
+
if (!input) return true;
|
|
96
|
+
if (inputType === "Object") {
|
|
97
|
+
return Object.keys(input).length === 0;
|
|
98
|
+
}
|
|
99
|
+
if (inputType === "Array") {
|
|
100
|
+
return input.length === 0;
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// src/createModel/modelToSchema.ts
|
|
76
106
|
function processModelSchemaKey(schemaNode) {
|
|
77
107
|
if (!schemaNode) return null;
|
|
78
108
|
if (Array.isArray(schemaNode.type)) {
|
|
@@ -80,10 +110,10 @@ function processModelSchemaKey(schemaNode) {
|
|
|
80
110
|
...schemaNode,
|
|
81
111
|
type: schemaNode.type[0]
|
|
82
112
|
});
|
|
83
|
-
const
|
|
113
|
+
const type2 = processedItem.type;
|
|
84
114
|
return {
|
|
85
115
|
...processedItem,
|
|
86
|
-
type: [
|
|
116
|
+
type: [type2]
|
|
87
117
|
};
|
|
88
118
|
}
|
|
89
119
|
if ((0, import_schema.isSchemaLike)(schemaNode.type)) {
|
|
@@ -108,7 +138,7 @@ function modelToSchema(options) {
|
|
|
108
138
|
if (options.validateOptions) {
|
|
109
139
|
compiledSchema.__validate = options.validateOptions;
|
|
110
140
|
}
|
|
111
|
-
if (options.resolvers) {
|
|
141
|
+
if (options.resolvers && !isEmpty(options.resolvers)) {
|
|
112
142
|
compiledSchema.__resolvers = options.resolvers;
|
|
113
143
|
}
|
|
114
144
|
for (const key in options.modelSchema) {
|
|
@@ -136,7 +166,6 @@ function createModel(modelOptions) {
|
|
|
136
166
|
const getSchema = () => {
|
|
137
167
|
if (!modelOptions.schema) return {};
|
|
138
168
|
if (!resolvedSchema) {
|
|
139
|
-
console.log("getting schema", getResolvers());
|
|
140
169
|
resolvedSchema = modelToSchema({
|
|
141
170
|
modelSchema: modelOptions.schema,
|
|
142
171
|
modelName: model.name,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/createModel/index.ts","../src/createModel/clone.ts","../src/createModel/modelToSchema.ts"],"sourcesContent":["import createModel from './createModel'\nimport {modelToSchema} from './createModel/modelToSchema'\n\nexport {createModel, modelToSchema}\n\nexport * from './types'\n","import {CloneOptions, Model, CreateModelOptions, ModelResolversMap} from '../types'\nimport {validate, clean, Schema} from '@orion-js/schema'\nimport clone from './clone'\nimport {modelToSchema} from './modelToSchema'\n\nexport default function createModel<TSchema extends Schema>(\n modelOptions: CreateModelOptions<TSchema>,\n): Model<TSchema> {\n const name = modelOptions.name\n\n let resolvedResolvers: ModelResolversMap\n const getResolvers = () => {\n if (!modelOptions.resolvers) return {}\n if (!resolvedResolvers) {\n resolvedResolvers = modelOptions.resolvers\n }\n return resolvedResolvers\n }\n\n let resolvedSchema: Schema\n const getSchema = () => {\n if (!modelOptions.schema) return {}\n if (!resolvedSchema) {\n console.log('getting schema', getResolvers())\n resolvedSchema = modelToSchema({\n modelSchema: modelOptions.schema,\n modelName: model.name,\n cleanOptions: modelOptions.clean,\n validateOptions: modelOptions.validate,\n resolvers: getResolvers(),\n })\n }\n return resolvedSchema\n }\n\n const model: Model<TSchema> = {\n __isModel: true,\n __modelName: name,\n name,\n getSchema,\n getResolvers,\n validate: async doc => {\n const schema = getSchema() as any\n return await validate(schema, doc)\n },\n clean: async doc => {\n const schema = getSchema() as any\n return await clean(schema, doc)\n },\n cleanAndValidate: async doc => {\n const schema = getSchema() as any\n const cleaned = (await clean(schema, doc)) as any\n await validate(schema, cleaned)\n return cleaned\n },\n clone: (cloneOptions: CloneOptions) => {\n return clone(\n {\n createModel,\n getSchema,\n getResolvers,\n modelOptions,\n },\n cloneOptions,\n )\n },\n type: null,\n }\n\n return model\n}\n","import {CreateModel, CloneOptions, CreateModelOptions, ModelResolversMap} from '../types'\nimport {clone as deepClone} from '@orion-js/helpers'\nimport {Schema} from '@orion-js/schema'\n\ninterface CloneInfo {\n createModel: CreateModel\n getSchema: () => Schema\n getResolvers: () => ModelResolversMap\n modelOptions: CreateModelOptions\n}\n\nconst clone = (cloneInfo: CloneInfo, options: CloneOptions) => {\n const {createModel, getSchema, getResolvers, modelOptions} = cloneInfo\n return createModel({\n name: options.name,\n clean: modelOptions.clean,\n validate: modelOptions.validate,\n resolvers: (() => {\n if (!options.extendResolvers) return getResolvers()\n\n return {\n ...getResolvers(),\n ...options.extendResolvers,\n } as ModelResolversMap\n })(),\n schema: (() => {\n const oldSchema = deepClone(getSchema())\n const newSchema = {}\n\n const keys = Object.keys(oldSchema)\n .filter(key => {\n if (!options.omitFields) return true\n return !options.omitFields.includes(key)\n })\n .filter(key => {\n if (!options.pickFields) return true\n return options.pickFields.includes(key)\n })\n\n for (const key of keys) {\n const field = oldSchema[key]\n if (options.mapFields) {\n newSchema[key] = options.mapFields(field, key)\n } else {\n newSchema[key] = field\n }\n }\n\n if (!options.extendSchema) return newSchema\n\n const clonedSchema = {\n ...newSchema,\n ...options.extendSchema,\n } as Schema\n\n return clonedSchema\n })(),\n })\n}\n\nexport default clone\n","import {\n getSchemaFromAnyOrionForm,\n getSchemaModelName,\n isSchemaLike,\n Schema,\n SchemaMetaFieldTypeSingle,\n SchemaNode,\n SchemaWithMetadata,\n} from '@orion-js/schema'\nimport {ModelResolversMap} from '../types'\n\nexport function processModelSchemaKey(schemaNode: SchemaNode): SchemaNode {\n if (!schemaNode) return null\n\n if (Array.isArray(schemaNode.type)) {\n const processedItem = processModelSchemaKey({\n ...schemaNode,\n type: schemaNode.type[0],\n })\n\n const type = processedItem.type as SchemaMetaFieldTypeSingle\n\n return {\n ...processedItem,\n type: [type],\n }\n }\n\n if (isSchemaLike(schemaNode.type)) {\n return {\n ...schemaNode,\n type: modelToSchema({\n modelSchema: getSchemaFromAnyOrionForm(schemaNode.type) as Schema,\n modelName: getSchemaModelName(schemaNode.type),\n }),\n }\n }\n\n return schemaNode\n}\n\ninterface ModelToSchemaOptions {\n modelSchema: Schema\n modelName?: string\n cleanOptions?: any\n validateOptions?: any\n resolvers?: ModelResolversMap\n}\n\nexport function modelToSchema(options: ModelToSchemaOptions): Schema {\n const compiledSchema: SchemaWithMetadata = {}\n\n if (options.modelName) {\n compiledSchema.__modelName = options.modelName\n }\n\n if (options.cleanOptions) {\n compiledSchema.__clean = options.cleanOptions\n }\n\n if (options.validateOptions) {\n compiledSchema.__validate = options.validateOptions\n }\n\n if (options.resolvers) {\n compiledSchema.__resolvers = options.resolvers\n }\n\n for (const key in options.modelSchema) {\n if (key.startsWith('__')) {\n compiledSchema[key] = options.modelSchema[key]\n continue\n }\n compiledSchema[key] = processModelSchemaKey(options.modelSchema[key])\n }\n\n return compiledSchema as Schema\n}\n"],"mappings":"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","names":["import_schema","createModel","deepClone"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/createModel/index.ts","../src/createModel/clone.ts","../src/createModel/modelToSchema.ts","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js"],"sourcesContent":["import createModel from './createModel'\nimport {modelToSchema} from './createModel/modelToSchema'\n\nexport {createModel, modelToSchema}\n\nexport * from './types'\n","import {CloneOptions, Model, CreateModelOptions, ModelResolversMap} from '../types'\nimport {validate, clean, Schema} from '@orion-js/schema'\nimport clone from './clone'\nimport {modelToSchema} from './modelToSchema'\n\nexport default function createModel<TSchema extends Schema>(\n modelOptions: CreateModelOptions<TSchema>,\n): Model<TSchema> {\n const name = modelOptions.name\n\n let resolvedResolvers: ModelResolversMap\n const getResolvers = () => {\n if (!modelOptions.resolvers) return {}\n if (!resolvedResolvers) {\n resolvedResolvers = modelOptions.resolvers\n }\n return resolvedResolvers\n }\n\n let resolvedSchema: Schema\n const getSchema = () => {\n if (!modelOptions.schema) return {}\n if (!resolvedSchema) {\n resolvedSchema = modelToSchema({\n modelSchema: modelOptions.schema,\n modelName: model.name,\n cleanOptions: modelOptions.clean,\n validateOptions: modelOptions.validate,\n resolvers: getResolvers(),\n })\n }\n return resolvedSchema\n }\n\n const model: Model<TSchema> = {\n __isModel: true,\n __modelName: name,\n name,\n getSchema,\n getResolvers,\n validate: async doc => {\n const schema = getSchema() as any\n return await validate(schema, doc)\n },\n clean: async doc => {\n const schema = getSchema() as any\n return await clean(schema, doc)\n },\n cleanAndValidate: async doc => {\n const schema = getSchema() as any\n const cleaned = (await clean(schema, doc)) as any\n await validate(schema, cleaned)\n return cleaned\n },\n clone: (cloneOptions: CloneOptions) => {\n return clone(\n {\n createModel,\n getSchema,\n getResolvers,\n modelOptions,\n },\n cloneOptions,\n )\n },\n type: null,\n }\n\n return model\n}\n","import {CreateModel, CloneOptions, CreateModelOptions, ModelResolversMap} from '../types'\nimport {clone as deepClone} from '@orion-js/helpers'\nimport {Schema} from '@orion-js/schema'\n\ninterface CloneInfo {\n createModel: CreateModel\n getSchema: () => Schema\n getResolvers: () => ModelResolversMap\n modelOptions: CreateModelOptions\n}\n\nconst clone = (cloneInfo: CloneInfo, options: CloneOptions) => {\n const {createModel, getSchema, getResolvers, modelOptions} = cloneInfo\n return createModel({\n name: options.name,\n clean: modelOptions.clean,\n validate: modelOptions.validate,\n resolvers: (() => {\n if (!options.extendResolvers) return getResolvers()\n\n return {\n ...getResolvers(),\n ...options.extendResolvers,\n } as ModelResolversMap\n })(),\n schema: (() => {\n const oldSchema = deepClone(getSchema())\n const newSchema = {}\n\n const keys = Object.keys(oldSchema)\n .filter(key => {\n if (!options.omitFields) return true\n return !options.omitFields.includes(key)\n })\n .filter(key => {\n if (!options.pickFields) return true\n return options.pickFields.includes(key)\n })\n\n for (const key of keys) {\n const field = oldSchema[key]\n if (options.mapFields) {\n newSchema[key] = options.mapFields(field, key)\n } else {\n newSchema[key] = field\n }\n }\n\n if (!options.extendSchema) return newSchema\n\n const clonedSchema = {\n ...newSchema,\n ...options.extendSchema,\n } as Schema\n\n return clonedSchema\n })(),\n })\n}\n\nexport default clone\n","import {\n getSchemaFromAnyOrionForm,\n getSchemaModelName,\n isSchemaLike,\n Schema,\n SchemaMetaFieldTypeSingle,\n SchemaNode,\n SchemaWithMetadata,\n} from '@orion-js/schema'\nimport {ModelResolversMap} from '../types'\nimport {isEmpty} from 'rambdax'\n\nexport function processModelSchemaKey(schemaNode: SchemaNode): SchemaNode {\n if (!schemaNode) return null\n\n if (Array.isArray(schemaNode.type)) {\n const processedItem = processModelSchemaKey({\n ...schemaNode,\n type: schemaNode.type[0],\n })\n\n const type = processedItem.type as SchemaMetaFieldTypeSingle\n\n return {\n ...processedItem,\n type: [type],\n }\n }\n\n if (isSchemaLike(schemaNode.type)) {\n return {\n ...schemaNode,\n type: modelToSchema({\n modelSchema: getSchemaFromAnyOrionForm(schemaNode.type) as Schema,\n modelName: getSchemaModelName(schemaNode.type),\n }),\n }\n }\n\n return schemaNode\n}\n\ninterface ModelToSchemaOptions {\n modelSchema: Schema\n modelName?: string\n cleanOptions?: any\n validateOptions?: any\n resolvers?: ModelResolversMap\n}\n\nexport function modelToSchema(options: ModelToSchemaOptions): Schema {\n const compiledSchema: SchemaWithMetadata = {}\n\n if (options.modelName) {\n compiledSchema.__modelName = options.modelName\n }\n\n if (options.cleanOptions) {\n compiledSchema.__clean = options.cleanOptions\n }\n\n if (options.validateOptions) {\n compiledSchema.__validate = options.validateOptions\n }\n\n if (options.resolvers && !isEmpty(options.resolvers)) {\n compiledSchema.__resolvers = options.resolvers\n }\n\n for (const key in options.modelSchema) {\n if (key.startsWith('__')) {\n compiledSchema[key] = options.modelSchema[key]\n continue\n }\n compiledSchema[key] = processModelSchemaKey(options.modelSchema[key])\n }\n\n return compiledSchema as Schema\n}\n","export function type(input){\n if (input === null){\n return 'Null'\n } else if (input === undefined){\n return 'Undefined'\n } else if (Number.isNaN(input)){\n return 'NaN'\n }\n const typeResult = Object.prototype.toString.call(input).slice(8, -1)\n\n return typeResult === 'AsyncFunction' ? 'Promise' : typeResult\n}\n","import { type } from './type.js'\n\nexport function isEmpty(input){\n const inputType = type(input)\n if ([ 'Undefined', 'NaN', 'Number', 'Null' ].includes(inputType))\n return false\n if (!input) return true\n\n if (inputType === 'Object'){\n return Object.keys(input).length === 0\n }\n\n if (inputType === 'Array'){\n return input.length === 0\n }\n\n return false\n}\n"],"mappings":"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","names":["import_schema","createModel","deepClone","type"]}
|
package/dist/index.js
CHANGED
|
@@ -51,6 +51,36 @@ import {
|
|
|
51
51
|
getSchemaModelName,
|
|
52
52
|
isSchemaLike
|
|
53
53
|
} from "@orion-js/schema";
|
|
54
|
+
|
|
55
|
+
// ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js
|
|
56
|
+
function type(input) {
|
|
57
|
+
if (input === null) {
|
|
58
|
+
return "Null";
|
|
59
|
+
} else if (input === void 0) {
|
|
60
|
+
return "Undefined";
|
|
61
|
+
} else if (Number.isNaN(input)) {
|
|
62
|
+
return "NaN";
|
|
63
|
+
}
|
|
64
|
+
const typeResult = Object.prototype.toString.call(input).slice(8, -1);
|
|
65
|
+
return typeResult === "AsyncFunction" ? "Promise" : typeResult;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js
|
|
69
|
+
function isEmpty(input) {
|
|
70
|
+
const inputType = type(input);
|
|
71
|
+
if (["Undefined", "NaN", "Number", "Null"].includes(inputType))
|
|
72
|
+
return false;
|
|
73
|
+
if (!input) return true;
|
|
74
|
+
if (inputType === "Object") {
|
|
75
|
+
return Object.keys(input).length === 0;
|
|
76
|
+
}
|
|
77
|
+
if (inputType === "Array") {
|
|
78
|
+
return input.length === 0;
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// src/createModel/modelToSchema.ts
|
|
54
84
|
function processModelSchemaKey(schemaNode) {
|
|
55
85
|
if (!schemaNode) return null;
|
|
56
86
|
if (Array.isArray(schemaNode.type)) {
|
|
@@ -58,10 +88,10 @@ function processModelSchemaKey(schemaNode) {
|
|
|
58
88
|
...schemaNode,
|
|
59
89
|
type: schemaNode.type[0]
|
|
60
90
|
});
|
|
61
|
-
const
|
|
91
|
+
const type2 = processedItem.type;
|
|
62
92
|
return {
|
|
63
93
|
...processedItem,
|
|
64
|
-
type: [
|
|
94
|
+
type: [type2]
|
|
65
95
|
};
|
|
66
96
|
}
|
|
67
97
|
if (isSchemaLike(schemaNode.type)) {
|
|
@@ -86,7 +116,7 @@ function modelToSchema(options) {
|
|
|
86
116
|
if (options.validateOptions) {
|
|
87
117
|
compiledSchema.__validate = options.validateOptions;
|
|
88
118
|
}
|
|
89
|
-
if (options.resolvers) {
|
|
119
|
+
if (options.resolvers && !isEmpty(options.resolvers)) {
|
|
90
120
|
compiledSchema.__resolvers = options.resolvers;
|
|
91
121
|
}
|
|
92
122
|
for (const key in options.modelSchema) {
|
|
@@ -114,7 +144,6 @@ function createModel(modelOptions) {
|
|
|
114
144
|
const getSchema = () => {
|
|
115
145
|
if (!modelOptions.schema) return {};
|
|
116
146
|
if (!resolvedSchema) {
|
|
117
|
-
console.log("getting schema", getResolvers());
|
|
118
147
|
resolvedSchema = modelToSchema({
|
|
119
148
|
modelSchema: modelOptions.schema,
|
|
120
149
|
modelName: model.name,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/createModel/index.ts","../src/createModel/clone.ts","../src/createModel/modelToSchema.ts"],"sourcesContent":["import {CloneOptions, Model, CreateModelOptions, ModelResolversMap} from '../types'\nimport {validate, clean, Schema} from '@orion-js/schema'\nimport clone from './clone'\nimport {modelToSchema} from './modelToSchema'\n\nexport default function createModel<TSchema extends Schema>(\n modelOptions: CreateModelOptions<TSchema>,\n): Model<TSchema> {\n const name = modelOptions.name\n\n let resolvedResolvers: ModelResolversMap\n const getResolvers = () => {\n if (!modelOptions.resolvers) return {}\n if (!resolvedResolvers) {\n resolvedResolvers = modelOptions.resolvers\n }\n return resolvedResolvers\n }\n\n let resolvedSchema: Schema\n const getSchema = () => {\n if (!modelOptions.schema) return {}\n if (!resolvedSchema) {\n console.log('getting schema', getResolvers())\n resolvedSchema = modelToSchema({\n modelSchema: modelOptions.schema,\n modelName: model.name,\n cleanOptions: modelOptions.clean,\n validateOptions: modelOptions.validate,\n resolvers: getResolvers(),\n })\n }\n return resolvedSchema\n }\n\n const model: Model<TSchema> = {\n __isModel: true,\n __modelName: name,\n name,\n getSchema,\n getResolvers,\n validate: async doc => {\n const schema = getSchema() as any\n return await validate(schema, doc)\n },\n clean: async doc => {\n const schema = getSchema() as any\n return await clean(schema, doc)\n },\n cleanAndValidate: async doc => {\n const schema = getSchema() as any\n const cleaned = (await clean(schema, doc)) as any\n await validate(schema, cleaned)\n return cleaned\n },\n clone: (cloneOptions: CloneOptions) => {\n return clone(\n {\n createModel,\n getSchema,\n getResolvers,\n modelOptions,\n },\n cloneOptions,\n )\n },\n type: null,\n }\n\n return model\n}\n","import {CreateModel, CloneOptions, CreateModelOptions, ModelResolversMap} from '../types'\nimport {clone as deepClone} from '@orion-js/helpers'\nimport {Schema} from '@orion-js/schema'\n\ninterface CloneInfo {\n createModel: CreateModel\n getSchema: () => Schema\n getResolvers: () => ModelResolversMap\n modelOptions: CreateModelOptions\n}\n\nconst clone = (cloneInfo: CloneInfo, options: CloneOptions) => {\n const {createModel, getSchema, getResolvers, modelOptions} = cloneInfo\n return createModel({\n name: options.name,\n clean: modelOptions.clean,\n validate: modelOptions.validate,\n resolvers: (() => {\n if (!options.extendResolvers) return getResolvers()\n\n return {\n ...getResolvers(),\n ...options.extendResolvers,\n } as ModelResolversMap\n })(),\n schema: (() => {\n const oldSchema = deepClone(getSchema())\n const newSchema = {}\n\n const keys = Object.keys(oldSchema)\n .filter(key => {\n if (!options.omitFields) return true\n return !options.omitFields.includes(key)\n })\n .filter(key => {\n if (!options.pickFields) return true\n return options.pickFields.includes(key)\n })\n\n for (const key of keys) {\n const field = oldSchema[key]\n if (options.mapFields) {\n newSchema[key] = options.mapFields(field, key)\n } else {\n newSchema[key] = field\n }\n }\n\n if (!options.extendSchema) return newSchema\n\n const clonedSchema = {\n ...newSchema,\n ...options.extendSchema,\n } as Schema\n\n return clonedSchema\n })(),\n })\n}\n\nexport default clone\n","import {\n getSchemaFromAnyOrionForm,\n getSchemaModelName,\n isSchemaLike,\n Schema,\n SchemaMetaFieldTypeSingle,\n SchemaNode,\n SchemaWithMetadata,\n} from '@orion-js/schema'\nimport {ModelResolversMap} from '../types'\n\nexport function processModelSchemaKey(schemaNode: SchemaNode): SchemaNode {\n if (!schemaNode) return null\n\n if (Array.isArray(schemaNode.type)) {\n const processedItem = processModelSchemaKey({\n ...schemaNode,\n type: schemaNode.type[0],\n })\n\n const type = processedItem.type as SchemaMetaFieldTypeSingle\n\n return {\n ...processedItem,\n type: [type],\n }\n }\n\n if (isSchemaLike(schemaNode.type)) {\n return {\n ...schemaNode,\n type: modelToSchema({\n modelSchema: getSchemaFromAnyOrionForm(schemaNode.type) as Schema,\n modelName: getSchemaModelName(schemaNode.type),\n }),\n }\n }\n\n return schemaNode\n}\n\ninterface ModelToSchemaOptions {\n modelSchema: Schema\n modelName?: string\n cleanOptions?: any\n validateOptions?: any\n resolvers?: ModelResolversMap\n}\n\nexport function modelToSchema(options: ModelToSchemaOptions): Schema {\n const compiledSchema: SchemaWithMetadata = {}\n\n if (options.modelName) {\n compiledSchema.__modelName = options.modelName\n }\n\n if (options.cleanOptions) {\n compiledSchema.__clean = options.cleanOptions\n }\n\n if (options.validateOptions) {\n compiledSchema.__validate = options.validateOptions\n }\n\n if (options.resolvers) {\n compiledSchema.__resolvers = options.resolvers\n }\n\n for (const key in options.modelSchema) {\n if (key.startsWith('__')) {\n compiledSchema[key] = options.modelSchema[key]\n continue\n }\n compiledSchema[key] = processModelSchemaKey(options.modelSchema[key])\n }\n\n return compiledSchema as Schema\n}\n"],"mappings":"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","names":["createModel"]}
|
|
1
|
+
{"version":3,"sources":["../src/createModel/index.ts","../src/createModel/clone.ts","../src/createModel/modelToSchema.ts","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js"],"sourcesContent":["import {CloneOptions, Model, CreateModelOptions, ModelResolversMap} from '../types'\nimport {validate, clean, Schema} from '@orion-js/schema'\nimport clone from './clone'\nimport {modelToSchema} from './modelToSchema'\n\nexport default function createModel<TSchema extends Schema>(\n modelOptions: CreateModelOptions<TSchema>,\n): Model<TSchema> {\n const name = modelOptions.name\n\n let resolvedResolvers: ModelResolversMap\n const getResolvers = () => {\n if (!modelOptions.resolvers) return {}\n if (!resolvedResolvers) {\n resolvedResolvers = modelOptions.resolvers\n }\n return resolvedResolvers\n }\n\n let resolvedSchema: Schema\n const getSchema = () => {\n if (!modelOptions.schema) return {}\n if (!resolvedSchema) {\n resolvedSchema = modelToSchema({\n modelSchema: modelOptions.schema,\n modelName: model.name,\n cleanOptions: modelOptions.clean,\n validateOptions: modelOptions.validate,\n resolvers: getResolvers(),\n })\n }\n return resolvedSchema\n }\n\n const model: Model<TSchema> = {\n __isModel: true,\n __modelName: name,\n name,\n getSchema,\n getResolvers,\n validate: async doc => {\n const schema = getSchema() as any\n return await validate(schema, doc)\n },\n clean: async doc => {\n const schema = getSchema() as any\n return await clean(schema, doc)\n },\n cleanAndValidate: async doc => {\n const schema = getSchema() as any\n const cleaned = (await clean(schema, doc)) as any\n await validate(schema, cleaned)\n return cleaned\n },\n clone: (cloneOptions: CloneOptions) => {\n return clone(\n {\n createModel,\n getSchema,\n getResolvers,\n modelOptions,\n },\n cloneOptions,\n )\n },\n type: null,\n }\n\n return model\n}\n","import {CreateModel, CloneOptions, CreateModelOptions, ModelResolversMap} from '../types'\nimport {clone as deepClone} from '@orion-js/helpers'\nimport {Schema} from '@orion-js/schema'\n\ninterface CloneInfo {\n createModel: CreateModel\n getSchema: () => Schema\n getResolvers: () => ModelResolversMap\n modelOptions: CreateModelOptions\n}\n\nconst clone = (cloneInfo: CloneInfo, options: CloneOptions) => {\n const {createModel, getSchema, getResolvers, modelOptions} = cloneInfo\n return createModel({\n name: options.name,\n clean: modelOptions.clean,\n validate: modelOptions.validate,\n resolvers: (() => {\n if (!options.extendResolvers) return getResolvers()\n\n return {\n ...getResolvers(),\n ...options.extendResolvers,\n } as ModelResolversMap\n })(),\n schema: (() => {\n const oldSchema = deepClone(getSchema())\n const newSchema = {}\n\n const keys = Object.keys(oldSchema)\n .filter(key => {\n if (!options.omitFields) return true\n return !options.omitFields.includes(key)\n })\n .filter(key => {\n if (!options.pickFields) return true\n return options.pickFields.includes(key)\n })\n\n for (const key of keys) {\n const field = oldSchema[key]\n if (options.mapFields) {\n newSchema[key] = options.mapFields(field, key)\n } else {\n newSchema[key] = field\n }\n }\n\n if (!options.extendSchema) return newSchema\n\n const clonedSchema = {\n ...newSchema,\n ...options.extendSchema,\n } as Schema\n\n return clonedSchema\n })(),\n })\n}\n\nexport default clone\n","import {\n getSchemaFromAnyOrionForm,\n getSchemaModelName,\n isSchemaLike,\n Schema,\n SchemaMetaFieldTypeSingle,\n SchemaNode,\n SchemaWithMetadata,\n} from '@orion-js/schema'\nimport {ModelResolversMap} from '../types'\nimport {isEmpty} from 'rambdax'\n\nexport function processModelSchemaKey(schemaNode: SchemaNode): SchemaNode {\n if (!schemaNode) return null\n\n if (Array.isArray(schemaNode.type)) {\n const processedItem = processModelSchemaKey({\n ...schemaNode,\n type: schemaNode.type[0],\n })\n\n const type = processedItem.type as SchemaMetaFieldTypeSingle\n\n return {\n ...processedItem,\n type: [type],\n }\n }\n\n if (isSchemaLike(schemaNode.type)) {\n return {\n ...schemaNode,\n type: modelToSchema({\n modelSchema: getSchemaFromAnyOrionForm(schemaNode.type) as Schema,\n modelName: getSchemaModelName(schemaNode.type),\n }),\n }\n }\n\n return schemaNode\n}\n\ninterface ModelToSchemaOptions {\n modelSchema: Schema\n modelName?: string\n cleanOptions?: any\n validateOptions?: any\n resolvers?: ModelResolversMap\n}\n\nexport function modelToSchema(options: ModelToSchemaOptions): Schema {\n const compiledSchema: SchemaWithMetadata = {}\n\n if (options.modelName) {\n compiledSchema.__modelName = options.modelName\n }\n\n if (options.cleanOptions) {\n compiledSchema.__clean = options.cleanOptions\n }\n\n if (options.validateOptions) {\n compiledSchema.__validate = options.validateOptions\n }\n\n if (options.resolvers && !isEmpty(options.resolvers)) {\n compiledSchema.__resolvers = options.resolvers\n }\n\n for (const key in options.modelSchema) {\n if (key.startsWith('__')) {\n compiledSchema[key] = options.modelSchema[key]\n continue\n }\n compiledSchema[key] = processModelSchemaKey(options.modelSchema[key])\n }\n\n return compiledSchema as Schema\n}\n","export function type(input){\n if (input === null){\n return 'Null'\n } else if (input === undefined){\n return 'Undefined'\n } else if (Number.isNaN(input)){\n return 'NaN'\n }\n const typeResult = Object.prototype.toString.call(input).slice(8, -1)\n\n return typeResult === 'AsyncFunction' ? 'Promise' : typeResult\n}\n","import { type } from './type.js'\n\nexport function isEmpty(input){\n const inputType = type(input)\n if ([ 'Undefined', 'NaN', 'Number', 'Null' ].includes(inputType))\n return false\n if (!input) return true\n\n if (inputType === 'Object'){\n return Object.keys(input).length === 0\n }\n\n if (inputType === 'Array'){\n return input.length === 0\n }\n\n return false\n}\n"],"mappings":"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","names":["createModel","type"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orion-js/models",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.7",
|
|
4
4
|
"main": "./dist/index.cjs",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
"author": "nicolaslopezj",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"@orion-js/schema": "4.0.5",
|
|
12
13
|
"@orion-js/helpers": "4.0.1",
|
|
13
|
-
"@orion-js/resolvers": "4.0.
|
|
14
|
-
"@orion-js/schema": "4.0.4"
|
|
14
|
+
"@orion-js/resolvers": "4.0.5"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@types/node": "^18.0.0",
|