@take-out/cli 0.0.52 → 0.0.57
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/dist/cjs/cli.cjs +3 -1
- package/dist/cjs/cli.js +3 -1
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/commands/run-all.cjs +69 -0
- package/dist/cjs/commands/run-all.js +59 -0
- package/dist/cjs/commands/run-all.js.map +6 -0
- package/dist/cjs/commands/run.cjs +2 -2
- package/dist/cjs/commands/run.js +2 -2
- package/dist/cjs/commands/run.js.map +1 -1
- package/dist/cjs/commands/script.cjs +8 -83
- package/dist/cjs/commands/script.js +8 -85
- package/dist/cjs/commands/script.js.map +1 -1
- package/dist/cjs/utils/script-listing.cjs +9 -9
- package/dist/cjs/utils/script-listing.js +8 -8
- package/dist/cjs/utils/script-listing.js.map +1 -1
- package/dist/cjs/utils/script-utils.cjs +91 -0
- package/dist/cjs/utils/script-utils.js +87 -0
- package/dist/cjs/utils/script-utils.js.map +6 -0
- package/dist/cjs/utils/script-utils.native.js +126 -0
- package/dist/cjs/utils/script-utils.native.js.map +6 -0
- package/dist/esm/cli.js +3 -0
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/cli.mjs +3 -1
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/commands/run-all.js +46 -0
- package/dist/esm/commands/run-all.js.map +6 -0
- package/dist/esm/commands/run-all.mjs +46 -0
- package/dist/esm/commands/run-all.mjs.map +1 -0
- package/dist/esm/commands/run.js +2 -2
- package/dist/esm/commands/run.js.map +1 -1
- package/dist/esm/commands/run.mjs +2 -2
- package/dist/esm/commands/run.mjs.map +1 -1
- package/dist/esm/commands/script.js +6 -84
- package/dist/esm/commands/script.js.map +1 -1
- package/dist/esm/commands/script.mjs +7 -79
- package/dist/esm/commands/script.mjs.map +1 -1
- package/dist/esm/utils/script-listing.js +1 -5
- package/dist/esm/utils/script-listing.js.map +1 -1
- package/dist/esm/utils/script-listing.mjs +1 -1
- package/dist/esm/utils/script-listing.mjs.map +1 -1
- package/dist/esm/utils/script-utils.js +80 -0
- package/dist/esm/utils/script-utils.js.map +6 -0
- package/dist/esm/utils/script-utils.mjs +66 -0
- package/dist/esm/utils/script-utils.mjs.map +1 -0
- package/dist/esm/utils/script-utils.native.js +112 -0
- package/dist/esm/utils/script-utils.native.js.map +6 -0
- package/package.json +7 -7
- package/scripts/seed.ts +12 -4
- package/src/cli.ts +3 -0
- package/src/commands/run-all.ts +62 -0
- package/src/commands/run.ts +3 -2
- package/src/commands/script.ts +7 -157
- package/src/utils/script-listing.ts +1 -6
- package/src/utils/script-utils.ts +153 -0
- package/types/utils/script-utils.d.ts +13 -0
- package/types/utils/script-utils.d.ts.map +1 -0
|
@@ -0,0 +1,80 @@
|
|
|
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 } from "node:path";
|
|
11
|
+
const CACHE_DIR = join(homedir(), ".takeout"), CACHE_FILE = join(CACHE_DIR, "script-cache.json");
|
|
12
|
+
function getLocalScriptsDir() {
|
|
13
|
+
return join(process.cwd(), "scripts");
|
|
14
|
+
}
|
|
15
|
+
function extractMetadata(filePath) {
|
|
16
|
+
try {
|
|
17
|
+
const lines = readFileSync(filePath, "utf-8").split(`
|
|
18
|
+
`).slice(0, 20), metadata = {};
|
|
19
|
+
for (const line of lines) {
|
|
20
|
+
const descMatch = line.match(/@description\s+(.+)/);
|
|
21
|
+
descMatch && descMatch[1] && (metadata.description = descMatch[1].trim());
|
|
22
|
+
const argsMatch = line.match(/@args\s+(.+)/);
|
|
23
|
+
argsMatch && argsMatch[1] && (metadata.args = argsMatch[1].split(",").map((a) => a.trim()));
|
|
24
|
+
}
|
|
25
|
+
const stat = statSync(filePath);
|
|
26
|
+
return metadata.mtime = stat.mtimeMs, metadata;
|
|
27
|
+
} catch {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function loadCache() {
|
|
32
|
+
try {
|
|
33
|
+
if (existsSync(CACHE_FILE))
|
|
34
|
+
return JSON.parse(readFileSync(CACHE_FILE, "utf-8"));
|
|
35
|
+
} catch {
|
|
36
|
+
}
|
|
37
|
+
return {};
|
|
38
|
+
}
|
|
39
|
+
function saveCache(cache) {
|
|
40
|
+
try {
|
|
41
|
+
existsSync(CACHE_DIR) || mkdirSync(CACHE_DIR, { recursive: !0 }), writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));
|
|
42
|
+
} catch {
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function getScriptMetadata(filePath) {
|
|
46
|
+
const cache = loadCache(), stat = statSync(filePath);
|
|
47
|
+
if (cache[filePath] && cache[filePath].mtime === stat.mtimeMs)
|
|
48
|
+
return cache[filePath];
|
|
49
|
+
const metadata = extractMetadata(filePath);
|
|
50
|
+
return cache[filePath] = metadata, saveCache(cache), metadata;
|
|
51
|
+
}
|
|
52
|
+
function discoverScripts(dir, baseDir = dir, depth = 0, maxDepth = 1) {
|
|
53
|
+
const scripts = /* @__PURE__ */ new Map();
|
|
54
|
+
if (!existsSync(dir))
|
|
55
|
+
return scripts;
|
|
56
|
+
try {
|
|
57
|
+
const entries = readdirSync(dir);
|
|
58
|
+
for (const entry of entries) {
|
|
59
|
+
const fullPath = join(dir, entry);
|
|
60
|
+
if (statSync(fullPath).isDirectory()) {
|
|
61
|
+
if (entry === "helpers" || depth >= maxDepth)
|
|
62
|
+
continue;
|
|
63
|
+
const subScripts = discoverScripts(fullPath, baseDir, depth + 1, maxDepth);
|
|
64
|
+
for (const [name, path] of subScripts)
|
|
65
|
+
scripts.set(name, path);
|
|
66
|
+
} else if (entry.endsWith(".ts") || entry.endsWith(".js")) {
|
|
67
|
+
const scriptName = relative(baseDir, fullPath).split("\\").join("/").replace(/\.(ts|js)$/, "");
|
|
68
|
+
scripts.set(scriptName, fullPath);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
} catch {
|
|
72
|
+
}
|
|
73
|
+
return scripts;
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
discoverScripts,
|
|
77
|
+
getLocalScriptsDir,
|
|
78
|
+
getScriptMetadata
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=script-utils.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/utils/script-utils.ts"],
|
|
4
|
+
"mappings": "AAIA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe;AACxB,SAAS,MAAM,gBAAgB;AAG/B,MAAM,YAAY,KAAK,QAAQ,GAAG,UAAU,GACtC,aAAa,KAAK,WAAW,mBAAmB;AAa/C,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;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { existsSync, readdirSync, statSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join, relative } from "node:path";
|
|
4
|
+
const CACHE_DIR = join(homedir(), ".takeout"),
|
|
5
|
+
CACHE_FILE = join(CACHE_DIR, "script-cache.json");
|
|
6
|
+
function getLocalScriptsDir() {
|
|
7
|
+
return join(process.cwd(), "scripts");
|
|
8
|
+
}
|
|
9
|
+
function extractMetadata(filePath) {
|
|
10
|
+
try {
|
|
11
|
+
const lines = readFileSync(filePath, "utf-8").split(`
|
|
12
|
+
`).slice(0, 20),
|
|
13
|
+
metadata = {};
|
|
14
|
+
for (const line of lines) {
|
|
15
|
+
const descMatch = line.match(/@description\s+(.+)/);
|
|
16
|
+
descMatch && descMatch[1] && (metadata.description = descMatch[1].trim());
|
|
17
|
+
const argsMatch = line.match(/@args\s+(.+)/);
|
|
18
|
+
argsMatch && argsMatch[1] && (metadata.args = argsMatch[1].split(",").map(a => a.trim()));
|
|
19
|
+
}
|
|
20
|
+
const stat = statSync(filePath);
|
|
21
|
+
return metadata.mtime = stat.mtimeMs, metadata;
|
|
22
|
+
} catch {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function loadCache() {
|
|
27
|
+
try {
|
|
28
|
+
if (existsSync(CACHE_FILE)) return JSON.parse(readFileSync(CACHE_FILE, "utf-8"));
|
|
29
|
+
} catch {}
|
|
30
|
+
return {};
|
|
31
|
+
}
|
|
32
|
+
function saveCache(cache) {
|
|
33
|
+
try {
|
|
34
|
+
existsSync(CACHE_DIR) || mkdirSync(CACHE_DIR, {
|
|
35
|
+
recursive: !0
|
|
36
|
+
}), writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));
|
|
37
|
+
} catch {}
|
|
38
|
+
}
|
|
39
|
+
function getScriptMetadata(filePath) {
|
|
40
|
+
const cache = loadCache(),
|
|
41
|
+
stat = statSync(filePath);
|
|
42
|
+
if (cache[filePath] && cache[filePath].mtime === stat.mtimeMs) return cache[filePath];
|
|
43
|
+
const metadata = extractMetadata(filePath);
|
|
44
|
+
return cache[filePath] = metadata, saveCache(cache), metadata;
|
|
45
|
+
}
|
|
46
|
+
function discoverScripts(dir, baseDir = dir, depth = 0, maxDepth = 1) {
|
|
47
|
+
const scripts = /* @__PURE__ */new Map();
|
|
48
|
+
if (!existsSync(dir)) return scripts;
|
|
49
|
+
try {
|
|
50
|
+
const entries = readdirSync(dir);
|
|
51
|
+
for (const entry of entries) {
|
|
52
|
+
const fullPath = join(dir, entry);
|
|
53
|
+
if (statSync(fullPath).isDirectory()) {
|
|
54
|
+
if (entry === "helpers" || depth >= maxDepth) continue;
|
|
55
|
+
const subScripts = discoverScripts(fullPath, baseDir, depth + 1, maxDepth);
|
|
56
|
+
for (const [name, path] of subScripts) scripts.set(name, path);
|
|
57
|
+
} else if (entry.endsWith(".ts") || entry.endsWith(".js")) {
|
|
58
|
+
const scriptName = relative(baseDir, fullPath).split("\\").join("/").replace(/\.(ts|js)$/, "");
|
|
59
|
+
scripts.set(scriptName, fullPath);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
} catch {}
|
|
63
|
+
return scripts;
|
|
64
|
+
}
|
|
65
|
+
export { discoverScripts, getLocalScriptsDir, getScriptMetadata };
|
|
66
|
+
//# sourceMappingURL=script-utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["existsSync","readdirSync","statSync","readFileSync","writeFileSync","mkdirSync","homedir","join","relative","CACHE_DIR","CACHE_FILE","getLocalScriptsDir","process","cwd","extractMetadata","filePath","lines","split","slice","metadata","line","descMatch","match","description","trim","argsMatch","args","map","a","stat","mtime","mtimeMs","loadCache","JSON","parse","saveCache","cache","recursive","stringify","getScriptMetadata","discoverScripts","dir","baseDir","depth","maxDepth","scripts","Map","entries","entry","fullPath","isDirectory","subScripts","name","path","set","endsWith","scriptName","replace"],"sources":["../../../src/utils/script-utils.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { existsSync, readdirSync, statSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
2
|
+
import { homedir } from "os";
|
|
3
|
+
import { join, relative } from "path";
|
|
4
|
+
var CACHE_DIR = join(homedir(), ".takeout"), CACHE_FILE = join(CACHE_DIR, "script-cache.json");
|
|
5
|
+
function getLocalScriptsDir() {
|
|
6
|
+
return join(process.cwd(), "scripts");
|
|
7
|
+
}
|
|
8
|
+
function extractMetadata(filePath) {
|
|
9
|
+
try {
|
|
10
|
+
var content = readFileSync(filePath, "utf-8"), lines = content.split(`
|
|
11
|
+
`).slice(0, 20), metadata = {}, _iteratorNormalCompletion = !0, _didIteratorError = !1, _iteratorError = void 0;
|
|
12
|
+
try {
|
|
13
|
+
for (var _iterator = lines[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
|
|
14
|
+
var line = _step.value, descMatch = line.match(/@description\s+(.+)/);
|
|
15
|
+
descMatch && descMatch[1] && (metadata.description = descMatch[1].trim());
|
|
16
|
+
var argsMatch = line.match(/@args\s+(.+)/);
|
|
17
|
+
argsMatch && argsMatch[1] && (metadata.args = argsMatch[1].split(",").map(function(a) {
|
|
18
|
+
return a.trim();
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
} catch (err) {
|
|
22
|
+
_didIteratorError = !0, _iteratorError = err;
|
|
23
|
+
} finally {
|
|
24
|
+
try {
|
|
25
|
+
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
26
|
+
} finally {
|
|
27
|
+
if (_didIteratorError)
|
|
28
|
+
throw _iteratorError;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
var stat = statSync(filePath);
|
|
32
|
+
return metadata.mtime = stat.mtimeMs, metadata;
|
|
33
|
+
} catch {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function loadCache() {
|
|
38
|
+
try {
|
|
39
|
+
if (existsSync(CACHE_FILE))
|
|
40
|
+
return JSON.parse(readFileSync(CACHE_FILE, "utf-8"));
|
|
41
|
+
} catch {
|
|
42
|
+
}
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
function saveCache(cache) {
|
|
46
|
+
try {
|
|
47
|
+
existsSync(CACHE_DIR) || mkdirSync(CACHE_DIR, {
|
|
48
|
+
recursive: !0
|
|
49
|
+
}), writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));
|
|
50
|
+
} catch {
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function getScriptMetadata(filePath) {
|
|
54
|
+
var cache = loadCache(), stat = statSync(filePath);
|
|
55
|
+
if (cache[filePath] && cache[filePath].mtime === stat.mtimeMs)
|
|
56
|
+
return cache[filePath];
|
|
57
|
+
var metadata = extractMetadata(filePath);
|
|
58
|
+
return cache[filePath] = metadata, saveCache(cache), metadata;
|
|
59
|
+
}
|
|
60
|
+
function discoverScripts(dir) {
|
|
61
|
+
var baseDir = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : dir, depth = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0, maxDepth = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 1, scripts = /* @__PURE__ */ new Map();
|
|
62
|
+
if (!existsSync(dir))
|
|
63
|
+
return scripts;
|
|
64
|
+
try {
|
|
65
|
+
var entries = readdirSync(dir), _iteratorNormalCompletion = !0, _didIteratorError = !1, _iteratorError = void 0;
|
|
66
|
+
try {
|
|
67
|
+
for (var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
|
|
68
|
+
var entry = _step.value, fullPath = join(dir, entry), stat = statSync(fullPath);
|
|
69
|
+
if (stat.isDirectory()) {
|
|
70
|
+
if (entry === "helpers" || depth >= maxDepth)
|
|
71
|
+
continue;
|
|
72
|
+
var subScripts = discoverScripts(fullPath, baseDir, depth + 1, maxDepth), _iteratorNormalCompletion1 = !0, _didIteratorError1 = !1, _iteratorError1 = void 0;
|
|
73
|
+
try {
|
|
74
|
+
for (var _iterator1 = subScripts[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = !0) {
|
|
75
|
+
var [name, path] = _step1.value;
|
|
76
|
+
scripts.set(name, path);
|
|
77
|
+
}
|
|
78
|
+
} catch (err) {
|
|
79
|
+
_didIteratorError1 = !0, _iteratorError1 = err;
|
|
80
|
+
} finally {
|
|
81
|
+
try {
|
|
82
|
+
!_iteratorNormalCompletion1 && _iterator1.return != null && _iterator1.return();
|
|
83
|
+
} finally {
|
|
84
|
+
if (_didIteratorError1)
|
|
85
|
+
throw _iteratorError1;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
} else if (entry.endsWith(".ts") || entry.endsWith(".js")) {
|
|
89
|
+
var relativePath = relative(baseDir, fullPath).split("\\").join("/"), scriptName = relativePath.replace(/\.(ts|js)$/, "");
|
|
90
|
+
scripts.set(scriptName, fullPath);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
} catch (err) {
|
|
94
|
+
_didIteratorError = !0, _iteratorError = err;
|
|
95
|
+
} finally {
|
|
96
|
+
try {
|
|
97
|
+
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
98
|
+
} finally {
|
|
99
|
+
if (_didIteratorError)
|
|
100
|
+
throw _iteratorError;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
} catch {
|
|
104
|
+
}
|
|
105
|
+
return scripts;
|
|
106
|
+
}
|
|
107
|
+
export {
|
|
108
|
+
discoverScripts,
|
|
109
|
+
getLocalScriptsDir,
|
|
110
|
+
getScriptMetadata
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=script-utils.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/utils/script-utils.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@take-out/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.57",
|
|
4
4
|
"description": "CLI tools for Takeout starter kit - interactive onboarding and project setup",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"source": "src/index.ts",
|
|
8
8
|
"main": "dist/cjs",
|
|
9
9
|
"module": "dist/esm",
|
|
10
|
-
"types": "./
|
|
10
|
+
"types": "./src/index.ts",
|
|
11
11
|
"bin": {
|
|
12
12
|
"takeout": "./cli.mjs",
|
|
13
13
|
"tko": "./cli.mjs"
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"./withOpSqliteStatic": "./src/withOpSqliteStatic.cjs"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
|
-
"build": "tamagui-build",
|
|
43
|
-
"watch": "
|
|
42
|
+
"build": "tamagui-build --skip-native --skip-types",
|
|
43
|
+
"watch": "tamagui-build --skip-native --skip-types --watch",
|
|
44
44
|
"typecheck": "tko run typecheck",
|
|
45
45
|
"lint": "oxlint src",
|
|
46
46
|
"lint:fix": "oxfmt src && oxlint --fix --fix-suggestions src",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@clack/prompts": "^0.8.2",
|
|
53
|
-
"@take-out/docs": "0.0.
|
|
54
|
-
"@take-out/scripts": "0.0.
|
|
53
|
+
"@take-out/docs": "0.0.57",
|
|
54
|
+
"@take-out/scripts": "0.0.57",
|
|
55
55
|
"citty": "^0.1.6",
|
|
56
56
|
"picocolors": "^1.1.1"
|
|
57
57
|
},
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
|
-
"@tamagui/build": "
|
|
67
|
+
"@tamagui/build": "2.0.0-rc.0",
|
|
68
68
|
"@types/node": "24.0.3",
|
|
69
69
|
"bun-types": "latest",
|
|
70
70
|
"oxfmt": "^0.16.0",
|
package/scripts/seed.ts
CHANGED
|
@@ -62,24 +62,32 @@ const seedPosts = [
|
|
|
62
62
|
id: 'seed-post-1',
|
|
63
63
|
userId: 'seed-user-1',
|
|
64
64
|
image: 'https://images.unsplash.com/photo-1511920170033-f8396924c348?w=1200',
|
|
65
|
+
imageWidth: 1200,
|
|
66
|
+
imageHeight: 800,
|
|
65
67
|
caption: 'morning coffee vibes',
|
|
66
68
|
},
|
|
67
69
|
{
|
|
68
70
|
id: 'seed-post-2',
|
|
69
71
|
userId: 'seed-user-2',
|
|
70
72
|
image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1200',
|
|
73
|
+
imageWidth: 1200,
|
|
74
|
+
imageHeight: 800,
|
|
71
75
|
caption: 'caught this sunset on my hike today',
|
|
72
76
|
},
|
|
73
77
|
{
|
|
74
78
|
id: 'seed-post-3',
|
|
75
79
|
userId: 'seed-user-3',
|
|
76
80
|
image: 'https://images.unsplash.com/photo-1552053831-71594a27632d?w=1200',
|
|
81
|
+
imageWidth: 1200,
|
|
82
|
+
imageHeight: 799,
|
|
77
83
|
caption: 'someone wanted to say hi',
|
|
78
84
|
},
|
|
79
85
|
{
|
|
80
86
|
id: 'seed-post-4',
|
|
81
87
|
userId: 'seed-user-4',
|
|
82
88
|
image: 'https://images.unsplash.com/photo-1480714378408-67cf0d13bc1b?w=1200',
|
|
89
|
+
imageWidth: 1200,
|
|
90
|
+
imageHeight: 799,
|
|
83
91
|
caption: 'city lights never get old',
|
|
84
92
|
},
|
|
85
93
|
]
|
|
@@ -176,10 +184,10 @@ async function seed() {
|
|
|
176
184
|
|
|
177
185
|
for (const p of seedPosts) {
|
|
178
186
|
await pool.query(
|
|
179
|
-
`INSERT INTO post (id, "userId", image, caption, "hiddenByAdmin", "createdAt", "commentCount")
|
|
180
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
181
|
-
ON CONFLICT (id) DO
|
|
182
|
-
[p.id, p.userId, p.image, p.caption, false, now, 0]
|
|
187
|
+
`INSERT INTO post (id, "userId", image, "imageWidth", "imageHeight", caption, "hiddenByAdmin", "createdAt", "commentCount")
|
|
188
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
|
|
189
|
+
ON CONFLICT (id) DO UPDATE SET "imageWidth" = $4, "imageHeight" = $5`,
|
|
190
|
+
[p.id, p.userId, p.image, p.imageWidth, p.imageHeight, p.caption, false, now, 0]
|
|
183
191
|
)
|
|
184
192
|
|
|
185
193
|
console.info(` created post: ${p.id}`)
|
package/src/cli.ts
CHANGED
|
@@ -15,6 +15,7 @@ import { docsCommand } from './commands/docs'
|
|
|
15
15
|
import { envSetupCommand } from './commands/env-setup'
|
|
16
16
|
import { onboardCommand } from './commands/onboard'
|
|
17
17
|
import { runCommand } from './commands/run'
|
|
18
|
+
import { runAllCommand } from './commands/run-all'
|
|
18
19
|
import { scriptCommand } from './commands/script'
|
|
19
20
|
import { syncCommand } from './commands/sync'
|
|
20
21
|
import { listAllScripts } from './utils/script-listing'
|
|
@@ -83,6 +84,7 @@ if (isShorthand) {
|
|
|
83
84
|
'docs',
|
|
84
85
|
'onboard',
|
|
85
86
|
'run',
|
|
87
|
+
'run-all',
|
|
86
88
|
'script',
|
|
87
89
|
'env:setup',
|
|
88
90
|
'sync',
|
|
@@ -130,6 +132,7 @@ const main = defineCommand({
|
|
|
130
132
|
docs: docsCommand,
|
|
131
133
|
'env:setup': envSetupCommand,
|
|
132
134
|
run: runCommand,
|
|
135
|
+
'run-all': runAllCommand,
|
|
133
136
|
script: scriptCommand,
|
|
134
137
|
sync: syncCommand,
|
|
135
138
|
changed: changedCommand,
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process'
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs'
|
|
3
|
+
import { resolve, parse } from 'node:path'
|
|
4
|
+
|
|
5
|
+
import { defineCommand } from 'citty'
|
|
6
|
+
|
|
7
|
+
export const runAllCommand = defineCommand({
|
|
8
|
+
meta: {
|
|
9
|
+
name: 'run-all',
|
|
10
|
+
description: 'Run multiple package.json scripts in parallel',
|
|
11
|
+
},
|
|
12
|
+
args: {
|
|
13
|
+
scripts: {
|
|
14
|
+
type: 'positional',
|
|
15
|
+
description: 'Scripts to run in parallel',
|
|
16
|
+
required: false,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
run: async () => {
|
|
20
|
+
// Get all arguments after 'run-all'
|
|
21
|
+
const scriptArgs = process.argv.slice(3)
|
|
22
|
+
|
|
23
|
+
// Find the project root by looking for package.json with workspaces or takeout field
|
|
24
|
+
let currentDir = process.cwd()
|
|
25
|
+
let projectRoot = ''
|
|
26
|
+
|
|
27
|
+
while (currentDir !== parse(currentDir).root) {
|
|
28
|
+
const packageJsonPath = resolve(currentDir, 'package.json')
|
|
29
|
+
if (existsSync(packageJsonPath)) {
|
|
30
|
+
try {
|
|
31
|
+
const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf8'))
|
|
32
|
+
if (pkg.workspaces || pkg.takeout) {
|
|
33
|
+
projectRoot = currentDir
|
|
34
|
+
break
|
|
35
|
+
}
|
|
36
|
+
} catch {}
|
|
37
|
+
}
|
|
38
|
+
currentDir = resolve(currentDir, '..')
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (!projectRoot) {
|
|
42
|
+
console.error('Could not find project root')
|
|
43
|
+
process.exit(1)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// check if local packages/scripts exists (takeout monorepo), otherwise use installed package
|
|
47
|
+
const localScriptsPath = resolve(projectRoot, 'packages/scripts/src/run.ts')
|
|
48
|
+
const scriptPath = existsSync(localScriptsPath)
|
|
49
|
+
? localScriptsPath
|
|
50
|
+
: resolve(projectRoot, 'node_modules/@take-out/scripts/src/run.ts')
|
|
51
|
+
|
|
52
|
+
const child = spawn('bun', [scriptPath, ...scriptArgs], {
|
|
53
|
+
stdio: 'inherit',
|
|
54
|
+
shell: false,
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
const code = await new Promise<number>((resolve) => {
|
|
58
|
+
child.on('exit', (code) => resolve(code || 0))
|
|
59
|
+
})
|
|
60
|
+
process.exit(code)
|
|
61
|
+
},
|
|
62
|
+
})
|
package/src/commands/run.ts
CHANGED
|
@@ -34,7 +34,7 @@ export const runCommand = defineCommand({
|
|
|
34
34
|
|
|
35
35
|
if (hasAllFlag) {
|
|
36
36
|
// Run all scripts in this category in parallel
|
|
37
|
-
const { discoverScripts } = await import('
|
|
37
|
+
const { discoverScripts } = await import('../utils/script-utils')
|
|
38
38
|
const { runScriptsInParallel } = await import('../utils/parallel-runner')
|
|
39
39
|
const pc = (await import('picocolors')).default
|
|
40
40
|
const categoryScripts = discoverScripts(categoryPath)
|
|
@@ -59,7 +59,8 @@ export const runCommand = defineCommand({
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
// Lazy load script functions only when needed
|
|
62
|
-
const { discoverScripts, getScriptMetadata } =
|
|
62
|
+
const { discoverScripts, getScriptMetadata } =
|
|
63
|
+
await import('../utils/script-utils')
|
|
63
64
|
const pc = (await import('picocolors')).default
|
|
64
65
|
|
|
65
66
|
// List scripts in this category
|