@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.
- package/README.md +30 -0
- package/bin/postinstall.js +156 -0
- package/build/cli.js +11 -1
- package/build/commands/blocks/add.js +28 -306
- package/build/commands/blocks/blocks.js +2 -2
- package/build/commands/claude/claude.js +2 -2
- package/build/commands/cli/cli.js +2 -2
- package/build/commands/cli/create.js +69 -21
- package/build/commands/cli/rename.js +11 -5
- package/build/commands/completion.js +311 -0
- package/build/commands/components/add.js +25 -219
- package/build/commands/components/components.js +2 -2
- package/build/commands/config/help.js +5 -2
- package/build/commands/config/init.js +20 -5
- package/build/commands/config/show.js +4 -1
- package/build/commands/config/validate.js +27 -2
- package/build/commands/deployment/create.js +18 -5
- package/build/commands/deployment/deployment.js +2 -2
- package/build/commands/docs/open.js +4 -1
- package/build/commands/doctor.js +285 -0
- package/build/commands/frontend/angular.js +88 -28
- package/build/commands/frontend/nuxt.js +2 -1
- package/build/commands/fullstack/init.js +58 -19
- package/build/commands/git/clean.js +60 -11
- package/build/commands/git/clear.js +17 -11
- package/build/commands/git/create.js +51 -10
- package/build/commands/git/force-pull.js +42 -15
- package/build/commands/git/get.js +14 -15
- package/build/commands/git/install-scripts.js +6 -6
- package/build/commands/git/rebase.js +40 -12
- package/build/commands/git/rename.js +33 -13
- package/build/commands/git/reset.js +48 -13
- package/build/commands/git/squash.js +67 -26
- package/build/commands/git/undo.js +33 -13
- package/build/commands/git/update.js +59 -6
- package/build/commands/history.js +75 -0
- package/build/commands/mongodb/collection-export.js +2 -2
- package/build/commands/mongodb/mongodb.js +2 -2
- package/build/commands/mongodb/s3-restore.js +2 -2
- package/build/commands/npm/reinit.js +11 -12
- package/build/commands/npm/update.js +6 -2
- package/build/commands/qdrant/delete.js +6 -2
- package/build/commands/qdrant/qdrant.js +2 -2
- package/build/commands/qdrant/stats.js +5 -2
- package/build/commands/redis/redis.js +2 -2
- package/build/commands/server/add-property.js +8 -12
- package/build/commands/server/create-secret.js +6 -3
- package/build/commands/server/create.js +39 -21
- package/build/commands/server/module.js +22 -16
- package/build/commands/server/object.js +7 -11
- package/build/commands/server/set-secrets.js +6 -3
- package/build/commands/server/test.js +3 -3
- package/build/commands/starter/chrome-extension.js +3 -3
- package/build/commands/status.js +198 -0
- package/build/commands/templates/list.js +107 -0
- package/build/commands/templates/llm.js +8 -3
- package/build/commands/templates/templates.js +2 -2
- package/build/commands/tools/jwt-read.js +2 -2
- package/build/commands/tools/regex.js +5 -2
- package/build/commands/typescript/create.js +84 -21
- package/build/commands/typescript/playground.js +5 -2
- package/build/extensions/config.js +37 -1
- package/build/extensions/git.js +57 -2
- package/build/extensions/history.js +118 -0
- package/build/extensions/logger.js +189 -0
- package/build/lib/nuxt-base-components.js +249 -0
- package/build/lib/validation.js +204 -0
- package/build/templates/completion/bash.sh.ejs +92 -0
- package/build/templates/completion/fish.sh.ejs +77 -0
- package/build/templates/completion/zsh.sh.ejs +119 -0
- package/docs/commands.md +464 -14
- package/docs/lt.config.md +138 -8
- 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,
|
|
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
|
|
13
|
-
const
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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(
|
|
29
|
-
return __awaiter(this,
|
|
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
|
|
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
|
|
48
|
-
selectedBlock =
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
82
|
-
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Jsb2Nrcy9hZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQSx5RUFBaUY7QUFFakYsTUFBTSxlQUFlLEdBQW1CO0lBQ3RDLFdBQVcsRUFBRSxnQkFBZ0I7SUFDN0IsSUFBSSxFQUFFLEtBQUs7SUFDWCxHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7O1FBQzdDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXZDLHFCQUFxQjtRQUNyQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFckMsNkVBQTZFO1FBQzdFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDcEMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUztZQUN0QyxhQUFhLEVBQUUsTUFBQSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxRQUFRLDBDQUFFLE1BQU0sMENBQUUsR0FBRztZQUM5QyxNQUFNLEVBQUUsUUFBUTtTQUNqQixDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ25DLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLGVBQWUsU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ2xELENBQUMsQ0FBQTtDQUNGLENBQUM7QUFFRixTQUFlLFFBQVE7eURBQUMsT0FBK0IsRUFBRSxTQUE2QixFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQ3ZHLE1BQU0sRUFBRSxL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
|
|
@@ -13,7 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
* Blocks commands
|
|
14
14
|
*/
|
|
15
15
|
module.exports = {
|
|
16
|
-
alias: ['
|
|
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,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Jsb2Nrcy9ibG9ja3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDYixLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDYixXQUFXLEVBQUUsc0JBQXNCO0lBQ25DLE1BQU0sRUFBRSxJQUFJO0lBQ1osSUFBSSxFQUFFLFFBQVE7SUFDZCxHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7UUFDM0MsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDLENBQUE7Q0FDSixDQUFDIn0=
|