diff --git a/CHANGELOG.md b/CHANGELOG.md index e69de29b..452008d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +## [6.1.1](https://github.com/handfish/hygen/compare/v6.1.0...v6.1.1) (2022-02-16) + + +### Bug Fixes + +* capitalization from numeric strings breaks template generation ([4e32f5a](https://github.com/handfish/hygen/commit/4e32f5a2ab0c1f06dc56f8c5f0df6259a8ae011e)) + + + diff --git a/README.md b/README.md index e125f115..2edb9b07 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,11 @@ hygen logo -[![build status](https://img.shields.io/travis/jondot/hygen/master.svg)](https://travis-ci.org/jondot/hygen) -[![npm version](https://img.shields.io/npm/v/hygen.svg)](https://www.npmjs.com/package/hygen) +## Installing this Fork + +`yarn add @handfish/hygen` + +[![npm version](https://img.shields.io/npm/v/hygen.svg)](https://www.npmjs.com/package/@handfish/hygen) `hygen` is the simple, fast, and scalable code generator that lives _in_ your project. diff --git a/dist/context.js b/dist/context.js index bcf5301f..6b4baf0e 100644 --- a/dist/context.js +++ b/dist/context.js @@ -3,30 +3,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -const inflection_1 = __importDefault(require("inflection")); -const change_case_1 = __importDefault(require("change-case")); -const path_1 = __importDefault(require("path")); +const helpers_1 = __importDefault(require("./helpers")); const localsToCapitalize = ['name']; const localsDefaults = { name: 'unnamed', }; -// supports kebab-case to KebabCase -inflection_1.default.undasherize = (str) => str - .split(/[-_]/) - .map((w) => w[0].toUpperCase() + w.slice(1).toLowerCase()) - .join(''); -const helpers = { - capitalize(string) { - return string.charAt(0).toUpperCase() + string.slice(1); - }, - inflection: inflection_1.default, - changeCase: change_case_1.default, - path: path_1.default, -}; const doCapitalization = (hsh, [key, value]) => { hsh[key] = value; if (localsToCapitalize.includes(key)) - hsh[helpers.capitalize(key)] = helpers.capitalize(value); + hsh[helpers_1.default.capitalize(key)] = helpers_1.default.capitalize(value); return hsh; }; const capitalizedLocals = (locals) => Object.entries(locals).reduce(doCapitalization, {}); @@ -38,7 +23,7 @@ const context = (locals, config = {}) => { : config.helpers)) || {}; return Object.assign(localsWithDefaults, capitalizedLocals(localsWithDefaults), { - h: Object.assign(Object.assign({}, helpers), configHelpers), + h: Object.assign(Object.assign({}, helpers_1.default), configHelpers), }); }; exports.default = context; diff --git a/dist/context.js.map b/dist/context.js.map index 8b38a2ac..fdc971b2 100644 --- a/dist/context.js.map +++ b/dist/context.js.map @@ -1 +1 @@ -{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;;;AACA,4DAAmC;AACnC,8DAAoC;AACpC,gDAAuB;AAEvB,MAAM,kBAAkB,GAAG,CAAC,MAAM,CAAC,CAAA;AACnC,MAAM,cAAc,GAAG;IACrB,IAAI,EAAE,SAAS;CAChB,CAAA;AACD,mCAAmC;AACnC,oBAAU,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,EAAE,CAC/B,GAAG;KACA,KAAK,CAAC,MAAM,CAAC;KACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;KACzD,IAAI,CAAC,EAAE,CAAC,CAAA;AAEb,MAAM,OAAO,GAAG;IACd,UAAU,CAAC,MAAM;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC;IACD,UAAU,EAAV,oBAAU;IACV,UAAU,EAAV,qBAAU;IACV,IAAI,EAAJ,cAAI;CACL,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;IAC7C,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAEhB,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IAE1D,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAW,EAAE,EAAE,CACxC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;AAErD,MAAM,OAAO,GAAG,CAAC,MAAW,EAAE,SAAuB,EAAE,EAAE,EAAE;IACzD,MAAM,kBAAkB,iDACnB,cAAc,GACd,MAAM,CAAC,cAAc,GACrB,MAAM,CACV,CAAA;IACD,MAAM,aAAa,GACjB,CAAC,MAAM;QACL,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU;YACnC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;YAChC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,EAAE,CAAA;IACJ,OAAO,MAAM,CAAC,MAAM,CAClB,kBAAkB,EAClB,iBAAiB,CAAC,kBAAkB,CAAC,EACrC;QACE,CAAC,kCAAO,OAAO,GAAK,aAAa,CAAE;KACpC,CACF,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,OAAO,CAAA"} \ No newline at end of file +{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;;;AACA,wDAA+B;AAE/B,MAAM,kBAAkB,GAAG,CAAC,MAAM,CAAC,CAAA;AACnC,MAAM,cAAc,GAAG;IACrB,IAAI,EAAE,SAAS;CAChB,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;IAC7C,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAEhB,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClC,GAAG,CAAC,iBAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IAE1D,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAW,EAAE,EAAE,CACxC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;AAErD,MAAM,OAAO,GAAG,CAAC,MAAW,EAAE,SAAuB,EAAE,EAAE,EAAE;IACzD,MAAM,kBAAkB,iDACnB,cAAc,GACd,MAAM,CAAC,cAAc,GACrB,MAAM,CACV,CAAA;IACD,MAAM,aAAa,GACjB,CAAC,MAAM;QACL,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU;YACnC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;YAChC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,EAAE,CAAA;IACJ,OAAO,MAAM,CAAC,MAAM,CAClB,kBAAkB,EAClB,iBAAiB,CAAC,kBAAkB,CAAC,EACrC;QACE,CAAC,kCAAO,iBAAO,GAAK,aAAa,CAAE;KACpC,CACF,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,OAAO,CAAA"} \ No newline at end of file diff --git a/dist/helpers.d.ts b/dist/helpers.d.ts new file mode 100644 index 00000000..7481b30b --- /dev/null +++ b/dist/helpers.d.ts @@ -0,0 +1,10 @@ +/// +import changeCase from 'change-case'; +import path from 'path'; +declare const helpers: { + capitalize(str: any): string; + inflection: any; + changeCase: typeof changeCase; + path: path.PlatformPath; +}; +export default helpers; diff --git a/dist/helpers.js b/dist/helpers.js new file mode 100644 index 00000000..d399f09b --- /dev/null +++ b/dist/helpers.js @@ -0,0 +1,24 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const inflection_1 = __importDefault(require("inflection")); +const change_case_1 = __importDefault(require("change-case")); +const path_1 = __importDefault(require("path")); +// supports kebab-case to KebabCase +inflection_1.default.undasherize = (str) => str + .split(/[-_]/) + .map((w) => w[0].toUpperCase() + w.slice(1).toLowerCase()) + .join(''); +const helpers = { + capitalize(str) { + const toBeCapitalized = String(str); + return toBeCapitalized.charAt(0).toUpperCase() + toBeCapitalized.slice(1); + }, + inflection: inflection_1.default, + changeCase: change_case_1.default, + path: path_1.default, +}; +exports.default = helpers; +//# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/dist/helpers.js.map b/dist/helpers.js.map new file mode 100644 index 00000000..b8a0173a --- /dev/null +++ b/dist/helpers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;;;AAAA,4DAAmC;AACnC,8DAAoC;AACpC,gDAAuB;AAEvB,mCAAmC;AACnC,oBAAU,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,EAAE,CAC/B,GAAG;KACA,KAAK,CAAC,MAAM,CAAC;KACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;KACzD,IAAI,CAAC,EAAE,CAAC,CAAA;AAEb,MAAM,OAAO,GAAG;IACd,UAAU,CAAC,GAAG;QACZ,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACnC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3E,CAAC;IACD,UAAU,EAAV,oBAAU;IACV,UAAU,EAAV,qBAAU;IACV,IAAI,EAAJ,cAAI;CACL,CAAA;AAED,kBAAe,OAAO,CAAA"} \ No newline at end of file diff --git a/dist/newline.d.ts b/dist/newline.d.ts new file mode 100644 index 00000000..6d22fb64 --- /dev/null +++ b/dist/newline.d.ts @@ -0,0 +1,2 @@ +declare const newline: (string: any) => string; +export default newline; diff --git a/dist/newline.js b/dist/newline.js new file mode 100644 index 00000000..92557b08 --- /dev/null +++ b/dist/newline.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const os_1 = require("os"); +const newline = string => { + const newlines = string.match(/(?:\r?\n)/g) || []; + if (newlines.length === 0) { + return os_1.EOL; + } + const crlf = newlines.filter(newline => newline === '\r\n').length; + const lf = newlines.length - crlf; + return crlf > lf ? '\r\n' : '\n'; +}; +exports.default = newline; +//# sourceMappingURL=newline.js.map \ No newline at end of file diff --git a/dist/newline.js.map b/dist/newline.js.map new file mode 100644 index 00000000..75e15f74 --- /dev/null +++ b/dist/newline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"newline.js","sourceRoot":"","sources":["../src/newline.ts"],"names":[],"mappings":";;AAAA,2BAAwB;AACxB,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE;IACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAElD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,OAAO,QAAG,CAAA;KACV;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACnE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;IAElC,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC,CAAC;AAGF,kBAAe,OAAO,CAAA"} \ No newline at end of file diff --git a/dist/ops/add.js b/dist/ops/add.js index 56a12004..4dea1ce3 100644 --- a/dist/ops/add.js +++ b/dist/ops/add.js @@ -17,7 +17,7 @@ const path_1 = __importDefault(require("path")); const fs_extra_1 = __importDefault(require("fs-extra")); const chalk_1 = require("chalk"); const add = (action, args, { logger, cwd, createPrompter }) => __awaiter(void 0, void 0, void 0, function* () { - const { attributes: { to, inject, unless_exists, force, from }, } = action; + const { attributes: { to, inject, unless_exists, force, from, skip_if }, } = action; const result = result_1.default('add', to); const prompter = createPrompter(); if (!to || inject) { @@ -44,6 +44,10 @@ const add = (action, args, { logger, cwd, createPrompter }) => __awaiter(void 0, return result('skipped'); } } + const shouldSkip = !!skip_if; + if (shouldSkip) { + return result('skipped'); + } if (from) { const from_path = path_1.default.join(args.templates, from); const file = fs_extra_1.default.readFileSync(from_path).toString(); diff --git a/dist/ops/add.js.map b/dist/ops/add.js.map index ad0ffe6a..4a599ad7 100644 --- a/dist/ops/add.js.map +++ b/dist/ops/add.js.map @@ -1 +1 @@ -{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/ops/add.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,sDAAmC;AAEnC,gDAAuB;AACvB,wDAAyB;AACzB,iCAA2B;AAE3B,MAAM,GAAG,GAAG,CACV,MAAsB,EACtB,IAAS,EACT,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAgB,EACtB,EAAE;IACzB,MAAM,EACJ,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,GACvD,GAAG,MAAM,CAAA;IACV,MAAM,MAAM,GAAG,gBAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IACjC,IAAI,CAAC,EAAE,IAAI,MAAM,EAAE;QACjB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;KACzB;IACD,MAAM,KAAK,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACnC,MAAM,kBAAkB,GAAG,CAAC,KAAK;QAC/B,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,CAAA;IACvD,MAAM,UAAU,GAAG,CAAC,MAAM,kBAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAE3C,IAAI,kBAAkB,IAAI,UAAU,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;QAClC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;KACzB;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,IAAI,CAAC,KAAK,EAAE;QACxD,IACE,CAAC,CAAC,MAAM,QAAQ;aACb,MAAM,CAAC;YACN,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,WAAG,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;SACvD,CAAC;aACD,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EACtC;YACA,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;YAClC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;SACzB;KACF;IAGD,IAAI,IAAI,EAAE;QACR,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QACjD,MAAM,IAAI,GAAG,kBAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;QAClD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;KACnB;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QACb,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QACvC,MAAM,kBAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;KACvC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAChE,MAAM,CAAC,EAAE,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAA;IAE/D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;AACxB,CAAC,CAAA,CAAA;AAED,kBAAe,GAAG,CAAA"} \ No newline at end of file +{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/ops/add.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,sDAAmC;AAEnC,gDAAuB;AACvB,wDAAyB;AACzB,iCAA2B;AAE3B,MAAM,GAAG,GAAG,CACV,MAAsB,EACtB,IAAS,EACT,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAgB,EACtB,EAAE;IACzB,MAAM,EACJ,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAChE,GAAG,MAAM,CAAA;IACV,MAAM,MAAM,GAAG,gBAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IACjC,IAAI,CAAC,EAAE,IAAI,MAAM,EAAE;QACjB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;KACzB;IACD,MAAM,KAAK,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACnC,MAAM,kBAAkB,GAAG,CAAC,KAAK;QAC/B,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,CAAA;IACvD,MAAM,UAAU,GAAG,CAAC,MAAM,kBAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAE3C,IAAI,kBAAkB,IAAI,UAAU,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;QAClC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;KACzB;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,IAAI,CAAC,KAAK,EAAE;QACxD,IACE,CAAC,CAAC,MAAM,QAAQ;aACb,MAAM,CAAC;YACN,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,WAAG,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;SACvD,CAAC;aACD,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EACtC;YACA,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;YAClC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;SACzB;KACF;IAED,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC;IAC7B,IAAG,UAAU,EAAE;QACb,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;KACzB;IAED,IAAI,IAAI,EAAE;QACR,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QACjD,MAAM,IAAI,GAAG,kBAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;QAClD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;KACnB;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QACb,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QACvC,MAAM,kBAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;KACvC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAChE,MAAM,CAAC,EAAE,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAA;IAE/D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;AACxB,CAAC,CAAA,CAAA;AAED,kBAAe,GAAG,CAAA"} \ No newline at end of file diff --git a/dist/ops/injector.js b/dist/ops/injector.js index 19375c92..35633ad1 100644 --- a/dist/ops/injector.js +++ b/dist/ops/injector.js @@ -1,11 +1,17 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -const os_1 = require("os"); +const newline_1 = __importDefault(require("../newline")); const EOLRegex = /\r?\n/; const getPragmaticIndex = (pattern, lines, isBefore) => { const oneLineMatchIndex = lines.findIndex(l => l.match(pattern)); + // joins the text and looks for line number, + // we dont care about platform line-endings correctness other than joining/splitting + // for all platforms if (oneLineMatchIndex < 0) { - const fullText = lines.join(os_1.EOL); + const fullText = lines.join("\n"); const fullMatch = fullText.match(new RegExp(pattern, 'm')); if (fullMatch && fullMatch.length) { if (isBefore) { @@ -36,10 +42,18 @@ const indexByLocation = (attributes, lines) => { }; const injector = (action, content) => { const { attributes: { skip_if, eof_last }, attributes, body, } = action; - const lines = content.split(EOLRegex); // eslint-disable-next-line const shouldSkip = skip_if && !!content.match(skip_if); if (!shouldSkip) { + // + // we care about producing platform-correct line endings. + // however the "correct" line endings should be detected from the actual + // CONTENT given, and not the underlying operating system. + // this is similar to how a text editor behaves. + // + const NL = newline_1.default(content); + const lines = content.split(NL); + // returns -1 (end) if no attrs const idx = indexByLocation(attributes, lines); // eslint-disable-next-line const trimEOF = idx >= 0 && eof_last === false && /\r?\n$/.test(body); @@ -49,13 +63,16 @@ const injector = (action, content) => { lines.splice(idx, 0, body.replace(/\r?\n$/, '')); } else if (insertEOF) { - lines.splice(idx, 0, `${body}\n`); + lines.splice(idx, 0, `${body}${NL}`); } else if (idx >= 0) { lines.splice(idx, 0, body); } + return lines.join(NL); + } + else { + return content; } - return lines.join(os_1.EOL); }; exports.default = injector; //# sourceMappingURL=injector.js.map \ No newline at end of file diff --git a/dist/ops/injector.js.map b/dist/ops/injector.js.map index 2690d9bc..6a17581b 100644 --- a/dist/ops/injector.js.map +++ b/dist/ops/injector.js.map @@ -1 +1 @@ -{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/ops/injector.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/ops/injector.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/prompt.js b/dist/prompt.js index ffc2d232..f8320db9 100644 --- a/dist/prompt.js +++ b/dist/prompt.js @@ -5,29 +5,43 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); -const hooksfiles = ['prompt.js', 'index.js']; +const helpers_1 = __importDefault(require("./helpers")); +const hooksfiles = ['prompt.js', 'index.js', 'prompt.ts', 'index.ts']; const prompt = (createPrompter, actionfolder, args) => { const hooksfile = hooksfiles - .map(f => path_1.default.resolve(path_1.default.join(actionfolder, f))) - .find(f => fs_1.default.existsSync(f)); + .map((f) => path_1.default.resolve(path_1.default.join(actionfolder, f))) + .find((f) => fs_1.default.existsSync(f)); if (!hooksfile) { return Promise.resolve({}); } + const isTypeScriptHook = /\.ts$/.test(hooksfile); + // Lazily support TS hook files + if (isTypeScriptHook) { + require('ts-node/register/transpile-only'); + } // shortcircuit without prompter // $FlowFixMe - const hooksModule = require(hooksfile); + let hooksModule = require(hooksfile); + if (isTypeScriptHook && hooksModule.default) { + hooksModule = hooksModule.default; + } if (hooksModule.params) { - return hooksModule.params({ args }); + return hooksModule.params({ args, h: helpers_1.default }); } // lazy loads prompter // everything below requires it const prompter = createPrompter(); if (hooksModule.prompt) { - return hooksModule.prompt({ prompter, inquirer: prompter, args }); + return hooksModule.prompt({ + prompter, + inquirer: prompter, + args, + h: helpers_1.default, + }); } return prompter.prompt( // prompt _only_ for things we've not seen on the CLI - hooksModule.filter(p => args[p.name] === undefined || + hooksModule.filter((p) => args[p.name] === undefined || args[p.name] === null || args[p.name].length === 0)); }; diff --git a/dist/prompt.js.map b/dist/prompt.js.map index 90c47dec..13d82fa8 100644 --- a/dist/prompt.js.map +++ b/dist/prompt.js.map @@ -1 +1 @@ -{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":";;;;;AAAA,gDAAuB;AACvB,4CAAmB;AAGnB,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;AAC5C,MAAM,MAAM,GAAG,CACb,cAAoC,EACpC,YAAoB,EACpB,IAAyB,EACJ,EAAE;IACvB,MAAM,SAAS,GAAG,UAAU;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAE9B,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;KAC3B;IAED,gCAAgC;IAChC,aAAa;IACb,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,WAAW,CAAC,MAAM,EAAE;QACtB,OAAO,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;KACpC;IAED,sBAAsB;IACtB,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IACjC,IAAI,WAAW,CAAC,MAAM,EAAE;QACtB,OAAO,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;KAClE;IAED,OAAO,QAAQ,CAAC,MAAM;IACpB,qDAAqD;IACrD,WAAW,CAAC,MAAM,CAChB,CAAC,CAAC,EAAE,CACF,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS;QAC1B,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;QACrB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAC5B,CACF,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,MAAM,CAAA"} \ No newline at end of file +{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":";;;;;AAAA,gDAAuB;AACvB,4CAAmB;AAEnB,wDAA+B;AAE/B,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AACtE,MAAM,MAAM,GAAG,CACb,cAAoC,EACpC,YAAoB,EACpB,IAAyB,EACJ,EAAE;IACvB,MAAM,SAAS,GAAG,UAAU;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;SACpD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAEhC,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;KAC3B;IACD,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAEhD,+BAA+B;IAC/B,IAAI,gBAAgB,EAAE;QACpB,OAAO,CAAC,iCAAiC,CAAC,CAAC;KAC5C;IACD,gCAAgC;IAChC,aAAa;IACb,IAAI,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACpC,IAAI,gBAAgB,IAAI,WAAW,CAAC,OAAO,EAAE;QAC3C,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC;KACnC;IAED,IAAI,WAAW,CAAC,MAAM,EAAE;QACtB,OAAO,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,iBAAO,EAAE,CAAC,CAAA;KAChD;IAED,sBAAsB;IACtB,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IACjC,IAAI,WAAW,CAAC,MAAM,EAAE;QACtB,OAAO,WAAW,CAAC,MAAM,CAAC;YACxB,QAAQ;YACR,QAAQ,EAAE,QAAQ;YAClB,IAAI;YACJ,CAAC,EAAE,iBAAO;SACX,CAAC,CAAA;KACH;IAED,OAAO,QAAQ,CAAC,MAAM;IACpB,qDAAqD;IACrD,WAAW,CAAC,MAAM,CAChB,CAAC,CAAC,EAAE,EAAE,CACJ,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS;QAC1B,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;QACrB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAC5B,CACF,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,MAAM,CAAA"} \ No newline at end of file diff --git a/dist/render.js b/dist/render.js index d8912967..3b7251ee 100644 --- a/dist/render.js +++ b/dist/render.js @@ -25,6 +25,8 @@ const filter = f => arr => arr.filter(f); const ignores = [ 'prompt.js', 'index.js', + 'prompt.ts', + 'index.ts', '.hygenignore', '.DS_Store', '.Spotlight-V100', @@ -51,11 +53,17 @@ const render = (args, config) => __awaiter(void 0, void 0, void 0, function* () : true)) .then(map(file => fs_extra_1.default.readFile(file).then(text => ({ file, text: text.toString() })))) .then(_ => Promise.all(_)) - .then(map(({ file, text }) => (Object.assign({ file }, front_matter_1.default(text, { allowUnsafe: true }))))) + .then(map(({ file, text }) => { + if (config.debug) + console.debug('Pre-formatting file:', file); + return Object.assign({ file }, front_matter_1.default(text, { allowUnsafe: true })); + })) .then(map(({ file, attributes, body }) => { const renderedAttrs = Object.entries(attributes).reduce((obj, [key, value]) => { return Object.assign(Object.assign({}, obj), { [key]: renderTemplate(value, args, config) }); }, {}); + if (config.debug) + console.debug('Rendering file:', file); return { file, attributes: renderedAttrs, diff --git a/dist/render.js.map b/dist/render.js.map index b909ac4e..a22af2fa 100644 --- a/dist/render.js.map +++ b/dist/render.js.map @@ -1 +1 @@ -{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/hygen.io/docs/templates.md b/hygen.io/docs/templates.md index abb06ba8..c947f862 100644 --- a/hygen.io/docs/templates.md +++ b/hygen.io/docs/templates.md @@ -3,7 +3,7 @@ title: Templates id: templates --- -A `hygen` template is a header of a markdown-like [frontmatter](templates/#all-frontmatter-properties) and a body of an ejs templating engine. +A `hygen` template is a header of a markdown-like [frontmatter](#all-frontmatter-properties) and a body of an ejs templating engine. ```yaml --- <----- frontmatter section @@ -346,13 +346,13 @@ Next up, we'll move on to [generators](/docs/generators). ## All Frontmatter Properties -| Property | Type | Default | Example | -|---------------------------------------------------|--------------|-----------|----------------------------------------| -| [`to:`](templates/#addition) | String (url) | undefined | my-project/readme.md | -| [`from:`](templates/#from--shared-templates) | String (url) | undefined | shared/docs/readme.md | -| [`force:`](templates/#addition) | Boolean | false | true | -| [`unless_exists:`](templates/#addition) | Boolean | false | true | -| [`inject:`](templates/#injection) | Boolean | false | true | -| [`after:`](templates/#injection) | Regex | undefined | devDependencies | -| [`skip_if:`](templates/#injection) | Regex | undefined | myPackage | -| [`sh:`](templates/#shell) | String | undefined | echo: "Hello this is a shell command!" | +| Property | Type | Default | Example | +|------------------------------------|--------------|-----------|----------------------------------------| +| [`to:`](#addition) | String (url) | undefined | my-project/readme.md | +| [`from:`](#from--shared-templates) | String (url) | undefined | shared/docs/readme.md | +| [`force:`](#addition) | Boolean | false | true | +| [`unless_exists:`](#addition) | Boolean | false | true | +| [`inject:`](#injection) | Boolean | false | true | +| [`after:`](#injection) | Regex | undefined | devDependencies | +| [`skip_if:`](#injection) | Regex | undefined | myPackage | +| [`sh:`](#shell) | String | undefined | echo: "Hello this is a shell command!" | diff --git a/hygen.io/docusaurus.config.js b/hygen.io/docusaurus.config.js index 1f4912d3..6e45a247 100755 --- a/hygen.io/docusaurus.config.js +++ b/hygen.io/docusaurus.config.js @@ -83,7 +83,7 @@ module.exports = { { docs: { sidebarPath: require.resolve('./sidebar.js'), - editUrl: 'https://github.com/jondot/hygen/edit/master/website/', + editUrl: 'https://github.com/jondot/hygen/edit/master/hygen.io/', }, theme: { customCss: require.resolve('./src/css/custom.css'), diff --git a/hygen.io/src/css/custom.css b/hygen.io/src/css/custom.css index 67c0446e..89186b19 100755 --- a/hygen.io/src/css/custom.css +++ b/hygen.io/src/css/custom.css @@ -29,7 +29,6 @@ h6{ .navbar { backdrop-filter: saturate(180%) blur(5px); -webkit-backdrop-filter: saturate(180%) blur(5px); - background-color: rgba(255,255,255,0.8); } .docusaurus-highlight-code-line { diff --git a/hygen.io/src/pages/index.js b/hygen.io/src/pages/index.js index 8dfbd02b..80fa3af4 100755 --- a/hygen.io/src/pages/index.js +++ b/hygen.io/src/pages/index.js @@ -155,8 +155,8 @@ const Hero = styled.div` margin-top: 15px; } ` + const Subtitle = styled.h2` - color: #000; font-weight: 600; margin: 1.2rem 0; letter-spacing: -1px; @@ -188,7 +188,6 @@ const Feature = styled.div` padding: 1rem; ` const IndexHeadContainer = styled.div` - background: white; padding: 20px; text-align: center; border-bottom: 1px solid #f0f0f0; diff --git a/package.json b/package.json index 8824fd0f..c25cf5de 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "hygen", - "version": "6.1.0", + "name": "@handfish/hygen", + "version": "6.1.2", "main": "dist/index.js", - "repository": "https://github.com/jondot/hygen", + "repository": "https://github.com/handfish/hygen", "bin": { "hygen": "./dist/bin.js" }, @@ -88,4 +88,4 @@ "redux", "react" ] -} \ No newline at end of file +} diff --git a/src/__tests__/__snapshots__/add.spec.ts.snap b/src/__tests__/__snapshots__/add.spec.ts.snap new file mode 100644 index 00000000..cbda695b --- /dev/null +++ b/src/__tests__/__snapshots__/add.spec.ts.snap @@ -0,0 +1,10 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`add should return "skipped" if skip_if has value 1`] = ` +Object { + "status": "ignored", + "subject": undefined, + "timing": Any, + "type": "add", +} +`; diff --git a/src/__tests__/__snapshots__/metaverse-conditional.spec.ts.snap b/src/__tests__/__snapshots__/metaverse-conditional.spec.ts.snap index b81ec99f..4ed753fe 100644 --- a/src/__tests__/__snapshots__/metaverse-conditional.spec.ts.snap +++ b/src/__tests__/__snapshots__/metaverse-conditional.spec.ts.snap @@ -200,6 +200,36 @@ Object { } `; +exports[`metaverse hygen-templates: inflection-in-params new --name person 1`] = ` +Object { + "actions": Array [ + Object { + "status": "added", + "subject": "given/inflection-in-params/new.md", + "timing": -1, + "type": "add", + }, + ], + "success": true, + "time": 0, +} +`; + +exports[`metaverse hygen-templates: inflection-in-prompt new 1`] = ` +Object { + "actions": Array [ + Object { + "status": "added", + "subject": "given/inflection-in-prompt/new.md", + "timing": -1, + "type": "add", + }, + ], + "success": true, + "time": 0, +} +`; + exports[`metaverse hygen-templates: init self 1`] = ` Object { "actions": Array [ diff --git a/src/__tests__/__snapshots__/metaverse.spec.ts.snap b/src/__tests__/__snapshots__/metaverse.spec.ts.snap index f799c303..b2a136cf 100644 --- a/src/__tests__/__snapshots__/metaverse.spec.ts.snap +++ b/src/__tests__/__snapshots__/metaverse.spec.ts.snap @@ -200,6 +200,36 @@ Object { } `; +exports[`metaverse hygen-templates: inflection-in-params new --name person 1`] = ` +Object { + "actions": Array [ + Object { + "status": "added", + "subject": "given/inflection-in-params/new.md", + "timing": -1, + "type": "add", + }, + ], + "success": true, + "time": 0, +} +`; + +exports[`metaverse hygen-templates: inflection-in-prompt new 1`] = ` +Object { + "actions": Array [ + Object { + "status": "added", + "subject": "given/inflection-in-prompt/new.md", + "timing": -1, + "type": "add", + }, + ], + "success": true, + "time": 0, +} +`; + exports[`metaverse hygen-templates: init self 1`] = ` Object { "actions": Array [ diff --git a/src/__tests__/add.spec.ts b/src/__tests__/add.spec.ts new file mode 100644 index 00000000..7407f29a --- /dev/null +++ b/src/__tests__/add.spec.ts @@ -0,0 +1,32 @@ +import add from '../ops/add' +import Logger from '../logger' + +// const gemfile = ` +// source 'http://rubygems.org' +// gem 'rails' +// gem 'nokogiri' +// gem 'httparty' +// ` + +// TODO and inject is false +describe('add', () => { + it('should return "skipped" if skip_if has value ', async () => { + expect( + await add( + { + attributes: { + skip_if: 'true', + }, + body: 'this should be skipped', + }, + {}, + { + logger: new Logger(console.log), + debug: false, + helpers: {}, + createPrompter: () => require('enquirer'), + }, + ), + ).toMatchSnapshot({ timing: expect.any(Number) }) + }) +}) diff --git a/src/__tests__/metaverse.spec.ts b/src/__tests__/metaverse.spec.ts index 0c1c2120..397a8187 100644 --- a/src/__tests__/metaverse.spec.ts +++ b/src/__tests__/metaverse.spec.ts @@ -89,6 +89,8 @@ describe('metaverse', () => { ['mailer', 'new'], ['worker', 'new', '--name', 'foo'], ['inflection', 'new', '--name', 'person'], + ['inflection-in-params', 'new', '--name', 'person'], + ['inflection-in-prompt', 'new'], ['conditional-rendering', 'new', '--notGiven'], ['add-unless-exists', 'new', '--message', 'foo'], [ diff --git a/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-params/new/index.ejs.t b/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-params/new/index.ejs.t new file mode 100644 index 00000000..bf3b811f --- /dev/null +++ b/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-params/new/index.ejs.t @@ -0,0 +1,4 @@ +--- +to: given/inflection-in-params/new.md +--- +<%= pluralizedName %> diff --git a/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-params/new/index.js b/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-params/new/index.js new file mode 100644 index 00000000..42603d6e --- /dev/null +++ b/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-params/new/index.js @@ -0,0 +1,5 @@ +module.exports = { + params: ({ args, h }) => { + return { pluralizedName: h.inflection.pluralize(args.name) } + }, +} diff --git a/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-prompt/new/index.ejs.t b/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-prompt/new/index.ejs.t new file mode 100644 index 00000000..5454555f --- /dev/null +++ b/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-prompt/new/index.ejs.t @@ -0,0 +1,4 @@ +--- +to: given/inflection-in-prompt/new.md +--- +<%= pluralizedName %> diff --git a/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-prompt/new/prompt.js b/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-prompt/new/prompt.js new file mode 100644 index 00000000..597f1ae0 --- /dev/null +++ b/src/__tests__/metaverse/hygen-templates/_templates/inflection-in-prompt/new/prompt.js @@ -0,0 +1,12 @@ +module.exports = { + prompt: ({ prompter, h }) => + prompter + .prompt({ + type: 'input', + name: 'name', + message: "What's your name?", + }) + .then(({ name }) => { + return { pluralizedName: h.inflection.pluralize(name) } + }), +} diff --git a/src/__tests__/metaverse/hygen-templates/expected/inflection-in-params/new.md b/src/__tests__/metaverse/hygen-templates/expected/inflection-in-params/new.md new file mode 100644 index 00000000..5bc24c6e --- /dev/null +++ b/src/__tests__/metaverse/hygen-templates/expected/inflection-in-params/new.md @@ -0,0 +1 @@ +people diff --git a/src/__tests__/metaverse/hygen-templates/expected/inflection-in-prompt/new.md b/src/__tests__/metaverse/hygen-templates/expected/inflection-in-prompt/new.md new file mode 100644 index 00000000..140a39f0 --- /dev/null +++ b/src/__tests__/metaverse/hygen-templates/expected/inflection-in-prompt/new.md @@ -0,0 +1 @@ +messages diff --git a/src/context.ts b/src/context.ts index 74d8b1a6..47969b74 100644 --- a/src/context.ts +++ b/src/context.ts @@ -1,27 +1,10 @@ import { RunnerConfig } from './types' -import inflection from 'inflection' -import changeCase from 'change-case' -import path from 'path' +import helpers from './helpers' const localsToCapitalize = ['name'] const localsDefaults = { name: 'unnamed', } -// supports kebab-case to KebabCase -inflection.undasherize = (str) => - str - .split(/[-_]/) - .map((w) => w[0].toUpperCase() + w.slice(1).toLowerCase()) - .join('') - -const helpers = { - capitalize(string) { - return string.charAt(0).toUpperCase() + string.slice(1) - }, - inflection, - changeCase, - path, -} const doCapitalization = (hsh, [key, value]) => { hsh[key] = value diff --git a/src/helpers.ts b/src/helpers.ts new file mode 100644 index 00000000..772deb08 --- /dev/null +++ b/src/helpers.ts @@ -0,0 +1,22 @@ +import inflection from 'inflection' +import changeCase from 'change-case' +import path from 'path' + +// supports kebab-case to KebabCase +inflection.undasherize = (str) => + str + .split(/[-_]/) + .map((w) => w[0].toUpperCase() + w.slice(1).toLowerCase()) + .join('') + +const helpers = { + capitalize(str) { + const toBeCapitalized = String(str) + return toBeCapitalized.charAt(0).toUpperCase() + toBeCapitalized.slice(1) + }, + inflection, + changeCase, + path, +} + +export default helpers diff --git a/src/ops/add.ts b/src/ops/add.ts index 1f116c1f..bb220343 100644 --- a/src/ops/add.ts +++ b/src/ops/add.ts @@ -11,7 +11,7 @@ const add = async ( { logger, cwd, createPrompter }: RunnerConfig, ): Promise => { const { - attributes: { to, inject, unless_exists, force, from }, + attributes: { to, inject, unless_exists, force, from, skip_if }, } = action const result = createResult('add', to) const prompter = createPrompter() @@ -43,6 +43,10 @@ const add = async ( } } + const shouldSkip = !!skip_if; + if(shouldSkip) { + return result('skipped') + } if (from) { const from_path = path.join(args.templates, from) diff --git a/src/prompt.ts b/src/prompt.ts index e1c96f31..31679e8c 100644 --- a/src/prompt.ts +++ b/src/prompt.ts @@ -1,39 +1,54 @@ import path from 'path' import fs from 'fs' import { Prompter } from './types' +import helpers from './helpers' -const hooksfiles = ['prompt.js', 'index.js'] +const hooksfiles = ['prompt.js', 'index.js', 'prompt.ts', 'index.ts']; const prompt = ( createPrompter: () => Prompter, actionfolder: string, args: Record, ): Promise => { const hooksfile = hooksfiles - .map(f => path.resolve(path.join(actionfolder, f))) - .find(f => fs.existsSync(f)) + .map((f) => path.resolve(path.join(actionfolder, f))) + .find((f) => fs.existsSync(f)) if (!hooksfile) { return Promise.resolve({}) } + const isTypeScriptHook = /\.ts$/.test(hooksfile) + // Lazily support TS hook files + if (isTypeScriptHook) { + require('ts-node/register/transpile-only'); + } // shortcircuit without prompter // $FlowFixMe - const hooksModule = require(hooksfile) + let hooksModule = require(hooksfile) + if (isTypeScriptHook && hooksModule.default) { + hooksModule = hooksModule.default; + } + if (hooksModule.params) { - return hooksModule.params({ args }) + return hooksModule.params({ args, h: helpers }) } // lazy loads prompter // everything below requires it const prompter = createPrompter() if (hooksModule.prompt) { - return hooksModule.prompt({ prompter, inquirer: prompter, args }) + return hooksModule.prompt({ + prompter, + inquirer: prompter, + args, + h: helpers, + }) } return prompter.prompt( // prompt _only_ for things we've not seen on the CLI hooksModule.filter( - p => + (p) => args[p.name] === undefined || args[p.name] === null || args[p.name].length === 0, diff --git a/src/render.ts b/src/render.ts index fb749a42..5e8a373c 100644 --- a/src/render.ts +++ b/src/render.ts @@ -15,6 +15,8 @@ const filter = f => arr => arr.filter(f) const ignores = [ 'prompt.js', 'index.js', + 'prompt.ts', + 'index.ts', '.hygenignore', '.DS_Store', '.Spotlight-V100', @@ -54,7 +56,10 @@ const render = async ( ) .then(_ => Promise.all(_)) .then( - map(({ file, text }) => ({ file, ...fm(text, { allowUnsafe: true }) })), + map(({ file, text }) => { + if(config.debug) console.debug('Pre-formatting file:', file) + return { file, ...fm(text, { allowUnsafe: true }) } + }), ) .then( map(({ file, attributes, body }) => { @@ -67,6 +72,7 @@ const render = async ( }, {}, ) + if(config.debug) console.debug('Rendering file:', file) return { file, attributes: renderedAttrs,