From 0acef7a463678d475bb4ca76e93e1f092fefa574 Mon Sep 17 00:00:00 2001 From: Shimo-1999 <63487964+Shimo-1999@users.noreply.github.com> Date: Wed, 8 Oct 2025 01:36:14 +0900 Subject: [PATCH 1/5] chore(repo): move frontend to /web and crate to /wasm --- {wasm_project => wasm}/.gitignore | 0 {wasm_project => wasm}/.rustfmt.toml | 0 {wasm_project => wasm}/Cargo.lock | 0 {wasm_project => wasm}/Cargo.toml | 0 {wasm_project => wasm}/pkg/.gitignore | 0 {wasm_project => wasm}/pkg/package.json | 0 {wasm_project => wasm}/pkg/wasm_project.d.ts | 0 {wasm_project => wasm}/pkg/wasm_project.js | 0 {wasm_project => wasm}/pkg/wasm_project_bg.wasm | Bin .../pkg/wasm_project_bg.wasm.d.ts | 0 {wasm_project => wasm}/src/algorithms/greedy.rs | 0 {wasm_project => wasm}/src/algorithms/mod.rs | 0 .../src/algorithms/simulated_annealing.rs | 0 {wasm_project => wasm}/src/lib.rs | 0 index.html => web/index.html | 0 {js => web/js}/script.js | 0 {test => web/test}/images/parrots.png | Bin gif.js => web/vendor/gif.js | 0 gif.worker.js => web/vendor/gif.worker.js | 0 19 files changed, 0 insertions(+), 0 deletions(-) rename {wasm_project => wasm}/.gitignore (100%) rename {wasm_project => wasm}/.rustfmt.toml (100%) rename {wasm_project => wasm}/Cargo.lock (100%) rename {wasm_project => wasm}/Cargo.toml (100%) rename {wasm_project => wasm}/pkg/.gitignore (100%) rename {wasm_project => wasm}/pkg/package.json (100%) rename {wasm_project => wasm}/pkg/wasm_project.d.ts (100%) rename {wasm_project => wasm}/pkg/wasm_project.js (100%) rename {wasm_project => wasm}/pkg/wasm_project_bg.wasm (100%) rename {wasm_project => wasm}/pkg/wasm_project_bg.wasm.d.ts (100%) rename {wasm_project => wasm}/src/algorithms/greedy.rs (100%) rename {wasm_project => wasm}/src/algorithms/mod.rs (100%) rename {wasm_project => wasm}/src/algorithms/simulated_annealing.rs (100%) rename {wasm_project => wasm}/src/lib.rs (100%) rename index.html => web/index.html (100%) rename {js => web/js}/script.js (100%) rename {test => web/test}/images/parrots.png (100%) rename gif.js => web/vendor/gif.js (100%) rename gif.worker.js => web/vendor/gif.worker.js (100%) diff --git a/wasm_project/.gitignore b/wasm/.gitignore similarity index 100% rename from wasm_project/.gitignore rename to wasm/.gitignore diff --git a/wasm_project/.rustfmt.toml b/wasm/.rustfmt.toml similarity index 100% rename from wasm_project/.rustfmt.toml rename to wasm/.rustfmt.toml diff --git a/wasm_project/Cargo.lock b/wasm/Cargo.lock similarity index 100% rename from wasm_project/Cargo.lock rename to wasm/Cargo.lock diff --git a/wasm_project/Cargo.toml b/wasm/Cargo.toml similarity index 100% rename from wasm_project/Cargo.toml rename to wasm/Cargo.toml diff --git a/wasm_project/pkg/.gitignore b/wasm/pkg/.gitignore similarity index 100% rename from wasm_project/pkg/.gitignore rename to wasm/pkg/.gitignore diff --git a/wasm_project/pkg/package.json b/wasm/pkg/package.json similarity index 100% rename from wasm_project/pkg/package.json rename to wasm/pkg/package.json diff --git a/wasm_project/pkg/wasm_project.d.ts b/wasm/pkg/wasm_project.d.ts similarity index 100% rename from wasm_project/pkg/wasm_project.d.ts rename to wasm/pkg/wasm_project.d.ts diff --git a/wasm_project/pkg/wasm_project.js b/wasm/pkg/wasm_project.js similarity index 100% rename from wasm_project/pkg/wasm_project.js rename to wasm/pkg/wasm_project.js diff --git a/wasm_project/pkg/wasm_project_bg.wasm b/wasm/pkg/wasm_project_bg.wasm similarity index 100% rename from wasm_project/pkg/wasm_project_bg.wasm rename to wasm/pkg/wasm_project_bg.wasm diff --git a/wasm_project/pkg/wasm_project_bg.wasm.d.ts b/wasm/pkg/wasm_project_bg.wasm.d.ts similarity index 100% rename from wasm_project/pkg/wasm_project_bg.wasm.d.ts rename to wasm/pkg/wasm_project_bg.wasm.d.ts diff --git a/wasm_project/src/algorithms/greedy.rs b/wasm/src/algorithms/greedy.rs similarity index 100% rename from wasm_project/src/algorithms/greedy.rs rename to wasm/src/algorithms/greedy.rs diff --git a/wasm_project/src/algorithms/mod.rs b/wasm/src/algorithms/mod.rs similarity index 100% rename from wasm_project/src/algorithms/mod.rs rename to wasm/src/algorithms/mod.rs diff --git a/wasm_project/src/algorithms/simulated_annealing.rs b/wasm/src/algorithms/simulated_annealing.rs similarity index 100% rename from wasm_project/src/algorithms/simulated_annealing.rs rename to wasm/src/algorithms/simulated_annealing.rs diff --git a/wasm_project/src/lib.rs b/wasm/src/lib.rs similarity index 100% rename from wasm_project/src/lib.rs rename to wasm/src/lib.rs diff --git a/index.html b/web/index.html similarity index 100% rename from index.html rename to web/index.html diff --git a/js/script.js b/web/js/script.js similarity index 100% rename from js/script.js rename to web/js/script.js diff --git a/test/images/parrots.png b/web/test/images/parrots.png similarity index 100% rename from test/images/parrots.png rename to web/test/images/parrots.png diff --git a/gif.js b/web/vendor/gif.js similarity index 100% rename from gif.js rename to web/vendor/gif.js diff --git a/gif.worker.js b/web/vendor/gif.worker.js similarity index 100% rename from gif.worker.js rename to web/vendor/gif.worker.js From c34473d222dac93e4826345eb2e689f922cff380 Mon Sep 17 00:00:00 2001 From: Shimo-1999 <63487964+Shimo-1999@users.noreply.github.com> Date: Wed, 8 Oct 2025 02:59:19 +0900 Subject: [PATCH 2/5] chore(wasm): remove generated artifacts --- wasm/.gitignore | 1 - wasm/pkg/.gitignore | 0 wasm/pkg/package.json | 12 -- wasm/pkg/wasm_project.d.ts | 77 --------- wasm/pkg/wasm_project.js | 249 ----------------------------- wasm/pkg/wasm_project_bg.wasm | Bin 65547 -> 0 bytes wasm/pkg/wasm_project_bg.wasm.d.ts | 15 -- 7 files changed, 354 deletions(-) delete mode 100644 wasm/.gitignore delete mode 100644 wasm/pkg/.gitignore delete mode 100644 wasm/pkg/package.json delete mode 100644 wasm/pkg/wasm_project.d.ts delete mode 100644 wasm/pkg/wasm_project.js delete mode 100644 wasm/pkg/wasm_project_bg.wasm delete mode 100644 wasm/pkg/wasm_project_bg.wasm.d.ts diff --git a/wasm/.gitignore b/wasm/.gitignore deleted file mode 100644 index 1de5659..0000000 --- a/wasm/.gitignore +++ /dev/null @@ -1 +0,0 @@ -target \ No newline at end of file diff --git a/wasm/pkg/.gitignore b/wasm/pkg/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/wasm/pkg/package.json b/wasm/pkg/package.json deleted file mode 100644 index d055f82..0000000 --- a/wasm/pkg/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "wasm_project", - "version": "0.1.0", - "files": [ - "wasm_project_bg.wasm", - "wasm_project.js", - "wasm_project.d.ts" - ], - "module": "wasm_project.js", - "types": "wasm_project.d.ts", - "sideEffects": false -} \ No newline at end of file diff --git a/wasm/pkg/wasm_project.d.ts b/wasm/pkg/wasm_project.d.ts deleted file mode 100644 index 22aed92..0000000 --- a/wasm/pkg/wasm_project.d.ts +++ /dev/null @@ -1,77 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** -* @param {number} num_rectangles -* @param {number} width -* @param {number} height -* @param {Uint8Array} rgb_data -* @returns {(string)[]} -*/ -export function run_greedy(num_rectangles: number, width: number, height: number, rgb_data: Uint8Array): (string)[]; -/** -* @param {number} num_rectangles -* @param {number} width -* @param {number} height -* @param {Uint8Array} rgb_data -* @returns {(string)[]} -*/ -export function run_simulated_annealing(num_rectangles: number, width: number, height: number, rgb_data: Uint8Array): (string)[]; -/** -* @param {number} algorithm_id -* @param {number} num_rectangles -* @param {number} width -* @param {number} height -* @param {Uint8Array} image_data -* @returns {Ret} -*/ -export function run_algorithm(algorithm_id: number, num_rectangles: number, width: number, height: number, image_data: Uint8Array): Ret; -/** -*/ -export class Ret { - free(): void; -/** -*/ - animation_data: (string)[]; -/** -*/ - max_turn: number; -} - -export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; - -export interface InitOutput { - readonly memory: WebAssembly.Memory; - readonly run_greedy: (a: number, b: number, c: number, d: number, e: number, f: number) => void; - readonly run_simulated_annealing: (a: number, b: number, c: number, d: number, e: number, f: number) => void; - readonly __wbg_ret_free: (a: number) => void; - readonly __wbg_get_ret_animation_data: (a: number, b: number) => void; - readonly __wbg_set_ret_animation_data: (a: number, b: number, c: number) => void; - readonly __wbg_get_ret_max_turn: (a: number) => number; - readonly __wbg_set_ret_max_turn: (a: number, b: number) => void; - readonly run_algorithm: (a: number, b: number, c: number, d: number, e: number, f: number) => number; - readonly __wbindgen_malloc: (a: number, b: number) => number; - readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; - readonly __wbindgen_add_to_stack_pointer: (a: number) => number; - readonly __wbindgen_free: (a: number, b: number, c: number) => void; -} - -export type SyncInitInput = BufferSource | WebAssembly.Module; -/** -* Instantiates the given `module`, which can either be bytes or -* a precompiled `WebAssembly.Module`. -* -* @param {SyncInitInput} module -* -* @returns {InitOutput} -*/ -export function initSync(module: SyncInitInput): InitOutput; - -/** -* If `module_or_path` is {RequestInfo} or {URL}, makes a request and -* for everything else, calls `WebAssembly.instantiate` directly. -* -* @param {InitInput | Promise} module_or_path -* -* @returns {Promise} -*/ -export default function __wbg_init (module_or_path?: InitInput | Promise): Promise; diff --git a/wasm/pkg/wasm_project.js b/wasm/pkg/wasm_project.js deleted file mode 100644 index a606c89..0000000 --- a/wasm/pkg/wasm_project.js +++ /dev/null @@ -1,249 +0,0 @@ -let wasm; - -const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); - -if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; - -let cachedUint8Memory0 = null; - -function getUint8Memory0() { - if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8Memory0; -} - -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -let heap_next = heap.length; - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -let WASM_VECTOR_LEN = 0; - -function passArray8ToWasm0(arg, malloc) { - const ptr = malloc(arg.length * 1, 1) >>> 0; - getUint8Memory0().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} - -let cachedInt32Memory0 = null; - -function getInt32Memory0() { - if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachedInt32Memory0; -} - -function getObject(idx) { return heap[idx]; } - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -const StoreFinalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_store_free(ptr >>> 0)); -/** -*/ -export class Store { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - StoreFinalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_store_free(ptr); - } - /** - */ - constructor() { - const ret = wasm.store_new(); - this.__wbg_ptr = ret >>> 0; - return this; - } - /** - */ - clear() { - wasm.store_clear(this.__wbg_ptr); - } - /** - * @param {number} width - * @param {number} height - */ - init(width, height) { - wasm.store_init(this.__wbg_ptr, width, height); - } - /** - * @param {number} algorithm_id - * @param {number} num_rectangles - * @param {Uint8Array} rgba - */ - runAlgorithmWithImage(algorithm_id, num_rectangles, rgba) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(rgba, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.store_runAlgorithmWithImage(retptr, this.__wbg_ptr, algorithm_id, num_rectangles, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - if (r1) { - throw takeObject(r0); - } - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {number} step - * @returns {string} - */ - visSvg(step) { - let deferred1_0; - let deferred1_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.store_visSvg(retptr, this.__wbg_ptr, step); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred1_0 = r0; - deferred1_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred1_0, deferred1_1, 1); - } - } - /** - * @returns {number} - */ - stepCount() { - const ret = wasm.store_stepCount(this.__wbg_ptr); - return ret >>> 0; - } -} - -async function __wbg_load(module, imports) { - if (typeof Response === 'function' && module instanceof Response) { - 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); - - } else { - throw e; - } - } - } - - 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; - } - } -} - -function __wbg_get_imports() { - const imports = {}; - imports.wbg = {}; - imports.wbg.__wbindgen_error_new = function(arg0, arg1) { - const ret = new Error(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_throw = function(arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }; - - return imports; -} - -function __wbg_init_memory(imports, maybe_memory) { - -} - -function __wbg_finalize_init(instance, module) { - wasm = instance.exports; - __wbg_init.__wbindgen_wasm_module = module; - cachedInt32Memory0 = null; - cachedUint8Memory0 = null; - - - return wasm; -} - -function initSync(module) { - if (wasm !== undefined) return wasm; - - const imports = __wbg_get_imports(); - - __wbg_init_memory(imports); - - if (!(module instanceof WebAssembly.Module)) { - module = new WebAssembly.Module(module); - } - - const instance = new WebAssembly.Instance(module, imports); - - return __wbg_finalize_init(instance, module); -} - -async function __wbg_init(input) { - if (wasm !== undefined) return wasm; - - if (typeof input === 'undefined') { - input = new URL('wasm_project_bg.wasm', import.meta.url); - } - const imports = __wbg_get_imports(); - - if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { - input = fetch(input); - } - - __wbg_init_memory(imports); - - const { instance, module } = await __wbg_load(await input, imports); - - return __wbg_finalize_init(instance, module); -} - -export { initSync } -export default __wbg_init; diff --git a/wasm/pkg/wasm_project_bg.wasm b/wasm/pkg/wasm_project_bg.wasm deleted file mode 100644 index 828b213d6a97ee7a49ec6ba01c4ea181be9ac3c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65547 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 mx Date: Wed, 8 Oct 2025 03:01:24 +0900 Subject: [PATCH 3/5] chore: update .gitignore for wasm build outputs --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 496ee2c..c9a84e2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ +/wasm/target/ +/wasm/pkg/ + .DS_Store \ No newline at end of file From fae9b490c56a4373990aa0554338d7e136287f2a Mon Sep 17 00:00:00 2001 From: Shimo-1999 <63487964+Shimo-1999@users.noreply.github.com> Date: Wed, 8 Oct 2025 03:02:13 +0900 Subject: [PATCH 4/5] ci(pages): update workflow & paths --- .github/workflows/gh-pages.yml | 19 ++++++++++--------- wasm/Cargo.lock | 18 +++++++++--------- wasm/Cargo.toml | 4 ++-- web/index.html | 2 +- web/js/script.js | 4 ++-- 5 files changed, 24 insertions(+), 23 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index d7ee8fb..364e182 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -38,22 +38,23 @@ jobs: - uses: jetli/wasm-pack-action@v0.4.0 - name: Build wasm (target web) - working-directory: wasm_project + working-directory: wasm run: wasm-pack build --release --target web - name: Prepare dist run: | set -euo pipefail mkdir -p "$DIST_DIR" - cp index.html "$DIST_DIR/" - cp -r js "$DIST_DIR/js" - cp gif.js "$DIST_DIR/gif.js" - cp gif.worker.js "$DIST_DIR/gif.worker.js" - mkdir -p "$DIST_DIR/wasm_project" - cp -r wasm_project/pkg "$DIST_DIR/wasm_project/pkg" - if [ -d test/images ]; then + cp web/index.html "$DIST_DIR/" + mkdir -p "$DIST_DIR/js" + cp -r web/js/* "$DIST_DIR/js/" + mkdir -p "$DIST_DIR/vendor" + cp -r web/vendor/* "$DIST_DIR/vendor/" + mkdir -p "$DIST_DIR/wasm/pkg" + cp -r wasm/pkg/* "$DIST_DIR/wasm/pkg/" + if [ -d web/test/images ]; then mkdir -p "$DIST_DIR/test/images" - cp -r test/images/* "$DIST_DIR/test/images/" + cp -r web/test/images/* "$DIST_DIR/test/images/" fi touch "$DIST_DIR/.nojekyll" diff --git a/wasm/Cargo.lock b/wasm/Cargo.lock index c32908b..bb858eb 100644 --- a/wasm/Cargo.lock +++ b/wasm/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "bumpalo" @@ -67,6 +67,14 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "wasm" +version = "0.1.0" +dependencies = [ + "svg", + "wasm-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.92" @@ -120,11 +128,3 @@ name = "wasm-bindgen-shared" version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" - -[[package]] -name = "wasm_project" -version = "0.1.0" -dependencies = [ - "svg", - "wasm-bindgen", -] diff --git a/wasm/Cargo.toml b/wasm/Cargo.toml index 70f556e..d2a3c57 100644 --- a/wasm/Cargo.toml +++ b/wasm/Cargo.toml @@ -1,7 +1,7 @@ [package] -name = "wasm_project" +name = "wasm" version = "0.1.0" -edition = "2021" +edition = "2024" [lib] crate-type = ["cdylib"] diff --git a/web/index.html b/web/index.html index 4b91514..8860c67 100644 --- a/web/index.html +++ b/web/index.html @@ -153,7 +153,7 @@

再生・保存

© 2025 Rectangle Fitting by Shimo-1999 - +