const resolveName = (name) => { const singular = pluralize.singular(path.basename(name, '.js')); const middlewareName = `${capitalize(singular)}Middleware`; debug(`resolve middleware name: ${middlewareName}`); return middlewareName; }
// Embed function used in GET /name and GET /name/id function embed(resource, e) { e && [].concat(e).forEach(externalResource => { if (db.get(externalResource).value) { const query = {} const singularResource = pluralize.singular(name) query[`${singularResource}${opts.foreignKeySuffix}`] = resource.id resource[externalResource] = db .get(externalResource) .filter(query) .value() } }) }
// Rewrite URL (/:resource/:id/:nested -> /:nested) and request body function post(req, res, next) { const prop = pluralize.singular(req.params.resource) req.body[`${prop}${opts.foreignKeySuffix}`] = req.params.id req.url = `/${req.params.nested}` next() }
handleRequest() { const urlParts = this.path.split('/'); const type = urlParts[2]; const singularType = pluralize.singular(type); switch (this.request.method) { case 'PATCH': case 'POST': case 'PUT': this.handlePost(singularType); break; default: this.handleGet(this.context.query, singularType, this.context.params.id); break; } return true; }
async parseQuery(query) { const ModelCls = this.orango.model(query.model) const col = ModelCls.collectionName const doc = query.name || pluralize.singular(col || 'result') // the doc id const refs = { doc, col } // convert @doc @col if (query.data) { let queryStr = JSON.stringify(query.data) queryStr = aqlFuncs.parseRefs(refs, queryStr) query.data = JSON.parse(queryStr) } let aql = await this.parseInitialOperations(query, refs) aql = this.parseLets(aql, query, refs) aql = await this.parseQueries(aql, query, refs) aql = await this.parseOperations(aql, query, refs) aql = this.parseReturn(aql, query, refs) return { aql } }
Object.keys(queries).forEach(type => { // The query cannot be built. if (_.isError(queries[type])) { strapi.log.error(queries[type]); strapi.stop(); } // Only create query if the function is available. if (_.isFunction(queries[type])) { if (type === 'singular') { Object.assign(acc.query, { [`${pluralize.singular(name)}(id: ID!)`]: model.globalId, }); } else { Object.assign(acc.query, { [`${pluralize.plural( name, )}(sort: String, limit: Int, start: Int, where: JSON)`]: `[${ model.globalId }]`, }); } _.merge(acc.resolver.Query, { [type === 'singular' ? pluralize.singular(name) : pluralize.plural(name)]: queries[type], }); } });
/** * @Method: Returns the Singular form of any noun. * @Param {string} * @Return {string} */ export function getSingular (str: string) : string { return pluralize.singular(str) }
// Rewrite URL (/:resource/:id/:nested -> /:nested) and request query function get(req, res, next) { const prop = pluralize.singular(req.params.resource) req.query[`${prop}${opts.foreignKeySuffix}`] = req.params.id req.url = `/${req.params.nested}` next() }
const resolveName = (name) => { const singular = pluralize.singular(path.basename(name, '.js')); const modelName = `${capitalize(singular)}Model`; debug(`resolve model name: ${modelName}`); return modelName; }