@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 +21 -0
- package/dist/index.cjs +29 -66
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +29 -68
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
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
|
|
43
|
+
var CannotDetermineTypeError = class extends Error {
|
|
45
44
|
constructor(schemaName, propertyKey) {
|
|
46
|
-
super(
|
|
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
|
|
52
|
+
var CannotUseArrayError = class extends Error {
|
|
54
53
|
constructor(schemaName, propertyKey) {
|
|
55
|
-
super(
|
|
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
|
|
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
|
|
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({
|
|
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({
|
|
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 =
|
|
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,
|
package/dist/index.cjs.map
CHANGED
|
@@ -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":"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","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
|
|
2
|
+
var CannotDetermineTypeError = class extends Error {
|
|
6
3
|
constructor(schemaName, propertyKey) {
|
|
7
|
-
super(
|
|
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
|
|
11
|
+
var CannotUseArrayError = class extends Error {
|
|
15
12
|
constructor(schemaName, propertyKey) {
|
|
16
|
-
super(
|
|
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
|
|
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
|
|
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({
|
|
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({
|
|
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 =
|
|
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.
|
|
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.
|
|
22
|
-
"@orion-js/models": "4.0.0-next.
|
|
23
|
-
"@orion-js/
|
|
24
|
-
"@orion-js/
|
|
25
|
-
"@orion-js/
|
|
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",
|