versacompiler 2.0.8 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/compiler/compile.js +2520 -26
- package/dist/compiler/error-reporter.js +467 -38
- package/dist/compiler/linter.js +72 -1
- package/dist/compiler/minify.js +272 -1
- package/dist/compiler/minifyTemplate.js +230 -0
- package/dist/compiler/module-resolution-optimizer.js +844 -1
- package/dist/compiler/parser.js +336 -1
- package/dist/compiler/performance-monitor.js +204 -56
- package/dist/compiler/tailwindcss.js +39 -1
- package/dist/compiler/transform-optimizer.js +392 -1
- package/dist/compiler/transformTStoJS.js +16 -1
- package/dist/compiler/transforms.js +554 -1
- package/dist/compiler/typescript-compiler.js +172 -2
- package/dist/compiler/typescript-error-parser.js +281 -10
- package/dist/compiler/typescript-manager.js +304 -2
- package/dist/compiler/typescript-sync-validator.js +295 -31
- package/dist/compiler/typescript-worker-pool.js +936 -1
- package/dist/compiler/typescript-worker-thread.cjs +466 -41
- package/dist/compiler/typescript-worker.js +339 -1
- package/dist/compiler/vuejs.js +396 -37
- package/dist/hrm/VueHRM.js +359 -1
- package/dist/hrm/errorScreen.js +83 -1
- package/dist/hrm/getInstanciaVue.js +313 -1
- package/dist/hrm/initHRM.js +586 -1
- package/dist/main.js +353 -7
- package/dist/servicios/browserSync.js +587 -5
- package/dist/servicios/file-watcher.js +425 -4
- package/dist/servicios/logger.js +63 -3
- package/dist/servicios/readConfig.js +399 -105
- package/dist/utils/excluded-modules.js +37 -1
- package/dist/utils/module-resolver.js +466 -1
- package/dist/utils/promptUser.js +48 -2
- package/dist/utils/proxyValidator.js +68 -1
- package/dist/utils/resolve-bin.js +58 -1
- package/dist/utils/utils.js +21 -1
- package/dist/utils/vue-types-setup.js +435 -241
- package/dist/wrappers/eslint-node.js +147 -1
- package/dist/wrappers/oxlint-node.js +122 -1
- package/dist/wrappers/tailwind-node.js +94 -1
- package/package.json +39 -42
|
@@ -1 +1,147 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as path from 'node:path';
|
|
2
|
+
import { cwd } from 'node:process'; // Añadir importación de cwd
|
|
3
|
+
import { execa } from 'execa';
|
|
4
|
+
import { resolveBin } from '../utils/resolve-bin.js';
|
|
5
|
+
export class ESLintNode {
|
|
6
|
+
binPath;
|
|
7
|
+
fix;
|
|
8
|
+
configFile;
|
|
9
|
+
quiet;
|
|
10
|
+
deny;
|
|
11
|
+
allow;
|
|
12
|
+
noIgnore;
|
|
13
|
+
ignorePath;
|
|
14
|
+
ignorePattern;
|
|
15
|
+
formats;
|
|
16
|
+
additionalArgs;
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.binPath = options.binPath || ESLintNode.getDefaultBinPath();
|
|
19
|
+
this.fix = options.fix || false;
|
|
20
|
+
this.configFile = options.configFile;
|
|
21
|
+
this.quiet = options.quiet || false;
|
|
22
|
+
this.deny = options.deny;
|
|
23
|
+
this.allow = options.allow;
|
|
24
|
+
this.noIgnore = options.noIgnore || false;
|
|
25
|
+
this.ignorePath = options.ignorePath;
|
|
26
|
+
this.ignorePattern = options.ignorePattern;
|
|
27
|
+
this.formats = options.formats || ['json']; // Por defecto, solo 'json'
|
|
28
|
+
this.additionalArgs = options.additionalArgs;
|
|
29
|
+
}
|
|
30
|
+
static getDefaultBinPath() {
|
|
31
|
+
try {
|
|
32
|
+
return resolveBin('eslint', { executable: 'eslint' });
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error("Error al resolver el binario de ESLint. Asegúrate de que 'eslint' esté instalado y en el PATH, o provee la opción 'binPath'.", error);
|
|
36
|
+
throw new Error('Error al resolver el binario de ESLint.', {
|
|
37
|
+
cause: error,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async version() {
|
|
42
|
+
const { stdout: version } = await execa(this.binPath, ['--version']);
|
|
43
|
+
return version;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Ejecuta ESLint para los formatos configurados y devuelve los resultados.
|
|
47
|
+
* @param paths Rutas o patrones glob para los archivos a lint.
|
|
48
|
+
* @returns Un objeto donde cada clave es un formato y el valor es el resultado (parseado si es JSON).
|
|
49
|
+
*/
|
|
50
|
+
async run(paths = []) {
|
|
51
|
+
const results = {};
|
|
52
|
+
const targetPaths = paths.length > 0 ? paths : ['.'];
|
|
53
|
+
const projectRoot = cwd(); // Obtener la ruta raíz del proyecto
|
|
54
|
+
await Promise.all(this.formats.map(async (format) => {
|
|
55
|
+
const cliArgs = this.toCliArgs(format, targetPaths);
|
|
56
|
+
try {
|
|
57
|
+
const { stdout, stderr, exitCode } = await execa(this.binPath, cliArgs, { reject: false });
|
|
58
|
+
if (exitCode !== 0 &&
|
|
59
|
+
format !== 'json' &&
|
|
60
|
+
format !== 'sarif') {
|
|
61
|
+
if (stderr && !stdout) {
|
|
62
|
+
console.warn(`ESLint para formato '${format}' finalizó con código ${exitCode} y stderr: ${stderr}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (format === 'json') {
|
|
66
|
+
// ESLint devuelve un array de archivos con mensajes anidados
|
|
67
|
+
// Necesitamos aplanar esta estructura para que coincida con lo que espera el compilador
|
|
68
|
+
const eslintOutput = JSON.parse(stdout || '[]');
|
|
69
|
+
const flattenedResults = [];
|
|
70
|
+
for (const fileResult of eslintOutput) {
|
|
71
|
+
for (const message of fileResult.messages || []) {
|
|
72
|
+
// Calcular ruta relativa
|
|
73
|
+
const relativeFilePath = path
|
|
74
|
+
.relative(projectRoot, fileResult.filePath)
|
|
75
|
+
.replace(/\\/g, '/');
|
|
76
|
+
flattenedResults.push({
|
|
77
|
+
filePath: relativeFilePath, // Usar ruta relativa
|
|
78
|
+
file: relativeFilePath, // Alias para compatibilidad
|
|
79
|
+
message: message.message,
|
|
80
|
+
severity: message.severity,
|
|
81
|
+
ruleId: message.ruleId,
|
|
82
|
+
line: message.line,
|
|
83
|
+
column: message.column,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
results[format] = flattenedResults;
|
|
88
|
+
}
|
|
89
|
+
else if (format === 'sarif') {
|
|
90
|
+
results[format] = JSON.parse(stdout || '{}');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
results[format] = stdout;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error(`Error ejecutando ESLint para formato '${format}':`, error.shortMessage || error.message);
|
|
98
|
+
results[format] = {
|
|
99
|
+
error: error.shortMessage || error.message,
|
|
100
|
+
details: error,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}));
|
|
104
|
+
return results;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Construye el array de argumentos para pasar al CLI de ESLint para un formato específico.
|
|
108
|
+
*/
|
|
109
|
+
toCliArgs(format, paths) {
|
|
110
|
+
const args = [];
|
|
111
|
+
// Opciones directas
|
|
112
|
+
if (this.fix)
|
|
113
|
+
args.push('--fix');
|
|
114
|
+
if (this.configFile)
|
|
115
|
+
args.push('--config', this.configFile);
|
|
116
|
+
if (this.quiet)
|
|
117
|
+
args.push('--quiet');
|
|
118
|
+
if (this.noIgnore)
|
|
119
|
+
args.push('--no-ignore');
|
|
120
|
+
if (this.ignorePath)
|
|
121
|
+
args.push('--ignore-path', this.ignorePath);
|
|
122
|
+
if (this.deny)
|
|
123
|
+
this.deny.forEach(rule => args.push('--rule', `${rule}:error`));
|
|
124
|
+
if (this.allow)
|
|
125
|
+
this.allow.forEach(rule => args.push('--rule', `${rule}:off`));
|
|
126
|
+
if (this.ignorePattern)
|
|
127
|
+
this.ignorePattern.forEach(pattern => args.push('--ignore-pattern', pattern));
|
|
128
|
+
// Formato
|
|
129
|
+
if (format !== 'stylish') {
|
|
130
|
+
args.push('--format', format);
|
|
131
|
+
}
|
|
132
|
+
// Argumentos adicionales
|
|
133
|
+
if (this.additionalArgs)
|
|
134
|
+
args.push(...this.additionalArgs);
|
|
135
|
+
// Rutas/patrones
|
|
136
|
+
args.push(...paths);
|
|
137
|
+
return args;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Método estático para crear una instancia de ESLintNode, similar al código de referencia.
|
|
141
|
+
* @param options Opciones de configuración.
|
|
142
|
+
*/
|
|
143
|
+
static create(options) {
|
|
144
|
+
return new ESLintNode(options);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=eslint-node.js.map
|
|
@@ -1 +1,122 @@
|
|
|
1
|
-
import{execa
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
import { resolveBin } from '../utils/resolve-bin.js';
|
|
3
|
+
export class OxlintNode {
|
|
4
|
+
binPath;
|
|
5
|
+
fix;
|
|
6
|
+
configFile;
|
|
7
|
+
tsconfigPath;
|
|
8
|
+
quiet;
|
|
9
|
+
deny;
|
|
10
|
+
allow;
|
|
11
|
+
noIgnore;
|
|
12
|
+
ignorePath;
|
|
13
|
+
ignorePattern;
|
|
14
|
+
formats;
|
|
15
|
+
additionalArgs;
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
this.binPath = options.binPath || OxlintNode.getDefaultBinPath();
|
|
18
|
+
this.fix = options.fix || false;
|
|
19
|
+
this.configFile = options.configFile;
|
|
20
|
+
this.tsconfigPath = options.tsconfigPath;
|
|
21
|
+
this.quiet = options.quiet || false;
|
|
22
|
+
this.deny = options.deny;
|
|
23
|
+
this.allow = options.allow;
|
|
24
|
+
this.noIgnore = options.noIgnore || false;
|
|
25
|
+
this.ignorePath = options.ignorePath;
|
|
26
|
+
this.ignorePattern = options.ignorePattern;
|
|
27
|
+
this.formats = options.formats || ['json']; // Por defecto, solo 'json'
|
|
28
|
+
this.additionalArgs = options.additionalArgs;
|
|
29
|
+
}
|
|
30
|
+
static getDefaultBinPath() {
|
|
31
|
+
try {
|
|
32
|
+
return resolveBin('oxlint', { executable: 'oxlint' });
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error("Error al resolver el binario de Oxlint. Asegúrate de que 'oxlint' esté instalado y en el PATH, o provee la opción 'binPath'.", error);
|
|
36
|
+
throw new Error('Error al resolver el binario de Oxlint.', {
|
|
37
|
+
cause: error,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async version() {
|
|
42
|
+
const { stdout: version } = await execa(this.binPath, ['--version']);
|
|
43
|
+
return version;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Ejecuta Oxlint para los formatos configurados y devuelve los resultados.
|
|
47
|
+
* @param paths Rutas o patrones glob para los archivos a lint.
|
|
48
|
+
* @returns Un objeto donde cada clave es un formato y el valor es el resultado (parseado si es JSON).
|
|
49
|
+
*/
|
|
50
|
+
async run(paths = []) {
|
|
51
|
+
const results = {};
|
|
52
|
+
const targetPaths = paths.length > 0 ? paths : ['.'];
|
|
53
|
+
await Promise.all(this.formats.map(async (format) => {
|
|
54
|
+
const cliArgs = this.toCliArgs(format, targetPaths);
|
|
55
|
+
try {
|
|
56
|
+
const { stdout, stderr, exitCode } = await execa(this.binPath, cliArgs, { reject: false });
|
|
57
|
+
if (exitCode !== 0 &&
|
|
58
|
+
format !== 'json' &&
|
|
59
|
+
format !== 'sarif') {
|
|
60
|
+
if (stderr && !stdout) {
|
|
61
|
+
console.warn(`Oxlint para formato '${format}' finalizó con código ${exitCode} y stderr: ${stderr}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
results[format] =
|
|
65
|
+
format === 'json' || format === 'sarif'
|
|
66
|
+
? JSON.parse(stdout || '{}')
|
|
67
|
+
: stdout;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.error(`Error ejecutando Oxlint para formato '${format}':`, error.shortMessage || error.message);
|
|
71
|
+
results[format] = {
|
|
72
|
+
error: error.shortMessage || error.message,
|
|
73
|
+
details: error,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}));
|
|
77
|
+
return results;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Construye el array de argumentos para pasar al CLI de Oxlint para un formato específico.
|
|
81
|
+
*/
|
|
82
|
+
toCliArgs(format, paths) {
|
|
83
|
+
const args = [];
|
|
84
|
+
// Opciones directas
|
|
85
|
+
if (this.fix)
|
|
86
|
+
args.push('--fix');
|
|
87
|
+
if (this.configFile)
|
|
88
|
+
args.push('--config', this.configFile);
|
|
89
|
+
if (this.tsconfigPath)
|
|
90
|
+
args.push('--tsconfig', this.tsconfigPath); // Añadido
|
|
91
|
+
if (this.quiet)
|
|
92
|
+
args.push('--quiet');
|
|
93
|
+
if (this.noIgnore)
|
|
94
|
+
args.push('--no-ignore');
|
|
95
|
+
if (this.ignorePath)
|
|
96
|
+
args.push('--ignore-path', this.ignorePath);
|
|
97
|
+
if (this.deny)
|
|
98
|
+
this.deny.forEach(rule => args.push('--deny', rule));
|
|
99
|
+
if (this.allow)
|
|
100
|
+
this.allow.forEach(rule => args.push('--allow', rule));
|
|
101
|
+
if (this.ignorePattern)
|
|
102
|
+
this.ignorePattern.forEach(pattern => args.push('--ignore-pattern', pattern));
|
|
103
|
+
// Formato
|
|
104
|
+
if (format !== 'default') {
|
|
105
|
+
args.push('--format', format);
|
|
106
|
+
}
|
|
107
|
+
// Argumentos adicionales
|
|
108
|
+
if (this.additionalArgs)
|
|
109
|
+
args.push(...this.additionalArgs);
|
|
110
|
+
// Rutas/patrones
|
|
111
|
+
args.push(...paths);
|
|
112
|
+
return args;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Método estático para crear una instancia de OxlintNode, similar al código de referencia.
|
|
116
|
+
* @param options Opciones de configuración.
|
|
117
|
+
*/
|
|
118
|
+
static create(options) {
|
|
119
|
+
return new OxlintNode(options);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=oxlint-node.js.map
|
|
@@ -1 +1,94 @@
|
|
|
1
|
-
import{execa
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
import { resolveBin } from '../utils/resolve-bin.js';
|
|
3
|
+
export class TailwindNode {
|
|
4
|
+
binPath;
|
|
5
|
+
input;
|
|
6
|
+
output;
|
|
7
|
+
content;
|
|
8
|
+
minify;
|
|
9
|
+
additionalArgs;
|
|
10
|
+
configFile;
|
|
11
|
+
/**
|
|
12
|
+
* Crea una instancia de TailwindNode.
|
|
13
|
+
* @param options Opciones para la compilación.
|
|
14
|
+
*/
|
|
15
|
+
constructor(options) {
|
|
16
|
+
if (!options.input) {
|
|
17
|
+
throw new Error('La opción "input" es requerida.');
|
|
18
|
+
}
|
|
19
|
+
if (!options.output) {
|
|
20
|
+
throw new Error('La opción "output" es requerida.');
|
|
21
|
+
}
|
|
22
|
+
this.binPath = options.binPath || TailwindNode.getDefaultBinPath();
|
|
23
|
+
this.input = options.input;
|
|
24
|
+
this.output = options.output;
|
|
25
|
+
this.content = options.content;
|
|
26
|
+
this.minify = options.minify || false;
|
|
27
|
+
this.additionalArgs = options.additionalArgs;
|
|
28
|
+
this.configFile = options.configFile;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Intenta resolver la ruta al ejecutable de Tailwind CSS.
|
|
32
|
+
*/
|
|
33
|
+
static getDefaultBinPath() {
|
|
34
|
+
try {
|
|
35
|
+
return resolveBin('tailwindcss', {
|
|
36
|
+
executable: 'tailwindcss',
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error("Error al resolver el binario de Tailwind CSS. Asegúrate de que esté instalado y en el PATH, o provee la opción 'binPath'.", error);
|
|
41
|
+
throw new Error('Error al resolver el binario de Tailwind CSS.', {
|
|
42
|
+
cause: error,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Ejecuta el proceso de compilación de Tailwind CSS.
|
|
48
|
+
* @returns Una promesa que resuelve con el resultado de la compilación.
|
|
49
|
+
*/
|
|
50
|
+
async run() {
|
|
51
|
+
const cliArgs = this.toCliArgs();
|
|
52
|
+
try {
|
|
53
|
+
const result = await execa(this.binPath, cliArgs);
|
|
54
|
+
return {
|
|
55
|
+
success: true,
|
|
56
|
+
message: `Tailwind CSS compilado exitosamente desde ${this.input} a ${this.output}`,
|
|
57
|
+
details: result,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
const execaError = error; // error de execa
|
|
62
|
+
console.error(`Error en la compilación de Tailwind CSS: ${execaError.message}`);
|
|
63
|
+
if (execaError.stderr) {
|
|
64
|
+
console.error(`Stderr: ${execaError.stderr}`);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
message: `Error en la compilación de Tailwind CSS: ${execaError.shortMessage || execaError.message}`,
|
|
69
|
+
details: execaError,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Construye el array de argumentos para pasar al CLI de Tailwind CSS.
|
|
75
|
+
*/
|
|
76
|
+
toCliArgs() {
|
|
77
|
+
const args = ['-i', this.input, '-o', this.output];
|
|
78
|
+
if (this.configFile) {
|
|
79
|
+
args.push('--config', this.configFile);
|
|
80
|
+
}
|
|
81
|
+
if (this.content && this.content.length > 0) {
|
|
82
|
+
args.push('--content');
|
|
83
|
+
args.push(...this.content);
|
|
84
|
+
}
|
|
85
|
+
if (this.minify) {
|
|
86
|
+
args.push('--minify');
|
|
87
|
+
}
|
|
88
|
+
if (this.additionalArgs && this.additionalArgs.length > 0) {
|
|
89
|
+
args.push(...this.additionalArgs);
|
|
90
|
+
}
|
|
91
|
+
return args;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=tailwind-node.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "versacompiler",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Una herramienta para compilar y minificar archivos .vue, .js y .ts para proyectos de Vue 3 con soporte para TypeScript.",
|
|
5
5
|
"main": "dist/main.js",
|
|
6
6
|
"bin": {
|
|
@@ -18,16 +18,14 @@
|
|
|
18
18
|
"scripts": {
|
|
19
19
|
"dev": "tsx --watch src/main.ts --watch --verbose --tailwind",
|
|
20
20
|
"file": "tsx src/main.ts ",
|
|
21
|
-
"compile": "tsx src/main.ts --all",
|
|
22
|
-
"test": "
|
|
21
|
+
"compile": "tsx src/main.ts --all --cc --co -y --verbose --prod",
|
|
22
|
+
"test": "vitest run",
|
|
23
|
+
"test:watch": "vitest",
|
|
24
|
+
"test:ui": "vitest --ui",
|
|
25
|
+
"test:coverage": "vitest run --coverage",
|
|
23
26
|
"build": "tsx src/main.ts --all -t --cc --co -y --verbose",
|
|
24
27
|
"lint": "oxlint --fix --config .oxlintrc.json",
|
|
25
|
-
"lint:eslint": "eslint --ext .js,.ts,.vue src/ --fix"
|
|
26
|
-
"perf": "scripts\\run-performance.bat",
|
|
27
|
-
"perf:test": "jest tests/performance.test.ts --config jest.config.js --testTimeout=300000",
|
|
28
|
-
"perf:report": "node scripts/generate-performance-report.js",
|
|
29
|
-
"perf:open": "start performance-results/dashboard.html",
|
|
30
|
-
"perf:clean": "rmdir /s /q performance-results 2>nul || echo 'Performance results cleaned'"
|
|
28
|
+
"lint:eslint": "eslint --ext .js,.ts,.vue src/ --fix"
|
|
31
29
|
},
|
|
32
30
|
"keywords": [
|
|
33
31
|
"vue",
|
|
@@ -49,61 +47,60 @@
|
|
|
49
47
|
},
|
|
50
48
|
"homepage": "https://github.com/kriollo/versaCompiler#readme",
|
|
51
49
|
"dependencies": {
|
|
52
|
-
"@vue/compiler-dom": "^3.5.
|
|
53
|
-
"@vue/reactivity": "^3.5.
|
|
54
|
-
"@vue/runtime-core": "^3.5.
|
|
55
|
-
"@vue/runtime-dom": "^3.5.
|
|
50
|
+
"@vue/compiler-dom": "^3.5.24",
|
|
51
|
+
"@vue/reactivity": "^3.5.24",
|
|
52
|
+
"@vue/runtime-core": "^3.5.24",
|
|
53
|
+
"@vue/runtime-dom": "^3.5.24",
|
|
56
54
|
"browser-sync": "^3.0.4",
|
|
57
|
-
"chalk": "5.6.
|
|
55
|
+
"chalk": "5.6.2",
|
|
58
56
|
"chokidar": "^4.0.3",
|
|
59
57
|
"enhanced-resolve": "^5.18.3",
|
|
60
58
|
"execa": "^9.6.0",
|
|
61
59
|
"find-root": "^1.1.0",
|
|
62
|
-
"fs-extra": "^11.3.
|
|
60
|
+
"fs-extra": "^11.3.2",
|
|
63
61
|
"get-port": "^7.1.0",
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"oxc-
|
|
67
|
-
"oxc-
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
62
|
+
"minify-html-literals": "^1.3.5",
|
|
63
|
+
"minimatch": "^10.1.1",
|
|
64
|
+
"oxc-minify": "^0.97.0",
|
|
65
|
+
"oxc-parser": "^0.97.0",
|
|
66
|
+
"oxc-transform": "^0.97.0",
|
|
67
|
+
"resolve": "^1.22.11",
|
|
68
|
+
"tsx": "^4.20.6",
|
|
69
|
+
"typescript": "^5.9.3",
|
|
70
|
+
"vue": "3.5.24",
|
|
72
71
|
"yargs": "^18.0.0"
|
|
73
72
|
},
|
|
74
73
|
"devDependencies": {
|
|
75
74
|
"@eslint/eslintrc": "^3.3.1",
|
|
76
|
-
"@tailwindcss/cli": "^4.1.
|
|
77
|
-
"@types/browser-sync": "^2.29.
|
|
75
|
+
"@tailwindcss/cli": "^4.1.17",
|
|
76
|
+
"@types/browser-sync": "^2.29.1",
|
|
78
77
|
"@types/find-root": "^1.1.4",
|
|
79
78
|
"@types/fs-extra": "^11.0.4",
|
|
80
79
|
"@types/jest": "^30.0.0",
|
|
81
80
|
"@types/mocha": "^10.0.10",
|
|
82
|
-
"@types/node": "^24.
|
|
81
|
+
"@types/node": "^24.10.1",
|
|
83
82
|
"@types/resolve": "^1.20.6",
|
|
84
|
-
"@types/yargs": "^17.0.
|
|
85
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
86
|
-
"@typescript-eslint/parser": "^8.
|
|
83
|
+
"@types/yargs": "^17.0.35",
|
|
84
|
+
"@typescript-eslint/eslint-plugin": "^8.46.4",
|
|
85
|
+
"@typescript-eslint/parser": "^8.46.4",
|
|
86
|
+
"@vitest/coverage-v8": "^4.0.9",
|
|
87
|
+
"@vitest/ui": "^4.0.9",
|
|
87
88
|
"@vue/eslint-config-typescript": "^14.6.0",
|
|
88
89
|
"@vue/test-utils": "^2.4.6",
|
|
89
90
|
"code-tag": "^1.2.0",
|
|
90
|
-
"eslint": "^9.
|
|
91
|
+
"eslint": "^9.39.1",
|
|
91
92
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
92
93
|
"eslint-plugin-import": "^2.32.0",
|
|
93
|
-
"eslint-plugin-oxlint": "^1.
|
|
94
|
+
"eslint-plugin-oxlint": "^1.28.0",
|
|
94
95
|
"eslint-plugin-promise": "^7.2.1",
|
|
95
|
-
"eslint-plugin-unicorn": "^
|
|
96
|
-
"eslint-plugin-vue": "^10.
|
|
97
|
-
"
|
|
98
|
-
"jest": "^30.1.1",
|
|
99
|
-
"jest-environment-jsdom": "30.1.1",
|
|
100
|
-
"jest-environment-node": "30.1.1",
|
|
101
|
-
"oxlint": "^1.13.0",
|
|
96
|
+
"eslint-plugin-unicorn": "^62.0.0",
|
|
97
|
+
"eslint-plugin-vue": "^10.5.1",
|
|
98
|
+
"oxlint": "^1.28.0",
|
|
102
99
|
"prettier": "3.6.2",
|
|
103
|
-
"rimraf": "^6.0
|
|
104
|
-
"sweetalert2": "^11.
|
|
105
|
-
"tailwindcss": "^4.1.
|
|
106
|
-
"
|
|
100
|
+
"rimraf": "^6.1.0",
|
|
101
|
+
"sweetalert2": "^11.26.3",
|
|
102
|
+
"tailwindcss": "^4.1.17",
|
|
103
|
+
"vitest": "^4.0.9",
|
|
107
104
|
"vue-eslint-parser": "^10.2.0"
|
|
108
105
|
},
|
|
109
106
|
"packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b"
|