@hasna/configs 0.1.0 → 0.1.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/dist/cli/index.js CHANGED
@@ -2073,7 +2073,7 @@ var {
2073
2073
  import chalk from "chalk";
2074
2074
  import { existsSync as existsSync6, readFileSync as readFileSync4 } from "fs";
2075
2075
  import { homedir as homedir3 } from "os";
2076
- import { join as join5, resolve as resolve6 } from "path";
2076
+ import { join as join5, resolve as resolve5 } from "path";
2077
2077
 
2078
2078
  // src/types/index.ts
2079
2079
  class ConfigNotFoundError extends Error {
@@ -2503,138 +2503,120 @@ async function applyConfigs(configs, opts = {}) {
2503
2503
  }
2504
2504
 
2505
2505
  // src/lib/sync.ts
2506
- import { existsSync as existsSync3, readdirSync, readFileSync as readFileSync2, statSync } from "fs";
2507
- import { extname, join as join2, relative } from "path";
2506
+ import { existsSync as existsSync3, readdirSync, readFileSync as readFileSync2 } from "fs";
2507
+ import { extname, join as join2 } from "path";
2508
2508
  import { homedir as homedir2 } from "os";
2509
- function detectCategory(filePath) {
2510
- const p = filePath.toLowerCase().replace(homedir2(), "~");
2511
- if (p.includes("/.claude/rules/") || p.endsWith("claude.md") || p.endsWith("agents.md") || p.endsWith("gemini.md"))
2512
- return "rules";
2513
- if (p.includes("/.claude/") || p.includes("/.codex/") || p.includes("/.gemini/") || p.includes("/.cursor/"))
2514
- return "agent";
2515
- if (p.includes(".mcp.json") || p.includes("mcp"))
2516
- return "mcp";
2517
- if (p.includes(".zshrc") || p.includes(".zprofile") || p.includes(".bashrc") || p.includes(".bash_profile"))
2518
- return "shell";
2519
- if (p.includes(".gitconfig") || p.includes(".gitignore"))
2520
- return "git";
2521
- if (p.includes(".npmrc") || p.includes("tsconfig") || p.includes("bunfig"))
2522
- return "tools";
2523
- if (p.includes(".secrets"))
2524
- return "secrets_schema";
2525
- return "tools";
2526
- }
2527
- function detectAgent(filePath) {
2528
- const p = filePath.toLowerCase().replace(homedir2(), "~");
2529
- if (p.includes("/.claude/") || p.endsWith("claude.md"))
2530
- return "claude";
2531
- if (p.includes("/.codex/") || p.endsWith("agents.md"))
2532
- return "codex";
2533
- if (p.includes("/.gemini/") || p.endsWith("gemini.md"))
2534
- return "gemini";
2535
- if (p.includes(".zshrc") || p.includes(".zprofile") || p.includes(".bashrc"))
2536
- return "zsh";
2537
- if (p.includes(".gitconfig") || p.includes(".gitignore"))
2538
- return "git";
2539
- if (p.includes(".npmrc"))
2540
- return "npm";
2541
- return "global";
2542
- }
2543
- function detectFormat(filePath) {
2544
- const ext = extname(filePath).toLowerCase();
2545
- if (ext === ".json")
2546
- return "json";
2547
- if (ext === ".toml")
2548
- return "toml";
2549
- if (ext === ".yaml" || ext === ".yml")
2550
- return "yaml";
2551
- if (ext === ".md" || ext === ".markdown")
2552
- return "markdown";
2553
- if (ext === ".ini" || ext === ".cfg")
2554
- return "ini";
2555
- return "text";
2556
- }
2557
- var SKIP_PATTERNS = [".db", ".db-shm", ".db-wal", ".log", ".lock", ".DS_Store", "node_modules", ".git"];
2558
- function shouldSkip(p) {
2559
- return SKIP_PATTERNS.some((pat) => p.includes(pat));
2560
- }
2561
- function walkDir(dir, files = []) {
2562
- const entries = readdirSync(dir, { withFileTypes: true });
2563
- for (const entry of entries) {
2564
- const full = join2(dir, entry.name);
2565
- if (shouldSkip(full))
2566
- continue;
2567
- if (entry.isDirectory()) {
2568
- walkDir(full, files);
2569
- } else if (entry.isFile()) {
2570
- files.push(full);
2571
- }
2572
- }
2573
- return files;
2574
- }
2575
- async function syncFromDir(dir, opts = {}) {
2509
+ var KNOWN_CONFIGS = [
2510
+ { path: "~/.claude/CLAUDE.md", name: "claude-claude-md", category: "rules", agent: "claude", format: "markdown" },
2511
+ { path: "~/.claude/settings.json", name: "claude-settings", category: "agent", agent: "claude", format: "json" },
2512
+ { path: "~/.claude/settings.local.json", name: "claude-settings-local", category: "agent", agent: "claude", format: "json" },
2513
+ { path: "~/.claude/keybindings.json", name: "claude-keybindings", category: "agent", agent: "claude", format: "json" },
2514
+ { path: "~/.claude/rules", name: "claude-rules", category: "rules", agent: "claude", rulesDir: "~/.claude/rules" },
2515
+ { path: "~/.codex/config.toml", name: "codex-config", category: "agent", agent: "codex", format: "toml" },
2516
+ { path: "~/.codex/AGENTS.md", name: "codex-agents-md", category: "rules", agent: "codex", format: "markdown" },
2517
+ { path: "~/.gemini/settings.json", name: "gemini-settings", category: "agent", agent: "gemini", format: "json" },
2518
+ { path: "~/.gemini/GEMINI.md", name: "gemini-gemini-md", category: "rules", agent: "gemini", format: "markdown" },
2519
+ { path: "~/.claude.json", name: "claude-json", category: "mcp", agent: "claude", format: "json", description: "Claude Code global config (includes MCP server entries)" },
2520
+ { path: "~/.zshrc", name: "zshrc", category: "shell", agent: "zsh" },
2521
+ { path: "~/.zprofile", name: "zprofile", category: "shell", agent: "zsh" },
2522
+ { path: "~/.bashrc", name: "bashrc", category: "shell", agent: "zsh" },
2523
+ { path: "~/.bash_profile", name: "bash-profile", category: "shell", agent: "zsh" },
2524
+ { path: "~/.gitconfig", name: "gitconfig", category: "git", agent: "git", format: "ini" },
2525
+ { path: "~/.gitignore_global", name: "gitignore-global", category: "git", agent: "git" },
2526
+ { path: "~/.npmrc", name: "npmrc", category: "tools", agent: "npm", format: "ini" },
2527
+ { path: "~/.bunfig.toml", name: "bunfig", category: "tools", agent: "global", format: "toml" }
2528
+ ];
2529
+ async function syncKnown(opts = {}) {
2576
2530
  const d = opts.db || getDatabase();
2577
- const absDir = expandPath(dir);
2578
- if (!existsSync3(absDir)) {
2579
- return { added: 0, updated: 0, unchanged: 0, skipped: [`Directory not found: ${absDir}`] };
2580
- }
2581
- const files = opts.recursive !== false ? walkDir(absDir) : readdirSync(absDir).map((f) => join2(absDir, f)).filter((f) => statSync(f).isFile());
2582
2531
  const result = { added: 0, updated: 0, unchanged: 0, skipped: [] };
2532
+ const home = homedir2();
2533
+ let targets = KNOWN_CONFIGS;
2534
+ if (opts.agent)
2535
+ targets = targets.filter((k) => k.agent === opts.agent);
2536
+ if (opts.category)
2537
+ targets = targets.filter((k) => k.category === opts.category);
2583
2538
  const allConfigs = listConfigs(undefined, d);
2584
- for (const file of files) {
2585
- if (shouldSkip(file)) {
2586
- result.skipped.push(file);
2539
+ for (const known of targets) {
2540
+ if (known.rulesDir) {
2541
+ const absDir = expandPath(known.rulesDir);
2542
+ if (!existsSync3(absDir)) {
2543
+ result.skipped.push(known.rulesDir);
2544
+ continue;
2545
+ }
2546
+ const mdFiles = readdirSync(absDir).filter((f) => f.endsWith(".md"));
2547
+ for (const f of mdFiles) {
2548
+ const abs2 = join2(absDir, f);
2549
+ const targetPath = abs2.replace(home, "~");
2550
+ const content = readFileSync2(abs2, "utf-8");
2551
+ const name = `claude-rules-${f}`;
2552
+ const slug = name.toLowerCase().replace(/[^a-z0-9]+/g, "-");
2553
+ const existing = allConfigs.find((c) => c.target_path === targetPath || c.slug === slug);
2554
+ if (!existing) {
2555
+ if (!opts.dryRun)
2556
+ createConfig({ name, category: "rules", agent: "claude", format: "markdown", content, target_path: targetPath }, d);
2557
+ result.added++;
2558
+ } else if (existing.content !== content) {
2559
+ if (!opts.dryRun)
2560
+ updateConfig(existing.id, { content }, d);
2561
+ result.updated++;
2562
+ } else {
2563
+ result.unchanged++;
2564
+ }
2565
+ }
2566
+ continue;
2567
+ }
2568
+ const abs = expandPath(known.path);
2569
+ if (!existsSync3(abs)) {
2570
+ result.skipped.push(known.path);
2587
2571
  continue;
2588
2572
  }
2589
2573
  try {
2590
- const content = readFileSync2(file, "utf-8");
2591
- const targetPath = file.startsWith(homedir2()) ? file.replace(homedir2(), "~") : file;
2592
- const existing = allConfigs.find((c) => c.target_path === targetPath);
2574
+ const content = readFileSync2(abs, "utf-8");
2575
+ if (content.length > 500000) {
2576
+ result.skipped.push(known.path + " (too large)");
2577
+ continue;
2578
+ }
2579
+ const targetPath = abs.replace(home, "~");
2580
+ const existing = allConfigs.find((c) => c.target_path === targetPath || c.slug === known.name);
2593
2581
  if (!existing) {
2594
2582
  if (!opts.dryRun) {
2595
- const name = relative(absDir, file);
2596
2583
  createConfig({
2597
- name,
2598
- category: detectCategory(file),
2599
- agent: detectAgent(file),
2600
- target_path: targetPath,
2601
- format: detectFormat(file),
2602
- content
2584
+ name: known.name,
2585
+ category: known.category,
2586
+ agent: known.agent,
2587
+ format: known.format ?? detectFormat(abs),
2588
+ content,
2589
+ target_path: known.kind === "reference" ? null : targetPath,
2590
+ kind: known.kind ?? "file",
2591
+ description: known.description
2603
2592
  }, d);
2604
2593
  }
2605
2594
  result.added++;
2606
2595
  } else if (existing.content !== content) {
2607
- if (!opts.dryRun) {
2596
+ if (!opts.dryRun)
2608
2597
  updateConfig(existing.id, { content }, d);
2609
- }
2610
2598
  result.updated++;
2611
2599
  } else {
2612
2600
  result.unchanged++;
2613
2601
  }
2614
2602
  } catch {
2615
- result.skipped.push(file);
2603
+ result.skipped.push(known.path);
2616
2604
  }
2617
2605
  }
2618
2606
  return result;
2619
2607
  }
2620
- async function syncToDir(dir, opts = {}) {
2608
+ async function syncToDisk(opts = {}) {
2621
2609
  const d = opts.db || getDatabase();
2622
- const absDir = expandPath(dir);
2623
- const normalizedDir = dir.startsWith("~/") ? dir : absDir.replace(homedir2(), "~");
2624
- const configs = listConfigs(undefined, d).filter((c) => c.target_path && (c.target_path.startsWith(normalizedDir) || c.target_path.startsWith(absDir)));
2625
2610
  const result = { added: 0, updated: 0, unchanged: 0, skipped: [] };
2611
+ let configs = listConfigs({ kind: "file", ...opts.agent ? { agent: opts.agent } : {}, ...opts.category ? { category: opts.category } : {} }, d);
2626
2612
  for (const config of configs) {
2627
- if (config.kind === "reference")
2613
+ if (!config.target_path)
2628
2614
  continue;
2629
2615
  try {
2630
2616
  const r = await applyConfig(config, { dryRun: opts.dryRun, db: d });
2631
- if (r.changed) {
2632
- existsSync3(expandPath(config.target_path)) ? result.updated++ : result.added++;
2633
- } else {
2634
- result.unchanged++;
2635
- }
2617
+ r.changed ? result.updated++ : result.unchanged++;
2636
2618
  } catch {
2637
- result.skipped.push(config.target_path || config.id);
2619
+ result.skipped.push(config.target_path);
2638
2620
  }
2639
2621
  }
2640
2622
  return result;
@@ -2656,29 +2638,77 @@ function diffConfig(config) {
2656
2638
  const maxLen = Math.max(stored.length, disk.length);
2657
2639
  for (let i = 0;i < maxLen; i++) {
2658
2640
  const s = stored[i];
2659
- const d = disk[i];
2660
- if (s === d) {
2641
+ const dk = disk[i];
2642
+ if (s === dk) {
2661
2643
  if (s !== undefined)
2662
2644
  lines.push(` ${s}`);
2663
2645
  } else {
2664
2646
  if (s !== undefined)
2665
2647
  lines.push(`-${s}`);
2666
- if (d !== undefined)
2667
- lines.push(`+${d}`);
2648
+ if (dk !== undefined)
2649
+ lines.push(`+${dk}`);
2668
2650
  }
2669
2651
  }
2670
2652
  return lines.join(`
2671
2653
  `);
2672
2654
  }
2655
+ function detectCategory(filePath) {
2656
+ const p = filePath.toLowerCase().replace(homedir2(), "~");
2657
+ if (p.includes("/.claude/rules/") || p.endsWith("claude.md") || p.endsWith("agents.md") || p.endsWith("gemini.md"))
2658
+ return "rules";
2659
+ if (p.includes("/.claude/") || p.includes("/.codex/") || p.includes("/.gemini/") || p.includes("/.cursor/"))
2660
+ return "agent";
2661
+ if (p.includes(".mcp.json") || p.includes("mcp"))
2662
+ return "mcp";
2663
+ if (p.includes(".zshrc") || p.includes(".zprofile") || p.includes(".bashrc") || p.includes(".bash_profile"))
2664
+ return "shell";
2665
+ if (p.includes(".gitconfig") || p.includes(".gitignore"))
2666
+ return "git";
2667
+ if (p.includes(".npmrc") || p.includes("tsconfig") || p.includes("bunfig"))
2668
+ return "tools";
2669
+ if (p.includes(".secrets"))
2670
+ return "secrets_schema";
2671
+ return "tools";
2672
+ }
2673
+ function detectAgent(filePath) {
2674
+ const p = filePath.toLowerCase().replace(homedir2(), "~");
2675
+ if (p.includes("/.claude/") || p.endsWith("claude.md"))
2676
+ return "claude";
2677
+ if (p.includes("/.codex/") || p.endsWith("agents.md"))
2678
+ return "codex";
2679
+ if (p.includes("/.gemini/") || p.endsWith("gemini.md"))
2680
+ return "gemini";
2681
+ if (p.includes(".zshrc") || p.includes(".zprofile") || p.includes(".bashrc"))
2682
+ return "zsh";
2683
+ if (p.includes(".gitconfig") || p.includes(".gitignore"))
2684
+ return "git";
2685
+ if (p.includes(".npmrc"))
2686
+ return "npm";
2687
+ return "global";
2688
+ }
2689
+ function detectFormat(filePath) {
2690
+ const ext = extname(filePath).toLowerCase();
2691
+ if (ext === ".json")
2692
+ return "json";
2693
+ if (ext === ".toml")
2694
+ return "toml";
2695
+ if (ext === ".yaml" || ext === ".yml")
2696
+ return "yaml";
2697
+ if (ext === ".md" || ext === ".markdown")
2698
+ return "markdown";
2699
+ if (ext === ".ini" || ext === ".cfg")
2700
+ return "ini";
2701
+ return "text";
2702
+ }
2673
2703
 
2674
2704
  // src/lib/export.ts
2675
2705
  import { existsSync as existsSync4, mkdirSync as mkdirSync3, rmSync, writeFileSync as writeFileSync2 } from "fs";
2676
- import { join as join3, resolve as resolve4 } from "path";
2706
+ import { join as join3, resolve as resolve3 } from "path";
2677
2707
  import { tmpdir } from "os";
2678
2708
  async function exportConfigs(outputPath, opts = {}) {
2679
2709
  const d = opts.db || getDatabase();
2680
2710
  const configs = listConfigs(opts.filter, d);
2681
- const absOutput = resolve4(outputPath);
2711
+ const absOutput = resolve3(outputPath);
2682
2712
  const tmpDir = join3(tmpdir(), `configs-export-${Date.now()}`);
2683
2713
  const contentsDir = join3(tmpDir, "contents");
2684
2714
  try {
@@ -2712,12 +2742,12 @@ async function exportConfigs(outputPath, opts = {}) {
2712
2742
 
2713
2743
  // src/lib/import.ts
2714
2744
  import { existsSync as existsSync5, mkdirSync as mkdirSync4, readFileSync as readFileSync3, rmSync as rmSync2 } from "fs";
2715
- import { join as join4, resolve as resolve5 } from "path";
2745
+ import { join as join4, resolve as resolve4 } from "path";
2716
2746
  import { tmpdir as tmpdir2 } from "os";
2717
2747
  async function importConfigs(bundlePath, opts = {}) {
2718
2748
  const d = opts.db || getDatabase();
2719
2749
  const conflict = opts.conflict ?? "skip";
2720
- const absPath = resolve5(bundlePath);
2750
+ const absPath = resolve4(bundlePath);
2721
2751
  const tmpDir = join4(tmpdir2(), `configs-import-${Date.now()}`);
2722
2752
  const result = { created: 0, updated: 0, skipped: 0, errors: [] };
2723
2753
  try {
@@ -2855,7 +2885,7 @@ program.command("show <id>").description("Show a config's content and metadata")
2855
2885
  }
2856
2886
  });
2857
2887
  program.command("add <path>").description("Ingest a file into the config DB").option("-n, --name <name>", "config name (defaults to filename)").option("-c, --category <cat>", "category override").option("-a, --agent <agent>", "agent override").option("-k, --kind <kind>", "kind: file|reference", "file").option("--template", "mark as template (has {{VAR}} placeholders)").action(async (filePath, opts) => {
2858
- const abs = resolve6(filePath);
2888
+ const abs = resolve5(filePath);
2859
2889
  if (!existsSync6(abs)) {
2860
2890
  console.error(chalk.red(`File not found: ${abs}`));
2861
2891
  process.exit(1);
@@ -2897,14 +2927,30 @@ program.command("diff <id>").description("Show diff between stored config and di
2897
2927
  process.exit(1);
2898
2928
  }
2899
2929
  });
2900
- program.command("sync").description("Bulk sync a directory with the DB").option("-d, --dir <dir>", "directory to sync (default: ~/.claude)", "~/.claude").option("--from-disk", "read files from disk into DB (default)").option("--to-disk", "apply DB configs back to disk").option("--dry-run", "preview without writing").action(async (opts) => {
2901
- const toDisk = opts.toDisk;
2902
- if (toDisk) {
2903
- const result = await syncToDir(opts.dir, { dryRun: opts.dryRun });
2904
- console.log(chalk.green(`\u2713`) + ` Synced to disk: +${result.added} updated:${result.updated} unchanged:${result.unchanged} skipped:${result.skipped.length}`);
2930
+ program.command("sync").description("Sync known AI coding configs from disk into DB (claude, codex, gemini, zsh, git, npm)").option("-a, --agent <agent>", "only sync configs for this agent (claude|codex|gemini|zsh|git|npm)").option("-c, --category <cat>", "only sync configs in this category").option("--to-disk", "apply DB configs back to disk instead").option("--dry-run", "preview without writing").option("--list", "show which files would be synced without doing anything").action(async (opts) => {
2931
+ if (opts.list) {
2932
+ const targets = KNOWN_CONFIGS.filter((k) => {
2933
+ if (opts.agent && k.agent !== opts.agent)
2934
+ return false;
2935
+ if (opts.category && k.category !== opts.category)
2936
+ return false;
2937
+ return true;
2938
+ });
2939
+ console.log(chalk.bold(`Known configs (${targets.length}):`));
2940
+ for (const k of targets) {
2941
+ console.log(` ${chalk.cyan(k.rulesDir ? k.rulesDir + "/*.md" : k.path)} ${chalk.dim(`[${k.category}/${k.agent}]`)}`);
2942
+ }
2943
+ return;
2944
+ }
2945
+ if (opts.toDisk) {
2946
+ const result = await syncToDisk({ dryRun: opts.dryRun, agent: opts.agent, category: opts.category });
2947
+ console.log(chalk.green("\u2713") + ` Written to disk: updated:${result.updated} unchanged:${result.unchanged} skipped:${result.skipped.length}`);
2905
2948
  } else {
2906
- const result = await syncFromDir(opts.dir, { dryRun: opts.dryRun });
2907
- console.log(chalk.green(`\u2713`) + ` Synced from disk: +${result.added} updated:${result.updated} unchanged:${result.unchanged} skipped:${result.skipped.length}`);
2949
+ const result = await syncKnown({ dryRun: opts.dryRun, agent: opts.agent, category: opts.category });
2950
+ console.log(chalk.green("\u2713") + ` Synced: +${result.added} updated:${result.updated} unchanged:${result.unchanged} skipped:${result.skipped.length}`);
2951
+ if (result.skipped.length > 0) {
2952
+ console.log(chalk.dim(" skipped (not found): " + result.skipped.join(", ")));
2953
+ }
2908
2954
  }
2909
2955
  });
2910
2956
  program.command("export").description("Export configs as a tar.gz bundle").option("-o, --output <path>", "output file", "./configs-export.tar.gz").option("-c, --category <cat>", "filter by category").action(async (opts) => {
package/dist/index.d.ts CHANGED
@@ -6,8 +6,10 @@ export { registerMachine, updateMachineApplied, listMachines, currentHostname, c
6
6
  export { getDatabase, resetDatabase, uuid, now, slugify } from "./db/database.js";
7
7
  export { applyConfig, applyConfigs, expandPath } from "./lib/apply.js";
8
8
  export type { ApplyOptions } from "./lib/apply.js";
9
- export { syncFromDir, syncToDir, diffConfig, detectCategory, detectAgent, detectFormat } from "./lib/sync.js";
10
- export type { SyncFromDirOptions, SyncToDirOptions } from "./lib/sync.js";
9
+ export { syncKnown, syncToDisk, diffConfig, detectCategory, detectAgent, detectFormat, KNOWN_CONFIGS } from "./lib/sync.js";
10
+ export { syncFromDir, syncToDir } from "./lib/sync-dir.js";
11
+ export type { SyncKnownOptions, SyncToDiskOptions } from "./lib/sync.js";
12
+ export type { SyncFromDirOptions } from "./lib/sync-dir.js";
11
13
  export { exportConfigs } from "./lib/export.js";
12
14
  export { importConfigs } from "./lib/import.js";
13
15
  export type { ExportOptions } from "./lib/export.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGlI,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGrH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGzK,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGnH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGlF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9G,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAG1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvG,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGlI,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGrH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGzK,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGnH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGlF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACzE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvG,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}