From b730c34923b1da5b7af472757598e1c9765b8c6e Mon Sep 17 00:00:00 2001 From: FabianLars Date: Wed, 3 May 2023 09:13:24 +0200 Subject: [PATCH] Run formatter on new plugins --- plugins/cli/guest-js/index.ts | 22 +- plugins/clipboard/guest-js/index.ts | 31 ++- plugins/clipboard/package.json | 2 +- .../dialog/examples/tauri-app/package.json | 2 +- .../AppIcon.appiconset/Contents.json | 154 +++++------ .../gen/apple/Assets.xcassets/Contents.json | 8 +- .../tauri-app/src-tauri/gen/apple/project.yml | 4 +- .../tauri-app/src-tauri/tauri.conf.json | 2 +- .../dialog/examples/tauri-app/vite.config.js | 18 +- plugins/dialog/guest-js/index.ts | 118 ++++----- plugins/fs/guest-js/index.ts | 137 +++++----- plugins/global-shortcut/guest-js/index.ts | 34 +-- plugins/http/guest-js/index.ts | 230 ++++++++-------- plugins/notification/guest-js/index.ts | 28 +- plugins/notification/src/init.js | 74 +++--- plugins/shell/guest-js/index.ts | 248 +++++++++--------- plugins/shell/package.json | 2 +- tsconfig.base.json | 36 +-- 18 files changed, 582 insertions(+), 568 deletions(-) diff --git a/plugins/cli/guest-js/index.ts b/plugins/cli/guest-js/index.ts index 1472f084..81eaae86 100644 --- a/plugins/cli/guest-js/index.ts +++ b/plugins/cli/guest-js/index.ts @@ -8,7 +8,7 @@ * @module */ -import { invoke } from '@tauri-apps/api/tauri'; +import { invoke } from "@tauri-apps/api/tauri"; /** * @since 1.0.0 @@ -19,32 +19,32 @@ interface ArgMatch { * boolean if flag * string[] or null if takes multiple values */ - value: string | boolean | string[] | null + value: string | boolean | string[] | null; /** * Number of occurrences */ - occurrences: number + occurrences: number; } /** * @since 1.0.0 */ interface SubcommandMatch { - name: string - matches: CliMatches + name: string; + matches: CliMatches; } /** * @since 1.0.0 */ interface CliMatches { - args: Record - subcommand: SubcommandMatch | null + args: Record; + subcommand: SubcommandMatch | null; } /** * Parse the arguments provided to the current process and get the matches using the configuration defined [`tauri.cli`](https://tauri.app/v1/api/config/#tauriconfig.cli) in `tauri.conf.json` - * + * * @example * ```typescript * import { getMatches } from 'tauri-plugin-cli-api'; @@ -64,9 +64,9 @@ interface CliMatches { * @since 1.0.0 */ async function getMatches(): Promise { - return await invoke('plugin:cli|cli_matches'); + return await invoke("plugin:cli|cli_matches"); } -export type { ArgMatch, SubcommandMatch, CliMatches } +export type { ArgMatch, SubcommandMatch, CliMatches }; -export { getMatches } +export { getMatches }; diff --git a/plugins/clipboard/guest-js/index.ts b/plugins/clipboard/guest-js/index.ts index 443532ca..3dd2a67f 100644 --- a/plugins/clipboard/guest-js/index.ts +++ b/plugins/clipboard/guest-js/index.ts @@ -24,14 +24,14 @@ * @module */ -import { invoke } from '@tauri-apps/api/tauri' +import { invoke } from "@tauri-apps/api/tauri"; interface Clip { - kind: K - options: T + kind: K; + options: T; } -type ClipResponse = Clip<'PlainText', string> +type ClipResponse = Clip<"PlainText", string>; /** * Writes plain text to the clipboard. @@ -46,16 +46,19 @@ type ClipResponse = Clip<'PlainText', string> * * @since 1.0.0. */ -async function writeText(text: string, opts?: { label?: string }): Promise { - return invoke('plugin:clipboard|write', { +async function writeText( + text: string, + opts?: { label?: string } +): Promise { + return invoke("plugin:clipboard|write", { data: { - kind: 'PlainText', + kind: "PlainText", options: { label: opts?.label, - text - } - } - }) + text, + }, + }, + }); } /** @@ -68,8 +71,8 @@ async function writeText(text: string, opts?: { label?: string }): Promise * @since 1.0.0. */ async function readText(): Promise { - const kind: ClipResponse = await invoke('plugin:clipboard|read') - return kind.options + const kind: ClipResponse = await invoke("plugin:clipboard|read"); + return kind.options; } -export { writeText, readText } +export { writeText, readText }; diff --git a/plugins/clipboard/package.json b/plugins/clipboard/package.json index 299a8d6f..d51585f4 100644 --- a/plugins/clipboard/package.json +++ b/plugins/clipboard/package.json @@ -29,4 +29,4 @@ "dependencies": { "@tauri-apps/api": "^1.2.0" } -} \ No newline at end of file +} diff --git a/plugins/dialog/examples/tauri-app/package.json b/plugins/dialog/examples/tauri-app/package.json index 2236136a..39488aee 100644 --- a/plugins/dialog/examples/tauri-app/package.json +++ b/plugins/dialog/examples/tauri-app/package.json @@ -19,4 +19,4 @@ "svelte": "^3.49.0", "vite": "^3.0.2" } -} \ No newline at end of file +} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json index 90eea7ec..dd3b8bcc 100644 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,116 +1,116 @@ { - "images" : [ + "images": [ { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "AppIcon-20x20@2x.png", - "scale" : "2x" + "size": "20x20", + "idiom": "iphone", + "filename": "AppIcon-20x20@2x.png", + "scale": "2x" }, { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "AppIcon-20x20@3x.png", - "scale" : "3x" + "size": "20x20", + "idiom": "iphone", + "filename": "AppIcon-20x20@3x.png", + "scale": "3x" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "AppIcon-29x29@2x-1.png", - "scale" : "2x" + "size": "29x29", + "idiom": "iphone", + "filename": "AppIcon-29x29@2x-1.png", + "scale": "2x" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "AppIcon-29x29@3x.png", - "scale" : "3x" + "size": "29x29", + "idiom": "iphone", + "filename": "AppIcon-29x29@3x.png", + "scale": "3x" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "AppIcon-40x40@2x.png", - "scale" : "2x" + "size": "40x40", + "idiom": "iphone", + "filename": "AppIcon-40x40@2x.png", + "scale": "2x" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "AppIcon-40x40@3x.png", - "scale" : "3x" + "size": "40x40", + "idiom": "iphone", + "filename": "AppIcon-40x40@3x.png", + "scale": "3x" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "AppIcon-60x60@2x.png", - "scale" : "2x" + "size": "60x60", + "idiom": "iphone", + "filename": "AppIcon-60x60@2x.png", + "scale": "2x" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "AppIcon-60x60@3x.png", - "scale" : "3x" + "size": "60x60", + "idiom": "iphone", + "filename": "AppIcon-60x60@3x.png", + "scale": "3x" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "AppIcon-20x20@1x.png", - "scale" : "1x" + "size": "20x20", + "idiom": "ipad", + "filename": "AppIcon-20x20@1x.png", + "scale": "1x" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "AppIcon-20x20@2x-1.png", - "scale" : "2x" + "size": "20x20", + "idiom": "ipad", + "filename": "AppIcon-20x20@2x-1.png", + "scale": "2x" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "AppIcon-29x29@1x.png", - "scale" : "1x" + "size": "29x29", + "idiom": "ipad", + "filename": "AppIcon-29x29@1x.png", + "scale": "1x" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "AppIcon-29x29@2x.png", - "scale" : "2x" + "size": "29x29", + "idiom": "ipad", + "filename": "AppIcon-29x29@2x.png", + "scale": "2x" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "AppIcon-40x40@1x.png", - "scale" : "1x" + "size": "40x40", + "idiom": "ipad", + "filename": "AppIcon-40x40@1x.png", + "scale": "1x" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "AppIcon-40x40@2x-1.png", - "scale" : "2x" + "size": "40x40", + "idiom": "ipad", + "filename": "AppIcon-40x40@2x-1.png", + "scale": "2x" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "AppIcon-76x76@1x.png", - "scale" : "1x" + "size": "76x76", + "idiom": "ipad", + "filename": "AppIcon-76x76@1x.png", + "scale": "1x" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "AppIcon-76x76@2x.png", - "scale" : "2x" + "size": "76x76", + "idiom": "ipad", + "filename": "AppIcon-76x76@2x.png", + "scale": "2x" }, { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "AppIcon-83.5x83.5@2x.png", - "scale" : "2x" + "size": "83.5x83.5", + "idiom": "ipad", + "filename": "AppIcon-83.5x83.5@2x.png", + "scale": "2x" }, { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "AppIcon-512@2x.png", - "scale" : "1x" + "size": "1024x1024", + "idiom": "ios-marketing", + "filename": "AppIcon-512@2x.png", + "scale": "1x" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "version": 1, + "author": "xcode" } -} \ No newline at end of file +} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json index da4a164c..97a8662e 100644 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json +++ b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json @@ -1,6 +1,6 @@ { - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "version": 1, + "author": "xcode" } -} \ No newline at end of file +} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/project.yml b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/project.yml index c416a2ed..838c4894 100644 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/project.yml +++ b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/project.yml @@ -60,7 +60,7 @@ targets: base: ENABLE_BITCODE: false ARCHS: [arm64, arm64-sim] - VALID_ARCHS: arm64 arm64-sim + VALID_ARCHS: arm64 arm64-sim LIBRARY_SEARCH_PATHS[arch=x86_64]: $(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) LIBRARY_SEARCH_PATHS[arch=arm64]: $(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) LIBRARY_SEARCH_PATHS[arch=arm64-sim]: $(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) @@ -82,4 +82,4 @@ targets: basedOnDependencyAnalysis: false outputFiles: - $(SRCROOT)/target/aarch64-apple-ios/${CONFIGURATION}/deps/libapp.a - - $(SRCROOT)/target/x86_64-apple-ios/${CONFIGURATION}/deps/libapp.a \ No newline at end of file + - $(SRCROOT)/target/x86_64-apple-ios/${CONFIGURATION}/deps/libapp.a diff --git a/plugins/dialog/examples/tauri-app/src-tauri/tauri.conf.json b/plugins/dialog/examples/tauri-app/src-tauri/tauri.conf.json index 31ef704f..b6fb480a 100644 --- a/plugins/dialog/examples/tauri-app/src-tauri/tauri.conf.json +++ b/plugins/dialog/examples/tauri-app/src-tauri/tauri.conf.json @@ -63,4 +63,4 @@ } ] } -} \ No newline at end of file +} diff --git a/plugins/dialog/examples/tauri-app/vite.config.js b/plugins/dialog/examples/tauri-app/vite.config.js index b7427654..8d30f660 100644 --- a/plugins/dialog/examples/tauri-app/vite.config.js +++ b/plugins/dialog/examples/tauri-app/vite.config.js @@ -4,7 +4,11 @@ import { internalIpV4 } from "internal-ip"; // https://vitejs.dev/config/ export default defineConfig(async () => { - const host = process.env.TAURI_PLATFORM === 'android' || process.env.TAURI_PLATFORM === 'ios' ? (await internalIpV4()) : 'localhost' + const host = + process.env.TAURI_PLATFORM === "android" || + process.env.TAURI_PLATFORM === "ios" + ? await internalIpV4() + : "localhost"; return { plugins: [svelte()], @@ -13,17 +17,17 @@ export default defineConfig(async () => { clearScreen: false, // tauri expects a fixed port, fail if that port is not available server: { - host: '0.0.0.0', + host: "0.0.0.0", port: 5173, strictPort: true, hmr: { - protocol: 'ws', + protocol: "ws", host, - port: 5183 + port: 5183, }, fs: { - allow: ['.', '../../tooling/api/dist'] - } + allow: [".", "../../tooling/api/dist"], + }, }, // to make use of `TAURI_DEBUG` and other env variables // https://tauri.studio/v1/api/config#buildconfig.beforedevcommand @@ -36,5 +40,5 @@ export default defineConfig(async () => { // produce sourcemaps for debug builds sourcemap: !!process.env.TAURI_DEBUG, }, - } + }; }); diff --git a/plugins/dialog/guest-js/index.ts b/plugins/dialog/guest-js/index.ts index 09270f6e..50c6e64c 100644 --- a/plugins/dialog/guest-js/index.ts +++ b/plugins/dialog/guest-js/index.ts @@ -2,18 +2,18 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke } from '@tauri-apps/api/tauri' +import { invoke } from "@tauri-apps/api/tauri"; interface FileResponse { - base64Data?: string - duration?: number - height?: number - width?: number - mimeType?: string - modifiedAt?: number - name?: string - path: string - size: number + base64Data?: string; + duration?: number; + height?: number; + width?: number; + mimeType?: string; + modifiedAt?: number; + name?: string; + path: string; + size: number; } /** @@ -23,7 +23,7 @@ interface FileResponse { */ interface DialogFilter { /** Filter name. */ - name: string + name: string; /** * Extensions to filter, without a `.` prefix. * @example @@ -31,7 +31,7 @@ interface DialogFilter { * extensions: ['svg', 'png'] * ``` */ - extensions: string[] + extensions: string[]; } /** @@ -41,20 +41,20 @@ interface DialogFilter { */ interface OpenDialogOptions { /** The title of the dialog window. */ - title?: string + title?: string; /** The filters of the dialog. */ - filters?: DialogFilter[] + filters?: DialogFilter[]; /** Initial directory or file path. */ - defaultPath?: string + defaultPath?: string; /** Whether the dialog allows multiple selection or not. */ - multiple?: boolean + multiple?: boolean; /** Whether the dialog is a directory selection or not. */ - directory?: boolean + directory?: boolean; /** * If `directory` is true, indicates that it will be read recursively later. * Defines whether subdirectories will be allowed on the scope or not. */ - recursive?: boolean + recursive?: boolean; } /** @@ -64,15 +64,15 @@ interface OpenDialogOptions { */ interface SaveDialogOptions { /** The title of the dialog window. */ - title?: string + title?: string; /** The filters of the dialog. */ - filters?: DialogFilter[] + filters?: DialogFilter[]; /** * Initial directory or file path. * If it's a directory path, the dialog interface will change to that folder. * If it's not an existing directory, the file name will be set to the dialog's file name input and the dialog will be set to the parent folder. */ - defaultPath?: string + defaultPath?: string; } /** @@ -80,36 +80,36 @@ interface SaveDialogOptions { */ interface MessageDialogOptions { /** The title of the dialog. Defaults to the app name. */ - title?: string + title?: string; /** The type of the dialog. Defaults to `info`. */ - type?: 'info' | 'warning' | 'error' + type?: "info" | "warning" | "error"; /** The label of the confirm button. */ - okLabel?: string + okLabel?: string; } interface ConfirmDialogOptions { /** The title of the dialog. Defaults to the app name. */ - title?: string + title?: string; /** The type of the dialog. Defaults to `info`. */ - type?: 'info' | 'warning' | 'error' + type?: "info" | "warning" | "error"; /** The label of the confirm button. */ - okLabel?: string + okLabel?: string; /** The label of the cancel button. */ - cancelLabel?: string + cancelLabel?: string; } async function open( - options?: OpenDialogOptions & { multiple?: false, directory?: false } -): Promise + options?: OpenDialogOptions & { multiple?: false; directory?: false } +): Promise; async function open( - options?: OpenDialogOptions & { multiple?: true, directory?: false } -): Promise + options?: OpenDialogOptions & { multiple?: true; directory?: false } +): Promise; async function open( - options?: OpenDialogOptions & { multiple?: false, directory?: true } -): Promise + options?: OpenDialogOptions & { multiple?: false; directory?: true } +): Promise; async function open( - options?: OpenDialogOptions & { multiple?: true, directory?: true } -): Promise + options?: OpenDialogOptions & { multiple?: true; directory?: true } +): Promise; /** * Open a file/directory selection dialog. * @@ -165,11 +165,11 @@ async function open( async function open( options: OpenDialogOptions = {} ): Promise { - if (typeof options === 'object') { - Object.freeze(options) + if (typeof options === "object") { + Object.freeze(options); } - return invoke('plugin:dialog|open', { options }) + return invoke("plugin:dialog|open", { options }); } /** @@ -197,11 +197,11 @@ async function open( * @since 1.0.0 */ async function save(options: SaveDialogOptions = {}): Promise { - if (typeof options === 'object') { - Object.freeze(options) + if (typeof options === "object") { + Object.freeze(options); } - return invoke('plugin:dialog|save', { options }) + return invoke("plugin:dialog|save", { options }); } /** @@ -225,13 +225,13 @@ async function message( message: string, options?: string | MessageDialogOptions ): Promise { - const opts = typeof options === 'string' ? { title: options } : options - return invoke('plugin:dialog|message', { + const opts = typeof options === "string" ? { title: options } : options; + return invoke("plugin:dialog|message", { message: message.toString(), title: opts?.title?.toString(), type_: opts?.type, - okButtonLabel: opts?.okLabel?.toString() - }) + okButtonLabel: opts?.okLabel?.toString(), + }); } /** @@ -254,14 +254,14 @@ async function ask( message: string, options?: string | ConfirmDialogOptions ): Promise { - const opts = typeof options === 'string' ? { title: options } : options - return invoke('plugin:dialog|ask', { + const opts = typeof options === "string" ? { title: options } : options; + return invoke("plugin:dialog|ask", { message: message.toString(), title: opts?.title?.toString(), type_: opts?.type, - okButtonLabel: opts?.okLabel?.toString() ?? 'Yes', - cancelButtonLabel: opts?.cancelLabel?.toString() ?? 'No', - }) + okButtonLabel: opts?.okLabel?.toString() ?? "Yes", + cancelButtonLabel: opts?.cancelLabel?.toString() ?? "No", + }); } /** @@ -284,14 +284,14 @@ async function confirm( message: string, options?: string | ConfirmDialogOptions ): Promise { - const opts = typeof options === 'string' ? { title: options } : options - return invoke('plugin:dialog|confirm', { + const opts = typeof options === "string" ? { title: options } : options; + return invoke("plugin:dialog|confirm", { message: message.toString(), title: opts?.title?.toString(), type_: opts?.type, - okButtonLabel: opts?.okLabel?.toString() ?? 'Ok', - cancelButtonLabel: opts?.cancelLabel?.toString() ?? 'Cancel', - }) + okButtonLabel: opts?.okLabel?.toString() ?? "Ok", + cancelButtonLabel: opts?.cancelLabel?.toString() ?? "Cancel", + }); } export type { @@ -299,7 +299,7 @@ export type { OpenDialogOptions, SaveDialogOptions, MessageDialogOptions, - ConfirmDialogOptions -} + ConfirmDialogOptions, +}; -export { open, save, message, ask, confirm } +export { open, save, message, ask, confirm }; diff --git a/plugins/fs/guest-js/index.ts b/plugins/fs/guest-js/index.ts index 4201ac4a..66dd3591 100644 --- a/plugins/fs/guest-js/index.ts +++ b/plugins/fs/guest-js/index.ts @@ -210,14 +210,14 @@ enum BaseDirectory { Font, Home, Runtime, - Template + Template, } /** * @since 1.0.0 */ interface FsOptions { - dir?: BaseDirectory + dir?: BaseDirectory; // note that adding fields here needs a change in the writeBinaryFile check } @@ -225,8 +225,8 @@ interface FsOptions { * @since 1.0.0 */ interface FsDirOptions { - dir?: BaseDirectory - recursive?: boolean + dir?: BaseDirectory; + recursive?: boolean; } /** @@ -236,12 +236,12 @@ interface FsDirOptions { */ interface FsTextFileOption { /** Path to the file to write. */ - path: string + path: string; /** The UTF-8 string to write to the file. */ - contents: string + contents: string; } -type BinaryFileContents = Iterable | ArrayLike | ArrayBuffer +type BinaryFileContents = Iterable | ArrayLike | ArrayBuffer; /** * Options object used to write a binary data to a file. @@ -250,23 +250,23 @@ type BinaryFileContents = Iterable | ArrayLike | ArrayBuffer */ interface FsBinaryFileOption { /** Path to the file to write. */ - path: string + path: string; /** The byte array contents. */ - contents: BinaryFileContents + contents: BinaryFileContents; } /** * @since 1.0.0 */ interface FileEntry { - path: string + path: string; /** * Name of the directory/file * can be null if the path terminates with `..` */ - name?: string + name?: string; /** Children of this entry if it's a directory; null otherwise */ - children?: FileEntry[] + children?: FileEntry[]; } /** @@ -286,8 +286,8 @@ async function readTextFile( ): Promise { return await invoke("plugin:fs|read_text_file", { path: filePath, - options - }) + options, + }); } /** @@ -307,10 +307,10 @@ async function readBinaryFile( ): Promise { const arr = await invoke("plugin:fs|read_file", { path: filePath, - options - }) + options, + }); - return Uint8Array.from(arr) + return Uint8Array.from(arr); } /** @@ -328,7 +328,7 @@ async function writeTextFile( path: string, contents: string, options?: FsOptions -): Promise +): Promise; /** * Writes a UTF-8 text file. @@ -345,7 +345,7 @@ async function writeTextFile( async function writeTextFile( file: FsTextFileOption, options?: FsOptions -): Promise +): Promise; /** * Writes a UTF-8 text file. @@ -359,33 +359,33 @@ async function writeTextFile( contents?: string | FsOptions, options?: FsOptions ): Promise { - if (typeof options === 'object') { - Object.freeze(options) + if (typeof options === "object") { + Object.freeze(options); } - if (typeof path === 'object') { - Object.freeze(path) + if (typeof path === "object") { + Object.freeze(path); } - const file: FsTextFileOption = { path: '', contents: '' } - let fileOptions: FsOptions | undefined = options - if (typeof path === 'string') { - file.path = path + const file: FsTextFileOption = { path: "", contents: "" }; + let fileOptions: FsOptions | undefined = options; + if (typeof path === "string") { + file.path = path; } else { - file.path = path.path - file.contents = path.contents + file.path = path.path; + file.contents = path.contents; } - if (typeof contents === 'string') { - file.contents = contents ?? '' + if (typeof contents === "string") { + file.contents = contents ?? ""; } else { - fileOptions = contents + fileOptions = contents; } return await invoke("plugin:fs|write_file", { path: file.path, contents: Array.from(new TextEncoder().encode(file.contents)), - options: fileOptions - }) + options: fileOptions, + }); } /** @@ -406,7 +406,7 @@ async function writeBinaryFile( path: string, contents: BinaryFileContents, options?: FsOptions -): Promise +): Promise; /** * Writes a byte array content to a file. @@ -426,7 +426,7 @@ async function writeBinaryFile( async function writeBinaryFile( file: FsBinaryFileOption, options?: FsOptions -): Promise +): Promise; /** * Writes a byte array content to a file. @@ -440,27 +440,27 @@ async function writeBinaryFile( contents?: BinaryFileContents | FsOptions, options?: FsOptions ): Promise { - if (typeof options === 'object') { - Object.freeze(options) + if (typeof options === "object") { + Object.freeze(options); } - if (typeof path === 'object') { - Object.freeze(path) + if (typeof path === "object") { + Object.freeze(path); } - const file: FsBinaryFileOption = { path: '', contents: [] } - let fileOptions: FsOptions | undefined = options - if (typeof path === 'string') { - file.path = path + const file: FsBinaryFileOption = { path: "", contents: [] }; + let fileOptions: FsOptions | undefined = options; + if (typeof path === "string") { + file.path = path; } else { - file.path = path.path - file.contents = path.contents + file.path = path.path; + file.contents = path.contents; } - if (contents && 'dir' in contents) { - fileOptions = contents - } else if (typeof path === 'string') { + if (contents && "dir" in contents) { + fileOptions = contents; + } else if (typeof path === "string") { // @ts-expect-error in this case `contents` is always a BinaryFileContents - file.contents = contents ?? [] + file.contents = contents ?? []; } return await invoke("plugin:fs|write_binary_file", { @@ -470,8 +470,8 @@ async function writeBinaryFile( ? new Uint8Array(file.contents) : file.contents ), - options: fileOptions - }) + options: fileOptions, + }); } /** @@ -500,8 +500,8 @@ async function readDir( ): Promise { return await invoke("plugin:fs|read_dir", { path: dir, - options - }) + options, + }); } /** @@ -525,8 +525,8 @@ async function createDir( ): Promise { return await invoke("plugin:fs|create_dir", { path: dir, - options - }) + options, + }); } /** @@ -549,8 +549,8 @@ async function removeDir( ): Promise { return await invoke("plugin:fs|remove_dir", { path: dir, - options - }) + options, + }); } /** @@ -574,8 +574,8 @@ async function copyFile( return await invoke("plugin:fs|copy_file", { source, destination, - options - }) + options, + }); } /** @@ -597,8 +597,8 @@ async function removeFile( ): Promise { return await invoke("plugin:fs|remove_file", { path: file, - options - }) + options, + }); } /** @@ -622,9 +622,8 @@ async function renameFile( return await invoke("plugin:fs|rename_file", { oldPath, newPath, - options - - }) + options, + }); } /** @@ -644,7 +643,7 @@ async function exists(path: string): Promise { /** * Returns the metadata for the given path. - * + * * @since 1.0.0 */ async function metadata(path: string): Promise { @@ -670,7 +669,7 @@ export type { FileEntry, Permissions, Metadata, -} +}; export { BaseDirectory, @@ -687,5 +686,5 @@ export { removeFile, renameFile, exists, - metadata -} \ No newline at end of file + metadata, +}; diff --git a/plugins/global-shortcut/guest-js/index.ts b/plugins/global-shortcut/guest-js/index.ts index 4d4966c3..c2c66756 100644 --- a/plugins/global-shortcut/guest-js/index.ts +++ b/plugins/global-shortcut/guest-js/index.ts @@ -21,9 +21,9 @@ * @module */ -import { invoke, transformCallback } from '@tauri-apps/api/tauri' +import { invoke, transformCallback } from "@tauri-apps/api/tauri"; -export type ShortcutHandler = (shortcut: string) => void +export type ShortcutHandler = (shortcut: string) => void; /** * Register a global shortcut. @@ -44,10 +44,10 @@ async function register( shortcut: string, handler: ShortcutHandler ): Promise { - return await invoke('plugin:globalShortcut|register', { + return await invoke("plugin:globalShortcut|register", { shortcut, - handler: transformCallback(handler) - }) + handler: transformCallback(handler), + }); } /** @@ -69,15 +69,15 @@ async function registerAll( shortcuts: string[], handler: ShortcutHandler ): Promise { - return await invoke('plugin:globalShortcut|register_all', { + return await invoke("plugin:globalShortcut|register_all", { shortcuts, - handler: transformCallback(handler) - }) + handler: transformCallback(handler), + }); } /** * Determines whether the given shortcut is registered by this application or not. - * + * * If the shortcut is registered by another application, it will still return `false`. * * @example @@ -91,9 +91,9 @@ async function registerAll( * @since 1.0.0 */ async function isRegistered(shortcut: string): Promise { - return await invoke('plugin:globalShortcut|is_registered', { - shortcut - }) + return await invoke("plugin:globalShortcut|is_registered", { + shortcut, + }); } /** @@ -109,9 +109,9 @@ async function isRegistered(shortcut: string): Promise { * @since 1.0.0 */ async function unregister(shortcut: string): Promise { - return await invoke('plugin:globalShortcut|unregister', { - shortcut - }) + return await invoke("plugin:globalShortcut|unregister", { + shortcut, + }); } /** @@ -125,7 +125,7 @@ async function unregister(shortcut: string): Promise { * @since 1.0.0 */ async function unregisterAll(): Promise { - return await invoke('plugin:globalShortcut|unregister_all') + return await invoke("plugin:globalShortcut|unregister_all"); } -export { register, registerAll, isRegistered, unregister, unregisterAll } +export { register, registerAll, isRegistered, unregister, unregisterAll }; diff --git a/plugins/http/guest-js/index.ts b/plugins/http/guest-js/index.ts index c8028648..47e5e323 100644 --- a/plugins/http/guest-js/index.ts +++ b/plugins/http/guest-js/index.ts @@ -41,14 +41,14 @@ * @module */ -import { invoke } from '@tauri-apps/api/tauri' +import { invoke } from "@tauri-apps/api/tauri"; /** * @since 1.0.0 */ interface Duration { - secs: number - nanos: number + secs: number; + nanos: number; } /** @@ -59,8 +59,8 @@ interface ClientOptions { * Defines the maximum number of redirects the client should follow. * If set to 0, no redirects will be followed. */ - maxRedirections?: number - connectTimeout?: number | Duration + maxRedirections?: number; + connectTimeout?: number | Duration; } /** @@ -69,19 +69,19 @@ interface ClientOptions { enum ResponseType { JSON = 1, Text = 2, - Binary = 3 + Binary = 3, } /** * @since 1.0.0 */ interface FilePart { - file: string | T - mime?: string - fileName?: string + file: string | T; + mime?: string; + fileName?: string; } -type Part = string | Uint8Array | FilePart +type Part = string | Uint8Array | FilePart; /** * The body object to be used on POST and PUT requests. @@ -89,13 +89,13 @@ type Part = string | Uint8Array | FilePart * @since 1.0.0 */ class Body { - type: string - payload: unknown + type: string; + payload: unknown; /** @ignore */ private constructor(type: string, payload: unknown) { - this.type = type - this.payload = payload + this.type = type; + this.payload = payload; } /** @@ -130,39 +130,39 @@ class Body { * @returns The body object ready to be used on the POST and PUT requests. */ static form(data: Record | FormData): Body { - const form: Record> = {} + const form: Record> = {}; const append = ( key: string, v: string | Uint8Array | FilePart | File ): void => { if (v !== null) { - let r - if (typeof v === 'string') { - r = v + let r; + if (typeof v === "string") { + r = v; } else if (v instanceof Uint8Array || Array.isArray(v)) { - r = Array.from(v) + r = Array.from(v); } else if (v instanceof File) { - r = { file: v.name, mime: v.type, fileName: v.name } - } else if (typeof v.file === 'string') { - r = { file: v.file, mime: v.mime, fileName: v.fileName } + r = { file: v.name, mime: v.type, fileName: v.name }; + } else if (typeof v.file === "string") { + r = { file: v.file, mime: v.mime, fileName: v.fileName }; } else { - r = { file: Array.from(v.file), mime: v.mime, fileName: v.fileName } + r = { file: Array.from(v.file), mime: v.mime, fileName: v.fileName }; } - form[String(key)] = r + form[String(key)] = r; } - } + }; if (data instanceof FormData) { for (const [key, value] of data) { - append(key, value) + append(key, value); } } else { for (const [key, value] of Object.entries(data)) { - append(key, value) + append(key, value); } } - return new Body('Form', form) + return new Body("Form", form); } /** @@ -181,7 +181,7 @@ class Body { * @returns The body object ready to be used on the POST and PUT requests. */ static json(data: Record): Body { - return new Body('Json', data) + return new Body("Json", data); } /** @@ -197,7 +197,7 @@ class Body { * @returns The body object ready to be used on the POST and PUT requests. */ static text(value: string): Body { - return new Body('Text', value) + return new Body("Text", value); } /** @@ -217,23 +217,23 @@ class Body { ): Body { // stringifying Uint8Array doesn't return an array of numbers, so we create one here return new Body( - 'Bytes', + "Bytes", Array.from(bytes instanceof ArrayBuffer ? new Uint8Array(bytes) : bytes) - ) + ); } } /** The request HTTP verb. */ type HttpVerb = - | 'GET' - | 'POST' - | 'PUT' - | 'DELETE' - | 'PATCH' - | 'HEAD' - | 'OPTIONS' - | 'CONNECT' - | 'TRACE' + | "GET" + | "POST" + | "PUT" + | "DELETE" + | "PATCH" + | "HEAD" + | "OPTIONS" + | "CONNECT" + | "TRACE"; /** * Options object sent to the backend. @@ -241,27 +241,27 @@ type HttpVerb = * @since 1.0.0 */ interface HttpOptions { - method: HttpVerb - url: string - headers?: Record - query?: Record - body?: Body - timeout?: number | Duration - responseType?: ResponseType + method: HttpVerb; + url: string; + headers?: Record; + query?: Record; + body?: Body; + timeout?: number | Duration; + responseType?: ResponseType; } /** Request options. */ -type RequestOptions = Omit +type RequestOptions = Omit; /** Options for the `fetch` API. */ -type FetchOptions = Omit +type FetchOptions = Omit; /** @ignore */ interface IResponse { - url: string - status: number - headers: Record - rawHeaders: Record - data: T + url: string; + status: number; + headers: Record; + rawHeaders: Record; + data: T; } /** @@ -271,26 +271,26 @@ interface IResponse { * */ class Response { /** The request URL. */ - url: string + url: string; /** The response status code. */ - status: number + status: number; /** A boolean indicating whether the response was successful (status in the range 200–299) or not. */ - ok: boolean + ok: boolean; /** The response headers. */ - headers: Record + headers: Record; /** The response raw headers. */ - rawHeaders: Record + rawHeaders: Record; /** The response data. */ - data: T + data: T; /** @ignore */ constructor(response: IResponse) { - this.url = response.url - this.status = response.status - this.ok = this.status >= 200 && this.status < 300 - this.headers = response.headers - this.rawHeaders = response.rawHeaders - this.data = response.data + this.url = response.url; + this.status = response.status; + this.ok = this.status >= 200 && this.status < 300; + this.headers = response.headers; + this.rawHeaders = response.rawHeaders; + this.data = response.data; } } @@ -298,10 +298,10 @@ class Response { * @since 1.0.0 */ class Client { - id: number + id: number; /** @ignore */ constructor(id: number) { - this.id = id + this.id = id; } /** @@ -314,9 +314,9 @@ class Client { * ``` */ async drop(): Promise { - return invoke('plugin:http|drop_client', { - client: this.id - }) + return invoke("plugin:http|drop_client", { + client: this.id, + }); } /** @@ -333,34 +333,34 @@ class Client { */ async request(options: HttpOptions): Promise> { const jsonResponse = - !options.responseType || options.responseType === ResponseType.JSON + !options.responseType || options.responseType === ResponseType.JSON; if (jsonResponse) { - options.responseType = ResponseType.Text + options.responseType = ResponseType.Text; } - return invoke>('plugin:http|request', { + return invoke>("plugin:http|request", { clientId: this.id, - options + options, }).then((res) => { - const response = new Response(res) + const response = new Response(res); if (jsonResponse) { /* eslint-disable */ try { - response.data = JSON.parse(response.data as string) + response.data = JSON.parse(response.data as string); } catch (e) { - if (response.ok && (response.data as unknown as string) === '') { - response.data = {} as T + if (response.ok && (response.data as unknown as string) === "") { + response.data = {} as T; } else if (response.ok) { throw Error( `Failed to parse response \`${response.data}\` as JSON: ${e}; try setting the \`responseType\` option to \`ResponseType.Text\` or \`ResponseType.Binary\` if the API does not return a JSON response.` - ) + ); } } /* eslint-enable */ - return response + return response; } - return response - }) + return response; + }); } /** @@ -378,10 +378,10 @@ class Client { */ async get(url: string, options?: RequestOptions): Promise> { return this.request({ - method: 'GET', + method: "GET", url, - ...options - }) + ...options, + }); } /** @@ -406,11 +406,11 @@ class Client { options?: RequestOptions ): Promise> { return this.request({ - method: 'POST', + method: "POST", url, body, - ...options - }) + ...options, + }); } /** @@ -436,11 +436,11 @@ class Client { options?: RequestOptions ): Promise> { return this.request({ - method: 'PUT', + method: "PUT", url, body, - ...options - }) + ...options, + }); } /** @@ -456,10 +456,10 @@ class Client { */ async patch(url: string, options?: RequestOptions): Promise> { return this.request({ - method: 'PATCH', + method: "PATCH", url, - ...options - }) + ...options, + }); } /** @@ -473,10 +473,10 @@ class Client { */ async delete(url: string, options?: RequestOptions): Promise> { return this.request({ - method: 'DELETE', + method: "DELETE", url, - ...options - }) + ...options, + }); } } @@ -495,13 +495,13 @@ class Client { * @since 1.0.0 */ async function getClient(options?: ClientOptions): Promise { - return invoke('plugin:http|create_client', { - options - }).then((id) => new Client(id)) + return invoke("plugin:http|create_client", { + options, + }).then((id) => new Client(id)); } /** @internal */ -let defaultClient: Client | null = null +let defaultClient: Client | null = null; /** * Perform an HTTP request using the default client. @@ -519,13 +519,13 @@ async function fetch( options?: FetchOptions ): Promise> { if (defaultClient === null) { - defaultClient = await getClient() + defaultClient = await getClient(); } return defaultClient.request({ url, - method: options?.method ?? 'GET', - ...options - }) + method: options?.method ?? "GET", + ...options, + }); } export type { @@ -535,7 +535,15 @@ export type { HttpVerb, HttpOptions, RequestOptions, - FetchOptions -} - -export { getClient, fetch, Body, Client, Response, ResponseType, type FilePart } + FetchOptions, +}; + +export { + getClient, + fetch, + Body, + Client, + Response, + ResponseType, + type FilePart, +}; diff --git a/plugins/notification/guest-js/index.ts b/plugins/notification/guest-js/index.ts index a480105b..7a186795 100644 --- a/plugins/notification/guest-js/index.ts +++ b/plugins/notification/guest-js/index.ts @@ -24,7 +24,7 @@ * @module */ -import { invoke } from '@tauri-apps/api/tauri' +import { invoke } from "@tauri-apps/api/tauri"; /** * Options to send a notification. @@ -33,15 +33,15 @@ import { invoke } from '@tauri-apps/api/tauri' */ interface Options { /** Notification title. */ - title: string + title: string; /** Optional notification body. */ - body?: string + body?: string; /** Optional notification icon. */ - icon?: string + icon?: string; } /** Possible permission values. */ -type Permission = 'granted' | 'denied' | 'default' +type Permission = "granted" | "denied" | "default"; /** * Checks if the permission to send notifications is granted. @@ -54,10 +54,10 @@ type Permission = 'granted' | 'denied' | 'default' * @since 1.0.0 */ async function isPermissionGranted(): Promise { - if (window.Notification.permission !== 'default') { - return Promise.resolve(window.Notification.permission === 'granted') + if (window.Notification.permission !== "default") { + return Promise.resolve(window.Notification.permission === "granted"); } - return invoke('plugin:notification|is_permission_granted') + return invoke("plugin:notification|is_permission_granted"); } /** @@ -77,7 +77,7 @@ async function isPermissionGranted(): Promise { * @since 1.0.0 */ async function requestPermission(): Promise { - return window.Notification.requestPermission() + return window.Notification.requestPermission(); } /** @@ -99,15 +99,15 @@ async function requestPermission(): Promise { * @since 1.0.0 */ function sendNotification(options: Options | string): void { - if (typeof options === 'string') { + if (typeof options === "string") { // eslint-disable-next-line no-new - new window.Notification(options) + new window.Notification(options); } else { // eslint-disable-next-line no-new - new window.Notification(options.title, options) + new window.Notification(options.title, options); } } -export type { Options, Permission } +export type { Options, Permission }; -export { sendNotification, requestPermission, isPermissionGranted } +export { sendNotification, requestPermission, isPermissionGranted }; diff --git a/plugins/notification/src/init.js b/plugins/notification/src/init.js index 105a7f9b..a6597def 100644 --- a/plugins/notification/src/init.js +++ b/plugins/notification/src/init.js @@ -1,71 +1,71 @@ (function () { - let permissionSettable = false - let permissionValue = 'default' + let permissionSettable = false; + let permissionValue = "default"; function isPermissionGranted() { - if (window.Notification.permission !== 'default') { - return Promise.resolve(window.Notification.permission === 'granted') + if (window.Notification.permission !== "default") { + return Promise.resolve(window.Notification.permission === "granted"); } - return __TAURI__.invoke('plugin:notification|is_permission_granted') + return __TAURI__.invoke("plugin:notification|is_permission_granted"); } function setNotificationPermission(value) { - permissionSettable = true + permissionSettable = true; // @ts-expect-error we can actually set this value on the webview - window.Notification.permission = value - permissionSettable = false + window.Notification.permission = value; + permissionSettable = false; } function requestPermission() { - return __TAURI__.invoke('plugin:notification|request_permission') + return __TAURI__ + .invoke("plugin:notification|request_permission") .then(function (permission) { - setNotificationPermission(permission) - return permission - }) + setNotificationPermission(permission); + return permission; + }); } function sendNotification(options) { - if (typeof options === 'object') { - Object.freeze(options) + if (typeof options === "object") { + Object.freeze(options); } - return __TAURI__.invoke('plugin:notification|notify', { - options: typeof options === 'string' - ? { - title: options - } - : options - }) + return __TAURI__.invoke("plugin:notification|notify", { + options: + typeof options === "string" + ? { + title: options, + } + : options, + }); } // @ts-expect-error unfortunately we can't implement the whole type, so we overwrite it with our own version window.Notification = function (title, options) { - const opts = options || {} - sendNotification( - Object.assign(opts, { title }) - ) - } + const opts = options || {}; + sendNotification(Object.assign(opts, { title })); + }; - window.Notification.requestPermission = requestPermission + window.Notification.requestPermission = requestPermission; - Object.defineProperty(window.Notification, 'permission', { + Object.defineProperty(window.Notification, "permission", { enumerable: true, get: function () { - return permissionValue + return permissionValue; }, set: function (v) { if (!permissionSettable) { - throw new Error('Readonly property') + throw new Error("Readonly property"); } - permissionValue = v - } - }) + permissionValue = v; + }, + }); isPermissionGranted().then(function (response) { if (response === null) { - setNotificationPermission('default') + setNotificationPermission("default"); } else { - setNotificationPermission(response ? 'granted' : 'denied') + setNotificationPermission(response ? "granted" : "denied"); } - }) -})() + }); +})(); diff --git a/plugins/shell/guest-js/index.ts b/plugins/shell/guest-js/index.ts index 8a9ac210..4787fb2c 100644 --- a/plugins/shell/guest-js/index.ts +++ b/plugins/shell/guest-js/index.ts @@ -75,27 +75,27 @@ * @module */ -import { invoke, transformCallback } from '@tauri-apps/api/tauri' +import { invoke, transformCallback } from "@tauri-apps/api/tauri"; /** * @since 1.0.0 */ interface SpawnOptions { /** Current working directory. */ - cwd?: string + cwd?: string; /** Environment variables. set to `null` to clear the process env. */ - env?: Record + env?: Record; /** * Character encoding for stdout/stderr * * @since 1.1.0 * */ - encoding?: string + encoding?: string; } /** @ignore */ interface InternalSpawnOptions extends SpawnOptions { - sidecar?: boolean + sidecar?: boolean; } /** @@ -103,13 +103,13 @@ interface InternalSpawnOptions extends SpawnOptions { */ interface ChildProcess { /** Exit code of the process. `null` if the process was terminated by a signal on Unix. */ - code: number | null + code: number | null; /** If the process was terminated by a signal, represents that signal. */ - signal: number | null + signal: number | null; /** The data that the process wrote to `stdout`. */ - stdout: O + stdout: O; /** The data that the process wrote to `stderr`. */ - stderr: O + stderr: O; } /** @@ -128,16 +128,16 @@ async function execute( args: string | string[] = [], options?: InternalSpawnOptions ): Promise { - if (typeof args === 'object') { - Object.freeze(args) + if (typeof args === "object") { + Object.freeze(args); } - return invoke('plugin:shell|execute', { + return invoke("plugin:shell|execute", { program, args, options, - onEventFn: transformCallback(onEvent) - }) + onEventFn: transformCallback(onEvent), + }); } /** @@ -147,7 +147,7 @@ class EventEmitter> { /** @ignore */ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment private eventListeners: Record void>> = - Object.create(null) + Object.create(null); /** * Alias for `emitter.on(eventName, listener)`. @@ -158,7 +158,7 @@ class EventEmitter> { eventName: N, listener: (arg: E[typeof eventName]) => void ): this { - return this.on(eventName, listener) + return this.on(eventName, listener); } /** @@ -170,7 +170,7 @@ class EventEmitter> { eventName: N, listener: (arg: E[typeof eventName]) => void ): this { - return this.off(eventName, listener) + return this.off(eventName, listener); } /** @@ -189,12 +189,12 @@ class EventEmitter> { ): this { if (eventName in this.eventListeners) { // eslint-disable-next-line security/detect-object-injection - this.eventListeners[eventName].push(listener) + this.eventListeners[eventName].push(listener); } else { // eslint-disable-next-line security/detect-object-injection - this.eventListeners[eventName] = [listener] + this.eventListeners[eventName] = [listener]; } - return this + return this; } /** @@ -210,11 +210,11 @@ class EventEmitter> { listener: (arg: E[typeof eventName]) => void ): this { const wrapper = (arg: E[typeof eventName]): void => { - this.removeListener(eventName, wrapper) + this.removeListener(eventName, wrapper); // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - listener(arg) - } - return this.addListener(eventName, wrapper) + listener(arg); + }; + return this.addListener(eventName, wrapper); } /** @@ -231,9 +231,9 @@ class EventEmitter> { // eslint-disable-next-line security/detect-object-injection this.eventListeners[eventName] = this.eventListeners[eventName].filter( (l) => l !== listener - ) + ); } - return this + return this; } /** @@ -246,12 +246,12 @@ class EventEmitter> { removeAllListeners(event?: N): this { if (event) { // eslint-disable-next-line @typescript-eslint/no-dynamic-delete,security/detect-object-injection - delete this.eventListeners[event] + delete this.eventListeners[event]; } else { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - this.eventListeners = Object.create(null) + this.eventListeners = Object.create(null); } - return this + return this; } /** @@ -264,12 +264,12 @@ class EventEmitter> { emit(eventName: N, arg: E[typeof eventName]): boolean { if (eventName in this.eventListeners) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,security/detect-object-injection - const listeners = this.eventListeners[eventName] + const listeners = this.eventListeners[eventName]; // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - for (const listener of listeners) listener(arg) - return true + for (const listener of listeners) listener(arg); + return true; } - return false + return false; } /** @@ -280,8 +280,8 @@ class EventEmitter> { listenerCount(eventName: N): number { if (eventName in this.eventListeners) // eslint-disable-next-line security/detect-object-injection - return this.eventListeners[eventName].length - return 0 + return this.eventListeners[eventName].length; + return 0; } /** @@ -300,12 +300,12 @@ class EventEmitter> { ): this { if (eventName in this.eventListeners) { // eslint-disable-next-line security/detect-object-injection - this.eventListeners[eventName].unshift(listener) + this.eventListeners[eventName].unshift(listener); } else { // eslint-disable-next-line security/detect-object-injection - this.eventListeners[eventName] = [listener] + this.eventListeners[eventName] = [listener]; } - return this + return this; } /** @@ -321,11 +321,11 @@ class EventEmitter> { listener: (arg: E[typeof eventName]) => void ): this { const wrapper = (arg: any): void => { - this.removeListener(eventName, wrapper) + this.removeListener(eventName, wrapper); // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - listener(arg) - } - return this.prependListener(eventName, wrapper) + listener(arg); + }; + return this.prependListener(eventName, wrapper); } } @@ -334,10 +334,10 @@ class EventEmitter> { */ class Child { /** The child process `pid`. */ - pid: number + pid: number; constructor(pid: number) { - this.pid = pid + this.pid = pid; } /** @@ -356,11 +356,11 @@ class Child { * @returns A promise indicating the success or failure of the operation. */ async write(data: IOPayload): Promise { - return invoke('plugin:shell|stdin_write', { + return invoke("plugin:shell|stdin_write", { pid: this.pid, // correctly serialize Uint8Arrays - buffer: typeof data === 'string' ? data : Array.from(data) - }) + buffer: typeof data === "string" ? data : Array.from(data), + }); } /** @@ -369,20 +369,20 @@ class Child { * @returns A promise indicating the success or failure of the operation. */ async kill(): Promise { - return invoke('plugin:shell|kill', { - cmd: 'killChild', - pid: this.pid - }) + return invoke("plugin:shell|kill", { + cmd: "killChild", + pid: this.pid, + }); } } interface CommandEvents { - close: TerminatedPayload - error: string + close: TerminatedPayload; + error: string; } interface OutputEvents { - data: O + data: O; } /** @@ -408,15 +408,15 @@ interface OutputEvents { */ class Command extends EventEmitter { /** @ignore Program to execute. */ - private readonly program: string + private readonly program: string; /** @ignore Program arguments */ - private readonly args: string[] + private readonly args: string[]; /** @ignore Spawn options. */ - private readonly options: InternalSpawnOptions + private readonly options: InternalSpawnOptions; /** Event emitter for the `stdout`. Emits the `data` event. */ - readonly stdout = new EventEmitter>() + readonly stdout = new EventEmitter>(); /** Event emitter for the `stderr`. Emits the `data` event. */ - readonly stderr = new EventEmitter>() + readonly stderr = new EventEmitter>(); /** * @ignore @@ -432,23 +432,23 @@ class Command extends EventEmitter { args: string | string[] = [], options?: SpawnOptions ) { - super() - this.program = program - this.args = typeof args === 'string' ? [args] : args - this.options = options ?? {} + super(); + this.program = program; + this.args = typeof args === "string" ? [args] : args; + this.options = options ?? {}; } - static create(program: string, args?: string | string[]): Command + static create(program: string, args?: string | string[]): Command; static create( program: string, args?: string | string[], - options?: SpawnOptions & { encoding: 'raw' } - ): Command + options?: SpawnOptions & { encoding: "raw" } + ): Command; static create( program: string, args?: string | string[], options?: SpawnOptions - ): Command + ): Command; /** * Creates a command to execute the given program. @@ -467,20 +467,20 @@ class Command extends EventEmitter { args: string | string[] = [], options?: SpawnOptions ): Command { - return new Command(program, args, options) + return new Command(program, args, options); } - static sidecar(program: string, args?: string | string[]): Command + static sidecar(program: string, args?: string | string[]): Command; static sidecar( program: string, args?: string | string[], - options?: SpawnOptions & { encoding: 'raw' } - ): Command + options?: SpawnOptions & { encoding: "raw" } + ): Command; static sidecar( program: string, args?: string | string[], options?: SpawnOptions - ): Command + ): Command; /** * Creates a command to execute the given sidecar program. @@ -499,9 +499,9 @@ class Command extends EventEmitter { args: string | string[] = [], options?: SpawnOptions ): Command { - const instance = new Command(program, args, options) - instance.options.sidecar = true - return instance + const instance = new Command(program, args, options); + instance.options.sidecar = true; + return instance; } /** @@ -513,24 +513,24 @@ class Command extends EventEmitter { return execute( (event) => { switch (event.event) { - case 'Error': - this.emit('error', event.payload) - break - case 'Terminated': - this.emit('close', event.payload) - break - case 'Stdout': - this.stdout.emit('data', event.payload) - break - case 'Stderr': - this.stderr.emit('data', event.payload) - break + case "Error": + this.emit("error", event.payload); + break; + case "Terminated": + this.emit("close", event.payload); + break; + case "Stdout": + this.stdout.emit("data", event.payload); + break; + case "Stderr": + this.stderr.emit("data", event.payload); + break; } }, this.program, this.args, this.options - ).then((pid) => new Child(pid)) + ).then((pid) => new Child(pid)); } /** @@ -549,38 +549,38 @@ class Command extends EventEmitter { */ async execute(): Promise> { return new Promise((resolve, reject) => { - this.on('error', reject) - - const stdout: O[] = [] - const stderr: O[] = [] - this.stdout.on('data', (line: O) => { - stdout.push(line) - }) - this.stderr.on('data', (line: O) => { - stderr.push(line) - }) - - this.on('close', (payload: TerminatedPayload) => { + this.on("error", reject); + + const stdout: O[] = []; + const stderr: O[] = []; + this.stdout.on("data", (line: O) => { + stdout.push(line); + }); + this.stderr.on("data", (line: O) => { + stderr.push(line); + }); + + this.on("close", (payload: TerminatedPayload) => { resolve({ code: payload.code, signal: payload.signal, stdout: this.collectOutput(stdout) as O, - stderr: this.collectOutput(stderr) as O - }) - }) + stderr: this.collectOutput(stderr) as O, + }); + }); - this.spawn().catch(reject) - }) + this.spawn().catch(reject); + }); } /** @ignore */ private collectOutput(events: O[]): string | Uint8Array { - if (this.options.encoding === 'raw') { + if (this.options.encoding === "raw") { return events.reduce((p, c) => { - return new Uint8Array([...p, ...(c as Uint8Array), 10]) - }, new Uint8Array()) + return new Uint8Array([...p, ...(c as Uint8Array), 10]); + }, new Uint8Array()); } else { - return events.join('\n') + return events.join("\n"); } } } @@ -589,8 +589,8 @@ class Command extends EventEmitter { * Describes the event message received from the command. */ interface Event { - event: T - payload: V + event: T; + payload: V; } /** @@ -598,20 +598,20 @@ interface Event { */ interface TerminatedPayload { /** Exit code of the process. `null` if the process was terminated by a signal on Unix. */ - code: number | null + code: number | null; /** If the process was terminated by a signal, represents that signal. */ - signal: number | null + signal: number | null; } /** Event payload type */ -type IOPayload = string | Uint8Array +type IOPayload = string | Uint8Array; /** Events emitted by the child process. */ type CommandEvent = - | Event<'Stdout', O> - | Event<'Stderr', O> - | Event<'Terminated', TerminatedPayload> - | Event<'Error', string> + | Event<"Stdout", O> + | Event<"Stderr", O> + | Event<"Terminated", TerminatedPayload> + | Event<"Error", string>; /** * Opens a path or URL with the system's default app, @@ -640,18 +640,18 @@ type CommandEvent = * @since 1.0.0 */ async function open(path: string, openWith?: string): Promise { - return invoke('plugin:shell|open', { + return invoke("plugin:shell|open", { path, - with: openWith - }) + with: openWith, + }); } -export { Command, Child, EventEmitter, open } +export { Command, Child, EventEmitter, open }; export type { IOPayload, CommandEvents, TerminatedPayload, OutputEvents, ChildProcess, - SpawnOptions -} + SpawnOptions, +}; diff --git a/plugins/shell/package.json b/plugins/shell/package.json index aa0f9f4b..b6025864 100644 --- a/plugins/shell/package.json +++ b/plugins/shell/package.json @@ -29,4 +29,4 @@ "dependencies": { "@tauri-apps/api": "^1.2.0" } -} \ No newline at end of file +} diff --git a/tsconfig.base.json b/tsconfig.base.json index f40996b1..629a7c96 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,20 +1,20 @@ { - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "lib": ["ES2019", "ES2020.Promise", "ES2020.String", "DOM", "DOM.Iterable"], - "module": "ESNext", - "moduleResolution": "node", - "noEmit": true, - "noEmitOnError": false, - "noUnusedLocals": true, - "noUnusedParameters": true, - "pretty": true, - "sourceMap": true, - "strict": true, - "target": "ES2019", - "declaration": true, - "declarationDir": "./" - }, - "exclude": ["dist-js", "node_modules", "test/types"] + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "lib": ["ES2019", "ES2020.Promise", "ES2020.String", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "node", + "noEmit": true, + "noEmitOnError": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "pretty": true, + "sourceMap": true, + "strict": true, + "target": "ES2019", + "declaration": true, + "declarationDir": "./" + }, + "exclude": ["dist-js", "node_modules", "test/types"] }