@orion-js/typed-model 4.0.0-next.2 → 4.0.0-next.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Orionjs Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/index.cjs CHANGED
@@ -4,7 +4,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
7
  var __export = (target, all) => {
9
8
  for (var name in all)
10
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -41,35 +40,33 @@ __export(index_exports, {
41
40
  module.exports = __toCommonJS(index_exports);
42
41
 
43
42
  // src/errors/CannotDetermineType.ts
44
- var _CannotDetermineTypeError = class _CannotDetermineTypeError extends Error {
43
+ var CannotDetermineTypeError = class extends Error {
45
44
  constructor(schemaName, propertyKey) {
46
- super(`Cannot determine type at "${schemaName}.${propertyKey}" field (object/union/ambiguous type was used). Make sure your property decorator defines a "type" option. For example: "@Prop({ type: {name: String, age: Number} })"`);
45
+ super(
46
+ `Cannot determine type at "${schemaName}.${propertyKey}" field (object/union/ambiguous type was used). Make sure your property decorator defines a "type" option. For example: "@Prop({ type: {name: String, age: Number} })"`
47
+ );
47
48
  }
48
49
  };
49
- __name(_CannotDetermineTypeError, "CannotDetermineTypeError");
50
- var CannotDetermineTypeError = _CannotDetermineTypeError;
51
50
 
52
51
  // src/errors/CannotUseArray.ts
53
- var _CannotUseArrayError = class _CannotUseArrayError extends Error {
52
+ var CannotUseArrayError = class extends Error {
54
53
  constructor(schemaName, propertyKey) {
55
- super(`Cannot infer type from an Array TypeScript type at "${schemaName}.${propertyKey}" field. Make sure your property decorator defines a "type" option. For example: "@Prop({ type: [String | Number | ...] })"`);
54
+ super(
55
+ `Cannot infer type from an Array TypeScript type at "${schemaName}.${propertyKey}" field. Make sure your property decorator defines a "type" option. For example: "@Prop({ type: [String | Number | ...] })"`
56
+ );
56
57
  }
57
58
  };
58
- __name(_CannotUseArrayError, "CannotUseArrayError");
59
- var CannotUseArrayError = _CannotUseArrayError;
60
59
 
61
60
  // src/errors/PropertyAlreadyExists.ts
62
- var _PropertyAlreadyExistsError = class _PropertyAlreadyExistsError extends Error {
61
+ var PropertyAlreadyExistsError = class extends Error {
63
62
  constructor(schemaName, propertyName) {
64
63
  super(`Schema with name "${schemaName}" already contains property "${propertyName}".`);
65
64
  }
66
65
  };
67
- __name(_PropertyAlreadyExistsError, "PropertyAlreadyExistsError");
68
- var PropertyAlreadyExistsError = _PropertyAlreadyExistsError;
69
66
 
70
67
  // src/storage/metadataStorage.ts
71
68
  var import_helpers = require("@orion-js/helpers");
72
- var _MetadataStorageHandler = class _MetadataStorageHandler {
69
+ var MetadataStorageHandler = class {
73
70
  schemas = /* @__PURE__ */ new Map();
74
71
  getSchema(target) {
75
72
  const schema = this.schemas.get(target.__schemaId);
@@ -89,7 +86,11 @@ var _MetadataStorageHandler = class _MetadataStorageHandler {
89
86
  const schema = this.getSchema(target);
90
87
  schema.options = options;
91
88
  }
92
- addPropMetadata({ target, propertyKey, options }) {
89
+ addPropMetadata({
90
+ target,
91
+ propertyKey,
92
+ options
93
+ }) {
93
94
  const schema = this.getSchema(target);
94
95
  const currProp = schema.properties[propertyKey];
95
96
  if (currProp) {
@@ -97,7 +98,11 @@ var _MetadataStorageHandler = class _MetadataStorageHandler {
97
98
  }
98
99
  schema.properties[propertyKey] = options;
99
100
  }
100
- addResolverMetadata({ target, propertyKey, options }) {
101
+ addResolverMetadata({
102
+ target,
103
+ propertyKey,
104
+ options
105
+ }) {
101
106
  const schema = this.getSchema(target);
102
107
  const currResolver = schema.resolvers[propertyKey];
103
108
  if (currResolver) {
@@ -114,39 +119,29 @@ var _MetadataStorageHandler = class _MetadataStorageHandler {
114
119
  return schema.resolvers;
115
120
  }
116
121
  };
117
- __name(_MetadataStorageHandler, "MetadataStorageHandler");
118
- var MetadataStorageHandler = _MetadataStorageHandler;
119
122
  var MetadataStorage = new MetadataStorageHandler();
120
123
 
121
124
  // src/decorators/typedModel.ts
122
125
  function TypedModel(options = {}) {
123
126
  return (target) => {
124
- MetadataStorage.addSchemaMetadata({
125
- target,
126
- options
127
- });
127
+ MetadataStorage.addSchemaMetadata({ target, options });
128
128
  target.getModel = () => getModelForClass(target);
129
129
  };
130
130
  }
131
- __name(TypedModel, "TypedModel");
132
131
 
133
132
  // src/decorators/typedSchema.ts
134
133
  function TypedSchema(options = {}) {
135
134
  return (target) => {
136
- MetadataStorage.addSchemaMetadata({
137
- target,
138
- options
139
- });
135
+ MetadataStorage.addSchemaMetadata({ target, options });
140
136
  target.getModel = () => getModelForClass(target);
141
137
  };
142
138
  }
143
- __name(TypedSchema, "TypedSchema");
144
139
 
145
140
  // src/decorators/prop.ts
146
141
  var import_reflect_metadata = require("reflect-metadata");
147
142
 
148
143
  // src/utils/isClass.ts
149
- var isClass = /* @__PURE__ */ __name((type) => /^class\s/.test(Function.prototype.toString.call(type)), "isClass");
144
+ var isClass = (type) => /^class\s/.test(Function.prototype.toString.call(type));
150
145
 
151
146
  // src/decorators/prop.ts
152
147
  function Prop(options = {}) {
@@ -167,65 +162,39 @@ function Prop(options = {}) {
167
162
  throw new CannotDetermineTypeError(schemaName, propertyKey);
168
163
  }
169
164
  }
170
- MetadataStorage.addPropMetadata({
171
- target: classDef.constructor,
172
- propertyKey,
173
- options
174
- });
165
+ MetadataStorage.addPropMetadata({ target: classDef.constructor, propertyKey, options });
175
166
  classDef[propertyKey] = options;
176
167
  };
177
168
  }
178
- __name(Prop, "Prop");
179
169
 
180
170
  // src/decorators/resolver.ts
181
171
  function ResolverProp(options) {
182
172
  return (classDef, propertyKey) => {
183
- MetadataStorage.addResolverMetadata({
184
- target: classDef.constructor,
185
- propertyKey,
186
- options
187
- });
173
+ MetadataStorage.addResolverMetadata({ target: classDef.constructor, propertyKey, options });
188
174
  classDef[propertyKey] = options;
189
175
  };
190
176
  }
191
- __name(ResolverProp, "ResolverProp");
192
177
 
193
178
  // src/factories/helpers/processSchemaForProp.ts
194
179
  var import_isPlainObject = __toESM(require("lodash/isPlainObject"), 1);
195
180
  function isPrimitive(type) {
196
- return [
197
- Boolean,
198
- Number,
199
- String,
200
- Date
201
- ].includes(type);
181
+ return [Boolean, Number, String, Date].includes(type);
202
182
  }
203
- __name(isPrimitive, "isPrimitive");
204
183
  function processSchemaForProp(prop) {
205
184
  var _a;
206
185
  if (typeof ((_a = prop.type) == null ? void 0 : _a.type) === "function") {
207
186
  return processSchemaForProp(prop.type);
208
187
  }
209
188
  if (Array.isArray(prop.type)) {
210
- return prop.type.length > 0 ? {
211
- ...prop,
212
- type: [
213
- processSchemaForProp(prop.type[0])
214
- ]
215
- } : prop;
189
+ return prop.type.length > 0 ? { ...prop, type: [processSchemaForProp(prop.type[0])] } : prop;
216
190
  }
217
191
  if (typeof prop.type !== "function") {
218
192
  if ((0, import_isPlainObject.default)(prop.type)) {
219
193
  const subschema = {};
220
194
  Object.keys(prop.type).forEach((key) => {
221
- subschema[key] = processSchemaForProp({
222
- type: prop.type[key]
223
- });
195
+ subschema[key] = processSchemaForProp({ type: prop.type[key] });
224
196
  });
225
- return {
226
- ...prop,
227
- type: subschema
228
- };
197
+ return { ...prop, type: subschema };
229
198
  }
230
199
  return prop;
231
200
  }
@@ -241,7 +210,6 @@ function processSchemaForProp(prop) {
241
210
  }
242
211
  return prop;
243
212
  }
244
- __name(processSchemaForProp, "processSchemaForProp");
245
213
  function getSchemaForClassRecursive(target) {
246
214
  const schema = {};
247
215
  let parent = target;
@@ -261,13 +229,11 @@ function getSchemaForClassRecursive(target) {
261
229
  }
262
230
  return schema;
263
231
  }
264
- __name(getSchemaForClassRecursive, "getSchemaForClassRecursive");
265
232
 
266
233
  // src/factories/getSchemaForClass.ts
267
234
  function getSchemaForClass(target) {
268
235
  return getSchemaForClassRecursive(target);
269
236
  }
270
- __name(getSchemaForClass, "getSchemaForClass");
271
237
 
272
238
  // src/factories/getModelForClass.ts
273
239
  var import_models = require("@orion-js/models");
@@ -282,7 +248,6 @@ function processModelSchemaForProp(prop) {
282
248
  }
283
249
  return processSchemaForProp(prop);
284
250
  }
285
- __name(processModelSchemaForProp, "processModelSchemaForProp");
286
251
  function getModelForClass(target) {
287
252
  const targetAsModel = target;
288
253
  if (targetAsModel.__isModel) {
@@ -327,7 +292,6 @@ function getModelForClass(target) {
327
292
  modelCache.set(schemaId, model);
328
293
  return model;
329
294
  }
330
- __name(getModelForClass, "getModelForClass");
331
295
 
332
296
  // src/factories/cloneSchemaClass.ts
333
297
  function cloneSchemaClass(schema, options) {
@@ -340,7 +304,6 @@ function cloneSchemaClass(schema, options) {
340
304
  });
341
305
  return newModel;
342
306
  }
343
- __name(cloneSchemaClass, "cloneSchemaClass");
344
307
  // Annotate the CommonJS export names for ESM import in node:
345
308
  0 && (module.exports = {
346
309
  Prop,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/errors/CannotDetermineType.ts","../src/errors/CannotUseArray.ts","../src/errors/PropertyAlreadyExists.ts","../src/storage/metadataStorage.ts","../src/decorators/typedModel.ts","../src/decorators/typedSchema.ts","../src/decorators/prop.ts","../src/utils/isClass.ts","../src/decorators/resolver.ts","../src/factories/helpers/processSchemaForProp.ts","../src/factories/getSchemaForClass.ts","../src/factories/getModelForClass.ts","../src/factories/cloneSchemaClass.ts"],"sourcesContent":["export * from './decorators'\nexport * from './factories'\n","export class CannotDetermineTypeError extends Error {\n constructor(schemaName: string, propertyKey: string) {\n super(\n `Cannot determine type at \"${schemaName}.${propertyKey}\" field (object/union/ambiguous type was used). Make sure your property decorator defines a \"type\" option. For example: \"@Prop({ type: {name: String, age: Number} })\"`\n )\n }\n}\n","export class CannotUseArrayError extends Error {\n constructor(schemaName: string, propertyKey: string) {\n super(\n `Cannot infer type from an Array TypeScript type at \"${schemaName}.${propertyKey}\" field. Make sure your property decorator defines a \"type\" option. For example: \"@Prop({ type: [String | Number | ...] })\"`\n )\n }\n}\n","export class PropertyAlreadyExistsError extends Error {\n constructor(schemaName: string, propertyName: string) {\n super(`Schema with name \"${schemaName}\" already contains property \"${propertyName}\".`)\n }\n}\n","import {PropOptions} from '..'\nimport {PropertyAlreadyExistsError} from '../errors'\nimport {ModelResolversMap} from '@orion-js/models'\nimport {ModelResolver, ModelResolverResolve} from '@orion-js/resolvers'\nimport {generateId} from '@orion-js/helpers'\n\nexport type PropertiesMap = {[key: string]: PropOptions}\n\ninterface SchemaStorage {\n schema: any\n options: object\n properties: PropertiesMap\n resolvers: ModelResolversMap\n}\n\nexport type TypedModelOptions = Record<string, never>\n\nexport class MetadataStorageHandler {\n private schemas = new Map<any, SchemaStorage>()\n\n private getSchema(target) {\n const schema = this.schemas.get(target.__schemaId)\n if (schema) return schema\n\n const schemaId = generateId()\n\n target.__schemaId = schemaId\n\n const newSchema = {\n schema: target,\n options: {},\n properties: {},\n resolvers: {}\n }\n this.schemas.set(target.__schemaId, newSchema)\n return newSchema\n }\n\n public addSchemaMetadata({target, options}: {target: any; options?: TypedModelOptions}) {\n const schema = this.getSchema(target)\n schema.options = options\n }\n\n public addPropMetadata({\n target,\n propertyKey,\n options\n }: {\n target: any\n propertyKey: string\n options: PropOptions\n }) {\n const schema = this.getSchema(target)\n\n const currProp = schema.properties[propertyKey]\n if (currProp) {\n throw new PropertyAlreadyExistsError(target.name, propertyKey)\n }\n schema.properties[propertyKey] = options\n }\n\n public addResolverMetadata({\n target,\n propertyKey,\n options\n }: {\n target: any\n propertyKey: string\n options: ModelResolver<ModelResolverResolve>\n }) {\n const schema = this.getSchema(target)\n\n const currResolver = schema.resolvers[propertyKey]\n if (currResolver) {\n throw new PropertyAlreadyExistsError(target.name, propertyKey)\n }\n schema.resolvers[propertyKey] = options\n }\n\n public getSchemaProps(target: any): PropertiesMap | undefined {\n const schema = this.getSchema(target)\n\n return schema.properties\n }\n\n public getSchemaResolvers(target: any): ModelResolversMap | undefined {\n const schema = this.getSchema(target)\n\n return schema.resolvers\n }\n}\n\nexport const MetadataStorage = new MetadataStorageHandler()\n","import {getModelForClass} from '..'\nimport {MetadataStorage, TypedModelOptions} from '../storage/metadataStorage'\n\n/**\n * @deprecated Please use @TypedSchema instead\n */\nexport function TypedModel(options: TypedModelOptions = {}): ClassDecorator {\n return target => {\n MetadataStorage.addSchemaMetadata({target, options})\n\n // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass\n target.getModel = () => getModelForClass(target)\n }\n}\n","import {getModelForClass} from '..'\nimport {MetadataStorage, TypedModelOptions} from '../storage/metadataStorage'\n\nexport function TypedSchema(options: TypedModelOptions = {}): ClassDecorator {\n return target => {\n MetadataStorage.addSchemaMetadata({target, options})\n\n // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass\n target.getModel = () => getModelForClass(target)\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {Constructor, SchemaMetaFieldType, SchemaNode} from '@orion-js/schema'\nimport {MetadataStorage} from '../storage/metadataStorage'\nimport 'reflect-metadata'\nimport {CannotDetermineTypeError, CannotUseArrayError} from '../errors'\nimport {isClass} from '../utils/isClass'\nimport {Model} from '@orion-js/models'\n\nexport interface SchemaNodeForClasses extends Omit<SchemaNode, 'type'> {\n type: SchemaMetaFieldType | Constructor<any> | Model | Model[]\n}\n\nexport type PropOptions = Partial<SchemaNodeForClasses>\n\nexport function Prop(options: PropOptions = {}): PropertyDecorator {\n return (classDef: Function, propertyKey: string) => {\n const schemaName = classDef.constructor?.name\n\n if (!options.type) {\n const type = Reflect.getMetadata('design:type', classDef, propertyKey)\n\n if (isClass(type) || type === Object) {\n throw new CannotDetermineTypeError(schemaName, propertyKey)\n }\n\n if (type === Array) {\n throw new CannotUseArrayError(schemaName, propertyKey)\n }\n\n if (type) {\n options.type = type\n } else {\n throw new CannotDetermineTypeError(schemaName, propertyKey)\n }\n }\n\n MetadataStorage.addPropMetadata({target: classDef.constructor, propertyKey, options})\n\n classDef[propertyKey] = options\n }\n}\n","// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isClass = (type: Function) => /^class\\s/.test(Function.prototype.toString.call(type))\n","import {ModelResolver, ModelResolverResolve} from '@orion-js/resolvers'\nimport {MetadataStorage} from '../storage/metadataStorage'\n\n/**\n * @deprecated Please use a @TypedSchema and a @Model a @ModelResolver instead\n */\nexport function ResolverProp(options: ModelResolver<ModelResolverResolve>): PropertyDecorator {\n return (classDef: any, propertyKey: string) => {\n MetadataStorage.addResolverMetadata({target: classDef.constructor, propertyKey, options})\n\n classDef[propertyKey] = options\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport isPlainObject from 'lodash/isPlainObject'\nimport {PropOptions} from '../../decorators/prop'\nimport {Schema, SchemaRecursiveNodeType} from '@orion-js/schema'\nimport {MetadataStorage} from '../../storage/metadataStorage'\nimport {isClass} from '../../utils/isClass'\n\nfunction isPrimitive(type: Function) {\n return ([Boolean, Number, String, Date] as Function[]).includes(type)\n}\n\nexport function processSchemaForProp(prop: PropOptions) {\n if (typeof (prop.type as SchemaRecursiveNodeType)?.type === 'function') {\n return processSchemaForProp(prop.type as PropOptions)\n }\n\n if (Array.isArray(prop.type)) {\n return prop.type.length > 0\n ? {...prop, type: [processSchemaForProp(prop.type[0] as PropOptions)]}\n : prop\n }\n\n if (typeof prop.type !== 'function') {\n if (isPlainObject(prop.type)) {\n const subschema = {}\n Object.keys(prop.type).forEach(key => {\n subschema[key] = processSchemaForProp({type: prop.type[key]})\n })\n return {...prop, type: subschema}\n }\n\n return prop\n }\n\n if (isPrimitive(prop.type)) {\n return prop\n }\n\n if (isClass(prop.type)) {\n const schema = getSchemaForClassRecursive(prop.type)\n return {\n ...prop,\n type: schema\n }\n }\n\n return prop\n}\n\nexport function getSchemaForClassRecursive(target): Schema {\n const schema: Schema = {}\n\n let parent: Function = target\n\n while (parent.prototype) {\n if (parent === Function.prototype) {\n break\n }\n\n const props = MetadataStorage.getSchemaProps(parent)\n if (!props) {\n parent = Object.getPrototypeOf(parent)\n continue\n }\n\n Object.keys(props).forEach(key => {\n schema[key] = processSchemaForProp(props[key])\n })\n\n parent = Object.getPrototypeOf(parent)\n }\n\n return schema\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {Schema} from '@orion-js/schema'\nimport {Constructor} from '../utils/interfaces'\nimport {getSchemaForClassRecursive} from './helpers/processSchemaForProp'\n\nexport function getSchemaForClass<TClass>(target: Constructor<TClass>): Schema {\n return getSchemaForClassRecursive(target)\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {createModel, Model, ModelSchema, ModelResolversMap} from '@orion-js/models'\nimport {FieldType} from '@orion-js/schema'\nimport {PropOptions} from '..'\nimport {MetadataStorage} from '../storage/metadataStorage'\nimport {Constructor} from '../utils/interfaces'\nimport {processSchemaForProp} from './helpers/processSchemaForProp'\n\nconst modelCache = new Map<Constructor<any>, Model>()\n\nfunction processModelSchemaForProp(prop: PropOptions) {\n if ((prop.type as Model)?.__isModel === true) {\n return prop\n }\n\n if ((prop.type as FieldType)?._isFieldType === true) {\n return prop\n }\n\n return processSchemaForProp(prop)\n}\n\nexport function getModelForClass<TClass>(target: Constructor<TClass>): Model {\n const targetAsModel = target as any as Model\n if (targetAsModel.__isModel) {\n return targetAsModel\n }\n\n let modelResolvers = null\n\n if (target.prototype.typedModel) {\n modelResolvers = target.prototype.resolvers || {}\n target = target.prototype.typedModel\n }\n\n const schemaId = (target as any).__schemaId\n\n if (modelCache.has(schemaId)) {\n return modelCache.get(schemaId)\n }\n\n const schema: ModelSchema = {}\n const resolverMap: ModelResolversMap = {}\n\n let parent: Function = target\n\n while (parent.prototype) {\n if (parent === Function.prototype) {\n break\n }\n\n const props = MetadataStorage.getSchemaProps(parent) ?? {}\n\n Object.keys(props).forEach(key => {\n schema[key] = processModelSchemaForProp(props[key])\n })\n\n const resolvers = MetadataStorage.getSchemaResolvers(parent) ?? {}\n Object.keys(resolvers).forEach(key => {\n resolverMap[key] = resolvers[key]\n })\n\n parent = Object.getPrototypeOf(parent)\n }\n\n const model = createModel({\n name: targetAsModel.name,\n schema,\n clean: targetAsModel.clean,\n validate: targetAsModel.validate,\n resolvers: {\n ...resolverMap,\n ...modelResolvers\n }\n })\n\n modelCache.set(schemaId, model)\n\n return model\n}\n","import {Model} from '@orion-js/models'\nimport {CloneOptions} from '@orion-js/models'\nimport {Constructor} from '../utils/interfaces'\nimport {getModelForClass} from './getModelForClass'\n\nexport interface CloneSchemaClassOptions<TClass, TFields extends keyof TClass> {\n name: string\n pickFields: readonly TFields[]\n mapFields?: CloneOptions['mapFields']\n extendSchema?: CloneOptions['extendSchema']\n}\n\n/**\n * This function returns a cloned model but the type is a subset of the original Schema.\n * To use the type of the cloned schema use `typeof ClonedModel.type`\n *\n * Example:\n * ```ts\n * const ClonedModel = cloneSchemaClass(Schema, {\n * name: 'ClonedSchema',\n * pickFields: ['name'] as const\n * })\n * type ClonedType = typeof ClonedModel.type\n * ```\n */\nexport function cloneSchemaClass<TClass, TFields extends keyof TClass>(\n schema: Constructor<TClass>,\n options: CloneSchemaClassOptions<TClass, TFields>\n): Model<Pick<TClass, TFields>> {\n const model = getModelForClass(schema)\n\n const newModel: Model<Pick<TClass, TFields>> = model.clone({\n name: options.name,\n pickFields: options.pickFields as any as string[],\n mapFields: options.mapFields,\n extendSchema: options.extendSchema\n })\n\n return newModel\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;ACAO,IAAMA,4BAAN,MAAMA,kCAAiCC,MAAAA;EAC5CC,YAAYC,YAAoBC,aAAqB;AACnD,UACE,6BAA6BD,UAAAA,IAAcC,WAAAA,wKAAmL;EAElO;AACF;AAN8CH;AAAvC,IAAMD,2BAAN;;;ACAA,IAAMK,uBAAN,MAAMA,6BAA4BC,MAAAA;EACvCC,YAAYC,YAAoBC,aAAqB;AACnD,UACE,uDAAuDD,UAAAA,IAAcC,WAAAA,6HAAwI;EAEjN;AACF;AANyCH;AAAlC,IAAMD,sBAAN;;;ACAA,IAAMK,8BAAN,MAAMA,oCAAmCC,MAAAA;EAC9CC,YAAYC,YAAoBC,cAAsB;AACpD,UAAM,qBAAqBD,UAAAA,gCAA0CC,YAAAA,IAAgB;EACvF;AACF;AAJgDH;AAAzC,IAAMD,6BAAN;;;ACIP,qBAAyB;AAalB,IAAMK,0BAAN,MAAMA,wBAAAA;EACHC,UAAU,oBAAIC,IAAAA;EAEdC,UAAUC,QAAQ;AACxB,UAAMC,SAAS,KAAKJ,QAAQK,IAAIF,OAAOG,UAAU;AACjD,QAAIF,OAAQ,QAAOA;AAEnB,UAAMG,eAAWC,2BAAAA;AAEjBL,WAAOG,aAAaC;AAEpB,UAAME,YAAY;MAChBL,QAAQD;MACRO,SAAS,CAAC;MACVC,YAAY,CAAC;MACbC,WAAW,CAAC;IACd;AACA,SAAKZ,QAAQa,IAAIV,OAAOG,YAAYG,SAAAA;AACpC,WAAOA;EACT;EAEOK,kBAAkB,EAACX,QAAQO,QAAO,GAA+C;AACtF,UAAMN,SAAS,KAAKF,UAAUC,MAAAA;AAC9BC,WAAOM,UAAUA;EACnB;EAEOK,gBAAgB,EACrBZ,QACAa,aACAN,QAAO,GAKN;AACD,UAAMN,SAAS,KAAKF,UAAUC,MAAAA;AAE9B,UAAMc,WAAWb,OAAOO,WAAWK,WAAAA;AACnC,QAAIC,UAAU;AACZ,YAAM,IAAIC,2BAA2Bf,OAAOgB,MAAMH,WAAAA;IACpD;AACAZ,WAAOO,WAAWK,WAAAA,IAAeN;EACnC;EAEOU,oBAAoB,EACzBjB,QACAa,aACAN,QAAO,GAKN;AACD,UAAMN,SAAS,KAAKF,UAAUC,MAAAA;AAE9B,UAAMkB,eAAejB,OAAOQ,UAAUI,WAAAA;AACtC,QAAIK,cAAc;AAChB,YAAM,IAAIH,2BAA2Bf,OAAOgB,MAAMH,WAAAA;IACpD;AACAZ,WAAOQ,UAAUI,WAAAA,IAAeN;EAClC;EAEOY,eAAenB,QAAwC;AAC5D,UAAMC,SAAS,KAAKF,UAAUC,MAAAA;AAE9B,WAAOC,OAAOO;EAChB;EAEOY,mBAAmBpB,QAA4C;AACpE,UAAMC,SAAS,KAAKF,UAAUC,MAAAA;AAE9B,WAAOC,OAAOQ;EAChB;AACF;AAzEab;AAAN,IAAMA,yBAAN;AA2EA,IAAMyB,kBAAkB,IAAIzB,uBAAAA;;;ACtF5B,SAAS0B,WAAWC,UAA6B,CAAC,GAAC;AACxD,SAAOC,CAAAA,WAAAA;AACLC,oBAAgBC,kBAAkB;MAACF;MAAQD;IAAO,CAAA;AAGlDC,WAAOG,WAAW,MAAMC,iBAAiBJ,MAAAA;EAC3C;AACF;AAPgBF;;;ACHT,SAASO,YAAYC,UAA6B,CAAC,GAAC;AACzD,SAAOC,CAAAA,WAAAA;AACLC,oBAAgBC,kBAAkB;MAACF;MAAQD;IAAO,CAAA;AAGlDC,WAAOG,WAAW,MAAMC,iBAAiBJ,MAAAA;EAC3C;AACF;AAPgBF;;;ACAhB,8BAAO;;;ACFA,IAAMO,UAAU,wBAACC,SAAmB,WAAWC,KAAKC,SAASC,UAAUC,SAASC,KAAKL,IAAAA,CAAAA,GAArE;;;ADahB,SAASM,KAAKC,UAAuB,CAAC,GAAC;AAC5C,SAAO,CAACC,UAAoBC,gBAAAA;AAf9B;AAgBI,UAAMC,cAAaF,cAASG,gBAATH,mBAAsBI;AAEzC,QAAI,CAACL,QAAQM,MAAM;AACjB,YAAMA,OAAOC,QAAQC,YAAY,eAAeP,UAAUC,WAAAA;AAE1D,UAAIO,QAAQH,IAAAA,KAASA,SAASI,QAAQ;AACpC,cAAM,IAAIC,yBAAyBR,YAAYD,WAAAA;MACjD;AAEA,UAAII,SAASM,OAAO;AAClB,cAAM,IAAIC,oBAAoBV,YAAYD,WAAAA;MAC5C;AAEA,UAAII,MAAM;AACRN,gBAAQM,OAAOA;MACjB,OAAO;AACL,cAAM,IAAIK,yBAAyBR,YAAYD,WAAAA;MACjD;IACF;AAEAY,oBAAgBC,gBAAgB;MAACC,QAAQf,SAASG;MAAaF;MAAaF;IAAO,CAAA;AAEnFC,aAASC,WAAAA,IAAeF;EAC1B;AACF;AA1BgBD;;;AERT,SAASkB,aAAaC,SAA4C;AACvE,SAAO,CAACC,UAAeC,gBAAAA;AACrBC,oBAAgBC,oBAAoB;MAACC,QAAQJ,SAASK;MAAaJ;MAAaF;IAAO,CAAA;AAEvFC,aAASC,WAAAA,IAAeF;EAC1B;AACF;AANgBD;;;ACLhB,2BAA0B;AAM1B,SAASQ,YAAYC,MAAc;AACjC,SAAQ;IAACC;IAASC;IAAQC;IAAQC;IAAqBC,SAASL,IAAAA;AAClE;AAFSD;AAIF,SAASO,qBAAqBC,MAAiB;AAXtD;AAYE,MAAI,SAAQA,UAAKP,SAALO,mBAAuCP,UAAS,YAAY;AACtE,WAAOM,qBAAqBC,KAAKP,IAAI;EACvC;AAEA,MAAIQ,MAAMC,QAAQF,KAAKP,IAAI,GAAG;AAC5B,WAAOO,KAAKP,KAAKU,SAAS,IACtB;MAAC,GAAGH;MAAMP,MAAM;QAACM,qBAAqBC,KAAKP,KAAK,CAAA,CAAE;;IAAiB,IACnEO;EACN;AAEA,MAAI,OAAOA,KAAKP,SAAS,YAAY;AACnC,YAAIW,qBAAAA,SAAcJ,KAAKP,IAAI,GAAG;AAC5B,YAAMY,YAAY,CAAC;AACnBC,aAAOC,KAAKP,KAAKP,IAAI,EAAEe,QAAQC,CAAAA,QAAAA;AAC7BJ,kBAAUI,GAAAA,IAAOV,qBAAqB;UAACN,MAAMO,KAAKP,KAAKgB,GAAAA;QAAI,CAAA;MAC7D,CAAA;AACA,aAAO;QAAC,GAAGT;QAAMP,MAAMY;MAAS;IAClC;AAEA,WAAOL;EACT;AAEA,MAAIR,YAAYQ,KAAKP,IAAI,GAAG;AAC1B,WAAOO;EACT;AAEA,MAAIU,QAAQV,KAAKP,IAAI,GAAG;AACtB,UAAMkB,SAASC,2BAA2BZ,KAAKP,IAAI;AACnD,WAAO;MACL,GAAGO;MACHP,MAAMkB;IACR;EACF;AAEA,SAAOX;AACT;AApCgBD;AAsCT,SAASa,2BAA2BC,QAAM;AAC/C,QAAMF,SAAiB,CAAC;AAExB,MAAIG,SAAmBD;AAEvB,SAAOC,OAAOC,WAAW;AACvB,QAAID,WAAWE,SAASD,WAAW;AACjC;IACF;AAEA,UAAME,QAAQC,gBAAgBC,eAAeL,MAAAA;AAC7C,QAAI,CAACG,OAAO;AACVH,eAASR,OAAOc,eAAeN,MAAAA;AAC/B;IACF;AAEAR,WAAOC,KAAKU,KAAAA,EAAOT,QAAQC,CAAAA,QAAAA;AACzBE,aAAOF,GAAAA,IAAOV,qBAAqBkB,MAAMR,GAAAA,CAAI;IAC/C,CAAA;AAEAK,aAASR,OAAOc,eAAeN,MAAAA;EACjC;AAEA,SAAOH;AACT;AAxBgBC;;;AC5CT,SAASS,kBAA0BC,QAA2B;AACnE,SAAOC,2BAA2BD,MAAAA;AACpC;AAFgBD;;;ACJhB,oBAAiE;AAOjE,IAAMG,aAAa,oBAAIC,IAAAA;AAEvB,SAASC,0BAA0BC,MAAiB;AAVpD;AAWE,QAAKA,UAAKC,SAALD,mBAAqBE,eAAc,MAAM;AAC5C,WAAOF;EACT;AAEA,QAAKA,UAAKC,SAALD,mBAAyBG,kBAAiB,MAAM;AACnD,WAAOH;EACT;AAEA,SAAOI,qBAAqBJ,IAAAA;AAC9B;AAVSD;AAYF,SAASM,iBAAyBC,QAA2B;AAClE,QAAMC,gBAAgBD;AACtB,MAAIC,cAAcL,WAAW;AAC3B,WAAOK;EACT;AAEA,MAAIC,iBAAiB;AAErB,MAAIF,OAAOG,UAAUC,YAAY;AAC/BF,qBAAiBF,OAAOG,UAAUE,aAAa,CAAC;AAChDL,aAASA,OAAOG,UAAUC;EAC5B;AAEA,QAAME,WAAYN,OAAeO;AAEjC,MAAIhB,WAAWiB,IAAIF,QAAAA,GAAW;AAC5B,WAAOf,WAAWkB,IAAIH,QAAAA;EACxB;AAEA,QAAMI,SAAsB,CAAC;AAC7B,QAAMC,cAAiC,CAAC;AAExC,MAAIC,SAAmBZ;AAEvB,SAAOY,OAAOT,WAAW;AACvB,QAAIS,WAAWC,SAASV,WAAW;AACjC;IACF;AAEA,UAAMW,QAAQC,gBAAgBC,eAAeJ,MAAAA,KAAW,CAAC;AAEzDK,WAAOC,KAAKJ,KAAAA,EAAOK,QAAQC,CAAAA,QAAAA;AACzBV,aAAOU,GAAAA,IAAO3B,0BAA0BqB,MAAMM,GAAAA,CAAI;IACpD,CAAA;AAEA,UAAMf,YAAYU,gBAAgBM,mBAAmBT,MAAAA,KAAW,CAAC;AACjEK,WAAOC,KAAKb,SAAAA,EAAWc,QAAQC,CAAAA,QAAAA;AAC7BT,kBAAYS,GAAAA,IAAOf,UAAUe,GAAAA;IAC/B,CAAA;AAEAR,aAASK,OAAOK,eAAeV,MAAAA;EACjC;AAEA,QAAMW,YAAQC,2BAAY;IACxBC,MAAMxB,cAAcwB;IACpBf;IACAgB,OAAOzB,cAAcyB;IACrBC,UAAU1B,cAAc0B;IACxBtB,WAAW;MACT,GAAGM;MACH,GAAGT;IACL;EACF,CAAA;AAEAX,aAAWqC,IAAItB,UAAUiB,KAAAA;AAEzB,SAAOA;AACT;AAzDgBxB;;;ACGT,SAAS8B,iBACdC,QACAC,SAAiD;AAEjD,QAAMC,QAAQC,iBAAiBH,MAAAA;AAE/B,QAAMI,WAAyCF,MAAMG,MAAM;IACzDC,MAAML,QAAQK;IACdC,YAAYN,QAAQM;IACpBC,WAAWP,QAAQO;IACnBC,cAAcR,QAAQQ;EACxB,CAAA;AAEA,SAAOL;AACT;AAdgBL;","names":["CannotDetermineTypeError","Error","constructor","schemaName","propertyKey","CannotUseArrayError","Error","constructor","schemaName","propertyKey","PropertyAlreadyExistsError","Error","constructor","schemaName","propertyName","MetadataStorageHandler","schemas","Map","getSchema","target","schema","get","__schemaId","schemaId","generateId","newSchema","options","properties","resolvers","set","addSchemaMetadata","addPropMetadata","propertyKey","currProp","PropertyAlreadyExistsError","name","addResolverMetadata","currResolver","getSchemaProps","getSchemaResolvers","MetadataStorage","TypedModel","options","target","MetadataStorage","addSchemaMetadata","getModel","getModelForClass","TypedSchema","options","target","MetadataStorage","addSchemaMetadata","getModel","getModelForClass","isClass","type","test","Function","prototype","toString","call","Prop","options","classDef","propertyKey","schemaName","constructor","name","type","Reflect","getMetadata","isClass","Object","CannotDetermineTypeError","Array","CannotUseArrayError","MetadataStorage","addPropMetadata","target","ResolverProp","options","classDef","propertyKey","MetadataStorage","addResolverMetadata","target","constructor","isPrimitive","type","Boolean","Number","String","Date","includes","processSchemaForProp","prop","Array","isArray","length","isPlainObject","subschema","Object","keys","forEach","key","isClass","schema","getSchemaForClassRecursive","target","parent","prototype","Function","props","MetadataStorage","getSchemaProps","getPrototypeOf","getSchemaForClass","target","getSchemaForClassRecursive","modelCache","Map","processModelSchemaForProp","prop","type","__isModel","_isFieldType","processSchemaForProp","getModelForClass","target","targetAsModel","modelResolvers","prototype","typedModel","resolvers","schemaId","__schemaId","has","get","schema","resolverMap","parent","Function","props","MetadataStorage","getSchemaProps","Object","keys","forEach","key","getSchemaResolvers","getPrototypeOf","model","createModel","name","clean","validate","set","cloneSchemaClass","schema","options","model","getModelForClass","newModel","clone","name","pickFields","mapFields","extendSchema"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/errors/CannotDetermineType.ts","../src/errors/CannotUseArray.ts","../src/errors/PropertyAlreadyExists.ts","../src/storage/metadataStorage.ts","../src/decorators/typedModel.ts","../src/decorators/typedSchema.ts","../src/decorators/prop.ts","../src/utils/isClass.ts","../src/decorators/resolver.ts","../src/factories/helpers/processSchemaForProp.ts","../src/factories/getSchemaForClass.ts","../src/factories/getModelForClass.ts","../src/factories/cloneSchemaClass.ts"],"sourcesContent":["export * from './decorators'\nexport * from './factories'\n","export class CannotDetermineTypeError extends Error {\n constructor(schemaName: string, propertyKey: string) {\n super(\n `Cannot determine type at \"${schemaName}.${propertyKey}\" field (object/union/ambiguous type was used). Make sure your property decorator defines a \"type\" option. For example: \"@Prop({ type: {name: String, age: Number} })\"`\n )\n }\n}\n","export class CannotUseArrayError extends Error {\n constructor(schemaName: string, propertyKey: string) {\n super(\n `Cannot infer type from an Array TypeScript type at \"${schemaName}.${propertyKey}\" field. Make sure your property decorator defines a \"type\" option. For example: \"@Prop({ type: [String | Number | ...] })\"`\n )\n }\n}\n","export class PropertyAlreadyExistsError extends Error {\n constructor(schemaName: string, propertyName: string) {\n super(`Schema with name \"${schemaName}\" already contains property \"${propertyName}\".`)\n }\n}\n","import {PropOptions} from '..'\nimport {PropertyAlreadyExistsError} from '../errors'\nimport {ModelResolversMap} from '@orion-js/models'\nimport {ModelResolver, ModelResolverResolve} from '@orion-js/resolvers'\nimport {generateId} from '@orion-js/helpers'\n\nexport type PropertiesMap = {[key: string]: PropOptions}\n\ninterface SchemaStorage {\n schema: any\n options: object\n properties: PropertiesMap\n resolvers: ModelResolversMap\n}\n\nexport type TypedModelOptions = Record<string, never>\n\nexport class MetadataStorageHandler {\n private schemas = new Map<any, SchemaStorage>()\n\n private getSchema(target) {\n const schema = this.schemas.get(target.__schemaId)\n if (schema) return schema\n\n const schemaId = generateId()\n\n target.__schemaId = schemaId\n\n const newSchema = {\n schema: target,\n options: {},\n properties: {},\n resolvers: {}\n }\n this.schemas.set(target.__schemaId, newSchema)\n return newSchema\n }\n\n public addSchemaMetadata({target, options}: {target: any; options?: TypedModelOptions}) {\n const schema = this.getSchema(target)\n schema.options = options\n }\n\n public addPropMetadata({\n target,\n propertyKey,\n options\n }: {\n target: any\n propertyKey: string\n options: PropOptions\n }) {\n const schema = this.getSchema(target)\n\n const currProp = schema.properties[propertyKey]\n if (currProp) {\n throw new PropertyAlreadyExistsError(target.name, propertyKey)\n }\n schema.properties[propertyKey] = options\n }\n\n public addResolverMetadata({\n target,\n propertyKey,\n options\n }: {\n target: any\n propertyKey: string\n options: ModelResolver<ModelResolverResolve>\n }) {\n const schema = this.getSchema(target)\n\n const currResolver = schema.resolvers[propertyKey]\n if (currResolver) {\n throw new PropertyAlreadyExistsError(target.name, propertyKey)\n }\n schema.resolvers[propertyKey] = options\n }\n\n public getSchemaProps(target: any): PropertiesMap | undefined {\n const schema = this.getSchema(target)\n\n return schema.properties\n }\n\n public getSchemaResolvers(target: any): ModelResolversMap | undefined {\n const schema = this.getSchema(target)\n\n return schema.resolvers\n }\n}\n\nexport const MetadataStorage = new MetadataStorageHandler()\n","import {getModelForClass} from '..'\nimport {MetadataStorage, TypedModelOptions} from '../storage/metadataStorage'\n\n/**\n * @deprecated Please use @TypedSchema instead\n */\nexport function TypedModel(options: TypedModelOptions = {}): ClassDecorator {\n return target => {\n MetadataStorage.addSchemaMetadata({target, options})\n\n // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass\n target.getModel = () => getModelForClass(target)\n }\n}\n","import {getModelForClass} from '..'\nimport {MetadataStorage, TypedModelOptions} from '../storage/metadataStorage'\n\nexport function TypedSchema(options: TypedModelOptions = {}): ClassDecorator {\n return target => {\n MetadataStorage.addSchemaMetadata({target, options})\n\n // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass\n target.getModel = () => getModelForClass(target)\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {Constructor, SchemaMetaFieldType, SchemaNode} from '@orion-js/schema'\nimport {MetadataStorage} from '../storage/metadataStorage'\nimport 'reflect-metadata'\nimport {CannotDetermineTypeError, CannotUseArrayError} from '../errors'\nimport {isClass} from '../utils/isClass'\nimport {Model} from '@orion-js/models'\n\nexport interface SchemaNodeForClasses extends Omit<SchemaNode, 'type'> {\n type: SchemaMetaFieldType | Constructor<any> | Model | Model[]\n}\n\nexport type PropOptions = Partial<SchemaNodeForClasses>\n\nexport function Prop(options: PropOptions = {}): PropertyDecorator {\n return (classDef: Function, propertyKey: string) => {\n const schemaName = classDef.constructor?.name\n\n if (!options.type) {\n const type = Reflect.getMetadata('design:type', classDef, propertyKey)\n\n if (isClass(type) || type === Object) {\n throw new CannotDetermineTypeError(schemaName, propertyKey)\n }\n\n if (type === Array) {\n throw new CannotUseArrayError(schemaName, propertyKey)\n }\n\n if (type) {\n options.type = type\n } else {\n throw new CannotDetermineTypeError(schemaName, propertyKey)\n }\n }\n\n MetadataStorage.addPropMetadata({target: classDef.constructor, propertyKey, options})\n\n classDef[propertyKey] = options\n }\n}\n","// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isClass = (type: Function) => /^class\\s/.test(Function.prototype.toString.call(type))\n","import {ModelResolver, ModelResolverResolve} from '@orion-js/resolvers'\nimport {MetadataStorage} from '../storage/metadataStorage'\n\n/**\n * @deprecated Please use a @TypedSchema and a @Model a @ModelResolver instead\n */\nexport function ResolverProp(options: ModelResolver<ModelResolverResolve>): PropertyDecorator {\n return (classDef: any, propertyKey: string) => {\n MetadataStorage.addResolverMetadata({target: classDef.constructor, propertyKey, options})\n\n classDef[propertyKey] = options\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport isPlainObject from 'lodash/isPlainObject'\nimport {PropOptions} from '../../decorators/prop'\nimport {Schema, SchemaRecursiveNodeType} from '@orion-js/schema'\nimport {MetadataStorage} from '../../storage/metadataStorage'\nimport {isClass} from '../../utils/isClass'\n\nfunction isPrimitive(type: Function) {\n return ([Boolean, Number, String, Date] as Function[]).includes(type)\n}\n\nexport function processSchemaForProp(prop: PropOptions) {\n if (typeof (prop.type as SchemaRecursiveNodeType)?.type === 'function') {\n return processSchemaForProp(prop.type as PropOptions)\n }\n\n if (Array.isArray(prop.type)) {\n return prop.type.length > 0\n ? {...prop, type: [processSchemaForProp(prop.type[0] as PropOptions)]}\n : prop\n }\n\n if (typeof prop.type !== 'function') {\n if (isPlainObject(prop.type)) {\n const subschema = {}\n Object.keys(prop.type).forEach(key => {\n subschema[key] = processSchemaForProp({type: prop.type[key]})\n })\n return {...prop, type: subschema}\n }\n\n return prop\n }\n\n if (isPrimitive(prop.type)) {\n return prop\n }\n\n if (isClass(prop.type)) {\n const schema = getSchemaForClassRecursive(prop.type)\n return {\n ...prop,\n type: schema\n }\n }\n\n return prop\n}\n\nexport function getSchemaForClassRecursive(target): Schema {\n const schema: Schema = {}\n\n let parent: Function = target\n\n while (parent.prototype) {\n if (parent === Function.prototype) {\n break\n }\n\n const props = MetadataStorage.getSchemaProps(parent)\n if (!props) {\n parent = Object.getPrototypeOf(parent)\n continue\n }\n\n Object.keys(props).forEach(key => {\n schema[key] = processSchemaForProp(props[key])\n })\n\n parent = Object.getPrototypeOf(parent)\n }\n\n return schema\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {Schema} from '@orion-js/schema'\nimport {Constructor} from '../utils/interfaces'\nimport {getSchemaForClassRecursive} from './helpers/processSchemaForProp'\n\nexport function getSchemaForClass<TClass>(target: Constructor<TClass>): Schema {\n return getSchemaForClassRecursive(target)\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {createModel, Model, ModelSchema, ModelResolversMap} from '@orion-js/models'\nimport {FieldType} from '@orion-js/schema'\nimport {PropOptions} from '..'\nimport {MetadataStorage} from '../storage/metadataStorage'\nimport {Constructor} from '../utils/interfaces'\nimport {processSchemaForProp} from './helpers/processSchemaForProp'\n\nconst modelCache = new Map<Constructor<any>, Model>()\n\nfunction processModelSchemaForProp(prop: PropOptions) {\n if ((prop.type as Model)?.__isModel === true) {\n return prop\n }\n\n if ((prop.type as FieldType)?._isFieldType === true) {\n return prop\n }\n\n return processSchemaForProp(prop)\n}\n\nexport function getModelForClass<TClass>(target: Constructor<TClass>): Model {\n const targetAsModel = target as any as Model\n if (targetAsModel.__isModel) {\n return targetAsModel\n }\n\n let modelResolvers = null\n\n if (target.prototype.typedModel) {\n modelResolvers = target.prototype.resolvers || {}\n target = target.prototype.typedModel\n }\n\n const schemaId = (target as any).__schemaId\n\n if (modelCache.has(schemaId)) {\n return modelCache.get(schemaId)\n }\n\n const schema: ModelSchema = {}\n const resolverMap: ModelResolversMap = {}\n\n let parent: Function = target\n\n while (parent.prototype) {\n if (parent === Function.prototype) {\n break\n }\n\n const props = MetadataStorage.getSchemaProps(parent) ?? {}\n\n Object.keys(props).forEach(key => {\n schema[key] = processModelSchemaForProp(props[key])\n })\n\n const resolvers = MetadataStorage.getSchemaResolvers(parent) ?? {}\n Object.keys(resolvers).forEach(key => {\n resolverMap[key] = resolvers[key]\n })\n\n parent = Object.getPrototypeOf(parent)\n }\n\n const model = createModel({\n name: targetAsModel.name,\n schema,\n clean: targetAsModel.clean,\n validate: targetAsModel.validate,\n resolvers: {\n ...resolverMap,\n ...modelResolvers\n }\n })\n\n modelCache.set(schemaId, model)\n\n return model\n}\n","import {Model} from '@orion-js/models'\nimport {CloneOptions} from '@orion-js/models'\nimport {Constructor} from '../utils/interfaces'\nimport {getModelForClass} from './getModelForClass'\n\nexport interface CloneSchemaClassOptions<TClass, TFields extends keyof TClass> {\n name: string\n pickFields: readonly TFields[]\n mapFields?: CloneOptions['mapFields']\n extendSchema?: CloneOptions['extendSchema']\n}\n\n/**\n * This function returns a cloned model but the type is a subset of the original Schema.\n * To use the type of the cloned schema use `typeof ClonedModel.type`\n *\n * Example:\n * ```ts\n * const ClonedModel = cloneSchemaClass(Schema, {\n * name: 'ClonedSchema',\n * pickFields: ['name'] as const\n * })\n * type ClonedType = typeof ClonedModel.type\n * ```\n */\nexport function cloneSchemaClass<TClass, TFields extends keyof TClass>(\n schema: Constructor<TClass>,\n options: CloneSchemaClassOptions<TClass, TFields>\n): Model<Pick<TClass, TFields>> {\n const model = getModelForClass(schema)\n\n const newModel: Model<Pick<TClass, TFields>> = model.clone({\n name: options.name,\n pickFields: options.pickFields as any as string[],\n mapFields: options.mapFields,\n extendSchema: options.extendSchema\n })\n\n return newModel\n}\n"],"mappings":"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","names":["isPlainObject"]}
package/dist/index.js CHANGED
@@ -1,36 +1,31 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/errors/CannotDetermineType.ts
5
- var _CannotDetermineTypeError = class _CannotDetermineTypeError extends Error {
2
+ var CannotDetermineTypeError = class extends Error {
6
3
  constructor(schemaName, propertyKey) {
7
- super(`Cannot determine type at "${schemaName}.${propertyKey}" field (object/union/ambiguous type was used). Make sure your property decorator defines a "type" option. For example: "@Prop({ type: {name: String, age: Number} })"`);
4
+ super(
5
+ `Cannot determine type at "${schemaName}.${propertyKey}" field (object/union/ambiguous type was used). Make sure your property decorator defines a "type" option. For example: "@Prop({ type: {name: String, age: Number} })"`
6
+ );
8
7
  }
9
8
  };
10
- __name(_CannotDetermineTypeError, "CannotDetermineTypeError");
11
- var CannotDetermineTypeError = _CannotDetermineTypeError;
12
9
 
13
10
  // src/errors/CannotUseArray.ts
14
- var _CannotUseArrayError = class _CannotUseArrayError extends Error {
11
+ var CannotUseArrayError = class extends Error {
15
12
  constructor(schemaName, propertyKey) {
16
- super(`Cannot infer type from an Array TypeScript type at "${schemaName}.${propertyKey}" field. Make sure your property decorator defines a "type" option. For example: "@Prop({ type: [String | Number | ...] })"`);
13
+ super(
14
+ `Cannot infer type from an Array TypeScript type at "${schemaName}.${propertyKey}" field. Make sure your property decorator defines a "type" option. For example: "@Prop({ type: [String | Number | ...] })"`
15
+ );
17
16
  }
18
17
  };
19
- __name(_CannotUseArrayError, "CannotUseArrayError");
20
- var CannotUseArrayError = _CannotUseArrayError;
21
18
 
22
19
  // src/errors/PropertyAlreadyExists.ts
23
- var _PropertyAlreadyExistsError = class _PropertyAlreadyExistsError extends Error {
20
+ var PropertyAlreadyExistsError = class extends Error {
24
21
  constructor(schemaName, propertyName) {
25
22
  super(`Schema with name "${schemaName}" already contains property "${propertyName}".`);
26
23
  }
27
24
  };
28
- __name(_PropertyAlreadyExistsError, "PropertyAlreadyExistsError");
29
- var PropertyAlreadyExistsError = _PropertyAlreadyExistsError;
30
25
 
31
26
  // src/storage/metadataStorage.ts
32
27
  import { generateId } from "@orion-js/helpers";
33
- var _MetadataStorageHandler = class _MetadataStorageHandler {
28
+ var MetadataStorageHandler = class {
34
29
  schemas = /* @__PURE__ */ new Map();
35
30
  getSchema(target) {
36
31
  const schema = this.schemas.get(target.__schemaId);
@@ -50,7 +45,11 @@ var _MetadataStorageHandler = class _MetadataStorageHandler {
50
45
  const schema = this.getSchema(target);
51
46
  schema.options = options;
52
47
  }
53
- addPropMetadata({ target, propertyKey, options }) {
48
+ addPropMetadata({
49
+ target,
50
+ propertyKey,
51
+ options
52
+ }) {
54
53
  const schema = this.getSchema(target);
55
54
  const currProp = schema.properties[propertyKey];
56
55
  if (currProp) {
@@ -58,7 +57,11 @@ var _MetadataStorageHandler = class _MetadataStorageHandler {
58
57
  }
59
58
  schema.properties[propertyKey] = options;
60
59
  }
61
- addResolverMetadata({ target, propertyKey, options }) {
60
+ addResolverMetadata({
61
+ target,
62
+ propertyKey,
63
+ options
64
+ }) {
62
65
  const schema = this.getSchema(target);
63
66
  const currResolver = schema.resolvers[propertyKey];
64
67
  if (currResolver) {
@@ -75,39 +78,29 @@ var _MetadataStorageHandler = class _MetadataStorageHandler {
75
78
  return schema.resolvers;
76
79
  }
77
80
  };
78
- __name(_MetadataStorageHandler, "MetadataStorageHandler");
79
- var MetadataStorageHandler = _MetadataStorageHandler;
80
81
  var MetadataStorage = new MetadataStorageHandler();
81
82
 
82
83
  // src/decorators/typedModel.ts
83
84
  function TypedModel(options = {}) {
84
85
  return (target) => {
85
- MetadataStorage.addSchemaMetadata({
86
- target,
87
- options
88
- });
86
+ MetadataStorage.addSchemaMetadata({ target, options });
89
87
  target.getModel = () => getModelForClass(target);
90
88
  };
91
89
  }
92
- __name(TypedModel, "TypedModel");
93
90
 
94
91
  // src/decorators/typedSchema.ts
95
92
  function TypedSchema(options = {}) {
96
93
  return (target) => {
97
- MetadataStorage.addSchemaMetadata({
98
- target,
99
- options
100
- });
94
+ MetadataStorage.addSchemaMetadata({ target, options });
101
95
  target.getModel = () => getModelForClass(target);
102
96
  };
103
97
  }
104
- __name(TypedSchema, "TypedSchema");
105
98
 
106
99
  // src/decorators/prop.ts
107
100
  import "reflect-metadata";
108
101
 
109
102
  // src/utils/isClass.ts
110
- var isClass = /* @__PURE__ */ __name((type) => /^class\s/.test(Function.prototype.toString.call(type)), "isClass");
103
+ var isClass = (type) => /^class\s/.test(Function.prototype.toString.call(type));
111
104
 
112
105
  // src/decorators/prop.ts
113
106
  function Prop(options = {}) {
@@ -128,65 +121,39 @@ function Prop(options = {}) {
128
121
  throw new CannotDetermineTypeError(schemaName, propertyKey);
129
122
  }
130
123
  }
131
- MetadataStorage.addPropMetadata({
132
- target: classDef.constructor,
133
- propertyKey,
134
- options
135
- });
124
+ MetadataStorage.addPropMetadata({ target: classDef.constructor, propertyKey, options });
136
125
  classDef[propertyKey] = options;
137
126
  };
138
127
  }
139
- __name(Prop, "Prop");
140
128
 
141
129
  // src/decorators/resolver.ts
142
130
  function ResolverProp(options) {
143
131
  return (classDef, propertyKey) => {
144
- MetadataStorage.addResolverMetadata({
145
- target: classDef.constructor,
146
- propertyKey,
147
- options
148
- });
132
+ MetadataStorage.addResolverMetadata({ target: classDef.constructor, propertyKey, options });
149
133
  classDef[propertyKey] = options;
150
134
  };
151
135
  }
152
- __name(ResolverProp, "ResolverProp");
153
136
 
154
137
  // src/factories/helpers/processSchemaForProp.ts
155
138
  import isPlainObject from "lodash/isPlainObject";
156
139
  function isPrimitive(type) {
157
- return [
158
- Boolean,
159
- Number,
160
- String,
161
- Date
162
- ].includes(type);
140
+ return [Boolean, Number, String, Date].includes(type);
163
141
  }
164
- __name(isPrimitive, "isPrimitive");
165
142
  function processSchemaForProp(prop) {
166
143
  var _a;
167
144
  if (typeof ((_a = prop.type) == null ? void 0 : _a.type) === "function") {
168
145
  return processSchemaForProp(prop.type);
169
146
  }
170
147
  if (Array.isArray(prop.type)) {
171
- return prop.type.length > 0 ? {
172
- ...prop,
173
- type: [
174
- processSchemaForProp(prop.type[0])
175
- ]
176
- } : prop;
148
+ return prop.type.length > 0 ? { ...prop, type: [processSchemaForProp(prop.type[0])] } : prop;
177
149
  }
178
150
  if (typeof prop.type !== "function") {
179
151
  if (isPlainObject(prop.type)) {
180
152
  const subschema = {};
181
153
  Object.keys(prop.type).forEach((key) => {
182
- subschema[key] = processSchemaForProp({
183
- type: prop.type[key]
184
- });
154
+ subschema[key] = processSchemaForProp({ type: prop.type[key] });
185
155
  });
186
- return {
187
- ...prop,
188
- type: subschema
189
- };
156
+ return { ...prop, type: subschema };
190
157
  }
191
158
  return prop;
192
159
  }
@@ -202,7 +169,6 @@ function processSchemaForProp(prop) {
202
169
  }
203
170
  return prop;
204
171
  }
205
- __name(processSchemaForProp, "processSchemaForProp");
206
172
  function getSchemaForClassRecursive(target) {
207
173
  const schema = {};
208
174
  let parent = target;
@@ -222,13 +188,11 @@ function getSchemaForClassRecursive(target) {
222
188
  }
223
189
  return schema;
224
190
  }
225
- __name(getSchemaForClassRecursive, "getSchemaForClassRecursive");
226
191
 
227
192
  // src/factories/getSchemaForClass.ts
228
193
  function getSchemaForClass(target) {
229
194
  return getSchemaForClassRecursive(target);
230
195
  }
231
- __name(getSchemaForClass, "getSchemaForClass");
232
196
 
233
197
  // src/factories/getModelForClass.ts
234
198
  import { createModel } from "@orion-js/models";
@@ -243,7 +207,6 @@ function processModelSchemaForProp(prop) {
243
207
  }
244
208
  return processSchemaForProp(prop);
245
209
  }
246
- __name(processModelSchemaForProp, "processModelSchemaForProp");
247
210
  function getModelForClass(target) {
248
211
  const targetAsModel = target;
249
212
  if (targetAsModel.__isModel) {
@@ -288,7 +251,6 @@ function getModelForClass(target) {
288
251
  modelCache.set(schemaId, model);
289
252
  return model;
290
253
  }
291
- __name(getModelForClass, "getModelForClass");
292
254
 
293
255
  // src/factories/cloneSchemaClass.ts
294
256
  function cloneSchemaClass(schema, options) {
@@ -301,7 +263,6 @@ function cloneSchemaClass(schema, options) {
301
263
  });
302
264
  return newModel;
303
265
  }
304
- __name(cloneSchemaClass, "cloneSchemaClass");
305
266
  export {
306
267
  Prop,
307
268
  ResolverProp,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors/CannotDetermineType.ts","../src/errors/CannotUseArray.ts","../src/errors/PropertyAlreadyExists.ts","../src/storage/metadataStorage.ts","../src/decorators/typedModel.ts","../src/decorators/typedSchema.ts","../src/decorators/prop.ts","../src/utils/isClass.ts","../src/decorators/resolver.ts","../src/factories/helpers/processSchemaForProp.ts","../src/factories/getSchemaForClass.ts","../src/factories/getModelForClass.ts","../src/factories/cloneSchemaClass.ts"],"sourcesContent":["export class CannotDetermineTypeError extends Error {\n constructor(schemaName: string, propertyKey: string) {\n super(\n `Cannot determine type at \"${schemaName}.${propertyKey}\" field (object/union/ambiguous type was used). Make sure your property decorator defines a \"type\" option. For example: \"@Prop({ type: {name: String, age: Number} })\"`\n )\n }\n}\n","export class CannotUseArrayError extends Error {\n constructor(schemaName: string, propertyKey: string) {\n super(\n `Cannot infer type from an Array TypeScript type at \"${schemaName}.${propertyKey}\" field. Make sure your property decorator defines a \"type\" option. For example: \"@Prop({ type: [String | Number | ...] })\"`\n )\n }\n}\n","export class PropertyAlreadyExistsError extends Error {\n constructor(schemaName: string, propertyName: string) {\n super(`Schema with name \"${schemaName}\" already contains property \"${propertyName}\".`)\n }\n}\n","import {PropOptions} from '..'\nimport {PropertyAlreadyExistsError} from '../errors'\nimport {ModelResolversMap} from '@orion-js/models'\nimport {ModelResolver, ModelResolverResolve} from '@orion-js/resolvers'\nimport {generateId} from '@orion-js/helpers'\n\nexport type PropertiesMap = {[key: string]: PropOptions}\n\ninterface SchemaStorage {\n schema: any\n options: object\n properties: PropertiesMap\n resolvers: ModelResolversMap\n}\n\nexport type TypedModelOptions = Record<string, never>\n\nexport class MetadataStorageHandler {\n private schemas = new Map<any, SchemaStorage>()\n\n private getSchema(target) {\n const schema = this.schemas.get(target.__schemaId)\n if (schema) return schema\n\n const schemaId = generateId()\n\n target.__schemaId = schemaId\n\n const newSchema = {\n schema: target,\n options: {},\n properties: {},\n resolvers: {}\n }\n this.schemas.set(target.__schemaId, newSchema)\n return newSchema\n }\n\n public addSchemaMetadata({target, options}: {target: any; options?: TypedModelOptions}) {\n const schema = this.getSchema(target)\n schema.options = options\n }\n\n public addPropMetadata({\n target,\n propertyKey,\n options\n }: {\n target: any\n propertyKey: string\n options: PropOptions\n }) {\n const schema = this.getSchema(target)\n\n const currProp = schema.properties[propertyKey]\n if (currProp) {\n throw new PropertyAlreadyExistsError(target.name, propertyKey)\n }\n schema.properties[propertyKey] = options\n }\n\n public addResolverMetadata({\n target,\n propertyKey,\n options\n }: {\n target: any\n propertyKey: string\n options: ModelResolver<ModelResolverResolve>\n }) {\n const schema = this.getSchema(target)\n\n const currResolver = schema.resolvers[propertyKey]\n if (currResolver) {\n throw new PropertyAlreadyExistsError(target.name, propertyKey)\n }\n schema.resolvers[propertyKey] = options\n }\n\n public getSchemaProps(target: any): PropertiesMap | undefined {\n const schema = this.getSchema(target)\n\n return schema.properties\n }\n\n public getSchemaResolvers(target: any): ModelResolversMap | undefined {\n const schema = this.getSchema(target)\n\n return schema.resolvers\n }\n}\n\nexport const MetadataStorage = new MetadataStorageHandler()\n","import {getModelForClass} from '..'\nimport {MetadataStorage, TypedModelOptions} from '../storage/metadataStorage'\n\n/**\n * @deprecated Please use @TypedSchema instead\n */\nexport function TypedModel(options: TypedModelOptions = {}): ClassDecorator {\n return target => {\n MetadataStorage.addSchemaMetadata({target, options})\n\n // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass\n target.getModel = () => getModelForClass(target)\n }\n}\n","import {getModelForClass} from '..'\nimport {MetadataStorage, TypedModelOptions} from '../storage/metadataStorage'\n\nexport function TypedSchema(options: TypedModelOptions = {}): ClassDecorator {\n return target => {\n MetadataStorage.addSchemaMetadata({target, options})\n\n // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass\n target.getModel = () => getModelForClass(target)\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {Constructor, SchemaMetaFieldType, SchemaNode} from '@orion-js/schema'\nimport {MetadataStorage} from '../storage/metadataStorage'\nimport 'reflect-metadata'\nimport {CannotDetermineTypeError, CannotUseArrayError} from '../errors'\nimport {isClass} from '../utils/isClass'\nimport {Model} from '@orion-js/models'\n\nexport interface SchemaNodeForClasses extends Omit<SchemaNode, 'type'> {\n type: SchemaMetaFieldType | Constructor<any> | Model | Model[]\n}\n\nexport type PropOptions = Partial<SchemaNodeForClasses>\n\nexport function Prop(options: PropOptions = {}): PropertyDecorator {\n return (classDef: Function, propertyKey: string) => {\n const schemaName = classDef.constructor?.name\n\n if (!options.type) {\n const type = Reflect.getMetadata('design:type', classDef, propertyKey)\n\n if (isClass(type) || type === Object) {\n throw new CannotDetermineTypeError(schemaName, propertyKey)\n }\n\n if (type === Array) {\n throw new CannotUseArrayError(schemaName, propertyKey)\n }\n\n if (type) {\n options.type = type\n } else {\n throw new CannotDetermineTypeError(schemaName, propertyKey)\n }\n }\n\n MetadataStorage.addPropMetadata({target: classDef.constructor, propertyKey, options})\n\n classDef[propertyKey] = options\n }\n}\n","// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isClass = (type: Function) => /^class\\s/.test(Function.prototype.toString.call(type))\n","import {ModelResolver, ModelResolverResolve} from '@orion-js/resolvers'\nimport {MetadataStorage} from '../storage/metadataStorage'\n\n/**\n * @deprecated Please use a @TypedSchema and a @Model a @ModelResolver instead\n */\nexport function ResolverProp(options: ModelResolver<ModelResolverResolve>): PropertyDecorator {\n return (classDef: any, propertyKey: string) => {\n MetadataStorage.addResolverMetadata({target: classDef.constructor, propertyKey, options})\n\n classDef[propertyKey] = options\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport isPlainObject from 'lodash/isPlainObject'\nimport {PropOptions} from '../../decorators/prop'\nimport {Schema, SchemaRecursiveNodeType} from '@orion-js/schema'\nimport {MetadataStorage} from '../../storage/metadataStorage'\nimport {isClass} from '../../utils/isClass'\n\nfunction isPrimitive(type: Function) {\n return ([Boolean, Number, String, Date] as Function[]).includes(type)\n}\n\nexport function processSchemaForProp(prop: PropOptions) {\n if (typeof (prop.type as SchemaRecursiveNodeType)?.type === 'function') {\n return processSchemaForProp(prop.type as PropOptions)\n }\n\n if (Array.isArray(prop.type)) {\n return prop.type.length > 0\n ? {...prop, type: [processSchemaForProp(prop.type[0] as PropOptions)]}\n : prop\n }\n\n if (typeof prop.type !== 'function') {\n if (isPlainObject(prop.type)) {\n const subschema = {}\n Object.keys(prop.type).forEach(key => {\n subschema[key] = processSchemaForProp({type: prop.type[key]})\n })\n return {...prop, type: subschema}\n }\n\n return prop\n }\n\n if (isPrimitive(prop.type)) {\n return prop\n }\n\n if (isClass(prop.type)) {\n const schema = getSchemaForClassRecursive(prop.type)\n return {\n ...prop,\n type: schema\n }\n }\n\n return prop\n}\n\nexport function getSchemaForClassRecursive(target): Schema {\n const schema: Schema = {}\n\n let parent: Function = target\n\n while (parent.prototype) {\n if (parent === Function.prototype) {\n break\n }\n\n const props = MetadataStorage.getSchemaProps(parent)\n if (!props) {\n parent = Object.getPrototypeOf(parent)\n continue\n }\n\n Object.keys(props).forEach(key => {\n schema[key] = processSchemaForProp(props[key])\n })\n\n parent = Object.getPrototypeOf(parent)\n }\n\n return schema\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {Schema} from '@orion-js/schema'\nimport {Constructor} from '../utils/interfaces'\nimport {getSchemaForClassRecursive} from './helpers/processSchemaForProp'\n\nexport function getSchemaForClass<TClass>(target: Constructor<TClass>): Schema {\n return getSchemaForClassRecursive(target)\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {createModel, Model, ModelSchema, ModelResolversMap} from '@orion-js/models'\nimport {FieldType} from '@orion-js/schema'\nimport {PropOptions} from '..'\nimport {MetadataStorage} from '../storage/metadataStorage'\nimport {Constructor} from '../utils/interfaces'\nimport {processSchemaForProp} from './helpers/processSchemaForProp'\n\nconst modelCache = new Map<Constructor<any>, Model>()\n\nfunction processModelSchemaForProp(prop: PropOptions) {\n if ((prop.type as Model)?.__isModel === true) {\n return prop\n }\n\n if ((prop.type as FieldType)?._isFieldType === true) {\n return prop\n }\n\n return processSchemaForProp(prop)\n}\n\nexport function getModelForClass<TClass>(target: Constructor<TClass>): Model {\n const targetAsModel = target as any as Model\n if (targetAsModel.__isModel) {\n return targetAsModel\n }\n\n let modelResolvers = null\n\n if (target.prototype.typedModel) {\n modelResolvers = target.prototype.resolvers || {}\n target = target.prototype.typedModel\n }\n\n const schemaId = (target as any).__schemaId\n\n if (modelCache.has(schemaId)) {\n return modelCache.get(schemaId)\n }\n\n const schema: ModelSchema = {}\n const resolverMap: ModelResolversMap = {}\n\n let parent: Function = target\n\n while (parent.prototype) {\n if (parent === Function.prototype) {\n break\n }\n\n const props = MetadataStorage.getSchemaProps(parent) ?? {}\n\n Object.keys(props).forEach(key => {\n schema[key] = processModelSchemaForProp(props[key])\n })\n\n const resolvers = MetadataStorage.getSchemaResolvers(parent) ?? {}\n Object.keys(resolvers).forEach(key => {\n resolverMap[key] = resolvers[key]\n })\n\n parent = Object.getPrototypeOf(parent)\n }\n\n const model = createModel({\n name: targetAsModel.name,\n schema,\n clean: targetAsModel.clean,\n validate: targetAsModel.validate,\n resolvers: {\n ...resolverMap,\n ...modelResolvers\n }\n })\n\n modelCache.set(schemaId, model)\n\n return model\n}\n","import {Model} from '@orion-js/models'\nimport {CloneOptions} from '@orion-js/models'\nimport {Constructor} from '../utils/interfaces'\nimport {getModelForClass} from './getModelForClass'\n\nexport interface CloneSchemaClassOptions<TClass, TFields extends keyof TClass> {\n name: string\n pickFields: readonly TFields[]\n mapFields?: CloneOptions['mapFields']\n extendSchema?: CloneOptions['extendSchema']\n}\n\n/**\n * This function returns a cloned model but the type is a subset of the original Schema.\n * To use the type of the cloned schema use `typeof ClonedModel.type`\n *\n * Example:\n * ```ts\n * const ClonedModel = cloneSchemaClass(Schema, {\n * name: 'ClonedSchema',\n * pickFields: ['name'] as const\n * })\n * type ClonedType = typeof ClonedModel.type\n * ```\n */\nexport function cloneSchemaClass<TClass, TFields extends keyof TClass>(\n schema: Constructor<TClass>,\n options: CloneSchemaClassOptions<TClass, TFields>\n): Model<Pick<TClass, TFields>> {\n const model = getModelForClass(schema)\n\n const newModel: Model<Pick<TClass, TFields>> = model.clone({\n name: options.name,\n pickFields: options.pickFields as any as string[],\n mapFields: options.mapFields,\n extendSchema: options.extendSchema\n })\n\n return newModel\n}\n"],"mappings":"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","names":["CannotDetermineTypeError","Error","constructor","schemaName","propertyKey","CannotUseArrayError","Error","constructor","schemaName","propertyKey","PropertyAlreadyExistsError","Error","constructor","schemaName","propertyName","generateId","MetadataStorageHandler","schemas","Map","getSchema","target","schema","get","__schemaId","schemaId","generateId","newSchema","options","properties","resolvers","set","addSchemaMetadata","addPropMetadata","propertyKey","currProp","PropertyAlreadyExistsError","name","addResolverMetadata","currResolver","getSchemaProps","getSchemaResolvers","MetadataStorage","TypedModel","options","target","MetadataStorage","addSchemaMetadata","getModel","getModelForClass","TypedSchema","options","target","MetadataStorage","addSchemaMetadata","getModel","getModelForClass","isClass","type","test","Function","prototype","toString","call","Prop","options","classDef","propertyKey","schemaName","constructor","name","type","Reflect","getMetadata","isClass","Object","CannotDetermineTypeError","Array","CannotUseArrayError","MetadataStorage","addPropMetadata","target","ResolverProp","options","classDef","propertyKey","MetadataStorage","addResolverMetadata","target","constructor","isPlainObject","isPrimitive","type","Boolean","Number","String","Date","includes","processSchemaForProp","prop","Array","isArray","length","isPlainObject","subschema","Object","keys","forEach","key","isClass","schema","getSchemaForClassRecursive","target","parent","prototype","Function","props","MetadataStorage","getSchemaProps","getPrototypeOf","getSchemaForClass","target","getSchemaForClassRecursive","createModel","modelCache","Map","processModelSchemaForProp","prop","type","__isModel","_isFieldType","processSchemaForProp","getModelForClass","target","targetAsModel","modelResolvers","prototype","typedModel","resolvers","schemaId","__schemaId","has","get","schema","resolverMap","parent","Function","props","MetadataStorage","getSchemaProps","Object","keys","forEach","key","getSchemaResolvers","getPrototypeOf","model","createModel","name","clean","validate","set","cloneSchemaClass","schema","options","model","getModelForClass","newModel","clone","name","pickFields","mapFields","extendSchema"]}
1
+ {"version":3,"sources":["../src/errors/CannotDetermineType.ts","../src/errors/CannotUseArray.ts","../src/errors/PropertyAlreadyExists.ts","../src/storage/metadataStorage.ts","../src/decorators/typedModel.ts","../src/decorators/typedSchema.ts","../src/decorators/prop.ts","../src/utils/isClass.ts","../src/decorators/resolver.ts","../src/factories/helpers/processSchemaForProp.ts","../src/factories/getSchemaForClass.ts","../src/factories/getModelForClass.ts","../src/factories/cloneSchemaClass.ts"],"sourcesContent":["export class CannotDetermineTypeError extends Error {\n constructor(schemaName: string, propertyKey: string) {\n super(\n `Cannot determine type at \"${schemaName}.${propertyKey}\" field (object/union/ambiguous type was used). Make sure your property decorator defines a \"type\" option. For example: \"@Prop({ type: {name: String, age: Number} })\"`\n )\n }\n}\n","export class CannotUseArrayError extends Error {\n constructor(schemaName: string, propertyKey: string) {\n super(\n `Cannot infer type from an Array TypeScript type at \"${schemaName}.${propertyKey}\" field. Make sure your property decorator defines a \"type\" option. For example: \"@Prop({ type: [String | Number | ...] })\"`\n )\n }\n}\n","export class PropertyAlreadyExistsError extends Error {\n constructor(schemaName: string, propertyName: string) {\n super(`Schema with name \"${schemaName}\" already contains property \"${propertyName}\".`)\n }\n}\n","import {PropOptions} from '..'\nimport {PropertyAlreadyExistsError} from '../errors'\nimport {ModelResolversMap} from '@orion-js/models'\nimport {ModelResolver, ModelResolverResolve} from '@orion-js/resolvers'\nimport {generateId} from '@orion-js/helpers'\n\nexport type PropertiesMap = {[key: string]: PropOptions}\n\ninterface SchemaStorage {\n schema: any\n options: object\n properties: PropertiesMap\n resolvers: ModelResolversMap\n}\n\nexport type TypedModelOptions = Record<string, never>\n\nexport class MetadataStorageHandler {\n private schemas = new Map<any, SchemaStorage>()\n\n private getSchema(target) {\n const schema = this.schemas.get(target.__schemaId)\n if (schema) return schema\n\n const schemaId = generateId()\n\n target.__schemaId = schemaId\n\n const newSchema = {\n schema: target,\n options: {},\n properties: {},\n resolvers: {}\n }\n this.schemas.set(target.__schemaId, newSchema)\n return newSchema\n }\n\n public addSchemaMetadata({target, options}: {target: any; options?: TypedModelOptions}) {\n const schema = this.getSchema(target)\n schema.options = options\n }\n\n public addPropMetadata({\n target,\n propertyKey,\n options\n }: {\n target: any\n propertyKey: string\n options: PropOptions\n }) {\n const schema = this.getSchema(target)\n\n const currProp = schema.properties[propertyKey]\n if (currProp) {\n throw new PropertyAlreadyExistsError(target.name, propertyKey)\n }\n schema.properties[propertyKey] = options\n }\n\n public addResolverMetadata({\n target,\n propertyKey,\n options\n }: {\n target: any\n propertyKey: string\n options: ModelResolver<ModelResolverResolve>\n }) {\n const schema = this.getSchema(target)\n\n const currResolver = schema.resolvers[propertyKey]\n if (currResolver) {\n throw new PropertyAlreadyExistsError(target.name, propertyKey)\n }\n schema.resolvers[propertyKey] = options\n }\n\n public getSchemaProps(target: any): PropertiesMap | undefined {\n const schema = this.getSchema(target)\n\n return schema.properties\n }\n\n public getSchemaResolvers(target: any): ModelResolversMap | undefined {\n const schema = this.getSchema(target)\n\n return schema.resolvers\n }\n}\n\nexport const MetadataStorage = new MetadataStorageHandler()\n","import {getModelForClass} from '..'\nimport {MetadataStorage, TypedModelOptions} from '../storage/metadataStorage'\n\n/**\n * @deprecated Please use @TypedSchema instead\n */\nexport function TypedModel(options: TypedModelOptions = {}): ClassDecorator {\n return target => {\n MetadataStorage.addSchemaMetadata({target, options})\n\n // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass\n target.getModel = () => getModelForClass(target)\n }\n}\n","import {getModelForClass} from '..'\nimport {MetadataStorage, TypedModelOptions} from '../storage/metadataStorage'\n\nexport function TypedSchema(options: TypedModelOptions = {}): ClassDecorator {\n return target => {\n MetadataStorage.addSchemaMetadata({target, options})\n\n // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass\n target.getModel = () => getModelForClass(target)\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {Constructor, SchemaMetaFieldType, SchemaNode} from '@orion-js/schema'\nimport {MetadataStorage} from '../storage/metadataStorage'\nimport 'reflect-metadata'\nimport {CannotDetermineTypeError, CannotUseArrayError} from '../errors'\nimport {isClass} from '../utils/isClass'\nimport {Model} from '@orion-js/models'\n\nexport interface SchemaNodeForClasses extends Omit<SchemaNode, 'type'> {\n type: SchemaMetaFieldType | Constructor<any> | Model | Model[]\n}\n\nexport type PropOptions = Partial<SchemaNodeForClasses>\n\nexport function Prop(options: PropOptions = {}): PropertyDecorator {\n return (classDef: Function, propertyKey: string) => {\n const schemaName = classDef.constructor?.name\n\n if (!options.type) {\n const type = Reflect.getMetadata('design:type', classDef, propertyKey)\n\n if (isClass(type) || type === Object) {\n throw new CannotDetermineTypeError(schemaName, propertyKey)\n }\n\n if (type === Array) {\n throw new CannotUseArrayError(schemaName, propertyKey)\n }\n\n if (type) {\n options.type = type\n } else {\n throw new CannotDetermineTypeError(schemaName, propertyKey)\n }\n }\n\n MetadataStorage.addPropMetadata({target: classDef.constructor, propertyKey, options})\n\n classDef[propertyKey] = options\n }\n}\n","// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isClass = (type: Function) => /^class\\s/.test(Function.prototype.toString.call(type))\n","import {ModelResolver, ModelResolverResolve} from '@orion-js/resolvers'\nimport {MetadataStorage} from '../storage/metadataStorage'\n\n/**\n * @deprecated Please use a @TypedSchema and a @Model a @ModelResolver instead\n */\nexport function ResolverProp(options: ModelResolver<ModelResolverResolve>): PropertyDecorator {\n return (classDef: any, propertyKey: string) => {\n MetadataStorage.addResolverMetadata({target: classDef.constructor, propertyKey, options})\n\n classDef[propertyKey] = options\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport isPlainObject from 'lodash/isPlainObject'\nimport {PropOptions} from '../../decorators/prop'\nimport {Schema, SchemaRecursiveNodeType} from '@orion-js/schema'\nimport {MetadataStorage} from '../../storage/metadataStorage'\nimport {isClass} from '../../utils/isClass'\n\nfunction isPrimitive(type: Function) {\n return ([Boolean, Number, String, Date] as Function[]).includes(type)\n}\n\nexport function processSchemaForProp(prop: PropOptions) {\n if (typeof (prop.type as SchemaRecursiveNodeType)?.type === 'function') {\n return processSchemaForProp(prop.type as PropOptions)\n }\n\n if (Array.isArray(prop.type)) {\n return prop.type.length > 0\n ? {...prop, type: [processSchemaForProp(prop.type[0] as PropOptions)]}\n : prop\n }\n\n if (typeof prop.type !== 'function') {\n if (isPlainObject(prop.type)) {\n const subschema = {}\n Object.keys(prop.type).forEach(key => {\n subschema[key] = processSchemaForProp({type: prop.type[key]})\n })\n return {...prop, type: subschema}\n }\n\n return prop\n }\n\n if (isPrimitive(prop.type)) {\n return prop\n }\n\n if (isClass(prop.type)) {\n const schema = getSchemaForClassRecursive(prop.type)\n return {\n ...prop,\n type: schema\n }\n }\n\n return prop\n}\n\nexport function getSchemaForClassRecursive(target): Schema {\n const schema: Schema = {}\n\n let parent: Function = target\n\n while (parent.prototype) {\n if (parent === Function.prototype) {\n break\n }\n\n const props = MetadataStorage.getSchemaProps(parent)\n if (!props) {\n parent = Object.getPrototypeOf(parent)\n continue\n }\n\n Object.keys(props).forEach(key => {\n schema[key] = processSchemaForProp(props[key])\n })\n\n parent = Object.getPrototypeOf(parent)\n }\n\n return schema\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {Schema} from '@orion-js/schema'\nimport {Constructor} from '../utils/interfaces'\nimport {getSchemaForClassRecursive} from './helpers/processSchemaForProp'\n\nexport function getSchemaForClass<TClass>(target: Constructor<TClass>): Schema {\n return getSchemaForClassRecursive(target)\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {createModel, Model, ModelSchema, ModelResolversMap} from '@orion-js/models'\nimport {FieldType} from '@orion-js/schema'\nimport {PropOptions} from '..'\nimport {MetadataStorage} from '../storage/metadataStorage'\nimport {Constructor} from '../utils/interfaces'\nimport {processSchemaForProp} from './helpers/processSchemaForProp'\n\nconst modelCache = new Map<Constructor<any>, Model>()\n\nfunction processModelSchemaForProp(prop: PropOptions) {\n if ((prop.type as Model)?.__isModel === true) {\n return prop\n }\n\n if ((prop.type as FieldType)?._isFieldType === true) {\n return prop\n }\n\n return processSchemaForProp(prop)\n}\n\nexport function getModelForClass<TClass>(target: Constructor<TClass>): Model {\n const targetAsModel = target as any as Model\n if (targetAsModel.__isModel) {\n return targetAsModel\n }\n\n let modelResolvers = null\n\n if (target.prototype.typedModel) {\n modelResolvers = target.prototype.resolvers || {}\n target = target.prototype.typedModel\n }\n\n const schemaId = (target as any).__schemaId\n\n if (modelCache.has(schemaId)) {\n return modelCache.get(schemaId)\n }\n\n const schema: ModelSchema = {}\n const resolverMap: ModelResolversMap = {}\n\n let parent: Function = target\n\n while (parent.prototype) {\n if (parent === Function.prototype) {\n break\n }\n\n const props = MetadataStorage.getSchemaProps(parent) ?? {}\n\n Object.keys(props).forEach(key => {\n schema[key] = processModelSchemaForProp(props[key])\n })\n\n const resolvers = MetadataStorage.getSchemaResolvers(parent) ?? {}\n Object.keys(resolvers).forEach(key => {\n resolverMap[key] = resolvers[key]\n })\n\n parent = Object.getPrototypeOf(parent)\n }\n\n const model = createModel({\n name: targetAsModel.name,\n schema,\n clean: targetAsModel.clean,\n validate: targetAsModel.validate,\n resolvers: {\n ...resolverMap,\n ...modelResolvers\n }\n })\n\n modelCache.set(schemaId, model)\n\n return model\n}\n","import {Model} from '@orion-js/models'\nimport {CloneOptions} from '@orion-js/models'\nimport {Constructor} from '../utils/interfaces'\nimport {getModelForClass} from './getModelForClass'\n\nexport interface CloneSchemaClassOptions<TClass, TFields extends keyof TClass> {\n name: string\n pickFields: readonly TFields[]\n mapFields?: CloneOptions['mapFields']\n extendSchema?: CloneOptions['extendSchema']\n}\n\n/**\n * This function returns a cloned model but the type is a subset of the original Schema.\n * To use the type of the cloned schema use `typeof ClonedModel.type`\n *\n * Example:\n * ```ts\n * const ClonedModel = cloneSchemaClass(Schema, {\n * name: 'ClonedSchema',\n * pickFields: ['name'] as const\n * })\n * type ClonedType = typeof ClonedModel.type\n * ```\n */\nexport function cloneSchemaClass<TClass, TFields extends keyof TClass>(\n schema: Constructor<TClass>,\n options: CloneSchemaClassOptions<TClass, TFields>\n): Model<Pick<TClass, TFields>> {\n const model = getModelForClass(schema)\n\n const newModel: Model<Pick<TClass, TFields>> = model.clone({\n name: options.name,\n pickFields: options.pickFields as any as string[],\n mapFields: options.mapFields,\n extendSchema: options.extendSchema\n })\n\n return newModel\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-js/typed-model",
3
- "version": "4.0.0-next.2",
3
+ "version": "4.0.0-next.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -18,11 +18,11 @@
18
18
  "dependencies": {
19
19
  "lodash": "^4.17.21",
20
20
  "reflect-metadata": "0.1.13",
21
- "@orion-js/helpers": "4.0.0-next.2",
22
- "@orion-js/models": "4.0.0-next.2",
23
- "@orion-js/schema": "4.0.0-next.2",
24
- "@orion-js/services": "4.0.0-next.2",
25
- "@orion-js/resolvers": "4.0.0-next.2"
21
+ "@orion-js/helpers": "4.0.0-next.3",
22
+ "@orion-js/models": "4.0.0-next.3",
23
+ "@orion-js/resolvers": "4.0.0-next.3",
24
+ "@orion-js/schema": "4.0.0-next.3",
25
+ "@orion-js/services": "4.0.0-next.3"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^18.0.0",