@datamitsu/datamitsu 0.1.15 → 0.2.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/bin/index.js +4 -4
- package/get-exe.js +2 -2
- package/lib/index.d.ts +13 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +54 -53
- package/lib/index.js.map +1 -1
- package/package.json +11 -10
- package/parsers-oci.json +8 -0
package/bin/index.js
CHANGED
|
@@ -4,12 +4,12 @@ import { spawnSync } from "node:child_process";
|
|
|
4
4
|
|
|
5
5
|
import { getExePath } from "../get-exe.js";
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
if (!
|
|
9
|
-
|
|
7
|
+
const arguments_ = process.argv.slice(2);
|
|
8
|
+
if (!arguments_.includes("--binary-command")) {
|
|
9
|
+
arguments_.unshift("--binary-command", "datamitsu");
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
const result = spawnSync(getExePath(),
|
|
12
|
+
const result = spawnSync(getExePath(), arguments_, { stdio: "inherit" });
|
|
13
13
|
|
|
14
14
|
if (result.error) {
|
|
15
15
|
throw result.error;
|
package/get-exe.js
CHANGED
|
@@ -3,9 +3,9 @@ import { createRequire } from "node:module";
|
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
|
|
5
5
|
export function getExePath() {
|
|
6
|
-
const
|
|
6
|
+
const extension = process.platform === "win32" ? ".exe" : "";
|
|
7
7
|
const packageName = `@datamitsu/datamitsu-${process.platform}-${process.arch}`;
|
|
8
|
-
const exeName = `datamitsu${
|
|
8
|
+
const exeName = `datamitsu${extension}`;
|
|
9
9
|
|
|
10
10
|
try {
|
|
11
11
|
const require = createRequire(import.meta.url);
|
package/lib/index.d.ts
CHANGED
|
@@ -12,6 +12,16 @@ interface PlanJSON {
|
|
|
12
12
|
groups: GroupJSON[];
|
|
13
13
|
operation: string;
|
|
14
14
|
rootPath: string;
|
|
15
|
+
/**
|
|
16
|
+
* Tools that will not run, and why. Always present; empty when none.
|
|
17
|
+
*/
|
|
18
|
+
skipped: SkippedToolJSON[];
|
|
19
|
+
}
|
|
20
|
+
interface SkippedToolJSON {
|
|
21
|
+
detail?: string;
|
|
22
|
+
operation: string;
|
|
23
|
+
reason: "config" | "not-narrowable" | "unsupported-platform";
|
|
24
|
+
toolName: string;
|
|
15
25
|
}
|
|
16
26
|
interface SpawnRaw {
|
|
17
27
|
exitCode: number;
|
|
@@ -22,11 +32,13 @@ interface SpawnRaw {
|
|
|
22
32
|
interface TaskJSON {
|
|
23
33
|
app: string;
|
|
24
34
|
args: string[];
|
|
25
|
-
|
|
35
|
+
arity: string;
|
|
36
|
+
coverage: string;
|
|
26
37
|
excludeGlobs?: string[];
|
|
27
38
|
fileCount: number;
|
|
28
39
|
files: string[];
|
|
29
40
|
globs?: string[];
|
|
41
|
+
granularity: string;
|
|
30
42
|
scope: string;
|
|
31
43
|
toolName: string;
|
|
32
44
|
workingDir: string;
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/tool-command.ts","../src/commands/check.ts","../src/commands/exec.ts","../src/commands/version.ts","../src/commands/cache.ts","../src/commands/fix.ts","../src/commands/lint.ts","../src/index.ts"],"mappings":";UAAiB;EACf,gBAAgB;EAChB;;UAGe;EACf;EACA,OAAO;;UAGQ;EACf;EACA,QAAQ;EACR;EACA;;UAGe;EACf;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/tool-command.ts","../src/commands/check.ts","../src/commands/exec.ts","../src/commands/version.ts","../src/commands/cache.ts","../src/commands/fix.ts","../src/commands/lint.ts","../src/index.ts"],"mappings":";UAAiB;EACf,gBAAgB;EAChB;;UAGe;EACf;EACA,OAAO;;UAGQ;EACf;EACA,QAAQ;EACR;EACA;;;;EAIA,SAAS;;UAGM;EACf;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;UC1Ce;EACf;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe,2BAA2B;EAC1C;EACA;;KAGU;EACN;EAAe;EAAkB,KAAK;EAAU;;EAChD;EAAkB,KAAK;EAAU;;EACjC;EAAgB,KAAK;EAAU;;EAC/B,MAAM;EAAU,KAAK;EAAU;;;;KClBzB,eAAe;KAEf;EACN;EAAe;EAAkB,KAAK;EAAU;;EAChD;EAAkB,KAAK;EAAU;;EACjC;EAAgB,KAAK;EAAU;;EAC/B,MAAM;EAAU,OAAO;EAAY,KAAK;EAAU;;iBAIlC,MAAM,UAAS,eAAoB,QAAQ;;;UCZhD;EACf;EACA;EACA;EACA;EACA;EACA;;KAGU;EACN;EAAe;EAAkB,KAAK;EAAU;;EAChD;EAAkB,KAAK;EAAU;EAAgB;EAAgB;;EACjE,KAAK;EAAU;EAAe,OAAO;;UAE1B;EACf;EACA;EACA;;iBAGoB,KAAK,kBAAkB,UAAS,cAAmB,QAAQ;iBA6CjE,cAAc,iBAAiB;;;KCjEnC;EACN;EAAe;EAAkB,KAAK;EAAU;;EAChD,KAAK;EAAU;EAAe;;iBAEd,WAAW,QAAQ;;;UCJxB;EACf;EACA;EACA;;KAGU;EACN;EAAe;EAAkB,KAAK;EAAU;;EAChD;EAAiB,KAAK;EAAU;;UAErB;EACf;;KAGU;EACN;EAAe;EAAkB,KAAK;EAAU;;EAChD;EAAc,KAAK;EAAU;;cAEtB;WACU,QAAA,UAAA,sBAAyB,QAAQ;WA8BxC,YAAA,QAAQ;WAmBK,cAAA,UAAA,4BAA+B,QAAQ;;;;KClExD,aAAa;KACb,YAAY;cAEX,MAAG,UAAA,uBAAA,QAAA;;;KCHJ,cAAc;KACd,aAAa;cAEZ,OAAI,UAAA,uBAAA,QAAA"}
|
package/lib/index.js
CHANGED
|
@@ -4,9 +4,9 @@ import { dirname, join } from "node:path";
|
|
|
4
4
|
import { x } from "tinyexec";
|
|
5
5
|
//#region ../../packaging/npm/datamitsu/get-exe.js
|
|
6
6
|
function getExePath() {
|
|
7
|
-
const
|
|
7
|
+
const extension = process.platform === "win32" ? ".exe" : "";
|
|
8
8
|
const packageName = `@datamitsu/datamitsu-${process.platform}-${process.arch}`;
|
|
9
|
-
const exeName = `datamitsu${
|
|
9
|
+
const exeName = `datamitsu${extension}`;
|
|
10
10
|
try {
|
|
11
11
|
const exePath = join(dirname(createRequire(import.meta.url).resolve(`${packageName}/package.json`)), exeName);
|
|
12
12
|
if (existsSync(exePath)) return exePath;
|
|
@@ -15,17 +15,17 @@ function getExePath() {
|
|
|
15
15
|
}
|
|
16
16
|
//#endregion
|
|
17
17
|
//#region src/spawn.ts
|
|
18
|
-
async function spawn(
|
|
18
|
+
async function spawn(arguments_, options = {}) {
|
|
19
19
|
const { cwd, stdio = "pipe" } = options;
|
|
20
20
|
const binaryPath = getExePath();
|
|
21
|
-
const
|
|
21
|
+
const fullArguments = [
|
|
22
22
|
"--binary-command",
|
|
23
23
|
"datamitsu",
|
|
24
|
-
...
|
|
24
|
+
...arguments_
|
|
25
25
|
];
|
|
26
26
|
let result;
|
|
27
27
|
try {
|
|
28
|
-
result = await x(binaryPath,
|
|
28
|
+
result = await x(binaryPath, fullArguments, {
|
|
29
29
|
nodeOptions: {
|
|
30
30
|
cwd,
|
|
31
31
|
stdio
|
|
@@ -47,10 +47,10 @@ async function spawn(args, options = {}) {
|
|
|
47
47
|
const cache = {
|
|
48
48
|
async clear(options = {}) {
|
|
49
49
|
const { all = false, cwd, dryRun = false } = options;
|
|
50
|
-
const
|
|
51
|
-
if (all)
|
|
52
|
-
if (dryRun)
|
|
53
|
-
const raw = await spawn(
|
|
50
|
+
const arguments_ = ["cache", "clear"];
|
|
51
|
+
if (all) arguments_.push("--all");
|
|
52
|
+
if (dryRun) arguments_.push("--dry-run");
|
|
53
|
+
const raw = await spawn(arguments_, cwd ? { cwd } : {});
|
|
54
54
|
if (raw.failed) return {
|
|
55
55
|
error: raw.stderr || raw.stdout,
|
|
56
56
|
exitCode: raw.exitCode,
|
|
@@ -123,24 +123,24 @@ function extractJSON(output) {
|
|
|
123
123
|
}
|
|
124
124
|
function findJSONEnd(output, start) {
|
|
125
125
|
let depth = 0;
|
|
126
|
-
let
|
|
127
|
-
let
|
|
128
|
-
for (let
|
|
129
|
-
const ch = output[
|
|
130
|
-
if (
|
|
131
|
-
else if (
|
|
132
|
-
if (ch === "\\")
|
|
133
|
-
else if (ch === "\"")
|
|
126
|
+
let isInString = false;
|
|
127
|
+
let isEscape = false;
|
|
128
|
+
for (let index = start; index < output.length; index++) {
|
|
129
|
+
const ch = output[index];
|
|
130
|
+
if (isEscape) isEscape = false;
|
|
131
|
+
else if (isInString) {
|
|
132
|
+
if (ch === "\\") isEscape = true;
|
|
133
|
+
else if (ch === "\"") isInString = false;
|
|
134
134
|
} else switch (ch) {
|
|
135
135
|
case "\"":
|
|
136
|
-
|
|
136
|
+
isInString = true;
|
|
137
137
|
break;
|
|
138
138
|
case "{":
|
|
139
139
|
depth++;
|
|
140
140
|
break;
|
|
141
141
|
case "}":
|
|
142
142
|
depth--;
|
|
143
|
-
if (depth === 0) return
|
|
143
|
+
if (depth === 0) return index;
|
|
144
144
|
break;
|
|
145
145
|
}
|
|
146
146
|
}
|
|
@@ -148,27 +148,27 @@ function findJSONEnd(output, start) {
|
|
|
148
148
|
}
|
|
149
149
|
//#endregion
|
|
150
150
|
//#region src/tool-command.ts
|
|
151
|
-
function
|
|
151
|
+
function buildArguments$1(commandName, options = {}) {
|
|
152
152
|
const { beforeConfig = [], config = [], explain = false, files = [], fileScoped = false, noAutoConfig = false, tools = [] } = options;
|
|
153
|
-
const
|
|
154
|
-
if (explain === true)
|
|
155
|
-
else if (explain)
|
|
156
|
-
if (fileScoped)
|
|
157
|
-
if (tools.length > 0)
|
|
158
|
-
for (const c of config)
|
|
159
|
-
for (const bc of beforeConfig)
|
|
160
|
-
if (noAutoConfig)
|
|
161
|
-
|
|
162
|
-
return
|
|
153
|
+
const arguments_ = [commandName];
|
|
154
|
+
if (explain === true) arguments_.push("--explain");
|
|
155
|
+
else if (explain) arguments_.push(`--explain=${explain}`);
|
|
156
|
+
if (fileScoped) arguments_.push("--file-scoped");
|
|
157
|
+
if (tools.length > 0) arguments_.push("--tools", tools.join(","));
|
|
158
|
+
for (const c of config) arguments_.push("--config", c);
|
|
159
|
+
for (const bc of beforeConfig) arguments_.push("--before-config", bc);
|
|
160
|
+
if (noAutoConfig) arguments_.push("--no-auto-config");
|
|
161
|
+
arguments_.push(...files);
|
|
162
|
+
return arguments_;
|
|
163
163
|
}
|
|
164
164
|
function createToolCommand(commandName) {
|
|
165
165
|
return async function(options = {}) {
|
|
166
166
|
const { explain = false } = options;
|
|
167
|
-
const
|
|
167
|
+
const arguments_ = buildArguments$1(commandName, options);
|
|
168
168
|
const spawnOptions = {};
|
|
169
169
|
if (options.cwd !== void 0) spawnOptions.cwd = options.cwd;
|
|
170
170
|
if (options.stdio !== void 0) spawnOptions.stdio = options.stdio;
|
|
171
|
-
const raw = await spawn(
|
|
171
|
+
const raw = await spawn(arguments_, spawnOptions);
|
|
172
172
|
if (raw.failed) return {
|
|
173
173
|
error: raw.stderr || raw.stdout,
|
|
174
174
|
exitCode: raw.exitCode,
|
|
@@ -176,9 +176,9 @@ function createToolCommand(commandName) {
|
|
|
176
176
|
success: false
|
|
177
177
|
};
|
|
178
178
|
if (explain === "json") try {
|
|
179
|
-
const
|
|
179
|
+
const jsonString = extractJSON(raw.stdout) || raw.stdout;
|
|
180
180
|
return {
|
|
181
|
-
plan: JSON.parse(
|
|
181
|
+
plan: JSON.parse(jsonString),
|
|
182
182
|
raw,
|
|
183
183
|
success: true
|
|
184
184
|
};
|
|
@@ -207,11 +207,11 @@ function createToolCommand(commandName) {
|
|
|
207
207
|
const baseCheck = createToolCommand("check");
|
|
208
208
|
async function check(options = {}) {
|
|
209
209
|
if (options.explain !== "json") return baseCheck(options);
|
|
210
|
-
const
|
|
210
|
+
const arguments_ = buildArguments$1("check", options);
|
|
211
211
|
const spawnOptions = {};
|
|
212
212
|
if (options.cwd !== void 0) spawnOptions.cwd = options.cwd;
|
|
213
213
|
if (options.stdio !== void 0) spawnOptions.stdio = options.stdio;
|
|
214
|
-
const raw = await spawn(
|
|
214
|
+
const raw = await spawn(arguments_, spawnOptions);
|
|
215
215
|
if (raw.failed) return {
|
|
216
216
|
error: raw.stderr || raw.stdout,
|
|
217
217
|
exitCode: raw.exitCode,
|
|
@@ -240,11 +240,11 @@ async function check(options = {}) {
|
|
|
240
240
|
//#endregion
|
|
241
241
|
//#region src/commands/exec.ts
|
|
242
242
|
async function exec(appName, options = {}) {
|
|
243
|
-
const
|
|
244
|
-
const
|
|
245
|
-
if (options.cwd !== void 0)
|
|
246
|
-
if (options.stdio !== void 0)
|
|
247
|
-
const raw = await spawn(
|
|
243
|
+
const spawnArguments = buildArguments(appName, options);
|
|
244
|
+
const spawnOptions = {};
|
|
245
|
+
if (options.cwd !== void 0) spawnOptions.cwd = options.cwd;
|
|
246
|
+
if (options.stdio !== void 0) spawnOptions.stdio = options.stdio;
|
|
247
|
+
const raw = await spawn(spawnArguments, spawnOptions);
|
|
248
248
|
if (!appName) {
|
|
249
249
|
if (raw.failed) return {
|
|
250
250
|
error: raw.stderr || raw.stdout,
|
|
@@ -278,8 +278,9 @@ function parseToolList(output) {
|
|
|
278
278
|
const tools = [];
|
|
279
279
|
let currentType = null;
|
|
280
280
|
const typePattern = /^\[(binary|uv|node|jvm|go|shell)\]$/;
|
|
281
|
-
const toolPattern = /^ {2}(\S+)(
|
|
282
|
-
|
|
281
|
+
const toolPattern = /^ {2}(\S+)(?:[ \t]{2,}([^\s].*))?$/;
|
|
282
|
+
const lines = output.split("\n").map((line) => line.replace(ANSI_PATTERN, ""));
|
|
283
|
+
for (const line of lines) {
|
|
283
284
|
const typeMatch = line.match(typePattern);
|
|
284
285
|
if (typeMatch?.[1]) currentType = typeMatch[1];
|
|
285
286
|
else if (currentType) {
|
|
@@ -293,14 +294,14 @@ function parseToolList(output) {
|
|
|
293
294
|
}
|
|
294
295
|
return tools;
|
|
295
296
|
}
|
|
296
|
-
function
|
|
297
|
-
const { args = [], beforeConfig = [], config = [], noAutoConfig = false } = options;
|
|
298
|
-
const
|
|
299
|
-
for (const c of config)
|
|
300
|
-
for (const bc of beforeConfig)
|
|
301
|
-
if (noAutoConfig)
|
|
302
|
-
if (appName)
|
|
303
|
-
return
|
|
297
|
+
function buildArguments(appName, options = {}) {
|
|
298
|
+
const { args: arguments_ = [], beforeConfig = [], config = [], noAutoConfig = false } = options;
|
|
299
|
+
const spawnArguments = ["exec"];
|
|
300
|
+
for (const c of config) spawnArguments.push("--config", c);
|
|
301
|
+
for (const bc of beforeConfig) spawnArguments.push("--before-config", bc);
|
|
302
|
+
if (noAutoConfig) spawnArguments.push("--no-auto-config");
|
|
303
|
+
if (appName) spawnArguments.push(appName, ...arguments_);
|
|
304
|
+
return spawnArguments;
|
|
304
305
|
}
|
|
305
306
|
//#endregion
|
|
306
307
|
//#region src/commands/fix.ts
|
|
@@ -321,7 +322,7 @@ async function version() {
|
|
|
321
322
|
return {
|
|
322
323
|
raw,
|
|
323
324
|
success: true,
|
|
324
|
-
version: (raw.stdout.trim().split("\n")[0] ?? "").replace(/^.*version\s+/, "")
|
|
325
|
+
version: (raw.stdout.trim().split("\n", 1)[0] ?? "").replace(/^.*version\s+/, "")
|
|
325
326
|
};
|
|
326
327
|
}
|
|
327
328
|
//#endregion
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["buildArgs","buildArgs"],"sources":["../../../packaging/npm/datamitsu/get-exe.js","../src/spawn.ts","../src/commands/cache.ts","../src/json.ts","../src/tool-command.ts","../src/commands/check.ts","../src/commands/exec.ts","../src/commands/fix.ts","../src/commands/lint.ts","../src/commands/version.ts","../src/index.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\n\nexport function getExePath() {\n const ext = process.platform === \"win32\" ? \".exe\" : \"\";\n const packageName = `@datamitsu/datamitsu-${process.platform}-${process.arch}`;\n const exeName = `datamitsu${ext}`;\n\n try {\n const require = createRequire(import.meta.url);\n const packageJson = require.resolve(`${packageName}/package.json`);\n const exePath = join(dirname(packageJson), exeName);\n\n if (existsSync(exePath)) {\n return exePath;\n }\n } catch {\n // Package not found\n }\n\n throw new Error(\n `datamitsu binary not found for platform ${process.platform}-${process.arch}.\\n` +\n `Please make sure the package \"${packageName}\" is installed.\\n` +\n `If you're seeing this error, try reinstalling: npm install @datamitsu/datamitsu`,\n );\n}\n","import { getExePath } from \"@datamitsu/datamitsu/get-exe.js\";\nimport { x } from \"tinyexec\";\n\nimport type { SpawnRaw } from \"./types.js\";\n\nexport interface SpawnOptions {\n cwd?: string;\n stdio?: \"inherit\" | \"pipe\";\n}\n\nexport async function spawn(args: string[], options: SpawnOptions = {}): Promise<SpawnRaw> {\n const { cwd, stdio = \"pipe\" } = options;\n\n const binaryPath = getExePath();\n const fullArgs = [\"--binary-command\", \"datamitsu\", ...args];\n\n let result;\n try {\n result = await x(binaryPath, fullArgs, {\n nodeOptions: { cwd, stdio },\n throwOnError: false,\n });\n } catch (error) {\n throw new Error(\n `Failed to execute datamitsu binary at ${binaryPath}: ${(error as Error).message}`,\n {\n cause: error,\n },\n );\n }\n\n return {\n exitCode: result.exitCode ?? 1,\n failed: result.exitCode !== 0,\n stderr: result.stderr ?? \"\",\n stdout: result.stdout ?? \"\",\n };\n}\n","import type { SpawnRaw } from \"../types.js\";\n\nimport { spawn } from \"../spawn.js\";\n\nexport interface CacheClearOptions {\n all?: boolean;\n cwd?: string;\n dryRun?: boolean;\n}\n\nexport type CacheClearResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { message: string; raw: SpawnRaw; success: true };\n\nexport interface CachePathProjectOptions {\n cwd?: string;\n}\n\nexport type CachePathResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { path: string; raw: SpawnRaw; success: true };\n\nexport const cache = {\n async clear(options: CacheClearOptions = {}): Promise<CacheClearResult> {\n const { all = false, cwd, dryRun = false } = options;\n const args = [\"cache\", \"clear\"];\n\n if (all) {\n args.push(\"--all\");\n }\n\n if (dryRun) {\n args.push(\"--dry-run\");\n }\n\n const raw = await spawn(args, cwd ? { cwd } : {});\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n return {\n message: raw.stdout.trim(),\n raw,\n success: true,\n };\n },\n\n async path(): Promise<CachePathResult> {\n const raw = await spawn([\"cache\", \"path\"]);\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n return {\n path: raw.stdout.trim(),\n raw,\n success: true,\n };\n },\n\n async pathProject(options: CachePathProjectOptions = {}): Promise<CachePathResult> {\n const { cwd } = options;\n const raw = await spawn([\"cache\", \"path\", \"project\"], cwd ? { cwd } : {});\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n return {\n path: raw.stdout.trim(),\n raw,\n success: true,\n };\n },\n} as const;\n","export function extractAllJSON(output: string): string[] {\n if (!output) {\n return [];\n }\n const results: string[] = [];\n let pos = 0;\n while (pos < output.length) {\n const start = output.indexOf(\"{\", pos);\n if (start === -1) {\n break;\n }\n const end = findJSONEnd(output, start);\n if (end === -1) {\n break;\n }\n results.push(output.slice(start, end + 1));\n pos = end + 1;\n }\n return results;\n}\n\nexport function extractJSON(output: string): null | string {\n if (!output) {\n return null;\n }\n const start = output.indexOf(\"{\");\n if (start === -1) {\n return null;\n }\n const end = findJSONEnd(output, start);\n if (end === -1) {\n return null;\n }\n return output.slice(start, end + 1);\n}\n\nfunction findJSONEnd(output: string, start: number): number {\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < output.length; i++) {\n const ch = output[i];\n if (escape) {\n escape = false;\n } else if (inString) {\n if (ch === \"\\\\\") {\n escape = true;\n } else if (ch === '\"') {\n inString = false;\n }\n } else {\n switch (ch) {\n case '\"': {\n inString = true;\n\n break;\n }\n case \"{\": {\n depth++;\n\n break;\n }\n case \"}\": {\n depth--;\n if (depth === 0) {\n return i;\n }\n\n break;\n }\n // No default\n }\n }\n }\n return -1;\n}\n","import type { PlanJSON, SpawnRaw } from \"./types.js\";\n\nimport { extractJSON } from \"./json.js\";\nimport { spawn } from \"./spawn.js\";\n\nexport interface BaseOptions {\n beforeConfig?: string[];\n config?: string[];\n explain?: \"detailed\" | \"json\" | \"summary\" | \"text\" | boolean;\n files?: string[];\n fileScoped?: boolean;\n noAutoConfig?: boolean;\n tools?: string[];\n}\n\nexport interface ToolCommandOptions extends BaseOptions {\n cwd?: string;\n stdio?: \"inherit\" | \"pipe\";\n}\n\nexport type ToolCommandResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { exitCode: number; raw: SpawnRaw; success: true }\n | { output: string; raw: SpawnRaw; success: true }\n | { plan: PlanJSON; raw: SpawnRaw; success: true };\n\nexport function buildArgs(commandName: string, options: BaseOptions = {}): string[] {\n const {\n beforeConfig = [],\n config = [],\n explain = false,\n files = [],\n fileScoped = false,\n noAutoConfig = false,\n tools = [],\n } = options;\n\n const args: string[] = [commandName];\n\n if (explain === true) {\n args.push(\"--explain\");\n } else if (explain) {\n args.push(`--explain=${explain}`);\n }\n\n if (fileScoped) {\n args.push(\"--file-scoped\");\n }\n\n if (tools.length > 0) {\n args.push(\"--tools\", tools.join(\",\"));\n }\n\n for (const c of config) {\n args.push(\"--config\", c);\n }\n\n for (const bc of beforeConfig) {\n args.push(\"--before-config\", bc);\n }\n\n if (noAutoConfig) {\n args.push(\"--no-auto-config\");\n }\n\n args.push(...files);\n\n return args;\n}\n\nexport function createToolCommand(\n commandName: string,\n): (options?: ToolCommandOptions) => Promise<ToolCommandResult> {\n return async function (options: ToolCommandOptions = {}): Promise<ToolCommandResult> {\n const { explain = false } = options;\n const args = buildArgs(commandName, options);\n const spawnOptions: { cwd?: string; stdio?: \"inherit\" | \"pipe\" } = {};\n if (options.cwd !== undefined) {\n spawnOptions.cwd = options.cwd;\n }\n if (options.stdio !== undefined) {\n spawnOptions.stdio = options.stdio;\n }\n const raw = await spawn(args, spawnOptions);\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n if (explain === \"json\") {\n try {\n const jsonStr = extractJSON(raw.stdout) || raw.stdout;\n const plan: PlanJSON = JSON.parse(jsonStr);\n return { plan, raw, success: true };\n } catch {\n return {\n error: `Failed to parse JSON output: ${raw.stdout}`,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n }\n\n if (explain) {\n return { output: raw.stdout, raw, success: true };\n }\n\n return { exitCode: raw.exitCode, raw, success: true };\n };\n}\n","import type { PlanJSON, SpawnRaw } from \"../types.js\";\n\nimport { extractAllJSON } from \"../json.js\";\nimport { spawn } from \"../spawn.js\";\nimport { buildArgs, createToolCommand, type ToolCommandOptions } from \"../tool-command.js\";\n\nexport type CheckOptions = ToolCommandOptions;\n\nexport type CheckResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { exitCode: number; raw: SpawnRaw; success: true }\n | { output: string; raw: SpawnRaw; success: true }\n | { plan: PlanJSON; plans: PlanJSON[]; raw: SpawnRaw; success: true };\n\nconst baseCheck = createToolCommand(\"check\");\n\nexport async function check(options: CheckOptions = {}): Promise<CheckResult> {\n if (options.explain !== \"json\") {\n return baseCheck(options) as Promise<CheckResult>;\n }\n\n const args = buildArgs(\"check\", options);\n const spawnOptions: { cwd?: string; stdio?: \"inherit\" | \"pipe\" } = {};\n if (options.cwd !== undefined) {\n spawnOptions.cwd = options.cwd;\n }\n if (options.stdio !== undefined) {\n spawnOptions.stdio = options.stdio;\n }\n const raw = await spawn(args, spawnOptions);\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n try {\n const jsonStrings = extractAllJSON(raw.stdout);\n if (jsonStrings.length === 0) {\n throw new Error(\"No JSON found\");\n }\n const plans: PlanJSON[] = jsonStrings.map((s) => JSON.parse(s));\n return { plan: plans[0]!, plans, raw, success: true };\n } catch {\n return {\n error: `Failed to parse JSON output: ${raw.stdout}`,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n}\n","import type { SpawnRaw } from \"../types.js\";\n\nimport { spawn } from \"../spawn.js\";\n\nexport interface ExecOptions {\n args?: string[];\n beforeConfig?: string[];\n config?: string[];\n cwd?: string;\n noAutoConfig?: boolean;\n stdio?: \"inherit\" | \"pipe\";\n}\n\nexport type ExecResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { exitCode: number; raw: SpawnRaw; stderr: string; stdout: string; success: true }\n | { raw: SpawnRaw; success: true; tools: ToolInfo[] };\n\nexport interface ToolInfo {\n details: string;\n name: string;\n type: string;\n}\n\nexport async function exec(appName?: string, options: ExecOptions = {}): Promise<ExecResult> {\n const spawnArgs = buildArgs(appName, options);\n const spawnOpts: { cwd?: string; stdio?: \"inherit\" | \"pipe\" } = {};\n if (options.cwd !== undefined) {\n spawnOpts.cwd = options.cwd;\n }\n if (options.stdio !== undefined) {\n spawnOpts.stdio = options.stdio;\n }\n const raw = await spawn(spawnArgs, spawnOpts);\n\n if (!appName) {\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n const tools = parseToolList(raw.stdout);\n return { raw, success: true, tools };\n }\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n return {\n exitCode: raw.exitCode,\n raw,\n stderr: raw.stderr,\n stdout: raw.stdout,\n success: true,\n };\n}\n\nconst ESC = String.fromCodePoint(0x1b);\nconst ANSI_PATTERN = new RegExp(`${ESC}\\\\[[0-9;]*m`, \"g\");\n\nexport function parseToolList(output: string): ToolInfo[] {\n if (!output || !output.trim()) {\n return [];\n }\n\n const tools: ToolInfo[] = [];\n let currentType: null | string = null;\n const typePattern = /^\\[(binary|uv|node|jvm|go|shell)\\]$/;\n const toolPattern = /^ {2}(\\S+)(?:\\s{2,}(.+))?$/;\n\n for (const line of output.split(\"\\n\").map((l) => l.replace(ANSI_PATTERN, \"\"))) {\n const typeMatch = line.match(typePattern);\n if (typeMatch?.[1]) {\n currentType = typeMatch[1];\n } else if (currentType) {\n const toolMatch = line.match(toolPattern);\n if (toolMatch?.[1]) {\n tools.push({\n details: toolMatch[2] || \"\",\n name: toolMatch[1],\n type: currentType,\n });\n }\n }\n }\n\n return tools;\n}\n\nfunction buildArgs(appName: string | undefined, options: ExecOptions = {}): string[] {\n const { args = [], beforeConfig = [], config = [], noAutoConfig = false } = options;\n\n const spawnArgs = [\"exec\"];\n\n for (const c of config) {\n spawnArgs.push(\"--config\", c);\n }\n\n for (const bc of beforeConfig) {\n spawnArgs.push(\"--before-config\", bc);\n }\n\n if (noAutoConfig) {\n spawnArgs.push(\"--no-auto-config\");\n }\n\n if (appName) {\n spawnArgs.push(appName, ...args);\n }\n\n return spawnArgs;\n}\n","import {\n createToolCommand,\n type ToolCommandOptions,\n type ToolCommandResult,\n} from \"../tool-command.js\";\n\nexport type FixOptions = ToolCommandOptions;\nexport type FixResult = ToolCommandResult;\n\nexport const fix = createToolCommand(\"fix\");\n","import {\n createToolCommand,\n type ToolCommandOptions,\n type ToolCommandResult,\n} from \"../tool-command.js\";\n\nexport type LintOptions = ToolCommandOptions;\nexport type LintResult = ToolCommandResult;\n\nexport const lint = createToolCommand(\"lint\");\n","import type { SpawnRaw } from \"../types.js\";\n\nimport { spawn } from \"../spawn.js\";\n\nexport type VersionResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { raw: SpawnRaw; success: true; version: string };\n\nexport async function version(): Promise<VersionResult> {\n const raw = await spawn([\"version\"]);\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n const output = raw.stdout.trim().split(\"\\n\")[0] ?? \"\";\n const versionStr = output.replace(/^.*version\\s+/, \"\");\n return {\n raw,\n success: true,\n version: versionStr,\n };\n}\n","import { cache } from \"./commands/cache.js\";\nimport { check } from \"./commands/check.js\";\nimport { exec } from \"./commands/exec.js\";\nimport { fix } from \"./commands/fix.js\";\nimport { lint } from \"./commands/lint.js\";\nimport { version } from \"./commands/version.js\";\n\nexport default { cache, check, exec, fix, lint, version };\nexport { cache } from \"./commands/cache.js\";\nexport type {\n CacheClearOptions,\n CacheClearResult,\n CachePathProjectOptions,\n CachePathResult,\n} from \"./commands/cache.js\";\nexport { check } from \"./commands/check.js\";\nexport type { CheckOptions, CheckResult } from \"./commands/check.js\";\nexport { exec, parseToolList } from \"./commands/exec.js\";\nexport type { ExecOptions, ExecResult, ToolInfo } from \"./commands/exec.js\";\nexport { fix } from \"./commands/fix.js\";\nexport type { FixOptions, FixResult } from \"./commands/fix.js\";\nexport { lint } from \"./commands/lint.js\";\nexport type { LintOptions, LintResult } from \"./commands/lint.js\";\nexport { version } from \"./commands/version.js\";\nexport type { VersionResult } from \"./commands/version.js\";\nexport type { GroupJSON, ParallelGroupJSON, PlanJSON, SpawnRaw, TaskJSON } from \"./types.js\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["buildArguments","buildArguments"],"sources":["../../../packaging/npm/datamitsu/get-exe.js","../src/spawn.ts","../src/commands/cache.ts","../src/json.ts","../src/tool-command.ts","../src/commands/check.ts","../src/commands/exec.ts","../src/commands/fix.ts","../src/commands/lint.ts","../src/commands/version.ts","../src/index.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\n\nexport function getExePath() {\n const extension = process.platform === \"win32\" ? \".exe\" : \"\";\n const packageName = `@datamitsu/datamitsu-${process.platform}-${process.arch}`;\n const exeName = `datamitsu${extension}`;\n\n try {\n const require = createRequire(import.meta.url);\n const packageJson = require.resolve(`${packageName}/package.json`);\n const exePath = join(dirname(packageJson), exeName);\n\n if (existsSync(exePath)) {\n return exePath;\n }\n } catch {\n // Package not found\n }\n\n throw new Error(\n `datamitsu binary not found for platform ${process.platform}-${process.arch}.\\n` +\n `Please make sure the package \"${packageName}\" is installed.\\n` +\n `If you're seeing this error, try reinstalling: npm install @datamitsu/datamitsu`,\n );\n}\n","import { getExePath } from \"@datamitsu/datamitsu/get-exe.js\";\nimport { x } from \"tinyexec\";\n\nimport type { SpawnRaw } from \"./types.js\";\n\nexport interface SpawnOptions {\n cwd?: string;\n stdio?: \"inherit\" | \"pipe\";\n}\n\nexport async function spawn(arguments_: string[], options: SpawnOptions = {}): Promise<SpawnRaw> {\n const { cwd, stdio = \"pipe\" } = options;\n\n const binaryPath = getExePath();\n const fullArguments = [\"--binary-command\", \"datamitsu\", ...arguments_];\n\n let result;\n try {\n result = await x(binaryPath, fullArguments, {\n nodeOptions: { cwd, stdio },\n throwOnError: false,\n });\n } catch (error) {\n throw new Error(\n `Failed to execute datamitsu binary at ${binaryPath}: ${(error as Error).message}`,\n {\n cause: error,\n },\n );\n }\n\n return {\n exitCode: result.exitCode ?? 1,\n failed: result.exitCode !== 0,\n stderr: result.stderr ?? \"\",\n stdout: result.stdout ?? \"\",\n };\n}\n","import type { SpawnRaw } from \"../types.js\";\n\nimport { spawn } from \"../spawn.js\";\n\nexport interface CacheClearOptions {\n all?: boolean;\n cwd?: string;\n dryRun?: boolean;\n}\n\nexport type CacheClearResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { message: string; raw: SpawnRaw; success: true };\n\nexport interface CachePathProjectOptions {\n cwd?: string;\n}\n\nexport type CachePathResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { path: string; raw: SpawnRaw; success: true };\n\nexport const cache = {\n async clear(options: CacheClearOptions = {}): Promise<CacheClearResult> {\n const { all = false, cwd, dryRun = false } = options;\n const arguments_ = [\"cache\", \"clear\"];\n\n if (all) {\n arguments_.push(\"--all\");\n }\n\n if (dryRun) {\n arguments_.push(\"--dry-run\");\n }\n\n const raw = await spawn(arguments_, cwd ? { cwd } : {});\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n return {\n message: raw.stdout.trim(),\n raw,\n success: true,\n };\n },\n\n async path(): Promise<CachePathResult> {\n const raw = await spawn([\"cache\", \"path\"]);\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n return {\n path: raw.stdout.trim(),\n raw,\n success: true,\n };\n },\n\n async pathProject(options: CachePathProjectOptions = {}): Promise<CachePathResult> {\n const { cwd } = options;\n const raw = await spawn([\"cache\", \"path\", \"project\"], cwd ? { cwd } : {});\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n return {\n path: raw.stdout.trim(),\n raw,\n success: true,\n };\n },\n} as const;\n","export function extractAllJSON(output: string): string[] {\n if (!output) {\n return [];\n }\n const results: string[] = [];\n let pos = 0;\n while (pos < output.length) {\n const start = output.indexOf(\"{\", pos);\n if (start === -1) {\n break;\n }\n const end = findJSONEnd(output, start);\n if (end === -1) {\n break;\n }\n results.push(output.slice(start, end + 1));\n pos = end + 1;\n }\n return results;\n}\n\nexport function extractJSON(output: string): null | string {\n if (!output) {\n return null;\n }\n const start = output.indexOf(\"{\");\n if (start === -1) {\n return null;\n }\n const end = findJSONEnd(output, start);\n if (end === -1) {\n return null;\n }\n return output.slice(start, end + 1);\n}\n\nfunction findJSONEnd(output: string, start: number): number {\n let depth = 0;\n let isInString = false;\n let isEscape = false;\n for (let index = start; index < output.length; index++) {\n const ch = output[index];\n if (isEscape) {\n isEscape = false;\n } else if (isInString) {\n if (ch === \"\\\\\") {\n isEscape = true;\n } else if (ch === '\"') {\n isInString = false;\n }\n } else {\n switch (ch) {\n case '\"': {\n isInString = true;\n\n break;\n }\n case \"{\": {\n depth++;\n\n break;\n }\n case \"}\": {\n depth--;\n if (depth === 0) {\n return index;\n }\n\n break;\n }\n // No default\n }\n }\n }\n return -1;\n}\n","import type { PlanJSON, SpawnRaw } from \"./types.js\";\n\nimport { extractJSON } from \"./json.js\";\nimport { spawn } from \"./spawn.js\";\n\nexport interface BaseOptions {\n beforeConfig?: string[];\n config?: string[];\n explain?: \"detailed\" | \"json\" | \"summary\" | \"text\" | boolean;\n files?: string[];\n fileScoped?: boolean;\n noAutoConfig?: boolean;\n tools?: string[];\n}\n\nexport interface ToolCommandOptions extends BaseOptions {\n cwd?: string;\n stdio?: \"inherit\" | \"pipe\";\n}\n\nexport type ToolCommandResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { exitCode: number; raw: SpawnRaw; success: true }\n | { output: string; raw: SpawnRaw; success: true }\n | { plan: PlanJSON; raw: SpawnRaw; success: true };\n\nexport function buildArguments(commandName: string, options: BaseOptions = {}): string[] {\n const {\n beforeConfig = [],\n config = [],\n explain = false,\n files = [],\n fileScoped = false,\n noAutoConfig = false,\n tools = [],\n } = options;\n\n const arguments_: string[] = [commandName];\n\n if (explain === true) {\n arguments_.push(\"--explain\");\n } else if (explain) {\n arguments_.push(`--explain=${explain}`);\n }\n\n if (fileScoped) {\n arguments_.push(\"--file-scoped\");\n }\n\n if (tools.length > 0) {\n arguments_.push(\"--tools\", tools.join(\",\"));\n }\n\n for (const c of config) {\n arguments_.push(\"--config\", c);\n }\n\n for (const bc of beforeConfig) {\n arguments_.push(\"--before-config\", bc);\n }\n\n if (noAutoConfig) {\n arguments_.push(\"--no-auto-config\");\n }\n\n arguments_.push(...files);\n\n return arguments_;\n}\n\nexport function createToolCommand(\n commandName: string,\n): (options?: ToolCommandOptions) => Promise<ToolCommandResult> {\n return async function (options: ToolCommandOptions = {}): Promise<ToolCommandResult> {\n const { explain = false } = options;\n const arguments_ = buildArguments(commandName, options);\n const spawnOptions: { cwd?: string; stdio?: \"inherit\" | \"pipe\" } = {};\n if (options.cwd !== undefined) {\n spawnOptions.cwd = options.cwd;\n }\n if (options.stdio !== undefined) {\n spawnOptions.stdio = options.stdio;\n }\n const raw = await spawn(arguments_, spawnOptions);\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n if (explain === \"json\") {\n try {\n const jsonString = extractJSON(raw.stdout) || raw.stdout;\n const plan: PlanJSON = JSON.parse(jsonString);\n return { plan, raw, success: true };\n } catch {\n return {\n error: `Failed to parse JSON output: ${raw.stdout}`,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n }\n\n if (explain) {\n return { output: raw.stdout, raw, success: true };\n }\n\n return { exitCode: raw.exitCode, raw, success: true };\n };\n}\n","import type { PlanJSON, SpawnRaw } from \"../types.js\";\n\nimport { extractAllJSON } from \"../json.js\";\nimport { spawn } from \"../spawn.js\";\nimport { buildArguments, createToolCommand, type ToolCommandOptions } from \"../tool-command.js\";\n\nexport type CheckOptions = ToolCommandOptions;\n\nexport type CheckResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { exitCode: number; raw: SpawnRaw; success: true }\n | { output: string; raw: SpawnRaw; success: true }\n | { plan: PlanJSON; plans: PlanJSON[]; raw: SpawnRaw; success: true };\n\nconst baseCheck = createToolCommand(\"check\");\n\nexport async function check(options: CheckOptions = {}): Promise<CheckResult> {\n if (options.explain !== \"json\") {\n return baseCheck(options) as Promise<CheckResult>;\n }\n\n const arguments_ = buildArguments(\"check\", options);\n const spawnOptions: { cwd?: string; stdio?: \"inherit\" | \"pipe\" } = {};\n if (options.cwd !== undefined) {\n spawnOptions.cwd = options.cwd;\n }\n if (options.stdio !== undefined) {\n spawnOptions.stdio = options.stdio;\n }\n const raw = await spawn(arguments_, spawnOptions);\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n try {\n const jsonStrings = extractAllJSON(raw.stdout);\n if (jsonStrings.length === 0) {\n throw new Error(\"No JSON found\");\n }\n const plans: PlanJSON[] = jsonStrings.map((s) => JSON.parse(s));\n return { plan: plans[0]!, plans, raw, success: true };\n } catch {\n return {\n error: `Failed to parse JSON output: ${raw.stdout}`,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n}\n","import type { SpawnRaw } from \"../types.js\";\n\nimport { spawn } from \"../spawn.js\";\n\nexport interface ExecOptions {\n args?: string[];\n beforeConfig?: string[];\n config?: string[];\n cwd?: string;\n noAutoConfig?: boolean;\n stdio?: \"inherit\" | \"pipe\";\n}\n\nexport type ExecResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { exitCode: number; raw: SpawnRaw; stderr: string; stdout: string; success: true }\n | { raw: SpawnRaw; success: true; tools: ToolInfo[] };\n\nexport interface ToolInfo {\n details: string;\n name: string;\n type: string;\n}\n\nexport async function exec(appName?: string, options: ExecOptions = {}): Promise<ExecResult> {\n const spawnArguments = buildArguments(appName, options);\n const spawnOptions: { cwd?: string; stdio?: \"inherit\" | \"pipe\" } = {};\n if (options.cwd !== undefined) {\n spawnOptions.cwd = options.cwd;\n }\n if (options.stdio !== undefined) {\n spawnOptions.stdio = options.stdio;\n }\n const raw = await spawn(spawnArguments, spawnOptions);\n\n if (!appName) {\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n const tools = parseToolList(raw.stdout);\n return { raw, success: true, tools };\n }\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n return {\n exitCode: raw.exitCode,\n raw,\n stderr: raw.stderr,\n stdout: raw.stdout,\n success: true,\n };\n}\n\nconst ESC = String.fromCodePoint(0x1b);\nconst ANSI_PATTERN = new RegExp(`${ESC}\\\\[[0-9;]*m`, \"g\");\n\nexport function parseToolList(output: string): ToolInfo[] {\n if (!output || !output.trim()) {\n return [];\n }\n\n const tools: ToolInfo[] = [];\n let currentType: null | string = null;\n const typePattern = /^\\[(binary|uv|node|jvm|go|shell)\\]$/;\n const toolPattern = /^ {2}(\\S+)(?:[ \\t]{2,}([^\\s].*))?$/;\n\n const lines = output.split(\"\\n\").map((line) => line.replace(ANSI_PATTERN, \"\"));\n for (const line of lines) {\n const typeMatch = line.match(typePattern);\n if (typeMatch?.[1]) {\n currentType = typeMatch[1];\n } else if (currentType) {\n const toolMatch = line.match(toolPattern);\n if (toolMatch?.[1]) {\n tools.push({\n details: toolMatch[2] || \"\",\n name: toolMatch[1],\n type: currentType,\n });\n }\n }\n }\n\n return tools;\n}\n\nfunction buildArguments(appName: string | undefined, options: ExecOptions = {}): string[] {\n const { args: arguments_ = [], beforeConfig = [], config = [], noAutoConfig = false } = options;\n\n const spawnArguments = [\"exec\"];\n\n for (const c of config) {\n spawnArguments.push(\"--config\", c);\n }\n\n for (const bc of beforeConfig) {\n spawnArguments.push(\"--before-config\", bc);\n }\n\n if (noAutoConfig) {\n spawnArguments.push(\"--no-auto-config\");\n }\n\n if (appName) {\n spawnArguments.push(appName, ...arguments_);\n }\n\n return spawnArguments;\n}\n","import {\n createToolCommand,\n type ToolCommandOptions,\n type ToolCommandResult,\n} from \"../tool-command.js\";\n\nexport type FixOptions = ToolCommandOptions;\nexport type FixResult = ToolCommandResult;\n\nexport const fix = createToolCommand(\"fix\");\n","import {\n createToolCommand,\n type ToolCommandOptions,\n type ToolCommandResult,\n} from \"../tool-command.js\";\n\nexport type LintOptions = ToolCommandOptions;\nexport type LintResult = ToolCommandResult;\n\nexport const lint = createToolCommand(\"lint\");\n","import type { SpawnRaw } from \"../types.js\";\n\nimport { spawn } from \"../spawn.js\";\n\nexport type VersionResult =\n | { error: string; exitCode: number; raw: SpawnRaw; success: false }\n | { raw: SpawnRaw; success: true; version: string };\n\nexport async function version(): Promise<VersionResult> {\n const raw = await spawn([\"version\"]);\n\n if (raw.failed) {\n return {\n error: raw.stderr || raw.stdout,\n exitCode: raw.exitCode,\n raw,\n success: false,\n };\n }\n\n const output = raw.stdout.trim().split(\"\\n\", 1)[0] ?? \"\";\n const versionString = output.replace(/^.*version\\s+/, \"\");\n return {\n raw,\n success: true,\n version: versionString,\n };\n}\n","import { cache } from \"./commands/cache.js\";\nimport { check } from \"./commands/check.js\";\nimport { exec } from \"./commands/exec.js\";\nimport { fix } from \"./commands/fix.js\";\nimport { lint } from \"./commands/lint.js\";\nimport { version } from \"./commands/version.js\";\n\nexport default { cache, check, exec, fix, lint, version };\nexport { cache } from \"./commands/cache.js\";\nexport type {\n CacheClearOptions,\n CacheClearResult,\n CachePathProjectOptions,\n CachePathResult,\n} from \"./commands/cache.js\";\nexport { check } from \"./commands/check.js\";\nexport type { CheckOptions, CheckResult } from \"./commands/check.js\";\nexport { exec, parseToolList } from \"./commands/exec.js\";\nexport type { ExecOptions, ExecResult, ToolInfo } from \"./commands/exec.js\";\nexport { fix } from \"./commands/fix.js\";\nexport type { FixOptions, FixResult } from \"./commands/fix.js\";\nexport { lint } from \"./commands/lint.js\";\nexport type { LintOptions, LintResult } from \"./commands/lint.js\";\nexport { version } from \"./commands/version.js\";\nexport type { VersionResult } from \"./commands/version.js\";\nexport type { GroupJSON, ParallelGroupJSON, PlanJSON, SpawnRaw, TaskJSON } from \"./types.js\";\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datamitsu/datamitsu",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Configuration management and binary distribution tool. JavaScript-configurable tool orchestration written in Go.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"datamitsu",
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
"files": [
|
|
40
40
|
"bin",
|
|
41
41
|
"lib",
|
|
42
|
-
"get-exe.js"
|
|
42
|
+
"get-exe.js",
|
|
43
|
+
"parsers-oci.json"
|
|
43
44
|
],
|
|
44
45
|
"scripts": {
|
|
45
46
|
"test": "pnpm --filter @datamitsu/programmable-api-js test"
|
|
@@ -51,14 +52,14 @@
|
|
|
51
52
|
"@shibanet0/datamitsu-config": "catalog:"
|
|
52
53
|
},
|
|
53
54
|
"optionalDependencies": {
|
|
54
|
-
"@datamitsu/datamitsu-darwin-arm64": "0.1
|
|
55
|
-
"@datamitsu/datamitsu-darwin-x64": "0.1
|
|
56
|
-
"@datamitsu/datamitsu-freebsd-arm64": "0.1
|
|
57
|
-
"@datamitsu/datamitsu-freebsd-x64": "0.1
|
|
58
|
-
"@datamitsu/datamitsu-linux-arm64": "0.1
|
|
59
|
-
"@datamitsu/datamitsu-linux-x64": "0.1
|
|
60
|
-
"@datamitsu/datamitsu-win32-arm64": "0.1
|
|
61
|
-
"@datamitsu/datamitsu-win32-x64": "0.1
|
|
55
|
+
"@datamitsu/datamitsu-darwin-arm64": "0.2.1",
|
|
56
|
+
"@datamitsu/datamitsu-darwin-x64": "0.2.1",
|
|
57
|
+
"@datamitsu/datamitsu-freebsd-arm64": "0.2.1",
|
|
58
|
+
"@datamitsu/datamitsu-freebsd-x64": "0.2.1",
|
|
59
|
+
"@datamitsu/datamitsu-linux-arm64": "0.2.1",
|
|
60
|
+
"@datamitsu/datamitsu-linux-x64": "0.2.1",
|
|
61
|
+
"@datamitsu/datamitsu-win32-arm64": "0.2.1",
|
|
62
|
+
"@datamitsu/datamitsu-win32-x64": "0.2.1"
|
|
62
63
|
},
|
|
63
64
|
"engines": {
|
|
64
65
|
"node": ">=22.12.0"
|
package/parsers-oci.json
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"module": "core",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"ref": "ghcr.io/datamitsu/datamitsu-parsers",
|
|
5
|
+
"tag": "0.2.1",
|
|
6
|
+
"digest": "sha256:33f5437bfa8c974e79f5d597af2009a56f2b438792958d62ee885749b445d5e2",
|
|
7
|
+
"sha256": "b5425355969f69f9a80a9838269b350b33ab47ec290358d7aa761483a2921986"
|
|
8
|
+
}
|