async function findObjects(className, headers) { const graphqlClassName = pluralize( className.charAt(0).toLowerCase() + className.slice(1) ); const result = await apolloClient.query({ query: gql` query FindSomeObjects { find: ${graphqlClassName} { edges { node { id someField } } } } `, context: { headers, }, }); return result; }
const resolveName = (name) => { const plural = pluralize.plural(path.basename(name, '.js')); const controllerName = `${capitalize(plural)}Controller`; debug(`resolve controller name: ${controllerName}`); return controllerName; }
// 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() }
static get physicTable() { const { physicTables } = this; if (physicTables && physicTables.length > 0) { return physicTables[0]; } // table name might be undefined, the default one will get set later. return this.table || snakeCase(pluralize(this.name)); }
async function createRoute(newModuleBaseDir, lowerCaseName, upperCaseName, urlName, sentenceCaseName) { await fs.mkdirSync(newModuleBaseDir + "/routes"); let routeFileData = "InVzZSBzdHJpY3QiOw0KaW1wb3J0IGV4cHJlc3MgZnJvbSAiZXhwcmVzcyI7DQppbXBvcnQgeyBnZXRBbGx1cHBlcmNhc2VfbmFtZV9wbHVyYWwsIGFkZE5ld3VwcGVyY2FzZV9uYW1lLCBnZXR1cHBlcmNhc2VfbmFtZSwgdXBkYXRldXBwZXJjYXNlX25hbWUsIGRlbGV0ZXVwcGVyY2FzZV9uYW1lIH0gZnJvbSAiLi4vY29udHJvbGxlcnMiOw0KY29uc3QgbG93ZXJjYXNlX25hbWVSb3V0ZXMgPSBleHByZXNzLlJvdXRlcigpOw0KDQpsb3dlcmNhc2VfbmFtZVJvdXRlcw0KICAucm91dGUoIi8iKQ0KICAvLyBnZXQgYWxsIHNlbnRlY2VjYXNlX25hbWVfcGx1cmFsIChhY2Nlc3NlZCBhdCBHRVQgaHR0cDovL2Jhc2UtdXJsL3VybGNhc2UpDQogIC5nZXQoZ2V0QWxsdXBwZXJjYXNlX25hbWVfcGx1cmFsKQ0KICAvLyBjcmVhdGUgYSBzZW50ZWNlY2FzZV9uYW1lIChhY2Nlc3NlZCBhdCBQT1NUIGh0dHA6Ly9iYXNlLXVybC91cmxjYXNlKQ0KICAucG9zdChhZGROZXd1cHBlcmNhc2VfbmFtZSk7DQoNCmxvd2VyY2FzZV9uYW1lUm91dGVzDQogIC5yb3V0ZSgiLzpfaWQiKQ0KICAvLyBnZXQgYSBzaW5nbGUgc2VudGVjZWNhc2VfbmFtZSAoYWNjZXNzZWQgYXQgR0VUIGh0dHA6Ly9iYXNlLXVybC91cmxjYXNlLzpfaWQpDQogIC5nZXQoZ2V0dXBwZXJjYXNlX25hbWUpDQogIC8vIHVwZGF0ZSBhIHNpbmdsZSBzZW50ZWNlY2FzZV9uYW1lIChhY2Nlc3NlZCBhdCBQVVQgaHR0cDovL2Jhc2UtdXJsL3VybGNhc2UvOl9pZCkNCiAgLnB1dCh1cGRhdGV1cHBlcmNhc2VfbmFtZSkNCiAgLy8gZGVsZXRlIGEgc2VudGVjZWNhc2VfbmFtZSAoYWNjZXNzZWQgYXQgREVMRVRFIGh0dHA6Ly9iYXNlLXVybC91cmxjYXNlLzpfaWQpDQogIC5kZWxldGUoZGVsZXRldXBwZXJjYXNlX25hbWUpOw0KDQovLyBBbmQgaGVyZSB0aGUgcGxhY2UgZm9yIGN1c3RvbSByb3V0ZSBhbmQgRW5kcG9pbnRzDQoNCmV4cG9ydCBkZWZhdWx0IGxvd2VyY2FzZV9uYW1lUm91dGVzOw0K"; routeFileData = new String(new Buffer(routeFileData, "base64")); routeFileData = routeFileData.split("sentececase_name_plural").join(pluralize(sentenceCaseName)); routeFileData = routeFileData.split("uppercase_name_plural").join(pluralize(upperCaseName)); routeFileData = routeFileData.split("lowercase_name").join(lowerCaseName); routeFileData = routeFileData.split("uppercase_name").join(upperCaseName); routeFileData = routeFileData.split("sentececase_name").join(sentenceCaseName); routeFileData = routeFileData.split("urlcase").join(urlName); await fs.writeFileSync(newModuleBaseDir + "/routes/index.js", routeFileData); }
// 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() } }) }
var generateModel = function(name, options) { console.log('Creating ' + name + ' model...'); var templatePath = path.join(process.cwd(), 'api/templates', 'model.ejs'); var destinationPath = path.join(process.cwd(), 'api/models', name + '.js'); fs.readFile(templatePath, 'utf8', function(err, data) { var databaseTableName = pluralize(name.replace(/([A-Z])/g, '_$1').toLowerCase()).substring(1); var model = ejs.render(data, { name: name, databaseTableName: databaseTableName }); fs.writeFile(destinationPath, model); console.log('Created model: ' + name + '...'); }); }
/** * @Method: Returns the Singular form of any noun. * @Param {string} * @Return {string} */ export function getSingular (str: string) : string { return pluralize.singular(str) }
// Expand function used in GET /name and GET /name/id function expand(resource, e) { e && [].concat(e).forEach(innerResource => { const plural = pluralize(innerResource) if (db.get(plural).value()) { const prop = `${innerResource}${opts.foreignKeySuffix}` resource[innerResource] = db .get(plural) .getById(resource[prop]) .value() } }) }
/** * @Method: Returns the Plural form of any noun. * @Param {string} * @Return {string} */ export function getPlural (str: any) : string { return pluralize.plural(str) }
async function createController(newModuleBaseDir, lowerCaseName, upperCaseName, urlName, sentenceCaseName) { await fs.mkdirSync(newModuleBaseDir + "/controllers"); let controllerFileData = "InVzZSBzdHJpY3QiOw0KaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAiLi4vLi4vLi4vbGlicy9sb2dnZXIiOw0KaW1wb3J0IHVwcGVyY2FzZV9uYW1lIGZyb20gIi4uL21vZGVscyI7DQoNCi8vIGltcG9ydCBvdGhlciBuZWVkZWQgbW9kdWxlcyBoZXJlDQoNCmV4cG9ydCBjb25zdCBnZXRBbGx1cHBlcmNhc2VfbmFtZV9wbHVyYWwgPSAocmVxLCByZXMsIG5leHQpID0+IHsNCiAgbG9nZ2VyLmluZm8oIlJlcXVlc3QgQm9keSA9PT0+IiwgcmVxLmJvZHkpOw0KDQogIHRyeSB7DQogICAgbGV0IHF1ZXJ5U3BlYyA9IHsNCiAgICAgIHN0YXR1czogIkFjdGl2ZSINCiAgICB9Ow0KDQogICAgLy8gQWNjZXB0IG9ubHkgcXVlcnkgcGFyYW1ldGVycyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzY2hlbWENCg0KICAgIGZvciAobGV0IHByb3BlcnR5IGluIHVwcGVyY2FzZV9uYW1lLnNjaGVtYS5vYmopIHsNCiAgICAgIGlmICh1cHBlcmNhc2VfbmFtZS5zY2hlbWEub2JqLmhhc093blByb3BlcnR5KHByb3BlcnR5KSAmJiBwcm9wZXJ0eSBpbiByZXEucXVlcnkpIHsNCiAgICAgICAgcXVlcnlTcGVjW3Byb3BlcnR5XSA9IHJlcS5xdWVyeVtwcm9wZXJ0eV07DQogICAgICB9DQogICAgfQ0KDQogICAgLy8gRm9yIG90aGVyIHR5cGUgb2YgcXVlcmllcyB3cml0ZSB0aGVtIGhlcmUNCg0KICAgIC8vIEJ1aWxkIHRoZSBxdWVyeQ0KDQogICAgbGV0IHF1ZXJ5ID0gdXBwZXJjYXNlX25hbWUuZmluZChxdWVyeVNwZWMpOw0KDQogICAgaWYgKCJzb3J0X2J5IiBpbiByZXEucXVlcnkpIHsNCiAgICAgIGxldCBwYXJhbXMgPSByZXEucXVlcnkuc29ydF9ieS5zcGxpdCgiLiIpOw0KICAgICAgbGV0IHNvcnR5QnkgPSBwYXJhbXNbMF07DQoNCiAgICAgIGlmICh1cHBlcmNhc2VfbmFtZS5zY2hlbWEub2JqLmhhc093blByb3BlcnR5KHNvcnR5QnkpKSB7DQogICAgICAgIGxldCBjb25kaXRpb24gPSB7fTsNCiAgICAgICAgY29uZGl0aW9uW3NvcnR5QnldID0gMTsNCiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxICYmIHBhcmFtc1sxXS50b0xvd2VyQ2FzZSgpID09ICJhc2MiKSBjb25kaXRpb25bc29ydHlCeV0gPSAtMTsNCg0KICAgICAgICBxdWVyeS5zb3J0KHBhcmFtcyk7DQogICAgICB9DQogICAgfQ0KDQogICAgLy8gQWRkIHBhZ2luYXRpb24NCiAgICBpZiAoInBhZ2UiIGluIHJlcS5xdWVyeSkgew0KICAgICAgbGV0IGxpbWl0ID0gMTA7DQogICAgICBpZiAoImxpbWl0IiBpbiByZXEucXVlcnkpIGxpbWl0ID0gcmVxLnF1ZXJ5LmxpbWl0Ow0KICAgICAgcXVlcnkubGltaXQobGltaXQpLnNraXAoKHJlcS5xdWVyeS5wYWdlIC0gMSkgKiBsaW1pdCk7DQogICAgfQ0KDQogICAgLy8gZXhlY3V0ZSBxdWVyeSBhbmQgY291bnQgb3BlcmF0aW9uDQogICAgUHJvbWlzZS5hbGwoW3VwcGVyY2FzZV9uYW1lLmNvdW50KHF1ZXJ5U3BlYyksIHF1ZXJ5LmV4ZWMoKV0pDQogICAgICAudGhlbihmdW5jdGlvbihyZXN1bHRzKSB7DQogICAgICAgIGxldCBjb3VudCA9IHJlc3VsdHNbMF07DQogICAgICAgIGxldCBkYXRhID0gcmVzdWx0c1sxXTsNCiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsNCiAgICAgICAgICBzdWNjZXNzOiB0cnVlLA0KICAgICAgICAgIG1lc3NhZ2U6ICJBbGwgc2VudGVjZWNhc2VfbmFtZV9wbHVyYWwgZmV0Y2hlZCBzdWNjZXNzZnVsbHkhIiwNCiAgICAgICAgICBkYXRhOiBkYXRhLA0KICAgICAgICAgIG1ldGE6IHsgY291bnQ6IGNvdW50IH0NCiAgICAgICAgfSk7DQogICAgICB9KQ0KICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7DQogICAgICAgIGxvZ2dlci5lcnJvcigiRXJyb3IgaW50byB1cHBlcmNhc2VfbmFtZS5nZXRBbGx1cHBlcmNhc2VfbmFtZV9wbHVyYWwoKSBQcm9taXNlLmNhdGNoKGVycm9yKT09PT4iLCBlcnJvci5tZXNzYWdlKTsNCiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAxKS5qc29uKHsNCiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSwNCiAgICAgICAgICBtZXNzYWdlOiAiRXJyb3IgaW4gZmV0Y2hpbmcgc2VudGVjZWNhc2VfbmFtZV9wbHVyYWwgIiArIGVycm9yLm1lc3NhZ2UsDQogICAgICAgICAgZXJyb3I6IGVycm9yDQogICAgICAgIH0pOw0KICAgICAgfSk7DQogIH0gY2F0Y2ggKGUpIHsNCiAgICBsb2dnZXIuZXJyb3IoIkVycm9yIGludG8gdXBwZXJjYXNlX25hbWUuZ2V0QWxsdXBwZXJjYXNlX25hbWVfcGx1cmFsKGNhdGNoKT09PT4iLCBlKTsNCiAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDEpLmpzb24oew0KICAgICAgc3VjY2VzczogZmFsc2UsDQogICAgICBtZXNzYWdlOiAiU29tZXRoaW5nIHdlbnQgd3JvbmcsIFRyeSBBZ2FpbiIsDQogICAgICBlcnJvcjogZQ0KICAgIH0pOw0KICB9DQp9Ow0KDQpleHBvcnQgY29uc3QgYWRkTmV3dXBwZXJjYXNlX25hbWUgPSAocmVxLCByZXMsIG5leHQpID0+IHsNCiAgbG9nZ2VyLmluZm8oIlJlcXVlc3QgYm9keSA9PT0+IiwgcmVxLmJvZHkpOw0KICB0cnkgew0KICAgIGxldCBpbnB1dCA9IHt9Ow0KDQogICAgLy8gb25seSBhY2NlcHRzIGlucHV0IGZpZWxkcyBkZWZpbmVkIGluIHNjaGVtYS4gaWdub3JlIG90aGVycw0KICAgIGZvciAobGV0IHByb3BlcnR5IGluIHVwcGVyY2FzZV9uYW1lLnNjaGVtYS5vYmopIHsNCiAgICAgIGlmICh1cHBlcmNhc2VfbmFtZS5zY2hlbWEub2JqLmhhc093blByb3BlcnR5KHByb3BlcnR5KSAmJiBwcm9wZXJ0eSBpbiByZXEuYm9keSkgew0KICAgICAgICBpbnB1dFtwcm9wZXJ0eV0gPSByZXEuYm9keVtwcm9wZXJ0eV07DQogICAgICB9DQogICAgfQ0KDQogICAgaWYgKE9iamVjdC5rZXlzKGlucHV0KS5sZW5ndGggPT0gMCkgew0KICAgICAgbGV0IHBhcmFtRXJyb3IgPSBuZXcgRXJyb3IoIk5vIGlucHV0IGZpZWxkcyBwcm92aWRlZCIpOw0KICAgICAgbG9nZ2VyLmVycm9yKCJFcnJvciBpbnRvIHVwcGVyY2FzZV9uYW1lLmNyZWF0ZXVwcGVyY2FzZV9uYW1lKCk9PT0+IiwgcGFyYW1FcnJvcik7DQogICAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDEpLmpzb24oew0KICAgICAgICBzdWNjZXNzOiB0cnVlLA0KICAgICAgICBtZXNzYWdlOiBwYXJhbUVycm9yLm1lc3NhZ2UsDQogICAgICAgIGVycm9yOiBwYXJhbUVycm9yDQogICAgICB9KTsNCiAgICB9DQoNCiAgICB1cHBlcmNhc2VfbmFtZS5jcmVhdGUoaW5wdXQsIGZ1bmN0aW9uKGVycm9yLCBkYXRhKSB7DQogICAgICBpZiAoZXJyb3IpIHsNCiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAxKS5qc29uKHsNCiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSwNCiAgICAgICAgICBtZXNzYWdlOiAiRXJyb3IgaW4gY3JlYXRpbmcgc2VudGVjZWNhc2VfbmFtZSIgKyBlcnJvci5tZXNzYWdlLA0KICAgICAgICAgIGVycm9yOiBlcnJvcg0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICAgIHJldHVybiByZXMuc3RhdHVzKDIwMSkuanNvbih7DQogICAgICAgIHN1Y2Nlc3M6IHRydWUsDQogICAgICAgIG1lc3NhZ2U6ICJOZXcgc2VudGVjZWNhc2VfbmFtZSBjcmVhdGVkIHN1Y2Nlc3NmdWxseSEiLA0KICAgICAgICBkYXRhOiBkYXRhDQogICAgICB9KTsNCiAgICB9KTsNCiAgfSBjYXRjaCAoZSkgew0KICAgIGxvZ2dlci5lcnJvcigiRXJyb3IgaW50byB1cHBlcmNhc2VfbmFtZS5hZGROZXd1cHBlcmNhc2VfbmFtZShjYXRjaCk9PT0+IiwgZSk7DQogICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAxKS5qc29uKHsNCiAgICAgIHN1Y2Nlc3M6IGZhbHNlLA0KICAgICAgbWVzc2FnZTogIlNvbWV0aGluZyB3ZW50IHdyb25nIiwNCiAgICAgIGVycm9yOiBlDQogICAgfSk7DQogIH0NCn07DQoNCmV4cG9ydCBjb25zdCBnZXR1cHBlcmNhc2VfbmFtZSA9IChyZXEsIHJlcywgbmV4dCkgPT4gew0KICBsb2dnZXIuaW5mbygiUmVxdWVzdCBRdWVyeSBhbmQgcGFyYW1ldGVycyAgPT09PiIsIHJlcS5xdWVyeSwgcmVxLnBhcmFtcyk7DQogIHRyeSB7DQogICAgdXBwZXJjYXNlX25hbWUuZmluZE9uZSh7IF9pZDogcmVxLnBhcmFtcy5faWQsIHN0YXR1czogIkFjdGl2ZSIgfSwgZnVuY3Rpb24oZXJyb3IsIGRhdGEpIHsNCiAgICAgIGlmIChlcnJvcikgew0KICAgICAgICBsb2dnZXIuZXJyb3IoIkVycm9yIGludG8gZmV0Y2hpbmcgc2VudGVjZWNhc2VfbmFtZSBpbiB1cHBlcmNhc2VfbmFtZS5nZXR1cHBlcmNhc2VfbmFtZShjYikgPT09PiIsIGVycm9yKTsNCiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzQ29kZSB8fCA1MDEpLmpzb24oew0KICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLA0KICAgICAgICAgIG1lc3NhZ2U6ICJFcnJvciBpbiBmZXRjaGluZyBzaW5nbGUgc2VudGVjZWNhc2VfbmFtZSBpbmZvcm1hdGlvbiIsDQogICAgICAgICAgZXJyb3I6IGVycm9yDQogICAgICAgIH0pOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgbG9nZ2VyLmRhdGEoInJlc3BvbnNlIGZyb20gdXBwZXJjYXNlX25hbWUuZ2V0dXBwZXJjYXNlX25hbWUoY2IpPT09PiIpOw0KICAgICAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oew0KICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsDQogICAgICAgICAgbWVzc2FnZTogIlRoZSBzZW50ZWNlY2FzZV9uYW1lIGluZm9ybWF0aW9uIGhhcyBiZWVuIGZldGNoZWQgc3VjY2Vzc2Z1bGx5IiwNCiAgICAgICAgICBkYXRhOiBkYXRhDQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0pOw0KICB9IGNhdGNoIChlKSB7DQogICAgbG9nZ2VyLmVycm9yKCJFcnJvciBpbnRvIHVwcGVyY2FzZV9uYW1lLmdldHVwcGVyY2FzZV9uYW1lKGNhdGNoKT09PT4iLCBlKTsNCiAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDEpLmpzb24oew0KICAgICAgc3VjY2VzczogZmFsc2UsDQogICAgICBtZXNzYWdlOiAiU29tZXRoaW5nIHdlbnQgd3JvbmciLA0KICAgICAgZXJyb3I6IGUNCiAgICB9KTsNCiAgfQ0KfTsNCg0KZXhwb3J0IGNvbnN0IHVwZGF0ZXVwcGVyY2FzZV9uYW1lID0gKHJlcSwgcmVzLCBuZXh0KSA9PiB7DQogIGxvZ2dlci5pbmZvKCJSZXF1ZXN0IGJvZHksIHBhcmFtcyA9PT0+IiwgcmVxLmJvZHksIHJlcS5wYXJhbXMpOw0KICB0cnkgew0KICAgIGlmICghcmVxLnBhcmFtcy5faWQpIHsNCiAgICAgIGxldCBwYXJhbUVycm9yID0gbmV3IEVycm9yKCJObyBpZCBwcm92aWRlZCIpOw0KICAgICAgbG9nZ2VyLmVycm9yKCJFcnJvciBpbnRvIHVwcGVyY2FzZV9uYW1lLnVwZGF0ZXVwcGVyY2FzZV9uYW1lKCk9PT0+IiwgcGFyYW1FcnJvcik7DQogICAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDEpLmpzb24oew0KICAgICAgICBzdWNjZXNzOiB0cnVlLA0KICAgICAgICBtZXNzYWdlOiBwYXJhbUVycm9yLm1lc3NhZ2UsDQogICAgICAgIGVycm9yOiBwYXJhbUVycm9yDQogICAgICB9KTsNCiAgICB9DQoNCiAgICBsZXQgaW5wdXQgPSB7fTsNCg0KICAgIC8vIG9ubHkgYWNjZXB0cyB1cGRhdGUgZmllbGRzIGRlZmluZWQgaW4gc2NoZW1hLiBpZ25vcmUgb3RoZXJzDQogICAgZm9yIChsZXQgcHJvcGVydHkgaW4gdXBwZXJjYXNlX25hbWUuc2NoZW1hLm9iaikgew0KICAgICAgaWYgKHVwcGVyY2FzZV9uYW1lLnNjaGVtYS5vYmouaGFzT3duUHJvcGVydHkocHJvcGVydHkpICYmIHByb3BlcnR5IGluIHJlcS5ib2R5KSB7DQogICAgICAgIGlucHV0W3Byb3BlcnR5XSA9IHJlcS5ib2R5W3Byb3BlcnR5XTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoT2JqZWN0LmtleXMoaW5wdXQpLmxlbmd0aCA9PSAwKSB7DQogICAgICBsZXQgcGFyYW1FcnJvciA9IG5ldyBFcnJvcigiTm8gdXBkYXRlIGZpZWxkcyBwcm92aWRlZCIpOw0KICAgICAgbG9nZ2VyLmVycm9yKCJFcnJvciBpbnRvIHVwcGVyY2FzZV9uYW1lLnVwZGF0ZXVwcGVyY2FzZV9uYW1lKCk9PT0+IiwgcGFyYW1FcnJvcik7DQogICAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDEpLmpzb24oew0KICAgICAgICBzdWNjZXNzOiB0cnVlLA0KICAgICAgICBtZXNzYWdlOiBwYXJhbUVycm9yLm1lc3NhZ2UsDQogICAgICAgIGVycm9yOiBwYXJhbUVycm9yDQogICAgICB9KTsNCiAgICB9DQoNCiAgICB1cHBlcmNhc2VfbmFtZS5maW5kT25lQW5kVXBkYXRlKHsgX2lkOiByZXEucGFyYW1zLl9pZCB9LCB7ICRzZXQ6IGlucHV0IH0sIGZ1bmN0aW9uKGVycm9yLCB1cGRhdGVkdXBwZXJjYXNlX25hbWUpIHsNCiAgICAgIGlmIChlcnJvcikgew0KICAgICAgICBsb2dnZXIuZXJyb3IoIkVycm9yIGludG8gdXBwZXJjYXNlX25hbWUudXBkYXRldXBwZXJjYXNlX25hbWUoY2IpPT09PiIsIGVycm9yKTsNCiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAxKS5qc29uKHsNCiAgICAgICAgICBzdWNjZXNzOiB0cnVlLA0KICAgICAgICAgIG1lc3NhZ2U6ICJFcnJvciBpbiB1cGRhdGluZyBzZW50ZWNlY2FzZV9uYW1lIiwNCiAgICAgICAgICBlcnJvcjogZQ0KICAgICAgICB9KTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiByZXMuc3RhdHVzKDIwMCkuanNvbih7DQogICAgICAgICAgc3VjY2VzczogdHJ1ZSwNCiAgICAgICAgICBtZXNzYWdlOiAiVGhlIHNlbnRlY2VjYXNlX25hbWUgaGFzIGJlZW4gdXBkYXRlZCBzdWNjZXNzZnVsbHkhIiwNCiAgICAgICAgICBkYXRhOiB1cGRhdGVkdXBwZXJjYXNlX25hbWUNCiAgICAgICAgfSk7DQogICAgICB9DQogICAgfSk7DQogIH0gY2F0Y2ggKGUpIHsNCiAgICBsb2dnZXIuZXJyb3IoIkVycm9yIGludG8gdXBwZXJjYXNlX25hbWUudXBkYXRldXBwZXJjYXNlX25hbWUoY2F0Y2gpPT09PiIsIGUpOw0KICAgIHJldHVybiByZXMuc3RhdHVzKDUwMSkuanNvbih7DQogICAgICBzdWNjZXNzOiB0cnVlLA0KICAgICAgbWVzc2FnZTogIlNvbWV0aGluZyB3ZW50IHdyb25nIiwNCiAgICAgIGVycm9yOiBlDQogICAgfSk7DQogIH0NCn07DQoNCmV4cG9ydCBjb25zdCBkZWxldGV1cHBlcmNhc2VfbmFtZSA9IChyZXEsIHJlcywgbmV4dCkgPT4gew0KICBsb2dnZXIuaW5mbygiUmVxdWVzdCBib2R5ID09PT4iLCByZXEuYm9keSk7DQogIHRyeSB7DQogICAgaWYgKCFyZXEucGFyYW1zLl9pZCkgew0KICAgICAgbGV0IHBhcmFtRXJyb3IgPSBuZXcgRXJyb3IoIk5vIGlkIHByb3ZpZGVkIik7DQogICAgICBsb2dnZXIuZXJyb3IoIkVycm9yIGludG8gdXBwZXJjYXNlX25hbWUuZGVsZXRldXBwZXJjYXNlX25hbWUoKT09PT4iLCBwYXJhbUVycm9yKTsNCiAgICAgIHJldHVybiByZXMuc3RhdHVzKDUwMSkuanNvbih7DQogICAgICAgIHN1Y2Nlc3M6IHRydWUsDQogICAgICAgIG1lc3NhZ2U6IHBhcmFtRXJyb3IubWVzc2FnZSwNCiAgICAgICAgZXJyb3I6IHBhcmFtRXJyb3INCiAgICAgIH0pOw0KICAgIH0NCg0KICAgIC8vIHJlY29yZCBpcyBhcmNoaXZlZCBpbnN0ZWFkIG9mIGRlbGV0ZWQNCiAgICB1cHBlcmNhc2VfbmFtZS5maW5kT25lQW5kVXBkYXRlKHsgX2lkOiByZXEucGFyYW1zLl9pZCB9LCB7ICRzZXQ6IHsgc3RhdHVzOiAiQXJjaGl2ZWQiIH0gfSwgZnVuY3Rpb24oZXJyb3IsIHVwZGF0ZWR1cHBlcmNhc2VfbmFtZSkgew0KICAgICAgaWYgKGVycm9yKSB7DQogICAgICAgIGxvZ2dlci5lcnJvcigiRXJyb3IgaW50byB1cHBlcmNhc2VfbmFtZS5kZWxldGV1cHBlcmNhc2VfbmFtZShjYik9PT0+IiwgZXJyb3IpOw0KICAgICAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDEpLmpzb24oew0KICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsDQogICAgICAgICAgbWVzc2FnZTogIkVycm9yIGluIGRlbGV0aW5nIHNlbnRlY2VjYXNlX25hbWUiLA0KICAgICAgICAgIGVycm9yOiBlDQogICAgICAgIH0pOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsNCiAgICAgICAgICBzdWNjZXNzOiB0cnVlLA0KICAgICAgICAgIG1lc3NhZ2U6ICJUaGUgc2VudGVjZWNhc2VfbmFtZSBoYXMgYmVlbiBkZWxldGVkIHN1Y2Nlc3NmdWxseSEiLA0KICAgICAgICAgIGRhdGE6IHVwZGF0ZWR1cHBlcmNhc2VfbmFtZQ0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9KTsNCiAgfSBjYXRjaCAoZSkgew0KICAgIGxvZ2dlci5lcnJvcigiRXJyb3IgaW50byB1cHBlcmNhc2VfbmFtZS5kZWxldGV1cHBlcmNhc2VfbmFtZShjYXRjaCk9PT0+IiwgZSk7DQogICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAxKS5qc29uKHsNCiAgICAgIHN1Y2Nlc3M6IHRydWUsDQogICAgICBtZXNzYWdlOiAiU29tZXRoaW5nIHdlbnQgd3JvbmciLA0KICAgICAgZXJyb3I6IGUNCiAgICB9KTsNCiAgfQ0KfTsNCg=="; controllerFileData = new String(new Buffer(controllerFileData, "base64")); controllerFileData = controllerFileData.split("lowercase_name_plural").join(pluralize(lowerCaseName)); controllerFileData = controllerFileData.split("uppercase_name_plural").join(pluralize(upperCaseName)); controllerFileData = controllerFileData.split("sentececase_name_plural").join(pluralize(sentenceCaseName)); controllerFileData = controllerFileData.split("lowercase_name").join(lowerCaseName); controllerFileData = controllerFileData.split("uppercase_name").join(upperCaseName); controllerFileData = controllerFileData.split("sentececase_name").join(sentenceCaseName); await fs.writeFileSync(newModuleBaseDir + "/controllers/index.js", controllerFileData); }
const resolveName = (name) => { const singular = pluralize.singular(path.basename(name, '.js')); const middlewareName = `${capitalize(singular)}Middleware`; debug(`resolve middleware name: ${middlewareName}`); return middlewareName; }
// 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; }
const resolveName = (name) => { const plural = pluralize.plural(path.basename(name, '.js')); const serviceName = `${capitalize(plural)}Service`; debug(`resolve service name: ${serviceName}`); return serviceName; }