apibara 2.1.0-beta.5 → 2.1.0-beta.50

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 (119) hide show
  1. package/dist/chunks/add.mjs +16 -8
  2. package/dist/chunks/add.mjs.map +1 -0
  3. package/dist/chunks/build.mjs +4 -2
  4. package/dist/chunks/build.mjs.map +1 -0
  5. package/dist/chunks/dev.mjs +55 -21
  6. package/dist/chunks/dev.mjs.map +1 -0
  7. package/dist/chunks/init.mjs +11 -7
  8. package/dist/chunks/init.mjs.map +1 -0
  9. package/dist/chunks/prepare.mjs +4 -2
  10. package/dist/chunks/prepare.mjs.map +1 -0
  11. package/dist/chunks/start.mjs +16 -4
  12. package/dist/chunks/start.mjs.map +1 -0
  13. package/dist/chunks/write-project-info.mjs +51 -0
  14. package/dist/chunks/write-project-info.mjs.map +1 -0
  15. package/dist/cli/index.mjs +3 -1
  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 +134 -69
  24. package/dist/core/index.mjs.map +1 -0
  25. package/dist/create/index.d.mts +2 -1
  26. package/dist/create/index.d.ts +2 -1
  27. package/dist/create/index.mjs +80 -136
  28. package/dist/create/index.mjs.map +1 -0
  29. package/dist/hooks/index.mjs +6 -1
  30. package/dist/hooks/index.mjs.map +1 -0
  31. package/dist/indexer/index.d.ts +1 -0
  32. package/dist/indexer/index.mjs +1 -0
  33. package/dist/indexer/plugins.d.ts +1 -0
  34. package/dist/indexer/plugins.mjs +1 -0
  35. package/dist/indexer/testing.d.ts +1 -0
  36. package/dist/indexer/testing.mjs +1 -0
  37. package/dist/indexer/vcr.d.ts +1 -0
  38. package/dist/indexer/vcr.mjs +1 -0
  39. package/dist/rolldown/index.d.mts +7 -0
  40. package/dist/rolldown/index.d.ts +7 -0
  41. package/dist/rolldown/index.mjs +141 -0
  42. package/dist/rolldown/index.mjs.map +1 -0
  43. package/dist/runtime/dev.mjs +39 -17
  44. package/dist/runtime/internal/app.d.ts +14 -1
  45. package/dist/runtime/internal/app.mjs +26 -21
  46. package/dist/runtime/project-info.d.ts +3 -0
  47. package/dist/runtime/project-info.mjs +67 -0
  48. package/dist/runtime/start.mjs +78 -11
  49. package/dist/shared/apibara.730bb1e4.mjs +18 -0
  50. package/dist/shared/apibara.730bb1e4.mjs.map +1 -0
  51. package/dist/types/index.d.mts +24 -20
  52. package/dist/types/index.d.ts +24 -20
  53. package/dist/types/index.mjs +1 -0
  54. package/dist/types/index.mjs.map +1 -0
  55. package/package.json +34 -17
  56. package/src/cli/commands/add.ts +16 -7
  57. package/src/cli/commands/build.ts +5 -2
  58. package/src/cli/commands/dev.ts +64 -20
  59. package/src/cli/commands/init.ts +12 -7
  60. package/src/cli/commands/prepare.ts +4 -3
  61. package/src/cli/commands/start.ts +18 -3
  62. package/src/cli/commands/write-project-info.ts +56 -0
  63. package/src/cli/index.ts +2 -0
  64. package/src/common/cli.ts +40 -0
  65. package/src/common/constants.ts +6 -0
  66. package/src/common/helper.ts +86 -0
  67. package/src/common/index.ts +3 -0
  68. package/src/core/apibara.ts +7 -2
  69. package/src/core/build/build.ts +13 -5
  70. package/src/core/build/dev.ts +46 -23
  71. package/src/core/build/error.ts +9 -14
  72. package/src/core/build/prepare.ts +5 -3
  73. package/src/core/build/prod.ts +25 -16
  74. package/src/core/build/types.ts +11 -1
  75. package/src/core/config/defaults.ts +3 -0
  76. package/src/core/config/loader.ts +15 -7
  77. package/src/core/config/resolvers/runtime.resolver.ts +44 -0
  78. package/src/core/config/update.ts +6 -2
  79. package/src/core/scan.ts +1 -1
  80. package/src/create/add.ts +14 -20
  81. package/src/create/constants.ts +5 -7
  82. package/src/create/init.ts +2 -2
  83. package/src/create/templates.ts +43 -116
  84. package/src/create/types.ts +3 -0
  85. package/src/create/utils.ts +20 -7
  86. package/src/hooks/useRuntimeConfig.ts +4 -1
  87. package/src/indexer/index.ts +1 -0
  88. package/src/indexer/plugins.ts +1 -0
  89. package/src/indexer/testing.ts +1 -0
  90. package/src/indexer/vcr.ts +1 -0
  91. package/src/rolldown/config.ts +86 -0
  92. package/src/rolldown/index.ts +2 -0
  93. package/src/{rollup → rolldown}/plugins/indexers.ts +3 -3
  94. package/src/rolldown/plugins/instrumentation.ts +68 -0
  95. package/src/rolldown/plugins/static-config.ts +21 -0
  96. package/src/runtime/dev.ts +49 -19
  97. package/src/runtime/internal/app.ts +42 -29
  98. package/src/runtime/project-info.ts +90 -0
  99. package/src/runtime/start.ts +91 -11
  100. package/src/types/config.ts +27 -13
  101. package/src/types/hooks.ts +8 -5
  102. package/src/types/index.ts +1 -1
  103. package/src/types/rolldown.ts +5 -0
  104. package/src/types/virtual/indexers.d.ts +4 -1
  105. package/src/types/virtual/instrumentation.d.ts +4 -0
  106. package/src/types/virtual/static-config.d.ts +4 -0
  107. package/dist/rollup/index.d.mts +0 -6
  108. package/dist/rollup/index.d.ts +0 -6
  109. package/dist/rollup/index.mjs +0 -150
  110. package/dist/shared/apibara.1b515d04.mjs +0 -8
  111. package/src/cli/common.ts +0 -8
  112. package/src/core/config/resolvers/preset.resolver.ts +0 -9
  113. package/src/core/config/resolvers/runtime-config.resolver.ts +0 -6
  114. package/src/rollup/config.ts +0 -87
  115. package/src/rollup/index.ts +0 -2
  116. package/src/rollup/plugins/config.ts +0 -12
  117. package/src/rollup/plugins/esm-shim.ts +0 -69
  118. package/src/types/rollup.ts +0 -8
  119. package/src/types/virtual/config.d.ts +0 -3
@@ -1,3 +1,4 @@
1
+ import { checkForUnknownArgs } from 'apibara/common';
1
2
  import { addIndexer } from 'apibara/create';
2
3
  import { defineCommand } from 'citty';
3
4
 
@@ -9,36 +10,43 @@ const add = defineCommand({
9
10
  args: {
10
11
  indexerId: {
11
12
  type: "positional",
12
- description: "Indexer ID",
13
+ description: "Indexer ID - must be in kebab-case",
13
14
  required: false
14
15
  },
15
16
  chain: {
16
17
  type: "string",
17
- description: "Chain"
18
+ description: "Blockchain - ethereum, beaconchain, starknet"
18
19
  },
19
20
  network: {
20
21
  type: "string",
21
- description: "Network"
22
+ description: "Network - mainnet, sepolia, other"
22
23
  },
23
24
  storage: {
24
25
  type: "string",
25
- description: "Storage"
26
+ description: "Storage - postgres, none"
26
27
  },
27
28
  dnaUrl: {
28
29
  type: "string",
29
- description: "DNA URL"
30
+ description: "DNA URL - https://custom-dna-url.apibara.org"
31
+ },
32
+ dir: {
33
+ type: "string",
34
+ description: "Root directory - apibara project root where apibara.config is located | default: current working directory"
30
35
  }
31
36
  },
32
- async run({ args }) {
33
- const { indexerId, chain, network, storage, dnaUrl } = args;
37
+ async run({ args, cmd }) {
38
+ await checkForUnknownArgs(args, cmd);
39
+ const { indexerId, chain, network, storage, dnaUrl, dir } = args;
34
40
  await addIndexer({
35
41
  argIndexerId: indexerId,
36
42
  argChain: chain,
37
43
  argNetwork: network,
38
44
  argStorage: storage,
39
- argDnaUrl: dnaUrl
45
+ argDnaUrl: dnaUrl,
46
+ argRootDir: dir
40
47
  });
41
48
  }
42
49
  });
43
50
 
44
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,8 +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 } from '../shared/apibara.1b515d04.mjs';
6
6
 
7
7
  const build = defineCommand({
8
8
  meta: {
@@ -12,7 +12,8 @@ const build = defineCommand({
12
12
  args: {
13
13
  ...commonArgs
14
14
  },
15
- async run({ args }) {
15
+ async run({ args, cmd }) {
16
+ await checkForUnknownArgs(args, cmd);
16
17
  const rootDir = resolve(args.dir || args._dir || ".");
17
18
  const apibara = await createApibara({
18
19
  rootDir
@@ -26,3 +27,4 @@ const build = defineCommand({
26
27
  });
27
28
 
28
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,12 +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
- import { c as commonArgs } from '../shared/apibara.1b515d04.mjs';
8
+ import { b as blueBright, g as gray } from '../shared/apibara.730bb1e4.mjs';
9
+ import 'picocolors';
8
10
 
9
- const hmrKeyRe = /^runtimeConfig\./;
11
+ const hmrKeyRe = /^(runtimeConfig\.|presets\.|preset$)/;
10
12
  const dev = defineCommand({
11
13
  meta: {
12
14
  name: "dev",
@@ -21,10 +23,22 @@ const dev = defineCommand({
21
23
  preset: {
22
24
  type: "string",
23
25
  description: "Preset to use"
26
+ },
27
+ "always-reindex": {
28
+ type: "boolean",
29
+ default: false,
30
+ description: "Reindex the indexers from the starting block on every restart | default: `false`"
24
31
  }
25
32
  },
26
- async run({ args }) {
33
+ async run({ args, data, cmd, rawArgs }) {
34
+ await checkForUnknownArgs(args, cmd);
27
35
  const rootDir = resolve(args.dir || args._dir || ".");
36
+ if (args["always-reindex"]) {
37
+ process.env.APIBARA_ALWAYS_REINDEX = "true";
38
+ }
39
+ const selectedIndexers = new Set(
40
+ args.indexers?.split(",").map((i) => i.trim()).sort() ?? []
41
+ );
28
42
  let apibara;
29
43
  let childProcess;
30
44
  const reload = async () => {
@@ -37,7 +51,8 @@ const dev = defineCommand({
37
51
  }
38
52
  apibara = await createApibara(
39
53
  {
40
- rootDir
54
+ rootDir,
55
+ preset: args.preset
41
56
  },
42
57
  {
43
58
  watch: true,
@@ -48,53 +63,72 @@ const dev = defineCommand({
48
63
  return;
49
64
  }
50
65
  apibara.logger.info(
51
- `Config updated:
52
- ${diff.map((entry) => ` ${entry.toString()}`).join("\n")}`
66
+ `Config updated:
67
+ ${diff.map((entry) => ` ${entry.toString()}`).join("\n")}`
53
68
  );
54
- 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());
55
73
  }
56
74
  }
57
75
  },
58
76
  true
59
77
  );
60
- apibara.hooks.hookOnce("restart", reload);
78
+ apibara.hooks.hookOnce("restart", async () => {
79
+ await reload();
80
+ });
61
81
  apibara.options.entry = join(runtimeDir, "dev.mjs");
62
82
  await prepare(apibara);
63
83
  await writeTypes(apibara);
64
84
  await build(apibara);
65
- apibara.hooks.hook("dev:restart", () => {
85
+ apibara.hooks.hook("dev:restart", async () => {
66
86
  if (childProcess) {
67
87
  apibara.logger.info("Change detected, stopping indexers to restart");
68
- childProcess.kill();
88
+ await killProcess(childProcess);
69
89
  childProcess = void 0;
70
90
  }
71
91
  });
72
- apibara.hooks.hook("dev:reload", () => {
92
+ apibara.hooks.hook("dev:reload", async () => {
73
93
  if (childProcess) {
74
- childProcess.kill();
94
+ await killProcess(childProcess);
95
+ childProcess = void 0;
96
+ apibara.logger.info("Restarting indexers");
75
97
  } else {
76
- apibara.logger.success("Restarting indexers");
98
+ apibara.logger.info("Starting indexers");
99
+ const indexersText = apibara.indexers.map(
100
+ (i) => selectedIndexers.has(i.name) || selectedIndexers.size === 0 ? blueBright(i.name) : gray(i.name)
101
+ ).join(", ");
102
+ apibara.logger.info("Indexers:", indexersText);
77
103
  }
78
104
  const childArgs = [
79
105
  resolve(apibara.options.outputDir || "./.apibara/build", "dev.mjs"),
80
106
  "start",
81
- ...args.indexers ? ["--indexers", args.indexers] : [],
82
- ...args.preset ? ["--preset", args.preset] : []
107
+ ...args.indexers ? ["--indexers", args.indexers] : []
83
108
  ];
84
109
  childProcess = spawn("node", childArgs, {
85
110
  stdio: "inherit"
86
111
  });
87
- childProcess.on("close", (code) => {
88
- if (code !== null) {
89
- apibara.logger.log(
90
- `Indexers process exited with code ${colors.red(code)}`
91
- );
92
- }
112
+ childProcess.on("close", (code, signal) => {
113
+ childProcess = void 0;
114
+ console.log();
115
+ apibara.logger.info(
116
+ `Indexers process exited${code !== null ? ` with code ${colors.red(code)}` : ""}`
117
+ );
93
118
  });
94
119
  });
95
120
  };
96
121
  await reload();
97
122
  }
98
123
  });
124
+ async function killProcess(childProcess) {
125
+ if (childProcess) {
126
+ await new Promise((resolve2) => {
127
+ childProcess.once("exit", resolve2);
128
+ childProcess.kill();
129
+ });
130
+ }
131
+ }
99
132
 
100
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,3 +1,4 @@
1
+ import { checkForUnknownArgs } from 'apibara/common';
1
2
  import { initializeProject } from 'apibara/create';
2
3
  import { defineCommand } from 'citty';
3
4
 
@@ -14,24 +15,27 @@ const init = defineCommand({
14
15
  },
15
16
  language: {
16
17
  type: "string",
17
- description: "Language to use: typescript, ts or javascript, js",
18
+ description: "Language to use: typescript, ts or javascript, js | default: `ts`",
18
19
  default: "ts",
19
20
  alias: "l"
20
21
  },
21
- noIndexer: {
22
+ "create-indexer": {
22
23
  type: "boolean",
23
- description: "Do not create an indexer after initialization",
24
- default: false
24
+ name: "create-indexer",
25
+ default: true,
26
+ description: "TODO"
25
27
  }
26
28
  },
27
- async run({ args }) {
28
- const { dir: targetDir, noIndexer, language } = args;
29
+ async run({ args, cmd }) {
30
+ await checkForUnknownArgs(args, cmd);
31
+ const { dir: targetDir, "create-indexer": createIndexer, language } = args;
29
32
  await initializeProject({
30
33
  argTargetDir: targetDir,
31
34
  argLanguage: language,
32
- argNoCreateIndexer: noIndexer
35
+ argNoCreateIndexer: !createIndexer
33
36
  });
34
37
  }
35
38
  });
36
39
 
37
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,7 +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 } from '../shared/apibara.1b515d04.mjs';
5
5
 
6
6
  const prepare = defineCommand({
7
7
  meta: {
@@ -11,7 +11,8 @@ const prepare = defineCommand({
11
11
  args: {
12
12
  ...commonArgs
13
13
  },
14
- async run({ args }) {
14
+ async run({ args, cmd }) {
15
+ await checkForUnknownArgs(args, cmd);
15
16
  const rootDir = resolve(args.dir || ".");
16
17
  const apibara = await createApibara({ rootDir });
17
18
  await writeTypes(apibara);
@@ -19,3 +20,4 @@ const prepare = defineCommand({
19
20
  });
20
21
 
21
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,9 +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';
5
+ import { colors } from 'consola/utils';
4
6
  import fse from 'fs-extra';
5
7
  import { resolve } from 'pathe';
6
- import { c as commonArgs } from '../shared/apibara.1b515d04.mjs';
7
8
 
8
9
  const start = defineCommand({
9
10
  meta: {
@@ -22,11 +23,13 @@ const start = defineCommand({
22
23
  description: "The preset to use"
23
24
  }
24
25
  },
25
- async run({ args }) {
26
+ async run({ args, cmd }) {
26
27
  const { indexer, preset } = args;
27
28
  const rootDir = resolve(args.dir || args._dir || ".");
29
+ await checkForUnknownArgs(args, cmd);
28
30
  const apibara = await createApibara({
29
- rootDir
31
+ rootDir,
32
+ preset
30
33
  });
31
34
  apibara.logger.start(
32
35
  `Starting indexer ${indexer}${preset ? ` with preset ${preset}` : ""}`
@@ -45,12 +48,21 @@ const start = defineCommand({
45
48
  "start",
46
49
  "--indexer",
47
50
  indexer,
51
+ // important: this is required to run the indexer with apibara cli to load runtime values correctly
52
+ "--no-standalone",
48
53
  ...preset ? ["--preset", preset] : []
49
54
  ];
50
- spawn("node", childArgs, {
55
+ const childProcess = spawn("node", childArgs, {
51
56
  stdio: "inherit"
52
57
  });
58
+ childProcess.on("close", (code, signal) => {
59
+ console.log();
60
+ apibara.logger.info(
61
+ `Indexers process exited${code !== null ? ` with code ${colors.red(code)}` : ""}`
62
+ );
63
+ });
53
64
  }
54
65
  });
55
66
 
56
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;;;;"}
@@ -0,0 +1,51 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { join } from 'node:path';
3
+ import { commonArgs, checkForUnknownArgs } from 'apibara/common';
4
+ import { createApibara, prepare, writeTypes, build } from 'apibara/core';
5
+ import { runtimeDir } from 'apibara/runtime/meta';
6
+ import { defineCommand } from 'citty';
7
+ import consola from 'consola';
8
+ import { resolve } from 'pathe';
9
+
10
+ const writeProjectInfo = defineCommand({
11
+ meta: {
12
+ name: "write-project-info",
13
+ description: "Write json-encoded information about the project."
14
+ },
15
+ args: {
16
+ ...commonArgs
17
+ },
18
+ async run({ args, cmd }) {
19
+ await checkForUnknownArgs(args, cmd);
20
+ consola.start("Generating `project-info.json`");
21
+ const rootDir = resolve(args.dir || ".");
22
+ const apibara = await createApibara({ rootDir, disableLogs: true });
23
+ apibara.options.entry = join(runtimeDir, "project-info.mjs");
24
+ await prepare(apibara);
25
+ await writeTypes(apibara);
26
+ await build(apibara);
27
+ const childArgs = [
28
+ resolve(
29
+ apibara.options.outputDir || "./.apibara/build",
30
+ "project-info.mjs"
31
+ ),
32
+ "start",
33
+ "--build-dir",
34
+ apibara.options.buildDir
35
+ ];
36
+ const child = spawn("node", childArgs, {
37
+ stdio: "inherit"
38
+ });
39
+ child.on("close", (code) => {
40
+ if (code === 0) {
41
+ consola.success("Project info written to `.apibara/project-info.json`");
42
+ }
43
+ });
44
+ child.on("error", (error) => {
45
+ consola.error(`Failed to write project info: ${error.message}`, error);
46
+ });
47
+ }
48
+ });
49
+
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;;;;"}
@@ -13,9 +13,11 @@ const mainCli = defineCommand({
13
13
  start: () => import('../chunks/start.mjs').then((r) => r.default),
14
14
  prepare: () => import('../chunks/prepare.mjs').then((r) => r.default),
15
15
  init: () => import('../chunks/init.mjs').then((r) => r.default),
16
- add: () => import('../chunks/add.mjs').then((r) => r.default)
16
+ add: () => import('../chunks/add.mjs').then((r) => r.default),
17
+ "write-project-info": () => import('../chunks/write-project-info.mjs').then((r) => r.default)
17
18
  }
18
19
  });
19
20
  runMain(mainCli);
20
21
 
21
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