simple-scaffold 2.3.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,17 +13,12 @@
13
13
 
14
14
  </h2>
15
15
 
16
- Looking to streamline your workflow and get your projects up and running quickly? Look no further
17
- than Simple Scaffold - the easy-to-use NPM package that simplifies the process of organizing and
18
- copying your commonly-created files.
16
+ Simple Scaffold is a file scaffolding tool. You define templates once, then generate files from them
17
+ whenever you need whether it's a single component or an entire app boilerplate.
19
18
 
20
- With its agnostic and un-opinionated approach, Simple Scaffold can handle anything from a few simple
21
- files to an entire app boilerplate setup. Plus, with the power of **Handlebars.js** syntax, you can
22
- easily replace custom data and personalize your files to fit your exact needs. But that's not all -
23
- you can also use it to loop through data, use conditions, and write custom functions using helpers.
24
-
25
- Don't waste any more time manually copying and pasting files - let Simple Scaffold do the heavy
26
- lifting for you and start building your projects faster and more efficiently today!
19
+ Templates use **Handlebars.js** syntax, so you can inject data, loop over lists, use conditionals,
20
+ and write custom helpers. It works as a CLI or as a Node.js library, and it doesn't care what kind
21
+ of files you're generating.
27
22
 
28
23
  <div align="center">
29
24
 
@@ -100,9 +95,40 @@ See information about each option and flag using the `--help` flag, or read the
100
95
  [CLI documentation](https://chenasraf.github.io/simple-scaffold/docs/usage/cli). For information
101
96
  about how configuration files work, [see below](#configuration-files).
102
97
 
98
+ ### Interactive Mode
99
+
100
+ When running in a terminal, Simple Scaffold will interactively prompt for any missing required
101
+ values — name, output directory, template paths, and template key (if multiple are available).
102
+
103
+ Config files can also define **inputs** — custom fields that are prompted interactively and become
104
+ template data:
105
+
106
+ ```js
107
+ module.exports = {
108
+ component: {
109
+ templates: ["templates/component"],
110
+ output: "src/components",
111
+ inputs: {
112
+ author: { message: "Author name", required: true },
113
+ license: { message: "License", default: "MIT" },
114
+ },
115
+ },
116
+ }
117
+ ```
118
+
119
+ Inputs can be pre-provided via `--data` or `-D` to skip the prompt:
120
+
121
+ ```sh
122
+ npx simple-scaffold -c scaffold.config.js -k component -D author=John MyComponent
123
+ ```
124
+
103
125
  ### Configuration Files
104
126
 
105
- You can use a config file to more easily maintain all your scaffold definitions.
127
+ You can use a config file to more easily maintain all your scaffold definitions. Simple Scaffold
128
+ **auto-detects** config files in the current directory — no `--config` flag needed.
129
+
130
+ It searches for these files in order: `scaffold.config.{mjs,cjs,js,json}`,
131
+ `scaffold.{mjs,cjs,js,json}`, `.scaffold.{mjs,cjs,js,json}`.
106
132
 
107
133
  `scaffold.config.js`
108
134
 
@@ -120,10 +146,11 @@ module.exports = {
120
146
  }
121
147
  ```
122
148
 
123
- Then call your scaffold like this:
149
+ Then just run from the same directory:
124
150
 
125
151
  ```sh
126
- $ npx simple-scaffold -c scaffold.config.js PageWrapper
152
+ $ npx simple-scaffold PageWrapper
153
+ # or explicitly: npx simple-scaffold -c scaffold.config.js PageWrapper
127
154
  ```
128
155
 
129
156
  This will allow you to avoid needing to remember which configs are needed or to store them in a
@@ -0,0 +1,7 @@
1
+ import { LogConfig, ScaffoldConfig } from "./types";
2
+ /**
3
+ * Wraps a CLI beforeWrite command string into a beforeWrite callback function.
4
+ * The command receives the processed content via a temp file and can return modified content via stdout.
5
+ * @internal
6
+ */
7
+ export declare function wrapBeforeWrite(config: LogConfig & Pick<ScaffoldConfig, "dryRun">, beforeWrite: string): ScaffoldConfig["beforeWrite"];
package/cmd.js CHANGED
@@ -1,265 +1,219 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.parseCliArgs = parseCliArgs;
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const promises_1 = __importDefault(require("node:fs/promises"));
10
- const massarg_1 = require("massarg");
11
- const types_1 = require("./types");
12
- const scaffold_1 = require("./scaffold");
13
- const config_1 = require("./config");
14
- const logger_1 = require("./logger");
15
- const command_1 = require("massarg/command");
16
- const file_1 = require("./file");
17
- const utils_1 = require("./utils");
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require_scaffold = require("./scaffold-Ce-rIwy9.js");
4
+ let node_path = require("node:path");
5
+ node_path = require_scaffold.__toESM(node_path);
6
+ let node_fs_promises = require("node:fs/promises");
7
+ node_fs_promises = require_scaffold.__toESM(node_fs_promises);
8
+ let massarg = require("massarg");
9
+ let massarg_command = require("massarg/command");
10
+ //#region src/cmd.ts
18
11
  async function parseCliArgs(args = process.argv.slice(2)) {
19
- const isProjectRoot = Boolean(await promises_1.default.stat(node_path_1.default.join(__dirname, "package.json")).catch(() => false));
20
- const pkgFile = await promises_1.default.readFile(node_path_1.default.resolve(__dirname, isProjectRoot ? "." : "..", "package.json"));
21
- const pkg = JSON.parse(pkgFile.toString());
22
- const isVersionFlag = args.includes("--version") || args.includes("-v");
23
- const isConfigFileProvided = args.includes("--config") || args.includes("-c");
24
- const isGitProvided = args.includes("--git") || args.includes("-g");
25
- const isConfigProvided = isConfigFileProvided || isGitProvided || isVersionFlag;
26
- return (0, massarg_1.massarg)({
27
- name: pkg.name,
28
- description: pkg.description,
29
- })
30
- .main(async (config) => {
31
- if (config.version) {
32
- console.log(pkg.version);
33
- return;
34
- }
35
- (0, logger_1.log)(config, types_1.LogLevel.info, `Simple Scaffold v${pkg.version}`);
36
- config.tmpDir = (0, file_1.getUniqueTmpPath)();
37
- try {
38
- (0, logger_1.log)(config, types_1.LogLevel.debug, "Parsing config file...", config);
39
- const parsed = await (0, config_1.parseConfigFile)(config);
40
- await (0, scaffold_1.Scaffold)(parsed);
41
- }
42
- catch (e) {
43
- const message = "message" in e ? e.message : e?.toString();
44
- (0, logger_1.log)(config, types_1.LogLevel.error, message);
45
- }
46
- finally {
47
- (0, logger_1.log)(config, types_1.LogLevel.debug, "Cleaning up temporary files...", config.tmpDir);
48
- await promises_1.default.rm(config.tmpDir, { recursive: true, force: true });
49
- }
50
- })
51
- .option({
52
- name: "name",
53
- aliases: ["n"],
54
- description: "Name to be passed to the generated files. `{{name}}` and other data parameters inside " +
55
- "contents and file names will be replaced accordingly. You may omit the `--name` or `-n` " +
56
- "for this specific option.",
57
- isDefault: true,
58
- required: !isConfigProvided,
59
- })
60
- .option({
61
- name: "config",
62
- aliases: ["c"],
63
- description: "Filename or directory to load config from",
64
- })
65
- .option({
66
- name: "git",
67
- aliases: ["g"],
68
- description: "Git URL or GitHub path to load a template from.",
69
- })
70
- .option({
71
- name: "key",
72
- aliases: ["k"],
73
- description: "Key to load inside the config file. This overwrites the config key provided after the colon in `--config` " +
74
- "(e.g. `--config scaffold.cmd.js:component)`",
75
- })
76
- .option({
77
- name: "output",
78
- aliases: ["o"],
79
- description: "Path to output to. If `--subdir` is enabled, the subdir will be created inside " +
80
- "this path. Default is current working directory.",
81
- required: !isConfigProvided,
82
- })
83
- .option({
84
- name: "templates",
85
- aliases: ["t"],
86
- array: true,
87
- description: "Template files to use as input. You may provide multiple files, each of which can be a relative or " +
88
- "absolute path, " +
89
- "or a glob pattern for multiple file matching easily.",
90
- required: !isConfigProvided,
91
- })
92
- .flag({
93
- name: "overwrite",
94
- aliases: ["w"],
95
- defaultValue: false,
96
- description: "Enable to override output files, even if they already exist.",
97
- negatable: true,
98
- })
99
- .option({
100
- name: "data",
101
- aliases: ["d"],
102
- description: "Add custom data to the templates. By default, only your app name is included.",
103
- parse: (v) => JSON.parse(v),
104
- })
105
- .option({
106
- name: "append-data",
107
- aliases: ["D"],
108
- description: "Append additional custom data to the templates, which will overwrite `--data`, using an alternate syntax, " +
109
- "which is easier to use with CLI: `-D key1=string -D key2:=raw`",
110
- parse: config_1.parseAppendData,
111
- })
112
- .flag({
113
- name: "subdir",
114
- aliases: ["s"],
115
- defaultValue: false,
116
- description: "Create a parent directory with the input name (and possibly `--subdir-helper`",
117
- negatable: true,
118
- negationName: "no-subdir",
119
- })
120
- .option({
121
- name: "subdir-helper",
122
- aliases: ["H"],
123
- description: "Default helper to apply to subdir name when using `--subdir`.",
124
- })
125
- .flag({
126
- name: "quiet",
127
- aliases: ["q"],
128
- defaultValue: false,
129
- description: "Suppress output logs (Same as `--log-level none`)",
130
- })
131
- .option({
132
- name: "log-level",
133
- aliases: ["l"],
134
- defaultValue: types_1.LogLevel.info,
135
- description: "Determine amount of logs to display. The values are: " +
136
- `${utils_1.colorize.bold `\`none | debug | info | warn | error\``}. ` +
137
- "The provided level will display messages of the same level or higher.",
138
- parse: (v) => {
139
- const val = v.toLowerCase();
140
- if (!(val in types_1.LogLevel)) {
141
- throw new Error(`Invalid log level: ${val}, must be one of: ${Object.keys(types_1.LogLevel).join(", ")}`);
142
- }
143
- return val;
144
- },
145
- })
146
- .option({
147
- name: "before-write",
148
- aliases: ["B"],
149
- description: "Run a script before writing the files. This can be a command or a path to a" +
150
- " file. A temporary file path will be passed to the given command and the command should " +
151
- "return a string for the final output.",
152
- })
153
- .flag({
154
- name: "dry-run",
155
- aliases: ["dr"],
156
- defaultValue: false,
157
- description: "Don't emit files. This is good for testing your scaffolds and making sure they " +
158
- "don't fail, without having to write actual file contents or create directories.",
159
- })
160
- .flag({
161
- name: "version",
162
- aliases: ["v"],
163
- description: "Display version.",
164
- })
165
- .command(new command_1.MassargCommand({
166
- name: "list",
167
- aliases: ["ls"],
168
- description: "List all available templates for a given config. See `list -h` for more information.",
169
- run: async (_config) => {
170
- const config = {
171
- templates: [],
172
- name: "",
173
- version: false,
174
- output: "",
175
- subdir: false,
176
- overwrite: false,
177
- dryRun: false,
178
- tmpDir: (0, file_1.getUniqueTmpPath)(),
179
- ..._config,
180
- config: _config.config ?? (!_config.git ? process.cwd() : undefined),
181
- };
182
- try {
183
- const file = await (0, config_1.getConfigFile)(config);
184
- console.log(utils_1.colorize.underline `Available templates:\n`);
185
- console.log(Object.keys(file).join("\n"));
186
- }
187
- catch (e) {
188
- const message = "message" in e ? e.message : e?.toString();
189
- (0, logger_1.log)(config, types_1.LogLevel.error, message);
190
- }
191
- finally {
192
- (0, logger_1.log)(config, types_1.LogLevel.debug, "Cleaning up temporary files...", config.tmpDir);
193
- await promises_1.default.rm(config.tmpDir, { recursive: true, force: true });
194
- }
195
- },
196
- })
197
- .option({
198
- name: "config",
199
- aliases: ["c"],
200
- description: "Filename or directory to load config from. Defaults to current working directory.",
201
- })
202
- .option({
203
- name: "git",
204
- aliases: ["g"],
205
- description: "Git URL or GitHub path to load a template from.",
206
- })
207
- .option({
208
- name: "log-level",
209
- aliases: ["l"],
210
- defaultValue: types_1.LogLevel.none,
211
- description: "Determine amount of logs to display. The values are: " +
212
- `${utils_1.colorize.bold `\`none | debug | info | warn | error\``}. ` +
213
- "The provided level will display messages of the same level or higher.",
214
- parse: (v) => {
215
- const val = v.toLowerCase();
216
- if (!(val in types_1.LogLevel)) {
217
- throw new Error(`Invalid log level: ${val}, must be one of: ${Object.keys(types_1.LogLevel).join(", ")}`);
218
- }
219
- return val;
220
- },
221
- })
222
- .help({
223
- bindOption: true,
224
- }))
225
- .example({
226
- description: "Usage with config file",
227
- input: "simple-scaffold -c scaffold.cmd.js --key component",
228
- })
229
- .example({
230
- description: "Usage with GitHub config file",
231
- input: "simple-scaffold -g chenasraf/simple-scaffold --key component",
232
- })
233
- .example({
234
- description: "Usage with https git URL (for non-GitHub)",
235
- input: "simple-scaffold -g https://example.com/user/template.git -c scaffold.cmd.js --key component",
236
- })
237
- .example({
238
- description: "Excluded template key, assumes 'default' key",
239
- input: "simple-scaffold -c scaffold.cmd.js MyComponent",
240
- })
241
- .example({
242
- description: "Shortest syntax for GitHub, searches for config file automaticlly, assumes and template key 'default'",
243
- input: "simple-scaffold -g chenasraf/simple-scaffold MyComponent",
244
- })
245
- .help({
246
- bindOption: true,
247
- lineLength: 100,
248
- useGlobalTableColumns: true,
249
- usageText: [utils_1.colorize.yellow `simple-scaffold`, utils_1.colorize.gray `[options]`, utils_1.colorize.cyan `<name>`].join(" "),
250
- optionOptions: {
251
- displayNegations: true,
252
- },
253
- footerText: [
254
- `Version: ${pkg.version}`,
255
- `Copyright © Chen Asraf 2017-${new Date().getFullYear()}`,
256
- ``,
257
- `Documentation: ${utils_1.colorize.underline `https://chenasraf.github.io/simple-scaffold`}`,
258
- `NPM: ${utils_1.colorize.underline `https://npmjs.com/package/simple-scaffold`}`,
259
- `GitHub: ${utils_1.colorize.underline `https://github.com/chenasraf/simple-scaffold`}`,
260
- ].join("\n"),
261
- })
262
- .parse(args);
12
+ const isProjectRoot = Boolean(await node_fs_promises.default.stat(node_path.default.join(__dirname, "package.json")).catch(() => false));
13
+ const pkgFile = await node_fs_promises.default.readFile(node_path.default.resolve(__dirname, isProjectRoot ? "." : "..", "package.json"));
14
+ const pkg = JSON.parse(pkgFile.toString());
15
+ args.includes("--version") || args.includes("-v");
16
+ args.includes("--config") || args.includes("-c");
17
+ args.includes("--git") || args.includes("-g");
18
+ return (0, massarg.massarg)({
19
+ name: pkg.name,
20
+ description: pkg.description
21
+ }).main(async (config) => {
22
+ if (config.version) {
23
+ console.log(pkg.version);
24
+ return;
25
+ }
26
+ require_scaffold.log(config, require_scaffold.LogLevel.info, `Simple Scaffold v${pkg.version}`);
27
+ config.tmpDir = require_scaffold.getUniqueTmpPath();
28
+ try {
29
+ if (!config.config && !config.git) try {
30
+ config.config = await require_scaffold.findConfigFile(process.cwd());
31
+ require_scaffold.log(config, require_scaffold.LogLevel.debug, `Auto-detected config file: ${config.config}`);
32
+ } catch {}
33
+ const hasConfigSource = Boolean(config.config || config.git);
34
+ let configMap;
35
+ if (hasConfigSource) configMap = await require_scaffold.getConfigFile(config);
36
+ config = await require_scaffold.promptForMissingConfig(config, configMap);
37
+ require_scaffold.log(config, require_scaffold.LogLevel.debug, "Parsing config file...", config);
38
+ await require_scaffold.Scaffold(await require_scaffold.resolveInputs(await require_scaffold.parseConfigFile(config)));
39
+ } catch (e) {
40
+ const message = "message" in e ? e.message : e?.toString();
41
+ require_scaffold.log(config, require_scaffold.LogLevel.error, message);
42
+ } finally {
43
+ require_scaffold.log(config, require_scaffold.LogLevel.debug, "Cleaning up temporary files...", config.tmpDir);
44
+ if (config.tmpDir) await node_fs_promises.default.rm(config.tmpDir, {
45
+ recursive: true,
46
+ force: true
47
+ });
48
+ }
49
+ }).option({
50
+ name: "name",
51
+ aliases: ["n"],
52
+ description: "Name to be passed to the generated files. `{{name}}` and other data parameters inside contents and file names will be replaced accordingly. You may omit the `--name` or `-n` for this specific option. If omitted in an interactive terminal, you will be prompted.",
53
+ isDefault: true
54
+ }).option({
55
+ name: "config",
56
+ aliases: ["c"],
57
+ description: "Filename or directory to load config from"
58
+ }).option({
59
+ name: "git",
60
+ aliases: ["g"],
61
+ description: "Git URL or GitHub path to load a template from."
62
+ }).option({
63
+ name: "key",
64
+ aliases: ["k"],
65
+ description: "Key to load inside the config file. This overwrites the config key provided after the colon in `--config` (e.g. `--config scaffold.cmd.js:component)`. If omitted and multiple templates are available, you will be prompted to select one."
66
+ }).option({
67
+ name: "output",
68
+ aliases: ["o"],
69
+ description: "Path to output to. If `--subdir` is enabled, the subdir will be created inside this path. If omitted in an interactive terminal, you will be prompted."
70
+ }).option({
71
+ name: "templates",
72
+ aliases: ["t"],
73
+ array: true,
74
+ description: "Template files to use as input. You may provide multiple files, each of which can be a relative or absolute path, or a glob pattern for multiple file matching easily. If omitted in an interactive terminal, you will be prompted for a comma-separated list."
75
+ }).flag({
76
+ name: "overwrite",
77
+ aliases: ["w"],
78
+ defaultValue: false,
79
+ description: "Enable to override output files, even if they already exist.",
80
+ negatable: true
81
+ }).option({
82
+ name: "data",
83
+ aliases: ["d"],
84
+ description: "Add custom data to the templates. By default, only your app name is included.",
85
+ parse: (v) => JSON.parse(v)
86
+ }).option({
87
+ name: "append-data",
88
+ aliases: ["D"],
89
+ description: "Append additional custom data to the templates, which will overwrite `--data`, using an alternate syntax, which is easier to use with CLI: `-D key1=string -D key2:=raw`",
90
+ parse: require_scaffold.parseAppendData
91
+ }).flag({
92
+ name: "subdir",
93
+ aliases: ["s"],
94
+ defaultValue: false,
95
+ description: "Create a parent directory with the input name (and possibly `--subdir-helper`",
96
+ negatable: true,
97
+ negationName: "no-subdir"
98
+ }).option({
99
+ name: "subdir-helper",
100
+ aliases: ["H"],
101
+ description: "Default helper to apply to subdir name when using `--subdir`."
102
+ }).flag({
103
+ name: "quiet",
104
+ aliases: ["q"],
105
+ defaultValue: false,
106
+ description: "Suppress output logs (Same as `--log-level none`)"
107
+ }).option({
108
+ name: "log-level",
109
+ aliases: ["l"],
110
+ defaultValue: require_scaffold.LogLevel.info,
111
+ description: `Determine amount of logs to display. The values are: ${require_scaffold.colorize.bold`\`none | debug | info | warn | error\``}. The provided level will display messages of the same level or higher.`,
112
+ parse: (v) => {
113
+ const val = v.toLowerCase();
114
+ if (!(val in require_scaffold.LogLevel)) throw new Error(`Invalid log level: ${val}, must be one of: ${Object.keys(require_scaffold.LogLevel).join(", ")}`);
115
+ return val;
116
+ }
117
+ }).option({
118
+ name: "before-write",
119
+ aliases: ["B"],
120
+ description: "Run a script before writing the files. This can be a command or a path to a file. A temporary file path will be passed to the given command and the command should return a string for the final output."
121
+ }).flag({
122
+ name: "dry-run",
123
+ aliases: ["dr"],
124
+ defaultValue: false,
125
+ description: "Don't emit files. This is good for testing your scaffolds and making sure they don't fail, without having to write actual file contents or create directories."
126
+ }).flag({
127
+ name: "version",
128
+ aliases: ["v"],
129
+ description: "Display version."
130
+ }).command(new massarg_command.MassargCommand({
131
+ name: "list",
132
+ aliases: ["ls"],
133
+ description: "List all available templates for a given config. See `list -h` for more information.",
134
+ run: async (_config) => {
135
+ const config = {
136
+ templates: [],
137
+ name: "",
138
+ version: false,
139
+ output: "",
140
+ subdir: false,
141
+ overwrite: false,
142
+ dryRun: false,
143
+ tmpDir: require_scaffold.getUniqueTmpPath(),
144
+ ..._config,
145
+ config: _config.config ?? (!_config.git ? process.cwd() : void 0)
146
+ };
147
+ try {
148
+ const file = await require_scaffold.getConfigFile(config);
149
+ console.log(require_scaffold.colorize.underline`Available templates:\n`);
150
+ console.log(Object.keys(file).join("\n"));
151
+ } catch (e) {
152
+ const message = "message" in e ? e.message : e?.toString();
153
+ require_scaffold.log(config, require_scaffold.LogLevel.error, message);
154
+ } finally {
155
+ require_scaffold.log(config, require_scaffold.LogLevel.debug, "Cleaning up temporary files...", config.tmpDir);
156
+ if (config.tmpDir) await node_fs_promises.default.rm(config.tmpDir, {
157
+ recursive: true,
158
+ force: true
159
+ });
160
+ }
161
+ }
162
+ }).option({
163
+ name: "config",
164
+ aliases: ["c"],
165
+ description: "Filename or directory to load config from. Defaults to current working directory."
166
+ }).option({
167
+ name: "git",
168
+ aliases: ["g"],
169
+ description: "Git URL or GitHub path to load a template from."
170
+ }).option({
171
+ name: "log-level",
172
+ aliases: ["l"],
173
+ defaultValue: require_scaffold.LogLevel.none,
174
+ description: `Determine amount of logs to display. The values are: ${require_scaffold.colorize.bold`\`none | debug | info | warn | error\``}. The provided level will display messages of the same level or higher.`,
175
+ parse: (v) => {
176
+ const val = v.toLowerCase();
177
+ if (!(val in require_scaffold.LogLevel)) throw new Error(`Invalid log level: ${val}, must be one of: ${Object.keys(require_scaffold.LogLevel).join(", ")}`);
178
+ return val;
179
+ }
180
+ }).help({ bindOption: true })).example({
181
+ description: "Usage with config file",
182
+ input: "simple-scaffold -c scaffold.cmd.js --key component"
183
+ }).example({
184
+ description: "Usage with GitHub config file",
185
+ input: "simple-scaffold -g chenasraf/simple-scaffold --key component"
186
+ }).example({
187
+ description: "Usage with https git URL (for non-GitHub)",
188
+ input: "simple-scaffold -g https://example.com/user/template.git -c scaffold.cmd.js --key component"
189
+ }).example({
190
+ description: "Excluded template key, assumes 'default' key",
191
+ input: "simple-scaffold -c scaffold.cmd.js MyComponent"
192
+ }).example({
193
+ description: "Shortest syntax for GitHub, searches for config file automaticlly, assumes and template key 'default'",
194
+ input: "simple-scaffold -g chenasraf/simple-scaffold MyComponent"
195
+ }).help({
196
+ bindOption: true,
197
+ lineLength: 100,
198
+ useGlobalTableColumns: true,
199
+ usageText: [
200
+ require_scaffold.colorize.yellow`simple-scaffold`,
201
+ require_scaffold.colorize.gray`[options]`,
202
+ require_scaffold.colorize.cyan`<name>`
203
+ ].join(" "),
204
+ optionOptions: { displayNegations: true },
205
+ footerText: [
206
+ `Version: ${pkg.version}`,
207
+ `Copyright © Chen Asraf 2017-${(/* @__PURE__ */ new Date()).getFullYear()}`,
208
+ ``,
209
+ `Documentation: ${require_scaffold.colorize.underline`https://chenasraf.github.io/simple-scaffold`}`,
210
+ `NPM: ${require_scaffold.colorize.underline`https://npmjs.com/package/simple-scaffold`}`,
211
+ `GitHub: ${require_scaffold.colorize.underline`https://github.com/chenasraf/simple-scaffold`}`
212
+ ].join("\n")
213
+ }).parse(args);
263
214
  }
264
215
  parseCliArgs();
216
+ //#endregion
217
+ exports.parseCliArgs = parseCliArgs;
218
+
265
219
  //# sourceMappingURL=cmd.js.map