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 @@
-[](https://travis-ci.org/jondot/hygen)
-[](https://www.npmjs.com/package/hygen)
+## Installing this Fork
+
+`yarn add @handfish/hygen`
+
+[](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":";;;;;AACA,yDAAgC;AAEhC,MAAM,QAAQ,GAAG,OAAO,CAAA;AAExB,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IACrD,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAEhE,4CAA4C;IAC5C,oFAAoF;IACpF,oBAAoB;IACpB,IAAI,iBAAiB,GAAG,CAAC,EAAE;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;QAE1D,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;YACjC,IAAI,QAAQ,EAAE;gBACZ,MAAM,uBAAuB,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;gBACtE,OAAO,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;aAC1D;YACD,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAA;YACnE,MAAM,qBAAqB,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAClE,OAAO,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAA;SACpD;KACF;IAED,OAAO,iBAAiB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAA;AACD,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;IACvD,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;CACxD,CAAA;AACD,MAAM,eAAe,GAAG,CAAC,UAAe,EAAE,KAAe,EAAU,EAAE;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,IAAI,IAAI,EAAE;QACR,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;QACnB,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;KAC9B;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC,CAAA;AACD,MAAM,QAAQ,GAAG,CAAC,MAAsB,EAAE,OAAe,EAAU,EAAE;IACnE,MAAM,EACJ,UAAU,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EACjC,UAAU,EACV,IAAI,GACL,GAAG,MAAM,CAAA;IACV,2BAA2B;IAC3B,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEvD,IAAI,CAAC,UAAU,EAAE;QACf,EAAE;QACF,yDAAyD;QACzD,wEAAwE;QACxE,0DAA0D;QAC1D,gDAAgD;QAChD,EAAE;QACF,MAAM,EAAE,GAAG,iBAAO,CAAC,OAAO,CAAC,CAAA;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAE/B,+BAA+B;QAC/B,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QAE9C,2BAA2B;QAC3B,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,2BAA2B;QAC3B,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExE,IAAI,OAAO,EAAE;YACX,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;SACjD;aAAM,IAAI,SAAS,EAAE;YACpB,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;SACrC;aAAM,IAAI,GAAG,IAAI,CAAC,EAAE;YACnB,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;SAC3B;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;KACrB;SAAM;QACL,OAAO,OAAO,CAAA;KACf;AACH,CAAC,CAAA;AAED,kBAAe,QAAQ,CAAA"}
\ 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,