Compare commits

..

60 Commits

Author SHA1 Message Date
Jake Archibald
7346511fa1 Merge v2 codecs (#844)
* wip

* doh, whitespace

* Updating emscripten, restoring export name

* Updating oxipng

* Build wasm

* Fix oxipng; upgrade Rust

* More v2-codec integration

* AVIF now working

* Non-working JXL

* Build hqx with Rust 1.40; refactor build-rust*.sh

* Set web target

* wp2 wip

* wp2 decode options

* Better logo height when loading the logo into squoosh

* Build oxi

* JAKE IS AN IDIOT

* wip oxipng

* Fixing case sensitive imports

* adding log

* another log

* Abort tasks when compress component removed

* Adding progressive option to JXL

* Fix bug going to & from original image

* Exposing epf in jxl

* logs

* Bypass initial CSS plugin

* Revert "logs"

* Adding root

* Fix for finding TSC on Windows

* Use spawn again

* Converting to module paths

* Remove spawnP

* silly

* oops

* logs

* Fixing glob paths in CSS plugin

* Path normalising

* Normalise paths for CSS plugin

* Normalise again

* Use correct func

* Adding lossless mode and near lossless (but hidden in UI)

* Removing useless comments

* Some logging

* Update JXL to v0.1. (#846)

* Rebuild JXL

* Adding slight loss option

Co-authored-by: Ingvar Stepanyan <rreverser@google.com>
Co-authored-by: Luca Versari <veluca93@gmail.com>
2020-11-19 10:55:43 +00:00
Jake Archibald
39ca054112 Change case of dirs 2020-11-12 15:10:05 +00:00
Jake Archibald
1b80dd23ee Patching omt for the service worker 2020-11-12 14:00:10 +00:00
Jake Archibald
d1ee92e884 Inline initial script 2020-11-12 13:59:50 +00:00
Jake Archibald
f1da577ba3 Avoid double builds 2020-11-12 12:28:34 +00:00
Jake Archibald
52b3d0063f Avoid redundant empty file 2020-11-11 16:57:47 +00:00
Jake Archibald
eb9d0d186c Better checking of processor equivalence 2020-11-11 16:49:00 +00:00
Jake Archibald
964390501e Fix initial loading state 2020-11-11 16:16:24 +00:00
Jake Archibald
b412d4c2a5 Moving component instantiation to avoid preact removing it 2020-11-11 15:59:29 +00:00
Jake Archibald
7dfc9310ba This is wrong 2020-11-11 15:50:17 +00:00
Jake Archibald
b38069695a Quantizer bug fix 2020-11-11 15:35:17 +00:00
Jake Archibald
2d21406484 Removing old code, some bugfixes 2020-11-11 15:28:57 +00:00
Jake Archibald
56f9d4b8c8 Bug fixes 2020-11-11 14:49:39 +00:00
Jake Archibald
be4601b93a All options 2020-11-11 12:12:05 +00:00
Jake Archibald
196e6e1aea Adding output 2020-11-10 13:12:31 +00:00
Jake Archibald
6d0d9dc022 Clear loading states 2020-11-10 11:57:28 +00:00
Jake Archibald
324c2b6cab Compress module done (aside from imports) 2020-11-10 11:45:30 +00:00
Jake Archibald
b6fd14b6d3 Progress on single process pass 2020-11-09 18:02:18 +00:00
Jake Archibald
9111aa89ae More work on compress 2020-11-09 12:14:16 +00:00
Jake Archibald
c17b5c36c6 The client needs to be able to see types from the worker 2020-11-09 11:53:49 +00:00
Jake Archibald
4502abb069 Probably should include the client code in the client 2020-11-09 10:58:08 +00:00
Jake Archibald
5a027c7727 Much simpler project structure 2020-11-09 10:54:35 +00:00
Jake Archibald
4da1887826 Processor work 2020-11-09 10:29:25 +00:00
Jake Archibald
b1a639c182 Processors and encoding 2020-11-08 13:25:14 +00:00
Jake Archibald
6dbb182f7b Auto generate client tsconfig 2020-11-08 13:15:25 +00:00
Jake Archibald
a360191759 Standard shape for encoders 2020-11-08 12:01:33 +00:00
Jake Archibald
1cb1c16fa2 Refactor resize 2020-11-06 16:47:37 +00:00
Jake Archibald
ec586bb529 Structure for browser decoders. Some work on decoding. 2020-11-06 13:05:12 +00:00
Jake Archibald
4b8c0178fe Generating processor metadata 2020-11-06 10:25:26 +00:00
Jake Archibald
0d298e3e0a Getting things in to a buildable state 2020-10-07 15:29:15 +01:00
Jake Archibald
13c5b76af6 Adding oxi shared code 2020-10-07 14:29:23 +01:00
Jake Archibald
7836d7e97c Generating feature metadata 2020-09-29 17:56:19 +01:00
Jake Archibald
db2d6f4ca6 Fix worker bridge code 2020-09-29 16:44:58 +01:00
Jake Archibald
b11ae0b8c7 Missing args 2020-09-29 16:36:13 +01:00
Jake Archibald
81d0b38dbd CSS generate comment 2020-09-25 13:57:43 +01:00
Jake Archibald
b47d6b4696 Moving worker and worker bridge 2020-09-25 13:49:58 +01:00
Jake Archibald
f96ae9bdee wip 2020-09-25 13:04:39 +01:00
Jake Archibald
4d8efcea66 SW bits that make it good enough for now 2020-09-25 09:38:19 +01:00
Jake Archibald
e11b4cf22c Service worker building (but not quite right yet) 2020-09-24 17:35:02 +01:00
Jake Archibald
3f2466f44d Re-enable terser 2020-09-24 15:20:13 +01:00
Jake Archibald
778aa41f0d Prerender & client render of intro 2020-09-24 15:19:57 +01:00
Jake Archibald
486957443d Downgrade postcss for modules support 2020-09-24 13:30:53 +01:00
Jake Archibald
02e4eaf4b5 CSS plugin 2020-09-24 11:49:41 +01:00
Jake Archibald
f5d9023ff3 Update postcss 2020-09-23 14:44:13 +01:00
Jake Archibald
455c868e55 First bit of real UI code landed 2020-09-23 14:38:41 +01:00
Jake Archibald
6573103755 Add manifest 2020-09-23 10:58:50 +01:00
Jake Archibald
a30e38856e Avoid infinite rebuilds 2020-09-22 17:48:51 +01:00
Jake Archibald
d2807ebb18 Integrate Oxi 2020-09-22 17:35:47 +01:00
Jake Archibald
fd151fc70d Add hqx 2020-09-22 17:16:55 +01:00
Jake Archibald
812e727de0 Integrate rotate 2020-09-22 14:40:27 +01:00
Jake Archibald
2a6a83f56d Resize working 2020-09-21 15:19:38 +01:00
Jake Archibald
21fc70cbdd wip 2020-09-21 14:25:08 +01:00
Jake Archibald
d9e1177cd8 wip on rust wasm integration 2020-09-21 14:23:04 +01:00
Jake Archibald
300809fdcb Client/shared/worker split for resize 2020-09-21 13:01:07 +01:00
Jake Archibald
7540a15f8d Features folder 2020-09-18 16:28:56 +01:00
Jake Archibald
f92e3c2194 Move encode options definition to the wasm 2020-09-16 12:30:26 +01:00
Jake Archibald
7776134bc2 AVIF in worker 2020-09-16 11:48:13 +01:00
Jake Archibald
2583d689b9 AVIF to module 2020-09-16 11:04:00 +01:00
Jake Archibald
25102095aa Update webp from main branch 2020-09-16 11:03:19 +01:00
Jake Archibald
a6477b82fc wip
# Conflicts:
#	codecs/cpp.Dockerfile
#	codecs/imagequant/example.html
#	codecs/webp/dec/webp_dec.d.ts
#	codecs/webp/dec/webp_dec.js
#	codecs/webp/dec/webp_dec.wasm
#	codecs/webp/enc/webp_enc.d.ts
#	codecs/webp/enc/webp_enc.js
#	codecs/webp/enc/webp_enc.wasm
#	package-lock.json
#	package.json
#	src/codecs/tiny.webp
#	src_old/codecs/encoders.ts
#	src_old/codecs/processor-worker/tiny.avif
#	src_old/codecs/processor-worker/tiny.webp
#	src_old/codecs/tiny.webp
#	src_old/components/compress/index.tsx
#	src_old/lib/util.ts
#	src_old/sw/util.ts
2020-09-16 10:08:50 +01:00
295 changed files with 28392 additions and 12126 deletions

2
.gitattributes vendored
View File

@@ -1,2 +0,0 @@
/codecs/**/*.js linguist-generated=true
/codecs/*/pkg*/*.d.ts linguist-generated=true

View File

@@ -1,22 +0,0 @@
name: Node.js CI
on: [push, pull_request]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@v2
- id: nvmrc
uses: browniebroke/read-nvmrc-action@v1
- uses: actions/setup-node@v1
with:
node-version: '${{ steps.nvmrc.outputs.node_version }}'
- run: npm ci
- run: npm run build

1
.gitignore vendored
View File

@@ -4,7 +4,6 @@ node_modules
*.css.d.ts
build
*.o
.DS_Store
# Auto-generated by lib/feature-plugin.js
src/features-worker/index.ts

2
.nvmrc
View File

@@ -1 +1 @@
14.15.1
12.18.3

View File

@@ -1,12 +0,0 @@
codecs
.tmp
node_modules
*.scss.d.ts
*.css.d.ts
build
*.o
# Auto-generated by lib/feature-plugin.js
src/features-worker/index.ts
src/client/lazy-app/worker-bridge/meta.ts
src/client/lazy-app/feature-meta/index.ts

7
.travis.yml Normal file
View File

@@ -0,0 +1,7 @@
language: node_js
cache: npm
script: npm run build
after_success: npm run sizereport
os:
- linux
- windows

View File

@@ -3,18 +3,14 @@
[Squoosh] is an image compression web app that allows you to dive into the advanced options provided
by various image compressors.
# API & CLI
Squoosh now has [an API](https://github.com/GoogleChromeLabs/squoosh/tree/dev/libsquoosh) and [a CLI](https://github.com/GoogleChromeLabs/squoosh/tree/dev/cli) that allows you to compress many images at once.
# Privacy
Google Analytics is used to record the following:
- [Basic visit data](https://support.google.com/analytics/answer/6004245?ref_topic=2919631).
- Before and after image size once an image is downloaded. These values are rounded to the nearest
* [Basic visit data](https://support.google.com/analytics/answer/6004245?ref_topic=2919631).
* Before and after image size once an image is downloaded. These values are rounded to the nearest
kilobyte.
- If install is available, when Squoosh is installed, and what method was used to install Squoosh.
* If install is available, when Squoosh is installed, and what method was used to install Squoosh.
Image compression is handled locally; no additional data is sent to the server.
@@ -30,7 +26,7 @@ npm run build
You can run the development server with:
```sh
npm run dev
npm start
```
[squoosh]: https://squoosh.app
[Squoosh]: https://squoosh.app

3
cli/.gitignore vendored
View File

@@ -1,3 +0,0 @@
node_modules
build
.DS_Store

View File

@@ -1 +0,0 @@
node_modules

View File

View File

@@ -1,59 +0,0 @@
# Squoosh CLI
Squoosh CLI is an _experimental_ way to run all the codecs you know from the [Squoosh] web app on your command line using WebAssembly. The Squoosh CLI uses a worker pool to parallelize processing images. This way you can apply the same codec to many images at once.
Squoosh CLI is currently not the fastest image compression tool in town and doesnt aim to be. It is, however, fast enough to compress many images sufficiently quick at once.
## Installation
The Squoosh CLI can be used straight from the command line without installing using `npx`:
```
$ npx @squoosh/cli <options...>
```
Of course, you can also install the Squoosh CLI:
```
$ npm i -g @squoosh/cli
$ squoosh-cli <options...>
```
## Usage
```
Usage: squoosh-cli [options] <files...>
Options:
-V, --version output the version number
-d, --output-dir <dir> Output directory (default: ".")
-s, --suffix <suffix> Append suffix to output files (default: "")
--max-optimizer-rounds <rounds> Maximum number of compressions to use for auto optimizations (default: "6")
--optimizer-butteraugli-target <butteraugli distance> Target Butteraugli distance for auto optimizer (default: "1.4")
--resize [config] Resize the image before compressing
--quant [config] Reduce the number of colors used (aka. paletting)
--rotate [config] Rotate image
--mozjpeg [config] Use MozJPEG to generate a .jpg file with the given configuration
--webp [config] Use WebP to generate a .webp file with the given configuration
--avif [config] Use AVIF to generate a .avif file with the given configuration
--jxl [config] Use JPEG-XL to generate a .jxl file with the given configuration
--wp2 [config] Use WebP2 to generate a .wp2 file with the given configuration
--oxipng [config] Use OxiPNG to generate a .png file with the given configuration
-h, --help display help for command
```
The default values for each `config` option can be found in the [`codecs.js`][codecs.js] file under `defaultEncoderOptions`. Every unspecified value will use the default value specified here. _Better documentation is needed here._
## Auto optimizer
Squoosh CLI has an _experimental_ auto optimizer that compresses an image as much as possible, trying to hit a specific [Butteraugli] target value. The higher the Butteraugli target value, the more artifacts can be introduced.
You can make use of the auto optimizer by using “auto” as the config object.
```
$ npx @squoosh/cli --wp2 auto test.png
```
[squoosh]: https://squoosh.app
[codecs.js]: https://github.com/GoogleChromeLabs/squoosh/blob/dev/libsquoosh/src/codecs.js
[butteraugli]: https://github.com/google/butteraugli

595
cli/package-lock.json generated
View File

@@ -1,595 +0,0 @@
{
"name": "@squoosh/cli",
"version": "0.7.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@squoosh/cli",
"version": "0.7.0",
"license": "Apache-2.0",
"dependencies": {
"@squoosh/lib": "^0.2.0",
"commander": "^7.2.0",
"json5": "^2.2.0",
"kleur": "^4.1.4",
"ora": "^5.4.0"
},
"bin": {
"cli": "src/index.js",
"squoosh-cli": "src/index.js"
}
},
"node_modules/@squoosh/lib": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@squoosh/lib/-/lib-0.2.0.tgz",
"integrity": "sha512-zKId9h/LzEnCdoOGnIgjzvqbk5g2aHgfEqgKQ+S+r5K3TasgD/DAsT6r7v6gXft1ao0f/00CTcwIp1KviWTQbw==",
"dependencies": {
"web-streams-polyfill": "^3.0.3"
}
},
"node_modules/ansi-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
"engines": {
"node": ">=8"
}
},
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"node_modules/bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"dependencies": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
}
},
"node_modules/buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"node_modules/chalk": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"dependencies": {
"restore-cursor": "^3.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/cli-spinners": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz",
"integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==",
"engines": {
"node": ">=6"
}
},
"node_modules/clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
"engines": {
"node": ">=0.8"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"node_modules/commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"engines": {
"node": ">= 10"
}
},
"node_modules/defaults": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
"integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
"dependencies": {
"clone": "^1.0.2"
}
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"engines": {
"node": ">=8"
}
},
"node_modules/ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/is-interactive": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
"engines": {
"node": ">=8"
}
},
"node_modules/is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"engines": {
"node": ">=10"
}
},
"node_modules/json5": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
"integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
"dependencies": {
"minimist": "^1.2.5"
},
"bin": {
"json5": "lib/cli.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/kleur": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz",
"integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==",
"engines": {
"node": ">=6"
}
},
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"engines": {
"node": ">=6"
}
},
"node_modules/minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"node_modules/onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dependencies": {
"mimic-fn": "^2.1.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/ora": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/ora/-/ora-5.4.0.tgz",
"integrity": "sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg==",
"dependencies": {
"bl": "^4.1.0",
"chalk": "^4.1.0",
"cli-cursor": "^3.1.0",
"cli-spinners": "^2.5.0",
"is-interactive": "^1.0.0",
"is-unicode-supported": "^0.1.0",
"log-symbols": "^4.1.0",
"strip-ansi": "^6.0.0",
"wcwidth": "^1.0.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/restore-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
"dependencies": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
},
"engines": {
"node": ">=8"
}
},
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"node_modules/signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
},
"node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dependencies": {
"safe-buffer": "~5.2.0"
}
},
"node_modules/strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"dependencies": {
"ansi-regex": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"node_modules/wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
"integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
"dependencies": {
"defaults": "^1.0.3"
}
},
"node_modules/web-streams-polyfill": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.0.3.tgz",
"integrity": "sha512-d2H/t0eqRNM4w2WvmTdoeIvzAUSpK7JmATB8Nr2lb7nQ9BTIJVjbQ/TRFVEh2gUH1HwclPdoPtfMoFfetXaZnA==",
"engines": {
"node": ">= 8"
}
}
},
"dependencies": {
"@squoosh/lib": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@squoosh/lib/-/lib-0.2.0.tgz",
"integrity": "sha512-zKId9h/LzEnCdoOGnIgjzvqbk5g2aHgfEqgKQ+S+r5K3TasgD/DAsT6r7v6gXft1ao0f/00CTcwIp1KviWTQbw==",
"requires": {
"web-streams-polyfill": "^3.0.3"
}
},
"ansi-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"requires": {
"color-convert": "^2.0.1"
}
},
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"requires": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
}
},
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"chalk": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"requires": {
"restore-cursor": "^3.1.0"
}
},
"cli-spinners": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz",
"integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q=="
},
"clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
},
"defaults": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
"integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
"requires": {
"clone": "^1.0.2"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"is-interactive": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="
},
"is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="
},
"json5": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
"integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
"requires": {
"minimist": "^1.2.5"
}
},
"kleur": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz",
"integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA=="
},
"log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"requires": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
}
},
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"requires": {
"mimic-fn": "^2.1.0"
}
},
"ora": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/ora/-/ora-5.4.0.tgz",
"integrity": "sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg==",
"requires": {
"bl": "^4.1.0",
"chalk": "^4.1.0",
"cli-cursor": "^3.1.0",
"cli-spinners": "^2.5.0",
"is-interactive": "^1.0.0",
"is-unicode-supported": "^0.1.0",
"log-symbols": "^4.1.0",
"strip-ansi": "^6.0.0",
"wcwidth": "^1.0.1"
}
},
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
"restore-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
"requires": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
}
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
},
"string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"requires": {
"safe-buffer": "~5.2.0"
}
},
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"requires": {
"ansi-regex": "^5.0.0"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"requires": {
"has-flag": "^4.0.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
"integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
"requires": {
"defaults": "^1.0.3"
}
},
"web-streams-polyfill": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.0.3.tgz",
"integrity": "sha512-d2H/t0eqRNM4w2WvmTdoeIvzAUSpK7JmATB8Nr2lb7nQ9BTIJVjbQ/TRFVEh2gUH1HwclPdoPtfMoFfetXaZnA=="
}
}
}

View File

@@ -1,24 +0,0 @@
{
"name": "@squoosh/cli",
"version": "0.7.0",
"description": "A CLI for Squoosh",
"public": true,
"type": "module",
"bin": {
"squoosh-cli": "src/index.js",
"@squoosh/cli": "src/index.js"
},
"files": [
"/src/index.js"
],
"keywords": [],
"author": "Google Chrome Developers <chromium-dev@google.com>",
"license": "Apache-2.0",
"dependencies": {
"@squoosh/lib": "^0.2.0",
"commander": "^7.2.0",
"json5": "^2.2.0",
"kleur": "^4.1.4",
"ora": "^5.4.0"
}
}

View File

@@ -1,232 +0,0 @@
#!/usr/bin/env node
import { program } from 'commander/esm.mjs';
import JSON5 from 'json5';
import path from 'path';
import { promises as fsp } from 'fs';
import ora from 'ora';
import kleur from 'kleur';
import { ImagePool, preprocessors, encoders } from '@squoosh/lib';
function clamp(v, min, max) {
if (v < min) return min;
if (v > max) return max;
return v;
}
const suffix = ['B', 'KB', 'MB'];
function prettyPrintSize(size) {
const base = Math.floor(Math.log2(size) / 10);
const index = clamp(base, 0, 2);
return (size / 2 ** (10 * index)).toFixed(2) + suffix[index];
}
function progressTracker(results) {
const spinner = ora();
const tracker = {};
tracker.spinner = spinner;
tracker.progressOffset = 0;
tracker.totalOffset = 0;
let status = '';
tracker.setStatus = (text) => {
status = text || '';
update();
};
let progress = '';
tracker.setProgress = (done, total) => {
spinner.prefixText = kleur.dim(`${done}/${total}`);
const completeness =
(tracker.progressOffset + done) / (tracker.totalOffset + total);
progress = kleur.cyan(
`${'▨'.repeat((completeness * 10) | 0).padEnd(10, '╌')}`,
);
update();
};
function update() {
spinner.text = progress + kleur.bold(status) + getResultsText();
}
tracker.finish = (text) => {
spinner.succeed(kleur.bold(text) + getResultsText());
};
function getResultsText() {
let out = '';
for (const result of results.values()) {
out += `\n ${kleur.cyan(result.file)}: ${prettyPrintSize(result.size)}`;
for (const { outputFile, size: outputSize, infoText } of result.outputs) {
out += `\n ${kleur.dim('└')} ${kleur.cyan(
outputFile.padEnd(5),
)}${prettyPrintSize(outputSize)}`;
const percent = ((outputSize / result.size) * 100).toPrecision(3);
out += ` (${kleur[outputSize > result.size ? 'red' : 'green'](
percent + '%',
)})`;
if (infoText) out += kleur.yellow(infoText);
}
}
return out || '\n';
}
spinner.start();
return tracker;
}
async function getInputFiles(paths) {
const validFiles = [];
for (const inputPath of paths) {
const files = (await fsp.lstat(inputPath)).isDirectory()
? (await fsp.readdir(inputPath, {withFileTypes: true})).filter(dirent => dirent.isFile()).map(dirent => path.join(inputPath, dirent.name))
: [inputPath];
for (const file of files) {
try {
await fsp.stat(file);
} catch (err) {
if (err.code === 'ENOENT') {
console.warn(
`Warning: Input file does not exist: ${path.resolve(file)}`,
);
continue;
} else {
throw err;
}
}
validFiles.push(file);
}
}
return validFiles;
}
async function processFiles(files) {
files = await getInputFiles(files);
const imagePool = new ImagePool();
const results = new Map();
const progress = progressTracker(results);
progress.setStatus('Decoding...');
progress.totalOffset = files.length;
progress.setProgress(0, files.length);
// Create output directory
await fsp.mkdir(program.opts().outputDir, { recursive: true });
let decoded = 0;
let decodedFiles = await Promise.all(
files.map(async (file) => {
const image = imagePool.ingestImage(file);
await image.decoded;
results.set(image, {
file,
size: (await image.decoded).size,
outputs: [],
});
progress.setProgress(++decoded, files.length);
return image;
}),
);
const preprocessOptions = {};
for (const preprocessorName of Object.keys(preprocessors)) {
if (!program.opts()[preprocessorName]) {
continue;
}
preprocessOptions[preprocessorName] = JSON5.parse(
program.opts()[preprocessorName],
);
}
for (const image of decodedFiles) {
image.preprocess(preprocessOptions);
}
await Promise.all(decodedFiles.map((image) => image.decoded));
progress.progressOffset = decoded;
progress.setStatus(
'Encoding ' + kleur.dim(`(${imagePool.workerPool.numWorkers} threads)`),
);
progress.setProgress(0, files.length);
const jobs = [];
let jobsStarted = 0;
let jobsFinished = 0;
for (const image of decodedFiles) {
const originalFile = results.get(image).file;
const encodeOptions = {
optimizerButteraugliTarget: Number(
program.opts().optimizerButteraugliTarget,
),
maxOptimizerRounds: Number(program.opts().maxOptimizerRounds),
};
for (const encName of Object.keys(encoders)) {
if (!program.opts()[encName]) {
continue;
}
const encParam = program.opts()[encName];
const encConfig =
encParam.toLowerCase() === 'auto' ? 'auto' : JSON5.parse(encParam);
encodeOptions[encName] = encConfig;
}
jobsStarted++;
const job = image.encode(encodeOptions).then(async () => {
jobsFinished++;
const outputPath = path.join(
program.opts().outputDir,
program.opts().suffix +
path.basename(originalFile, path.extname(originalFile)),
);
for (const output of Object.values(image.encodedWith)) {
const outputFile = `${outputPath}.${(await output).extension}`;
await fsp.writeFile(outputFile, (await output).binary);
results
.get(image)
.outputs.push(Object.assign(await output, { outputFile }));
}
progress.setProgress(jobsFinished, jobsStarted);
});
jobs.push(job);
}
// update the progress to account for multi-format
progress.setProgress(jobsFinished, jobsStarted);
// Wait for all jobs to finish
await Promise.all(jobs);
await imagePool.close();
progress.finish('Squoosh results:');
}
program
.name('squoosh-cli')
.arguments('<files...>')
.option('-d, --output-dir <dir>', 'Output directory', '.')
.option('-s, --suffix <suffix>', 'Append suffix to output files', '')
.option(
'--max-optimizer-rounds <rounds>',
'Maximum number of compressions to use for auto optimizations',
'6',
)
.option(
'--optimizer-butteraugli-target <butteraugli distance>',
'Target Butteraugli distance for auto optimizer',
'1.4',
)
.action(processFiles);
// Create a CLI option for each supported preprocessor
for (const [key, value] of Object.entries(preprocessors)) {
program.option(`--${key} [config]`, value.description);
}
// Create a CLI option for each supported encoder
for (const [key, value] of Object.entries(encoders)) {
program.option(
`--${key} [config]`,
`Use ${value.name} to generate a .${value.extension} file with the given configuration`,
);
}
program.parse(process.argv);

View File

@@ -1,36 +1,33 @@
# libavif and libaom versions are from
# https://docs.google.com/document/d/1wEEA5rRU7wT54k41u3qyZIZHDCJArIMzLuzsrLAwaK8/edit
CODEC_URL = https://github.com/AOMediaCodec/libavif/archive/1c39e772c2c0d687691dd4b589a12c323f5f767d.tar.gz
CODEC_URL = https://github.com/AOMediaCodec/libavif/archive/31d7c6d1e32cf467ac24fb8c7a76c4902a4c00db.tar.gz
CODEC_PACKAGE = node_modules/libavif.tar.gz
LIBAOM_URL = https://aomedia.googlesource.com/aom/+archive/v3.1.0.tar.gz
LIBAOM_URL = https://aomedia.googlesource.com/aom/+archive/v2.0.0.tar.gz
LIBAOM_PACKAGE = node_modules/libaom.tar.gz
export CODEC_DIR = node_modules/libavif
export BUILD_DIR = node_modules/build
BUILD_DIR := node_modules/build
ENC_BUILD_DIR := $(BUILD_DIR)/enc
ENC_MT_BUILD_DIR := $(BUILD_DIR)/enc-mt
DEC_BUILD_DIR := $(BUILD_DIR)/dec
export LIBAOM_DIR = node_modules/libaom
OUT_ENC_JS = enc/avif_enc.js
OUT_NODE_ENC_JS = enc/avif_node_enc.js
OUT_ENC_MT_JS = enc/avif_enc_mt.js
OUT_DEC_JS = dec/avif_dec.js
OUT_NODE_DEC_JS = dec/avif_node_dec.js
OUT_ENC_CPP = enc/avif_enc.cpp
OUT_ENC_CPP = enc/avif_enc.cpp
OUT_DEC_CPP = dec/avif_dec.cpp
ENVIRONMENT = worker
HELPER_MAKEFLAGS := -f helper.Makefile
.PHONY: all clean
all: $(OUT_ENC_JS) $(OUT_DEC_JS) $(OUT_ENC_MT_JS) $(OUT_NODE_ENC_JS) $(OUT_NODE_DEC_JS)
all: $(OUT_ENC_JS) $(OUT_DEC_JS) $(OUT_ENC_MT_JS)
$(OUT_NODE_ENC_JS): ENVIRONMENT=node
$(OUT_NODE_ENC_JS) $(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
$(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
$(MAKE) \
$(HELPER_MAKEFLAGS) \
BUILD_DIR=$(ENC_BUILD_DIR) \
OUT_JS=$@ \
OUT_CPP=$< \
LIBAOM_FLAGS="\
@@ -38,33 +35,31 @@ $(OUT_NODE_ENC_JS) $(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(L
-DCONFIG_MULTITHREAD=0 \
-DCONFIG_AV1_HIGHBITDEPTH=0 \
" \
ENVIRONMENT=$(ENVIRONMENT) \
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0"
$(OUT_ENC_MT_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
$(MAKE) \
$(HELPER_MAKEFLAGS) \
BUILD_DIR=$(ENC_MT_BUILD_DIR) \
OUT_JS=$@ \
OUT_CPP=$< \
LIBAOM_FLAGS="\
-DCONFIG_AV1_DECODER=0 \
-DCONFIG_AV1_HIGHBITDEPTH=0 \
" \
ENVIRONMENT=$(ENVIRONMENT) \
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0" \
OUT_FLAGS="-pthread"
$(OUT_NODE_DEC_JS): ENVIRONMENT=node
$(OUT_NODE_DEC_JS) $(OUT_DEC_JS): $(OUT_DEC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
$(OUT_DEC_JS): $(OUT_DEC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
$(MAKE) \
$(HELPER_MAKEFLAGS) \
BUILD_DIR=$(DEC_BUILD_DIR) \
OUT_JS=$@ \
OUT_CPP=$< \
LIBAOM_FLAGS="\
-DCONFIG_AV1_ENCODER=0 \
-DCONFIG_MULTITHREAD=0 \
" \
ENVIRONMENT=$(ENVIRONMENT) \
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_ENCODE=0"
$(CODEC_PACKAGE):
@@ -84,6 +79,6 @@ $(LIBAOM_DIR)/CMakeLists.txt: $(LIBAOM_PACKAGE)
tar xzm -C $(@D) -f $(LIBAOM_PACKAGE)
clean:
$(MAKE) $(HELPER_MAKEFLAGS) OUT_JS=$(OUT_ENC_JS) clean
$(MAKE) $(HELPER_MAKEFLAGS) OUT_JS=$(OUT_ENC_MT_JS) clean
$(MAKE) $(HELPER_MAKEFLAGS) OUT_JS=$(OUT_DEC_JS) clean
$(MAKE) $(HELPER_MAKEFLAGS) BUILD_DIR=$(ENC_BUILD_DIR) OUT_JS=$(OUT_ENC_JS) clean
$(MAKE) $(HELPER_MAKEFLAGS) BUILD_DIR=$(ENC_MT_BUILD_DIR) OUT_JS=$(OUT_ENC_MT_JS) clean
$(MAKE) $(HELPER_MAKEFLAGS) BUILD_DIR=$(DEC_BUILD_DIR) OUT_JS=$(OUT_DEC_JS) clean

File diff suppressed because it is too large Load Diff

BIN
codecs/avif/dec/avif_dec.wasm Executable file → Normal file

Binary file not shown.

View File

@@ -1,57 +0,0 @@
var Module = (function() {
var _scriptDir = import.meta.url;
return (
function(Module) {
Module = Module || {};
var e;e||(e=typeof Module !== 'undefined' ? Module : {});var aa,r;e.ready=new Promise(function(a,b){aa=a;r=b});var t={},u;for(u in e)e.hasOwnProperty(u)&&(t[u]=e[u]);var ba,v,ca,da;ba=function(a){ca||(ca=require("fs"));da||(da=require("path"));a=da.normalize(a);return ca.readFileSync(a,null)};v=function(a){a=ba(a);a.buffer||(a=new Uint8Array(a));a.buffer||w("Assertion failed: undefined");return a};1<process.argv.length&&process.argv[1].replace(/\\/g,"/");process.argv.slice(2);
process.on("uncaughtException",function(a){throw a;});process.on("unhandledRejection",w);e.inspect=function(){return"[Emscripten Module object]"};var ea=e.print||console.log.bind(console),y=e.printErr||console.warn.bind(console);for(u in t)t.hasOwnProperty(u)&&(e[u]=t[u]);t=null;var fa=0,z;e.wasmBinary&&(z=e.wasmBinary);var noExitRuntime=e.noExitRuntime||!0;"object"!==typeof WebAssembly&&w("no native wasm support detected");var ha,ia=!1,ja=new TextDecoder("utf8");
function ka(a,b,c){var d=A;if(0<c){c=b+c-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var h=a.charCodeAt(++f);g=65536+((g&1023)<<10)|h&1023}if(127>=g){if(b>=c)break;d[b++]=g}else{if(2047>=g){if(b+1>=c)break;d[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;d[b++]=224|g>>12}else{if(b+3>=c)break;d[b++]=240|g>>18;d[b++]=128|g>>12&63}d[b++]=128|g>>6&63}d[b++]=128|g&63}}d[b]=0}}var la=new TextDecoder("utf-16le");
function ma(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&B[c];)++c;return la.decode(A.subarray(a,c<<1))}function na(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f<c;++f)D[b>>1]=a.charCodeAt(f),b+=2;D[b>>1]=0;return b-d}function oa(a){return 2*a.length}function pa(a,b){for(var c=0,d="";!(c>=b/4);){var f=E[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d}
function qa(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var h=a.charCodeAt(++f);g=65536+((g&1023)<<10)|h&1023}E[b>>2]=g;b+=4;if(b+4>c)break}E[b>>2]=0;return b-d}function ra(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var sa,ta,A,D,B,E,F,ua,va;
function wa(){var a=ha.buffer;sa=a;e.HEAP8=ta=new Int8Array(a);e.HEAP16=D=new Int16Array(a);e.HEAP32=E=new Int32Array(a);e.HEAPU8=A=new Uint8Array(a);e.HEAPU16=B=new Uint16Array(a);e.HEAPU32=F=new Uint32Array(a);e.HEAPF32=ua=new Float32Array(a);e.HEAPF64=va=new Float64Array(a)}var H,xa=[],ya=[],za=[];function Aa(){var a=e.preRun.shift();xa.unshift(a)}var I=0,Ba=null,J=null;e.preloadedImages={};e.preloadedAudios={};
function w(a){if(e.onAbort)e.onAbort(a);y(a);ia=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");r(a);throw a;}var L=(new URL("avif_node_dec.wasm",import.meta.url)).toString();function Ca(){return Promise.resolve().then(function(){a:{try{if(L==L&&z){var a=new Uint8Array(z);break a}if(v){a=v(L);break a}throw"both async and sync fetching of the wasm failed";}catch(b){w(b)}a=void 0}return a})}
function Da(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(e);else{var c=b.V;"number"===typeof c?void 0===b.R?H.get(c)():H.get(c)(b.R):c(void 0===b.R?null:b.R)}}}function Ea(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var Fa=void 0;function M(a){for(var b="";A[a];)b+=Fa[A[a++]];return b}var N={},O={},P={};
function Ga(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Ha(a,b){a=Ga(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}
function Ia(a){var b=Error,c=Ha(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Ja=void 0;function Q(a){throw new Ja(a);}var Ka=void 0;
function La(a,b){function c(k){k=b(k);if(k.length!==d.length)throw new Ka("Mismatched type converter count");for(var l=0;l<d.length;++l)R(d[l],k[l])}var d=[];d.forEach(function(k){P[k]=a});var f=Array(a.length),g=[],h=0;a.forEach(function(k,l){O.hasOwnProperty(k)?f[l]=O[k]:(g.push(k),N.hasOwnProperty(k)||(N[k]=[]),N[k].push(function(){f[l]=O[k];++h;h===g.length&&c(f)}))});0===g.length&&c(f)}
function R(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||Q('type "'+d+'" must have a positive integer typeid pointer');if(O.hasOwnProperty(a)){if(c.U)return;Q("Cannot register type '"+d+"' twice")}O[a]=b;delete P[a];N.hasOwnProperty(a)&&(b=N[a],delete N[a],b.forEach(function(f){f()}))}var Oa=[],S=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Pa(a){4<a&&0===--S[a].S&&(S[a]=void 0,Oa.push(a))}function T(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Oa.length?Oa.pop():S.length;S[b]={S:1,value:a};return b}}function Qa(a){return this.fromWireType(F[a>>2])}function Ra(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Sa(a,b){switch(b){case 2:return function(c){return this.fromWireType(ua[c>>2])};case 3:return function(c){return this.fromWireType(va[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Ta(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ha(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Ua(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Va(a,b){var c=e;if(void 0===c[a].O){var d=c[a];c[a]=function(){c[a].O.hasOwnProperty(arguments.length)||Q("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].O+")!");return c[a].O[arguments.length].apply(this,arguments)};c[a].O=[];c[a].O[d.T]=d}}
function Wa(a,b,c){e.hasOwnProperty(a)?((void 0===c||void 0!==e[a].O&&void 0!==e[a].O[c])&&Q("Cannot register public name '"+a+"' twice"),Va(a,a),e.hasOwnProperty(c)&&Q("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),e[a].O[c]=b):(e[a]=b,void 0!==c&&(e[a].X=c))}function Xa(a,b){for(var c=[],d=0;d<a;d++)c.push(E[(b>>2)+d]);return c}
function Ya(a,b){var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];a.includes("j")?(d=e["dynCall_"+a],d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)):d=H.get(b).apply(null,c);return d}}function Za(a,b){a=M(a);var c=a.includes("j")?Ya(a,b):H.get(b);"function"!==typeof c&&Q("unknown function pointer with signature "+a+": "+b);return c}var $a=void 0;function ab(a){a=bb(a);var b=M(a);U(a);return b}
function cb(a,b){function c(g){f[g]||O[g]||(P[g]?P[g].forEach(c):(d.push(g),f[g]=!0))}var d=[],f={};b.forEach(c);throw new $a(a+": "+d.map(ab).join([", "]));}function db(a,b,c){switch(b){case 0:return c?function(d){return ta[d]}:function(d){return A[d]};case 1:return c?function(d){return D[d>>1]}:function(d){return B[d>>1]};case 2:return c?function(d){return E[d>>2]}:function(d){return F[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var eb={};
function fb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function gb(a,b){var c=O[a];void 0===c&&Q(b+" has unknown type "+ab(a));return c}for(var hb={},ib=[null,[],[]],jb=Array(256),V=0;256>V;++V)jb[V]=String.fromCharCode(V);Fa=jb;Ja=e.BindingError=Ia("BindingError");Ka=e.InternalError=Ia("InternalError");e.count_emval_handles=function(){for(var a=0,b=5;b<S.length;++b)void 0!==S[b]&&++a;return a};
e.get_first_emval=function(){for(var a=5;a<S.length;++a)if(void 0!==S[a])return S[a];return null};$a=e.UnboundTypeError=Ia("UnboundTypeError");
var pb={j:function(){},v:function(){},r:function(a,b,c,d,f){var g=Ea(c);b=M(b);R(a,{name:b,fromWireType:function(h){return!!h},toWireType:function(h,k){return k?d:f},argPackAdvance:8,readValueFromPointer:function(h){if(1===c)var k=ta;else if(2===c)k=D;else if(4===c)k=E;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(k[h>>g])},P:null})},B:function(a,b){b=M(b);R(a,{name:b,fromWireType:function(c){var d=S[c].value;Pa(c);return d},toWireType:function(c,d){return T(d)},
argPackAdvance:8,readValueFromPointer:Qa,P:null})},q:function(a,b,c){c=Ea(c);b=M(b);R(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Ra(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Sa(b,c),P:null})},t:function(a,b,c,d,f,g){var h=Xa(b,c);a=M(a);f=Za(d,f);Wa(a,function(){cb("Cannot call "+a+" due to unbound types",h)},b-1);La(h,function(k){var l=[k[0],null].concat(k.slice(1)),
m=k=a,n=f,p=l.length;2>p&&Q("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==l[1]&&!1,C=!1,q=1;q<l.length;++q)if(null!==l[q]&&void 0===l[q].P){C=!0;break}var Ma="void"!==l[0].name,G="",K="";for(q=0;q<p-2;++q)G+=(0!==q?", ":"")+"arg"+q,K+=(0!==q?", ":"")+"arg"+q+"Wired";m="return function "+Ga(m)+"("+G+") {\nif (arguments.length !== "+(p-2)+") {\nthrowBindingError('function "+m+" called with ' + arguments.length + ' arguments, expected "+(p-2)+" args!');\n}\n";
C&&(m+="var destructors = [];\n");var Na=C?"destructors":"null";G="throwBindingError invoker fn runDestructors retType classParam".split(" ");n=[Q,n,g,Ua,l[0],l[1]];x&&(m+="var thisWired = classParam.toWireType("+Na+", this);\n");for(q=0;q<p-2;++q)m+="var arg"+q+"Wired = argType"+q+".toWireType("+Na+", arg"+q+"); // "+l[q+2].name+"\n",G.push("argType"+q),n.push(l[q+2]);x&&(K="thisWired"+(0<K.length?", ":"")+K);m+=(Ma?"var rv = ":"")+"invoker(fn"+(0<K.length?", ":"")+K+");\n";if(C)m+="runDestructors(destructors);\n";
else for(q=x?1:2;q<l.length;++q)p=1===q?"thisWired":"arg"+(q-2)+"Wired",null!==l[q].P&&(m+=p+"_dtor("+p+"); // "+l[q].name+"\n",G.push(p+"_dtor"),n.push(l[q].P));Ma&&(m+="var ret = retType.fromWireType(rv);\nreturn ret;\n");G.push(m+"}\n");l=Ta(G).apply(null,n);q=b-1;if(!e.hasOwnProperty(k))throw new Ka("Replacing nonexistant public symbol");void 0!==e[k].O&&void 0!==q?e[k].O[q]=l:(e[k]=l,e[k].T=q);return[]})},e:function(a,b,c,d,f){function g(m){return m}b=M(b);-1===f&&(f=4294967295);var h=Ea(c);
if(0===d){var k=32-8*c;g=function(m){return m<<k>>>k}}var l=b.includes("unsigned");R(a,{name:b,fromWireType:g,toWireType:function(m,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+Ra(n)+'" to '+this.name);if(n<d||n>f)throw new TypeError('Passing a number "'+Ra(n)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return l?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:db(b,h,0!==d),P:null})},d:function(a,
b,c){function d(g){g>>=2;var h=F;return new f(sa,h[g+1],h[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=M(c);R(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{U:!0})},m:function(a,b){b=M(b);var c="std::string"===b;R(a,{name:b,fromWireType:function(d){var f=F[d>>2];if(c)for(var g=d+4,h=0;h<=f;++h){var k=d+4+h;if(h==f||0==A[k]){if(g){for(var l=g+(k-g),m=g;!(m>=l)&&A[m];)++m;g=ja.decode(A.subarray(g,m))}else g="";if(void 0===
n)var n=g;else n+=String.fromCharCode(0),n+=g;g=k+1}}else{n=Array(f);for(h=0;h<f;++h)n[h]=String.fromCharCode(A[d+4+h]);n=n.join("")}U(d);return n},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var g="string"===typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||Q("Cannot pass non-string to std::string");var h=(c&&g?function(){for(var m=0,n=0;n<f.length;++n){var p=f.charCodeAt(n);55296<=p&&57343>=p&&(p=65536+((p&1023)<<10)|f.charCodeAt(++n)&
1023);127>=p?++m:m=2047>=p?m+2:65535>=p?m+3:m+4}return m}:function(){return f.length})(),k=kb(4+h+1);F[k>>2]=h;if(c&&g)ka(f,k+4,h+1);else if(g)for(g=0;g<h;++g){var l=f.charCodeAt(g);255<l&&(U(k),Q("String has UTF-16 code units that do not fit in 8 bits"));A[k+4+g]=l}else for(g=0;g<h;++g)A[k+4+g]=f[g];null!==d&&d.push(U,k);return k},argPackAdvance:8,readValueFromPointer:Qa,P:function(d){U(d)}})},l:function(a,b,c){c=M(c);if(2===b){var d=ma;var f=na;var g=oa;var h=function(){return B};var k=1}else 4===
b&&(d=pa,f=qa,g=ra,h=function(){return F},k=2);R(a,{name:c,fromWireType:function(l){for(var m=F[l>>2],n=h(),p,x=l+4,C=0;C<=m;++C){var q=l+4+C*b;if(C==m||0==n[q>>k])x=d(x,q-x),void 0===p?p=x:(p+=String.fromCharCode(0),p+=x),x=q+b}U(l);return p},toWireType:function(l,m){"string"!==typeof m&&Q("Cannot pass non-string to C++ string type "+c);var n=g(m),p=kb(4+n+b);F[p>>2]=n>>k;f(m,p+4,n+b);null!==l&&l.push(U,p);return p},argPackAdvance:8,readValueFromPointer:Qa,P:function(l){U(l)}})},s:function(a,b){b=
M(b);R(a,{W:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},h:Pa,i:function(a){if(0===a)return T(fb());var b=eb[a];a=void 0===b?M(a):b;return T(fb()[a])},n:function(a){4<a&&(S[a].S+=1)},o:function(a,b,c,d){a||Q("Cannot use deleted val. handle = "+a);a=S[a].value;var f=hb[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var h="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)h+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+
g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",h+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(gb,e,T);hb[b]=f}return f(a,c,d)},a:function(){w()},g:function(a,b){W(a,b||1);throw"longjmp";},y:function(a,b,c){A.copyWithin(a,b,b+c)},k:function(a){var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+
.2/c);d=Math.min(d,a+100663296);d=Math.max(a,d);0<d%65536&&(d+=65536-d%65536);a:{try{ha.grow(Math.min(2147483648,d)-sa.byteLength+65535>>>16);wa();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},z:function(){return 0},u:function(){},A:function(a,b,c,d){for(var f=0,g=0;g<c;g++){for(var h=E[b+8*g>>2],k=E[b+(8*g+4)>>2],l=0;l<k;l++){var m=A[h+l],n=ib[a];if(0===m||10===m){m=1===a?ea:y;var p;for(p=0;n[p]&&!(NaN<=p);)++p;p=ja.decode(n.subarray?n.subarray(0,p):new Uint8Array(n.slice(0,p)));m(p);
n.length=0}else n.push(m)}f+=k}E[d>>2]=f;return 0},b:function(){return fa},f:lb,w:mb,p:nb,x:ob,c:function(a){fa=a}};
(function(){function a(f){e.asm=f.exports;ha=e.asm.C;wa();H=e.asm.L;ya.unshift(e.asm.D);I--;e.monitorRunDependencies&&e.monitorRunDependencies(I);0==I&&(null!==Ba&&(clearInterval(Ba),Ba=null),J&&(f=J,J=null,f()))}function b(f){a(f.instance)}function c(f){return Ca().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){y("failed to asynchronously prepare wasm: "+g);w(g)})}var d={a:pb};I++;e.monitorRunDependencies&&e.monitorRunDependencies(I);if(e.instantiateWasm)try{return e.instantiateWasm(d,
a)}catch(f){return y("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return z||"function"!==typeof WebAssembly.instantiateStreaming||L.startsWith("data:application/octet-stream;base64,")||"function"!==typeof fetch?c(b):fetch(L,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){y("wasm streaming compile failed: "+g);y("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(r);return{}})();
e.___wasm_call_ctors=function(){return(e.___wasm_call_ctors=e.asm.D).apply(null,arguments)};var kb=e._malloc=function(){return(kb=e._malloc=e.asm.E).apply(null,arguments)},U=e._free=function(){return(U=e._free=e.asm.F).apply(null,arguments)},bb=e.___getTypeName=function(){return(bb=e.___getTypeName=e.asm.G).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.H).apply(null,arguments)};
var X=e.stackSave=function(){return(X=e.stackSave=e.asm.I).apply(null,arguments)},Y=e.stackRestore=function(){return(Y=e.stackRestore=e.asm.J).apply(null,arguments)},W=e._setThrew=function(){return(W=e._setThrew=e.asm.K).apply(null,arguments)};e.dynCall_iiijii=function(){return(e.dynCall_iiijii=e.asm.M).apply(null,arguments)};e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.N).apply(null,arguments)};
function ob(a,b,c,d,f,g,h,k){var l=X();try{H.get(a)(b,c,d,f,g,h,k)}catch(m){Y(l);if(m!==m+0&&"longjmp"!==m)throw m;W(1,0)}}function nb(a,b,c,d,f){var g=X();try{H.get(a)(b,c,d,f)}catch(h){Y(g);if(h!==h+0&&"longjmp"!==h)throw h;W(1,0)}}function lb(a,b,c){var d=X();try{return H.get(a)(b,c)}catch(f){Y(d);if(f!==f+0&&"longjmp"!==f)throw f;W(1,0)}}function mb(a,b,c,d,f){var g=X();try{return H.get(a)(b,c,d,f)}catch(h){Y(g);if(h!==h+0&&"longjmp"!==h)throw h;W(1,0)}}var Z;J=function qb(){Z||rb();Z||(J=qb)};
function rb(){function a(){if(!Z&&(Z=!0,e.calledRun=!0,!ia)){Da(ya);aa(e);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();za.unshift(b)}Da(za)}}if(!(0<I)){if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)Aa();Da(xa);0<I||(e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1);a()},1)):a())}}e.run=rb;
if(e.preInit)for("function"==typeof e.preInit&&(e.preInit=[e.preInit]);0<e.preInit.length;)e.preInit.pop()();rb();
return Module.ready
}
);
})();
export default Module;

Binary file not shown.

View File

@@ -9,9 +9,10 @@ struct AvifOptions {
// [0 - 63]
// 0 = lossless
// 63 = worst quality
int cqLevel;
// As above, but -1 means 'use cqLevel'
int cqAlphaLevel;
int minQuantizer;
int maxQuantizer;
int minQuantizerAlpha;
int maxQuantizerAlpha;
// [0 - 6]
// Creates 2^n tiles in that dimension
int tileRowsLog2;
@@ -25,16 +26,6 @@ struct AvifOptions {
// 2 = 4:2:2
// 3 = 4:4:4
int subsample;
// Extra chroma compression
bool chromaDeltaQ;
// 0-7
int sharpness;
// 0 = auto
// 1 = PSNR
// 2 = SSIM
int tune;
// 0-50
int denoiseLevel;
};
thread_local const val Uint8Array = val::global("Uint8Array");
@@ -58,19 +49,18 @@ val encode(std::string buffer, int width, int height, AvifOptions options) {
break;
}
bool lossless = options.cqLevel == AVIF_QUANTIZER_LOSSLESS &&
options.cqAlphaLevel <= AVIF_QUANTIZER_LOSSLESS &&
format == AVIF_PIXEL_FORMAT_YUV444;
avifImage* image = avifImageCreate(width, height, depth, format);
if (lossless) {
if (options.maxQuantizer == AVIF_QUANTIZER_LOSSLESS &&
options.minQuantizer == AVIF_QUANTIZER_LOSSLESS &&
options.minQuantizerAlpha == AVIF_QUANTIZER_LOSSLESS &&
options.maxQuantizerAlpha == AVIF_QUANTIZER_LOSSLESS && format == AVIF_PIXEL_FORMAT_YUV444) {
image->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_IDENTITY;
} else {
image->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT601;
image->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT709;
}
uint8_t* rgba = reinterpret_cast<uint8_t*>(const_cast<char*>(buffer.data()));
uint8_t* rgba = (uint8_t*)buffer.c_str();
avifRGBImage srcRGB;
avifRGBImageSetDefaults(&srcRGB, image);
@@ -79,44 +69,14 @@ val encode(std::string buffer, int width, int height, AvifOptions options) {
avifImageRGBToYUV(image, &srcRGB);
avifEncoder* encoder = avifEncoderCreate();
if (lossless) {
encoder->minQuantizer = AVIF_QUANTIZER_LOSSLESS;
encoder->maxQuantizer = AVIF_QUANTIZER_LOSSLESS;
encoder->minQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;
encoder->maxQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;
} else {
encoder->minQuantizer = AVIF_QUANTIZER_BEST_QUALITY;
encoder->maxQuantizer = AVIF_QUANTIZER_WORST_QUALITY;
encoder->minQuantizerAlpha = AVIF_QUANTIZER_BEST_QUALITY;
encoder->maxQuantizerAlpha = AVIF_QUANTIZER_WORST_QUALITY;
avifEncoderSetCodecSpecificOption(encoder, "end-usage", "q");
avifEncoderSetCodecSpecificOption(encoder, "cq-level", std::to_string(options.cqLevel).c_str());
avifEncoderSetCodecSpecificOption(encoder, "sharpness",
std::to_string(options.sharpness).c_str());
if (options.cqAlphaLevel != -1) {
avifEncoderSetCodecSpecificOption(encoder, "alpha:cq-level",
std::to_string(options.cqAlphaLevel).c_str());
}
if (options.tune == 2 || (options.tune == 0 && options.cqLevel <= 32)) {
avifEncoderSetCodecSpecificOption(encoder, "tune", "ssim");
}
if (options.chromaDeltaQ) {
avifEncoderSetCodecSpecificOption(encoder, "enable-chroma-deltaq", "1");
}
avifEncoderSetCodecSpecificOption(encoder, "color:denoise-noise-level",
std::to_string(options.denoiseLevel).c_str());
}
encoder->maxThreads = emscripten_num_logical_cores();
encoder->minQuantizer = options.minQuantizer;
encoder->maxQuantizer = options.maxQuantizer;
encoder->minQuantizerAlpha = options.minQuantizerAlpha;
encoder->maxQuantizerAlpha = options.maxQuantizerAlpha;
encoder->tileRowsLog2 = options.tileRowsLog2;
encoder->tileColsLog2 = options.tileColsLog2;
encoder->speed = options.speed;
avifResult encodeResult = avifEncoderWrite(encoder, image, &output);
auto js_result = val::null();
if (encodeResult == AVIF_RESULT_OK) {
@@ -131,15 +91,13 @@ val encode(std::string buffer, int width, int height, AvifOptions options) {
EMSCRIPTEN_BINDINGS(my_module) {
value_object<AvifOptions>("AvifOptions")
.field("cqLevel", &AvifOptions::cqLevel)
.field("cqAlphaLevel", &AvifOptions::cqAlphaLevel)
.field("minQuantizer", &AvifOptions::minQuantizer)
.field("maxQuantizer", &AvifOptions::maxQuantizer)
.field("minQuantizerAlpha", &AvifOptions::minQuantizerAlpha)
.field("maxQuantizerAlpha", &AvifOptions::maxQuantizerAlpha)
.field("tileRowsLog2", &AvifOptions::tileRowsLog2)
.field("tileColsLog2", &AvifOptions::tileColsLog2)
.field("speed", &AvifOptions::speed)
.field("chromaDeltaQ", &AvifOptions::chromaDeltaQ)
.field("sharpness", &AvifOptions::sharpness)
.field("tune", &AvifOptions::tune)
.field("denoiseLevel", &AvifOptions::denoiseLevel)
.field("subsample", &AvifOptions::subsample);
function("encode", &encode);

View File

@@ -1,20 +1,12 @@
export const enum AVIFTune {
auto,
psnr,
ssim,
}
export interface EncodeOptions {
cqLevel: number;
denoiseLevel: number;
cqAlphaLevel: number;
minQuantizer: number;
maxQuantizer: number;
minQuantizerAlpha: number;
maxQuantizerAlpha: number;
tileRowsLog2: number;
tileColsLog2: number;
speed: number;
subsample: number;
chromaDeltaQ: boolean;
sharpness: number;
tune: AVIFTune;
}
export interface AVIFModule extends EmscriptenWasm.Module {

File diff suppressed because it is too large Load Diff

BIN
codecs/avif/enc/avif_enc.wasm Executable file → Normal file

Binary file not shown.

View File

@@ -1 +1,2 @@
export * from './avif_enc';
export { default } from './avif_enc';

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1 +1,103 @@
"use strict";var Module={};var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};function moduleLoaded(){}self.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;(e.data.urlOrBlob?import(e.data.urlOrBlob):import("./avif_enc_mt.js")).then(function(exports){return exports.default(Module)}).then(function(instance){Module=instance;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,/*isMainBrowserThread=*/0,/*isMainRuntimeThread=*/0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();if(!initializedJS){Module["___embind_register_native_and_builtin_types"]();initializedJS=true}try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["PThread"].threadExit(result)}}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}};
var threadInfoStruct = 0;
var selfThreadId = 0;
var parentThreadId = 0;
var initializedJS = false;
var Module = {};
function threadPrintErr() {
var text = Array.prototype.slice.call(arguments).join(' ');
console.error(text);
}
function threadAlert() {
var text = Array.prototype.slice.call(arguments).join(' ');
postMessage({ cmd: 'alert', text: text, threadId: selfThreadId });
}
var err = threadPrintErr;
this.alert = threadAlert;
Module['instantiateWasm'] = function (info, receiveInstance) {
var instance = new WebAssembly.Instance(Module['wasmModule'], info);
Module['wasmModule'] = null;
receiveInstance(instance);
return instance.exports;
};
this.onmessage = function (e) {
try {
if (e.data.cmd === 'load') {
Module['wasmModule'] = e.data.wasmModule;
Module['wasmMemory'] = e.data.wasmMemory;
Module['buffer'] = Module['wasmMemory'].buffer;
Module['ENVIRONMENT_IS_PTHREAD'] = true;
import(e.data.urlOrBlob)
.then(function (avif_enc_mt) {
return avif_enc_mt.default(Module);
})
.then(function (instance) {
Module = instance;
postMessage({ cmd: 'loaded' });
});
} else if (e.data.cmd === 'objectTransfer') {
Module['PThread'].receiveObjectTransfer(e.data);
} else if (e.data.cmd === 'run') {
Module['__performance_now_clock_drift'] = performance.now() - e.data.time;
threadInfoStruct = e.data.threadInfoStruct;
Module['registerPthreadPtr'](
threadInfoStruct,
/*isMainBrowserThread=*/ 0,
/*isMainRuntimeThread=*/ 0,
);
selfThreadId = e.data.selfThreadId;
parentThreadId = e.data.parentThreadId;
var max = e.data.stackBase;
var top = e.data.stackBase + e.data.stackSize;
Module['establishStackSpace'](top, max);
Module['_emscripten_tls_init']();
Module['PThread'].receiveObjectTransfer(e.data);
Module['PThread'].setThreadStatus(Module['_pthread_self'](), 1);
if (!initializedJS) {
Module['___embind_register_native_and_builtin_types']();
initializedJS = true;
}
try {
var result = Module['dynCall']('ii', e.data.start_routine, [
e.data.arg,
]);
if (!Module['getNoExitRuntime']()) Module['PThread'].threadExit(result);
} catch (ex) {
if (ex === 'Canceled!') {
Module['PThread'].threadCancel();
} else if (ex != 'unwind') {
Atomics.store(
Module['HEAPU32'],
(threadInfoStruct + 4) >> /*C_STRUCTS.pthread.threadExitCode*/ 2,
ex instanceof Module['ExitStatus'] ? ex.status : -2,
);
/*A custom entry specific to Emscripten denoting that the thread crashed.*/ Atomics.store(
Module['HEAPU32'],
(threadInfoStruct + 0) >> /*C_STRUCTS.pthread.threadStatus*/ 2,
1,
);
Module['_emscripten_futex_wake'](
threadInfoStruct + 0,
/*C_STRUCTS.pthread.threadStatus*/ 2147483647,
);
if (!(ex instanceof Module['ExitStatus'])) throw ex;
}
}
} else if (e.data.cmd === 'cancel') {
if (threadInfoStruct) {
Module['PThread'].threadCancel();
}
} else if (e.data.target === 'setimmediate') {
} else if (e.data.cmd === 'processThreadQueue') {
if (threadInfoStruct) {
Module['_emscripten_current_thread_process_queued_calls']();
}
} else {
err('worker.js received unknown command ' + e.data.cmd);
err(e.data);
}
} catch (ex) {
err('worker.js onmessage() captured an uncaught exception: ' + ex);
if (ex && ex.stack) err(ex.stack);
throw ex;
}
};

View File

@@ -1,62 +0,0 @@
var Module = (function() {
var _scriptDir = import.meta.url;
return (
function(Module) {
Module = Module || {};
var e;e||(e=typeof Module !== 'undefined' ? Module : {});var aa,ca;e.ready=new Promise(function(a,b){aa=a;ca=b});var u={},v;for(v in e)e.hasOwnProperty(v)&&(u[v]=e[v]);var da,ea,fa,ha;da=function(a){fa||(fa=require("fs"));ha||(ha=require("path"));a=ha.normalize(a);return fa.readFileSync(a,null)};ea=function(a){a=da(a);a.buffer||(a=new Uint8Array(a));a.buffer||w("Assertion failed: undefined");return a};1<process.argv.length&&process.argv[1].replace(/\\/g,"/");process.argv.slice(2);
process.on("uncaughtException",function(a){throw a;});process.on("unhandledRejection",w);e.inspect=function(){return"[Emscripten Module object]"};var ia=e.print||console.log.bind(console),x=e.printErr||console.warn.bind(console);for(v in u)u.hasOwnProperty(v)&&(e[v]=u[v]);u=null;var ja=0,y;e.wasmBinary&&(y=e.wasmBinary);var noExitRuntime=e.noExitRuntime||!0;"object"!==typeof WebAssembly&&w("no native wasm support detected");var ka,la=!1,ma=new TextDecoder("utf8");
function na(a,b,c){var d=z;if(0<c){c=b+c-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var k=a.charCodeAt(++f);g=65536+((g&1023)<<10)|k&1023}if(127>=g){if(b>=c)break;d[b++]=g}else{if(2047>=g){if(b+1>=c)break;d[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;d[b++]=224|g>>12}else{if(b+3>=c)break;d[b++]=240|g>>18;d[b++]=128|g>>12&63}d[b++]=128|g>>6&63}d[b++]=128|g&63}}d[b]=0}}var oa=new TextDecoder("utf-16le");
function pa(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&B[c];)++c;return oa.decode(z.subarray(a,c<<1))}function qa(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f<c;++f)C[b>>1]=a.charCodeAt(f),b+=2;C[b>>1]=0;return b-d}function ra(a){return 2*a.length}function sa(a,b){for(var c=0,d="";!(c>=b/4);){var f=D[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d}
function ta(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var k=a.charCodeAt(++f);g=65536+((g&1023)<<10)|k&1023}D[b>>2]=g;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function ua(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var va,wa,z,C,B,D,E,xa,ya;
function za(){var a=ka.buffer;va=a;e.HEAP8=wa=new Int8Array(a);e.HEAP16=C=new Int16Array(a);e.HEAP32=D=new Int32Array(a);e.HEAPU8=z=new Uint8Array(a);e.HEAPU16=B=new Uint16Array(a);e.HEAPU32=E=new Uint32Array(a);e.HEAPF32=xa=new Float32Array(a);e.HEAPF64=ya=new Float64Array(a)}var F,Aa=[],Ba=[],Ca=[];function Da(){var a=e.preRun.shift();Aa.unshift(a)}var G=0,Ea=null,H=null;e.preloadedImages={};e.preloadedAudios={};
function w(a){if(e.onAbort)e.onAbort(a);x(a);la=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ca(a);throw a;}var J=(new URL("avif_node_enc.wasm",import.meta.url)).toString();function Fa(){return Promise.resolve().then(function(){a:{try{if(J==J&&y){var a=new Uint8Array(y);break a}if(ea){a=ea(J);break a}throw"both async and sync fetching of the wasm failed";}catch(b){w(b)}a=void 0}return a})}
function Ga(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(e);else{var c=b.va;"number"===typeof c?void 0===b.ga?F.get(c)():F.get(c)(b.ga):c(void 0===b.ga?null:b.ga)}}}var Ha=[null,[],[]],Ia={},K={};function Ja(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function L(a){return this.fromWireType(E[a>>2])}var M={},N={},O={};function Ka(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}
function La(a,b){a=Ka(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Ma(a){var b=Error,c=La(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}
var Na=void 0;function Oa(a,b,c){function d(h){h=c(h);if(h.length!==a.length)throw new Na("Mismatched type converter count");for(var l=0;l<a.length;++l)P(a[l],h[l])}a.forEach(function(h){O[h]=b});var f=Array(b.length),g=[],k=0;b.forEach(function(h,l){N.hasOwnProperty(h)?f[l]=N[h]:(g.push(h),M.hasOwnProperty(h)||(M[h]=[]),M[h].push(function(){f[l]=N[h];++k;k===g.length&&d(f)}))});0===g.length&&d(f)}
function Pa(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var Qa=void 0;function Q(a){for(var b="";z[a];)b+=Qa[z[a++]];return b}var Ra=void 0;function R(a){throw new Ra(a);}
function P(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||R('type "'+d+'" must have a positive integer typeid pointer');if(N.hasOwnProperty(a)){if(c.oa)return;R("Cannot register type '"+d+"' twice")}N[a]=b;delete O[a];M.hasOwnProperty(a)&&(b=M[a],delete M[a],b.forEach(function(f){f()}))}var Sa=[],S=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Ta(a){4<a&&0===--S[a].ha&&(S[a]=void 0,Sa.push(a))}function U(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Sa.length?Sa.pop():S.length;S[b]={ha:1,value:a};return b}}function Ua(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Va(a,b){switch(b){case 2:return function(c){return this.fromWireType(xa[c>>2])};case 3:return function(c){return this.fromWireType(ya[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Wa(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=La(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Xa(a,b){var c=e;if(void 0===c[a].ea){var d=c[a];c[a]=function(){c[a].ea.hasOwnProperty(arguments.length)||R("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].ea+")!");return c[a].ea[arguments.length].apply(this,arguments)};c[a].ea=[];c[a].ea[d.ja]=d}}
function Ya(a,b,c){e.hasOwnProperty(a)?((void 0===c||void 0!==e[a].ea&&void 0!==e[a].ea[c])&&R("Cannot register public name '"+a+"' twice"),Xa(a,a),e.hasOwnProperty(c)&&R("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),e[a].ea[c]=b):(e[a]=b,void 0!==c&&(e[a].ya=c))}function Za(a,b){for(var c=[],d=0;d<a;d++)c.push(D[(b>>2)+d]);return c}
function $a(a,b){var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];a.includes("j")?(d=e["dynCall_"+a],d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)):d=F.get(b).apply(null,c);return d}}function V(a,b){a=Q(a);var c=a.includes("j")?$a(a,b):F.get(b);"function"!==typeof c&&R("unknown function pointer with signature "+a+": "+b);return c}var ab=void 0;function bb(a){a=cb(a);var b=Q(a);W(a);return b}
function db(a,b){function c(g){f[g]||N[g]||(O[g]?O[g].forEach(c):(d.push(g),f[g]=!0))}var d=[],f={};b.forEach(c);throw new ab(a+": "+d.map(bb).join([", "]));}function eb(a,b,c){switch(b){case 0:return c?function(d){return wa[d]}:function(d){return z[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return B[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var fb={};
function gb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function hb(a,b){var c=N[a];void 0===c&&R(b+" has unknown type "+bb(a));return c}var ib={};Na=e.InternalError=Ma("InternalError");for(var jb=Array(256),kb=0;256>kb;++kb)jb[kb]=String.fromCharCode(kb);Qa=jb;Ra=e.BindingError=Ma("BindingError");e.count_emval_handles=function(){for(var a=0,b=5;b<S.length;++b)void 0!==S[b]&&++a;return a};
e.get_first_emval=function(){for(var a=5;a<S.length;++a)if(void 0!==S[a])return S[a];return null};ab=e.UnboundTypeError=Ma("UnboundTypeError");
var vb={O:function(){},s:function(){return 0},G:function(){return 0},H:function(){},x:function(a){var b=K[a];delete K[a];var c=b.pa,d=b.qa,f=b.ia,g=f.map(function(k){return k.na}).concat(f.map(function(k){return k.sa}));Oa([a],g,function(k){var h={};f.forEach(function(l,n){var m=k[n],p=l.la,r=l.ma,t=k[n+f.length],q=l.ra,ba=l.ta;h[l.ka]={read:function(A){return m.fromWireType(p(r,A))},write:function(A,I){var T=[];q(ba,A,t.toWireType(T,I));Ja(T)}}});return[{name:b.name,fromWireType:function(l){var n=
{},m;for(m in h)n[m]=h[m].read(l);d(l);return n},toWireType:function(l,n){for(var m in h)if(!(m in n))throw new TypeError('Missing field: "'+m+'"');var p=c();for(m in h)h[m].write(p,n[m]);null!==l&&l.push(d,p);return p},argPackAdvance:8,readValueFromPointer:L,fa:d}]})},B:function(){},K:function(a,b,c,d,f){var g=Pa(c);b=Q(b);P(a,{name:b,fromWireType:function(k){return!!k},toWireType:function(k,h){return h?d:f},argPackAdvance:8,readValueFromPointer:function(k){if(1===c)var h=wa;else if(2===c)h=C;else if(4===
c)h=D;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(h[k>>g])},fa:null})},J:function(a,b){b=Q(b);P(a,{name:b,fromWireType:function(c){var d=S[c].value;Ta(c);return d},toWireType:function(c,d){return U(d)},argPackAdvance:8,readValueFromPointer:L,fa:null})},t:function(a,b,c){c=Pa(c);b=Q(b);P(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Ua(f)+'" to '+this.name);
return f},argPackAdvance:8,readValueFromPointer:Va(b,c),fa:null})},w:function(a,b,c,d,f,g){var k=Za(b,c);a=Q(a);f=V(d,f);Ya(a,function(){db("Cannot call "+a+" due to unbound types",k)},b-1);Oa([],k,function(h){var l=[h[0],null].concat(h.slice(1)),n=h=a,m=f,p=l.length;2>p&&R("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==l[1]&&!1,t=!1,q=1;q<l.length;++q)if(null!==l[q]&&void 0===l[q].fa){t=!0;break}var ba="void"!==l[0].name,A="",I="";for(q=0;q<p-2;++q)A+=
(0!==q?", ":"")+"arg"+q,I+=(0!==q?", ":"")+"arg"+q+"Wired";n="return function "+Ka(n)+"("+A+") {\nif (arguments.length !== "+(p-2)+") {\nthrowBindingError('function "+n+" called with ' + arguments.length + ' arguments, expected "+(p-2)+" args!');\n}\n";t&&(n+="var destructors = [];\n");var T=t?"destructors":"null";A="throwBindingError invoker fn runDestructors retType classParam".split(" ");m=[R,m,g,Ja,l[0],l[1]];r&&(n+="var thisWired = classParam.toWireType("+T+", this);\n");for(q=0;q<p-2;++q)n+=
"var arg"+q+"Wired = argType"+q+".toWireType("+T+", arg"+q+"); // "+l[q+2].name+"\n",A.push("argType"+q),m.push(l[q+2]);r&&(I="thisWired"+(0<I.length?", ":"")+I);n+=(ba?"var rv = ":"")+"invoker(fn"+(0<I.length?", ":"")+I+");\n";if(t)n+="runDestructors(destructors);\n";else for(q=r?1:2;q<l.length;++q)p=1===q?"thisWired":"arg"+(q-2)+"Wired",null!==l[q].fa&&(n+=p+"_dtor("+p+"); // "+l[q].name+"\n",A.push(p+"_dtor"),m.push(l[q].fa));ba&&(n+="var ret = retType.fromWireType(rv);\nreturn ret;\n");A.push(n+
"}\n");l=Wa(A).apply(null,m);q=b-1;if(!e.hasOwnProperty(h))throw new Na("Replacing nonexistant public symbol");void 0!==e[h].ea&&void 0!==q?e[h].ea[q]=l:(e[h]=l,e[h].ja=q);return[]})},i:function(a,b,c,d,f){function g(n){return n}b=Q(b);-1===f&&(f=4294967295);var k=Pa(c);if(0===d){var h=32-8*c;g=function(n){return n<<h>>>h}}var l=b.includes("unsigned");P(a,{name:b,fromWireType:g,toWireType:function(n,m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+Ua(m)+'" to '+
this.name);if(m<d||m>f)throw new TypeError('Passing a number "'+Ua(m)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return l?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:eb(b,k,0!==d),fa:null})},e:function(a,b,c){function d(g){g>>=2;var k=E;return new f(va,k[g+1],k[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=Q(c);P(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},
{oa:!0})},u:function(a,b){b=Q(b);var c="std::string"===b;P(a,{name:b,fromWireType:function(d){var f=E[d>>2];if(c)for(var g=d+4,k=0;k<=f;++k){var h=d+4+k;if(k==f||0==z[h]){if(g){for(var l=g+(h-g),n=g;!(n>=l)&&z[n];)++n;g=ma.decode(z.subarray(g,n))}else g="";if(void 0===m)var m=g;else m+=String.fromCharCode(0),m+=g;g=h+1}}else{m=Array(f);for(k=0;k<f;++k)m[k]=String.fromCharCode(z[d+4+k]);m=m.join("")}W(d);return m},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var g="string"===
typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||R("Cannot pass non-string to std::string");var k=(c&&g?function(){for(var n=0,m=0;m<f.length;++m){var p=f.charCodeAt(m);55296<=p&&57343>=p&&(p=65536+((p&1023)<<10)|f.charCodeAt(++m)&1023);127>=p?++n:n=2047>=p?n+2:65535>=p?n+3:n+4}return n}:function(){return f.length})(),h=lb(4+k+1);E[h>>2]=k;if(c&&g)na(f,h+4,k+1);else if(g)for(g=0;g<k;++g){var l=f.charCodeAt(g);255<l&&(W(h),R("String has UTF-16 code units that do not fit in 8 bits"));
z[h+4+g]=l}else for(g=0;g<k;++g)z[h+4+g]=f[g];null!==d&&d.push(W,h);return h},argPackAdvance:8,readValueFromPointer:L,fa:function(d){W(d)}})},o:function(a,b,c){c=Q(c);if(2===b){var d=pa;var f=qa;var g=ra;var k=function(){return B};var h=1}else 4===b&&(d=sa,f=ta,g=ua,k=function(){return E},h=2);P(a,{name:c,fromWireType:function(l){for(var n=E[l>>2],m=k(),p,r=l+4,t=0;t<=n;++t){var q=l+4+t*b;if(t==n||0==m[q>>h])r=d(r,q-r),void 0===p?p=r:(p+=String.fromCharCode(0),p+=r),r=q+b}W(l);return p},toWireType:function(l,
n){"string"!==typeof n&&R("Cannot pass non-string to C++ string type "+c);var m=g(n),p=lb(4+m+b);E[p>>2]=m>>h;f(n,p+4,m+b);null!==l&&l.push(W,p);return p},argPackAdvance:8,readValueFromPointer:L,fa:function(l){W(l)}})},z:function(a,b,c,d,f,g){K[a]={name:Q(b),pa:V(c,d),qa:V(f,g),ia:[]}},g:function(a,b,c,d,f,g,k,h,l,n){K[a].ia.push({ka:Q(b),na:c,la:V(d,f),ma:g,sa:k,ra:V(h,l),ta:n})},L:function(a,b){b=Q(b);P(a,{xa:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},j:Ta,N:function(a){if(0===
a)return U(gb());var b=fb[a];a=void 0===b?Q(a):b;return U(gb()[a])},v:function(a){4<a&&(S[a].ha+=1)},D:function(a,b,c,d){a||R("Cannot use deleted val. handle = "+a);a=S[a].value;var f=ib[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var k="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)k+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+
g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",k+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(hb,e,U);ib[b]=f}return f(a,c,d)},f:function(){w()},d:function(a,b){X(a,b||1);throw"longjmp";},E:function(a,b,c){z.copyWithin(a,b,b+c)},n:function(a){var b=z.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,d);0<d%65536&&(d+=65536-d%65536);a:{try{ka.grow(Math.min(2147483648,
d)-va.byteLength+65535>>>16);za();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},r:function(){return 0},F:function(a,b,c,d){a=Ia.wa(a);b=Ia.ua(a,b,c);D[d>>2]=b;return 0},A:function(){},I:function(a,b,c,d){for(var f=0,g=0;g<c;g++){for(var k=D[b+8*g>>2],h=D[b+(8*g+4)>>2],l=0;l<h;l++){var n=z[k+l],m=Ha[a];if(0===n||10===n){n=1===a?ia:x;var p;for(p=0;m[p]&&!(NaN<=p);)++p;p=ma.decode(m.subarray?m.subarray(0,p):new Uint8Array(m.slice(0,p)));n(p);m.length=0}else m.push(n)}f+=h}D[d>>2]=f;return 0},
b:function(){return ja},l:mb,p:nb,q:ob,C:pb,y:qb,m:rb,h:sb,c:tb,k:ub,a:function(a){ja=a},M:function(a){var b=Date.now()/1E3|0;a&&(D[a>>2]=b);return b}};
(function(){function a(f){e.asm=f.exports;ka=e.asm.P;za();F=e.asm.Y;Ba.unshift(e.asm.Q);G--;e.monitorRunDependencies&&e.monitorRunDependencies(G);0==G&&(null!==Ea&&(clearInterval(Ea),Ea=null),H&&(f=H,H=null,f()))}function b(f){a(f.instance)}function c(f){return Fa().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){x("failed to asynchronously prepare wasm: "+g);w(g)})}var d={a:vb};G++;e.monitorRunDependencies&&e.monitorRunDependencies(G);if(e.instantiateWasm)try{return e.instantiateWasm(d,
a)}catch(f){return x("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return y||"function"!==typeof WebAssembly.instantiateStreaming||J.startsWith("data:application/octet-stream;base64,")||"function"!==typeof fetch?c(b):fetch(J,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){x("wasm streaming compile failed: "+g);x("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ca);return{}})();
e.___wasm_call_ctors=function(){return(e.___wasm_call_ctors=e.asm.Q).apply(null,arguments)};var lb=e._malloc=function(){return(lb=e._malloc=e.asm.R).apply(null,arguments)},W=e._free=function(){return(W=e._free=e.asm.S).apply(null,arguments)},cb=e.___getTypeName=function(){return(cb=e.___getTypeName=e.asm.T).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.U).apply(null,arguments)};
var Y=e.stackSave=function(){return(Y=e.stackSave=e.asm.V).apply(null,arguments)},Z=e.stackRestore=function(){return(Z=e.stackRestore=e.asm.W).apply(null,arguments)},X=e._setThrew=function(){return(X=e._setThrew=e.asm.X).apply(null,arguments)};e.dynCall_jiiiiiiiii=function(){return(e.dynCall_jiiiiiiiii=e.asm.Z).apply(null,arguments)};var wb=e.dynCall_ijiii=function(){return(wb=e.dynCall_ijiii=e.asm._).apply(null,arguments)};e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.$).apply(null,arguments)};
e.dynCall_jiiiiiiii=function(){return(e.dynCall_jiiiiiiii=e.asm.aa).apply(null,arguments)};e.dynCall_jiiiiii=function(){return(e.dynCall_jiiiiii=e.asm.ba).apply(null,arguments)};e.dynCall_jiiiii=function(){return(e.dynCall_jiiiii=e.asm.ca).apply(null,arguments)};e.dynCall_iiijii=function(){return(e.dynCall_iiijii=e.asm.da).apply(null,arguments)};function rb(a,b){var c=Y();try{F.get(a)(b)}catch(d){Z(c);if(d!==d+0&&"longjmp"!==d)throw d;X(1,0)}}
function tb(a,b,c,d,f){var g=Y();try{F.get(a)(b,c,d,f)}catch(k){Z(g);if(k!==k+0&&"longjmp"!==k)throw k;X(1,0)}}function sb(a,b,c){var d=Y();try{F.get(a)(b,c)}catch(f){Z(d);if(f!==f+0&&"longjmp"!==f)throw f;X(1,0)}}function ob(a,b,c,d,f,g,k,h,l,n){var m=Y();try{return F.get(a)(b,c,d,f,g,k,h,l,n)}catch(p){Z(m);if(p!==p+0&&"longjmp"!==p)throw p;X(1,0)}}function pb(a,b,c,d,f,g,k,h,l,n,m,p){var r=Y();try{return F.get(a)(b,c,d,f,g,k,h,l,n,m,p)}catch(t){Z(r);if(t!==t+0&&"longjmp"!==t)throw t;X(1,0)}}
function mb(a,b,c,d,f){var g=Y();try{return F.get(a)(b,c,d,f)}catch(k){Z(g);if(k!==k+0&&"longjmp"!==k)throw k;X(1,0)}}function ub(a,b,c,d,f,g,k,h,l,n,m){var p=Y();try{F.get(a)(b,c,d,f,g,k,h,l,n,m)}catch(r){Z(p);if(r!==r+0&&"longjmp"!==r)throw r;X(1,0)}}function nb(a,b,c,d,f,g,k,h,l){var n=Y();try{return F.get(a)(b,c,d,f,g,k,h,l)}catch(m){Z(n);if(m!==m+0&&"longjmp"!==m)throw m;X(1,0)}}
function qb(a,b,c,d,f,g){var k=Y();try{return wb(a,b,c,d,f,g)}catch(h){Z(k);if(h!==h+0&&"longjmp"!==h)throw h;X(1,0)}}var xb;H=function yb(){xb||zb();xb||(H=yb)};
function zb(){function a(){if(!xb&&(xb=!0,e.calledRun=!0,!la)){Ga(Ba);aa(e);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();Ca.unshift(b)}Ga(Ca)}}if(!(0<G)){if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)Da();Ga(Aa);0<G||(e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1);a()},1)):a())}}e.run=zb;
if(e.preInit)for("function"==typeof e.preInit&&(e.preInit=[e.preInit]);0<e.preInit.length;)e.preInit.pop()();zb();
return Module.ready
}
);
})();
export default Module;

Binary file not shown.

View File

@@ -8,14 +8,11 @@
# $(OUT_CPP)
# $(LIBAOM_FLAGS)
# $(LIBAVIF_FLAGS)
# $(ENVIRONMENT)
OUT_BUILD_DIR := $(BUILD_DIR)/$(basename $(OUT_JS))
CODEC_BUILD_DIR := $(OUT_BUILD_DIR)/libavif
CODEC_BUILD_DIR := $(BUILD_DIR)/libavif
CODEC_OUT := $(CODEC_BUILD_DIR)/libavif.a
LIBAOM_BUILD_DIR := $(OUT_BUILD_DIR)/libaom
LIBAOM_BUILD_DIR := $(BUILD_DIR)/libaom
LIBAOM_OUT := $(LIBAOM_BUILD_DIR)/libaom.a
OUT_WASM = $(OUT_JS:.js=.wasm)
@@ -32,8 +29,13 @@ $(OUT_JS): $(OUT_CPP) $(LIBAOM_OUT) $(CODEC_OUT)
$(LDFLAGS) \
$(OUT_FLAGS) \
--bind \
-s ENVIRONMENT=$(ENVIRONMENT) \
--closure 1 \
-s ALLOW_MEMORY_GROWTH=1 \
-s MODULARIZE=1 \
-s TEXTDECODER=2 \
-s ENVIRONMENT='worker' \
-s EXPORT_ES6=1 \
-s EXPORT_NAME="$(basename $(@F))" \
-o $@ \
$+

View File

@@ -1,3 +1,3 @@
#!/bin/sh -e
docker build -t squoosh-cpp - < ../cpp.Dockerfile
docker run -it --rm -v $PWD:/src squoosh-cpp "$@"
docker run --rm -v $PWD:/src squoosh-cpp

View File

@@ -7,4 +7,4 @@ then
fi
IMG_NAME=squoosh-rust$IMG_SUFFIX
docker build -t $IMG_NAME --build-arg RUST_IMG - < ../rust.Dockerfile
docker run -it --rm -v $PWD:/src $IMG_NAME "$@"
docker run --rm -v $PWD:/src $IMG_NAME "$@"

View File

@@ -1,17 +1,9 @@
FROM emscripten/emsdk:2.0.21
FROM emscripten/emsdk:2.0.8
RUN apt-get update && apt-get install -qqy autoconf libtool pkg-config
ENV CFLAGS "-O3 -flto"
ENV CXXFLAGS "${CFLAGS} -std=c++17"
ENV LDFLAGS "${CFLAGS} \
--closure 1 \
-s FILESYSTEM=0 \
-s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency \
-s ALLOW_MEMORY_GROWTH=1 \
-s TEXTDECODER=2 \
"
# Build and cache standard libraries with these flags + Embind.
RUN emcc ${CXXFLAGS} ${LDFLAGS} --bind -xc++ /dev/null -o /dev/null
# And another set for the pthread variant.
RUN emcc ${CXXFLAGS} ${LDFLAGS} --bind -pthread -xc++ /dev/null -o /dev/null
ENV LDFLAGS "${CFLAGS} -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency"
# Build and cache standard libraries with these flags
RUN emcc ${CXXFLAGS} --bind -xc++ /dev/null -o /dev/null
WORKDIR /src
CMD ["sh", "-c", "emmake make -j`nproc`"]

197
codecs/hqx/Cargo.lock generated
View File

@@ -4,289 +4,286 @@
name = "bumpalo"
version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820"
[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "console_error_panic_hook"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211"
dependencies = [
"cfg-if 0.1.10",
"wasm-bindgen",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "futures"
version = "0.1.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef"
[[package]]
name = "hqx"
version = "0.1.0"
source = "git+https://github.com/CryZe/wasmboy-rs?tag=v0.1.3#d7cbae67906796928c8e451b186f3c653924beb8"
source = "git+https://github.com/CryZe/wasmboy-rs?tag=v0.1.2#5f19cda24191ccc7c0c4920b6b246b4e242f377c"
dependencies = [
"lazy_static",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "js-sys"
version = "0.3.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52732a3d3ad72c58ad2dc70624f9c17b46ecd0943b9a4f1ee37c4c18c5d983e2"
dependencies = [
"wasm-bindgen",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd7d4bd64732af4bf3a67f367c27df8520ad7e230c5817b8ff485864d80242b9"
[[package]]
name = "log"
version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
dependencies = [
"cfg-if 0.1.10",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "memory_units"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
[[package]]
name = "proc-macro2"
version = "0.4.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
dependencies = [
"unicode-xid 0.1.0",
"unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "proc-macro2"
version = "1.0.27"
version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038"
dependencies = [
"unicode-xid 0.2.1",
"unicode-xid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "quote"
version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
dependencies = [
"proc-macro2 0.4.30",
"proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "quote"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
dependencies = [
"proc-macro2 1.0.27",
"proc-macro2 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "scoped-tls"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
[[package]]
name = "squooshhqx"
version = "0.1.0"
dependencies = [
"cfg-if 0.1.10",
"console_error_panic_hook",
"hqx",
"wasm-bindgen",
"wasm-bindgen-test",
"wee_alloc",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"hqx 0.1.0 (git+https://github.com/CryZe/wasmboy-rs?tag=v0.1.2)",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-test 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)",
"wee_alloc 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "syn"
version = "1.0.72"
version = "1.0.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1e8cdbefb79a9a5a65e0db8b47b723ee907b7c7f8496c76a1770b5c310bab82"
dependencies = [
"proc-macro2 1.0.27",
"quote 1.0.7",
"unicode-xid 0.2.1",
"proc-macro2 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-xid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-xid"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
[[package]]
name = "unicode-xid"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
[[package]]
name = "wasm-bindgen"
version = "0.2.74"
version = "0.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd"
dependencies = [
"cfg-if 1.0.0",
"wasm-bindgen-macro",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-macro 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.74"
version = "0.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900"
dependencies = [
"bumpalo",
"lazy_static",
"log",
"proc-macro2 1.0.27",
"quote 1.0.7",
"syn",
"wasm-bindgen-shared",
"bumpalo 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
"proc-macro2 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"syn 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-shared 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-futures"
version = "0.3.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83420b37346c311b9ed822af41ec2e82839bfe99867ec6c54e2da43b7538771c"
dependencies = [
"cfg-if 0.1.10",
"futures",
"js-sys",
"wasm-bindgen",
"web-sys",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
"js-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
"web-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.74"
version = "0.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4"
dependencies = [
"quote 1.0.7",
"wasm-bindgen-macro-support",
"quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-macro-support 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.74"
version = "0.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97"
dependencies = [
"proc-macro2 1.0.27",
"quote 1.0.7",
"syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
"proc-macro2 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"syn 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-backend 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-shared 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.74"
version = "0.2.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f"
[[package]]
name = "wasm-bindgen-test"
version = "0.2.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2d9693b63a742d481c7f80587e057920e568317b2806988c59cd71618bc26c1"
dependencies = [
"console_error_panic_hook",
"futures",
"js-sys",
"scoped-tls",
"wasm-bindgen",
"wasm-bindgen-futures",
"wasm-bindgen-test-macro",
"console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
"js-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)",
"scoped-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-futures 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen-test-macro 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasm-bindgen-test-macro"
version = "0.2.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0789dac148a8840bbcf9efe13905463b733fa96543bfbf263790535c11af7ba5"
dependencies = [
"proc-macro2 0.4.30",
"quote 0.6.13",
"proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "web-sys"
version = "0.3.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8be2398f326b7ba09815d0b403095f34dd708579220d099caae89be0b32137b2"
dependencies = [
"js-sys",
"wasm-bindgen",
"js-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wee_alloc"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
dependencies = [
"cfg-if 0.1.10",
"libc",
"memory_units",
"winapi",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.73 (registry+https://github.com/rust-lang/crates.io-index)",
"memory_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
"winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[metadata]
"checksum bumpalo 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820"
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
"checksum console_error_panic_hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211"
"checksum futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef"
"checksum hqx 0.1.0 (git+https://github.com/CryZe/wasmboy-rs?tag=v0.1.2)" = "<none>"
"checksum js-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)" = "52732a3d3ad72c58ad2dc70624f9c17b46ecd0943b9a4f1ee37c4c18c5d983e2"
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
"checksum libc 0.2.73 (registry+https://github.com/rust-lang/crates.io-index)" = "bd7d4bd64732af4bf3a67f367c27df8520ad7e230c5817b8ff485864d80242b9"
"checksum log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
"checksum memory_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
"checksum proc-macro2 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)" = "04f5f085b5d71e2188cb8271e5da0161ad52c3f227a661a3c135fdf28e258b12"
"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
"checksum quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
"checksum scoped-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
"checksum syn 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)" = "fb7f4c519df8c117855e19dd8cc851e89eb746fe7a73f0157e0d95fdec5369b0"
"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
"checksum unicode-xid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
"checksum wasm-bindgen 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "f3edbcc9536ab7eababcc6d2374a0b7bfe13a2b6d562c5e07f370456b1a8f33d"
"checksum wasm-bindgen-backend 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "89ed2fb8c84bfad20ea66b26a3743f3e7ba8735a69fe7d95118c33ec8fc1244d"
"checksum wasm-bindgen-futures 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)" = "83420b37346c311b9ed822af41ec2e82839bfe99867ec6c54e2da43b7538771c"
"checksum wasm-bindgen-macro 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "eb071268b031a64d92fc6cf691715ca5a40950694d8f683c5bb43db7c730929e"
"checksum wasm-bindgen-macro-support 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "cf592c807080719d1ff2f245a687cbadb3ed28b2077ed7084b47aba8b691f2c6"
"checksum wasm-bindgen-shared 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "72b6c0220ded549d63860c78c38f3bcc558d1ca3f4efa74942c536ddbbb55e87"
"checksum wasm-bindgen-test 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "a2d9693b63a742d481c7f80587e057920e568317b2806988c59cd71618bc26c1"
"checksum wasm-bindgen-test-macro 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "0789dac148a8840bbcf9efe13905463b733fa96543bfbf263790535c11af7ba5"
"checksum web-sys 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)" = "8be2398f326b7ba09815d0b403095f34dd708579220d099caae89be0b32137b2"
"checksum wee_alloc 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
"checksum winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"

View File

@@ -13,7 +13,7 @@ default = ["console_error_panic_hook", "wee_alloc"]
cfg-if = "0.1.2"
wasm-bindgen = "0.2.38"
# lazy_static = "1.0.0"
hqx = {git = "https://github.com/CryZe/wasmboy-rs", tag="v0.1.3"}
hqx = {git = "https://github.com/CryZe/wasmboy-rs", tag="v0.1.2"}
# The `console_error_panic_hook` crate provides better debugging of panics by
# logging them with `console.error`. This is great for development, but requires

View File

@@ -1,6 +1,6 @@
{
"name": "hqx",
"scripts": {
"build": "../build-rust.sh"
"build": "RUST_IMG=rust:1.40 ../build-rust.sh"
}
}

View File

@@ -1,30 +1,48 @@
/* tslint:disable */
/* eslint-disable */
/**
* @param {Uint32Array} input_image
* @param {number} input_width
* @param {number} input_height
* @param {number} factor
* @returns {Uint32Array}
*/
export function resize(input_image: Uint32Array, input_width: number, input_height: number, factor: number): Uint32Array;
* @param {Uint32Array} input_image
* @param {number} input_width
* @param {number} input_height
* @param {number} factor
* @returns {Uint32Array}
*/
export function resize(
input_image: Uint32Array,
input_width: number,
input_height: number,
factor: number,
): Uint32Array;
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
export type InitInput =
| RequestInfo
| URL
| Response
| BufferSource
| WebAssembly.Module;
export interface InitOutput {
readonly memory: WebAssembly.Memory;
readonly resize: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
readonly resize: (
a: number,
b: number,
c: number,
d: number,
e: number,
f: number,
) => void;
readonly __wbindgen_malloc: (a: number) => number;
readonly __wbindgen_free: (a: number, b: number) => void;
}
/**
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {InitInput | Promise<InitInput>} module_or_path
*
* @returns {Promise<InitOutput>}
*/
export default function init (module_or_path?: InitInput | Promise<InitInput>): Promise<InitOutput>;
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {InitInput | Promise<InitInput>} module_or_path
*
* @returns {Promise<InitOutput>}
*/
export default function init(
module_or_path?: InitInput | Promise<InitInput>,
): Promise<InitOutput>;

View File

@@ -1,9 +1,11 @@
let wasm;
let cachegetUint32Memory0 = null;
function getUint32Memory0() {
if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {
if (
cachegetUint32Memory0 === null ||
cachegetUint32Memory0.buffer !== wasm.memory.buffer
) {
cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);
}
return cachegetUint32Memory0;
@@ -20,7 +22,10 @@ function passArray32ToWasm0(arg, malloc) {
let cachegetInt32Memory0 = null;
function getInt32Memory0() {
if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
if (
cachegetInt32Memory0 === null ||
cachegetInt32Memory0.buffer !== wasm.memory.buffer
) {
cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
}
return cachegetInt32Memory0;
@@ -30,26 +35,21 @@ function getArrayU32FromWasm0(ptr, len) {
return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);
}
/**
* @param {Uint32Array} input_image
* @param {number} input_width
* @param {number} input_height
* @param {number} factor
* @returns {Uint32Array}
*/
* @param {Uint32Array} input_image
* @param {number} input_width
* @param {number} input_height
* @param {number} factor
* @returns {Uint32Array}
*/
export function resize(input_image, input_width, input_height, factor) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
var ptr0 = passArray32ToWasm0(input_image, wasm.__wbindgen_malloc);
var len0 = WASM_VECTOR_LEN;
wasm.resize(retptr, ptr0, len0, input_width, input_height, factor);
var r0 = getInt32Memory0()[retptr / 4 + 0];
var r1 = getInt32Memory0()[retptr / 4 + 1];
wasm.resize(8, ptr0, len0, input_width, input_height, factor);
var r0 = getInt32Memory0()[8 / 4 + 0];
var r1 = getInt32Memory0()[8 / 4 + 1];
var v1 = getArrayU32FromWasm0(r0, r1).slice();
wasm.__wbindgen_free(r0, r1 * 4);
return v1;
} finally {
wasm.__wbindgen_add_to_stack_pointer(16);
}
}
async function load(module, imports) {
@@ -57,11 +57,12 @@ async function load(module, imports) {
if (typeof WebAssembly.instantiateStreaming === 'function') {
try {
return await WebAssembly.instantiateStreaming(module, imports);
} catch (e) {
if (module.headers.get('Content-Type') != 'application/wasm') {
console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
console.warn(
'`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n',
e,
);
} else {
throw e;
}
@@ -70,13 +71,11 @@ async function load(module, imports) {
const bytes = await module.arrayBuffer();
return await WebAssembly.instantiate(bytes, imports);
} else {
const instance = await WebAssembly.instantiate(module, imports);
if (instance instanceof WebAssembly.Instance) {
return { instance, module };
} else {
return instance;
}
@@ -85,17 +84,18 @@ async function load(module, imports) {
async function init(input) {
if (typeof input === 'undefined') {
input = new URL('squooshhqx_bg.wasm', import.meta.url);
input = import.meta.url.replace(/\.js$/, '_bg.wasm');
}
const imports = {};
if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
if (
typeof input === 'string' ||
(typeof Request === 'function' && input instanceof Request) ||
(typeof URL === 'function' && input instanceof URL)
) {
input = fetch(input);
}
const { instance, module } = await load(await input, imports);
wasm = instance.exports;
@@ -105,4 +105,3 @@ async function init(input) {
}
export default init;

6
codecs/hqx/pkg/squooshhqx_bg.d.ts vendored Normal file
View File

@@ -0,0 +1,6 @@
/* tslint:disable */
/* eslint-disable */
export const memory: WebAssembly.Memory;
export function resize(a: number, b: number, c: number, d: number, e: number, f: number): void;
export function __wbindgen_malloc(a: number): number;
export function __wbindgen_free(a: number, b: number): void;

Binary file not shown.

View File

@@ -2,26 +2,27 @@ CODEC_URL := https://github.com/ImageOptim/libimagequant/archive/2.12.1.tar.gz
CODEC_DIR := node_modules/libimagequant
CODEC_OUT_RELATIVE := libimagequant.a
CODEC_OUT := $(addprefix $(CODEC_DIR)/, $(CODEC_OUT_RELATIVE))
OUT_JS := imagequant.js imagequant_node.js
OUT_JS := imagequant.js
OUT_WASM := $(OUT_JS:.js=.wasm)
ENVIRONMENT = worker
.PHONY: all clean
all: $(OUT_JS)
imagequant_node.js: ENVIRONMENT=node
$(OUT_JS): $(CODEC_OUT)
%.js: %.cpp $(CODEC_OUT)
$(CXX) \
-I $(CODEC_DIR) \
${CXXFLAGS} \
${LDFLAGS} \
--bind \
-s ENVIRONMENT=$(ENVIRONMENT) \
--closure 1 \
-s ALLOW_MEMORY_GROWTH=1 \
-s MODULARIZE=1 \
-s TEXTDECODER=2 \
-s ENVIRONMENT='worker' \
-s EXPORT_ES6=1 \
-o $@ \
$+ \
imagequant.cpp
$+
$(CODEC_OUT): $(CODEC_DIR)/config.mk
$(MAKE) -C $(CODEC_DIR) $(CODEC_OUT_RELATIVE)

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1,55 +0,0 @@
var Module = (function() {
var _scriptDir = import.meta.url;
return (
function(Module) {
Module = Module || {};
var e;e||(e=typeof Module !== 'undefined' ? Module : {});var aa,r;e.ready=new Promise(function(a,b){aa=a;r=b});var t={},u;for(u in e)e.hasOwnProperty(u)&&(t[u]=e[u]);var ba,v,w,y;ba=function(a){w||(w=require("fs"));y||(y=require("path"));a=y.normalize(a);return w.readFileSync(a,null)};v=function(a){a=ba(a);a.buffer||(a=new Uint8Array(a));a.buffer||z("Assertion failed: undefined");return a};1<process.argv.length&&process.argv[1].replace(/\\/g,"/");process.argv.slice(2);
process.on("uncaughtException",function(a){throw a;});process.on("unhandledRejection",z);e.inspect=function(){return"[Emscripten Module object]"};var ca=e.print||console.log.bind(console),A=e.printErr||console.warn.bind(console);for(u in t)t.hasOwnProperty(u)&&(e[u]=t[u]);t=null;var C;e.wasmBinary&&(C=e.wasmBinary);var noExitRuntime=e.noExitRuntime||!0;"object"!==typeof WebAssembly&&z("no native wasm support detected");var D,da=!1,ea=new TextDecoder("utf8");
function fa(a,b,c){var d=E;if(0<c){c=b+c-1;for(var g=0;g<a.length;++g){var f=a.charCodeAt(g);if(55296<=f&&57343>=f){var l=a.charCodeAt(++g);f=65536+((f&1023)<<10)|l&1023}if(127>=f){if(b>=c)break;d[b++]=f}else{if(2047>=f){if(b+1>=c)break;d[b++]=192|f>>6}else{if(65535>=f){if(b+2>=c)break;d[b++]=224|f>>12}else{if(b+3>=c)break;d[b++]=240|f>>18;d[b++]=128|f>>12&63}d[b++]=128|f>>6&63}d[b++]=128|f&63}}d[b]=0}}var ha=new TextDecoder("utf-16le");
function ia(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&G[c];)++c;return ha.decode(E.subarray(a,c<<1))}function ja(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var g=0;g<c;++g)H[b>>1]=a.charCodeAt(g),b+=2;H[b>>1]=0;return b-d}function ka(a){return 2*a.length}function la(a,b){for(var c=0,d="";!(c>=b/4);){var g=I[a+4*c>>2];if(0==g)break;++c;65536<=g?(g-=65536,d+=String.fromCharCode(55296|g>>10,56320|g&1023)):d+=String.fromCharCode(g)}return d}
function ma(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var g=0;g<a.length;++g){var f=a.charCodeAt(g);if(55296<=f&&57343>=f){var l=a.charCodeAt(++g);f=65536+((f&1023)<<10)|l&1023}I[b>>2]=f;b+=4;if(b+4>c)break}I[b>>2]=0;return b-d}function na(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var oa,pa,E,H,G,I,K,qa,ra;
function sa(){var a=D.buffer;oa=a;e.HEAP8=pa=new Int8Array(a);e.HEAP16=H=new Int16Array(a);e.HEAP32=I=new Int32Array(a);e.HEAPU8=E=new Uint8Array(a);e.HEAPU16=G=new Uint16Array(a);e.HEAPU32=K=new Uint32Array(a);e.HEAPF32=qa=new Float32Array(a);e.HEAPF64=ra=new Float64Array(a)}var L,ta=[],ua=[],va=[];function wa(){var a=e.preRun.shift();ta.unshift(a)}var M=0,xa=null,N=null;e.preloadedImages={};e.preloadedAudios={};
function z(a){if(e.onAbort)e.onAbort(a);A(a);da=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");r(a);throw a;}var O=(new URL("imagequant_node.wasm",import.meta.url)).toString();function ya(){return Promise.resolve().then(function(){a:{try{if(O==O&&C){var a=new Uint8Array(C);break a}if(v){a=v(O);break a}throw"both async and sync fetching of the wasm failed";}catch(b){z(b)}a=void 0}return a})}
function za(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(e);else{var c=b.L;"number"===typeof c?void 0===b.H?L.get(c)():L.get(c)(b.H):c(void 0===b.H?null:b.H)}}}function Aa(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var Ba=void 0;function P(a){for(var b="";E[a];)b+=Ba[E[a++]];return b}var Q={},R={},S={};
function Ca(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Da(a,b){a=Ca(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}
function Ea(a){var b=Error,c=Da(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Fa=void 0;function T(a){throw new Fa(a);}var Ga=void 0;
function Ha(a,b){function c(h){h=b(h);if(h.length!==d.length)throw new Ga("Mismatched type converter count");for(var k=0;k<d.length;++k)U(d[k],h[k])}var d=[];d.forEach(function(h){S[h]=a});var g=Array(a.length),f=[],l=0;a.forEach(function(h,k){R.hasOwnProperty(h)?g[k]=R[h]:(f.push(h),Q.hasOwnProperty(h)||(Q[h]=[]),Q[h].push(function(){g[k]=R[h];++l;l===f.length&&c(g)}))});0===f.length&&c(g)}
function U(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||T('type "'+d+'" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.K)return;T("Cannot register type '"+d+"' twice")}R[a]=b;delete S[a];Q.hasOwnProperty(a)&&(b=Q[a],delete Q[a],b.forEach(function(g){g()}))}var Ka=[],V=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function La(a){4<a&&0===--V[a].I&&(V[a]=void 0,Ka.push(a))}function W(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ka.length?Ka.pop():V.length;V[b]={I:1,value:a};return b}}function Ma(a){return this.fromWireType(K[a>>2])}function Na(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Oa(a,b){switch(b){case 2:return function(c){return this.fromWireType(qa[c>>2])};case 3:return function(c){return this.fromWireType(ra[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Pa(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Da(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Qa(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Ra(a,b){var c=e;if(void 0===c[a].F){var d=c[a];c[a]=function(){c[a].F.hasOwnProperty(arguments.length)||T("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].F+")!");return c[a].F[arguments.length].apply(this,arguments)};c[a].F=[];c[a].F[d.J]=d}}
function Sa(a,b,c){e.hasOwnProperty(a)?((void 0===c||void 0!==e[a].F&&void 0!==e[a].F[c])&&T("Cannot register public name '"+a+"' twice"),Ra(a,a),e.hasOwnProperty(c)&&T("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),e[a].F[c]=b):(e[a]=b,void 0!==c&&(e[a].N=c))}function Ta(a,b){for(var c=[],d=0;d<a;d++)c.push(I[(b>>2)+d]);return c}
function Ua(a,b){var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];a.includes("j")?(d=e["dynCall_"+a],d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)):d=L.get(b).apply(null,c);return d}}function Va(a,b){a=P(a);var c=a.includes("j")?Ua(a,b):L.get(b);"function"!==typeof c&&T("unknown function pointer with signature "+a+": "+b);return c}var Wa=void 0;function Xa(a){a=Ya(a);var b=P(a);X(a);return b}
function Za(a,b){function c(f){g[f]||R[f]||(S[f]?S[f].forEach(c):(d.push(f),g[f]=!0))}var d=[],g={};b.forEach(c);throw new Wa(a+": "+d.map(Xa).join([", "]));}function $a(a,b,c){switch(b){case 0:return c?function(d){return pa[d]}:function(d){return E[d]};case 1:return c?function(d){return H[d>>1]}:function(d){return G[d>>1]};case 2:return c?function(d){return I[d>>2]}:function(d){return K[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var ab={};
function bb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function cb(a,b){var c=R[a];void 0===c&&T(b+" has unknown type "+Xa(a));return c}for(var db={},eb=[null,[],[]],fb=Array(256),Y=0;256>Y;++Y)fb[Y]=String.fromCharCode(Y);Ba=fb;Fa=e.BindingError=Ea("BindingError");Ga=e.InternalError=Ea("InternalError");e.count_emval_handles=function(){for(var a=0,b=5;b<V.length;++b)void 0!==V[b]&&++a;return a};
e.get_first_emval=function(){for(var a=5;a<V.length;++a)if(void 0!==V[a])return V[a];return null};Wa=e.UnboundTypeError=Ea("UnboundTypeError");
var hb={m:function(){},q:function(){},n:function(a,b,c,d,g){var f=Aa(c);b=P(b);U(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,h){return h?d:g},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var h=pa;else if(2===c)h=H;else if(4===c)h=I;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(h[l>>f])},G:null})},v:function(a,b){b=P(b);U(a,{name:b,fromWireType:function(c){var d=V[c].value;La(c);return d},toWireType:function(c,d){return W(d)},
argPackAdvance:8,readValueFromPointer:Ma,G:null})},l:function(a,b,c){c=Aa(c);b=P(b);U(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,g){if("number"!==typeof g&&"boolean"!==typeof g)throw new TypeError('Cannot convert "'+Na(g)+'" to '+this.name);return g},argPackAdvance:8,readValueFromPointer:Oa(b,c),G:null})},c:function(a,b,c,d,g,f){var l=Ta(b,c);a=P(a);g=Va(d,g);Sa(a,function(){Za("Cannot call "+a+" due to unbound types",l)},b-1);Ha(l,function(h){var k=[h[0],null].concat(h.slice(1)),
m=h=a,n=g,p=k.length;2>p&&T("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==k[1]&&!1,B=!1,q=1;q<k.length;++q)if(null!==k[q]&&void 0===k[q].G){B=!0;break}var Ia="void"!==k[0].name,F="",J="";for(q=0;q<p-2;++q)F+=(0!==q?", ":"")+"arg"+q,J+=(0!==q?", ":"")+"arg"+q+"Wired";m="return function "+Ca(m)+"("+F+") {\nif (arguments.length !== "+(p-2)+") {\nthrowBindingError('function "+m+" called with ' + arguments.length + ' arguments, expected "+(p-2)+" args!');\n}\n";
B&&(m+="var destructors = [];\n");var Ja=B?"destructors":"null";F="throwBindingError invoker fn runDestructors retType classParam".split(" ");n=[T,n,f,Qa,k[0],k[1]];x&&(m+="var thisWired = classParam.toWireType("+Ja+", this);\n");for(q=0;q<p-2;++q)m+="var arg"+q+"Wired = argType"+q+".toWireType("+Ja+", arg"+q+"); // "+k[q+2].name+"\n",F.push("argType"+q),n.push(k[q+2]);x&&(J="thisWired"+(0<J.length?", ":"")+J);m+=(Ia?"var rv = ":"")+"invoker(fn"+(0<J.length?", ":"")+J+");\n";if(B)m+="runDestructors(destructors);\n";
else for(q=x?1:2;q<k.length;++q)p=1===q?"thisWired":"arg"+(q-2)+"Wired",null!==k[q].G&&(m+=p+"_dtor("+p+"); // "+k[q].name+"\n",F.push(p+"_dtor"),n.push(k[q].G));Ia&&(m+="var ret = retType.fromWireType(rv);\nreturn ret;\n");F.push(m+"}\n");k=Pa(F).apply(null,n);q=b-1;if(!e.hasOwnProperty(h))throw new Ga("Replacing nonexistant public symbol");void 0!==e[h].F&&void 0!==q?e[h].F[q]=k:(e[h]=k,e[h].J=q);return[]})},b:function(a,b,c,d,g){function f(m){return m}b=P(b);-1===g&&(g=4294967295);var l=Aa(c);
if(0===d){var h=32-8*c;f=function(m){return m<<h>>>h}}var k=b.includes("unsigned");U(a,{name:b,fromWireType:f,toWireType:function(m,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+Na(n)+'" to '+this.name);if(n<d||n>g)throw new TypeError('Passing a number "'+Na(n)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+g+"]!");return k?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:$a(b,l,0!==d),G:null})},a:function(a,
b,c){function d(f){f>>=2;var l=K;return new g(oa,l[f+1],l[f])}var g=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);U(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{K:!0})},h:function(a,b){b=P(b);var c="std::string"===b;U(a,{name:b,fromWireType:function(d){var g=K[d>>2];if(c)for(var f=d+4,l=0;l<=g;++l){var h=d+4+l;if(l==g||0==E[h]){if(f){for(var k=f+(h-f),m=f;!(m>=k)&&E[m];)++m;f=ea.decode(E.subarray(f,m))}else f="";if(void 0===
n)var n=f;else n+=String.fromCharCode(0),n+=f;f=h+1}}else{n=Array(g);for(l=0;l<g;++l)n[l]=String.fromCharCode(E[d+4+l]);n=n.join("")}X(d);return n},toWireType:function(d,g){g instanceof ArrayBuffer&&(g=new Uint8Array(g));var f="string"===typeof g;f||g instanceof Uint8Array||g instanceof Uint8ClampedArray||g instanceof Int8Array||T("Cannot pass non-string to std::string");var l=(c&&f?function(){for(var m=0,n=0;n<g.length;++n){var p=g.charCodeAt(n);55296<=p&&57343>=p&&(p=65536+((p&1023)<<10)|g.charCodeAt(++n)&
1023);127>=p?++m:m=2047>=p?m+2:65535>=p?m+3:m+4}return m}:function(){return g.length})(),h=gb(4+l+1);K[h>>2]=l;if(c&&f)fa(g,h+4,l+1);else if(f)for(f=0;f<l;++f){var k=g.charCodeAt(f);255<k&&(X(h),T("String has UTF-16 code units that do not fit in 8 bits"));E[h+4+f]=k}else for(f=0;f<l;++f)E[h+4+f]=g[f];null!==d&&d.push(X,h);return h},argPackAdvance:8,readValueFromPointer:Ma,G:function(d){X(d)}})},f:function(a,b,c){c=P(c);if(2===b){var d=ia;var g=ja;var f=ka;var l=function(){return G};var h=1}else 4===
b&&(d=la,g=ma,f=na,l=function(){return K},h=2);U(a,{name:c,fromWireType:function(k){for(var m=K[k>>2],n=l(),p,x=k+4,B=0;B<=m;++B){var q=k+4+B*b;if(B==m||0==n[q>>h])x=d(x,q-x),void 0===p?p=x:(p+=String.fromCharCode(0),p+=x),x=q+b}X(k);return p},toWireType:function(k,m){"string"!==typeof m&&T("Cannot pass non-string to C++ string type "+c);var n=f(m),p=gb(4+n+b);K[p>>2]=n>>h;g(m,p+4,n+b);null!==k&&k.push(X,p);return p},argPackAdvance:8,readValueFromPointer:Ma,G:function(k){X(k)}})},o:function(a,b){b=
P(b);U(a,{M:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},d:La,k:function(a){if(0===a)return W(bb());var b=ab[a];a=void 0===b?P(a):b;return W(bb()[a])},i:function(a){4<a&&(V[a].I+=1)},j:function(a,b,c,d){a||T("Cannot use deleted val. handle = "+a);a=V[a].value;var g=db[b];if(!g){g="";for(var f=0;f<b;++f)g+=(0!==f?", ":"")+"arg"+f;var l="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(f=0;f<b;++f)l+="var argType"+f+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+
f+'], "parameter '+f+'");\nvar arg'+f+" = argType"+f+".readValueFromPointer(args);\nargs += argType"+f+"['argPackAdvance'];\n";g=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+g+");\nreturn __emval_register(obj);\n}\n")))(cb,e,W);db[b]=g}return g(a,c,d)},g:function(){z()},s:function(a,b,c){E.copyWithin(a,b,b+c)},e:function(a){var b=E.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,
d);0<d%65536&&(d+=65536-d%65536);a:{try{D.grow(Math.min(2147483648,d)-oa.byteLength+65535>>>16);sa();var g=1;break a}catch(f){}g=void 0}if(g)return!0}return!1},t:function(){return 0},p:function(){},u:function(a,b,c,d){for(var g=0,f=0;f<c;f++){for(var l=I[b+8*f>>2],h=I[b+(8*f+4)>>2],k=0;k<h;k++){var m=E[l+k],n=eb[a];if(0===m||10===m){m=1===a?ca:A;var p;for(p=0;n[p]&&!(NaN<=p);)++p;p=ea.decode(n.subarray?n.subarray(0,p):new Uint8Array(n.slice(0,p)));m(p);n.length=0}else n.push(m)}g+=h}I[d>>2]=g;return 0},
r:function(){}};
(function(){function a(g){e.asm=g.exports;D=e.asm.w;sa();L=e.asm.C;ua.unshift(e.asm.x);M--;e.monitorRunDependencies&&e.monitorRunDependencies(M);0==M&&(null!==xa&&(clearInterval(xa),xa=null),N&&(g=N,N=null,g()))}function b(g){a(g.instance)}function c(g){return ya().then(function(f){return WebAssembly.instantiate(f,d)}).then(g,function(f){A("failed to asynchronously prepare wasm: "+f);z(f)})}var d={a:hb};M++;e.monitorRunDependencies&&e.monitorRunDependencies(M);if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(g){return A("Module.instantiateWasm callback failed with error: "+
g),!1}(function(){return C||"function"!==typeof WebAssembly.instantiateStreaming||O.startsWith("data:application/octet-stream;base64,")||"function"!==typeof fetch?c(b):fetch(O,{credentials:"same-origin"}).then(function(g){return WebAssembly.instantiateStreaming(g,d).then(b,function(f){A("wasm streaming compile failed: "+f);A("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(r);return{}})();e.___wasm_call_ctors=function(){return(e.___wasm_call_ctors=e.asm.x).apply(null,arguments)};
var gb=e._malloc=function(){return(gb=e._malloc=e.asm.y).apply(null,arguments)},X=e._free=function(){return(X=e._free=e.asm.z).apply(null,arguments)},Ya=e.___getTypeName=function(){return(Ya=e.___getTypeName=e.asm.A).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.B).apply(null,arguments)};e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.D).apply(null,arguments)};var Z;N=function ib(){Z||jb();Z||(N=ib)};
function jb(){function a(){if(!Z&&(Z=!0,e.calledRun=!0,!da)){za(ua);aa(e);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();va.unshift(b)}za(va)}}if(!(0<M)){if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)wa();za(ta);0<M||(e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1);a()},1)):a())}}e.run=jb;
if(e.preInit)for("function"==typeof e.preInit&&(e.preInit=[e.preInit]);0<e.preInit.length;)e.preInit.pop()();jb();
return Module.ready
}
);
})();
export default Module;

View File

@@ -1,90 +1,59 @@
CODEC_URL = https://gitlab.com/wg1/jpeg-xl.git
CODEC_VERSION = ab7c5e9b6795134377aa4846ceaae2c5bc504f76
CODEC_VERSION = v0.1
CODEC_DIR = node_modules/jxl
CODEC_BUILD_ROOT := $(CODEC_DIR)/build
CODEC_MT_BUILD_DIR := $(CODEC_BUILD_ROOT)/mt
CODEC_MT_SIMD_BUILD_DIR := $(CODEC_BUILD_ROOT)/mt-simd
ENVIRONMENT = worker
CODEC_BUILD_DIR := $(CODEC_DIR)/build
CODEC_OUT := $(CODEC_BUILD_DIR)/lib/libjxl.a
OUT_JS = enc/jxl_enc.js enc/jxl_enc_mt.js enc/jxl_enc_mt_simd.js dec/jxl_dec.js enc/jxl_node_enc.js dec/jxl_node_dec.js
OUT_JS = enc/jxl_enc.js dec/jxl_dec.js
OUT_WASM = $(OUT_JS:.js=.wasm)
OUT_WORKER = $(OUT_JS:.js=.worker.js)
.PHONY: all clean
all: $(OUT_JS)
# Define dependencies for all variations of build artifacts.
$(filter enc/%,$(OUT_JS)): enc/jxl_enc.cpp
$(filter dec/%,$(OUT_JS)): dec/jxl_dec.cpp
enc/jxl_node_enc.js dec/jxl_node_dec.js: ENVIRONMENT = node
# For single-threaded build, we compile with threads enabled, but then just don't use them nor link them in.
enc/jxl_enc.js enc/jxl_node_enc.js enc/jxl_enc_mt.js dec/jxl_dec.js dec/jxl_node_dec.js: CODEC_BUILD_DIR:=$(CODEC_MT_BUILD_DIR)
enc/jxl_enc_mt_simd.js: CODEC_BUILD_DIR:=$(CODEC_MT_SIMD_BUILD_DIR)
enc/jxl_node_enc.js dec/jxl_node_dec.js enc/jxl_enc.js dec/jxl_dec.js: $(CODEC_MT_BUILD_DIR)/lib/libjxl.a
enc/jxl_enc_mt.js: $(CODEC_MT_BUILD_DIR)/lib/libjxl.a $(CODEC_MT_BUILD_DIR)/lib/libjxl_threads.a
enc/jxl_enc_mt_simd.js: $(CODEC_MT_SIMD_BUILD_DIR)/lib/libjxl.a $(CODEC_MT_SIMD_BUILD_DIR)/lib/libjxl_threads.a
# Disable errors on deprecated SIMD intrinsics.
# JPEG-XL & Highway need to catch up, once they do, we can remove this suppression.
export CXXFLAGS += -Wno-deprecated-declarations
# Compile multithreaded wrappers with -pthread.
enc/jxl_enc_mt.js enc/jxl_enc_mt_simd.js: CXXFLAGS+=-pthread
$(OUT_JS):
%.js: %.cpp $(LIBAOM_OUT) $(CODEC_OUT)
$(CXX) \
$(CXXFLAGS) \
$(LDFLAGS) \
-I $(CODEC_DIR) \
-I $(CODEC_DIR)/lib \
-I $(CODEC_DIR)/lib/include \
-I $(CODEC_BUILD_DIR)/lib/include \
-I $(CODEC_DIR)/third_party/highway \
-I $(CODEC_DIR)/third_party/skcms \
-I $(CODEC_DIR)/third_party/brunsli \
-I $(CODEC_DIR)/third_party/brunsli/c/include \
${CXXFLAGS} \
${LDFLAGS} \
--bind \
-s ENVIRONMENT=$(ENVIRONMENT) \
--closure 1 \
-s ALLOW_MEMORY_GROWTH=1 \
-s MODULARIZE=1 \
-s TEXTDECODER=2 \
-s ENVIRONMENT='worker' \
-s EXPORT_ES6=1 \
-s EXPORT_NAME="$(basename $(@F))" \
-o $@ \
$+ \
$(CODEC_BUILD_DIR)/artifacts/libbrunslienc-static.bc \
$(CODEC_BUILD_DIR)/artifacts/libbrunslicommon-static.bc \
$(CODEC_BUILD_DIR)/artifacts/libbrunslidec-static.bc \
$(CODEC_BUILD_DIR)/third_party/brotli/libbrotlidec-static.a \
$(CODEC_BUILD_DIR)/third_party/brotli/libbrotlienc-static.a \
$(CODEC_BUILD_DIR)/third_party/brotli/libbrotlicommon-static.a \
$(CODEC_BUILD_DIR)/third_party/libskcms.a \
$(CODEC_BUILD_DIR)/third_party/highway/libhwy.a
%/lib/libjxl.a: %/Makefile
$(MAKE) -C $(<D) jxl-static
$(CODEC_OUT): $(CODEC_DIR)/CMakeLists.txt
mkdir -p $(CODEC_BUILD_DIR)
cd $(CODEC_BUILD_DIR) && \
emcmake cmake ../ && \
$(MAKE) jxl-static
%/lib/libjxl_threads.a: %/Makefile
$(MAKE) -C $(<D) jxl_threads-static
$(CODEC_DIR)/CMakeLists.txt: $(CODEC_DIR)
# Enable SIMD on a SIMD build.
$(CODEC_MT_SIMD_BUILD_DIR)/Makefile: CXXFLAGS+=-msimd128
%/Makefile: $(CODEC_DIR)/CMakeLists.txt
emcmake cmake \
$(CMAKE_FLAGS) \
-DBUILD_SHARED_LIBS=0 \
-DJPEGXL_ENABLE_BENCHMARK=0 \
-DJPEGXL_ENABLE_EXAMPLES=0 \
-DBUILD_TESTING=0 \
-DCMAKE_CROSSCOMPILING_EMULATOR=node \
-B $(@D) \
$(<D)
$(CODEC_DIR)/CMakeLists.txt:
$(RM) -r $(@D)
git init $(@D)
git -C $(@D) fetch $(CODEC_URL) $(CODEC_VERSION) --depth 1
git -C $(@D) checkout FETCH_HEAD
git -C $(@D) submodule update --init --depth 1 --recursive --jobs `nproc`
$(CODEC_DIR):
mkdir -p $@
git clone $(CODEC_URL) --recursive -j`nproc` --depth 1 --branch $(CODEC_VERSION) $@
clean:
$(RM) $(OUT_JS) $(OUT_WASM) $(OUT_WORKER)
$(RM) $(OUT_JS) $(OUT_WASM)
$(MAKE) -C $(CODEC_BUILD_DIR) clean
$(MAKE) -C $(CODEC_MT_BUILD_DIR) clean
$(MAKE) -C $(CODEC_MT_SIMD_BUILD_DIR) clean

View File

@@ -14,33 +14,12 @@ thread_local const val ImageData = val::global("ImageData");
// R, G, B, A
#define COMPONENTS_PER_PIXEL 4
#ifndef JXL_DEBUG_ON_ALL_ERROR
#define JXL_DEBUG_ON_ALL_ERROR 0
#endif
#if JXL_DEBUG_ON_ALL_ERROR
#define EXPECT_TRUE(a) \
if (!(a)) { \
fprintf(stderr, "Assertion failure (%d): %s\n", __LINE__, #a); \
return val::null(); \
}
#define EXPECT_EQ(a, b) \
{ \
int a_ = a; \
int b_ = b; \
if (a_ != b_) { \
fprintf(stderr, "Assertion failure (%d): %s (%d) != %s (%d)\n", __LINE__, #a, a_, #b, b_); \
return val::null(); \
} \
}
#else
#define EXPECT_TRUE(a) \
if (!(a)) { \
return val::null(); \
}
#define EXPECT_EQ(a, b) EXPECT_TRUE((a) == (b));
#endif
val decode(std::string data) {
std::unique_ptr<JxlDecoder,
@@ -52,14 +31,13 @@ val decode(std::string data) {
auto next_in = (const uint8_t*)data.c_str();
auto avail_in = data.size();
JxlDecoderSetInput(dec.get(), next_in, avail_in);
EXPECT_EQ(JXL_DEC_BASIC_INFO, JxlDecoderProcessInput(dec.get()));
EXPECT_EQ(JXL_DEC_BASIC_INFO, JxlDecoderProcessInput(dec.get(), &next_in, &avail_in));
JxlBasicInfo info;
EXPECT_EQ(JXL_DEC_SUCCESS, JxlDecoderGetBasicInfo(dec.get(), &info));
size_t pixel_count = info.xsize * info.ysize;
size_t component_count = pixel_count * COMPONENTS_PER_PIXEL;
EXPECT_EQ(JXL_DEC_COLOR_ENCODING, JxlDecoderProcessInput(dec.get()));
EXPECT_EQ(JXL_DEC_COLOR_ENCODING, JxlDecoderProcessInput(dec.get(), &next_in, &avail_in));
static const JxlPixelFormat format = {COMPONENTS_PER_PIXEL, JXL_TYPE_FLOAT, JXL_LITTLE_ENDIAN, 0};
size_t icc_size;
EXPECT_EQ(JXL_DEC_SUCCESS, JxlDecoderGetICCProfileSize(dec.get(), &format,
@@ -69,15 +47,10 @@ val decode(std::string data) {
JxlDecoderGetColorAsICCProfile(dec.get(), &format, JXL_COLOR_PROFILE_TARGET_DATA,
icc_profile.data(), icc_profile.size()));
EXPECT_EQ(JXL_DEC_NEED_IMAGE_OUT_BUFFER, JxlDecoderProcessInput(dec.get()));
size_t buffer_size;
EXPECT_EQ(JXL_DEC_SUCCESS, JxlDecoderImageOutBufferSize(dec.get(), &format, &buffer_size));
EXPECT_EQ(buffer_size, component_count * sizeof(float));
auto float_pixels = std::make_unique<float[]>(component_count);
EXPECT_EQ(JXL_DEC_SUCCESS, JxlDecoderSetImageOutBuffer(dec.get(), &format, float_pixels.get(),
component_count * sizeof(float)));
EXPECT_EQ(JXL_DEC_FULL_IMAGE, JxlDecoderProcessInput(dec.get()));
EXPECT_EQ(JXL_DEC_FULL_IMAGE, JxlDecoderProcessInput(dec.get(), &next_in, &avail_in));
auto byte_pixels = std::make_unique<uint8_t[]>(component_count);
// Convert to sRGB.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1,56 +0,0 @@
var Module = (function() {
var _scriptDir = import.meta.url;
return (
function(Module) {
Module = Module || {};
var e;e||(e=typeof Module !== 'undefined' ? Module : {});var aa,r;e.ready=new Promise(function(a,b){aa=a;r=b});var t={},u;for(u in e)e.hasOwnProperty(u)&&(t[u]=e[u]);var v="./this.program",ba,w,y,ca;ba=function(a){y||(y=require("fs"));ca||(ca=require("path"));a=ca.normalize(a);return y.readFileSync(a,null)};w=function(a){a=ba(a);a.buffer||(a=new Uint8Array(a));a.buffer||z("Assertion failed: undefined");return a};1<process.argv.length&&(v=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);
process.on("uncaughtException",function(a){throw a;});process.on("unhandledRejection",z);e.inspect=function(){return"[Emscripten Module object]"};var da=e.print||console.log.bind(console),A=e.printErr||console.warn.bind(console);for(u in t)t.hasOwnProperty(u)&&(e[u]=t[u]);t=null;e.thisProgram&&(v=e.thisProgram);var C;e.wasmBinary&&(C=e.wasmBinary);var noExitRuntime=e.noExitRuntime||!0;"object"!==typeof WebAssembly&&z("no native wasm support detected");var ea,fa=!1,ha=new TextDecoder("utf8");
function ia(a,b,c){var d=D;if(0<c){c=b+c-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}if(127>=g){if(b>=c)break;d[b++]=g}else{if(2047>=g){if(b+1>=c)break;d[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;d[b++]=224|g>>12}else{if(b+3>=c)break;d[b++]=240|g>>18;d[b++]=128|g>>12&63}d[b++]=128|g>>6&63}d[b++]=128|g&63}}d[b]=0}}var ja=new TextDecoder("utf-16le");
function ka(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&E[c];)++c;return ja.decode(D.subarray(a,c<<1))}function la(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f<c;++f)G[b>>1]=a.charCodeAt(f),b+=2;G[b>>1]=0;return b-d}function ma(a){return 2*a.length}function na(a,b){for(var c=0,d="";!(c>=b/4);){var f=H[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d}
function oa(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}H[b>>2]=g;b+=4;if(b+4>c)break}H[b>>2]=0;return b-d}function pa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var qa,I,D,G,E,H,K,ra,sa;
function ta(){var a=ea.buffer;qa=a;e.HEAP8=I=new Int8Array(a);e.HEAP16=G=new Int16Array(a);e.HEAP32=H=new Int32Array(a);e.HEAPU8=D=new Uint8Array(a);e.HEAPU16=E=new Uint16Array(a);e.HEAPU32=K=new Uint32Array(a);e.HEAPF32=ra=new Float32Array(a);e.HEAPF64=sa=new Float64Array(a)}var L,ua=[],va=[],wa=[];function xa(){var a=e.preRun.shift();ua.unshift(a)}var M=0,ya=null,N=null;e.preloadedImages={};e.preloadedAudios={};
function z(a){if(e.onAbort)e.onAbort(a);A(a);fa=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");r(a);throw a;}var O=(new URL("jxl_node_dec.wasm",import.meta.url)).toString();function za(){return Promise.resolve().then(function(){a:{try{if(O==O&&C){var a=new Uint8Array(C);break a}if(w){a=w(O);break a}throw"both async and sync fetching of the wasm failed";}catch(b){z(b)}a=void 0}return a})}
function Aa(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(e);else{var c=b.N;"number"===typeof c?void 0===b.J?L.get(c)():L.get(c)(b.J):c(void 0===b.J?null:b.J)}}}function Ba(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var Ca=void 0;function P(a){for(var b="";D[a];)b+=Ca[D[a++]];return b}var Q={},R={},S={};
function Da(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Ea(a,b){a=Da(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}
function Fa(a){var b=Error,c=Ea(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Ga=void 0;function T(a){throw new Ga(a);}var Ha=void 0;
function Ia(a,b){function c(h){h=b(h);if(h.length!==d.length)throw new Ha("Mismatched type converter count");for(var k=0;k<d.length;++k)U(d[k],h[k])}var d=[];d.forEach(function(h){S[h]=a});var f=Array(a.length),g=[],l=0;a.forEach(function(h,k){R.hasOwnProperty(h)?f[k]=R[h]:(g.push(h),Q.hasOwnProperty(h)||(Q[h]=[]),Q[h].push(function(){f[k]=R[h];++l;l===g.length&&c(f)}))});0===g.length&&c(f)}
function U(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||T('type "'+d+'" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.M)return;T("Cannot register type '"+d+"' twice")}R[a]=b;delete S[a];Q.hasOwnProperty(a)&&(b=Q[a],delete Q[a],b.forEach(function(f){f()}))}var Ja=[],V=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Ka(a){4<a&&0===--V[a].K&&(V[a]=void 0,Ja.push(a))}function W(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ja.length?Ja.pop():V.length;V[b]={K:1,value:a};return b}}function La(a){return this.fromWireType(K[a>>2])}function Oa(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Pa(a,b){switch(b){case 2:return function(c){return this.fromWireType(ra[c>>2])};case 3:return function(c){return this.fromWireType(sa[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Qa(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ea(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Ra(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Sa(a,b){var c=e;if(void 0===c[a].H){var d=c[a];c[a]=function(){c[a].H.hasOwnProperty(arguments.length)||T("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].H+")!");return c[a].H[arguments.length].apply(this,arguments)};c[a].H=[];c[a].H[d.L]=d}}
function Ta(a,b,c){e.hasOwnProperty(a)?((void 0===c||void 0!==e[a].H&&void 0!==e[a].H[c])&&T("Cannot register public name '"+a+"' twice"),Sa(a,a),e.hasOwnProperty(c)&&T("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),e[a].H[c]=b):(e[a]=b,void 0!==c&&(e[a].P=c))}function Ua(a,b){for(var c=[],d=0;d<a;d++)c.push(H[(b>>2)+d]);return c}
function Va(a,b){var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];a.includes("j")?(d=e["dynCall_"+a],d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)):d=L.get(b).apply(null,c);return d}}function Wa(a,b){a=P(a);var c=a.includes("j")?Va(a,b):L.get(b);"function"!==typeof c&&T("unknown function pointer with signature "+a+": "+b);return c}var Xa=void 0;function Ya(a){a=Za(a);var b=P(a);X(a);return b}
function $a(a,b){function c(g){f[g]||R[g]||(S[g]?S[g].forEach(c):(d.push(g),f[g]=!0))}var d=[],f={};b.forEach(c);throw new Xa(a+": "+d.map(Ya).join([", "]));}function ab(a,b,c){switch(b){case 0:return c?function(d){return I[d]}:function(d){return D[d]};case 1:return c?function(d){return G[d>>1]}:function(d){return E[d>>1]};case 2:return c?function(d){return H[d>>2]}:function(d){return K[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var bb={};
function cb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function db(a,b){var c=R[a];void 0===c&&T(b+" has unknown type "+Ya(a));return c}var eb={},fb={};function gb(){if(!hb){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:v||"./this.program"},b;for(b in fb)a[b]=fb[b];var c=[];for(b in a)c.push(b+"="+a[b]);hb=c}return hb}
for(var hb,ib=[null,[],[]],jb=Array(256),Y=0;256>Y;++Y)jb[Y]=String.fromCharCode(Y);Ca=jb;Ga=e.BindingError=Fa("BindingError");Ha=e.InternalError=Fa("InternalError");e.count_emval_handles=function(){for(var a=0,b=5;b<V.length;++b)void 0!==V[b]&&++a;return a};e.get_first_emval=function(){for(var a=5;a<V.length;++a)if(void 0!==V[a])return V[a];return null};Xa=e.UnboundTypeError=Fa("UnboundTypeError");
var lb={l:function(){},q:function(){},m:function(a,b,c,d,f){var g=Ba(c);b=P(b);U(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,h){return h?d:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var h=I;else if(2===c)h=G;else if(4===c)h=H;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(h[l>>g])},I:null})},x:function(a,b){b=P(b);U(a,{name:b,fromWireType:function(c){var d=V[c].value;Ka(c);return d},toWireType:function(c,d){return W(d)},
argPackAdvance:8,readValueFromPointer:La,I:null})},j:function(a,b,c){c=Ba(c);b=P(b);U(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Oa(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Pa(b,c),I:null})},o:function(a,b,c,d,f,g){var l=Ua(b,c);a=P(a);f=Wa(d,f);Ta(a,function(){$a("Cannot call "+a+" due to unbound types",l)},b-1);Ia(l,function(h){var k=[h[0],null].concat(h.slice(1)),
m=h=a,n=f,p=k.length;2>p&&T("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==k[1]&&!1,B=!1,q=1;q<k.length;++q)if(null!==k[q]&&void 0===k[q].I){B=!0;break}var Ma="void"!==k[0].name,F="",J="";for(q=0;q<p-2;++q)F+=(0!==q?", ":"")+"arg"+q,J+=(0!==q?", ":"")+"arg"+q+"Wired";m="return function "+Da(m)+"("+F+") {\nif (arguments.length !== "+(p-2)+") {\nthrowBindingError('function "+m+" called with ' + arguments.length + ' arguments, expected "+(p-2)+" args!');\n}\n";
B&&(m+="var destructors = [];\n");var Na=B?"destructors":"null";F="throwBindingError invoker fn runDestructors retType classParam".split(" ");n=[T,n,g,Ra,k[0],k[1]];x&&(m+="var thisWired = classParam.toWireType("+Na+", this);\n");for(q=0;q<p-2;++q)m+="var arg"+q+"Wired = argType"+q+".toWireType("+Na+", arg"+q+"); // "+k[q+2].name+"\n",F.push("argType"+q),n.push(k[q+2]);x&&(J="thisWired"+(0<J.length?", ":"")+J);m+=(Ma?"var rv = ":"")+"invoker(fn"+(0<J.length?", ":"")+J+");\n";if(B)m+="runDestructors(destructors);\n";
else for(q=x?1:2;q<k.length;++q)p=1===q?"thisWired":"arg"+(q-2)+"Wired",null!==k[q].I&&(m+=p+"_dtor("+p+"); // "+k[q].name+"\n",F.push(p+"_dtor"),n.push(k[q].I));Ma&&(m+="var ret = retType.fromWireType(rv);\nreturn ret;\n");F.push(m+"}\n");k=Qa(F).apply(null,n);q=b-1;if(!e.hasOwnProperty(h))throw new Ha("Replacing nonexistant public symbol");void 0!==e[h].H&&void 0!==q?e[h].H[q]=k:(e[h]=k,e[h].L=q);return[]})},c:function(a,b,c,d,f){function g(m){return m}b=P(b);-1===f&&(f=4294967295);var l=Ba(c);
if(0===d){var h=32-8*c;g=function(m){return m<<h>>>h}}var k=b.includes("unsigned");U(a,{name:b,fromWireType:g,toWireType:function(m,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+Oa(n)+'" to '+this.name);if(n<d||n>f)throw new TypeError('Passing a number "'+Oa(n)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return k?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:ab(b,l,0!==d),I:null})},b:function(a,
b,c){function d(g){g>>=2;var l=K;return new f(qa,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);U(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{M:!0})},g:function(a,b){b=P(b);var c="std::string"===b;U(a,{name:b,fromWireType:function(d){var f=K[d>>2];if(c)for(var g=d+4,l=0;l<=f;++l){var h=d+4+l;if(l==f||0==D[h]){if(g){for(var k=g+(h-g),m=g;!(m>=k)&&D[m];)++m;g=ha.decode(D.subarray(g,m))}else g="";if(void 0===
n)var n=g;else n+=String.fromCharCode(0),n+=g;g=h+1}}else{n=Array(f);for(l=0;l<f;++l)n[l]=String.fromCharCode(D[d+4+l]);n=n.join("")}X(d);return n},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var g="string"===typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||T("Cannot pass non-string to std::string");var l=(c&&g?function(){for(var m=0,n=0;n<f.length;++n){var p=f.charCodeAt(n);55296<=p&&57343>=p&&(p=65536+((p&1023)<<10)|f.charCodeAt(++n)&
1023);127>=p?++m:m=2047>=p?m+2:65535>=p?m+3:m+4}return m}:function(){return f.length})(),h=kb(4+l+1);K[h>>2]=l;if(c&&g)ia(f,h+4,l+1);else if(g)for(g=0;g<l;++g){var k=f.charCodeAt(g);255<k&&(X(h),T("String has UTF-16 code units that do not fit in 8 bits"));D[h+4+g]=k}else for(g=0;g<l;++g)D[h+4+g]=f[g];null!==d&&d.push(X,h);return h},argPackAdvance:8,readValueFromPointer:La,I:function(d){X(d)}})},f:function(a,b,c){c=P(c);if(2===b){var d=ka;var f=la;var g=ma;var l=function(){return E};var h=1}else 4===
b&&(d=na,f=oa,g=pa,l=function(){return K},h=2);U(a,{name:c,fromWireType:function(k){for(var m=K[k>>2],n=l(),p,x=k+4,B=0;B<=m;++B){var q=k+4+B*b;if(B==m||0==n[q>>h])x=d(x,q-x),void 0===p?p=x:(p+=String.fromCharCode(0),p+=x),x=q+b}X(k);return p},toWireType:function(k,m){"string"!==typeof m&&T("Cannot pass non-string to C++ string type "+c);var n=g(m),p=kb(4+n+b);K[p>>2]=n>>h;f(m,p+4,n+b);null!==k&&k.push(X,p);return p},argPackAdvance:8,readValueFromPointer:La,I:function(k){X(k)}})},n:function(a,b){b=
P(b);U(a,{O:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},d:Ka,k:function(a){if(0===a)return W(cb());var b=bb[a];a=void 0===b?P(a):b;return W(cb()[a])},h:function(a){4<a&&(V[a].K+=1)},i:function(a,b,c,d){a||T("Cannot use deleted val. handle = "+a);a=V[a].value;var f=eb[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var l="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)l+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+
g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(db,e,W);eb[b]=f}return f(a,c,d)},a:function(){z()},s:function(a,b,c){D.copyWithin(a,b,b+c)},e:function(a){var b=D.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,
d);0<d%65536&&(d+=65536-d%65536);a:{try{ea.grow(Math.min(2147483648,d)-qa.byteLength+65535>>>16);ta();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},t:function(a,b){var c=0;gb().forEach(function(d,f){var g=b+c;f=H[a+4*f>>2]=g;for(g=0;g<d.length;++g)I[f++>>0]=d.charCodeAt(g);I[f>>0]=0;c+=d.length+1});return 0},u:function(a,b){var c=gb();H[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});H[b>>2]=d;return 0},v:function(){return 0},p:function(){},w:function(a,b,c,d){for(var f=
0,g=0;g<c;g++){for(var l=H[b+8*g>>2],h=H[b+(8*g+4)>>2],k=0;k<h;k++){var m=D[l+k],n=ib[a];if(0===m||10===m){m=1===a?da:A;var p;for(p=0;n[p]&&!(NaN<=p);)++p;p=ha.decode(n.subarray?n.subarray(0,p):new Uint8Array(n.slice(0,p)));m(p);n.length=0}else n.push(m)}f+=h}H[d>>2]=f;return 0},r:function(){}};
(function(){function a(f){e.asm=f.exports;ea=e.asm.y;ta();L=e.asm.E;va.unshift(e.asm.z);M--;e.monitorRunDependencies&&e.monitorRunDependencies(M);0==M&&(null!==ya&&(clearInterval(ya),ya=null),N&&(f=N,N=null,f()))}function b(f){a(f.instance)}function c(f){return za().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){A("failed to asynchronously prepare wasm: "+g);z(g)})}var d={a:lb};M++;e.monitorRunDependencies&&e.monitorRunDependencies(M);if(e.instantiateWasm)try{return e.instantiateWasm(d,
a)}catch(f){return A("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return C||"function"!==typeof WebAssembly.instantiateStreaming||O.startsWith("data:application/octet-stream;base64,")||"function"!==typeof fetch?c(b):fetch(O,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){A("wasm streaming compile failed: "+g);A("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(r);return{}})();
e.___wasm_call_ctors=function(){return(e.___wasm_call_ctors=e.asm.z).apply(null,arguments)};var kb=e._malloc=function(){return(kb=e._malloc=e.asm.A).apply(null,arguments)},X=e._free=function(){return(X=e._free=e.asm.B).apply(null,arguments)},Za=e.___getTypeName=function(){return(Za=e.___getTypeName=e.asm.C).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.D).apply(null,arguments)};
e.dynCall_iiji=function(){return(e.dynCall_iiji=e.asm.F).apply(null,arguments)};e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.G).apply(null,arguments)};var Z;N=function mb(){Z||nb();Z||(N=mb)};
function nb(){function a(){if(!Z&&(Z=!0,e.calledRun=!0,!fa)){Aa(va);aa(e);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();wa.unshift(b)}Aa(wa)}}if(!(0<M)){if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)xa();Aa(ua);0<M||(e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1);a()},1)):a())}}e.run=nb;
if(e.preInit)for("function"==typeof e.preInit&&(e.preInit=[e.preInit]);0<e.preInit.length;)e.preInit.pop()();nb();
return Module.ready
}
);
})();
export default Module;

Binary file not shown.

View File

@@ -1,9 +1,8 @@
#include <emscripten/bind.h>
#include <emscripten/val.h>
#include "lib/jxl/base/thread_pool_internal.h"
#include "lib/jxl/enc_external_image.h"
#include "lib/jxl/enc_file.h"
#include "lib/jxl/external_image.h"
using namespace emscripten;
@@ -18,7 +17,6 @@ struct JXLOptions {
int epf;
int nearLossless;
bool lossyPalette;
size_t decodingSpeedTier;
};
val encode(std::string image, int width, int height, JXLOptions options) {
@@ -27,16 +25,10 @@ val encode(std::string image, int width, int height, JXLOptions options) {
jxl::CodecInOut io;
jxl::PaddedBytes bytes;
jxl::ImageBundle* main = &io.Main();
jxl::ThreadPoolInternal* pool_ptr = nullptr;
#ifdef __EMSCRIPTEN_PTHREADS__
jxl::ThreadPoolInternal pool;
pool_ptr = &pool;
#endif
cparams.epf = options.epf;
cparams.speed_tier = static_cast<jxl::SpeedTier>(options.speed);
cparams.near_lossless = options.nearLossless;
cparams.decoding_speed_tier = options.decodingSpeedTier;
if (options.lossyPalette) {
cparams.lossy_palette = true;
@@ -44,6 +36,10 @@ val encode(std::string image, int width, int height, JXLOptions options) {
cparams.options.predictor = jxl::Predictor::Zero;
}
// Reduce memory usage of tree learning for lossless data.
// TODO(veluca93): this is a mitigation for excessive memory usage in the JXL encoder.
cparams.options.nb_repeats = 0.1;
float quality = options.quality;
// Quality settings roughly match libjpeg qualities.
@@ -63,10 +59,8 @@ val encode(std::string image, int width, int height, JXLOptions options) {
if (options.progressive) {
cparams.qprogressive_mode = true;
cparams.responsive = 1;
if (!cparams.modular_mode) {
cparams.progressive_dc = 1;
}
cparams.responsive = 1;
}
if (cparams.modular_mode) {
@@ -90,18 +84,18 @@ val encode(std::string image, int width, int height, JXLOptions options) {
uint8_t* inBuffer = (uint8_t*)image.c_str();
auto result = jxl::ConvertFromExternal(
auto result = jxl::ConvertImage(
jxl::Span<const uint8_t>(reinterpret_cast<const uint8_t*>(image.data()), image.size()), width,
height, jxl::ColorEncoding::SRGB(/*is_gray=*/false), /*has_alpha=*/true,
/*alpha_is_premultiplied=*/false, /*bits_per_sample=*/8, /*endiannes=*/JXL_LITTLE_ENDIAN,
/*flipped_y=*/false, pool_ptr, main);
/*alpha_is_premultiplied=*/false, /*bits_per_alpha=*/8, /*bits_per_sample=*/8,
/*big_endian=*/false, /*flipped_y=*/false, /*pool=*/nullptr, main);
if (!result) {
return val::null();
}
auto js_result = val::null();
if (EncodeFile(cparams, &io, &passes_enc_state, &bytes, /*aux=*/nullptr, pool_ptr)) {
if (EncodeFile(cparams, &io, &passes_enc_state, &bytes)) {
js_result = Uint8Array.new_(typed_memory_view(bytes.size(), bytes.data()));
}
@@ -115,7 +109,6 @@ EMSCRIPTEN_BINDINGS(my_module) {
.field("progressive", &JXLOptions::progressive)
.field("nearLossless", &JXLOptions::nearLossless)
.field("lossyPalette", &JXLOptions::lossyPalette)
.field("decodingSpeedTier", &JXLOptions::decodingSpeedTier)
.field("epf", &JXLOptions::epf);
function("encode", &encode);

View File

@@ -5,7 +5,6 @@ export interface EncodeOptions {
epf: number;
nearLossless: number;
lossyPalette: boolean;
decodingSpeedTier: number;
}
export interface JXLModule extends EmscriptenWasm.Module {

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1 +0,0 @@
export { default } from './jxl_enc';

View File

@@ -1,105 +0,0 @@
var Module = (function() {
var _scriptDir = import.meta.url;
return (
function(Module) {
Module = Module || {};
function e(){m.buffer!=n&&u(m.buffer);return aa}function v(){m.buffer!=n&&u(m.buffer);return ba}function x(){m.buffer!=n&&u(m.buffer);return ca}function ea(){m.buffer!=n&&u(m.buffer);return fa}function A(){m.buffer!=n&&u(m.buffer);return ha}function B(){m.buffer!=n&&u(m.buffer);return ia}function ja(){m.buffer!=n&&u(m.buffer);return ka}var D;D||(D=typeof Module !== 'undefined' ? Module : {});var la,ma;D.ready=new Promise(function(a,b){la=a;ma=b});var E={},F;
for(F in D)D.hasOwnProperty(F)&&(E[F]=D[F]);var na="./this.program";function oa(a,b){throw b;}var G=D.ENVIRONMENT_IS_PTHREAD||!1,H="",pa;H=self.location.href;_scriptDir&&(H=_scriptDir);0!==H.indexOf("blob:")?H=H.substr(0,H.lastIndexOf("/")+1):H="";pa=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)};var qa=D.print||console.log.bind(console),J=D.printErr||console.warn.bind(console);
for(F in E)E.hasOwnProperty(F)&&(D[F]=E[F]);E=null;D.thisProgram&&(na=D.thisProgram);D.quit&&(oa=D.quit);var ra;D.wasmBinary&&(ra=D.wasmBinary);var noExitRuntime=D.noExitRuntime||!0;"object"!==typeof WebAssembly&&K("no native wasm support detected");var m,sa,ta=!1;
function ua(a,b,c){c=b+c;for(var d="";!(b>=c);){var f=a[b++];if(!f)break;if(f&128){var g=a[b++]&63;if(192==(f&224))d+=String.fromCharCode((f&31)<<6|g);else{var l=a[b++]&63;f=224==(f&240)?(f&15)<<12|g<<6|l:(f&7)<<18|g<<12|l<<6|a[b++]&63;65536>f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d}function L(a,b){return a?ua(v(),a,b):""}
function va(a,b,c,d){if(0<d){d=c+d-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}if(127>=g){if(c>=d)break;b[c++]=g}else{if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6}else{if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63}b[c++]=128|g>>6&63}b[c++]=128|g&63}}b[c]=0}}function wa(a,b,c){va(a,v(),b,c)}
function xa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}function ya(a,b){for(var c="",d=0;!(d>=b/2);++d){var f=x()[a+2*d>>1];if(0==f)break;c+=String.fromCharCode(f)}return c}function za(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f<c;++f){var g=a.charCodeAt(f);x()[b>>1]=g;b+=2}x()[b>>1]=0;return b-d}
function Aa(a){return 2*a.length}function Ba(a,b){for(var c=0,d="";!(c>=b/4);){var f=A()[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d}function Ca(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}A()[b>>2]=g;b+=4;if(b+4>c)break}A()[b>>2]=0;return b-d}
function Da(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}function Ea(a,b){e().set(a,b)}var n,aa,ba,ca,fa,ha,ia,Fa,ka;G&&(n=D.buffer);function u(a){n=a;D.HEAP8=aa=new Int8Array(a);D.HEAP16=ca=new Int16Array(a);D.HEAP32=ha=new Int32Array(a);D.HEAPU8=ba=new Uint8Array(a);D.HEAPU16=fa=new Uint16Array(a);D.HEAPU32=ia=new Uint32Array(a);D.HEAPF32=Fa=new Float32Array(a);D.HEAPF64=ka=new Float64Array(a)}var Ga=D.INITIAL_MEMORY||16777216;
if(G)m=D.wasmMemory,n=D.buffer;else if(D.wasmMemory)m=D.wasmMemory;else if(m=new WebAssembly.Memory({initial:Ga/65536,maximum:32768,shared:!0}),!(m.buffer instanceof SharedArrayBuffer))throw J("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),Error("bad memory");m&&(n=m.buffer);Ga=n.byteLength;u(n);var M,Ha=[],Ia=[],Ja=[];
function Ka(){var a=D.preRun.shift();Ha.unshift(a)}var N=0,La=null,Ma=null;D.preloadedImages={};D.preloadedAudios={};function K(a){if(D.onAbort)D.onAbort(a);G&&console.error("Pthread aborting at "+Error().stack);J(a);ta=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ma(a);throw a;}var O=(new URL("jxl_enc_mt.wasm",import.meta.url)).toString();
function Na(){try{if(O==O&&ra)return new Uint8Array(ra);if(pa)return pa(O);throw"both async and sync fetching of the wasm failed";}catch(a){K(a)}}function Oa(){return ra||"function"!==typeof fetch?Promise.resolve().then(function(){return Na()}):fetch(O,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+O+"'";return a.arrayBuffer()}).catch(function(){return Na()})}
var Qa={60580:function(){throw"Canceled!";},60598:function(a,b){setTimeout(function(){Pa(a,b)},0)}};function Ra(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(D);else{var c=b.Yb;"number"===typeof c?void 0===b.Ia?M.get(c)():M.get(c)(b.Ia):c(void 0===b.Ia?null:b.Ia)}}}
function Sa(a,b){if(0>=a||a>e().length||a&1||0>b)return-28;if(0==b)return 0;2147483647<=b&&(b=Infinity);var c=Atomics.load(A(),Ta>>2),d=0;if(c==a&&Atomics.compareExchange(A(),Ta>>2,c,0)==c&&(--b,d=1,0>=b))return 1;a=Atomics.notify(A(),a>>2,b);if(0<=a)return a+d;throw"Atomics.notify returned an unexpected value "+a;}D._emscripten_futex_wake=Sa;
function Ua(a){if(G)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!a)throw"Internal Error! Null pthread_ptr in cleanupThread!";var b=P.Ba[a];b&&(A()[a+12>>2]=0,P.Qa(b.worker))}
var P={za:[],Ea:[],Ya:[],sb:function(){for(var a=navigator.hardwareConcurrency,b=0;b<a;++b)P.Za()},tb:function(){for(var a=Q(228),b=0;57>b;++b)B()[a/4+b]=0;A()[a+12>>2]=a;b=a+152;A()[b>>2]=b;var c=Q(512);for(b=0;128>b;++b)B()[c/4+b]=0;Atomics.store(B(),a+100>>2,c);Atomics.store(B(),a+40>>2,a);Va(a,!1,1);Wa(a)},ub:function(){P.receiveObjectTransfer=P.yb;P.threadInit=P.Ob;P.threadCancel=P.Mb;P.threadExit=P.Nb;P.setExitStatus=P.Bb},Ba:{},Xa:[],zb:function(){for(;0<P.Xa.length;)P.Xa.pop()();G&&R()&&Xa()},
gb:function(a,b){Atomics.store(B(),a+56>>2,1);Atomics.store(B(),a+60>>2,0);P.zb();Atomics.store(B(),a+4>>2,b);Atomics.store(B(),a+0>>2,1);Sa(a+0,2147483647);Va(0,0,0)},Bb:function(){},Nb:function(a){var b=R();b&&(P.gb(b,a),G&&postMessage({cmd:"exit"}))},Mb:function(){P.gb(R(),-1);postMessage({cmd:"cancelDone"})},Lb:function(){for(var a in P.Ba){var b=P.Ba[a];b&&b.worker&&P.Qa(b.worker)}P.Ba={};for(a=0;a<P.za.length;++a){var c=P.za[a];c.terminate()}P.za=[];for(a=0;a<P.Ea.length;++a)c=P.Ea[a],b=c.ya,
P.Va(b),c.terminate();P.Ea=[]},Va:function(a){if(a){if(a.Ca){var b=A()[a.Ca+100>>2];A()[a.Ca+100>>2]=0;S(b);S(a.Ca)}a.Ca=0;a.Ua&&a.Fa&&S(a.Fa);a.Fa=0;a.worker&&(a.worker.ya=null)}},Qa:function(a){P.Ab(function(){delete P.Ba[a.ya.Ca];P.za.push(a);P.Ea.splice(P.Ea.indexOf(a),1);P.Va(a.ya);a.ya=void 0})},Ab:function(a){A()[Ya>>2]=0;try{a()}finally{A()[Ya>>2]=1}},yb:function(){},Ob:function(){for(var a in P.Ya)P.Ya[a]()},eb:function(a,b){a.onmessage=function(c){var d=c.data,f=d.cmd;a.ya&&(P.ib=a.ya.Ca);
if(d.targetThread&&d.targetThread!=R()){var g=P.Ba[d.fc];g?g.worker.postMessage(c.data,d.transferList):console.error('Internal error! Worker sent a message "'+f+'" to target pthread '+d.targetThread+", but that thread no longer exists!")}else if("processQueuedMainThreadWork"===f)Za();else if("spawnThread"===f)$a(c.data);else if("cleanupThread"===f)Ua(d.thread);else if("killThread"===f){c=d.thread;if(G)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!c)throw"Internal Error! Null pthread_ptr in killThread!";
A()[c+12>>2]=0;c=P.Ba[c];c.worker.terminate();P.Va(c);P.Ea.splice(P.Ea.indexOf(c.worker),1);c.worker.ya=void 0}else if("cancelThread"===f){c=d.thread;if(G)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!c)throw"Internal Error! Null pthread_ptr in cancelThread!";P.Ba[c].worker.postMessage({cmd:"cancel"})}else if("loaded"===f)a.loaded=!0,b&&b(a),a.Ka&&(a.Ka(),delete a.Ka);else if("print"===f)qa("Thread "+d.threadId+": "+d.text);else if("printErr"===f)J("Thread "+
d.threadId+": "+d.text);else if("alert"===f)alert("Thread "+d.threadId+": "+d.text);else if("exit"===f)a.ya&&Atomics.load(B(),a.ya.Ca+64>>2)&&P.Qa(a);else if("exitProcess"===f)try{g=d.returnCode;if(G)throw postMessage({cmd:"exitProcess",returnCode:g}),new ab(g);if(!bb()){P.Lb();if(D.onExit)D.onExit(g);ta=!0}oa(g,new ab(g))}catch(l){if(l instanceof ab)return;throw l;}else"cancelDone"===f?P.Qa(a):"objectTransfer"!==f&&("setimmediate"===c.data.target?a.postMessage(c.data):J("worker sent an unknown command "+
f));P.ib=void 0};a.onerror=function(c){J("pthread sent an error! "+c.filename+":"+c.lineno+": "+c.message)};a.postMessage({cmd:"load",urlOrBlob:D.mainScriptUrlOrBlob,wasmMemory:m,wasmModule:sa})},Za:function(){if(D.locateFile){var a=D.locateFile?D.locateFile("jxl_enc_mt.worker.js",H):H+"jxl_enc_mt.worker.js";P.za.push(new Worker(a))}else P.za.push(new Worker(new URL("jxl_enc_mt.worker.js",import.meta.url)))},lb:function(){0==P.za.length&&(P.Za(),P.eb(P.za[0]));return P.za.pop()},Ub:function(a){for(a=
performance.now()+a;performance.now()<a;);}};D.establishStackSpace=function(a,b){cb(a,b);db(a)};D.invokeEntryPoint=function(a,b){return M.get(a)(b)};var eb=0;function bb(){return noExitRuntime||0<eb}D.keepRuntimeAlive=bb;var fb;fb=G?function(){return performance.now()-D.__performance_now_clock_drift}:function(){return performance.now()};function gb(a,b){P.Xa.push(function(){M.get(a)(b)})}
function hb(a){this.Ja=a-16;this.Gb=function(b){A()[this.Ja+8>>2]=b};this.Db=function(b){A()[this.Ja+0>>2]=b};this.Eb=function(){A()[this.Ja+4>>2]=0};this.Cb=function(){var b=0;e()[this.Ja+12>>0]=b};this.Fb=function(){var b=0;e()[this.Ja+13>>0]=b};this.qb=function(b,c){this.Gb(b);this.Db(c);this.Eb();this.Cb();this.Fb()}}var ib=0,jb={};function kb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function lb(a){return this.fromWireType(B()[a>>2])}var T={},U={},mb={};
function nb(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function ob(a,b){a=nb(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}
function pb(a){var b=Error,c=ob(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var qb=void 0;
function rb(a,b,c){function d(k){k=c(k);if(k.length!==a.length)throw new qb("Mismatched type converter count");for(var q=0;q<a.length;++q)V(a[q],k[q])}a.forEach(function(k){mb[k]=b});var f=Array(b.length),g=[],l=0;b.forEach(function(k,q){U.hasOwnProperty(k)?f[q]=U[k]:(g.push(k),T.hasOwnProperty(k)||(T[k]=[]),T[k].push(function(){f[q]=U[k];++l;l===g.length&&d(f)}))});0===g.length&&d(f)}
function sb(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var tb=void 0;function W(a){for(var b="";v()[a];)b+=tb[v()[a++]];return b}var ub=void 0;function X(a){throw new ub(a);}
function V(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||X('type "'+d+'" must have a positive integer typeid pointer');if(U.hasOwnProperty(a)){if(c.pb)return;X("Cannot register type '"+d+"' twice")}U[a]=b;delete mb[a];T.hasOwnProperty(a)&&(b=T[a],delete T[a],b.forEach(function(f){f()}))}var vb=[],Y=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function wb(a){4<a&&0===--Y[a].Wa&&(Y[a]=void 0,vb.push(a))}function xb(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=vb.length?vb.pop():Y.length;Y[b]={Wa:1,value:a};return b}}function yb(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function zb(a,b){switch(b){case 2:return function(c){var d=this.fromWireType;m.buffer!=n&&u(m.buffer);return d.call(this,Fa[c>>2])};case 3:return function(c){return this.fromWireType(ja()[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}
function Ab(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=ob(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Bb(a,b){var c=D;if(void 0===c[a].Aa){var d=c[a];c[a]=function(){c[a].Aa.hasOwnProperty(arguments.length)||X("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].Aa+")!");return c[a].Aa[arguments.length].apply(this,arguments)};c[a].Aa=[];c[a].Aa[d.hb]=d}}
function Cb(a,b,c){D.hasOwnProperty(a)?((void 0===c||void 0!==D[a].Aa&&void 0!==D[a].Aa[c])&&X("Cannot register public name '"+a+"' twice"),Bb(a,a),D.hasOwnProperty(c)&&X("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),D[a].Aa[c]=b):(D[a]=b,void 0!==c&&(D[a].cc=c))}function Db(a,b){for(var c=[],d=0;d<a;d++)c.push(A()[(b>>2)+d]);return c}
function Eb(a,b){var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];a.includes("j")?(d=D["dynCall_"+a],d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)):d=M.get(b).apply(null,c);return d}}function Fb(a,b){a=W(a);var c=a.includes("j")?Eb(a,b):M.get(b);"function"!==typeof c&&X("unknown function pointer with signature "+a+": "+b);return c}var Gb=void 0;function Hb(a){a=Ib(a);var b=W(a);S(a);return b}
function Jb(a,b){function c(g){f[g]||U[g]||(mb[g]?mb[g].forEach(c):(d.push(g),f[g]=!0))}var d=[],f={};b.forEach(c);throw new Gb(a+": "+d.map(Hb).join([", "]));}function Kb(a,b,c){switch(b){case 0:return c?function(d){return e()[d]}:function(d){return v()[d]};case 1:return c?function(d){return x()[d>>1]}:function(d){return ea()[d>>1]};case 2:return c?function(d){return A()[d>>2]}:function(d){return B()[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var Lb={};
function Mb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function Nb(a,b){var c=U[a];void 0===c&&X(b+" has unknown type "+Hb(a));return c}var Ob={},Pb=[];function Qb(a,b,c){if(0>=a||a>e().length||a&1)return-28;a=Atomics.wait(A(),a>>2,b,c);if("timed-out"===a)return-73;if("not-equal"===a)return-6;if("ok"===a)return 0;throw"Atomics.wait returned an unexpected value "+a;}
function Z(a,b){for(var c=arguments.length-2,d=Rb(),f=Sb(8*c),g=f>>3,l=0;l<c;l++){var k=arguments[2+l];ja()[g+l]=k}c=Tb(a,c,f,b);db(d);return c}var Ub=[],Vb=[0,"undefined"!==typeof document?document:0,"undefined"!==typeof window?window:0];function Wb(a){a=2<a?L(a):a;return Vb[a]||("undefined"!==typeof document?document.querySelector(a):void 0)}
function Xb(a,b,c){var d=Wb(a);if(!d)return-4;d.Oa&&(A()[d.Oa>>2]=b,A()[d.Oa+4>>2]=c);if(d.fb||!d.Wb)d.fb&&(d=d.fb),a=!1,d.Na&&d.Na.Ma&&(a=d.Na.Ma.getParameter(2978),a=0===a[0]&&0===a[1]&&a[2]===d.width&&a[3]===d.height),d.width=b,d.height=c,a&&d.Na.Ma.viewport(0,0,b,c);else{if(d.Oa){d=A()[d.Oa+8>>2];a=a?L(a):"";var f=Rb(),g=Sb(12),l=0;if(a){l=xa(a)+1;var k=Q(l);wa(a,k,l);l=k}A()[g>>2]=l;A()[g+4>>2]=b;A()[g+8>>2]=c;Yb(0,d,657457152,0,l,g);db(f);return 1}return-4}return 0}
function Zb(a,b,c){return G?Z(2,1,a,b,c):Xb(a,b,c)}function $b(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,d){b.vertexAttribDivisorANGLE(c,d)},a.drawArraysInstanced=function(c,d,f,g){b.drawArraysInstancedANGLE(c,d,f,g)},a.drawElementsInstanced=function(c,d,f,g,l){b.drawElementsInstancedANGLE(c,d,f,g,l)})}
function ac(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c)},a.bindVertexArray=function(c){b.bindVertexArrayOES(c)},a.isVertexArray=function(c){return b.isVertexArrayOES(c)})}function bc(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,d){b.drawBuffersWEBGL(c,d)})}
function cc(a,b){a.cb||(a.cb=a.getContext,a.getContext=function(d,f){f=a.cb(d,f);return"webgl"==d==f instanceof WebGLRenderingContext?f:null});var c=a.getContext("webgl",b);return c?dc(c,b):0}function dc(a,b){var c=Q(8);A()[c+4>>2]=R();var d={Zb:c,attributes:b,version:b.vb,Ma:a};a.canvas&&(a.canvas.Na=d);("undefined"===typeof b.ab||b.ab)&&ec(d);return c}
function ec(a){a||(a=fc);if(!a.rb){a.rb=!0;var b=a.Ma;$b(b);ac(b);bc(b);b.Xb=b.getExtension("EXT_disjoint_timer_query");b.bc=b.getExtension("WEBGL_multi_draw");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c)})}}var fc,gc=["default","low-power","high-performance"],hc={};
function ic(){if(!jc){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:na||"./this.program"},b;for(b in hc)a[b]=hc[b];var c=[];for(b in a)c.push(b+"="+a[b]);jc=c}return jc}var jc,kc=[null,[],[]];
function lc(a,b){if(G)return Z(3,1,a,b);var c=0;ic().forEach(function(d,f){var g=b+c;f=A()[a+4*f>>2]=g;for(g=0;g<d.length;++g)e()[f++>>0]=d.charCodeAt(g);e()[f>>0]=0;c+=d.length+1});return 0}function mc(a,b){if(G)return Z(4,1,a,b);var c=ic();A()[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});A()[b>>2]=d;return 0}function nc(a){return G?Z(5,1,a):0}function oc(a,b,c,d,f){if(G)return Z(6,1,a,b,c,d,f)}
function pc(a,b,c,d){if(G)return Z(7,1,a,b,c,d);for(var f=0,g=0;g<c;g++){for(var l=A()[b+8*g>>2],k=A()[b+(8*g+4)>>2],q=0;q<k;q++){var r=v()[l+q],t=kc[a];0===r||10===r?((1===a?qa:J)(ua(t,0)),t.length=0):t.push(r)}f+=k}A()[d>>2]=f;return 0}
function $a(a){if(G)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var b=P.lb();if(!b)return 6;if(void 0!==b.ya)throw"Internal error!";if(!a.Pa)throw"Internal error, no pthread ptr!";P.Ea.push(b);for(var c=Q(512),d=0;128>d;++d)A()[c+4*d>>2]=0;var f=a.Fa+a.Ga;d=P.Ba[a.Pa]={worker:b,Fa:a.Fa,Ga:a.Ga,Ua:a.Ua,Ca:a.Pa};var g=d.Ca>>2;Atomics.store(B(),g+16,a.$a);Atomics.store(B(),g+25,c);Atomics.store(B(),g+10,d.Ca);Atomics.store(B(),g+20,a.Ga);Atomics.store(B(),
g+19,f);Atomics.store(B(),g+26,a.Ga);Atomics.store(B(),g+28,f);Atomics.store(B(),g+29,a.$a);c=qc()+40;Atomics.store(B(),g+43,c);b.ya=d;var l={cmd:"run",start_routine:a.Kb,arg:a.Ia,threadInfoStruct:a.Pa,stackBase:a.Fa,stackSize:a.Ga};b.Ka=function(){l.time=performance.now();b.postMessage(l,a.Tb)};b.loaded&&(b.Ka(),delete b.Ka);return 0}
function rc(a,b){if(!a)return J("pthread_join attempted on a null thread pointer!"),71;if(G&&R()==a)return J("PThread "+a+" is attempting to join to itself!"),16;if(!G&&sc()==a)return J("Main thread "+a+" is attempting to join to itself!"),16;if(A()[a+12>>2]!==a)return J("pthread_join attempted on thread "+a+", which does not point to a valid thread, or does not exist anymore!"),71;if(Atomics.load(B(),a+64>>2))return J("Attempted to join thread "+a+", which was already detached!"),28;for(;;){var c=
Atomics.load(B(),a+0>>2);if(1==c)return c=Atomics.load(B(),a+4>>2),b&&(A()[b>>2]=c),Atomics.store(B(),a+64>>2,1),G?postMessage({cmd:"cleanupThread",thread:a}):Ua(a),0;if(G){var d=R();if(d&&!Atomics.load(B(),d+56>>2)&&2==Atomics.load(B(),d+0>>2))throw"Canceled!";}G||Za();Qb(a+0,c,G?100:1)}}function tc(a){return 0===a%4&&(0!==a%100||0===a%400)}function uc(a,b){for(var c=0,d=0;d<=b;c+=a[d++]);return c}var vc=[31,29,31,30,31,30,31,31,30,31,30,31],wc=[31,28,31,30,31,30,31,31,30,31,30,31];
function xc(a,b){for(a=new Date(a.getTime());0<b;){var c=a.getMonth(),d=(tc(a.getFullYear())?vc:wc)[c];if(b>d-a.getDate())b-=d-a.getDate()+1,a.setDate(1),11>c?a.setMonth(c+1):(a.setMonth(0),a.setFullYear(a.getFullYear()+1));else{a.setDate(a.getDate()+b);break}}return a}
function yc(a,b,c,d){function f(h,p,y){for(h="number"===typeof h?h.toString():h||"";h.length<p;)h=y[0]+h;return h}function g(h,p){return f(h,p,"0")}function l(h,p){function y(I){return 0>I?-1:0<I?1:0}var z;0===(z=y(h.getFullYear()-p.getFullYear()))&&0===(z=y(h.getMonth()-p.getMonth()))&&(z=y(h.getDate()-p.getDate()));return z}function k(h){switch(h.getDay()){case 0:return new Date(h.getFullYear()-1,11,29);case 1:return h;case 2:return new Date(h.getFullYear(),0,3);case 3:return new Date(h.getFullYear(),
0,2);case 4:return new Date(h.getFullYear(),0,1);case 5:return new Date(h.getFullYear()-1,11,31);case 6:return new Date(h.getFullYear()-1,11,30)}}function q(h){h=xc(new Date(h.xa+1900,0,1),h.Ta);var p=new Date(h.getFullYear()+1,0,4),y=k(new Date(h.getFullYear(),0,4));p=k(p);return 0>=l(y,h)?0>=l(p,h)?h.getFullYear()+1:h.getFullYear():h.getFullYear()-1}var r=A()[d+40>>2];d={Rb:A()[d>>2],Qb:A()[d+4>>2],Ra:A()[d+8>>2],La:A()[d+12>>2],Ha:A()[d+16>>2],xa:A()[d+20>>2],Sa:A()[d+24>>2],Ta:A()[d+28>>2],hc:A()[d+
32>>2],Pb:A()[d+36>>2],Sb:r?L(r):""};c=L(c);r={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var t in r)c=c.replace(new RegExp(t,"g"),r[t]);var w="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
C="January February March April May June July August September October November December".split(" ");r={"%a":function(h){return w[h.Sa].substring(0,3)},"%A":function(h){return w[h.Sa]},"%b":function(h){return C[h.Ha].substring(0,3)},"%B":function(h){return C[h.Ha]},"%C":function(h){return g((h.xa+1900)/100|0,2)},"%d":function(h){return g(h.La,2)},"%e":function(h){return f(h.La,2," ")},"%g":function(h){return q(h).toString().substring(2)},"%G":function(h){return q(h)},"%H":function(h){return g(h.Ra,
2)},"%I":function(h){h=h.Ra;0==h?h=12:12<h&&(h-=12);return g(h,2)},"%j":function(h){return g(h.La+uc(tc(h.xa+1900)?vc:wc,h.Ha-1),3)},"%m":function(h){return g(h.Ha+1,2)},"%M":function(h){return g(h.Qb,2)},"%n":function(){return"\n"},"%p":function(h){return 0<=h.Ra&&12>h.Ra?"AM":"PM"},"%S":function(h){return g(h.Rb,2)},"%t":function(){return"\t"},"%u":function(h){return h.Sa||7},"%U":function(h){var p=new Date(h.xa+1900,0,1),y=0===p.getDay()?p:xc(p,7-p.getDay());h=new Date(h.xa+1900,h.Ha,h.La);return 0>
l(y,h)?g(Math.ceil((31-y.getDate()+(uc(tc(h.getFullYear())?vc:wc,h.getMonth()-1)-31)+h.getDate())/7),2):0===l(y,p)?"01":"00"},"%V":function(h){var p=new Date(h.xa+1901,0,4),y=k(new Date(h.xa+1900,0,4));p=k(p);var z=xc(new Date(h.xa+1900,0,1),h.Ta);return 0>l(z,y)?"53":0>=l(p,z)?"01":g(Math.ceil((y.getFullYear()<h.xa+1900?h.Ta+32-y.getDate():h.Ta+1-y.getDate())/7),2)},"%w":function(h){return h.Sa},"%W":function(h){var p=new Date(h.xa,0,1),y=1===p.getDay()?p:xc(p,0===p.getDay()?1:7-p.getDay()+1);h=
new Date(h.xa+1900,h.Ha,h.La);return 0>l(y,h)?g(Math.ceil((31-y.getDate()+(uc(tc(h.getFullYear())?vc:wc,h.getMonth()-1)-31)+h.getDate())/7),2):0===l(y,p)?"01":"00"},"%y":function(h){return(h.xa+1900).toString().substring(2)},"%Y":function(h){return h.xa+1900},"%z":function(h){h=h.Pb;var p=0<=h;h=Math.abs(h)/60;return(p?"+":"-")+String("0000"+(h/60*100+h%60)).slice(-4)},"%Z":function(h){return h.Sb},"%%":function(){return"%"}};for(t in r)c.includes(t)&&(c=c.replace(new RegExp(t,"g"),r[t](d)));t=zc(c);
if(t.length>b)return 0;Ea(t,a);return t.length-1}G||P.sb();qb=D.InternalError=pb("InternalError");for(var Ac=Array(256),Bc=0;256>Bc;++Bc)Ac[Bc]=String.fromCharCode(Bc);tb=Ac;ub=D.BindingError=pb("BindingError");D.count_emval_handles=function(){for(var a=0,b=5;b<Y.length;++b)void 0!==Y[b]&&++a;return a};D.get_first_emval=function(){for(var a=5;a<Y.length;++a)if(void 0!==Y[a])return Y[a];return null};Gb=D.UnboundTypeError=pb("UnboundTypeError");
var Cc=[null,function(a,b){if(G)return Z(1,1,a,b)},Zb,lc,mc,nc,oc,pc];function zc(a){var b=Array(xa(a)+1);va(a,b,0,b.length);return b}
var Fc={e:function(a,b,c,d){K("Assertion failed: "+L(a)+", at: "+[b?L(b):"unknown filename",c,d?L(d):"unknown function"])},J:function(a){return Q(a+16)+16},q:function(a,b){return gb(a,b)},B:function(a,b,c){(new hb(a)).qb(b,c);ib++;throw a;},s:function(a){var b=jb[a];delete jb[a];var c=b.wb,d=b.xb,f=b.bb,g=f.map(function(l){return l.ob}).concat(f.map(function(l){return l.Ib}));rb([a],g,function(l){var k={};f.forEach(function(q,r){var t=l[r],w=q.mb,C=q.nb,h=l[r+f.length],p=q.Hb,y=q.Jb;k[q.kb]={read:function(z){return t.fromWireType(w(C,
z))},write:function(z,I){var da=[];p(y,z,h.toWireType(da,I));kb(da)}}});return[{name:b.name,fromWireType:function(q){var r={},t;for(t in k)r[t]=k[t].read(q);d(q);return r},toWireType:function(q,r){for(var t in k)if(!(t in r))throw new TypeError('Missing field: "'+t+'"');var w=c();for(t in k)k[t].write(w,r[t]);null!==q&&q.push(d,w);return w},argPackAdvance:8,readValueFromPointer:lb,Da:d}]})},w:function(){},Q:function(a,b,c,d,f){var g=sb(c);b=W(b);V(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,
k){return k?d:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var k=e();else if(2===c)k=x();else if(4===c)k=A();else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(k[l>>g])},Da:null})},P:function(a,b){b=W(b);V(a,{name:b,fromWireType:function(c){var d=Y[c].value;wb(c);return d},toWireType:function(c,d){return xb(d)},argPackAdvance:8,readValueFromPointer:lb,Da:null})},o:function(a,b,c){c=sb(c);b=W(b);V(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,
f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+yb(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:zb(b,c),Da:null})},r:function(a,b,c,d,f,g){var l=Db(b,c);a=W(a);f=Fb(d,f);Cb(a,function(){Jb("Cannot call "+a+" due to unbound types",l)},b-1);rb([],l,function(k){var q=a,r=a;k=[k[0],null].concat(k.slice(1));var t=f,w=k.length;2>w&&X("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var C=null!==k[1]&&!1,
h=!1,p=1;p<k.length;++p)if(null!==k[p]&&void 0===k[p].Da){h=!0;break}var y="void"!==k[0].name,z="",I="";for(p=0;p<w-2;++p)z+=(0!==p?", ":"")+"arg"+p,I+=(0!==p?", ":"")+"arg"+p+"Wired";r="return function "+nb(r)+"("+z+") {\nif (arguments.length !== "+(w-2)+") {\nthrowBindingError('function "+r+" called with ' + arguments.length + ' arguments, expected "+(w-2)+" args!');\n}\n";h&&(r+="var destructors = [];\n");var da=h?"destructors":"null";z="throwBindingError invoker fn runDestructors retType classParam".split(" ");
t=[X,t,g,kb,k[0],k[1]];C&&(r+="var thisWired = classParam.toWireType("+da+", this);\n");for(p=0;p<w-2;++p)r+="var arg"+p+"Wired = argType"+p+".toWireType("+da+", arg"+p+"); // "+k[p+2].name+"\n",z.push("argType"+p),t.push(k[p+2]);C&&(I="thisWired"+(0<I.length?", ":"")+I);r+=(y?"var rv = ":"")+"invoker(fn"+(0<I.length?", ":"")+I+");\n";if(h)r+="runDestructors(destructors);\n";else for(p=C?1:2;p<k.length;++p)w=1===p?"thisWired":"arg"+(p-2)+"Wired",null!==k[p].Da&&(r+=w+"_dtor("+w+"); // "+k[p].name+
"\n",z.push(w+"_dtor"),t.push(k[p].Da));y&&(r+="var ret = retType.fromWireType(rv);\nreturn ret;\n");z.push(r+"}\n");k=Ab(z).apply(null,t);p=b-1;if(!D.hasOwnProperty(q))throw new qb("Replacing nonexistant public symbol");void 0!==D[q].Aa&&void 0!==p?D[q].Aa[p]=k:(D[q]=k,D[q].hb=p);return[]})},d:function(a,b,c,d,f){function g(r){return r}b=W(b);-1===f&&(f=4294967295);var l=sb(c);if(0===d){var k=32-8*c;g=function(r){return r<<k>>>k}}var q=b.includes("unsigned");V(a,{name:b,fromWireType:g,toWireType:function(r,
t){if("number"!==typeof t&&"boolean"!==typeof t)throw new TypeError('Cannot convert "'+yb(t)+'" to '+this.name);if(t<d||t>f)throw new TypeError('Passing a number "'+yb(t)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return q?t>>>0:t|0},argPackAdvance:8,readValueFromPointer:Kb(b,l,0!==d),Da:null})},c:function(a,b,c){function d(g){g>>=2;var l=B();return new f(n,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,
Uint32Array,Float32Array,Float64Array][b];c=W(c);V(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{pb:!0})},p:function(a,b){b=W(b);var c="std::string"===b;V(a,{name:b,fromWireType:function(d){var f=B()[d>>2];if(c)for(var g=d+4,l=0;l<=f;++l){var k=d+4+l;if(l==f||0==v()[k]){g=L(g,k-g);if(void 0===q)var q=g;else q+=String.fromCharCode(0),q+=g;g=k+1}}else{q=Array(f);for(l=0;l<f;++l)q[l]=String.fromCharCode(v()[d+4+l]);q=q.join("")}S(d);return q},toWireType:function(d,f){f instanceof
ArrayBuffer&&(f=new Uint8Array(f));var g="string"===typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||X("Cannot pass non-string to std::string");var l=(c&&g?function(){return xa(f)}:function(){return f.length})(),k=Q(4+l+1);B()[k>>2]=l;if(c&&g)wa(f,k+4,l+1);else if(g)for(g=0;g<l;++g){var q=f.charCodeAt(g);255<q&&(S(k),X("String has UTF-16 code units that do not fit in 8 bits"));v()[k+4+g]=q}else for(g=0;g<l;++g)v()[k+4+g]=f[g];null!==d&&d.push(S,k);return k},
argPackAdvance:8,readValueFromPointer:lb,Da:function(d){S(d)}})},k:function(a,b,c){c=W(c);if(2===b){var d=ya;var f=za;var g=Aa;var l=function(){return ea()};var k=1}else 4===b&&(d=Ba,f=Ca,g=Da,l=function(){return B()},k=2);V(a,{name:c,fromWireType:function(q){for(var r=B()[q>>2],t=l(),w,C=q+4,h=0;h<=r;++h){var p=q+4+h*b;if(h==r||0==t[p>>k])C=d(C,p-C),void 0===w?w=C:(w+=String.fromCharCode(0),w+=C),C=p+b}S(q);return w},toWireType:function(q,r){"string"!==typeof r&&X("Cannot pass non-string to C++ string type "+
c);var t=g(r),w=Q(4+t+b);B()[w>>2]=t>>k;f(r,w+4,t+b);null!==q&&q.push(S,w);return w},argPackAdvance:8,readValueFromPointer:lb,Da:function(q){S(q)}})},t:function(a,b,c,d,f,g){jb[a]={name:W(b),wb:Fb(c,d),xb:Fb(f,g),bb:[]}},f:function(a,b,c,d,f,g,l,k,q,r){jb[a].bb.push({kb:W(b),ob:c,mb:Fb(d,f),nb:g,Ib:l,Hb:Fb(k,q),Jb:r})},R:function(a,b){b=W(b);V(a,{$b:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},I:function(a,b){if(a==b)postMessage({cmd:"processQueuedMainThreadWork"});
else if(G)postMessage({targetThread:a,cmd:"processThreadQueue"});else{a=(a=P.Ba[a])&&a.worker;if(!a)return;a.postMessage({cmd:"processThreadQueue"})}return 1},i:wb,U:function(a){if(0===a)return xb(Mb());var b=Lb[a];a=void 0===b?W(a):b;return xb(Mb()[a])},T:function(a){4<a&&(Y[a].Wa+=1)},u:function(a,b,c,d){a||X("Cannot use deleted val. handle = "+a);a=Y[a].value;var f=Ob[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var l="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";
for(g=0;g<b;++g)l+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(Nb,D,xb);Ob[b]=f}return f(a,c,d)},b:function(){K()},n:function(a,b,c){Pb.length=0;var d;for(c>>=2;d=v()[b++];)(d=105>d)&&c&1&&c++,
Pb.push(d?ja()[c++>>1]:A()[c]),++c;return Qa[a].apply(null,Pb)},E:function(){},m:function(){},h:Qb,g:Sa,j:fb,z:function(a,b,c){v().copyWithin(a,b,b+c)},D:function(){return navigator.hardwareConcurrency},F:function(a,b,c){Ub.length=b;c>>=3;for(var d=0;d<b;d++)Ub[d]=ja()[c+d];return(0>a?Qa[-a-1]:Cc[a]).apply(null,Ub)},A:function(a){var b=v().length;a>>>=0;if(a<=b||2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,d);0<d%65536&&(d+=65536-d%65536);a:{try{m.grow(Math.min(2147483648,
d)-n.byteLength+65535>>>16);u(m.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},G:function(a,b,c){return Wb(a)?Xb(a,b,c):Zb(a,b,c)},l:function(){},H:function(a,b){b>>=2;var c=A()[b+6];b={alpha:!!A()[b],depth:!!A()[b+1],stencil:!!A()[b+2],antialias:!!A()[b+3],premultipliedAlpha:!!A()[b+4],preserveDrawingBuffer:!!A()[b+5],powerPreference:gc[c],failIfMajorPerformanceCaveat:!!A()[b+7],vb:A()[b+8],ac:A()[b+9],ab:A()[b+10],jb:A()[b+11],dc:A()[b+12],ec:A()[b+13]};a=Wb(a);return!a||b.jb?
0:cc(a,b)},L:lc,M:mc,N:nc,v:oc,O:pc,y:function(){P.tb()},a:m||D.wasmMemory,S:function(a,b,c,d){if("undefined"===typeof SharedArrayBuffer)return J("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!a)return J("pthread_create called with a null thread pointer!"),28;var f=[];if(G&&0===f.length)return Dc(687865856,a,b,c,d);var g=0,l=0;if(b&&-1!=b){var k=A()[b>>2];k+=81920;g=A()[b+8>>2];l=0!==A()[b+12>>2]}else k=2097152;(b=0==g)?g=Ec(16,k):(g-=k,0<g||K("Assertion failed: undefined"));
for(var q=Q(228),r=0;57>r;++r)B()[(q>>2)+r]=0;A()[a>>2]=q;A()[q+12>>2]=q;a=q+152;A()[a>>2]=a;c={Fa:g,Ga:k,Ua:b,$a:l,Kb:c,Pa:q,Ia:d,Tb:f};return G?(c.Vb="spawnThread",postMessage(c,f),0):$a(c)},C:function(a,b){return rc(a,b)},x:function(){},K:function(a,b,c,d){return yc(a,b,c,d)}};
(function(){function a(f,g){D.asm=f.exports;M=D.asm.Z;Ia.unshift(D.asm.V);P.Ya.push(D.asm.Y);sa=g;if(!G){var l=P.za.length;P.za.forEach(function(k){P.eb(k,function(){if(!--l&&(N--,D.monitorRunDependencies&&D.monitorRunDependencies(N),0==N&&(null!==La&&(clearInterval(La),La=null),Ma))){var q=Ma;Ma=null;q()}})})}}function b(f){a(f.instance,f.module)}function c(f){return Oa().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){J("failed to asynchronously prepare wasm: "+g);K(g)})}
var d={a:Fc};G||(!G||K("Assertion failed: addRunDependency cannot be used in a pthread worker"),N++,D.monitorRunDependencies&&D.monitorRunDependencies(N));if(D.instantiateWasm)try{return D.instantiateWasm(d,a)}catch(f){return J("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return ra||"function"!==typeof WebAssembly.instantiateStreaming||O.startsWith("data:application/octet-stream;base64,")||"function"!==typeof fetch?c(b):fetch(O,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,
d).then(b,function(g){J("wasm streaming compile failed: "+g);J("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ma);return{}})();D.___wasm_call_ctors=function(){return(D.___wasm_call_ctors=D.asm.V).apply(null,arguments)};var Q=D._malloc=function(){return(Q=D._malloc=D.asm.W).apply(null,arguments)},S=D._free=function(){return(S=D._free=D.asm.X).apply(null,arguments)};D._emscripten_tls_init=function(){return(D._emscripten_tls_init=D.asm.Y).apply(null,arguments)};
var Ib=D.___getTypeName=function(){return(Ib=D.___getTypeName=D.asm._).apply(null,arguments)};D.___embind_register_native_and_builtin_types=function(){return(D.___embind_register_native_and_builtin_types=D.asm.$).apply(null,arguments)};D._emscripten_current_thread_process_queued_calls=function(){return(D._emscripten_current_thread_process_queued_calls=D.asm.aa).apply(null,arguments)};
var Wa=D._emscripten_register_main_browser_thread_id=function(){return(Wa=D._emscripten_register_main_browser_thread_id=D.asm.ba).apply(null,arguments)},sc=D._emscripten_main_browser_thread_id=function(){return(sc=D._emscripten_main_browser_thread_id=D.asm.ca).apply(null,arguments)},Pa=D.__emscripten_do_dispatch_to_thread=function(){return(Pa=D.__emscripten_do_dispatch_to_thread=D.asm.da).apply(null,arguments)},Dc=D._emscripten_sync_run_in_main_thread_4=function(){return(Dc=D._emscripten_sync_run_in_main_thread_4=
D.asm.ea).apply(null,arguments)},Za=D._emscripten_main_thread_process_queued_calls=function(){return(Za=D._emscripten_main_thread_process_queued_calls=D.asm.fa).apply(null,arguments)},Tb=D._emscripten_run_in_main_runtime_thread_js=function(){return(Tb=D._emscripten_run_in_main_runtime_thread_js=D.asm.ga).apply(null,arguments)},Yb=D.__emscripten_call_on_thread=function(){return(Yb=D.__emscripten_call_on_thread=D.asm.ha).apply(null,arguments)},Va=D.__emscripten_thread_init=function(){return(Va=D.__emscripten_thread_init=
D.asm.ia).apply(null,arguments)},R=D._pthread_self=function(){return(R=D._pthread_self=D.asm.ja).apply(null,arguments)},Xa=D.___pthread_tsd_run_dtors=function(){return(Xa=D.___pthread_tsd_run_dtors=D.asm.ka).apply(null,arguments)},qc=D._emscripten_get_global_libc=function(){return(qc=D._emscripten_get_global_libc=D.asm.la).apply(null,arguments)},Rb=D.stackSave=function(){return(Rb=D.stackSave=D.asm.ma).apply(null,arguments)},db=D.stackRestore=function(){return(db=D.stackRestore=D.asm.na).apply(null,
arguments)},Sb=D.stackAlloc=function(){return(Sb=D.stackAlloc=D.asm.oa).apply(null,arguments)},cb=D._emscripten_stack_set_limits=function(){return(cb=D._emscripten_stack_set_limits=D.asm.pa).apply(null,arguments)},Ec=D._memalign=function(){return(Ec=D._memalign=D.asm.qa).apply(null,arguments)};D.dynCall_viijii=function(){return(D.dynCall_viijii=D.asm.ra).apply(null,arguments)};D.dynCall_iiji=function(){return(D.dynCall_iiji=D.asm.sa).apply(null,arguments)};
D.dynCall_jiji=function(){return(D.dynCall_jiji=D.asm.ta).apply(null,arguments)};D.dynCall_iiiiij=function(){return(D.dynCall_iiiiij=D.asm.ua).apply(null,arguments)};D.dynCall_iiiiijj=function(){return(D.dynCall_iiiiijj=D.asm.va).apply(null,arguments)};D.dynCall_iiiiiijj=function(){return(D.dynCall_iiiiiijj=D.asm.wa).apply(null,arguments)};var Ya=D.__emscripten_allow_main_runtime_queued_calls=60568,Ta=D.__emscripten_main_thread_futex=73404;D.PThread=P;D.PThread=P;D.wasmMemory=m;D.ExitStatus=ab;var Gc;
function ab(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Ma=function Hc(){Gc||Ic();Gc||(Ma=Hc)};
function Ic(){function a(){if(!Gc&&(Gc=!0,D.calledRun=!0,!ta)){G||Ra(Ia);la(D);if(D.onRuntimeInitialized)D.onRuntimeInitialized();if(!G){if(D.postRun)for("function"==typeof D.postRun&&(D.postRun=[D.postRun]);D.postRun.length;){var b=D.postRun.shift();Ja.unshift(b)}Ra(Ja)}}}if(!(0<N))if(G)la(D),G||Ra(Ia),postMessage({cmd:"loaded"});else{if(!G){if(D.preRun)for("function"==typeof D.preRun&&(D.preRun=[D.preRun]);D.preRun.length;)Ka();Ra(Ha)}0<N||(D.setStatus?(D.setStatus("Running..."),setTimeout(function(){setTimeout(function(){D.setStatus("")},
1);a()},1)):a())}}D.run=Ic;if(D.preInit)for("function"==typeof D.preInit&&(D.preInit=[D.preInit]);0<D.preInit.length;)D.preInit.pop()();G&&(noExitRuntime=!1,P.ub());Ic();
return Module.ready
}
);
})();
export default Module;

Binary file not shown.

View File

@@ -1 +0,0 @@
"use strict";var Module={};var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};function moduleLoaded(){}self.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;(e.data.urlOrBlob?import(e.data.urlOrBlob):import("./jxl_enc_mt.js")).then(function(exports){return exports.default(Module)}).then(function(instance){Module=instance;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,/*isMainBrowserThread=*/0,/*isMainRuntimeThread=*/0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();if(!initializedJS){Module["___embind_register_native_and_builtin_types"]();initializedJS=true}try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["PThread"].threadExit(result)}}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}};

View File

@@ -1 +0,0 @@
export { default } from './jxl_enc';

View File

@@ -1,105 +0,0 @@
var Module = (function() {
var _scriptDir = import.meta.url;
return (
function(Module) {
Module = Module || {};
function e(){m.buffer!=n&&u(m.buffer);return aa}function v(){m.buffer!=n&&u(m.buffer);return ba}function x(){m.buffer!=n&&u(m.buffer);return ca}function ea(){m.buffer!=n&&u(m.buffer);return fa}function A(){m.buffer!=n&&u(m.buffer);return ha}function B(){m.buffer!=n&&u(m.buffer);return ia}function ja(){m.buffer!=n&&u(m.buffer);return ka}var D;D||(D=typeof Module !== 'undefined' ? Module : {});var la,ma;D.ready=new Promise(function(a,b){la=a;ma=b});var E={},F;
for(F in D)D.hasOwnProperty(F)&&(E[F]=D[F]);var na="./this.program";function oa(a,b){throw b;}var G=D.ENVIRONMENT_IS_PTHREAD||!1,H="",pa;H=self.location.href;_scriptDir&&(H=_scriptDir);0!==H.indexOf("blob:")?H=H.substr(0,H.lastIndexOf("/")+1):H="";pa=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)};var qa=D.print||console.log.bind(console),J=D.printErr||console.warn.bind(console);
for(F in E)E.hasOwnProperty(F)&&(D[F]=E[F]);E=null;D.thisProgram&&(na=D.thisProgram);D.quit&&(oa=D.quit);var ra;D.wasmBinary&&(ra=D.wasmBinary);var noExitRuntime=D.noExitRuntime||!0;"object"!==typeof WebAssembly&&K("no native wasm support detected");var m,sa,ta=!1;
function ua(a,b,c){c=b+c;for(var d="";!(b>=c);){var f=a[b++];if(!f)break;if(f&128){var g=a[b++]&63;if(192==(f&224))d+=String.fromCharCode((f&31)<<6|g);else{var l=a[b++]&63;f=224==(f&240)?(f&15)<<12|g<<6|l:(f&7)<<18|g<<12|l<<6|a[b++]&63;65536>f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d}function L(a,b){return a?ua(v(),a,b):""}
function va(a,b,c,d){if(0<d){d=c+d-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}if(127>=g){if(c>=d)break;b[c++]=g}else{if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6}else{if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63}b[c++]=128|g>>6&63}b[c++]=128|g&63}}b[c]=0}}function wa(a,b,c){va(a,v(),b,c)}
function xa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}function ya(a,b){for(var c="",d=0;!(d>=b/2);++d){var f=x()[a+2*d>>1];if(0==f)break;c+=String.fromCharCode(f)}return c}function za(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f<c;++f){var g=a.charCodeAt(f);x()[b>>1]=g;b+=2}x()[b>>1]=0;return b-d}
function Aa(a){return 2*a.length}function Ba(a,b){for(var c=0,d="";!(c>=b/4);){var f=A()[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d}function Ca(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}A()[b>>2]=g;b+=4;if(b+4>c)break}A()[b>>2]=0;return b-d}
function Da(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}function Ea(a,b){e().set(a,b)}var n,aa,ba,ca,fa,ha,ia,Fa,ka;G&&(n=D.buffer);function u(a){n=a;D.HEAP8=aa=new Int8Array(a);D.HEAP16=ca=new Int16Array(a);D.HEAP32=ha=new Int32Array(a);D.HEAPU8=ba=new Uint8Array(a);D.HEAPU16=fa=new Uint16Array(a);D.HEAPU32=ia=new Uint32Array(a);D.HEAPF32=Fa=new Float32Array(a);D.HEAPF64=ka=new Float64Array(a)}var Ga=D.INITIAL_MEMORY||16777216;
if(G)m=D.wasmMemory,n=D.buffer;else if(D.wasmMemory)m=D.wasmMemory;else if(m=new WebAssembly.Memory({initial:Ga/65536,maximum:32768,shared:!0}),!(m.buffer instanceof SharedArrayBuffer))throw J("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),Error("bad memory");m&&(n=m.buffer);Ga=n.byteLength;u(n);var M,Ha=[],Ia=[],Ja=[];
function Ka(){var a=D.preRun.shift();Ha.unshift(a)}var N=0,La=null,Ma=null;D.preloadedImages={};D.preloadedAudios={};function K(a){if(D.onAbort)D.onAbort(a);G&&console.error("Pthread aborting at "+Error().stack);J(a);ta=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ma(a);throw a;}var O=(new URL("jxl_enc_mt_simd.wasm",import.meta.url)).toString();
function Na(){try{if(O==O&&ra)return new Uint8Array(ra);if(pa)return pa(O);throw"both async and sync fetching of the wasm failed";}catch(a){K(a)}}function Oa(){return ra||"function"!==typeof fetch?Promise.resolve().then(function(){return Na()}):fetch(O,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+O+"'";return a.arrayBuffer()}).catch(function(){return Na()})}
var Qa={59668:function(){throw"Canceled!";},59686:function(a,b){setTimeout(function(){Pa(a,b)},0)}};function Ra(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(D);else{var c=b.Yb;"number"===typeof c?void 0===b.Ia?M.get(c)():M.get(c)(b.Ia):c(void 0===b.Ia?null:b.Ia)}}}
function Sa(a,b){if(0>=a||a>e().length||a&1||0>b)return-28;if(0==b)return 0;2147483647<=b&&(b=Infinity);var c=Atomics.load(A(),Ta>>2),d=0;if(c==a&&Atomics.compareExchange(A(),Ta>>2,c,0)==c&&(--b,d=1,0>=b))return 1;a=Atomics.notify(A(),a>>2,b);if(0<=a)return a+d;throw"Atomics.notify returned an unexpected value "+a;}D._emscripten_futex_wake=Sa;
function Ua(a){if(G)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!a)throw"Internal Error! Null pthread_ptr in cleanupThread!";var b=P.Ba[a];b&&(A()[a+12>>2]=0,P.Qa(b.worker))}
var P={za:[],Ea:[],Ya:[],sb:function(){for(var a=navigator.hardwareConcurrency,b=0;b<a;++b)P.Za()},tb:function(){for(var a=Q(228),b=0;57>b;++b)B()[a/4+b]=0;A()[a+12>>2]=a;b=a+152;A()[b>>2]=b;var c=Q(512);for(b=0;128>b;++b)B()[c/4+b]=0;Atomics.store(B(),a+100>>2,c);Atomics.store(B(),a+40>>2,a);Va(a,!1,1);Wa(a)},ub:function(){P.receiveObjectTransfer=P.yb;P.threadInit=P.Ob;P.threadCancel=P.Mb;P.threadExit=P.Nb;P.setExitStatus=P.Bb},Ba:{},Xa:[],zb:function(){for(;0<P.Xa.length;)P.Xa.pop()();G&&R()&&Xa()},
gb:function(a,b){Atomics.store(B(),a+56>>2,1);Atomics.store(B(),a+60>>2,0);P.zb();Atomics.store(B(),a+4>>2,b);Atomics.store(B(),a+0>>2,1);Sa(a+0,2147483647);Va(0,0,0)},Bb:function(){},Nb:function(a){var b=R();b&&(P.gb(b,a),G&&postMessage({cmd:"exit"}))},Mb:function(){P.gb(R(),-1);postMessage({cmd:"cancelDone"})},Lb:function(){for(var a in P.Ba){var b=P.Ba[a];b&&b.worker&&P.Qa(b.worker)}P.Ba={};for(a=0;a<P.za.length;++a){var c=P.za[a];c.terminate()}P.za=[];for(a=0;a<P.Ea.length;++a)c=P.Ea[a],b=c.ya,
P.Va(b),c.terminate();P.Ea=[]},Va:function(a){if(a){if(a.Ca){var b=A()[a.Ca+100>>2];A()[a.Ca+100>>2]=0;S(b);S(a.Ca)}a.Ca=0;a.Ua&&a.Fa&&S(a.Fa);a.Fa=0;a.worker&&(a.worker.ya=null)}},Qa:function(a){P.Ab(function(){delete P.Ba[a.ya.Ca];P.za.push(a);P.Ea.splice(P.Ea.indexOf(a),1);P.Va(a.ya);a.ya=void 0})},Ab:function(a){A()[Ya>>2]=0;try{a()}finally{A()[Ya>>2]=1}},yb:function(){},Ob:function(){for(var a in P.Ya)P.Ya[a]()},eb:function(a,b){a.onmessage=function(c){var d=c.data,f=d.cmd;a.ya&&(P.ib=a.ya.Ca);
if(d.targetThread&&d.targetThread!=R()){var g=P.Ba[d.fc];g?g.worker.postMessage(c.data,d.transferList):console.error('Internal error! Worker sent a message "'+f+'" to target pthread '+d.targetThread+", but that thread no longer exists!")}else if("processQueuedMainThreadWork"===f)Za();else if("spawnThread"===f)$a(c.data);else if("cleanupThread"===f)Ua(d.thread);else if("killThread"===f){c=d.thread;if(G)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!c)throw"Internal Error! Null pthread_ptr in killThread!";
A()[c+12>>2]=0;c=P.Ba[c];c.worker.terminate();P.Va(c);P.Ea.splice(P.Ea.indexOf(c.worker),1);c.worker.ya=void 0}else if("cancelThread"===f){c=d.thread;if(G)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!c)throw"Internal Error! Null pthread_ptr in cancelThread!";P.Ba[c].worker.postMessage({cmd:"cancel"})}else if("loaded"===f)a.loaded=!0,b&&b(a),a.Ka&&(a.Ka(),delete a.Ka);else if("print"===f)qa("Thread "+d.threadId+": "+d.text);else if("printErr"===f)J("Thread "+
d.threadId+": "+d.text);else if("alert"===f)alert("Thread "+d.threadId+": "+d.text);else if("exit"===f)a.ya&&Atomics.load(B(),a.ya.Ca+64>>2)&&P.Qa(a);else if("exitProcess"===f)try{g=d.returnCode;if(G)throw postMessage({cmd:"exitProcess",returnCode:g}),new ab(g);if(!bb()){P.Lb();if(D.onExit)D.onExit(g);ta=!0}oa(g,new ab(g))}catch(l){if(l instanceof ab)return;throw l;}else"cancelDone"===f?P.Qa(a):"objectTransfer"!==f&&("setimmediate"===c.data.target?a.postMessage(c.data):J("worker sent an unknown command "+
f));P.ib=void 0};a.onerror=function(c){J("pthread sent an error! "+c.filename+":"+c.lineno+": "+c.message)};a.postMessage({cmd:"load",urlOrBlob:D.mainScriptUrlOrBlob,wasmMemory:m,wasmModule:sa})},Za:function(){if(D.locateFile){var a=D.locateFile?D.locateFile("jxl_enc_mt_simd.worker.js",H):H+"jxl_enc_mt_simd.worker.js";P.za.push(new Worker(a))}else P.za.push(new Worker(new URL("jxl_enc_mt_simd.worker.js",import.meta.url)))},lb:function(){0==P.za.length&&(P.Za(),P.eb(P.za[0]));return P.za.pop()},
Ub:function(a){for(a=performance.now()+a;performance.now()<a;);}};D.establishStackSpace=function(a,b){cb(a,b);db(a)};D.invokeEntryPoint=function(a,b){return M.get(a)(b)};var eb=0;function bb(){return noExitRuntime||0<eb}D.keepRuntimeAlive=bb;var fb;fb=G?function(){return performance.now()-D.__performance_now_clock_drift}:function(){return performance.now()};function gb(a,b){P.Xa.push(function(){M.get(a)(b)})}
function hb(a){this.Ja=a-16;this.Gb=function(b){A()[this.Ja+8>>2]=b};this.Db=function(b){A()[this.Ja+0>>2]=b};this.Eb=function(){A()[this.Ja+4>>2]=0};this.Cb=function(){var b=0;e()[this.Ja+12>>0]=b};this.Fb=function(){var b=0;e()[this.Ja+13>>0]=b};this.qb=function(b,c){this.Gb(b);this.Db(c);this.Eb();this.Cb();this.Fb()}}var ib=0,jb={};function kb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function lb(a){return this.fromWireType(B()[a>>2])}var T={},U={},mb={};
function nb(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function ob(a,b){a=nb(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}
function pb(a){var b=Error,c=ob(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var qb=void 0;
function rb(a,b,c){function d(k){k=c(k);if(k.length!==a.length)throw new qb("Mismatched type converter count");for(var q=0;q<a.length;++q)V(a[q],k[q])}a.forEach(function(k){mb[k]=b});var f=Array(b.length),g=[],l=0;b.forEach(function(k,q){U.hasOwnProperty(k)?f[q]=U[k]:(g.push(k),T.hasOwnProperty(k)||(T[k]=[]),T[k].push(function(){f[q]=U[k];++l;l===g.length&&d(f)}))});0===g.length&&d(f)}
function sb(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var tb=void 0;function W(a){for(var b="";v()[a];)b+=tb[v()[a++]];return b}var ub=void 0;function X(a){throw new ub(a);}
function V(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||X('type "'+d+'" must have a positive integer typeid pointer');if(U.hasOwnProperty(a)){if(c.pb)return;X("Cannot register type '"+d+"' twice")}U[a]=b;delete mb[a];T.hasOwnProperty(a)&&(b=T[a],delete T[a],b.forEach(function(f){f()}))}var vb=[],Y=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function wb(a){4<a&&0===--Y[a].Wa&&(Y[a]=void 0,vb.push(a))}function xb(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=vb.length?vb.pop():Y.length;Y[b]={Wa:1,value:a};return b}}function yb(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function zb(a,b){switch(b){case 2:return function(c){var d=this.fromWireType;m.buffer!=n&&u(m.buffer);return d.call(this,Fa[c>>2])};case 3:return function(c){return this.fromWireType(ja()[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}
function Ab(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=ob(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Bb(a,b){var c=D;if(void 0===c[a].Aa){var d=c[a];c[a]=function(){c[a].Aa.hasOwnProperty(arguments.length)||X("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].Aa+")!");return c[a].Aa[arguments.length].apply(this,arguments)};c[a].Aa=[];c[a].Aa[d.hb]=d}}
function Cb(a,b,c){D.hasOwnProperty(a)?((void 0===c||void 0!==D[a].Aa&&void 0!==D[a].Aa[c])&&X("Cannot register public name '"+a+"' twice"),Bb(a,a),D.hasOwnProperty(c)&&X("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),D[a].Aa[c]=b):(D[a]=b,void 0!==c&&(D[a].cc=c))}function Db(a,b){for(var c=[],d=0;d<a;d++)c.push(A()[(b>>2)+d]);return c}
function Eb(a,b){var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];a.includes("j")?(d=D["dynCall_"+a],d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)):d=M.get(b).apply(null,c);return d}}function Fb(a,b){a=W(a);var c=a.includes("j")?Eb(a,b):M.get(b);"function"!==typeof c&&X("unknown function pointer with signature "+a+": "+b);return c}var Gb=void 0;function Hb(a){a=Ib(a);var b=W(a);S(a);return b}
function Jb(a,b){function c(g){f[g]||U[g]||(mb[g]?mb[g].forEach(c):(d.push(g),f[g]=!0))}var d=[],f={};b.forEach(c);throw new Gb(a+": "+d.map(Hb).join([", "]));}function Kb(a,b,c){switch(b){case 0:return c?function(d){return e()[d]}:function(d){return v()[d]};case 1:return c?function(d){return x()[d>>1]}:function(d){return ea()[d>>1]};case 2:return c?function(d){return A()[d>>2]}:function(d){return B()[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var Lb={};
function Mb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function Nb(a,b){var c=U[a];void 0===c&&X(b+" has unknown type "+Hb(a));return c}var Ob={},Pb=[];function Qb(a,b,c){if(0>=a||a>e().length||a&1)return-28;a=Atomics.wait(A(),a>>2,b,c);if("timed-out"===a)return-73;if("not-equal"===a)return-6;if("ok"===a)return 0;throw"Atomics.wait returned an unexpected value "+a;}
function Z(a,b){for(var c=arguments.length-2,d=Rb(),f=Sb(8*c),g=f>>3,l=0;l<c;l++){var k=arguments[2+l];ja()[g+l]=k}c=Tb(a,c,f,b);db(d);return c}var Ub=[],Vb=[0,"undefined"!==typeof document?document:0,"undefined"!==typeof window?window:0];function Wb(a){a=2<a?L(a):a;return Vb[a]||("undefined"!==typeof document?document.querySelector(a):void 0)}
function Xb(a,b,c){var d=Wb(a);if(!d)return-4;d.Oa&&(A()[d.Oa>>2]=b,A()[d.Oa+4>>2]=c);if(d.fb||!d.Wb)d.fb&&(d=d.fb),a=!1,d.Na&&d.Na.Ma&&(a=d.Na.Ma.getParameter(2978),a=0===a[0]&&0===a[1]&&a[2]===d.width&&a[3]===d.height),d.width=b,d.height=c,a&&d.Na.Ma.viewport(0,0,b,c);else{if(d.Oa){d=A()[d.Oa+8>>2];a=a?L(a):"";var f=Rb(),g=Sb(12),l=0;if(a){l=xa(a)+1;var k=Q(l);wa(a,k,l);l=k}A()[g>>2]=l;A()[g+4>>2]=b;A()[g+8>>2]=c;Yb(0,d,657457152,0,l,g);db(f);return 1}return-4}return 0}
function Zb(a,b,c){return G?Z(2,1,a,b,c):Xb(a,b,c)}function $b(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,d){b.vertexAttribDivisorANGLE(c,d)},a.drawArraysInstanced=function(c,d,f,g){b.drawArraysInstancedANGLE(c,d,f,g)},a.drawElementsInstanced=function(c,d,f,g,l){b.drawElementsInstancedANGLE(c,d,f,g,l)})}
function ac(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c)},a.bindVertexArray=function(c){b.bindVertexArrayOES(c)},a.isVertexArray=function(c){return b.isVertexArrayOES(c)})}function bc(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,d){b.drawBuffersWEBGL(c,d)})}
function cc(a,b){a.cb||(a.cb=a.getContext,a.getContext=function(d,f){f=a.cb(d,f);return"webgl"==d==f instanceof WebGLRenderingContext?f:null});var c=a.getContext("webgl",b);return c?dc(c,b):0}function dc(a,b){var c=Q(8);A()[c+4>>2]=R();var d={Zb:c,attributes:b,version:b.vb,Ma:a};a.canvas&&(a.canvas.Na=d);("undefined"===typeof b.ab||b.ab)&&ec(d);return c}
function ec(a){a||(a=fc);if(!a.rb){a.rb=!0;var b=a.Ma;$b(b);ac(b);bc(b);b.Xb=b.getExtension("EXT_disjoint_timer_query");b.bc=b.getExtension("WEBGL_multi_draw");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c)})}}var fc,gc=["default","low-power","high-performance"],hc={};
function ic(){if(!jc){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:na||"./this.program"},b;for(b in hc)a[b]=hc[b];var c=[];for(b in a)c.push(b+"="+a[b]);jc=c}return jc}var jc,kc=[null,[],[]];
function lc(a,b){if(G)return Z(3,1,a,b);var c=0;ic().forEach(function(d,f){var g=b+c;f=A()[a+4*f>>2]=g;for(g=0;g<d.length;++g)e()[f++>>0]=d.charCodeAt(g);e()[f>>0]=0;c+=d.length+1});return 0}function mc(a,b){if(G)return Z(4,1,a,b);var c=ic();A()[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});A()[b>>2]=d;return 0}function nc(a){return G?Z(5,1,a):0}function oc(a,b,c,d,f){if(G)return Z(6,1,a,b,c,d,f)}
function pc(a,b,c,d){if(G)return Z(7,1,a,b,c,d);for(var f=0,g=0;g<c;g++){for(var l=A()[b+8*g>>2],k=A()[b+(8*g+4)>>2],q=0;q<k;q++){var r=v()[l+q],t=kc[a];0===r||10===r?((1===a?qa:J)(ua(t,0)),t.length=0):t.push(r)}f+=k}A()[d>>2]=f;return 0}
function $a(a){if(G)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var b=P.lb();if(!b)return 6;if(void 0!==b.ya)throw"Internal error!";if(!a.Pa)throw"Internal error, no pthread ptr!";P.Ea.push(b);for(var c=Q(512),d=0;128>d;++d)A()[c+4*d>>2]=0;var f=a.Fa+a.Ga;d=P.Ba[a.Pa]={worker:b,Fa:a.Fa,Ga:a.Ga,Ua:a.Ua,Ca:a.Pa};var g=d.Ca>>2;Atomics.store(B(),g+16,a.$a);Atomics.store(B(),g+25,c);Atomics.store(B(),g+10,d.Ca);Atomics.store(B(),g+20,a.Ga);Atomics.store(B(),
g+19,f);Atomics.store(B(),g+26,a.Ga);Atomics.store(B(),g+28,f);Atomics.store(B(),g+29,a.$a);c=qc()+40;Atomics.store(B(),g+43,c);b.ya=d;var l={cmd:"run",start_routine:a.Kb,arg:a.Ia,threadInfoStruct:a.Pa,stackBase:a.Fa,stackSize:a.Ga};b.Ka=function(){l.time=performance.now();b.postMessage(l,a.Tb)};b.loaded&&(b.Ka(),delete b.Ka);return 0}
function rc(a,b){if(!a)return J("pthread_join attempted on a null thread pointer!"),71;if(G&&R()==a)return J("PThread "+a+" is attempting to join to itself!"),16;if(!G&&sc()==a)return J("Main thread "+a+" is attempting to join to itself!"),16;if(A()[a+12>>2]!==a)return J("pthread_join attempted on thread "+a+", which does not point to a valid thread, or does not exist anymore!"),71;if(Atomics.load(B(),a+64>>2))return J("Attempted to join thread "+a+", which was already detached!"),28;for(;;){var c=
Atomics.load(B(),a+0>>2);if(1==c)return c=Atomics.load(B(),a+4>>2),b&&(A()[b>>2]=c),Atomics.store(B(),a+64>>2,1),G?postMessage({cmd:"cleanupThread",thread:a}):Ua(a),0;if(G){var d=R();if(d&&!Atomics.load(B(),d+56>>2)&&2==Atomics.load(B(),d+0>>2))throw"Canceled!";}G||Za();Qb(a+0,c,G?100:1)}}function tc(a){return 0===a%4&&(0!==a%100||0===a%400)}function uc(a,b){for(var c=0,d=0;d<=b;c+=a[d++]);return c}var vc=[31,29,31,30,31,30,31,31,30,31,30,31],wc=[31,28,31,30,31,30,31,31,30,31,30,31];
function xc(a,b){for(a=new Date(a.getTime());0<b;){var c=a.getMonth(),d=(tc(a.getFullYear())?vc:wc)[c];if(b>d-a.getDate())b-=d-a.getDate()+1,a.setDate(1),11>c?a.setMonth(c+1):(a.setMonth(0),a.setFullYear(a.getFullYear()+1));else{a.setDate(a.getDate()+b);break}}return a}
function yc(a,b,c,d){function f(h,p,y){for(h="number"===typeof h?h.toString():h||"";h.length<p;)h=y[0]+h;return h}function g(h,p){return f(h,p,"0")}function l(h,p){function y(I){return 0>I?-1:0<I?1:0}var z;0===(z=y(h.getFullYear()-p.getFullYear()))&&0===(z=y(h.getMonth()-p.getMonth()))&&(z=y(h.getDate()-p.getDate()));return z}function k(h){switch(h.getDay()){case 0:return new Date(h.getFullYear()-1,11,29);case 1:return h;case 2:return new Date(h.getFullYear(),0,3);case 3:return new Date(h.getFullYear(),
0,2);case 4:return new Date(h.getFullYear(),0,1);case 5:return new Date(h.getFullYear()-1,11,31);case 6:return new Date(h.getFullYear()-1,11,30)}}function q(h){h=xc(new Date(h.xa+1900,0,1),h.Ta);var p=new Date(h.getFullYear()+1,0,4),y=k(new Date(h.getFullYear(),0,4));p=k(p);return 0>=l(y,h)?0>=l(p,h)?h.getFullYear()+1:h.getFullYear():h.getFullYear()-1}var r=A()[d+40>>2];d={Rb:A()[d>>2],Qb:A()[d+4>>2],Ra:A()[d+8>>2],La:A()[d+12>>2],Ha:A()[d+16>>2],xa:A()[d+20>>2],Sa:A()[d+24>>2],Ta:A()[d+28>>2],hc:A()[d+
32>>2],Pb:A()[d+36>>2],Sb:r?L(r):""};c=L(c);r={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var t in r)c=c.replace(new RegExp(t,"g"),r[t]);var w="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
C="January February March April May June July August September October November December".split(" ");r={"%a":function(h){return w[h.Sa].substring(0,3)},"%A":function(h){return w[h.Sa]},"%b":function(h){return C[h.Ha].substring(0,3)},"%B":function(h){return C[h.Ha]},"%C":function(h){return g((h.xa+1900)/100|0,2)},"%d":function(h){return g(h.La,2)},"%e":function(h){return f(h.La,2," ")},"%g":function(h){return q(h).toString().substring(2)},"%G":function(h){return q(h)},"%H":function(h){return g(h.Ra,
2)},"%I":function(h){h=h.Ra;0==h?h=12:12<h&&(h-=12);return g(h,2)},"%j":function(h){return g(h.La+uc(tc(h.xa+1900)?vc:wc,h.Ha-1),3)},"%m":function(h){return g(h.Ha+1,2)},"%M":function(h){return g(h.Qb,2)},"%n":function(){return"\n"},"%p":function(h){return 0<=h.Ra&&12>h.Ra?"AM":"PM"},"%S":function(h){return g(h.Rb,2)},"%t":function(){return"\t"},"%u":function(h){return h.Sa||7},"%U":function(h){var p=new Date(h.xa+1900,0,1),y=0===p.getDay()?p:xc(p,7-p.getDay());h=new Date(h.xa+1900,h.Ha,h.La);return 0>
l(y,h)?g(Math.ceil((31-y.getDate()+(uc(tc(h.getFullYear())?vc:wc,h.getMonth()-1)-31)+h.getDate())/7),2):0===l(y,p)?"01":"00"},"%V":function(h){var p=new Date(h.xa+1901,0,4),y=k(new Date(h.xa+1900,0,4));p=k(p);var z=xc(new Date(h.xa+1900,0,1),h.Ta);return 0>l(z,y)?"53":0>=l(p,z)?"01":g(Math.ceil((y.getFullYear()<h.xa+1900?h.Ta+32-y.getDate():h.Ta+1-y.getDate())/7),2)},"%w":function(h){return h.Sa},"%W":function(h){var p=new Date(h.xa,0,1),y=1===p.getDay()?p:xc(p,0===p.getDay()?1:7-p.getDay()+1);h=
new Date(h.xa+1900,h.Ha,h.La);return 0>l(y,h)?g(Math.ceil((31-y.getDate()+(uc(tc(h.getFullYear())?vc:wc,h.getMonth()-1)-31)+h.getDate())/7),2):0===l(y,p)?"01":"00"},"%y":function(h){return(h.xa+1900).toString().substring(2)},"%Y":function(h){return h.xa+1900},"%z":function(h){h=h.Pb;var p=0<=h;h=Math.abs(h)/60;return(p?"+":"-")+String("0000"+(h/60*100+h%60)).slice(-4)},"%Z":function(h){return h.Sb},"%%":function(){return"%"}};for(t in r)c.includes(t)&&(c=c.replace(new RegExp(t,"g"),r[t](d)));t=zc(c);
if(t.length>b)return 0;Ea(t,a);return t.length-1}G||P.sb();qb=D.InternalError=pb("InternalError");for(var Ac=Array(256),Bc=0;256>Bc;++Bc)Ac[Bc]=String.fromCharCode(Bc);tb=Ac;ub=D.BindingError=pb("BindingError");D.count_emval_handles=function(){for(var a=0,b=5;b<Y.length;++b)void 0!==Y[b]&&++a;return a};D.get_first_emval=function(){for(var a=5;a<Y.length;++a)if(void 0!==Y[a])return Y[a];return null};Gb=D.UnboundTypeError=pb("UnboundTypeError");
var Cc=[null,function(a,b){if(G)return Z(1,1,a,b)},Zb,lc,mc,nc,oc,pc];function zc(a){var b=Array(xa(a)+1);va(a,b,0,b.length);return b}
var Fc={e:function(a,b,c,d){K("Assertion failed: "+L(a)+", at: "+[b?L(b):"unknown filename",c,d?L(d):"unknown function"])},J:function(a){return Q(a+16)+16},q:function(a,b){return gb(a,b)},B:function(a,b,c){(new hb(a)).qb(b,c);ib++;throw a;},s:function(a){var b=jb[a];delete jb[a];var c=b.wb,d=b.xb,f=b.bb,g=f.map(function(l){return l.ob}).concat(f.map(function(l){return l.Ib}));rb([a],g,function(l){var k={};f.forEach(function(q,r){var t=l[r],w=q.mb,C=q.nb,h=l[r+f.length],p=q.Hb,y=q.Jb;k[q.kb]={read:function(z){return t.fromWireType(w(C,
z))},write:function(z,I){var da=[];p(y,z,h.toWireType(da,I));kb(da)}}});return[{name:b.name,fromWireType:function(q){var r={},t;for(t in k)r[t]=k[t].read(q);d(q);return r},toWireType:function(q,r){for(var t in k)if(!(t in r))throw new TypeError('Missing field: "'+t+'"');var w=c();for(t in k)k[t].write(w,r[t]);null!==q&&q.push(d,w);return w},argPackAdvance:8,readValueFromPointer:lb,Da:d}]})},w:function(){},Q:function(a,b,c,d,f){var g=sb(c);b=W(b);V(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,
k){return k?d:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var k=e();else if(2===c)k=x();else if(4===c)k=A();else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(k[l>>g])},Da:null})},P:function(a,b){b=W(b);V(a,{name:b,fromWireType:function(c){var d=Y[c].value;wb(c);return d},toWireType:function(c,d){return xb(d)},argPackAdvance:8,readValueFromPointer:lb,Da:null})},o:function(a,b,c){c=sb(c);b=W(b);V(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,
f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+yb(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:zb(b,c),Da:null})},r:function(a,b,c,d,f,g){var l=Db(b,c);a=W(a);f=Fb(d,f);Cb(a,function(){Jb("Cannot call "+a+" due to unbound types",l)},b-1);rb([],l,function(k){var q=a,r=a;k=[k[0],null].concat(k.slice(1));var t=f,w=k.length;2>w&&X("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var C=null!==k[1]&&!1,
h=!1,p=1;p<k.length;++p)if(null!==k[p]&&void 0===k[p].Da){h=!0;break}var y="void"!==k[0].name,z="",I="";for(p=0;p<w-2;++p)z+=(0!==p?", ":"")+"arg"+p,I+=(0!==p?", ":"")+"arg"+p+"Wired";r="return function "+nb(r)+"("+z+") {\nif (arguments.length !== "+(w-2)+") {\nthrowBindingError('function "+r+" called with ' + arguments.length + ' arguments, expected "+(w-2)+" args!');\n}\n";h&&(r+="var destructors = [];\n");var da=h?"destructors":"null";z="throwBindingError invoker fn runDestructors retType classParam".split(" ");
t=[X,t,g,kb,k[0],k[1]];C&&(r+="var thisWired = classParam.toWireType("+da+", this);\n");for(p=0;p<w-2;++p)r+="var arg"+p+"Wired = argType"+p+".toWireType("+da+", arg"+p+"); // "+k[p+2].name+"\n",z.push("argType"+p),t.push(k[p+2]);C&&(I="thisWired"+(0<I.length?", ":"")+I);r+=(y?"var rv = ":"")+"invoker(fn"+(0<I.length?", ":"")+I+");\n";if(h)r+="runDestructors(destructors);\n";else for(p=C?1:2;p<k.length;++p)w=1===p?"thisWired":"arg"+(p-2)+"Wired",null!==k[p].Da&&(r+=w+"_dtor("+w+"); // "+k[p].name+
"\n",z.push(w+"_dtor"),t.push(k[p].Da));y&&(r+="var ret = retType.fromWireType(rv);\nreturn ret;\n");z.push(r+"}\n");k=Ab(z).apply(null,t);p=b-1;if(!D.hasOwnProperty(q))throw new qb("Replacing nonexistant public symbol");void 0!==D[q].Aa&&void 0!==p?D[q].Aa[p]=k:(D[q]=k,D[q].hb=p);return[]})},d:function(a,b,c,d,f){function g(r){return r}b=W(b);-1===f&&(f=4294967295);var l=sb(c);if(0===d){var k=32-8*c;g=function(r){return r<<k>>>k}}var q=b.includes("unsigned");V(a,{name:b,fromWireType:g,toWireType:function(r,
t){if("number"!==typeof t&&"boolean"!==typeof t)throw new TypeError('Cannot convert "'+yb(t)+'" to '+this.name);if(t<d||t>f)throw new TypeError('Passing a number "'+yb(t)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return q?t>>>0:t|0},argPackAdvance:8,readValueFromPointer:Kb(b,l,0!==d),Da:null})},c:function(a,b,c){function d(g){g>>=2;var l=B();return new f(n,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,
Uint32Array,Float32Array,Float64Array][b];c=W(c);V(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{pb:!0})},p:function(a,b){b=W(b);var c="std::string"===b;V(a,{name:b,fromWireType:function(d){var f=B()[d>>2];if(c)for(var g=d+4,l=0;l<=f;++l){var k=d+4+l;if(l==f||0==v()[k]){g=L(g,k-g);if(void 0===q)var q=g;else q+=String.fromCharCode(0),q+=g;g=k+1}}else{q=Array(f);for(l=0;l<f;++l)q[l]=String.fromCharCode(v()[d+4+l]);q=q.join("")}S(d);return q},toWireType:function(d,f){f instanceof
ArrayBuffer&&(f=new Uint8Array(f));var g="string"===typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||X("Cannot pass non-string to std::string");var l=(c&&g?function(){return xa(f)}:function(){return f.length})(),k=Q(4+l+1);B()[k>>2]=l;if(c&&g)wa(f,k+4,l+1);else if(g)for(g=0;g<l;++g){var q=f.charCodeAt(g);255<q&&(S(k),X("String has UTF-16 code units that do not fit in 8 bits"));v()[k+4+g]=q}else for(g=0;g<l;++g)v()[k+4+g]=f[g];null!==d&&d.push(S,k);return k},
argPackAdvance:8,readValueFromPointer:lb,Da:function(d){S(d)}})},k:function(a,b,c){c=W(c);if(2===b){var d=ya;var f=za;var g=Aa;var l=function(){return ea()};var k=1}else 4===b&&(d=Ba,f=Ca,g=Da,l=function(){return B()},k=2);V(a,{name:c,fromWireType:function(q){for(var r=B()[q>>2],t=l(),w,C=q+4,h=0;h<=r;++h){var p=q+4+h*b;if(h==r||0==t[p>>k])C=d(C,p-C),void 0===w?w=C:(w+=String.fromCharCode(0),w+=C),C=p+b}S(q);return w},toWireType:function(q,r){"string"!==typeof r&&X("Cannot pass non-string to C++ string type "+
c);var t=g(r),w=Q(4+t+b);B()[w>>2]=t>>k;f(r,w+4,t+b);null!==q&&q.push(S,w);return w},argPackAdvance:8,readValueFromPointer:lb,Da:function(q){S(q)}})},t:function(a,b,c,d,f,g){jb[a]={name:W(b),wb:Fb(c,d),xb:Fb(f,g),bb:[]}},f:function(a,b,c,d,f,g,l,k,q,r){jb[a].bb.push({kb:W(b),ob:c,mb:Fb(d,f),nb:g,Ib:l,Hb:Fb(k,q),Jb:r})},R:function(a,b){b=W(b);V(a,{$b:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},I:function(a,b){if(a==b)postMessage({cmd:"processQueuedMainThreadWork"});
else if(G)postMessage({targetThread:a,cmd:"processThreadQueue"});else{a=(a=P.Ba[a])&&a.worker;if(!a)return;a.postMessage({cmd:"processThreadQueue"})}return 1},i:wb,U:function(a){if(0===a)return xb(Mb());var b=Lb[a];a=void 0===b?W(a):b;return xb(Mb()[a])},T:function(a){4<a&&(Y[a].Wa+=1)},u:function(a,b,c,d){a||X("Cannot use deleted val. handle = "+a);a=Y[a].value;var f=Ob[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var l="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";
for(g=0;g<b;++g)l+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(Nb,D,xb);Ob[b]=f}return f(a,c,d)},b:function(){K()},n:function(a,b,c){Pb.length=0;var d;for(c>>=2;d=v()[b++];)(d=105>d)&&c&1&&c++,
Pb.push(d?ja()[c++>>1]:A()[c]),++c;return Qa[a].apply(null,Pb)},E:function(){},m:function(){},h:Qb,g:Sa,j:fb,z:function(a,b,c){v().copyWithin(a,b,b+c)},D:function(){return navigator.hardwareConcurrency},F:function(a,b,c){Ub.length=b;c>>=3;for(var d=0;d<b;d++)Ub[d]=ja()[c+d];return(0>a?Qa[-a-1]:Cc[a]).apply(null,Ub)},A:function(a){var b=v().length;a>>>=0;if(a<=b||2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,d);0<d%65536&&(d+=65536-d%65536);a:{try{m.grow(Math.min(2147483648,
d)-n.byteLength+65535>>>16);u(m.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},G:function(a,b,c){return Wb(a)?Xb(a,b,c):Zb(a,b,c)},l:function(){},H:function(a,b){b>>=2;var c=A()[b+6];b={alpha:!!A()[b],depth:!!A()[b+1],stencil:!!A()[b+2],antialias:!!A()[b+3],premultipliedAlpha:!!A()[b+4],preserveDrawingBuffer:!!A()[b+5],powerPreference:gc[c],failIfMajorPerformanceCaveat:!!A()[b+7],vb:A()[b+8],ac:A()[b+9],ab:A()[b+10],jb:A()[b+11],dc:A()[b+12],ec:A()[b+13]};a=Wb(a);return!a||b.jb?
0:cc(a,b)},L:lc,M:mc,N:nc,v:oc,O:pc,y:function(){P.tb()},a:m||D.wasmMemory,S:function(a,b,c,d){if("undefined"===typeof SharedArrayBuffer)return J("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!a)return J("pthread_create called with a null thread pointer!"),28;var f=[];if(G&&0===f.length)return Dc(687865856,a,b,c,d);var g=0,l=0;if(b&&-1!=b){var k=A()[b>>2];k+=81920;g=A()[b+8>>2];l=0!==A()[b+12>>2]}else k=2097152;(b=0==g)?g=Ec(16,k):(g-=k,0<g||K("Assertion failed: undefined"));
for(var q=Q(228),r=0;57>r;++r)B()[(q>>2)+r]=0;A()[a>>2]=q;A()[q+12>>2]=q;a=q+152;A()[a>>2]=a;c={Fa:g,Ga:k,Ua:b,$a:l,Kb:c,Pa:q,Ia:d,Tb:f};return G?(c.Vb="spawnThread",postMessage(c,f),0):$a(c)},C:function(a,b){return rc(a,b)},x:function(){},K:function(a,b,c,d){return yc(a,b,c,d)}};
(function(){function a(f,g){D.asm=f.exports;M=D.asm.Z;Ia.unshift(D.asm.V);P.Ya.push(D.asm.Y);sa=g;if(!G){var l=P.za.length;P.za.forEach(function(k){P.eb(k,function(){if(!--l&&(N--,D.monitorRunDependencies&&D.monitorRunDependencies(N),0==N&&(null!==La&&(clearInterval(La),La=null),Ma))){var q=Ma;Ma=null;q()}})})}}function b(f){a(f.instance,f.module)}function c(f){return Oa().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){J("failed to asynchronously prepare wasm: "+g);K(g)})}
var d={a:Fc};G||(!G||K("Assertion failed: addRunDependency cannot be used in a pthread worker"),N++,D.monitorRunDependencies&&D.monitorRunDependencies(N));if(D.instantiateWasm)try{return D.instantiateWasm(d,a)}catch(f){return J("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return ra||"function"!==typeof WebAssembly.instantiateStreaming||O.startsWith("data:application/octet-stream;base64,")||"function"!==typeof fetch?c(b):fetch(O,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,
d).then(b,function(g){J("wasm streaming compile failed: "+g);J("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ma);return{}})();D.___wasm_call_ctors=function(){return(D.___wasm_call_ctors=D.asm.V).apply(null,arguments)};var Q=D._malloc=function(){return(Q=D._malloc=D.asm.W).apply(null,arguments)},S=D._free=function(){return(S=D._free=D.asm.X).apply(null,arguments)};D._emscripten_tls_init=function(){return(D._emscripten_tls_init=D.asm.Y).apply(null,arguments)};
var Ib=D.___getTypeName=function(){return(Ib=D.___getTypeName=D.asm._).apply(null,arguments)};D.___embind_register_native_and_builtin_types=function(){return(D.___embind_register_native_and_builtin_types=D.asm.$).apply(null,arguments)};D._emscripten_current_thread_process_queued_calls=function(){return(D._emscripten_current_thread_process_queued_calls=D.asm.aa).apply(null,arguments)};
var Wa=D._emscripten_register_main_browser_thread_id=function(){return(Wa=D._emscripten_register_main_browser_thread_id=D.asm.ba).apply(null,arguments)},sc=D._emscripten_main_browser_thread_id=function(){return(sc=D._emscripten_main_browser_thread_id=D.asm.ca).apply(null,arguments)},Pa=D.__emscripten_do_dispatch_to_thread=function(){return(Pa=D.__emscripten_do_dispatch_to_thread=D.asm.da).apply(null,arguments)},Dc=D._emscripten_sync_run_in_main_thread_4=function(){return(Dc=D._emscripten_sync_run_in_main_thread_4=
D.asm.ea).apply(null,arguments)},Za=D._emscripten_main_thread_process_queued_calls=function(){return(Za=D._emscripten_main_thread_process_queued_calls=D.asm.fa).apply(null,arguments)},Tb=D._emscripten_run_in_main_runtime_thread_js=function(){return(Tb=D._emscripten_run_in_main_runtime_thread_js=D.asm.ga).apply(null,arguments)},Yb=D.__emscripten_call_on_thread=function(){return(Yb=D.__emscripten_call_on_thread=D.asm.ha).apply(null,arguments)},Va=D.__emscripten_thread_init=function(){return(Va=D.__emscripten_thread_init=
D.asm.ia).apply(null,arguments)},R=D._pthread_self=function(){return(R=D._pthread_self=D.asm.ja).apply(null,arguments)},Xa=D.___pthread_tsd_run_dtors=function(){return(Xa=D.___pthread_tsd_run_dtors=D.asm.ka).apply(null,arguments)},qc=D._emscripten_get_global_libc=function(){return(qc=D._emscripten_get_global_libc=D.asm.la).apply(null,arguments)},Rb=D.stackSave=function(){return(Rb=D.stackSave=D.asm.ma).apply(null,arguments)},db=D.stackRestore=function(){return(db=D.stackRestore=D.asm.na).apply(null,
arguments)},Sb=D.stackAlloc=function(){return(Sb=D.stackAlloc=D.asm.oa).apply(null,arguments)},cb=D._emscripten_stack_set_limits=function(){return(cb=D._emscripten_stack_set_limits=D.asm.pa).apply(null,arguments)},Ec=D._memalign=function(){return(Ec=D._memalign=D.asm.qa).apply(null,arguments)};D.dynCall_viijii=function(){return(D.dynCall_viijii=D.asm.ra).apply(null,arguments)};D.dynCall_iiji=function(){return(D.dynCall_iiji=D.asm.sa).apply(null,arguments)};
D.dynCall_jiji=function(){return(D.dynCall_jiji=D.asm.ta).apply(null,arguments)};D.dynCall_iiiiij=function(){return(D.dynCall_iiiiij=D.asm.ua).apply(null,arguments)};D.dynCall_iiiiijj=function(){return(D.dynCall_iiiiijj=D.asm.va).apply(null,arguments)};D.dynCall_iiiiiijj=function(){return(D.dynCall_iiiiiijj=D.asm.wa).apply(null,arguments)};var Ya=D.__emscripten_allow_main_runtime_queued_calls=59656,Ta=D.__emscripten_main_thread_futex=72492;D.PThread=P;D.PThread=P;D.wasmMemory=m;D.ExitStatus=ab;var Gc;
function ab(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Ma=function Hc(){Gc||Ic();Gc||(Ma=Hc)};
function Ic(){function a(){if(!Gc&&(Gc=!0,D.calledRun=!0,!ta)){G||Ra(Ia);la(D);if(D.onRuntimeInitialized)D.onRuntimeInitialized();if(!G){if(D.postRun)for("function"==typeof D.postRun&&(D.postRun=[D.postRun]);D.postRun.length;){var b=D.postRun.shift();Ja.unshift(b)}Ra(Ja)}}}if(!(0<N))if(G)la(D),G||Ra(Ia),postMessage({cmd:"loaded"});else{if(!G){if(D.preRun)for("function"==typeof D.preRun&&(D.preRun=[D.preRun]);D.preRun.length;)Ka();Ra(Ha)}0<N||(D.setStatus?(D.setStatus("Running..."),setTimeout(function(){setTimeout(function(){D.setStatus("")},
1);a()},1)):a())}}D.run=Ic;if(D.preInit)for("function"==typeof D.preInit&&(D.preInit=[D.preInit]);0<D.preInit.length;)D.preInit.pop()();G&&(noExitRuntime=!1,P.ub());Ic();
return Module.ready
}
);
})();
export default Module;

Binary file not shown.

View File

@@ -1 +0,0 @@
"use strict";var Module={};var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};function moduleLoaded(){}self.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;(e.data.urlOrBlob?import(e.data.urlOrBlob):import("./jxl_enc_mt_simd.js")).then(function(exports){return exports.default(Module)}).then(function(instance){Module=instance;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,/*isMainBrowserThread=*/0,/*isMainRuntimeThread=*/0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();if(!initializedJS){Module["___embind_register_native_and_builtin_types"]();initializedJS=true}try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["PThread"].threadExit(result)}}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}};

View File

@@ -1,70 +0,0 @@
var Module = (function() {
var _scriptDir = import.meta.url;
return (
function(Module) {
Module = Module || {};
var g;g||(g=typeof Module !== 'undefined' ? Module : {});var aa,ba;g.ready=new Promise(function(a,b){aa=a;ba=b});var t={},w;for(w in g)g.hasOwnProperty(w)&&(t[w]=g[w]);var ca="./this.program",da,ea,fa,ha;da=function(a){fa||(fa=require("fs"));ha||(ha=require("path"));a=ha.normalize(a);return fa.readFileSync(a,null)};ea=function(a){a=da(a);a.buffer||(a=new Uint8Array(a));a.buffer||y("Assertion failed: undefined");return a};1<process.argv.length&&(ca=process.argv[1].replace(/\\/g,"/"));
process.argv.slice(2);process.on("uncaughtException",function(a){throw a;});process.on("unhandledRejection",y);g.inspect=function(){return"[Emscripten Module object]"};var ia=g.print||console.log.bind(console),z=g.printErr||console.warn.bind(console);for(w in t)t.hasOwnProperty(w)&&(g[w]=t[w]);t=null;g.thisProgram&&(ca=g.thisProgram);var A;g.wasmBinary&&(A=g.wasmBinary);var noExitRuntime=g.noExitRuntime||!0;"object"!==typeof WebAssembly&&y("no native wasm support detected");var ja,ka=!1,la=new TextDecoder("utf8");
function ma(a,b){if(!a)return"";b=a+b;for(var c=a;!(c>=b)&&C[c];)++c;return la.decode(C.subarray(a,c))}
function na(a,b,c,d){if(0<d){d=c+d-1;for(var h=0;h<a.length;++h){var f=a.charCodeAt(h);if(55296<=f&&57343>=f){var n=a.charCodeAt(++h);f=65536+((f&1023)<<10)|n&1023}if(127>=f){if(c>=d)break;b[c++]=f}else{if(2047>=f){if(c+1>=d)break;b[c++]=192|f>>6}else{if(65535>=f){if(c+2>=d)break;b[c++]=224|f>>12}else{if(c+3>=d)break;b[c++]=240|f>>18;b[c++]=128|f>>12&63}b[c++]=128|f>>6&63}b[c++]=128|f&63}}b[c]=0}}
function oa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}var pa=new TextDecoder("utf-16le");function qa(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&D[c];)++c;return pa.decode(C.subarray(a,c<<1))}function ra(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var h=0;h<c;++h)E[b>>1]=a.charCodeAt(h),b+=2;E[b>>1]=0;return b-d}
function sa(a){return 2*a.length}function ta(a,b){for(var c=0,d="";!(c>=b/4);){var h=F[a+4*c>>2];if(0==h)break;++c;65536<=h?(h-=65536,d+=String.fromCharCode(55296|h>>10,56320|h&1023)):d+=String.fromCharCode(h)}return d}function ua(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var h=0;h<a.length;++h){var f=a.charCodeAt(h);if(55296<=f&&57343>=f){var n=a.charCodeAt(++h);f=65536+((f&1023)<<10)|n&1023}F[b>>2]=f;b+=4;if(b+4>c)break}F[b>>2]=0;return b-d}
function va(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var wa,G,C,E,D,F,H,xa,ya;function za(){var a=ja.buffer;wa=a;g.HEAP8=G=new Int8Array(a);g.HEAP16=E=new Int16Array(a);g.HEAP32=F=new Int32Array(a);g.HEAPU8=C=new Uint8Array(a);g.HEAPU16=D=new Uint16Array(a);g.HEAPU32=H=new Uint32Array(a);g.HEAPF32=xa=new Float32Array(a);g.HEAPF64=ya=new Float64Array(a)}var I,Aa=[],Ba=[],Ca=[];function Da(){var a=g.preRun.shift();Aa.unshift(a)}
var J=0,Ea=null,K=null;g.preloadedImages={};g.preloadedAudios={};function y(a){if(g.onAbort)g.onAbort(a);z(a);ka=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ba(a);throw a;}var L=(new URL("jxl_node_enc.wasm",import.meta.url)).toString();
function Fa(){return Promise.resolve().then(function(){a:{try{if(L==L&&A){var a=new Uint8Array(A);break a}if(ea){a=ea(L);break a}throw"both async and sync fetching of the wasm failed";}catch(b){y(b)}a=void 0}return a})}function Ga(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(g);else{var c=b.ya;"number"===typeof c?void 0===b.$?I.get(c)():I.get(c)(b.$):c(void 0===b.$?null:b.$)}}}
function Ha(a){this.V=a-16;this.qa=function(b){F[this.V+8>>2]=b};this.na=function(b){F[this.V+0>>2]=b};this.oa=function(){F[this.V+4>>2]=0};this.ma=function(){G[this.V+12>>0]=0};this.pa=function(){G[this.V+13>>0]=0};this.ja=function(b,c){this.qa(b);this.na(c);this.oa();this.ma();this.pa()}}var Ia=0,M={};function Ja(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function N(a){return this.fromWireType(H[a>>2])}var O={},P={},Q={};
function Ka(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function La(a,b){a=Ka(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}
function Ma(a){var b=Error,c=La(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Na=void 0;
function Oa(a,b,c){function d(m){m=c(m);if(m.length!==a.length)throw new Na("Mismatched type converter count");for(var k=0;k<a.length;++k)R(a[k],m[k])}a.forEach(function(m){Q[m]=b});var h=Array(b.length),f=[],n=0;b.forEach(function(m,k){P.hasOwnProperty(m)?h[k]=P[m]:(f.push(m),O.hasOwnProperty(m)||(O[m]=[]),O[m].push(function(){h[k]=P[m];++n;n===f.length&&d(h)}))});0===f.length&&d(h)}
function Pa(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var Qa=void 0;function T(a){for(var b="";C[a];)b+=Qa[C[a++]];return b}var Ra=void 0;function U(a){throw new Ra(a);}
function R(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||U('type "'+d+'" must have a positive integer typeid pointer');if(P.hasOwnProperty(a)){if(c.ia)return;U("Cannot register type '"+d+"' twice")}P[a]=b;delete Q[a];O.hasOwnProperty(a)&&(b=O[a],delete O[a],b.forEach(function(h){h()}))}var Sa=[],V=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Ta(a){4<a&&0===--V[a].aa&&(V[a]=void 0,Sa.push(a))}function W(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Sa.length?Sa.pop():V.length;V[b]={aa:1,value:a};return b}}function Ua(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Va(a,b){switch(b){case 2:return function(c){return this.fromWireType(xa[c>>2])};case 3:return function(c){return this.fromWireType(ya[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Wa(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=La(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Xa(a,b){var c=g;if(void 0===c[a].S){var d=c[a];c[a]=function(){c[a].S.hasOwnProperty(arguments.length)||U("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].S+")!");return c[a].S[arguments.length].apply(this,arguments)};c[a].S=[];c[a].S[d.da]=d}}
function Ya(a,b,c){g.hasOwnProperty(a)?((void 0===c||void 0!==g[a].S&&void 0!==g[a].S[c])&&U("Cannot register public name '"+a+"' twice"),Xa(a,a),g.hasOwnProperty(c)&&U("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),g[a].S[c]=b):(g[a]=b,void 0!==c&&(g[a].Aa=c))}function Za(a,b){for(var c=[],d=0;d<a;d++)c.push(F[(b>>2)+d]);return c}
function $a(a,b){var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];a.includes("j")?(d=g["dynCall_"+a],d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)):d=I.get(b).apply(null,c);return d}}function X(a,b){a=T(a);var c=a.includes("j")?$a(a,b):I.get(b);"function"!==typeof c&&U("unknown function pointer with signature "+a+": "+b);return c}var ab=void 0;function bb(a){a=cb(a);var b=T(a);Y(a);return b}
function db(a,b){function c(f){h[f]||P[f]||(Q[f]?Q[f].forEach(c):(d.push(f),h[f]=!0))}var d=[],h={};b.forEach(c);throw new ab(a+": "+d.map(bb).join([", "]));}function eb(a,b,c){switch(b){case 0:return c?function(d){return G[d]}:function(d){return C[d]};case 1:return c?function(d){return E[d>>1]}:function(d){return D[d>>1]};case 2:return c?function(d){return F[d>>2]}:function(d){return H[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var fb={};
function gb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function hb(a,b){var c=P[a];void 0===c&&U(b+" has unknown type "+bb(a));return c}var ib={},jb={};function kb(){if(!lb){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ca||"./this.program"},b;for(b in jb)a[b]=jb[b];var c=[];for(b in a)c.push(b+"="+a[b]);lb=c}return lb}
var lb,mb=[null,[],[]];function Z(a){return 0===a%4&&(0!==a%100||0===a%400)}function nb(a,b){for(var c=0,d=0;d<=b;c+=a[d++]);return c}var ob=[31,29,31,30,31,30,31,31,30,31,30,31],pb=[31,28,31,30,31,30,31,31,30,31,30,31];function qb(a,b){for(a=new Date(a.getTime());0<b;){var c=a.getMonth(),d=(Z(a.getFullYear())?ob:pb)[c];if(b>d-a.getDate())b-=d-a.getDate()+1,a.setDate(1),11>c?a.setMonth(c+1):(a.setMonth(0),a.setFullYear(a.getFullYear()+1));else{a.setDate(a.getDate()+b);break}}return a}
function rb(a,b,c,d){function h(e,l,u){for(e="number"===typeof e?e.toString():e||"";e.length<l;)e=u[0]+e;return e}function f(e,l){return h(e,l,"0")}function n(e,l){function u(B){return 0>B?-1:0<B?1:0}var v;0===(v=u(e.getFullYear()-l.getFullYear()))&&0===(v=u(e.getMonth()-l.getMonth()))&&(v=u(e.getDate()-l.getDate()));return v}function m(e){switch(e.getDay()){case 0:return new Date(e.getFullYear()-1,11,29);case 1:return e;case 2:return new Date(e.getFullYear(),0,3);case 3:return new Date(e.getFullYear(),
0,2);case 4:return new Date(e.getFullYear(),0,1);case 5:return new Date(e.getFullYear()-1,11,31);case 6:return new Date(e.getFullYear()-1,11,30)}}function k(e){e=qb(new Date(e.R+1900,0,1),e.Z);var l=new Date(e.getFullYear()+1,0,4),u=m(new Date(e.getFullYear(),0,4));l=m(l);return 0>=n(u,e)?0>=n(l,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}var q=F[d+40>>2];d={wa:F[d>>2],va:F[d+4>>2],X:F[d+8>>2],W:F[d+12>>2],U:F[d+16>>2],R:F[d+20>>2],Y:F[d+24>>2],Z:F[d+28>>2],Ba:F[d+32>>2],ua:F[d+36>>2],
xa:q?ma(q):""};c=ma(c);q={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var p in q)c=c.replace(new RegExp(p,"g"),q[p]);var r="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
x="January February March April May June July August September October November December".split(" ");q={"%a":function(e){return r[e.Y].substring(0,3)},"%A":function(e){return r[e.Y]},"%b":function(e){return x[e.U].substring(0,3)},"%B":function(e){return x[e.U]},"%C":function(e){return f((e.R+1900)/100|0,2)},"%d":function(e){return f(e.W,2)},"%e":function(e){return h(e.W,2," ")},"%g":function(e){return k(e).toString().substring(2)},"%G":function(e){return k(e)},"%H":function(e){return f(e.X,2)},"%I":function(e){e=
e.X;0==e?e=12:12<e&&(e-=12);return f(e,2)},"%j":function(e){return f(e.W+nb(Z(e.R+1900)?ob:pb,e.U-1),3)},"%m":function(e){return f(e.U+1,2)},"%M":function(e){return f(e.va,2)},"%n":function(){return"\n"},"%p":function(e){return 0<=e.X&&12>e.X?"AM":"PM"},"%S":function(e){return f(e.wa,2)},"%t":function(){return"\t"},"%u":function(e){return e.Y||7},"%U":function(e){var l=new Date(e.R+1900,0,1),u=0===l.getDay()?l:qb(l,7-l.getDay());e=new Date(e.R+1900,e.U,e.W);return 0>n(u,e)?f(Math.ceil((31-u.getDate()+
(nb(Z(e.getFullYear())?ob:pb,e.getMonth()-1)-31)+e.getDate())/7),2):0===n(u,l)?"01":"00"},"%V":function(e){var l=new Date(e.R+1901,0,4),u=m(new Date(e.R+1900,0,4));l=m(l);var v=qb(new Date(e.R+1900,0,1),e.Z);return 0>n(v,u)?"53":0>=n(l,v)?"01":f(Math.ceil((u.getFullYear()<e.R+1900?e.Z+32-u.getDate():e.Z+1-u.getDate())/7),2)},"%w":function(e){return e.Y},"%W":function(e){var l=new Date(e.R,0,1),u=1===l.getDay()?l:qb(l,0===l.getDay()?1:7-l.getDay()+1);e=new Date(e.R+1900,e.U,e.W);return 0>n(u,e)?f(Math.ceil((31-
u.getDate()+(nb(Z(e.getFullYear())?ob:pb,e.getMonth()-1)-31)+e.getDate())/7),2):0===n(u,l)?"01":"00"},"%y":function(e){return(e.R+1900).toString().substring(2)},"%Y":function(e){return e.R+1900},"%z":function(e){e=e.ua;var l=0<=e;e=Math.abs(e)/60;return(l?"+":"-")+String("0000"+(e/60*100+e%60)).slice(-4)},"%Z":function(e){return e.xa},"%%":function(){return"%"}};for(p in q)c.includes(p)&&(c=c.replace(new RegExp(p,"g"),q[p](d)));p=sb(c);if(p.length>b)return 0;G.set(p,a);return p.length-1}
Na=g.InternalError=Ma("InternalError");for(var tb=Array(256),ub=0;256>ub;++ub)tb[ub]=String.fromCharCode(ub);Qa=tb;Ra=g.BindingError=Ma("BindingError");g.count_emval_handles=function(){for(var a=0,b=5;b<V.length;++b)void 0!==V[b]&&++a;return a};g.get_first_emval=function(){for(var a=5;a<V.length;++a)if(void 0!==V[a])return V[a];return null};ab=g.UnboundTypeError=Ma("UnboundTypeError");function sb(a){var b=Array(oa(a)+1);na(a,b,0,b.length);return b}
var wb={o:function(a){return vb(a+16)+16},D:function(){},n:function(a,b,c){(new Ha(a)).ja(b,c);Ia++;throw a;},k:function(a){var b=M[a];delete M[a];var c=b.ka,d=b.la,h=b.ba,f=h.map(function(n){return n.ha}).concat(h.map(function(n){return n.sa}));Oa([a],f,function(n){var m={};h.forEach(function(k,q){var p=n[q],r=k.fa,x=k.ga,e=n[q+h.length],l=k.ra,u=k.ta;m[k.ea]={read:function(v){return p.fromWireType(r(x,v))},write:function(v,B){var S=[];l(u,v,e.toWireType(S,B));Ja(S)}}});return[{name:b.name,fromWireType:function(k){var q=
{},p;for(p in m)q[p]=m[p].read(k);d(k);return q},toWireType:function(k,q){for(var p in m)if(!(p in q))throw new TypeError('Missing field: "'+p+'"');var r=c();for(p in m)m[p].write(r,q[p]);null!==k&&k.push(d,r);return r},argPackAdvance:8,readValueFromPointer:N,T:d}]})},q:function(){},z:function(a,b,c,d,h){var f=Pa(c);b=T(b);R(a,{name:b,fromWireType:function(n){return!!n},toWireType:function(n,m){return m?d:h},argPackAdvance:8,readValueFromPointer:function(n){if(1===c)var m=G;else if(2===c)m=E;else if(4===
c)m=F;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(m[n>>f])},T:null})},y:function(a,b){b=T(b);R(a,{name:b,fromWireType:function(c){var d=V[c].value;Ta(c);return d},toWireType:function(c,d){return W(d)},argPackAdvance:8,readValueFromPointer:N,T:null})},h:function(a,b,c){c=Pa(c);b=T(b);R(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,h){if("number"!==typeof h&&"boolean"!==typeof h)throw new TypeError('Cannot convert "'+Ua(h)+'" to '+this.name);
return h},argPackAdvance:8,readValueFromPointer:Va(b,c),T:null})},j:function(a,b,c,d,h,f){var n=Za(b,c);a=T(a);h=X(d,h);Ya(a,function(){db("Cannot call "+a+" due to unbound types",n)},b-1);Oa([],n,function(m){var k=[m[0],null].concat(m.slice(1)),q=m=a,p=h,r=k.length;2>r&&U("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==k[1]&&!1,e=!1,l=1;l<k.length;++l)if(null!==k[l]&&void 0===k[l].T){e=!0;break}var u="void"!==k[0].name,v="",B="";for(l=0;l<r-2;++l)v+=
(0!==l?", ":"")+"arg"+l,B+=(0!==l?", ":"")+"arg"+l+"Wired";q="return function "+Ka(q)+"("+v+") {\nif (arguments.length !== "+(r-2)+") {\nthrowBindingError('function "+q+" called with ' + arguments.length + ' arguments, expected "+(r-2)+" args!');\n}\n";e&&(q+="var destructors = [];\n");var S=e?"destructors":"null";v="throwBindingError invoker fn runDestructors retType classParam".split(" ");p=[U,p,f,Ja,k[0],k[1]];x&&(q+="var thisWired = classParam.toWireType("+S+", this);\n");for(l=0;l<r-2;++l)q+=
"var arg"+l+"Wired = argType"+l+".toWireType("+S+", arg"+l+"); // "+k[l+2].name+"\n",v.push("argType"+l),p.push(k[l+2]);x&&(B="thisWired"+(0<B.length?", ":"")+B);q+=(u?"var rv = ":"")+"invoker(fn"+(0<B.length?", ":"")+B+");\n";if(e)q+="runDestructors(destructors);\n";else for(l=x?1:2;l<k.length;++l)r=1===l?"thisWired":"arg"+(l-2)+"Wired",null!==k[l].T&&(q+=r+"_dtor("+r+"); // "+k[l].name+"\n",v.push(r+"_dtor"),p.push(k[l].T));u&&(q+="var ret = retType.fromWireType(rv);\nreturn ret;\n");v.push(q+"}\n");
k=Wa(v).apply(null,p);l=b-1;if(!g.hasOwnProperty(m))throw new Na("Replacing nonexistant public symbol");void 0!==g[m].S&&void 0!==l?g[m].S[l]=k:(g[m]=k,g[m].da=l);return[]})},c:function(a,b,c,d,h){function f(q){return q}b=T(b);-1===h&&(h=4294967295);var n=Pa(c);if(0===d){var m=32-8*c;f=function(q){return q<<m>>>m}}var k=b.includes("unsigned");R(a,{name:b,fromWireType:f,toWireType:function(q,p){if("number"!==typeof p&&"boolean"!==typeof p)throw new TypeError('Cannot convert "'+Ua(p)+'" to '+this.name);
if(p<d||p>h)throw new TypeError('Passing a number "'+Ua(p)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+h+"]!");return k?p>>>0:p|0},argPackAdvance:8,readValueFromPointer:eb(b,n,0!==d),T:null})},b:function(a,b,c){function d(f){f>>=2;var n=H;return new h(wa,n[f+1],n[f])}var h=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=T(c);R(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},
{ia:!0})},i:function(a,b){b=T(b);var c="std::string"===b;R(a,{name:b,fromWireType:function(d){var h=H[d>>2];if(c)for(var f=d+4,n=0;n<=h;++n){var m=d+4+n;if(n==h||0==C[m]){f=ma(f,m-f);if(void 0===k)var k=f;else k+=String.fromCharCode(0),k+=f;f=m+1}}else{k=Array(h);for(n=0;n<h;++n)k[n]=String.fromCharCode(C[d+4+n]);k=k.join("")}Y(d);return k},toWireType:function(d,h){h instanceof ArrayBuffer&&(h=new Uint8Array(h));var f="string"===typeof h;f||h instanceof Uint8Array||h instanceof Uint8ClampedArray||
h instanceof Int8Array||U("Cannot pass non-string to std::string");var n=(c&&f?function(){return oa(h)}:function(){return h.length})(),m=vb(4+n+1);H[m>>2]=n;if(c&&f)na(h,C,m+4,n+1);else if(f)for(f=0;f<n;++f){var k=h.charCodeAt(f);255<k&&(Y(m),U("String has UTF-16 code units that do not fit in 8 bits"));C[m+4+f]=k}else for(f=0;f<n;++f)C[m+4+f]=h[f];null!==d&&d.push(Y,m);return m},argPackAdvance:8,readValueFromPointer:N,T:function(d){Y(d)}})},g:function(a,b,c){c=T(c);if(2===b){var d=qa;var h=ra;var f=
sa;var n=function(){return D};var m=1}else 4===b&&(d=ta,h=ua,f=va,n=function(){return H},m=2);R(a,{name:c,fromWireType:function(k){for(var q=H[k>>2],p=n(),r,x=k+4,e=0;e<=q;++e){var l=k+4+e*b;if(e==q||0==p[l>>m])x=d(x,l-x),void 0===r?r=x:(r+=String.fromCharCode(0),r+=x),x=l+b}Y(k);return r},toWireType:function(k,q){"string"!==typeof q&&U("Cannot pass non-string to C++ string type "+c);var p=f(q),r=vb(4+p+b);H[r>>2]=p>>m;h(q,r+4,p+b);null!==k&&k.push(Y,r);return r},argPackAdvance:8,readValueFromPointer:N,
T:function(k){Y(k)}})},l:function(a,b,c,d,h,f){M[a]={name:T(b),ka:X(c,d),la:X(h,f),ba:[]}},d:function(a,b,c,d,h,f,n,m,k,q){M[a].ba.push({ea:T(b),ha:c,fa:X(d,h),ga:f,sa:n,ra:X(m,k),ta:q})},A:function(a,b){b=T(b);R(a,{za:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},e:Ta,C:function(a){if(0===a)return W(gb());var b=fb[a];a=void 0===b?T(a):b;return W(gb()[a])},B:function(a){4<a&&(V[a].aa+=1)},m:function(a,b,c,d){a||U("Cannot use deleted val. handle = "+a);a=V[a].value;
var h=ib[b];if(!h){h="";for(var f=0;f<b;++f)h+=(0!==f?", ":"")+"arg"+f;var n="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(f=0;f<b;++f)n+="var argType"+f+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+f+'], "parameter '+f+'");\nvar arg'+f+" = argType"+f+".readValueFromPointer(args);\nargs += argType"+f+"['argPackAdvance'];\n";h=(new Function("requireRegisteredType","Module","__emval_register",n+("var obj = new constructor("+h+");\nreturn __emval_register(obj);\n}\n")))(hb,
g,W);ib[b]=h}return h(a,c,d)},a:function(){y()},s:function(a,b,c){C.copyWithin(a,b,b+c)},f:function(a){var b=C.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,d);0<d%65536&&(d+=65536-d%65536);a:{try{ja.grow(Math.min(2147483648,d)-wa.byteLength+65535>>>16);za();var h=1;break a}catch(f){}h=void 0}if(h)return!0}return!1},u:function(a,b){var c=0;kb().forEach(function(d,h){var f=b+c;h=F[a+4*h>>2]=f;for(f=0;f<d.length;++f)G[h++>>0]=d.charCodeAt(f);
G[h>>0]=0;c+=d.length+1});return 0},v:function(a,b){var c=kb();F[a>>2]=c.length;var d=0;c.forEach(function(h){d+=h.length+1});F[b>>2]=d;return 0},w:function(){return 0},p:function(){},x:function(a,b,c,d){for(var h=0,f=0;f<c;f++){for(var n=F[b+8*f>>2],m=F[b+(8*f+4)>>2],k=0;k<m;k++){var q=C[n+k],p=mb[a];if(0===q||10===q){q=1===a?ia:z;var r;for(r=0;p[r]&&!(NaN<=r);)++r;r=la.decode(p.subarray?p.subarray(0,r):new Uint8Array(p.slice(0,r)));q(r);p.length=0}else p.push(q)}h+=m}F[d>>2]=h;return 0},r:function(){},
t:function(a,b,c,d){return rb(a,b,c,d)}};
(function(){function a(h){g.asm=h.exports;ja=g.asm.E;za();I=g.asm.K;Ba.unshift(g.asm.F);J--;g.monitorRunDependencies&&g.monitorRunDependencies(J);0==J&&(null!==Ea&&(clearInterval(Ea),Ea=null),K&&(h=K,K=null,h()))}function b(h){a(h.instance)}function c(h){return Fa().then(function(f){return WebAssembly.instantiate(f,d)}).then(h,function(f){z("failed to asynchronously prepare wasm: "+f);y(f)})}var d={a:wb};J++;g.monitorRunDependencies&&g.monitorRunDependencies(J);if(g.instantiateWasm)try{return g.instantiateWasm(d,
a)}catch(h){return z("Module.instantiateWasm callback failed with error: "+h),!1}(function(){return A||"function"!==typeof WebAssembly.instantiateStreaming||L.startsWith("data:application/octet-stream;base64,")||"function"!==typeof fetch?c(b):fetch(L,{credentials:"same-origin"}).then(function(h){return WebAssembly.instantiateStreaming(h,d).then(b,function(f){z("wasm streaming compile failed: "+f);z("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ba);return{}})();
g.___wasm_call_ctors=function(){return(g.___wasm_call_ctors=g.asm.F).apply(null,arguments)};var vb=g._malloc=function(){return(vb=g._malloc=g.asm.G).apply(null,arguments)},Y=g._free=function(){return(Y=g._free=g.asm.H).apply(null,arguments)},cb=g.___getTypeName=function(){return(cb=g.___getTypeName=g.asm.I).apply(null,arguments)};g.___embind_register_native_and_builtin_types=function(){return(g.___embind_register_native_and_builtin_types=g.asm.J).apply(null,arguments)};
g.dynCall_viijii=function(){return(g.dynCall_viijii=g.asm.L).apply(null,arguments)};g.dynCall_iiji=function(){return(g.dynCall_iiji=g.asm.M).apply(null,arguments)};g.dynCall_jiji=function(){return(g.dynCall_jiji=g.asm.N).apply(null,arguments)};g.dynCall_iiiiij=function(){return(g.dynCall_iiiiij=g.asm.O).apply(null,arguments)};g.dynCall_iiiiijj=function(){return(g.dynCall_iiiiijj=g.asm.P).apply(null,arguments)};g.dynCall_iiiiiijj=function(){return(g.dynCall_iiiiiijj=g.asm.Q).apply(null,arguments)};
var xb;K=function yb(){xb||zb();xb||(K=yb)};
function zb(){function a(){if(!xb&&(xb=!0,g.calledRun=!0,!ka)){Ga(Ba);aa(g);if(g.onRuntimeInitialized)g.onRuntimeInitialized();if(g.postRun)for("function"==typeof g.postRun&&(g.postRun=[g.postRun]);g.postRun.length;){var b=g.postRun.shift();Ca.unshift(b)}Ga(Ca)}}if(!(0<J)){if(g.preRun)for("function"==typeof g.preRun&&(g.preRun=[g.preRun]);g.preRun.length;)Da();Ga(Aa);0<J||(g.setStatus?(g.setStatus("Running..."),setTimeout(function(){setTimeout(function(){g.setStatus("")},1);a()},1)):a())}}g.run=zb;
if(g.preInit)for("function"==typeof g.preInit&&(g.preInit=[g.preInit]);0<g.preInit.length;)g.preInit.pop()();zb();
return Module.ready
}
);
})();
export default Module;

Binary file not shown.

View File

@@ -1,57 +0,0 @@
#include <emscripten/bind.h>
#include <emscripten/val.h>
#include "config.h"
#include "jpeglib.h"
extern "C" {
#include "cdjpeg.h"
}
using namespace emscripten;
thread_local const val Uint8ClampedArray = val::global("Uint8ClampedArray");
thread_local const val ImageData = val::global("ImageData");
val decode(std::string image_in) {
uint8_t* image_buffer = (uint8_t*)image_in.c_str();
jpeg_decompress_struct cinfo;
jpeg_error_mgr jerr;
// Initialize the JPEG decompression object with default error handling.
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
jpeg_mem_src(&cinfo, image_buffer, image_in.length());
// Read file header, set default decompression parameters
jpeg_read_header(&cinfo, TRUE);
// Force RGBA decoding, even for grayscale images
cinfo.out_color_space = JCS_EXT_RGBA;
jpeg_start_decompress(&cinfo);
// Prepare output buffer
size_t output_size = cinfo.output_width * cinfo.output_height * 4;
std::vector<uint8_t> output_buffer(output_size);
auto stride = cinfo.output_width * 4;
// Process data
while (cinfo.output_scanline < cinfo.output_height) {
uint8_t* ptr = &output_buffer[stride * cinfo.output_scanline];
jpeg_read_scanlines(&cinfo, &ptr, 1);
}
jpeg_finish_decompress(&cinfo);
// Step 7: release JPEG compression object
auto data = Uint8ClampedArray.new_(typed_memory_view(output_size, &output_buffer[0]));
auto js_result = ImageData.new_(data, cinfo.output_width, cinfo.output_height);
// This is an important step since it will release a good deal of memory.
jpeg_destroy_decompress(&cinfo);
// And we're done!
return js_result;
}
EMSCRIPTEN_BINDINGS(my_module) {
function("decode", &decode);
}

View File

@@ -1,57 +0,0 @@
var Module = (function() {
var _scriptDir = import.meta.url;
return (
function(Module) {
Module = Module || {};
var e;e||(e=typeof Module !== 'undefined' ? Module : {});var aa,r;e.ready=new Promise(function(a,b){aa=a;r=b});var t={},u;for(u in e)e.hasOwnProperty(u)&&(t[u]=e[u]);var v="./this.program";function w(a,b){throw b;}var ba,y,ca,da;ba=function(a){ca||(ca=require("fs"));da||(da=require("path"));a=da.normalize(a);return ca.readFileSync(a,null)};y=function(a){a=ba(a);a.buffer||(a=new Uint8Array(a));a.buffer||z("Assertion failed: undefined");return a};
1<process.argv.length&&(v=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);process.on("uncaughtException",function(a){if(!(a instanceof ea))throw a;});process.on("unhandledRejection",z);w=function(a){process.exit(a)};e.inspect=function(){return"[Emscripten Module object]"};var fa=e.print||console.log.bind(console),A=e.printErr||console.warn.bind(console);for(u in t)t.hasOwnProperty(u)&&(e[u]=t[u]);t=null;e.thisProgram&&(v=e.thisProgram);e.quit&&(w=e.quit);var C;e.wasmBinary&&(C=e.wasmBinary);
var noExitRuntime=e.noExitRuntime||!0;"object"!==typeof WebAssembly&&z("no native wasm support detected");var ha,ia=!1,ja=new TextDecoder("utf8");
function ka(a,b,c){var d=D;if(0<c){c=b+c-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}if(127>=g){if(b>=c)break;d[b++]=g}else{if(2047>=g){if(b+1>=c)break;d[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;d[b++]=224|g>>12}else{if(b+3>=c)break;d[b++]=240|g>>18;d[b++]=128|g>>12&63}d[b++]=128|g>>6&63}d[b++]=128|g&63}}d[b]=0}}var la=new TextDecoder("utf-16le");
function ma(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&E[c];)++c;return la.decode(D.subarray(a,c<<1))}function na(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f<c;++f)G[b>>1]=a.charCodeAt(f),b+=2;G[b>>1]=0;return b-d}function oa(a){return 2*a.length}function pa(a,b){for(var c=0,d="";!(c>=b/4);){var f=H[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d}
function qa(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}H[b>>2]=g;b+=4;if(b+4>c)break}H[b>>2]=0;return b-d}function ra(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var sa,I,D,G,E,H,K,ta,ua;
function va(){var a=ha.buffer;sa=a;e.HEAP8=I=new Int8Array(a);e.HEAP16=G=new Int16Array(a);e.HEAP32=H=new Int32Array(a);e.HEAPU8=D=new Uint8Array(a);e.HEAPU16=E=new Uint16Array(a);e.HEAPU32=K=new Uint32Array(a);e.HEAPF32=ta=new Float32Array(a);e.HEAPF64=ua=new Float64Array(a)}var L,wa=[],xa=[],ya=[];function za(){var a=e.preRun.shift();wa.unshift(a)}var M=0,Aa=null,N=null;e.preloadedImages={};e.preloadedAudios={};
function z(a){if(e.onAbort)e.onAbort(a);A(a);ia=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");r(a);throw a;}var O=(new URL("mozjpeg_node_dec.wasm",import.meta.url)).toString();function Ba(){return Promise.resolve().then(function(){a:{try{if(O==O&&C){var a=new Uint8Array(C);break a}if(y){a=y(O);break a}throw"both async and sync fetching of the wasm failed";}catch(b){z(b)}a=void 0}return a})}
function Ca(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(e);else{var c=b.N;"number"===typeof c?void 0===b.J?L.get(c)():L.get(c)(b.J):c(void 0===b.J?null:b.J)}}}function Da(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var Ea=void 0;function P(a){for(var b="";D[a];)b+=Ea[D[a++]];return b}var Q={},R={},S={};
function Fa(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Ga(a,b){a=Fa(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}
function Ha(a){var b=Error,c=Ga(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Ia=void 0;function T(a){throw new Ia(a);}var Ja=void 0;
function Ka(a,b){function c(h){h=b(h);if(h.length!==d.length)throw new Ja("Mismatched type converter count");for(var k=0;k<d.length;++k)U(d[k],h[k])}var d=[];d.forEach(function(h){S[h]=a});var f=Array(a.length),g=[],l=0;a.forEach(function(h,k){R.hasOwnProperty(h)?f[k]=R[h]:(g.push(h),Q.hasOwnProperty(h)||(Q[h]=[]),Q[h].push(function(){f[k]=R[h];++l;l===g.length&&c(f)}))});0===g.length&&c(f)}
function U(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||T('type "'+d+'" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.M)return;T("Cannot register type '"+d+"' twice")}R[a]=b;delete S[a];Q.hasOwnProperty(a)&&(b=Q[a],delete Q[a],b.forEach(function(f){f()}))}var La=[],V=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Ma(a){4<a&&0===--V[a].K&&(V[a]=void 0,La.push(a))}function W(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=La.length?La.pop():V.length;V[b]={K:1,value:a};return b}}function Na(a){return this.fromWireType(K[a>>2])}function Qa(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Ra(a,b){switch(b){case 2:return function(c){return this.fromWireType(ta[c>>2])};case 3:return function(c){return this.fromWireType(ua[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Sa(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ga(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Ta(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Ua(a,b){var c=e;if(void 0===c[a].H){var d=c[a];c[a]=function(){c[a].H.hasOwnProperty(arguments.length)||T("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].H+")!");return c[a].H[arguments.length].apply(this,arguments)};c[a].H=[];c[a].H[d.L]=d}}
function Va(a,b,c){e.hasOwnProperty(a)?((void 0===c||void 0!==e[a].H&&void 0!==e[a].H[c])&&T("Cannot register public name '"+a+"' twice"),Ua(a,a),e.hasOwnProperty(c)&&T("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),e[a].H[c]=b):(e[a]=b,void 0!==c&&(e[a].P=c))}function Wa(a,b){for(var c=[],d=0;d<a;d++)c.push(H[(b>>2)+d]);return c}
function Xa(a,b){var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];a.includes("j")?(d=e["dynCall_"+a],d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)):d=L.get(b).apply(null,c);return d}}function Ya(a,b){a=P(a);var c=a.includes("j")?Xa(a,b):L.get(b);"function"!==typeof c&&T("unknown function pointer with signature "+a+": "+b);return c}var Za=void 0;function $a(a){a=ab(a);var b=P(a);X(a);return b}
function bb(a,b){function c(g){f[g]||R[g]||(S[g]?S[g].forEach(c):(d.push(g),f[g]=!0))}var d=[],f={};b.forEach(c);throw new Za(a+": "+d.map($a).join([", "]));}function cb(a,b,c){switch(b){case 0:return c?function(d){return I[d]}:function(d){return D[d]};case 1:return c?function(d){return G[d>>1]}:function(d){return E[d>>1]};case 2:return c?function(d){return H[d>>2]}:function(d){return K[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var db={};
function eb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function fb(a,b){var c=R[a];void 0===c&&T(b+" has unknown type "+$a(a));return c}var gb={},hb={};function ib(){if(!jb){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:v||"./this.program"},b;for(b in hb)a[b]=hb[b];var c=[];for(b in a)c.push(b+"="+a[b]);jb=c}return jb}
for(var jb,kb=[null,[],[]],lb=Array(256),Y=0;256>Y;++Y)lb[Y]=String.fromCharCode(Y);Ea=lb;Ia=e.BindingError=Ha("BindingError");Ja=e.InternalError=Ha("InternalError");e.count_emval_handles=function(){for(var a=0,b=5;b<V.length;++b)void 0!==V[b]&&++a;return a};e.get_first_emval=function(){for(var a=5;a<V.length;++a)if(void 0!==V[a])return V[a];return null};Za=e.UnboundTypeError=Ha("UnboundTypeError");
var nb={e:function(){},q:function(){},m:function(a,b,c,d,f){var g=Da(c);b=P(b);U(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,h){return h?d:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var h=I;else if(2===c)h=G;else if(4===c)h=H;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(h[l>>g])},I:null})},x:function(a,b){b=P(b);U(a,{name:b,fromWireType:function(c){var d=V[c].value;Ma(c);return d},toWireType:function(c,d){return W(d)},
argPackAdvance:8,readValueFromPointer:Na,I:null})},l:function(a,b,c){c=Da(c);b=P(b);U(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Qa(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Ra(b,c),I:null})},o:function(a,b,c,d,f,g){var l=Wa(b,c);a=P(a);f=Ya(d,f);Va(a,function(){bb("Cannot call "+a+" due to unbound types",l)},b-1);Ka(l,function(h){var k=[h[0],null].concat(h.slice(1)),
m=h=a,n=f,p=k.length;2>p&&T("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==k[1]&&!1,B=!1,q=1;q<k.length;++q)if(null!==k[q]&&void 0===k[q].I){B=!0;break}var Oa="void"!==k[0].name,F="",J="";for(q=0;q<p-2;++q)F+=(0!==q?", ":"")+"arg"+q,J+=(0!==q?", ":"")+"arg"+q+"Wired";m="return function "+Fa(m)+"("+F+") {\nif (arguments.length !== "+(p-2)+") {\nthrowBindingError('function "+m+" called with ' + arguments.length + ' arguments, expected "+(p-2)+" args!');\n}\n";
B&&(m+="var destructors = [];\n");var Pa=B?"destructors":"null";F="throwBindingError invoker fn runDestructors retType classParam".split(" ");n=[T,n,g,Ta,k[0],k[1]];x&&(m+="var thisWired = classParam.toWireType("+Pa+", this);\n");for(q=0;q<p-2;++q)m+="var arg"+q+"Wired = argType"+q+".toWireType("+Pa+", arg"+q+"); // "+k[q+2].name+"\n",F.push("argType"+q),n.push(k[q+2]);x&&(J="thisWired"+(0<J.length?", ":"")+J);m+=(Oa?"var rv = ":"")+"invoker(fn"+(0<J.length?", ":"")+J+");\n";if(B)m+="runDestructors(destructors);\n";
else for(q=x?1:2;q<k.length;++q)p=1===q?"thisWired":"arg"+(q-2)+"Wired",null!==k[q].I&&(m+=p+"_dtor("+p+"); // "+k[q].name+"\n",F.push(p+"_dtor"),n.push(k[q].I));Oa&&(m+="var ret = retType.fromWireType(rv);\nreturn ret;\n");F.push(m+"}\n");k=Sa(F).apply(null,n);q=b-1;if(!e.hasOwnProperty(h))throw new Ja("Replacing nonexistant public symbol");void 0!==e[h].H&&void 0!==q?e[h].H[q]=k:(e[h]=k,e[h].L=q);return[]})},b:function(a,b,c,d,f){function g(m){return m}b=P(b);-1===f&&(f=4294967295);var l=Da(c);
if(0===d){var h=32-8*c;g=function(m){return m<<h>>>h}}var k=b.includes("unsigned");U(a,{name:b,fromWireType:g,toWireType:function(m,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+Qa(n)+'" to '+this.name);if(n<d||n>f)throw new TypeError('Passing a number "'+Qa(n)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return k?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:cb(b,l,0!==d),I:null})},a:function(a,
b,c){function d(g){g>>=2;var l=K;return new f(sa,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);U(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{M:!0})},h:function(a,b){b=P(b);var c="std::string"===b;U(a,{name:b,fromWireType:function(d){var f=K[d>>2];if(c)for(var g=d+4,l=0;l<=f;++l){var h=d+4+l;if(l==f||0==D[h]){if(g){for(var k=g+(h-g),m=g;!(m>=k)&&D[m];)++m;g=ja.decode(D.subarray(g,m))}else g="";if(void 0===
n)var n=g;else n+=String.fromCharCode(0),n+=g;g=h+1}}else{n=Array(f);for(l=0;l<f;++l)n[l]=String.fromCharCode(D[d+4+l]);n=n.join("")}X(d);return n},toWireType:function(d,f){f instanceof ArrayBuffer&&(f=new Uint8Array(f));var g="string"===typeof f;g||f instanceof Uint8Array||f instanceof Uint8ClampedArray||f instanceof Int8Array||T("Cannot pass non-string to std::string");var l=(c&&g?function(){for(var m=0,n=0;n<f.length;++n){var p=f.charCodeAt(n);55296<=p&&57343>=p&&(p=65536+((p&1023)<<10)|f.charCodeAt(++n)&
1023);127>=p?++m:m=2047>=p?m+2:65535>=p?m+3:m+4}return m}:function(){return f.length})(),h=mb(4+l+1);K[h>>2]=l;if(c&&g)ka(f,h+4,l+1);else if(g)for(g=0;g<l;++g){var k=f.charCodeAt(g);255<k&&(X(h),T("String has UTF-16 code units that do not fit in 8 bits"));D[h+4+g]=k}else for(g=0;g<l;++g)D[h+4+g]=f[g];null!==d&&d.push(X,h);return h},argPackAdvance:8,readValueFromPointer:Na,I:function(d){X(d)}})},g:function(a,b,c){c=P(c);if(2===b){var d=ma;var f=na;var g=oa;var l=function(){return E};var h=1}else 4===
b&&(d=pa,f=qa,g=ra,l=function(){return K},h=2);U(a,{name:c,fromWireType:function(k){for(var m=K[k>>2],n=l(),p,x=k+4,B=0;B<=m;++B){var q=k+4+B*b;if(B==m||0==n[q>>h])x=d(x,q-x),void 0===p?p=x:(p+=String.fromCharCode(0),p+=x),x=q+b}X(k);return p},toWireType:function(k,m){"string"!==typeof m&&T("Cannot pass non-string to C++ string type "+c);var n=g(m),p=mb(4+n+b);K[p>>2]=n>>h;f(m,p+4,n+b);null!==k&&k.push(X,p);return p},argPackAdvance:8,readValueFromPointer:Na,I:function(k){X(k)}})},n:function(a,b){b=
P(b);U(a,{O:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},c:Ma,d:function(a){if(0===a)return W(eb());var b=db[a];a=void 0===b?P(a):b;return W(eb()[a])},i:function(a){4<a&&(V[a].K+=1)},j:function(a,b,c,d){a||T("Cannot use deleted val. handle = "+a);a=V[a].value;var f=gb[b];if(!f){f="";for(var g=0;g<b;++g)f+=(0!==g?", ":"")+"arg"+g;var l="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(g=0;g<b;++g)l+="var argType"+g+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+
g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(fb,e,W);gb[b]=f}return f(a,c,d)},k:function(){z()},s:function(a,b,c){D.copyWithin(a,b,b+c)},f:function(a){var b=D.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,
d);0<d%65536&&(d+=65536-d%65536);a:{try{ha.grow(Math.min(2147483648,d)-sa.byteLength+65535>>>16);va();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},t:function(a,b){var c=0;ib().forEach(function(d,f){var g=b+c;f=H[a+4*f>>2]=g;for(g=0;g<d.length;++g)I[f++>>0]=d.charCodeAt(g);I[f>>0]=0;c+=d.length+1});return 0},u:function(a,b){var c=ib();H[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});H[b>>2]=d;return 0},y:function(a){if(!noExitRuntime){if(e.onExit)e.onExit(a);ia=!0}w(a,new ea(a))},
v:function(){return 0},p:function(){},w:function(a,b,c,d){for(var f=0,g=0;g<c;g++){for(var l=H[b+8*g>>2],h=H[b+(8*g+4)>>2],k=0;k<h;k++){var m=D[l+k],n=kb[a];if(0===m||10===m){m=1===a?fa:A;var p;for(p=0;n[p]&&!(NaN<=p);)++p;p=ja.decode(n.subarray?n.subarray(0,p):new Uint8Array(n.slice(0,p)));m(p);n.length=0}else n.push(m)}f+=h}H[d>>2]=f;return 0},r:function(){}};
(function(){function a(f){e.asm=f.exports;ha=e.asm.z;va();L=e.asm.F;xa.unshift(e.asm.A);M--;e.monitorRunDependencies&&e.monitorRunDependencies(M);0==M&&(null!==Aa&&(clearInterval(Aa),Aa=null),N&&(f=N,N=null,f()))}function b(f){a(f.instance)}function c(f){return Ba().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){A("failed to asynchronously prepare wasm: "+g);z(g)})}var d={a:nb};M++;e.monitorRunDependencies&&e.monitorRunDependencies(M);if(e.instantiateWasm)try{return e.instantiateWasm(d,
a)}catch(f){return A("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return C||"function"!==typeof WebAssembly.instantiateStreaming||O.startsWith("data:application/octet-stream;base64,")||"function"!==typeof fetch?c(b):fetch(O,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){A("wasm streaming compile failed: "+g);A("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(r);return{}})();
e.___wasm_call_ctors=function(){return(e.___wasm_call_ctors=e.asm.A).apply(null,arguments)};var mb=e._malloc=function(){return(mb=e._malloc=e.asm.B).apply(null,arguments)},X=e._free=function(){return(X=e._free=e.asm.C).apply(null,arguments)},ab=e.___getTypeName=function(){return(ab=e.___getTypeName=e.asm.D).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.E).apply(null,arguments)};
e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.G).apply(null,arguments)};var Z;function ea(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}N=function ob(){Z||pb();Z||(N=ob)};
function pb(){function a(){if(!Z&&(Z=!0,e.calledRun=!0,!ia)){Ca(xa);aa(e);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();ya.unshift(b)}Ca(ya)}}if(!(0<M)){if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)za();Ca(wa);0<M||(e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1);a()},1)):a())}}e.run=pb;
if(e.preInit)for("function"==typeof e.preInit&&(e.preInit=[e.preInit]);0<e.preInit.length;)e.preInit.pop()();pb();
return Module.ready
}
);
})();
export default Module;

View File

@@ -1,59 +0,0 @@
var Module = (function() {
var _scriptDir = import.meta.url;
return (
function(Module) {
Module = Module || {};
var g;g||(g=typeof Module !== 'undefined' ? Module : {});var ba,ca;g.ready=new Promise(function(a,b){ba=a;ca=b});var r={},t;for(t in g)g.hasOwnProperty(t)&&(r[t]=g[t]);var da="./this.program";function ea(a,b){throw b;}var u="",fa;u=self.location.href;_scriptDir&&(u=_scriptDir);0!==u.indexOf("blob:")?u=u.substr(0,u.lastIndexOf("/")+1):u="";fa=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)};
var ha=g.print||console.log.bind(console),v=g.printErr||console.warn.bind(console);for(t in r)r.hasOwnProperty(t)&&(g[t]=r[t]);r=null;g.thisProgram&&(da=g.thisProgram);g.quit&&(ea=g.quit);var w;g.wasmBinary&&(w=g.wasmBinary);var noExitRuntime=g.noExitRuntime||!0;"object"!==typeof WebAssembly&&A("no native wasm support detected");var ia,ja=!1,ka=new TextDecoder("utf8");
function la(a,b,c){var d=B;if(0<c){c=b+c-1;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var m=a.charCodeAt(++e);f=65536+((f&1023)<<10)|m&1023}if(127>=f){if(b>=c)break;d[b++]=f}else{if(2047>=f){if(b+1>=c)break;d[b++]=192|f>>6}else{if(65535>=f){if(b+2>=c)break;d[b++]=224|f>>12}else{if(b+3>=c)break;d[b++]=240|f>>18;d[b++]=128|f>>12&63}d[b++]=128|f>>6&63}d[b++]=128|f&63}}d[b]=0}}var ma=new TextDecoder("utf-16le");
function na(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&C[c];)++c;return ma.decode(B.subarray(a,c<<1))}function oa(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)D[b>>1]=a.charCodeAt(e),b+=2;D[b>>1]=0;return b-d}function pa(a){return 2*a.length}function qa(a,b){for(var c=0,d="";!(c>=b/4);){var e=F[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}
function ra(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var m=a.charCodeAt(++e);f=65536+((f&1023)<<10)|m&1023}F[b>>2]=f;b+=4;if(b+4>c)break}F[b>>2]=0;return b-d}function sa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var ta,G,B,D,C,F,H,ua,va;
function wa(){var a=ia.buffer;ta=a;g.HEAP8=G=new Int8Array(a);g.HEAP16=D=new Int16Array(a);g.HEAP32=F=new Int32Array(a);g.HEAPU8=B=new Uint8Array(a);g.HEAPU16=C=new Uint16Array(a);g.HEAPU32=H=new Uint32Array(a);g.HEAPF32=ua=new Float32Array(a);g.HEAPF64=va=new Float64Array(a)}var I,xa=[],ya=[],za=[];function Aa(){var a=g.preRun.shift();xa.unshift(a)}var J=0,Ba=null,K=null;g.preloadedImages={};g.preloadedAudios={};
function A(a){if(g.onAbort)g.onAbort(a);v(a);ja=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ca(a);throw a;}var L=(new URL("mozjpeg_enc.wasm",import.meta.url)).toString();function Ca(){try{if(L==L&&w)return new Uint8Array(w);if(fa)return fa(L);throw"both async and sync fetching of the wasm failed";}catch(a){A(a)}}
function Da(){return w||"function"!==typeof fetch?Promise.resolve().then(function(){return Ca()}):fetch(L,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+L+"'";return a.arrayBuffer()}).catch(function(){return Ca()})}function Ea(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(g);else{var c=b.aa;"number"===typeof c?void 0===b.M?I.get(c)():I.get(c)(b.M):c(void 0===b.M?null:b.M)}}}var M={};
function Fa(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function N(a){return this.fromWireType(H[a>>2])}var O={},P={},Q={};function Ga(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Ha(a,b){a=Ga(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}
function Ia(a){var b=Error,c=Ha(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Ja=void 0;
function Ka(a,b,c){function d(h){h=c(h);if(h.length!==a.length)throw new Ja("Mismatched type converter count");for(var n=0;n<a.length;++n)R(a[n],h[n])}a.forEach(function(h){Q[h]=b});var e=Array(b.length),f=[],m=0;b.forEach(function(h,n){P.hasOwnProperty(h)?e[n]=P[h]:(f.push(h),O.hasOwnProperty(h)||(O[h]=[]),O[h].push(function(){e[n]=P[h];++m;m===f.length&&d(e)}))});0===f.length&&d(e)}
function La(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var Ma=void 0;function T(a){for(var b="";B[a];)b+=Ma[B[a++]];return b}var Na=void 0;function U(a){throw new Na(a);}
function R(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||U('type "'+d+'" must have a positive integer typeid pointer');if(P.hasOwnProperty(a)){if(c.V)return;U("Cannot register type '"+d+"' twice")}P[a]=b;delete Q[a];O.hasOwnProperty(a)&&(b=O[a],delete O[a],b.forEach(function(e){e()}))}var Oa=[],V=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Pa(a){4<a&&0===--V[a].N&&(V[a]=void 0,Oa.push(a))}function W(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Oa.length?Oa.pop():V.length;V[b]={N:1,value:a};return b}}function Qa(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Ra(a,b){switch(b){case 2:return function(c){return this.fromWireType(ua[c>>2])};case 3:return function(c){return this.fromWireType(va[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Sa(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ha(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Ta(a,b){var c=g;if(void 0===c[a].K){var d=c[a];c[a]=function(){c[a].K.hasOwnProperty(arguments.length)||U("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].K+")!");return c[a].K[arguments.length].apply(this,arguments)};c[a].K=[];c[a].K[d.P]=d}}
function Ua(a,b,c){g.hasOwnProperty(a)?((void 0===c||void 0!==g[a].K&&void 0!==g[a].K[c])&&U("Cannot register public name '"+a+"' twice"),Ta(a,a),g.hasOwnProperty(c)&&U("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),g[a].K[c]=b):(g[a]=b,void 0!==c&&(g[a].ca=c))}function Va(a,b){for(var c=[],d=0;d<a;d++)c.push(F[(b>>2)+d]);return c}
function Wa(a,b){var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];a.includes("j")?(d=g["dynCall_"+a],d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)):d=I.get(b).apply(null,c);return d}}function X(a,b){a=T(a);var c=a.includes("j")?Wa(a,b):I.get(b);"function"!==typeof c&&U("unknown function pointer with signature "+a+": "+b);return c}var Xa=void 0;function Ya(a){a=Za(a);var b=T(a);Y(a);return b}
function $a(a,b){function c(f){e[f]||P[f]||(Q[f]?Q[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Xa(a+": "+d.map(Ya).join([", "]));}function ab(a,b,c){switch(b){case 0:return c?function(d){return G[d]}:function(d){return B[d]};case 1:return c?function(d){return D[d>>1]}:function(d){return C[d>>1]};case 2:return c?function(d){return F[d>>2]}:function(d){return H[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var bb={};
function cb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function db(a,b){var c=P[a];void 0===c&&U(b+" has unknown type "+Ya(a));return c}var eb={},fb={};function gb(){if(!hb){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in fb)a[b]=fb[b];var c=[];for(b in a)c.push(b+"="+a[b]);hb=c}return hb}
var hb,ib=[null,[],[]];Ja=g.InternalError=Ia("InternalError");for(var jb=Array(256),Z=0;256>Z;++Z)jb[Z]=String.fromCharCode(Z);Ma=jb;Na=g.BindingError=Ia("BindingError");g.count_emval_handles=function(){for(var a=0,b=5;b<V.length;++b)void 0!==V[b]&&++a;return a};g.get_first_emval=function(){for(var a=5;a<V.length;++a)if(void 0!==V[a])return V[a];return null};Xa=g.UnboundTypeError=Ia("UnboundTypeError");
var mb={B:function(){},l:function(a){var b=M[a];delete M[a];var c=b.W,d=b.X,e=b.O,f=e.map(function(m){return m.U}).concat(e.map(function(m){return m.Z}));Ka([a],f,function(m){var h={};e.forEach(function(n,k){var l=m[k],q=n.S,x=n.T,y=m[k+e.length],p=n.Y,aa=n.$;h[n.R]={read:function(z){return l.fromWireType(q(x,z))},write:function(z,E){var S=[];p(aa,z,y.toWireType(S,E));Fa(S)}}});return[{name:b.name,fromWireType:function(n){var k={},l;for(l in h)k[l]=h[l].read(n);d(n);return k},toWireType:function(n,
k){for(var l in h)if(!(l in k))throw new TypeError('Missing field: "'+l+'"');var q=c();for(l in h)h[l].write(q,k[l]);null!==n&&n.push(d,q);return q},argPackAdvance:8,readValueFromPointer:N,L:d}]})},p:function(){},y:function(a,b,c,d,e){var f=La(c);b=T(b);R(a,{name:b,fromWireType:function(m){return!!m},toWireType:function(m,h){return h?d:e},argPackAdvance:8,readValueFromPointer:function(m){if(1===c)var h=G;else if(2===c)h=D;else if(4===c)h=F;else throw new TypeError("Unknown boolean type size: "+b);
return this.fromWireType(h[m>>f])},L:null})},x:function(a,b){b=T(b);R(a,{name:b,fromWireType:function(c){var d=V[c].value;Pa(c);return d},toWireType:function(c,d){return W(d)},argPackAdvance:8,readValueFromPointer:N,L:null})},i:function(a,b,c){c=La(c);b=T(b);R(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){if("number"!==typeof e&&"boolean"!==typeof e)throw new TypeError('Cannot convert "'+Qa(e)+'" to '+this.name);return e},argPackAdvance:8,readValueFromPointer:Ra(b,c),L:null})},
f:function(a,b,c,d,e,f){var m=Va(b,c);a=T(a);e=X(d,e);Ua(a,function(){$a("Cannot call "+a+" due to unbound types",m)},b-1);Ka([],m,function(h){var n=a,k=a;h=[h[0],null].concat(h.slice(1));var l=e,q=h.length;2>q&&U("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==h[1]&&!1,y=!1,p=1;p<h.length;++p)if(null!==h[p]&&void 0===h[p].L){y=!0;break}var aa="void"!==h[0].name,z="",E="";for(p=0;p<q-2;++p)z+=(0!==p?", ":"")+"arg"+p,E+=(0!==p?", ":"")+"arg"+p+"Wired";
k="return function "+Ga(k)+"("+z+") {\nif (arguments.length !== "+(q-2)+") {\nthrowBindingError('function "+k+" called with ' + arguments.length + ' arguments, expected "+(q-2)+" args!');\n}\n";y&&(k+="var destructors = [];\n");var S=y?"destructors":"null";z="throwBindingError invoker fn runDestructors retType classParam".split(" ");l=[U,l,f,Fa,h[0],h[1]];x&&(k+="var thisWired = classParam.toWireType("+S+", this);\n");for(p=0;p<q-2;++p)k+="var arg"+p+"Wired = argType"+p+".toWireType("+S+", arg"+p+
"); // "+h[p+2].name+"\n",z.push("argType"+p),l.push(h[p+2]);x&&(E="thisWired"+(0<E.length?", ":"")+E);k+=(aa?"var rv = ":"")+"invoker(fn"+(0<E.length?", ":"")+E+");\n";if(y)k+="runDestructors(destructors);\n";else for(p=x?1:2;p<h.length;++p)q=1===p?"thisWired":"arg"+(p-2)+"Wired",null!==h[p].L&&(k+=q+"_dtor("+q+"); // "+h[p].name+"\n",z.push(q+"_dtor"),l.push(h[p].L));aa&&(k+="var ret = retType.fromWireType(rv);\nreturn ret;\n");z.push(k+"}\n");h=Sa(z).apply(null,l);p=b-1;if(!g.hasOwnProperty(n))throw new Ja("Replacing nonexistant public symbol");
void 0!==g[n].K&&void 0!==p?g[n].K[p]=h:(g[n]=h,g[n].P=p);return[]})},c:function(a,b,c,d,e){function f(k){return k}b=T(b);-1===e&&(e=4294967295);var m=La(c);if(0===d){var h=32-8*c;f=function(k){return k<<h>>>h}}var n=b.includes("unsigned");R(a,{name:b,fromWireType:f,toWireType:function(k,l){if("number"!==typeof l&&"boolean"!==typeof l)throw new TypeError('Cannot convert "'+Qa(l)+'" to '+this.name);if(l<d||l>e)throw new TypeError('Passing a number "'+Qa(l)+'" from JS side to C/C++ side to an argument of type "'+
b+'", which is outside the valid range ['+d+", "+e+"]!");return n?l>>>0:l|0},argPackAdvance:8,readValueFromPointer:ab(b,m,0!==d),L:null})},b:function(a,b,c){function d(f){f>>=2;var m=H;return new e(ta,m[f+1],m[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=T(c);R(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{V:!0})},j:function(a,b){b=T(b);var c="std::string"===b;R(a,{name:b,fromWireType:function(d){var e=H[d>>2];if(c)for(var f=
d+4,m=0;m<=e;++m){var h=d+4+m;if(m==e||0==B[h]){if(f){for(var n=f+(h-f),k=f;!(k>=n)&&B[k];)++k;f=ka.decode(B.subarray(f,k))}else f="";if(void 0===l)var l=f;else l+=String.fromCharCode(0),l+=f;f=h+1}}else{l=Array(e);for(m=0;m<e;++m)l[m]=String.fromCharCode(B[d+4+m]);l=l.join("")}Y(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f="string"===typeof e;f||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||U("Cannot pass non-string to std::string");
var m=(c&&f?function(){for(var k=0,l=0;l<e.length;++l){var q=e.charCodeAt(l);55296<=q&&57343>=q&&(q=65536+((q&1023)<<10)|e.charCodeAt(++l)&1023);127>=q?++k:k=2047>=q?k+2:65535>=q?k+3:k+4}return k}:function(){return e.length})(),h=kb(4+m+1);H[h>>2]=m;if(c&&f)la(e,h+4,m+1);else if(f)for(f=0;f<m;++f){var n=e.charCodeAt(f);255<n&&(Y(h),U("String has UTF-16 code units that do not fit in 8 bits"));B[h+4+f]=n}else for(f=0;f<m;++f)B[h+4+f]=e[f];null!==d&&d.push(Y,h);return h},argPackAdvance:8,readValueFromPointer:N,
L:function(d){Y(d)}})},e:function(a,b,c){c=T(c);if(2===b){var d=na;var e=oa;var f=pa;var m=function(){return C};var h=1}else 4===b&&(d=qa,e=ra,f=sa,m=function(){return H},h=2);R(a,{name:c,fromWireType:function(n){for(var k=H[n>>2],l=m(),q,x=n+4,y=0;y<=k;++y){var p=n+4+y*b;if(y==k||0==l[p>>h])x=d(x,p-x),void 0===q?q=x:(q+=String.fromCharCode(0),q+=x),x=p+b}Y(n);return q},toWireType:function(n,k){"string"!==typeof k&&U("Cannot pass non-string to C++ string type "+c);var l=f(k),q=kb(4+l+b);H[q>>2]=l>>
h;e(k,q+4,l+b);null!==n&&n.push(Y,q);return q},argPackAdvance:8,readValueFromPointer:N,L:function(n){Y(n)}})},m:function(a,b,c,d,e,f){M[a]={name:T(b),W:X(c,d),X:X(e,f),O:[]}},a:function(a,b,c,d,e,f,m,h,n,k){M[a].O.push({R:T(b),U:c,S:X(d,e),T:f,Z:m,Y:X(h,n),$:k})},z:function(a,b){b=T(b);R(a,{ba:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:Pa,u:function(a){if(0===a)return W(cb());var b=bb[a];a=void 0===b?T(a):b;return W(cb()[a])},k:function(a){4<a&&(V[a].N+=1)},
n:function(a,b,c,d){a||U("Cannot use deleted val. handle = "+a);a=V[a].value;var e=eb[b];if(!e){e="";for(var f=0;f<b;++f)e+=(0!==f?", ":"")+"arg"+f;var m="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(f=0;f<b;++f)m+="var argType"+f+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+f+'], "parameter '+f+'");\nvar arg'+f+" = argType"+f+".readValueFromPointer(args);\nargs += argType"+f+"['argPackAdvance'];\n";e=(new Function("requireRegisteredType","Module",
"__emval_register",m+("var obj = new constructor("+e+");\nreturn __emval_register(obj);\n}\n")))(db,g,W);eb[b]=e}return e(a,c,d)},h:function(){A()},r:function(a,b,c){B.copyWithin(a,b,b+c)},d:function(a){var b=B.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,d);0<d%65536&&(d+=65536-d%65536);a:{try{ia.grow(Math.min(2147483648,d)-ta.byteLength+65535>>>16);wa();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},s:function(a,
b){var c=0;gb().forEach(function(d,e){var f=b+c;e=F[a+4*e>>2]=f;for(f=0;f<d.length;++f)G[e++>>0]=d.charCodeAt(f);G[e>>0]=0;c+=d.length+1});return 0},t:function(a,b){var c=gb();F[a>>2]=c.length;var d=0;c.forEach(function(e){d+=e.length+1});F[b>>2]=d;return 0},A:function(a){if(!noExitRuntime){if(g.onExit)g.onExit(a);ja=!0}ea(a,new lb(a))},v:function(){return 0},o:function(){},w:function(a,b,c,d){for(var e=0,f=0;f<c;f++){for(var m=F[b+8*f>>2],h=F[b+(8*f+4)>>2],n=0;n<h;n++){var k=B[m+n],l=ib[a];if(0===
k||10===k){for(k=0;l[k]&&!(NaN<=k);)++k;k=ka.decode(l.subarray?l.subarray(0,k):new Uint8Array(l.slice(0,k)));(1===a?ha:v)(k);l.length=0}else l.push(k)}e+=h}F[d>>2]=e;return 0},q:function(){}};
(function(){function a(e){g.asm=e.exports;ia=g.asm.C;wa();I=g.asm.I;ya.unshift(g.asm.D);J--;g.monitorRunDependencies&&g.monitorRunDependencies(J);0==J&&(null!==Ba&&(clearInterval(Ba),Ba=null),K&&(e=K,K=null,e()))}function b(e){a(e.instance)}function c(e){return Da().then(function(f){return WebAssembly.instantiate(f,d)}).then(e,function(f){v("failed to asynchronously prepare wasm: "+f);A(f)})}var d={a:mb};J++;g.monitorRunDependencies&&g.monitorRunDependencies(J);if(g.instantiateWasm)try{return g.instantiateWasm(d,
a)}catch(e){return v("Module.instantiateWasm callback failed with error: "+e),!1}(function(){return w||"function"!==typeof WebAssembly.instantiateStreaming||L.startsWith("data:application/octet-stream;base64,")||"function"!==typeof fetch?c(b):fetch(L,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v("wasm streaming compile failed: "+f);v("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ca);return{}})();
g.___wasm_call_ctors=function(){return(g.___wasm_call_ctors=g.asm.D).apply(null,arguments)};var kb=g._malloc=function(){return(kb=g._malloc=g.asm.E).apply(null,arguments)},Y=g._free=function(){return(Y=g._free=g.asm.F).apply(null,arguments)},Za=g.___getTypeName=function(){return(Za=g.___getTypeName=g.asm.G).apply(null,arguments)};g.___embind_register_native_and_builtin_types=function(){return(g.___embind_register_native_and_builtin_types=g.asm.H).apply(null,arguments)};
g.dynCall_jiji=function(){return(g.dynCall_jiji=g.asm.J).apply(null,arguments)};var nb;function lb(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}K=function ob(){nb||pb();nb||(K=ob)};
function pb(){function a(){if(!nb&&(nb=!0,g.calledRun=!0,!ja)){Ea(ya);ba(g);if(g.onRuntimeInitialized)g.onRuntimeInitialized();if(g.postRun)for("function"==typeof g.postRun&&(g.postRun=[g.postRun]);g.postRun.length;){var b=g.postRun.shift();za.unshift(b)}Ea(za)}}if(!(0<J)){if(g.preRun)for("function"==typeof g.preRun&&(g.preRun=[g.preRun]);g.preRun.length;)Aa();Ea(xa);0<J||(g.setStatus?(g.setStatus("Running..."),setTimeout(function(){setTimeout(function(){g.setStatus("")},1);a()},1)):a())}}g.run=pb;
if(g.preInit)for("function"==typeof g.preInit&&(g.preInit=[g.preInit]);0<g.preInit.length;)g.preInit.pop()();pb();
return Module.ready
}
);
})();
export default Module;

Binary file not shown.

View File

@@ -1,59 +0,0 @@
var Module = (function() {
var _scriptDir = import.meta.url;
return (
function(Module) {
Module = Module || {};
var g;g||(g=typeof Module !== 'undefined' ? Module : {});var aa,ba;g.ready=new Promise(function(a,b){aa=a;ba=b});var r={},t;for(t in g)g.hasOwnProperty(t)&&(r[t]=g[t]);var ca="./this.program";function da(a,b){throw b;}var ea,fa,ha,ia;ea=function(a){ha||(ha=require("fs"));ia||(ia=require("path"));a=ia.normalize(a);return ha.readFileSync(a,null)};fa=function(a){a=ea(a);a.buffer||(a=new Uint8Array(a));a.buffer||u("Assertion failed: undefined");return a};
1<process.argv.length&&(ca=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);process.on("uncaughtException",function(a){if(!(a instanceof ja))throw a;});process.on("unhandledRejection",u);da=function(a){process.exit(a)};g.inspect=function(){return"[Emscripten Module object]"};var ka=g.print||console.log.bind(console),v=g.printErr||console.warn.bind(console);for(t in r)r.hasOwnProperty(t)&&(g[t]=r[t]);r=null;g.thisProgram&&(ca=g.thisProgram);g.quit&&(da=g.quit);var w;g.wasmBinary&&(w=g.wasmBinary);
var noExitRuntime=g.noExitRuntime||!0;"object"!==typeof WebAssembly&&u("no native wasm support detected");var la,ma=!1,na=new TextDecoder("utf8");
function oa(a,b,c){var d=A;if(0<c){c=b+c-1;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var m=a.charCodeAt(++e);f=65536+((f&1023)<<10)|m&1023}if(127>=f){if(b>=c)break;d[b++]=f}else{if(2047>=f){if(b+1>=c)break;d[b++]=192|f>>6}else{if(65535>=f){if(b+2>=c)break;d[b++]=224|f>>12}else{if(b+3>=c)break;d[b++]=240|f>>18;d[b++]=128|f>>12&63}d[b++]=128|f>>6&63}d[b++]=128|f&63}}d[b]=0}}var pa=new TextDecoder("utf-16le");
function qa(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&B[c];)++c;return pa.decode(A.subarray(a,c<<1))}function ra(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b>>1]=a.charCodeAt(e),b+=2;C[b>>1]=0;return b-d}function sa(a){return 2*a.length}function ta(a,b){for(var c=0,d="";!(c>=b/4);){var e=D[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}
function ua(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var m=a.charCodeAt(++e);f=65536+((f&1023)<<10)|m&1023}D[b>>2]=f;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function va(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var wa,F,A,C,B,D,G,xa,ya;
function za(){var a=la.buffer;wa=a;g.HEAP8=F=new Int8Array(a);g.HEAP16=C=new Int16Array(a);g.HEAP32=D=new Int32Array(a);g.HEAPU8=A=new Uint8Array(a);g.HEAPU16=B=new Uint16Array(a);g.HEAPU32=G=new Uint32Array(a);g.HEAPF32=xa=new Float32Array(a);g.HEAPF64=ya=new Float64Array(a)}var H,Aa=[],Ba=[],Ca=[];function Da(){var a=g.preRun.shift();Aa.unshift(a)}var I=0,Ea=null,J=null;g.preloadedImages={};g.preloadedAudios={};
function u(a){if(g.onAbort)g.onAbort(a);v(a);ma=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ba(a);throw a;}var K=(new URL("mozjpeg_node_enc.wasm",import.meta.url)).toString();function Fa(){return Promise.resolve().then(function(){a:{try{if(K==K&&w){var a=new Uint8Array(w);break a}if(fa){a=fa(K);break a}throw"both async and sync fetching of the wasm failed";}catch(b){u(b)}a=void 0}return a})}
function Ga(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(g);else{var c=b.aa;"number"===typeof c?void 0===b.M?H.get(c)():H.get(c)(b.M):c(void 0===b.M?null:b.M)}}}var L={};function Ha(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function M(a){return this.fromWireType(G[a>>2])}var N={},O={},P={};function Ia(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}
function Ja(a,b){a=Ia(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Ka(a){var b=Error,c=Ja(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}
var La=void 0;function Ma(a,b,c){function d(h){h=c(h);if(h.length!==a.length)throw new La("Mismatched type converter count");for(var k=0;k<a.length;++k)Q(a[k],h[k])}a.forEach(function(h){P[h]=b});var e=Array(b.length),f=[],m=0;b.forEach(function(h,k){O.hasOwnProperty(h)?e[k]=O[h]:(f.push(h),N.hasOwnProperty(h)||(N[h]=[]),N[h].push(function(){e[k]=O[h];++m;m===f.length&&d(e)}))});0===f.length&&d(e)}
function Na(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var Oa=void 0;function S(a){for(var b="";A[a];)b+=Oa[A[a++]];return b}var Pa=void 0;function T(a){throw new Pa(a);}
function Q(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||T('type "'+d+'" must have a positive integer typeid pointer');if(O.hasOwnProperty(a)){if(c.V)return;T("Cannot register type '"+d+"' twice")}O[a]=b;delete P[a];N.hasOwnProperty(a)&&(b=N[a],delete N[a],b.forEach(function(e){e()}))}var Qa=[],U=[{},{value:void 0},{value:null},{value:!0},{value:!1}];
function Ra(a){4<a&&0===--U[a].N&&(U[a]=void 0,Qa.push(a))}function V(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Qa.length?Qa.pop():U.length;U[b]={N:1,value:a};return b}}function Sa(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}
function Ta(a,b){switch(b){case 2:return function(c){return this.fromWireType(xa[c>>2])};case 3:return function(c){return this.fromWireType(ya[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Ua(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ja(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}
function Va(a,b){var c=g;if(void 0===c[a].K){var d=c[a];c[a]=function(){c[a].K.hasOwnProperty(arguments.length)||T("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].K+")!");return c[a].K[arguments.length].apply(this,arguments)};c[a].K=[];c[a].K[d.P]=d}}
function Wa(a,b,c){g.hasOwnProperty(a)?((void 0===c||void 0!==g[a].K&&void 0!==g[a].K[c])&&T("Cannot register public name '"+a+"' twice"),Va(a,a),g.hasOwnProperty(c)&&T("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),g[a].K[c]=b):(g[a]=b,void 0!==c&&(g[a].da=c))}function Xa(a,b){for(var c=[],d=0;d<a;d++)c.push(D[(b>>2)+d]);return c}
function Ya(a,b){var c=[];return function(){c.length=arguments.length;for(var d=0;d<arguments.length;d++)c[d]=arguments[d];a.includes("j")?(d=g["dynCall_"+a],d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)):d=H.get(b).apply(null,c);return d}}function W(a,b){a=S(a);var c=a.includes("j")?Ya(a,b):H.get(b);"function"!==typeof c&&T("unknown function pointer with signature "+a+": "+b);return c}var Za=void 0;function $a(a){a=ab(a);var b=S(a);X(a);return b}
function bb(a,b){function c(f){e[f]||O[f]||(P[f]?P[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Za(a+": "+d.map($a).join([", "]));}function cb(a,b,c){switch(b){case 0:return c?function(d){return F[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return B[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return G[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var db={};
function eb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function fb(a,b){var c=O[a];void 0===c&&T(b+" has unknown type "+$a(a));return c}var gb={},hb={};function ib(){if(!jb){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ca||"./this.program"},b;for(b in hb)a[b]=hb[b];var c=[];for(b in a)c.push(b+"="+a[b]);jb=c}return jb}
var jb,kb=[null,[],[]];La=g.InternalError=Ka("InternalError");for(var lb=Array(256),Y=0;256>Y;++Y)lb[Y]=String.fromCharCode(Y);Oa=lb;Pa=g.BindingError=Ka("BindingError");g.count_emval_handles=function(){for(var a=0,b=5;b<U.length;++b)void 0!==U[b]&&++a;return a};g.get_first_emval=function(){for(var a=5;a<U.length;++a)if(void 0!==U[a])return U[a];return null};Za=g.UnboundTypeError=Ka("UnboundTypeError");
var nb={B:function(){},l:function(a){var b=L[a];delete L[a];var c=b.W,d=b.X,e=b.O,f=e.map(function(m){return m.U}).concat(e.map(function(m){return m.Z}));Ma([a],f,function(m){var h={};e.forEach(function(k,n){var l=m[n],p=k.S,x=k.T,y=m[n+e.length],q=k.Y,Z=k.$;h[k.R]={read:function(z){return l.fromWireType(p(x,z))},write:function(z,E){var R=[];q(Z,z,y.toWireType(R,E));Ha(R)}}});return[{name:b.name,fromWireType:function(k){var n={},l;for(l in h)n[l]=h[l].read(k);d(k);return n},toWireType:function(k,
n){for(var l in h)if(!(l in n))throw new TypeError('Missing field: "'+l+'"');var p=c();for(l in h)h[l].write(p,n[l]);null!==k&&k.push(d,p);return p},argPackAdvance:8,readValueFromPointer:M,L:d}]})},p:function(){},y:function(a,b,c,d,e){var f=Na(c);b=S(b);Q(a,{name:b,fromWireType:function(m){return!!m},toWireType:function(m,h){return h?d:e},argPackAdvance:8,readValueFromPointer:function(m){if(1===c)var h=F;else if(2===c)h=C;else if(4===c)h=D;else throw new TypeError("Unknown boolean type size: "+b);
return this.fromWireType(h[m>>f])},L:null})},x:function(a,b){b=S(b);Q(a,{name:b,fromWireType:function(c){var d=U[c].value;Ra(c);return d},toWireType:function(c,d){return V(d)},argPackAdvance:8,readValueFromPointer:M,L:null})},i:function(a,b,c){c=Na(c);b=S(b);Q(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){if("number"!==typeof e&&"boolean"!==typeof e)throw new TypeError('Cannot convert "'+Sa(e)+'" to '+this.name);return e},argPackAdvance:8,readValueFromPointer:Ta(b,c),L:null})},
f:function(a,b,c,d,e,f){var m=Xa(b,c);a=S(a);e=W(d,e);Wa(a,function(){bb("Cannot call "+a+" due to unbound types",m)},b-1);Ma([],m,function(h){var k=[h[0],null].concat(h.slice(1)),n=h=a,l=e,p=k.length;2>p&&T("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var x=null!==k[1]&&!1,y=!1,q=1;q<k.length;++q)if(null!==k[q]&&void 0===k[q].L){y=!0;break}var Z="void"!==k[0].name,z="",E="";for(q=0;q<p-2;++q)z+=(0!==q?", ":"")+"arg"+q,E+=(0!==q?", ":"")+"arg"+q+"Wired";n=
"return function "+Ia(n)+"("+z+") {\nif (arguments.length !== "+(p-2)+") {\nthrowBindingError('function "+n+" called with ' + arguments.length + ' arguments, expected "+(p-2)+" args!');\n}\n";y&&(n+="var destructors = [];\n");var R=y?"destructors":"null";z="throwBindingError invoker fn runDestructors retType classParam".split(" ");l=[T,l,f,Ha,k[0],k[1]];x&&(n+="var thisWired = classParam.toWireType("+R+", this);\n");for(q=0;q<p-2;++q)n+="var arg"+q+"Wired = argType"+q+".toWireType("+R+", arg"+q+"); // "+
k[q+2].name+"\n",z.push("argType"+q),l.push(k[q+2]);x&&(E="thisWired"+(0<E.length?", ":"")+E);n+=(Z?"var rv = ":"")+"invoker(fn"+(0<E.length?", ":"")+E+");\n";if(y)n+="runDestructors(destructors);\n";else for(q=x?1:2;q<k.length;++q)p=1===q?"thisWired":"arg"+(q-2)+"Wired",null!==k[q].L&&(n+=p+"_dtor("+p+"); // "+k[q].name+"\n",z.push(p+"_dtor"),l.push(k[q].L));Z&&(n+="var ret = retType.fromWireType(rv);\nreturn ret;\n");z.push(n+"}\n");k=Ua(z).apply(null,l);q=b-1;if(!g.hasOwnProperty(h))throw new La("Replacing nonexistant public symbol");
void 0!==g[h].K&&void 0!==q?g[h].K[q]=k:(g[h]=k,g[h].P=q);return[]})},c:function(a,b,c,d,e){function f(n){return n}b=S(b);-1===e&&(e=4294967295);var m=Na(c);if(0===d){var h=32-8*c;f=function(n){return n<<h>>>h}}var k=b.includes("unsigned");Q(a,{name:b,fromWireType:f,toWireType:function(n,l){if("number"!==typeof l&&"boolean"!==typeof l)throw new TypeError('Cannot convert "'+Sa(l)+'" to '+this.name);if(l<d||l>e)throw new TypeError('Passing a number "'+Sa(l)+'" from JS side to C/C++ side to an argument of type "'+
b+'", which is outside the valid range ['+d+", "+e+"]!");return k?l>>>0:l|0},argPackAdvance:8,readValueFromPointer:cb(b,m,0!==d),L:null})},b:function(a,b,c){function d(f){f>>=2;var m=G;return new e(wa,m[f+1],m[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=S(c);Q(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{V:!0})},j:function(a,b){b=S(b);var c="std::string"===b;Q(a,{name:b,fromWireType:function(d){var e=G[d>>2];if(c)for(var f=
d+4,m=0;m<=e;++m){var h=d+4+m;if(m==e||0==A[h]){if(f){for(var k=f+(h-f),n=f;!(n>=k)&&A[n];)++n;f=na.decode(A.subarray(f,n))}else f="";if(void 0===l)var l=f;else l+=String.fromCharCode(0),l+=f;f=h+1}}else{l=Array(e);for(m=0;m<e;++m)l[m]=String.fromCharCode(A[d+4+m]);l=l.join("")}X(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f="string"===typeof e;f||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||T("Cannot pass non-string to std::string");
var m=(c&&f?function(){for(var n=0,l=0;l<e.length;++l){var p=e.charCodeAt(l);55296<=p&&57343>=p&&(p=65536+((p&1023)<<10)|e.charCodeAt(++l)&1023);127>=p?++n:n=2047>=p?n+2:65535>=p?n+3:n+4}return n}:function(){return e.length})(),h=mb(4+m+1);G[h>>2]=m;if(c&&f)oa(e,h+4,m+1);else if(f)for(f=0;f<m;++f){var k=e.charCodeAt(f);255<k&&(X(h),T("String has UTF-16 code units that do not fit in 8 bits"));A[h+4+f]=k}else for(f=0;f<m;++f)A[h+4+f]=e[f];null!==d&&d.push(X,h);return h},argPackAdvance:8,readValueFromPointer:M,
L:function(d){X(d)}})},e:function(a,b,c){c=S(c);if(2===b){var d=qa;var e=ra;var f=sa;var m=function(){return B};var h=1}else 4===b&&(d=ta,e=ua,f=va,m=function(){return G},h=2);Q(a,{name:c,fromWireType:function(k){for(var n=G[k>>2],l=m(),p,x=k+4,y=0;y<=n;++y){var q=k+4+y*b;if(y==n||0==l[q>>h])x=d(x,q-x),void 0===p?p=x:(p+=String.fromCharCode(0),p+=x),x=q+b}X(k);return p},toWireType:function(k,n){"string"!==typeof n&&T("Cannot pass non-string to C++ string type "+c);var l=f(n),p=mb(4+l+b);G[p>>2]=l>>
h;e(n,p+4,l+b);null!==k&&k.push(X,p);return p},argPackAdvance:8,readValueFromPointer:M,L:function(k){X(k)}})},m:function(a,b,c,d,e,f){L[a]={name:S(b),W:W(c,d),X:W(e,f),O:[]}},a:function(a,b,c,d,e,f,m,h,k,n){L[a].O.push({R:S(b),U:c,S:W(d,e),T:f,Z:m,Y:W(h,k),$:n})},z:function(a,b){b=S(b);Q(a,{ba:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:Ra,u:function(a){if(0===a)return V(eb());var b=db[a];a=void 0===b?S(a):b;return V(eb()[a])},k:function(a){4<a&&(U[a].N+=1)},
n:function(a,b,c,d){a||T("Cannot use deleted val. handle = "+a);a=U[a].value;var e=gb[b];if(!e){e="";for(var f=0;f<b;++f)e+=(0!==f?", ":"")+"arg"+f;var m="return function emval_allocator_"+b+"(constructor, argTypes, args) {\n";for(f=0;f<b;++f)m+="var argType"+f+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+f+'], "parameter '+f+'");\nvar arg'+f+" = argType"+f+".readValueFromPointer(args);\nargs += argType"+f+"['argPackAdvance'];\n";e=(new Function("requireRegisteredType","Module",
"__emval_register",m+("var obj = new constructor("+e+");\nreturn __emval_register(obj);\n}\n")))(fb,g,V);gb[b]=e}return e(a,c,d)},h:function(){u()},r:function(a,b,c){A.copyWithin(a,b,b+c)},d:function(a){var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,d);0<d%65536&&(d+=65536-d%65536);a:{try{la.grow(Math.min(2147483648,d)-wa.byteLength+65535>>>16);za();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},s:function(a,
b){var c=0;ib().forEach(function(d,e){var f=b+c;e=D[a+4*e>>2]=f;for(f=0;f<d.length;++f)F[e++>>0]=d.charCodeAt(f);F[e>>0]=0;c+=d.length+1});return 0},t:function(a,b){var c=ib();D[a>>2]=c.length;var d=0;c.forEach(function(e){d+=e.length+1});D[b>>2]=d;return 0},A:function(a){if(!noExitRuntime){if(g.onExit)g.onExit(a);ma=!0}da(a,new ja(a))},v:function(){return 0},o:function(){},w:function(a,b,c,d){for(var e=0,f=0;f<c;f++){for(var m=D[b+8*f>>2],h=D[b+(8*f+4)>>2],k=0;k<h;k++){var n=A[m+k],l=kb[a];if(0===
n||10===n){n=1===a?ka:v;var p;for(p=0;l[p]&&!(NaN<=p);)++p;p=na.decode(l.subarray?l.subarray(0,p):new Uint8Array(l.slice(0,p)));n(p);l.length=0}else l.push(n)}e+=h}D[d>>2]=e;return 0},q:function(){}};
(function(){function a(e){g.asm=e.exports;la=g.asm.C;za();H=g.asm.I;Ba.unshift(g.asm.D);I--;g.monitorRunDependencies&&g.monitorRunDependencies(I);0==I&&(null!==Ea&&(clearInterval(Ea),Ea=null),J&&(e=J,J=null,e()))}function b(e){a(e.instance)}function c(e){return Fa().then(function(f){return WebAssembly.instantiate(f,d)}).then(e,function(f){v("failed to asynchronously prepare wasm: "+f);u(f)})}var d={a:nb};I++;g.monitorRunDependencies&&g.monitorRunDependencies(I);if(g.instantiateWasm)try{return g.instantiateWasm(d,
a)}catch(e){return v("Module.instantiateWasm callback failed with error: "+e),!1}(function(){return w||"function"!==typeof WebAssembly.instantiateStreaming||K.startsWith("data:application/octet-stream;base64,")||"function"!==typeof fetch?c(b):fetch(K,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v("wasm streaming compile failed: "+f);v("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ba);return{}})();
g.___wasm_call_ctors=function(){return(g.___wasm_call_ctors=g.asm.D).apply(null,arguments)};var mb=g._malloc=function(){return(mb=g._malloc=g.asm.E).apply(null,arguments)},X=g._free=function(){return(X=g._free=g.asm.F).apply(null,arguments)},ab=g.___getTypeName=function(){return(ab=g.___getTypeName=g.asm.G).apply(null,arguments)};g.___embind_register_native_and_builtin_types=function(){return(g.___embind_register_native_and_builtin_types=g.asm.H).apply(null,arguments)};
g.dynCall_jiji=function(){return(g.dynCall_jiji=g.asm.J).apply(null,arguments)};var ob;function ja(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}J=function pb(){ob||qb();ob||(J=pb)};
function qb(){function a(){if(!ob&&(ob=!0,g.calledRun=!0,!ma)){Ga(Ba);aa(g);if(g.onRuntimeInitialized)g.onRuntimeInitialized();if(g.postRun)for("function"==typeof g.postRun&&(g.postRun=[g.postRun]);g.postRun.length;){var b=g.postRun.shift();Ca.unshift(b)}Ga(Ca)}}if(!(0<I)){if(g.preRun)for("function"==typeof g.preRun&&(g.preRun=[g.preRun]);g.preRun.length;)Da();Ga(Aa);0<I||(g.setStatus?(g.setStatus("Running..."),setTimeout(function(){setTimeout(function(){g.setStatus("")},1);a()},1)):a())}}g.run=qb;
if(g.preInit)for("function"==typeof g.preInit&&(g.preInit=[g.preInit]);0<g.preInit.length;)g.preInit.pop()();qb();
return Module.ready
}
);
})();
export default Module;

View File

@@ -1,5 +0,0 @@
{
"scripts": {
"build": "../build-cpp.sh"
}
}

View File

@@ -2,28 +2,24 @@ CODEC_URL := https://github.com/mozilla/mozjpeg/archive/v3.3.1.tar.gz
CODEC_DIR := node_modules/mozjpeg
CODEC_OUT_RELATIVE := .libs/libjpeg.a rdswitch.o
CODEC_OUT := $(addprefix $(CODEC_DIR)/, $(CODEC_OUT_RELATIVE))
ENVIRONMENT = worker
OUT_JS := enc/mozjpeg_enc.js enc/mozjpeg_node_enc.js dec/mozjpeg_node_dec.js
OUT_JS := mozjpeg_enc.js
OUT_WASM := $(OUT_JS:.js=.wasm)
.PHONY: all clean
all: $(OUT_JS)
# Define dependencies for all variations of build artifacts.
$(filter enc/%,$(OUT_JS)): enc/mozjpeg_enc.cpp
$(filter dec/%,$(OUT_JS)): dec/mozjpeg_dec.cpp
enc/mozjpeg_node_enc.js dec/mozjpeg_node_dec.js: ENVIRONMENT = node
%.js: $(CODEC_OUT)
%.js: %.cpp $(CODEC_OUT)
$(CXX) \
-I $(CODEC_DIR) \
${CXXFLAGS} \
${LDFLAGS} \
--closure 1 \
--bind \
-s ENVIRONMENT=$(ENVIRONMENT) \
-s ALLOW_MEMORY_GROWTH=1 \
-s MODULARIZE=1 \
-s TEXTDECODER=2 \
-s ENVIRONMENT='worker' \
-s EXPORT_ES6=1 \
-o $@ \
$+
@@ -42,10 +38,7 @@ $(CODEC_DIR)/Makefile: $(CODEC_DIR)/configure
--without-turbojpeg \
--without-simd \
--without-arith-enc \
--without-arith-dec \
--with-build-date=squoosh
# ^ If not provided with a dummy value, MozJPEG includes a build date in the
# binary as part of the version string, making binaries different each time.
--without-arith-dec
$(CODEC_DIR)/configure: $(CODEC_DIR)/configure.ac
cd $(CODEC_DIR) && autoreconf -iv

View File

@@ -0,0 +1,44 @@
# MozJPEG encoder
- Source: <https://github.com/mozilla/mozjpeg>
- Version: v3.3.1
- License: BSD
## Dependencies
- Docker
## Example
See `example.html`
## API
### `int version()`
Returns the version of MozJPEG as a number. va.b.c is encoded as 0x0a0b0c
### `Uint8Array encode(std::string image_in, int image_width, int image_height, MozJpegOptions opts)`
Encodes the given image with given dimension to JPEG. Options looks like this:
```c++
struct MozJpegOptions {
int quality;
bool baseline;
bool arithmetic;
bool progressive;
bool optimize_coding;
int smoothing;
int color_space;
int quant_table;
bool trellis_multipass;
bool trellis_opt_zero;
bool trellis_opt_table;
int trellis_loops;
bool auto_subsample;
int chroma_subsample;
bool separate_chroma_quality;
int chroma_quality;
};
```

View File

@@ -0,0 +1,51 @@
<!DOCTYPE html>
<script type="module">
import mozjpeg_enc from './mozjpeg_enc.js';
async function loadImage(src) {
// Load image
const img = document.createElement('img');
img.src = src;
await new Promise((resolve) => (img.onload = resolve));
// Make canvas same size as image
const canvas = document.createElement('canvas');
[canvas.width, canvas.height] = [img.width, img.height];
// Draw image onto canvas
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
return ctx.getImageData(0, 0, img.width, img.height);
}
async function main() {
const module = await mozjpeg_enc();
console.log('Version:', module.version().toString(16));
const image = await loadImage('../example.png');
const result = module.encode(image.data, image.width, image.height, {
quality: 75,
baseline: false,
arithmetic: false,
progressive: true,
optimize_coding: true,
smoothing: 0,
color_space: 3,
quant_table: 3,
trellis_multipass: false,
trellis_opt_zero: false,
trellis_opt_table: false,
trellis_loops: 1,
auto_subsample: true,
chroma_subsample: 2,
separate_chroma_quality: false,
chroma_quality: 75,
});
const blob = new Blob([result], { type: 'image/jpeg' });
const blobURL = URL.createObjectURL(blob);
const img = document.createElement('img');
img.src = blobURL;
document.body.appendChild(img);
}
main();
</script>

View File

@@ -141,7 +141,6 @@ val encode(std::string image_in, int image_width, int image_height, MozJpegOptio
jpeg_c_set_bool_param(&cinfo, JBOOLEAN_TRELLIS_EOB_OPT, opts.trellis_opt_zero);
jpeg_c_set_bool_param(&cinfo, JBOOLEAN_TRELLIS_Q_OPT, opts.trellis_opt_table);
jpeg_c_set_int_param(&cinfo, JINT_TRELLIS_NUM_LOOPS, opts.trellis_loops);
jpeg_c_set_int_param(&cinfo, JINT_DC_SCAN_OPT_MODE, 0);
// A little hacky to build a string for this, but it means we can use
// set_quality_ratings which does some useful heuristic stuff.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1,5 +1,5 @@
{
"name": "avif",
"name": "mozjpeg_enc",
"scripts": {
"build": "../build-cpp.sh"
}

137
codecs/oxipng/Cargo.lock generated
View File

@@ -1,7 +1,5 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "adler"
version = "0.2.3"
@@ -22,9 +20,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]]
name = "bit-vec"
version = "0.6.3"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
checksum = "5f0dc55f2d8a1a85650ac47858bb001b4c0dd73d79e3c455a842925e68d29cd3"
[[package]]
name = "bitflags"
@@ -58,9 +56,9 @@ checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
[[package]]
name = "cc"
version = "1.0.66"
version = "1.0.62"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48"
checksum = "f1770ced377336a88a67c473594ccc14eca6f4559217c34f64aac8f83d641b40"
[[package]]
name = "cfg-if"
@@ -100,9 +98,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
[[package]]
name = "const_fn"
version = "0.4.5"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6"
checksum = "c478836e029dcef17fb47c89023448c64f781a046e0300e257ad8225ae59afab"
[[package]]
name = "crc"
@@ -145,9 +143,9 @@ dependencies = [
[[package]]
name = "crossbeam-epoch"
version = "0.9.1"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d"
checksum = "ec0f606a85340376eef0d6d8fec399e6d4a544d648386c6645eb6d0653b27d9f"
dependencies = [
"cfg-if 1.0.0",
"const_fn",
@@ -159,12 +157,13 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
version = "0.8.1"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"
checksum = "ec91540d98355f690a86367e566ecad2e9e579f230230eb7c21398372be73ea5"
dependencies = [
"autocfg",
"cfg-if 1.0.0",
"const_fn",
"lazy_static",
]
@@ -201,9 +200,9 @@ dependencies = [
[[package]]
name = "image"
version = "0.23.12"
version = "0.23.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ce04077ead78e39ae8610ad26216aed811996b043d47beed5090db674f9e9b5"
checksum = "b4f0a8345b33b082aedec2f4d7d4a926b845cee184cbe78b703413066564431b"
dependencies = [
"bytemuck",
"byteorder",
@@ -216,9 +215,9 @@ dependencies = [
[[package]]
name = "indexmap"
version = "1.6.1"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b"
checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2"
dependencies = [
"autocfg",
"hashbrown",
@@ -227,22 +226,13 @@ dependencies = [
[[package]]
name = "itertools"
version = "0.10.0"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37d572918e350e82412fe766d24b15e6682fb2ed2bbe018280caa810397cb319"
checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
dependencies = [
"either",
]
[[package]]
name = "js-sys"
version = "0.3.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc9f84f9b115ce7843d60706df1422a916680bfdfcbdb0447c5614ff9d7e4d78"
dependencies = [
"wasm-bindgen",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
@@ -251,24 +241,24 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.81"
version = "0.2.80"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb"
checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614"
[[package]]
name = "libdeflate-sys"
version = "0.7.1"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a95fa4be7085dd06a8296dcc3f399f12ab8b0309c157dcaa90669130b175b97"
checksum = "21e39efa87b84db3e13ff4e2dfac1e57220abcbd7fe8ec44d238f7f4f787cc1f"
dependencies = [
"cc",
]
[[package]]
name = "libdeflater"
version = "0.7.1"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccc147465654929bf7b56518cc46d11701ba290f4ff94398ae3f89f1663cf60f"
checksum = "a4810980d791f26d470e2d7d91a3d4d22aa3a4b709fb7e9c5e43ee54f83a01f2"
dependencies = [
"libdeflate-sys",
]
@@ -284,9 +274,9 @@ dependencies = [
[[package]]
name = "memoffset"
version = "0.6.1"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"
checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"
dependencies = [
"autocfg",
]
@@ -362,10 +352,16 @@ dependencies = [
]
[[package]]
name = "oxipng"
version = "4.0.3"
name = "once_cell"
version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50d0b53912a666fe2970f8ab254e283531c816aed16551ab66c52485eadb44e6"
checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0"
[[package]]
name = "oxipng"
version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea40b366cecfce76ee3b082e7e6567b82cdef75644a22442ca8584bc666ff4eb"
dependencies = [
"bit-vec",
"byteorder",
@@ -394,9 +390,9 @@ dependencies = [
[[package]]
name = "png"
version = "0.16.8"
version = "0.16.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
checksum = "dfe7f9f1c730833200b134370e1d5098964231af8450bce9b78ee3ab5278b970"
dependencies = [
"bitflags",
"crc32fast",
@@ -406,18 +402,18 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.26"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
dependencies = [
"unicode-xid",
]
[[package]]
name = "quote"
version = "1.0.8"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df"
checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
dependencies = [
"proc-macro2",
]
@@ -482,35 +478,30 @@ dependencies = [
[[package]]
name = "semver-parser"
version = "0.10.2"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
checksum = "42ef146c2ad5e5f4b037cd6ce2ebb775401729b19a82040c1beac9d36c7d1428"
dependencies = [
"pest",
]
[[package]]
name = "spmc"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02a8428da277a8e3a15271d79943e80ccc2ef254e78813a166a08d65e4c3ece5"
[[package]]
name = "squoosh-oxipng"
version = "0.1.0"
dependencies = [
"libdeflater",
"crossbeam-channel",
"log",
"once_cell",
"oxipng",
"rayon",
"wasm-bindgen",
"wasm-bindgen-rayon",
]
[[package]]
name = "syn"
version = "1.0.72"
version = "1.0.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1e8cdbefb79a9a5a65e0db8b47b723ee907b7c7f8496c76a1770b5c310bab82"
checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac"
dependencies = [
"proc-macro2",
"quote",
@@ -531,19 +522,19 @@ checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
[[package]]
name = "wasm-bindgen"
version = "0.2.74"
version = "0.2.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd"
checksum = "1ac64ead5ea5f05873d7c12b545865ca2b8d28adfc50a49b84770a3a97265d42"
dependencies = [
"cfg-if 1.0.0",
"cfg-if 0.1.10",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.74"
version = "0.2.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900"
checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68"
dependencies = [
"bumpalo",
"lazy_static",
@@ -556,9 +547,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.74"
version = "0.2.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4"
checksum = "6b13312a745c08c469f0b292dd2fcd6411dba5f7160f593da6ef69b64e407038"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -566,9 +557,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.74"
version = "0.2.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97"
checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe"
dependencies = [
"proc-macro2",
"quote",
@@ -577,20 +568,8 @@ dependencies = [
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-rayon"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3069d2a42e7a7e3bfde668f84adb5fbc35701ca2b39b27a064cbd5ede4e78194"
dependencies = [
"js-sys",
"rayon",
"spmc",
"wasm-bindgen",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.74"
version = "0.2.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f"
checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307"

View File

@@ -12,15 +12,16 @@ wasm-opt = ["-O", "--no-validation"]
crate-type = ["cdylib"]
[dependencies]
oxipng = { version = "4.0.3", default-features = false, features = ["libdeflater"] }
libdeflater = { version = "0.7.1", features = ["freestanding"] }
wasm-bindgen = "0.2.73"
oxipng = { version = "4.0.0", default-features = false, features = ["libdeflater"] }
wasm-bindgen = "0.2.68"
log = { version = "0.4.11", features = ["release_max_level_off"] }
wasm-bindgen-rayon = { version = "1.0", optional = true }
rayon = { version = "1.5.0", optional = true }
once_cell = { version = "1.5.2", optional = true }
crossbeam-channel = { version = "0.5.0", optional = true }
[profile.release]
lto = true
opt-level = "s"
[features]
parallel = ["oxipng/parallel", "wasm-bindgen-rayon"]
parallel = ["oxipng/parallel", "rayon", "crossbeam-channel", "once_cell"]

View File

@@ -3,7 +3,6 @@
set -e
rm -rf pkg,{-parallel}
export CFLAGS="${CFLAGS} -DUNALIGNED_ACCESS_IS_FAST=1"
wasm-pack build -t web
wasm-pack build --target web
RUSTFLAGS='-C target-feature=+atomics,+bulk-memory' wasm-pack build -t web -d pkg-parallel -- -Z build-std=panic_abort,std --features=parallel
rm pkg{,-parallel}/.gitignore

View File

@@ -1,6 +1,6 @@
{
"name": "oxipng",
"scripts": {
"build": "RUST_IMG=rustlang/rust@sha256:744aeea5a38f95aa7a96ec37269a65f0c6197a1cdd87d6534e12bb869141d807 ../build-rust.sh ./build.sh"
"build": "RUST_IMG=rustlang/rust:8bb115b1090d ../build-rust.sh ./build.sh"
}
}

View File

@@ -1,98 +0,0 @@
/**
* Copyright 2021 Google Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Note: we use `wasm_bindgen_worker_`-prefixed message types to make sure
// we can handle bundling into other files, which might happen to have their
// own `postMessage`/`onmessage` communication channels.
//
// If we didn't take that into the account, we could send much simpler signals
// like just `0` or whatever, but the code would be less resilient.
function waitForMsgType(target, type) {
return new Promise(resolve => {
target.addEventListener('message', function onMsg({ data }) {
if (data == null || data.type !== type) return;
target.removeEventListener('message', onMsg);
resolve(data);
});
});
}
waitForMsgType(self, 'wasm_bindgen_worker_init').then(async data => {
// # Note 1
// Our JS should have been generated in
// `[out-dir]/snippets/wasm-bindgen-rayon-[hash]/workerHelpers.js`,
// resolve the main module via `../../..`.
//
// This might need updating if the generated structure changes on wasm-bindgen
// side ever in the future, but works well with bundlers today. The whole
// point of this crate, after all, is to abstract away unstable features
// and temporary bugs so that you don't need to deal with them in your code.
//
// # Note 2
// This could be a regular import, but then some bundlers complain about
// circular deps.
//
// Dynamic import could be cheap if this file was inlined into the parent,
// which would require us just using `../../..` in `new Worker` below,
// but that doesn't work because wasm-pack unconditionally adds
// "sideEffects":false (see below).
//
// OTOH, even though it can't be inlined, it should be still reasonably
// cheap since the requested file is already in cache (it was loaded by
// the main thread).
const pkg = await import('../../..');
await pkg.default(data.module, data.memory);
postMessage({ type: 'wasm_bindgen_worker_ready' });
pkg.wbg_rayon_start_worker(data.receiver);
});
export async function startWorkers(module, memory, builder) {
const workerInit = {
type: 'wasm_bindgen_worker_init',
module,
memory,
receiver: builder.receiver()
};
try {
await Promise.all(
Array.from({ length: builder.numThreads() }, () => {
// Self-spawn into a new Worker.
//
// TODO: while `new URL('...', import.meta.url) becomes a semi-standard
// way to get asset URLs relative to the module across various bundlers
// and browser, ideally we should switch to `import.meta.resolve`
// once it becomes a standard.
//
// Note: we could use `../../..` as the URL here to inline workerHelpers.js
// into the parent entry instead of creating another split point -
// this would be preferable from optimization perspective -
// however, Webpack then eliminates all message handler code
// because wasm-pack produces "sideEffects":false in package.json
// unconditionally.
//
// The only way to work around that is to have side effect code
// in an entry point such as Worker file itself.
const worker = new Worker(new URL('./workerHelpers.js', import.meta.url), {
type: 'module'
});
worker.postMessage(workerInit);
return waitForMsgType(worker, 'wasm_bindgen_worker_ready');
})
);
builder.build();
} finally {
builder.free();
}
}

View File

@@ -1,63 +1,53 @@
/* tslint:disable */
/* eslint-disable */
/**
* @param {Uint8Array} data
* @param {number} level
* @param {boolean} interlace
* @returns {Uint8Array}
*/
export function optimise(data: Uint8Array, level: number, interlace: boolean): Uint8Array;
* @param {Uint8Array} data
* @param {number} level
* @returns {Uint8Array}
*/
export function optimise(data: Uint8Array, level: number): Uint8Array;
/**
* @param {number} num_threads
* @returns {Promise<any>}
*/
export function initThreadPool(num_threads: number): Promise<any>;
* @param {number} num
* @returns {any}
*/
export function worker_initializer(num: number): any;
/**
* @param {number} receiver
*/
export function wbg_rayon_start_worker(receiver: number): void;
*/
export function start_main_thread(): void;
/**
*/
export class wbg_rayon_PoolBuilder {
free(): void;
/**
* @returns {number}
*/
numThreads(): number;
/**
* @returns {number}
*/
receiver(): number;
/**
*/
build(): void;
}
*/
export function start_worker_thread(): void;
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
export type InitInput =
| RequestInfo
| URL
| Response
| BufferSource
| WebAssembly.Module;
export interface InitOutput {
readonly __wasm_init_memory: () => void;
readonly optimise: (a: number, b: number, c: number, d: number, e: number) => void;
readonly __wbg_wbg_rayon_poolbuilder_free: (a: number) => void;
readonly wbg_rayon_poolbuilder_numThreads: (a: number) => number;
readonly wbg_rayon_poolbuilder_receiver: (a: number) => number;
readonly wbg_rayon_poolbuilder_build: (a: number) => void;
readonly initThreadPool: (a: number) => number;
readonly wbg_rayon_start_worker: (a: number) => void;
readonly optimise: (a: number, b: number, c: number, d: number) => void;
readonly malloc: (a: number) => number;
readonly free: (a: number) => void;
readonly worker_initializer: (a: number) => number;
readonly start_main_thread: () => void;
readonly start_worker_thread: () => void;
readonly __wbindgen_export_0: WebAssembly.Memory;
readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
readonly __wbindgen_malloc: (a: number) => number;
readonly __wbindgen_free: (a: number, b: number) => void;
readonly __wbindgen_start: () => void;
}
/**
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {InitInput | Promise<InitInput>} module_or_path
* @param {WebAssembly.Memory} maybe_memory
*
* @returns {Promise<InitOutput>}
*/
export default function init (module_or_path?: InitInput | Promise<InitInput>, maybe_memory?: WebAssembly.Memory): Promise<InitOutput>;
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {InitInput | Promise<InitInput>} module_or_path
* @param {WebAssembly.Memory} maybe_memory
*
* @returns {Promise<InitOutput>}
*/
export default function init(
module_or_path?: InitInput | Promise<InitInput>,
maybe_memory?: WebAssembly.Memory,
): Promise<InitOutput>;

View File

@@ -1,22 +1,5 @@
import { startWorkers } from './snippets/wasm-bindgen-rayon-3d2df09ebec17a22/src/workerHelpers.js';
let wasm;
let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
cachedTextDecoder.decode();
let cachegetUint8Memory0 = null;
function getUint8Memory0() {
if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.__wbindgen_export_0.buffer) {
cachegetUint8Memory0 = new Uint8Array(wasm.__wbindgen_export_0.buffer);
}
return cachegetUint8Memory0;
}
function getStringFromWasm0(ptr, len) {
return cachedTextDecoder.decode(getUint8Memory0().slice(ptr, ptr + len));
}
let memory;
const heap = new Array(32).fill(undefined);
@@ -33,6 +16,28 @@ function addHeapObject(obj) {
return idx;
}
let cachedTextDecoder = new TextDecoder('utf-8', {
ignoreBOM: true,
fatal: true,
});
cachedTextDecoder.decode();
let cachegetUint8Memory0 = null;
function getUint8Memory0() {
if (
cachegetUint8Memory0 === null ||
cachegetUint8Memory0.buffer !== wasm.__wbindgen_export_0.buffer
) {
cachegetUint8Memory0 = new Uint8Array(wasm.__wbindgen_export_0.buffer);
}
return cachegetUint8Memory0;
}
function getStringFromWasm0(ptr, len) {
return cachedTextDecoder.decode(getUint8Memory0().slice(ptr, ptr + len));
}
let WASM_VECTOR_LEN = 0;
function passArray8ToWasm0(arg, malloc) {
@@ -44,7 +49,10 @@ function passArray8ToWasm0(arg, malloc) {
let cachegetInt32Memory0 = null;
function getInt32Memory0() {
if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.__wbindgen_export_0.buffer) {
if (
cachegetInt32Memory0 === null ||
cachegetInt32Memory0.buffer !== wasm.__wbindgen_export_0.buffer
) {
cachegetInt32Memory0 = new Int32Array(wasm.__wbindgen_export_0.buffer);
}
return cachegetInt32Memory0;
@@ -54,28 +62,30 @@ function getArrayU8FromWasm0(ptr, len) {
return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
}
/**
* @param {Uint8Array} data
* @param {number} level
* @param {boolean} interlace
* @returns {Uint8Array}
*/
export function optimise(data, level, interlace) {
* @param {Uint8Array} data
* @param {number} level
* @returns {Uint8Array}
*/
export function optimise(data, level) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
const retptr = wasm.__wbindgen_export_1.value - 16;
wasm.__wbindgen_export_1.value = retptr;
var ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc);
var len0 = WASM_VECTOR_LEN;
wasm.optimise(retptr, ptr0, len0, level, interlace);
wasm.optimise(retptr, ptr0, len0, level);
var r0 = getInt32Memory0()[retptr / 4 + 0];
var r1 = getInt32Memory0()[retptr / 4 + 1];
var v1 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_free(r0, r1 * 1);
return v1;
} finally {
wasm.__wbindgen_add_to_stack_pointer(16);
wasm.__wbindgen_export_1.value += 16;
}
}
function getObject(idx) { return heap[idx]; }
function getObject(idx) {
return heap[idx];
}
function dropObject(idx) {
if (idx < 36) return;
@@ -89,74 +99,42 @@ function takeObject(idx) {
return ret;
}
/**
* @param {number} num_threads
* @returns {Promise<any>}
*/
export function initThreadPool(num_threads) {
var ret = wasm.initThreadPool(num_threads);
* @param {number} num
* @returns {any}
*/
export function worker_initializer(num) {
var ret = wasm.worker_initializer(num);
return takeObject(ret);
}
/**
* @param {number} receiver
*/
export function wbg_rayon_start_worker(receiver) {
wasm.wbg_rayon_start_worker(receiver);
*/
export function start_main_thread() {
wasm.start_main_thread();
}
/**
*/
export class wbg_rayon_PoolBuilder {
static __wrap(ptr) {
const obj = Object.create(wbg_rayon_PoolBuilder.prototype);
obj.ptr = ptr;
return obj;
}
__destroy_into_raw() {
const ptr = this.ptr;
this.ptr = 0;
return ptr;
}
free() {
const ptr = this.__destroy_into_raw();
wasm.__wbg_wbg_rayon_poolbuilder_free(ptr);
}
/**
* @returns {number}
*/
numThreads() {
var ret = wasm.wbg_rayon_poolbuilder_numThreads(this.ptr);
return ret >>> 0;
}
/**
* @returns {number}
*/
receiver() {
var ret = wasm.wbg_rayon_poolbuilder_receiver(this.ptr);
return ret;
}
/**
*/
build() {
wasm.wbg_rayon_poolbuilder_build(this.ptr);
}
export function start_worker_thread() {
wasm.start_worker_thread();
}
async function load(module, imports) {
async function load(module, imports, maybe_memory) {
if (typeof Response === 'function' && module instanceof Response) {
memory = imports.wbg.memory = new WebAssembly.Memory({
initial: 17,
maximum: 16384,
shared: true,
});
if (typeof WebAssembly.instantiateStreaming === 'function') {
try {
return await WebAssembly.instantiateStreaming(module, imports);
} catch (e) {
if (module.headers.get('Content-Type') != 'application/wasm') {
console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
console.warn(
'`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n',
e,
);
} else {
throw e;
}
@@ -165,13 +143,12 @@ async function load(module, imports) {
const bytes = await module.arrayBuffer();
return await WebAssembly.instantiate(bytes, imports);
} else {
memory = imports.wbg.memory = maybe_memory;
const instance = await WebAssembly.instantiate(module, imports);
if (instance instanceof WebAssembly.Instance) {
return { instance, module };
} else {
return instance;
}
@@ -180,33 +157,35 @@ async function load(module, imports) {
async function init(input, maybe_memory) {
if (typeof input === 'undefined') {
input = new URL('squoosh_oxipng_bg.wasm', import.meta.url);
input = import.meta.url.replace(/\.js$/, '_bg.wasm');
}
const imports = {};
imports.wbg = {};
imports.wbg.__wbindgen_throw = function(arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
};
imports.wbg.__wbindgen_module = function() {
imports.wbg.__wbindgen_module = function () {
var ret = init.__wbindgen_wasm_module;
return addHeapObject(ret);
};
imports.wbg.__wbindgen_memory = function() {
imports.wbg.__wbindgen_memory = function () {
var ret = wasm.__wbindgen_export_0;
return addHeapObject(ret);
};
imports.wbg.__wbg_startWorkers_914655bb4d5bb5e1 = function(arg0, arg1, arg2) {
var ret = startWorkers(takeObject(arg0), takeObject(arg1), wbg_rayon_PoolBuilder.__wrap(arg2));
imports.wbg.__wbg_of_6510501edc06d65e = function (arg0, arg1) {
var ret = Array.of(takeObject(arg0), takeObject(arg1));
return addHeapObject(ret);
};
imports.wbg.__wbindgen_throw = function (arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
};
if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
if (
typeof input === 'string' ||
(typeof Request === 'function' && input instanceof Request) ||
(typeof URL === 'function' && input instanceof URL)
) {
input = fetch(input);
}
imports.wbg.memory = maybe_memory || new WebAssembly.Memory({initial:17,maximum:16384,shared:true});
const { instance, module } = await load(await input, imports);
const { instance, module } = await load(await input, imports, maybe_memory);
wasm = instance.exports;
init.__wbindgen_wasm_module = module;
@@ -215,4 +194,3 @@ async function init(input, maybe_memory) {
}
export default init;

View File

@@ -1,15 +1,12 @@
/* tslint:disable */
/* eslint-disable */
export function __wasm_init_memory(): void;
export function optimise(a: number, b: number, c: number, d: number, e: number): void;
export function __wbg_wbg_rayon_poolbuilder_free(a: number): void;
export function wbg_rayon_poolbuilder_numThreads(a: number): number;
export function wbg_rayon_poolbuilder_receiver(a: number): number;
export function wbg_rayon_poolbuilder_build(a: number): void;
export function initThreadPool(a: number): number;
export function wbg_rayon_start_worker(a: number): void;
export function optimise(a: number, b: number, c: number, d: number): void;
export function malloc(a: number): number;
export function free(a: number): void;
export function worker_initializer(a: number): number;
export function start_main_thread(): void;
export function start_worker_thread(): void;
export const __wbindgen_export_0: WebAssembly.Memory;
export function __wbindgen_add_to_stack_pointer(a: number): number;
export function __wbindgen_malloc(a: number): number;
export function __wbindgen_free(a: number, b: number): void;
export function __wbindgen_start(): void;

View File

@@ -1,29 +1,36 @@
/* tslint:disable */
/* eslint-disable */
/**
* @param {Uint8Array} data
* @param {number} level
* @param {boolean} interlace
* @returns {Uint8Array}
*/
export function optimise(data: Uint8Array, level: number, interlace: boolean): Uint8Array;
* @param {Uint8Array} data
* @param {number} level
* @returns {Uint8Array}
*/
export function optimise(data: Uint8Array, level: number): Uint8Array;
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
export type InitInput =
| RequestInfo
| URL
| Response
| BufferSource
| WebAssembly.Module;
export interface InitOutput {
readonly memory: WebAssembly.Memory;
readonly optimise: (a: number, b: number, c: number, d: number, e: number) => void;
readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
readonly optimise: (a: number, b: number, c: number, d: number) => void;
readonly malloc: (a: number) => number;
readonly free: (a: number) => void;
readonly __wbindgen_malloc: (a: number) => number;
readonly __wbindgen_free: (a: number, b: number) => void;
}
/**
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {InitInput | Promise<InitInput>} module_or_path
*
* @returns {Promise<InitOutput>}
*/
export default function init (module_or_path?: InitInput | Promise<InitInput>): Promise<InitOutput>;
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {InitInput | Promise<InitInput>} module_or_path
*
* @returns {Promise<InitOutput>}
*/
export default function init(
module_or_path?: InitInput | Promise<InitInput>,
): Promise<InitOutput>;

View File

@@ -1,13 +1,18 @@
let wasm;
let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
let cachedTextDecoder = new TextDecoder('utf-8', {
ignoreBOM: true,
fatal: true,
});
cachedTextDecoder.decode();
let cachegetUint8Memory0 = null;
function getUint8Memory0() {
if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
if (
cachegetUint8Memory0 === null ||
cachegetUint8Memory0.buffer !== wasm.memory.buffer
) {
cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
}
return cachegetUint8Memory0;
@@ -28,7 +33,10 @@ function passArray8ToWasm0(arg, malloc) {
let cachegetInt32Memory0 = null;
function getInt32Memory0() {
if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
if (
cachegetInt32Memory0 === null ||
cachegetInt32Memory0.buffer !== wasm.memory.buffer
) {
cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
}
return cachegetInt32Memory0;
@@ -38,24 +46,24 @@ function getArrayU8FromWasm0(ptr, len) {
return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
}
/**
* @param {Uint8Array} data
* @param {number} level
* @param {boolean} interlace
* @returns {Uint8Array}
*/
export function optimise(data, level, interlace) {
* @param {Uint8Array} data
* @param {number} level
* @returns {Uint8Array}
*/
export function optimise(data, level) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
const retptr = wasm.__wbindgen_export_0.value - 16;
wasm.__wbindgen_export_0.value = retptr;
var ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc);
var len0 = WASM_VECTOR_LEN;
wasm.optimise(retptr, ptr0, len0, level, interlace);
wasm.optimise(retptr, ptr0, len0, level);
var r0 = getInt32Memory0()[retptr / 4 + 0];
var r1 = getInt32Memory0()[retptr / 4 + 1];
var v1 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_free(r0, r1 * 1);
return v1;
} finally {
wasm.__wbindgen_add_to_stack_pointer(16);
wasm.__wbindgen_export_0.value += 16;
}
}
@@ -64,11 +72,12 @@ async function load(module, imports) {
if (typeof WebAssembly.instantiateStreaming === 'function') {
try {
return await WebAssembly.instantiateStreaming(module, imports);
} catch (e) {
if (module.headers.get('Content-Type') != 'application/wasm') {
console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
console.warn(
'`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n',
e,
);
} else {
throw e;
}
@@ -77,13 +86,11 @@ async function load(module, imports) {
const bytes = await module.arrayBuffer();
return await WebAssembly.instantiate(bytes, imports);
} else {
const instance = await WebAssembly.instantiate(module, imports);
if (instance instanceof WebAssembly.Instance) {
return { instance, module };
} else {
return instance;
}
@@ -92,20 +99,22 @@ async function load(module, imports) {
async function init(input) {
if (typeof input === 'undefined') {
input = new URL('squoosh_oxipng_bg.wasm', import.meta.url);
input = import.meta.url.replace(/\.js$/, '_bg.wasm');
}
const imports = {};
imports.wbg = {};
imports.wbg.__wbindgen_throw = function(arg0, arg1) {
imports.wbg.__wbindgen_throw = function (arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
};
if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
if (
typeof input === 'string' ||
(typeof Request === 'function' && input instanceof Request) ||
(typeof URL === 'function' && input instanceof URL)
) {
input = fetch(input);
}
const { instance, module } = await load(await input, imports);
wasm = instance.exports;
@@ -115,4 +124,3 @@ async function init(input) {
}
export default init;

View File

@@ -1,7 +1,8 @@
/* tslint:disable */
/* eslint-disable */
export const memory: WebAssembly.Memory;
export function optimise(a: number, b: number, c: number, d: number, e: number): void;
export function __wbindgen_add_to_stack_pointer(a: number): number;
export function optimise(a: number, b: number, c: number, d: number): void;
export function malloc(a: number): number;
export function free(a: number): void;
export function __wbindgen_malloc(a: number): number;
export function __wbindgen_free(a: number, b: number): void;

View File

@@ -1,11 +1,13 @@
#[cfg(feature = "parallel")]
pub use wasm_bindgen_rayon::init_thread_pool;
use oxipng::AlphaOptim;
use wasm_bindgen::prelude::*;
use oxipng::AlphaOptim;
mod malloc_shim;
#[cfg(feature = "parallel")]
pub mod parallel;
#[wasm_bindgen]
pub fn optimise(data: &[u8], level: u8, interlace: bool) -> Vec<u8> {
pub fn optimise(data: &[u8], level: u8) -> Vec<u8> {
let mut options = oxipng::Options::from_preset(level);
options.alphas.insert(AlphaOptim::Black);
options.alphas.insert(AlphaOptim::White);
@@ -13,7 +15,6 @@ pub fn optimise(data: &[u8], level: u8, interlace: bool) -> Vec<u8> {
options.alphas.insert(AlphaOptim::Down);
options.alphas.insert(AlphaOptim::Left);
options.alphas.insert(AlphaOptim::Right);
options.interlace = Some(if interlace { 1 } else { 0 });
options.deflate = oxipng::Deflaters::Libdeflater;
oxipng::optimize_from_memory(data, &options).unwrap_throw()

View File

@@ -0,0 +1,47 @@
//! This is a module that provides `malloc` and `free` for `libdeflate`.
//! These implementations are compatible with the standard signatures
//! but use Rust allocator instead of including libc one as well.
//!
//! Rust allocator APIs requires passing size and alignment to the
//! `dealloc` function. This is different from C API, which only
//! expects a pointer in `free` and expects allocators to take care of
//! storing any necessary information elsewhere.
//!
//! In order to simulate C API, we allocate a `size_and_data_ptr`
//! of size `sizeof(usize) + size` where `size` is the requested number
//! of bytes. Then, we store `size` at the beginning of the allocated
//! chunk (within those `sizeof(usize)` bytes) and return
//! `data_ptr = size_and_data_ptr + sizeof(usize)` to the calleer:
//!
//! [`size`][...actual data]
//! -^------------------ `size_and_data_ptr`
//! ---------^---------- `data_ptr`
//!
//! Then, in `free`, the caller gives us `data_ptr`. We can subtract
//! `sizeof(usize)` back and get the original `size_and_data_ptr`.
//! At this point we can read `size` back and call the Rust `dealloc`
//! for the whole allocated chunk.
//!
//! I've raised an upstream issue to hopefully make this easier in
//! future: https://github.com/ebiggers/libdeflate/issues/62
use std::alloc::*;
use std::mem::{align_of, size_of};
unsafe fn layout_for(size: usize) -> Layout {
Layout::from_size_align_unchecked(size_of::<usize>() + size, align_of::<usize>())
}
#[no_mangle]
pub unsafe extern "C" fn malloc(size: usize) -> *mut u8 {
let size_and_data_ptr = alloc(layout_for(size));
*(size_and_data_ptr as *mut usize) = size;
size_and_data_ptr.add(size_of::<usize>())
}
#[no_mangle]
pub unsafe extern "C" fn free(data_ptr: *mut u8) {
let size_and_data_ptr = data_ptr.sub(size_of::<usize>());
let size = *(size_and_data_ptr as *const usize);
dealloc(size_and_data_ptr, layout_for(size))
}

View File

@@ -0,0 +1,61 @@
use crossbeam_channel::{Sender, Receiver, bounded};
use once_cell::sync::OnceCell;
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsValue;
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = Array, js_name = of)]
fn array_of_2(a: JsValue, b: JsValue) -> JsValue;
}
// This is one of the parts that work around Chromium incorrectly implementing postMessage:
// https://bugs.chromium.org/p/chromium/issues/detail?id=1075645
//
// rayon::ThreadPoolBuilder (used below) executes spawn handler to populate the worker pool,
// and then blocks the current thread until each worker unblocks its (opaque) lock.
//
// Normally, we could use postMessage directly inside the spawn handler to
// post module + memory + threadPtr to each worker, and the block the current thread.
//
// However, that bug means that postMessage is currently delayed until the next event loop,
// which will never spin since we block the current thread, and so the other workers will
// never be able to unblock us.
//
// To work around this problem, we:
// 1) Expose `worker_initializer` that returns module + memory pair (without threadPtr)
// that workers can be initialised with to become native threads.
// JavaScript can postMessage this pair in advance, and asynchronously wait for workers
// to acknowledge the receipt.
// 2) Create a global communication channel on the Rust side using crossbeam.
// It will be used to send threadPtr to the pre-initialised workers
// instead of postMessage.
// 3) Provide a separate `start_main_thread` that expects all workers to be ready,
// and just uses the provided channel to send `threadPtr`s using the
// shared memory and blocks the current thread until they're all grabbed.
// 4) Provide a `worker_initializer` that is expected to be invoked from various workers,
// reads one `threadPtr` from the shared channel and starts running it.
static CHANNEL: OnceCell<(Sender<rayon::ThreadBuilder>, Receiver<rayon::ThreadBuilder>)> = OnceCell::new();
#[wasm_bindgen]
pub fn worker_initializer(num: usize) -> JsValue {
CHANNEL.get_or_init(|| bounded(num));
array_of_2(wasm_bindgen::module(), wasm_bindgen::memory())
}
#[wasm_bindgen]
pub fn start_main_thread() {
let (sender, _) = CHANNEL.get().unwrap();
rayon::ThreadPoolBuilder::new()
.num_threads(sender.capacity().unwrap())
.spawn_handler(|thread| Ok(sender.send(thread).unwrap_throw()))
.build_global()
.unwrap_throw()
}
#[wasm_bindgen]
pub fn start_worker_thread() {
let (_, receiver) = CHANNEL.get().unwrap();
receiver.recv().unwrap_throw().run()
}

View File

@@ -1 +0,0 @@
/target

Some files were not shown because too many files have changed in this diff Show More