@kosmojs/dev 0.0.0 → 0.0.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 +17 -0
- package/package.json +14 -8
- package/pkg/cli.js +122 -0
- package/pkg/cli.js.map +7 -0
- package/pkg/src/cli.d.ts +2 -0
package/README.md
ADDED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@kosmojs/dev",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.1",
|
|
5
5
|
"cacheVersion": "001",
|
|
6
6
|
"author": "Slee Woo",
|
|
7
7
|
"license": "MIT",
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"files": [
|
|
12
12
|
"pkg/*"
|
|
13
13
|
],
|
|
14
|
+
"bin": {
|
|
15
|
+
"kosmo": "pkg/cli.js"
|
|
16
|
+
},
|
|
14
17
|
"exports": {
|
|
15
18
|
".": {
|
|
16
19
|
"types": "./pkg/src/index.d.ts",
|
|
@@ -28,21 +31,23 @@
|
|
|
28
31
|
},
|
|
29
32
|
"dependencies": {
|
|
30
33
|
"chokidar": "^4.0.3",
|
|
34
|
+
"concurrently": "^9.2.1",
|
|
31
35
|
"crc": "^4.3.2",
|
|
32
36
|
"dotenv": "^17.2.3",
|
|
33
|
-
"esbuild": "^0.
|
|
37
|
+
"esbuild": "^0.27.0",
|
|
34
38
|
"fs-extra": "^11.3.2",
|
|
39
|
+
"globby": "^15.0.0",
|
|
35
40
|
"ora": "^9.0.0",
|
|
36
41
|
"picomatch": "^4.0.3",
|
|
37
42
|
"tfusion": "^0.0.23",
|
|
38
43
|
"tinyglobby": "^0.2.15",
|
|
39
44
|
"ts-morph": "^27.0.2",
|
|
40
45
|
"typescript": "^5.9.3",
|
|
41
|
-
"@kosmojs/api": "^0.0.
|
|
42
|
-
"@kosmojs/api-generator": "^0.0.
|
|
43
|
-
"@kosmojs/config": "^0.0.
|
|
44
|
-
"@kosmojs/devlib": "^0.0.
|
|
45
|
-
"@kosmojs/fetch-generator": "^0.0.
|
|
46
|
+
"@kosmojs/api": "^0.0.1",
|
|
47
|
+
"@kosmojs/api-generator": "^0.0.1",
|
|
48
|
+
"@kosmojs/config": "^0.0.1",
|
|
49
|
+
"@kosmojs/devlib": "^0.0.1",
|
|
50
|
+
"@kosmojs/fetch-generator": "^0.0.1"
|
|
46
51
|
},
|
|
47
52
|
"devDependencies": {
|
|
48
53
|
"@types/fs-extra": "^11.0.4",
|
|
@@ -51,7 +56,8 @@
|
|
|
51
56
|
"vite": "^7.2.2"
|
|
52
57
|
},
|
|
53
58
|
"scripts": {
|
|
54
|
-
"build": "esbuilder src/index.ts src/base-plugin/routes.ts src/base-plugin/worker.ts src/stub-generator/index.ts",
|
|
59
|
+
"build": "esbuilder src/index.ts src/base-plugin/routes.ts src/base-plugin/worker.ts src/stub-generator/index.ts src/cli.ts",
|
|
60
|
+
"postbuild": "chmod +x pkg/cli.js",
|
|
55
61
|
"test": "vitest --root ../../.. --project core/dev"
|
|
56
62
|
}
|
|
57
63
|
}
|
package/pkg/cli.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --enable-source-maps --no-warnings=ExperimentalWarning
|
|
2
|
+
|
|
3
|
+
// src/cli.ts
|
|
4
|
+
import { dirname } from "node:path";
|
|
5
|
+
import { parseArgs, styleText } from "node:util";
|
|
6
|
+
import concurrently from "concurrently";
|
|
7
|
+
import { globby } from "globby";
|
|
8
|
+
var usage = [
|
|
9
|
+
"",
|
|
10
|
+
`\u{1F680} ${styleText(["bold", "underline", "cyan"], "KosmoJS CLI")}`,
|
|
11
|
+
"",
|
|
12
|
+
styleText("bold", "BASIC USAGE"),
|
|
13
|
+
"",
|
|
14
|
+
` ${styleText("blue", "kosmo")} ${styleText("magenta", "-h")}`,
|
|
15
|
+
` ${styleText("blue", "kosmo")} ${styleText("magenta", "--help")}`,
|
|
16
|
+
" Display this help message and exit",
|
|
17
|
+
"",
|
|
18
|
+
styleText("bold", "DEV COMMAND"),
|
|
19
|
+
"",
|
|
20
|
+
` ${styleText("blue", "kosmo dev")}`,
|
|
21
|
+
" Start dev server for all source folders",
|
|
22
|
+
"",
|
|
23
|
+
` ${styleText("blue", "kosmo dev")} ${styleText("magenta", "@admin")}`,
|
|
24
|
+
" Start dev server for single source folder",
|
|
25
|
+
"",
|
|
26
|
+
` ${styleText("blue", "kosmo dev")} ${styleText("magenta", "@admin @front")}`,
|
|
27
|
+
" Start dev server for multiple source folders",
|
|
28
|
+
"",
|
|
29
|
+
styleText("bold", "BUILD COMMAND"),
|
|
30
|
+
"",
|
|
31
|
+
` ${styleText("blue", "kosmo build")}`,
|
|
32
|
+
" Build all source folders",
|
|
33
|
+
"",
|
|
34
|
+
` ${styleText("blue", "kosmo build")} ${styleText("magenta", "@admin")}`,
|
|
35
|
+
" Build single source folder",
|
|
36
|
+
"",
|
|
37
|
+
` ${styleText("blue", "kosmo build")} ${styleText("magenta", "@admin @front")}`,
|
|
38
|
+
" Build multiple source folders",
|
|
39
|
+
""
|
|
40
|
+
];
|
|
41
|
+
var printUsage = () => {
|
|
42
|
+
for (const line of usage) {
|
|
43
|
+
console.log(line);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
var { values, positionals } = parseArgs({
|
|
47
|
+
allowPositionals: true,
|
|
48
|
+
options: {
|
|
49
|
+
help: { type: "boolean", short: "h" }
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
if (!positionals.length || values.help) {
|
|
53
|
+
printUsage();
|
|
54
|
+
process.exit(0);
|
|
55
|
+
}
|
|
56
|
+
var [command, ...optedFolders] = positionals;
|
|
57
|
+
var prefixColors = ["cyan", "magenta", "yellow", "green", "blue", "auto"];
|
|
58
|
+
var handlers = {
|
|
59
|
+
async dev(folders) {
|
|
60
|
+
const { result, commands } = concurrently(
|
|
61
|
+
folders.map((name) => {
|
|
62
|
+
return { name, command: "vite", cwd: name };
|
|
63
|
+
}),
|
|
64
|
+
{
|
|
65
|
+
prefixColors,
|
|
66
|
+
handleInput: true
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
let manualShutdown = false;
|
|
70
|
+
process.stdin.on("end", async () => {
|
|
71
|
+
manualShutdown = true;
|
|
72
|
+
console.log("\nEOF detected - stopping all processes...");
|
|
73
|
+
for (const cmd of commands) {
|
|
74
|
+
cmd.kill();
|
|
75
|
+
}
|
|
76
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
77
|
+
});
|
|
78
|
+
return result.then(
|
|
79
|
+
() => process.exit(0),
|
|
80
|
+
() => process.exit(manualShutdown ? 0 : 1)
|
|
81
|
+
);
|
|
82
|
+
},
|
|
83
|
+
async build(folders) {
|
|
84
|
+
const { result } = concurrently(
|
|
85
|
+
folders.map((name) => {
|
|
86
|
+
return { name, command: "vite build", cwd: name };
|
|
87
|
+
}),
|
|
88
|
+
{ prefixColors }
|
|
89
|
+
);
|
|
90
|
+
await result;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
try {
|
|
94
|
+
const handler = handlers[command];
|
|
95
|
+
if (!handler) {
|
|
96
|
+
throw new Error(
|
|
97
|
+
`Unknown command ${command}; use one of ${Object.keys(handlers).join(", ")}`
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
const configs = await globby(
|
|
101
|
+
optedFolders.length ? optedFolders.map((e) => `${e}/vite.config.*`) : "**/vite.config.*",
|
|
102
|
+
{
|
|
103
|
+
absolute: false,
|
|
104
|
+
deep: 2
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
const sourceFolders = configs.map(dirname);
|
|
108
|
+
if (optedFolders.length) {
|
|
109
|
+
if (optedFolders.length !== sourceFolders.length) {
|
|
110
|
+
throw new Error(
|
|
111
|
+
"Some of opted names does not contain a valid KosmoJS source folder"
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
} else if (!sourceFolders.length) {
|
|
115
|
+
throw new Error("No source folders detected");
|
|
116
|
+
}
|
|
117
|
+
await handler(sourceFolders);
|
|
118
|
+
} catch (error) {
|
|
119
|
+
console.error(`${styleText("red", "\u2717 ERROR")}: ${error.message}`);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=cli.js.map
|
package/pkg/cli.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cli.ts"],
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env -S node --enable-source-maps --no-warnings=ExperimentalWarning\n\nimport { dirname } from \"node:path\";\nimport { parseArgs, styleText } from \"node:util\";\n\nimport concurrently from \"concurrently\";\nimport { globby } from \"globby\";\n\nconst usage = [\n \"\",\n `\uD83D\uDE80 ${styleText([\"bold\", \"underline\", \"cyan\"], \"KosmoJS CLI\")}`,\n \"\",\n styleText(\"bold\", \"BASIC USAGE\"),\n \"\",\n ` ${styleText(\"blue\", \"kosmo\")} ${styleText(\"magenta\", \"-h\")}`,\n ` ${styleText(\"blue\", \"kosmo\")} ${styleText(\"magenta\", \"--help\")}`,\n \" Display this help message and exit\",\n \"\",\n styleText(\"bold\", \"DEV COMMAND\"),\n \"\",\n ` ${styleText(\"blue\", \"kosmo dev\")}`,\n \" Start dev server for all source folders\",\n \"\",\n ` ${styleText(\"blue\", \"kosmo dev\")} ${styleText(\"magenta\", \"@admin\")}`,\n \" Start dev server for single source folder\",\n \"\",\n ` ${styleText(\"blue\", \"kosmo dev\")} ${styleText(\"magenta\", \"@admin @front\")}`,\n \" Start dev server for multiple source folders\",\n \"\",\n styleText(\"bold\", \"BUILD COMMAND\"),\n \"\",\n ` ${styleText(\"blue\", \"kosmo build\")}`,\n \" Build all source folders\",\n \"\",\n ` ${styleText(\"blue\", \"kosmo build\")} ${styleText(\"magenta\", \"@admin\")}`,\n \" Build single source folder\",\n \"\",\n ` ${styleText(\"blue\", \"kosmo build\")} ${styleText(\"magenta\", \"@admin @front\")}`,\n \" Build multiple source folders\",\n \"\",\n];\n\nconst printUsage = () => {\n for (const line of usage) {\n console.log(line);\n }\n};\n\nconst { values, positionals } = parseArgs({\n allowPositionals: true,\n options: {\n help: { type: \"boolean\", short: \"h\" },\n },\n});\n\nif (!positionals.length || values.help) {\n printUsage();\n process.exit(0);\n}\n\nconst [command, ...optedFolders] = positionals;\n\nconst prefixColors = [\"cyan\", \"magenta\", \"yellow\", \"green\", \"blue\", \"auto\"];\n\nconst handlers: Record<string, (f: Array<string>) => Promise<void>> = {\n async dev(folders) {\n const { result, commands } = concurrently(\n folders.map((name) => {\n return { name, command: \"vite\", cwd: name };\n }),\n {\n prefixColors,\n handleInput: true,\n },\n );\n\n let manualShutdown = false;\n\n process.stdin.on(\"end\", async () => {\n manualShutdown = true;\n console.log(\"\\nEOF detected - stopping all processes...\");\n for (const cmd of commands) {\n cmd.kill();\n }\n // Give processes time to cleanup\n await new Promise((resolve) => setTimeout(resolve, 500));\n });\n\n return result.then(\n () => process.exit(0),\n () => process.exit(manualShutdown ? 0 : 1),\n );\n },\n async build(folders) {\n const { result } = concurrently(\n folders.map((name) => {\n return { name, command: \"vite build\", cwd: name };\n }),\n { prefixColors },\n );\n await result;\n },\n};\n\ntry {\n const handler = handlers[command];\n\n if (!handler) {\n throw new Error(\n `Unknown command ${command}; use one of ${Object.keys(handlers).join(\", \")}`,\n );\n }\n\n const configs = await globby(\n optedFolders.length\n ? optedFolders.map((e) => `${e}/vite.config.*`)\n : \"**/vite.config.*\",\n {\n absolute: false,\n deep: 2,\n },\n );\n\n const sourceFolders = configs.map(dirname);\n\n if (optedFolders.length) {\n if (optedFolders.length !== sourceFolders.length) {\n throw new Error(\n \"Some of opted names does not contain a valid KosmoJS source folder\",\n );\n }\n } else if (!sourceFolders.length) {\n throw new Error(\"No source folders detected\");\n }\n\n await handler(sourceFolders);\n} catch (\n // biome-ignore lint: any\n error: any\n) {\n console.error(`${styleText(\"red\", \"\u2717 ERROR\")}: ${error.message}`);\n process.exit(1);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/pkg/src/cli.d.ts
ADDED