revert(packages): add server-only bundles (#1349) (#1354)

This commit is contained in:
Wesley Luyten
2026-04-17 11:44:53 -07:00
committed by GitHub
parent 3331fdaf25
commit 8530316987
60 changed files with 215 additions and 654 deletions
+3 -3
View File
@@ -2,8 +2,8 @@ type DefinableElement = CustomElementConstructor & { tagName: string };
/** Define a custom element only if not already registered. */
export function safeDefine(element: DefinableElement): void {
if (!__BROWSER__) return;
if (customElements.get(element.tagName)) return;
const registry = globalThis.customElements;
if (!registry || registry.get(element.tagName)) return;
customElements.define(element.tagName, element);
registry.define(element.tagName, element);
}
@@ -1,7 +1,11 @@
import { describe, expect, it } from 'vitest';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { safeDefine } from '../safe-define';
describe('safeDefine', () => {
afterEach(() => {
vi.unstubAllGlobals();
});
it('registers a custom element', () => {
class TestElement extends HTMLElement {
static tagName = 'test-sd-register';
@@ -33,4 +37,14 @@ describe('safeDefine', () => {
safeDefine(Replacement);
expect(customElements.get('test-sd-no-replace')).toBe(Original);
});
it('does nothing when customElements is unavailable', () => {
vi.stubGlobal('customElements', undefined);
class TestElement extends HTMLElement {
static tagName = 'test-sd-ssr';
}
expect(() => safeDefine(TestElement)).not.toThrow();
});
});
@@ -0,0 +1,21 @@
import { afterEach, describe, expect, it, vi } from 'vitest';
describe('SSR-safe define imports', () => {
afterEach(() => {
vi.unstubAllGlobals();
vi.resetModules();
});
it('imports video skin without browser-only globals', async () => {
vi.stubGlobal('customElements', undefined);
vi.stubGlobal('CSSStyleSheet', undefined);
await expect(import('../video/skin')).resolves.toBeDefined();
});
it('imports simple-hls-video without customElements', async () => {
vi.stubGlobal('customElements', undefined);
await expect(import('../media/simple-hls-video')).resolves.toBeDefined();
});
});