mirror of
https://github.com/typicode/json-server.git
synced 2025-07-30 13:42:11 +08:00
75 lines
1.9 KiB
JavaScript
75 lines
1.9 KiB
JavaScript
const shortid = require('shortid')
|
|
const pluralize = require('pluralize')
|
|
|
|
module.exports = {
|
|
getRemovable,
|
|
createId,
|
|
deepQuery
|
|
}
|
|
|
|
// Returns document ids that have unsatisfied relations
|
|
// Example: a comment that references a post that doesn't exist
|
|
function getRemovable (db, opts) {
|
|
const _ = this
|
|
const removable = []
|
|
_.each(db, (coll, collName) => {
|
|
_.each(coll, (doc) => {
|
|
_.each(doc, (value, key) => {
|
|
if (new RegExp(`${opts.foreignKeySuffix}$`).test(key)) {
|
|
// Remove foreign key suffix and pluralize it
|
|
// Example postId -> posts
|
|
const refName = pluralize.plural(key.replace(new RegExp(`${opts.foreignKeySuffix}$`), ''))
|
|
// Test if table exists
|
|
if (db[refName]) {
|
|
// Test if references is defined in table
|
|
const ref = _.getById(db[refName], value)
|
|
if (_.isUndefined(ref)) {
|
|
removable.push({ name: collName, id: doc.id })
|
|
}
|
|
}
|
|
}
|
|
})
|
|
})
|
|
})
|
|
|
|
return removable
|
|
}
|
|
|
|
// Return incremented id or uuid
|
|
// Used to override lodash-id's createId with utils.createId
|
|
function createId (coll) {
|
|
const _ = this
|
|
const idProperty = _.__id()
|
|
if (_.isEmpty(coll)) {
|
|
return 1
|
|
} else {
|
|
let id = _(coll).maxBy(idProperty)[idProperty]
|
|
|
|
// Increment integer id or generate string id
|
|
return _.isFinite(id)
|
|
? ++id
|
|
: shortid.generate()
|
|
}
|
|
}
|
|
|
|
function deepQuery (value, q) {
|
|
const _ = this
|
|
if (value && q) {
|
|
if (_.isArray(value)) {
|
|
for (let i = 0; i < value.length; i++) {
|
|
if (_.deepQuery(value[i], q)) {
|
|
return true
|
|
}
|
|
}
|
|
} else if (_.isObject(value) && !_.isArray(value)) {
|
|
for (let k in value) {
|
|
if (_.deepQuery(value[k], q)) {
|
|
return true
|
|
}
|
|
}
|
|
} else if (value.toString().toLowerCase().indexOf(q) !== -1) {
|
|
return true
|
|
}
|
|
}
|
|
}
|