apibara 2.1.0-beta.30 → 2.1.0-beta.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/chunks/add.mjs +2 -2
  2. package/dist/chunks/add.mjs.map +1 -0
  3. package/dist/chunks/build.mjs +2 -2
  4. package/dist/chunks/build.mjs.map +1 -0
  5. package/dist/chunks/dev.mjs +15 -11
  6. package/dist/chunks/dev.mjs.map +1 -0
  7. package/dist/chunks/init.mjs +2 -2
  8. package/dist/chunks/init.mjs.map +1 -0
  9. package/dist/chunks/prepare.mjs +2 -2
  10. package/dist/chunks/prepare.mjs.map +1 -0
  11. package/dist/chunks/start.mjs +5 -3
  12. package/dist/chunks/start.mjs.map +1 -0
  13. package/dist/chunks/write-project-info.mjs +2 -1
  14. package/dist/chunks/write-project-info.mjs.map +1 -0
  15. package/dist/cli/index.mjs +1 -0
  16. package/dist/cli/index.mjs.map +1 -0
  17. package/dist/common/index.d.mts +33 -0
  18. package/dist/common/index.d.ts +33 -0
  19. package/dist/common/index.mjs +91 -0
  20. package/dist/common/index.mjs.map +1 -0
  21. package/dist/config/index.mjs +1 -0
  22. package/dist/config/index.mjs.map +1 -0
  23. package/dist/core/index.mjs +41 -6
  24. package/dist/core/index.mjs.map +1 -0
  25. package/dist/create/index.mjs +3 -4
  26. package/dist/create/index.mjs.map +1 -0
  27. package/dist/hooks/index.mjs +6 -1
  28. package/dist/hooks/index.mjs.map +1 -0
  29. package/dist/indexer/index.d.ts +1 -0
  30. package/dist/indexer/index.mjs +1 -0
  31. package/dist/indexer/plugins.d.ts +1 -0
  32. package/dist/indexer/plugins.mjs +1 -0
  33. package/dist/indexer/testing.d.ts +1 -0
  34. package/dist/indexer/testing.mjs +1 -0
  35. package/dist/indexer/vcr.d.ts +1 -0
  36. package/dist/indexer/vcr.mjs +1 -0
  37. package/dist/rolldown/index.mjs +19 -38
  38. package/dist/rolldown/index.mjs.map +1 -0
  39. package/dist/runtime/dev.mjs +10 -7
  40. package/dist/runtime/internal/app.d.ts +11 -1
  41. package/dist/runtime/internal/app.mjs +12 -13
  42. package/dist/runtime/project-info.mjs +17 -3
  43. package/dist/runtime/start.mjs +42 -5
  44. package/dist/shared/apibara.730bb1e4.mjs +1 -0
  45. package/dist/shared/apibara.730bb1e4.mjs.map +1 -0
  46. package/dist/types/index.d.mts +1 -1
  47. package/dist/types/index.d.ts +1 -1
  48. package/dist/types/index.mjs +1 -0
  49. package/dist/types/index.mjs.map +1 -0
  50. package/package.json +24 -4
  51. package/src/cli/commands/add.ts +1 -1
  52. package/src/cli/commands/build.ts +1 -1
  53. package/src/cli/commands/dev.ts +11 -10
  54. package/src/cli/commands/init.ts +1 -1
  55. package/src/cli/commands/prepare.ts +1 -2
  56. package/src/cli/commands/start.ts +4 -2
  57. package/src/cli/commands/write-project-info.ts +1 -1
  58. package/src/common/constants.ts +6 -0
  59. package/src/common/helper.ts +86 -0
  60. package/src/common/index.ts +3 -0
  61. package/src/core/apibara.ts +2 -2
  62. package/src/core/build/dev.ts +2 -0
  63. package/src/core/config/loader.ts +3 -1
  64. package/src/core/config/resolvers/runtime.resolver.ts +44 -0
  65. package/src/core/config/update.ts +6 -2
  66. package/src/create/constants.ts +0 -1
  67. package/src/create/templates.ts +2 -3
  68. package/src/hooks/useRuntimeConfig.ts +4 -1
  69. package/src/indexer/index.ts +1 -0
  70. package/src/indexer/plugins.ts +1 -0
  71. package/src/indexer/testing.ts +1 -0
  72. package/src/indexer/vcr.ts +1 -0
  73. package/src/rolldown/config.ts +2 -28
  74. package/src/rolldown/plugins/static-config.ts +21 -0
  75. package/src/runtime/dev.ts +10 -6
  76. package/src/runtime/internal/app.ts +19 -14
  77. package/src/runtime/project-info.ts +21 -3
  78. package/src/runtime/start.ts +48 -4
  79. package/src/types/config.ts +4 -1
  80. package/src/types/virtual/static-config.d.ts +4 -0
  81. package/dist/runtime/internal/helper.d.ts +0 -12
  82. package/dist/runtime/internal/helper.mjs +0 -33
  83. package/dist/shared/apibara.63c9a277.mjs +0 -29
  84. package/src/core/config/resolvers/preset.resolver.ts +0 -12
  85. package/src/rolldown/plugins/config.ts +0 -17
  86. package/src/runtime/internal/helper.ts +0 -55
  87. package/src/types/virtual/config.d.ts +0 -6
  88. /package/src/{cli/common.ts → common/cli.ts} +0 -0
@@ -1,7 +1,6 @@
1
+ import { checkForUnknownArgs } from 'apibara/common';
1
2
  import { addIndexer } from 'apibara/create';
2
3
  import { defineCommand } from 'citty';
3
- import { a as checkForUnknownArgs } from '../shared/apibara.63c9a277.mjs';
4
- import 'consola';
5
4
 
6
5
  const add = defineCommand({
7
6
  meta: {
@@ -50,3 +49,4 @@ const add = defineCommand({
50
49
  });
51
50
 
52
51
  export { add as default };
52
+ //# sourceMappingURL=add.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.mjs","sources":["../../src/cli/commands/add.ts"],"sourcesContent":["import { checkForUnknownArgs } from \"apibara/common\";\nimport { addIndexer } from \"apibara/create\";\nimport { defineCommand } from \"citty\";\n\nexport default defineCommand({\n meta: {\n name: \"add\",\n description:\n \"apibara add helps you add a new indexer to your project with sensible defaults.\",\n },\n args: {\n indexerId: {\n type: \"positional\",\n description: \"Indexer ID - must be in kebab-case\",\n required: false,\n },\n chain: {\n type: \"string\",\n description: \"Blockchain - ethereum, beaconchain, starknet\",\n },\n network: {\n type: \"string\",\n description: \"Network - mainnet, sepolia, other\",\n },\n storage: {\n type: \"string\",\n description: \"Storage - postgres, none\",\n },\n dnaUrl: {\n type: \"string\",\n description: \"DNA URL - https://custom-dna-url.apibara.org\",\n },\n dir: {\n type: \"string\",\n description:\n \"Root directory - apibara project root where apibara.config is located | default: current working directory\",\n },\n },\n async run({ args, cmd }) {\n await checkForUnknownArgs(args, cmd);\n\n const { indexerId, chain, network, storage, dnaUrl, dir } = args;\n\n await addIndexer({\n argIndexerId: indexerId,\n argChain: chain,\n argNetwork: network,\n argStorage: storage,\n argDnaUrl: dnaUrl,\n argRootDir: dir,\n });\n },\n});\n"],"names":[],"mappings":";;;;AAIA,YAAe,aAAc,CAAA;AAAA,EAC3B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,KAAA;AAAA,IACN,WACE,EAAA,iFAAA;AAAA,GACJ;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,YAAA;AAAA,MACN,WAAa,EAAA,oCAAA;AAAA,MACb,QAAU,EAAA,KAAA;AAAA,KACZ;AAAA,IACA,KAAO,EAAA;AAAA,MACL,IAAM,EAAA,QAAA;AAAA,MACN,WAAa,EAAA,8CAAA;AAAA,KACf;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,WAAa,EAAA,mCAAA;AAAA,KACf;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,WAAa,EAAA,0BAAA;AAAA,KACf;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,QAAA;AAAA,MACN,WAAa,EAAA,8CAAA;AAAA,KACf;AAAA,IACA,GAAK,EAAA;AAAA,MACH,IAAM,EAAA,QAAA;AAAA,MACN,WACE,EAAA,4GAAA;AAAA,KACJ;AAAA,GACF;AAAA,EACA,MAAM,GAAA,CAAI,EAAE,IAAA,EAAM,KAAO,EAAA;AACvB,IAAM,MAAA,mBAAA,CAAoB,MAAM,GAAG,CAAA,CAAA;AAEnC,IAAA,MAAM,EAAE,SAAW,EAAA,KAAA,EAAO,SAAS,OAAS,EAAA,MAAA,EAAQ,KAAQ,GAAA,IAAA,CAAA;AAE5D,IAAA,MAAM,UAAW,CAAA;AAAA,MACf,YAAc,EAAA,SAAA;AAAA,MACd,QAAU,EAAA,KAAA;AAAA,MACV,UAAY,EAAA,OAAA;AAAA,MACZ,UAAY,EAAA,OAAA;AAAA,MACZ,SAAW,EAAA,MAAA;AAAA,MACX,UAAY,EAAA,GAAA;AAAA,KACb,CAAA,CAAA;AAAA,GACH;AACF,CAAC,CAAA;;;;"}
@@ -1,9 +1,8 @@
1
+ import { commonArgs, checkForUnknownArgs } from 'apibara/common';
1
2
  import { createApibara, prepare, writeTypes, build as build$1 } from 'apibara/core';
2
3
  import { runtimeDir } from 'apibara/runtime/meta';
3
4
  import { defineCommand } from 'citty';
4
5
  import { resolve, join } from 'pathe';
5
- import { c as commonArgs, a as checkForUnknownArgs } from '../shared/apibara.63c9a277.mjs';
6
- import 'consola';
7
6
 
8
7
  const build = defineCommand({
9
8
  meta: {
@@ -28,3 +27,4 @@ const build = defineCommand({
28
27
  });
29
28
 
30
29
  export { build as default };
30
+ //# sourceMappingURL=build.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.mjs","sources":["../../src/cli/commands/build.ts"],"sourcesContent":["import { checkForUnknownArgs, commonArgs } from \"apibara/common\";\nimport { build, createApibara, prepare, writeTypes } from \"apibara/core\";\nimport { runtimeDir } from \"apibara/runtime/meta\";\nimport { defineCommand } from \"citty\";\nimport { join, resolve } from \"pathe\";\n\nexport default defineCommand({\n meta: {\n name: \"build\",\n description: \"Build indexer\",\n },\n args: {\n ...commonArgs,\n },\n async run({ args, cmd }) {\n await checkForUnknownArgs(args, cmd);\n\n const rootDir = resolve((args.dir || args._dir || \".\") as string);\n\n const apibara = await createApibara({\n rootDir,\n });\n\n apibara.options.entry = join(runtimeDir, \"start.mjs\");\n\n await prepare(apibara);\n await writeTypes(apibara);\n await build(apibara);\n await apibara.close();\n },\n});\n"],"names":["build"],"mappings":";;;;;;AAMA,cAAe,aAAc,CAAA;AAAA,EAC3B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,OAAA;AAAA,IACN,WAAa,EAAA,eAAA;AAAA,GACf;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,GAAG,UAAA;AAAA,GACL;AAAA,EACA,MAAM,GAAA,CAAI,EAAE,IAAA,EAAM,KAAO,EAAA;AACvB,IAAM,MAAA,mBAAA,CAAoB,MAAM,GAAG,CAAA,CAAA;AAEnC,IAAA,MAAM,UAAU,OAAS,CAAA,IAAA,CAAK,GAAO,IAAA,IAAA,CAAK,QAAQ,GAAc,CAAA,CAAA;AAEhE,IAAM,MAAA,OAAA,GAAU,MAAM,aAAc,CAAA;AAAA,MAClC,OAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA,GAAQ,IAAK,CAAA,UAAA,EAAY,WAAW,CAAA,CAAA;AAEpD,IAAA,MAAM,QAAQ,OAAO,CAAA,CAAA;AACrB,IAAA,MAAM,WAAW,OAAO,CAAA,CAAA;AACxB,IAAA,MAAMA,QAAM,OAAO,CAAA,CAAA;AACnB,IAAA,MAAM,QAAQ,KAAM,EAAA,CAAA;AAAA,GACtB;AACF,CAAC,CAAA;;;;"}
@@ -1,15 +1,14 @@
1
1
  import { spawn } from 'node:child_process';
2
+ import { commonArgs, checkForUnknownArgs } from 'apibara/common';
2
3
  import { createApibara, prepare, writeTypes, build } from 'apibara/core';
3
4
  import { runtimeDir } from 'apibara/runtime/meta';
4
5
  import { defineCommand } from 'citty';
5
6
  import { colors } from 'consola/utils';
6
7
  import { resolve, join } from 'pathe';
7
8
  import { b as blueBright, g as gray } from '../shared/apibara.730bb1e4.mjs';
8
- import { c as commonArgs, a as checkForUnknownArgs } from '../shared/apibara.63c9a277.mjs';
9
9
  import 'picocolors';
10
- import 'consola';
11
10
 
12
- const hmrKeyRe = /^runtimeConfig\./;
11
+ const hmrKeyRe = /^(runtimeConfig\.|presets\.|preset$)/;
13
12
  const dev = defineCommand({
14
13
  meta: {
15
14
  name: "dev",
@@ -64,16 +63,21 @@ const dev = defineCommand({
64
63
  return;
65
64
  }
66
65
  apibara.logger.info(
67
- `Config updated:
68
- ${diff.map((entry) => ` ${entry.toString()}`).join("\n")}`
66
+ `Config updated:
67
+ ${diff.map((entry) => ` ${entry.toString()}`).join("\n")}`
69
68
  );
70
- await (diff.every((e) => hmrKeyRe.test(e.key)) ? apibara.updateConfig(newConfig.config || {}) : reload());
69
+ await (diff.every((e) => hmrKeyRe.test(e.key)) ? (
70
+ // in hot reload we only update the runtime values & restart indexers,no build step, apibara instance remains the same
71
+ apibara.updateConfig(newConfig.config || {})
72
+ ) : reload());
71
73
  }
72
74
  }
73
75
  },
74
76
  true
75
77
  );
76
- apibara.hooks.hookOnce("restart", reload);
78
+ apibara.hooks.hookOnce("restart", async () => {
79
+ await reload();
80
+ });
77
81
  apibara.options.entry = join(runtimeDir, "dev.mjs");
78
82
  await prepare(apibara);
79
83
  await writeTypes(apibara);
@@ -87,9 +91,9 @@ const dev = defineCommand({
87
91
  });
88
92
  apibara.hooks.hook("dev:reload", async () => {
89
93
  if (childProcess) {
90
- apibara.logger.info("Restarting indexers");
91
94
  await killProcess(childProcess);
92
95
  childProcess = void 0;
96
+ apibara.logger.info("Restarting indexers");
93
97
  } else {
94
98
  apibara.logger.info("Starting indexers");
95
99
  const indexersText = apibara.indexers.map(
@@ -100,8 +104,7 @@ const dev = defineCommand({
100
104
  const childArgs = [
101
105
  resolve(apibara.options.outputDir || "./.apibara/build", "dev.mjs"),
102
106
  "start",
103
- ...args.indexers ? ["--indexers", args.indexers] : [],
104
- ...args.preset ? ["--preset", args.preset] : []
107
+ ...args.indexers ? ["--indexers", args.indexers] : []
105
108
  ];
106
109
  childProcess = spawn("node", childArgs, {
107
110
  stdio: "inherit"
@@ -109,7 +112,7 @@ const dev = defineCommand({
109
112
  childProcess.on("close", (code, signal) => {
110
113
  childProcess = void 0;
111
114
  console.log();
112
- apibara.logger.log(
115
+ apibara.logger.info(
113
116
  `Indexers process exited${code !== null ? ` with code ${colors.red(code)}` : ""}`
114
117
  );
115
118
  });
@@ -128,3 +131,4 @@ async function killProcess(childProcess) {
128
131
  }
129
132
 
130
133
  export { dev as default };
134
+ //# sourceMappingURL=dev.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.mjs","sources":["../../src/cli/commands/dev.ts"],"sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport { checkForUnknownArgs, commonArgs } from \"apibara/common\";\nimport { build, createApibara, prepare, writeTypes } from \"apibara/core\";\nimport { runtimeDir } from \"apibara/runtime/meta\";\nimport type { Apibara } from \"apibara/types\";\nimport { defineCommand } from \"citty\";\nimport { colors } from \"consola/utils\";\nimport { join, resolve } from \"pathe\";\nimport { blueBright, gray } from \"../../create/colors\";\n\n// Hot module reloading key regex\n// for only runtimeConfig.*, presets.* keys & preset key\nconst hmrKeyRe = /^(runtimeConfig\\.|presets\\.|preset$)/;\n\nexport default defineCommand({\n meta: {\n name: \"dev\",\n description: \"Start the development server\",\n },\n args: {\n ...commonArgs,\n indexers: {\n type: \"string\",\n description: \"Comma-separated list of indexers to run\",\n },\n preset: {\n type: \"string\",\n description: \"Preset to use\",\n },\n \"always-reindex\": {\n type: \"boolean\",\n default: false,\n description:\n \"Reindex the indexers from the starting block on every restart | default: `false`\",\n },\n },\n async run({ args, data, cmd, rawArgs }) {\n await checkForUnknownArgs(args, cmd);\n\n const rootDir = resolve((args.dir || args._dir || \".\") as string);\n\n if (args[\"always-reindex\"]) {\n process.env.APIBARA_ALWAYS_REINDEX = \"true\";\n }\n\n const selectedIndexers = new Set(\n args.indexers\n ?.split(\",\")\n .map((i) => i.trim())\n .sort() ?? [],\n );\n\n let apibara: Apibara;\n let childProcess: ChildProcess | undefined;\n\n const reload = async () => {\n if (apibara) {\n apibara.logger.info(\"Restarting dev server\");\n if (\"unwatch\" in apibara.options._c12) {\n await apibara.options._c12.unwatch();\n }\n\n await apibara.close();\n }\n\n apibara = await createApibara(\n {\n rootDir,\n preset: args.preset,\n },\n {\n watch: true,\n c12: {\n async onUpdate({ getDiff, newConfig }) {\n const diff = getDiff();\n\n if (diff.length === 0) {\n return; // No changes\n }\n\n apibara.logger.info(\n `Config updated: \\n${diff.map((entry) => ` ${entry.toString()}`).join(\"\\n\")}`,\n );\n\n await (diff.every((e) => hmrKeyRe.test(e.key))\n ? // in hot reload we only update the runtime values & restart indexers,no build step, apibara instance remains the same\n apibara.updateConfig(newConfig.config || {}) // Hot reload\n : reload()); // Full reload\n },\n },\n },\n true,\n );\n\n apibara.hooks.hookOnce(\"restart\", async () => {\n await reload();\n });\n\n apibara.options.entry = join(runtimeDir, \"dev.mjs\");\n\n await prepare(apibara);\n await writeTypes(apibara);\n await build(apibara);\n\n apibara.hooks.hook(\"dev:restart\", async () => {\n if (childProcess) {\n apibara.logger.info(\"Change detected, stopping indexers to restart\");\n await killProcess(childProcess);\n childProcess = undefined;\n }\n });\n\n apibara.hooks.hook(\"dev:reload\", async () => {\n if (childProcess) {\n await killProcess(childProcess);\n childProcess = undefined;\n apibara.logger.info(\"Restarting indexers\");\n } else {\n apibara.logger.info(\"Starting indexers\");\n\n const indexersText = apibara.indexers\n .map((i) =>\n selectedIndexers.has(i.name) || selectedIndexers.size === 0\n ? blueBright(i.name)\n : gray(i.name),\n )\n .join(\", \");\n apibara.logger.info(\"Indexers:\", indexersText);\n }\n\n const childArgs = [\n resolve(apibara.options.outputDir || \"./.apibara/build\", \"dev.mjs\"),\n \"start\",\n ...(args.indexers ? [\"--indexers\", args.indexers] : []),\n ];\n\n childProcess = spawn(\"node\", childArgs, {\n stdio: \"inherit\",\n });\n\n childProcess.on(\"close\", (code, signal) => {\n childProcess = undefined;\n console.log();\n apibara.logger.info(\n `Indexers process exited${\n code !== null ? ` with code ${colors.red(code)}` : \"\"\n }`,\n );\n });\n });\n };\n\n await reload();\n },\n});\n\nasync function killProcess(childProcess: ChildProcess | undefined) {\n if (childProcess) {\n await new Promise((resolve) => {\n childProcess.once(\"exit\", resolve);\n childProcess.kill();\n });\n }\n}\n"],"names":["resolve"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
+ import { checkForUnknownArgs } from 'apibara/common';
1
2
  import { initializeProject } from 'apibara/create';
2
3
  import { defineCommand } from 'citty';
3
- import { a as checkForUnknownArgs } from '../shared/apibara.63c9a277.mjs';
4
- import 'consola';
5
4
 
6
5
  const init = defineCommand({
7
6
  meta: {
@@ -39,3 +38,4 @@ const init = defineCommand({
39
38
  });
40
39
 
41
40
  export { init as default };
41
+ //# sourceMappingURL=init.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.mjs","sources":["../../src/cli/commands/init.ts"],"sourcesContent":["import { checkForUnknownArgs } from \"apibara/common\";\nimport { initializeProject } from \"apibara/create\";\nimport { defineCommand } from \"citty\";\n\nexport default defineCommand({\n meta: {\n name: \"init\",\n description: \"Initialize a new Apibara project\",\n },\n args: {\n dir: {\n type: \"positional\",\n description: \"Target path to initialize the project\",\n required: true,\n },\n language: {\n type: \"string\",\n description:\n \"Language to use: typescript, ts or javascript, js | default: `ts`\",\n default: \"ts\",\n alias: \"l\",\n },\n \"create-indexer\": {\n type: \"boolean\",\n name: \"create-indexer\",\n default: true,\n description: \"TODO\",\n },\n },\n async run({ args, cmd }) {\n await checkForUnknownArgs(args, cmd);\n\n const { dir: targetDir, \"create-indexer\": createIndexer, language } = args;\n\n await initializeProject({\n argTargetDir: targetDir,\n argLanguage: language,\n argNoCreateIndexer: !createIndexer,\n });\n },\n});\n"],"names":[],"mappings":";;;;AAIA,aAAe,aAAc,CAAA;AAAA,EAC3B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,WAAa,EAAA,kCAAA;AAAA,GACf;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,GAAK,EAAA;AAAA,MACH,IAAM,EAAA,YAAA;AAAA,MACN,WAAa,EAAA,uCAAA;AAAA,MACb,QAAU,EAAA,IAAA;AAAA,KACZ;AAAA,IACA,QAAU,EAAA;AAAA,MACR,IAAM,EAAA,QAAA;AAAA,MACN,WACE,EAAA,mEAAA;AAAA,MACF,OAAS,EAAA,IAAA;AAAA,MACT,KAAO,EAAA,GAAA;AAAA,KACT;AAAA,IACA,gBAAkB,EAAA;AAAA,MAChB,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,gBAAA;AAAA,MACN,OAAS,EAAA,IAAA;AAAA,MACT,WAAa,EAAA,MAAA;AAAA,KACf;AAAA,GACF;AAAA,EACA,MAAM,GAAA,CAAI,EAAE,IAAA,EAAM,KAAO,EAAA;AACvB,IAAM,MAAA,mBAAA,CAAoB,MAAM,GAAG,CAAA,CAAA;AAEnC,IAAA,MAAM,EAAE,GAAK,EAAA,SAAA,EAAW,gBAAkB,EAAA,aAAA,EAAe,UAAa,GAAA,IAAA,CAAA;AAEtE,IAAA,MAAM,iBAAkB,CAAA;AAAA,MACtB,YAAc,EAAA,SAAA;AAAA,MACd,WAAa,EAAA,QAAA;AAAA,MACb,oBAAoB,CAAC,aAAA;AAAA,KACtB,CAAA,CAAA;AAAA,GACH;AACF,CAAC,CAAA;;;;"}
@@ -1,8 +1,7 @@
1
+ import { commonArgs, checkForUnknownArgs } from 'apibara/common';
1
2
  import { createApibara, writeTypes } from 'apibara/core';
2
3
  import { defineCommand } from 'citty';
3
4
  import { resolve } from 'pathe';
4
- import { c as commonArgs, a as checkForUnknownArgs } from '../shared/apibara.63c9a277.mjs';
5
- import 'consola';
6
5
 
7
6
  const prepare = defineCommand({
8
7
  meta: {
@@ -21,3 +20,4 @@ const prepare = defineCommand({
21
20
  });
22
21
 
23
22
  export { prepare as default };
23
+ //# sourceMappingURL=prepare.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare.mjs","sources":["../../src/cli/commands/prepare.ts"],"sourcesContent":["import { checkForUnknownArgs, commonArgs } from \"apibara/common\";\nimport { createApibara, writeTypes } from \"apibara/core\";\nimport { defineCommand } from \"citty\";\nimport { resolve } from \"pathe\";\n\nexport default defineCommand({\n meta: {\n name: \"prepare\",\n description: \"Generate types for the project\",\n },\n args: {\n ...commonArgs,\n },\n async run({ args, cmd }) {\n await checkForUnknownArgs(args, cmd);\n\n const rootDir = resolve((args.dir || \".\") as string);\n const apibara = await createApibara({ rootDir });\n await writeTypes(apibara);\n },\n});\n"],"names":[],"mappings":";;;;;AAKA,gBAAe,aAAc,CAAA;AAAA,EAC3B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,SAAA;AAAA,IACN,WAAa,EAAA,gCAAA;AAAA,GACf;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,GAAG,UAAA;AAAA,GACL;AAAA,EACA,MAAM,GAAA,CAAI,EAAE,IAAA,EAAM,KAAO,EAAA;AACvB,IAAM,MAAA,mBAAA,CAAoB,MAAM,GAAG,CAAA,CAAA;AAEnC,IAAA,MAAM,OAAU,GAAA,OAAA,CAAS,IAAK,CAAA,GAAA,IAAO,GAAc,CAAA,CAAA;AACnD,IAAA,MAAM,OAAU,GAAA,MAAM,aAAc,CAAA,EAAE,SAAS,CAAA,CAAA;AAC/C,IAAA,MAAM,WAAW,OAAO,CAAA,CAAA;AAAA,GAC1B;AACF,CAAC,CAAA;;;;"}
@@ -1,11 +1,10 @@
1
1
  import { spawn } from 'node:child_process';
2
+ import { commonArgs, checkForUnknownArgs } from 'apibara/common';
2
3
  import { createApibara } from 'apibara/core';
3
4
  import { defineCommand } from 'citty';
4
5
  import { colors } from 'consola/utils';
5
6
  import fse from 'fs-extra';
6
7
  import { resolve } from 'pathe';
7
- import { c as commonArgs, a as checkForUnknownArgs } from '../shared/apibara.63c9a277.mjs';
8
- import 'consola';
9
8
 
10
9
  const start = defineCommand({
11
10
  meta: {
@@ -49,6 +48,8 @@ const start = defineCommand({
49
48
  "start",
50
49
  "--indexer",
51
50
  indexer,
51
+ // important: this is required to run the indexer with apibara cli to load runtime values correctly
52
+ "--no-standalone",
52
53
  ...preset ? ["--preset", preset] : []
53
54
  ];
54
55
  const childProcess = spawn("node", childArgs, {
@@ -56,7 +57,7 @@ const start = defineCommand({
56
57
  });
57
58
  childProcess.on("close", (code, signal) => {
58
59
  console.log();
59
- apibara.logger.log(
60
+ apibara.logger.info(
60
61
  `Indexers process exited${code !== null ? ` with code ${colors.red(code)}` : ""}`
61
62
  );
62
63
  });
@@ -64,3 +65,4 @@ const start = defineCommand({
64
65
  });
65
66
 
66
67
  export { start as default };
68
+ //# sourceMappingURL=start.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.mjs","sources":["../../src/cli/commands/start.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { checkForUnknownArgs, commonArgs } from \"apibara/common\";\nimport { createApibara } from \"apibara/core\";\nimport { defineCommand } from \"citty\";\nimport { colors } from \"consola/utils\";\nimport fse from \"fs-extra\";\nimport { resolve } from \"pathe\";\n\nexport default defineCommand({\n meta: {\n name: \"start\",\n description: \"Start one indexer\",\n },\n args: {\n ...commonArgs,\n indexer: {\n type: \"string\",\n description: \"The indexer to start\",\n required: true,\n },\n preset: {\n type: \"string\",\n description: \"The preset to use\",\n },\n },\n async run({ args, cmd }) {\n const { indexer, preset } = args;\n const rootDir = resolve((args.dir || args._dir || \".\") as string);\n\n await checkForUnknownArgs(args, cmd);\n\n const apibara = await createApibara({\n rootDir,\n preset,\n });\n\n apibara.logger.start(\n `Starting indexer ${indexer}${preset ? ` with preset ${preset}` : \"\"}`,\n );\n\n const outputDir = apibara.options.outputDir || \"./.apibara/build\";\n const entry = resolve(outputDir, \"start.mjs\");\n\n if (!fse.existsSync(entry)) {\n apibara.logger.error(\n `Output directory ${outputDir} does not exist. Try building the indexer with \"apibara build\" first.`,\n );\n return process.exit(1);\n }\n\n await apibara.close();\n\n const childArgs = [\n entry,\n \"start\",\n \"--indexer\",\n indexer,\n // important: this is required to run the indexer with apibara cli to load runtime values correctly\n \"--no-standalone\",\n ...(preset ? [\"--preset\", preset] : []),\n ];\n\n const childProcess = spawn(\"node\", childArgs, {\n stdio: \"inherit\",\n });\n\n childProcess.on(\"close\", (code, signal) => {\n console.log();\n apibara.logger.info(\n `Indexers process exited${\n code !== null ? ` with code ${colors.red(code)}` : \"\"\n }`,\n );\n });\n },\n});\n"],"names":[],"mappings":";;;;;;;;AAQA,cAAe,aAAc,CAAA;AAAA,EAC3B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,OAAA;AAAA,IACN,WAAa,EAAA,mBAAA;AAAA,GACf;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,GAAG,UAAA;AAAA,IACH,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,WAAa,EAAA,sBAAA;AAAA,MACb,QAAU,EAAA,IAAA;AAAA,KACZ;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,QAAA;AAAA,MACN,WAAa,EAAA,mBAAA;AAAA,KACf;AAAA,GACF;AAAA,EACA,MAAM,GAAA,CAAI,EAAE,IAAA,EAAM,KAAO,EAAA;AACvB,IAAM,MAAA,EAAE,OAAS,EAAA,MAAA,EAAW,GAAA,IAAA,CAAA;AAC5B,IAAA,MAAM,UAAU,OAAS,CAAA,IAAA,CAAK,GAAO,IAAA,IAAA,CAAK,QAAQ,GAAc,CAAA,CAAA;AAEhE,IAAM,MAAA,mBAAA,CAAoB,MAAM,GAAG,CAAA,CAAA;AAEnC,IAAM,MAAA,OAAA,GAAU,MAAM,aAAc,CAAA;AAAA,MAClC,OAAA;AAAA,MACA,MAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAA,OAAA,CAAQ,MAAO,CAAA,KAAA;AAAA,MACb,oBAAoB,OAAO,CAAA,EAAG,SAAS,CAAgB,aAAA,EAAA,MAAM,KAAK,EAAE,CAAA,CAAA;AAAA,KACtE,CAAA;AAEA,IAAM,MAAA,SAAA,GAAY,OAAQ,CAAA,OAAA,CAAQ,SAAa,IAAA,kBAAA,CAAA;AAC/C,IAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,SAAA,EAAW,WAAW,CAAA,CAAA;AAE5C,IAAA,IAAI,CAAC,GAAA,CAAI,UAAW,CAAA,KAAK,CAAG,EAAA;AAC1B,MAAA,OAAA,CAAQ,MAAO,CAAA,KAAA;AAAA,QACb,oBAAoB,SAAS,CAAA,qEAAA,CAAA;AAAA,OAC/B,CAAA;AACA,MAAO,OAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAAA,KACvB;AAEA,IAAA,MAAM,QAAQ,KAAM,EAAA,CAAA;AAEpB,IAAA,MAAM,SAAY,GAAA;AAAA,MAChB,KAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA;AAAA;AAAA,MAEA,iBAAA;AAAA,MACA,GAAI,MAAS,GAAA,CAAC,UAAY,EAAA,MAAM,IAAI,EAAC;AAAA,KACvC,CAAA;AAEA,IAAM,MAAA,YAAA,GAAe,KAAM,CAAA,MAAA,EAAQ,SAAW,EAAA;AAAA,MAC5C,KAAO,EAAA,SAAA;AAAA,KACR,CAAA,CAAA;AAED,IAAA,YAAA,CAAa,EAAG,CAAA,OAAA,EAAS,CAAC,IAAA,EAAM,MAAW,KAAA;AACzC,MAAA,OAAA,CAAQ,GAAI,EAAA,CAAA;AACZ,MAAA,OAAA,CAAQ,MAAO,CAAA,IAAA;AAAA,QACb,CAAA,uBAAA,EACE,SAAS,IAAO,GAAA,CAAA,WAAA,EAAc,OAAO,GAAI,CAAA,IAAI,CAAC,CAAA,CAAA,GAAK,EACrD,CAAA,CAAA;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,CAAC,CAAA;;;;"}
@@ -1,11 +1,11 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  import { join } from 'node:path';
3
+ import { commonArgs, checkForUnknownArgs } from 'apibara/common';
3
4
  import { createApibara, prepare, writeTypes, build } from 'apibara/core';
4
5
  import { runtimeDir } from 'apibara/runtime/meta';
5
6
  import { defineCommand } from 'citty';
6
7
  import consola from 'consola';
7
8
  import { resolve } from 'pathe';
8
- import { c as commonArgs, a as checkForUnknownArgs } from '../shared/apibara.63c9a277.mjs';
9
9
 
10
10
  const writeProjectInfo = defineCommand({
11
11
  meta: {
@@ -48,3 +48,4 @@ const writeProjectInfo = defineCommand({
48
48
  });
49
49
 
50
50
  export { writeProjectInfo as default };
51
+ //# sourceMappingURL=write-project-info.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-project-info.mjs","sources":["../../src/cli/commands/write-project-info.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { checkForUnknownArgs, commonArgs } from \"apibara/common\";\nimport { build, createApibara, prepare, writeTypes } from \"apibara/core\";\nimport { runtimeDir } from \"apibara/runtime/meta\";\nimport { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { resolve } from \"pathe\";\n\nexport default defineCommand({\n meta: {\n name: \"write-project-info\",\n description: \"Write json-encoded information about the project.\",\n },\n args: {\n ...commonArgs,\n },\n async run({ args, cmd }) {\n await checkForUnknownArgs(args, cmd);\n\n consola.start(\"Generating `project-info.json`\");\n\n const rootDir = resolve((args.dir || \".\") as string);\n const apibara = await createApibara({ rootDir, disableLogs: true });\n\n apibara.options.entry = join(runtimeDir, \"project-info.mjs\");\n\n await prepare(apibara);\n await writeTypes(apibara);\n await build(apibara);\n\n const childArgs = [\n resolve(\n apibara.options.outputDir || \"./.apibara/build\",\n \"project-info.mjs\",\n ),\n \"start\",\n \"--build-dir\",\n apibara.options.buildDir,\n ];\n\n const child = spawn(\"node\", childArgs, {\n stdio: \"inherit\",\n });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n consola.success(\"Project info written to `.apibara/project-info.json`\");\n }\n });\n\n child.on(\"error\", (error) => {\n consola.error(`Failed to write project info: ${error.message}`, error);\n });\n },\n});\n"],"names":[],"mappings":";;;;;;;;;AASA,yBAAe,aAAc,CAAA;AAAA,EAC3B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,oBAAA;AAAA,IACN,WAAa,EAAA,mDAAA;AAAA,GACf;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,GAAG,UAAA;AAAA,GACL;AAAA,EACA,MAAM,GAAA,CAAI,EAAE,IAAA,EAAM,KAAO,EAAA;AACvB,IAAM,MAAA,mBAAA,CAAoB,MAAM,GAAG,CAAA,CAAA;AAEnC,IAAA,OAAA,CAAQ,MAAM,gCAAgC,CAAA,CAAA;AAE9C,IAAA,MAAM,OAAU,GAAA,OAAA,CAAS,IAAK,CAAA,GAAA,IAAO,GAAc,CAAA,CAAA;AACnD,IAAA,MAAM,UAAU,MAAM,aAAA,CAAc,EAAE,OAAS,EAAA,WAAA,EAAa,MAAM,CAAA,CAAA;AAElE,IAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA,GAAQ,IAAK,CAAA,UAAA,EAAY,kBAAkB,CAAA,CAAA;AAE3D,IAAA,MAAM,QAAQ,OAAO,CAAA,CAAA;AACrB,IAAA,MAAM,WAAW,OAAO,CAAA,CAAA;AACxB,IAAA,MAAM,MAAM,OAAO,CAAA,CAAA;AAEnB,IAAA,MAAM,SAAY,GAAA;AAAA,MAChB,OAAA;AAAA,QACE,OAAA,CAAQ,QAAQ,SAAa,IAAA,kBAAA;AAAA,QAC7B,kBAAA;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MACA,aAAA;AAAA,MACA,QAAQ,OAAQ,CAAA,QAAA;AAAA,KAClB,CAAA;AAEA,IAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,EAAQ,SAAW,EAAA;AAAA,MACrC,KAAO,EAAA,SAAA;AAAA,KACR,CAAA,CAAA;AAED,IAAM,KAAA,CAAA,EAAA,CAAG,OAAS,EAAA,CAAC,IAAS,KAAA;AAC1B,MAAA,IAAI,SAAS,CAAG,EAAA;AACd,QAAA,OAAA,CAAQ,QAAQ,sDAAsD,CAAA,CAAA;AAAA,OACxE;AAAA,KACD,CAAA,CAAA;AAED,IAAM,KAAA,CAAA,EAAA,CAAG,OAAS,EAAA,CAAC,KAAU,KAAA;AAC3B,MAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,8BAAA,EAAiC,KAAM,CAAA,OAAO,IAAI,KAAK,CAAA,CAAA;AAAA,KACtE,CAAA,CAAA;AAAA,GACH;AACF,CAAC,CAAA;;;;"}
@@ -20,3 +20,4 @@ const mainCli = defineCommand({
20
20
  runMain(mainCli);
21
21
 
22
22
  export { mainCli };
23
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/cli/index.ts"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\n\nexport const mainCli = defineCommand({\n meta: {\n name: \"apibara\",\n description: \"Apibara CLI\",\n version: \"2.0.0\",\n },\n subCommands: {\n dev: () => import(\"./commands/dev\").then((r) => r.default),\n build: () => import(\"./commands/build\").then((r) => r.default),\n start: () => import(\"./commands/start\").then((r) => r.default),\n prepare: () => import(\"./commands/prepare\").then((r) => r.default),\n init: () => import(\"./commands/init\").then((r) => r.default),\n add: () => import(\"./commands/add\").then((r) => r.default),\n \"write-project-info\": () =>\n import(\"./commands/write-project-info\").then((r) => r.default),\n },\n});\n\nrunMain(mainCli);\n"],"names":[],"mappings":";;;AAEO,MAAM,UAAU,aAAc,CAAA;AAAA,EACnC,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,SAAA;AAAA,IACN,WAAa,EAAA,aAAA;AAAA,IACb,OAAS,EAAA,OAAA;AAAA,GACX;AAAA,EACA,WAAa,EAAA;AAAA,IACX,GAAA,EAAK,MAAM,OAAO,mBAAgB,EAAE,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,CAAA;AAAA,IACzD,KAAA,EAAO,MAAM,OAAO,qBAAkB,EAAE,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,CAAA;AAAA,IAC7D,KAAA,EAAO,MAAM,OAAO,qBAAkB,EAAE,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,CAAA;AAAA,IAC7D,OAAA,EAAS,MAAM,OAAO,uBAAoB,EAAE,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,CAAA;AAAA,IACjE,IAAA,EAAM,MAAM,OAAO,oBAAiB,EAAE,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,CAAA;AAAA,IAC3D,GAAA,EAAK,MAAM,OAAO,mBAAgB,EAAE,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,CAAA;AAAA,IACzD,oBAAA,EAAsB,MACpB,OAAO,kCAA+B,EAAE,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,CAAA;AAAA,GACjE;AACF,CAAC,EAAA;AAED,OAAA,CAAQ,OAAO,CAAA;;;;"}
@@ -0,0 +1,33 @@
1
+ import { ArgsDef, ParsedArgs, CommandDef } from 'citty';
2
+
3
+ declare const ENV_INTERNAL_APIBARA_RUNTIME = "_APIBARA_RUNTIME";
4
+ declare const ENV_INTERNAL_APIBARA_PRESET = "_APIBARA_PRESET";
5
+ declare const ENV_INTERNAL_APIBARA_PRESETS = "_APIBARA_PRESETS";
6
+ declare const ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME = "_APIBARA_PROCESSED_RUNTIME";
7
+ declare const USER_ENV_APIBARA_RUNTIME_CONFIG = "APIBARA_RUNTIME_CONFIG";
8
+
9
+ declare function getRuntimeDataFromEnv(): {
10
+ userEnvRuntimeConfig: Record<string, unknown> | undefined;
11
+ processedRuntimeConfig: Record<string, unknown>;
12
+ preset: string | undefined;
13
+ presets: Record<string, unknown> | undefined;
14
+ runtimeConfig: Record<string, unknown> | undefined;
15
+ };
16
+ /**
17
+ * Get the merged runtime config from the user env overrided runtime config, presets and defaults.
18
+ * Priority (Highest to lowest):
19
+ * 1. User env overrided runtime config
20
+ * 2. Preset
21
+ * 3. Defaults
22
+ */
23
+ declare function getProcessedRuntimeConfig({ preset, presets, runtimeConfig, userEnvRuntimeConfig, }: {
24
+ preset?: string;
25
+ presets?: Record<string, unknown>;
26
+ runtimeConfig?: Record<string, unknown>;
27
+ userEnvRuntimeConfig?: Record<string, unknown>;
28
+ }): Record<string, unknown>;
29
+
30
+ declare const commonArgs: ArgsDef;
31
+ declare const checkForUnknownArgs: <T extends ArgsDef = ArgsDef>(args: ParsedArgs<T>, cmd: CommandDef<T>) => Promise<void>;
32
+
33
+ export { ENV_INTERNAL_APIBARA_PRESET, ENV_INTERNAL_APIBARA_PRESETS, ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME, ENV_INTERNAL_APIBARA_RUNTIME, USER_ENV_APIBARA_RUNTIME_CONFIG, checkForUnknownArgs, commonArgs, getProcessedRuntimeConfig, getRuntimeDataFromEnv };
@@ -0,0 +1,33 @@
1
+ import { ArgsDef, ParsedArgs, CommandDef } from 'citty';
2
+
3
+ declare const ENV_INTERNAL_APIBARA_RUNTIME = "_APIBARA_RUNTIME";
4
+ declare const ENV_INTERNAL_APIBARA_PRESET = "_APIBARA_PRESET";
5
+ declare const ENV_INTERNAL_APIBARA_PRESETS = "_APIBARA_PRESETS";
6
+ declare const ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME = "_APIBARA_PROCESSED_RUNTIME";
7
+ declare const USER_ENV_APIBARA_RUNTIME_CONFIG = "APIBARA_RUNTIME_CONFIG";
8
+
9
+ declare function getRuntimeDataFromEnv(): {
10
+ userEnvRuntimeConfig: Record<string, unknown> | undefined;
11
+ processedRuntimeConfig: Record<string, unknown>;
12
+ preset: string | undefined;
13
+ presets: Record<string, unknown> | undefined;
14
+ runtimeConfig: Record<string, unknown> | undefined;
15
+ };
16
+ /**
17
+ * Get the merged runtime config from the user env overrided runtime config, presets and defaults.
18
+ * Priority (Highest to lowest):
19
+ * 1. User env overrided runtime config
20
+ * 2. Preset
21
+ * 3. Defaults
22
+ */
23
+ declare function getProcessedRuntimeConfig({ preset, presets, runtimeConfig, userEnvRuntimeConfig, }: {
24
+ preset?: string;
25
+ presets?: Record<string, unknown>;
26
+ runtimeConfig?: Record<string, unknown>;
27
+ userEnvRuntimeConfig?: Record<string, unknown>;
28
+ }): Record<string, unknown>;
29
+
30
+ declare const commonArgs: ArgsDef;
31
+ declare const checkForUnknownArgs: <T extends ArgsDef = ArgsDef>(args: ParsedArgs<T>, cmd: CommandDef<T>) => Promise<void>;
32
+
33
+ export { ENV_INTERNAL_APIBARA_PRESET, ENV_INTERNAL_APIBARA_PRESETS, ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME, ENV_INTERNAL_APIBARA_RUNTIME, USER_ENV_APIBARA_RUNTIME_CONFIG, checkForUnknownArgs, commonArgs, getProcessedRuntimeConfig, getRuntimeDataFromEnv };
@@ -0,0 +1,91 @@
1
+ import defu from 'defu';
2
+ import { renderUsage } from 'citty';
3
+ import consola from 'consola';
4
+
5
+ const ENV_INTERNAL_APIBARA_RUNTIME = "_APIBARA_RUNTIME";
6
+ const ENV_INTERNAL_APIBARA_PRESET = "_APIBARA_PRESET";
7
+ const ENV_INTERNAL_APIBARA_PRESETS = "_APIBARA_PRESETS";
8
+ const ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME = "_APIBARA_PROCESSED_RUNTIME";
9
+ const USER_ENV_APIBARA_RUNTIME_CONFIG = "APIBARA_RUNTIME_CONFIG";
10
+
11
+ function getRuntimeDataFromEnv() {
12
+ const processedRuntimeConfig = JSON.parse(
13
+ process.env[ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME] ?? "{}"
14
+ );
15
+ const preset = process.env[ENV_INTERNAL_APIBARA_PRESET];
16
+ const presets = JSON.parse(
17
+ process.env[ENV_INTERNAL_APIBARA_PRESETS] ?? "{}"
18
+ );
19
+ const runtimeConfig = JSON.parse(
20
+ process.env[ENV_INTERNAL_APIBARA_RUNTIME] ?? "{}"
21
+ );
22
+ const userEnvRuntimeConfig = JSON.parse(
23
+ process.env[USER_ENV_APIBARA_RUNTIME_CONFIG] ?? "{}"
24
+ );
25
+ return {
26
+ userEnvRuntimeConfig,
27
+ processedRuntimeConfig,
28
+ preset,
29
+ presets,
30
+ runtimeConfig
31
+ };
32
+ }
33
+ function getProcessedRuntimeConfig({
34
+ preset,
35
+ presets,
36
+ runtimeConfig,
37
+ userEnvRuntimeConfig
38
+ }) {
39
+ let _runtimeConfig = { ...runtimeConfig };
40
+ if (preset) {
41
+ if (presets === void 0) {
42
+ throw new Error(
43
+ `Specified preset "${preset}" but no presets were defined`
44
+ );
45
+ }
46
+ if (presets[preset] === void 0) {
47
+ throw new Error(`Specified preset "${preset}" but it was not defined`);
48
+ }
49
+ const presetValue = presets[preset];
50
+ _runtimeConfig = defu(presetValue.runtimeConfig, _runtimeConfig);
51
+ }
52
+ if (userEnvRuntimeConfig) {
53
+ try {
54
+ _runtimeConfig = defu(userEnvRuntimeConfig, _runtimeConfig);
55
+ } catch (error) {
56
+ throw new Error(
57
+ "Failed to parse runtime config from process.env.APIBARA_RUNTIME_CONFIG. Please ensure it is a valid JSON string.",
58
+ { cause: error }
59
+ );
60
+ }
61
+ }
62
+ return _runtimeConfig;
63
+ }
64
+
65
+ const commonArgs = {
66
+ dir: {
67
+ type: "string",
68
+ description: "project root directory"
69
+ }
70
+ };
71
+ const checkForUnknownArgs = async (args, cmd) => {
72
+ const definedArgs = [];
73
+ if (cmd.args) {
74
+ for (const [argName, argDef] of Object.entries(cmd.args)) {
75
+ definedArgs.push(argName);
76
+ if (argDef.alias) {
77
+ definedArgs.push(argDef.alias);
78
+ }
79
+ }
80
+ }
81
+ const providedArgs = Object.keys(args).filter((arg) => arg !== "_");
82
+ const wrongArgs = providedArgs.filter((arg) => !definedArgs.includes(arg));
83
+ if (wrongArgs.length > 0) {
84
+ consola.error(`Unknown arguments: ${wrongArgs.join(", ")}`);
85
+ consola.info(await renderUsage(cmd));
86
+ process.exit(1);
87
+ }
88
+ };
89
+
90
+ export { ENV_INTERNAL_APIBARA_PRESET, ENV_INTERNAL_APIBARA_PRESETS, ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME, ENV_INTERNAL_APIBARA_RUNTIME, USER_ENV_APIBARA_RUNTIME_CONFIG, checkForUnknownArgs, commonArgs, getProcessedRuntimeConfig, getRuntimeDataFromEnv };
91
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/common/constants.ts","../../src/common/helper.ts","../../src/common/cli.ts"],"sourcesContent":["export const ENV_INTERNAL_APIBARA_RUNTIME = \"_APIBARA_RUNTIME\";\nexport const ENV_INTERNAL_APIBARA_PRESET = \"_APIBARA_PRESET\";\nexport const ENV_INTERNAL_APIBARA_PRESETS = \"_APIBARA_PRESETS\";\nexport const ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME =\n \"_APIBARA_PROCESSED_RUNTIME\";\nexport const USER_ENV_APIBARA_RUNTIME_CONFIG = \"APIBARA_RUNTIME_CONFIG\";\n","import defu from \"defu\";\nimport {\n ENV_INTERNAL_APIBARA_PRESET,\n ENV_INTERNAL_APIBARA_PRESETS,\n ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME,\n ENV_INTERNAL_APIBARA_RUNTIME,\n USER_ENV_APIBARA_RUNTIME_CONFIG,\n} from \"./constants\";\n\nexport function getRuntimeDataFromEnv() {\n const processedRuntimeConfig: Record<string, unknown> = JSON.parse(\n process.env[ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME] ?? \"{}\",\n );\n const preset: string | undefined = process.env[ENV_INTERNAL_APIBARA_PRESET];\n const presets: Record<string, unknown> | undefined = JSON.parse(\n process.env[ENV_INTERNAL_APIBARA_PRESETS] ?? \"{}\",\n );\n const runtimeConfig: Record<string, unknown> | undefined = JSON.parse(\n process.env[ENV_INTERNAL_APIBARA_RUNTIME] ?? \"{}\",\n );\n const userEnvRuntimeConfig: Record<string, unknown> | undefined = JSON.parse(\n process.env[USER_ENV_APIBARA_RUNTIME_CONFIG] ?? \"{}\",\n );\n\n return {\n userEnvRuntimeConfig,\n processedRuntimeConfig,\n preset,\n presets,\n runtimeConfig,\n };\n}\n\n/**\n * Get the merged runtime config from the user env overrided runtime config, presets and defaults.\n * Priority (Highest to lowest):\n * 1. User env overrided runtime config\n * 2. Preset\n * 3. Defaults\n */\nexport function getProcessedRuntimeConfig({\n preset,\n presets,\n runtimeConfig,\n userEnvRuntimeConfig,\n}: {\n preset?: string;\n presets?: Record<string, unknown>;\n runtimeConfig?: Record<string, unknown>;\n userEnvRuntimeConfig?: Record<string, unknown>;\n}) {\n let _runtimeConfig: Record<string, unknown> = { ...runtimeConfig };\n\n if (preset) {\n if (presets === undefined) {\n throw new Error(\n `Specified preset \"${preset}\" but no presets were defined`,\n );\n }\n\n if (presets[preset] === undefined) {\n throw new Error(`Specified preset \"${preset}\" but it was not defined`);\n }\n\n const presetValue = presets[preset] as {\n runtimeConfig: Record<string, unknown>;\n };\n\n // Preset applied\n _runtimeConfig = defu(presetValue.runtimeConfig, _runtimeConfig);\n }\n\n if (userEnvRuntimeConfig) {\n try {\n // Environment runtime config applied\n _runtimeConfig = defu(userEnvRuntimeConfig, _runtimeConfig);\n } catch (error) {\n throw new Error(\n \"Failed to parse runtime config from process.env.APIBARA_RUNTIME_CONFIG. Please ensure it is a valid JSON string.\",\n { cause: error },\n );\n }\n }\n\n return _runtimeConfig;\n}\n","import {\n type ArgsDef,\n type CommandDef,\n type ParsedArgs,\n renderUsage,\n} from \"citty\";\nimport consola from \"consola\";\n\nexport const commonArgs = <ArgsDef>{\n dir: {\n type: \"string\",\n description: \"project root directory\",\n },\n};\n\nexport const checkForUnknownArgs = async <T extends ArgsDef = ArgsDef>(\n args: ParsedArgs<T>,\n cmd: CommandDef<T>,\n) => {\n // Create a list of defined args including both the main arg names and their aliases\n const definedArgs: string[] = [];\n if (cmd.args) {\n for (const [argName, argDef] of Object.entries(cmd.args)) {\n definedArgs.push(argName);\n // Add alias to definedArgs if it exists\n if (argDef.alias) {\n definedArgs.push(argDef.alias);\n }\n }\n }\n\n const providedArgs = Object.keys(args).filter((arg) => arg !== \"_\");\n const wrongArgs = providedArgs.filter((arg) => !definedArgs.includes(arg));\n\n if (wrongArgs.length > 0) {\n consola.error(`Unknown arguments: ${wrongArgs.join(\", \")}`);\n consola.info(await renderUsage(cmd));\n process.exit(1);\n }\n};\n"],"names":[],"mappings":";;;;AAAO,MAAM,4BAA+B,GAAA,mBAAA;AACrC,MAAM,2BAA8B,GAAA,kBAAA;AACpC,MAAM,4BAA+B,GAAA,mBAAA;AACrC,MAAM,sCACX,GAAA,6BAAA;AACK,MAAM,+BAAkC,GAAA;;ACIxC,SAAS,qBAAwB,GAAA;AACtC,EAAA,MAAM,yBAAkD,IAAK,CAAA,KAAA;AAAA,IAC3D,OAAA,CAAQ,GAAI,CAAA,sCAAsC,CAAK,IAAA,IAAA;AAAA,GACzD,CAAA;AACA,EAAM,MAAA,MAAA,GAA6B,OAAQ,CAAA,GAAA,CAAI,2BAA2B,CAAA,CAAA;AAC1E,EAAA,MAAM,UAA+C,IAAK,CAAA,KAAA;AAAA,IACxD,OAAA,CAAQ,GAAI,CAAA,4BAA4B,CAAK,IAAA,IAAA;AAAA,GAC/C,CAAA;AACA,EAAA,MAAM,gBAAqD,IAAK,CAAA,KAAA;AAAA,IAC9D,OAAA,CAAQ,GAAI,CAAA,4BAA4B,CAAK,IAAA,IAAA;AAAA,GAC/C,CAAA;AACA,EAAA,MAAM,uBAA4D,IAAK,CAAA,KAAA;AAAA,IACrE,OAAA,CAAQ,GAAI,CAAA,+BAA+B,CAAK,IAAA,IAAA;AAAA,GAClD,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,oBAAA;AAAA,IACA,sBAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AACF,CAAA;AASO,SAAS,yBAA0B,CAAA;AAAA,EACxC,MAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,oBAAA;AACF,CAKG,EAAA;AACD,EAAI,IAAA,cAAA,GAA0C,EAAE,GAAG,aAAc,EAAA,CAAA;AAEjE,EAAA,IAAI,MAAQ,EAAA;AACV,IAAA,IAAI,YAAY,KAAW,CAAA,EAAA;AACzB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,qBAAqB,MAAM,CAAA,6BAAA,CAAA;AAAA,OAC7B,CAAA;AAAA,KACF;AAEA,IAAI,IAAA,OAAA,CAAQ,MAAM,CAAA,KAAM,KAAW,CAAA,EAAA;AACjC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAqB,kBAAA,EAAA,MAAM,CAA0B,wBAAA,CAAA,CAAA,CAAA;AAAA,KACvE;AAEA,IAAM,MAAA,WAAA,GAAc,QAAQ,MAAM,CAAA,CAAA;AAKlC,IAAiB,cAAA,GAAA,IAAA,CAAK,WAAY,CAAA,aAAA,EAAe,cAAc,CAAA,CAAA;AAAA,GACjE;AAEA,EAAA,IAAI,oBAAsB,EAAA;AACxB,IAAI,IAAA;AAEF,MAAiB,cAAA,GAAA,IAAA,CAAK,sBAAsB,cAAc,CAAA,CAAA;AAAA,aACnD,KAAO,EAAA;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,kHAAA;AAAA,QACA,EAAE,OAAO,KAAM,EAAA;AAAA,OACjB,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,cAAA,CAAA;AACT;;AC7EO,MAAM,UAAsB,GAAA;AAAA,EACjC,GAAK,EAAA;AAAA,IACH,IAAM,EAAA,QAAA;AAAA,IACN,WAAa,EAAA,wBAAA;AAAA,GACf;AACF,EAAA;AAEa,MAAA,mBAAA,GAAsB,OACjC,IAAA,EACA,GACG,KAAA;AAEH,EAAA,MAAM,cAAwB,EAAC,CAAA;AAC/B,EAAA,IAAI,IAAI,IAAM,EAAA;AACZ,IAAW,KAAA,MAAA,CAAC,SAAS,MAAM,CAAA,IAAK,OAAO,OAAQ,CAAA,GAAA,CAAI,IAAI,CAAG,EAAA;AACxD,MAAA,WAAA,CAAY,KAAK,OAAO,CAAA,CAAA;AAExB,MAAA,IAAI,OAAO,KAAO,EAAA;AAChB,QAAY,WAAA,CAAA,IAAA,CAAK,OAAO,KAAK,CAAA,CAAA;AAAA,OAC/B;AAAA,KACF;AAAA,GACF;AAEA,EAAM,MAAA,YAAA,GAAe,OAAO,IAAK,CAAA,IAAI,EAAE,MAAO,CAAA,CAAC,GAAQ,KAAA,GAAA,KAAQ,GAAG,CAAA,CAAA;AAClE,EAAM,MAAA,SAAA,GAAY,aAAa,MAAO,CAAA,CAAC,QAAQ,CAAC,WAAA,CAAY,QAAS,CAAA,GAAG,CAAC,CAAA,CAAA;AAEzE,EAAI,IAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AACxB,IAAA,OAAA,CAAQ,MAAM,CAAsB,mBAAA,EAAA,SAAA,CAAU,IAAK,CAAA,IAAI,CAAC,CAAE,CAAA,CAAA,CAAA;AAC1D,IAAA,OAAA,CAAQ,IAAK,CAAA,MAAM,WAAY,CAAA,GAAG,CAAC,CAAA,CAAA;AACnC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAAA,GAChB;AACF;;;;"}
@@ -3,3 +3,4 @@ function defineConfig(config) {
3
3
  }
4
4
 
5
5
  export { defineConfig };
6
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/config/index.ts"],"sourcesContent":["import type { ApibaraConfig, DeepPartial } from \"apibara/types\";\n\nexport function defineConfig<\n T extends Record<\n string,\n DeepPartial<Pick<ApibaraConfig<T, R>, \"runtimeConfig\">>\n > = Record<string, never>,\n R extends Record<string, unknown> = Record<string, never>,\n>(config: ApibaraConfig<T, R>): ApibaraConfig<T, R> {\n return config;\n}\n"],"names":[],"mappings":"AAEO,SAAS,aAMd,MAAkD,EAAA;AAClD,EAAO,OAAA,MAAA,CAAA;AACT;;;;"}
@@ -3,6 +3,7 @@ import { createHooks } from 'hookable';
3
3
  import { watchConfig, loadConfig } from 'c12';
4
4
  import { klona } from 'klona/full';
5
5
  import { resolve, join, basename, isAbsolute, relative, dirname } from 'pathe';
6
+ import { ENV_INTERNAL_APIBARA_RUNTIME, ENV_INTERNAL_APIBARA_PRESET, ENV_INTERNAL_APIBARA_PRESETS, USER_ENV_APIBARA_RUNTIME_CONFIG, ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME, getProcessedRuntimeConfig } from 'apibara/common';
6
7
  import fse from 'fs-extra';
7
8
  import { getRolldownConfig } from 'apibara/rolldown';
8
9
  import { colors } from 'consola/utils';
@@ -38,7 +39,37 @@ async function resolvePathOptions(options) {
38
39
  }
39
40
  }
40
41
 
41
- const configResolvers = [resolvePathOptions];
42
+ function runtimeConfigResolver(options) {
43
+ try {
44
+ const { runtimeConfig, preset, presets } = options;
45
+ if (runtimeConfig) {
46
+ process.env[ENV_INTERNAL_APIBARA_RUNTIME] = JSON.stringify(runtimeConfig);
47
+ }
48
+ if (preset) {
49
+ process.env[ENV_INTERNAL_APIBARA_PRESET] = preset;
50
+ }
51
+ if (presets) {
52
+ process.env[ENV_INTERNAL_APIBARA_PRESETS] = JSON.stringify(presets);
53
+ }
54
+ const userEnvRuntimeConfig = JSON.parse(
55
+ process.env[USER_ENV_APIBARA_RUNTIME_CONFIG] ?? "{}"
56
+ );
57
+ process.env[ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME] = JSON.stringify(
58
+ getProcessedRuntimeConfig({
59
+ preset,
60
+ presets,
61
+ runtimeConfig,
62
+ userEnvRuntimeConfig
63
+ })
64
+ );
65
+ } catch (error) {
66
+ throw new Error("Failed to process & set runtime environment variables", {
67
+ cause: error
68
+ });
69
+ }
70
+ }
71
+
72
+ const configResolvers = [resolvePathOptions, runtimeConfigResolver];
42
73
  async function loadOptions(configOverrides = {}, opts = {}, dev = false) {
43
74
  const options = await _loadUserConfig(configOverrides, opts, dev);
44
75
  try {
@@ -75,9 +106,10 @@ async function _loadUserConfig(configOverrides = {}, opts = {}, dev = false) {
75
106
  return options;
76
107
  }
77
108
 
78
- async function updateApibaraConfig(apibara, _config) {
79
- await apibara.hooks.callHook("rolldown:reload");
109
+ async function updateApibaraConfig(apibara, newConfig) {
110
+ runtimeConfigResolver(newConfig);
80
111
  apibara.logger.success("Apibara config hot reloaded!");
112
+ await apibara.hooks.callHook("dev:reload");
81
113
  }
82
114
 
83
115
  const INDEXER_EXTENSIONS = [".indexer.ts", ".indexer.js"];
@@ -119,8 +151,8 @@ async function createApibara(config = {}, opts = {}, dev = false) {
119
151
  hooks: createHooks(),
120
152
  close: () => apibara.hooks.callHook("close"),
121
153
  logger: consola.withTag("apibara"),
122
- async updateConfig(config2) {
123
- updateApibaraConfig(apibara);
154
+ async updateConfig(newConfig) {
155
+ updateApibaraConfig(apibara, newConfig);
124
156
  }
125
157
  };
126
158
  apibara.hooks.addHooks(apibara.options.hooks);
@@ -223,7 +255,9 @@ const getIgnorePatterns = (apibara) => [
223
255
  "**/.DS_Store",
224
256
  "**/node_modules/**",
225
257
  "**/dist/**",
226
- "**/.turbo/**"
258
+ "**/.turbo/**",
259
+ // changes to apibara.config is handled by c12 itself so we dont need rolldown to handle this
260
+ "**/apibara.config?(.ts|.js)"
227
261
  ];
228
262
 
229
263
  async function buildProduction(apibara, rolldownConfig) {
@@ -337,3 +371,4 @@ declare module "apibara/types" {`,
337
371
  }
338
372
 
339
373
  export { build, createApibara, prepare, writeTypes };
374
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/core/config/defaults.ts","../../src/core/config/resolvers/paths.resolver.ts","../../src/core/config/resolvers/runtime.resolver.ts","../../src/core/config/loader.ts","../../src/core/config/update.ts","../../src/core/scan.ts","../../src/core/apibara.ts","../../src/core/build/error.ts","../../src/core/build/dev.ts","../../src/core/build/prod.ts","../../src/core/build/build.ts","../../src/core/path.ts","../../src/core/build/prepare.ts","../../src/core/build/types.ts"],"sourcesContent":["import type { ApibaraConfig } from \"apibara/types\";\n\nexport const ApibaraDefaults: ApibaraConfig = {\n rootDir: \".\",\n indexersDir: \"indexers\",\n\n runtimeConfig: {},\n hooks: {},\n\n buildDir: \".apibara\",\n\n typescript: {\n strict: false,\n generateRuntimeConfigTypes: true,\n internalPaths: false,\n },\n\n node: true,\n exportConditions: [\"node\"],\n};\n","import type { ApibaraOptions } from \"apibara/types\";\nimport { resolve } from \"pathe\";\n\nexport async function resolvePathOptions(options: ApibaraOptions) {\n options.rootDir = resolve(options.rootDir || \".\");\n\n for (const key of [\"buildDir\"] as const) {\n options[key] = resolve(options.rootDir, options[key]);\n }\n\n if (!options.outputDir) {\n options.outputDir = resolve(options.rootDir, \".apibara/build\");\n }\n}\n","import {\n ENV_INTERNAL_APIBARA_PRESET,\n ENV_INTERNAL_APIBARA_PRESETS,\n ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME,\n ENV_INTERNAL_APIBARA_RUNTIME,\n USER_ENV_APIBARA_RUNTIME_CONFIG,\n getProcessedRuntimeConfig,\n} from \"apibara/common\";\nimport type { ApibaraOptions } from \"apibara/types\";\n\nexport function runtimeConfigResolver(options: Partial<ApibaraOptions>) {\n try {\n const { runtimeConfig, preset, presets } = options;\n\n if (runtimeConfig) {\n process.env[ENV_INTERNAL_APIBARA_RUNTIME] = JSON.stringify(runtimeConfig);\n }\n if (preset) {\n process.env[ENV_INTERNAL_APIBARA_PRESET] = preset;\n }\n\n if (presets) {\n process.env[ENV_INTERNAL_APIBARA_PRESETS] = JSON.stringify(presets);\n }\n\n const userEnvRuntimeConfig = JSON.parse(\n process.env[USER_ENV_APIBARA_RUNTIME_CONFIG] ?? \"{}\",\n );\n\n // This is final processed runtime config that will be used by the indexer and useRuntimeConfig hook\n process.env[ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME] = JSON.stringify(\n getProcessedRuntimeConfig({\n preset,\n presets,\n runtimeConfig,\n userEnvRuntimeConfig,\n }),\n );\n } catch (error) {\n throw new Error(\"Failed to process & set runtime environment variables\", {\n cause: error,\n });\n }\n}\n","import type {\n ApibaraConfig,\n ApibaraOptions,\n LoadConfigOptions,\n} from \"apibara/types\";\nimport { loadConfig, watchConfig } from \"c12\";\nimport { klona } from \"klona/full\";\nimport { ApibaraDefaults } from \"./defaults\";\nimport { resolvePathOptions } from \"./resolvers/paths.resolver\";\nimport { runtimeConfigResolver } from \"./resolvers/runtime.resolver\";\n\n// runtimeConfigResolver handles assigning runtime values to env\nconst configResolvers = [resolvePathOptions, runtimeConfigResolver] as const;\n\nexport async function loadOptions(\n configOverrides: ApibaraConfig = {},\n opts: LoadConfigOptions = {},\n dev = false,\n): Promise<ApibaraOptions> {\n const options = await _loadUserConfig(configOverrides, opts, dev);\n\n // Check if the runtimeConfig is serializable\n try {\n JSON.stringify(options.runtimeConfig);\n } catch (error) {\n throw new Error(\n \"Non-serializable runtimeConfig. Please ensure the config is serializable.\",\n { cause: error },\n );\n }\n\n for (const resolver of configResolvers) {\n await resolver(options);\n }\n\n return options;\n}\n\nasync function _loadUserConfig(\n configOverrides: ApibaraConfig = {},\n opts: LoadConfigOptions = {},\n dev = false,\n): Promise<ApibaraOptions> {\n // biome-ignore lint: noParameterAssign\n configOverrides = klona(configOverrides);\n\n const loadedConfig = await (opts.watch\n ? watchConfig<ApibaraConfig>\n : loadConfig<ApibaraConfig>)({\n name: \"apibara\",\n dotenv: dev,\n cwd: configOverrides.rootDir,\n overrides: {\n ...configOverrides,\n },\n defaults: { ...ApibaraDefaults },\n ...opts.c12,\n });\n\n const options = klona(loadedConfig.config) as ApibaraOptions;\n\n options._config = configOverrides;\n options._c12 = loadedConfig;\n\n if (dev) {\n options.dev = dev;\n }\n\n return options;\n}\n","import type { Apibara, ApibaraDynamicConfig } from \"apibara/types\";\nimport { runtimeConfigResolver } from \"./resolvers/runtime.resolver\";\n\nexport async function updateApibaraConfig(\n apibara: Apibara,\n newConfig: ApibaraDynamicConfig,\n) {\n // applies new config values to env again during hot reload\n runtimeConfigResolver(newConfig);\n apibara.logger.success(\"Apibara config hot reloaded!\");\n // we simply stop indexers and restart them with updated runtime values\n await apibara.hooks.callHook(\"dev:reload\");\n}\n","import type { Apibara } from \"apibara/types\";\nimport fse from \"fs-extra\";\nimport { basename, join } from \"pathe\";\n\nconst INDEXER_EXTENSIONS = [\".indexer.ts\", \".indexer.js\"];\n\nexport async function scanIndexers(apibara: Apibara) {\n apibara.logger.debug(\"Scanning indexers\");\n\n const indexersDir = join(\n apibara.options.rootDir,\n apibara.options.indexersDir,\n );\n\n if (!fse.existsSync(indexersDir)) {\n throw new Error(`Indexers directory not found: ${indexersDir}`);\n }\n\n apibara.indexers = [];\n\n for (const file of fse.readdirSync(indexersDir)) {\n const indexerName = indexerNameFromFile(file);\n if (indexerName) {\n apibara.indexers.push({\n name: indexerName,\n indexer: join(indexersDir, file),\n });\n }\n }\n\n apibara.logger.debug(`Found ${apibara.indexers.length} indexers`);\n}\n\nfunction indexerNameFromFile(file: string) {\n for (const extension of INDEXER_EXTENSIONS) {\n if (file.endsWith(extension)) {\n return basename(file, extension);\n }\n }\n}\n","import type {\n Apibara,\n ApibaraConfig,\n ApibaraDynamicConfig,\n LoadConfigOptions,\n} from \"apibara/types\";\nimport consola from \"consola\";\nimport { createHooks } from \"hookable\";\nimport { loadOptions } from \"./config/loader\";\nimport { updateApibaraConfig } from \"./config/update\";\nimport { scanIndexers } from \"./scan\";\n\nexport async function createApibara(\n config: ApibaraConfig = {},\n opts: LoadConfigOptions = {},\n dev = false,\n): Promise<Apibara> {\n const options = await loadOptions(config, opts, dev);\n\n // Enable source map support in Node\n process.env.NODE_OPTIONS = process.env.NODE_OPTIONS\n ? `${process.env.NODE_OPTIONS} --enable-source-maps`\n : \"--enable-source-maps\";\n\n const apibara: Apibara = {\n options,\n indexers: [],\n hooks: createHooks(),\n close: () => apibara.hooks.callHook(\"close\"),\n logger: consola.withTag(\"apibara\"),\n async updateConfig(newConfig: ApibaraDynamicConfig) {\n updateApibaraConfig(apibara, newConfig);\n },\n };\n\n apibara.hooks.addHooks(apibara.options.hooks);\n\n await scanIndexers(apibara);\n\n return apibara;\n}\n","import { isAbsolute, relative } from \"pathe\";\nimport type * as rolldown from \"rolldown\";\n\nexport function formatRolldownError(_error: rolldown.RollupError) {\n try {\n const logs: string[] = [_error.toString()];\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const errors = (_error as any)?.errors || [_error as rolldown.RollupError];\n for (const error of errors) {\n const id = error.path || error.id || (_error as rolldown.RollupError).id;\n let path = isAbsolute(id) ? relative(process.cwd(), id) : id;\n const location = (error as rolldown.RollupError).loc;\n if (location) {\n path += `:${location.line}:${location.column}`;\n }\n const text = (error as rolldown.RollupError).frame;\n\n logs.push(\n `Rolldown error while processing \\`${path}\\`` + text\n ? \"\\n\\n\" + text\n : \"\",\n );\n }\n return logs.join(\"\\n\");\n } catch {\n return _error?.toString();\n }\n}\n","import type { Apibara } from \"apibara/types\";\nimport { watch } from \"chokidar\";\nimport defu from \"defu\";\nimport { join } from \"pathe\";\nimport { debounce } from \"perfect-debounce\";\nimport * as rolldown from \"rolldown\";\nimport { formatRolldownError } from \"./error\";\n\nexport async function watchDev(\n apibara: Apibara,\n rolldownConfig: rolldown.RolldownOptions,\n) {\n let rolldownWatcher: rolldown.RolldownWatcher;\n async function load() {\n apibara.logger.start(\"Setting up a dev server\");\n if (rolldownWatcher) {\n await rolldownWatcher.close();\n }\n rolldownWatcher = startRolldownWatcher(apibara, rolldownConfig);\n }\n const reload = debounce(async () => await load());\n\n const watchPatterns = getWatchPatterns(apibara);\n\n const watchReloadEvents = new Set([\"add\", \"addDir\", \"unlink\", \"unlinkDir\"]);\n const reloadWatcher = watch(watchPatterns, { ignoreInitial: true }).on(\n \"all\",\n async (event) => {\n if (watchReloadEvents.has(event)) {\n await reload();\n }\n },\n );\n\n apibara.hooks.hook(\"close\", () => {\n rolldownWatcher.close();\n reloadWatcher.close();\n });\n\n apibara.hooks.hook(\"rolldown:reload\", async () => await reload());\n\n await load();\n}\n\nfunction startRolldownWatcher(\n apibara: Apibara,\n rolldownConfig: rolldown.RolldownOptions,\n) {\n const ignorePatterns = getIgnorePatterns(apibara);\n const watcher = rolldown.watch(\n defu(rolldownConfig, {\n watch: {\n exclude: ignorePatterns,\n ...((apibara.options.watchOptions ?? {}) as rolldown.WatchOptions),\n },\n }),\n );\n let start: number;\n\n watcher.on(\"event\", async (event) => {\n switch (event.code) {\n // The watcher is (re)starting\n case \"START\": {\n await apibara.hooks.callHook(\"dev:restart\");\n return;\n }\n\n // Building an individual bundle\n case \"BUNDLE_START\": {\n start = Date.now();\n return;\n }\n\n // Finished building all bundles\n case \"END\": {\n apibara.hooks.callHook(\"compiled\", apibara);\n apibara.logger.success(\n \"Indexers built\",\n start ? `in ${Date.now() - start} ms` : \"\",\n );\n await apibara.hooks.callHook(\"dev:reload\");\n return;\n }\n\n // Encountered an error while bundling\n case \"ERROR\": {\n apibara.logger.error(formatRolldownError(event.error));\n }\n }\n });\n return watcher;\n}\n\nconst getWatchPatterns = (apibara: Apibara) => [\n join(apibara.options.rootDir, \"indexers\"),\n];\n\nconst getIgnorePatterns = (apibara: Apibara) => [\n \"**/.apibara/**\",\n \"**/.git/**\",\n \"**/.DS_Store\",\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/.turbo/**\",\n // changes to apibara.config is handled by c12 itself so we dont need rolldown to handle this\n \"**/apibara.config?(.ts|.js)\",\n];\n","import type { Apibara } from \"apibara/types\";\nimport { colors } from \"consola/utils\";\nimport * as rolldown from \"rolldown\";\n\nexport async function buildProduction(\n apibara: Apibara,\n rolldownConfig: rolldown.RolldownOptions,\n) {\n if (!apibara.options.disableLogs) {\n apibara.logger.start(\n `Building ${colors.cyan(apibara.indexers.length)} indexers`,\n );\n }\n\n const startTime = Date.now();\n\n try {\n const bundle = await rolldown.rolldown(rolldownConfig);\n\n if (Array.isArray(rolldownConfig.output)) {\n for (const outputOptions of rolldownConfig.output) {\n await bundle.write(outputOptions);\n }\n } else if (rolldownConfig.output) {\n await bundle.write(rolldownConfig.output as rolldown.OutputOptions);\n } else {\n throw new Error(\"No output options specified in Rolldown config\");\n }\n\n await bundle.close();\n\n const endTime = Date.now();\n const duration = endTime - startTime;\n\n if (!apibara.options.disableLogs) {\n apibara.logger.success(`Build succeeded in ${duration}ms`);\n apibara.logger.info(\n `You can start the indexers with ${colors.cyan(\"apibara start\")}`,\n );\n }\n } catch (error) {\n apibara.logger.error(\"Build failed\", error);\n throw error;\n }\n}\n","import { getRolldownConfig } from \"apibara/rolldown\";\nimport type { Apibara } from \"apibara/types\";\nimport { colors } from \"consola/utils\";\nimport { watchDev } from \"./dev\";\nimport { buildProduction } from \"./prod\";\n\nexport async function build(apibara: Apibara) {\n const rolldownConfig = getRolldownConfig(apibara);\n\n await apibara.hooks.callHook(\"rolldown:before\", apibara, rolldownConfig);\n\n if (apibara.options.rollupConfig) {\n apibara.logger.error(\n `\\n${colors.cyan(\"apibara.config:\")} rollupConfig is deprecated. Use rolldownConfig instead`,\n );\n process.exit(1);\n }\n\n return apibara.options.dev\n ? await watchDev(apibara, rolldownConfig)\n : await buildProduction(apibara, rolldownConfig);\n}\n","import { colors } from \"consola/utils\";\nimport { relative } from \"pathe\";\n\n/** Return a (possibly highlighted) path relative to the current working directory.\n *\n * From nitrojs/nitro.\n */\nexport function prettyPath(path: string, highlight = true) {\n const rel = relative(process.cwd(), path);\n return highlight ? colors.cyan(rel) : rel;\n}\n","import fsp from \"node:fs/promises\";\nimport type { Apibara } from \"apibara/types\";\nimport fse from \"fs-extra\";\nimport { prettyPath } from \"../path\";\n\nexport async function prepare(apibara: Apibara) {\n await prepareDir(apibara.options.buildDir);\n await prepareDir(apibara.options.outputDir);\n\n if (!apibara.options.disableLogs) {\n apibara.logger.success(\n `Output directory ${prettyPath(apibara.options.outputDir)} cleaned`,\n );\n }\n}\n\nasync function prepareDir(dir: string) {\n await fsp.mkdir(dir, { recursive: true });\n await fse.emptyDir(dir);\n}\n","import fsp from \"node:fs/promises\";\nimport type { Apibara } from \"apibara/types\";\nimport { dirname, join, resolve } from \"pathe\";\nimport { type JSValue, generateTypes, resolveSchema } from \"untyped\";\nimport { prettyPath } from \"../path\";\n\nexport async function writeTypes(apibara: Apibara) {\n // Check if the config file has a TypeScript extension so we assume it's a TypeScript project\n const isTypeScript = apibara.options._c12.configFile?.endsWith(\".ts\");\n\n if (!isTypeScript) {\n // If it's not a TypeScript project, we don't need to generate the types\n return;\n }\n\n const typesDir = resolve(apibara.options.buildDir, \"types\");\n\n const config = [\n \"// Generated by apibara\",\n `\ndeclare module \"apibara/types\" {`,\n apibara.options.typescript.generateRuntimeConfigTypes\n ? generateTypes(\n await resolveSchema(\n Object.fromEntries(\n Object.entries(apibara.options.runtimeConfig),\n ) as Record<string, JSValue>,\n ),\n {\n interfaceName: \"ApibaraRuntimeConfig\",\n addExport: false,\n addDefaults: false,\n allowExtraKeys: false,\n indentation: 2,\n },\n )\n : \"\",\n \"}\",\n // Makes this a module for augmentation purposes\n \"export type {};\",\n ];\n\n const buildFiles: { path: string; contents: string }[] = [];\n\n buildFiles.push({\n path: join(typesDir, \"apibara-config.d.ts\"),\n contents: config.join(\"\\n\"),\n });\n\n await Promise.all(\n buildFiles.map(async (file) => {\n const _file = resolve(apibara.options.buildDir, file.path);\n await fsp.mkdir(dirname(_file), { recursive: true });\n await fsp.writeFile(_file, file.contents);\n }),\n );\n\n if (!apibara.options.disableLogs) {\n apibara.logger.success(`Types written to ${prettyPath(typesDir)}`);\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEO,MAAM,eAAiC,GAAA;AAAA,EAC5C,OAAS,EAAA,GAAA;AAAA,EACT,WAAa,EAAA,UAAA;AAAA,EAEb,eAAe,EAAC;AAAA,EAChB,OAAO,EAAC;AAAA,EAER,QAAU,EAAA,UAAA;AAAA,EAEV,UAAY,EAAA;AAAA,IACV,MAAQ,EAAA,KAAA;AAAA,IACR,0BAA4B,EAAA,IAAA;AAAA,IAC5B,aAAe,EAAA,KAAA;AAAA,GACjB;AAAA,EAEA,IAAM,EAAA,IAAA;AAAA,EACN,gBAAA,EAAkB,CAAC,MAAM,CAAA;AAC3B,CAAA;;AChBA,eAAsB,mBAAmB,OAAyB,EAAA;AAChE,EAAA,OAAA,CAAQ,OAAU,GAAA,OAAA,CAAQ,OAAQ,CAAA,OAAA,IAAW,GAAG,CAAA,CAAA;AAEhD,EAAW,KAAA,MAAA,GAAA,IAAO,CAAC,UAAU,CAAY,EAAA;AACvC,IAAA,OAAA,CAAQ,GAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,OAAS,EAAA,OAAA,CAAQ,GAAG,CAAC,CAAA,CAAA;AAAA,GACtD;AAEA,EAAI,IAAA,CAAC,QAAQ,SAAW,EAAA;AACtB,IAAA,OAAA,CAAQ,SAAY,GAAA,OAAA,CAAQ,OAAQ,CAAA,OAAA,EAAS,gBAAgB,CAAA,CAAA;AAAA,GAC/D;AACF;;ACHO,SAAS,sBAAsB,OAAkC,EAAA;AACtE,EAAI,IAAA;AACF,IAAA,MAAM,EAAE,aAAA,EAAe,MAAQ,EAAA,OAAA,EAAY,GAAA,OAAA,CAAA;AAE3C,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,OAAA,CAAQ,GAAI,CAAA,4BAA4B,CAAI,GAAA,IAAA,CAAK,UAAU,aAAa,CAAA,CAAA;AAAA,KAC1E;AACA,IAAA,IAAI,MAAQ,EAAA;AACV,MAAQ,OAAA,CAAA,GAAA,CAAI,2BAA2B,CAAI,GAAA,MAAA,CAAA;AAAA,KAC7C;AAEA,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,OAAA,CAAQ,GAAI,CAAA,4BAA4B,CAAI,GAAA,IAAA,CAAK,UAAU,OAAO,CAAA,CAAA;AAAA,KACpE;AAEA,IAAA,MAAM,uBAAuB,IAAK,CAAA,KAAA;AAAA,MAChC,OAAA,CAAQ,GAAI,CAAA,+BAA+B,CAAK,IAAA,IAAA;AAAA,KAClD,CAAA;AAGA,IAAQ,OAAA,CAAA,GAAA,CAAI,sCAAsC,CAAA,GAAI,IAAK,CAAA,SAAA;AAAA,MACzD,yBAA0B,CAAA;AAAA,QACxB,MAAA;AAAA,QACA,OAAA;AAAA,QACA,aAAA;AAAA,QACA,oBAAA;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AAAA,WACO,KAAO,EAAA;AACd,IAAM,MAAA,IAAI,MAAM,uDAAyD,EAAA;AAAA,MACvE,KAAO,EAAA,KAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH;AACF;;AC/BA,MAAM,eAAA,GAAkB,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,CAAA;AAE5C,eAAA,WAAA,CACpB,kBAAiC,EAAC,EAClC,OAA0B,EAAC,EAC3B,MAAM,KACmB,EAAA;AACzB,EAAA,MAAM,OAAU,GAAA,MAAM,eAAgB,CAAA,eAAA,EAAiB,MAAM,GAAG,CAAA,CAAA;AAGhE,EAAI,IAAA;AACF,IAAK,IAAA,CAAA,SAAA,CAAU,QAAQ,aAAa,CAAA,CAAA;AAAA,WAC7B,KAAO,EAAA;AACd,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,2EAAA;AAAA,MACA,EAAE,OAAO,KAAM,EAAA;AAAA,KACjB,CAAA;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,YAAY,eAAiB,EAAA;AACtC,IAAA,MAAM,SAAS,OAAO,CAAA,CAAA;AAAA,GACxB;AAEA,EAAO,OAAA,OAAA,CAAA;AACT,CAAA;AAEA,eAAe,eAAA,CACb,kBAAiC,EAAC,EAClC,OAA0B,EAAC,EAC3B,MAAM,KACmB,EAAA;AAEzB,EAAA,eAAA,GAAkB,MAAM,eAAe,CAAA,CAAA;AAEvC,EAAA,MAAM,YAAe,GAAA,MAAA,CAAO,IAAK,CAAA,KAAA,GAC7B,cACA,UAA2B,EAAA;AAAA,IAC7B,IAAM,EAAA,SAAA;AAAA,IACN,MAAQ,EAAA,GAAA;AAAA,IACR,KAAK,eAAgB,CAAA,OAAA;AAAA,IACrB,SAAW,EAAA;AAAA,MACT,GAAG,eAAA;AAAA,KACL;AAAA,IACA,QAAA,EAAU,EAAE,GAAG,eAAgB,EAAA;AAAA,IAC/B,GAAG,IAAK,CAAA,GAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,OAAA,GAAU,KAAM,CAAA,YAAA,CAAa,MAAM,CAAA,CAAA;AAEzC,EAAA,OAAA,CAAQ,OAAU,GAAA,eAAA,CAAA;AAClB,EAAA,OAAA,CAAQ,IAAO,GAAA,YAAA,CAAA;AAEf,EAAA,IAAI,GAAK,EAAA;AACP,IAAA,OAAA,CAAQ,GAAM,GAAA,GAAA,CAAA;AAAA,GAChB;AAEA,EAAO,OAAA,OAAA,CAAA;AACT;;AClEsB,eAAA,mBAAA,CACpB,SACA,SACA,EAAA;AAEA,EAAA,qBAAA,CAAsB,SAAS,CAAA,CAAA;AAC/B,EAAQ,OAAA,CAAA,MAAA,CAAO,QAAQ,8BAA8B,CAAA,CAAA;AAErD,EAAM,MAAA,OAAA,CAAQ,KAAM,CAAA,QAAA,CAAS,YAAY,CAAA,CAAA;AAC3C;;ACRA,MAAM,kBAAA,GAAqB,CAAC,aAAA,EAAe,aAAa,CAAA,CAAA;AAExD,eAAsB,aAAa,OAAkB,EAAA;AACnD,EAAQ,OAAA,CAAA,MAAA,CAAO,MAAM,mBAAmB,CAAA,CAAA;AAExC,EAAA,MAAM,WAAc,GAAA,IAAA;AAAA,IAClB,QAAQ,OAAQ,CAAA,OAAA;AAAA,IAChB,QAAQ,OAAQ,CAAA,WAAA;AAAA,GAClB,CAAA;AAEA,EAAA,IAAI,CAAC,GAAA,CAAI,UAAW,CAAA,WAAW,CAAG,EAAA;AAChC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAiC,8BAAA,EAAA,WAAW,CAAE,CAAA,CAAA,CAAA;AAAA,GAChE;AAEA,EAAA,OAAA,CAAQ,WAAW,EAAC,CAAA;AAEpB,EAAA,KAAA,MAAW,IAAQ,IAAA,GAAA,CAAI,WAAY,CAAA,WAAW,CAAG,EAAA;AAC/C,IAAM,MAAA,WAAA,GAAc,oBAAoB,IAAI,CAAA,CAAA;AAC5C,IAAA,IAAI,WAAa,EAAA;AACf,MAAA,OAAA,CAAQ,SAAS,IAAK,CAAA;AAAA,QACpB,IAAM,EAAA,WAAA;AAAA,QACN,OAAA,EAAS,IAAK,CAAA,WAAA,EAAa,IAAI,CAAA;AAAA,OAChC,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAEA,EAAA,OAAA,CAAQ,OAAO,KAAM,CAAA,CAAA,MAAA,EAAS,OAAQ,CAAA,QAAA,CAAS,MAAM,CAAW,SAAA,CAAA,CAAA,CAAA;AAClE,CAAA;AAEA,SAAS,oBAAoB,IAAc,EAAA;AACzC,EAAA,KAAA,MAAW,aAAa,kBAAoB,EAAA;AAC1C,IAAI,IAAA,IAAA,CAAK,QAAS,CAAA,SAAS,CAAG,EAAA;AAC5B,MAAO,OAAA,QAAA,CAAS,MAAM,SAAS,CAAA,CAAA;AAAA,KACjC;AAAA,GACF;AACF;;AC3BsB,eAAA,aAAA,CACpB,SAAwB,EAAC,EACzB,OAA0B,EAAC,EAC3B,MAAM,KACY,EAAA;AAClB,EAAA,MAAM,OAAU,GAAA,MAAM,WAAY,CAAA,MAAA,EAAQ,MAAM,GAAG,CAAA,CAAA;AAGnD,EAAQ,OAAA,CAAA,GAAA,CAAI,eAAe,OAAQ,CAAA,GAAA,CAAI,eACnC,CAAG,EAAA,OAAA,CAAQ,GAAI,CAAA,YAAY,CAC3B,qBAAA,CAAA,GAAA,sBAAA,CAAA;AAEJ,EAAA,MAAM,OAAmB,GAAA;AAAA,IACvB,OAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,OAAO,WAAY,EAAA;AAAA,IACnB,KAAO,EAAA,MAAM,OAAQ,CAAA,KAAA,CAAM,SAAS,OAAO,CAAA;AAAA,IAC3C,MAAA,EAAQ,OAAQ,CAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,IACjC,MAAM,aAAa,SAAiC,EAAA;AAClD,MAAA,mBAAA,CAAoB,SAAS,SAAS,CAAA,CAAA;AAAA,KACxC;AAAA,GACF,CAAA;AAEA,EAAA,OAAA,CAAQ,KAAM,CAAA,QAAA,CAAS,OAAQ,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAE5C,EAAA,MAAM,aAAa,OAAO,CAAA,CAAA;AAE1B,EAAO,OAAA,OAAA,CAAA;AACT;;ACrCO,SAAS,oBAAoB,MAA8B,EAAA;AAChE,EAAI,IAAA;AACF,IAAA,MAAM,IAAiB,GAAA,CAAC,MAAO,CAAA,QAAA,EAAU,CAAA,CAAA;AAEzC,IAAA,MAAM,MAAU,GAAA,MAAA,EAAgB,MAAU,IAAA,CAAC,MAA8B,CAAA,CAAA;AACzE,IAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,MAAA,MAAM,EAAK,GAAA,KAAA,CAAM,IAAQ,IAAA,KAAA,CAAM,MAAO,MAAgC,CAAA,EAAA,CAAA;AACtE,MAAI,IAAA,IAAA,GAAO,WAAW,EAAE,CAAA,GAAI,SAAS,OAAQ,CAAA,GAAA,EAAO,EAAA,EAAE,CAAI,GAAA,EAAA,CAAA;AAC1D,MAAA,MAAM,WAAY,KAA+B,CAAA,GAAA,CAAA;AACjD,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,IAAA,IAAQ,CAAI,CAAA,EAAA,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,SAAS,MAAM,CAAA,CAAA,CAAA;AAAA,OAC9C;AACA,MAAA,MAAM,OAAQ,KAA+B,CAAA,KAAA,CAAA;AAE7C,MAAK,IAAA,CAAA,IAAA;AAAA,QACH,CAAqC,kCAAA,EAAA,IAAI,CAAO,EAAA,CAAA,GAAA,IAAA,GAC5C,SAAS,IACT,GAAA,EAAA;AAAA,OACN,CAAA;AAAA,KACF;AACA,IAAO,OAAA,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA;AAAA,GACf,CAAA,MAAA;AACN,IAAA,OAAO,QAAQ,QAAS,EAAA,CAAA;AAAA,GAC1B;AACF;;ACnBsB,eAAA,QAAA,CACpB,SACA,cACA,EAAA;AACA,EAAI,IAAA,eAAA,CAAA;AACJ,EAAA,eAAe,IAAO,GAAA;AACpB,IAAQ,OAAA,CAAA,MAAA,CAAO,MAAM,yBAAyB,CAAA,CAAA;AAC9C,IAAA,IAAI,eAAiB,EAAA;AACnB,MAAA,MAAM,gBAAgB,KAAM,EAAA,CAAA;AAAA,KAC9B;AACA,IAAkB,eAAA,GAAA,oBAAA,CAAqB,SAAS,cAAc,CAAA,CAAA;AAAA,GAChE;AACA,EAAA,MAAM,MAAS,GAAA,QAAA,CAAS,YAAY,MAAM,MAAM,CAAA,CAAA;AAEhD,EAAM,MAAA,aAAA,GAAgB,iBAAiB,OAAO,CAAA,CAAA;AAE9C,EAAM,MAAA,iBAAA,uBAAwB,GAAI,CAAA,CAAC,OAAO,QAAU,EAAA,QAAA,EAAU,WAAW,CAAC,CAAA,CAAA;AAC1E,EAAA,MAAM,gBAAgB,KAAM,CAAA,aAAA,EAAe,EAAE,aAAe,EAAA,IAAA,EAAM,CAAE,CAAA,EAAA;AAAA,IAClE,KAAA;AAAA,IACA,OAAO,KAAU,KAAA;AACf,MAAI,IAAA,iBAAA,CAAkB,GAAI,CAAA,KAAK,CAAG,EAAA;AAChC,QAAA,MAAM,MAAO,EAAA,CAAA;AAAA,OACf;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAQ,OAAA,CAAA,KAAA,CAAM,IAAK,CAAA,OAAA,EAAS,MAAM;AAChC,IAAA,eAAA,CAAgB,KAAM,EAAA,CAAA;AACtB,IAAA,aAAA,CAAc,KAAM,EAAA,CAAA;AAAA,GACrB,CAAA,CAAA;AAED,EAAA,OAAA,CAAQ,MAAM,IAAK,CAAA,iBAAA,EAAmB,YAAY,MAAM,QAAQ,CAAA,CAAA;AAEhE,EAAA,MAAM,IAAK,EAAA,CAAA;AACb,CAAA;AAEA,SAAS,oBAAA,CACP,SACA,cACA,EAAA;AACA,EAAM,MAAA,cAAA,GAAiB,kBAAyB,CAAA,CAAA;AAChD,EAAA,MAAM,UAAU,QAAS,CAAA,KAAA;AAAA,IACvB,KAAK,cAAgB,EAAA;AAAA,MACnB,KAAO,EAAA;AAAA,QACL,OAAS,EAAA,cAAA;AAAA,QACT,GAAK,OAAA,CAAQ,OAAQ,CAAA,YAAA,IAAgB,EAAC;AAAA,OACxC;AAAA,KACD,CAAA;AAAA,GACH,CAAA;AACA,EAAI,IAAA,KAAA,CAAA;AAEJ,EAAQ,OAAA,CAAA,EAAA,CAAG,OAAS,EAAA,OAAO,KAAU,KAAA;AACnC,IAAA,QAAQ,MAAM,IAAM;AAAA,MAElB,KAAK,OAAS,EAAA;AACZ,QAAM,MAAA,OAAA,CAAQ,KAAM,CAAA,QAAA,CAAS,aAAa,CAAA,CAAA;AAC1C,QAAA,OAAA;AAAA,OACF;AAAA,MAGA,KAAK,cAAgB,EAAA;AACnB,QAAA,KAAA,GAAQ,KAAK,GAAI,EAAA,CAAA;AACjB,QAAA,OAAA;AAAA,OACF;AAAA,MAGA,KAAK,KAAO,EAAA;AACV,QAAQ,OAAA,CAAA,KAAA,CAAM,QAAS,CAAA,UAAA,EAAY,OAAO,CAAA,CAAA;AAC1C,QAAA,OAAA,CAAQ,MAAO,CAAA,OAAA;AAAA,UACb,gBAAA;AAAA,UACA,QAAQ,CAAM,GAAA,EAAA,IAAA,CAAK,GAAI,EAAA,GAAI,KAAK,CAAQ,GAAA,CAAA,GAAA,EAAA;AAAA,SAC1C,CAAA;AACA,QAAM,MAAA,OAAA,CAAQ,KAAM,CAAA,QAAA,CAAS,YAAY,CAAA,CAAA;AACzC,QAAA,OAAA;AAAA,OACF;AAAA,MAGA,KAAK,OAAS,EAAA;AACZ,QAAA,OAAA,CAAQ,MAAO,CAAA,KAAA,CAAM,mBAAoB,CAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAAA,OACvD;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,OAAA,CAAA;AACT,CAAA;AAEA,MAAM,gBAAA,GAAmB,CAAC,OAAqB,KAAA;AAAA,EAC7C,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,OAAA,EAAS,UAAU,CAAA;AAC1C,CAAA,CAAA;AAEA,MAAM,iBAAA,GAAoB,CAAC,OAAqB,KAAA;AAAA,EAC9C,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA;AAAA,EAEA,6BAAA;AACF,CAAA;;ACtGsB,eAAA,eAAA,CACpB,SACA,cACA,EAAA;AACA,EAAI,IAAA,CAAC,OAAQ,CAAA,OAAA,CAAQ,WAAa,EAAA;AAChC,IAAA,OAAA,CAAQ,MAAO,CAAA,KAAA;AAAA,MACb,YAAY,MAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA,SAAA,CAAA;AAAA,KAClD,CAAA;AAAA,GACF;AAEA,EAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA,CAAA;AAE3B,EAAI,IAAA;AACF,IAAA,MAAM,MAAS,GAAA,MAAM,QAAS,CAAA,QAAA,CAAS,cAAc,CAAA,CAAA;AAErD,IAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,cAAe,CAAA,MAAM,CAAG,EAAA;AACxC,MAAW,KAAA,MAAA,aAAA,IAAiB,eAAe,MAAQ,EAAA;AACjD,QAAM,MAAA,MAAA,CAAO,MAAM,aAAa,CAAA,CAAA;AAAA,OAClC;AAAA,KACF,MAAA,IAAW,eAAe,MAAQ,EAAA;AAChC,MAAM,MAAA,MAAA,CAAO,KAAM,CAAA,cAAA,CAAe,MAAgC,CAAA,CAAA;AAAA,KAC7D,MAAA;AACL,MAAM,MAAA,IAAI,MAAM,gDAAgD,CAAA,CAAA;AAAA,KAClE;AAEA,IAAA,MAAM,OAAO,KAAM,EAAA,CAAA;AAEnB,IAAM,MAAA,OAAA,GAAU,KAAK,GAAI,EAAA,CAAA;AACzB,IAAA,MAAM,WAAW,OAAU,GAAA,SAAA,CAAA;AAE3B,IAAI,IAAA,CAAC,OAAQ,CAAA,OAAA,CAAQ,WAAa,EAAA;AAChC,MAAA,OAAA,CAAQ,MAAO,CAAA,OAAA,CAAQ,CAAsB,mBAAA,EAAA,QAAQ,CAAI,EAAA,CAAA,CAAA,CAAA;AACzD,MAAA,OAAA,CAAQ,MAAO,CAAA,IAAA;AAAA,QACb,CAAmC,gCAAA,EAAA,MAAA,CAAO,IAAK,CAAA,eAAe,CAAC,CAAA,CAAA;AAAA,OACjE,CAAA;AAAA,KACF;AAAA,WACO,KAAO,EAAA;AACd,IAAQ,OAAA,CAAA,MAAA,CAAO,KAAM,CAAA,cAAA,EAAgB,KAAK,CAAA,CAAA;AAC1C,IAAM,MAAA,KAAA,CAAA;AAAA,GACR;AACF;;ACtCA,eAAsB,MAAM,OAAkB,EAAA;AAC5C,EAAM,MAAA,cAAA,GAAiB,kBAAkB,OAAO,CAAA,CAAA;AAEhD,EAAA,MAAM,OAAQ,CAAA,KAAA,CAAM,QAAS,CAAA,iBAAA,EAAmB,SAAS,cAAc,CAAA,CAAA;AAEvE,EAAI,IAAA,OAAA,CAAQ,QAAQ,YAAc,EAAA;AAChC,IAAA,OAAA,CAAQ,MAAO,CAAA,KAAA;AAAA,MACb,CAAA;AAAA,EAAK,MAAA,CAAO,IAAK,CAAA,iBAAiB,CAAC,CAAA,uDAAA,CAAA;AAAA,KACrC,CAAA;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAAA,GAChB;AAEA,EAAO,OAAA,OAAA,CAAQ,OAAQ,CAAA,GAAA,GACnB,MAAM,QAAA,CAAS,OAAS,EAAA,cAAc,CACtC,GAAA,MAAM,eAAgB,CAAA,OAAA,EAAS,cAAc,CAAA,CAAA;AACnD;;ACdgB,SAAA,UAAA,CAAW,IAAc,EAAA,SAAA,GAAY,IAAM,EAAA;AACzD,EAAA,MAAM,GAAM,GAAA,QAAA,CAAS,OAAQ,CAAA,GAAA,IAAO,IAAI,CAAA,CAAA;AACxC,EAAA,OAAO,SAAY,GAAA,MAAA,CAAO,IAAK,CAAA,GAAG,CAAI,GAAA,GAAA,CAAA;AACxC;;ACLA,eAAsB,QAAQ,OAAkB,EAAA;AAC9C,EAAM,MAAA,UAAA,CAAW,OAAQ,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAA;AACzC,EAAM,MAAA,UAAA,CAAW,OAAQ,CAAA,OAAA,CAAQ,SAAS,CAAA,CAAA;AAE1C,EAAI,IAAA,CAAC,OAAQ,CAAA,OAAA,CAAQ,WAAa,EAAA;AAChC,IAAA,OAAA,CAAQ,MAAO,CAAA,OAAA;AAAA,MACb,CAAoB,iBAAA,EAAA,UAAA,CAAW,OAAQ,CAAA,OAAA,CAAQ,SAAS,CAAC,CAAA,QAAA,CAAA;AAAA,KAC3D,CAAA;AAAA,GACF;AACF,CAAA;AAEA,eAAe,WAAW,GAAa,EAAA;AACrC,EAAA,MAAM,IAAI,KAAM,CAAA,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA,CAAA;AACxC,EAAM,MAAA,GAAA,CAAI,SAAS,GAAG,CAAA,CAAA;AACxB;;ACbA,eAAsB,WAAW,OAAkB,EAAA;AAEjD,EAAA,MAAM,eAAe,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,UAAA,EAAY,SAAS,KAAK,CAAA,CAAA;AAEpE,EAAA,IAAI,CAAC,YAAc,EAAA;AAEjB,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,OAAQ,CAAA,OAAA,CAAQ,UAAU,OAAO,CAAA,CAAA;AAE1D,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,yBAAA;AAAA,IACA,CAAA;AAAA,gCAAA,CAAA;AAAA,IAEA,OAAA,CAAQ,OAAQ,CAAA,UAAA,CAAW,0BACvB,GAAA,aAAA;AAAA,MACE,MAAM,aAAA;AAAA,QACJ,MAAO,CAAA,WAAA;AAAA,UACL,MAAO,CAAA,OAAA,CAAQ,OAAQ,CAAA,OAAA,CAAQ,aAAa,CAAA;AAAA,SAC9C;AAAA,OACF;AAAA,MACA;AAAA,QACE,aAAe,EAAA,sBAAA;AAAA,QACf,SAAW,EAAA,KAAA;AAAA,QACX,WAAa,EAAA,KAAA;AAAA,QACb,cAAgB,EAAA,KAAA;AAAA,QAChB,WAAa,EAAA,CAAA;AAAA,OACf;AAAA,KAEF,GAAA,EAAA;AAAA,IACJ,GAAA;AAAA;AAAA,IAEA,iBAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,aAAmD,EAAC,CAAA;AAE1D,EAAA,UAAA,CAAW,IAAK,CAAA;AAAA,IACd,IAAA,EAAM,IAAK,CAAA,QAAA,EAAU,qBAAqB,CAAA;AAAA,IAC1C,QAAA,EAAU,MAAO,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA,GAC3B,CAAA,CAAA;AAED,EAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,IACZ,UAAA,CAAW,GAAI,CAAA,OAAO,IAAS,KAAA;AAC7B,MAAA,MAAM,QAAQ,OAAQ,CAAA,OAAA,CAAQ,OAAQ,CAAA,QAAA,EAAU,KAAK,IAAI,CAAA,CAAA;AACzD,MAAM,MAAA,GAAA,CAAI,MAAM,OAAQ,CAAA,KAAK,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA,CAAA;AACnD,MAAA,MAAM,GAAI,CAAA,SAAA,CAAU,KAAO,EAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,KACzC,CAAA;AAAA,GACH,CAAA;AAEA,EAAI,IAAA,CAAC,OAAQ,CAAA,OAAA,CAAQ,WAAa,EAAA;AAChC,IAAA,OAAA,CAAQ,OAAO,OAAQ,CAAA,CAAA,iBAAA,EAAoB,UAAW,CAAA,QAAQ,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,GACnE;AACF;;;;"}