diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index b2b2155..e06b340 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -19,7 +19,14 @@ jobs:
with:
fetch-depth: 0
+ - name: Enforce stable releases target main
+ if: ${{ !github.event.release.prerelease && github.event.release.target_commitish != 'main' }}
+ uses: actions/github-script@ffc2c79a5b2490bd33e0a41c1de74b877714d736 # v3.2.0
+ with:
+ script: "core.setFailed('Non-prerelease releases must target the main branch (got: ${{ github.event.release.target_commitish }}).')"
+
- name: Merge main into release branch
+ if: ${{ !github.event.release.prerelease }}
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
@@ -35,7 +42,7 @@ jobs:
registry-url: https://registry.npmjs.org
- name: Update npm
- run: npm install -g npm@latest
+ run: npm install -g npm@11.11.0
- name: Get package.json version
id: package-json-version
@@ -59,10 +66,38 @@ jobs:
- name: Upload build artifacts
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: gh release upload ${{ github.event.release.tag_name }} dist/bundles/mediabunny.cjs dist/bundles/mediabunny.min.cjs dist/bundles/mediabunny.mjs dist/bundles/mediabunny.min.mjs dist/mediabunny.d.ts packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.js packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.min.js packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.mjs packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.min.mjs packages/mp3-encoder/dist/mediabunny-mp3-encoder.d.ts
-
- - name: Publish Mediabunny to npm
- run: npm publish --access public
+ run: >
+ gh release upload ${{ github.event.release.tag_name }}
+ dist/bundles/mediabunny.cjs
+ dist/bundles/mediabunny.min.cjs
+ dist/bundles/mediabunny.mjs
+ dist/bundles/mediabunny.min.mjs
+ dist/mediabunny.d.ts
+ packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.js
+ packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.min.js
+ packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.mjs
+ packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.min.mjs
+ packages/mp3-encoder/dist/mediabunny-mp3-encoder.d.ts
+ packages/ac3/dist/bundles/mediabunny-ac3.js
+ packages/ac3/dist/bundles/mediabunny-ac3.min.js
+ packages/ac3/dist/bundles/mediabunny-ac3.mjs
+ packages/ac3/dist/bundles/mediabunny-ac3.min.mjs
+ packages/ac3/dist/mediabunny-ac3.d.ts
+ packages/aac-encoder/dist/bundles/mediabunny-aac-encoder.js
+ packages/aac-encoder/dist/bundles/mediabunny-aac-encoder.min.js
+ packages/aac-encoder/dist/bundles/mediabunny-aac-encoder.mjs
+ packages/aac-encoder/dist/bundles/mediabunny-aac-encoder.min.mjs
+ packages/aac-encoder/dist/mediabunny-aac-encoder.d.ts
+ packages/flac-encoder/dist/bundles/mediabunny-flac-encoder.js
+ packages/flac-encoder/dist/bundles/mediabunny-flac-encoder.min.js
+ packages/flac-encoder/dist/bundles/mediabunny-flac-encoder.mjs
+ packages/flac-encoder/dist/bundles/mediabunny-flac-encoder.min.mjs
+ packages/flac-encoder/dist/mediabunny-flac-encoder.d.ts
+ packages/server/dist/bundles/mediabunny-server.cjs
+ packages/server/dist/bundles/mediabunny-server.min.cjs
+ packages/server/dist/bundles/mediabunny-server.mjs
+ packages/server/dist/bundles/mediabunny-server.min.mjs
+ packages/server/dist/mediabunny-server.d.ts
- name: Publish workspace packages to npm
- run: npm publish --access public --workspaces
+ run: npm publish --access public --workspaces ${{ github.event.release.prerelease && '--tag beta' || '' }}
diff --git a/.gitignore b/.gitignore
index a359208..10904ca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,8 @@ node_modules
/docs/api
*.tsbuildinfo
-packages/mp3-encoder/dist
\ No newline at end of file
+packages/mp3-encoder/dist
+packages/ac3/dist
+packages/aac-encoder/dist
+packages/flac-encoder/dist
+packages/server/dist
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 3b881ed..a8e60ea 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -3,5 +3,6 @@
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
- "typescript.tsdk": "node_modules/typescript/lib"
+ "typescript.tsdk": "node_modules/typescript/lib",
+ "js/ts.tsdk.path": "node_modules/typescript/lib"
}
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000..83413a7
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,6 @@
+- Prefer functions declared using const, not using the function keyword
+- Code style is tab indent with semicolons
+- Mediabunny core code is contained in src/, extensions are in packages/*/, website is in docs/
+- Tests: Prefer fewer, longer test files over many small ones. Test files should be named after the general catergory of thing that is being tested, not after any individual single test.
+- Avoid ifs without a {} block. So no if (cond) return;, always do if (cond) { return; }
+- `type` instead of `interface` for object types
\ No newline at end of file
diff --git a/README.md b/README.md
index 6d108d4..40bc2c3 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
-Mediabunny is a JavaScript library for reading, writing, and converting media files (like MP4, WebM, MP3), directly in the browser. It aims to be a complete toolkit for high-performance media operations on the web. It's written from scratch in pure TypeScript, has zero dependencies, is very performant, and is extremely tree-shakable, meaning you only include what you use. You can think of it a bit like [FFmpeg](https://ffmpeg.org/), but built from the ground up for the web.
+Mediabunny is a JavaScript library for reading, writing, and converting media (like MP4, WebM, MP3, HLS), directly in the browser. It aims to be a complete toolkit for high-performance media operations on the web. It's written from scratch in pure TypeScript, has zero dependencies, is very performant, and is extremely tree-shakable, meaning you only include what you use. You can think of it a bit like [FFmpeg](https://ffmpeg.org/), but built from the ground up for the web.
[Documentation](https://mediabunny.dev) | [Examples](https://mediabunny.dev/examples) | [Sponsoring](#sponsoring) | [License](#license) | [Discord](https://discord.gg/hmpkyYuS4U)
@@ -17,7 +17,10 @@ Mediabunny is a JavaScript library for reading, writing, and converting media fi
+
+
+
+
+
+
+
+
+
-
-
@@ -48,6 +55,10 @@ Mediabunny is a JavaScript library for reading, writing, and converting media fi
### Bronze sponsors