api2cli 0.1.3 → 0.3.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.
Files changed (2) hide show
  1. package/dist/index.js +57 -31
  2. package/package.json +17 -4
package/dist/index.js CHANGED
@@ -5,21 +5,35 @@ var __getProtoOf = Object.getPrototypeOf;
5
5
  var __defProp = Object.defineProperty;
6
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ function __accessProp(key) {
9
+ return this[key];
10
+ }
11
+ var __toESMCache_node;
12
+ var __toESMCache_esm;
8
13
  var __toESM = (mod, isNodeMode, target) => {
14
+ var canCache = mod != null && typeof mod === "object";
15
+ if (canCache) {
16
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
17
+ var cached = cache.get(mod);
18
+ if (cached)
19
+ return cached;
20
+ }
9
21
  target = mod != null ? __create(__getProtoOf(mod)) : {};
10
22
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
11
23
  for (let key of __getOwnPropNames(mod))
12
24
  if (!__hasOwnProp.call(to, key))
13
25
  __defProp(to, key, {
14
- get: () => mod[key],
26
+ get: __accessProp.bind(mod, key),
15
27
  enumerable: true
16
28
  });
29
+ if (canCache)
30
+ cache.set(mod, to);
17
31
  return to;
18
32
  };
19
33
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
20
34
  var __require = import.meta.require;
21
35
 
22
- // ../../node_modules/commander/lib/error.js
36
+ // node_modules/commander/lib/error.js
23
37
  var require_error = __commonJS((exports) => {
24
38
  class CommanderError extends Error {
25
39
  constructor(exitCode, code, message) {
@@ -43,7 +57,7 @@ var require_error = __commonJS((exports) => {
43
57
  exports.InvalidArgumentError = InvalidArgumentError;
44
58
  });
45
59
 
46
- // ../../node_modules/commander/lib/argument.js
60
+ // node_modules/commander/lib/argument.js
47
61
  var require_argument = __commonJS((exports) => {
48
62
  var { InvalidArgumentError } = require_error();
49
63
 
@@ -122,7 +136,7 @@ var require_argument = __commonJS((exports) => {
122
136
  exports.humanReadableArgName = humanReadableArgName;
123
137
  });
124
138
 
125
- // ../../node_modules/commander/lib/help.js
139
+ // node_modules/commander/lib/help.js
126
140
  var require_help = __commonJS((exports) => {
127
141
  var { humanReadableArgName } = require_argument();
128
142
 
@@ -472,7 +486,7 @@ ${itemIndentStr}`);
472
486
  exports.stripColor = stripColor;
473
487
  });
474
488
 
475
- // ../../node_modules/commander/lib/option.js
489
+ // node_modules/commander/lib/option.js
476
490
  var require_option = __commonJS((exports) => {
477
491
  var { InvalidArgumentError } = require_error();
478
492
 
@@ -650,7 +664,7 @@ var require_option = __commonJS((exports) => {
650
664
  exports.DualOptions = DualOptions;
651
665
  });
652
666
 
653
- // ../../node_modules/commander/lib/suggestSimilar.js
667
+ // node_modules/commander/lib/suggestSimilar.js
654
668
  var require_suggestSimilar = __commonJS((exports) => {
655
669
  var maxDistance = 3;
656
670
  function editDistance(a, b) {
@@ -723,7 +737,7 @@ var require_suggestSimilar = __commonJS((exports) => {
723
737
  exports.suggestSimilar = suggestSimilar;
724
738
  });
725
739
 
726
- // ../../node_modules/commander/lib/command.js
740
+ // node_modules/commander/lib/command.js
727
741
  var require_command = __commonJS((exports) => {
728
742
  var EventEmitter = __require("events").EventEmitter;
729
743
  var childProcess = __require("child_process");
@@ -965,8 +979,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
965
979
  this._exitCallback = (err) => {
966
980
  if (err.code !== "commander.executeSubCommandAsync") {
967
981
  throw err;
968
- } else {
969
- }
982
+ } else {}
970
983
  };
971
984
  }
972
985
  return this;
@@ -2034,7 +2047,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
2034
2047
  exports.useColor = useColor;
2035
2048
  });
2036
2049
 
2037
- // ../../node_modules/commander/index.js
2050
+ // node_modules/commander/index.js
2038
2051
  var require_commander = __commonJS((exports) => {
2039
2052
  var { Argument } = require_argument();
2040
2053
  var { Command } = require_command();
@@ -2054,7 +2067,7 @@ var require_commander = __commonJS((exports) => {
2054
2067
  exports.InvalidOptionArgumentError = InvalidArgumentError;
2055
2068
  });
2056
2069
 
2057
- // ../../node_modules/picocolors/picocolors.js
2070
+ // node_modules/picocolors/picocolors.js
2058
2071
  var require_picocolors = __commonJS((exports, module) => {
2059
2072
  var p = process || {};
2060
2073
  var argv = p.argv || [];
@@ -2124,7 +2137,7 @@ var require_picocolors = __commonJS((exports, module) => {
2124
2137
  module.exports.createColors = createColors;
2125
2138
  });
2126
2139
 
2127
- // ../../node_modules/commander/esm.mjs
2140
+ // node_modules/commander/esm.mjs
2128
2141
  var import__ = __toESM(require_commander(), 1);
2129
2142
  var {
2130
2143
  program,
@@ -2401,9 +2414,10 @@ import { existsSync as existsSync7, readdirSync as readdirSync4 } from "fs";
2401
2414
 
2402
2415
  // src/lib/shell.ts
2403
2416
  var import_picocolors5 = __toESM(require_picocolors(), 1);
2404
- import { existsSync as existsSync6, readFileSync as readFileSync2, writeFileSync as writeFileSync2, appendFileSync } from "fs";
2417
+ import { existsSync as existsSync6, readFileSync as readFileSync2, writeFileSync as writeFileSync2, appendFileSync, symlinkSync, unlinkSync, chmodSync } from "fs";
2405
2418
  import { homedir as homedir2 } from "os";
2406
2419
  import { join as join6 } from "path";
2420
+ var BIN_DIR = join6(homedir2(), ".local", "bin");
2407
2421
  var MARKER_START = "# >>> api2cli >>>";
2408
2422
  var MARKER_END = "# <<< api2cli <<<";
2409
2423
  function getShellRc() {
@@ -2417,14 +2431,12 @@ function getShellRc() {
2417
2431
  return zshrc;
2418
2432
  return join6(homedir2(), ".bashrc");
2419
2433
  }
2420
- function addToPath(app, binDir) {
2434
+ function ensureBinInPath() {
2421
2435
  const rcFile = getShellRc();
2422
2436
  const content = existsSync6(rcFile) ? readFileSync2(rcFile, "utf-8") : "";
2423
- const exportLine = `export PATH="${binDir}:$PATH"`;
2424
- if (content.includes(exportLine)) {
2425
- console.log(`${import_picocolors5.default.dim(app)} already in PATH`);
2437
+ const exportLine = `export PATH="${BIN_DIR}:$PATH"`;
2438
+ if (content.includes(BIN_DIR))
2426
2439
  return;
2427
- }
2428
2440
  if (content.includes(MARKER_START)) {
2429
2441
  const updated = content.replace(MARKER_END, `${exportLine}
2430
2442
  ${MARKER_END}`);
@@ -2436,22 +2448,36 @@ ${exportLine}
2436
2448
  ${MARKER_END}
2437
2449
  `);
2438
2450
  }
2439
- console.log(`${import_picocolors5.default.green("+")} Added ${import_picocolors5.default.bold(app)} to PATH in ${import_picocolors5.default.dim(rcFile)}`);
2440
- console.log(` Run: ${import_picocolors5.default.cyan(`source ${rcFile}`)}`);
2441
2451
  }
2442
- function removeFromPath(app, binDir) {
2443
- const rcFile = getShellRc();
2444
- if (!existsSync6(rcFile))
2445
- return;
2446
- const content = readFileSync2(rcFile, "utf-8");
2447
- const exportLine = `export PATH="${binDir}:$PATH"
2448
- `;
2449
- if (!content.includes(exportLine)) {
2450
- console.log(`${import_picocolors5.default.dim(app)} not in PATH`);
2452
+ function addToPath(app, distDir) {
2453
+ const { mkdirSync: mkdirSync3 } = __require("fs");
2454
+ mkdirSync3(BIN_DIR, { recursive: true });
2455
+ const target = join6(distDir, `${app}-cli.js`);
2456
+ const linkPath = join6(BIN_DIR, `${app}-cli`);
2457
+ if (!existsSync6(target)) {
2458
+ console.error(`${import_picocolors5.default.red("\u2717")} Built file not found: ${target}`);
2459
+ console.error(` Run: ${import_picocolors5.default.cyan(`npx api2cli bundle ${app}`)}`);
2460
+ process.exit(1);
2461
+ }
2462
+ chmodSync(target, 493);
2463
+ if (existsSync6(linkPath)) {
2464
+ unlinkSync(linkPath);
2465
+ }
2466
+ symlinkSync(target, linkPath);
2467
+ ensureBinInPath();
2468
+ console.log(`${import_picocolors5.default.green("+")} Linked ${import_picocolors5.default.bold(`${app}-cli`)} -> ${import_picocolors5.default.dim(linkPath)}`);
2469
+ console.log(`
2470
+ Run this to use it now:
2471
+ ${import_picocolors5.default.cyan(`export PATH="$HOME/.local/bin:$PATH" && ${app}-cli --help`)}`);
2472
+ }
2473
+ function removeFromPath(app, _distDir) {
2474
+ const linkPath = join6(BIN_DIR, `${app}-cli`);
2475
+ if (!existsSync6(linkPath)) {
2476
+ console.log(`${import_picocolors5.default.dim(app)} not linked`);
2451
2477
  return;
2452
2478
  }
2453
- writeFileSync2(rcFile, content.replace(exportLine, ""));
2454
- console.log(`${import_picocolors5.default.red("-")} Removed ${import_picocolors5.default.bold(app)} from PATH`);
2479
+ unlinkSync(linkPath);
2480
+ console.log(`${import_picocolors5.default.red("-")} Unlinked ${import_picocolors5.default.bold(`${app}-cli`)}`);
2455
2481
  }
2456
2482
 
2457
2483
  // src/commands/link.ts
package/package.json CHANGED
@@ -1,15 +1,19 @@
1
1
  {
2
2
  "name": "api2cli",
3
- "version": "0.1.3",
3
+ "version": "0.3.1",
4
4
  "description": "Turn any REST API into a standardized, agent-ready CLI",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "api2cli": "./dist/index.js"
8
8
  },
9
- "files": ["dist", "README.md"],
9
+ "files": [
10
+ "dist",
11
+ "README.md"
12
+ ],
10
13
  "scripts": {
11
14
  "build": "bun build src/index.ts --outfile dist/index.js --target bun",
12
- "dev": "bun run src/index.ts"
15
+ "dev": "bun run src/index.ts",
16
+ "release": "release-it"
13
17
  },
14
18
  "dependencies": {
15
19
  "commander": "^13.0.0",
@@ -17,10 +21,19 @@
17
21
  },
18
22
  "devDependencies": {
19
23
  "@types/bun": "latest",
24
+ "release-it": "^19.0.4",
20
25
  "typescript": "^5.7.0"
21
26
  },
22
27
  "license": "MIT",
23
- "keywords": ["cli", "api", "rest", "agent", "skill", "mcp", "agentskills"],
28
+ "keywords": [
29
+ "cli",
30
+ "api",
31
+ "rest",
32
+ "agent",
33
+ "skill",
34
+ "mcp",
35
+ "agentskills"
36
+ ],
24
37
  "repository": {
25
38
  "type": "git",
26
39
  "url": "https://github.com/Melvynx/api2cli.git",