diff --git a/.gitignore b/.gitignore
index c01e3a81..ced680e0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -130,6 +130,9 @@ dist
# ignore polyfills copy
packages/*/src/polyfills
+# Vendored mux-embed types — regenerated on install via root prepare hook
+packages/playback-core/src/vendor/mux-embed.ts
+
.turbo
examples/astro/.vercel/
diff --git a/.prettierignore b/.prettierignore
index 88d2c97c..611058f1 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -6,3 +6,4 @@ examples
*.sublime-*
*.vscode*
*.md
+packages/playback-core/src/vendor
diff --git a/package-lock.json b/package-lock.json
index 93b6f41a..8ad50688 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7006,7 +7006,6 @@
"version": "3.697.1",
"resolved": "https://registry.npmjs.org/@types/google_interactive_media_ads_types/-/google_interactive_media_ads_types-3.697.1.tgz",
"integrity": "sha512-gRjJoPKQRjjTuySHqZe8Pnu6a5B0bKbTUD2ioDLPSWlEuBaAc2p1mzUzy42SCeWkyYffo2Mnv+blUGuvVvx3dQ==",
- "dev": true,
"license": "MIT"
},
"node_modules/@types/hast": {
@@ -26942,7 +26941,7 @@
"@mux/mux-video": "0.31.0",
"@mux/playback-core": "0.35.0",
"media-chrome": "~4.19.0",
- "player.style": "^0.3.4"
+ "player.style": "^0.3.0"
},
"devDependencies": {
"@mux/esbuilder": "*",
@@ -27712,13 +27711,13 @@
"dependencies": {
"@mux/mux-data-google-ima": "^0.3.4",
"@mux/playback-core": "0.35.0",
- "castable-video": "^1.1.13",
+ "@types/google_interactive_media_ads_types": "^3.697.0",
+ "castable-video": "~1.1.13",
"custom-media-element": "~1.4.6",
"media-tracks": "~0.3.5"
},
"devDependencies": {
"@open-wc/testing": "^4.0.0",
- "@types/google_interactive_media_ads_types": "^3.697.0",
"@typescript-eslint/eslint-plugin": "^8.27.0",
"@typescript-eslint/parser": "^8.27.0",
"@web/dev-server-esbuild": "^1.0.4",
diff --git a/package.json b/package.json
index e5d2a7a8..ecd5eac5 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
"build:packages": "turbo run build --filter '!./examples/*'",
"build": "turbo run build",
"i18n": "turbo run i18n",
- "prepare": "husky"
+ "prepare": "husky && npm run vendor:types -w @mux/playback-core"
},
"packageManager": "npm@11.2.0"
}
diff --git a/packages/mux-video/package.json b/packages/mux-video/package.json
index 8943e3dd..8db811a9 100644
--- a/packages/mux-video/package.json
+++ b/packages/mux-video/package.json
@@ -126,13 +126,13 @@
"dependencies": {
"@mux/mux-data-google-ima": "^0.3.4",
"@mux/playback-core": "0.35.0",
+ "@types/google_interactive_media_ads_types": "^3.697.0",
"castable-video": "~1.1.13",
"custom-media-element": "~1.4.6",
"media-tracks": "~0.3.5"
},
"devDependencies": {
"@open-wc/testing": "^4.0.0",
- "@types/google_interactive_media_ads_types": "^3.697.0",
"@typescript-eslint/eslint-plugin": "^8.27.0",
"@typescript-eslint/parser": "^8.27.0",
"@web/dev-server-esbuild": "^1.0.4",
diff --git a/packages/mux-video/src/ads/index.ts b/packages/mux-video/src/ads/index.ts
index 62d947fa..7a35b92d 100644
--- a/packages/mux-video/src/ads/index.ts
+++ b/packages/mux-video/src/ads/index.ts
@@ -1,6 +1,5 @@
/* eslint @typescript-eslint/triple-slash-reference: "off" */
///
-///
/** @TODO publish types for package to use here (CJP) */
// @ts-ignore
diff --git a/packages/playback-core/.eslintignore b/packages/playback-core/.eslintignore
new file mode 100644
index 00000000..cee46cca
--- /dev/null
+++ b/packages/playback-core/.eslintignore
@@ -0,0 +1 @@
+src/vendor
diff --git a/packages/playback-core/package.json b/packages/playback-core/package.json
index 0d1a60f8..3aa60d11 100644
--- a/packages/playback-core/package.json
+++ b/packages/playback-core/package.json
@@ -51,7 +51,8 @@
"build:esm-module": "esbuilder src/index.ts --sourcemap --format=esm --outfile=./dist/playback-core.mjs",
"build:cjs": "esbuilder src/index.ts --sourcemap --format=cjs --out-extension:.js=.cjs.js --external:mux-embed --external:hls.js",
"build:iife": "esbuilder src/index.ts --sourcemap --format=iife --outfile=./dist/playback-core.js",
- "prebuild:types": "shx mkdir -p ./dist/types",
+ "vendor:types": "node ./scripts/vendor-mux-embed-types.mjs",
+ "prebuild:types": "npm run vendor:types && shx mkdir -p ./dist/types",
"build:types": "tsc",
"postbuild:types": "downlevel-dts ./dist/types ./dist/types-ts3.4 --to=3.4",
"build": "npm-run-all --parallel 'build:esm -- --minify' 'build:iife -- --minify' 'build:cjs -- --minify' 'build:esm-module -- --minify'"
diff --git a/packages/playback-core/scripts/vendor-mux-embed-types.mjs b/packages/playback-core/scripts/vendor-mux-embed-types.mjs
new file mode 100644
index 00000000..d36d93c4
--- /dev/null
+++ b/packages/playback-core/scripts/vendor-mux-embed-types.mjs
@@ -0,0 +1,38 @@
+import { createRequire } from 'node:module';
+import { existsSync } from 'node:fs';
+import { mkdir, readFile, writeFile } from 'node:fs/promises';
+import { dirname, join, resolve } from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const require = createRequire(import.meta.url);
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+// Resolve the mux-embed package root by walking up from its main entry
+// (require.resolve respects exports, so we can't use a subpath directly)
+const muxEmbedMain = require.resolve('mux-embed');
+let pkgRoot = dirname(muxEmbedMain);
+while (!existsSync(join(pkgRoot, 'package.json'))) {
+ const parent = dirname(pkgRoot);
+ if (parent === pkgRoot) {
+ throw new Error(`Could not find mux-embed package.json starting from ${muxEmbedMain}`);
+ }
+ pkgRoot = parent;
+}
+
+const pkg = JSON.parse(await readFile(join(pkgRoot, 'package.json'), 'utf8'));
+if (pkg.name !== 'mux-embed') {
+ throw new Error(`Found package.json at ${pkgRoot}, but it is "${pkg.name}", not mux-embed`);
+}
+
+const SOURCE = join(pkgRoot, 'dist/types/mux-embed.d.ts');
+const DEST = resolve(__dirname, '../src/vendor/mux-embed.ts');
+const HEADER = `// AUTO-GENERATED — do not edit.
+// Source: mux-embed@${pkg.version} / dist/types/mux-embed.d.ts
+// Run \`npm run vendor:types\` to refresh.
+
+`;
+
+const content = await readFile(SOURCE, 'utf8');
+await mkdir(dirname(DEST), { recursive: true });
+await writeFile(DEST, HEADER + content);
+console.log(`Vendored mux-embed@${pkg.version} types -> ${DEST}`);
diff --git a/packages/playback-core/src/types.ts b/packages/playback-core/src/types.ts
index 885dd554..a8cc6713 100644
--- a/packages/playback-core/src/types.ts
+++ b/packages/playback-core/src/types.ts
@@ -1,5 +1,5 @@
/* eslint @typescript-eslint/triple-slash-reference: "off" */
-///
+///
import type { Options, Mux } from 'mux-embed';
import type { MediaError } from './errors';
import type { HlsConfig } from 'hls.js';