@thegetty/quire-cli 1.0.0-rc.45 → 1.0.0-rc.46
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/CHANGELOG.md +0 -36
- package/README.md +0 -9
- package/bin/cli.js +1 -46
- package/package.json +10 -27
- package/src/Command.js +6 -26
- package/src/commands/README.md +122 -213
- package/src/commands/build.js +37 -45
- package/src/commands/clean.js +19 -33
- package/src/commands/conf.js +43 -0
- package/src/commands/create.js +14 -42
- package/src/commands/epub.js +31 -67
- package/src/commands/index.js +2 -9
- package/src/commands/info.js +86 -88
- package/src/commands/pdf.js +82 -63
- package/src/commands/preview.js +31 -32
- package/src/commands/validate.js +20 -64
- package/src/commands/version.js +43 -0
- package/src/errors/validation/validation-error.js +11 -20
- package/src/helpers/clean.js +1 -1
- package/src/helpers/is-quire.js +31 -0
- package/src/helpers/test-cwd.js +6 -5
- package/src/helpers/which.js +4 -10
- package/src/lib/11ty/README.md +19 -135
- package/src/lib/11ty/api.js +93 -235
- package/src/lib/11ty/cli.js +37 -112
- package/src/lib/11ty/index.js +5 -64
- package/src/lib/11ty/paths.js +103 -0
- package/src/lib/README.md +0 -330
- package/src/lib/conf/README.md +69 -86
- package/src/lib/conf/config.js +3 -5
- package/src/lib/conf/defaults.js +0 -65
- package/src/lib/conf/schema.js +9 -103
- package/src/lib/epub/README.md +2 -133
- package/src/lib/epub/epub.js +11 -36
- package/src/lib/epub/index.js +21 -111
- package/src/lib/epub/pandoc.js +4 -33
- package/src/lib/git/README.md +2 -151
- package/src/lib/git/index.js +13 -217
- package/src/lib/i18n/README.md +3 -0
- package/src/lib/i18n/config.js +53 -0
- package/src/lib/i18n/index.js +43 -0
- package/src/lib/i18n/localeService.js +58 -0
- package/src/lib/pdf/README.md +0 -131
- package/src/lib/pdf/index.js +21 -124
- package/src/lib/pdf/paged.js +52 -100
- package/src/lib/pdf/prince.js +37 -115
- package/src/lib/pdf/split.js +33 -61
- package/src/lib/quire/README.md +19 -0
- package/src/lib/quire/index.js +353 -0
- package/src/lib/reporter/README.md +2 -211
- package/src/lib/reporter/index.js +0 -607
- package/src/main.js +48 -221
- package/src/packageConfig.js +0 -17
- package/src/validators/utils.js +1 -2
- package/man/quire.1 +0 -341
- package/man/quire.1.md +0 -232
- package/schemas/config.schema.json +0 -194
- package/schemas/figures.schema.json +0 -56
- package/schemas/layout.schema.json +0 -5
- package/schemas/objects.schema.json +0 -62
- package/schemas/publication.schema.json +0 -140
- package/schemas/references.schema.json +0 -29
- package/src/Command.spec.js +0 -99
- package/src/commands/build.spec.js +0 -113
- package/src/commands/build.test.js +0 -397
- package/src/commands/clean.spec.js +0 -118
- package/src/commands/clean.test.js +0 -382
- package/src/commands/config.js +0 -238
- package/src/commands/config.spec.js +0 -107
- package/src/commands/config.test.js +0 -845
- package/src/commands/create.spec.js +0 -112
- package/src/commands/create.test.js +0 -415
- package/src/commands/doctor.js +0 -251
- package/src/commands/doctor.spec.js +0 -115
- package/src/commands/doctor.test.js +0 -1409
- package/src/commands/epub.spec.js +0 -114
- package/src/commands/epub.test.js +0 -503
- package/src/commands/help.js +0 -60
- package/src/commands/help.test.js +0 -132
- package/src/commands/info.spec.js +0 -72
- package/src/commands/info.test.js +0 -512
- package/src/commands/pdf.spec.js +0 -114
- package/src/commands/pdf.test.js +0 -464
- package/src/commands/preview.spec.js +0 -97
- package/src/commands/preview.test.js +0 -250
- package/src/commands/use.js +0 -56
- package/src/commands/use.spec.js +0 -61
- package/src/commands/use.test.js +0 -280
- package/src/commands/validate.spec.js +0 -90
- package/src/commands/validate.test.js +0 -378
- package/src/commands/workflows.js +0 -70
- package/src/errors/build/build-failed-error.js +0 -19
- package/src/errors/build/config-field-missing-error.js +0 -20
- package/src/errors/build/config-file-not-found-error.js +0 -20
- package/src/errors/build/index.js +0 -11
- package/src/errors/help/help-topic-not-found-error.js +0 -30
- package/src/errors/help/index.js +0 -8
- package/src/errors/index.js +0 -58
- package/src/errors/input/index.js +0 -8
- package/src/errors/input/invalid-input-error.js +0 -21
- package/src/errors/install/dependency-install-error.js +0 -19
- package/src/errors/install/directory-not-empty-error.js +0 -25
- package/src/errors/install/index.js +0 -12
- package/src/errors/install/invalid-path-error.js +0 -31
- package/src/errors/install/invalid-starter-error.js +0 -27
- package/src/errors/install/version-not-found-error.js +0 -35
- package/src/errors/output/epub-generation-error.js +0 -19
- package/src/errors/output/index.js +0 -14
- package/src/errors/output/invalid-epub-library-error.js +0 -20
- package/src/errors/output/invalid-pdf-library-error.js +0 -20
- package/src/errors/output/missing-build-output-error.js +0 -21
- package/src/errors/output/pdf-generation-error.js +0 -24
- package/src/errors/output/tool-not-found-error.js +0 -37
- package/src/errors/project/index.js +0 -10
- package/src/errors/project/not-in-project-error.js +0 -20
- package/src/errors/project/project-create-error.js +0 -21
- package/src/errors/quire-error.js +0 -27
- package/src/errors/validation/index.js +0 -3
- package/src/errors/validation/unknown-config-key-error.js +0 -27
- package/src/errors/validation/unknown-config-operation-error.js +0 -24
- package/src/helpers/docs-url.js +0 -32
- package/src/helpers/pager.js +0 -59
- package/src/helpers/pager.test.js +0 -85
- package/src/helpers/suggest-similar.js +0 -124
- package/src/helpers/suggest-similar.test.js +0 -108
- package/src/helpers/test-cwd.test.js +0 -192
- package/src/lib/11ty/index.test.js +0 -655
- package/src/lib/commander/index.js +0 -103
- package/src/lib/commander/index.test.js +0 -86
- package/src/lib/commander/options.js +0 -237
- package/src/lib/commander/options.test.js +0 -205
- package/src/lib/conf/build-status.js +0 -103
- package/src/lib/conf/build-status.test.js +0 -247
- package/src/lib/conf/config.test.js +0 -281
- package/src/lib/conf/format.js +0 -60
- package/src/lib/conf/format.test.js +0 -106
- package/src/lib/conf/helpers.js +0 -91
- package/src/lib/conf/helpers.test.js +0 -136
- package/src/lib/conf/index.js +0 -22
- package/src/lib/constants.js +0 -28
- package/src/lib/doctor/README.md +0 -667
- package/src/lib/doctor/checks/environment/cli-version.js +0 -62
- package/src/lib/doctor/checks/environment/cli-version.test.js +0 -132
- package/src/lib/doctor/checks/environment/git-available.js +0 -77
- package/src/lib/doctor/checks/environment/git-available.test.js +0 -52
- package/src/lib/doctor/checks/environment/index.js +0 -13
- package/src/lib/doctor/checks/environment/node-version.js +0 -66
- package/src/lib/doctor/checks/environment/node-version.test.js +0 -17
- package/src/lib/doctor/checks/environment/npm-available.js +0 -66
- package/src/lib/doctor/checks/environment/npm-available.test.js +0 -52
- package/src/lib/doctor/checks/environment/os-info.js +0 -48
- package/src/lib/doctor/checks/environment/os-info.test.js +0 -81
- package/src/lib/doctor/checks/environment/runtime-info.js +0 -51
- package/src/lib/doctor/checks/environment/runtime-info.test.js +0 -132
- package/src/lib/doctor/checks/outputs/epub-output.js +0 -119
- package/src/lib/doctor/checks/outputs/epub-output.test.js +0 -277
- package/src/lib/doctor/checks/outputs/index.js +0 -10
- package/src/lib/doctor/checks/outputs/pdf-output.js +0 -144
- package/src/lib/doctor/checks/outputs/pdf-output.test.js +0 -377
- package/src/lib/doctor/checks/outputs/stale-build.js +0 -122
- package/src/lib/doctor/checks/outputs/stale-build.test.js +0 -282
- package/src/lib/doctor/checks/project/data-files.js +0 -56
- package/src/lib/doctor/checks/project/data-files.test.js +0 -125
- package/src/lib/doctor/checks/project/dependencies.js +0 -53
- package/src/lib/doctor/checks/project/dependencies.test.js +0 -71
- package/src/lib/doctor/checks/project/index.js +0 -11
- package/src/lib/doctor/checks/project/quire-11ty.js +0 -98
- package/src/lib/doctor/checks/project/quire-11ty.test.js +0 -170
- package/src/lib/doctor/checks/project/quire-project.js +0 -38
- package/src/lib/doctor/checks/project/quire-project.test.js +0 -47
- package/src/lib/doctor/checks/tools/index.js +0 -10
- package/src/lib/doctor/checks/tools/pandoc-available.js +0 -82
- package/src/lib/doctor/checks/tools/pandoc-available.test.js +0 -73
- package/src/lib/doctor/checks/tools/prince-available.js +0 -81
- package/src/lib/doctor/checks/tools/prince-available.test.js +0 -73
- package/src/lib/doctor/constants.js +0 -39
- package/src/lib/doctor/formatDuration.js +0 -108
- package/src/lib/doctor/formatDuration.test.js +0 -76
- package/src/lib/doctor/formatters/human.js +0 -257
- package/src/lib/doctor/formatters/human.test.js +0 -463
- package/src/lib/doctor/formatters/index.js +0 -8
- package/src/lib/doctor/formatters/json.js +0 -78
- package/src/lib/doctor/formatters/json.test.js +0 -174
- package/src/lib/doctor/formatters/shared.js +0 -129
- package/src/lib/doctor/formatters/shared.test.js +0 -194
- package/src/lib/doctor/index.js +0 -271
- package/src/lib/doctor/index.test.js +0 -797
- package/src/lib/epub/engines.js +0 -46
- package/src/lib/epub/index.test.js +0 -518
- package/src/lib/epub/pandoc.test.js +0 -122
- package/src/lib/epub/schema.js +0 -21
- package/src/lib/error/README.md +0 -170
- package/src/lib/error/handler.js +0 -107
- package/src/lib/git/index.spec.js +0 -80
- package/src/lib/git/index.test.js +0 -453
- package/src/lib/help/frontmatter.js +0 -77
- package/src/lib/help/frontmatter.test.js +0 -139
- package/src/lib/help/index.js +0 -146
- package/src/lib/help/index.test.js +0 -188
- package/src/lib/help/topics/configuration.md +0 -77
- package/src/lib/help/topics/debugging.md +0 -69
- package/src/lib/help/topics/epub.md +0 -74
- package/src/lib/help/topics/pdf.md +0 -74
- package/src/lib/help/topics/publishing.md +0 -80
- package/src/lib/help/topics/workflows.md +0 -50
- package/src/lib/installer/index.js +0 -309
- package/src/lib/installer/index.spec.js +0 -83
- package/src/lib/installer/index.test.js +0 -545
- package/src/lib/logger/README.md +0 -424
- package/src/lib/logger/debug.js +0 -132
- package/src/lib/logger/debug.spec.js +0 -130
- package/src/lib/logger/debug.test.js +0 -128
- package/src/lib/logger/index.js +0 -228
- package/src/lib/logger/index.spec.js +0 -131
- package/src/lib/logger/index.test.js +0 -578
- package/src/lib/npm/README.md +0 -127
- package/src/lib/npm/index.js +0 -198
- package/src/lib/npm/index.spec.js +0 -60
- package/src/lib/npm/index.test.js +0 -355
- package/src/lib/pdf/engines.js +0 -46
- package/src/lib/pdf/index.test.js +0 -708
- package/src/lib/pdf/paged.test.js +0 -366
- package/src/lib/pdf/prince.test.js +0 -202
- package/src/lib/pdf/schema.js +0 -21
- package/src/lib/pdf/split.test.js +0 -445
- package/src/lib/platform.js +0 -95
- package/src/lib/process/manager.js +0 -110
- package/src/lib/process/manager.test.js +0 -55
- package/src/lib/project/build.js +0 -162
- package/src/lib/project/build.test.js +0 -275
- package/src/lib/project/config.js +0 -48
- package/src/lib/project/config.test.js +0 -134
- package/src/lib/project/detect.js +0 -47
- package/src/lib/project/detect.test.js +0 -157
- package/src/lib/project/index.js +0 -56
- package/src/lib/project/output-paths.js +0 -87
- package/src/lib/project/output-paths.test.js +0 -66
- package/src/lib/project/paths.js +0 -272
- package/src/lib/project/version.js +0 -110
- package/src/lib/project/version.test.js +0 -350
- package/src/lib/reporter/index.test.js +0 -862
- package/src/main.spec.js +0 -61
- package/src/main.test.js +0 -347
- package/src/validators/validate-data-files.js +0 -154
- package/src/validators/validate-data-files.test.js +0 -217
package/src/main.js
CHANGED
|
@@ -1,87 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
arrayToArgument,
|
|
4
|
-
arrayToOption,
|
|
5
|
-
colorOption,
|
|
6
|
-
noColorOption,
|
|
7
|
-
quietOption,
|
|
8
|
-
verboseOption,
|
|
9
|
-
debugOption,
|
|
10
|
-
reducedMotionOption,
|
|
11
|
-
} from '#lib/commander/index.js'
|
|
1
|
+
import { Argument, Command, Option } from 'commander'
|
|
12
2
|
import commands from '#src/commands/index.js'
|
|
13
3
|
import config from '#lib/conf/config.js'
|
|
14
|
-
import { handleError } from '#lib/error/handler.js'
|
|
15
|
-
import reporter from '#lib/reporter/index.js'
|
|
16
|
-
import { docsUrl, DOCS_BASE } from '#helpers/docs-url.js'
|
|
17
4
|
import packageConfig from '#src/packageConfig.js'
|
|
18
|
-
import { enableDebug } from '#lib/logger/debug.js'
|
|
19
|
-
import { formatPrefix } from '#lib/logger/index.js'
|
|
20
5
|
|
|
21
6
|
const { version } = packageConfig
|
|
22
7
|
|
|
23
|
-
const mainHelpText = `
|
|
24
|
-
Docs: ${DOCS_BASE}
|
|
25
|
-
|
|
26
|
-
Common Workflows:
|
|
27
|
-
New project quire new my-book && cd my-book && quire preview
|
|
28
|
-
Build for web quire build
|
|
29
|
-
Generate PDF quire pdf --build
|
|
30
|
-
Generate EPUB quire epub --build
|
|
31
|
-
|
|
32
|
-
Run 'quire help workflows' for detailed workflow documentation.
|
|
33
|
-
|
|
34
|
-
Output Modes:
|
|
35
|
-
-q, --quiet Suppress progress output (for CI/scripts)
|
|
36
|
-
-v, --verbose Show detailed progress (paths, timing, steps)
|
|
37
|
-
--debug Enable debug output for developers/troubleshooting
|
|
38
|
-
--reduced-motion Disable spinner animation and line overwriting
|
|
39
|
-
|
|
40
|
-
Set defaults: quire settings set verbose true
|
|
41
|
-
|
|
42
|
-
Accessibility:
|
|
43
|
-
--reduced-motion disables animated spinners and line overwriting.
|
|
44
|
-
Each stage prints on a new line as static text, making output
|
|
45
|
-
compatible with screen readers and reduced-motion preferences.
|
|
46
|
-
|
|
47
|
-
Set default: quire settings set reducedMotion true
|
|
48
|
-
|
|
49
|
-
Color Output:
|
|
50
|
-
--no-color Disable colored output
|
|
51
|
-
--color Force colored output (overrides NO_COLOR env var)
|
|
52
|
-
|
|
53
|
-
Respects NO_COLOR environment variable (https://no-color.org/)
|
|
54
|
-
Set default: quire settings set logUseColor false
|
|
55
|
-
|
|
56
|
-
Paging:
|
|
57
|
-
--no-pager Disable paging for long output
|
|
58
|
-
NO_PAGER=1 Disable paging via environment variable
|
|
59
|
-
PAGER=cat Traditional Unix alternative (passes output through)
|
|
60
|
-
|
|
61
|
-
Environment Variables:
|
|
62
|
-
REDUCED_MOTION Disable spinner animation and line overwriting
|
|
63
|
-
NO_COLOR Disable colored output (https://no-color.org/)
|
|
64
|
-
NO_PAGER=1 Disable paging for long output
|
|
65
|
-
PAGER=<program> Set pager program (default: less). Use PAGER=cat to disable
|
|
66
|
-
DEBUG=quire:* Enable debug output for all modules
|
|
67
|
-
DEBUG=quire:lib:pdf Enable debug output for PDF module only
|
|
68
|
-
DEBUG=quire:lib:* Enable debug output for all lib modules
|
|
69
|
-
|
|
70
|
-
Examples:
|
|
71
|
-
$ quire build Build the publication
|
|
72
|
-
$ quire build --verbose Build with detailed progress
|
|
73
|
-
$ quire build --debug Build with debug output
|
|
74
|
-
$ quire build --reduced-motion Build without animated spinners
|
|
75
|
-
$ REDUCED_MOTION=1 quire build Build without animated spinners
|
|
76
|
-
$ quire build --no-color Build without colored output
|
|
77
|
-
$ NO_COLOR=1 quire build Build without colored output
|
|
78
|
-
$ DEBUG=quire:* quire pdf Generate PDF with debug output
|
|
79
|
-
`
|
|
80
|
-
|
|
81
8
|
/**
|
|
82
9
|
* Quire CLI implements the command pattern.
|
|
83
10
|
*
|
|
84
|
-
* The
|
|
11
|
+
* The `main` module acts as the _receiver_, parsing input from the client,
|
|
85
12
|
* calling the appropriate command module(s), managing messages between modules,
|
|
86
13
|
* and sending formatted messages to the client for display.
|
|
87
14
|
*/
|
|
@@ -90,107 +17,29 @@ const program = new Command()
|
|
|
90
17
|
program
|
|
91
18
|
.name('quire')
|
|
92
19
|
.description('Quire command-line interface')
|
|
93
|
-
.version(version,
|
|
94
|
-
.addOption(arrayToOption(colorOption))
|
|
95
|
-
.addOption(arrayToOption(noColorOption))
|
|
96
|
-
.addOption(arrayToOption(quietOption))
|
|
97
|
-
.addOption(arrayToOption(verboseOption))
|
|
98
|
-
.addOption(arrayToOption(debugOption))
|
|
99
|
-
.addOption(arrayToOption(reducedMotionOption))
|
|
100
|
-
.option('--no-pager', 'disable paging for long output')
|
|
101
|
-
.addHelpText('after', mainHelpText)
|
|
20
|
+
.version(version, '-v, --version', 'output quire version number')
|
|
102
21
|
.configureHelp({
|
|
103
22
|
helpWidth: 80,
|
|
104
23
|
sortOptions: false,
|
|
105
24
|
sortSubcommands: false,
|
|
106
|
-
styleOptionTerm: (term) => {
|
|
107
|
-
// Add spacing to long-only options to align with short-flag options
|
|
108
|
-
return /^-\w/.test(term) ? term : term.padStart(term.length + 4)
|
|
109
|
-
},
|
|
110
25
|
})
|
|
111
26
|
|
|
112
|
-
/**
|
|
113
|
-
* Handle global options before any command runs
|
|
114
|
-
*
|
|
115
|
-
* Output mode semantics:
|
|
116
|
-
* - --quiet: Suppress progress spinners (for CI/scripts)
|
|
117
|
-
* - --verbose: Show detailed progress (paths, timing, steps)
|
|
118
|
-
* - --debug: Enable DEBUG namespace + tool debug modes (for developers)
|
|
119
|
-
* - --reduced-motion: Disable animated spinners, use static text on new lines
|
|
120
|
-
* - --no-color: Disable colored output (sets NO_COLOR env var)
|
|
121
|
-
* - --color: Force colored output (overrides NO_COLOR env var)
|
|
122
|
-
*
|
|
123
|
-
* These global options are passed through to commands via opts()
|
|
124
|
-
* and should be merged with command-level options.
|
|
125
|
-
*/
|
|
126
|
-
program.hook('preAction', (thisCommand) => {
|
|
127
|
-
const opts = thisCommand.opts()
|
|
128
|
-
|
|
129
|
-
// Handle --no-color / --color flag
|
|
130
|
-
// Sets NO_COLOR env var for chalk, ora, and logger to read
|
|
131
|
-
if (opts.color === false) {
|
|
132
|
-
process.env.NO_COLOR = '1'
|
|
133
|
-
delete process.env.FORCE_COLOR
|
|
134
|
-
} else if (opts.color === true) {
|
|
135
|
-
delete process.env.NO_COLOR
|
|
136
|
-
process.env.FORCE_COLOR = '1'
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// --debug or config.debug enables the quire:* DEBUG namespace for internal logging
|
|
140
|
-
// CLI flag takes precedence, then config setting
|
|
141
|
-
if (opts.debug ?? config.get('debug')) {
|
|
142
|
-
enableDebug('quire:*')
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// --reduced-motion sets REDUCED_MOTION env var for reporter to read
|
|
146
|
-
// CLI flag takes precedence over env var and config setting
|
|
147
|
-
if (opts.reducedMotion) {
|
|
148
|
-
process.env.REDUCED_MOTION = '1'
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// --no-pager sets pager to false; propagate via env var for pager utility
|
|
152
|
-
if (opts.pager === false) {
|
|
153
|
-
process.env.NO_PAGER = '1'
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Log prefix and level label visibility for quire-11ty's chalk logger
|
|
157
|
-
process.env.QUIRE_LOG_PREFIX = formatPrefix(config.get('logPrefixStyle'), config.get('logPrefix'))
|
|
158
|
-
process.env.QUIRE_LOG_SHOW_LEVEL = String(config.get('logShowLevel'))
|
|
159
|
-
})
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Stop the reporter after every command to clear any active setInterval timers
|
|
163
|
-
* (e.g. elapsed time display) that would otherwise keep the event loop alive.
|
|
164
|
-
*/
|
|
165
|
-
program.hook('postAction', () => {
|
|
166
|
-
reporter.stop()
|
|
167
|
-
})
|
|
168
|
-
|
|
169
27
|
/**
|
|
170
28
|
* Register each command as a subcommand of this program
|
|
29
|
+
*
|
|
30
|
+
* @todo refactor command definition to allow for per-command custom help text
|
|
171
31
|
* @see https://github.com/tj/commander.js?tab=readme-ov-file#automated-help
|
|
172
32
|
*/
|
|
173
33
|
commands.forEach((command) => {
|
|
174
|
-
const { action, alias, aliases, args, description,
|
|
34
|
+
const { action, alias, aliases, args, description, name, options } = command
|
|
175
35
|
|
|
176
36
|
const subCommand = program
|
|
177
|
-
.command(name
|
|
37
|
+
.command(name)
|
|
178
38
|
.description(description)
|
|
179
|
-
.summary(summary || description)
|
|
180
39
|
.addHelpCommand()
|
|
181
40
|
.showHelpAfterError()
|
|
182
41
|
|
|
183
|
-
|
|
184
|
-
const customHelpText = [
|
|
185
|
-
docsLink && `Docs: ${docsUrl(docsLink)}`,
|
|
186
|
-
helpText?.trim()
|
|
187
|
-
].filter(Boolean).join('\n\n')
|
|
188
|
-
|
|
189
|
-
if (customHelpText) {
|
|
190
|
-
subCommand.addHelpText('after', '\n' + customHelpText)
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (typeof alias === 'string') {
|
|
42
|
+
if (alias instanceof String) {
|
|
194
43
|
subCommand.alias(alias)
|
|
195
44
|
}
|
|
196
45
|
|
|
@@ -199,93 +48,71 @@ commands.forEach((command) => {
|
|
|
199
48
|
}
|
|
200
49
|
|
|
201
50
|
/**
|
|
202
|
-
*
|
|
51
|
+
* @see https://github.com/tj/commander.js#more-configuration-1
|
|
203
52
|
*/
|
|
204
53
|
if (Array.isArray(args)) {
|
|
205
|
-
args.forEach((
|
|
206
|
-
const argument =
|
|
54
|
+
args.forEach(([ name, description, configuration = {} ]) => {
|
|
55
|
+
const argument = new Argument(name, description)
|
|
56
|
+
if (configuration.choices) argument.choices(configuration.choices)
|
|
57
|
+
if (configuration.default) argument.default(configuration.default)
|
|
207
58
|
subCommand.addArgument(argument)
|
|
208
59
|
})
|
|
209
60
|
}
|
|
210
61
|
|
|
211
62
|
/**
|
|
212
|
-
*
|
|
63
|
+
* @see https://github.com/tj/commander.js/#options
|
|
213
64
|
*/
|
|
214
65
|
if (Array.isArray(options)) {
|
|
215
66
|
options.forEach((entry) => {
|
|
216
|
-
|
|
217
|
-
|
|
67
|
+
if (Array.isArray(entry)) {
|
|
68
|
+
// ensure we can join the first two attributes as the option name
|
|
69
|
+
// when only the short or the long flag is defined in the array
|
|
70
|
+
if (entry[0].startsWith('--')) entry.unshift('\u0020'.repeat(4))
|
|
71
|
+
if (entry[0].startsWith('-') && !entry[1].startsWith('--')) {
|
|
72
|
+
entry.splice(1, 0, '')
|
|
73
|
+
}
|
|
74
|
+
// assign attribute names to the array of option attributes
|
|
75
|
+
const [ short, long, description, defaultValue ] = entry
|
|
76
|
+
// join short and long flags as the option name attribute
|
|
77
|
+
const name = /^-\w/.test(short) && /^--\w/.test(long)
|
|
78
|
+
? [short, long].join(', ')
|
|
79
|
+
: [short, long].join('')
|
|
80
|
+
subCommand.option(name, description, defaultValue)
|
|
81
|
+
} else {
|
|
82
|
+
/**
|
|
83
|
+
* @todo allow options to be defined by a configuration object
|
|
84
|
+
* @see https://github.com/tj/commander.js/#more-configuration
|
|
85
|
+
*/
|
|
86
|
+
// const option = new Option(name, description)
|
|
87
|
+
// for (const property of configuration) {
|
|
88
|
+
// option[property](configuration[property])
|
|
89
|
+
// }
|
|
90
|
+
// subCommand.addOption(option)
|
|
91
|
+
console.error('@TODO please use an array to define option attributes')
|
|
92
|
+
}
|
|
218
93
|
})
|
|
219
94
|
}
|
|
220
95
|
|
|
221
|
-
/**
|
|
222
|
-
* Command lifecycle hook: called after action handler and nested subcommands
|
|
223
|
-
* @see https://github.com/tj/commander.js?tab=readme-ov-file#life-cycle-hooks
|
|
224
|
-
*/
|
|
225
96
|
if (command.postAction) {
|
|
226
|
-
subCommand.hook('postAction',
|
|
227
|
-
|
|
228
|
-
await command.postAction.call(command, thisCommand, actionCommand)
|
|
229
|
-
} catch (error) {
|
|
230
|
-
const { debug } = program.opts()
|
|
231
|
-
handleError(error, { debug })
|
|
232
|
-
}
|
|
97
|
+
subCommand.hook('postAction', (thisCommand, actionCommand) => {
|
|
98
|
+
command.postAction.call(command, thisCommand, actionCommand)
|
|
233
99
|
})
|
|
234
100
|
}
|
|
235
101
|
|
|
236
|
-
/**
|
|
237
|
-
* Command lifecycle hook: called before action handler and nested subcommands
|
|
238
|
-
* @see https://github.com/tj/commander.js?tab=readme-ov-file#life-cycle-hooks
|
|
239
|
-
*/
|
|
240
102
|
if (command.preAction) {
|
|
241
|
-
subCommand.hook('preAction',
|
|
242
|
-
|
|
243
|
-
await command.preAction.call(command, thisCommand, actionCommand)
|
|
244
|
-
} catch (error) {
|
|
245
|
-
const { debug } = program.opts()
|
|
246
|
-
handleError(error, { debug })
|
|
247
|
-
}
|
|
103
|
+
subCommand.hook('preAction', (thisCommand, actionCommand) => {
|
|
104
|
+
command.preAction.call(command, thisCommand, actionCommand)
|
|
248
105
|
})
|
|
249
106
|
}
|
|
250
107
|
|
|
251
|
-
/**
|
|
252
|
-
* Subcommand lifecyle hook: called before parsing direct subcommand
|
|
253
|
-
* @see https://github.com/tj/commander.js?tab=readme-ov-file#life-cycle-hooks
|
|
254
|
-
*/
|
|
255
108
|
if (command.preSubcommand) {
|
|
256
|
-
subCommand.hook('preSubcommand',
|
|
257
|
-
|
|
258
|
-
await command.preSubcommand.call(command, thisCommand, theSubcommand)
|
|
259
|
-
} catch (error) {
|
|
260
|
-
const { debug } = program.opts()
|
|
261
|
-
handleError(error, { debug })
|
|
262
|
-
}
|
|
109
|
+
subCommand.hook('preSubcommand', (thisCommand, theSubcommand) => {
|
|
110
|
+
command.preSubcommand.call(command, thisCommand, theSubcommand)
|
|
263
111
|
})
|
|
264
112
|
}
|
|
265
113
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
* Using apply() preserves `this` context for `this.debug` and `this.logger`.
|
|
269
|
-
*
|
|
270
|
-
* Nota bene: Commander passes subcommand-local opts as the options argument,
|
|
271
|
-
* but global options (--verbose, --quiet, --debug) defined on the parent
|
|
272
|
-
* program are only available via optsWithGlobals(). We replace the options
|
|
273
|
-
* argument with the merged set so action handlers see all options uniformly.
|
|
274
|
-
*/
|
|
275
|
-
subCommand.action(async (...args) => {
|
|
276
|
-
try {
|
|
277
|
-
// Commander Command instance is the last element in args array
|
|
278
|
-
// @see https://github.com/tj/commander.js#action-handler
|
|
279
|
-
const cmd = args[args.length - 1]
|
|
280
|
-
const mergedOpts = cmd.optsWithGlobals()
|
|
281
|
-
args[args.length - 2] = mergedOpts
|
|
282
|
-
await action.apply(command, args)
|
|
283
|
-
} catch (error) {
|
|
284
|
-
reporter.stop()
|
|
285
|
-
const { debug } = program.opts()
|
|
286
|
-
handleError(error, { debug })
|
|
287
|
-
}
|
|
288
|
-
})
|
|
114
|
+
// subCommand.action((args) => action.apply(command, args))
|
|
115
|
+
subCommand.action(action)
|
|
289
116
|
|
|
290
117
|
/**
|
|
291
118
|
* Inject the CLI configuration into commands
|
package/src/packageConfig.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { dirname } from 'node:path'
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { readPackageUpSync } from 'read-package-up'
|
|
4
|
-
import which from '#helpers/which.js'
|
|
5
4
|
|
|
6
5
|
const __filename = fileURLToPath(import.meta.url)
|
|
7
6
|
const __dirname = dirname(__filename)
|
|
@@ -13,20 +12,4 @@ const __dirname = dirname(__filename)
|
|
|
13
12
|
*/
|
|
14
13
|
const { packageJson } = readPackageUpSync({ cwd: __dirname, normalize: true })
|
|
15
14
|
|
|
16
|
-
/**
|
|
17
|
-
* Resolve the full filesystem path to the quire CLI executable
|
|
18
|
-
*
|
|
19
|
-
* Uses the `which` helper to find the first `quire` executable in PATH.
|
|
20
|
-
* Returns null if the executable is not found.
|
|
21
|
-
*
|
|
22
|
-
* @returns {string|null} Absolute path to the quire executable, or null
|
|
23
|
-
*/
|
|
24
|
-
export function binPath() {
|
|
25
|
-
try {
|
|
26
|
-
return which('quire')
|
|
27
|
-
} catch {
|
|
28
|
-
return null
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
15
|
export default packageJson
|
package/src/validators/utils.js
CHANGED
|
@@ -2,7 +2,7 @@ import YamlDuplicateIdError from '../errors/validation/yaml-duplicate-error.js'
|
|
|
2
2
|
import { fileURLToPath } from 'url'
|
|
3
3
|
import fs from 'node:fs'
|
|
4
4
|
import path from 'path'
|
|
5
|
-
import {
|
|
5
|
+
import { projectRoot } from '#lib/11ty/index.js'
|
|
6
6
|
|
|
7
7
|
const IMAGE_KEYS = new Set(['src', 'image', 'logo'])
|
|
8
8
|
|
|
@@ -37,7 +37,6 @@ function collectImagePaths(node, paths=[]) {
|
|
|
37
37
|
function validateImage(label, src) {
|
|
38
38
|
if(!src) return
|
|
39
39
|
|
|
40
|
-
const projectRoot = eleventyPaths.getProjectRoot()
|
|
41
40
|
let assetPath = ''
|
|
42
41
|
if(src.endsWith('.html')) {
|
|
43
42
|
assetPath = path.join(projectRoot, 'content', '_assets', src)
|