@take-out/cli 0.0.39
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/LICENSE +21 -0
- package/README.md +274 -0
- package/cli.mjs +3 -0
- package/dist/cjs/cli.cjs +71 -0
- package/dist/cjs/cli.js +70 -0
- package/dist/cjs/cli.js.map +6 -0
- package/dist/cjs/cli.native.js +79 -0
- package/dist/cjs/cli.native.js.map +6 -0
- package/dist/cjs/commands/changed.cjs +212 -0
- package/dist/cjs/commands/changed.js +214 -0
- package/dist/cjs/commands/changed.js.map +6 -0
- package/dist/cjs/commands/changed.native.js +289 -0
- package/dist/cjs/commands/changed.native.js.map +6 -0
- package/dist/cjs/commands/docs.cjs +388 -0
- package/dist/cjs/commands/docs.js +313 -0
- package/dist/cjs/commands/docs.js.map +6 -0
- package/dist/cjs/commands/docs.native.js +476 -0
- package/dist/cjs/commands/docs.native.js.map +6 -0
- package/dist/cjs/commands/env-setup.cjs +90 -0
- package/dist/cjs/commands/env-setup.js +78 -0
- package/dist/cjs/commands/env-setup.js.map +6 -0
- package/dist/cjs/commands/env-setup.native.js +85 -0
- package/dist/cjs/commands/env-setup.native.js.map +6 -0
- package/dist/cjs/commands/onboard.cjs +479 -0
- package/dist/cjs/commands/onboard.js +631 -0
- package/dist/cjs/commands/onboard.js.map +6 -0
- package/dist/cjs/commands/onboard.native.js +608 -0
- package/dist/cjs/commands/onboard.native.js.map +6 -0
- package/dist/cjs/commands/run.cjs +148 -0
- package/dist/cjs/commands/run.js +116 -0
- package/dist/cjs/commands/run.js.map +6 -0
- package/dist/cjs/commands/run.native.js +140 -0
- package/dist/cjs/commands/run.native.js.map +6 -0
- package/dist/cjs/commands/script.cjs +379 -0
- package/dist/cjs/commands/script.js +339 -0
- package/dist/cjs/commands/script.js.map +6 -0
- package/dist/cjs/commands/script.native.js +449 -0
- package/dist/cjs/commands/script.native.js.map +6 -0
- package/dist/cjs/commands/sync.cjs +190 -0
- package/dist/cjs/commands/sync.js +168 -0
- package/dist/cjs/commands/sync.js.map +6 -0
- package/dist/cjs/commands/sync.native.js +211 -0
- package/dist/cjs/commands/sync.native.js.map +6 -0
- package/dist/cjs/constants/ascii.cjs +36 -0
- package/dist/cjs/constants/ascii.js +30 -0
- package/dist/cjs/constants/ascii.js.map +6 -0
- package/dist/cjs/constants/ascii.native.js +36 -0
- package/dist/cjs/constants/ascii.native.js.map +6 -0
- package/dist/cjs/index.cjs +64 -0
- package/dist/cjs/index.js +55 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/index.native.js +94 -0
- package/dist/cjs/index.native.js.map +6 -0
- package/dist/cjs/types.cjs +16 -0
- package/dist/cjs/types.js +14 -0
- package/dist/cjs/types.js.map +6 -0
- package/dist/cjs/types.native.js +15 -0
- package/dist/cjs/types.native.js.map +6 -0
- package/dist/cjs/utils/env-categories.cjs +272 -0
- package/dist/cjs/utils/env-categories.js +296 -0
- package/dist/cjs/utils/env-categories.js.map +6 -0
- package/dist/cjs/utils/env-categories.native.js +317 -0
- package/dist/cjs/utils/env-categories.native.js.map +6 -0
- package/dist/cjs/utils/env-setup.cjs +181 -0
- package/dist/cjs/utils/env-setup.js +190 -0
- package/dist/cjs/utils/env-setup.js.map +6 -0
- package/dist/cjs/utils/env-setup.native.js +264 -0
- package/dist/cjs/utils/env-setup.native.js.map +6 -0
- package/dist/cjs/utils/env.cjs +118 -0
- package/dist/cjs/utils/env.js +97 -0
- package/dist/cjs/utils/env.js.map +6 -0
- package/dist/cjs/utils/env.native.js +128 -0
- package/dist/cjs/utils/env.native.js.map +6 -0
- package/dist/cjs/utils/files.cjs +215 -0
- package/dist/cjs/utils/files.js +164 -0
- package/dist/cjs/utils/files.js.map +6 -0
- package/dist/cjs/utils/files.native.js +266 -0
- package/dist/cjs/utils/files.native.js.map +6 -0
- package/dist/cjs/utils/parallel-runner.cjs +99 -0
- package/dist/cjs/utils/parallel-runner.js +84 -0
- package/dist/cjs/utils/parallel-runner.js.map +6 -0
- package/dist/cjs/utils/parallel-runner.native.js +123 -0
- package/dist/cjs/utils/parallel-runner.native.js.map +6 -0
- package/dist/cjs/utils/ports.cjs +101 -0
- package/dist/cjs/utils/ports.js +81 -0
- package/dist/cjs/utils/ports.js.map +6 -0
- package/dist/cjs/utils/ports.native.js +130 -0
- package/dist/cjs/utils/ports.native.js.map +6 -0
- package/dist/cjs/utils/prerequisites.cjs +119 -0
- package/dist/cjs/utils/prerequisites.js +107 -0
- package/dist/cjs/utils/prerequisites.js.map +6 -0
- package/dist/cjs/utils/prerequisites.native.js +127 -0
- package/dist/cjs/utils/prerequisites.native.js.map +6 -0
- package/dist/cjs/utils/prompts.cjs +161 -0
- package/dist/cjs/utils/prompts.js +162 -0
- package/dist/cjs/utils/prompts.js.map +6 -0
- package/dist/cjs/utils/prompts.native.js +179 -0
- package/dist/cjs/utils/prompts.native.js.map +6 -0
- package/dist/cjs/utils/script-listing.cjs +113 -0
- package/dist/cjs/utils/script-listing.js +108 -0
- package/dist/cjs/utils/script-listing.js.map +6 -0
- package/dist/cjs/utils/script-listing.native.js +174 -0
- package/dist/cjs/utils/script-listing.native.js.map +6 -0
- package/dist/cjs/utils/sync.cjs +85 -0
- package/dist/cjs/utils/sync.js +70 -0
- package/dist/cjs/utils/sync.js.map +6 -0
- package/dist/cjs/utils/sync.native.js +84 -0
- package/dist/cjs/utils/sync.native.js.map +6 -0
- package/dist/cjs/utils/welcome.cjs +50 -0
- package/dist/cjs/utils/welcome.js +42 -0
- package/dist/cjs/utils/welcome.js.map +6 -0
- package/dist/cjs/utils/welcome.native.js +47 -0
- package/dist/cjs/utils/welcome.native.js.map +6 -0
- package/dist/esm/cli.js +79 -0
- package/dist/esm/cli.js.map +6 -0
- package/dist/esm/cli.mjs +71 -0
- package/dist/esm/cli.mjs.map +1 -0
- package/dist/esm/cli.native.js +69 -0
- package/dist/esm/cli.native.js.map +1 -0
- package/dist/esm/commands/changed.js +194 -0
- package/dist/esm/commands/changed.js.map +6 -0
- package/dist/esm/commands/changed.mjs +178 -0
- package/dist/esm/commands/changed.mjs.map +1 -0
- package/dist/esm/commands/changed.native.js +273 -0
- package/dist/esm/commands/changed.native.js.map +1 -0
- package/dist/esm/commands/docs.js +306 -0
- package/dist/esm/commands/docs.js.map +6 -0
- package/dist/esm/commands/docs.mjs +353 -0
- package/dist/esm/commands/docs.mjs.map +1 -0
- package/dist/esm/commands/docs.native.js +516 -0
- package/dist/esm/commands/docs.native.js.map +1 -0
- package/dist/esm/commands/env-setup.js +56 -0
- package/dist/esm/commands/env-setup.js.map +6 -0
- package/dist/esm/commands/env-setup.mjs +56 -0
- package/dist/esm/commands/env-setup.mjs.map +1 -0
- package/dist/esm/commands/env-setup.native.js +59 -0
- package/dist/esm/commands/env-setup.native.js.map +1 -0
- package/dist/esm/commands/onboard.js +645 -0
- package/dist/esm/commands/onboard.js.map +6 -0
- package/dist/esm/commands/onboard.mjs +445 -0
- package/dist/esm/commands/onboard.mjs.map +1 -0
- package/dist/esm/commands/onboard.native.js +584 -0
- package/dist/esm/commands/onboard.native.js.map +1 -0
- package/dist/esm/commands/run.js +95 -0
- package/dist/esm/commands/run.js.map +6 -0
- package/dist/esm/commands/run.mjs +114 -0
- package/dist/esm/commands/run.mjs.map +1 -0
- package/dist/esm/commands/run.native.js +133 -0
- package/dist/esm/commands/run.native.js.map +1 -0
- package/dist/esm/commands/script.js +338 -0
- package/dist/esm/commands/script.js.map +6 -0
- package/dist/esm/commands/script.mjs +336 -0
- package/dist/esm/commands/script.mjs.map +1 -0
- package/dist/esm/commands/script.native.js +445 -0
- package/dist/esm/commands/script.native.js.map +1 -0
- package/dist/esm/commands/sync.js +158 -0
- package/dist/esm/commands/sync.js.map +6 -0
- package/dist/esm/commands/sync.mjs +155 -0
- package/dist/esm/commands/sync.mjs.map +1 -0
- package/dist/esm/commands/sync.native.js +173 -0
- package/dist/esm/commands/sync.native.js.map +1 -0
- package/dist/esm/constants/ascii.js +14 -0
- package/dist/esm/constants/ascii.js.map +6 -0
- package/dist/esm/constants/ascii.mjs +12 -0
- package/dist/esm/constants/ascii.mjs.map +1 -0
- package/dist/esm/constants/ascii.native.js +12 -0
- package/dist/esm/constants/ascii.native.js.map +1 -0
- package/dist/esm/index.js +83 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/index.mjs +7 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +7 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +6 -0
- package/dist/esm/types.mjs +2 -0
- package/dist/esm/types.mjs.map +1 -0
- package/dist/esm/types.native.js +2 -0
- package/dist/esm/types.native.js.map +1 -0
- package/dist/esm/utils/env-categories.js +272 -0
- package/dist/esm/utils/env-categories.js.map +6 -0
- package/dist/esm/utils/env-categories.mjs +233 -0
- package/dist/esm/utils/env-categories.mjs.map +1 -0
- package/dist/esm/utils/env-categories.native.js +246 -0
- package/dist/esm/utils/env-categories.native.js.map +1 -0
- package/dist/esm/utils/env-setup.js +173 -0
- package/dist/esm/utils/env-setup.js.map +6 -0
- package/dist/esm/utils/env-setup.mjs +146 -0
- package/dist/esm/utils/env-setup.mjs.map +1 -0
- package/dist/esm/utils/env-setup.native.js +243 -0
- package/dist/esm/utils/env-setup.native.js.map +1 -0
- package/dist/esm/utils/env.js +83 -0
- package/dist/esm/utils/env.js.map +6 -0
- package/dist/esm/utils/env.mjs +90 -0
- package/dist/esm/utils/env.mjs.map +1 -0
- package/dist/esm/utils/env.native.js +99 -0
- package/dist/esm/utils/env.native.js.map +1 -0
- package/dist/esm/utils/files.js +150 -0
- package/dist/esm/utils/files.js.map +6 -0
- package/dist/esm/utils/files.mjs +187 -0
- package/dist/esm/utils/files.mjs.map +1 -0
- package/dist/esm/utils/files.native.js +247 -0
- package/dist/esm/utils/files.native.js.map +1 -0
- package/dist/esm/utils/parallel-runner.js +69 -0
- package/dist/esm/utils/parallel-runner.js.map +6 -0
- package/dist/esm/utils/parallel-runner.mjs +76 -0
- package/dist/esm/utils/parallel-runner.mjs.map +1 -0
- package/dist/esm/utils/parallel-runner.native.js +109 -0
- package/dist/esm/utils/parallel-runner.native.js.map +1 -0
- package/dist/esm/utils/ports.js +65 -0
- package/dist/esm/utils/ports.js.map +6 -0
- package/dist/esm/utils/ports.mjs +74 -0
- package/dist/esm/utils/ports.mjs.map +1 -0
- package/dist/esm/utils/ports.native.js +93 -0
- package/dist/esm/utils/ports.native.js.map +1 -0
- package/dist/esm/utils/prerequisites.js +91 -0
- package/dist/esm/utils/prerequisites.js.map +6 -0
- package/dist/esm/utils/prerequisites.mjs +91 -0
- package/dist/esm/utils/prerequisites.mjs.map +1 -0
- package/dist/esm/utils/prerequisites.native.js +97 -0
- package/dist/esm/utils/prerequisites.native.js.map +1 -0
- package/dist/esm/utils/prompts.js +139 -0
- package/dist/esm/utils/prompts.js.map +6 -0
- package/dist/esm/utils/prompts.mjs +112 -0
- package/dist/esm/utils/prompts.mjs.map +1 -0
- package/dist/esm/utils/prompts.native.js +115 -0
- package/dist/esm/utils/prompts.native.js.map +1 -0
- package/dist/esm/utils/script-listing.js +91 -0
- package/dist/esm/utils/script-listing.js.map +6 -0
- package/dist/esm/utils/script-listing.mjs +76 -0
- package/dist/esm/utils/script-listing.mjs.map +1 -0
- package/dist/esm/utils/script-listing.native.js +151 -0
- package/dist/esm/utils/script-listing.native.js.map +1 -0
- package/dist/esm/utils/sync.js +50 -0
- package/dist/esm/utils/sync.js.map +6 -0
- package/dist/esm/utils/sync.mjs +48 -0
- package/dist/esm/utils/sync.mjs.map +1 -0
- package/dist/esm/utils/sync.native.js +53 -0
- package/dist/esm/utils/sync.native.js.map +1 -0
- package/dist/esm/utils/welcome.js +21 -0
- package/dist/esm/utils/welcome.js.map +6 -0
- package/dist/esm/utils/welcome.mjs +15 -0
- package/dist/esm/utils/welcome.mjs.map +1 -0
- package/dist/esm/utils/welcome.native.js +18 -0
- package/dist/esm/utils/welcome.native.js.map +1 -0
- package/docs/aggregates.md +579 -0
- package/docs/cloudflare-dev-tunnel.md +41 -0
- package/docs/database.md +203 -0
- package/docs/docs.md +8 -0
- package/docs/emitters.md +562 -0
- package/docs/hot-updater.md +223 -0
- package/docs/native-hot-update.md +252 -0
- package/docs/one-components.md +234 -0
- package/docs/one-hooks.md +570 -0
- package/docs/one-routes.md +660 -0
- package/docs/package-json.md +115 -0
- package/docs/react-native-navigation-flow.md +184 -0
- package/docs/scripts.md +147 -0
- package/docs/sync-prompt.md +208 -0
- package/docs/tamagui.md +478 -0
- package/docs/testing-integration.md +564 -0
- package/docs/triggers.md +450 -0
- package/docs/zero.md +719 -0
- package/package.json +76 -0
- package/scripts/seed.ts +209 -0
- package/src/cli.ts +147 -0
- package/src/commands/changed.ts +313 -0
- package/src/commands/docs.ts +582 -0
- package/src/commands/env-setup.ts +69 -0
- package/src/commands/onboard.ts +1391 -0
- package/src/commands/run.ts +173 -0
- package/src/commands/script.ts +587 -0
- package/src/commands/sync.ts +305 -0
- package/src/constants/ascii.ts +17 -0
- package/src/index.ts +63 -0
- package/src/types.ts +59 -0
- package/src/utils/env-categories.ts +245 -0
- package/src/utils/env-setup.ts +338 -0
- package/src/utils/env.ts +127 -0
- package/src/utils/files.ts +302 -0
- package/src/utils/parallel-runner.ts +129 -0
- package/src/utils/ports.ts +77 -0
- package/src/utils/prerequisites.ts +137 -0
- package/src/utils/prompts.ts +197 -0
- package/src/utils/script-listing.ts +214 -0
- package/src/utils/sync.ts +101 -0
- package/src/withOpSqliteStatic.cjs +51 -0
- package/types/cli.d.ts +7 -0
- package/types/cli.d.ts.map +1 -0
- package/types/commands/changed.d.ts +14 -0
- package/types/commands/changed.d.ts.map +1 -0
- package/types/commands/docs.d.ts +5 -0
- package/types/commands/docs.d.ts.map +1 -0
- package/types/commands/env-setup.d.ts +25 -0
- package/types/commands/env-setup.d.ts.map +1 -0
- package/types/commands/onboard.d.ts +16 -0
- package/types/commands/onboard.d.ts.map +1 -0
- package/types/commands/run.d.ts +8 -0
- package/types/commands/run.d.ts.map +1 -0
- package/types/commands/script.d.ts +28 -0
- package/types/commands/script.d.ts.map +1 -0
- package/types/commands/sync.d.ts +5 -0
- package/types/commands/sync.d.ts.map +1 -0
- package/types/constants/ascii.d.ts +6 -0
- package/types/constants/ascii.d.ts.map +1 -0
- package/types/index.d.ts +12 -0
- package/types/index.d.ts.map +1 -0
- package/types/types.d.ts +54 -0
- package/types/types.d.ts.map +1 -0
- package/types/utils/env-categories.d.ts +8 -0
- package/types/utils/env-categories.d.ts.map +1 -0
- package/types/utils/env-setup.d.ts +10 -0
- package/types/utils/env-setup.d.ts.map +1 -0
- package/types/utils/env.d.ts +19 -0
- package/types/utils/env.d.ts.map +1 -0
- package/types/utils/files.d.ts +47 -0
- package/types/utils/files.d.ts.map +1 -0
- package/types/utils/parallel-runner.d.ts +15 -0
- package/types/utils/parallel-runner.d.ts.map +1 -0
- package/types/utils/ports.d.ts +16 -0
- package/types/utils/ports.d.ts.map +1 -0
- package/types/utils/prerequisites.d.ts +11 -0
- package/types/utils/prerequisites.d.ts.map +1 -0
- package/types/utils/prompts.d.ts +30 -0
- package/types/utils/prompts.d.ts.map +1 -0
- package/types/utils/script-listing.d.ts +7 -0
- package/types/utils/script-listing.d.ts.map +1 -0
- package/types/utils/sync.d.ts +16 -0
- package/types/utils/sync.d.ts.map +1 -0
- package/types/utils/welcome.d.ts +6 -0
- package/types/utils/welcome.d.ts.map +1 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import {
|
|
2
|
+
existsSync,
|
|
3
|
+
readdirSync,
|
|
4
|
+
statSync,
|
|
5
|
+
readFileSync,
|
|
6
|
+
writeFileSync,
|
|
7
|
+
mkdirSync
|
|
8
|
+
} from "node:fs";
|
|
9
|
+
import { homedir } from "node:os";
|
|
10
|
+
import { join, relative, dirname, basename } from "node:path";
|
|
11
|
+
import { fileURLToPath } from "node:url";
|
|
12
|
+
import { defineCommand } from "citty";
|
|
13
|
+
import pc from "picocolors";
|
|
14
|
+
import { listAllScripts, listCategoryScripts } from "../utils/script-listing";
|
|
15
|
+
import {
|
|
16
|
+
compareFiles,
|
|
17
|
+
getFileSize,
|
|
18
|
+
syncFileWithConfirmation
|
|
19
|
+
} from "../utils/sync";
|
|
20
|
+
import {
|
|
21
|
+
formatScriptList,
|
|
22
|
+
listAllScripts as listAllScripts2,
|
|
23
|
+
listCategoryScripts as listCategoryScripts2
|
|
24
|
+
} from "../utils/script-listing";
|
|
25
|
+
const CACHE_DIR = join(homedir(), ".takeout"), CACHE_FILE = join(CACHE_DIR, "script-cache.json");
|
|
26
|
+
function findScriptsPackageRoot() {
|
|
27
|
+
try {
|
|
28
|
+
const resolved = import.meta.resolve("@take-out/scripts/package.json"), packageJsonPath = fileURLToPath(new URL(resolved)), packageRoot = join(packageJsonPath, ".."), srcPath = join(packageRoot, "src");
|
|
29
|
+
if (existsSync(srcPath))
|
|
30
|
+
return srcPath;
|
|
31
|
+
} catch {
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
function getLocalScriptsDir() {
|
|
36
|
+
return join(process.cwd(), "scripts");
|
|
37
|
+
}
|
|
38
|
+
function extractMetadata(filePath) {
|
|
39
|
+
try {
|
|
40
|
+
const lines = readFileSync(filePath, "utf-8").split(`
|
|
41
|
+
`).slice(0, 20), metadata = {};
|
|
42
|
+
for (const line of lines) {
|
|
43
|
+
const descMatch = line.match(/@description\s+(.+)/);
|
|
44
|
+
descMatch && descMatch[1] && (metadata.description = descMatch[1].trim());
|
|
45
|
+
const argsMatch = line.match(/@args\s+(.+)/);
|
|
46
|
+
argsMatch && argsMatch[1] && (metadata.args = argsMatch[1].split(",").map((a) => a.trim()));
|
|
47
|
+
}
|
|
48
|
+
const stat = statSync(filePath);
|
|
49
|
+
return metadata.mtime = stat.mtimeMs, metadata;
|
|
50
|
+
} catch {
|
|
51
|
+
return {};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function loadCache() {
|
|
55
|
+
try {
|
|
56
|
+
if (existsSync(CACHE_FILE))
|
|
57
|
+
return JSON.parse(readFileSync(CACHE_FILE, "utf-8"));
|
|
58
|
+
} catch {
|
|
59
|
+
}
|
|
60
|
+
return {};
|
|
61
|
+
}
|
|
62
|
+
function saveCache(cache) {
|
|
63
|
+
try {
|
|
64
|
+
existsSync(CACHE_DIR) || mkdirSync(CACHE_DIR, { recursive: !0 }), writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));
|
|
65
|
+
} catch {
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function getScriptMetadata(filePath) {
|
|
69
|
+
const cache = loadCache(), stat = statSync(filePath);
|
|
70
|
+
if (cache[filePath] && cache[filePath].mtime === stat.mtimeMs)
|
|
71
|
+
return cache[filePath];
|
|
72
|
+
const metadata = extractMetadata(filePath);
|
|
73
|
+
return cache[filePath] = metadata, saveCache(cache), metadata;
|
|
74
|
+
}
|
|
75
|
+
function discoverScripts(dir, baseDir = dir, depth = 0, maxDepth = 1) {
|
|
76
|
+
const scripts = /* @__PURE__ */ new Map();
|
|
77
|
+
if (!existsSync(dir))
|
|
78
|
+
return scripts;
|
|
79
|
+
try {
|
|
80
|
+
const entries = readdirSync(dir);
|
|
81
|
+
for (const entry of entries) {
|
|
82
|
+
const fullPath = join(dir, entry);
|
|
83
|
+
if (statSync(fullPath).isDirectory()) {
|
|
84
|
+
if (entry === "helpers" || depth >= maxDepth)
|
|
85
|
+
continue;
|
|
86
|
+
const subScripts = discoverScripts(fullPath, baseDir, depth + 1, maxDepth);
|
|
87
|
+
for (const [name, path] of subScripts)
|
|
88
|
+
scripts.set(name, path);
|
|
89
|
+
} else if (entry.endsWith(".ts") || entry.endsWith(".js")) {
|
|
90
|
+
const scriptName = relative(baseDir, fullPath).split("\\").join("/").replace(/\.(ts|js)$/, "");
|
|
91
|
+
scripts.set(scriptName, fullPath);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
} catch {
|
|
95
|
+
}
|
|
96
|
+
return scripts;
|
|
97
|
+
}
|
|
98
|
+
function findScript(name) {
|
|
99
|
+
const normalizedName = name.replace(/:/g, "/"), localDir = getLocalScriptsDir();
|
|
100
|
+
for (const ext of [".ts", ".js", ""]) {
|
|
101
|
+
const localPath = join(localDir, `${normalizedName}${ext}`);
|
|
102
|
+
if (existsSync(localPath))
|
|
103
|
+
return localPath;
|
|
104
|
+
}
|
|
105
|
+
const builtInDir = findScriptsPackageRoot();
|
|
106
|
+
if (builtInDir)
|
|
107
|
+
for (const ext of [".ts", ".js", ""]) {
|
|
108
|
+
const builtInPath = join(builtInDir, `${normalizedName}${ext}`);
|
|
109
|
+
if (existsSync(builtInPath))
|
|
110
|
+
return builtInPath;
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
async function runScript(scriptPath, args) {
|
|
115
|
+
console.info(pc.dim(`Running: ${relative(process.cwd(), scriptPath)}`)), console.info();
|
|
116
|
+
try {
|
|
117
|
+
const { $ } = await import("bun");
|
|
118
|
+
await $`bun ${scriptPath} ${args}`;
|
|
119
|
+
} catch (err) {
|
|
120
|
+
console.error(pc.red(`\u2717 Error running script: ${err}`)), process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const newCommand = defineCommand({
|
|
124
|
+
meta: {
|
|
125
|
+
name: "new",
|
|
126
|
+
description: "Create a new script from template"
|
|
127
|
+
},
|
|
128
|
+
args: {
|
|
129
|
+
path: {
|
|
130
|
+
type: "positional",
|
|
131
|
+
description: "Path for the new script (e.g., ci/test)",
|
|
132
|
+
required: !0
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
async run({ args }) {
|
|
136
|
+
const scriptPath = args.path, localDir = getLocalScriptsDir(), fullPath = join(localDir, `${scriptPath}.ts`), dir = dirname(fullPath);
|
|
137
|
+
existsSync(dir) || mkdirSync(dir, { recursive: !0 }), existsSync(fullPath) && (console.error(
|
|
138
|
+
pc.red(`\u2717 Script already exists: ${relative(process.cwd(), fullPath)}`)
|
|
139
|
+
), process.exit(1));
|
|
140
|
+
const template = `#!/usr/bin/env bun
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* @description TODO: Add description
|
|
144
|
+
* @args --verbose, --dry-run
|
|
145
|
+
*/
|
|
146
|
+
|
|
147
|
+
import { parseArgs } from 'node:util'
|
|
148
|
+
|
|
149
|
+
const { values } = parseArgs({
|
|
150
|
+
args: process.argv.slice(2),
|
|
151
|
+
options: {
|
|
152
|
+
verbose: {
|
|
153
|
+
type: 'boolean',
|
|
154
|
+
short: 'v',
|
|
155
|
+
},
|
|
156
|
+
'dry-run': {
|
|
157
|
+
type: 'boolean',
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
async function main() {
|
|
163
|
+
console.info('Running ${basename(scriptPath)}...')
|
|
164
|
+
|
|
165
|
+
if (values.verbose) {
|
|
166
|
+
console.info('Verbose mode enabled')
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (values['dry-run']) {
|
|
170
|
+
console.info('Dry run mode - no changes will be made')
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// TODO: Implement your script logic here
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
main().catch(console.error)
|
|
177
|
+
`;
|
|
178
|
+
writeFileSync(fullPath, template), console.info(pc.green(`\u2713 Created new script: ${relative(process.cwd(), fullPath)}`)), console.info(), console.info(pc.dim("Edit the script and update the TODO sections"));
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
function getAllScriptFiles(dir, baseDir = dir) {
|
|
182
|
+
const files = [];
|
|
183
|
+
if (!existsSync(dir))
|
|
184
|
+
return files;
|
|
185
|
+
try {
|
|
186
|
+
const entries = readdirSync(dir);
|
|
187
|
+
for (const entry of entries) {
|
|
188
|
+
const fullPath = join(dir, entry);
|
|
189
|
+
statSync(fullPath).isDirectory() ? files.push(...getAllScriptFiles(fullPath, baseDir)) : (entry.endsWith(".ts") || entry.endsWith(".js") || entry.endsWith(".cjs")) && files.push(relative(baseDir, fullPath).split("\\").join("/"));
|
|
190
|
+
}
|
|
191
|
+
} catch {
|
|
192
|
+
}
|
|
193
|
+
return files;
|
|
194
|
+
}
|
|
195
|
+
const ejectCommand = defineCommand({
|
|
196
|
+
meta: {
|
|
197
|
+
name: "eject",
|
|
198
|
+
description: "Eject built-in scripts into your project"
|
|
199
|
+
},
|
|
200
|
+
args: {
|
|
201
|
+
yes: {
|
|
202
|
+
type: "boolean",
|
|
203
|
+
description: "Skip confirmations and eject all files",
|
|
204
|
+
default: !1
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
async run({ args }) {
|
|
208
|
+
const cwd = process.cwd(), targetScriptsDir = join(cwd, "scripts"), sourceScriptsDir = findScriptsPackageRoot();
|
|
209
|
+
console.info(), console.info(pc.bold(pc.cyan("\u2699\uFE0F Eject Scripts"))), console.info(), sourceScriptsDir || (console.error(
|
|
210
|
+
pc.red(
|
|
211
|
+
"\u2717 Built-in scripts package (@take-out/scripts) not found or not installed"
|
|
212
|
+
)
|
|
213
|
+
), console.info(), console.info(pc.dim("Install with: bun add -d @take-out/scripts")), process.exit(1)), console.info(pc.dim(`Source: ${sourceScriptsDir}`)), console.info(pc.dim(`Target: ${targetScriptsDir}`)), console.info(), existsSync(targetScriptsDir) || (console.info(pc.yellow("\u26A0 Target scripts directory does not exist, will create it")), mkdirSync(targetScriptsDir, { recursive: !0 }));
|
|
214
|
+
const sourceFiles = getAllScriptFiles(sourceScriptsDir);
|
|
215
|
+
if (sourceFiles.length === 0) {
|
|
216
|
+
console.info(pc.yellow("No script files found in built-in scripts package"));
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const filesToSync = [], stats = {
|
|
220
|
+
new: 0,
|
|
221
|
+
modified: 0,
|
|
222
|
+
identical: 0
|
|
223
|
+
};
|
|
224
|
+
for (const file of sourceFiles) {
|
|
225
|
+
const sourcePath = join(sourceScriptsDir, file), targetPath = join(targetScriptsDir, file), status = compareFiles(sourcePath, targetPath);
|
|
226
|
+
stats[status]++, filesToSync.push({
|
|
227
|
+
name: file,
|
|
228
|
+
sourcePath,
|
|
229
|
+
targetPath,
|
|
230
|
+
status,
|
|
231
|
+
sourceSize: getFileSize(sourcePath),
|
|
232
|
+
targetSize: getFileSize(targetPath)
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
if (console.info(pc.bold("Summary:")), console.info(` ${pc.green(`${stats.new} new`)}`), console.info(` ${pc.yellow(`${stats.modified} modified`)}`), console.info(` ${pc.dim(`${stats.identical} identical`)}`), console.info(), stats.new === 0 && stats.modified === 0) {
|
|
236
|
+
console.info(pc.green("\u2713 All scripts are already up to date!"));
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
const sortOrder = { new: 0, modified: 1, identical: 2 };
|
|
240
|
+
filesToSync.sort((a, b) => sortOrder[a.status] - sortOrder[b.status]);
|
|
241
|
+
let syncedCount = 0;
|
|
242
|
+
for (const file of filesToSync)
|
|
243
|
+
if (args.yes && file.status !== "identical") {
|
|
244
|
+
const targetDir = dirname(file.targetPath);
|
|
245
|
+
existsSync(targetDir) || mkdirSync(targetDir, { recursive: !0 });
|
|
246
|
+
const content = readFileSync(file.sourcePath);
|
|
247
|
+
writeFileSync(file.targetPath, content), console.info(pc.green(` \u2713 ${file.name}`)), syncedCount++;
|
|
248
|
+
} else
|
|
249
|
+
await syncFileWithConfirmation(file) && syncedCount++;
|
|
250
|
+
console.info(), console.info(pc.bold(pc.green(`\u2713 Complete: ${syncedCount} file(s) ejected`))), console.info();
|
|
251
|
+
}
|
|
252
|
+
}), runSubCommand = defineCommand({
|
|
253
|
+
meta: {
|
|
254
|
+
name: "run",
|
|
255
|
+
description: "Run a script (for backwards compatibility)"
|
|
256
|
+
},
|
|
257
|
+
args: {
|
|
258
|
+
name: {
|
|
259
|
+
type: "positional",
|
|
260
|
+
description: "Script name",
|
|
261
|
+
required: !0
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
async run({ args, rawArgs }) {
|
|
265
|
+
const scriptPath = findScript(args.name);
|
|
266
|
+
scriptPath || (console.error(pc.red(`\u2717 Script not found: ${args.name}`)), console.info(), console.info(pc.dim("Run 'tko script' to see available scripts")), process.exit(1));
|
|
267
|
+
const scriptArgs = rawArgs.slice(rawArgs.indexOf(args.name) + 1);
|
|
268
|
+
await runScript(scriptPath, scriptArgs);
|
|
269
|
+
}
|
|
270
|
+
}), scriptCommand = defineCommand({
|
|
271
|
+
meta: {
|
|
272
|
+
name: "script",
|
|
273
|
+
description: "Hybrid script runner with filesystem discovery"
|
|
274
|
+
},
|
|
275
|
+
args: {
|
|
276
|
+
name: {
|
|
277
|
+
type: "positional",
|
|
278
|
+
description: "Script name or category to run/list",
|
|
279
|
+
required: !1
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
subCommands: {
|
|
283
|
+
new: newCommand,
|
|
284
|
+
run: runSubCommand,
|
|
285
|
+
eject: ejectCommand
|
|
286
|
+
},
|
|
287
|
+
async run({ args, rawArgs }) {
|
|
288
|
+
const scriptName = args.name || rawArgs[1];
|
|
289
|
+
if (!scriptName) {
|
|
290
|
+
listAllScripts(!1);
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
if (listCategoryScripts(scriptName))
|
|
294
|
+
return;
|
|
295
|
+
const scriptPath = findScript(scriptName);
|
|
296
|
+
scriptPath || (console.error(pc.red(`\u2717 Script not found: ${scriptName}`)), console.info(), console.info(pc.dim("Run 'tko script' to see available scripts")), process.exit(1));
|
|
297
|
+
const scriptArgs = rawArgs.slice(rawArgs.indexOf(scriptName) + 1);
|
|
298
|
+
await runScript(scriptPath, scriptArgs);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
function createShorthandCommand(name) {
|
|
302
|
+
return defineCommand({
|
|
303
|
+
meta: {
|
|
304
|
+
name,
|
|
305
|
+
description: "Run script directly"
|
|
306
|
+
},
|
|
307
|
+
args: {
|
|
308
|
+
args: {
|
|
309
|
+
type: "positional",
|
|
310
|
+
description: "Script and arguments",
|
|
311
|
+
required: !1
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
async run({ rawArgs }) {
|
|
315
|
+
const scriptName = rawArgs.length > 0 ? `${name}/${rawArgs[0]}` : name, scriptArgs = rawArgs.length > 0 ? ["script", scriptName, ...rawArgs.slice(1)] : ["script", name], { run } = scriptCommand;
|
|
316
|
+
run && await run({
|
|
317
|
+
args: {
|
|
318
|
+
name: scriptName,
|
|
319
|
+
_: rawArgs.slice(1)
|
|
320
|
+
},
|
|
321
|
+
rawArgs: scriptArgs,
|
|
322
|
+
cmd: scriptCommand
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
export {
|
|
328
|
+
createShorthandCommand,
|
|
329
|
+
discoverScripts,
|
|
330
|
+
findScript,
|
|
331
|
+
formatScriptList,
|
|
332
|
+
getLocalScriptsDir,
|
|
333
|
+
getScriptMetadata,
|
|
334
|
+
listAllScripts2 as listAllScripts,
|
|
335
|
+
listCategoryScripts2 as listCategoryScripts,
|
|
336
|
+
scriptCommand
|
|
337
|
+
};
|
|
338
|
+
//# sourceMappingURL=script.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/commands/script.ts"],
|
|
4
|
+
"mappings": "AAIA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe;AACxB,SAAS,MAAM,UAAU,SAAS,gBAAyB;AAC3D,SAAS,qBAAqB;AAE9B,SAAS,qBAAqB;AAC9B,OAAO,QAAQ;AAEf,SAAS,gBAAgB,2BAA2B;AACpD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA8LP;AAAA,EACE;AAAA,EACA,kBAAAA;AAAA,EACA,uBAAAC;AAAA,OACK;AA/LP,MAAM,YAAY,KAAK,QAAQ,GAAG,UAAU,GACtC,aAAa,KAAK,WAAW,mBAAmB;AAatD,SAAS,yBAAwC;AAC/C,MAAI;AACF,UAAM,WAAW,YAAY,QAAQ,gCAAgC,GAE/D,kBAAkB,cAAc,IAAI,IAAI,QAAQ,CAAC,GACjD,cAAc,KAAK,iBAAiB,IAAI,GACxC,UAAU,KAAK,aAAa,KAAK;AAEvC,QAAI,WAAW,OAAO;AACpB,aAAO;AAAA,EAEX,QAAc;AAAA,EAEd;AAEA,SAAO;AACT;AAGO,SAAS,qBAA6B;AAC3C,SAAO,KAAK,QAAQ,IAAI,GAAG,SAAS;AACtC;AAGA,SAAS,gBAAgB,UAAkC;AACzD,MAAI;AAEF,UAAM,QADU,aAAa,UAAU,OAAO,EACxB,MAAM;AAAA,CAAI,EAAE,MAAM,GAAG,EAAE,GAEvC,WAA2B,CAAC;AAElC,eAAW,QAAQ,OAAO;AAExB,YAAM,YAAY,KAAK,MAAM,qBAAqB;AAClD,MAAI,aAAa,UAAU,CAAC,MAC1B,SAAS,cAAc,UAAU,CAAC,EAAE,KAAK;AAI3C,YAAM,YAAY,KAAK,MAAM,cAAc;AAC3C,MAAI,aAAa,UAAU,CAAC,MAC1B,SAAS,OAAO,UAAU,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAAA,IAE/D;AAGA,UAAM,OAAO,SAAS,QAAQ;AAC9B,oBAAS,QAAQ,KAAK,SAEf;AAAA,EACT,QAAc;AACZ,WAAO,CAAC;AAAA,EACV;AACF;AAGA,SAAS,YAAyB;AAChC,MAAI;AACF,QAAI,WAAW,UAAU;AACvB,aAAO,KAAK,MAAM,aAAa,YAAY,OAAO,CAAC;AAAA,EAEvD,QAAc;AAAA,EAEd;AACA,SAAO,CAAC;AACV;AAGA,SAAS,UAAU,OAAoB;AACrC,MAAI;AACF,IAAK,WAAW,SAAS,KACvB,UAAU,WAAW,EAAE,WAAW,GAAK,CAAC,GAE1C,cAAc,YAAY,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,EAC1D,QAAc;AAAA,EAEd;AACF;AAGO,SAAS,kBAAkB,UAAkC;AAClE,QAAM,QAAQ,UAAU,GAClB,OAAO,SAAS,QAAQ;AAG9B,MAAI,MAAM,QAAQ,KAAK,MAAM,QAAQ,EAAE,UAAU,KAAK;AACpD,WAAO,MAAM,QAAQ;AAIvB,QAAM,WAAW,gBAAgB,QAAQ;AAGzC,eAAM,QAAQ,IAAI,UAClB,UAAU,KAAK,GAER;AACT;AAGO,SAAS,gBACd,KACA,UAAkB,KAClB,QAAgB,GAChB,WAAmB,GACE;AACrB,QAAM,UAAU,oBAAI,IAAoB;AAExC,MAAI,CAAC,WAAW,GAAG;AACjB,WAAO;AAGT,MAAI;AACF,UAAM,UAAU,YAAY,GAAG;AAE/B,eAAW,SAAS,SAAS;AAC3B,YAAM,WAAW,KAAK,KAAK,KAAK;AAGhC,UAFa,SAAS,QAAQ,EAErB,YAAY,GAAG;AAEtB,YAAI,UAAU,aAAa,SAAS;AAClC;AAGF,cAAM,aAAa,gBAAgB,UAAU,SAAS,QAAQ,GAAG,QAAQ;AACzE,mBAAW,CAAC,MAAM,IAAI,KAAK;AACzB,kBAAQ,IAAI,MAAM,IAAI;AAAA,MAE1B,WAAW,MAAM,SAAS,KAAK,KAAK,MAAM,SAAS,KAAK,GAAG;AAGzD,cAAM,aADe,SAAS,SAAS,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,GAAG,EACrC,QAAQ,cAAc,EAAE;AACxD,gBAAQ,IAAI,YAAY,QAAQ;AAAA,MAClC;AAAA,IACF;AAAA,EACF,QAAc;AAAA,EAEd;AAEA,SAAO;AACT;AAGO,SAAS,WAAW,MAA6B;AAEtD,QAAM,iBAAiB,KAAK,QAAQ,MAAM,GAAG,GAGvC,WAAW,mBAAmB;AAGpC,aAAW,OAAO,CAAC,OAAO,OAAO,EAAE,GAAG;AACpC,UAAM,YAAY,KAAK,UAAU,GAAG,cAAc,GAAG,GAAG,EAAE;AAC1D,QAAI,WAAW,SAAS;AACtB,aAAO;AAAA,EAEX;AAGA,QAAM,aAAa,uBAAuB;AAC1C,MAAI;AACF,eAAW,OAAO,CAAC,OAAO,OAAO,EAAE,GAAG;AACpC,YAAM,cAAc,KAAK,YAAY,GAAG,cAAc,GAAG,GAAG,EAAE;AAC9D,UAAI,WAAW,WAAW;AACxB,eAAO;AAAA,IAEX;AAGF,SAAO;AACT;AASA,eAAe,UAAU,YAAoB,MAA+B;AAC1E,UAAQ,KAAK,GAAG,IAAI,YAAY,SAAS,QAAQ,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,GACtE,QAAQ,KAAK;AAEb,MAAI;AACF,UAAM,EAAE,EAAE,IAAI,MAAM,OAAO,KAAK;AAChC,UAAM,QAAQ,UAAU,IAAI,IAAI;AAAA,EAClC,SAAS,KAAK;AACZ,YAAQ,MAAM,GAAG,IAAI,gCAA2B,GAAG,EAAE,CAAC,GACtD,QAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAGA,MAAM,aAAa,cAAc;AAAA,EAC/B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,aAAa,KAAK,MAClB,WAAW,mBAAmB,GAG9B,WAAW,KAAK,UAAU,GAAG,UAAU,KAAK,GAC5C,MAAM,QAAQ,QAAQ;AAG5B,IAAK,WAAW,GAAG,KACjB,UAAU,KAAK,EAAE,WAAW,GAAK,CAAC,GAIhC,WAAW,QAAQ,MACrB,QAAQ;AAAA,MACN,GAAG,IAAI,iCAA4B,SAAS,QAAQ,IAAI,GAAG,QAAQ,CAAC,EAAE;AAAA,IACxE,GACA,QAAQ,KAAK,CAAC;AAIhB,UAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAuBK,SAAS,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB1C,kBAAc,UAAU,QAAQ,GAChC,QAAQ,KAAK,GAAG,MAAM,8BAAyB,SAAS,QAAQ,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,GACnF,QAAQ,KAAK,GACb,QAAQ,KAAK,GAAG,IAAI,8CAA8C,CAAC;AAAA,EACrE;AACF,CAAC;AAGD,SAAS,kBAAkB,KAAa,UAAkB,KAAe;AACvE,QAAM,QAAkB,CAAC;AAEzB,MAAI,CAAC,WAAW,GAAG;AACjB,WAAO;AAGT,MAAI;AACF,UAAM,UAAU,YAAY,GAAG;AAE/B,eAAW,SAAS,SAAS;AAC3B,YAAM,WAAW,KAAK,KAAK,KAAK;AAGhC,MAFa,SAAS,QAAQ,EAErB,YAAY,IACnB,MAAM,KAAK,GAAG,kBAAkB,UAAU,OAAO,CAAC,KAElD,MAAM,SAAS,KAAK,KACpB,MAAM,SAAS,KAAK,KACpB,MAAM,SAAS,MAAM,MAGrB,MAAM,KAAK,SAAS,SAAS,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA,IAEhE;AAAA,EACF,QAAc;AAAA,EAEd;AAEA,SAAO;AACT;AAGA,MAAM,eAAe,cAAc;AAAA,EACjC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,QAAQ,IAAI,GAClB,mBAAmB,KAAK,KAAK,SAAS,GACtC,mBAAmB,uBAAuB;AAEhD,YAAQ,KAAK,GACb,QAAQ,KAAK,GAAG,KAAK,GAAG,KAAK,6BAAmB,CAAC,CAAC,GAClD,QAAQ,KAAK,GAER,qBACH,QAAQ;AAAA,MACN,GAAG;AAAA,QACD;AAAA,MACF;AAAA,IACF,GACA,QAAQ,KAAK,GACb,QAAQ,KAAK,GAAG,IAAI,4CAA4C,CAAC,GACjE,QAAQ,KAAK,CAAC,IAGhB,QAAQ,KAAK,GAAG,IAAI,WAAW,gBAAgB,EAAE,CAAC,GAClD,QAAQ,KAAK,GAAG,IAAI,WAAW,gBAAgB,EAAE,CAAC,GAClD,QAAQ,KAAK,GAGR,WAAW,gBAAgB,MAC9B,QAAQ,KAAK,GAAG,OAAO,gEAA2D,CAAC,GACnF,UAAU,kBAAkB,EAAE,WAAW,GAAK,CAAC;AAIjD,UAAM,cAAc,kBAAkB,gBAAgB;AAEtD,QAAI,YAAY,WAAW,GAAG;AAC5B,cAAQ,KAAK,GAAG,OAAO,mDAAmD,CAAC;AAC3E;AAAA,IACF;AAGA,UAAM,cAA4B,CAAC,GAC7B,QAAQ;AAAA,MACZ,KAAK;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAEA,eAAW,QAAQ,aAAa;AAC9B,YAAM,aAAa,KAAK,kBAAkB,IAAI,GACxC,aAAa,KAAK,kBAAkB,IAAI,GACxC,SAAS,aAAa,YAAY,UAAU;AAElD,YAAM,MAAM,KAEZ,YAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY,YAAY,UAAU;AAAA,QAClC,YAAY,YAAY,UAAU;AAAA,MACpC,CAAC;AAAA,IACH;AAQA,QANA,QAAQ,KAAK,GAAG,KAAK,UAAU,CAAC,GAChC,QAAQ,KAAK,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,GAChD,QAAQ,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM,QAAQ,WAAW,CAAC,EAAE,GAC3D,QAAQ,KAAK,KAAK,GAAG,IAAI,GAAG,MAAM,SAAS,YAAY,CAAC,EAAE,GAC1D,QAAQ,KAAK,GAET,MAAM,QAAQ,KAAK,MAAM,aAAa,GAAG;AAC3C,cAAQ,KAAK,GAAG,MAAM,4CAAuC,CAAC;AAC9D;AAAA,IACF;AAGA,UAAM,YAAY,EAAE,KAAK,GAAG,UAAU,GAAG,WAAW,EAAE;AACtD,gBAAY,KAAK,CAAC,GAAG,MAAM,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,CAAC;AAGpE,QAAI,cAAc;AAElB,eAAW,QAAQ;AACjB,UAAI,KAAK,OAAO,KAAK,WAAW,aAAa;AAE3C,cAAM,YAAY,QAAQ,KAAK,UAAU;AACzC,QAAK,WAAW,SAAS,KACvB,UAAU,WAAW,EAAE,WAAW,GAAK,CAAC;AAE1C,cAAM,UAAU,aAAa,KAAK,UAAU;AAC5C,sBAAc,KAAK,YAAY,OAAO,GACtC,QAAQ,KAAK,GAAG,MAAM,YAAO,KAAK,IAAI,EAAE,CAAC,GACzC;AAAA,MACF;AAEE,QADkB,MAAM,yBAAyB,IAAI,KAEnD;AAKN,YAAQ,KAAK,GACb,QAAQ,KAAK,GAAG,KAAK,GAAG,MAAM,oBAAe,WAAW,kBAAkB,CAAC,CAAC,GAC5E,QAAQ,KAAK;AAAA,EACf;AACF,CAAC,GAGK,gBAAgB,cAAc;AAAA,EAClC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,MAAM,QAAQ,GAAG;AAE3B,UAAM,aAAa,WAAW,KAAK,IAAI;AAEvC,IAAK,eACH,QAAQ,MAAM,GAAG,IAAI,4BAAuB,KAAK,IAAI,EAAE,CAAC,GACxD,QAAQ,KAAK,GACb,QAAQ,KAAK,GAAG,IAAI,2CAA2C,CAAC,GAChE,QAAQ,KAAK,CAAC;AAIhB,UAAM,aAAa,QAAQ,MAAM,QAAQ,QAAQ,KAAK,IAAI,IAAI,CAAC;AAE/D,UAAM,UAAU,YAAY,UAAU;AAAA,EACxC;AACF,CAAC,GAGY,gBAAgB,cAAc;AAAA,EACzC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AAAA,EACA,MAAM,IAAI,EAAE,MAAM,QAAQ,GAAG;AAG3B,UAAM,aAAa,KAAK,QAAQ,QAAQ,CAAC;AAGzC,QAAI,CAAC,YAAY;AACf,qBAAe,EAAK;AACpB;AAAA,IACF;AAGA,QAAI,oBAAoB,UAAU;AAChC;AAIF,UAAM,aAAa,WAAW,UAAU;AAExC,IAAK,eACH,QAAQ,MAAM,GAAG,IAAI,4BAAuB,UAAU,EAAE,CAAC,GACzD,QAAQ,KAAK,GACb,QAAQ,KAAK,GAAG,IAAI,2CAA2C,CAAC,GAChE,QAAQ,KAAK,CAAC;AAIhB,UAAM,aAAa,QAAQ,MAAM,QAAQ,QAAQ,UAAU,IAAI,CAAC;AAEhE,UAAM,UAAU,YAAY,UAAU;AAAA,EACxC;AACF,CAAC;AAGM,SAAS,uBAAuB,MAAc;AACnD,SAAO,cAAc;AAAA,IACnB,MAAM;AAAA,MACJ;AAAA,MACA,aAAa;AAAA,IACf;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,MAAM,IAAI,EAAE,QAAQ,GAAG;AAErB,YAAM,aAAa,QAAQ,SAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,KAAK,MAC5D,aACJ,QAAQ,SAAS,IACb,CAAC,UAAU,YAAY,GAAG,QAAQ,MAAM,CAAC,CAAC,IAC1C,CAAC,UAAU,IAAI,GAGf,EAAE,IAAI,IAAI;AAChB,MAAI,OACF,MAAM,IAAI;AAAA,QACR,MAAM;AAAA,UACJ,MAAM;AAAA,UACN,GAAG,QAAQ,MAAM,CAAC;AAAA,QACpB;AAAA,QACA,SAAS;AAAA,QACT,KAAK;AAAA,MACP,CAAQ;AAAA,IAEZ;AAAA,EACF,CAAC;AACH;",
|
|
5
|
+
"names": ["listAllScripts", "listCategoryScripts"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { existsSync, readdirSync, statSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join, relative, dirname, basename } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { defineCommand } from "citty";
|
|
6
|
+
import pc from "picocolors";
|
|
7
|
+
import { listAllScripts, listCategoryScripts } from "../utils/script-listing.mjs";
|
|
8
|
+
import { compareFiles, getFileSize, syncFileWithConfirmation } from "../utils/sync.mjs";
|
|
9
|
+
import { formatScriptList, listAllScripts as listAllScripts2, listCategoryScripts as listCategoryScripts2 } from "../utils/script-listing.mjs";
|
|
10
|
+
const CACHE_DIR = join(homedir(), ".takeout"),
|
|
11
|
+
CACHE_FILE = join(CACHE_DIR, "script-cache.json");
|
|
12
|
+
function findScriptsPackageRoot() {
|
|
13
|
+
try {
|
|
14
|
+
const resolved = import.meta.resolve("@take-out/scripts/package.json"),
|
|
15
|
+
packageJsonPath = fileURLToPath(new URL(resolved)),
|
|
16
|
+
packageRoot = join(packageJsonPath, ".."),
|
|
17
|
+
srcPath = join(packageRoot, "src");
|
|
18
|
+
if (existsSync(srcPath)) return srcPath;
|
|
19
|
+
} catch {}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
function getLocalScriptsDir() {
|
|
23
|
+
return join(process.cwd(), "scripts");
|
|
24
|
+
}
|
|
25
|
+
function extractMetadata(filePath) {
|
|
26
|
+
try {
|
|
27
|
+
const lines = readFileSync(filePath, "utf-8").split(`
|
|
28
|
+
`).slice(0, 20),
|
|
29
|
+
metadata = {};
|
|
30
|
+
for (const line of lines) {
|
|
31
|
+
const descMatch = line.match(/@description\s+(.+)/);
|
|
32
|
+
descMatch && descMatch[1] && (metadata.description = descMatch[1].trim());
|
|
33
|
+
const argsMatch = line.match(/@args\s+(.+)/);
|
|
34
|
+
argsMatch && argsMatch[1] && (metadata.args = argsMatch[1].split(",").map(a => a.trim()));
|
|
35
|
+
}
|
|
36
|
+
const stat = statSync(filePath);
|
|
37
|
+
return metadata.mtime = stat.mtimeMs, metadata;
|
|
38
|
+
} catch {
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function loadCache() {
|
|
43
|
+
try {
|
|
44
|
+
if (existsSync(CACHE_FILE)) return JSON.parse(readFileSync(CACHE_FILE, "utf-8"));
|
|
45
|
+
} catch {}
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
function saveCache(cache) {
|
|
49
|
+
try {
|
|
50
|
+
existsSync(CACHE_DIR) || mkdirSync(CACHE_DIR, {
|
|
51
|
+
recursive: !0
|
|
52
|
+
}), writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));
|
|
53
|
+
} catch {}
|
|
54
|
+
}
|
|
55
|
+
function getScriptMetadata(filePath) {
|
|
56
|
+
const cache = loadCache(),
|
|
57
|
+
stat = statSync(filePath);
|
|
58
|
+
if (cache[filePath] && cache[filePath].mtime === stat.mtimeMs) return cache[filePath];
|
|
59
|
+
const metadata = extractMetadata(filePath);
|
|
60
|
+
return cache[filePath] = metadata, saveCache(cache), metadata;
|
|
61
|
+
}
|
|
62
|
+
function discoverScripts(dir, baseDir = dir, depth = 0, maxDepth = 1) {
|
|
63
|
+
const scripts = /* @__PURE__ */new Map();
|
|
64
|
+
if (!existsSync(dir)) return scripts;
|
|
65
|
+
try {
|
|
66
|
+
const entries = readdirSync(dir);
|
|
67
|
+
for (const entry of entries) {
|
|
68
|
+
const fullPath = join(dir, entry);
|
|
69
|
+
if (statSync(fullPath).isDirectory()) {
|
|
70
|
+
if (entry === "helpers" || depth >= maxDepth) continue;
|
|
71
|
+
const subScripts = discoverScripts(fullPath, baseDir, depth + 1, maxDepth);
|
|
72
|
+
for (const [name, path] of subScripts) scripts.set(name, path);
|
|
73
|
+
} else if (entry.endsWith(".ts") || entry.endsWith(".js")) {
|
|
74
|
+
const scriptName = relative(baseDir, fullPath).split("\\").join("/").replace(/\.(ts|js)$/, "");
|
|
75
|
+
scripts.set(scriptName, fullPath);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
} catch {}
|
|
79
|
+
return scripts;
|
|
80
|
+
}
|
|
81
|
+
function findScript(name) {
|
|
82
|
+
const normalizedName = name.replace(/:/g, "/"),
|
|
83
|
+
localDir = getLocalScriptsDir();
|
|
84
|
+
for (const ext of [".ts", ".js", ""]) {
|
|
85
|
+
const localPath = join(localDir, `${normalizedName}${ext}`);
|
|
86
|
+
if (existsSync(localPath)) return localPath;
|
|
87
|
+
}
|
|
88
|
+
const builtInDir = findScriptsPackageRoot();
|
|
89
|
+
if (builtInDir) for (const ext of [".ts", ".js", ""]) {
|
|
90
|
+
const builtInPath = join(builtInDir, `${normalizedName}${ext}`);
|
|
91
|
+
if (existsSync(builtInPath)) return builtInPath;
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
async function runScript(scriptPath, args) {
|
|
96
|
+
console.info(pc.dim(`Running: ${relative(process.cwd(), scriptPath)}`)), console.info();
|
|
97
|
+
try {
|
|
98
|
+
const {
|
|
99
|
+
$
|
|
100
|
+
} = await import("bun");
|
|
101
|
+
await $`bun ${scriptPath} ${args}`;
|
|
102
|
+
} catch (err) {
|
|
103
|
+
console.error(pc.red(`\u2717 Error running script: ${err}`)), process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const newCommand = defineCommand({
|
|
107
|
+
meta: {
|
|
108
|
+
name: "new",
|
|
109
|
+
description: "Create a new script from template"
|
|
110
|
+
},
|
|
111
|
+
args: {
|
|
112
|
+
path: {
|
|
113
|
+
type: "positional",
|
|
114
|
+
description: "Path for the new script (e.g., ci/test)",
|
|
115
|
+
required: !0
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
async run({
|
|
119
|
+
args
|
|
120
|
+
}) {
|
|
121
|
+
const scriptPath = args.path,
|
|
122
|
+
localDir = getLocalScriptsDir(),
|
|
123
|
+
fullPath = join(localDir, `${scriptPath}.ts`),
|
|
124
|
+
dir = dirname(fullPath);
|
|
125
|
+
existsSync(dir) || mkdirSync(dir, {
|
|
126
|
+
recursive: !0
|
|
127
|
+
}), existsSync(fullPath) && (console.error(pc.red(`\u2717 Script already exists: ${relative(process.cwd(), fullPath)}`)), process.exit(1));
|
|
128
|
+
const template = `#!/usr/bin/env bun
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* @description TODO: Add description
|
|
132
|
+
* @args --verbose, --dry-run
|
|
133
|
+
*/
|
|
134
|
+
|
|
135
|
+
import { parseArgs } from 'node:util'
|
|
136
|
+
|
|
137
|
+
const { values } = parseArgs({
|
|
138
|
+
args: process.argv.slice(2),
|
|
139
|
+
options: {
|
|
140
|
+
verbose: {
|
|
141
|
+
type: 'boolean',
|
|
142
|
+
short: 'v',
|
|
143
|
+
},
|
|
144
|
+
'dry-run': {
|
|
145
|
+
type: 'boolean',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
async function main() {
|
|
151
|
+
console.info('Running ${basename(scriptPath)}...')
|
|
152
|
+
|
|
153
|
+
if (values.verbose) {
|
|
154
|
+
console.info('Verbose mode enabled')
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (values['dry-run']) {
|
|
158
|
+
console.info('Dry run mode - no changes will be made')
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// TODO: Implement your script logic here
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
main().catch(console.error)
|
|
165
|
+
`;
|
|
166
|
+
writeFileSync(fullPath, template), console.info(pc.green(`\u2713 Created new script: ${relative(process.cwd(), fullPath)}`)), console.info(), console.info(pc.dim("Edit the script and update the TODO sections"));
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
function getAllScriptFiles(dir, baseDir = dir) {
|
|
170
|
+
const files = [];
|
|
171
|
+
if (!existsSync(dir)) return files;
|
|
172
|
+
try {
|
|
173
|
+
const entries = readdirSync(dir);
|
|
174
|
+
for (const entry of entries) {
|
|
175
|
+
const fullPath = join(dir, entry);
|
|
176
|
+
statSync(fullPath).isDirectory() ? files.push(...getAllScriptFiles(fullPath, baseDir)) : (entry.endsWith(".ts") || entry.endsWith(".js") || entry.endsWith(".cjs")) && files.push(relative(baseDir, fullPath).split("\\").join("/"));
|
|
177
|
+
}
|
|
178
|
+
} catch {}
|
|
179
|
+
return files;
|
|
180
|
+
}
|
|
181
|
+
const ejectCommand = defineCommand({
|
|
182
|
+
meta: {
|
|
183
|
+
name: "eject",
|
|
184
|
+
description: "Eject built-in scripts into your project"
|
|
185
|
+
},
|
|
186
|
+
args: {
|
|
187
|
+
yes: {
|
|
188
|
+
type: "boolean",
|
|
189
|
+
description: "Skip confirmations and eject all files",
|
|
190
|
+
default: !1
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
async run({
|
|
194
|
+
args
|
|
195
|
+
}) {
|
|
196
|
+
const cwd = process.cwd(),
|
|
197
|
+
targetScriptsDir = join(cwd, "scripts"),
|
|
198
|
+
sourceScriptsDir = findScriptsPackageRoot();
|
|
199
|
+
console.info(), console.info(pc.bold(pc.cyan("\u2699\uFE0F Eject Scripts"))), console.info(), sourceScriptsDir || (console.error(pc.red("\u2717 Built-in scripts package (@take-out/scripts) not found or not installed")), console.info(), console.info(pc.dim("Install with: bun add -d @take-out/scripts")), process.exit(1)), console.info(pc.dim(`Source: ${sourceScriptsDir}`)), console.info(pc.dim(`Target: ${targetScriptsDir}`)), console.info(), existsSync(targetScriptsDir) || (console.info(pc.yellow("\u26A0 Target scripts directory does not exist, will create it")), mkdirSync(targetScriptsDir, {
|
|
200
|
+
recursive: !0
|
|
201
|
+
}));
|
|
202
|
+
const sourceFiles = getAllScriptFiles(sourceScriptsDir);
|
|
203
|
+
if (sourceFiles.length === 0) {
|
|
204
|
+
console.info(pc.yellow("No script files found in built-in scripts package"));
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const filesToSync = [],
|
|
208
|
+
stats = {
|
|
209
|
+
new: 0,
|
|
210
|
+
modified: 0,
|
|
211
|
+
identical: 0
|
|
212
|
+
};
|
|
213
|
+
for (const file of sourceFiles) {
|
|
214
|
+
const sourcePath = join(sourceScriptsDir, file),
|
|
215
|
+
targetPath = join(targetScriptsDir, file),
|
|
216
|
+
status = compareFiles(sourcePath, targetPath);
|
|
217
|
+
stats[status]++, filesToSync.push({
|
|
218
|
+
name: file,
|
|
219
|
+
sourcePath,
|
|
220
|
+
targetPath,
|
|
221
|
+
status,
|
|
222
|
+
sourceSize: getFileSize(sourcePath),
|
|
223
|
+
targetSize: getFileSize(targetPath)
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
if (console.info(pc.bold("Summary:")), console.info(` ${pc.green(`${stats.new} new`)}`), console.info(` ${pc.yellow(`${stats.modified} modified`)}`), console.info(` ${pc.dim(`${stats.identical} identical`)}`), console.info(), stats.new === 0 && stats.modified === 0) {
|
|
227
|
+
console.info(pc.green("\u2713 All scripts are already up to date!"));
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const sortOrder = {
|
|
231
|
+
new: 0,
|
|
232
|
+
modified: 1,
|
|
233
|
+
identical: 2
|
|
234
|
+
};
|
|
235
|
+
filesToSync.sort((a, b) => sortOrder[a.status] - sortOrder[b.status]);
|
|
236
|
+
let syncedCount = 0;
|
|
237
|
+
for (const file of filesToSync) if (args.yes && file.status !== "identical") {
|
|
238
|
+
const targetDir = dirname(file.targetPath);
|
|
239
|
+
existsSync(targetDir) || mkdirSync(targetDir, {
|
|
240
|
+
recursive: !0
|
|
241
|
+
});
|
|
242
|
+
const content = readFileSync(file.sourcePath);
|
|
243
|
+
writeFileSync(file.targetPath, content), console.info(pc.green(` \u2713 ${file.name}`)), syncedCount++;
|
|
244
|
+
} else (await syncFileWithConfirmation(file)) && syncedCount++;
|
|
245
|
+
console.info(), console.info(pc.bold(pc.green(`\u2713 Complete: ${syncedCount} file(s) ejected`))), console.info();
|
|
246
|
+
}
|
|
247
|
+
}),
|
|
248
|
+
runSubCommand = defineCommand({
|
|
249
|
+
meta: {
|
|
250
|
+
name: "run",
|
|
251
|
+
description: "Run a script (for backwards compatibility)"
|
|
252
|
+
},
|
|
253
|
+
args: {
|
|
254
|
+
name: {
|
|
255
|
+
type: "positional",
|
|
256
|
+
description: "Script name",
|
|
257
|
+
required: !0
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
async run({
|
|
261
|
+
args,
|
|
262
|
+
rawArgs
|
|
263
|
+
}) {
|
|
264
|
+
const scriptPath = findScript(args.name);
|
|
265
|
+
scriptPath || (console.error(pc.red(`\u2717 Script not found: ${args.name}`)), console.info(), console.info(pc.dim("Run 'tko script' to see available scripts")), process.exit(1));
|
|
266
|
+
const scriptArgs = rawArgs.slice(rawArgs.indexOf(args.name) + 1);
|
|
267
|
+
await runScript(scriptPath, scriptArgs);
|
|
268
|
+
}
|
|
269
|
+
}),
|
|
270
|
+
scriptCommand = defineCommand({
|
|
271
|
+
meta: {
|
|
272
|
+
name: "script",
|
|
273
|
+
description: "Hybrid script runner with filesystem discovery"
|
|
274
|
+
},
|
|
275
|
+
args: {
|
|
276
|
+
name: {
|
|
277
|
+
type: "positional",
|
|
278
|
+
description: "Script name or category to run/list",
|
|
279
|
+
required: !1
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
subCommands: {
|
|
283
|
+
new: newCommand,
|
|
284
|
+
run: runSubCommand,
|
|
285
|
+
eject: ejectCommand
|
|
286
|
+
},
|
|
287
|
+
async run({
|
|
288
|
+
args,
|
|
289
|
+
rawArgs
|
|
290
|
+
}) {
|
|
291
|
+
const scriptName = args.name || rawArgs[1];
|
|
292
|
+
if (!scriptName) {
|
|
293
|
+
listAllScripts(!1);
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (listCategoryScripts(scriptName)) return;
|
|
297
|
+
const scriptPath = findScript(scriptName);
|
|
298
|
+
scriptPath || (console.error(pc.red(`\u2717 Script not found: ${scriptName}`)), console.info(), console.info(pc.dim("Run 'tko script' to see available scripts")), process.exit(1));
|
|
299
|
+
const scriptArgs = rawArgs.slice(rawArgs.indexOf(scriptName) + 1);
|
|
300
|
+
await runScript(scriptPath, scriptArgs);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
function createShorthandCommand(name) {
|
|
304
|
+
return defineCommand({
|
|
305
|
+
meta: {
|
|
306
|
+
name,
|
|
307
|
+
description: "Run script directly"
|
|
308
|
+
},
|
|
309
|
+
args: {
|
|
310
|
+
args: {
|
|
311
|
+
type: "positional",
|
|
312
|
+
description: "Script and arguments",
|
|
313
|
+
required: !1
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
async run({
|
|
317
|
+
rawArgs
|
|
318
|
+
}) {
|
|
319
|
+
const scriptName = rawArgs.length > 0 ? `${name}/${rawArgs[0]}` : name,
|
|
320
|
+
scriptArgs = rawArgs.length > 0 ? ["script", scriptName, ...rawArgs.slice(1)] : ["script", name],
|
|
321
|
+
{
|
|
322
|
+
run
|
|
323
|
+
} = scriptCommand;
|
|
324
|
+
run && (await run({
|
|
325
|
+
args: {
|
|
326
|
+
name: scriptName,
|
|
327
|
+
_: rawArgs.slice(1)
|
|
328
|
+
},
|
|
329
|
+
rawArgs: scriptArgs,
|
|
330
|
+
cmd: scriptCommand
|
|
331
|
+
}));
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
export { createShorthandCommand, discoverScripts, findScript, formatScriptList, getLocalScriptsDir, getScriptMetadata, listAllScripts2 as listAllScripts, listCategoryScripts2 as listCategoryScripts, scriptCommand };
|
|
336
|
+
//# sourceMappingURL=script.mjs.map
|