ac-convert-json-schema-to-mongoose 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +5 -5
- package/.travis.yml +0 -4
- package/app.js.map +0 -1
- package/app.ts +0 -32
- package/index.js.map +0 -1
- package/index.ts +0 -3
- package/lib/json-schema.js.map +0 -1
- package/lib/json-schema.ts +0 -146
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ac-convert-json-schema-to-mongoose",
|
3
|
-
"version": "0.3.
|
3
|
+
"version": "0.3.5",
|
4
4
|
"description": "A library for converting JSON schema to mongoose 5 schema",
|
5
5
|
"keywords": [
|
6
6
|
"json",
|
@@ -21,12 +21,12 @@
|
|
21
21
|
"license": "MIT",
|
22
22
|
"dependencies": {
|
23
23
|
"lodash": "^4.17.21",
|
24
|
-
"mongoose": "^
|
24
|
+
"mongoose": "^8.8.0"
|
25
25
|
},
|
26
26
|
"devDependencies": {
|
27
|
-
"@types/jasmine": "^
|
28
|
-
"@types/lodash": "^4.
|
29
|
-
"@types/node": "^
|
27
|
+
"@types/jasmine": "^5.1.4",
|
28
|
+
"@types/lodash": "^4.17.13",
|
29
|
+
"@types/node": "^22.8.7",
|
30
30
|
"jasmine-node": "^3.0.0"
|
31
31
|
},
|
32
32
|
"scripts": {
|
package/.travis.yml
DELETED
package/app.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"AAAA,IAAO,oBAAoB,WAAW,mBAAmB,CAAC,CAAA;AAC1D,IAAO,IAAI,WAAW,MAAM,CAAC,CAAA;AA0C7B,AAxCA,YAAY;AACZ,GAAG;AACH,UAAU;AACV,OAAO;AACP,yBAAyB;AACzB,6BAA6B;AAC7B,QAAQ;AACR,eAAe;AACf,yBAAyB;AACzB,qBAAqB;AACrB,WAAW;AACX,iBAAiB;AACjB,eAAe;AACf,6BAA6B;AAC7B,eAAe;AACf,WAAW;AACX,OAAO;AACP,GAAG;AAEH,aAAa;AACb,GAAG;AACH,qBAAqB;AACrB,iBAAiB;AACjB,OAAO;AACP,aAAa;AACb,WAAW;AACX,yBAAyB;AACzB,YAAY;AACZ,kBAAkB;AAClB,WAAW;AACX,6BAA6B;AAC7B,yBAAyB;AACzB,eAAe;AACf,+EAA+E;AAC/E,mGAAmG;AACnG,eAAe;AACf,WAAW;AACX,OAAO;AACP,GAAG;IAEC,IAAI,GAAG;IACP,GAAG,EAAE;QACD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,UAAU;KAAC;IACxB,CAAC,EAAE;QACC,IAAI,EAAE,OAAO;QACb,KAAK,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,GAAG,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC;gBACrB,GAAG,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC;aAChC;SAAC;KAAC;IACH,MAAM,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,EAAE,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC;YACjB,GAAG,EAAE,EAAC,IAAI,EAAE,GAAG,EAAC;SAC3B;KAAC;CAAC,CAAA;AAEH,IAAI,KAAK,GAAG;IACR,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,EAAE,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC;QACjB,GAAG,EAAE,EAAC,IAAI,EAAE,GAAG,EAAC;QAChB,OAAO,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,MAAM,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAC;gBAC/D,UAAU,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,WAAW,EAAC;aAChG;SAAC;KAAC;CAAC,CAAA;AAEJ,IAAI,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAE9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA"}
|
package/app.ts
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
import createMongooseSchema from './lib/json-schema';
|
2
|
-
|
3
|
-
const refs = {
|
4
|
-
yep: {
|
5
|
-
type: 'string', pattern: '^\\d{3}$'
|
6
|
-
}, a: {
|
7
|
-
type: 'array', items: {
|
8
|
-
type: 'object', properties: {
|
9
|
-
num: {type: 'number'}, str: {type: 'string'}
|
10
|
-
}
|
11
|
-
}
|
12
|
-
}, idSpec: {
|
13
|
-
type: 'object', properties: {
|
14
|
-
id: {$ref: 'yep'}, arr: {$ref: 'a'}
|
15
|
-
}
|
16
|
-
}
|
17
|
-
};
|
18
|
-
|
19
|
-
// noinspection ReservedWordAsName
|
20
|
-
const valid = {
|
21
|
-
type: 'object', properties: {
|
22
|
-
id: {$ref: 'yep'}, arr: {$ref: 'a'}, address: {
|
23
|
-
type: 'object', properties: {
|
24
|
-
street: {type: 'integer', default: 44, minimum: 0, maximum: 50},
|
25
|
-
houseColor: {type: 'string', default: '[Function=Date.now]', format: 'date-time'}
|
26
|
-
}
|
27
|
-
}
|
28
|
-
}
|
29
|
-
};
|
30
|
-
|
31
|
-
const result = createMongooseSchema(refs, valid);
|
32
|
-
console.dir(result, {depth: null});
|
package/index.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,IAAO,oBAAoB,WAAW,mBAAmB,CAAC,CAAA;AAC7B,AAA7B,iBAAS,oBAAoB,CAAA"}
|
package/index.ts
DELETED
package/lib/json-schema.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["json-schema.ts"],"names":[],"mappings":"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"}
|
package/lib/json-schema.ts
DELETED
@@ -1,146 +0,0 @@
|
|
1
|
-
import * as _ from 'lodash';
|
2
|
-
import * as mongoose from 'mongoose';
|
3
|
-
|
4
|
-
const typeStringToMongooseType = {'string': String, 'boolean': Boolean, 'number': Number, 'integer': Number};
|
5
|
-
|
6
|
-
const typeRefToMongooseType = {
|
7
|
-
'#/definitions/objectid': mongoose.Schema.Types.ObjectId, '#/definitions/dateOrDatetime': Date
|
8
|
-
};
|
9
|
-
|
10
|
-
const subSchemaTypeV3 = (parentSchema: any, subschema: any, key: any) => {
|
11
|
-
return (0 <= parentSchema.required.indexOf(key) && !_.isPlainObject(subschema)) ? {
|
12
|
-
type: subschema, required: true
|
13
|
-
} : subschema;
|
14
|
-
};
|
15
|
-
|
16
|
-
const subSchemaTypeV4 = (parentSchema: any, subschema: any, key: any) => {
|
17
|
-
return (0 <= parentSchema.required.indexOf(key) ) ? !_.isPlainObject(subschema) ? {
|
18
|
-
type: subschema, required: true
|
19
|
-
} : subschema.hasOwnProperty('type') ? _.assign(subschema, {required: true}) : subschema : subschema;
|
20
|
-
};
|
21
|
-
|
22
|
-
// noinspection ReservedWordAsName
|
23
|
-
const schemaParamsToMongoose = {
|
24
|
-
/**
|
25
|
-
* default value
|
26
|
-
*/
|
27
|
-
default: (default_: string) => {
|
28
|
-
const func = (_.last(/^\[Function=(.+)\]$/.exec(default_)) || '')
|
29
|
-
.replace(/\\_/g, '`underscore`')
|
30
|
-
.replace(/_/g, ' ')
|
31
|
-
.replace(/`underscore`/g, '_');
|
32
|
-
|
33
|
-
// noinspection ReservedWordAsName,DynamicallyGeneratedCodeJS
|
34
|
-
return {default: eval(func) || default_};
|
35
|
-
},
|
36
|
-
|
37
|
-
/**
|
38
|
-
* Pattern for value to match
|
39
|
-
*/
|
40
|
-
pattern: (pattern: string) => ({match: RegExp(pattern)}),
|
41
|
-
type: (type: string) => ({type: (<any>typeStringToMongooseType)[type]}),
|
42
|
-
minLength: (min: number) => ({minlength: min}),
|
43
|
-
maxLength: (max: number) => ({maxlength: max}),
|
44
|
-
minimum: (min: number) => ({min: min}),
|
45
|
-
maximum: (max: number) => ({max: max}),
|
46
|
-
enum: (members: any[]) => ({enum: members})
|
47
|
-
};
|
48
|
-
|
49
|
-
const toMongooseParams = (acc: any, val: any, key: any) => {
|
50
|
-
let func;
|
51
|
-
|
52
|
-
// noinspection AssignmentResultUsedJS
|
53
|
-
return (func = (<any>schemaParamsToMongoose)[key]) ? _.assign(acc, func(val)) : acc;
|
54
|
-
};
|
55
|
-
|
56
|
-
const unsupportedRefValue = (jsonSchema: any) => {
|
57
|
-
throw new Error('Unsupported $ref value: ' + jsonSchema.$ref);
|
58
|
-
};
|
59
|
-
|
60
|
-
const unsupportedJsonSchema = (jsonSchema: any) => {
|
61
|
-
throw new Error('Unsupported JSON schema type, `' + jsonSchema.type + '`');
|
62
|
-
};
|
63
|
-
|
64
|
-
const convertV = (version: any, refSchemas: any, jsonSchema: any): any => {
|
65
|
-
|
66
|
-
if (!_.isPlainObject(jsonSchema)) {
|
67
|
-
unsupportedJsonSchema(jsonSchema);
|
68
|
-
}
|
69
|
-
|
70
|
-
let converted,
|
71
|
-
result,
|
72
|
-
format = jsonSchema.format,
|
73
|
-
isRef = !_.isEmpty(jsonSchema.$ref),
|
74
|
-
isTypeDate = ('string' === jsonSchema.type) && (('date' === format) || ('date-time' === format)),
|
75
|
-
mongooseRef = (<any>typeRefToMongooseType)[jsonSchema.$ref],
|
76
|
-
isMongooseRef = ('undefined' != typeof(mongooseRef)),
|
77
|
-
subSchema = _.isEmpty(refSchemas) ? false : refSchemas[jsonSchema.$ref],
|
78
|
-
subSchemaType = (4 == version) ? subSchemaTypeV4 : subSchemaTypeV3;
|
79
|
-
|
80
|
-
return (result =
|
81
|
-
isRef ?
|
82
|
-
isMongooseRef ?
|
83
|
-
mongooseRef :
|
84
|
-
subSchema ?
|
85
|
-
convertV(version, refSchemas, subSchema) :
|
86
|
-
unsupportedRefValue(jsonSchema)
|
87
|
-
|
88
|
-
:
|
89
|
-
isTypeDate ?
|
90
|
-
_.reduce(<any> _.omit(jsonSchema, 'type', 'format'), toMongooseParams, {type: typeRefToMongooseType['#/definitions/dateOrDatetime']})
|
91
|
-
|
92
|
-
:
|
93
|
-
_.has(typeStringToMongooseType, jsonSchema.type) ?
|
94
|
-
_.reduce(jsonSchema, toMongooseParams, {})
|
95
|
-
|
96
|
-
:
|
97
|
-
(jsonSchema.type === 'object') ?
|
98
|
-
_.isEmpty(jsonSchema.properties) ?
|
99
|
-
mongoose.Schema.Types.Mixed :
|
100
|
-
( converted =
|
101
|
-
_.mapValues(jsonSchema.properties, convertV.bind(null, version, refSchemas)), jsonSchema.required ?
|
102
|
-
(_.mapValues(converted, subSchemaType.bind(null, jsonSchema))) :
|
103
|
-
converted )
|
104
|
-
|
105
|
-
:
|
106
|
-
(jsonSchema.type === 'array') ?
|
107
|
-
!_.isEmpty(jsonSchema.items) ?
|
108
|
-
[convertV(version, refSchemas, jsonSchema.items)] :
|
109
|
-
[]
|
110
|
-
|
111
|
-
:
|
112
|
-
!_.has(jsonSchema, 'type') ?
|
113
|
-
mongoose.Schema.Types.Mixed :
|
114
|
-
unsupportedJsonSchema(jsonSchema)
|
115
|
-
);
|
116
|
-
};
|
117
|
-
|
118
|
-
const convert = (refSchemas: any, jsonSchema: any): any => {
|
119
|
-
let version = 3;
|
120
|
-
|
121
|
-
switch (jsonSchema.$schema) {
|
122
|
-
case 'http://json-schema.org/draft-03/schema#':
|
123
|
-
version = 3;
|
124
|
-
break;
|
125
|
-
|
126
|
-
case 'http://json-schema.org/draft-04/schema#':
|
127
|
-
version = 4;
|
128
|
-
break;
|
129
|
-
|
130
|
-
// backwards compatibility
|
131
|
-
default:
|
132
|
-
version = 3;
|
133
|
-
break;
|
134
|
-
}
|
135
|
-
|
136
|
-
return convertV(version, refSchemas, jsonSchema);
|
137
|
-
};
|
138
|
-
|
139
|
-
interface CreateMongooseSchema {
|
140
|
-
(refSchemas: any, jsonSchema: any): any
|
141
|
-
|
142
|
-
(refSchemas: any): (jsonSchema: any) => any
|
143
|
-
}
|
144
|
-
|
145
|
-
// noinspection JSUnusedGlobalSymbols
|
146
|
-
export default <CreateMongooseSchema> _.curry(convert);
|