| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 'use strict';
- // Copyright 2019-2023 Tauri Programme within The Commons Conservancy
- // SPDX-License-Identifier: Apache-2.0
- // SPDX-License-Identifier: MIT
- /** @ignore */
- function uid() {
- return window.crypto.getRandomValues(new Uint32Array(1))[0];
- }
- /**
- * Transforms a callback function to a string identifier that can be passed to the backend.
- * The backend uses the identifier to `eval()` the callback.
- *
- * @return A unique identifier associated with the callback function.
- *
- * @since 1.0.0
- */
- function transformCallback(callback, once = false) {
- const identifier = uid();
- const prop = `_${identifier}`;
- Object.defineProperty(window, prop, {
- value: (result) => {
- if (once) {
- Reflect.deleteProperty(window, prop);
- }
- return callback === null || callback === void 0 ? void 0 : callback(result);
- },
- writable: false,
- configurable: true
- });
- return identifier;
- }
- /**
- * Sends a message to the backend.
- * @example
- * ```typescript
- * import { invoke } from '@tauri-apps/api/tauri';
- * await invoke('login', { user: 'tauri', password: 'poiwe3h4r5ip3yrhtew9ty' });
- * ```
- *
- * @param cmd The command name.
- * @param args The optional arguments to pass to the command.
- * @return A promise resolving or rejecting to the backend response.
- *
- * @since 1.0.0
- */
- async function invoke(cmd, args = {}) {
- return new Promise((resolve, reject) => {
- const callback = transformCallback((e) => {
- resolve(e);
- Reflect.deleteProperty(window, `_${error}`);
- }, true);
- const error = transformCallback((e) => {
- reject(e);
- Reflect.deleteProperty(window, `_${callback}`);
- }, true);
- window.__TAURI_IPC__({
- cmd,
- callback,
- error,
- ...args
- });
- });
- }
- /**
- * Convert a device file path to an URL that can be loaded by the webview.
- * Note that `asset:` and `https://asset.localhost` must be added to [`tauri.security.csp`](https://tauri.app/v1/api/config/#securityconfig.csp) in `tauri.conf.json`.
- * Example CSP value: `"csp": "default-src 'self'; img-src 'self' asset: https://asset.localhost"` to use the asset protocol on image sources.
- *
- * Additionally, `asset` must be added to [`tauri.allowlist.protocol`](https://tauri.app/v1/api/config/#allowlistconfig.protocol)
- * in `tauri.conf.json` and its access scope must be defined on the `assetScope` array on the same `protocol` object.
- * For example:
- * ```json
- * {
- * "tauri": {
- * "allowlist": {
- * "protocol": {
- * "asset": true,
- * "assetScope": ["$APPDATA/assets/*"]
- * }
- * }
- * }
- * }
- * ```
- *
- * @param filePath The file path.
- * @param protocol The protocol to use. Defaults to `asset`. You only need to set this when using a custom protocol.
- * @example
- * ```typescript
- * import { appDataDir, join } from '@tauri-apps/api/path';
- * import { convertFileSrc } from '@tauri-apps/api/tauri';
- * const appDataDirPath = await appDataDir();
- * const filePath = await join(appDataDirPath, 'assets/video.mp4');
- * const assetUrl = convertFileSrc(filePath);
- *
- * const video = document.getElementById('my-video');
- * const source = document.createElement('source');
- * source.type = 'video/mp4';
- * source.src = assetUrl;
- * video.appendChild(source);
- * video.load();
- * ```
- *
- * @return the URL that can be used as source on the webview.
- *
- * @since 1.0.0
- */
- function convertFileSrc(filePath, protocol = 'asset') {
- return window.__TAURI__.convertFileSrc(filePath, protocol);
- }
- exports.convertFileSrc = convertFileSrc;
- exports.invoke = invoke;
- exports.transformCallback = transformCallback;
|