@onyx.dev/onyx-database 0.1.9 → 0.2.10

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/README.md CHANGED
@@ -132,6 +132,14 @@ Or from a local schema file you export from the console:
132
132
  npx onyx-gen --source file --schema ./onyx.schema.json --out ./src/onyx/types.ts --name OnyxSchema
133
133
  ```
134
134
 
135
+ Run it with no flags to use the defaults: `onyx-gen` reads `./onyx.schema.json` and writes to `./onyx/types.ts`.
136
+
137
+ You can also emit to multiple paths in one run (comma-separated or by repeating `--out`):
138
+
139
+ ```bash
140
+ onyx-gen --out ./src/onyx/types.ts,./apps/admin/src/onyx/types.ts
141
+ ```
142
+
135
143
  Use in code:
136
144
 
137
145
  ```ts
@@ -496,8 +496,10 @@ function emitTypes(schema, options) {
496
496
  }
497
497
 
498
498
  // gen/generate.ts
499
+ var DEFAULT_SCHEMA_PATH = "./onyx.schema.json";
500
+ var DEFAULT_TYPES_OUT = "./onyx/types.ts";
499
501
  var DEFAULTS2 = {
500
- source: "auto",
502
+ source: "file",
501
503
  outBaseName: "onyx.schema",
502
504
  emitJson: false,
503
505
  overwrite: true,
@@ -506,6 +508,14 @@ var DEFAULTS2 = {
506
508
  optional: "non-null",
507
509
  quiet: false
508
510
  };
511
+ function toArray(val) {
512
+ if (!val) return [];
513
+ return Array.isArray(val) ? val : [val];
514
+ }
515
+ function isTypesFilePath(p) {
516
+ if (!p) return false;
517
+ return p.endsWith(".ts") || p.endsWith(".mts") || p.endsWith(".cts") || p.endsWith(".d.ts") || p.endsWith(".d.mts") || p.endsWith(".d.cts");
518
+ }
509
519
  async function readFileJson(path) {
510
520
  const fs = await import('fs/promises');
511
521
  const txt = await fs.readFile(path, "utf8");
@@ -555,14 +565,14 @@ async function fetchSchemaFromApi(http, databaseId, candidates) {
555
565
  async function generateTypes(options) {
556
566
  const path = await import('path');
557
567
  const opts = { ...DEFAULTS2, ...options ?? {} };
558
- const typesDir = opts.typesOutDir ?? opts.outDir ?? "generated";
568
+ const resolvedSchemaPath = opts.schemaPath ?? (opts.source === "file" ? DEFAULT_SCHEMA_PATH : void 0);
559
569
  let schema = null;
560
- if (opts.source === "file" || opts.source === "auto" && opts.schemaPath) {
561
- if (!opts.schemaPath) throw new Error('schemaPath is required when source="file"');
570
+ if (opts.source === "file" || opts.source === "auto" && resolvedSchemaPath) {
571
+ if (!resolvedSchemaPath) throw new Error('schemaPath is required when source="file"');
562
572
  if (!opts.quiet)
563
- process__default.default.stderr.write(`[onyx-gen] reading schema from file: ${opts.schemaPath}
573
+ process__default.default.stderr.write(`[onyx-gen] reading schema from file: ${resolvedSchemaPath}
564
574
  `);
565
- schema = await readFileJson(opts.schemaPath);
575
+ schema = await readFileJson(resolvedSchemaPath);
566
576
  }
567
577
  if (!schema) {
568
578
  if (opts.source === "file") throw new Error("Failed to read schema from file");
@@ -581,56 +591,83 @@ async function generateTypes(options) {
581
591
  if (!isIntrospection(schema)) {
582
592
  throw new Error('Invalid schema: missing "tables" array.');
583
593
  }
584
- const outIsFile = typeof opts.typesOutFile === "string" && (opts.typesOutFile.endsWith(".ts") || opts.typesOutFile.endsWith(".mts") || opts.typesOutFile.endsWith(".cts") || opts.typesOutFile.endsWith(".d.ts") || opts.typesOutFile.endsWith(".d.mts") || opts.typesOutFile.endsWith(".d.cts"));
585
- let typesPath;
586
- let jsonBaseName;
587
- let typesDirAbs;
588
- if (outIsFile) {
589
- const typesOutFile = opts.typesOutFile;
590
- typesPath = path.resolve(process__default.default.cwd(), typesOutFile);
591
- typesDirAbs = path.dirname(typesPath);
592
- await ensureDir(typesDirAbs);
593
- jsonBaseName = path.basename(typesPath, path.extname(typesPath));
594
- } else {
595
- typesDirAbs = path.resolve(process__default.default.cwd(), typesDir);
596
- await ensureDir(typesDirAbs);
597
- typesPath = path.join(typesDirAbs, `${opts.outBaseName}.ts`);
598
- jsonBaseName = opts.outBaseName;
599
- }
594
+ const outTargets = [
595
+ ...toArray(opts.typesOutFile),
596
+ ...toArray(opts.typesOutDir),
597
+ ...toArray(opts.outDir)
598
+ ].map((p) => p.trim()).filter(Boolean);
599
+ if (outTargets.length === 0) {
600
+ outTargets.push(DEFAULT_TYPES_OUT);
601
+ }
602
+ const outputs = outTargets.map((target) => {
603
+ const outIsFile = isTypesFilePath(target);
604
+ const typesPath = outIsFile ? path.resolve(process__default.default.cwd(), target) : path.join(path.resolve(process__default.default.cwd(), target), `${opts.outBaseName}.ts`);
605
+ const typesDirAbs = outIsFile ? path.dirname(typesPath) : path.resolve(process__default.default.cwd(), target);
606
+ const jsonBaseName = outIsFile ? path.basename(typesPath, path.extname(typesPath)) : opts.outBaseName;
607
+ return { typesPath, typesDirAbs, jsonBaseName };
608
+ });
600
609
  const types = emitTypes(schema, {
601
610
  schemaTypeName: opts.schemaTypeName,
602
611
  timestampMode: opts.timestampMode,
603
612
  modelNamePrefix: opts.prefix ?? "",
604
613
  optionalStrategy: opts.optional
605
614
  });
606
- await writeFile(typesPath, `${types}
615
+ const typesPaths = [];
616
+ for (const out of outputs) {
617
+ await ensureDir(out.typesDirAbs);
618
+ await writeFile(out.typesPath, `${types}
607
619
  `, opts.overwrite);
608
- let jsonPath;
620
+ typesPaths.push(out.typesPath);
621
+ }
622
+ let jsonPaths;
609
623
  if (opts.emitJson) {
610
- const jsonOutDirAbs = path.resolve(
611
- process__default.default.cwd(),
612
- opts.jsonOutDir ?? (outIsFile ? typesDirAbs : typesDirAbs)
613
- );
614
- await ensureDir(jsonOutDirAbs);
615
- jsonPath = path.join(jsonOutDirAbs, `${jsonBaseName}.json`);
616
624
  const jsonPretty = JSON.stringify(schema, null, 2);
617
- await writeFile(jsonPath, `${jsonPretty}
625
+ jsonPaths = [];
626
+ for (const out of outputs) {
627
+ const jsonOutDirAbs = path.resolve(process__default.default.cwd(), opts.jsonOutDir ?? out.typesDirAbs);
628
+ await ensureDir(jsonOutDirAbs);
629
+ const jsonPath = path.join(jsonOutDirAbs, `${out.jsonBaseName}.json`);
630
+ await writeFile(jsonPath, `${jsonPretty}
618
631
  `, opts.overwrite);
632
+ jsonPaths.push(jsonPath);
633
+ }
619
634
  }
620
635
  if (!opts.quiet) {
621
- process__default.default.stderr.write(`[onyx-gen] wrote ${typesPath}
636
+ for (const p of typesPaths) {
637
+ process__default.default.stderr.write(`[onyx-gen] wrote ${p}
622
638
  `);
623
- if (jsonPath) process__default.default.stderr.write(`[onyx-gen] wrote ${jsonPath}
639
+ }
640
+ if (jsonPaths) {
641
+ for (const jp of jsonPaths) {
642
+ process__default.default.stderr.write(`[onyx-gen] wrote ${jp}
624
643
  `);
644
+ }
645
+ }
625
646
  }
626
- return { typesPath, jsonPath };
647
+ return { typesPath: typesPaths[0], jsonPath: jsonPaths?.[0], typesPaths, jsonPaths };
627
648
  }
628
649
 
629
650
  // gen/cli/generate.ts
630
- function isTypesFilePath(p) {
651
+ function isTypesFilePath2(p) {
631
652
  if (!p) return false;
632
653
  return p.endsWith(".ts") || p.endsWith(".mts") || p.endsWith(".cts") || p.endsWith(".d.ts") || p.endsWith(".d.mts") || p.endsWith(".d.cts");
633
654
  }
655
+ function appendVal(current, val) {
656
+ if (!current) return val;
657
+ return Array.isArray(current) ? [...current, val] : [current, val];
658
+ }
659
+ function addOut(opts, raw, forceFile = false) {
660
+ if (!raw) throw new Error("Missing value for output flag");
661
+ const parts = raw.split(",").map((p) => p.trim()).filter(Boolean);
662
+ for (const val of parts) {
663
+ if (forceFile || isTypesFilePath2(val)) {
664
+ opts.typesOutFile = appendVal(opts.typesOutFile, val);
665
+ } else {
666
+ opts.typesOutDir = appendVal(opts.typesOutDir, val);
667
+ }
668
+ }
669
+ return opts;
670
+ }
634
671
  function parseArgs(argv) {
635
672
  const opts = {};
636
673
  const next = (i) => argv[i + 1];
@@ -639,27 +676,19 @@ function parseArgs(argv) {
639
676
  switch (a) {
640
677
  case "--out":
641
678
  case "--outDir": {
642
- const val = next(i);
643
- if (!val) throw new Error(`Missing value for ${a}`);
644
- if (isTypesFilePath(val)) opts.typesOutFile = val;
645
- else opts.typesOutDir = val;
679
+ addOut(opts, next(i));
646
680
  i++;
647
681
  break;
648
682
  }
649
683
  case "--types-out":
650
684
  case "--typesOut": {
651
- const val = next(i);
652
- if (!val) throw new Error(`Missing value for ${a}`);
653
- if (isTypesFilePath(val)) opts.typesOutFile = val;
654
- else opts.typesOutDir = val;
685
+ addOut(opts, next(i));
655
686
  i++;
656
687
  break;
657
688
  }
658
689
  case "--types-file":
659
690
  case "--typesFile": {
660
- const val = next(i);
661
- if (!val) throw new Error(`Missing value for ${a}`);
662
- opts.typesOutFile = val;
691
+ addOut(opts, next(i), true);
663
692
  i++;
664
693
  break;
665
694
  }
@@ -757,16 +786,17 @@ Usage:
757
786
  onyx-gen [options]
758
787
 
759
788
  Output selection:
760
- --out <path> If <path> ends with ".ts", writes exactly to that file.
761
- Otherwise treats <path> as a directory.
762
- --types-out <dir|file> Same as --out (file-or-dir).
763
- --types-file <file.ts> Explicit file output.
789
+ --out <path[,path2,...]> If a value ends with ".ts", writes exactly to that file.
790
+ Otherwise treats it as a directory. Comma-separate or repeat to
791
+ write multiple outputs. Default: ./onyx/types.ts
792
+ --types-out <dir|file>[,more] Same as --out (file-or-dir).
793
+ --types-file <file.ts>[,more] Explicit file output(s).
764
794
  --base, --baseName <name> Base filename (without ext) when writing to a directory (default: onyx.schema)
765
795
  --json-out <dir> JSON output directory (used only with --emit-json)
766
796
 
767
797
  Source selection:
768
- --source <auto|api|file> Where to get schema (default: auto)
769
- --schema <path> Path to schema JSON when --source=file (or to force local)
798
+ --source <auto|api|file> Where to get schema (default: file)
799
+ --schema <path> Path to schema JSON when --source=file (default: ./onyx.schema.json)
770
800
 
771
801
  Type emission:
772
802
  --timestamps <string|date|number> Timestamp representation in types (default: date)
@@ -783,6 +813,7 @@ Other:
783
813
  -h, --help Show this help
784
814
 
785
815
  Notes:
816
+ \u2022 Running with no flags defaults to: --source file --schema ./onyx.schema.json --out ./onyx/types.ts
786
817
  \u2022 Env/config for --source=api uses the same resolver as onyx.init()
787
818
  (env vars, ./onyx-database.json, ~/.onyx/onyx-database-<id>.json, etc.).
788
819
  `);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/config/defaults.ts","../../../src/errors/config-error.ts","../../../src/config/chain.ts","../../../src/errors/http-error.ts","../../../src/core/http.ts","../../../gen/emit.ts","../../../gen/generate.ts","../../../gen/cli/generate.ts"],"names":["DEFAULTS","process"],"mappings":";;;;;;;;;;AACO,IAAM,gBAAA,GAAmB,sBAAA;AAEzB,IAAM,kBAAkB,CAAC,CAAA,KAAsB,CAAA,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;;;ACFnE,IAAM,eAAA,GAAN,cAA8B,KAAA,CAAM;AAAA,EAChC,IAAA,GAAO,iBAAA;AAAA,EAChB,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AAAA,EACf;AACF,CAAA;;;ACQA,IAAM,WAAY,UAAA,CAOf,OAAA;AACH,IAAM,MAAA,GAAS,CAAC,CAAC,QAAA,EAAU,QAAA,EAAU,IAAA;AAGrC,IAAM,GAAA,GAAM,IAAI,IAAA,KAA0B;AACxC,EAAA,IAAI,QAAA,EAAU,GAAA,EAAK,UAAA,IAAc,MAAA,EAAQ;AACvC,IAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAuB;AAClC,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA;AAClC,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,MACzB,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,OAAO,CAAC,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AACA,IAAA,QAAA,CAAS,MAAA,EAAQ,QAAQ,CAAA,cAAA,EAAiB,IAAA,CAAK,IAAI,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC;AAAA,CAAI,CAAA;AAAA,EACvE;AACF,CAAA;AAEA,SAAS,cAAgC,GAAA,EAAyC;AAChF,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACxC,IAAA,IAAI,CAAA,KAAM,MAAA,EAAW,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,GAAA;AACT;AAGA,eAAe,WAAc,IAAA,EAA0B;AACrD,EAAA,OAAO;AAAA;AAAA,IAA0B;AAAA,GAAA;AACnC;AAEA,SAAS,QAAQ,QAAA,EAAwC;AACvD,EAAA,IAAI,CAAC,QAAA,EAAU,GAAA,EAAK,OAAO,EAAC;AAC5B,EAAA,MAAM,MAAM,QAAA,CAAS,GAAA;AACrB,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,KAAuC;AACtD,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,MAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,QAAA,MAAM,UAAU,CAAA,CAAE,OAAA,CAAQ,UAAA,EAAY,EAAE,EAAE,IAAA,EAAK;AAC/C,QAAA,IAAI,OAAA,KAAY,IAAI,OAAO,OAAA;AAAA,MAC7B;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAK,kBAAkB,CAAA;AACrC,EAAA,IAAI,QAAA,IAAY,KAAA,KAAU,QAAA,EAAU,OAAO,EAAC;AAC5C,EAAA,MAAM,MAAM,aAAA,CAA0B;AAAA,IACpC,OAAA,EAAS,KAAK,wBAAwB,CAAA;AAAA,IACtC,UAAA,EAAY,KAAA;AAAA,IACZ,MAAA,EAAQ,KAAK,uBAAuB,CAAA;AAAA,IACpC,SAAA,EAAW,KAAK,0BAA0B;AAAA,GAC3C,CAAA;AACD,EAAA,IAAI,OAAO,IAAA,CAAK,GAAG,EAAE,MAAA,KAAW,CAAA,SAAU,EAAC;AAC3C,EAAA,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AACrB,EAAA,OAAO,GAAA;AACT;AAEA,eAAe,gBAAgB,UAAA,EAAmD;AAChF,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,MAAM,EAAA,GAAK,MAAM,UAAA,CAA8C,kBAAkB,CAAA;AACjF,EAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAuC,WAAW,CAAA;AACrE,EAAA,MAAM,GAAA,GAAM,QAAA,EAAU,GAAA,IAAM,IAAK,GAAA;AAEjC,EAAA,MAAM,OAAA,GAAU,OAAO,CAAA,KAA4C;AACjE,IAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,QAAA,CAAS,GAAG,MAAM,CAAA;AACvC,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAC5C,IAAA,MAAM,IAAA,GAAO,aAAA,CAA0B,IAAA,CAAK,KAAA,CAAM,SAAS,CAAwB,CAAA;AACnF,IAAA,GAAA,CAAI,eAAA,EAAiB,CAAA,EAAG,QAAA,EAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AACvC,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,WAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,CAAA,cAAA,EAAiB,UAAU,CAAA,KAAA,CAAO,CAAA;AACrE,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,QAAQ,QAAQ,CAAA;AAAA,IAC/B,CAAA,CAAA,MAAQ;AACN,MAAA,GAAA,CAAI,2BAA2B,QAAQ,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,oBAAoB,CAAA;AACvD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,QAAQ,QAAQ,CAAA;AAAA,EAC/B,CAAA,CAAA,MAAQ;AACN,IAAA,GAAA,CAAI,2BAA2B,QAAQ,CAAA;AACvC,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAEA,eAAe,gBAAgB,UAAA,EAAmD;AAChF,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,MAAM,EAAA,GAAK,MAAM,UAAA,CAA8C,kBAAkB,CAAA;AACjF,EAAA,MAAM,EAAA,GAAK,MAAM,UAAA,CAAqC,SAAS,CAAA;AAC/D,EAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAuC,WAAW,CAAA;AAErE,EAAA,MAAM,IAAA,GAAO,GAAG,OAAA,EAAQ;AACxB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAEnC,EAAA,MAAM,UAAA,GAAa,OAAO,CAAA,KAAgC;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,CAAG,OAAO,CAAC,CAAA;AACjB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,OAAO,CAAA,KAA4C;AACrE,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,QAAA,CAAS,GAAG,MAAM,CAAA;AACvC,MAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAA,GAAO,aAAA,CAA0B,IAAA,CAAK,KAAA,CAAM,SAAS,CAAwB,CAAA;AACnF,MAAA,GAAA,CAAI,oBAAA,EAAsB,CAAA,EAAG,QAAA,EAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AAC5C,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,CAAA,EAAY;AACnB,MAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,eAAA,EAAkB,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAAA,IACzD;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,QAAA,GAAW,CAAA,EAAG,GAAG,CAAA,eAAA,EAAkB,UAAU,CAAA,KAAA,CAAA;AACnD,IAAA,IAAI,MAAM,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,YAAY,QAAQ,CAAA;AAC3D,IAAA,GAAA,CAAI,wBAAwB,QAAQ,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,YAAA,GAAe,GAAG,GAAG,CAAA,mBAAA,CAAA;AAC3B,EAAA,IAAI,MAAM,UAAA,CAAW,YAAY,CAAA,EAAG,OAAO,YAAY,YAAY,CAAA;AACnE,EAAA,GAAA,CAAI,8BAA8B,YAAY,CAAA;AAE9C,EAAA,MAAM,aAAA,GAAgB,GAAG,IAAI,CAAA,mBAAA,CAAA;AAC7B,EAAA,IAAI,MAAM,UAAA,CAAW,aAAa,CAAA,EAAG,OAAO,YAAY,aAAa,CAAA;AACrE,EAAA,GAAA,CAAI,0BAA0B,aAAa,CAAA;AAE3C,EAAA,IAAI,CAAE,MAAM,UAAA,CAAW,GAAG,CAAA,EAAI;AAC5B,IAAA,GAAA,CAAI,2BAA2B,GAAG,CAAA;AAClC,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAA,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,UAAA,CAAW,gBAAgB,CAAA,IAAK,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AACvF,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACjC,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,eAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,oCAAoC,GAAG,CAAA;AAC3C,EAAA,OAAO,EAAC;AACV;AAEA,eAAe,eAAe,CAAA,EAAyC;AACrE,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,MAAM,EAAA,GAAK,MAAM,UAAA,CAA8C,kBAAkB,CAAA;AACjF,EAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAuC,WAAW,CAAA;AACrE,EAAA,MAAM,GAAA,GAAM,QAAA,EAAU,GAAA,IAAM,IAAK,GAAA;AACjC,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,CAAW,CAAC,IAAI,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAA;AAC7D,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,QAAA,CAAS,UAAU,MAAM,CAAA;AAC9C,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAC5C,IAAA,MAAM,IAAA,GAAO,aAAA,CAA0B,IAAA,CAAK,KAAA,CAAM,SAAS,CAAwB,CAAA;AACnF,IAAA,GAAA,CAAI,cAAA,EAAgB,QAAA,EAAU,QAAA,EAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AAC7C,IAAA,OAAO,IAAA;AAAA,EACT,SAAS,CAAA,EAAY;AACnB,IAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,eAAA,EAAkB,QAAQ,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAAA,EAChE;AACF;AAUA,eAAsB,cAAc,KAAA,EAA6C;AAC/E,EAAA,MAAM,UAAA,GAAa,UAAU,GAAA,EAAK,gBAAA;AAClC,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,KAAA,EAAO,UAAU,CAAA;AAErC,EAAA,IAAI,UAA+B,EAAC;AACpC,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAA,GAAU,MAAM,eAAe,UAAU,CAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,QAAA,GAAW,KAAA,EAAO,UAAA,IAAc,GAAA,CAAI,cAAc,OAAA,CAAQ,UAAA;AAEhE,EAAA,IAAI,WAAW,CAAC,EAAE,OAAO,UAAA,IAAc,GAAA,CAAI,cAAc,OAAA,CAAQ,UAAA,CAAA;AACjE,EAAA,IAAI,aAAa,CAAC,EAAE,OAAO,MAAA,IAAU,GAAA,CAAI,UAAU,OAAA,CAAQ,MAAA,CAAA;AAC3D,EAAA,IAAI,gBAAgB,CAAC,EAAE,OAAO,SAAA,IAAa,GAAA,CAAI,aAAa,OAAA,CAAQ,SAAA,CAAA;AAEpE,EAAA,IAAI,UAA+B,EAAC;AACpC,EAAA,IAAI,EAAE,QAAA,IAAY,UAAA,IAAc,aAAA,CAAA,EAAgB;AAC9C,IAAA,OAAA,GAAU,MAAM,gBAAgB,QAAQ,CAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,YAAY,QAAA,GAAW,IAAA;AACnC,IAAA,IAAI,OAAA,CAAQ,QAAQ,UAAA,GAAa,IAAA;AACjC,IAAA,IAAI,OAAA,CAAQ,WAAW,aAAA,GAAgB,IAAA;AAAA,EACzC;AAEA,EAAA,IAAI,OAA4B,EAAC;AACjC,EAAA,IAAI,EAAE,QAAA,IAAY,UAAA,IAAc,aAAA,CAAA,EAAgB;AAC9C,IAAA,IAAA,GAAO,MAAM,gBAAgB,QAAQ,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,MAAA,GAA8B;AAAA,IAClC,OAAA,EAAS,gBAAA;AAAA,IACT,GAAG,cAA0B,IAAI,CAAA;AAAA,IACjC,GAAG,cAA0B,OAAO,CAAA;AAAA,IACpC,GAAG,cAA0B,OAAO,CAAA;AAAA,IACpC,GAAG,cAA0B,GAAG,CAAA;AAAA,IAChC,GAAG,cAA0B,KAAK;AAAA,GACpC;AAEA,EAAA,GAAA,CAAI,wBAAA,EAA0B,IAAA,CAAK,MAAM,CAAC,CAAA;AAE1C,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,MAAA,CAAO,OAAA,IAAW,gBAAgB,CAAA;AAClE,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,EAAA;AACxC,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,EAAA;AAChC,EAAA,MAAM,SAAA,GAAY,OAAO,SAAA,IAAa,EAAA;AACtC,EAAA,MAAM,SAAU,UAAA,CAAqC,KAAA;AACrD,EAAA,MAAM,SAAA,GACJ,MAAA,CAAO,KAAA,KACN,OAAO,MAAA,KAAW,UAAA,GACf,CAAC,CAAA,EAAG,CAAA,KAAM,MAAA,CAAO,CAAA,EAAG,CAAC,IACrB,YAAY;AACV,IAAA,MAAM,IAAI,gBAAgB,8CAA8C,CAAA;AAAA,EAC1E,CAAA,CAAA;AAEN,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,CAAC,UAAA,EAAY,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA;AAC1C,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AAClC,EAAA,IAAI,CAAC,SAAA,EAAW,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA;AACxC,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,GAAA,CAAI,4BAAA,EAA8B,IAAA,CAAK,MAAM,CAAC,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,KAAA;AAAA,MACA,UAAA,IAAc,sBAAA;AAAA,MACd,GAAI,MAAA,GACA;AAAA,QACE,mCAAA;AAAA,QACA,sBAAA;AAAA,QACA,yCAAA;AAAA,QACA,4BAAA;AAAA,QACA;AAAA,UAEF,EAAC;AAAA,MACL;AAAA,KACF;AACA,IAAA,MAAM,IAAI,eAAA;AAAA,MACR,CAAA,yBAAA,EAA4B,QAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,WAAA,EAAc,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAChF;AAAA,EACF;AAEA,EAAA,MAAM,WAA2B,EAAE,OAAA,EAAS,YAAY,MAAA,EAAQ,SAAA,EAAW,OAAO,SAAA,EAAU;AAC5F,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,UAAA,EAAY,KAAA,EAAO,UAAA,GACf,iBAAA,GACA,IAAI,UAAA,GACJ,KAAA,GACA,OAAA,CAAQ,UAAA,GACR,yBACA,OAAA,CAAQ,UAAA,GACR,cAAA,GACA,IAAA,CAAK,aACL,cAAA,GACA,SAAA;AAAA,IACJ,MAAA,EAAQ,KAAA,EAAO,MAAA,GACX,iBAAA,GACA,IAAI,MAAA,GACJ,KAAA,GACA,OAAA,CAAQ,MAAA,GACR,yBACA,OAAA,CAAQ,MAAA,GACR,cAAA,GACA,IAAA,CAAK,SACL,cAAA,GACA,SAAA;AAAA,IACJ,SAAA,EAAW,KAAA,EAAO,SAAA,GACd,iBAAA,GACA,IAAI,SAAA,GACJ,KAAA,GACA,OAAA,CAAQ,SAAA,GACR,yBACA,OAAA,CAAQ,SAAA,GACR,cAAA,GACA,IAAA,CAAK,YACL,cAAA,GACA;AAAA,GACN;AACA,EAAA,GAAA,CAAI,oBAAA,EAAsB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAChD,EAAA,GAAA,CAAI,WAAA,EAAa,IAAA,CAAK,QAAQ,CAAC,CAAA;AAC/B,EAAA,OAAO,QAAA;AACT;AAGA,SAAS,KAAuB,GAAA,EAAmC;AACjE,EAAA,IAAI,CAAC,KAAK,OAAO,GAAA;AACjB,EAAA,MAAM,KAAA,GAAQ,EAAE,GAAI,GAAA,EAAgC;AACpD,EAAA,IAAI,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,QAAgB,MAAA,GAAS,KAAA;AACrD,EAAA,IAAI,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,QAAgB,SAAA,GAAY,KAAA;AAC3D,EAAA,OAAO,KAAA;AACT;;;ACtUO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EAC9B,IAAA,GAAO,eAAA;AAAA,EACP,MAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EAET,WAAA,CAAY,OAAA,EAAiB,MAAA,EAAgB,UAAA,EAAoB,MAAe,OAAA,EAAiB;AAC/F,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK;AAAA,KACd;AAAA,EACF;AAAA,EAEA,CAAC,MAAA,CAAO,GAAA,CAAI,4BAA4B,CAAC,CAAA,GAA6B;AACpE,IAAA,OAAO,KAAK,MAAA,EAAO;AAAA,EACrB;AACF,CAAA;;;AC1BO,SAAS,kBAAkB,GAAA,EAAsB;AACtD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,0CAAA,EAA4C,UAAU,CAAA;AAChF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB;AACF;AAYO,IAAM,aAAN,MAAiB;AAAA,EACL,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EAEjB,YAAY,IAAA,EAAyB;AACnC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,KAAK,OAAA,CAAQ,IAAA,OAAW,EAAA,EAAI;AAC/C,MAAA,MAAM,IAAI,gBAAgB,qBAAqB,CAAA;AAAA,IACjD;AACA,IAAA,IAAI;AAEF,MAAA,IAAI,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,IACtB,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,gBAAgB,8CAA8C,CAAA;AAAA,IAC1E;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC9C,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AACtB,IAAA,MAAM,SAAU,UAAA,CAAqC,KAAA;AACrD,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AAAA,IACxB,CAAA,MAAA,IAAW,OAAO,MAAA,KAAW,UAAA,EAAY;AACvC,MAAA,IAAA,CAAK,YAAY,CAAC,GAAA,EAAK,IAAA,KAAS,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IAClD,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,IAC3E;AACA,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,KAAK,cAAc,CAAA;AACrD,IAAA,MAAM,QAAA,GACH,UAAA,CAA0E,OAAA,EACvE,GAAA,EAAK,UAAA,KAAe,MAAA;AAC1B,IAAA,IAAA,CAAK,qBAAA,GAAwB,CAAC,CAAC,IAAA,CAAK,qBAAA,IAAyB,QAAA;AAC7D,IAAA,IAAA,CAAK,sBAAA,GAAyB,CAAC,CAAC,IAAA,CAAK,sBAAA,IAA0B,QAAA;AAAA,EACjE;AAAA,EAEA,QAAQ,KAAA,EAAwD;AAC9D,IAAA,MAAM,MAAA,GAAS,EAAE,GAAI,KAAA,IAAS,EAAC,EAAG;AAClC,IAAA,OAAO,OAAO,YAAY,CAAA;AAC1B,IAAA,OAAO,OAAO,eAAe,CAAA;AAC7B,IAAA,OAAO;AAAA,MACL,cAAc,IAAA,CAAK,MAAA;AAAA,MACnB,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACtB,QAAA,EAAU,kBAAA;AAAA,MACV,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG,IAAA,CAAK,QAAA;AAAA,MACR,GAAG;AAAA,KACL;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,CACJ,MAAA,EACA,IAAA,EACA,MACA,YAAA,EACY;AACZ,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,gBAAgB,wBAAwB,CAAA;AAAA,IACpD;AACA,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,GAAG,IAAI,CAAA,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,CAAQ;AAAA,MAC3B,GAAI,MAAA,KAAW,QAAA,GAAW,EAAE,MAAA,EAAQ,uBAAA,KAA4B,EAAC;AAAA,MACjE,GAAI,gBAAgB;AAAC,KACtB,CAAA;AACD,IAAA,IAAI,IAAA,IAAQ,IAAA,EAAM,OAAO,OAAA,CAAQ,cAAc,CAAA;AAC/C,IAAA,IAAI,KAAK,qBAAA,EAAuB;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAC9B,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,MAAM,UAAU,OAAO,IAAA,KAAS,WAAW,IAAA,GAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AACrE,QAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,MACrB;AACA,MAAA,MAAM,SAAA,GAAY,EAAE,GAAG,OAAA,EAAS,iBAAiB,YAAA,EAAa;AAC9D,MAAA,OAAA,CAAQ,GAAA,CAAI,YAAY,SAAS,CAAA;AAAA,IACnC;AACA,IAAA,MAAM,OAAA,GACJ,IAAA,IAAQ,IAAA,GAAO,MAAA,GAAY,OAAO,SAAS,QAAA,GAAW,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAClF,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,MAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAEA,IAAA,MAAM,OAAA,GACJ,KAAK,QAAA,CAAS,SAAS,KAAK,CAAC,8BAAA,CAA+B,KAAK,IAAI,CAAA;AACvE,IAAA,MAAM,QAAA,GAAW,WAAW,KAAA,IAAS,OAAA;AACrC,IAAA,MAAM,WAAA,GAAc,WAAW,CAAA,GAAI,CAAA;AACnC,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,WAAA,EAAa,OAAA,EAAA,EAAW;AACtD,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAAU,KAAK,IAAI,CAAA;AAC1C,QAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AACvD,QAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA,EAAK;AAC3B,QAAA,IAAI,KAAK,sBAAA,EAAwB;AAC/B,UAAA,MAAM,UAAA,GAAa,GAAG,GAAA,CAAI,MAAM,IAAI,GAAA,CAAI,UAAU,GAAG,IAAA,EAAK;AAC1D,UAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,UAAA,IAAI,GAAA,CAAI,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AACzB,YAAA,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,UACjB;AAAA,QACF;AACA,QAAA,MAAM,MAAA,GACJ,GAAA,CAAI,IAAA,EAAK,CAAE,SAAS,CAAA,KACnB,WAAA,CAAY,QAAA,CAAS,kBAAkB,CAAA,IAAK,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AACvE,QAAA,MAAM,IAAA,GAAO,MAAA,GAAS,iBAAA,CAAkB,GAAG,CAAA,GAAI,GAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,UAAA,MAAM,GAAA,GACJ,OAAO,IAAA,KAAS,QAAA,IAChB,SAAS,IAAA,IACT,OAAA,IAAW,IAAA,IACX,OAAQ,IAAA,CAA2C,KAAA,EAAO,YAAY,QAAA,GAClE,MAAA,CAAQ,IAAA,CAAyC,KAAA,CAAM,OAAO,CAAA,GAC9D,GAAG,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,UAAU,CAAA,CAAA;AACrC,UAAA,IAAI,YAAY,GAAA,CAAI,MAAA,IAAU,GAAA,IAAO,OAAA,GAAU,IAAI,WAAA,EAAa;AAC9D,YAAA,MAAM,IAAI,QAAQ,CAAC,CAAA,KAAM,WAAW,CAAA,EAAG,GAAA,GAAM,CAAA,IAAK,OAAO,CAAC,CAAA;AAC1D,YAAA;AAAA,UACF;AACA,UAAA,MAAM,IAAI,cAAc,GAAA,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,UAAA,EAAY,MAAM,GAAG,CAAA;AAAA,QACpE;AACA,QAAA,OAAO,IAAA;AAAA,MACT,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,YACJ,QAAA,KAAa,EAAE,GAAA,YAAe,aAAA,CAAA,IAAkB,IAAI,MAAA,IAAU,GAAA,CAAA;AAChE,QAAA,IAAI,OAAA,GAAU,CAAA,GAAI,WAAA,IAAe,SAAA,EAAW;AAC1C,UAAA,MAAM,IAAI,QAAQ,CAAC,CAAA,KAAM,WAAW,CAAA,EAAG,GAAA,GAAM,CAAA,IAAK,OAAO,CAAC,CAAA;AAC1D,UAAA;AAAA,QACF;AACA,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AACF,CAAA;;;AClHA,IAAM,QAAA,GAAkC;AAAA,EACtC,cAAA,EAAgB,YAAA;AAAA,EAChB,aAAA,EAAe,MAAA;AAAA,EACf,eAAA,EAAiB,EAAA;AAAA,EACjB,gBAAA,EAAkB;AACpB,CAAA;AAEA,SAAS,kBAAkB,IAAA,EAAuB;AAChD,EAAA,OAAO,4BAAA,CAA6B,KAAK,IAAI,CAAA;AAC/C;AAEA,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,MAAM,UAAU,MAAA,CAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,kBAAkB,GAAG,CAAA;AACzD,EAAA,MAAM,EAAA,GAAK,OAAA,CACR,IAAA,EAAK,CACL,KAAA,CAAM,KAAK,CAAA,CACX,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CACjD,IAAA,CAAK,EAAE,CAAA;AACV,EAAA,OAAO,EAAA,CAAG,MAAA,KAAW,CAAA,GAAI,OAAA,GAAW,QAAA,CAAS,KAAK,EAAE,CAAA,GAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAA;AACrE;AAEA,SAAS,SAAA,CACP,UACA,aAAA,EACQ;AACR,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,aAAA,KAAkB,MAAA,GACrB,MAAA,GACA,aAAA,KAAkB,WAClB,QAAA,GACA,QAAA;AAAA,IACN,KAAK,cAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEA,SAAS,YAAA,CACP,IAAA,EACA,aAAA,EACA,gBAAA,EACQ;AACR,EAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA,GAAI,KAAK,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAG/E,EAAA,MAAM,YAAA,GACJ,qBAAqB,UAAA,GACjB,CAAC,KAAK,UAAA,GACN,gBAAA,KAAqB,UAAA,GACrB,IAAA,CAAK,UAAA,GACL,KAAA;AAEN,EAAA,MAAM,CAAA,GAAI,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,aAAa,CAAA;AAC5C,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,UAAA,GAAa,SAAA,GAAY,EAAA;AAEpD,EAAA,OAAO,CAAA,EAAA,EAAK,GAAG,CAAA,EAAG,YAAA,GAAe,MAAM,EAAE,CAAA,EAAA,EAAK,CAAC,CAAA,EAAG,aAAa,CAAA,CAAA,CAAA;AACjE;AAEO,SAAS,SAAA,CAAU,QAA2B,OAAA,EAA+B;AAClF,EAAA,MAAM,OAAO,EAAE,GAAG,UAAU,GAAI,OAAA,IAAW,EAAC,EAAG;AAG/C,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AACrC,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAwB;AAC3C,IAAA,MAAM,IAAA,GAAO,aAAa,GAAG,CAAA;AAC7B,IAAA,IAAI,GAAA,GAAM,IAAA;AACV,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,OAAO,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,EAAG;AAC5B,MAAA,GAAA,GAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAA,EAAG,CAAA,CAAA;AAAA,IACtB;AACA,IAAA,YAAA,CAAa,IAAI,GAAG,CAAA;AACpB,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,KAAK,CAAA,2CAAA,CAA6C,CAAA;AACxD,EAAA,KAAA,CAAM,KAAK,CAAA,gBAAA,EAAA,iBAAmB,IAAI,MAAK,EAAE,WAAA,EAAa,CAAA,CAAE,CAAA;AACxD,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,EAAQ;AAC7B,IAAA,MAAM,QAAA,GAAW,GAAG,IAAA,CAAK,eAAe,GAAG,YAAA,CAAa,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA;AAC/D,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,iBAAA,EAAoB,QAAQ,CAAA,EAAA,CAAI,CAAA;AAC3C,IAAA,KAAA,MAAW,CAAA,IAAK,EAAE,UAAA,EAAY;AAC5B,MAAA,KAAA,CAAM,KAAK,YAAA,CAAa,CAAA,EAAG,KAAK,aAAA,EAAe,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,IACvE;AACA,IAAA,KAAA,CAAM,KAAK,uBAAuB,CAAA;AAClC,IAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,IAAA,CAAK,cAAc,CAAA,IAAA,CAAM,CAAA;AACnD,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,EAAQ;AAC7B,IAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,CAAA,CAAE,IAAI,CAAA,GAAI,EAAE,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,IAAI,CAAA;AACtE,IAAA,MAAM,SAAA,GAAY,GAAG,IAAA,CAAK,eAAe,GAAG,YAAA,CAAa,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA;AAChE,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EACtC;AACA,EAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,IAAI,IAAA,CAAK,mBAAmB,QAAA,EAAU;AACpC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,qBAAA,EAAwB,IAAA,CAAK,cAAc,CAAA,CAAA,CAAG,CAAA;AAAA,EAC3D;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,4BAAA,EAA+B,IAAA,CAAK,cAAc,CAAA,CAAA,CAAG,CAAA;AAChE,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,KAAA,CAAM,KAAK,sBAAsB,CAAA;AACjC,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,EAAQ;AAC7B,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,CAAA,CAAE,IAAI,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,IAAI,CAAA;AACrC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,OAAO,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACzC;AACA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;ACrGA,IAAMA,SAAAA,GAWF;AAAA,EACF,MAAA,EAAQ,MAAA;AAAA,EACR,WAAA,EAAa,aAAA;AAAA,EACb,QAAA,EAAU,KAAA;AAAA,EACV,SAAA,EAAW,IAAA;AAAA,EACX,aAAA,EAAe,MAAA;AAAA,EACf,cAAA,EAAgB,YAAA;AAAA,EAChB,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAA;AAEA,eAAe,aAA0B,IAAA,EAA0B;AACjE,EAAA,MAAM,EAAA,GAAK,MAAM,OAAO,aAAkB,CAAA;AAC1C,EAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,QAAA,CAAS,MAAM,MAAM,CAAA;AAC1C,EAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AACvB;AAEA,eAAe,UAAU,GAAA,EAA4B;AACnD,EAAA,MAAM,EAAA,GAAK,MAAM,OAAO,aAAkB,CAAA;AAC1C,EAAA,MAAM,GAAG,KAAA,CAAM,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC;AAEA,eAAe,SAAA,CAAU,IAAA,EAAc,IAAA,EAAc,SAAA,EAAmC;AACtF,EAAA,MAAM,EAAA,GAAK,MAAM,OAAO,aAAkB,CAAA;AAC1C,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,CAAG,OAAO,IAAI,CAAA;AACpB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,IAAI,CAAA,CAAE,CAAA;AAAA,IAChE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,MAAM,EAAA,CAAG,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AACvC;AAEA,SAAS,gBAAgB,CAAA,EAAoC;AAC3D,EAAA,OAAO,CAAC,CAAC,CAAA,IAAK,OAAO,MAAM,QAAA,IAAY,KAAA,CAAM,OAAA,CAAS,CAAA,CAA2B,MAAM,CAAA;AACzF;AAEA,eAAe,kBAAA,CACb,IAAA,EACA,UAAA,EACA,UAAA,EAC4B;AAC5B,EAAA,MAAM,iBAAA,GAAoB;AAAA,IACxB,CAAA,QAAA,EAAW,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,IACzC,CAAA,MAAA,EAAS,kBAAA,CAAmB,UAAU,CAAC,CAAA,OAAA,CAAA;AAAA,IACvC,CAAA,aAAA,EAAgB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,IAC9C,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,IACpD,CAAA,wBAAA,EAA2B,kBAAA,CAAmB,UAAU,CAAC,CAAA;AAAA,GAC3D;AACA,EAAA,MAAM,KAAA,GAAQ,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,UAAA,GAAa,iBAAA;AAE7D,EAAA,IAAI,OAAA;AACJ,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAiB,OAAO,CAAC,CAAA;AAChD,MAAA,IAAI,eAAA,CAAgB,GAAG,CAAA,EAAG,OAAO,GAAA;AAAA,IACnC,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,GAAU,CAAA;AAAA,IACZ;AAAA,EACF;AACA,EAAA,MAAM,MAAM,OAAA,YAAmB,KAAA,GAAQ,QAAQ,OAAA,GAAU,MAAA,CAAO,WAAW,eAAe,CAAA;AAC1F,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,2CAA2C,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,iBAAiB,GAAG,CAAA;AAAA,GACjF;AACF;AAMA,eAAsB,cACpB,OAAA,EACmD;AACnD,EAAA,MAAM,IAAA,GAAO,MAAM,OAAO,MAAW,CAAA;AACrC,EAAA,MAAM,OAAO,EAAE,GAAGA,WAAU,GAAI,OAAA,IAAW,EAAC,EAAG;AAG/C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,MAAA,IAAU,WAAA;AAEpD,EAAA,IAAI,MAAA,GAAmC,IAAA;AAEvC,EAAA,IAAI,KAAK,MAAA,KAAW,MAAA,IAAW,KAAK,MAAA,KAAW,MAAA,IAAU,KAAK,UAAA,EAAa;AACzE,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,EAAY,MAAM,IAAI,MAAM,2CAA2C,CAAA;AACjF,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA;AACR,MAAAC,wBAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,qCAAA,EAAwC,IAAA,CAAK,UAAU;AAAA,CAAI,CAAA;AAClF,IAAA,MAAA,GAAS,MAAM,YAAA,CAAgC,IAAA,CAAK,UAAU,CAAA;AAAA,EAChE;AAEA,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,IAAI,KAAK,MAAA,KAAW,MAAA,EAAQ,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAC7E,IAAA,MAAM,GAAA,GAAM,MAAM,aAAA,CAAc,EAAE,CAAA;AAClC,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW;AAAA,MAC1B,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,WAAW,GAAA,CAAI;AAAA,KAChB,CAAA;AACD,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA;AACR,MAAAA,wBAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,2CAAA,EAA8C,GAAA,CAAI,UAAU;AAAA,CAAI,CAAA;AACvF,IAAA,MAAA,GAAS,MAAM,kBAAA,CAAmB,IAAA,EAAM,GAAA,CAAI,UAAA,EAAY,SAAS,QAAQ,CAAA;AAAA,EAC3E;AAEA,EAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,EAC3D;AAGA,EAAA,MAAM,SAAA,GACJ,OAAO,IAAA,CAAK,YAAA,KAAiB,aAC5B,IAAA,CAAK,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA,IAC/B,IAAA,CAAK,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA,IACjC,IAAA,CAAK,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA,IACjC,IAAA,CAAK,YAAA,CAAa,SAAS,OAAO,CAAA,IAClC,IAAA,CAAK,YAAA,CAAa,SAAS,QAAQ,CAAA,IACnC,IAAA,CAAK,YAAA,CAAa,SAAS,QAAQ,CAAA,CAAA;AAEvC,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,WAAA;AAEJ,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,eAAe,IAAA,CAAK,YAAA;AAC1B,IAAA,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQA,wBAAA,CAAQ,GAAA,IAAO,YAAY,CAAA;AACpD,IAAA,WAAA,GAAc,IAAA,CAAK,QAAQ,SAAS,CAAA;AACpC,IAAA,MAAM,UAAU,WAAW,CAAA;AAC3B,IAAA,YAAA,GAAe,KAAK,QAAA,CAAS,SAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,EACjE,CAAA,MAAO;AACL,IAAA,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQA,wBAAA,CAAQ,GAAA,IAAO,QAAQ,CAAA;AAClD,IAAA,MAAM,UAAU,WAAW,CAAA;AAC3B,IAAA,SAAA,GAAY,KAAK,IAAA,CAAK,WAAA,EAAa,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,GAAA,CAAK,CAAA;AAC3D,IAAA,YAAA,GAAe,IAAA,CAAK,WAAA;AAAA,EACtB;AAEA,EAAA,MAAM,KAAA,GAAQ,UAAU,MAAA,EAAQ;AAAA,IAC9B,gBAAgB,IAAA,CAAK,cAAA;AAAA,IACrB,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,eAAA,EAAiB,KAAK,MAAA,IAAU,EAAA;AAAA,IAChC,kBAAkB,IAAA,CAAK;AAAA,GACxB,CAAA;AACD,EAAA,MAAM,SAAA,CAAU,SAAA,EAAW,CAAA,EAAG,KAAK;AAAA,CAAA,EAAM,KAAK,SAAS,CAAA;AAEvD,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,MAAM,gBAAgB,IAAA,CAAK,OAAA;AAAA,MACzBA,yBAAQ,GAAA,EAAI;AAAA,MACZ,IAAA,CAAK,UAAA,KAAe,SAAA,GAAY,WAAA,GAAc,WAAA;AAAA,KAChD;AACA,IAAA,MAAM,UAAU,aAAa,CAAA;AAC7B,IAAA,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,CAAA,EAAG,YAAY,CAAA,KAAA,CAAO,CAAA;AAC1D,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAC,CAAA;AACjD,IAAA,MAAM,SAAA,CAAU,QAAA,EAAU,CAAA,EAAG,UAAU;AAAA,CAAA,EAAM,KAAK,SAAS,CAAA;AAAA,EAC7D;AAEA,EAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,IAAAA,wBAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,iBAAA,EAAoB,SAAS;AAAA,CAAI,CAAA;AACtD,IAAA,IAAI,QAAA,EAAUA,wBAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,oBAAoB,QAAQ;AAAA,CAAI,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO,EAAE,WAAW,QAAA,EAAS;AAC/B;;;AC9OA,SAAS,gBAAgB,CAAA,EAAqB;AAC5C,EAAA,IAAI,CAAC,GAAG,OAAO,KAAA;AACf,EAAA,OACE,CAAA,CAAE,SAAS,KAAK,CAAA,IAChB,EAAE,QAAA,CAAS,MAAM,CAAA,IACjB,CAAA,CAAE,QAAA,CAAS,MAAM,KACjB,CAAA,CAAE,QAAA,CAAS,OAAO,CAAA,IAClB,CAAA,CAAE,SAAS,QAAQ,CAAA,IACnB,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAEvB;AAEA,SAAS,UAAU,IAAA,EAAiC;AAClD,EAAA,MAAM,OAAwB,EAAC;AAC/B,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAc,IAAA,CAAK,IAAI,CAAC,CAAA;AAEtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,IAAA,QAAQ,CAAA;AAAG,MACT,KAAK,OAAA;AAAA,MACL,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,QAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAE,CAAA;AAClD,QAAA,IAAI,eAAA,CAAgB,GAAG,CAAA,EAAG,IAAA,CAAK,YAAA,GAAe,GAAA;AAAA,kBACpC,WAAA,GAAc,GAAA;AACxB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,aAAA;AAAA,MACL,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,QAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAE,CAAA;AAClD,QAAA,IAAI,eAAA,CAAgB,GAAG,CAAA,EAAG,IAAA,CAAK,YAAA,GAAe,GAAA;AAAA,kBACpC,WAAA,GAAc,GAAA;AACxB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,cAAA;AAAA,MACL,KAAK,aAAA,EAAe;AAClB,QAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,QAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAE,CAAA;AAClD,QAAA,IAAA,CAAK,YAAA,GAAe,GAAA;AACpB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA;AAAA,MACL,KAAK,WAAA;AACH,QAAA,IAAA,CAAK,UAAA,GAAa,KAAK,CAAC,CAAA;AACxB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,QAAA;AAAA,MACL,KAAK,YAAA;AACH,QAAA,IAAA,CAAK,WAAA,GAAc,KAAK,CAAC,CAAA;AACzB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,UAAA,GAAa,KAAK,CAAC,CAAA;AACxB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,CAAA,GAAA,CAAK,IAAA,CAAK,CAAC,CAAA,IAAK,IAAI,WAAA,EAAY;AACtC,QAAA,IAAI,MAAM,KAAA,IAAS,CAAA,KAAM,UAAU,CAAA,KAAM,MAAA,OAAa,MAAA,GAAS,CAAA;AAAA,aAC1D,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAE,CAAA;AAC7C,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,cAAA,EAAgB;AACnB,QAAA,MAAM,CAAA,GAAA,CAAK,IAAA,CAAK,CAAC,CAAA,IAAK,IAAI,WAAA,EAAY;AACtC,QAAA,IAAI,MAAM,QAAA,IAAY,CAAA,KAAM,UAAU,CAAA,KAAM,QAAA,OAAe,aAAA,GAAgB,CAAA;AAAA,aACtE,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,CAAC,CAAA,CAAE,CAAA;AACjD,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,QAAA;AAAA,MACL,KAAK,kBAAA;AACH,QAAA,IAAA,CAAK,cAAA,GAAiB,KAAK,CAAC,CAAA;AAC5B,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,MAAA,GAAS,KAAK,CAAC,CAAA;AACpB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,CAAA,GAAA,CAAK,IAAA,CAAK,CAAC,CAAA,IAAK,IAAI,WAAA,EAAY;AACtC,QAAA,IAAI,CAAA,KAAM,UAAA,IAAc,CAAA,KAAM,SAAA,IAAa,MAAM,QAAA,EAAU;AACzD,UAAA,IAAA,CAAK,QAAA,GAAW,UAAA;AAAA,QAClB,CAAA,MAAA,IAAW,MAAM,UAAA,EAAY;AAC3B,UAAA,IAAA,CAAK,QAAA,GAAW,UAAA;AAAA,QAClB,CAAA,MAAA,IAAW,MAAM,MAAA,EAAQ;AACvB,UAAA,IAAA,CAAK,QAAA,GAAW,MAAA;AAAA,QAClB,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAAA,QACzE;AACA,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,aAAA;AACH,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,QAAA;AAAA,MACF,KAAK,gBAAA;AACH,QAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,QAAA;AAAA,MACF,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,QAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,CAAC,CAAA,CAAE,CAAA;AACpF,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,WAAW,EAAC;AACrC,QAAA,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA;AACpB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,aAAA;AACH,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,QAAA;AAAA,MACF,KAAK,gBAAA;AACH,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,QAAA;AAAA,MACF,KAAK,IAAA;AAAA,MACL,KAAK,SAAA;AACH,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,QAAA;AAAA,MACF,KAAK,IAAA;AAAA,MACL,KAAK,QAAA;AACH,QAAA,SAAA,EAAU;AACV,QAAAA,wBAAAA,CAAQ,KAAK,CAAC,CAAA;AACd,QAAA;AAAA,MACF;AACE,QAAA,IAAI,CAAA,CAAE,WAAW,GAAG,CAAA,QAAS,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,CAAC,CAAA,CAAE,CAAA;AAC7D,QAAA;AAAA;AACJ,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,SAAA,GAAkB;AACzB,EAAAA,wBAAAA,CAAQ,OAAO,KAAA,CAAM,CAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAkCtB,CAAA;AACD;AAAA,CAEC,YAAY;AACX,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,SAAA,CAAUA,wBAAAA,CAAQ,IAAI,CAAA;AACnC,IAAA,MAAM,cAAc,IAAI,CAAA;AAAA,EAC1B,SAAS,CAAA,EAAY;AACnB,IAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,IAAAA,wBAAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,UAAA,EAAa,GAAG;AAAA,CAAI,CAAA;AACzC,IAAAA,wBAAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAA,GAAG","file":"generate.cjs","sourcesContent":["// filename: src/config/defaults.ts\nexport const DEFAULT_BASE_URL = 'https://api.onyx.dev';\n\nexport const sanitizeBaseUrl = (u: string): string => u.replace(/\\/+$/, '');","// filename: src/errors/config-error.ts\nexport class OnyxConfigError extends Error {\n readonly name = 'OnyxConfigError';\n constructor(message: string) {\n super(message);\n }\n}","// filename: src/config/chain.ts\nimport { DEFAULT_BASE_URL, sanitizeBaseUrl } from './defaults';\nimport { OnyxConfigError } from '../errors/config-error';\nimport type { OnyxConfig } from '../types/public';\nimport type { FetchImpl } from '../types/common';\n\nexport interface ResolvedConfig {\n baseUrl: string;\n databaseId: string;\n apiKey: string;\n apiSecret: string;\n fetch: FetchImpl;\n}\n\nconst gProcess = (globalThis as {\n process?: {\n versions?: { node?: string };\n env?: Record<string, string | undefined>;\n stderr?: { write?: (s: string) => void };\n cwd?: () => string;\n };\n}).process;\nconst isNode = !!gProcess?.versions?.node;\n\n// Optional debug logger — enable with ONYX_DEBUG=true (Node only)\nconst dbg = (...args: unknown[]): void => {\n if (gProcess?.env?.ONYX_DEBUG == \"true\") {\n const fmt = (v: unknown): string => {\n if (typeof v === 'string') return v;\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n };\n gProcess.stderr?.write?.(`[onyx-config] ${args.map(fmt).join(' ')}\\n`);\n }\n};\n\nfunction dropUndefined<T extends object>(obj: Partial<T> | undefined): Partial<T> {\n if (!obj) return {};\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined) out[k] = v;\n }\n return out as Partial<T>;\n}\n\n// Lazy import helper to hide Node-only modules from bundlers\nasync function nodeImport<T>(spec: string): Promise<T> {\n return import(/* @vite-ignore */ spec) as Promise<T>;\n}\n\nfunction readEnv(targetId?: string): Partial<OnyxConfig> {\n if (!gProcess?.env) return {};\n const env = gProcess.env;\n const pick = (...keys: string[]): string | undefined => {\n for (const k of keys) {\n const v = env[k];\n if (typeof v === 'string') {\n const cleaned = v.replace(/[\\r\\n]+/g, '').trim();\n if (cleaned !== '') return cleaned;\n }\n }\n return undefined;\n };\n\n const envId = pick('ONYX_DATABASE_ID');\n if (targetId && envId !== targetId) return {};\n const res = dropUndefined<OnyxConfig>({\n baseUrl: pick('ONYX_DATABASE_BASE_URL'),\n databaseId: envId,\n apiKey: pick('ONYX_DATABASE_API_KEY'),\n apiSecret: pick('ONYX_DATABASE_API_SECRET'),\n });\n if (Object.keys(res).length === 0) return {};\n dbg('env:', mask(res));\n return res;\n}\n\nasync function readProjectFile(databaseId?: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n const cwd = gProcess?.cwd?.() ?? '.';\n\n const tryRead = async (p: string): Promise<Partial<OnyxConfig>> => {\n const txt = await fs.readFile(p, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('project file:', p, '→', mask(json));\n return json;\n };\n\n if (databaseId) {\n const specific = path.resolve(cwd, `onyx-database-${databaseId}.json`);\n try {\n return await tryRead(specific);\n } catch {\n dbg('project file not found:', specific);\n }\n }\n\n const fallback = path.resolve(cwd, 'onyx-database.json');\n try {\n return await tryRead(fallback);\n } catch {\n dbg('project file not found:', fallback);\n return {};\n }\n}\n\nasync function readHomeProfile(databaseId?: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const os = await nodeImport<typeof import('node:os')>('node:os');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n\n const home = os.homedir();\n const dir = path.join(home, '.onyx');\n\n const fileExists = async (p: string): Promise<boolean> => {\n try {\n await fs.access(p);\n return true;\n } catch {\n return false;\n }\n };\n const readProfile = async (p: string): Promise<Partial<OnyxConfig>> => {\n try {\n const txt = await fs.readFile(p, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('home profile used:', p, '→', mask(json));\n return json;\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new OnyxConfigError(`Failed to read ${p}: ${msg}`);\n }\n };\n\n if (databaseId) {\n const specific = `${dir}/onyx-database-${databaseId}.json`;\n if (await fileExists(specific)) return readProfile(specific);\n dbg('no specific profile:', specific);\n }\n\n const defaultInDir = `${dir}/onyx-database.json`;\n if (await fileExists(defaultInDir)) return readProfile(defaultInDir);\n dbg('no default profile in dir:', defaultInDir);\n\n const defaultInHome = `${home}/onyx-database.json`;\n if (await fileExists(defaultInHome)) return readProfile(defaultInHome);\n dbg('no home-root fallback:', defaultInHome);\n\n if (!(await fileExists(dir))) {\n dbg('~/.onyx does not exist:', dir);\n return {};\n }\n const files = await fs.readdir(dir).catch(() => []);\n const matches = files.filter(f => f.startsWith('onyx-database-') && f.endsWith('.json'));\n if (matches.length === 1) {\n const only = `${dir}/${matches[0]}`;\n return readProfile(only);\n }\n if (matches.length > 1) {\n throw new OnyxConfigError(\n 'Multiple ~/.onyx/onyx-database-*.json profiles found. Specify databaseId via env or provide ./onyx-database.json.'\n );\n }\n\n dbg('no usable home profiles found in', dir);\n return {};\n}\n\nasync function readConfigPath(p: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n const cwd = gProcess?.cwd?.() ?? '.';\n const resolved = path.isAbsolute(p) ? p : path.resolve(cwd, p);\n try {\n const txt = await fs.readFile(resolved, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('config path:', resolved, '→', mask(json));\n return json;\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new OnyxConfigError(`Failed to read ${resolved}: ${msg}`);\n }\n}\n\n/**\n * Resolve configuration using precedence:\n * explicit config (highest) >\n * env vars >\n * ONYX_CONFIG_PATH file >\n * project file >\n * home profile\n */\nexport async function resolveConfig(input?: OnyxConfig): Promise<ResolvedConfig> {\n const configPath = gProcess?.env?.ONYX_CONFIG_PATH;\n const env = readEnv(input?.databaseId);\n\n let cfgPath: Partial<OnyxConfig> = {};\n if (configPath) {\n cfgPath = await readConfigPath(configPath);\n }\n\n const targetId = input?.databaseId ?? env.databaseId ?? cfgPath.databaseId;\n\n let haveDbId = !!(input?.databaseId ?? env.databaseId ?? cfgPath.databaseId);\n let haveApiKey = !!(input?.apiKey ?? env.apiKey ?? cfgPath.apiKey);\n let haveApiSecret = !!(input?.apiSecret ?? env.apiSecret ?? cfgPath.apiSecret);\n\n let project: Partial<OnyxConfig> = {};\n if (!(haveDbId && haveApiKey && haveApiSecret)) {\n project = await readProjectFile(targetId);\n if (project.databaseId) haveDbId = true;\n if (project.apiKey) haveApiKey = true;\n if (project.apiSecret) haveApiSecret = true;\n }\n\n let home: Partial<OnyxConfig> = {};\n if (!(haveDbId && haveApiKey && haveApiSecret)) {\n home = await readHomeProfile(targetId);\n }\n\n const merged: Partial<OnyxConfig> = {\n baseUrl: DEFAULT_BASE_URL,\n ...dropUndefined<OnyxConfig>(home),\n ...dropUndefined<OnyxConfig>(project),\n ...dropUndefined<OnyxConfig>(cfgPath),\n ...dropUndefined<OnyxConfig>(env),\n ...dropUndefined<OnyxConfig>(input),\n };\n\n dbg('merged (pre-validate):', mask(merged));\n\n const baseUrl = sanitizeBaseUrl(merged.baseUrl ?? DEFAULT_BASE_URL);\n const databaseId = merged.databaseId ?? '';\n const apiKey = merged.apiKey ?? '';\n const apiSecret = merged.apiSecret ?? '';\n const gfetch = (globalThis as { fetch?: FetchImpl }).fetch;\n const fetchImpl: FetchImpl =\n merged.fetch ??\n (typeof gfetch === 'function'\n ? (u, i) => gfetch(u, i)\n : async () => {\n throw new OnyxConfigError('No fetch available; provide OnyxConfig.fetch');\n });\n\n const missing: string[] = [];\n if (!databaseId) missing.push('databaseId');\n if (!apiKey) missing.push('apiKey');\n if (!apiSecret) missing.push('apiSecret');\n if (missing.length) {\n dbg('validation failed. merged:', mask(merged));\n const sources = [\n 'env',\n configPath ?? 'env ONYX_CONFIG_PATH',\n ...(isNode\n ? [\n './onyx-database-<databaseId>.json',\n './onyx-database.json',\n '~/.onyx/onyx-database-<databaseId>.json',\n '~/.onyx/onyx-database.json',\n '~/onyx-database.json',\n ]\n : []),\n 'explicit config',\n ];\n throw new OnyxConfigError(\n `Missing required config: ${missing.join(', ')}. Sources: ${sources.join(', ')}`,\n );\n }\n\n const resolved: ResolvedConfig = { baseUrl, databaseId, apiKey, apiSecret, fetch: fetchImpl };\n const source = {\n databaseId: input?.databaseId\n ? 'explicit config'\n : env.databaseId\n ? 'env'\n : cfgPath.databaseId\n ? 'env ONYX_CONFIG_PATH'\n : project.databaseId\n ? 'project file'\n : home.databaseId\n ? 'home profile'\n : 'unknown',\n apiKey: input?.apiKey\n ? 'explicit config'\n : env.apiKey\n ? 'env'\n : cfgPath.apiKey\n ? 'env ONYX_CONFIG_PATH'\n : project.apiKey\n ? 'project file'\n : home.apiKey\n ? 'home profile'\n : 'unknown',\n apiSecret: input?.apiSecret\n ? 'explicit config'\n : env.apiSecret\n ? 'env'\n : cfgPath.apiSecret\n ? 'env ONYX_CONFIG_PATH'\n : project.apiSecret\n ? 'project file'\n : home.apiSecret\n ? 'home profile'\n : 'unknown',\n };\n dbg('credential source:', JSON.stringify(source));\n dbg('resolved:', mask(resolved));\n return resolved;\n}\n\n// Redacts secrets for debug logging\nfunction mask<T extends object>(obj: T | undefined): T | undefined {\n if (!obj) return obj;\n const clone = { ...(obj as Record<string, unknown>) } as Record<string, unknown>;\n if (typeof clone.apiKey === 'string') clone.apiKey = '***';\n if (typeof clone.apiSecret === 'string') clone.apiSecret = '***';\n return clone as unknown as T;\n}\n","// filename: src/errors/http-error.ts\nexport class OnyxHttpError extends Error {\n readonly name = 'OnyxHttpError';\n readonly status: number;\n readonly statusText: string;\n readonly body: unknown;\n readonly rawBody: string;\n\n constructor(message: string, status: number, statusText: string, body: unknown, rawBody: string) {\n super(message);\n this.status = status;\n this.statusText = statusText;\n this.body = body;\n this.rawBody = rawBody;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n status: this.status,\n statusText: this.statusText,\n body: this.body,\n rawBody: this.rawBody,\n stack: this.stack,\n };\n }\n\n [Symbol.for('nodejs.util.inspect.custom')](): Record<string, unknown> {\n return this.toJSON();\n }\n}","// filename: src/core/http.ts\nimport { OnyxHttpError } from '../errors/http-error';\nimport { OnyxConfigError } from '../errors/config-error';\nimport type { FetchImpl } from '../types/common';\n\nexport function parseJsonAllowNaN(txt: string): unknown {\n try {\n return JSON.parse(txt);\n } catch {\n const fixed = txt.replace(/(:\\s*)(NaN|Infinity|-Infinity)(\\s*[,}])/g, '$1null$3');\n return JSON.parse(fixed);\n }\n}\n\nexport interface HttpClientOptions {\n baseUrl: string;\n apiKey: string;\n apiSecret: string;\n fetchImpl?: FetchImpl;\n defaultHeaders?: Record<string, string>;\n requestLoggingEnabled?: boolean;\n responseLoggingEnabled?: boolean;\n}\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly apiSecret: string;\n private readonly fetchImpl: FetchImpl;\n private readonly defaults: Record<string, string>;\n private readonly requestLoggingEnabled: boolean;\n private readonly responseLoggingEnabled: boolean;\n\n constructor(opts: HttpClientOptions) {\n if (!opts.baseUrl || opts.baseUrl.trim() === '') {\n throw new OnyxConfigError('baseUrl is required');\n }\n try {\n // ensure baseUrl has protocol; URL constructor will throw otherwise\n new URL(opts.baseUrl);\n } catch {\n throw new OnyxConfigError('baseUrl must include protocol, e.g. https://');\n }\n this.baseUrl = opts.baseUrl.replace(/\\/+$/, '');\n this.apiKey = opts.apiKey;\n this.apiSecret = opts.apiSecret;\n const gfetch = (globalThis as { fetch?: FetchImpl }).fetch;\n if (opts.fetchImpl) {\n this.fetchImpl = opts.fetchImpl;\n } else if (typeof gfetch === 'function') {\n this.fetchImpl = (url, init) => gfetch(url, init);\n } else {\n throw new Error('global fetch is not available; provide OnyxConfig.fetch');\n }\n this.defaults = Object.assign({}, opts.defaultHeaders);\n const envDebug =\n (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\n ?.env?.ONYX_DEBUG === 'true';\n this.requestLoggingEnabled = !!opts.requestLoggingEnabled || envDebug;\n this.responseLoggingEnabled = !!opts.responseLoggingEnabled || envDebug;\n }\n\n headers(extra?: Record<string, string>): Record<string, string> {\n const extras = { ...(extra ?? {}) };\n delete extras['x-onyx-key'];\n delete extras['x-onyx-secret'];\n return {\n 'x-onyx-key': this.apiKey,\n 'x-onyx-secret': this.apiSecret,\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n ...this.defaults,\n ...extras,\n };\n }\n\n async request<T = unknown>(\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n path: string,\n body?: unknown,\n extraHeaders?: Record<string, string>\n ): Promise<T> {\n if (!path.startsWith('/')) {\n throw new OnyxConfigError('path must start with /');\n }\n const url = `${this.baseUrl}${path}`;\n const headers = this.headers({\n ...(method === 'DELETE' ? { Prefer: 'return=representation' } : {}),\n ...(extraHeaders ?? {}),\n });\n if (body == null) delete headers['Content-Type'];\n if (this.requestLoggingEnabled) {\n console.log(`${method} ${url}`);\n if (body != null) {\n const logBody = typeof body === 'string' ? body : JSON.stringify(body);\n console.log(logBody);\n }\n const headerLog = { ...headers, 'x-onyx-secret': '[REDACTED]' };\n console.log('Headers:', headerLog);\n }\n const payload =\n body == null ? undefined : typeof body === 'string' ? body : JSON.stringify(body);\n const init = {\n method,\n headers,\n body: payload,\n };\n\n const isQuery =\n path.includes('/query/') && !/\\/query\\/(?:update|delete)\\//.test(path);\n const canRetry = method === 'GET' || isQuery;\n const maxAttempts = canRetry ? 3 : 1;\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const res = await this.fetchImpl(url, init);\n const contentType = res.headers.get('Content-Type') || '';\n const raw = await res.text();\n if (this.responseLoggingEnabled) {\n const statusLine = `${res.status} ${res.statusText}`.trim();\n console.log(statusLine);\n if (raw.trim().length > 0) {\n console.log(raw);\n }\n }\n const isJson =\n raw.trim().length > 0 &&\n (contentType.includes('application/json') || /^[\\[{]/.test(raw.trim()));\n const data = isJson ? parseJsonAllowNaN(raw) : raw;\n if (!res.ok) {\n const msg =\n typeof data === 'object' &&\n data !== null &&\n 'error' in data &&\n typeof (data as { error?: { message?: unknown } }).error?.message === 'string'\n ? String((data as { error: { message: unknown } }).error.message)\n : `${res.status} ${res.statusText}`;\n if (canRetry && res.status >= 500 && attempt + 1 < maxAttempts) {\n await new Promise((r) => setTimeout(r, 100 * 2 ** attempt));\n continue;\n }\n throw new OnyxHttpError(msg, res.status, res.statusText, data, raw);\n }\n return data as T;\n } catch (err) {\n const retryable =\n canRetry && (!(err instanceof OnyxHttpError) || err.status >= 500);\n if (attempt + 1 < maxAttempts && retryable) {\n await new Promise((r) => setTimeout(r, 100 * 2 ** attempt));\n continue;\n }\n throw err;\n }\n }\n // unreachable but satisfies TypeScript\n throw new Error('Request failed after retries');\n }\n}\n","// filename: gen/emit.ts\nexport type OnyxAttributeType =\n | 'String'\n | 'Int'\n | 'Boolean'\n | 'Timestamp'\n | 'EmbeddedList'\n | 'EmbeddedObject';\n\nexport type OnyxAttribute = Readonly<{\n name: string;\n type: OnyxAttributeType;\n isNullable: boolean;\n}>;\n\nexport type OnyxTable = Readonly<{\n name: string;\n attributes: readonly OnyxAttribute[];\n}>;\n\nexport type OnyxIntrospection = Readonly<{\n tables: readonly OnyxTable[];\n}>;\n\nexport type OptionalStrategy = 'non-null' | 'nullable' | 'none';\n\nexport type EmitOptions = Readonly<{\n /** Exported schema mapping type name. */\n schemaTypeName?: string;\n /** How to represent Timestamp attributes. Default: 'date'. */\n timestampMode?: 'string' | 'date' | 'number';\n /** Prefix added to each generated model/interface name. Example: 'Onyx' -> OnyxVodItem */\n modelNamePrefix?: string;\n /**\n * Where to use the TypeScript optional property modifier `?`.\n * - 'non-null' (default): add `?` on non-nullable fields (isNullable === false)\n * - 'nullable' : add `?` on nullable fields (isNullable === true)\n * - 'none' : never add `?`\n */\n optionalStrategy?: OptionalStrategy;\n}>;\n\nconst DEFAULTS: Required<EmitOptions> = {\n schemaTypeName: 'OnyxSchema',\n timestampMode: 'date',\n modelNamePrefix: '',\n optionalStrategy: 'non-null',\n};\n\nfunction isValidIdentifier(name: string): boolean {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name);\n}\n\nfunction toPascalCase(raw: string): string {\n const cleaned = String(raw).replace(/[^A-Za-z0-9]+/g, ' ');\n const pc = cleaned\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n return pc.length === 0 ? 'Table' : (/^[0-9]/.test(pc) ? `T${pc}` : pc);\n}\n\nfunction tsTypeFor(\n attrType: OnyxAttributeType,\n timestampMode: 'string' | 'date' | 'number',\n): string {\n switch (attrType) {\n case 'String':\n return 'string';\n case 'Int':\n return 'number';\n case 'Boolean':\n return 'boolean';\n case 'Timestamp':\n return timestampMode === 'date'\n ? 'Date'\n : timestampMode === 'number'\n ? 'number'\n : 'string';\n case 'EmbeddedList':\n return 'any[]';\n case 'EmbeddedObject':\n return 'any';\n default:\n return 'any';\n }\n}\n\nfunction propertyLine(\n attr: OnyxAttribute,\n timestampMode: 'string' | 'date' | 'number',\n optionalStrategy: OptionalStrategy,\n): string {\n const key = isValidIdentifier(attr.name) ? attr.name : JSON.stringify(attr.name);\n\n // Decide whether to mark the property as optional (with '?')\n const makeOptional =\n optionalStrategy === 'non-null'\n ? !attr.isNullable\n : optionalStrategy === 'nullable'\n ? attr.isNullable\n : false;\n\n const t = tsTypeFor(attr.type, timestampMode);\n const nullableUnion = attr.isNullable ? ' | null' : '';\n\n return ` ${key}${makeOptional ? '?' : ''}: ${t}${nullableUnion};`;\n}\n\nexport function emitTypes(schema: OnyxIntrospection, options?: EmitOptions): string {\n const opts = { ...DEFAULTS, ...(options ?? {}) };\n\n // Track used enum keys to avoid collisions\n const usedEnumKeys = new Set<string>();\n const makeEnumKey = (raw: string): string => {\n const base = toPascalCase(raw);\n let key = base;\n let i = 2;\n while (usedEnumKeys.has(key)) {\n key = `${base}_${i++}`;\n }\n usedEnumKeys.add(key);\n return key;\n };\n\n const lines: string[] = [];\n lines.push(`// AUTO-GENERATED BY onyx-gen. DO NOT EDIT.`);\n lines.push(`// Generated at ${new Date().toISOString()}`);\n lines.push('');\n\n // Per-table interfaces\n for (const t of schema.tables) {\n const typeName = `${opts.modelNamePrefix}${toPascalCase(t.name)}`;\n lines.push(`export interface ${typeName} {`);\n for (const a of t.attributes) {\n lines.push(propertyLine(a, opts.timestampMode, opts.optionalStrategy));\n }\n lines.push(' [key: string]: any;');\n lines.push('}');\n lines.push('');\n }\n\n // Schema mapping\n lines.push(`export type ${opts.schemaTypeName} = {`);\n for (const t of schema.tables) {\n const key = isValidIdentifier(t.name) ? t.name : JSON.stringify(t.name);\n const modelName = `${opts.modelNamePrefix}${toPascalCase(t.name)}`;\n lines.push(` ${key}: ${modelName};`);\n }\n lines.push('};');\n lines.push('');\n\n // Convenience alias so consumers can always `import { Schema }`\n if (opts.schemaTypeName !== 'Schema') {\n lines.push(`export type Schema = ${opts.schemaTypeName};`);\n }\n lines.push(`export const Schema = {} as ${opts.schemaTypeName};`);\n lines.push('');\n\n // Tables enum (for IDE suggestions & safer table refs)\n lines.push('export enum tables {');\n for (const t of schema.tables) {\n const enumKey = makeEnumKey(t.name); // safe TS identifier\n const enumVal = JSON.stringify(t.name); // preserve original table name\n lines.push(` ${enumKey} = ${enumVal},`);\n }\n lines.push('}');\n lines.push('');\n\n return lines.join('\\n');\n}\n","// filename: gen/generate.ts\nimport process from 'node:process';\nimport { resolveConfig } from '../src/config/chain';\nimport { HttpClient } from '../src/core/http';\nimport { emitTypes, type OnyxIntrospection, type EmitOptions, type OptionalStrategy } from './emit';\n\nexport interface GenerateOptions {\n /** Where to read schema from. */\n source?: 'auto' | 'api' | 'file';\n /** When source=file, filesystem path to schema JSON. */\n schemaPath?: string;\n\n /**\n * Output base filename (without extension). Default: \"onyx.schema\".\n * Used only when writing into a directory (see `typesOutDir`).\n */\n outBaseName?: string;\n\n /**\n * Types output directory (when writing into a directory).\n * Default: \"generated\". Back-compat alias: `outDir`.\n */\n typesOutDir?: string;\n\n /**\n * Write the generated types to THIS EXACT FILE (absolute or relative path).\n * If provided and points to a \".ts\" file, this takes precedence over `typesOutDir`.\n * Example: \"./onyx/types.ts\"\n */\n typesOutFile?: string;\n\n /**\n * JSON output directory (only used when `emitJson: true`).\n * Default: same as `typesOutDir` or the directory of `typesOutFile` (if set).\n */\n jsonOutDir?: string;\n\n /**\n * Emit a copy of the schema JSON alongside the TS file.\n * Default: false (do not copy schema).\n */\n emitJson?: boolean;\n\n /** Overwrite existing files. Default: true. */\n overwrite?: boolean;\n\n /** Timestamp representation for TS types. Default: \"date\". */\n timestampMode?: EmitOptions['timestampMode'];\n\n /** Exported schema type name. Default: \"OnyxSchema\". */\n schemaTypeName?: string;\n\n /** Prefix for model/interface names. Example: \"Onyx\" -> OnyxVodItem. Default: \"\" */\n prefix?: string;\n\n /**\n * Optional property strategy. Default: \"non-null\" (add `?` to non-null fields).\n * Other values: \"nullable\", \"none\".\n */\n optional?: OptionalStrategy;\n\n /** Optional candidate API paths (overrides defaults). Must start with \"/\". */\n apiPaths?: string[];\n\n /** Quiet logs. Default: false. */\n quiet?: boolean;\n\n /** @deprecated Legacy single outDir; still accepted to avoid breaking scripts. */\n outDir?: string;\n}\n\nconst DEFAULTS: Required<\n Omit<\n GenerateOptions,\n | 'schemaPath'\n | 'apiPaths'\n | 'typesOutDir'\n | 'jsonOutDir'\n | 'outDir'\n | 'prefix'\n | 'typesOutFile'\n >\n> = {\n source: 'auto',\n outBaseName: 'onyx.schema',\n emitJson: false,\n overwrite: true,\n timestampMode: 'date',\n schemaTypeName: 'OnyxSchema',\n optional: 'non-null',\n quiet: false,\n};\n\nasync function readFileJson<T = unknown>(path: string): Promise<T> {\n const fs = await import('node:fs/promises');\n const txt = await fs.readFile(path, 'utf8');\n return JSON.parse(txt) as T;\n}\n\nasync function ensureDir(dir: string): Promise<void> {\n const fs = await import('node:fs/promises');\n await fs.mkdir(dir, { recursive: true });\n}\n\nasync function writeFile(path: string, data: string, overwrite: boolean): Promise<void> {\n const fs = await import('node:fs/promises');\n if (!overwrite) {\n try {\n await fs.access(path);\n throw new Error(`Refusing to overwrite existing file: ${path}`);\n } catch {\n /* not exists -> ok */\n }\n }\n await fs.writeFile(path, data, 'utf8');\n}\n\nfunction isIntrospection(x: unknown): x is OnyxIntrospection {\n return !!x && typeof x === 'object' && Array.isArray((x as { tables?: unknown }).tables);\n}\n\nasync function fetchSchemaFromApi(\n http: HttpClient,\n databaseId: string,\n candidates?: string[],\n): Promise<OnyxIntrospection> {\n const defaultCandidates = [\n `/schema/${encodeURIComponent(databaseId)}`,\n `/data/${encodeURIComponent(databaseId)}/schema`,\n `/meta/schema/${encodeURIComponent(databaseId)}`,\n `/schema?databaseId=${encodeURIComponent(databaseId)}`,\n `/meta/schema?databaseId=${encodeURIComponent(databaseId)}`,\n ];\n const paths = candidates && candidates.length ? candidates : defaultCandidates;\n\n let lastErr: unknown;\n for (const p of paths) {\n try {\n const res = await http.request<unknown>('GET', p);\n if (isIntrospection(res)) return res;\n } catch (e) {\n lastErr = e;\n }\n }\n const err = lastErr instanceof Error ? lastErr.message : String(lastErr ?? 'Unknown error');\n throw new Error(\n `Unable to fetch schema from API. Tried: ${paths.join(', ')}. Last error: ${err}`,\n );\n}\n\n/**\n * Programmatic codegen entry.\n * Returns the absolute paths of the generated files.\n */\nexport async function generateTypes(\n options?: GenerateOptions,\n): Promise<{ typesPath: string; jsonPath?: string }> {\n const path = await import('node:path');\n const opts = { ...DEFAULTS, ...(options ?? {}) };\n\n // Back-compat: allow legacy outDir to set typesOutDir if not provided\n const typesDir = opts.typesOutDir ?? opts.outDir ?? 'generated';\n\n let schema: OnyxIntrospection | null = null;\n\n if (opts.source === 'file' || (opts.source === 'auto' && opts.schemaPath)) {\n if (!opts.schemaPath) throw new Error('schemaPath is required when source=\"file\"');\n if (!opts.quiet)\n process.stderr.write(`[onyx-gen] reading schema from file: ${opts.schemaPath}\\n`);\n schema = await readFileJson<OnyxIntrospection>(opts.schemaPath);\n }\n\n if (!schema) {\n if (opts.source === 'file') throw new Error('Failed to read schema from file');\n const cfg = await resolveConfig({});\n const http = new HttpClient({\n baseUrl: cfg.baseUrl,\n apiKey: cfg.apiKey,\n apiSecret: cfg.apiSecret,\n fetchImpl: cfg.fetch,\n });\n if (!opts.quiet)\n process.stderr.write(`[onyx-gen] fetching schema from API for db ${cfg.databaseId}\\n`);\n schema = await fetchSchemaFromApi(http, cfg.databaseId, options?.apiPaths);\n }\n\n if (!isIntrospection(schema)) {\n throw new Error('Invalid schema: missing \"tables\" array.');\n }\n\n // Decide file-vs-dir for types\n const outIsFile =\n typeof opts.typesOutFile === 'string' &&\n (opts.typesOutFile.endsWith('.ts') ||\n opts.typesOutFile.endsWith('.mts') ||\n opts.typesOutFile.endsWith('.cts') ||\n opts.typesOutFile.endsWith('.d.ts') ||\n opts.typesOutFile.endsWith('.d.mts') ||\n opts.typesOutFile.endsWith('.d.cts'));\n\n let typesPath: string;\n let jsonBaseName: string; // used only when emitJson = true\n let typesDirAbs: string;\n\n if (outIsFile) {\n const typesOutFile = opts.typesOutFile as string;\n typesPath = path.resolve(process.cwd(), typesOutFile);\n typesDirAbs = path.dirname(typesPath);\n await ensureDir(typesDirAbs);\n jsonBaseName = path.basename(typesPath, path.extname(typesPath));\n } else {\n typesDirAbs = path.resolve(process.cwd(), typesDir);\n await ensureDir(typesDirAbs);\n typesPath = path.join(typesDirAbs, `${opts.outBaseName}.ts`);\n jsonBaseName = opts.outBaseName;\n }\n\n const types = emitTypes(schema, {\n schemaTypeName: opts.schemaTypeName,\n timestampMode: opts.timestampMode,\n modelNamePrefix: opts.prefix ?? '',\n optionalStrategy: opts.optional,\n });\n await writeFile(typesPath, `${types}\\n`, opts.overwrite);\n\n let jsonPath: string | undefined;\n if (opts.emitJson) {\n const jsonOutDirAbs = path.resolve(\n process.cwd(),\n opts.jsonOutDir ?? (outIsFile ? typesDirAbs : typesDirAbs),\n );\n await ensureDir(jsonOutDirAbs);\n jsonPath = path.join(jsonOutDirAbs, `${jsonBaseName}.json`);\n const jsonPretty = JSON.stringify(schema, null, 2);\n await writeFile(jsonPath, `${jsonPretty}\\n`, opts.overwrite);\n }\n\n if (!opts.quiet) {\n process.stderr.write(`[onyx-gen] wrote ${typesPath}\\n`);\n if (jsonPath) process.stderr.write(`[onyx-gen] wrote ${jsonPath}\\n`);\n }\n\n return { typesPath, jsonPath };\n}\n","#!/usr/bin/env node\n// filename: gen/cli/generate.ts\nimport process from 'node:process';\nimport { generateTypes, type GenerateOptions } from '../generate';\n\nfunction isTypesFilePath(p?: string): boolean {\n if (!p) return false;\n return (\n p.endsWith('.ts') ||\n p.endsWith('.mts') ||\n p.endsWith('.cts') ||\n p.endsWith('.d.ts') ||\n p.endsWith('.d.mts') ||\n p.endsWith('.d.cts')\n );\n}\n\nfunction parseArgs(argv: string[]): GenerateOptions {\n const opts: GenerateOptions = {};\n const next = (i: number) => argv[i + 1];\n\n for (let i = 2; i < argv.length; i++) {\n const a = argv[i];\n switch (a) {\n case '--out':\n case '--outDir': { // legacy alias\n const val = next(i);\n if (!val) throw new Error(`Missing value for ${a}`);\n if (isTypesFilePath(val)) opts.typesOutFile = val;\n else opts.typesOutDir = val;\n i++;\n break;\n }\n case '--types-out':\n case '--typesOut': {\n const val = next(i);\n if (!val) throw new Error(`Missing value for ${a}`);\n if (isTypesFilePath(val)) opts.typesOutFile = val;\n else opts.typesOutDir = val;\n i++;\n break;\n }\n case '--types-file':\n case '--typesFile': {\n const val = next(i);\n if (!val) throw new Error(`Missing value for ${a}`);\n opts.typesOutFile = val;\n i++;\n break;\n }\n case '--json-out':\n case '--jsonOut':\n opts.jsonOutDir = next(i);\n i++;\n break;\n case '--base':\n case '--baseName':\n opts.outBaseName = next(i);\n i++;\n break;\n case '--schema':\n opts.schemaPath = next(i);\n i++;\n break;\n case '--source': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'api' || v === 'file' || v === 'auto') opts.source = v as GenerateOptions['source'];\n else throw new Error(`Invalid --source: ${v}`);\n i++;\n break;\n }\n case '--timestamps': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'string' || v === 'date' || v === 'number') opts.timestampMode = v as GenerateOptions['timestampMode'];\n else throw new Error(`Invalid --timestamps: ${v}`);\n i++;\n break;\n }\n case '--name':\n case '--schemaTypeName':\n opts.schemaTypeName = next(i);\n i++;\n break;\n case '--prefix':\n opts.prefix = next(i);\n i++;\n break;\n case '--optional': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'non-null' || v === 'nonnull' || v === 'nonull') {\n opts.optional = 'non-null';\n } else if (v === 'nullable') {\n opts.optional = 'nullable';\n } else if (v === 'none') {\n opts.optional = 'none';\n } else {\n throw new Error(`Invalid --optional: ${v} (use non-null|nullable|none)`);\n }\n i++;\n break;\n }\n case '--emit-json':\n opts.emitJson = true;\n break;\n case '--no-emit-json':\n opts.emitJson = false;\n break;\n case '--api-path': {\n const v = next(i);\n if (!v || !v.startsWith('/')) throw new Error(`--api-path must start with \"/\": ${v}`);\n if (!opts.apiPaths) opts.apiPaths = [];\n opts.apiPaths.push(v);\n i++;\n break;\n }\n case '--overwrite':\n opts.overwrite = true;\n break;\n case '--no-overwrite':\n opts.overwrite = false;\n break;\n case '-q':\n case '--quiet':\n opts.quiet = true;\n break;\n case '-h':\n case '--help':\n printHelp();\n process.exit(0);\n break;\n default:\n if (a.startsWith('-')) throw new Error(`Unknown option: ${a}`);\n break;\n }\n }\n return opts;\n}\n\nfunction printHelp(): void {\n process.stdout.write(`onyx-gen — Generate Onyx schema TypeScript types\n\nUsage:\n onyx-gen [options]\n\nOutput selection:\n --out <path> If <path> ends with \".ts\", writes exactly to that file.\n Otherwise treats <path> as a directory.\n --types-out <dir|file> Same as --out (file-or-dir).\n --types-file <file.ts> Explicit file output.\n --base, --baseName <name> Base filename (without ext) when writing to a directory (default: onyx.schema)\n --json-out <dir> JSON output directory (used only with --emit-json)\n\nSource selection:\n --source <auto|api|file> Where to get schema (default: auto)\n --schema <path> Path to schema JSON when --source=file (or to force local)\n\nType emission:\n --timestamps <string|date|number> Timestamp representation in types (default: date)\n --name, --schemaTypeName <T> Exported schema type name (default: OnyxSchema)\n --prefix <Prefix> Prefix to prepend to generated model names (default: none)\n --optional <non-null|nullable|none>\n Where to add '?' optional props (default: non-null)\n\nOther:\n --emit-json / --no-emit-json Emit schema JSON copy (default: no-emit-json)\n --api-path <path> Candidate API path to fetch schema; can be repeated\n --overwrite / --no-overwrite Overwrite existing files (default: overwrite)\n -q, --quiet Suppress logs\n -h, --help Show this help\n\nNotes:\n • Env/config for --source=api uses the same resolver as onyx.init()\n (env vars, ./onyx-database.json, ~/.onyx/onyx-database-<id>.json, etc.).\n`);\n}\n\n(async () => {\n try {\n const opts = parseArgs(process.argv);\n await generateTypes(opts);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n process.stderr.write(`onyx-gen: ${msg}\\n`);\n process.exit(1);\n }\n})();\n"]}
1
+ {"version":3,"sources":["../../../src/config/defaults.ts","../../../src/errors/config-error.ts","../../../src/config/chain.ts","../../../src/errors/http-error.ts","../../../src/core/http.ts","../../../gen/emit.ts","../../../gen/generate.ts","../../../gen/cli/generate.ts"],"names":["DEFAULTS","process","isTypesFilePath"],"mappings":";;;;;;;;;;AACO,IAAM,gBAAA,GAAmB,sBAAA;AAEzB,IAAM,kBAAkB,CAAC,CAAA,KAAsB,CAAA,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;;;ACFnE,IAAM,eAAA,GAAN,cAA8B,KAAA,CAAM;AAAA,EAChC,IAAA,GAAO,iBAAA;AAAA,EAChB,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AAAA,EACf;AACF,CAAA;;;ACQA,IAAM,WAAY,UAAA,CAOf,OAAA;AACH,IAAM,MAAA,GAAS,CAAC,CAAC,QAAA,EAAU,QAAA,EAAU,IAAA;AAGrC,IAAM,GAAA,GAAM,IAAI,IAAA,KAA0B;AACxC,EAAA,IAAI,QAAA,EAAU,GAAA,EAAK,UAAA,IAAc,MAAA,EAAQ;AACvC,IAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAuB;AAClC,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA;AAClC,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,MACzB,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,OAAO,CAAC,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AACA,IAAA,QAAA,CAAS,MAAA,EAAQ,QAAQ,CAAA,cAAA,EAAiB,IAAA,CAAK,IAAI,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC;AAAA,CAAI,CAAA;AAAA,EACvE;AACF,CAAA;AAEA,SAAS,cAAgC,GAAA,EAAyC;AAChF,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACxC,IAAA,IAAI,CAAA,KAAM,MAAA,EAAW,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,GAAA;AACT;AAGA,eAAe,WAAc,IAAA,EAA0B;AACrD,EAAA,OAAO;AAAA;AAAA,IAA0B;AAAA,GAAA;AACnC;AAEA,SAAS,QAAQ,QAAA,EAAwC;AACvD,EAAA,IAAI,CAAC,QAAA,EAAU,GAAA,EAAK,OAAO,EAAC;AAC5B,EAAA,MAAM,MAAM,QAAA,CAAS,GAAA;AACrB,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,KAAuC;AACtD,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,MAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,QAAA,MAAM,UAAU,CAAA,CAAE,OAAA,CAAQ,UAAA,EAAY,EAAE,EAAE,IAAA,EAAK;AAC/C,QAAA,IAAI,OAAA,KAAY,IAAI,OAAO,OAAA;AAAA,MAC7B;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAK,kBAAkB,CAAA;AACrC,EAAA,IAAI,QAAA,IAAY,KAAA,KAAU,QAAA,EAAU,OAAO,EAAC;AAC5C,EAAA,MAAM,MAAM,aAAA,CAA0B;AAAA,IACpC,OAAA,EAAS,KAAK,wBAAwB,CAAA;AAAA,IACtC,UAAA,EAAY,KAAA;AAAA,IACZ,MAAA,EAAQ,KAAK,uBAAuB,CAAA;AAAA,IACpC,SAAA,EAAW,KAAK,0BAA0B;AAAA,GAC3C,CAAA;AACD,EAAA,IAAI,OAAO,IAAA,CAAK,GAAG,EAAE,MAAA,KAAW,CAAA,SAAU,EAAC;AAC3C,EAAA,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AACrB,EAAA,OAAO,GAAA;AACT;AAEA,eAAe,gBAAgB,UAAA,EAAmD;AAChF,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,MAAM,EAAA,GAAK,MAAM,UAAA,CAA8C,kBAAkB,CAAA;AACjF,EAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAuC,WAAW,CAAA;AACrE,EAAA,MAAM,GAAA,GAAM,QAAA,EAAU,GAAA,IAAM,IAAK,GAAA;AAEjC,EAAA,MAAM,OAAA,GAAU,OAAO,CAAA,KAA4C;AACjE,IAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,QAAA,CAAS,GAAG,MAAM,CAAA;AACvC,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAC5C,IAAA,MAAM,IAAA,GAAO,aAAA,CAA0B,IAAA,CAAK,KAAA,CAAM,SAAS,CAAwB,CAAA;AACnF,IAAA,GAAA,CAAI,eAAA,EAAiB,CAAA,EAAG,QAAA,EAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AACvC,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,WAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,CAAA,cAAA,EAAiB,UAAU,CAAA,KAAA,CAAO,CAAA;AACrE,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,QAAQ,QAAQ,CAAA;AAAA,IAC/B,CAAA,CAAA,MAAQ;AACN,MAAA,GAAA,CAAI,2BAA2B,QAAQ,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,oBAAoB,CAAA;AACvD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,QAAQ,QAAQ,CAAA;AAAA,EAC/B,CAAA,CAAA,MAAQ;AACN,IAAA,GAAA,CAAI,2BAA2B,QAAQ,CAAA;AACvC,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAEA,eAAe,gBAAgB,UAAA,EAAmD;AAChF,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,MAAM,EAAA,GAAK,MAAM,UAAA,CAA8C,kBAAkB,CAAA;AACjF,EAAA,MAAM,EAAA,GAAK,MAAM,UAAA,CAAqC,SAAS,CAAA;AAC/D,EAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAuC,WAAW,CAAA;AAErE,EAAA,MAAM,IAAA,GAAO,GAAG,OAAA,EAAQ;AACxB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAEnC,EAAA,MAAM,UAAA,GAAa,OAAO,CAAA,KAAgC;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,CAAG,OAAO,CAAC,CAAA;AACjB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,OAAO,CAAA,KAA4C;AACrE,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,QAAA,CAAS,GAAG,MAAM,CAAA;AACvC,MAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAA,GAAO,aAAA,CAA0B,IAAA,CAAK,KAAA,CAAM,SAAS,CAAwB,CAAA;AACnF,MAAA,GAAA,CAAI,oBAAA,EAAsB,CAAA,EAAG,QAAA,EAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AAC5C,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,CAAA,EAAY;AACnB,MAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,eAAA,EAAkB,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAAA,IACzD;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,QAAA,GAAW,CAAA,EAAG,GAAG,CAAA,eAAA,EAAkB,UAAU,CAAA,KAAA,CAAA;AACnD,IAAA,IAAI,MAAM,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,YAAY,QAAQ,CAAA;AAC3D,IAAA,GAAA,CAAI,wBAAwB,QAAQ,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,YAAA,GAAe,GAAG,GAAG,CAAA,mBAAA,CAAA;AAC3B,EAAA,IAAI,MAAM,UAAA,CAAW,YAAY,CAAA,EAAG,OAAO,YAAY,YAAY,CAAA;AACnE,EAAA,GAAA,CAAI,8BAA8B,YAAY,CAAA;AAE9C,EAAA,MAAM,aAAA,GAAgB,GAAG,IAAI,CAAA,mBAAA,CAAA;AAC7B,EAAA,IAAI,MAAM,UAAA,CAAW,aAAa,CAAA,EAAG,OAAO,YAAY,aAAa,CAAA;AACrE,EAAA,GAAA,CAAI,0BAA0B,aAAa,CAAA;AAE3C,EAAA,IAAI,CAAE,MAAM,UAAA,CAAW,GAAG,CAAA,EAAI;AAC5B,IAAA,GAAA,CAAI,2BAA2B,GAAG,CAAA;AAClC,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAA,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,UAAA,CAAW,gBAAgB,CAAA,IAAK,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AACvF,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACjC,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,eAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,oCAAoC,GAAG,CAAA;AAC3C,EAAA,OAAO,EAAC;AACV;AAEA,eAAe,eAAe,CAAA,EAAyC;AACrE,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,MAAM,EAAA,GAAK,MAAM,UAAA,CAA8C,kBAAkB,CAAA;AACjF,EAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAuC,WAAW,CAAA;AACrE,EAAA,MAAM,GAAA,GAAM,QAAA,EAAU,GAAA,IAAM,IAAK,GAAA;AACjC,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,CAAW,CAAC,IAAI,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAA;AAC7D,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,QAAA,CAAS,UAAU,MAAM,CAAA;AAC9C,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAC5C,IAAA,MAAM,IAAA,GAAO,aAAA,CAA0B,IAAA,CAAK,KAAA,CAAM,SAAS,CAAwB,CAAA;AACnF,IAAA,GAAA,CAAI,cAAA,EAAgB,QAAA,EAAU,QAAA,EAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AAC7C,IAAA,OAAO,IAAA;AAAA,EACT,SAAS,CAAA,EAAY;AACnB,IAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,eAAA,EAAkB,QAAQ,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAAA,EAChE;AACF;AAUA,eAAsB,cAAc,KAAA,EAA6C;AAC/E,EAAA,MAAM,UAAA,GAAa,UAAU,GAAA,EAAK,gBAAA;AAClC,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,KAAA,EAAO,UAAU,CAAA;AAErC,EAAA,IAAI,UAA+B,EAAC;AACpC,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAA,GAAU,MAAM,eAAe,UAAU,CAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,QAAA,GAAW,KAAA,EAAO,UAAA,IAAc,GAAA,CAAI,cAAc,OAAA,CAAQ,UAAA;AAEhE,EAAA,IAAI,WAAW,CAAC,EAAE,OAAO,UAAA,IAAc,GAAA,CAAI,cAAc,OAAA,CAAQ,UAAA,CAAA;AACjE,EAAA,IAAI,aAAa,CAAC,EAAE,OAAO,MAAA,IAAU,GAAA,CAAI,UAAU,OAAA,CAAQ,MAAA,CAAA;AAC3D,EAAA,IAAI,gBAAgB,CAAC,EAAE,OAAO,SAAA,IAAa,GAAA,CAAI,aAAa,OAAA,CAAQ,SAAA,CAAA;AAEpE,EAAA,IAAI,UAA+B,EAAC;AACpC,EAAA,IAAI,EAAE,QAAA,IAAY,UAAA,IAAc,aAAA,CAAA,EAAgB;AAC9C,IAAA,OAAA,GAAU,MAAM,gBAAgB,QAAQ,CAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,YAAY,QAAA,GAAW,IAAA;AACnC,IAAA,IAAI,OAAA,CAAQ,QAAQ,UAAA,GAAa,IAAA;AACjC,IAAA,IAAI,OAAA,CAAQ,WAAW,aAAA,GAAgB,IAAA;AAAA,EACzC;AAEA,EAAA,IAAI,OAA4B,EAAC;AACjC,EAAA,IAAI,EAAE,QAAA,IAAY,UAAA,IAAc,aAAA,CAAA,EAAgB;AAC9C,IAAA,IAAA,GAAO,MAAM,gBAAgB,QAAQ,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,MAAA,GAA8B;AAAA,IAClC,OAAA,EAAS,gBAAA;AAAA,IACT,GAAG,cAA0B,IAAI,CAAA;AAAA,IACjC,GAAG,cAA0B,OAAO,CAAA;AAAA,IACpC,GAAG,cAA0B,OAAO,CAAA;AAAA,IACpC,GAAG,cAA0B,GAAG,CAAA;AAAA,IAChC,GAAG,cAA0B,KAAK;AAAA,GACpC;AAEA,EAAA,GAAA,CAAI,wBAAA,EAA0B,IAAA,CAAK,MAAM,CAAC,CAAA;AAE1C,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,MAAA,CAAO,OAAA,IAAW,gBAAgB,CAAA;AAClE,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,EAAA;AACxC,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,EAAA;AAChC,EAAA,MAAM,SAAA,GAAY,OAAO,SAAA,IAAa,EAAA;AACtC,EAAA,MAAM,SAAU,UAAA,CAAqC,KAAA;AACrD,EAAA,MAAM,SAAA,GACJ,MAAA,CAAO,KAAA,KACN,OAAO,MAAA,KAAW,UAAA,GACf,CAAC,CAAA,EAAG,CAAA,KAAM,MAAA,CAAO,CAAA,EAAG,CAAC,IACrB,YAAY;AACV,IAAA,MAAM,IAAI,gBAAgB,8CAA8C,CAAA;AAAA,EAC1E,CAAA,CAAA;AAEN,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,CAAC,UAAA,EAAY,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA;AAC1C,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AAClC,EAAA,IAAI,CAAC,SAAA,EAAW,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA;AACxC,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,GAAA,CAAI,4BAAA,EAA8B,IAAA,CAAK,MAAM,CAAC,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,KAAA;AAAA,MACA,UAAA,IAAc,sBAAA;AAAA,MACd,GAAI,MAAA,GACA;AAAA,QACE,mCAAA;AAAA,QACA,sBAAA;AAAA,QACA,yCAAA;AAAA,QACA,4BAAA;AAAA,QACA;AAAA,UAEF,EAAC;AAAA,MACL;AAAA,KACF;AACA,IAAA,MAAM,IAAI,eAAA;AAAA,MACR,CAAA,yBAAA,EAA4B,QAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,WAAA,EAAc,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAChF;AAAA,EACF;AAEA,EAAA,MAAM,WAA2B,EAAE,OAAA,EAAS,YAAY,MAAA,EAAQ,SAAA,EAAW,OAAO,SAAA,EAAU;AAC5F,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,UAAA,EAAY,KAAA,EAAO,UAAA,GACf,iBAAA,GACA,IAAI,UAAA,GACJ,KAAA,GACA,OAAA,CAAQ,UAAA,GACR,yBACA,OAAA,CAAQ,UAAA,GACR,cAAA,GACA,IAAA,CAAK,aACL,cAAA,GACA,SAAA;AAAA,IACJ,MAAA,EAAQ,KAAA,EAAO,MAAA,GACX,iBAAA,GACA,IAAI,MAAA,GACJ,KAAA,GACA,OAAA,CAAQ,MAAA,GACR,yBACA,OAAA,CAAQ,MAAA,GACR,cAAA,GACA,IAAA,CAAK,SACL,cAAA,GACA,SAAA;AAAA,IACJ,SAAA,EAAW,KAAA,EAAO,SAAA,GACd,iBAAA,GACA,IAAI,SAAA,GACJ,KAAA,GACA,OAAA,CAAQ,SAAA,GACR,yBACA,OAAA,CAAQ,SAAA,GACR,cAAA,GACA,IAAA,CAAK,YACL,cAAA,GACA;AAAA,GACN;AACA,EAAA,GAAA,CAAI,oBAAA,EAAsB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAChD,EAAA,GAAA,CAAI,WAAA,EAAa,IAAA,CAAK,QAAQ,CAAC,CAAA;AAC/B,EAAA,OAAO,QAAA;AACT;AAGA,SAAS,KAAuB,GAAA,EAAmC;AACjE,EAAA,IAAI,CAAC,KAAK,OAAO,GAAA;AACjB,EAAA,MAAM,KAAA,GAAQ,EAAE,GAAI,GAAA,EAAgC;AACpD,EAAA,IAAI,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,QAAgB,MAAA,GAAS,KAAA;AACrD,EAAA,IAAI,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,QAAgB,SAAA,GAAY,KAAA;AAC3D,EAAA,OAAO,KAAA;AACT;;;ACtUO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EAC9B,IAAA,GAAO,eAAA;AAAA,EACP,MAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EAET,WAAA,CAAY,OAAA,EAAiB,MAAA,EAAgB,UAAA,EAAoB,MAAe,OAAA,EAAiB;AAC/F,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK;AAAA,KACd;AAAA,EACF;AAAA,EAEA,CAAC,MAAA,CAAO,GAAA,CAAI,4BAA4B,CAAC,CAAA,GAA6B;AACpE,IAAA,OAAO,KAAK,MAAA,EAAO;AAAA,EACrB;AACF,CAAA;;;AC1BO,SAAS,kBAAkB,GAAA,EAAsB;AACtD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,0CAAA,EAA4C,UAAU,CAAA;AAChF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB;AACF;AAYO,IAAM,aAAN,MAAiB;AAAA,EACL,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EAEjB,YAAY,IAAA,EAAyB;AACnC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,KAAK,OAAA,CAAQ,IAAA,OAAW,EAAA,EAAI;AAC/C,MAAA,MAAM,IAAI,gBAAgB,qBAAqB,CAAA;AAAA,IACjD;AACA,IAAA,IAAI;AAEF,MAAA,IAAI,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,IACtB,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,gBAAgB,8CAA8C,CAAA;AAAA,IAC1E;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC9C,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AACtB,IAAA,MAAM,SAAU,UAAA,CAAqC,KAAA;AACrD,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AAAA,IACxB,CAAA,MAAA,IAAW,OAAO,MAAA,KAAW,UAAA,EAAY;AACvC,MAAA,IAAA,CAAK,YAAY,CAAC,GAAA,EAAK,IAAA,KAAS,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IAClD,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,IAC3E;AACA,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,KAAK,cAAc,CAAA;AACrD,IAAA,MAAM,QAAA,GACH,UAAA,CAA0E,OAAA,EACvE,GAAA,EAAK,UAAA,KAAe,MAAA;AAC1B,IAAA,IAAA,CAAK,qBAAA,GAAwB,CAAC,CAAC,IAAA,CAAK,qBAAA,IAAyB,QAAA;AAC7D,IAAA,IAAA,CAAK,sBAAA,GAAyB,CAAC,CAAC,IAAA,CAAK,sBAAA,IAA0B,QAAA;AAAA,EACjE;AAAA,EAEA,QAAQ,KAAA,EAAwD;AAC9D,IAAA,MAAM,MAAA,GAAS,EAAE,GAAI,KAAA,IAAS,EAAC,EAAG;AAClC,IAAA,OAAO,OAAO,YAAY,CAAA;AAC1B,IAAA,OAAO,OAAO,eAAe,CAAA;AAC7B,IAAA,OAAO;AAAA,MACL,cAAc,IAAA,CAAK,MAAA;AAAA,MACnB,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACtB,QAAA,EAAU,kBAAA;AAAA,MACV,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG,IAAA,CAAK,QAAA;AAAA,MACR,GAAG;AAAA,KACL;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,CACJ,MAAA,EACA,IAAA,EACA,MACA,YAAA,EACY;AACZ,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,gBAAgB,wBAAwB,CAAA;AAAA,IACpD;AACA,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,GAAG,IAAI,CAAA,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,CAAQ;AAAA,MAC3B,GAAI,MAAA,KAAW,QAAA,GAAW,EAAE,MAAA,EAAQ,uBAAA,KAA4B,EAAC;AAAA,MACjE,GAAI,gBAAgB;AAAC,KACtB,CAAA;AACD,IAAA,IAAI,IAAA,IAAQ,IAAA,EAAM,OAAO,OAAA,CAAQ,cAAc,CAAA;AAC/C,IAAA,IAAI,KAAK,qBAAA,EAAuB;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAC9B,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,MAAM,UAAU,OAAO,IAAA,KAAS,WAAW,IAAA,GAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AACrE,QAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,MACrB;AACA,MAAA,MAAM,SAAA,GAAY,EAAE,GAAG,OAAA,EAAS,iBAAiB,YAAA,EAAa;AAC9D,MAAA,OAAA,CAAQ,GAAA,CAAI,YAAY,SAAS,CAAA;AAAA,IACnC;AACA,IAAA,MAAM,OAAA,GACJ,IAAA,IAAQ,IAAA,GAAO,MAAA,GAAY,OAAO,SAAS,QAAA,GAAW,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAClF,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,MAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAEA,IAAA,MAAM,OAAA,GACJ,KAAK,QAAA,CAAS,SAAS,KAAK,CAAC,8BAAA,CAA+B,KAAK,IAAI,CAAA;AACvE,IAAA,MAAM,QAAA,GAAW,WAAW,KAAA,IAAS,OAAA;AACrC,IAAA,MAAM,WAAA,GAAc,WAAW,CAAA,GAAI,CAAA;AACnC,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,WAAA,EAAa,OAAA,EAAA,EAAW;AACtD,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAAU,KAAK,IAAI,CAAA;AAC1C,QAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AACvD,QAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA,EAAK;AAC3B,QAAA,IAAI,KAAK,sBAAA,EAAwB;AAC/B,UAAA,MAAM,UAAA,GAAa,GAAG,GAAA,CAAI,MAAM,IAAI,GAAA,CAAI,UAAU,GAAG,IAAA,EAAK;AAC1D,UAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,UAAA,IAAI,GAAA,CAAI,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AACzB,YAAA,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,UACjB;AAAA,QACF;AACA,QAAA,MAAM,MAAA,GACJ,GAAA,CAAI,IAAA,EAAK,CAAE,SAAS,CAAA,KACnB,WAAA,CAAY,QAAA,CAAS,kBAAkB,CAAA,IAAK,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AACvE,QAAA,MAAM,IAAA,GAAO,MAAA,GAAS,iBAAA,CAAkB,GAAG,CAAA,GAAI,GAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,UAAA,MAAM,GAAA,GACJ,OAAO,IAAA,KAAS,QAAA,IAChB,SAAS,IAAA,IACT,OAAA,IAAW,IAAA,IACX,OAAQ,IAAA,CAA2C,KAAA,EAAO,YAAY,QAAA,GAClE,MAAA,CAAQ,IAAA,CAAyC,KAAA,CAAM,OAAO,CAAA,GAC9D,GAAG,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,UAAU,CAAA,CAAA;AACrC,UAAA,IAAI,YAAY,GAAA,CAAI,MAAA,IAAU,GAAA,IAAO,OAAA,GAAU,IAAI,WAAA,EAAa;AAC9D,YAAA,MAAM,IAAI,QAAQ,CAAC,CAAA,KAAM,WAAW,CAAA,EAAG,GAAA,GAAM,CAAA,IAAK,OAAO,CAAC,CAAA;AAC1D,YAAA;AAAA,UACF;AACA,UAAA,MAAM,IAAI,cAAc,GAAA,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,UAAA,EAAY,MAAM,GAAG,CAAA;AAAA,QACpE;AACA,QAAA,OAAO,IAAA;AAAA,MACT,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,YACJ,QAAA,KAAa,EAAE,GAAA,YAAe,aAAA,CAAA,IAAkB,IAAI,MAAA,IAAU,GAAA,CAAA;AAChE,QAAA,IAAI,OAAA,GAAU,CAAA,GAAI,WAAA,IAAe,SAAA,EAAW;AAC1C,UAAA,MAAM,IAAI,QAAQ,CAAC,CAAA,KAAM,WAAW,CAAA,EAAG,GAAA,GAAM,CAAA,IAAK,OAAO,CAAC,CAAA;AAC1D,UAAA;AAAA,QACF;AACA,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AACF,CAAA;;;AClHA,IAAM,QAAA,GAAkC;AAAA,EACtC,cAAA,EAAgB,YAAA;AAAA,EAChB,aAAA,EAAe,MAAA;AAAA,EACf,eAAA,EAAiB,EAAA;AAAA,EACjB,gBAAA,EAAkB;AACpB,CAAA;AAEA,SAAS,kBAAkB,IAAA,EAAuB;AAChD,EAAA,OAAO,4BAAA,CAA6B,KAAK,IAAI,CAAA;AAC/C;AAEA,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,MAAM,UAAU,MAAA,CAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,kBAAkB,GAAG,CAAA;AACzD,EAAA,MAAM,EAAA,GAAK,OAAA,CACR,IAAA,EAAK,CACL,KAAA,CAAM,KAAK,CAAA,CACX,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CACjD,IAAA,CAAK,EAAE,CAAA;AACV,EAAA,OAAO,EAAA,CAAG,MAAA,KAAW,CAAA,GAAI,OAAA,GAAW,QAAA,CAAS,KAAK,EAAE,CAAA,GAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAA;AACrE;AAEA,SAAS,SAAA,CACP,UACA,aAAA,EACQ;AACR,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,aAAA,KAAkB,MAAA,GACrB,MAAA,GACA,aAAA,KAAkB,WAClB,QAAA,GACA,QAAA;AAAA,IACN,KAAK,cAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEA,SAAS,YAAA,CACP,IAAA,EACA,aAAA,EACA,gBAAA,EACQ;AACR,EAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA,GAAI,KAAK,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAG/E,EAAA,MAAM,YAAA,GACJ,qBAAqB,UAAA,GACjB,CAAC,KAAK,UAAA,GACN,gBAAA,KAAqB,UAAA,GACrB,IAAA,CAAK,UAAA,GACL,KAAA;AAEN,EAAA,MAAM,CAAA,GAAI,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,aAAa,CAAA;AAC5C,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,UAAA,GAAa,SAAA,GAAY,EAAA;AAEpD,EAAA,OAAO,CAAA,EAAA,EAAK,GAAG,CAAA,EAAG,YAAA,GAAe,MAAM,EAAE,CAAA,EAAA,EAAK,CAAC,CAAA,EAAG,aAAa,CAAA,CAAA,CAAA;AACjE;AAEO,SAAS,SAAA,CAAU,QAA2B,OAAA,EAA+B;AAClF,EAAA,MAAM,OAAO,EAAE,GAAG,UAAU,GAAI,OAAA,IAAW,EAAC,EAAG;AAG/C,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AACrC,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAwB;AAC3C,IAAA,MAAM,IAAA,GAAO,aAAa,GAAG,CAAA;AAC7B,IAAA,IAAI,GAAA,GAAM,IAAA;AACV,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,OAAO,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,EAAG;AAC5B,MAAA,GAAA,GAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAA,EAAG,CAAA,CAAA;AAAA,IACtB;AACA,IAAA,YAAA,CAAa,IAAI,GAAG,CAAA;AACpB,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,KAAK,CAAA,2CAAA,CAA6C,CAAA;AACxD,EAAA,KAAA,CAAM,KAAK,CAAA,gBAAA,EAAA,iBAAmB,IAAI,MAAK,EAAE,WAAA,EAAa,CAAA,CAAE,CAAA;AACxD,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,EAAQ;AAC7B,IAAA,MAAM,QAAA,GAAW,GAAG,IAAA,CAAK,eAAe,GAAG,YAAA,CAAa,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA;AAC/D,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,iBAAA,EAAoB,QAAQ,CAAA,EAAA,CAAI,CAAA;AAC3C,IAAA,KAAA,MAAW,CAAA,IAAK,EAAE,UAAA,EAAY;AAC5B,MAAA,KAAA,CAAM,KAAK,YAAA,CAAa,CAAA,EAAG,KAAK,aAAA,EAAe,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,IACvE;AACA,IAAA,KAAA,CAAM,KAAK,uBAAuB,CAAA;AAClC,IAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,IAAA,CAAK,cAAc,CAAA,IAAA,CAAM,CAAA;AACnD,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,EAAQ;AAC7B,IAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,CAAA,CAAE,IAAI,CAAA,GAAI,EAAE,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,IAAI,CAAA;AACtE,IAAA,MAAM,SAAA,GAAY,GAAG,IAAA,CAAK,eAAe,GAAG,YAAA,CAAa,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA;AAChE,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EACtC;AACA,EAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,IAAI,IAAA,CAAK,mBAAmB,QAAA,EAAU;AACpC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,qBAAA,EAAwB,IAAA,CAAK,cAAc,CAAA,CAAA,CAAG,CAAA;AAAA,EAC3D;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,4BAAA,EAA+B,IAAA,CAAK,cAAc,CAAA,CAAA,CAAG,CAAA;AAChE,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,KAAA,CAAM,KAAK,sBAAsB,CAAA;AACjC,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,EAAQ;AAC7B,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,CAAA,CAAE,IAAI,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,IAAI,CAAA;AACrC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,OAAO,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACzC;AACA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;ACnGA,IAAM,mBAAA,GAAsB,oBAAA;AAC5B,IAAM,iBAAA,GAAoB,iBAAA;AAE1B,IAAMA,SAAAA,GAWF;AAAA,EACF,MAAA,EAAQ,MAAA;AAAA,EACR,WAAA,EAAa,aAAA;AAAA,EACb,QAAA,EAAU,KAAA;AAAA,EACV,SAAA,EAAW,IAAA;AAAA,EACX,aAAA,EAAe,MAAA;AAAA,EACf,cAAA,EAAgB,YAAA;AAAA,EAChB,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAA;AAEA,SAAS,QAAQ,GAAA,EAAmC;AAClD,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,EAAA,OAAO,MAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,GAAA,GAAM,CAAC,GAAG,CAAA;AACxC;AAEA,SAAS,gBAAgB,CAAA,EAAqB;AAC5C,EAAA,IAAI,CAAC,GAAG,OAAO,KAAA;AACf,EAAA,OACE,CAAA,CAAE,SAAS,KAAK,CAAA,IAChB,EAAE,QAAA,CAAS,MAAM,CAAA,IACjB,CAAA,CAAE,QAAA,CAAS,MAAM,KACjB,CAAA,CAAE,QAAA,CAAS,OAAO,CAAA,IAClB,CAAA,CAAE,SAAS,QAAQ,CAAA,IACnB,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAEvB;AAEA,eAAe,aAA0B,IAAA,EAA0B;AACjE,EAAA,MAAM,EAAA,GAAK,MAAM,OAAO,aAAkB,CAAA;AAC1C,EAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,QAAA,CAAS,MAAM,MAAM,CAAA;AAC1C,EAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AACvB;AAEA,eAAe,UAAU,GAAA,EAA4B;AACnD,EAAA,MAAM,EAAA,GAAK,MAAM,OAAO,aAAkB,CAAA;AAC1C,EAAA,MAAM,GAAG,KAAA,CAAM,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC;AAEA,eAAe,SAAA,CAAU,IAAA,EAAc,IAAA,EAAc,SAAA,EAAmC;AACtF,EAAA,MAAM,EAAA,GAAK,MAAM,OAAO,aAAkB,CAAA;AAC1C,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,CAAG,OAAO,IAAI,CAAA;AACpB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,IAAI,CAAA,CAAE,CAAA;AAAA,IAChE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,MAAM,EAAA,CAAG,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AACvC;AAEA,SAAS,gBAAgB,CAAA,EAAoC;AAC3D,EAAA,OAAO,CAAC,CAAC,CAAA,IAAK,OAAO,MAAM,QAAA,IAAY,KAAA,CAAM,OAAA,CAAS,CAAA,CAA2B,MAAM,CAAA;AACzF;AAEA,eAAe,kBAAA,CACb,IAAA,EACA,UAAA,EACA,UAAA,EAC4B;AAC5B,EAAA,MAAM,iBAAA,GAAoB;AAAA,IACxB,CAAA,QAAA,EAAW,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,IACzC,CAAA,MAAA,EAAS,kBAAA,CAAmB,UAAU,CAAC,CAAA,OAAA,CAAA;AAAA,IACvC,CAAA,aAAA,EAAgB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,IAC9C,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,IACpD,CAAA,wBAAA,EAA2B,kBAAA,CAAmB,UAAU,CAAC,CAAA;AAAA,GAC3D;AACA,EAAA,MAAM,KAAA,GAAQ,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,UAAA,GAAa,iBAAA;AAE7D,EAAA,IAAI,OAAA;AACJ,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAiB,OAAO,CAAC,CAAA;AAChD,MAAA,IAAI,eAAA,CAAgB,GAAG,CAAA,EAAG,OAAO,GAAA;AAAA,IACnC,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,GAAU,CAAA;AAAA,IACZ;AAAA,EACF;AACA,EAAA,MAAM,MAAM,OAAA,YAAmB,KAAA,GAAQ,QAAQ,OAAA,GAAU,MAAA,CAAO,WAAW,eAAe,CAAA;AAC1F,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,2CAA2C,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,iBAAiB,GAAG,CAAA;AAAA,GACjF;AACF;AAMA,eAAsB,cACpB,OAAA,EAMC;AACD,EAAA,MAAM,IAAA,GAAO,MAAM,OAAO,MAAW,CAAA;AACrC,EAAA,MAAM,OAAO,EAAE,GAAGA,WAAU,GAAI,OAAA,IAAW,EAAC,EAAG;AAE/C,EAAA,MAAM,qBACJ,IAAA,CAAK,UAAA,KAAe,IAAA,CAAK,MAAA,KAAW,SAAS,mBAAA,GAAsB,MAAA,CAAA;AAErE,EAAA,IAAI,MAAA,GAAmC,IAAA;AAEvC,EAAA,IAAI,KAAK,MAAA,KAAW,MAAA,IAAW,IAAA,CAAK,MAAA,KAAW,UAAU,kBAAA,EAAqB;AAC5E,IAAA,IAAI,CAAC,kBAAA,EAAoB,MAAM,IAAI,MAAM,2CAA2C,CAAA;AACpF,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA;AACR,MAAAC,wBAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,qCAAA,EAAwC,kBAAkB;AAAA,CAAI,CAAA;AACrF,IAAA,MAAA,GAAS,MAAM,aAAgC,kBAAkB,CAAA;AAAA,EACnE;AAEA,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,IAAI,KAAK,MAAA,KAAW,MAAA,EAAQ,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAC7E,IAAA,MAAM,GAAA,GAAM,MAAM,aAAA,CAAc,EAAE,CAAA;AAClC,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW;AAAA,MAC1B,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,WAAW,GAAA,CAAI;AAAA,KAChB,CAAA;AACD,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA;AACR,MAAAA,wBAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,2CAAA,EAA8C,GAAA,CAAI,UAAU;AAAA,CAAI,CAAA;AACvF,IAAA,MAAA,GAAS,MAAM,kBAAA,CAAmB,IAAA,EAAM,GAAA,CAAI,UAAA,EAAY,SAAS,QAAQ,CAAA;AAAA,EAC3E;AAEA,EAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,GAAG,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA;AAAA,IAC5B,GAAG,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA;AAAA,IAC3B,GAAG,OAAA,CAAQ,IAAA,CAAK,MAAM;AAAA,GACxB,CACG,IAAI,CAAC,CAAA,KAAM,EAAE,IAAA,EAAM,CAAA,CACnB,MAAA,CAAO,OAAO,CAAA;AAEjB,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,UAAA,CAAW,KAAK,iBAAiB,CAAA;AAAA,EACnC;AAGA,EAAA,MAAM,OAAA,GAA0B,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAW;AACzD,IAAA,MAAM,SAAA,GAAY,gBAAgB,MAAM,CAAA;AACxC,IAAA,MAAM,SAAA,GAAY,YACd,IAAA,CAAK,OAAA,CAAQA,yBAAQ,GAAA,EAAI,EAAG,MAAM,CAAA,GAClC,IAAA,CAAK,KAAK,IAAA,CAAK,OAAA,CAAQA,yBAAQ,GAAA,EAAI,EAAG,MAAM,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,GAAA,CAAK,CAAA;AAC3E,IAAA,MAAM,WAAA,GAAc,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQA,wBAAA,CAAQ,GAAA,EAAI,EAAG,MAAM,CAAA;AAC5F,IAAA,MAAM,YAAA,GAAe,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,KAAK,OAAA,CAAQ,SAAS,CAAC,CAAA,GAAI,IAAA,CAAK,WAAA;AAC1F,IAAA,OAAO,EAAE,SAAA,EAAW,WAAA,EAAa,YAAA,EAAa;AAAA,EAChD,CAAC,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ,UAAU,MAAA,EAAQ;AAAA,IAC9B,gBAAgB,IAAA,CAAK,cAAA;AAAA,IACrB,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,eAAA,EAAiB,KAAK,MAAA,IAAU,EAAA;AAAA,IAChC,kBAAkB,IAAA,CAAK;AAAA,GACxB,CAAA;AACD,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,MAAM,SAAA,CAAU,IAAI,WAAW,CAAA;AAC/B,IAAA,MAAM,SAAA,CAAU,GAAA,CAAI,SAAA,EAAW,CAAA,EAAG,KAAK;AAAA,CAAA,EAAM,KAAK,SAAS,CAAA;AAC3D,IAAA,UAAA,CAAW,IAAA,CAAK,IAAI,SAAS,CAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAC,CAAA;AACjD,IAAA,SAAA,GAAY,EAAC;AACb,IAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,MAAA,MAAM,aAAA,GAAgB,KAAK,OAAA,CAAQA,wBAAA,CAAQ,KAAI,EAAG,IAAA,CAAK,UAAA,IAAc,GAAA,CAAI,WAAW,CAAA;AACpF,MAAA,MAAM,UAAU,aAAa,CAAA;AAC7B,MAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAK,eAAe,CAAA,EAAG,GAAA,CAAI,YAAY,CAAA,KAAA,CAAO,CAAA;AACpE,MAAA,MAAM,SAAA,CAAU,QAAA,EAAU,CAAA,EAAG,UAAU;AAAA,CAAA,EAAM,KAAK,SAAS,CAAA;AAC3D,MAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,IAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,MAAAA,wBAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,iBAAA,EAAoB,CAAC;AAAA,CAAI,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,MAAW,MAAM,SAAA,EAAW;AAC1B,QAAAA,wBAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,iBAAA,EAAoB,EAAE;AAAA,CAAI,CAAA;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,SAAA,EAAW,UAAA,CAAW,CAAC,CAAA,EAAG,UAAU,SAAA,GAAY,CAAC,CAAA,EAAG,UAAA,EAAY,SAAA,EAAU;AACrF;;;ACjRA,SAASC,iBAAgB,CAAA,EAAqB;AAC5C,EAAA,IAAI,CAAC,GAAG,OAAO,KAAA;AACf,EAAA,OACE,CAAA,CAAE,SAAS,KAAK,CAAA,IAChB,EAAE,QAAA,CAAS,MAAM,CAAA,IACjB,CAAA,CAAE,QAAA,CAAS,MAAM,KACjB,CAAA,CAAE,QAAA,CAAS,OAAO,CAAA,IAClB,CAAA,CAAE,SAAS,QAAQ,CAAA,IACnB,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAEvB;AAOA,SAAS,SAAA,CAAU,SAAwC,GAAA,EAAgC;AACzF,EAAA,IAAI,CAAC,SAAS,OAAO,GAAA;AACrB,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,CAAC,GAAG,OAAA,EAAS,GAAG,CAAA,GAAI,CAAC,OAAA,EAAS,GAAG,CAAA;AACnE;AAEA,SAAS,MAAA,CACP,IAAA,EACA,GAAA,EACA,SAAA,GAAY,KAAA,EACE;AACd,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,+BAA+B,CAAA;AACzD,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAChE,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,SAAA,IAAaA,gBAAAA,CAAgB,GAAG,CAAA,EAAG;AACrC,MAAA,IAAA,CAAK,YAAA,GAAe,SAAA,CAAU,IAAA,CAAK,YAAA,EAAc,GAAG,CAAA;AAAA,IACtD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,WAAA,GAAc,SAAA,CAAU,IAAA,CAAK,WAAA,EAAa,GAAG,CAAA;AAAA,IACpD;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,UAAU,IAAA,EAAiC;AAClD,EAAA,MAAM,OAAwB,EAAC;AAC/B,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAc,IAAA,CAAK,IAAI,CAAC,CAAA;AAEtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,IAAA,QAAQ,CAAA;AAAG,MACT,KAAK,OAAA;AAAA,MACL,KAAK,UAAA,EAAY;AACf,QAAA,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,CAAC,CAAC,CAAA;AACpB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,aAAA;AAAA,MACL,KAAK,YAAA,EAAc;AACjB,QAAA,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,CAAC,CAAC,CAAA;AACpB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,cAAA;AAAA,MACL,KAAK,aAAA,EAAe;AAClB,QAAA,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA;AAC1B,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA;AAAA,MACL,KAAK,WAAA;AACH,QAAA,IAAA,CAAK,UAAA,GAAa,KAAK,CAAC,CAAA;AACxB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,QAAA;AAAA,MACL,KAAK,YAAA;AACH,QAAA,IAAA,CAAK,WAAA,GAAc,KAAK,CAAC,CAAA;AACzB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,UAAA,GAAa,KAAK,CAAC,CAAA;AACxB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,CAAA,GAAA,CAAK,IAAA,CAAK,CAAC,CAAA,IAAK,IAAI,WAAA,EAAY;AACtC,QAAA,IAAI,MAAM,KAAA,IAAS,CAAA,KAAM,UAAU,CAAA,KAAM,MAAA,OAAa,MAAA,GAAS,CAAA;AAAA,aAC1D,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAE,CAAA;AAC7C,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,cAAA,EAAgB;AACnB,QAAA,MAAM,CAAA,GAAA,CAAK,IAAA,CAAK,CAAC,CAAA,IAAK,IAAI,WAAA,EAAY;AACtC,QAAA,IAAI,MAAM,QAAA,IAAY,CAAA,KAAM,UAAU,CAAA,KAAM,QAAA,OAAe,aAAA,GAAgB,CAAA;AAAA,aACtE,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,CAAC,CAAA,CAAE,CAAA;AACjD,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,QAAA;AAAA,MACL,KAAK,kBAAA;AACH,QAAA,IAAA,CAAK,cAAA,GAAiB,KAAK,CAAC,CAAA;AAC5B,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,MAAA,GAAS,KAAK,CAAC,CAAA;AACpB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,CAAA,GAAA,CAAK,IAAA,CAAK,CAAC,CAAA,IAAK,IAAI,WAAA,EAAY;AACtC,QAAA,IAAI,CAAA,KAAM,UAAA,IAAc,CAAA,KAAM,SAAA,IAAa,MAAM,QAAA,EAAU;AACzD,UAAA,IAAA,CAAK,QAAA,GAAW,UAAA;AAAA,QAClB,CAAA,MAAA,IAAW,MAAM,UAAA,EAAY;AAC3B,UAAA,IAAA,CAAK,QAAA,GAAW,UAAA;AAAA,QAClB,CAAA,MAAA,IAAW,MAAM,MAAA,EAAQ;AACvB,UAAA,IAAA,CAAK,QAAA,GAAW,MAAA;AAAA,QAClB,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAAA,QACzE;AACA,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,aAAA;AACH,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,QAAA;AAAA,MACF,KAAK,gBAAA;AACH,QAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,QAAA;AAAA,MACF,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,QAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,CAAC,CAAA,CAAE,CAAA;AACpF,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,WAAW,EAAC;AACrC,QAAA,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA;AACpB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,aAAA;AACH,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,QAAA;AAAA,MACF,KAAK,gBAAA;AACH,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,QAAA;AAAA,MACF,KAAK,IAAA;AAAA,MACL,KAAK,SAAA;AACH,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,QAAA;AAAA,MACF,KAAK,IAAA;AAAA,MACL,KAAK,QAAA;AACH,QAAA,SAAA,EAAU;AACV,QAAAD,wBAAAA,CAAQ,KAAK,CAAC,CAAA;AACd,QAAA;AAAA,MACF;AACE,QAAA,IAAI,CAAA,CAAE,WAAW,GAAG,CAAA,QAAS,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,CAAC,CAAA,CAAE,CAAA;AAC7D,QAAA;AAAA;AACJ,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,SAAA,GAAkB;AACzB,EAAAA,wBAAAA,CAAQ,OAAO,KAAA,CAAM,CAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAoCtB,CAAA;AACD;AAAA,CAEC,YAAY;AACX,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,SAAA,CAAUA,wBAAAA,CAAQ,IAAI,CAAA;AACnC,IAAA,MAAM,cAAc,IAAI,CAAA;AAAA,EAC1B,SAAS,CAAA,EAAY;AACnB,IAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,IAAAA,wBAAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,UAAA,EAAa,GAAG;AAAA,CAAI,CAAA;AACzC,IAAAA,wBAAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAA,GAAG","file":"generate.cjs","sourcesContent":["// filename: src/config/defaults.ts\nexport const DEFAULT_BASE_URL = 'https://api.onyx.dev';\n\nexport const sanitizeBaseUrl = (u: string): string => u.replace(/\\/+$/, '');","// filename: src/errors/config-error.ts\nexport class OnyxConfigError extends Error {\n readonly name = 'OnyxConfigError';\n constructor(message: string) {\n super(message);\n }\n}","// filename: src/config/chain.ts\nimport { DEFAULT_BASE_URL, sanitizeBaseUrl } from './defaults';\nimport { OnyxConfigError } from '../errors/config-error';\nimport type { OnyxConfig } from '../types/public';\nimport type { FetchImpl } from '../types/common';\n\nexport interface ResolvedConfig {\n baseUrl: string;\n databaseId: string;\n apiKey: string;\n apiSecret: string;\n fetch: FetchImpl;\n}\n\nconst gProcess = (globalThis as {\n process?: {\n versions?: { node?: string };\n env?: Record<string, string | undefined>;\n stderr?: { write?: (s: string) => void };\n cwd?: () => string;\n };\n}).process;\nconst isNode = !!gProcess?.versions?.node;\n\n// Optional debug logger — enable with ONYX_DEBUG=true (Node only)\nconst dbg = (...args: unknown[]): void => {\n if (gProcess?.env?.ONYX_DEBUG == \"true\") {\n const fmt = (v: unknown): string => {\n if (typeof v === 'string') return v;\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n };\n gProcess.stderr?.write?.(`[onyx-config] ${args.map(fmt).join(' ')}\\n`);\n }\n};\n\nfunction dropUndefined<T extends object>(obj: Partial<T> | undefined): Partial<T> {\n if (!obj) return {};\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined) out[k] = v;\n }\n return out as Partial<T>;\n}\n\n// Lazy import helper to hide Node-only modules from bundlers\nasync function nodeImport<T>(spec: string): Promise<T> {\n return import(/* @vite-ignore */ spec) as Promise<T>;\n}\n\nfunction readEnv(targetId?: string): Partial<OnyxConfig> {\n if (!gProcess?.env) return {};\n const env = gProcess.env;\n const pick = (...keys: string[]): string | undefined => {\n for (const k of keys) {\n const v = env[k];\n if (typeof v === 'string') {\n const cleaned = v.replace(/[\\r\\n]+/g, '').trim();\n if (cleaned !== '') return cleaned;\n }\n }\n return undefined;\n };\n\n const envId = pick('ONYX_DATABASE_ID');\n if (targetId && envId !== targetId) return {};\n const res = dropUndefined<OnyxConfig>({\n baseUrl: pick('ONYX_DATABASE_BASE_URL'),\n databaseId: envId,\n apiKey: pick('ONYX_DATABASE_API_KEY'),\n apiSecret: pick('ONYX_DATABASE_API_SECRET'),\n });\n if (Object.keys(res).length === 0) return {};\n dbg('env:', mask(res));\n return res;\n}\n\nasync function readProjectFile(databaseId?: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n const cwd = gProcess?.cwd?.() ?? '.';\n\n const tryRead = async (p: string): Promise<Partial<OnyxConfig>> => {\n const txt = await fs.readFile(p, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('project file:', p, '→', mask(json));\n return json;\n };\n\n if (databaseId) {\n const specific = path.resolve(cwd, `onyx-database-${databaseId}.json`);\n try {\n return await tryRead(specific);\n } catch {\n dbg('project file not found:', specific);\n }\n }\n\n const fallback = path.resolve(cwd, 'onyx-database.json');\n try {\n return await tryRead(fallback);\n } catch {\n dbg('project file not found:', fallback);\n return {};\n }\n}\n\nasync function readHomeProfile(databaseId?: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const os = await nodeImport<typeof import('node:os')>('node:os');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n\n const home = os.homedir();\n const dir = path.join(home, '.onyx');\n\n const fileExists = async (p: string): Promise<boolean> => {\n try {\n await fs.access(p);\n return true;\n } catch {\n return false;\n }\n };\n const readProfile = async (p: string): Promise<Partial<OnyxConfig>> => {\n try {\n const txt = await fs.readFile(p, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('home profile used:', p, '→', mask(json));\n return json;\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new OnyxConfigError(`Failed to read ${p}: ${msg}`);\n }\n };\n\n if (databaseId) {\n const specific = `${dir}/onyx-database-${databaseId}.json`;\n if (await fileExists(specific)) return readProfile(specific);\n dbg('no specific profile:', specific);\n }\n\n const defaultInDir = `${dir}/onyx-database.json`;\n if (await fileExists(defaultInDir)) return readProfile(defaultInDir);\n dbg('no default profile in dir:', defaultInDir);\n\n const defaultInHome = `${home}/onyx-database.json`;\n if (await fileExists(defaultInHome)) return readProfile(defaultInHome);\n dbg('no home-root fallback:', defaultInHome);\n\n if (!(await fileExists(dir))) {\n dbg('~/.onyx does not exist:', dir);\n return {};\n }\n const files = await fs.readdir(dir).catch(() => []);\n const matches = files.filter(f => f.startsWith('onyx-database-') && f.endsWith('.json'));\n if (matches.length === 1) {\n const only = `${dir}/${matches[0]}`;\n return readProfile(only);\n }\n if (matches.length > 1) {\n throw new OnyxConfigError(\n 'Multiple ~/.onyx/onyx-database-*.json profiles found. Specify databaseId via env or provide ./onyx-database.json.'\n );\n }\n\n dbg('no usable home profiles found in', dir);\n return {};\n}\n\nasync function readConfigPath(p: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n const cwd = gProcess?.cwd?.() ?? '.';\n const resolved = path.isAbsolute(p) ? p : path.resolve(cwd, p);\n try {\n const txt = await fs.readFile(resolved, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('config path:', resolved, '→', mask(json));\n return json;\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new OnyxConfigError(`Failed to read ${resolved}: ${msg}`);\n }\n}\n\n/**\n * Resolve configuration using precedence:\n * explicit config (highest) >\n * env vars >\n * ONYX_CONFIG_PATH file >\n * project file >\n * home profile\n */\nexport async function resolveConfig(input?: OnyxConfig): Promise<ResolvedConfig> {\n const configPath = gProcess?.env?.ONYX_CONFIG_PATH;\n const env = readEnv(input?.databaseId);\n\n let cfgPath: Partial<OnyxConfig> = {};\n if (configPath) {\n cfgPath = await readConfigPath(configPath);\n }\n\n const targetId = input?.databaseId ?? env.databaseId ?? cfgPath.databaseId;\n\n let haveDbId = !!(input?.databaseId ?? env.databaseId ?? cfgPath.databaseId);\n let haveApiKey = !!(input?.apiKey ?? env.apiKey ?? cfgPath.apiKey);\n let haveApiSecret = !!(input?.apiSecret ?? env.apiSecret ?? cfgPath.apiSecret);\n\n let project: Partial<OnyxConfig> = {};\n if (!(haveDbId && haveApiKey && haveApiSecret)) {\n project = await readProjectFile(targetId);\n if (project.databaseId) haveDbId = true;\n if (project.apiKey) haveApiKey = true;\n if (project.apiSecret) haveApiSecret = true;\n }\n\n let home: Partial<OnyxConfig> = {};\n if (!(haveDbId && haveApiKey && haveApiSecret)) {\n home = await readHomeProfile(targetId);\n }\n\n const merged: Partial<OnyxConfig> = {\n baseUrl: DEFAULT_BASE_URL,\n ...dropUndefined<OnyxConfig>(home),\n ...dropUndefined<OnyxConfig>(project),\n ...dropUndefined<OnyxConfig>(cfgPath),\n ...dropUndefined<OnyxConfig>(env),\n ...dropUndefined<OnyxConfig>(input),\n };\n\n dbg('merged (pre-validate):', mask(merged));\n\n const baseUrl = sanitizeBaseUrl(merged.baseUrl ?? DEFAULT_BASE_URL);\n const databaseId = merged.databaseId ?? '';\n const apiKey = merged.apiKey ?? '';\n const apiSecret = merged.apiSecret ?? '';\n const gfetch = (globalThis as { fetch?: FetchImpl }).fetch;\n const fetchImpl: FetchImpl =\n merged.fetch ??\n (typeof gfetch === 'function'\n ? (u, i) => gfetch(u, i)\n : async () => {\n throw new OnyxConfigError('No fetch available; provide OnyxConfig.fetch');\n });\n\n const missing: string[] = [];\n if (!databaseId) missing.push('databaseId');\n if (!apiKey) missing.push('apiKey');\n if (!apiSecret) missing.push('apiSecret');\n if (missing.length) {\n dbg('validation failed. merged:', mask(merged));\n const sources = [\n 'env',\n configPath ?? 'env ONYX_CONFIG_PATH',\n ...(isNode\n ? [\n './onyx-database-<databaseId>.json',\n './onyx-database.json',\n '~/.onyx/onyx-database-<databaseId>.json',\n '~/.onyx/onyx-database.json',\n '~/onyx-database.json',\n ]\n : []),\n 'explicit config',\n ];\n throw new OnyxConfigError(\n `Missing required config: ${missing.join(', ')}. Sources: ${sources.join(', ')}`,\n );\n }\n\n const resolved: ResolvedConfig = { baseUrl, databaseId, apiKey, apiSecret, fetch: fetchImpl };\n const source = {\n databaseId: input?.databaseId\n ? 'explicit config'\n : env.databaseId\n ? 'env'\n : cfgPath.databaseId\n ? 'env ONYX_CONFIG_PATH'\n : project.databaseId\n ? 'project file'\n : home.databaseId\n ? 'home profile'\n : 'unknown',\n apiKey: input?.apiKey\n ? 'explicit config'\n : env.apiKey\n ? 'env'\n : cfgPath.apiKey\n ? 'env ONYX_CONFIG_PATH'\n : project.apiKey\n ? 'project file'\n : home.apiKey\n ? 'home profile'\n : 'unknown',\n apiSecret: input?.apiSecret\n ? 'explicit config'\n : env.apiSecret\n ? 'env'\n : cfgPath.apiSecret\n ? 'env ONYX_CONFIG_PATH'\n : project.apiSecret\n ? 'project file'\n : home.apiSecret\n ? 'home profile'\n : 'unknown',\n };\n dbg('credential source:', JSON.stringify(source));\n dbg('resolved:', mask(resolved));\n return resolved;\n}\n\n// Redacts secrets for debug logging\nfunction mask<T extends object>(obj: T | undefined): T | undefined {\n if (!obj) return obj;\n const clone = { ...(obj as Record<string, unknown>) } as Record<string, unknown>;\n if (typeof clone.apiKey === 'string') clone.apiKey = '***';\n if (typeof clone.apiSecret === 'string') clone.apiSecret = '***';\n return clone as unknown as T;\n}\n","// filename: src/errors/http-error.ts\nexport class OnyxHttpError extends Error {\n readonly name = 'OnyxHttpError';\n readonly status: number;\n readonly statusText: string;\n readonly body: unknown;\n readonly rawBody: string;\n\n constructor(message: string, status: number, statusText: string, body: unknown, rawBody: string) {\n super(message);\n this.status = status;\n this.statusText = statusText;\n this.body = body;\n this.rawBody = rawBody;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n status: this.status,\n statusText: this.statusText,\n body: this.body,\n rawBody: this.rawBody,\n stack: this.stack,\n };\n }\n\n [Symbol.for('nodejs.util.inspect.custom')](): Record<string, unknown> {\n return this.toJSON();\n }\n}","// filename: src/core/http.ts\nimport { OnyxHttpError } from '../errors/http-error';\nimport { OnyxConfigError } from '../errors/config-error';\nimport type { FetchImpl } from '../types/common';\n\nexport function parseJsonAllowNaN(txt: string): unknown {\n try {\n return JSON.parse(txt);\n } catch {\n const fixed = txt.replace(/(:\\s*)(NaN|Infinity|-Infinity)(\\s*[,}])/g, '$1null$3');\n return JSON.parse(fixed);\n }\n}\n\nexport interface HttpClientOptions {\n baseUrl: string;\n apiKey: string;\n apiSecret: string;\n fetchImpl?: FetchImpl;\n defaultHeaders?: Record<string, string>;\n requestLoggingEnabled?: boolean;\n responseLoggingEnabled?: boolean;\n}\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly apiSecret: string;\n private readonly fetchImpl: FetchImpl;\n private readonly defaults: Record<string, string>;\n private readonly requestLoggingEnabled: boolean;\n private readonly responseLoggingEnabled: boolean;\n\n constructor(opts: HttpClientOptions) {\n if (!opts.baseUrl || opts.baseUrl.trim() === '') {\n throw new OnyxConfigError('baseUrl is required');\n }\n try {\n // ensure baseUrl has protocol; URL constructor will throw otherwise\n new URL(opts.baseUrl);\n } catch {\n throw new OnyxConfigError('baseUrl must include protocol, e.g. https://');\n }\n this.baseUrl = opts.baseUrl.replace(/\\/+$/, '');\n this.apiKey = opts.apiKey;\n this.apiSecret = opts.apiSecret;\n const gfetch = (globalThis as { fetch?: FetchImpl }).fetch;\n if (opts.fetchImpl) {\n this.fetchImpl = opts.fetchImpl;\n } else if (typeof gfetch === 'function') {\n this.fetchImpl = (url, init) => gfetch(url, init);\n } else {\n throw new Error('global fetch is not available; provide OnyxConfig.fetch');\n }\n this.defaults = Object.assign({}, opts.defaultHeaders);\n const envDebug =\n (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\n ?.env?.ONYX_DEBUG === 'true';\n this.requestLoggingEnabled = !!opts.requestLoggingEnabled || envDebug;\n this.responseLoggingEnabled = !!opts.responseLoggingEnabled || envDebug;\n }\n\n headers(extra?: Record<string, string>): Record<string, string> {\n const extras = { ...(extra ?? {}) };\n delete extras['x-onyx-key'];\n delete extras['x-onyx-secret'];\n return {\n 'x-onyx-key': this.apiKey,\n 'x-onyx-secret': this.apiSecret,\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n ...this.defaults,\n ...extras,\n };\n }\n\n async request<T = unknown>(\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n path: string,\n body?: unknown,\n extraHeaders?: Record<string, string>\n ): Promise<T> {\n if (!path.startsWith('/')) {\n throw new OnyxConfigError('path must start with /');\n }\n const url = `${this.baseUrl}${path}`;\n const headers = this.headers({\n ...(method === 'DELETE' ? { Prefer: 'return=representation' } : {}),\n ...(extraHeaders ?? {}),\n });\n if (body == null) delete headers['Content-Type'];\n if (this.requestLoggingEnabled) {\n console.log(`${method} ${url}`);\n if (body != null) {\n const logBody = typeof body === 'string' ? body : JSON.stringify(body);\n console.log(logBody);\n }\n const headerLog = { ...headers, 'x-onyx-secret': '[REDACTED]' };\n console.log('Headers:', headerLog);\n }\n const payload =\n body == null ? undefined : typeof body === 'string' ? body : JSON.stringify(body);\n const init = {\n method,\n headers,\n body: payload,\n };\n\n const isQuery =\n path.includes('/query/') && !/\\/query\\/(?:update|delete)\\//.test(path);\n const canRetry = method === 'GET' || isQuery;\n const maxAttempts = canRetry ? 3 : 1;\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const res = await this.fetchImpl(url, init);\n const contentType = res.headers.get('Content-Type') || '';\n const raw = await res.text();\n if (this.responseLoggingEnabled) {\n const statusLine = `${res.status} ${res.statusText}`.trim();\n console.log(statusLine);\n if (raw.trim().length > 0) {\n console.log(raw);\n }\n }\n const isJson =\n raw.trim().length > 0 &&\n (contentType.includes('application/json') || /^[\\[{]/.test(raw.trim()));\n const data = isJson ? parseJsonAllowNaN(raw) : raw;\n if (!res.ok) {\n const msg =\n typeof data === 'object' &&\n data !== null &&\n 'error' in data &&\n typeof (data as { error?: { message?: unknown } }).error?.message === 'string'\n ? String((data as { error: { message: unknown } }).error.message)\n : `${res.status} ${res.statusText}`;\n if (canRetry && res.status >= 500 && attempt + 1 < maxAttempts) {\n await new Promise((r) => setTimeout(r, 100 * 2 ** attempt));\n continue;\n }\n throw new OnyxHttpError(msg, res.status, res.statusText, data, raw);\n }\n return data as T;\n } catch (err) {\n const retryable =\n canRetry && (!(err instanceof OnyxHttpError) || err.status >= 500);\n if (attempt + 1 < maxAttempts && retryable) {\n await new Promise((r) => setTimeout(r, 100 * 2 ** attempt));\n continue;\n }\n throw err;\n }\n }\n // unreachable but satisfies TypeScript\n throw new Error('Request failed after retries');\n }\n}\n","// filename: gen/emit.ts\nexport type OnyxAttributeType =\n | 'String'\n | 'Int'\n | 'Boolean'\n | 'Timestamp'\n | 'EmbeddedList'\n | 'EmbeddedObject';\n\nexport type OnyxAttribute = Readonly<{\n name: string;\n type: OnyxAttributeType;\n isNullable: boolean;\n}>;\n\nexport type OnyxTable = Readonly<{\n name: string;\n attributes: readonly OnyxAttribute[];\n}>;\n\nexport type OnyxIntrospection = Readonly<{\n tables: readonly OnyxTable[];\n}>;\n\nexport type OptionalStrategy = 'non-null' | 'nullable' | 'none';\n\nexport type EmitOptions = Readonly<{\n /** Exported schema mapping type name. */\n schemaTypeName?: string;\n /** How to represent Timestamp attributes. Default: 'date'. */\n timestampMode?: 'string' | 'date' | 'number';\n /** Prefix added to each generated model/interface name. Example: 'Onyx' -> OnyxVodItem */\n modelNamePrefix?: string;\n /**\n * Where to use the TypeScript optional property modifier `?`.\n * - 'non-null' (default): add `?` on non-nullable fields (isNullable === false)\n * - 'nullable' : add `?` on nullable fields (isNullable === true)\n * - 'none' : never add `?`\n */\n optionalStrategy?: OptionalStrategy;\n}>;\n\nconst DEFAULTS: Required<EmitOptions> = {\n schemaTypeName: 'OnyxSchema',\n timestampMode: 'date',\n modelNamePrefix: '',\n optionalStrategy: 'non-null',\n};\n\nfunction isValidIdentifier(name: string): boolean {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name);\n}\n\nfunction toPascalCase(raw: string): string {\n const cleaned = String(raw).replace(/[^A-Za-z0-9]+/g, ' ');\n const pc = cleaned\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n return pc.length === 0 ? 'Table' : (/^[0-9]/.test(pc) ? `T${pc}` : pc);\n}\n\nfunction tsTypeFor(\n attrType: OnyxAttributeType,\n timestampMode: 'string' | 'date' | 'number',\n): string {\n switch (attrType) {\n case 'String':\n return 'string';\n case 'Int':\n return 'number';\n case 'Boolean':\n return 'boolean';\n case 'Timestamp':\n return timestampMode === 'date'\n ? 'Date'\n : timestampMode === 'number'\n ? 'number'\n : 'string';\n case 'EmbeddedList':\n return 'any[]';\n case 'EmbeddedObject':\n return 'any';\n default:\n return 'any';\n }\n}\n\nfunction propertyLine(\n attr: OnyxAttribute,\n timestampMode: 'string' | 'date' | 'number',\n optionalStrategy: OptionalStrategy,\n): string {\n const key = isValidIdentifier(attr.name) ? attr.name : JSON.stringify(attr.name);\n\n // Decide whether to mark the property as optional (with '?')\n const makeOptional =\n optionalStrategy === 'non-null'\n ? !attr.isNullable\n : optionalStrategy === 'nullable'\n ? attr.isNullable\n : false;\n\n const t = tsTypeFor(attr.type, timestampMode);\n const nullableUnion = attr.isNullable ? ' | null' : '';\n\n return ` ${key}${makeOptional ? '?' : ''}: ${t}${nullableUnion};`;\n}\n\nexport function emitTypes(schema: OnyxIntrospection, options?: EmitOptions): string {\n const opts = { ...DEFAULTS, ...(options ?? {}) };\n\n // Track used enum keys to avoid collisions\n const usedEnumKeys = new Set<string>();\n const makeEnumKey = (raw: string): string => {\n const base = toPascalCase(raw);\n let key = base;\n let i = 2;\n while (usedEnumKeys.has(key)) {\n key = `${base}_${i++}`;\n }\n usedEnumKeys.add(key);\n return key;\n };\n\n const lines: string[] = [];\n lines.push(`// AUTO-GENERATED BY onyx-gen. DO NOT EDIT.`);\n lines.push(`// Generated at ${new Date().toISOString()}`);\n lines.push('');\n\n // Per-table interfaces\n for (const t of schema.tables) {\n const typeName = `${opts.modelNamePrefix}${toPascalCase(t.name)}`;\n lines.push(`export interface ${typeName} {`);\n for (const a of t.attributes) {\n lines.push(propertyLine(a, opts.timestampMode, opts.optionalStrategy));\n }\n lines.push(' [key: string]: any;');\n lines.push('}');\n lines.push('');\n }\n\n // Schema mapping\n lines.push(`export type ${opts.schemaTypeName} = {`);\n for (const t of schema.tables) {\n const key = isValidIdentifier(t.name) ? t.name : JSON.stringify(t.name);\n const modelName = `${opts.modelNamePrefix}${toPascalCase(t.name)}`;\n lines.push(` ${key}: ${modelName};`);\n }\n lines.push('};');\n lines.push('');\n\n // Convenience alias so consumers can always `import { Schema }`\n if (opts.schemaTypeName !== 'Schema') {\n lines.push(`export type Schema = ${opts.schemaTypeName};`);\n }\n lines.push(`export const Schema = {} as ${opts.schemaTypeName};`);\n lines.push('');\n\n // Tables enum (for IDE suggestions & safer table refs)\n lines.push('export enum tables {');\n for (const t of schema.tables) {\n const enumKey = makeEnumKey(t.name); // safe TS identifier\n const enumVal = JSON.stringify(t.name); // preserve original table name\n lines.push(` ${enumKey} = ${enumVal},`);\n }\n lines.push('}');\n lines.push('');\n\n return lines.join('\\n');\n}\n","// filename: gen/generate.ts\nimport process from 'node:process';\nimport { resolveConfig } from '../src/config/chain';\nimport { HttpClient } from '../src/core/http';\nimport { emitTypes, type OnyxIntrospection, type EmitOptions, type OptionalStrategy } from './emit';\n\nexport interface GenerateOptions {\n /** Where to read schema from. */\n source?: 'auto' | 'api' | 'file';\n /** When source=file, filesystem path to schema JSON. */\n schemaPath?: string;\n\n /**\n * Output base filename (without extension). Default: \"onyx.schema\".\n * Used only when writing into a directory (see `typesOutDir`).\n */\n outBaseName?: string;\n\n /**\n * Types output directory (when writing into a directory).\n * Back-compat alias: `outDir`.\n * Note: if no output is provided, default output is \"./onyx/types.ts\".\n */\n typesOutDir?: string | string[];\n\n /**\n * Write the generated types to THIS EXACT FILE (absolute or relative path).\n * If provided and points to a \".ts\" file, this takes precedence over `typesOutDir`.\n * Example: \"./onyx/types.ts\"\n * Note: if no output is provided, default output is \"./onyx/types.ts\".\n */\n typesOutFile?: string | string[];\n\n /**\n * JSON output directory (only used when `emitJson: true`).\n * Default: same as `typesOutDir` or the directory of `typesOutFile` (if set).\n */\n jsonOutDir?: string;\n\n /**\n * Emit a copy of the schema JSON alongside the TS file.\n * Default: false (do not copy schema).\n */\n emitJson?: boolean;\n\n /** Overwrite existing files. Default: true. */\n overwrite?: boolean;\n\n /** Timestamp representation for TS types. Default: \"date\". */\n timestampMode?: EmitOptions['timestampMode'];\n\n /** Exported schema type name. Default: \"OnyxSchema\". */\n schemaTypeName?: string;\n\n /** Prefix for model/interface names. Example: \"Onyx\" -> OnyxVodItem. Default: \"\" */\n prefix?: string;\n\n /**\n * Optional property strategy. Default: \"non-null\" (add `?` to non-null fields).\n * Other values: \"nullable\", \"none\".\n */\n optional?: OptionalStrategy;\n\n /** Optional candidate API paths (overrides defaults). Must start with \"/\". */\n apiPaths?: string[];\n\n /** Quiet logs. Default: false. */\n quiet?: boolean;\n\n /** @deprecated Legacy single outDir; still accepted to avoid breaking scripts. */\n outDir?: string | string[];\n}\n\nconst DEFAULT_SCHEMA_PATH = './onyx.schema.json';\nconst DEFAULT_TYPES_OUT = './onyx/types.ts';\n\nconst DEFAULTS: Required<\n Omit<\n GenerateOptions,\n | 'schemaPath'\n | 'apiPaths'\n | 'typesOutDir'\n | 'jsonOutDir'\n | 'outDir'\n | 'prefix'\n | 'typesOutFile'\n >\n> = {\n source: 'file',\n outBaseName: 'onyx.schema',\n emitJson: false,\n overwrite: true,\n timestampMode: 'date',\n schemaTypeName: 'OnyxSchema',\n optional: 'non-null',\n quiet: false,\n};\n\nfunction toArray(val?: string | string[]): string[] {\n if (!val) return [];\n return Array.isArray(val) ? val : [val];\n}\n\nfunction isTypesFilePath(p?: string): boolean {\n if (!p) return false;\n return (\n p.endsWith('.ts') ||\n p.endsWith('.mts') ||\n p.endsWith('.cts') ||\n p.endsWith('.d.ts') ||\n p.endsWith('.d.mts') ||\n p.endsWith('.d.cts')\n );\n}\n\nasync function readFileJson<T = unknown>(path: string): Promise<T> {\n const fs = await import('node:fs/promises');\n const txt = await fs.readFile(path, 'utf8');\n return JSON.parse(txt) as T;\n}\n\nasync function ensureDir(dir: string): Promise<void> {\n const fs = await import('node:fs/promises');\n await fs.mkdir(dir, { recursive: true });\n}\n\nasync function writeFile(path: string, data: string, overwrite: boolean): Promise<void> {\n const fs = await import('node:fs/promises');\n if (!overwrite) {\n try {\n await fs.access(path);\n throw new Error(`Refusing to overwrite existing file: ${path}`);\n } catch {\n /* not exists -> ok */\n }\n }\n await fs.writeFile(path, data, 'utf8');\n}\n\nfunction isIntrospection(x: unknown): x is OnyxIntrospection {\n return !!x && typeof x === 'object' && Array.isArray((x as { tables?: unknown }).tables);\n}\n\nasync function fetchSchemaFromApi(\n http: HttpClient,\n databaseId: string,\n candidates?: string[],\n): Promise<OnyxIntrospection> {\n const defaultCandidates = [\n `/schema/${encodeURIComponent(databaseId)}`,\n `/data/${encodeURIComponent(databaseId)}/schema`,\n `/meta/schema/${encodeURIComponent(databaseId)}`,\n `/schema?databaseId=${encodeURIComponent(databaseId)}`,\n `/meta/schema?databaseId=${encodeURIComponent(databaseId)}`,\n ];\n const paths = candidates && candidates.length ? candidates : defaultCandidates;\n\n let lastErr: unknown;\n for (const p of paths) {\n try {\n const res = await http.request<unknown>('GET', p);\n if (isIntrospection(res)) return res;\n } catch (e) {\n lastErr = e;\n }\n }\n const err = lastErr instanceof Error ? lastErr.message : String(lastErr ?? 'Unknown error');\n throw new Error(\n `Unable to fetch schema from API. Tried: ${paths.join(', ')}. Last error: ${err}`,\n );\n}\n\n/**\n * Programmatic codegen entry.\n * Returns the absolute paths of the generated files.\n */\nexport async function generateTypes(\n options?: GenerateOptions,\n): Promise<{\n typesPath: string;\n jsonPath?: string;\n typesPaths: string[];\n jsonPaths?: string[];\n}> {\n const path = await import('node:path');\n const opts = { ...DEFAULTS, ...(options ?? {}) };\n\n const resolvedSchemaPath =\n opts.schemaPath ?? (opts.source === 'file' ? DEFAULT_SCHEMA_PATH : undefined);\n\n let schema: OnyxIntrospection | null = null;\n\n if (opts.source === 'file' || (opts.source === 'auto' && resolvedSchemaPath)) {\n if (!resolvedSchemaPath) throw new Error('schemaPath is required when source=\"file\"');\n if (!opts.quiet)\n process.stderr.write(`[onyx-gen] reading schema from file: ${resolvedSchemaPath}\\n`);\n schema = await readFileJson<OnyxIntrospection>(resolvedSchemaPath);\n }\n\n if (!schema) {\n if (opts.source === 'file') throw new Error('Failed to read schema from file');\n const cfg = await resolveConfig({});\n const http = new HttpClient({\n baseUrl: cfg.baseUrl,\n apiKey: cfg.apiKey,\n apiSecret: cfg.apiSecret,\n fetchImpl: cfg.fetch,\n });\n if (!opts.quiet)\n process.stderr.write(`[onyx-gen] fetching schema from API for db ${cfg.databaseId}\\n`);\n schema = await fetchSchemaFromApi(http, cfg.databaseId, options?.apiPaths);\n }\n\n if (!isIntrospection(schema)) {\n throw new Error('Invalid schema: missing \"tables\" array.');\n }\n\n const outTargets = [\n ...toArray(opts.typesOutFile),\n ...toArray(opts.typesOutDir),\n ...toArray(opts.outDir),\n ]\n .map((p) => p.trim())\n .filter(Boolean);\n\n if (outTargets.length === 0) {\n outTargets.push(DEFAULT_TYPES_OUT);\n }\n\n type OutputTarget = { typesPath: string; typesDirAbs: string; jsonBaseName: string };\n const outputs: OutputTarget[] = outTargets.map((target) => {\n const outIsFile = isTypesFilePath(target);\n const typesPath = outIsFile\n ? path.resolve(process.cwd(), target)\n : path.join(path.resolve(process.cwd(), target), `${opts.outBaseName}.ts`);\n const typesDirAbs = outIsFile ? path.dirname(typesPath) : path.resolve(process.cwd(), target);\n const jsonBaseName = outIsFile ? path.basename(typesPath, path.extname(typesPath)) : opts.outBaseName;\n return { typesPath, typesDirAbs, jsonBaseName };\n });\n\n const types = emitTypes(schema, {\n schemaTypeName: opts.schemaTypeName,\n timestampMode: opts.timestampMode,\n modelNamePrefix: opts.prefix ?? '',\n optionalStrategy: opts.optional,\n });\n const typesPaths: string[] = [];\n for (const out of outputs) {\n await ensureDir(out.typesDirAbs);\n await writeFile(out.typesPath, `${types}\\n`, opts.overwrite);\n typesPaths.push(out.typesPath);\n }\n\n let jsonPaths: string[] | undefined;\n if (opts.emitJson) {\n const jsonPretty = JSON.stringify(schema, null, 2);\n jsonPaths = [];\n for (const out of outputs) {\n const jsonOutDirAbs = path.resolve(process.cwd(), opts.jsonOutDir ?? out.typesDirAbs);\n await ensureDir(jsonOutDirAbs);\n const jsonPath = path.join(jsonOutDirAbs, `${out.jsonBaseName}.json`);\n await writeFile(jsonPath, `${jsonPretty}\\n`, opts.overwrite);\n jsonPaths.push(jsonPath);\n }\n }\n\n if (!opts.quiet) {\n for (const p of typesPaths) {\n process.stderr.write(`[onyx-gen] wrote ${p}\\n`);\n }\n if (jsonPaths) {\n for (const jp of jsonPaths) {\n process.stderr.write(`[onyx-gen] wrote ${jp}\\n`);\n }\n }\n }\n\n return { typesPath: typesPaths[0], jsonPath: jsonPaths?.[0], typesPaths, jsonPaths };\n}\n","#!/usr/bin/env node\n// filename: gen/cli/generate.ts\nimport process from 'node:process';\nimport { generateTypes, type GenerateOptions } from '../generate';\n\nfunction isTypesFilePath(p?: string): boolean {\n if (!p) return false;\n return (\n p.endsWith('.ts') ||\n p.endsWith('.mts') ||\n p.endsWith('.cts') ||\n p.endsWith('.d.ts') ||\n p.endsWith('.d.mts') ||\n p.endsWith('.d.cts')\n );\n}\n\ntype OutCollector = {\n typesOutFile?: string | string[];\n typesOutDir?: string | string[];\n};\n\nfunction appendVal(current: string | string[] | undefined, val: string): string | string[] {\n if (!current) return val;\n return Array.isArray(current) ? [...current, val] : [current, val];\n}\n\nfunction addOut(\n opts: OutCollector,\n raw: string | undefined,\n forceFile = false,\n): OutCollector {\n if (!raw) throw new Error('Missing value for output flag');\n const parts = raw.split(',').map((p) => p.trim()).filter(Boolean);\n for (const val of parts) {\n if (forceFile || isTypesFilePath(val)) {\n opts.typesOutFile = appendVal(opts.typesOutFile, val);\n } else {\n opts.typesOutDir = appendVal(opts.typesOutDir, val);\n }\n }\n return opts;\n}\n\nfunction parseArgs(argv: string[]): GenerateOptions {\n const opts: GenerateOptions = {};\n const next = (i: number) => argv[i + 1];\n\n for (let i = 2; i < argv.length; i++) {\n const a = argv[i];\n switch (a) {\n case '--out':\n case '--outDir': { // legacy alias\n addOut(opts, next(i));\n i++;\n break;\n }\n case '--types-out':\n case '--typesOut': {\n addOut(opts, next(i));\n i++;\n break;\n }\n case '--types-file':\n case '--typesFile': {\n addOut(opts, next(i), true);\n i++;\n break;\n }\n case '--json-out':\n case '--jsonOut':\n opts.jsonOutDir = next(i);\n i++;\n break;\n case '--base':\n case '--baseName':\n opts.outBaseName = next(i);\n i++;\n break;\n case '--schema':\n opts.schemaPath = next(i);\n i++;\n break;\n case '--source': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'api' || v === 'file' || v === 'auto') opts.source = v as GenerateOptions['source'];\n else throw new Error(`Invalid --source: ${v}`);\n i++;\n break;\n }\n case '--timestamps': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'string' || v === 'date' || v === 'number') opts.timestampMode = v as GenerateOptions['timestampMode'];\n else throw new Error(`Invalid --timestamps: ${v}`);\n i++;\n break;\n }\n case '--name':\n case '--schemaTypeName':\n opts.schemaTypeName = next(i);\n i++;\n break;\n case '--prefix':\n opts.prefix = next(i);\n i++;\n break;\n case '--optional': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'non-null' || v === 'nonnull' || v === 'nonull') {\n opts.optional = 'non-null';\n } else if (v === 'nullable') {\n opts.optional = 'nullable';\n } else if (v === 'none') {\n opts.optional = 'none';\n } else {\n throw new Error(`Invalid --optional: ${v} (use non-null|nullable|none)`);\n }\n i++;\n break;\n }\n case '--emit-json':\n opts.emitJson = true;\n break;\n case '--no-emit-json':\n opts.emitJson = false;\n break;\n case '--api-path': {\n const v = next(i);\n if (!v || !v.startsWith('/')) throw new Error(`--api-path must start with \"/\": ${v}`);\n if (!opts.apiPaths) opts.apiPaths = [];\n opts.apiPaths.push(v);\n i++;\n break;\n }\n case '--overwrite':\n opts.overwrite = true;\n break;\n case '--no-overwrite':\n opts.overwrite = false;\n break;\n case '-q':\n case '--quiet':\n opts.quiet = true;\n break;\n case '-h':\n case '--help':\n printHelp();\n process.exit(0);\n break;\n default:\n if (a.startsWith('-')) throw new Error(`Unknown option: ${a}`);\n break;\n }\n }\n return opts;\n}\n\nfunction printHelp(): void {\n process.stdout.write(`onyx-gen — Generate Onyx schema TypeScript types\n\nUsage:\n onyx-gen [options]\n\nOutput selection:\n --out <path[,path2,...]> If a value ends with \".ts\", writes exactly to that file.\n Otherwise treats it as a directory. Comma-separate or repeat to\n write multiple outputs. Default: ./onyx/types.ts\n --types-out <dir|file>[,more] Same as --out (file-or-dir).\n --types-file <file.ts>[,more] Explicit file output(s).\n --base, --baseName <name> Base filename (without ext) when writing to a directory (default: onyx.schema)\n --json-out <dir> JSON output directory (used only with --emit-json)\n\nSource selection:\n --source <auto|api|file> Where to get schema (default: file)\n --schema <path> Path to schema JSON when --source=file (default: ./onyx.schema.json)\n\nType emission:\n --timestamps <string|date|number> Timestamp representation in types (default: date)\n --name, --schemaTypeName <T> Exported schema type name (default: OnyxSchema)\n --prefix <Prefix> Prefix to prepend to generated model names (default: none)\n --optional <non-null|nullable|none>\n Where to add '?' optional props (default: non-null)\n\nOther:\n --emit-json / --no-emit-json Emit schema JSON copy (default: no-emit-json)\n --api-path <path> Candidate API path to fetch schema; can be repeated\n --overwrite / --no-overwrite Overwrite existing files (default: overwrite)\n -q, --quiet Suppress logs\n -h, --help Show this help\n\nNotes:\n • Running with no flags defaults to: --source file --schema ./onyx.schema.json --out ./onyx/types.ts\n • Env/config for --source=api uses the same resolver as onyx.init()\n (env vars, ./onyx-database.json, ~/.onyx/onyx-database-<id>.json, etc.).\n`);\n}\n\n(async () => {\n try {\n const opts = parseArgs(process.argv);\n await generateTypes(opts);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n process.stderr.write(`onyx-gen: ${msg}\\n`);\n process.exit(1);\n }\n})();\n"]}
package/dist/index.cjs CHANGED
@@ -926,6 +926,17 @@ function clearCacheConfig() {
926
926
  function toSingleCondition(criteria) {
927
927
  return { conditionType: "SingleCondition", criteria };
928
928
  }
929
+ function flattenStrings(values) {
930
+ const flat = [];
931
+ for (const value of values) {
932
+ if (Array.isArray(value)) {
933
+ flat.push(...value);
934
+ } else if (typeof value === "string") {
935
+ flat.push(value);
936
+ }
937
+ }
938
+ return flat;
939
+ }
929
940
  function toCondition(input) {
930
941
  if (typeof input.toCondition === "function") {
931
942
  return input.toCondition();
@@ -1213,12 +1224,12 @@ var QueryBuilderImpl = class {
1213
1224
  return this;
1214
1225
  }
1215
1226
  select(...fields) {
1216
- const flat = fields.flatMap((f) => Array.isArray(f) ? f : [f]);
1227
+ const flat = flattenStrings(fields);
1217
1228
  this.fields = flat.length > 0 ? flat : null;
1218
1229
  return this;
1219
1230
  }
1220
1231
  resolve(...values) {
1221
- const flat = values.flatMap((v) => Array.isArray(v) ? v : [v]);
1232
+ const flat = flattenStrings(values);
1222
1233
  this.resolvers = flat.length > 0 ? flat : null;
1223
1234
  return this;
1224
1235
  }