Skip to content
This repository was archived by the owner on Apr 9, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/cyan-corners-cough.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@crackle/core': patch
---

Fix compatibility with Node 24

Wrap async operations in `context.run()` to ensure `AsyncLocalStorage` context propagates correctly across async boundaries.
14 changes: 8 additions & 6 deletions packages/core/src/entries/clean.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type PartialConfig, getConfig } from '../config';
import { type PartialConfig, getConfig, context } from '../config';
import {
cleanPackageEntryPoints,
getPackageEntryPoints,
Expand All @@ -9,11 +9,13 @@ import { logger } from './logger';
export const clean = async (inlineConfig?: PartialConfig) => {
const config = await getConfig(inlineConfig);

const entries = await getPackageEntryPoints(config.root);
await context.run(config, async () => {
const entries = await getPackageEntryPoints(config.root);

await cleanPackageEntryPoints(entries, (entryPoint) => {
logger.info(`Cleaning \`${entryPoint.entryName}\``);
});
await cleanPackageEntryPoints(entries, (entryPoint) => {
logger.info(`Cleaning \`${entryPoint.entryName}\``);
});

logger.success('Done!');
logger.success('Done!');
});
};
39 changes: 21 additions & 18 deletions packages/core/src/entries/fix.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type PartialConfig, getConfig } from '../config';
import { type PartialConfig, getConfig, context } from '../config';
import { type PackageDiffDetails, renderDiffs } from '../reporters/fix';
import { getPackageEntryPoints, getPackages } from '../utils/entry-points';
import { updateGitignore } from '../utils/gitignore';
Expand All @@ -9,26 +9,29 @@ import { logger } from './logger';

export const fix = async (inlineConfig?: PartialConfig) => {
const config = await getConfig(inlineConfig);
const packages = await getPackages(config);
const packageList = Array.from(packages.values());

const packageDiffs: PackageDiffDetails[] = [];
await context.run(config, async () => {
const packages = await getPackages(config);
const packageList = Array.from(packages.values());

await promiseMap(packageList, async (pkg) => {
const entries = await getPackageEntryPoints(pkg.root);
const diffs = await fixPackageJson(pkg.root, entries);
packageDiffs.push({
packageName: pkg.name,
diffs,
const packageDiffs: PackageDiffDetails[] = [];

await promiseMap(packageList, async (pkg) => {
const entries = await getPackageEntryPoints(pkg.root);
const diffs = await fixPackageJson(pkg.root, entries);
packageDiffs.push({
packageName: pkg.name,
diffs,
});

await updateGitignore(pkg.root, entries);
});

await updateGitignore(pkg.root, entries);
if (packageDiffs.length === 0) {
logger.info('Nothing to fix');
} else {
logger.info(renderDiffs(packageDiffs));
logger.success('`crackle fix` completed successfully');
}
});

if (packageDiffs.length === 0) {
logger.info('Nothing to fix');
} else {
logger.info(renderDiffs(packageDiffs));
logger.success('`crackle fix` completed successfully');
}
};
11 changes: 9 additions & 2 deletions packages/core/src/entries/package.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@ import fs from 'fs/promises';
import path from 'path';
import process from 'process';

import { type EnhancedConfig, type PartialConfig, getConfig } from '../config';
import {
type EnhancedConfig,
type PartialConfig,
getConfig,
context,
} from '../config';
import { distDir } from '../constants';
import { createBundle } from '../package-utils/bundle';
import { createDtsBundle } from '../package-utils/dts';
Expand Down Expand Up @@ -105,7 +110,9 @@ export const buildPackage = async (partialConfig?: PartialConfig) => {
const packageName = await getPackageName(config);

try {
await build(config, packageName);
await context.run(config, async () => {
await build(config, packageName);
});
} catch (err: any) {
logger.error(err);
process.exitCode = 1;
Expand Down