pug-tail 0.1.0-alpha.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.

Potentially problematic release.


This version of pug-tail might be problematic. Click here for more details.

Files changed (126) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +21 -0
  3. package/README.md +318 -0
  4. package/dist/cli/config/loader.d.ts +9 -0
  5. package/dist/cli/config/loader.d.ts.map +1 -0
  6. package/dist/cli/config/loader.js +82 -0
  7. package/dist/cli/config/loader.js.map +1 -0
  8. package/dist/cli/config/matcher.d.ts +3 -0
  9. package/dist/cli/config/matcher.d.ts.map +1 -0
  10. package/dist/cli/config/matcher.js +29 -0
  11. package/dist/cli/config/matcher.js.map +1 -0
  12. package/dist/cli/config/types.d.ts +26 -0
  13. package/dist/cli/config/types.d.ts.map +1 -0
  14. package/dist/cli/config/types.js +2 -0
  15. package/dist/cli/config/types.js.map +1 -0
  16. package/dist/cli/dataLoader.d.ts +8 -0
  17. package/dist/cli/dataLoader.d.ts.map +1 -0
  18. package/dist/cli/dataLoader.js +70 -0
  19. package/dist/cli/dataLoader.js.map +1 -0
  20. package/dist/cli/dependencyTracker.d.ts +19 -0
  21. package/dist/cli/dependencyTracker.d.ts.map +1 -0
  22. package/dist/cli/dependencyTracker.js +149 -0
  23. package/dist/cli/dependencyTracker.js.map +1 -0
  24. package/dist/cli/fileProcessor.d.ts +32 -0
  25. package/dist/cli/fileProcessor.d.ts.map +1 -0
  26. package/dist/cli/fileProcessor.js +218 -0
  27. package/dist/cli/fileProcessor.js.map +1 -0
  28. package/dist/cli/pathResolver.d.ts +12 -0
  29. package/dist/cli/pathResolver.d.ts.map +1 -0
  30. package/dist/cli/pathResolver.js +35 -0
  31. package/dist/cli/pathResolver.js.map +1 -0
  32. package/dist/cli/watcher.d.ts +22 -0
  33. package/dist/cli/watcher.d.ts.map +1 -0
  34. package/dist/cli/watcher.js +186 -0
  35. package/dist/cli/watcher.js.map +1 -0
  36. package/dist/cli.d.ts +3 -0
  37. package/dist/cli.d.ts.map +1 -0
  38. package/dist/cli.js +624 -0
  39. package/dist/cli.js.map +1 -0
  40. package/dist/core/astTransformer.d.ts +32 -0
  41. package/dist/core/astTransformer.d.ts.map +1 -0
  42. package/dist/core/astTransformer.js +532 -0
  43. package/dist/core/astTransformer.js.map +1 -0
  44. package/dist/core/componentRegistry.d.ts +14 -0
  45. package/dist/core/componentRegistry.d.ts.map +1 -0
  46. package/dist/core/componentRegistry.js +32 -0
  47. package/dist/core/componentRegistry.js.map +1 -0
  48. package/dist/core/errorHandler.d.ts +24 -0
  49. package/dist/core/errorHandler.d.ts.map +1 -0
  50. package/dist/core/errorHandler.js +102 -0
  51. package/dist/core/errorHandler.js.map +1 -0
  52. package/dist/core/slotResolver.d.ts +9 -0
  53. package/dist/core/slotResolver.d.ts.map +1 -0
  54. package/dist/core/slotResolver.js +88 -0
  55. package/dist/core/slotResolver.js.map +1 -0
  56. package/dist/index.d.ts +10 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +8 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/transform.d.ts +26 -0
  61. package/dist/transform.d.ts.map +1 -0
  62. package/dist/transform.js +247 -0
  63. package/dist/transform.js.map +1 -0
  64. package/dist/types/index.d.ts +41 -0
  65. package/dist/types/index.d.ts.map +1 -0
  66. package/dist/types/index.js +2 -0
  67. package/dist/types/index.js.map +1 -0
  68. package/dist/utils/astHelpers.d.ts +16 -0
  69. package/dist/utils/astHelpers.d.ts.map +1 -0
  70. package/dist/utils/astHelpers.js +66 -0
  71. package/dist/utils/astHelpers.js.map +1 -0
  72. package/dist/utils/attributeCategorizer.d.ts +6 -0
  73. package/dist/utils/attributeCategorizer.d.ts.map +1 -0
  74. package/dist/utils/attributeCategorizer.js +17 -0
  75. package/dist/utils/attributeCategorizer.js.map +1 -0
  76. package/dist/utils/attributes/addAttributeFallthrough.d.ts +4 -0
  77. package/dist/utils/attributes/addAttributeFallthrough.d.ts.map +1 -0
  78. package/dist/utils/attributes/addAttributeFallthrough.js +22 -0
  79. package/dist/utils/attributes/addAttributeFallthrough.js.map +1 -0
  80. package/dist/utils/attributes/createAttributesCode.d.ts +3 -0
  81. package/dist/utils/attributes/createAttributesCode.d.ts.map +1 -0
  82. package/dist/utils/attributes/createAttributesCode.js +21 -0
  83. package/dist/utils/attributes/createAttributesCode.js.map +1 -0
  84. package/dist/utils/attributes/extractAttributes.d.ts +4 -0
  85. package/dist/utils/attributes/extractAttributes.d.ts.map +1 -0
  86. package/dist/utils/attributes/extractAttributes.js +15 -0
  87. package/dist/utils/attributes/extractAttributes.js.map +1 -0
  88. package/dist/utils/attributes/findRootElements.d.ts +7 -0
  89. package/dist/utils/attributes/findRootElements.d.ts.map +1 -0
  90. package/dist/utils/attributes/findRootElements.js +36 -0
  91. package/dist/utils/attributes/findRootElements.js.map +1 -0
  92. package/dist/utils/attributes/index.d.ts +5 -0
  93. package/dist/utils/attributes/index.d.ts.map +1 -0
  94. package/dist/utils/attributes/index.js +5 -0
  95. package/dist/utils/attributes/index.js.map +1 -0
  96. package/dist/utils/babelHelpers.d.ts +3 -0
  97. package/dist/utils/babelHelpers.d.ts.map +1 -0
  98. package/dist/utils/babelHelpers.js +73 -0
  99. package/dist/utils/babelHelpers.js.map +1 -0
  100. package/dist/utils/componentDetector.d.ts +12 -0
  101. package/dist/utils/componentDetector.d.ts.map +1 -0
  102. package/dist/utils/componentDetector.js +206 -0
  103. package/dist/utils/componentDetector.js.map +1 -0
  104. package/dist/utils/dataFilesDetector.d.ts +4 -0
  105. package/dist/utils/dataFilesDetector.d.ts.map +1 -0
  106. package/dist/utils/dataFilesDetector.js +88 -0
  107. package/dist/utils/dataFilesDetector.js.map +1 -0
  108. package/dist/utils/deepClone.d.ts +5 -0
  109. package/dist/utils/deepClone.d.ts.map +1 -0
  110. package/dist/utils/deepClone.js +10 -0
  111. package/dist/utils/deepClone.js.map +1 -0
  112. package/dist/utils/index.d.ts +7 -0
  113. package/dist/utils/index.d.ts.map +1 -0
  114. package/dist/utils/index.js +7 -0
  115. package/dist/utils/index.js.map +1 -0
  116. package/dist/utils/scopeAnalyzer.d.ts +5 -0
  117. package/dist/utils/scopeAnalyzer.d.ts.map +1 -0
  118. package/dist/utils/scopeAnalyzer.js +267 -0
  119. package/dist/utils/scopeAnalyzer.js.map +1 -0
  120. package/dist/utils/usageDetector.d.ts +8 -0
  121. package/dist/utils/usageDetector.d.ts.map +1 -0
  122. package/dist/utils/usageDetector.js +148 -0
  123. package/dist/utils/usageDetector.js.map +1 -0
  124. package/docs/COMPONENTS.md +708 -0
  125. package/docs/CONFIGURATION.md +708 -0
  126. package/package.json +103 -0
package/dist/cli.js ADDED
@@ -0,0 +1,624 @@
1
+ #!/usr/bin/env node
2
+ import { mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
3
+ import { dirname, resolve } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { findConfigFile, loadConfig, mergeConfig } from './cli/config/loader.js';
6
+ import { loadData } from './cli/dataLoader.js';
7
+ import { FileProcessor } from './cli/fileProcessor.js';
8
+ import { Watcher } from './cli/watcher.js';
9
+ import { transform } from './transform.js';
10
+ function showHelp() {
11
+ console.log(`
12
+ pug-tail - A transpiler that statically expands component DSL with slot syntax on Pug AST
13
+
14
+ Usage:
15
+ pug-tail [options] [files...]
16
+
17
+ Arguments:
18
+ files... Input files, directories, or glob patterns
19
+
20
+ Options:
21
+ Output:
22
+ -o, --out <dir> Output directory (or file for single input)
23
+ -E, --extension <ext> Output file extension (default: .html)
24
+
25
+ Data:
26
+ -O, --obj <str|path> Data to inject (JSON string or file path)
27
+
28
+ Pug:
29
+ -b, --basedir <path> Base directory for absolute includes
30
+ --doctype <str> Specify doctype (e.g., html, xml, transitional)
31
+
32
+ Formatting:
33
+ -P, --pretty Pretty print HTML output
34
+ -f, --format <format> Output format: html, ast, pug-code (default: html)
35
+
36
+ Config:
37
+ -c, --config <path> Path to config file (default: auto-detect)
38
+ --render-files, --render <patterns> Render file patterns (comma or space separated)
39
+ Determines which .pug files to compile to HTML
40
+ Supports negation patterns (!)
41
+ Example: --render-files "**/*.pug,!**/components/**"
42
+
43
+ Other:
44
+ -d, --debug Enable debug output
45
+ -s, --silent Silent mode (no log output)
46
+ -w, --watch Watch mode (recompile on file changes)
47
+ -h, --help Show this help message
48
+ -v, --version Show version number
49
+
50
+ Examples:
51
+ # Single file
52
+ pug-tail src/index.pug -o dist/
53
+
54
+ # Multiple files
55
+ pug-tail src/index.pug src/about.pug -o dist/
56
+
57
+ # Glob pattern
58
+ pug-tail "src/**/*.pug" -o dist/
59
+
60
+ # Directory (recursive)
61
+ pug-tail src/ -o dist/
62
+
63
+ # With data injection (JSON string)
64
+ pug-tail src/ -o dist/ -O '{"title": "My Site", "year": 2025}'
65
+
66
+ # With data injection (JSON file)
67
+ pug-tail src/ -o dist/ -O data.json
68
+
69
+ # With basedir for absolute includes
70
+ pug-tail src/pages/ -o dist/ -b src/
71
+
72
+ # Pretty print
73
+ pug-tail src/ -o dist/ -P
74
+
75
+ # Debug mode
76
+ pug-tail src/ -o dist/ -d
77
+
78
+ For more information, visit: https://github.com/megurock/pug-tail
79
+ `);
80
+ }
81
+ function showVersion() {
82
+ try {
83
+ const packagePath = resolve(fileURLToPath(import.meta.url), '../../package.json');
84
+ const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
85
+ console.log(packageJson.version);
86
+ }
87
+ catch {
88
+ console.log('1.0.0');
89
+ }
90
+ }
91
+ function parseArgs(args) {
92
+ const options = {
93
+ inputs: [],
94
+ };
95
+ for (let i = 0; i < args.length; i++) {
96
+ const arg = args[i];
97
+ if (arg === '-h' || arg === '--help') {
98
+ options.help = true;
99
+ }
100
+ else if (arg === '-v' || arg === '--version') {
101
+ options.version = true;
102
+ }
103
+ else if (arg === '-d' || arg === '--debug') {
104
+ options.debug = true;
105
+ }
106
+ else if (arg === '-s' || arg === '--silent') {
107
+ options.silent = true;
108
+ }
109
+ else if (arg === '-P' || arg === '--pretty') {
110
+ options.pretty = true;
111
+ }
112
+ else if (arg === '-w' || arg === '--watch') {
113
+ options.watch = true;
114
+ }
115
+ else if (arg === '-O' || arg === '--obj') {
116
+ const next = args[i + 1];
117
+ if (!next || next.startsWith('-')) {
118
+ console.error('Error: --obj requires a JSON string or file path');
119
+ process.exit(1);
120
+ }
121
+ options.obj = next;
122
+ i++;
123
+ }
124
+ else if (arg === '-b' || arg === '--basedir') {
125
+ const next = args[i + 1];
126
+ if (!next || next.startsWith('-')) {
127
+ console.error('Error: --basedir requires a path');
128
+ process.exit(1);
129
+ }
130
+ options.basedir = next;
131
+ i++;
132
+ }
133
+ else if (arg === '--doctype') {
134
+ const next = args[i + 1];
135
+ if (!next || next.startsWith('-')) {
136
+ console.error('Error: --doctype requires a doctype string');
137
+ process.exit(1);
138
+ }
139
+ options.doctype = next;
140
+ i++;
141
+ }
142
+ else if (arg === '-o' || arg === '--out' || arg === '--output') {
143
+ const next = args[i + 1];
144
+ if (!next || next.startsWith('-')) {
145
+ console.error('Error: --out requires a path');
146
+ process.exit(1);
147
+ }
148
+ options.output = next;
149
+ i++;
150
+ }
151
+ else if (arg === '-E' || arg === '--extension') {
152
+ const next = args[i + 1];
153
+ if (!next || next.startsWith('-')) {
154
+ console.error('Error: --extension requires an extension');
155
+ process.exit(1);
156
+ }
157
+ options.extension = next.startsWith('.') ? next : `.${next}`;
158
+ i++;
159
+ }
160
+ else if (arg === '-f' || arg === '--format') {
161
+ const next = args[i + 1];
162
+ if (!next || next.startsWith('-')) {
163
+ console.error('Error: --format requires a format (html, ast, pug-code)');
164
+ process.exit(1);
165
+ }
166
+ if (next !== 'html' && next !== 'ast' && next !== 'pug-code') {
167
+ console.error('Error: --format must be one of: html, ast, pug-code');
168
+ process.exit(1);
169
+ }
170
+ options.format = next;
171
+ i++;
172
+ }
173
+ else if (arg === '-c' || arg === '--config') {
174
+ const next = args[i + 1];
175
+ if (!next || next.startsWith('-')) {
176
+ console.error('Error: --config requires a config file path');
177
+ process.exit(1);
178
+ }
179
+ options.config = next;
180
+ i++;
181
+ }
182
+ else if (arg === '--render-files' || arg === '--render') {
183
+ const next = args[i + 1];
184
+ if (!next || next.startsWith('-')) {
185
+ console.error('Error: --render-files requires at least one pattern');
186
+ process.exit(1);
187
+ }
188
+ if (!options.renderFiles) {
189
+ options.renderFiles = [];
190
+ }
191
+ if (next.includes(',')) {
192
+ options.renderFiles.push(...next.split(',').map((p) => p.trim()));
193
+ i++;
194
+ }
195
+ else {
196
+ const patterns = [];
197
+ let j = i + 1;
198
+ while (j < args.length) {
199
+ const pattern = args[j];
200
+ if (!pattern || pattern.startsWith('-')) {
201
+ break;
202
+ }
203
+ patterns.push(pattern);
204
+ j++;
205
+ }
206
+ if (patterns.length === 0) {
207
+ console.error('Error: --render-files requires at least one pattern');
208
+ process.exit(1);
209
+ }
210
+ options.renderFiles.push(...patterns);
211
+ i = j - 1;
212
+ }
213
+ }
214
+ else if (arg && !arg.startsWith('-')) {
215
+ options.inputs.push(arg);
216
+ }
217
+ }
218
+ return options;
219
+ }
220
+ function useSingleFileMode(options) {
221
+ if (options.inputs.length !== 1)
222
+ return false;
223
+ const input = options.inputs[0];
224
+ if (!input)
225
+ return false;
226
+ if (input.includes('*') || input.includes('?') || input.includes('[')) {
227
+ return false;
228
+ }
229
+ try {
230
+ const inputPath = resolve(process.cwd(), input);
231
+ const stat = statSync(inputPath);
232
+ if (!stat.isFile())
233
+ return false;
234
+ }
235
+ catch {
236
+ return false;
237
+ }
238
+ if (options.output) {
239
+ if (options.output.endsWith('/') || options.output.endsWith('\\')) {
240
+ return false;
241
+ }
242
+ try {
243
+ const outputPath = resolve(process.cwd(), options.output);
244
+ const stat = statSync(outputPath);
245
+ if (stat.isDirectory())
246
+ return false;
247
+ }
248
+ catch {
249
+ if (/\.\w+$/.test(options.output)) {
250
+ return true;
251
+ }
252
+ return false;
253
+ }
254
+ }
255
+ return true;
256
+ }
257
+ function processSingleFile(options) {
258
+ const input = options.inputs[0];
259
+ if (!input) {
260
+ console.error('Error: No input file specified');
261
+ process.exit(1);
262
+ }
263
+ let data;
264
+ if (options.obj) {
265
+ try {
266
+ data = loadData(options.obj, options.basedir);
267
+ if (options.debug) {
268
+ console.log('[pug-tail] Loaded data:', JSON.stringify(data, null, 2));
269
+ }
270
+ }
271
+ catch (error) {
272
+ console.error(`Error: Failed to load data: ${error instanceof Error ? error.message : String(error)}`);
273
+ process.exit(1);
274
+ }
275
+ }
276
+ let source;
277
+ try {
278
+ const inputPath = resolve(process.cwd(), input);
279
+ source = readFileSync(inputPath, 'utf-8');
280
+ }
281
+ catch (error) {
282
+ console.error(`Error: Failed to read input file "${input}": ${error instanceof Error ? error.message : String(error)}`);
283
+ process.exit(1);
284
+ }
285
+ const inputDir = dirname(resolve(process.cwd(), input));
286
+ const transformOptions = {
287
+ filename: input,
288
+ debug: options.debug ?? false,
289
+ output: options.format ?? 'html',
290
+ htmlOptions: {
291
+ pretty: options.pretty ?? false,
292
+ compileDebug: false,
293
+ doctype: options.doctype,
294
+ },
295
+ data: data,
296
+ basedir: options.basedir,
297
+ basePath: inputDir,
298
+ };
299
+ try {
300
+ const result = transform(source, transformOptions);
301
+ let output;
302
+ if (options.format === 'ast') {
303
+ if (!result.ast) {
304
+ console.error('Error: AST output is not available');
305
+ process.exit(1);
306
+ }
307
+ output = JSON.stringify(result.ast, null, 2);
308
+ }
309
+ else if (options.format === 'pug-code') {
310
+ output = result.code ?? '';
311
+ }
312
+ else {
313
+ if (!result.html) {
314
+ console.error('Error: HTML output is not available');
315
+ process.exit(1);
316
+ }
317
+ output = result.html;
318
+ }
319
+ if (options.output) {
320
+ try {
321
+ const outputPath = resolve(process.cwd(), options.output);
322
+ const outputDir = dirname(outputPath);
323
+ mkdirSync(outputDir, { recursive: true });
324
+ writeFileSync(outputPath, output, 'utf-8');
325
+ if (options.debug) {
326
+ console.log(`[pug-tail] Output written to: ${outputPath}`);
327
+ }
328
+ }
329
+ catch (error) {
330
+ console.error(`Error: Failed to write output file "${options.output}": ${error instanceof Error ? error.message : String(error)}`);
331
+ process.exit(1);
332
+ }
333
+ }
334
+ else {
335
+ console.log(output);
336
+ }
337
+ }
338
+ catch (error) {
339
+ if (error instanceof Error) {
340
+ console.error(`Error: ${error.message}`);
341
+ if (error.stack && options.debug) {
342
+ console.error(error.stack);
343
+ }
344
+ }
345
+ else {
346
+ console.error(`Error: ${String(error)}`);
347
+ }
348
+ process.exit(1);
349
+ }
350
+ }
351
+ async function processMultipleFiles(options, config, originalConfig) {
352
+ let data;
353
+ const dataSource = options.obj !== undefined
354
+ ? options.obj
355
+ : config && 'data' in config && config.data === undefined
356
+ ? undefined
357
+ : config?.data;
358
+ const dataBasedir = options.obj
359
+ ? process.cwd()
360
+ : dataSource && typeof dataSource === 'string' && originalConfig
361
+ ? originalConfig.basedir
362
+ ? resolve(process.cwd(), originalConfig.basedir)
363
+ : process.cwd()
364
+ : process.cwd();
365
+ if (dataSource) {
366
+ try {
367
+ if (typeof dataSource === 'string') {
368
+ data = loadData(dataSource, dataBasedir);
369
+ }
370
+ else {
371
+ data = dataSource;
372
+ }
373
+ if (options.debug) {
374
+ console.log('[pug-tail] Loaded data:', JSON.stringify(data, null, 2));
375
+ }
376
+ }
377
+ catch (error) {
378
+ console.error(`Error: Failed to load data: ${error instanceof Error ? error.message : String(error)}`);
379
+ process.exit(1);
380
+ }
381
+ }
382
+ const processor = new FileProcessor({
383
+ outputDir: options.output || config?.files?.output,
384
+ extension: options.extension || config?.extension,
385
+ transformOptions: {
386
+ debug: options.debug ?? false,
387
+ output: options.format ?? 'html',
388
+ htmlOptions: {
389
+ pretty: options.pretty ?? false,
390
+ compileDebug: false,
391
+ doctype: options.doctype,
392
+ },
393
+ basedir: options.basedir,
394
+ validation: config?.validation,
395
+ },
396
+ data,
397
+ dataKey: config?.dataKey,
398
+ silent: options.silent,
399
+ debug: options.debug,
400
+ config,
401
+ });
402
+ const results = await processor.processInputs(options.inputs);
403
+ const processedResults = results.filter((r) => !r.ignored);
404
+ const successful = processedResults.filter((r) => r.success).length;
405
+ const failed = processedResults.filter((r) => !r.success).length;
406
+ if (!options.silent && processedResults.length > 0) {
407
+ console.log();
408
+ console.log(`Processed ${successful} file(s) successfully`);
409
+ if (failed > 0) {
410
+ console.log(`Failed to process ${failed} file(s)`);
411
+ }
412
+ }
413
+ if (failed > 0) {
414
+ process.exit(1);
415
+ }
416
+ }
417
+ async function main() {
418
+ const args = process.argv.slice(2);
419
+ const options = parseArgs(args);
420
+ if (options.help) {
421
+ showHelp();
422
+ process.exit(0);
423
+ }
424
+ if (options.version) {
425
+ showVersion();
426
+ process.exit(0);
427
+ }
428
+ const { config: configFile, configDir } = await loadConfig(options.config);
429
+ if (args.length === 0 && !configFile.files?.input) {
430
+ showHelp();
431
+ process.exit(0);
432
+ }
433
+ const resolveConfigPath = (path) => {
434
+ if (!configDir) {
435
+ return path;
436
+ }
437
+ return resolve(configDir, path);
438
+ };
439
+ if (configDir && configFile) {
440
+ if (configFile.files?.input) {
441
+ if (Array.isArray(configFile.files.input)) {
442
+ configFile.files.input = configFile.files.input.map(resolveConfigPath);
443
+ }
444
+ else {
445
+ configFile.files.input = resolveConfigPath(configFile.files.input);
446
+ }
447
+ }
448
+ if (configFile.files?.output) {
449
+ configFile.files.output = resolveConfigPath(configFile.files.output);
450
+ }
451
+ if (configFile.files?.root) {
452
+ configFile.files.root = resolveConfigPath(configFile.files.root);
453
+ }
454
+ if (configFile.basedir) {
455
+ configFile.basedir = resolveConfigPath(configFile.basedir);
456
+ }
457
+ if (typeof configFile.data === 'string' &&
458
+ !configFile.data.startsWith('{')) {
459
+ configFile.data = resolveConfigPath(configFile.data);
460
+ }
461
+ }
462
+ const cliConfig = {};
463
+ if (options.inputs.length > 0 || options.output || options.renderFiles) {
464
+ cliConfig.files = {};
465
+ if (options.inputs.length > 0) {
466
+ cliConfig.files.input = options.inputs;
467
+ if (!options.renderFiles) {
468
+ cliConfig.files.render = undefined;
469
+ }
470
+ }
471
+ if (options.output) {
472
+ cliConfig.files.output = options.output;
473
+ }
474
+ if (options.renderFiles) {
475
+ cliConfig.files.render = options.renderFiles;
476
+ }
477
+ }
478
+ if (options.extension) {
479
+ cliConfig.extension = options.extension;
480
+ }
481
+ if (options.basedir) {
482
+ cliConfig.basedir = options.basedir;
483
+ }
484
+ if (options.doctype) {
485
+ cliConfig.doctype = options.doctype;
486
+ }
487
+ if (options.pretty !== undefined) {
488
+ cliConfig.pretty = options.pretty;
489
+ }
490
+ if (options.format) {
491
+ cliConfig.format = options.format;
492
+ }
493
+ if (options.obj) {
494
+ cliConfig.data = options.obj;
495
+ }
496
+ if (options.silent !== undefined) {
497
+ cliConfig.silent = options.silent;
498
+ }
499
+ if (options.debug !== undefined) {
500
+ cliConfig.debug = options.debug;
501
+ }
502
+ if (options.watch) {
503
+ cliConfig.watch = { enabled: true };
504
+ }
505
+ const mergedConfig = mergeConfig(configFile, cliConfig);
506
+ const inputs = options.inputs.length > 0
507
+ ? options.inputs
508
+ : mergedConfig.files?.input
509
+ ? Array.isArray(mergedConfig.files.input)
510
+ ? mergedConfig.files.input
511
+ : [mergedConfig.files.input]
512
+ : [];
513
+ if (inputs.length === 0) {
514
+ console.error('Error: No input files specified');
515
+ console.error('Use --help for usage information');
516
+ process.exit(1);
517
+ }
518
+ if (mergedConfig.debug && configFile && Object.keys(configFile).length > 0) {
519
+ const configPath = options.config || findConfigFile();
520
+ console.log(`[pug-tail] Loaded config${configPath ? ` from ${configPath}` : ''}:`, JSON.stringify(configFile, null, 2));
521
+ }
522
+ if (mergedConfig.watch?.enabled || options.watch) {
523
+ const outputDir = mergedConfig.files?.output || options.output;
524
+ if (!outputDir) {
525
+ console.error('Error: Watch mode requires output directory (-o, --out)');
526
+ process.exit(1);
527
+ }
528
+ let data;
529
+ const dataSource = options.obj || mergedConfig.data;
530
+ const basedir = mergedConfig.basedir || options.basedir;
531
+ if (dataSource) {
532
+ try {
533
+ if (typeof dataSource === 'string') {
534
+ data = loadData(dataSource, basedir);
535
+ }
536
+ else {
537
+ data = dataSource;
538
+ }
539
+ if (mergedConfig.debug || options.debug) {
540
+ console.log('[pug-tail] Loaded data:', JSON.stringify(data, null, 2));
541
+ }
542
+ }
543
+ catch (error) {
544
+ console.error(`Error: Failed to load data: ${error instanceof Error ? error.message : String(error)}`);
545
+ process.exit(1);
546
+ }
547
+ }
548
+ const watcher = new Watcher({
549
+ paths: inputs,
550
+ outputDir,
551
+ extension: mergedConfig.extension,
552
+ transformOptions: {
553
+ debug: mergedConfig.debug ?? false,
554
+ output: mergedConfig.format ?? 'html',
555
+ htmlOptions: {
556
+ pretty: mergedConfig.pretty ?? false,
557
+ compileDebug: false,
558
+ doctype: mergedConfig.doctype,
559
+ },
560
+ basedir: mergedConfig.basedir,
561
+ validation: mergedConfig.validation,
562
+ },
563
+ data,
564
+ dataKey: mergedConfig.dataKey,
565
+ silent: mergedConfig.silent,
566
+ debug: mergedConfig.debug,
567
+ config: mergedConfig,
568
+ debounce: mergedConfig.watch?.debounce,
569
+ });
570
+ await watcher.start();
571
+ process.on('SIGINT', async () => {
572
+ await watcher.stop();
573
+ process.exit(0);
574
+ });
575
+ process.on('SIGTERM', async () => {
576
+ await watcher.stop();
577
+ process.exit(0);
578
+ });
579
+ await new Promise(() => { });
580
+ }
581
+ else if (useSingleFileMode(options)) {
582
+ const singleFileOptions = {
583
+ ...options,
584
+ output: options.output || mergedConfig.files?.output,
585
+ extension: options.extension || mergedConfig.extension,
586
+ basedir: options.basedir || mergedConfig.basedir,
587
+ format: options.format || mergedConfig.format,
588
+ pretty: options.pretty ?? mergedConfig.pretty,
589
+ doctype: options.doctype || mergedConfig.doctype,
590
+ debug: options.debug ?? mergedConfig.debug,
591
+ silent: options.silent ?? mergedConfig.silent,
592
+ obj: options.obj ||
593
+ (options.inputs.length > 0
594
+ ? undefined
595
+ : typeof mergedConfig.data === 'string'
596
+ ? mergedConfig.data
597
+ : undefined),
598
+ };
599
+ processSingleFile(singleFileOptions);
600
+ }
601
+ else {
602
+ const mergedOptions = {
603
+ inputs,
604
+ output: mergedConfig.files?.output || options.output,
605
+ obj: options.obj ||
606
+ (typeof mergedConfig.data === 'string' ? mergedConfig.data : undefined),
607
+ basedir: mergedConfig.basedir,
608
+ format: mergedConfig.format,
609
+ extension: mergedConfig.extension,
610
+ pretty: mergedConfig.pretty,
611
+ doctype: mergedConfig.doctype,
612
+ debug: mergedConfig.debug,
613
+ silent: mergedConfig.silent,
614
+ };
615
+ await processMultipleFiles(mergedOptions, mergedConfig, configFile);
616
+ }
617
+ }
618
+ if (import.meta.url === `file://${process.argv[1]}`) {
619
+ main().catch((error) => {
620
+ console.error('Fatal error:', error);
621
+ process.exit(1);
622
+ });
623
+ }
624
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}