@vm0/cli 1.16.0 → 2.0.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/index.js +188 -135
- package/package.json +2 -2
package/index.js
CHANGED
|
@@ -13446,15 +13446,96 @@ var initCommand = new Command3().name("init").description("Initialize a volume i
|
|
|
13446
13446
|
// src/commands/volume/push.ts
|
|
13447
13447
|
import { Command as Command4 } from "commander";
|
|
13448
13448
|
import chalk6 from "chalk";
|
|
13449
|
-
import
|
|
13449
|
+
import path4 from "path";
|
|
13450
|
+
import * as fs2 from "fs";
|
|
13451
|
+
import * as os from "os";
|
|
13452
|
+
import * as tar2 from "tar";
|
|
13453
|
+
|
|
13454
|
+
// src/lib/file-utils.ts
|
|
13450
13455
|
import * as fs from "fs";
|
|
13451
|
-
import
|
|
13456
|
+
import * as path3 from "path";
|
|
13457
|
+
import * as tar from "tar";
|
|
13458
|
+
function excludeVm0Filter(filePath) {
|
|
13459
|
+
const shouldExclude = filePath === ".vm0" || filePath.startsWith(".vm0/") || filePath.startsWith("./.vm0");
|
|
13460
|
+
return !shouldExclude;
|
|
13461
|
+
}
|
|
13462
|
+
function listTarFiles(tarPath) {
|
|
13463
|
+
return new Promise((resolve, reject) => {
|
|
13464
|
+
const files = [];
|
|
13465
|
+
tar.list({
|
|
13466
|
+
file: tarPath,
|
|
13467
|
+
onReadEntry: (entry) => {
|
|
13468
|
+
if (entry.type === "File") {
|
|
13469
|
+
files.push(entry.path);
|
|
13470
|
+
}
|
|
13471
|
+
}
|
|
13472
|
+
}).then(() => resolve(files)).catch(reject);
|
|
13473
|
+
});
|
|
13474
|
+
}
|
|
13475
|
+
async function listLocalFiles(dir, excludeDirs = [".vm0"]) {
|
|
13476
|
+
const files = [];
|
|
13477
|
+
async function walkDir(currentDir, relativePath = "") {
|
|
13478
|
+
const entries = await fs.promises.readdir(currentDir, {
|
|
13479
|
+
withFileTypes: true
|
|
13480
|
+
});
|
|
13481
|
+
for (const entry of entries) {
|
|
13482
|
+
const entryRelativePath = relativePath ? path3.join(relativePath, entry.name) : entry.name;
|
|
13483
|
+
if (entry.isDirectory()) {
|
|
13484
|
+
if (!excludeDirs.includes(entry.name)) {
|
|
13485
|
+
await walkDir(path3.join(currentDir, entry.name), entryRelativePath);
|
|
13486
|
+
}
|
|
13487
|
+
} else {
|
|
13488
|
+
files.push(entryRelativePath);
|
|
13489
|
+
}
|
|
13490
|
+
}
|
|
13491
|
+
}
|
|
13492
|
+
await walkDir(dir);
|
|
13493
|
+
return files;
|
|
13494
|
+
}
|
|
13495
|
+
async function removeExtraFiles(dir, remoteFiles, excludeDirs = [".vm0"]) {
|
|
13496
|
+
const localFiles = await listLocalFiles(dir, excludeDirs);
|
|
13497
|
+
let removedCount = 0;
|
|
13498
|
+
for (const localFile of localFiles) {
|
|
13499
|
+
const normalizedPath = localFile.replace(/\\/g, "/");
|
|
13500
|
+
if (!remoteFiles.has(normalizedPath)) {
|
|
13501
|
+
const fullPath = path3.join(dir, localFile);
|
|
13502
|
+
await fs.promises.unlink(fullPath);
|
|
13503
|
+
removedCount++;
|
|
13504
|
+
}
|
|
13505
|
+
}
|
|
13506
|
+
await removeEmptyDirs(dir, excludeDirs);
|
|
13507
|
+
return removedCount;
|
|
13508
|
+
}
|
|
13509
|
+
async function removeEmptyDirs(dir, excludeDirs = [".vm0"]) {
|
|
13510
|
+
const entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
13511
|
+
let isEmpty = true;
|
|
13512
|
+
for (const entry of entries) {
|
|
13513
|
+
const fullPath = path3.join(dir, entry.name);
|
|
13514
|
+
if (entry.isDirectory()) {
|
|
13515
|
+
if (excludeDirs.includes(entry.name)) {
|
|
13516
|
+
isEmpty = false;
|
|
13517
|
+
} else {
|
|
13518
|
+
const subDirEmpty = await removeEmptyDirs(fullPath, excludeDirs);
|
|
13519
|
+
if (subDirEmpty) {
|
|
13520
|
+
await fs.promises.rmdir(fullPath);
|
|
13521
|
+
} else {
|
|
13522
|
+
isEmpty = false;
|
|
13523
|
+
}
|
|
13524
|
+
}
|
|
13525
|
+
} else {
|
|
13526
|
+
isEmpty = false;
|
|
13527
|
+
}
|
|
13528
|
+
}
|
|
13529
|
+
return isEmpty;
|
|
13530
|
+
}
|
|
13531
|
+
|
|
13532
|
+
// src/commands/volume/push.ts
|
|
13452
13533
|
async function getAllFiles(dirPath, baseDir = dirPath) {
|
|
13453
13534
|
const files = [];
|
|
13454
|
-
const entries = await
|
|
13535
|
+
const entries = await fs2.promises.readdir(dirPath, { withFileTypes: true });
|
|
13455
13536
|
for (const entry of entries) {
|
|
13456
|
-
const fullPath =
|
|
13457
|
-
const relativePath =
|
|
13537
|
+
const fullPath = path4.join(dirPath, entry.name);
|
|
13538
|
+
const relativePath = path4.relative(baseDir, fullPath);
|
|
13458
13539
|
if (relativePath.startsWith(".vm0")) {
|
|
13459
13540
|
continue;
|
|
13460
13541
|
}
|
|
@@ -13491,7 +13572,7 @@ var pushCommand = new Command4().name("push").description("Push local files to c
|
|
|
13491
13572
|
const files = await getAllFiles(cwd);
|
|
13492
13573
|
let totalSize = 0;
|
|
13493
13574
|
for (const file2 of files) {
|
|
13494
|
-
const stats = await
|
|
13575
|
+
const stats = await fs2.promises.stat(file2);
|
|
13495
13576
|
totalSize += stats.size;
|
|
13496
13577
|
}
|
|
13497
13578
|
if (files.length === 0) {
|
|
@@ -13502,14 +13583,34 @@ var pushCommand = new Command4().name("push").description("Push local files to c
|
|
|
13502
13583
|
);
|
|
13503
13584
|
}
|
|
13504
13585
|
console.log(chalk6.gray("Compressing files..."));
|
|
13505
|
-
const
|
|
13506
|
-
|
|
13507
|
-
|
|
13508
|
-
|
|
13586
|
+
const tmpDir = fs2.mkdtempSync(path4.join(os.tmpdir(), "vm0-"));
|
|
13587
|
+
const tarPath = path4.join(tmpDir, "volume.tar.gz");
|
|
13588
|
+
const relativePaths = files.map((file2) => path4.relative(cwd, file2));
|
|
13589
|
+
if (relativePaths.length > 0) {
|
|
13590
|
+
await tar2.create(
|
|
13591
|
+
{
|
|
13592
|
+
gzip: true,
|
|
13593
|
+
file: tarPath,
|
|
13594
|
+
cwd
|
|
13595
|
+
},
|
|
13596
|
+
relativePaths
|
|
13597
|
+
);
|
|
13598
|
+
} else {
|
|
13599
|
+
await tar2.create(
|
|
13600
|
+
{
|
|
13601
|
+
gzip: true,
|
|
13602
|
+
file: tarPath,
|
|
13603
|
+
cwd,
|
|
13604
|
+
filter: excludeVm0Filter
|
|
13605
|
+
},
|
|
13606
|
+
["."]
|
|
13607
|
+
);
|
|
13509
13608
|
}
|
|
13510
|
-
const
|
|
13609
|
+
const tarBuffer = await fs2.promises.readFile(tarPath);
|
|
13610
|
+
await fs2.promises.unlink(tarPath);
|
|
13611
|
+
await fs2.promises.rmdir(tmpDir);
|
|
13511
13612
|
console.log(
|
|
13512
|
-
chalk6.green(`\u2713 Compressed to ${formatBytes(
|
|
13613
|
+
chalk6.green(`\u2713 Compressed to ${formatBytes(tarBuffer.length)}`)
|
|
13513
13614
|
);
|
|
13514
13615
|
console.log(chalk6.gray("Uploading..."));
|
|
13515
13616
|
const formData = new FormData();
|
|
@@ -13520,8 +13621,8 @@ var pushCommand = new Command4().name("push").description("Push local files to c
|
|
|
13520
13621
|
}
|
|
13521
13622
|
formData.append(
|
|
13522
13623
|
"file",
|
|
13523
|
-
new Blob([
|
|
13524
|
-
"volume.
|
|
13624
|
+
new Blob([tarBuffer], { type: "application/gzip" }),
|
|
13625
|
+
"volume.tar.gz"
|
|
13525
13626
|
);
|
|
13526
13627
|
const response = await apiClient.post("/api/storages", {
|
|
13527
13628
|
body: formData
|
|
@@ -13555,78 +13656,8 @@ import { Command as Command5 } from "commander";
|
|
|
13555
13656
|
import chalk7 from "chalk";
|
|
13556
13657
|
import path5 from "path";
|
|
13557
13658
|
import * as fs3 from "fs";
|
|
13558
|
-
import
|
|
13559
|
-
|
|
13560
|
-
// src/lib/file-utils.ts
|
|
13561
|
-
import * as fs2 from "fs";
|
|
13562
|
-
import * as path4 from "path";
|
|
13563
|
-
function getRemoteFilesFromZip(zipEntries) {
|
|
13564
|
-
const remoteFiles = /* @__PURE__ */ new Set();
|
|
13565
|
-
for (const entry of zipEntries) {
|
|
13566
|
-
if (!entry.isDirectory) {
|
|
13567
|
-
remoteFiles.add(entry.entryName.replace(/\\/g, "/"));
|
|
13568
|
-
}
|
|
13569
|
-
}
|
|
13570
|
-
return remoteFiles;
|
|
13571
|
-
}
|
|
13572
|
-
async function listLocalFiles(dir, excludeDirs = [".vm0"]) {
|
|
13573
|
-
const files = [];
|
|
13574
|
-
async function walkDir(currentDir, relativePath = "") {
|
|
13575
|
-
const entries = await fs2.promises.readdir(currentDir, {
|
|
13576
|
-
withFileTypes: true
|
|
13577
|
-
});
|
|
13578
|
-
for (const entry of entries) {
|
|
13579
|
-
const entryRelativePath = relativePath ? path4.join(relativePath, entry.name) : entry.name;
|
|
13580
|
-
if (entry.isDirectory()) {
|
|
13581
|
-
if (!excludeDirs.includes(entry.name)) {
|
|
13582
|
-
await walkDir(path4.join(currentDir, entry.name), entryRelativePath);
|
|
13583
|
-
}
|
|
13584
|
-
} else {
|
|
13585
|
-
files.push(entryRelativePath);
|
|
13586
|
-
}
|
|
13587
|
-
}
|
|
13588
|
-
}
|
|
13589
|
-
await walkDir(dir);
|
|
13590
|
-
return files;
|
|
13591
|
-
}
|
|
13592
|
-
async function removeExtraFiles(dir, remoteFiles, excludeDirs = [".vm0"]) {
|
|
13593
|
-
const localFiles = await listLocalFiles(dir, excludeDirs);
|
|
13594
|
-
let removedCount = 0;
|
|
13595
|
-
for (const localFile of localFiles) {
|
|
13596
|
-
const normalizedPath = localFile.replace(/\\/g, "/");
|
|
13597
|
-
if (!remoteFiles.has(normalizedPath)) {
|
|
13598
|
-
const fullPath = path4.join(dir, localFile);
|
|
13599
|
-
await fs2.promises.unlink(fullPath);
|
|
13600
|
-
removedCount++;
|
|
13601
|
-
}
|
|
13602
|
-
}
|
|
13603
|
-
await removeEmptyDirs(dir, excludeDirs);
|
|
13604
|
-
return removedCount;
|
|
13605
|
-
}
|
|
13606
|
-
async function removeEmptyDirs(dir, excludeDirs = [".vm0"]) {
|
|
13607
|
-
const entries = await fs2.promises.readdir(dir, { withFileTypes: true });
|
|
13608
|
-
let isEmpty = true;
|
|
13609
|
-
for (const entry of entries) {
|
|
13610
|
-
const fullPath = path4.join(dir, entry.name);
|
|
13611
|
-
if (entry.isDirectory()) {
|
|
13612
|
-
if (excludeDirs.includes(entry.name)) {
|
|
13613
|
-
isEmpty = false;
|
|
13614
|
-
} else {
|
|
13615
|
-
const subDirEmpty = await removeEmptyDirs(fullPath, excludeDirs);
|
|
13616
|
-
if (subDirEmpty) {
|
|
13617
|
-
await fs2.promises.rmdir(fullPath);
|
|
13618
|
-
} else {
|
|
13619
|
-
isEmpty = false;
|
|
13620
|
-
}
|
|
13621
|
-
}
|
|
13622
|
-
} else {
|
|
13623
|
-
isEmpty = false;
|
|
13624
|
-
}
|
|
13625
|
-
}
|
|
13626
|
-
return isEmpty;
|
|
13627
|
-
}
|
|
13628
|
-
|
|
13629
|
-
// src/commands/volume/pull.ts
|
|
13659
|
+
import * as os2 from "os";
|
|
13660
|
+
import * as tar3 from "tar";
|
|
13630
13661
|
function formatBytes2(bytes) {
|
|
13631
13662
|
if (bytes === 0) return "0 B";
|
|
13632
13663
|
const k = 1024;
|
|
@@ -13674,31 +13705,31 @@ var pullCommand = new Command5().name("pull").description("Pull cloud files to l
|
|
|
13674
13705
|
process.exit(1);
|
|
13675
13706
|
}
|
|
13676
13707
|
const arrayBuffer = await response.arrayBuffer();
|
|
13677
|
-
const
|
|
13678
|
-
console.log(chalk7.green(`\u2713 Downloaded ${formatBytes2(
|
|
13679
|
-
|
|
13680
|
-
const
|
|
13681
|
-
|
|
13682
|
-
const remoteFiles = getRemoteFilesFromZip(zipEntries);
|
|
13708
|
+
const tarBuffer = Buffer.from(arrayBuffer);
|
|
13709
|
+
console.log(chalk7.green(`\u2713 Downloaded ${formatBytes2(tarBuffer.length)}`));
|
|
13710
|
+
const tmpDir = fs3.mkdtempSync(path5.join(os2.tmpdir(), "vm0-"));
|
|
13711
|
+
const tarPath = path5.join(tmpDir, "volume.tar.gz");
|
|
13712
|
+
await fs3.promises.writeFile(tarPath, tarBuffer);
|
|
13683
13713
|
console.log(chalk7.gray("Syncing local files..."));
|
|
13684
|
-
const
|
|
13714
|
+
const remoteFiles = await listTarFiles(tarPath);
|
|
13715
|
+
const remoteFilesSet = new Set(
|
|
13716
|
+
remoteFiles.map((f) => f.replace(/\\/g, "/"))
|
|
13717
|
+
);
|
|
13718
|
+
const removedCount = await removeExtraFiles(cwd, remoteFilesSet);
|
|
13685
13719
|
if (removedCount > 0) {
|
|
13686
13720
|
console.log(
|
|
13687
13721
|
chalk7.green(`\u2713 Removed ${removedCount} files not in remote`)
|
|
13688
13722
|
);
|
|
13689
13723
|
}
|
|
13690
|
-
|
|
13691
|
-
|
|
13692
|
-
|
|
13693
|
-
|
|
13694
|
-
|
|
13695
|
-
|
|
13696
|
-
|
|
13697
|
-
|
|
13698
|
-
|
|
13699
|
-
}
|
|
13700
|
-
}
|
|
13701
|
-
console.log(chalk7.green(`\u2713 Extracted ${extractedCount} files`));
|
|
13724
|
+
console.log(chalk7.gray("Extracting files..."));
|
|
13725
|
+
await tar3.extract({
|
|
13726
|
+
file: tarPath,
|
|
13727
|
+
cwd,
|
|
13728
|
+
gzip: true
|
|
13729
|
+
});
|
|
13730
|
+
await fs3.promises.unlink(tarPath);
|
|
13731
|
+
await fs3.promises.rmdir(tmpDir);
|
|
13732
|
+
console.log(chalk7.green(`\u2713 Extracted ${remoteFiles.length} files`));
|
|
13702
13733
|
} catch (error43) {
|
|
13703
13734
|
console.error(chalk7.red("\u2717 Pull failed"));
|
|
13704
13735
|
if (error43 instanceof Error) {
|
|
@@ -13781,7 +13812,8 @@ import { Command as Command8 } from "commander";
|
|
|
13781
13812
|
import chalk9 from "chalk";
|
|
13782
13813
|
import path7 from "path";
|
|
13783
13814
|
import * as fs4 from "fs";
|
|
13784
|
-
import
|
|
13815
|
+
import * as os3 from "os";
|
|
13816
|
+
import * as tar4 from "tar";
|
|
13785
13817
|
async function getAllFiles2(dirPath, baseDir = dirPath) {
|
|
13786
13818
|
const files = [];
|
|
13787
13819
|
const entries = await fs4.promises.readdir(dirPath, { withFileTypes: true });
|
|
@@ -13844,14 +13876,34 @@ var pushCommand2 = new Command8().name("push").description("Push local files to
|
|
|
13844
13876
|
);
|
|
13845
13877
|
}
|
|
13846
13878
|
console.log(chalk9.gray("Compressing files..."));
|
|
13847
|
-
const
|
|
13848
|
-
|
|
13849
|
-
|
|
13850
|
-
|
|
13879
|
+
const tmpDir = fs4.mkdtempSync(path7.join(os3.tmpdir(), "vm0-"));
|
|
13880
|
+
const tarPath = path7.join(tmpDir, "artifact.tar.gz");
|
|
13881
|
+
const relativePaths = files.map((file2) => path7.relative(cwd, file2));
|
|
13882
|
+
if (relativePaths.length > 0) {
|
|
13883
|
+
await tar4.create(
|
|
13884
|
+
{
|
|
13885
|
+
gzip: true,
|
|
13886
|
+
file: tarPath,
|
|
13887
|
+
cwd
|
|
13888
|
+
},
|
|
13889
|
+
relativePaths
|
|
13890
|
+
);
|
|
13891
|
+
} else {
|
|
13892
|
+
await tar4.create(
|
|
13893
|
+
{
|
|
13894
|
+
gzip: true,
|
|
13895
|
+
file: tarPath,
|
|
13896
|
+
cwd,
|
|
13897
|
+
filter: excludeVm0Filter
|
|
13898
|
+
},
|
|
13899
|
+
["."]
|
|
13900
|
+
);
|
|
13851
13901
|
}
|
|
13852
|
-
const
|
|
13902
|
+
const tarBuffer = await fs4.promises.readFile(tarPath);
|
|
13903
|
+
await fs4.promises.unlink(tarPath);
|
|
13904
|
+
await fs4.promises.rmdir(tmpDir);
|
|
13853
13905
|
console.log(
|
|
13854
|
-
chalk9.green(`\u2713 Compressed to ${formatBytes3(
|
|
13906
|
+
chalk9.green(`\u2713 Compressed to ${formatBytes3(tarBuffer.length)}`)
|
|
13855
13907
|
);
|
|
13856
13908
|
console.log(chalk9.gray("Uploading..."));
|
|
13857
13909
|
const formData = new FormData();
|
|
@@ -13862,8 +13914,8 @@ var pushCommand2 = new Command8().name("push").description("Push local files to
|
|
|
13862
13914
|
}
|
|
13863
13915
|
formData.append(
|
|
13864
13916
|
"file",
|
|
13865
|
-
new Blob([
|
|
13866
|
-
"artifact.
|
|
13917
|
+
new Blob([tarBuffer], { type: "application/gzip" }),
|
|
13918
|
+
"artifact.tar.gz"
|
|
13867
13919
|
);
|
|
13868
13920
|
const response = await apiClient.post("/api/storages", {
|
|
13869
13921
|
body: formData
|
|
@@ -13896,7 +13948,8 @@ import { Command as Command9 } from "commander";
|
|
|
13896
13948
|
import chalk10 from "chalk";
|
|
13897
13949
|
import path8 from "path";
|
|
13898
13950
|
import * as fs5 from "fs";
|
|
13899
|
-
import
|
|
13951
|
+
import * as os4 from "os";
|
|
13952
|
+
import * as tar5 from "tar";
|
|
13900
13953
|
function formatBytes4(bytes) {
|
|
13901
13954
|
if (bytes === 0) return "0 B";
|
|
13902
13955
|
const k = 1024;
|
|
@@ -13955,31 +14008,31 @@ var pullCommand2 = new Command9().name("pull").description("Pull cloud artifact
|
|
|
13955
14008
|
process.exit(1);
|
|
13956
14009
|
}
|
|
13957
14010
|
const arrayBuffer = await response.arrayBuffer();
|
|
13958
|
-
const
|
|
13959
|
-
console.log(chalk10.green(`\u2713 Downloaded ${formatBytes4(
|
|
13960
|
-
|
|
13961
|
-
const
|
|
13962
|
-
|
|
13963
|
-
const remoteFiles = getRemoteFilesFromZip(zipEntries);
|
|
14011
|
+
const tarBuffer = Buffer.from(arrayBuffer);
|
|
14012
|
+
console.log(chalk10.green(`\u2713 Downloaded ${formatBytes4(tarBuffer.length)}`));
|
|
14013
|
+
const tmpDir = fs5.mkdtempSync(path8.join(os4.tmpdir(), "vm0-"));
|
|
14014
|
+
const tarPath = path8.join(tmpDir, "artifact.tar.gz");
|
|
14015
|
+
await fs5.promises.writeFile(tarPath, tarBuffer);
|
|
13964
14016
|
console.log(chalk10.gray("Syncing local files..."));
|
|
13965
|
-
const
|
|
14017
|
+
const remoteFiles = await listTarFiles(tarPath);
|
|
14018
|
+
const remoteFilesSet = new Set(
|
|
14019
|
+
remoteFiles.map((f) => f.replace(/\\/g, "/"))
|
|
14020
|
+
);
|
|
14021
|
+
const removedCount = await removeExtraFiles(cwd, remoteFilesSet);
|
|
13966
14022
|
if (removedCount > 0) {
|
|
13967
14023
|
console.log(
|
|
13968
14024
|
chalk10.green(`\u2713 Removed ${removedCount} files not in remote`)
|
|
13969
14025
|
);
|
|
13970
14026
|
}
|
|
13971
|
-
|
|
13972
|
-
|
|
13973
|
-
|
|
13974
|
-
|
|
13975
|
-
|
|
13976
|
-
|
|
13977
|
-
|
|
13978
|
-
|
|
13979
|
-
|
|
13980
|
-
}
|
|
13981
|
-
}
|
|
13982
|
-
console.log(chalk10.green(`\u2713 Extracted ${extractedCount} files`));
|
|
14027
|
+
console.log(chalk10.gray("Extracting files..."));
|
|
14028
|
+
await tar5.extract({
|
|
14029
|
+
file: tarPath,
|
|
14030
|
+
cwd,
|
|
14031
|
+
gzip: true
|
|
14032
|
+
});
|
|
14033
|
+
await fs5.promises.unlink(tarPath);
|
|
14034
|
+
await fs5.promises.rmdir(tmpDir);
|
|
14035
|
+
console.log(chalk10.green(`\u2713 Extracted ${remoteFiles.length} files`));
|
|
13983
14036
|
} catch (error43) {
|
|
13984
14037
|
console.error(chalk10.red("\u2717 Pull failed"));
|
|
13985
14038
|
if (error43 instanceof Error) {
|
|
@@ -13994,7 +14047,7 @@ var artifactCommand = new Command10().name("artifact").description("Manage cloud
|
|
|
13994
14047
|
|
|
13995
14048
|
// src/index.ts
|
|
13996
14049
|
var program = new Command11();
|
|
13997
|
-
program.name("vm0").description("VM0 CLI - A modern build tool").version("
|
|
14050
|
+
program.name("vm0").description("VM0 CLI - A modern build tool").version("2.0.0");
|
|
13998
14051
|
program.command("hello").description("Say hello from the App").action(() => {
|
|
13999
14052
|
console.log(chalk11.blue("Welcome to the VM0 CLI!"));
|
|
14000
14053
|
console.log(chalk11.green(`Core says: ${FOO}`));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vm0/cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "CLI application",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"."
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"adm-zip": "^0.5.16",
|
|
19
18
|
"chalk": "^5.6.0",
|
|
20
19
|
"commander": "^14.0.0",
|
|
20
|
+
"tar": "^7.5.2",
|
|
21
21
|
"yaml": "^2.3.4"
|
|
22
22
|
}
|
|
23
23
|
}
|