Files
metabase/frontend/lint/tests/fixtures/resolve-config-parity.js
2026-10-05 22:41:31 +13:00

63 lines
1.9 KiB
JavaScript

const assert = require("node:assert/strict");
const path = require("node:path");
const sdk = require("../../../build/embedding-sdk/rspack/resolve-config");
const {
ENTERPRISE_SRC_PATH,
} = require("../../../build/shared/rspack/resolve-aliases");
const app = require("../../../build/shared/rspack/resolve-config");
// Snapshot what lint sees before full configuration loading can mutate shared objects.
const light = { app: structuredClone(app), sdk: structuredClone(sdk) };
const fromNodeModules = Object.keys(require.cache).find((file) =>
file.includes(`${path.sep}node_modules${path.sep}`),
);
assert.equal(
fromNodeModules,
undefined,
`lint's resolve configs must stay dependency free, but loaded ${fromNodeModules}`,
);
const SDK_ENTERPRISE_ALIASES = {
"sdk-ee-plugins": "/sdk-plugins",
"sdk-iframe-embedding-ee-plugins": "/sdk-iframe-embedding-plugins",
"ee-overrides": "/overrides",
};
for (const [alias, subpath] of Object.entries(SDK_ENTERPRISE_ALIASES)) {
assert.equal(
light.sdk.resolve.alias[alias],
ENTERPRISE_SRC_PATH + subpath,
`${alias}: the SDK resolves to the enterprise tree in every edition`,
);
if (process.env.MB_EDITION === "ee") {
assert.equal(
light.app.resolve.alias[alias],
light.sdk.resolve.alias[alias],
`${alias}: EE app`,
);
} else {
assert.ok(
!light.app.resolve.alias[alias].startsWith(ENTERPRISE_SRC_PATH),
`${alias}: the OSS app must resolve to a noop stub, got ${light.app.resolve.alias[alias]}`,
);
}
}
for (const { name, snapshot, full } of [
{
name: "app",
snapshot: light.app,
full: require("../../../../rspack.main.config"),
},
{
name: "sdk",
snapshot: light.sdk,
full: require("../../../../rspack.embedding-sdk-bundle.config"),
},
]) {
assert.deepEqual(snapshot.resolve, full.resolve, `${name}: resolve`);
assert.deepEqual(snapshot.externals, full.externals, `${name}: externals`);
}