@lenne.tech/cli 1.5.0 → 1.6.1

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.
Files changed (73) hide show
  1. package/README.md +30 -0
  2. package/bin/postinstall.js +156 -0
  3. package/build/cli.js +11 -1
  4. package/build/commands/blocks/add.js +28 -306
  5. package/build/commands/blocks/blocks.js +2 -2
  6. package/build/commands/claude/claude.js +2 -2
  7. package/build/commands/cli/cli.js +2 -2
  8. package/build/commands/cli/create.js +69 -21
  9. package/build/commands/cli/rename.js +11 -5
  10. package/build/commands/completion.js +311 -0
  11. package/build/commands/components/add.js +25 -219
  12. package/build/commands/components/components.js +2 -2
  13. package/build/commands/config/help.js +5 -2
  14. package/build/commands/config/init.js +20 -5
  15. package/build/commands/config/show.js +4 -1
  16. package/build/commands/config/validate.js +27 -2
  17. package/build/commands/deployment/create.js +18 -5
  18. package/build/commands/deployment/deployment.js +2 -2
  19. package/build/commands/docs/open.js +4 -1
  20. package/build/commands/doctor.js +285 -0
  21. package/build/commands/frontend/angular.js +88 -28
  22. package/build/commands/frontend/nuxt.js +2 -1
  23. package/build/commands/fullstack/init.js +58 -19
  24. package/build/commands/git/clean.js +60 -11
  25. package/build/commands/git/clear.js +17 -11
  26. package/build/commands/git/create.js +51 -10
  27. package/build/commands/git/force-pull.js +42 -15
  28. package/build/commands/git/get.js +14 -15
  29. package/build/commands/git/install-scripts.js +6 -6
  30. package/build/commands/git/rebase.js +40 -12
  31. package/build/commands/git/rename.js +33 -13
  32. package/build/commands/git/reset.js +48 -13
  33. package/build/commands/git/squash.js +67 -26
  34. package/build/commands/git/undo.js +33 -13
  35. package/build/commands/git/update.js +59 -6
  36. package/build/commands/history.js +75 -0
  37. package/build/commands/mongodb/collection-export.js +2 -2
  38. package/build/commands/mongodb/mongodb.js +2 -2
  39. package/build/commands/mongodb/s3-restore.js +2 -2
  40. package/build/commands/npm/reinit.js +11 -12
  41. package/build/commands/npm/update.js +6 -2
  42. package/build/commands/qdrant/delete.js +6 -2
  43. package/build/commands/qdrant/qdrant.js +2 -2
  44. package/build/commands/qdrant/stats.js +5 -2
  45. package/build/commands/redis/redis.js +2 -2
  46. package/build/commands/server/add-property.js +8 -12
  47. package/build/commands/server/create-secret.js +6 -3
  48. package/build/commands/server/create.js +39 -21
  49. package/build/commands/server/module.js +22 -16
  50. package/build/commands/server/object.js +7 -11
  51. package/build/commands/server/set-secrets.js +6 -3
  52. package/build/commands/server/test.js +3 -3
  53. package/build/commands/starter/chrome-extension.js +3 -3
  54. package/build/commands/status.js +198 -0
  55. package/build/commands/templates/list.js +107 -0
  56. package/build/commands/templates/llm.js +8 -3
  57. package/build/commands/templates/templates.js +2 -2
  58. package/build/commands/tools/jwt-read.js +2 -2
  59. package/build/commands/tools/regex.js +5 -2
  60. package/build/commands/typescript/create.js +84 -21
  61. package/build/commands/typescript/playground.js +5 -2
  62. package/build/extensions/config.js +37 -1
  63. package/build/extensions/git.js +57 -2
  64. package/build/extensions/history.js +118 -0
  65. package/build/extensions/logger.js +189 -0
  66. package/build/lib/nuxt-base-components.js +249 -0
  67. package/build/lib/validation.js +204 -0
  68. package/build/templates/completion/bash.sh.ejs +92 -0
  69. package/build/templates/completion/fish.sh.ejs +77 -0
  70. package/build/templates/completion/zsh.sh.ejs +119 -0
  71. package/docs/commands.md +464 -14
  72. package/docs/lt.config.md +138 -8
  73. package/package.json +16 -14
package/README.md CHANGED
@@ -42,6 +42,19 @@ $ lt
42
42
  - [Configuration Guide](docs/lt.config.md) - Configuration file documentation
43
43
  - [Plugin Guide](docs/plugins.md) - How to create plugins
44
44
 
45
+ ## Quick Start
46
+
47
+ ```bash
48
+ # Check your environment
49
+ $ lt doctor
50
+
51
+ # Show project status
52
+ $ lt status
53
+
54
+ # Enable shell completions
55
+ $ lt completion install
56
+ ```
57
+
45
58
  ## Configuration
46
59
 
47
60
  The CLI supports project-specific configuration via `lt.config` files. This allows you to set default values for commands, reducing repetitive input.
@@ -91,6 +104,23 @@ $ lt git get <branch-name or part-of-branch-name>
91
104
  or
92
105
  $ lt git g <branch-name or part-of-branch-name>
93
106
 
107
+ // Preview what a command would do (dry-run)
108
+ $ lt git clear --dry-run
109
+ $ lt git reset --dry-run
110
+ $ lt git squash --dry-run
111
+ $ lt git rebase --dry-run
112
+
113
+ // Skip confirmation prompts (noConfirm)
114
+ $ lt git get feature --noConfirm
115
+ $ lt git squash dev --noConfirm
116
+
117
+ // Combine flags for CI/CD pipelines
118
+ $ lt git clean --noConfirm
119
+ $ lt server module User --noConfirm
120
+
121
+ // View command history
122
+ $ lt history
123
+
94
124
  ...
95
125
 
96
126
  ```
@@ -0,0 +1,156 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Postinstall script for lt CLI
5
+ * Generates static completion files on install/update (no runtime overhead)
6
+ */
7
+
8
+ const { execSync } = require('child_process');
9
+ const { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } = require('fs');
10
+ const { homedir } = require('os');
11
+ const { join } = require('path');
12
+
13
+ /**
14
+ * Add source line to shell config
15
+ */
16
+ function addSourceLine(configFile, sourceLine) {
17
+ if (!configFile || !sourceLine) return false;
18
+
19
+ try {
20
+ appendFileSync(configFile, `\n${sourceLine}\n`);
21
+ return true;
22
+ } catch {
23
+ return false;
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Detect user's shell
29
+ */
30
+ function detectShell() {
31
+ const shell = process.env.SHELL || '';
32
+ if (shell.includes('zsh')) return 'zsh';
33
+ if (shell.includes('fish')) return 'fish';
34
+ return 'bash';
35
+ }
36
+
37
+ /**
38
+ * Generate and write completion file
39
+ */
40
+ function generateCompletionFile(shell, completionFile) {
41
+ try {
42
+ // Ensure directory exists
43
+ const dir = join(completionFile, '..');
44
+ if (!existsSync(dir)) {
45
+ mkdirSync(dir, { recursive: true });
46
+ }
47
+
48
+ // Generate completion script
49
+ const script = execSync(`lt completion ${shell}`, { encoding: 'utf-8' });
50
+ writeFileSync(completionFile, script);
51
+ return true;
52
+ } catch {
53
+ return false;
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Get completion file paths
59
+ */
60
+ function getCompletionPaths(shell) {
61
+ const home = homedir();
62
+ const ltDir = join(home, '.local', 'share', 'lt', 'completions');
63
+
64
+ switch (shell) {
65
+ case 'fish':
66
+ return {
67
+ completionFile: join(home, '.config', 'fish', 'completions', 'lt.fish'),
68
+ configFile: null, // Fish auto-loads from completions dir
69
+ sourceLine: null,
70
+ };
71
+ case 'zsh':
72
+ return {
73
+ completionFile: join(ltDir, '_lt'),
74
+ configFile: join(home, '.zshrc'),
75
+ // Source the file directly - it uses compdef internally
76
+ // This avoids calling compinit which conflicts with Powerlevel10k instant prompt
77
+ sourceLine: `# lt CLI completion\n[ -f ~/.local/share/lt/completions/_lt ] && source ~/.local/share/lt/completions/_lt`,
78
+ };
79
+ case 'bash':
80
+ default:
81
+ return {
82
+ completionFile: join(ltDir, 'lt.bash'),
83
+ configFile: existsSync(join(home, '.bash_profile'))
84
+ ? join(home, '.bash_profile')
85
+ : join(home, '.bashrc'),
86
+ sourceLine: `# lt CLI completion\n[ -f ~/.local/share/lt/completions/lt.bash ] && source ~/.local/share/lt/completions/lt.bash`,
87
+ };
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Check if source line is already in config
93
+ */
94
+ function isSourceLineInstalled(configFile) {
95
+ if (!configFile || !existsSync(configFile)) {
96
+ return false;
97
+ }
98
+ const content = readFileSync(configFile, 'utf-8');
99
+ return content.includes('lt CLI completion') || content.includes('lt/completions');
100
+ }
101
+
102
+ /**
103
+ * Main postinstall function
104
+ */
105
+ function main() {
106
+ // Skip in CI environments
107
+ if (process.env.CI || process.env.CONTINUOUS_INTEGRATION) {
108
+ return;
109
+ }
110
+
111
+ const shell = detectShell();
112
+ const paths = getCompletionPaths(shell);
113
+ const isTTY = process.stdout.isTTY;
114
+
115
+ // Check if completions were previously installed
116
+ const wasInstalled = existsSync(paths.completionFile) || isSourceLineInstalled(paths.configFile);
117
+
118
+ // Always regenerate completion file on install/update (even in non-TTY)
119
+ const generated = generateCompletionFile(shell, paths.completionFile);
120
+
121
+ if (!generated) {
122
+ return; // Silent fail
123
+ }
124
+
125
+ // If completions were previously installed, we just updated them (silent in non-TTY)
126
+ if (wasInstalled) {
127
+ if (isTTY) {
128
+ console.info(`\n✓ Shell completions updated for ${shell}`);
129
+ }
130
+ return;
131
+ }
132
+
133
+ // For new installations: only add source line in TTY mode (interactive)
134
+ if (!isTTY) {
135
+ return;
136
+ }
137
+
138
+ // For Bash/Zsh: add source line to config if not already present
139
+ if (paths.configFile && !isSourceLineInstalled(paths.configFile)) {
140
+ const added = addSourceLine(paths.configFile, paths.sourceLine);
141
+ if (added) {
142
+ console.info(`\n✓ Shell completion installed for ${shell}`);
143
+ console.info(` Restart your terminal or run: source ${paths.configFile}\n`);
144
+ return;
145
+ }
146
+ }
147
+
148
+ // Fish: completions are auto-loaded
149
+ if (shell === 'fish') {
150
+ console.info(`\n✓ Fish completions installed`);
151
+ console.info(` Restart your terminal to activate\n`);
152
+ }
153
+ }
154
+
155
+ // Run
156
+ main();
package/build/cli.js CHANGED
@@ -31,6 +31,16 @@ function run(argv) {
31
31
  .create();
32
32
  // Run cli
33
33
  const toolbox = yield cli.run(argv);
34
+ // Record command in history (if history extension is available)
35
+ if ((toolbox === null || toolbox === void 0 ? void 0 : toolbox.history) && toolbox.commandName && !['completion', 'history'].includes(toolbox.commandName)) {
36
+ try {
37
+ const args = argv.slice(1); // Remove the command name
38
+ toolbox.history.addEntry(toolbox.commandName, args);
39
+ }
40
+ catch (_a) {
41
+ // Ignore history errors
42
+ }
43
+ }
34
44
  // Send it back (for testing, mostly)
35
45
  return toolbox;
36
46
  }
@@ -48,4 +58,4 @@ function run(argv) {
48
58
  });
49
59
  }
50
60
  module.exports = { run };
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLHFDQUFnQztBQUNoQywrQkFBNEI7QUFFNUI7O0dBRUc7QUFDSCxTQUFlLEdBQUcsQ0FBQyxJQUFJOztRQUNyQixJQUFJLENBQUM7WUFDSCx1QkFBdUI7WUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBQSxlQUFLLEdBQUU7aUJBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLFNBQVMsQ0FBQztnQkFDZixpRUFBaUU7aUJBQ2hFLE1BQU0sQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pGLGtCQUFrQixFQUFFLENBQUMsTUFBTSxDQUFDO2dCQUM1QixvQkFBb0IsRUFBRSxDQUFDLE1BQU0sQ0FBQzthQUMvQixDQUFDO2lCQUNELElBQUksRUFBRSxDQUFDLDJDQUEyQztpQkFDbEQsT0FBTyxFQUFFLENBQUMsaURBQWlEO2lCQUMzRCxNQUFNLEVBQUUsQ0FBQztZQUVaLFVBQVU7WUFDVixNQUFNLE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFcEMscUNBQXFDO1lBQ3JDLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDUCxzQ0FBc0M7Z0JBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGNBQWM7Z0JBQ2QsTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FBQTtBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyJ9
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLHFDQUFnQztBQUNoQywrQkFBNEI7QUFFNUI7O0dBRUc7QUFDSCxTQUFlLEdBQUcsQ0FBQyxJQUFJOztRQUNyQixJQUFJLENBQUM7WUFDSCx1QkFBdUI7WUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBQSxlQUFLLEdBQUU7aUJBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLFNBQVMsQ0FBQztnQkFDZixpRUFBaUU7aUJBQ2hFLE1BQU0sQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pGLGtCQUFrQixFQUFFLENBQUMsTUFBTSxDQUFDO2dCQUM1QixvQkFBb0IsRUFBRSxDQUFDLE1BQU0sQ0FBQzthQUMvQixDQUFDO2lCQUNELElBQUksRUFBRSxDQUFDLDJDQUEyQztpQkFDbEQsT0FBTyxFQUFFLENBQUMsaURBQWlEO2lCQUMzRCxNQUFNLEVBQUUsQ0FBQztZQUVaLFVBQVU7WUFDVixNQUFNLE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFcEMsZ0VBQWdFO1lBQ2hFLElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsT0FBTyxLQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hHLElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCO29CQUN0RCxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN0RCxDQUFDO2dCQUFDLFdBQU0sQ0FBQztvQkFDUCx3QkFBd0I7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO1lBRUQscUNBQXFDO1lBQ3JDLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDUCxzQ0FBc0M7Z0JBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGNBQWM7Z0JBQ2QsTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FBQTtBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyJ9
@@ -9,28 +9,35 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- const axios_1 = require("axios");
13
- const fs = require("fs");
14
- const glob = require("glob");
15
- const gluegun_1 = require("gluegun");
16
- const path = require("path");
17
- const AddComponentCommand = {
18
- description: 'Adds a specific block to another Nuxt project',
12
+ const nuxt_base_components_1 = require("../../lib/nuxt-base-components");
13
+ const AddBlockCommand = {
14
+ description: 'Add Nuxt block',
19
15
  name: 'add',
20
16
  run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
21
- const { parameters } = toolbox;
17
+ var _a, _b;
18
+ const { config, parameters } = toolbox;
19
+ // Load configuration
20
+ const ltConfig = config.loadConfig();
21
+ // Determine noConfirm with priority: CLI > config > global > default (false)
22
+ const noConfirm = config.getNoConfirm({
23
+ cliValue: parameters.options.noConfirm,
24
+ commandConfig: (_b = (_a = ltConfig === null || ltConfig === void 0 ? void 0 : ltConfig.commands) === null || _a === void 0 ? void 0 : _a.blocks) === null || _b === void 0 ? void 0 : _b.add,
25
+ config: ltConfig,
26
+ });
22
27
  const blockName = parameters.first;
23
- yield addBlock(toolbox, blockName);
24
- process.exit();
25
- return 'add';
28
+ yield addBlock(toolbox, blockName, noConfirm);
29
+ if (!parameters.options.fromGluegunMenu) {
30
+ process.exit();
31
+ }
32
+ return `added block ${blockName || 'selected'}`;
26
33
  }),
27
34
  };
28
- function addBlock(toolbox, blockName) {
29
- return __awaiter(this, void 0, void 0, function* () {
35
+ function addBlock(toolbox_1, blockName_1) {
36
+ return __awaiter(this, arguments, void 0, function* (toolbox, blockName, noConfirm = false) {
30
37
  const { print, prompt } = toolbox;
31
38
  try {
32
39
  const compSpinner = print.spin('Load block selection from GitHub...');
33
- const possibleBlocks = yield getBlockInfo();
40
+ const possibleBlocks = yield (0, nuxt_base_components_1.getFileInfo)('blocks');
34
41
  compSpinner.succeed('Blocks selection successfully loaded from GitHub');
35
42
  if (possibleBlocks.length > 0) {
36
43
  let selectedBlock = '';
@@ -44,19 +51,16 @@ function addBlock(toolbox, blockName) {
44
51
  selectedBlock = response.blockType;
45
52
  }
46
53
  else {
47
- const foundComponent = possibleBlocks.find(e => e.name.toLowerCase() === `${blockName.toLowerCase()}.vue` || e.name.toLowerCase() === blockName.toLowerCase());
48
- selectedBlock = foundComponent.name;
54
+ const foundBlock = possibleBlocks.find(e => e.name.toLowerCase() === `${blockName.toLowerCase()}.vue` || e.name.toLowerCase() === blockName.toLowerCase());
55
+ selectedBlock = (foundBlock === null || foundBlock === void 0 ? void 0 : foundBlock.name) || blockName;
49
56
  }
50
57
  const selectedFile = possibleBlocks.find(e => e.name.toLowerCase() === selectedBlock.toLowerCase());
51
58
  if ((selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.type) === 'dir') {
52
59
  print.success(`The directory ${selectedFile.name} has been selected.`);
53
- const directoryFiles = yield getBlockInfo(selectedFile.name);
60
+ const directoryFiles = yield (0, nuxt_base_components_1.getFileInfo)('blocks', selectedFile.name);
54
61
  if (directoryFiles.length > 0) {
55
62
  for (const file of directoryFiles) {
56
- yield copyBlock({
57
- name: `${selectedFile.name}/${file.name}`,
58
- type: 'dir',
59
- }, toolbox);
63
+ yield (0, nuxt_base_components_1.copyFile)({ name: `${selectedFile.name}/${file.name}`, type: 'dir' }, toolbox, 'blocks', noConfirm);
60
64
  }
61
65
  print.success(`All files from the directory ${selectedFile.name} have been successfully copied.`);
62
66
  }
@@ -66,7 +70,7 @@ function addBlock(toolbox, blockName) {
66
70
  }
67
71
  else if ((selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.type) === 'file') {
68
72
  print.success(`The block ${selectedFile.name} was selected.`);
69
- yield copyBlock(selectedFile, toolbox);
73
+ yield (0, nuxt_base_components_1.copyFile)(selectedFile, toolbox, 'blocks', noConfirm);
70
74
  }
71
75
  }
72
76
  else {
@@ -78,287 +82,5 @@ function addBlock(toolbox, blockName) {
78
82
  }
79
83
  });
80
84
  }
81
- function copyBlock(file, toolbox) {
82
- return __awaiter(this, void 0, void 0, function* () {
83
- const { print } = toolbox;
84
- const apiUrl = `https://raw.githubusercontent.com/lenneTech/nuxt-base-components/main/blocks/${file.name}`;
85
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
86
- try {
87
- const config = yield getConfigForBlock(file.name, toolbox);
88
- if (config) {
89
- yield processConfig(config, toolbox);
90
- }
91
- const compSpinner = print.spin(`Load block ${file.name} from GitHub...`);
92
- const response = yield axios_1.default.get(apiUrl);
93
- compSpinner.succeed(`Block ${file.name} successfully loaded from GitHub`);
94
- if (response.status === 200) {
95
- const sourceCode = response.data;
96
- const cwd = process.cwd();
97
- let targetDirectory;
98
- if (fs.existsSync(path.resolve(cwd, 'pages'))) {
99
- targetDirectory = path.resolve(cwd, 'pages');
100
- }
101
- else {
102
- const directories = glob.sync('*/pages', { cwd });
103
- if (directories.length > 0) {
104
- targetDirectory = path.join(cwd, directories[0]);
105
- }
106
- else {
107
- targetDirectory = cwd;
108
- }
109
- }
110
- const targetName = file.name.replace(/([a-z])([A-Z])/g, '$1-$2')
111
- .toLowerCase()
112
- .replace(/^block-/, '');
113
- const targetPath = path.join(targetDirectory, `${targetName}`);
114
- // check if block already exists
115
- if (fs.existsSync(targetPath)) {
116
- print.info(`The block ${file.name} already exists`);
117
- resolve(targetPath);
118
- return;
119
- }
120
- if (!fs.existsSync(targetDirectory)) {
121
- const targetDirSpinner = print.spin('Creating the target directory...');
122
- fs.mkdirSync(targetDirectory, { recursive: true });
123
- targetDirSpinner.succeed();
124
- }
125
- if (file.type === 'dir') {
126
- const dirName = file.name.split('/')[0];
127
- const dirPath = path.join(targetDirectory, dirName);
128
- if (!fs.existsSync(dirPath)) {
129
- fs.mkdirSync(dirPath, { recursive: true });
130
- }
131
- }
132
- const spinner = print.spin(`Copy the block ${targetName} to ${targetPath}...`);
133
- fs.writeFileSync(targetPath, sourceCode);
134
- spinner.succeed(`The block ${targetName} was successfully copied to ${targetPath}`);
135
- resolve(targetPath);
136
- }
137
- else {
138
- print.error(`Error retrieving the file from GitHub: ${response.statusText}`);
139
- reject(response.statusText);
140
- }
141
- }
142
- catch (error) {
143
- print.error(`Error when copying the block ${file.name}: ${error.message}`);
144
- reject(error);
145
- }
146
- }));
147
- });
148
- }
149
- function copyComponent(file, toolbox) {
150
- return __awaiter(this, void 0, void 0, function* () {
151
- const { print } = toolbox;
152
- const apiUrl = `https://raw.githubusercontent.com/lenneTech/nuxt-base-components/main/components/${file.name}`;
153
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
154
- try {
155
- const config = yield getConfigForBlock(file.name, toolbox);
156
- if (config) {
157
- yield processConfig(config, toolbox);
158
- }
159
- const compSpinner = print.spin(`Load component ${file.name} from GitHub...`);
160
- const response = yield axios_1.default.get(apiUrl);
161
- compSpinner.succeed(`Component ${file.name} successfully loaded from GitHub`);
162
- if (response.status === 200) {
163
- const sourceCode = response.data;
164
- const cwd = process.cwd();
165
- let targetDirectory;
166
- if (fs.existsSync(path.resolve(cwd, 'components'))) {
167
- targetDirectory = path.resolve(cwd, 'components');
168
- }
169
- else {
170
- const directories = glob.sync('*/components', { cwd });
171
- if (directories.length > 0) {
172
- targetDirectory = path.join(cwd, directories[0]);
173
- }
174
- else {
175
- targetDirectory = cwd;
176
- }
177
- }
178
- const targetPath = path.join(targetDirectory, `${file.name}`);
179
- if (fs.existsSync(targetPath)) {
180
- print.info(`The component ${file.name} already exists`);
181
- resolve(targetPath);
182
- return;
183
- }
184
- if (!fs.existsSync(targetDirectory)) {
185
- const targetDirSpinner = print.spin('Creating the target directory...');
186
- fs.mkdirSync(targetDirectory, { recursive: true });
187
- targetDirSpinner.succeed();
188
- }
189
- if (file.type === 'dir' || file.name.split('/').length > 1) {
190
- const dirName = file.name.split('/')[0];
191
- const dirPath = path.join(targetDirectory, dirName);
192
- if (!fs.existsSync(dirPath)) {
193
- fs.mkdirSync(dirPath, { recursive: true });
194
- }
195
- }
196
- const spinner = print.spin(`Copy the component ${file.name} to ${targetPath}...`);
197
- fs.writeFileSync(targetPath, sourceCode);
198
- spinner.succeed(`The component ${file.name} was successfully copied to ${targetPath}`);
199
- resolve(targetPath);
200
- }
201
- else {
202
- print.error(`Error retrieving the file from GitHub: ${response.statusText}`);
203
- reject(response.statusText);
204
- }
205
- }
206
- catch (error) {
207
- print.error(`Error when copying the component ${file.name}: ${error.message}`);
208
- reject(error);
209
- }
210
- }));
211
- });
212
- }
213
- function copyComposable(composable, toolbox) {
214
- return __awaiter(this, void 0, void 0, function* () {
215
- const { print, prompt } = toolbox;
216
- const apiUrl = `https://raw.githubusercontent.com/lenneTech/nuxt-base-components/main/composables/${composable}.ts`;
217
- const response = yield axios_1.default.get(apiUrl);
218
- if (response.status === 200) {
219
- const sourceCode = response.data;
220
- const cwd = process.cwd();
221
- let targetDirectory;
222
- if (fs.existsSync(path.resolve(cwd, 'composables'))) {
223
- targetDirectory = path.resolve(cwd, 'composables');
224
- }
225
- else {
226
- const directories = glob.sync('*/composables', { cwd });
227
- if (directories.length > 0) {
228
- targetDirectory = path.join(cwd, directories[0]);
229
- }
230
- else {
231
- targetDirectory = cwd;
232
- }
233
- }
234
- // check composable already exists
235
- if (fs.existsSync(path.join(targetDirectory, `${composable}.ts`))) {
236
- print.info(`The composable ${composable} already exists`);
237
- return;
238
- }
239
- const confirm = yield prompt.confirm(`The composable ${composable} is required. Would you like to add it?`);
240
- if (!confirm) {
241
- return;
242
- }
243
- const targetPath = path.join(targetDirectory, `${composable}.ts`);
244
- const spinner = print.spin(`Copy the composable ${composable} to ${targetPath}...`);
245
- fs.writeFileSync(targetPath, sourceCode);
246
- spinner.succeed(`The composable ${composable} was successfully copied to ${targetPath}`);
247
- }
248
- else {
249
- print.error(`Error retrieving the file from GitHub: ${response.statusText}`);
250
- }
251
- });
252
- }
253
- function getBlockInfo(path) {
254
- return __awaiter(this, void 0, void 0, function* () {
255
- const githubApiUrl = `https://api.github.com/repos/lenneTech/nuxt-base-components/contents/blocks${path ? `/${path}` : ''}`;
256
- const response = yield axios_1.default.get(githubApiUrl);
257
- if (response.status === 200) {
258
- return response.data.map((file) => {
259
- return {
260
- name: file.name,
261
- type: file.type,
262
- };
263
- });
264
- }
265
- else {
266
- throw new Error(`Error when retrieving the file list from GitHub: ${response.statusText}`);
267
- }
268
- });
269
- }
270
- function getComponentsInfo(path) {
271
- return __awaiter(this, void 0, void 0, function* () {
272
- const githubApiUrl = `https://api.github.com/repos/lenneTech/nuxt-base-components/contents/components${path ? `/${path}` : ''}`;
273
- const response = yield axios_1.default.get(githubApiUrl);
274
- if (response.status === 200) {
275
- return response.data.map((file) => {
276
- return {
277
- name: file.name,
278
- type: file.type,
279
- };
280
- });
281
- }
282
- else {
283
- throw new Error(`Error when retrieving the file list from GitHub: ${response.statusText}`);
284
- }
285
- });
286
- }
287
- function getConfig() {
288
- return __awaiter(this, void 0, void 0, function* () {
289
- const githubApiUrl = 'https://raw.githubusercontent.com/lenneTech/nuxt-base-components/main/config.json';
290
- const response = yield axios_1.default.get(githubApiUrl);
291
- if (response.status === 200) {
292
- return response.data;
293
- }
294
- else {
295
- throw new Error(`Error when retrieving the configuration from GitHub: ${response.statusText}`);
296
- }
297
- });
298
- }
299
- function getConfigForBlock(fileName, toolbox) {
300
- return __awaiter(this, void 0, void 0, function* () {
301
- const { print } = toolbox;
302
- const configSpinner = print.spin('Checking the config for block...');
303
- const data = yield getConfig();
304
- const name = fileName.split('.').slice(0, -1).join('.');
305
- const rootName = name.split('/')[0];
306
- configSpinner.succeed(`Config for ${rootName} loaded successfully`);
307
- return data.config[rootName] || {};
308
- });
309
- }
310
- function installPackage(packageName, toolbox) {
311
- return __awaiter(this, void 0, void 0, function* () {
312
- const { print, prompt, system } = toolbox;
313
- const nameWithoutVersion = packageName.split('@')[0] || packageName;
314
- const packageJsonPath = path.resolve(process.cwd(), 'package.json');
315
- const packageJson = gluegun_1.filesystem.read(packageJsonPath, 'json');
316
- const isInstalled = (packageJson.dependencies && packageJson.dependencies[nameWithoutVersion])
317
- || (packageJson.devDependencies && packageJson.devDependencies[nameWithoutVersion]);
318
- if (!isInstalled) {
319
- const confirm = yield prompt.confirm(`The npm package ${nameWithoutVersion} is required. Would you like to install it?`);
320
- if (!confirm) {
321
- return;
322
- }
323
- const installSpinner = print.spin(`Install npm package ${nameWithoutVersion}...`);
324
- yield system.run(`npm install ${packageName} --save-exact`);
325
- installSpinner.succeed(`npm package ${nameWithoutVersion} successfully installed`);
326
- }
327
- else {
328
- print.info(`npm package ${nameWithoutVersion} is already installed`);
329
- }
330
- });
331
- }
332
- function processConfig(config, toolbox) {
333
- return __awaiter(this, void 0, void 0, function* () {
334
- if (config === null || config === void 0 ? void 0 : config.npm) {
335
- const npmPackages = config.npm;
336
- for (const npmPackage of npmPackages) {
337
- yield installPackage(npmPackage, toolbox);
338
- }
339
- }
340
- if (config === null || config === void 0 ? void 0 : config.composables) {
341
- const composables = config.composables;
342
- for (const composable of composables) {
343
- yield copyComposable(composable, toolbox);
344
- }
345
- }
346
- if (config === null || config === void 0 ? void 0 : config.components) {
347
- const components = config.components;
348
- for (const component of components) {
349
- if (component.endsWith('/*')) {
350
- const folderName = component.split('/')[0];
351
- const directoryFiles = yield getComponentsInfo(folderName);
352
- for (const file of directoryFiles) {
353
- yield copyComponent({ name: `${folderName}/${file.name}`, type: 'dir' }, toolbox);
354
- }
355
- }
356
- else {
357
- yield copyComponent({ name: `${component}.vue`, type: 'file' }, toolbox);
358
- }
359
- }
360
- }
361
- });
362
- }
363
- exports.default = AddComponentCommand;
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Jsb2Nrcy9hZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxpQ0FBMEI7QUFDMUIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixxQ0FBcUQ7QUFDckQsNkJBQTZCO0FBSTdCLE1BQU0sbUJBQW1CLEdBQW1CO0lBQzFDLFdBQVcsRUFBRSwrQ0FBK0M7SUFDNUQsSUFBSSxFQUFFLEtBQUs7SUFDWCxHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7UUFDN0MsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUMvQixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ25DLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQTtDQUNGLENBQUM7QUFFRixTQUFlLFFBQVEsQ0FBQyxPQUErQixFQUFFLFNBQTZCOztRQUNwRixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUVsQyxJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7WUFDdEUsTUFBTSxjQUFjLEdBQUcsTUFBTSxZQUFZLEVBQUUsQ0FBQztZQUM1QyxXQUFXLENBQUMsT0FBTyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7WUFFeEUsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLGFBQWEsR0FBVyxFQUFFLENBQUM7Z0JBRS9CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDZixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENB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
85
+ exports.default = AddBlockCommand;
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Jsb2Nrcy9hZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQSx5RUFBaUY7QUFFakYsTUFBTSxlQUFlLEdBQW1CO0lBQ3RDLFdBQVcsRUFBRSxnQkFBZ0I7SUFDN0IsSUFBSSxFQUFFLEtBQUs7SUFDWCxHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7O1FBQzdDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXZDLHFCQUFxQjtRQUNyQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFckMsNkVBQTZFO1FBQzdFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDcEMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUztZQUN0QyxhQUFhLEVBQUUsTUFBQSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxRQUFRLDBDQUFFLE1BQU0sMENBQUUsR0FBRztZQUM5QyxNQUFNLEVBQUUsUUFBUTtTQUNqQixDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ25DLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLGVBQWUsU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ2xELENBQUMsQ0FBQTtDQUNGLENBQUM7QUFFRixTQUFlLFFBQVE7eURBQUMsT0FBK0IsRUFBRSxTQUE2QixFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQ3ZHLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRWxDLElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztZQUN0RSxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEsa0NBQVcsRUFBQyxRQUFRLENBQUMsQ0FBQztZQUNuRCxXQUFXLENBQUMsT0FBTyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7WUFFeEUsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLGFBQWEsR0FBVyxFQUFFLENBQUM7Z0JBRS9CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDZixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUM7d0JBQ2hDLE9BQU8sRUFBRSxjQUFjO3dCQUN2QixPQUFPLEVBQUUsb0NBQW9DO3dCQUM3QyxJQUFJLEVBQUUsV0FBVzt3QkFDakIsSUFBSSxFQUFFLFFBQVE7cUJBQ2YsQ0FBQyxDQUFDO29CQUNILGFBQWEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUNyQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FDcEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQ25ILENBQUM7b0JBQ0YsYUFBYSxHQUFHLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksS0FBSSxTQUFTLENBQUM7Z0JBQ2hELENBQUM7Z0JBRUQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3BHLElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsSUFBSSxNQUFLLEtBQUssRUFBRSxDQUFDO29CQUNqQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixZQUFZLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDO29CQUN2RSxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEsa0NBQVcsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUV0RSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQzlCLEtBQUssTUFBTSxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7NEJBQ2xDLE1BQU0sSUFBQSwrQkFBUSxFQUNaLEVBQUUsSUFBSSxFQUFFLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBYyxFQUN0RSxPQUFPLEVBQ1AsUUFBUSxFQUNSLFNBQVMsQ0FDVixDQUFDO3dCQUNKLENBQUM7d0JBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsWUFBWSxDQUFDLElBQUksaUNBQWlDLENBQUMsQ0FBQztvQkFDcEcsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQWlCLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDO29CQUM5RCxDQUFDO2dCQUNILENBQUM7cUJBQU0sSUFBSSxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxJQUFJLE1BQUssTUFBTSxFQUFFLENBQUM7b0JBQ3pDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxZQUFZLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO29CQUM5RCxNQUFNLElBQUEsK0JBQVEsRUFBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDN0QsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsS0FBSyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7Q0FBQTtBQUVELGtCQUFlLGVBQWUsQ0FBQyJ9
@@ -13,7 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  * Blocks commands
14
14
  */
15
15
  module.exports = {
16
- alias: ['n'],
16
+ alias: ['bl'],
17
17
  description: 'Base blocks for Nuxt',
18
18
  hidden: true,
19
19
  name: 'blocks',
@@ -22,4 +22,4 @@ module.exports = {
22
22
  return 'blocks';
23
23
  }),
24
24
  };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Jsb2Nrcy9ibG9ja3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDYixLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUsc0JBQXNCO0lBQ25DLE1BQU0sRUFBRSxJQUFJO0lBQ1osSUFBSSxFQUFFLFFBQVE7SUFDZCxHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7UUFDM0MsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDLENBQUE7Q0FDSixDQUFDIn0=
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Jsb2Nrcy9ibG9ja3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDYixLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDYixXQUFXLEVBQUUsc0JBQXNCO0lBQ25DLE1BQU0sRUFBRSxJQUFJO0lBQ1osSUFBSSxFQUFFLFFBQVE7SUFDZCxHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7UUFDM0MsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDLENBQUE7Q0FDSixDQUFDIn0=