diff --git a/codecs/oxipng/.appveyor.yml b/codecs/oxipng/.appveyor.yml deleted file mode 100644 index 50910bd6..00000000 --- a/codecs/oxipng/.appveyor.yml +++ /dev/null @@ -1,11 +0,0 @@ -install: - - appveyor-retry appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe - - if not defined RUSTFLAGS rustup-init.exe -y --default-host x86_64-pc-windows-msvc --default-toolchain nightly - - set PATH=%PATH%;C:\Users\appveyor\.cargo\bin - - rustc -V - - cargo -V - -build: false - -test_script: - - cargo test --locked diff --git a/codecs/oxipng/.gitignore b/codecs/oxipng/.gitignore index 4e301317..f5de7310 100644 --- a/codecs/oxipng/.gitignore +++ b/codecs/oxipng/.gitignore @@ -2,5 +2,4 @@ **/*.rs.bk Cargo.lock bin/ -pkg/ wasm-pack.log diff --git a/codecs/oxipng/.travis.yml b/codecs/oxipng/.travis.yml deleted file mode 100644 index 7a913256..00000000 --- a/codecs/oxipng/.travis.yml +++ /dev/null @@ -1,69 +0,0 @@ -language: rust -sudo: false - -cache: cargo - -matrix: - include: - - # Builds with wasm-pack. - - rust: beta - env: RUST_BACKTRACE=1 - addons: - firefox: latest - chrome: stable - before_script: - - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update) - - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate) - - cargo install-update -a - - curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh -s -- -f - script: - - cargo generate --git . --name testing - # Having a broken Cargo.toml (in that it has curlies in fields) anywhere - # in any of our parent dirs is problematic. - - mv Cargo.toml Cargo.toml.tmpl - - cd testing - - wasm-pack build - - wasm-pack test --chrome --firefox --headless - - # Builds on nightly. - - rust: nightly - env: RUST_BACKTRACE=1 - before_script: - - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update) - - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate) - - cargo install-update -a - - rustup target add wasm32-unknown-unknown - script: - - cargo generate --git . --name testing - - mv Cargo.toml Cargo.toml.tmpl - - cd testing - - cargo check - - cargo check --target wasm32-unknown-unknown - - cargo check --no-default-features - - cargo check --target wasm32-unknown-unknown --no-default-features - - cargo check --no-default-features --features console_error_panic_hook - - cargo check --target wasm32-unknown-unknown --no-default-features --features console_error_panic_hook - - cargo check --no-default-features --features "console_error_panic_hook wee_alloc" - - cargo check --target wasm32-unknown-unknown --no-default-features --features "console_error_panic_hook wee_alloc" - - # Builds on beta. - - rust: beta - env: RUST_BACKTRACE=1 - before_script: - - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update) - - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate) - - cargo install-update -a - - rustup target add wasm32-unknown-unknown - script: - - cargo generate --git . --name testing - - mv Cargo.toml Cargo.toml.tmpl - - cd testing - - cargo check - - cargo check --target wasm32-unknown-unknown - - cargo check --no-default-features - - cargo check --target wasm32-unknown-unknown --no-default-features - - cargo check --no-default-features --features console_error_panic_hook - - cargo check --target wasm32-unknown-unknown --no-default-features --features console_error_panic_hook - # Note: no enabling the `wee_alloc` feature here because it requires - # nightly for now. diff --git a/codecs/oxipng/Cargo.toml b/codecs/oxipng/Cargo.toml index ff0639de..eeb7fece 100644 --- a/codecs/oxipng/Cargo.toml +++ b/codecs/oxipng/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "oxipng" +name = "oxipng-wasm" version = "0.1.0" authors = ["Surma "] diff --git a/codecs/oxipng/LICENSE_APACHE b/codecs/oxipng/LICENSE_APACHE deleted file mode 100644 index 1b5ec8b7..00000000 --- a/codecs/oxipng/LICENSE_APACHE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS diff --git a/codecs/oxipng/LICENSE_MIT b/codecs/oxipng/LICENSE_MIT deleted file mode 100644 index 7235cdc3..00000000 --- a/codecs/oxipng/LICENSE_MIT +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2018 Surma - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/codecs/oxipng/pkg/README.md b/codecs/oxipng/pkg/README.md new file mode 100644 index 00000000..806d28a9 --- /dev/null +++ b/codecs/oxipng/pkg/README.md @@ -0,0 +1,52 @@ +# πŸ¦€πŸ•ΈοΈ `wasm-pack-template` + +A template for kick starting a Rust and WebAssembly project using +[`wasm-pack`](https://github.com/rustwasm/wasm-pack). + +This template is designed for compiling Rust libraries into WebAssembly and +publishing the resulting package to NPM. + +* Want to use the published NPM package in a Website? [Check out + `create-wasm-app`.](https://github.com/rustwasm/create-wasm-app) +* Want to make a monorepo-style Website without publishing to NPM? Check out + [`rust-webpack-template`](https://github.com/rustwasm/rust-webpack-template) + and/or + [`rust-parcel-template`](https://github.com/rustwasm/rust-parcel-template). + +## πŸ”‹ Batteries Included + +* [`wasm-bindgen`](https://github.com/rustwasm/wasm-bindgen) for communicating + between WebAssembly and JavaScript. +* [`console_error_panic_hook`](https://github.com/rustwasm/console_error_panic_hook) + for logging panic messages to the developer console. +* [`wee_alloc`](https://github.com/rustwasm/wee_alloc), an allocator optimized + for small code size. + +## 🚴 Usage + +### πŸ‘ Use `cargo generate` to Clone this Template + +[Learn more about `cargo generate` here.](https://github.com/ashleygwilliams/cargo-generate) + +``` +cargo generate --git https://github.com/rustwasm/wasm-pack-template.git --name my-project +cd my-project +``` + +### πŸ› οΈ Build with `wasm-pack build` + +``` +wasm-pack build +``` + +### πŸ”¬ Test in Headless Browsers with `wasm-pack test` + +``` +wasm-pack test --headless --firefox +``` + +### 🎁 Publish to NPM with `wasm-pack publish` + +``` +wasm-pack publish +``` diff --git a/codecs/oxipng/pkg/img.png b/codecs/oxipng/pkg/img.png new file mode 100644 index 00000000..2b779dff Binary files /dev/null and b/codecs/oxipng/pkg/img.png differ diff --git a/codecs/oxipng/pkg/lol.js b/codecs/oxipng/pkg/lol.js new file mode 100644 index 00000000..8d266291 --- /dev/null +++ b/codecs/oxipng/pkg/lol.js @@ -0,0 +1,14 @@ +const oxipng = require("./oxipng_wasm"); +const repl = require("repl"); +const fs = require("fs"); + +async function init() { + // const img = fs.readFileSync("img.png") + // const output = oxipng.compress(img, 0); + // fs.writeFileSync("output.png", output); + console.log(">>>", oxipng.doit()); + const r = repl.start("node> "); + r.context.i = oxipng; +} + +init(); diff --git a/codecs/oxipng/pkg/oxipng.d.ts b/codecs/oxipng/pkg/oxipng.d.ts new file mode 100644 index 00000000..89caff8a --- /dev/null +++ b/codecs/oxipng/pkg/oxipng.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +export function compress(arg0: Uint8Array, arg1: number): Uint8Array; + diff --git a/codecs/oxipng/pkg/oxipng.js b/codecs/oxipng/pkg/oxipng.js new file mode 100644 index 00000000..6ab32270 --- /dev/null +++ b/codecs/oxipng/pkg/oxipng.js @@ -0,0 +1,73 @@ +/* tslint:disable */ +var wasm; + +const TextDecoder = require('util').TextDecoder; + +let cachedTextDecoder = new TextDecoder('utf-8'); + +let cachegetUint8Memory = null; +function getUint8Memory() { + if (cachegetUint8Memory === null || cachegetUint8Memory.buffer !== wasm.memory.buffer) { + cachegetUint8Memory = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory; +} + +function getStringFromWasm(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory().subarray(ptr, ptr + len)); +} + +module.exports.__wbg_log_64e6f53d8e6d5db5 = function(arg0, arg1) { + let varg0 = getStringFromWasm(arg0, arg1); + console.log(varg0); +}; + +let WASM_VECTOR_LEN = 0; + +function passArray8ToWasm(arg) { + const ptr = wasm.__wbindgen_malloc(arg.length * 1); + getUint8Memory().set(arg, ptr / 1); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + +function getArrayU8FromWasm(ptr, len) { + return getUint8Memory().subarray(ptr / 1, ptr / 1 + len); +} + +let cachedGlobalArgumentPtr = null; +function globalArgumentPtr() { + if (cachedGlobalArgumentPtr === null) { + cachedGlobalArgumentPtr = wasm.__wbindgen_global_argument_ptr(); + } + return cachedGlobalArgumentPtr; +} + +let cachegetUint32Memory = null; +function getUint32Memory() { + if (cachegetUint32Memory === null || cachegetUint32Memory.buffer !== wasm.memory.buffer) { + cachegetUint32Memory = new Uint32Array(wasm.memory.buffer); + } + return cachegetUint32Memory; +} +/** +* @param {Uint8Array} arg0 +* @param {number} arg1 +* @returns {Uint8Array} +*/ +module.exports.compress = function(arg0, arg1) { + const ptr0 = passArray8ToWasm(arg0); + const len0 = WASM_VECTOR_LEN; + const retptr = globalArgumentPtr(); + wasm.compress(retptr, ptr0, len0, arg1); + const mem = getUint32Memory(); + const rustptr = mem[retptr / 4]; + const rustlen = mem[retptr / 4 + 1]; + + const realRet = getArrayU8FromWasm(rustptr, rustlen).slice(); + wasm.__wbindgen_free(rustptr, rustlen * 1); + return realRet; + +}; + +wasm = require('./oxipng_bg'); diff --git a/codecs/oxipng/pkg/oxipng_bg.d.ts b/codecs/oxipng/pkg/oxipng_bg.d.ts new file mode 100644 index 00000000..102d9cce --- /dev/null +++ b/codecs/oxipng/pkg/oxipng_bg.d.ts @@ -0,0 +1,6 @@ +/* tslint:disable */ +export const memory: WebAssembly.Memory; +export function __wbindgen_global_argument_ptr(): number; +export function compress(a: number, b: number, c: number, d: number): void; +export function __wbindgen_malloc(a: number): number; +export function __wbindgen_free(a: number, b: number): void; diff --git a/codecs/oxipng/pkg/oxipng_bg.js b/codecs/oxipng/pkg/oxipng_bg.js new file mode 100644 index 00000000..b9f39465 --- /dev/null +++ b/codecs/oxipng/pkg/oxipng_bg.js @@ -0,0 +1,9 @@ + +const path = require('path').join(__dirname, 'oxipng_bg.wasm'); +const bytes = require('fs').readFileSync(path); +let imports = {}; +imports['./oxipng'] = require('./oxipng'); + +const wasmModule = new WebAssembly.Module(bytes); +const wasmInstance = new WebAssembly.Instance(wasmModule, imports); +module.exports = wasmInstance.exports; diff --git a/codecs/oxipng/pkg/oxipng_bg.wasm b/codecs/oxipng/pkg/oxipng_bg.wasm new file mode 100644 index 00000000..739ed9e9 Binary files /dev/null and b/codecs/oxipng/pkg/oxipng_bg.wasm differ diff --git a/codecs/oxipng/pkg/oxipng_manual.d.ts b/codecs/oxipng/pkg/oxipng_manual.d.ts new file mode 100644 index 00000000..eaf3bc58 --- /dev/null +++ b/codecs/oxipng/pkg/oxipng_manual.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +export function compress(arg0: Uint8Array, arg1: number): Promise; + diff --git a/codecs/oxipng/pkg/oxipng_manual.js b/codecs/oxipng/pkg/oxipng_manual.js new file mode 100644 index 00000000..4da46dd5 --- /dev/null +++ b/codecs/oxipng/pkg/oxipng_manual.js @@ -0,0 +1,77 @@ +/* tslint:disable */ +import wasmUrl from './oxipng_bg.wasm'; + +let wasm; +const instancePromise = WebAssembly.instantiateStreaming(fetch(wasmUrl), { + "./oxipng": {__wbg_log_64e6f53d8e6d5db5} +}); + +let cachedTextDecoder = new TextDecoder('utf-8'); + +let cachegetUint8Memory = null; +function getUint8Memory() { + if (cachegetUint8Memory === null || cachegetUint8Memory.buffer !== wasm.memory.buffer) { + cachegetUint8Memory = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory; +} + +function getStringFromWasm(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory().subarray(ptr, ptr + len)); +} + +export function __wbg_log_64e6f53d8e6d5db5(arg0, arg1) { + let varg0 = getStringFromWasm(arg0, arg1); + console.log(varg0); +} + +let WASM_VECTOR_LEN = 0; + +function passArray8ToWasm(arg) { + const ptr = wasm.__wbindgen_malloc(arg.length * 1); + getUint8Memory().set(arg, ptr / 1); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + +function getArrayU8FromWasm(ptr, len) { + return getUint8Memory().subarray(ptr / 1, ptr / 1 + len); +} + +let cachedGlobalArgumentPtr = null; +function globalArgumentPtr() { + if (cachedGlobalArgumentPtr === null) { + cachedGlobalArgumentPtr = wasm.__wbindgen_global_argument_ptr(); + } + return cachedGlobalArgumentPtr; +} + +let cachegetUint32Memory = null; +function getUint32Memory() { + if (cachegetUint32Memory === null || cachegetUint32Memory.buffer !== wasm.memory.buffer) { + cachegetUint32Memory = new Uint32Array(wasm.memory.buffer); + } + return cachegetUint32Memory; +} +/** +* @param {Uint8Array} arg0 +* @param {number} arg1 +* @returns {Uint8Array} +*/ +export async function compress(arg0, arg1) { + wasm = (await instancePromise).instance.exports; + debugger; + const ptr0 = passArray8ToWasm(arg0); + const len0 = WASM_VECTOR_LEN; + const retptr = globalArgumentPtr(); + wasm.compress(retptr, ptr0, len0, arg1); + const mem = getUint32Memory(); + const rustptr = mem[retptr / 4]; + const rustlen = mem[retptr / 4 + 1]; + + const realRet = getArrayU8FromWasm(rustptr, rustlen).slice(); + wasm.__wbindgen_free(rustptr, rustlen * 1); + return realRet; + +} + diff --git a/codecs/oxipng/pkg/oxipng_wasm.d.ts b/codecs/oxipng/pkg/oxipng_wasm.d.ts new file mode 100644 index 00000000..7e179612 --- /dev/null +++ b/codecs/oxipng/pkg/oxipng_wasm.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +export function doit(): number; + diff --git a/codecs/oxipng/pkg/oxipng_wasm.js b/codecs/oxipng/pkg/oxipng_wasm.js new file mode 100644 index 00000000..a1326495 --- /dev/null +++ b/codecs/oxipng/pkg/oxipng_wasm.js @@ -0,0 +1,11 @@ +/* tslint:disable */ +var wasm; + +/** +* @returns {number} +*/ +module.exports.doit = function() { + return wasm.doit(); +}; + +wasm = require('./oxipng_wasm_bg'); diff --git a/codecs/oxipng/pkg/oxipng_wasm_bg.d.ts b/codecs/oxipng/pkg/oxipng_wasm_bg.d.ts new file mode 100644 index 00000000..de4f3436 --- /dev/null +++ b/codecs/oxipng/pkg/oxipng_wasm_bg.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +export const memory: WebAssembly.Memory; +export function doit(): number; diff --git a/codecs/oxipng/pkg/oxipng_wasm_bg.js b/codecs/oxipng/pkg/oxipng_wasm_bg.js new file mode 100644 index 00000000..8e41ec05 --- /dev/null +++ b/codecs/oxipng/pkg/oxipng_wasm_bg.js @@ -0,0 +1,8 @@ + +const path = require('path').join(__dirname, 'oxipng_wasm_bg.wasm'); +const bytes = require('fs').readFileSync(path); +let imports = {}; + +const wasmModule = new WebAssembly.Module(bytes); +const wasmInstance = new WebAssembly.Instance(wasmModule, imports); +module.exports = wasmInstance.exports; diff --git a/codecs/oxipng/pkg/oxipng_wasm_bg.wasm b/codecs/oxipng/pkg/oxipng_wasm_bg.wasm new file mode 100644 index 00000000..9bf58244 Binary files /dev/null and b/codecs/oxipng/pkg/oxipng_wasm_bg.wasm differ diff --git a/codecs/oxipng/pkg/package.json b/codecs/oxipng/pkg/package.json new file mode 100644 index 00000000..629a03df --- /dev/null +++ b/codecs/oxipng/pkg/package.json @@ -0,0 +1,15 @@ +{ + "name": "oxipng-wasm", + "collaborators": [ + "Surma " + ], + "version": "0.1.0", + "files": [ + "oxipng_wasm_bg.wasm", + "oxipng_wasm.js", + "oxipng_wasm_bg.js", + "oxipng_wasm.d.ts" + ], + "main": "oxipng_wasm.js", + "types": "oxipng_wasm.d.ts" +} \ No newline at end of file diff --git a/codecs/oxipng/pkg/test/lol.rs b/codecs/oxipng/pkg/test/lol.rs new file mode 100644 index 00000000..e69de29b diff --git a/codecs/oxipng/src/lib.rs b/codecs/oxipng/src/lib.rs index 2758a22e..38b9287a 100644 --- a/codecs/oxipng/src/lib.rs +++ b/codecs/oxipng/src/lib.rs @@ -1,12 +1,12 @@ extern crate cfg_if; extern crate wasm_bindgen; -extern crate oxipng; +// extern crate oxipng; mod utils; use cfg_if::cfg_if; use wasm_bindgen::prelude::*; - +use std::time::{Instant}; cfg_if! { // When the `wee_alloc` feature is enabled, use `wee_alloc` as the global // allocator. @@ -17,17 +17,34 @@ cfg_if! { } } -#[wasm_bindgen] -extern { - #[wasm_bindgen(js_namespace = console)] - fn log(s: &str); +// #[wasm_bindgen] +// extern { +// #[wasm_bindgen(js_namespace = console)] +// fn log(s: &str); +// } + +// #[wasm_bindgen] +// pub fn compress(img: Vec, level: u8) -> Vec { +// log(&format!("len: {}, level: {}", img.len(), level)); +// let mut options = oxipng::Options::from_preset(level); +// options.threads = 0; +// let result = oxipng::optimize_from_memory(img.as_slice(), &options); +// match result { +// Ok(v) => v, +// Err(e) => e.to_string().as_bytes().to_vec() +// } +// } + +pub fn rust_wasm_syscall(index: usize, _data: *mut ()) -> usize { + if index == 6 { + 1 + } else { + 0 + } } #[wasm_bindgen] -pub fn compress(img: Vec, level: u8) -> Vec { - log(&format!("len: {}, level: {}", img.len(), level)); - let mut options = oxipng::Options::from_preset(level); - options.threads = 0; - let result = oxipng::optimize_from_memory(img.as_slice(), &options); - result.unwrap() +pub fn doit() -> u32 { + let start = Instant::now(); + start.elapsed().as_secs() as u32 } diff --git a/codecs/oxipng/tests/web.rs b/codecs/oxipng/tests/web.rs deleted file mode 100644 index de5c1daf..00000000 --- a/codecs/oxipng/tests/web.rs +++ /dev/null @@ -1,13 +0,0 @@ -//! Test suite for the Web and headless browsers. - -#![cfg(target_arch = "wasm32")] - -extern crate wasm_bindgen_test; -use wasm_bindgen_test::*; - -wasm_bindgen_test_configure!(run_in_browser); - -#[wasm_bindgen_test] -fn pass() { - assert_eq!(1 + 1, 2); -}