diff --git a/app/api/thesauris/dictionariesModel.js b/app/api/thesauris/dictionariesModel.js deleted file mode 100644 index 47958756c7..0000000000 --- a/app/api/thesauris/dictionariesModel.js +++ /dev/null @@ -1,13 +0,0 @@ -import mongoose from 'mongoose'; -import { instanceModel } from 'api/odm'; - -const dictionarySchema = new mongoose.Schema({ - name: String, - values: [{ - id: String, - label: { type: String }, - values: mongoose.Schema.Types.Mixed, - }] -}); - -export default instanceModel('dictionaries', dictionarySchema); diff --git a/app/api/thesauris/dictionariesModel.ts b/app/api/thesauris/dictionariesModel.ts new file mode 100644 index 0000000000..e4a35c7b8a --- /dev/null +++ b/app/api/thesauris/dictionariesModel.ts @@ -0,0 +1,21 @@ +/** @format */ +import { instanceModel } from 'api/odm'; +import createMongooseSchema from 'json-schema-to-mongoose'; +import mongoose from 'mongoose'; + +import schema from './dictionariesSchema'; +import { Thesaurus } from './dictionariesType'; + +// const dictionarySchema = new mongoose.Schema({ +// name: String, +// values: [ +// { +// id: String, +// label: { type: String }, +// values: mongoose.Schema.Types.Mixed, +// }, +// ], +// }); + +export interface ThesaurusDocument extends mongoose.Document, Thesaurus {} +export default instanceModel('dictionaries', createMongooseSchema({}, schema)); diff --git a/app/api/thesauris/dictionariesSchema.ts b/app/api/thesauris/dictionariesSchema.ts new file mode 100644 index 0000000000..6d0d69f7df --- /dev/null +++ b/app/api/thesauris/dictionariesSchema.ts @@ -0,0 +1,32 @@ +/** @format */ + +export default { + $async: true, + title: 'Thesaurus', + type: 'object', + required: ['name'], + properties: { + name: { + type: 'string', + uniqueName: '', + minLength: 1, + }, + values: { + type: 'array', + items: { + type: 'object', + required: ['label'], + properties: { + label: { + type: 'id', + minLength: 1, + }, + label: { + type: 'string', + minLength: 1, + }, + }, + }, + }, + }, +}; diff --git a/app/api/thesauris/dictionariesType.d.ts b/app/api/thesauris/dictionariesType.d.ts new file mode 100644 index 0000000000..3e537da490 --- /dev/null +++ b/app/api/thesauris/dictionariesType.d.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/** + * This file was automatically generated by json-schema-to-typescript. + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, + * and run json-schema-to-typescript to regenerate this file. + */ + +export interface Thesaurus { + name: string; + values?: { + label: string; + [k: string]: any; + }[]; + [k: string]: any; +} diff --git a/app/api/thesauris/validateThesauri.js b/app/api/thesauris/validateThesauri.js deleted file mode 100644 index 6f0d0d33b5..0000000000 --- a/app/api/thesauris/validateThesauri.js +++ /dev/null @@ -1,53 +0,0 @@ -import Ajv from 'ajv'; -import ajvKeywords from 'ajv-keywords'; -import model from './dictionariesModel'; - -const ajv = ajvKeywords(Ajv({ allErrors: true }), ['uniqueItemProperties']); - -ajv.addKeyword('uniqueName', { - async: true, - // eslint-disable-next-line max-params - validate: async (config, value, propertySchema, property, thesauri) => { - const [duplicated] = await model.get({ - _id: { $ne: thesauri._id }, - name: new RegExp(`^${thesauri.name}$` || null, 'i') - }); - - if (duplicated) { - return false; - } - return true; - } -}); - -const schema = { - $async: true, - required: ['name'], - properties: { - name: { - type: 'string', - uniqueName: '', - minLength: 1 - }, - values: { - type: 'array', - items: { - type: 'object', - required: ['label'], - properties: { - label: { - type: 'string', - minLength: 1, - } - } - }, - } - } -}; - -const validateThesauri = ajv.compile(schema); - -export { - // eslint-disable-next-line import/prefer-default-export - validateThesauri -}; diff --git a/app/api/thesauris/validateThesauri.ts b/app/api/thesauris/validateThesauri.ts new file mode 100644 index 0000000000..96edd69bbf --- /dev/null +++ b/app/api/thesauris/validateThesauri.ts @@ -0,0 +1,34 @@ +/** @format */ + +/* eslint-disable max-params */ + +import Ajv from 'ajv'; +import ajvKeywords from 'ajv-keywords'; +import model from './dictionariesModel'; +import schema from './dictionariesSchema'; +import { Thesaurus } from './dictionariesType'; + +const ajv = ajvKeywords(Ajv({ allErrors: true }), ['uniqueItemProperties']); + +ajv.addKeyword('uniqueName', { + async: true, + validate: async ( + _config: any, + _value: any, + _propertySchema: any, + _property: any, + thesauri: Thesaurus + ) => { + const [duplicated] = await model.get({ + _id: { $ne: thesauri._id }, + name: new RegExp(`^${thesauri.name}$` || '', 'i'), + }); + + if (duplicated) { + return false; + } + return true; + }, +}); + +export const validateThesauri = ajv.compile(schema); diff --git a/build_schema.js b/build_schema.js new file mode 100644 index 0000000000..39fd446795 --- /dev/null +++ b/build_schema.js @@ -0,0 +1,18 @@ +/** @format */ + +/* eslint-disable import/first */ +require('dotenv').config(); +require('@babel/register')({ extensions: ['.js', '.jsx', '.ts', '.tsx'] }); + +const fs = require('fs'); +const { compile } = require('json-schema-to-typescript'); + +const buildSchema = path => { + const schema = require(`./${path}Schema`).default; + + compile(schema, schema.title).then(ts => { + fs.writeFileSync(`./${path}Type.d.ts`, ts); + }); +}; + +buildSchema('app/api/thesauris/dictionaries'); diff --git a/external_modules/ajv-keywords.d.ts b/external_modules/ajv-keywords.d.ts new file mode 100644 index 0000000000..1592e33503 --- /dev/null +++ b/external_modules/ajv-keywords.d.ts @@ -0,0 +1 @@ +declare module 'ajv-keywords'; diff --git a/package.json b/package.json index f076273e0e..b5db66bbd8 100644 --- a/package.json +++ b/package.json @@ -116,6 +116,8 @@ "joi": "^13.6.0", "joi-objectid": "^2.0.0", "json-loader": "^0.5.4", + "json-schema-to-mongoose": "^0.2.2", + "json-schema-to-typescript": "^7.1.0", "jvent": "1.0.2", "macaddress": "0.2.9", "mark.js": "^8.11.1", diff --git a/tsconfig.json b/tsconfig.json index c9fc3d06e5..26bc02d2db 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,6 +19,6 @@ "UI/*": ["./app/react/UI/*"] } }, - "include": ["app"], + "include": ["app", "external_modules"], "exclude": ["node_modules", "**/node_modules/*", "fixtures", "dist", "prod"] } diff --git a/yarn.lock b/yarn.lock index 3ee19250aa..3a3bc10791 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1149,6 +1149,11 @@ version "9.4.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.7.tgz#57d81cd98719df2c9de118f2d5f3b1120dcd7275" +"@types/node@>=4.5.0": + version "12.12.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.5.tgz#66103d2eddc543d44a04394abb7be52506d7f290" + integrity sha512-KEjODidV4XYUlJBF3XdjSH5FWoMCtO0utnhtdLf1AgeuZLOrRbvmU/gaRCVg7ZaQDjVf3l84egiY0mRNe5xE4A== + "@types/node@^12.7.11": version "12.7.12" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.12.tgz#7c6c571cc2f3f3ac4a59a5f2bd48f5bdbc8653cc" @@ -1158,6 +1163,11 @@ version "8.9.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.5.tgz#162b864bc70be077e6db212b322754917929e976" +"@types/prettier@^1.16.1": + version "1.18.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.18.3.tgz#64ff53329ce16139f17c3db9d3e0487199972cd8" + integrity sha512-48rnerQdcZ26odp+HOvDGX8IcUkYOCuMc2BodWYTe956MqkHlOGAG4oFQ83cjZ0a4GAgj7mb4GUClxYd2Hlodg== + "@types/prop-types@*": version "15.7.3" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" @@ -1564,7 +1574,7 @@ ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" -ansi-regex@^2.0.0: +ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1599,6 +1609,11 @@ ansicolors@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" @@ -2460,6 +2475,11 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +bson@0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/bson/-/bson-0.2.2.tgz#3dbf984acb9d33a6878b46e6fb7afbd611856a60" + integrity sha1-Pb+YSsudM6aHi0bm+3r71hGFamA= + bson@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.1.tgz#4330f5e99104c4e751e7351859e2d408279f2f13" @@ -2984,6 +3004,18 @@ cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" +cli-color@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f" + integrity sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w== + dependencies: + ansi-regex "^2.1.1" + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + memoizee "^0.4.14" + timers-ext "^0.1.5" + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -3800,6 +3832,14 @@ d3-time@1: version "1.0.8" resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84" +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + damerau-levenshtein@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" @@ -4633,6 +4673,24 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" +es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: + version "0.10.52" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.52.tgz#bb21777e919a04263736ded120a9d665f10ea63f" + integrity sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.2" + next-tick "~1.0.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + es6-promise@3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4" @@ -4651,6 +4709,24 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +es6-symbol@^3.1.1, es6-symbol@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -4897,6 +4973,14 @@ etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= + dependencies: + d "1" + es5-ext "~0.10.14" + event-stream@~3.3.0: version "3.3.4" resolved "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" @@ -5139,6 +5223,13 @@ ext-name@^5.0.0: ext-list "^2.0.0" sort-keys-length "^1.0.0" +ext@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.1.2.tgz#d1d216c83641bb4cb7684622b063cff44a19ce35" + integrity sha512-/KLjJdTNyDepCihrk4HQt57nAE1IRCEo5jUt+WgWGCr1oARhibDvmI2DMcSNWood1T9AUWwq+jaV1wvRqaXfnA== + dependencies: + type "^2.0.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -6505,6 +6596,11 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" +hooks@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/hooks/-/hooks-0.2.1.tgz#0f591b1b344bdcb3df59773f62fbbaf85bf4028b" + integrity sha1-D1kbGzRL3LPfWXc/Yvu6+Fv0Aos= + hosted-git-info@^2.1.4: version "2.6.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.1.tgz#6e4cee78b01bb849dcf93527708c69fdbee410df" @@ -7190,7 +7286,7 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-promise@^2.1.0: +is-promise@^2.1, is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" @@ -7886,7 +7982,7 @@ js-yaml@3.6.1: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@^3.10.0: +js-yaml@^3.10.0, js-yaml@^3.12.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -7987,6 +8083,40 @@ json-schema-ref-parser@^1.4.1: js-yaml "^3.4.6" ono "^2.0.1" +json-schema-ref-parser@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/json-schema-ref-parser/-/json-schema-ref-parser-6.1.0.tgz#30af34aeab5bee0431da805dac0eb21b574bf63d" + integrity sha512-pXe9H1m6IgIpXmE5JSb8epilNTGsmTb2iPohAXpOdhqGFbQjNeHHsZxU+C8w6T81GZxSPFLeUoqDJmzxx5IGuw== + dependencies: + call-me-maybe "^1.0.1" + js-yaml "^3.12.1" + ono "^4.0.11" + +json-schema-to-mongoose@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/json-schema-to-mongoose/-/json-schema-to-mongoose-0.2.2.tgz#8f0fafd6ce1854781db92f3a8ef5a9f48b21aadd" + integrity sha1-jw+v1s4YVHgduS86jvWp9Ishqt0= + dependencies: + lodash "^3.6.0" + mongoose "~3.6.18" + +json-schema-to-typescript@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-7.1.0.tgz#c98a8647718551a40f324448f53508d73c087911" + integrity sha512-7tQyQzR+0NyI2iPjkqLLe4ncaxov1oIAFRM+BI8DDs7wxVIXsd0GWoZJIPsNQePIDr7N/LCkYtkEEDvY7dhGzA== + dependencies: + "@types/json-schema" "^7.0.3" + "@types/node" ">=4.5.0" + "@types/prettier" "^1.16.1" + cli-color "^1.4.0" + json-schema-ref-parser "^6.1.0" + json-stringify-safe "^5.0.1" + lodash "^4.17.11" + minimist "^1.2.0" + mz "^2.7.0" + prettier "^1.18.2" + stdin "0.0.1" + json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" @@ -8009,7 +8139,7 @@ json-stable-stringify@^1.0.0: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -8079,6 +8209,11 @@ kdbush@^1.0.1: resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-1.0.1.tgz#3cbd03e9dead9c0f6f66ccdb96450e5cecc640e0" integrity sha1-PL0D6d6tnA9vZszblkUOXOzGQOA= +kerberos@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/kerberos/-/kerberos-0.0.3.tgz#4285d92a0748db2784062f5adcec9f5956cb818a" + integrity sha1-QoXZKgdI2yeEBi9a3OyfWVbLgYo= + keypress@0.1.x: version "0.1.0" resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" @@ -8441,6 +8576,11 @@ lodash@3.0.x: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.0.1.tgz#14d49028a38bc740241d11e2ecd57ec06d73c19a" +lodash@^3.6.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= + lodash@^4.0.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1, lodash@~4.17.4: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -8545,6 +8685,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-queue@0.1: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" + integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM= + dependencies: + es5-ext "~0.10.2" + macaddress@0.2.9: version "0.2.9" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.9.tgz#3579b8b9acd5b96b4553abf0f394185a86813cb3" @@ -8752,6 +8899,20 @@ mem@^4.0.0: mimic-fn "^1.0.0" p-is-promise "^2.0.0" +memoizee@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57" + integrity sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg== + dependencies: + d "1" + es5-ext "^0.10.45" + es6-weak-map "^2.0.2" + event-emitter "^0.3.5" + is-promise "^2.1" + lru-queue "0.1" + next-tick "1" + timers-ext "^0.1.5" + memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -9079,6 +9240,15 @@ mongodb-memory-server@^5.2.6: dependencies: mongodb-memory-server-core "5.2.8" +mongodb@1.3.19: + version "1.3.19" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-1.3.19.tgz#f229db24098f019d86d135aaf8a1ab5f2658b1d4" + integrity sha1-8inbJAmPAZ2G0TWq+KGrXyZYsdQ= + dependencies: + bson "0.2.2" + optionalDependencies: + kerberos "0.0.3" + mongodb@3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.0.8.tgz#2c1daecac9a0ec2de2f2aea4dc97d76ae70f8951" @@ -9132,6 +9302,20 @@ mongoose@5.0.18: regexp-clone "0.0.1" sliced "1.0.1" +mongoose@~3.6.18: + version "3.6.20" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-3.6.20.tgz#47263843e6b812ea207eec104c40a36c8d215f53" + integrity sha1-RyY4Q+a4EuogfuwQTECjbI0hX1M= + dependencies: + hooks "0.2.1" + mongodb "1.3.19" + mpath "0.1.1" + mpromise "0.2.1" + ms "0.1.0" + muri "0.3.1" + regexp-clone "0.0.1" + sliced "0.0.5" + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -9151,10 +9335,22 @@ mozjpeg@^5.0.0: bin-wrapper "^3.0.0" logalot "^2.0.0" +mpath@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.1.1.tgz#23da852b7c232ee097f4759d29c0ee9cd22d5e46" + integrity sha1-I9qFK3wjLuCX9HWdKcDunNItXkY= + mpath@0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.4.1.tgz#ed10388430380bf7bbb5be1391e5d6969cb08e89" +mpromise@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/mpromise/-/mpromise-0.2.1.tgz#fbbdc28cb0207e49b8a4eb1a4c0cea6c2de794c8" + integrity sha1-+73CjLAgfkm4pOsaTAzqbC3nlMg= + dependencies: + sliced "0.0.4" + mquery@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.0.0.tgz#e5f387dbabc0b9b69859e550e810faabe0ceabb0" @@ -9164,6 +9360,11 @@ mquery@3.0.0: regexp-clone "0.0.1" sliced "0.0.5" +ms@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.1.0.tgz#f21fac490daf1d7667fd180fe9077389cc9442b2" + integrity sha1-8h+sSQ2vHXZn/RgP6QdzicyUQrI= + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -9198,10 +9399,24 @@ multipipe@^0.1.2: dependencies: duplexer2 "0.0.2" +muri@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/muri/-/muri-0.3.1.tgz#861889c5c857f1a43700bee85d50731f61727c9a" + integrity sha1-hhiJxchX8aQ3AL7oXVBzH2FyfJo= + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + n-gram@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/n-gram/-/n-gram-1.0.1.tgz#d29a465e4debcff7f9eed9fb57d9da6c806f4112" @@ -9276,6 +9491,11 @@ neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== +next-tick@1, next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + nice-try@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" @@ -9845,6 +10065,13 @@ ono@^2.0.1: version "2.2.5" resolved "https://registry.yarnpkg.com/ono/-/ono-2.2.5.tgz#daf09488b51174da7a7e4275dfab31b438ffa0e3" +ono@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/ono/-/ono-4.0.11.tgz#c7f4209b3e396e8a44ef43b9cedc7f5d791d221d" + integrity sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g== + dependencies: + format-util "^1.0.3" + ono@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/ono/-/ono-4.0.3.tgz#b36050f71b02841bfb59f368deab8b07375e2219" @@ -10705,7 +10932,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@1.18.2: +prettier@1.18.2, prettier@^1.18.2: version "1.18.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== @@ -12360,6 +12587,11 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +sliced@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.4.tgz#34f89a6db1f31fa525f5a570f5bcf877cf0955ee" + integrity sha1-NPiabbHzH6Ul9aVw9bz4d88JVe4= + sliced@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f" @@ -12737,6 +12969,11 @@ static-module@^2.2.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" +stdin@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/stdin/-/stdin-0.0.1.tgz#d3041981aaec3dfdbc77a1b38d6372e38f5fb71e" + integrity sha1-0wQZgarsPf28d6GzjWNy449ftx4= + stdout-stream@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" @@ -13297,6 +13534,20 @@ text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= + dependencies: + any-promise "^1.0.0" + throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -13363,6 +13614,14 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +timers-ext@^0.1.5: + version "0.1.7" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" + integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== + dependencies: + es5-ext "~0.10.46" + next-tick "1" + tiny-cookie@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/tiny-cookie/-/tiny-cookie-2.1.1.tgz#6f1ea2fdbef15c8978de54372b4314c5984ff020" @@ -13585,6 +13844,16 @@ type-is@^1.6.4, type-is@~1.6.15, type-is@~1.6.16: media-typer "0.3.0" mime-types "~2.1.18" +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"