@datamitsu/datamitsu 0.1.15 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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 args = process.argv.slice(2);
8
- if (!args.includes("--binary-command")) {
9
- args.unshift("--binary-command", "datamitsu");
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(), args, { stdio: "inherit" });
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 ext = process.platform === "win32" ? ".exe" : "";
6
+ const extension = process.platform === "win32" ? ".exe" : "";
7
7
  const packageName = `@datamitsu/datamitsu-${process.platform}-${process.arch}`;
8
- const exeName = `datamitsu${ext}`;
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
- batch: boolean;
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;
@@ -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;;;;UC7Be;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;6BACU,sBAAyB,QAAQ;uBA8BxC,QAAQ;mCAmBK,4BAA+B,QAAQ;;;;KClExD,aAAa;KACb,YAAY;cAEX,MAAG,UAAA,uBAAA,QAAA;;;KCHJ,cAAc;KACd,aAAa;cAEZ,OAAI,UAAA,uBAAA,QAAA"}
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 ext = process.platform === "win32" ? ".exe" : "";
7
+ const extension = process.platform === "win32" ? ".exe" : "";
8
8
  const packageName = `@datamitsu/datamitsu-${process.platform}-${process.arch}`;
9
- const exeName = `datamitsu${ext}`;
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(args, options = {}) {
18
+ async function spawn(arguments_, options = {}) {
19
19
  const { cwd, stdio = "pipe" } = options;
20
20
  const binaryPath = getExePath();
21
- const fullArgs = [
21
+ const fullArguments = [
22
22
  "--binary-command",
23
23
  "datamitsu",
24
- ...args
24
+ ...arguments_
25
25
  ];
26
26
  let result;
27
27
  try {
28
- result = await x(binaryPath, fullArgs, {
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 args = ["cache", "clear"];
51
- if (all) args.push("--all");
52
- if (dryRun) args.push("--dry-run");
53
- const raw = await spawn(args, cwd ? { cwd } : {});
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 inString = false;
127
- let escape = false;
128
- for (let i = start; i < output.length; i++) {
129
- const ch = output[i];
130
- if (escape) escape = false;
131
- else if (inString) {
132
- if (ch === "\\") escape = true;
133
- else if (ch === "\"") inString = false;
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
- inString = true;
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 i;
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 buildArgs$1(commandName, options = {}) {
151
+ function buildArguments$1(commandName, options = {}) {
152
152
  const { beforeConfig = [], config = [], explain = false, files = [], fileScoped = false, noAutoConfig = false, tools = [] } = options;
153
- const args = [commandName];
154
- if (explain === true) args.push("--explain");
155
- else if (explain) args.push(`--explain=${explain}`);
156
- if (fileScoped) args.push("--file-scoped");
157
- if (tools.length > 0) args.push("--tools", tools.join(","));
158
- for (const c of config) args.push("--config", c);
159
- for (const bc of beforeConfig) args.push("--before-config", bc);
160
- if (noAutoConfig) args.push("--no-auto-config");
161
- args.push(...files);
162
- return args;
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 args = buildArgs$1(commandName, options);
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(args, spawnOptions);
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 jsonStr = extractJSON(raw.stdout) || raw.stdout;
179
+ const jsonString = extractJSON(raw.stdout) || raw.stdout;
180
180
  return {
181
- plan: JSON.parse(jsonStr),
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 args = buildArgs$1("check", options);
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(args, spawnOptions);
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 spawnArgs = buildArgs(appName, options);
244
- const spawnOpts = {};
245
- if (options.cwd !== void 0) spawnOpts.cwd = options.cwd;
246
- if (options.stdio !== void 0) spawnOpts.stdio = options.stdio;
247
- const raw = await spawn(spawnArgs, spawnOpts);
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+)(?:\s{2,}(.+))?$/;
282
- for (const line of output.split("\n").map((l) => l.replace(ANSI_PATTERN, ""))) {
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 buildArgs(appName, options = {}) {
297
- const { args = [], beforeConfig = [], config = [], noAutoConfig = false } = options;
298
- const spawnArgs = ["exec"];
299
- for (const c of config) spawnArgs.push("--config", c);
300
- for (const bc of beforeConfig) spawnArgs.push("--before-config", bc);
301
- if (noAutoConfig) spawnArgs.push("--no-auto-config");
302
- if (appName) spawnArgs.push(appName, ...args);
303
- return spawnArgs;
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":";;;;;AAIA,SAAgB,aAAa;CAC3B,MAAM,YAAY,QAAQ,aAAa,UAAU,SAAS;CAC1D,MAAM,cAAc,wBAAwB,QAAQ,SAAS,GAAG,QAAQ;CACxE,MAAM,UAAU,YAAY;CAE5B,IAAI;EAGF,MAAM,UAAU,KAAK,QAFL,cAAc,OAAO,KAAK,GAChB,CAAC,CAAC,QAAQ,GAAG,YAAY,cACZ,CAAC,GAAG,OAAO;EAElD,IAAI,WAAW,OAAO,GACpB,OAAO;CAEX,QAAQ,CAER;CAEA,MAAM,IAAI,MACR,2CAA2C,QAAQ,SAAS,GAAG,QAAQ,KAAK,mCACzC,YAAY,iGAEjD;AACF;;;AChBA,eAAsB,MAAM,YAAsB,UAAwB,CAAC,GAAsB;CAC/F,MAAM,EAAE,KAAK,QAAQ,WAAW;CAEhC,MAAM,aAAa,WAAW;CAC9B,MAAM,gBAAgB;EAAC;EAAoB;EAAa,GAAG;CAAU;CAErE,IAAI;CACJ,IAAI;EACF,SAAS,MAAM,EAAE,YAAY,eAAe;GAC1C,aAAa;IAAE;IAAK;GAAM;GAC1B,cAAc;EAChB,CAAC;CACH,SAAS,OAAO;EACd,MAAM,IAAI,MACR,yCAAyC,WAAW,IAAK,MAAgB,WACzE,EACE,OAAO,MACT,CACF;CACF;CAEA,OAAO;EACL,UAAU,OAAO,YAAY;EAC7B,QAAQ,OAAO,aAAa;EAC5B,QAAQ,OAAO,UAAU;EACzB,QAAQ,OAAO,UAAU;CAC3B;AACF;;;ACfA,MAAa,QAAQ;CACnB,MAAM,MAAM,UAA6B,CAAC,GAA8B;EACtE,MAAM,EAAE,MAAM,OAAO,KAAK,SAAS,UAAU;EAC7C,MAAM,aAAa,CAAC,SAAS,OAAO;EAEpC,IAAI,KACF,WAAW,KAAK,OAAO;EAGzB,IAAI,QACF,WAAW,KAAK,WAAW;EAG7B,MAAM,MAAM,MAAM,MAAM,YAAY,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC;EAEtD,IAAI,IAAI,QACN,OAAO;GACL,OAAO,IAAI,UAAU,IAAI;GACzB,UAAU,IAAI;GACd;GACA,SAAS;EACX;EAGF,OAAO;GACL,SAAS,IAAI,OAAO,KAAK;GACzB;GACA,SAAS;EACX;CACF;CAEA,MAAM,OAAiC;EACrC,MAAM,MAAM,MAAM,MAAM,CAAC,SAAS,MAAM,CAAC;EAEzC,IAAI,IAAI,QACN,OAAO;GACL,OAAO,IAAI,UAAU,IAAI;GACzB,UAAU,IAAI;GACd;GACA,SAAS;EACX;EAGF,OAAO;GACL,MAAM,IAAI,OAAO,KAAK;GACtB;GACA,SAAS;EACX;CACF;CAEA,MAAM,YAAY,UAAmC,CAAC,GAA6B;EACjF,MAAM,EAAE,QAAQ;EAChB,MAAM,MAAM,MAAM,MAAM;GAAC;GAAS;GAAQ;EAAS,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC;EAExE,IAAI,IAAI,QACN,OAAO;GACL,OAAO,IAAI,UAAU,IAAI;GACzB,UAAU,IAAI;GACd;GACA,SAAS;EACX;EAGF,OAAO;GACL,MAAM,IAAI,OAAO,KAAK;GACtB;GACA,SAAS;EACX;CACF;AACF;;;AC3FA,SAAgB,eAAe,QAA0B;CACvD,IAAI,CAAC,QACH,OAAO,CAAC;CAEV,MAAM,UAAoB,CAAC;CAC3B,IAAI,MAAM;CACV,OAAO,MAAM,OAAO,QAAQ;EAC1B,MAAM,QAAQ,OAAO,QAAQ,KAAK,GAAG;EACrC,IAAI,UAAU,IACZ;EAEF,MAAM,MAAM,YAAY,QAAQ,KAAK;EACrC,IAAI,QAAQ,IACV;EAEF,QAAQ,KAAK,OAAO,MAAM,OAAO,MAAM,CAAC,CAAC;EACzC,MAAM,MAAM;CACd;CACA,OAAO;AACT;AAEA,SAAgB,YAAY,QAA+B;CACzD,IAAI,CAAC,QACH,OAAO;CAET,MAAM,QAAQ,OAAO,QAAQ,GAAG;CAChC,IAAI,UAAU,IACZ,OAAO;CAET,MAAM,MAAM,YAAY,QAAQ,KAAK;CACrC,IAAI,QAAQ,IACV,OAAO;CAET,OAAO,OAAO,MAAM,OAAO,MAAM,CAAC;AACpC;AAEA,SAAS,YAAY,QAAgB,OAAuB;CAC1D,IAAI,QAAQ;CACZ,IAAI,aAAa;CACjB,IAAI,WAAW;CACf,KAAK,IAAI,QAAQ,OAAO,QAAQ,OAAO,QAAQ,SAAS;EACtD,MAAM,KAAK,OAAO;EAClB,IAAI,UACF,WAAW;OACN,IAAI,YACL;OAAA,OAAO,MACT,WAAW;QACN,IAAI,OAAO,MAChB,aAAa;EAAA,OAGf,QAAQ,IAAR;GACE,KAAK;IACH,aAAa;IAEb;GAEF,KAAK;IACH;IAEA;GAEF,KAAK;IACH;IACA,IAAI,UAAU,GACZ,OAAO;IAGT;EAGJ;CAEJ;CACA,OAAO;AACT;;;ACjDA,SAAgBA,iBAAe,aAAqB,UAAuB,CAAC,GAAa;CACvF,MAAM,EACJ,eAAe,CAAC,GAChB,SAAS,CAAC,GACV,UAAU,OACV,QAAQ,CAAC,GACT,aAAa,OACb,eAAe,OACf,QAAQ,CAAC,MACP;CAEJ,MAAM,aAAuB,CAAC,WAAW;CAEzC,IAAI,YAAY,MACd,WAAW,KAAK,WAAW;MACtB,IAAI,SACT,WAAW,KAAK,aAAa,SAAS;CAGxC,IAAI,YACF,WAAW,KAAK,eAAe;CAGjC,IAAI,MAAM,SAAS,GACjB,WAAW,KAAK,WAAW,MAAM,KAAK,GAAG,CAAC;CAG5C,KAAK,MAAM,KAAK,QACd,WAAW,KAAK,YAAY,CAAC;CAG/B,KAAK,MAAM,MAAM,cACf,WAAW,KAAK,mBAAmB,EAAE;CAGvC,IAAI,cACF,WAAW,KAAK,kBAAkB;CAGpC,WAAW,KAAK,GAAG,KAAK;CAExB,OAAO;AACT;AAEA,SAAgB,kBACd,aAC8D;CAC9D,OAAO,eAAgB,UAA8B,CAAC,GAA+B;EACnF,MAAM,EAAE,UAAU,UAAU;EAC5B,MAAM,aAAaA,iBAAe,aAAa,OAAO;EACtD,MAAM,eAA6D,CAAC;EACpE,IAAI,QAAQ,QAAQ,KAAA,GAClB,aAAa,MAAM,QAAQ;EAE7B,IAAI,QAAQ,UAAU,KAAA,GACpB,aAAa,QAAQ,QAAQ;EAE/B,MAAM,MAAM,MAAM,MAAM,YAAY,YAAY;EAEhD,IAAI,IAAI,QACN,OAAO;GACL,OAAO,IAAI,UAAU,IAAI;GACzB,UAAU,IAAI;GACd;GACA,SAAS;EACX;EAGF,IAAI,YAAY,QACd,IAAI;GACF,MAAM,aAAa,YAAY,IAAI,MAAM,KAAK,IAAI;GAElD,OAAO;IAAE,MADc,KAAK,MAAM,UACtB;IAAG;IAAK,SAAS;GAAK;EACpC,QAAQ;GACN,OAAO;IACL,OAAO,gCAAgC,IAAI;IAC3C,UAAU,IAAI;IACd;IACA,SAAS;GACX;EACF;EAGF,IAAI,SACF,OAAO;GAAE,QAAQ,IAAI;GAAQ;GAAK,SAAS;EAAK;EAGlD,OAAO;GAAE,UAAU,IAAI;GAAU;GAAK,SAAS;EAAK;CACtD;AACF;;;ACrGA,MAAM,YAAY,kBAAkB,OAAO;AAE3C,eAAsB,MAAM,UAAwB,CAAC,GAAyB;CAC5E,IAAI,QAAQ,YAAY,QACtB,OAAO,UAAU,OAAO;CAG1B,MAAM,aAAaC,iBAAe,SAAS,OAAO;CAClD,MAAM,eAA6D,CAAC;CACpE,IAAI,QAAQ,QAAQ,KAAA,GAClB,aAAa,MAAM,QAAQ;CAE7B,IAAI,QAAQ,UAAU,KAAA,GACpB,aAAa,QAAQ,QAAQ;CAE/B,MAAM,MAAM,MAAM,MAAM,YAAY,YAAY;CAEhD,IAAI,IAAI,QACN,OAAO;EACL,OAAO,IAAI,UAAU,IAAI;EACzB,UAAU,IAAI;EACd;EACA,SAAS;CACX;CAGF,IAAI;EACF,MAAM,cAAc,eAAe,IAAI,MAAM;EAC7C,IAAI,YAAY,WAAW,GACzB,MAAM,IAAI,MAAM,eAAe;EAEjC,MAAM,QAAoB,YAAY,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC;EAC9D,OAAO;GAAE,MAAM,MAAM;GAAK;GAAO;GAAK,SAAS;EAAK;CACtD,QAAQ;EACN,OAAO;GACL,OAAO,gCAAgC,IAAI;GAC3C,UAAU,IAAI;GACd;GACA,SAAS;EACX;CACF;AACF;;;AC/BA,eAAsB,KAAK,SAAkB,UAAuB,CAAC,GAAwB;CAC3F,MAAM,iBAAiB,eAAe,SAAS,OAAO;CACtD,MAAM,eAA6D,CAAC;CACpE,IAAI,QAAQ,QAAQ,KAAA,GAClB,aAAa,MAAM,QAAQ;CAE7B,IAAI,QAAQ,UAAU,KAAA,GACpB,aAAa,QAAQ,QAAQ;CAE/B,MAAM,MAAM,MAAM,MAAM,gBAAgB,YAAY;CAEpD,IAAI,CAAC,SAAS;EACZ,IAAI,IAAI,QACN,OAAO;GACL,OAAO,IAAI,UAAU,IAAI;GACzB,UAAU,IAAI;GACd;GACA,SAAS;EACX;EAGF,OAAO;GAAE;GAAK,SAAS;GAAM,OADf,cAAc,IAAI,MACC;EAAE;CACrC;CAEA,IAAI,IAAI,QACN,OAAO;EACL,OAAO,IAAI,UAAU,IAAI;EACzB,UAAU,IAAI;EACd;EACA,SAAS;CACX;CAGF,OAAO;EACL,UAAU,IAAI;EACd;EACA,QAAQ,IAAI;EACZ,QAAQ,IAAI;EACZ,SAAS;CACX;AACF;AAGA,MAAM,eAAe,IAAI,OAAO,GADpB,OAAO,cAAc,EACI,EAAE,cAAc,GAAG;AAExD,SAAgB,cAAc,QAA4B;CACxD,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,GAC1B,OAAO,CAAC;CAGV,MAAM,QAAoB,CAAC;CAC3B,IAAI,cAA6B;CACjC,MAAM,cAAc;CACpB,MAAM,cAAc;CAEpB,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,CAAC,KAAK,SAAS,KAAK,QAAQ,cAAc,EAAE,CAAC;CAC7E,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,YAAY,KAAK,MAAM,WAAW;EACxC,IAAI,YAAY,IACd,cAAc,UAAU;OACnB,IAAI,aAAa;GACtB,MAAM,YAAY,KAAK,MAAM,WAAW;GACxC,IAAI,YAAY,IACd,MAAM,KAAK;IACT,SAAS,UAAU,MAAM;IACzB,MAAM,UAAU;IAChB,MAAM;GACR,CAAC;EAEL;CACF;CAEA,OAAO;AACT;AAEA,SAAS,eAAe,SAA6B,UAAuB,CAAC,GAAa;CACxF,MAAM,EAAE,MAAM,aAAa,CAAC,GAAG,eAAe,CAAC,GAAG,SAAS,CAAC,GAAG,eAAe,UAAU;CAExF,MAAM,iBAAiB,CAAC,MAAM;CAE9B,KAAK,MAAM,KAAK,QACd,eAAe,KAAK,YAAY,CAAC;CAGnC,KAAK,MAAM,MAAM,cACf,eAAe,KAAK,mBAAmB,EAAE;CAG3C,IAAI,cACF,eAAe,KAAK,kBAAkB;CAGxC,IAAI,SACF,eAAe,KAAK,SAAS,GAAG,UAAU;CAG5C,OAAO;AACT;;;AChHA,MAAa,MAAM,kBAAkB,KAAK;;;ACA1C,MAAa,OAAO,kBAAkB,MAAM;;;ACD5C,eAAsB,UAAkC;CACtD,MAAM,MAAM,MAAM,MAAM,CAAC,SAAS,CAAC;CAEnC,IAAI,IAAI,QACN,OAAO;EACL,OAAO,IAAI,UAAU,IAAI;EACzB,UAAU,IAAI;EACd;EACA,SAAS;CACX;CAKF,OAAO;EACL;EACA,SAAS;EACT,UALa,IAAI,OAAO,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,MAAM,GAAA,CACzB,QAAQ,iBAAiB,EAI/B;CACvB;AACF;;;ACpBA,IAAA,cAAe;CAAE;CAAO;CAAO;CAAM;CAAK;CAAM;AAAQ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datamitsu/datamitsu",
3
- "version": "0.1.15",
3
+ "version": "0.2.0",
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.15",
55
- "@datamitsu/datamitsu-darwin-x64": "0.1.15",
56
- "@datamitsu/datamitsu-freebsd-arm64": "0.1.15",
57
- "@datamitsu/datamitsu-freebsd-x64": "0.1.15",
58
- "@datamitsu/datamitsu-linux-arm64": "0.1.15",
59
- "@datamitsu/datamitsu-linux-x64": "0.1.15",
60
- "@datamitsu/datamitsu-win32-arm64": "0.1.15",
61
- "@datamitsu/datamitsu-win32-x64": "0.1.15"
55
+ "@datamitsu/datamitsu-darwin-arm64": "0.2.0",
56
+ "@datamitsu/datamitsu-darwin-x64": "0.2.0",
57
+ "@datamitsu/datamitsu-freebsd-arm64": "0.2.0",
58
+ "@datamitsu/datamitsu-freebsd-x64": "0.2.0",
59
+ "@datamitsu/datamitsu-linux-arm64": "0.2.0",
60
+ "@datamitsu/datamitsu-linux-x64": "0.2.0",
61
+ "@datamitsu/datamitsu-win32-arm64": "0.2.0",
62
+ "@datamitsu/datamitsu-win32-x64": "0.2.0"
62
63
  },
63
64
  "engines": {
64
65
  "node": ">=22.12.0"
@@ -0,0 +1,8 @@
1
+ {
2
+ "module": "core",
3
+ "version": "0.2.0",
4
+ "ref": "ghcr.io/datamitsu/datamitsu-parsers",
5
+ "tag": "0.2.0",
6
+ "digest": "sha256:2076af1cf584fa729452cc562ba9d9057c70e440e0db700c77c9b640527cb796",
7
+ "sha256": "7b127dc263b115ca40cff4996af0c0c2aec5d8f5489c4745236879f0351b68f5"
8
+ }