Skip to content

Commit ff2019d

Browse files
committed
feat: conditional compile for wasm code
1 parent 35fc0e8 commit ff2019d

File tree

5 files changed

+118
-25
lines changed

5 files changed

+118
-25
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
"tw-animate-css": "^1.3.4",
7171
"typescript": "~5.6.2",
7272
"vite": "^6.3.5",
73+
"vite-plugin-conditional-compiler": "^0.3.1",
7374
"vite-plugin-top-level-await": "^1.5.0",
7475
"vite-plugin-wasm": "^3.4.1"
7576
}

pnpm-lock.yaml

Lines changed: 79 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/utilities/invoke.ts

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@
1313
* See LICENSE file for details or contact [email protected]
1414
*/
1515

16-
import init, * as wasm from "@dev-utility/core";
16+
// #v-ifdef WASM
17+
import wasmFunctions from "./invoke.wasm";
18+
// #v-endif
19+
1720
import { type InvokeOptions, invoke as invokeCore } from "@tauri-apps/api/core";
1821
import useSWRMutation, {
1922
type SWRMutationConfiguration,
@@ -30,9 +33,10 @@ import {
3033
type TotpSecret,
3134
type TotpValidationResult,
3235
} from "./types";
36+
3337
export const IS_TAURI = "__TAURI__" in window;
3438

35-
interface UtilitiesArgs {
39+
export interface UtilitiesArgs {
3640
[InvokeFunction.GenerateUlid]: { count: number };
3741
[InvokeFunction.GenerateNanoid]: { count: number };
3842
[InvokeFunction.GenerateUuidV4]: { count: number };
@@ -70,7 +74,7 @@ interface UtilitiesArgs {
7074
};
7175
}
7276

73-
interface UtilitiesReturns {
77+
export interface UtilitiesReturns {
7478
[InvokeFunction.GenerateUlid]: string;
7579
[InvokeFunction.GenerateNanoid]: string;
7680
[InvokeFunction.GenerateUuidV4]: string;
@@ -87,31 +91,19 @@ interface UtilitiesReturns {
8791
[InvokeFunction.ValidateTotpCode]: TotpValidationResult;
8892
}
8993

90-
type WasmFunctions = {
91-
[K in keyof UtilitiesArgs]: (args: UtilitiesArgs[K]) => UtilitiesReturns[K];
92-
};
93-
const wasmFunctions: Partial<WasmFunctions> = {
94-
[InvokeFunction.GenerateUlid]: (args) => wasm.generate_ulid(args.count),
95-
// [InvokeFunction.GenerateNanoid]: (args) => wasm.generate_nanoid(args.count),
96-
[InvokeFunction.GenerateUuidV4]: (args) => wasm.generate_uuid_v4(args.count),
97-
[InvokeFunction.GenerateUuidV7]: (args) => wasm.generate_uuid_v7(args.count),
98-
[InvokeFunction.FormatJson]: (args) => wasm.format_json(args.input, args.style),
99-
[InvokeFunction.FormatCss]: (args) => wasm.format_css(args.input),
100-
// [InvokeFunction.GenerateHashes]: (args) => wasm.generate_hashes(args.input),
101-
[InvokeFunction.EncodeBase64]: (args) => wasm.encode_base64(args.input),
102-
[InvokeFunction.DecodeBase64]: (args) => wasm.decode_base64(args.input),
103-
};
104-
10594
export async function utilityInvoke<T extends InvokeFunction>(
10695
cmd: T,
10796
args: UtilitiesArgs[T],
10897
options?: InvokeOptions
10998
): Promise<UtilitiesReturns[T]> {
11099
if (IS_TAURI) {
111100
return invokeCore(cmd, args, options);
112-
} else if (cmd in wasmFunctions) {
101+
}
102+
// #v-ifdef WASM
103+
else if (cmd in wasmFunctions) {
113104
return wasmFunctions[cmd]!(args);
114105
}
106+
// #v-endif
115107
throw new Error(`Function ${cmd} not found`);
116108
}
117109

src/utilities/invoke.wasm.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// @ts-nocheck
2+
// #v-ifdef WASM
3+
import * as wasm from "@dev-utility/core";
4+
// #v-endif
5+
6+
import type { UtilitiesArgs, UtilitiesReturns } from "./invoke";
7+
import { InvokeFunction } from "./types";
8+
9+
type WasmFunctions = {
10+
[K in keyof UtilitiesArgs]: (args: UtilitiesArgs[K]) => UtilitiesReturns[K];
11+
};
12+
const wasmFunctions: Partial<WasmFunctions> = {
13+
[InvokeFunction.GenerateUlid]: (args) => wasm.generate_ulid(args.count),
14+
// [InvokeFunction.GenerateNanoid]: (args) => wasm.generate_nanoid(args.count),
15+
[InvokeFunction.GenerateUuidV4]: (args) => wasm.generate_uuid_v4(args.count),
16+
[InvokeFunction.GenerateUuidV7]: (args) => wasm.generate_uuid_v7(args.count),
17+
[InvokeFunction.FormatJson]: (args) =>
18+
wasm.format_json(args.input, args.style),
19+
[InvokeFunction.FormatCss]: (args) => wasm.format_css(args.input),
20+
// [InvokeFunction.GenerateHashes]: (args) => wasm.generate_hashes(args.input),
21+
[InvokeFunction.EncodeBase64]: (args) => wasm.encode_base64(args.input),
22+
[InvokeFunction.DecodeBase64]: (args) => wasm.decode_base64(args.input),
23+
};
24+
25+
export default wasmFunctions;

vite.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import tailwindcss from "@tailwindcss/vite";
1818
import react from "@vitejs/plugin-react-swc";
1919
import path from "path";
2020
import { defineConfig } from "vite";
21+
import ConditionalCompile from "vite-plugin-conditional-compiler";
2122
import topLevelAwait from "vite-plugin-top-level-await";
2223
import wasm from "vite-plugin-wasm";
2324

@@ -26,6 +27,7 @@ const host = process.env.TAURI_DEV_HOST;
2627
// https://vitejs.dev/config/
2728
export default defineConfig(async () => ({
2829
plugins: [
30+
ConditionalCompile(),
2931
react({
3032
plugins: [
3133
[

0 commit comments

Comments
 (0)