apibara 2.1.0-beta.1 → 2.1.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/add.mjs +12 -7
- package/dist/chunks/dev.mjs +23 -5
- package/dist/chunks/init.mjs +3 -7
- package/dist/core/index.mjs +69 -40
- package/dist/create/index.d.mts +2 -1
- package/dist/create/index.d.ts +2 -1
- package/dist/create/index.mjs +185 -121
- package/dist/rolldown/index.d.mts +7 -0
- package/dist/rolldown/index.d.ts +7 -0
- package/dist/rolldown/index.mjs +90 -0
- package/dist/runtime/dev.mjs +3 -0
- package/dist/runtime/internal/app.d.ts +1 -1
- package/dist/runtime/internal/app.mjs +11 -3
- package/dist/runtime/start.mjs +5 -0
- package/dist/types/index.d.mts +18 -15
- package/dist/types/index.d.ts +18 -15
- package/package.json +12 -15
- package/src/cli/commands/add.ts +12 -6
- package/src/cli/commands/dev.ts +26 -5
- package/src/cli/commands/init.ts +3 -7
- package/src/core/build/build.ts +13 -5
- package/src/core/build/dev.ts +44 -23
- package/src/core/build/error.ts +9 -14
- package/src/core/build/prod.ts +15 -10
- package/src/core/build/types.ts +8 -0
- package/src/core/config/defaults.ts +3 -0
- package/src/core/config/update.ts +1 -1
- package/src/create/add.ts +26 -12
- package/src/create/constants.ts +9 -10
- package/src/create/init.ts +28 -14
- package/src/create/templates.ts +154 -118
- package/src/create/utils.ts +10 -0
- package/src/rolldown/config.ts +83 -0
- package/src/rolldown/index.ts +2 -0
- package/src/{rollup → rolldown}/plugins/config.ts +2 -1
- package/src/{rollup → rolldown}/plugins/indexers.ts +3 -3
- package/src/runtime/dev.ts +3 -0
- package/src/runtime/internal/app.ts +13 -5
- package/src/runtime/start.ts +5 -0
- package/src/types/config.ts +12 -7
- package/src/types/hooks.ts +8 -5
- package/src/types/index.ts +1 -1
- package/src/types/rolldown.ts +5 -0
- package/src/types/virtual/indexers.d.ts +4 -1
- package/dist/rollup/index.d.mts +0 -6
- package/dist/rollup/index.d.ts +0 -6
- package/dist/rollup/index.mjs +0 -150
- package/src/rollup/config.ts +0 -87
- package/src/rollup/index.ts +0 -2
- package/src/rollup/plugins/esm-shim.ts +0 -69
- package/src/types/rollup.ts +0 -8
package/dist/chunks/add.mjs
CHANGED
|
@@ -9,34 +9,39 @@ const add = defineCommand({
|
|
|
9
9
|
args: {
|
|
10
10
|
indexerId: {
|
|
11
11
|
type: "positional",
|
|
12
|
-
description: "Indexer ID",
|
|
12
|
+
description: "Indexer ID - must be in kebab-case",
|
|
13
13
|
required: false
|
|
14
14
|
},
|
|
15
15
|
chain: {
|
|
16
16
|
type: "string",
|
|
17
|
-
description: "
|
|
17
|
+
description: "Blockchain - ethereum, beaconchain, starknet"
|
|
18
18
|
},
|
|
19
19
|
network: {
|
|
20
20
|
type: "string",
|
|
21
|
-
description: "Network"
|
|
21
|
+
description: "Network - mainnet, sepolia, other"
|
|
22
22
|
},
|
|
23
23
|
storage: {
|
|
24
24
|
type: "string",
|
|
25
|
-
description: "Storage"
|
|
25
|
+
description: "Storage - postgres, none"
|
|
26
26
|
},
|
|
27
27
|
dnaUrl: {
|
|
28
28
|
type: "string",
|
|
29
|
-
description: "DNA URL"
|
|
29
|
+
description: "DNA URL - https://custom-dna-url.apibara.org"
|
|
30
|
+
},
|
|
31
|
+
dir: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "Root directory - apibara project root where apibara.config is located | default: current working directory"
|
|
30
34
|
}
|
|
31
35
|
},
|
|
32
36
|
async run({ args }) {
|
|
33
|
-
const { indexerId, chain, network, storage, dnaUrl } = args;
|
|
37
|
+
const { indexerId, chain, network, storage, dnaUrl, dir } = args;
|
|
34
38
|
await addIndexer({
|
|
35
39
|
argIndexerId: indexerId,
|
|
36
40
|
argChain: chain,
|
|
37
41
|
argNetwork: network,
|
|
38
42
|
argStorage: storage,
|
|
39
|
-
argDnaUrl: dnaUrl
|
|
43
|
+
argDnaUrl: dnaUrl,
|
|
44
|
+
argRootDir: dir
|
|
40
45
|
});
|
|
41
46
|
}
|
|
42
47
|
});
|
package/dist/chunks/dev.mjs
CHANGED
|
@@ -21,10 +21,18 @@ const dev = defineCommand({
|
|
|
21
21
|
preset: {
|
|
22
22
|
type: "string",
|
|
23
23
|
description: "Preset to use"
|
|
24
|
+
},
|
|
25
|
+
alwaysReindex: {
|
|
26
|
+
type: "boolean",
|
|
27
|
+
default: false,
|
|
28
|
+
description: "Reindex the indexers from the starting block on every restart (default: false)"
|
|
24
29
|
}
|
|
25
30
|
},
|
|
26
31
|
async run({ args }) {
|
|
27
32
|
const rootDir = resolve(args.dir || args._dir || ".");
|
|
33
|
+
if (args.alwaysReindex) {
|
|
34
|
+
process.env.APIBARA_ALWAYS_REINDEX = "true";
|
|
35
|
+
}
|
|
28
36
|
let apibara;
|
|
29
37
|
let childProcess;
|
|
30
38
|
const reload = async () => {
|
|
@@ -62,18 +70,20 @@ const dev = defineCommand({
|
|
|
62
70
|
await prepare(apibara);
|
|
63
71
|
await writeTypes(apibara);
|
|
64
72
|
await build(apibara);
|
|
65
|
-
apibara.hooks.hook("dev:restart", () => {
|
|
73
|
+
apibara.hooks.hook("dev:restart", async () => {
|
|
66
74
|
if (childProcess) {
|
|
67
75
|
apibara.logger.info("Change detected, stopping indexers to restart");
|
|
68
|
-
childProcess
|
|
76
|
+
await killProcess(childProcess);
|
|
69
77
|
childProcess = void 0;
|
|
70
78
|
}
|
|
71
79
|
});
|
|
72
|
-
apibara.hooks.hook("dev:reload", () => {
|
|
80
|
+
apibara.hooks.hook("dev:reload", async () => {
|
|
73
81
|
if (childProcess) {
|
|
74
|
-
|
|
82
|
+
apibara.logger.info("Restarting indexers");
|
|
83
|
+
await killProcess(childProcess);
|
|
84
|
+
childProcess = void 0;
|
|
75
85
|
} else {
|
|
76
|
-
apibara.logger.
|
|
86
|
+
apibara.logger.info("Starting indexers");
|
|
77
87
|
}
|
|
78
88
|
const childArgs = [
|
|
79
89
|
resolve(apibara.options.outputDir || "./.apibara/build", "dev.mjs"),
|
|
@@ -96,5 +106,13 @@ const dev = defineCommand({
|
|
|
96
106
|
await reload();
|
|
97
107
|
}
|
|
98
108
|
});
|
|
109
|
+
async function killProcess(childProcess) {
|
|
110
|
+
if (childProcess) {
|
|
111
|
+
await new Promise((resolve2) => {
|
|
112
|
+
childProcess.once("exit", resolve2);
|
|
113
|
+
childProcess.kill();
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
99
117
|
|
|
100
118
|
export { dev as default };
|
package/dist/chunks/init.mjs
CHANGED
|
@@ -18,22 +18,18 @@ const init = defineCommand({
|
|
|
18
18
|
default: "ts",
|
|
19
19
|
alias: "l"
|
|
20
20
|
},
|
|
21
|
-
|
|
21
|
+
noIndexer: {
|
|
22
22
|
type: "boolean",
|
|
23
23
|
description: "Do not create an indexer after initialization",
|
|
24
24
|
default: false
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
async run({ args }) {
|
|
28
|
-
const {
|
|
29
|
-
dir: targetDir,
|
|
30
|
-
"no-create-indexer": noCreateIndexer,
|
|
31
|
-
language
|
|
32
|
-
} = args;
|
|
28
|
+
const { dir: targetDir, noIndexer, language } = args;
|
|
33
29
|
await initializeProject({
|
|
34
30
|
argTargetDir: targetDir,
|
|
35
31
|
argLanguage: language,
|
|
36
|
-
argNoCreateIndexer:
|
|
32
|
+
argNoCreateIndexer: noIndexer
|
|
37
33
|
});
|
|
38
34
|
}
|
|
39
35
|
});
|
package/dist/core/index.mjs
CHANGED
|
@@ -5,12 +5,11 @@ import { klona } from 'klona/full';
|
|
|
5
5
|
import { resolve, join, basename, isAbsolute, relative, dirname } from 'pathe';
|
|
6
6
|
import defu from 'defu';
|
|
7
7
|
import fse from 'fs-extra';
|
|
8
|
-
import {
|
|
8
|
+
import { getRolldownConfig } from 'apibara/rolldown';
|
|
9
|
+
import { colors } from 'consola/utils';
|
|
9
10
|
import { watch } from 'chokidar';
|
|
10
11
|
import { debounce } from 'perfect-debounce';
|
|
11
|
-
import * as
|
|
12
|
-
import { rollup as rollup$1 } from 'rollup';
|
|
13
|
-
import { colors } from 'consola/utils';
|
|
12
|
+
import * as rolldown from 'rolldown';
|
|
14
13
|
import fsp from 'node:fs/promises';
|
|
15
14
|
import { generateTypes, resolveSchema } from 'untyped';
|
|
16
15
|
|
|
@@ -24,7 +23,9 @@ const ApibaraDefaults = {
|
|
|
24
23
|
strict: false,
|
|
25
24
|
generateRuntimeConfigTypes: true,
|
|
26
25
|
internalPaths: false
|
|
27
|
-
}
|
|
26
|
+
},
|
|
27
|
+
node: true,
|
|
28
|
+
exportConditions: ["node"]
|
|
28
29
|
};
|
|
29
30
|
|
|
30
31
|
async function resolvePathOptions(options) {
|
|
@@ -83,7 +84,7 @@ async function _loadUserConfig(configOverrides = {}, opts = {}, dev = false) {
|
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
async function updateApibaraConfig(apibara, _config) {
|
|
86
|
-
await apibara.hooks.callHook("
|
|
87
|
+
await apibara.hooks.callHook("rolldown:reload");
|
|
87
88
|
apibara.logger.success("Apibara config hot reloaded!");
|
|
88
89
|
}
|
|
89
90
|
|
|
@@ -134,20 +135,20 @@ async function createApibara(config = {}, opts = {}, dev = false) {
|
|
|
134
135
|
return apibara;
|
|
135
136
|
}
|
|
136
137
|
|
|
137
|
-
function
|
|
138
|
+
function formatRolldownError(_error) {
|
|
138
139
|
try {
|
|
139
140
|
const logs = [_error.toString()];
|
|
140
141
|
const errors = _error?.errors || [_error];
|
|
141
142
|
for (const error of errors) {
|
|
142
143
|
const id = error.path || error.id || _error.id;
|
|
143
144
|
let path = isAbsolute(id) ? relative(process.cwd(), id) : id;
|
|
144
|
-
const location = error.loc
|
|
145
|
+
const location = error.loc;
|
|
145
146
|
if (location) {
|
|
146
147
|
path += `:${location.line}:${location.column}`;
|
|
147
148
|
}
|
|
148
|
-
const text = error.
|
|
149
|
+
const text = error.frame;
|
|
149
150
|
logs.push(
|
|
150
|
-
`
|
|
151
|
+
`Rolldown error while processing \`${path}\`` + text ? "\n\n" + text : ""
|
|
151
152
|
);
|
|
152
153
|
}
|
|
153
154
|
return logs.join("\n");
|
|
@@ -156,45 +157,48 @@ function formatRollupError(_error) {
|
|
|
156
157
|
}
|
|
157
158
|
}
|
|
158
159
|
|
|
159
|
-
async function watchDev(apibara,
|
|
160
|
-
let
|
|
160
|
+
async function watchDev(apibara, rolldownConfig) {
|
|
161
|
+
let rolldownWatcher;
|
|
161
162
|
async function load() {
|
|
162
|
-
|
|
163
|
-
|
|
163
|
+
apibara.logger.start("Setting up a dev server");
|
|
164
|
+
if (rolldownWatcher) {
|
|
165
|
+
await rolldownWatcher.close();
|
|
164
166
|
}
|
|
165
|
-
|
|
167
|
+
rolldownWatcher = startRolldownWatcher(apibara, rolldownConfig);
|
|
166
168
|
}
|
|
167
|
-
const reload = debounce(load);
|
|
168
|
-
const watchPatterns =
|
|
169
|
+
const reload = debounce(async () => await load());
|
|
170
|
+
const watchPatterns = getWatchPatterns(apibara);
|
|
169
171
|
const watchReloadEvents = /* @__PURE__ */ new Set(["add", "addDir", "unlink", "unlinkDir"]);
|
|
170
172
|
const reloadWatcher = watch(watchPatterns, { ignoreInitial: true }).on(
|
|
171
173
|
"all",
|
|
172
|
-
(event) => {
|
|
174
|
+
async (event) => {
|
|
173
175
|
if (watchReloadEvents.has(event)) {
|
|
174
|
-
reload();
|
|
176
|
+
await reload();
|
|
175
177
|
}
|
|
176
178
|
}
|
|
177
179
|
);
|
|
178
180
|
apibara.hooks.hook("close", () => {
|
|
179
|
-
|
|
181
|
+
rolldownWatcher.close();
|
|
180
182
|
reloadWatcher.close();
|
|
181
183
|
});
|
|
182
|
-
apibara.hooks.hook("
|
|
184
|
+
apibara.hooks.hook("rolldown:reload", async () => await reload());
|
|
183
185
|
await load();
|
|
184
186
|
}
|
|
185
|
-
function
|
|
186
|
-
const
|
|
187
|
-
|
|
187
|
+
function startRolldownWatcher(apibara, rolldownConfig) {
|
|
188
|
+
const ignorePatterns = getIgnorePatterns();
|
|
189
|
+
const watcher = rolldown.watch(
|
|
190
|
+
defu(rolldownConfig, {
|
|
188
191
|
watch: {
|
|
189
|
-
|
|
192
|
+
exclude: ignorePatterns,
|
|
193
|
+
...apibara.options.watchOptions ?? {}
|
|
190
194
|
}
|
|
191
195
|
})
|
|
192
196
|
);
|
|
193
197
|
let start;
|
|
194
|
-
watcher.on("event", (event) => {
|
|
198
|
+
watcher.on("event", async (event) => {
|
|
195
199
|
switch (event.code) {
|
|
196
200
|
case "START": {
|
|
197
|
-
apibara.hooks.callHook("dev:restart");
|
|
201
|
+
await apibara.hooks.callHook("dev:restart");
|
|
198
202
|
return;
|
|
199
203
|
}
|
|
200
204
|
case "BUNDLE_START": {
|
|
@@ -207,34 +211,48 @@ function startRollupWatcher(apibara, rollupConfig) {
|
|
|
207
211
|
"Indexers built",
|
|
208
212
|
start ? `in ${Date.now() - start} ms` : ""
|
|
209
213
|
);
|
|
210
|
-
apibara.hooks.callHook("dev:reload");
|
|
214
|
+
await apibara.hooks.callHook("dev:reload");
|
|
211
215
|
return;
|
|
212
216
|
}
|
|
213
217
|
case "ERROR": {
|
|
214
|
-
apibara.logger.error(
|
|
218
|
+
apibara.logger.error(formatRolldownError(event.error));
|
|
215
219
|
}
|
|
216
220
|
}
|
|
217
221
|
});
|
|
218
222
|
return watcher;
|
|
219
223
|
}
|
|
224
|
+
const getWatchPatterns = (apibara) => [
|
|
225
|
+
join(apibara.options.rootDir, "indexers")
|
|
226
|
+
];
|
|
227
|
+
const getIgnorePatterns = (apibara) => [
|
|
228
|
+
"**/.apibara/**",
|
|
229
|
+
"**/.git/**",
|
|
230
|
+
"**/.DS_Store",
|
|
231
|
+
"**/node_modules/**",
|
|
232
|
+
"**/dist/**",
|
|
233
|
+
"**/.turbo/**"
|
|
234
|
+
];
|
|
220
235
|
|
|
221
|
-
async function buildProduction(apibara,
|
|
236
|
+
async function buildProduction(apibara, rolldownConfig) {
|
|
222
237
|
apibara.logger.start(
|
|
223
238
|
`Building ${colors.cyan(apibara.indexers.length)} indexers`
|
|
224
239
|
);
|
|
240
|
+
const startTime = Date.now();
|
|
225
241
|
try {
|
|
226
|
-
const bundle = await
|
|
227
|
-
if (Array.isArray(
|
|
228
|
-
for (const outputOptions of
|
|
242
|
+
const bundle = await rolldown.rolldown(rolldownConfig);
|
|
243
|
+
if (Array.isArray(rolldownConfig.output)) {
|
|
244
|
+
for (const outputOptions of rolldownConfig.output) {
|
|
229
245
|
await bundle.write(outputOptions);
|
|
230
246
|
}
|
|
231
|
-
} else if (
|
|
232
|
-
await bundle.write(
|
|
247
|
+
} else if (rolldownConfig.output) {
|
|
248
|
+
await bundle.write(rolldownConfig.output);
|
|
233
249
|
} else {
|
|
234
|
-
throw new Error("No output options specified in
|
|
250
|
+
throw new Error("No output options specified in Rolldown config");
|
|
235
251
|
}
|
|
236
252
|
await bundle.close();
|
|
237
|
-
|
|
253
|
+
const endTime = Date.now();
|
|
254
|
+
const duration = endTime - startTime;
|
|
255
|
+
apibara.logger.success(`Build succeeded in ${duration}ms`);
|
|
238
256
|
apibara.logger.info(
|
|
239
257
|
`You can start the indexers with ${colors.cyan("apibara start")}`
|
|
240
258
|
);
|
|
@@ -245,9 +263,16 @@ async function buildProduction(apibara, rollupConfig) {
|
|
|
245
263
|
}
|
|
246
264
|
|
|
247
265
|
async function build(apibara) {
|
|
248
|
-
const
|
|
249
|
-
await apibara.hooks.callHook("
|
|
250
|
-
|
|
266
|
+
const rolldownConfig = getRolldownConfig(apibara);
|
|
267
|
+
await apibara.hooks.callHook("rolldown:before", apibara, rolldownConfig);
|
|
268
|
+
if (apibara.options.rollupConfig) {
|
|
269
|
+
apibara.logger.error(
|
|
270
|
+
`
|
|
271
|
+
${colors.cyan("apibara.config:")} rollupConfig is deprecated. Use rolldownConfig instead`
|
|
272
|
+
);
|
|
273
|
+
process.exit(1);
|
|
274
|
+
}
|
|
275
|
+
return apibara.options.dev ? await watchDev(apibara, rolldownConfig) : await buildProduction(apibara, rolldownConfig);
|
|
251
276
|
}
|
|
252
277
|
|
|
253
278
|
function prettyPath(path, highlight = true) {
|
|
@@ -268,6 +293,10 @@ async function prepareDir(dir) {
|
|
|
268
293
|
}
|
|
269
294
|
|
|
270
295
|
async function writeTypes(apibara) {
|
|
296
|
+
const isTypeScript = apibara.options._c12.configFile?.endsWith(".ts");
|
|
297
|
+
if (!isTypeScript) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
271
300
|
const typesDir = resolve(apibara.options.buildDir, "types");
|
|
272
301
|
const config = [
|
|
273
302
|
"// Generated by apibara",
|
package/dist/create/index.d.mts
CHANGED
|
@@ -4,8 +4,9 @@ type Options$1 = {
|
|
|
4
4
|
argNetwork?: string;
|
|
5
5
|
argStorage?: string;
|
|
6
6
|
argDnaUrl?: string;
|
|
7
|
+
argRootDir?: string;
|
|
7
8
|
};
|
|
8
|
-
declare function addIndexer({ argIndexerId, argChain, argNetwork, argStorage, argDnaUrl, }: Options$1): Promise<void>;
|
|
9
|
+
declare function addIndexer({ argIndexerId, argChain, argNetwork, argStorage, argDnaUrl, argRootDir, }: Options$1): Promise<void>;
|
|
9
10
|
|
|
10
11
|
type Options = {
|
|
11
12
|
argTargetDir: string;
|
package/dist/create/index.d.ts
CHANGED
|
@@ -4,8 +4,9 @@ type Options$1 = {
|
|
|
4
4
|
argNetwork?: string;
|
|
5
5
|
argStorage?: string;
|
|
6
6
|
argDnaUrl?: string;
|
|
7
|
+
argRootDir?: string;
|
|
7
8
|
};
|
|
8
|
-
declare function addIndexer({ argIndexerId, argChain, argNetwork, argStorage, argDnaUrl, }: Options$1): Promise<void>;
|
|
9
|
+
declare function addIndexer({ argIndexerId, argChain, argNetwork, argStorage, argDnaUrl, argRootDir, }: Options$1): Promise<void>;
|
|
9
10
|
|
|
10
11
|
type Options = {
|
|
11
12
|
argTargetDir: string;
|