diff --git a/packages/brisa/src/__fixtures__/actions/a1.tsx b/packages/brisa/src/__fixtures__/actions/a1.tsx
deleted file mode 100644
index 50ec9fc9e..000000000
--- a/packages/brisa/src/__fixtures__/actions/a1.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-export function a1_1(props: any) {
- console.log('a1_1', props);
-}
-
-export function a1_2(props: any) {
- return 'a1_2';
-}
-
-export function a1_3(props: any, req: any) {
- const [event] = req.store.get('__params:a1_3');
- event.target.reset(); // Simulate a form reset
-}
diff --git a/packages/brisa/src/__fixtures__/actions/a2.tsx b/packages/brisa/src/__fixtures__/actions/a2.tsx
deleted file mode 100644
index 7fea500df..000000000
--- a/packages/brisa/src/__fixtures__/actions/a2.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { RequestContext } from '@/types';
-
-export async function a2_1({ onAction }: any) {
- return 'a2_1' + ((await onAction?.('foo')) ?? '');
-}
-
-export function a2_2({}, req: RequestContext) {
- const foo = req.store.get('__params:a2_2')[0];
- return '-a2_2-' + foo;
-}
diff --git a/packages/brisa/src/__fixtures__/actions/a3.tsx b/packages/brisa/src/__fixtures__/actions/index.tsx
similarity index 74%
rename from packages/brisa/src/__fixtures__/actions/a3.tsx
rename to packages/brisa/src/__fixtures__/actions/index.tsx
index 7ae650119..ffa4a2e08 100644
--- a/packages/brisa/src/__fixtures__/actions/a3.tsx
+++ b/packages/brisa/src/__fixtures__/actions/index.tsx
@@ -1,3 +1,27 @@
+import type { RequestContext } from '@/types';
+
+export function a1_1(props: any) {
+ console.log('a1_1', props);
+}
+
+export function a1_2(props: any) {
+ return 'a1_2';
+}
+
+export function a1_3(props: any, req: any) {
+ const [event] = req.store.get('__params:a1_3');
+ event.target.reset(); // Simulate a form reset
+}
+
+export async function a2_1({ onAction }: any) {
+ return 'a2_1' + ((await onAction?.('foo')) ?? '');
+}
+
+export function a2_2({}, req: RequestContext) {
+ const foo = req.store.get('__params:a2_2')[0];
+ return '-a2_2-' + foo;
+}
+
export async function a3_1({ onAction2 }: any, req: any) {
const [withAwait] = req.store.get('__params:a3_1');
console.log('a3_1 before calling nested action');
diff --git a/packages/brisa/src/cli/dev-live-reload.tsx b/packages/brisa/src/cli/dev-live-reload.tsx
index 156b5ec83..418770256 100644
--- a/packages/brisa/src/cli/dev-live-reload.tsx
+++ b/packages/brisa/src/cli/dev-live-reload.tsx
@@ -86,6 +86,7 @@ async function activateHotReload() {
if (!globalThis.brisaServer) return;
await reinitConstants();
+ Object.keys(require.cache).forEach((key) => delete require.cache[key]);
globalThis.brisaServer.publish('hot-reload', LIVE_RELOAD_COMMAND);
if (waitFilename) {
diff --git a/packages/brisa/src/cli/serve/serve-options.tsx b/packages/brisa/src/cli/serve/serve-options.tsx
index c2b54955e..7cb112ac2 100644
--- a/packages/brisa/src/cli/serve/serve-options.tsx
+++ b/packages/brisa/src/cli/serve/serve-options.tsx
@@ -253,9 +253,8 @@ export async function getServeOptions() {
// Middleware
if (customMiddleware) {
- const middlewareResponse = await Promise.resolve().then(() =>
- customMiddleware(req),
- );
+ // @ts-ignore TODO: Remove this comment when TypeScript adds Promise.try
+ const middlewareResponse = await Promise.try(() => customMiddleware(req));
if (middlewareResponse) return middlewareResponse;
}
diff --git a/packages/brisa/src/utils/compile-files/index.test.ts b/packages/brisa/src/utils/compile-files/index.test.ts
index 2d0ef413c..4aad3e5bb 100644
--- a/packages/brisa/src/utils/compile-files/index.test.ts
+++ b/packages/brisa/src/utils/compile-files/index.test.ts
@@ -194,10 +194,10 @@ describe('utils', () => {
).text();
expect(homePageContent).toContain(
- `"data-action-onclick":"a1_1","data-action"`,
+ `"data-action-onclick":"a2n9c_1","data-action"`,
);
expect(homePageContent).toContain(
- `"data-action-onclick":"a1_2","data-action"`,
+ `"data-action-onclick":"a2n9c_2","data-action"`,
);
const pagesClient = fs
@@ -283,7 +283,7 @@ describe('utils', () => {
${info}Ω /i18n | 162 B |
${info}Ψ /websocket | 207 B |
${info}Θ /web-components/_integrations | 67 B |
- ${info}λ /pages/index | 821 B | ${greenLog('3 kB')}
+ ${info}λ /pages/index | 827 B | ${greenLog('3 kB')}
${info}λ /pages/page-with-web-component | 761 B | ${greenLog('5 kB')}
${info}λ /pages/somepage | 1 kB | ${greenLog('0 B')}
${info}λ /pages/somepage-with-context | 1 kB | ${greenLog('0 B')}
@@ -433,7 +433,7 @@ describe('utils', () => {
).text();
expect(layoutContent).toContain(
- `"data-action-onclick":"a1_1","data-action"`,
+ `"data-action-onclick":"a2n9c_1","data-action"`,
);
const pagesClient = fs
@@ -464,7 +464,7 @@ describe('utils', () => {
${info}Route | JS server | JS client (gz)
${info}----------------------------------------------
${info}λ /pages/index | 444 B | ${greenLog('3 kB')}
- ${info}Δ /layout | 706 B |
+ ${info}Δ /layout | 709 B |
${info}
${info}λ Server entry-points
${info}Δ Layout
diff --git a/packages/brisa/src/utils/compile-files/index.ts b/packages/brisa/src/utils/compile-files/index.ts
index 03e436e3a..95f680fd1 100644
--- a/packages/brisa/src/utils/compile-files/index.ts
+++ b/packages/brisa/src/utils/compile-files/index.ts
@@ -13,7 +13,7 @@ import { logTable } from '@/utils/log/log-build';
import serverComponentPlugin from '@/utils/server-component-plugin';
import createContextPlugin from '@/utils/create-context/create-context-plugin';
import getI18nClientMessages from '@/utils/get-i18n-client-messages';
-import compileActions from '@/utils/compile-actions';
+import { transpileActions, buildActions } from '@/utils/transpile-actions';
import generateStaticExport from '@/utils/generate-static-export';
import getWebComponentsPerEntryPoints from '@/utils/get-webcomponents-per-entrypoints';
import { shouldTransferTranslatedPagePaths } from '@/utils/transfer-translated-page-paths';
@@ -102,7 +102,7 @@ export default async function compileFiles() {
let code = await Bun.file(path).text();
try {
- const fileID = `a${actionIdCount}`;
+ const fileID = `a${Bun.hash(path).toString(36)}`;
const result = serverComponentPlugin(code, {
path,
allWebComponents,
@@ -117,7 +117,10 @@ export default async function compileFiles() {
actionsEntrypoints.push(actionEntrypoint);
actionIdCount += 1;
- await Bun.write(actionEntrypoint, result.code);
+ await Bun.write(
+ actionEntrypoint,
+ transpileActions(result.code),
+ );
}
code = result.code;
@@ -145,7 +148,7 @@ export default async function compileFiles() {
if (!success) return { success, logs, pagesSize: {} };
if (actionsEntrypoints.length) {
- const actionResult = await compileActions({ actionsEntrypoints, define });
+ const actionResult = await buildActions({ actionsEntrypoints, define });
if (!actionResult.success) logs.push(...actionResult.logs);
}
diff --git a/packages/brisa/src/utils/get-client-code-in-page/index.test.ts b/packages/brisa/src/utils/get-client-code-in-page/index.test.ts
index a431a8904..057457ef9 100644
--- a/packages/brisa/src/utils/get-client-code-in-page/index.test.ts
+++ b/packages/brisa/src/utils/get-client-code-in-page/index.test.ts
@@ -22,7 +22,7 @@ const i18nCode = 2799;
const brisaSize = 5720; // TODO: Reduce this size :/
const webComponents = 1107;
const unsuspenseSize = 213;
-const rpcSize = 2509; // TODO: Reduce this size
+const rpcSize = 2500; // TODO: Reduce this size
const lazyRPCSize = 4105; // TODO: Reduce this size
// lazyRPC is loaded after user interaction (action, link),
// so it's not included in the initial size
diff --git a/packages/brisa/src/utils/import-file-if-exists/index.ts b/packages/brisa/src/utils/import-file-if-exists/index.ts
index ca4c3fff8..2c86de1fb 100644
--- a/packages/brisa/src/utils/import-file-if-exists/index.ts
+++ b/packages/brisa/src/utils/import-file-if-exists/index.ts
@@ -7,7 +7,8 @@ export default async function importFileIfExists(
| 'i18n'
| 'brisa.config'
| '_integrations'
- | 'css-files',
+ | 'css-files'
+ | 'actions',
dir = path.join(process.cwd(), 'build'),
) {
const importablePath = getImportableFilepath(filename, dir);
diff --git a/packages/brisa/src/utils/response-action/index.test.ts b/packages/brisa/src/utils/response-action/index.test.ts
index 6909dc09a..dd58e2689 100644
--- a/packages/brisa/src/utils/response-action/index.test.ts
+++ b/packages/brisa/src/utils/response-action/index.test.ts
@@ -9,7 +9,7 @@ import {
} from 'bun:test';
import path from 'node:path';
import extendRequestContext from '@/utils/extend-request-context';
-import responseAction, { getActionFile } from '.';
+import responseAction from '.';
import { getConstants } from '@/constants';
import { ENCRYPT_NONTEXT_PREFIX, encrypt } from '@/utils/crypto';
import { boldLog } from '@/utils/log/log-color';
@@ -847,10 +847,4 @@ describe('utils', () => {
expect(await res.text()).toBe(JSON.stringify([['foo', 'bar']]));
});
});
-
- describe('getActionFile', () => {
- it('should return the file with the .js extension to work in Node.js and Bun.js', () => {
- expect(getActionFile('a1_1')).toBe('a1.js');
- });
- });
});
diff --git a/packages/brisa/src/utils/response-action/index.ts b/packages/brisa/src/utils/response-action/index.ts
index 938372e6d..30917ce95 100644
--- a/packages/brisa/src/utils/response-action/index.ts
+++ b/packages/brisa/src/utils/response-action/index.ts
@@ -1,26 +1,24 @@
-import { join } from 'node:path';
-import { getConstants } from '@/constants';
import type { RequestContext } from '@/types';
import { deserialize } from '@/utils/serialization';
import transferStoreService from '@/utils/transfer-store-service';
import { resolveStore } from '@/utils/transfer-store-service';
import { logError } from '@/utils/log/log-build';
import { pathToFileURLWhenNeeded } from '../get-importable-filepath';
+import importFileIfExists from '../import-file-if-exists';
+import { getConstants } from '@/constants';
const DEPENDENCIES = Symbol.for('DEPENDENCIES');
export default async function responseAction(req: RequestContext) {
+ const { BUILD_DIR } = getConstants();
+ const actionModule = await importFileIfExists('actions', BUILD_DIR);
+
const { transferClientStoreToServer, formData, body } =
await transferStoreService(req);
- const { BUILD_DIR } = getConstants();
const url = new URL(req.url);
const action =
req.headers.get('x-action') ?? url.searchParams.get('_aid') ?? '';
const actionsHeaderValue = req.headers.get('x-actions') ?? '[]';
- const actionFile = getActionFile(action);
- const actionModule = await import(
- pathToFileURLWhenNeeded(join(BUILD_DIR, 'actions', actionFile!))
- );
let resetForm = false;
const target = {
@@ -90,19 +88,9 @@ export default async function responseAction(req: RequestContext) {
for (const [eventName, actionId] of actions) {
nextProps[eventName] = async (...params: unknown[]) => {
const { promise, resolve, reject } = Promise.withResolvers();
+ const actionDependency = actionModule[actionId];
actionCallPromises.push([actionId, promise]);
-
- const file = actionId.split('_').at(0);
- const actionDependency =
- file === actionFile
- ? actionModule[actionId]
- : (
- await import(
- pathToFileURLWhenNeeded(join(BUILD_DIR, 'actions', file!))
- )
- )[actionId];
-
req.store.set(`__params:${actionId}`, params);
try {
@@ -211,7 +199,3 @@ export default async function responseAction(req: RequestContext) {
return response;
}
-
-export function getActionFile(action: string) {
- return action.split('_').at(0) + '.js';
-}
diff --git a/packages/brisa/src/utils/compile-actions/get-actions-info/index.test.ts b/packages/brisa/src/utils/transpile-actions/get-actions-info/index.test.ts
similarity index 100%
rename from packages/brisa/src/utils/compile-actions/get-actions-info/index.test.ts
rename to packages/brisa/src/utils/transpile-actions/get-actions-info/index.test.ts
diff --git a/packages/brisa/src/utils/compile-actions/get-actions-info/index.ts b/packages/brisa/src/utils/transpile-actions/get-actions-info/index.ts
similarity index 100%
rename from packages/brisa/src/utils/compile-actions/get-actions-info/index.ts
rename to packages/brisa/src/utils/transpile-actions/get-actions-info/index.ts
diff --git a/packages/brisa/src/utils/compile-actions/get-purged-body/index.test.ts b/packages/brisa/src/utils/transpile-actions/get-purged-body/index.test.ts
similarity index 99%
rename from packages/brisa/src/utils/compile-actions/get-purged-body/index.test.ts
rename to packages/brisa/src/utils/transpile-actions/get-purged-body/index.test.ts
index 5f7cd93d8..cfc559e1b 100644
--- a/packages/brisa/src/utils/compile-actions/get-purged-body/index.test.ts
+++ b/packages/brisa/src/utils/transpile-actions/get-purged-body/index.test.ts
@@ -2,7 +2,7 @@ import { normalizeHTML } from '@/helpers';
import AST from '@/utils/ast';
import { describe, it, expect } from 'bun:test';
import { getPurgedBody } from '.';
-import getActionsInfo from '@/utils/compile-actions/get-actions-info';
+import getActionsInfo from '@/utils/transpile-actions/get-actions-info';
const { parseCodeToAST, generateCodeFromAST } = AST('tsx');
diff --git a/packages/brisa/src/utils/compile-actions/get-purged-body/index.ts b/packages/brisa/src/utils/transpile-actions/get-purged-body/index.ts
similarity index 96%
rename from packages/brisa/src/utils/compile-actions/get-purged-body/index.ts
rename to packages/brisa/src/utils/transpile-actions/get-purged-body/index.ts
index ff648a776..710a9c348 100644
--- a/packages/brisa/src/utils/compile-actions/get-purged-body/index.ts
+++ b/packages/brisa/src/utils/transpile-actions/get-purged-body/index.ts
@@ -1,5 +1,5 @@
import type { ESTree } from 'meriyah';
-import type { ActionInfo } from '@/utils/compile-actions/get-actions-info';
+import type { ActionInfo } from '@/utils/transpile-actions/get-actions-info';
import removeAllReturns from '@/utils/ast/remove-all-returns';
import containsIdentifiers from '@/utils/ast/contains-identifiers';
import getAllIdentifiers from '@/utils/ast/get-all-identifiers';
diff --git a/packages/brisa/src/utils/compile-actions/index.test.ts b/packages/brisa/src/utils/transpile-actions/index.test.ts
similarity index 97%
rename from packages/brisa/src/utils/compile-actions/index.test.ts
rename to packages/brisa/src/utils/transpile-actions/index.test.ts
index 6f4e88083..a5c0f6ee2 100644
--- a/packages/brisa/src/utils/compile-actions/index.test.ts
+++ b/packages/brisa/src/utils/transpile-actions/index.test.ts
@@ -1,20 +1,20 @@
import { describe, it, expect, afterEach } from 'bun:test';
import path from 'node:path';
-import { transformToActionCode } from '.';
+import { transpileActions } from '.';
import { normalizeHTML } from '@/helpers';
import { getConstants } from '@/constants';
import serverComponentPlugin, {
workaroundText,
} from '@/utils/server-component-plugin';
-function compileActions(code: string) {
+function buildActions(code: string) {
const modifiedCode = serverComponentPlugin(code, {
allWebComponents: {},
fileID: 'a1',
path: '',
}).code.replace(workaroundText, '');
- return normalizeHTML(transformToActionCode(modifiedCode));
+ return normalizeHTML(transpileActions(modifiedCode));
}
const brisaServerFile = path
@@ -25,14 +25,14 @@ describe('utils', () => {
afterEach(() => {
globalThis.mockConstants = undefined;
});
- describe('transformToActionCode', () => {
+ describe('transpileActions', () => {
it('should transform a simple component with 1 action', () => {
const code = `
export default function Component({text}) {
return
console.log('hello world')}>{text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -67,7 +67,7 @@ describe('utils', () => {
return console.log('hello world')}>Hello world
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -103,7 +103,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -140,7 +140,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -176,7 +176,7 @@ describe('utils', () => {
return console.log('hello world')}>{text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -212,7 +212,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -247,7 +247,7 @@ describe('utils', () => {
return {text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -283,7 +283,7 @@ describe('utils', () => {
return {text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -322,7 +322,7 @@ describe('utils', () => {
return {text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -359,7 +359,7 @@ describe('utils', () => {
return console.log('hello world')}>{foo}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -394,7 +394,7 @@ describe('utils', () => {
return console.log('hello world')}>{foo}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -427,7 +427,7 @@ describe('utils', () => {
const code = `
export default ({foo}) => console.log('hello world')}>{foo}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -460,7 +460,7 @@ describe('utils', () => {
const code = `
export default async ({foo}) => console.log('hello world')}>{foo}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -495,7 +495,7 @@ describe('utils', () => {
return console.log('hello world')}>{text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -539,7 +539,7 @@ describe('utils', () => {
SlowComponent.suspense = () => <>Loading slow component...>
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -583,7 +583,7 @@ describe('utils', () => {
export default Component;
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -620,7 +620,7 @@ describe('utils', () => {
export default Component;
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -655,7 +655,7 @@ describe('utils', () => {
export default Component;
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -695,7 +695,7 @@ describe('utils', () => {
export {ComponentA, ComponentB};
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -755,7 +755,7 @@ describe('utils', () => {
);
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -825,7 +825,7 @@ describe('utils', () => {
export {Foo};
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -901,7 +901,7 @@ describe('utils', () => {
}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -978,7 +978,7 @@ describe('utils', () => {
}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1056,7 +1056,7 @@ describe('utils', () => {
}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1131,7 +1131,7 @@ describe('utils', () => {
}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1205,7 +1205,7 @@ describe('utils', () => {
return console.log('hello world')} data-action-onClick="a1_1" data-action>{text}
}
`;
- expect(normalizeHTML(transformToActionCode(code))).toContain(
+ expect(normalizeHTML(transpileActions(code))).toContain(
normalizeHTML(
'component: __props => jsx(Component, {text, ...__props})',
),
@@ -1220,7 +1220,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1259,7 +1259,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1300,7 +1300,7 @@ describe('utils', () => {
export {SOME_CONSTANT, Component}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1338,7 +1338,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1376,7 +1376,7 @@ describe('utils', () => {
return el;
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -1415,7 +1415,7 @@ describe('utils', () => {
return el;
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -1474,7 +1474,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1524,7 +1524,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1565,7 +1565,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1606,7 +1606,7 @@ describe('utils', () => {
return {text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1645,7 +1645,7 @@ describe('utils', () => {
return {text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1683,7 +1683,7 @@ describe('utils', () => {
return {text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1722,7 +1722,7 @@ describe('utils', () => {
return {text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1763,7 +1763,7 @@ describe('utils', () => {
return {text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1810,7 +1810,7 @@ describe('utils', () => {
return {text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1854,7 +1854,7 @@ describe('utils', () => {
return {text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1897,7 +1897,7 @@ describe('utils', () => {
return console.log('hello world'))}>{text}
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1934,7 +1934,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -1971,7 +1971,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -2007,7 +2007,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -2043,7 +2043,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -2105,7 +2105,7 @@ describe('utils', () => {
);
}`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -2197,7 +2197,7 @@ describe('utils', () => {
);
}`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -2292,7 +2292,7 @@ describe('utils', () => {
);
}`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -2365,7 +2365,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -2435,7 +2435,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -2486,7 +2486,7 @@ describe('utils', () => {
return getEl(text);
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from "brisa/server";
@@ -2552,7 +2552,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -2655,7 +2655,7 @@ describe('utils', () => {
export const ComponentWithAction = () => el;
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -2726,7 +2726,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -2786,7 +2786,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -2848,7 +2848,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -2914,7 +2914,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -2980,7 +2980,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import {resolveAction as __resolveAction} from 'brisa/server';
@@ -3046,7 +3046,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import { resolveAction as __resolveAction } from 'brisa/server';
@@ -3092,7 +3092,7 @@ describe('utils', () => {
}
`;
- const output = compileActions(code);
+ const output = buildActions(code);
const expected = normalizeHTML(`
import { resolveAction as __resolveAction } from 'brisa/server';
diff --git a/packages/brisa/src/utils/compile-actions/index.ts b/packages/brisa/src/utils/transpile-actions/index.ts
similarity index 95%
rename from packages/brisa/src/utils/compile-actions/index.ts
rename to packages/brisa/src/utils/transpile-actions/index.ts
index 3ba817abc..1670060b0 100644
--- a/packages/brisa/src/utils/compile-actions/index.ts
+++ b/packages/brisa/src/utils/transpile-actions/index.ts
@@ -1,4 +1,3 @@
-import type { BunPlugin } from 'bun';
import type { ESTree } from 'meriyah';
import fs from 'node:fs';
import { join } from 'node:path';
@@ -25,61 +24,7 @@ const FN_EXPRESSION_TYPES = new Set([
'FunctionExpression',
]);
-export default async function compileActions({
- actionsEntrypoints,
- define,
-}: CompileActionsParams) {
- const { BUILD_DIR, IS_PRODUCTION, CONFIG } = getConstants();
- const isNode = CONFIG.output === 'node' && IS_PRODUCTION;
- const rawActionsDir = join(BUILD_DIR, 'actions_raw');
- const external = CONFIG.external ? [...CONFIG.external, 'brisa'] : ['brisa'];
- const res = await Bun.build({
- entrypoints: actionsEntrypoints,
- outdir: join(BUILD_DIR, 'actions'),
- external,
- sourcemap: IS_PRODUCTION ? undefined : 'inline',
- root: rawActionsDir,
- target: isNode ? 'node' : 'bun',
- minify: IS_PRODUCTION,
- splitting: true,
- define,
- plugins: [actionPlugin({ actionsEntrypoints })],
- });
-
- if (!res.success) {
- logBuildError('Failed to compile actions', res.logs);
- }
-
- fs.rmSync(rawActionsDir, { recursive: true });
-
- return res;
-}
-
-function actionPlugin({
- actionsEntrypoints,
-}: {
- actionsEntrypoints: string[];
-}) {
- // These replaces are to fix the regex in Windows
- const filter = new RegExp(
- `(${actionsEntrypoints.join('|').replace(/\\/g, '\\\\')})$`.replace(
- /\//g,
- '[\\\\/]',
- ),
- );
-
- return {
- name: 'action-plugin',
- setup(build) {
- build.onLoad({ filter }, async ({ path, loader }) => {
- const code = await Bun.file(path).text();
- return { contents: transformToActionCode(code), loader };
- });
- },
- } satisfies BunPlugin;
-}
-
-export function transformToActionCode(code: string) {
+export function transpileActions(code: string) {
let ast = parseCodeToAST(code);
ast = addResolveActionImport(ast);
@@ -644,3 +589,39 @@ function wrapWithTypeCatch({
],
};
}
+
+export async function buildActions({
+ actionsEntrypoints,
+ define,
+}: CompileActionsParams) {
+ const { BUILD_DIR, IS_PRODUCTION, CONFIG } = getConstants();
+ const isNode = CONFIG.output === 'node' && IS_PRODUCTION;
+ const rawActionsDir = join(BUILD_DIR, 'actions_raw');
+ const barrelFile = join(rawActionsDir, 'index.ts');
+
+ await Bun.write(
+ barrelFile,
+ actionsEntrypoints.map((p) => `export * from '${p}'`).join('\n'),
+ );
+
+ const external = CONFIG.external ? [...CONFIG.external, 'brisa'] : ['brisa'];
+ const res = await Bun.build({
+ entrypoints: [barrelFile],
+ outdir: join(BUILD_DIR, 'actions'),
+ external,
+ sourcemap: IS_PRODUCTION ? undefined : 'inline',
+ root: rawActionsDir,
+ target: isNode ? 'node' : 'bun',
+ minify: IS_PRODUCTION,
+ splitting: true,
+ define,
+ });
+
+ if (!res.success) {
+ logBuildError('Failed to compile actions', res.logs);
+ }
+
+ fs.rmSync(rawActionsDir, { recursive: true });
+
+ return res;
+}