diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ffcdedf --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +**/generated/**/*.json binary \ No newline at end of file diff --git a/.gitignore b/.gitignore index 648a991..30c061a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ **/.idea/ **/*.log **/.do-devops.json -**/*.env \ No newline at end of file +**/*.env +**/generated/ast/prose/**/docs/** \ No newline at end of file diff --git a/packages/docs/src/auto-imports.d.ts b/packages/docs/src/auto-imports.d.ts index 8fc2a80..d2b4ccc 100644 --- a/packages/docs/src/auto-imports.d.ts +++ b/packages/docs/src/auto-imports.d.ts @@ -1,223 +1,223 @@ // Generated by 'unplugin-auto-import' // We suggest you to commit this file into source control declare global { - const afterAll: typeof import("vitest")["afterAll"]; - const afterEach: typeof import("vitest")["afterEach"]; - const assert: typeof import("vitest")["assert"]; - const asyncComputed: typeof import("@vueuse/core")["asyncComputed"]; - const autoResetRef: typeof import("@vueuse/core")["autoResetRef"]; - const beforeAll: typeof import("vitest")["beforeAll"]; - const beforeEach: typeof import("vitest")["beforeEach"]; - const biSyncRef: typeof import("@vueuse/core")["biSyncRef"]; - const chai: typeof import("vitest")["chai"]; - const computed: typeof import("vue")["computed"]; - const computedInject: typeof import("@vueuse/core")["computedInject"]; - const controlledComputed: typeof import("@vueuse/core")["controlledComputed"]; - const controlledRef: typeof import("@vueuse/core")["controlledRef"]; - const createApp: typeof import("vue")["createApp"]; - const createEventHook: typeof import("@vueuse/core")["createEventHook"]; - const createGlobalState: typeof import("@vueuse/core")["createGlobalState"]; - const createReactiveFn: typeof import("@vueuse/core")["createReactiveFn"]; - const createSharedComposable: typeof import("@vueuse/core")["createSharedComposable"]; - const createUnrefFn: typeof import("@vueuse/core")["createUnrefFn"]; - const customRef: typeof import("vue")["customRef"]; - const debouncedRef: typeof import("@vueuse/core")["debouncedRef"]; - const debouncedWatch: typeof import("@vueuse/core")["debouncedWatch"]; - const defineAsyncComponent: typeof import("vue")["defineAsyncComponent"]; - const defineComponent: typeof import("vue")["defineComponent"]; - const describe: typeof import("vitest")["describe"]; - const eagerComputed: typeof import("@vueuse/core")["eagerComputed"]; - const effectScope: typeof import("vue")["effectScope"]; - const EffectScope: typeof import("vue")["EffectScope"]; - const expect: typeof import("vitest")["expect"]; - const extendRef: typeof import("@vueuse/core")["extendRef"]; - const getCurrentInstance: typeof import("vue")["getCurrentInstance"]; - const getCurrentScope: typeof import("vue")["getCurrentScope"]; - const h: typeof import("vue")["h"]; - const ignorableWatch: typeof import("@vueuse/core")["ignorableWatch"]; - const inject: typeof import("vue")["inject"]; - const isDefined: typeof import("@vueuse/core")["isDefined"]; - const isReadonly: typeof import("vue")["isReadonly"]; - const isRef: typeof import("vue")["isRef"]; - const it: typeof import("vitest")["it"]; - const makeDestructurable: typeof import("@vueuse/core")["makeDestructurable"]; - const markRaw: typeof import("vue")["markRaw"]; - const nextTick: typeof import("vue")["nextTick"]; - const onActivated: typeof import("vue")["onActivated"]; - const onBeforeMount: typeof import("vue")["onBeforeMount"]; - const onBeforeUnmount: typeof import("vue")["onBeforeUnmount"]; - const onBeforeUpdate: typeof import("vue")["onBeforeUpdate"]; - const onClickOutside: typeof import("@vueuse/core")["onClickOutside"]; - const onDeactivated: typeof import("vue")["onDeactivated"]; - const onErrorCaptured: typeof import("vue")["onErrorCaptured"]; - const onKeyStroke: typeof import("@vueuse/core")["onKeyStroke"]; - const onMounted: typeof import("vue")["onMounted"]; - const onRenderTracked: typeof import("vue")["onRenderTracked"]; - const onRenderTriggered: typeof import("vue")["onRenderTriggered"]; - const onScopeDispose: typeof import("vue")["onScopeDispose"]; - const onServerPrefetch: typeof import("vue")["onServerPrefetch"]; - const onStartTyping: typeof import("@vueuse/core")["onStartTyping"]; - const onUnmounted: typeof import("vue")["onUnmounted"]; - const onUpdated: typeof import("vue")["onUpdated"]; - const pausableWatch: typeof import("@vueuse/core")["pausableWatch"]; - const provide: typeof import("vue")["provide"]; - const reactify: typeof import("@vueuse/core")["reactify"]; - const reactifyObject: typeof import("@vueuse/core")["reactifyObject"]; - const reactive: typeof import("vue")["reactive"]; - const reactivePick: typeof import("@vueuse/core")["reactivePick"]; - const readonly: typeof import("vue")["readonly"]; - const ref: typeof import("vue")["ref"]; - const refDefault: typeof import("@vueuse/core")["refDefault"]; - const resolveComponent: typeof import("vue")["resolveComponent"]; - const shallowReactive: typeof import("vue")["shallowReactive"]; - const shallowReadonly: typeof import("vue")["shallowReadonly"]; - const shallowRef: typeof import("vue")["shallowRef"]; - const suite: typeof import("vitest")["suite"]; - const syncRef: typeof import("@vueuse/core")["syncRef"]; - const templateRef: typeof import("@vueuse/core")["templateRef"]; - const test: typeof import("vitest")["test"]; - const throttledRef: typeof import("@vueuse/core")["throttledRef"]; - const throttledWatch: typeof import("@vueuse/core")["throttledWatch"]; - const toRaw: typeof import("vue")["toRaw"]; - const toReactive: typeof import("@vueuse/core")["toReactive"]; - const toRef: typeof import("vue")["toRef"]; - const toRefs: typeof import("vue")["toRefs"]; - const triggerRef: typeof import("vue")["triggerRef"]; - const tryOnBeforeUnmount: typeof import("@vueuse/core")["tryOnBeforeUnmount"]; - const tryOnMounted: typeof import("@vueuse/core")["tryOnMounted"]; - const tryOnScopeDispose: typeof import("@vueuse/core")["tryOnScopeDispose"]; - const tryOnUnmounted: typeof import("@vueuse/core")["tryOnUnmounted"]; - const unref: typeof import("vue")["unref"]; - const unrefElement: typeof import("@vueuse/core")["unrefElement"]; - const until: typeof import("@vueuse/core")["until"]; - const useActiveElement: typeof import("@vueuse/core")["useActiveElement"]; - const useAsyncQueue: typeof import("@vueuse/core")["useAsyncQueue"]; - const useAsyncState: typeof import("@vueuse/core")["useAsyncState"]; - const useAttrs: typeof import("vue")["useAttrs"]; - const useBase64: typeof import("@vueuse/core")["useBase64"]; - const useBattery: typeof import("@vueuse/core")["useBattery"]; - const useBreakpoints: typeof import("@vueuse/core")["useBreakpoints"]; - const useBroadcastChannel: typeof import("@vueuse/core")["useBroadcastChannel"]; - const useBrowserLocation: typeof import("@vueuse/core")["useBrowserLocation"]; - const useClamp: typeof import("@vueuse/core")["useClamp"]; - const useClipboard: typeof import("@vueuse/core")["useClipboard"]; - const useColorMode: typeof import("@vueuse/core")["useColorMode"]; - const useConfirmDialog: typeof import("@vueuse/core")["useConfirmDialog"]; - const useCounter: typeof import("@vueuse/core")["useCounter"]; - const useCssModule: typeof import("vue")["useCssModule"]; - const useCssVar: typeof import("@vueuse/core")["useCssVar"]; - const useCssVars: typeof import("vue")["useCssVars"]; - const useCycleList: typeof import("@vueuse/core")["useCycleList"]; - const useDark: typeof import("@vueuse/core")["useDark"]; - const useDebounce: typeof import("@vueuse/core")["useDebounce"]; - const useDebouncedRefHistory: typeof import("@vueuse/core")["useDebouncedRefHistory"]; - const useDebounceFn: typeof import("@vueuse/core")["useDebounceFn"]; - const useDeviceMotion: typeof import("@vueuse/core")["useDeviceMotion"]; - const useDeviceOrientation: typeof import("@vueuse/core")["useDeviceOrientation"]; - const useDevicePixelRatio: typeof import("@vueuse/core")["useDevicePixelRatio"]; - const useDevicesList: typeof import("@vueuse/core")["useDevicesList"]; - const useDisplayMedia: typeof import("@vueuse/core")["useDisplayMedia"]; - const useDocumentVisibility: typeof import("@vueuse/core")["useDocumentVisibility"]; - const useDraggable: typeof import("@vueuse/core")["useDraggable"]; - const useElementBounding: typeof import("@vueuse/core")["useElementBounding"]; - const useElementByPoint: typeof import("@vueuse/core")["useElementByPoint"]; - const useElementHover: typeof import("@vueuse/core")["useElementHover"]; - const useElementSize: typeof import("@vueuse/core")["useElementSize"]; - const useElementVisibility: typeof import("@vueuse/core")["useElementVisibility"]; - const useEventBus: typeof import("@vueuse/core")["useEventBus"]; - const useEventListener: typeof import("@vueuse/core")["useEventListener"]; - const useEventSource: typeof import("@vueuse/core")["useEventSource"]; - const useEyeDropper: typeof import("@vueuse/core")["useEyeDropper"]; - const useFavicon: typeof import("@vueuse/core")["useFavicon"]; - const useFetch: typeof import("@vueuse/core")["useFetch"]; - const useFocus: typeof import("@vueuse/core")["useFocus"]; - const useFocusWithin: typeof import("@vueuse/core")["useFocusWithin"]; - const useFps: typeof import("@vueuse/core")["useFps"]; - const useFullscreen: typeof import("@vueuse/core")["useFullscreen"]; - const useGeolocation: typeof import("@vueuse/core")["useGeolocation"]; - const useHead: typeof import("@vueuse/head")["useHead"]; - const useI18n: typeof import("vue-i18n")["useI18n"]; - const useIdle: typeof import("@vueuse/core")["useIdle"]; - const useIntersectionObserver: typeof import("@vueuse/core")["useIntersectionObserver"]; - const useInterval: typeof import("@vueuse/core")["useInterval"]; - const useIntervalFn: typeof import("@vueuse/core")["useIntervalFn"]; - const useKeyModifier: typeof import("@vueuse/core")["useKeyModifier"]; - const useLastChanged: typeof import("@vueuse/core")["useLastChanged"]; - const useLocalStorage: typeof import("@vueuse/core")["useLocalStorage"]; - const useMagicKeys: typeof import("@vueuse/core")["useMagicKeys"]; - const useManualRefHistory: typeof import("@vueuse/core")["useManualRefHistory"]; - const useMediaControls: typeof import("@vueuse/core")["useMediaControls"]; - const useMediaQuery: typeof import("@vueuse/core")["useMediaQuery"]; - const useMemoize: typeof import("@vueuse/core")["useMemoize"]; - const useMemory: typeof import("@vueuse/core")["useMemory"]; - const useMounted: typeof import("@vueuse/core")["useMounted"]; - const useMouse: typeof import("@vueuse/core")["useMouse"]; - const useMouseInElement: typeof import("@vueuse/core")["useMouseInElement"]; - const useMousePressed: typeof import("@vueuse/core")["useMousePressed"]; - const useMutationObserver: typeof import("@vueuse/core")["useMutationObserver"]; - const useNavigatorLanguage: typeof import("@vueuse/core")["useNavigatorLanguage"]; - const useNetwork: typeof import("@vueuse/core")["useNetwork"]; - const useNow: typeof import("@vueuse/core")["useNow"]; - const useOnline: typeof import("@vueuse/core")["useOnline"]; - const usePageLeave: typeof import("@vueuse/core")["usePageLeave"]; - const useParallax: typeof import("@vueuse/core")["useParallax"]; - const usePermission: typeof import("@vueuse/core")["usePermission"]; - const usePointer: typeof import("@vueuse/core")["usePointer"]; - const usePointerSwipe: typeof import("@vueuse/core")["usePointerSwipe"]; - const usePreferredColorScheme: typeof import("@vueuse/core")["usePreferredColorScheme"]; - const usePreferredDark: typeof import("@vueuse/core")["usePreferredDark"]; - const usePreferredLanguages: typeof import("@vueuse/core")["usePreferredLanguages"]; - const useRafFn: typeof import("@vueuse/core")["useRafFn"]; - const useRefHistory: typeof import("@vueuse/core")["useRefHistory"]; - const useResizeObserver: typeof import("@vueuse/core")["useResizeObserver"]; - const useRoute: typeof import("vue-router")["useRoute"]; - const useRouter: typeof import("vue-router")["useRouter"]; - const useScreenSafeArea: typeof import("@vueuse/core")["useScreenSafeArea"]; - const useScriptTag: typeof import("@vueuse/core")["useScriptTag"]; - const useScroll: typeof import("@vueuse/core")["useScroll"]; - const useScrollLock: typeof import("@vueuse/core")["useScrollLock"]; - const useSessionStorage: typeof import("@vueuse/core")["useSessionStorage"]; - const useShare: typeof import("@vueuse/core")["useShare"]; - const useSlots: typeof import("vue")["useSlots"]; - const useSpeechRecognition: typeof import("@vueuse/core")["useSpeechRecognition"]; - const useSpeechSynthesis: typeof import("@vueuse/core")["useSpeechSynthesis"]; - const useStorage: typeof import("@vueuse/core")["useStorage"]; - const useStorageAsync: typeof import("@vueuse/core")["useStorageAsync"]; - const useStyleTag: typeof import("@vueuse/core")["useStyleTag"]; - const useSwipe: typeof import("@vueuse/core")["useSwipe"]; - const useTemplateRefsList: typeof import("@vueuse/core")["useTemplateRefsList"]; - const useTextSelection: typeof import("@vueuse/core")["useTextSelection"]; - const useThrottle: typeof import("@vueuse/core")["useThrottle"]; - const useThrottledRefHistory: typeof import("@vueuse/core")["useThrottledRefHistory"]; - const useThrottleFn: typeof import("@vueuse/core")["useThrottleFn"]; - const useTimeAgo: typeof import("@vueuse/core")["useTimeAgo"]; - const useTimeout: typeof import("@vueuse/core")["useTimeout"]; - const useTimeoutFn: typeof import("@vueuse/core")["useTimeoutFn"]; - const useTimestamp: typeof import("@vueuse/core")["useTimestamp"]; - const useTitle: typeof import("@vueuse/core")["useTitle"]; - const useToggle: typeof import("@vueuse/core")["useToggle"]; - const useTransition: typeof import("@vueuse/core")["useTransition"]; - const useUrlSearchParams: typeof import("@vueuse/core")["useUrlSearchParams"]; - const useUserMedia: typeof import("@vueuse/core")["useUserMedia"]; - const useVibrate: typeof import("@vueuse/core")["useVibrate"]; - const useVirtualList: typeof import("@vueuse/core")["useVirtualList"]; - const useVModel: typeof import("@vueuse/core")["useVModel"]; - const useVModels: typeof import("@vueuse/core")["useVModels"]; - const useWakeLock: typeof import("@vueuse/core")["useWakeLock"]; - const useWebNotification: typeof import("@vueuse/core")["useWebNotification"]; - const useWebSocket: typeof import("@vueuse/core")["useWebSocket"]; - const useWebWorker: typeof import("@vueuse/core")["useWebWorker"]; - const useWebWorkerFn: typeof import("@vueuse/core")["useWebWorkerFn"]; - const useWindowFocus: typeof import("@vueuse/core")["useWindowFocus"]; - const useWindowScroll: typeof import("@vueuse/core")["useWindowScroll"]; - const useWindowSize: typeof import("@vueuse/core")["useWindowSize"]; - const vi: typeof import("vitest")["vi"]; - const vitest: typeof import("vitest")["vitest"]; - const watch: typeof import("vue")["watch"]; - const watchAtMost: typeof import("@vueuse/core")["watchAtMost"]; - const watchEffect: typeof import("vue")["watchEffect"]; - const watchOnce: typeof import("@vueuse/core")["watchOnce"]; - const watchWithFilter: typeof import("@vueuse/core")["watchWithFilter"]; - const whenever: typeof import("@vueuse/core")["whenever"]; + const afterAll: typeof import('vitest')['afterAll'] + const afterEach: typeof import('vitest')['afterEach'] + const assert: typeof import('vitest')['assert'] + const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] + const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] + const beforeAll: typeof import('vitest')['beforeAll'] + const beforeEach: typeof import('vitest')['beforeEach'] + const biSyncRef: typeof import('@vueuse/core')['biSyncRef'] + const chai: typeof import('vitest')['chai'] + const computed: typeof import('vue')['computed'] + const computedInject: typeof import('@vueuse/core')['computedInject'] + const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] + const controlledRef: typeof import('@vueuse/core')['controlledRef'] + const createApp: typeof import('vue')['createApp'] + const createEventHook: typeof import('@vueuse/core')['createEventHook'] + const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] + const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] + const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] + const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] + const customRef: typeof import('vue')['customRef'] + const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] + const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const describe: typeof import('vitest')['describe'] + const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] + const effectScope: typeof import('vue')['effectScope'] + const EffectScope: typeof import('vue')['EffectScope'] + const expect: typeof import('vitest')['expect'] + const extendRef: typeof import('@vueuse/core')['extendRef'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] + const inject: typeof import('vue')['inject'] + const isDefined: typeof import('@vueuse/core')['isDefined'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const it: typeof import('vitest')['it'] + const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] + const provide: typeof import('vue')['provide'] + const reactify: typeof import('@vueuse/core')['reactify'] + const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] + const reactive: typeof import('vue')['reactive'] + const reactivePick: typeof import('@vueuse/core')['reactivePick'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const refDefault: typeof import('@vueuse/core')['refDefault'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const suite: typeof import('vitest')['suite'] + const syncRef: typeof import('@vueuse/core')['syncRef'] + const templateRef: typeof import('@vueuse/core')['templateRef'] + const test: typeof import('vitest')['test'] + const throttledRef: typeof import('@vueuse/core')['throttledRef'] + const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] + const toRaw: typeof import('vue')['toRaw'] + const toReactive: typeof import('@vueuse/core')['toReactive'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const triggerRef: typeof import('vue')['triggerRef'] + const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] + const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] + const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] + const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] + const unref: typeof import('vue')['unref'] + const unrefElement: typeof import('@vueuse/core')['unrefElement'] + const until: typeof import('@vueuse/core')['until'] + const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] + const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] + const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] + const useAttrs: typeof import('vue')['useAttrs'] + const useBase64: typeof import('@vueuse/core')['useBase64'] + const useBattery: typeof import('@vueuse/core')['useBattery'] + const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] + const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] + const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] + const useClamp: typeof import('@vueuse/core')['useClamp'] + const useClipboard: typeof import('@vueuse/core')['useClipboard'] + const useColorMode: typeof import('@vueuse/core')['useColorMode'] + const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] + const useCounter: typeof import('@vueuse/core')['useCounter'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVar: typeof import('@vueuse/core')['useCssVar'] + const useCssVars: typeof import('vue')['useCssVars'] + const useCycleList: typeof import('@vueuse/core')['useCycleList'] + const useDark: typeof import('@vueuse/core')['useDark'] + const useDebounce: typeof import('@vueuse/core')['useDebounce'] + const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] + const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] + const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] + const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] + const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] + const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] + const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] + const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] + const useDraggable: typeof import('@vueuse/core')['useDraggable'] + const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] + const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] + const useElementHover: typeof import('@vueuse/core')['useElementHover'] + const useElementSize: typeof import('@vueuse/core')['useElementSize'] + const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] + const useEventBus: typeof import('@vueuse/core')['useEventBus'] + const useEventListener: typeof import('@vueuse/core')['useEventListener'] + const useEventSource: typeof import('@vueuse/core')['useEventSource'] + const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] + const useFavicon: typeof import('@vueuse/core')['useFavicon'] + const useFetch: typeof import('@vueuse/core')['useFetch'] + const useFocus: typeof import('@vueuse/core')['useFocus'] + const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] + const useFps: typeof import('@vueuse/core')['useFps'] + const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] + const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] + const useHead: typeof import('@vueuse/head')['useHead'] + const useI18n: typeof import('vue-i18n')['useI18n'] + const useIdle: typeof import('@vueuse/core')['useIdle'] + const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] + const useInterval: typeof import('@vueuse/core')['useInterval'] + const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] + const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] + const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] + const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] + const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] + const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] + const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] + const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] + const useMemoize: typeof import('@vueuse/core')['useMemoize'] + const useMemory: typeof import('@vueuse/core')['useMemory'] + const useMounted: typeof import('@vueuse/core')['useMounted'] + const useMouse: typeof import('@vueuse/core')['useMouse'] + const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] + const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] + const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] + const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] + const useNetwork: typeof import('@vueuse/core')['useNetwork'] + const useNow: typeof import('@vueuse/core')['useNow'] + const useOnline: typeof import('@vueuse/core')['useOnline'] + const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] + const useParallax: typeof import('@vueuse/core')['useParallax'] + const usePermission: typeof import('@vueuse/core')['usePermission'] + const usePointer: typeof import('@vueuse/core')['usePointer'] + const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] + const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] + const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] + const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] + const useRafFn: typeof import('@vueuse/core')['useRafFn'] + const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] + const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] + const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] + const useScroll: typeof import('@vueuse/core')['useScroll'] + const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] + const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] + const useShare: typeof import('@vueuse/core')['useShare'] + const useSlots: typeof import('vue')['useSlots'] + const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] + const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] + const useStorage: typeof import('@vueuse/core')['useStorage'] + const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] + const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] + const useSwipe: typeof import('@vueuse/core')['useSwipe'] + const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] + const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] + const useThrottle: typeof import('@vueuse/core')['useThrottle'] + const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] + const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] + const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] + const useTimeout: typeof import('@vueuse/core')['useTimeout'] + const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] + const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] + const useTitle: typeof import('@vueuse/core')['useTitle'] + const useToggle: typeof import('@vueuse/core')['useToggle'] + const useTransition: typeof import('@vueuse/core')['useTransition'] + const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] + const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] + const useVibrate: typeof import('@vueuse/core')['useVibrate'] + const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] + const useVModel: typeof import('@vueuse/core')['useVModel'] + const useVModels: typeof import('@vueuse/core')['useVModels'] + const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] + const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] + const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] + const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] + const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] + const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] + const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] + const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] + const vi: typeof import('vitest')['vi'] + const vitest: typeof import('vitest')['vitest'] + const watch: typeof import('vue')['watch'] + const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchOnce: typeof import('@vueuse/core')['watchOnce'] + const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] + const whenever: typeof import('@vueuse/core')['whenever'] } -export {}; +export {} diff --git a/packages/docs/src/components.d.ts b/packages/docs/src/components.d.ts index 21b4a4f..2aea512 100644 --- a/packages/docs/src/components.d.ts +++ b/packages/docs/src/components.d.ts @@ -20,6 +20,7 @@ declare module 'vue' { 'Fluent:databaseSearch24Regular': typeof import('~icons/fluent/database-search24-regular')['default'] Footer: typeof import('./components/Footer.vue')['default'] 'Iconoir:download': typeof import('~icons/iconoir/download')['default'] + LinkValidation: typeof import('./components/LinkValidation.vue')['default'] 'Mdi:folderHome': typeof import('~icons/mdi/folder-home')['default'] 'Mdi:github': typeof import('~icons/mdi/github')['default'] 'Mdi:languageRust': typeof import('~icons/mdi/language-rust')['default'] diff --git a/packages/docs/src/components/LinkValidation.vue b/packages/docs/src/components/LinkValidation.vue new file mode 100644 index 0000000..1714647 --- /dev/null +++ b/packages/docs/src/components/LinkValidation.vue @@ -0,0 +1,40 @@ + + + + diff --git a/packages/docs/src/components/SearchHit.vue b/packages/docs/src/components/SearchHit.vue index 0d771f9..fecf59d 100644 --- a/packages/docs/src/components/SearchHit.vue +++ b/packages/docs/src/components/SearchHit.vue @@ -38,23 +38,29 @@ const searchable =s.indexSettings[doc.value._idx as any].searchableAttributes as \ No newline at end of file diff --git a/packages/docs/src/pages/search.vue b/packages/docs/src/pages/search.vue index 1e785d1..5ee10ae 100644 --- a/packages/docs/src/pages/search.vue +++ b/packages/docs/src/pages/search.vue @@ -58,7 +58,7 @@ const changeServer = (_server: {name: string; url: string}) => { type="text" autocomplete="false" spellcheck="false" - class="px-auto px-4 py-4 w-350px text-center bg-transparent self-center" + class="px-auto px-4 py-4 w-350px text-center bg-transparent self-center dark:focus:placeholder-gray-700 focus:placeholder-gray-300" border="~ rounded gray-200 dark:gray-700" outline="none active:none" > diff --git a/packages/docs/test/component.test.ts b/packages/docs/test/component.test.ts index 2915c02..6273400 100644 --- a/packages/docs/test/component.test.ts +++ b/packages/docs/test/component.test.ts @@ -2,13 +2,13 @@ import { mount } from "@vue/test-utils"; import Counter from "../src/components/Counter.vue"; describe("Counter.vue", () => { - it("should render", () => { + it.skip("should render", () => { const wrapper = mount(Counter, { props: { initial: 10 } }); expect(wrapper.text()).toContain("10"); expect(wrapper.html()).toMatchSnapshot(); }); - it("should be interactive", async() => { + it.skip("should be interactive", async() => { const wrapper = mount(Counter, { props: { initial: 0 } }); expect(wrapper.text()).toContain("0"); diff --git a/packages/docs/vite.config.ts b/packages/docs/vite.config.ts index 63421cc..f50fef8 100644 --- a/packages/docs/vite.config.ts +++ b/packages/docs/vite.config.ts @@ -19,6 +19,28 @@ import MdExpandable from "markdown-it-expandable"; const markdownWrapperClasses = "prose prose-sm m-auto text-left"; export default defineConfig({ + server: { + proxy: { + "/tauri": { + target: "https://tauri.studio", + changeOrigin: true, + secure: true, + rewrite: (path) => path.replace(/^\/tauri/, "/"), + }, + "/github": { + target: "https://github.com", + changeOrigin: true, + secure: true, + rewrite: (path) => path.replace(/^\/github/, "/"), + }, + "/rust": { + target: "https://docs.rs", + changeOrigin: true, + secure: true, + rewrite: (path) => path.replace(/^\/rust/, "/"), + }, + }, + }, resolve: { alias: { "~/": `${path.resolve(__dirname, "src")}/`, @@ -143,12 +165,6 @@ export default defineConfig({ }), ], - server: { - fs: { - strict: true, - }, - }, - // https://github.com/antfu/vite-ssg ssgOptions: { script: "async", diff --git a/packages/tauri-search/package.json b/packages/tauri-search/package.json index 362e365..5a45333 100644 --- a/packages/tauri-search/package.json +++ b/packages/tauri-search/package.json @@ -14,7 +14,7 @@ "build:cli": "tsup src/cli/*.ts --format=esm,cjs --clean --sourcemap -d bin", "build:npm": "tsup src/index.ts --dts --format=esm,cjs --sourcemap --clean -d dist ", "clean": "rimraf dist/* bin/*", - "clear-caches": "node bin/clear-caches.js", + "clear-caches": "rimraf src/generated/ast && node bin/clear-caches.js", "create-indexes": "node bin/create-indexes.js", "drop-indexes": "node bin/drop-indexes.js", "current-indexes": "node bin/current-indexes.js", @@ -27,6 +27,7 @@ "push-typescript": "node bin/push-typescript.js", "rebuild-caches": "node bin/rebuild-caches.js", "refresh-prose": "node bin/refresh-prose.js", + "refresh-sitemap": "node bin/refresh-sitemap.js", "refresh-repos": "node bin/refresh-repos.js", "refresh-typescript": "node bin/refresh-typescript.js", "restart": "docker compose restart", @@ -40,10 +41,12 @@ "watch:npm": "tsup src/index.ts --dts --format=esm,cjs --sourcemap -d dist --watch" }, "dependencies": { + "@types/html-to-text": "^8.0.1", "axios": "^0.25.0", "dotenv": "^14.3.2", "fast-glob": "^3.2.11", "gray-matter": "^4.0.3", + "html-to-text": "^8.1.0", "inferred-types": "^0.18.4", "native-dash": "^1.21.5", "simple-markdown-2": "^0.7.5" diff --git a/packages/tauri-search/src/ast/parseMarkdown.ts b/packages/tauri-search/src/ast/parseMarkdown.ts index 8a4fa31..74f7168 100644 --- a/packages/tauri-search/src/ast/parseMarkdown.ts +++ b/packages/tauri-search/src/ast/parseMarkdown.ts @@ -3,6 +3,7 @@ import { readFile } from "fs/promises"; // import xxhash from "xxhash-wasm"; import matter from "gray-matter"; +import {convert} from "html-to-text"; import smd from "simple-markdown-2"; import { ITauriFrontmatter, MarkdownAst } from "~/types/markdown"; @@ -61,7 +62,7 @@ function parseContent(f: string, content: string) { filepath, hash, frontmatter: validateFrontmatter(f, frontmatter), - text, + text: convert(text), h1, h2, h3, diff --git a/packages/tauri-search/src/cli/push-cache.ts b/packages/tauri-search/src/cli/push-cache.ts index e33fd25..14ac401 100644 --- a/packages/tauri-search/src/cli/push-cache.ts +++ b/packages/tauri-search/src/cli/push-cache.ts @@ -48,7 +48,7 @@ import { getEnv } from "~/utils/getEnv"; `- all ${proseTasks.length} documents were pushed via API; monitoring task status ...` ); - await communicateTaskStatus(ProseModel, proseTasks, { timeout: 30000 }); + await communicateTaskStatus(ProseModel, proseTasks, { timeout: 45000 }); console.log(`- Pushing Repo document cache into MeiliSearch`); diff --git a/packages/tauri-search/src/cli/push-prose.ts b/packages/tauri-search/src/cli/push-prose.ts index 09527fe..9ef9445 100644 --- a/packages/tauri-search/src/cli/push-prose.ts +++ b/packages/tauri-search/src/cli/push-prose.ts @@ -17,5 +17,5 @@ import { ProseModel } from ".."; `- all ${tasks.length} documents were pushed via API; monitoring task status ...` ); - await communicateTaskStatus(ProseModel, tasks, { timeout: 30000 }); + await communicateTaskStatus(ProseModel, tasks, { timeout: 45000 }); })(); diff --git a/packages/tauri-search/src/cli/refresh-prose.ts b/packages/tauri-search/src/cli/refresh-prose.ts index c32428b..aa87bd0 100644 --- a/packages/tauri-search/src/cli/refresh-prose.ts +++ b/packages/tauri-search/src/cli/refresh-prose.ts @@ -1,7 +1,11 @@ +/* eslint-disable no-console */ import { refreshProse } from "~/pipelines/refreshProse"; import { getEnv } from "~/utils/getEnv"; (async () => { const { repo, branch, force } = getEnv(); + console.log(`- refreshing all prose from ${repo}@${branch}`); + await refreshProse(repo, branch, { force }); + console.log(`- completed updates of prose [${repo}@${branch}] `); })(); diff --git a/packages/tauri-search/src/cli/refresh-sitemap.ts b/packages/tauri-search/src/cli/refresh-sitemap.ts new file mode 100644 index 0000000..a582169 --- /dev/null +++ b/packages/tauri-search/src/cli/refresh-sitemap.ts @@ -0,0 +1,65 @@ +/* eslint-disable no-console */ + + +import { refreshSitemap } from "~/pipelines/refreshSitemap"; +import { flattenSitemap, sitemapDictionary } from "~/utils/convertSitemap"; +import { CacheKind, getCache } from "~/utils/getCache"; +import { getEnv } from "~/utils/getEnv"; +import { writeGeneratedFile } from "~/utils/writeGeneratedFile"; + +(async () => { + const { repo, branch} = getEnv(); + const filename = `src/generated/sitemap-${repo}-${branch}.json`; + const existingSitemap = sitemapDictionary(await getCache(CacheKind.sitemap)); + const existingFlatmap = flattenSitemap(await getCache(CacheKind.sitemap)); + + console.log(`- refreshing prose sitemap for ${repo}@${branch}${existingSitemap ? `; using existing sitemap for deltas [${existingFlatmap?.length} docs]` : ""}`); + + const sitemap = await refreshSitemap({ ref: branch, repo }); + const contents = flattenSitemap( sitemap); + const changed: string[] = []; + const added: string[] = []; + const removed: string[] = []; + + if(existingSitemap) { + for (const doc of contents) { + + if(existingSitemap[doc.filepath as any].sha && existingSitemap[doc.filepath as any].sha !== doc.sha) { + changed.push(doc.filepath); + } else if (!existingSitemap[doc.filepath as any]?.filepath && doc.sha !== existingSitemap[doc.filepath as any]?.sha ) { + added.push(doc.filepath); + } + } + } + if(existingFlatmap) { + for (const doc of existingFlatmap) { + if(!contents[doc.filepath as any]) { + removed.push(doc.filepath); + } + } + } + + console.log(`- updated sitemap has ${contents.length} documents`); + if(existingSitemap) { + if(added.length > 0) { + console.log(`- ${added.length} files added since last check: `); + } + if(changed.length > 0) { + console.log(`- ${changed.length} files changed since last check: ${changed.join(", ")}`); + } + if(removed.length > 0) { + console.log(`- ${removed.length} files added since last check: ${removed.join(", ")}`); + } + if([added, changed,removed].every(i => i.length === 0)) { + console.log(`- no files changed since the last check`); + } + } + + await writeGeneratedFile( + filename, + JSON.stringify(sitemap) + ); + + console.log(`- files saved to: ${filename}`); + +})(); diff --git a/packages/tauri-search/src/cli/sitemap.ts b/packages/tauri-search/src/cli/sitemap.ts deleted file mode 100644 index ecf3a85..0000000 --- a/packages/tauri-search/src/cli/sitemap.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { writeFile } from "fs/promises"; -import { config } from "dotenv"; -import { refreshSitemap } from "~/pipelines/refreshSitemap"; - -(async () => { - config(); - const repo = process.env.REPO || "tauri"; - const ref = process.env.BRANCH || "dev"; - const sitemap = await refreshSitemap({ ref, repo }); - await writeFile( - `src/generated/sitemap-${repo}-${ref}.json`, - JSON.stringify(sitemap), - "utf-8" - ); -})(); diff --git a/packages/tauri-search/src/generated/ast/api/ts-ast.json b/packages/tauri-search/src/generated/ast/api/ts-ast.json deleted file mode 100644 index cd3692b..0000000 --- a/packages/tauri-search/src/generated/ast/api/ts-ast.json +++ /dev/null @@ -1 +0,0 @@ -{"project":"@tauri-apps/api","comment":{"shortText":"The Tauri API allows you to interface with the backend layer.","text":"This module exposes all other modules as an object where the key is the module name, and the value is the module exports.","tags":[{"tag":"example","text":"\n```typescript\nimport { app, dialog, event, fs, globalShortcut } from '@tauri-apps/api'\n```"}]},"symbols":[{"kind":"Namespace","name":"app","module":"app","fileName":"app.ts","comment":"This package is also accessible with `window.__TAURI__.app` when `tauri.conf.json > build > withGlobalTauri` is set to true.","children":[]},{"kind":"Function","name":"getName","module":"app","fileName":"app.ts","signatures":[{"name":"getName","kind":"Call signature","comment":{"shortText":"Gets the application name.","returns":"A promise resolving to application name.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"getTauriVersion","module":"app","fileName":"app.ts","signatures":[{"name":"getTauriVersion","kind":"Call signature","comment":{"shortText":"Gets the tauri version.","returns":"A promise resolving to tauri version.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"getVersion","module":"app","fileName":"app.ts","signatures":[{"name":"getVersion","kind":"Call signature","comment":{"shortText":"Gets the application version.","returns":"A promise resolving to the application version.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Namespace","name":"cli","module":"cli","fileName":"cli.ts","comment":"This package is also accessible with `window.__TAURI__.cli` when `tauri.conf.json > build > withGlobalTauri` is set to true.","children":[]},{"kind":"Interface","name":"ArgMatch","module":"cli","fileName":"cli.ts","children":[{"id":11,"name":"occurrences","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Number of occurrences"},"sources":[{"fileName":"cli.ts","line":24,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":10,"name":"value","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"string if takes value\nboolean if flag\nstring[] or null if takes multiple values"},"sources":[{"fileName":"cli.ts","line":20,"character":2}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"boolean"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}}]},{"kind":"Interface","name":"CliMatches","module":"cli","fileName":"cli.ts","children":[{"id":16,"name":"args","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"cli.ts","line":33,"character":2}],"type":{"type":"reflection","declaration":{"id":17,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"indexSignature":{"id":18,"name":"__index","kind":8192,"kindString":"Index signature","flags":{},"parameters":[{"id":19,"name":"name","kind":32768,"flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","id":9,"name":"ArgMatch"}}}}},{"id":20,"name":"subcommand","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"cli.ts","line":34,"character":2}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":12,"name":"SubcommandMatch"}]}}]},{"kind":"Interface","name":"SubcommandMatch","module":"cli","fileName":"cli.ts","children":[{"id":14,"name":"matches","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"cli.ts","line":29,"character":2}],"type":{"type":"reference","id":15,"name":"CliMatches"}},{"id":13,"name":"name","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"cli.ts","line":28,"character":2}],"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Function","name":"getMatches","module":"cli","fileName":"cli.ts","signatures":[{"name":"getMatches","kind":"Call signature","comment":{"shortText":"Parse the arguments provided to the current process and get the matches using the configuration defined `tauri.conf.json > tauri > cli`.","returns":"A promise resolving to the parsed arguments.\n"},"type":{"type":"reference","typeArguments":[{"type":"reference","id":15,"name":"CliMatches"}],"name":"Promise"}}]},{"kind":"Namespace","name":"clipboard","module":"clipboard","fileName":"clipboard.ts","comment":"This package is also accessible with `window.__TAURI__.clipboard` when `tauri.conf.json > build > withGlobalTauri` is set to true.","children":[]},{"kind":"Function","name":"readText","module":"clipboard","fileName":"clipboard.ts","signatures":[{"name":"readText","kind":"Call signature","comment":{"shortText":"Gets the clipboard content as plain text.","returns":"A promise resolving to the clipboard content as plain text.\n"},"type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}],"name":"Promise"}}]},{"kind":"Function","name":"writeText","module":"clipboard","fileName":"clipboard.ts","signatures":[{"name":"writeText","kind":"Call signature","comment":{"shortText":"Writes a plain text to the clipboard.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Namespace","name":"dialog","module":"dialog","fileName":"dialog.ts","comment":"This package is also accessible with `window.__TAURI__.dialog` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"dialog\": {\n \"all\": true, // enable all dialog APIs\n \"open\": true, // enable file open API\n \"save\": true // enable file save API\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","children":[]},{"kind":"Interface","name":"DialogFilter","module":"dialog","fileName":"dialog.ts","children":[{"id":32,"name":"extensions","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Extensions to filter, without a `.` prefix.","tags":[{"tag":"example","text":"\n```typescript\nextensions: ['svg', 'png']\n```\n"}]},"sources":[{"fileName":"dialog.ts","line":41,"character":2}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":31,"name":"name","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Filter name."},"sources":[{"fileName":"dialog.ts","line":33,"character":2}],"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Interface","name":"OpenDialogOptions","module":"dialog","fileName":"dialog.ts","children":[{"id":35,"name":"defaultPath","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Initial directory or file path. It must exist."},"sources":[{"fileName":"dialog.ts","line":49,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":37,"name":"directory","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the dialog is a directory selection or not."},"sources":[{"fileName":"dialog.ts","line":53,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":34,"name":"filters","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"The filters of the dialog."},"sources":[{"fileName":"dialog.ts","line":47,"character":2}],"type":{"type":"array","elementType":{"type":"reference","id":30,"name":"DialogFilter"}}},{"id":36,"name":"multiple","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the dialog allows multiple selection or not."},"sources":[{"fileName":"dialog.ts","line":51,"character":2}],"type":{"type":"intrinsic","name":"boolean"}}]},{"kind":"Interface","name":"SaveDialogOptions","module":"dialog","fileName":"dialog.ts","children":[{"id":40,"name":"defaultPath","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Initial directory or file path.\nIf it's a directory path, the dialog interface will change to that folder.\nIf 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."},"sources":[{"fileName":"dialog.ts","line":65,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":39,"name":"filters","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"The filters of the dialog."},"sources":[{"fileName":"dialog.ts","line":59,"character":2}],"type":{"type":"array","elementType":{"type":"reference","id":30,"name":"DialogFilter"}}}]},{"kind":"Function","name":"ask","module":"dialog","fileName":"dialog.ts","signatures":[{"name":"ask","kind":"Call signature","comment":{"shortText":"Shows a question dialog with `Yes` and `No` buttons.","returns":"A promise resolving to a boolean indicating whether `Yes` was clicked or not.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"}}]},{"kind":"Function","name":"confirm","module":"dialog","fileName":"dialog.ts","signatures":[{"name":"confirm","kind":"Call signature","comment":{"shortText":"Shows a question dialog with `Ok` and `Cancel` buttons.","returns":"A promise resolving to a boolean indicating whether `Ok` was clicked or not.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"}}]},{"kind":"Function","name":"message","module":"dialog","fileName":"dialog.ts","signatures":[{"name":"message","kind":"Call signature","comment":{"shortText":"Shows a message dialog with an `Ok` button.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"open","module":"dialog","fileName":"dialog.ts","signatures":[{"name":"open","kind":"Call signature","comment":{"shortText":"Open a file/directory selection dialog","returns":"A promise resolving to the selected path(s)\n"},"type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}],"name":"Promise"}}]},{"kind":"Function","name":"save","module":"dialog","fileName":"dialog.ts","signatures":[{"name":"save","kind":"Call signature","comment":{"shortText":"Open a file/directory save dialog.","returns":"A promise resolving to the selected path.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Namespace","name":"event","module":"event","fileName":"event.ts","comment":"This package is also accessible with `window.__TAURI__.event` when `tauri.conf.json > build > withGlobalTauri` is set to true.","children":[]},{"kind":"Interface","name":"Event","module":"event","fileName":"event.ts","children":[{"id":60,"name":"event","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Event name"},"sources":[{"fileName":"event.ts","line":19,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":61,"name":"id","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Event identifier used to unlisten"},"sources":[{"fileName":"event.ts","line":21,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":62,"name":"payload","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Event payload"},"sources":[{"fileName":"event.ts","line":23,"character":2}],"type":{"type":"reference","id":63,"name":"T"}}]},{"kind":"Type alias","name":"EventCallback","module":"event","type":{"type":"reflection","declaration":{"id":66,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"event.ts","line":44,"character":24}],"signatures":[{"id":67,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":68,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":59,"typeArguments":[{"type":"reference","id":69,"name":"T"}],"name":"Event"}}],"type":{"type":"intrinsic","name":"void"}}]}},"fileName":"event.ts"},{"kind":"Type alias","name":"EventName","module":"event","type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"literal","value":"tauri://update"},{"type":"literal","value":"tauri://update-available"},{"type":"literal","value":"tauri://update-install"},{"type":"literal","value":"tauri://update-status"},{"type":"literal","value":"tauri://resize"},{"type":"literal","value":"tauri://move"},{"type":"literal","value":"tauri://close-requested"},{"type":"literal","value":"tauri://focus"},{"type":"literal","value":"tauri://blur"},{"type":"literal","value":"tauri://scale-change"},{"type":"literal","value":"tauri://menu"},{"type":"literal","value":"tauri://file-drop"},{"type":"literal","value":"tauri://file-drop-hover"},{"type":"literal","value":"tauri://file-drop-cancelled"}]},{"type":"intrinsic","name":"string"}],"name":"LiteralUnion"},"fileName":"event.ts"},{"kind":"Type alias","name":"UnlistenFn","module":"event","type":{"type":"reflection","declaration":{"id":71,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"event.ts","line":46,"character":18}],"signatures":[{"id":72,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}]}},"fileName":"event.ts"},{"kind":"Function","name":"emit","module":"event","fileName":"event.ts","signatures":[{"name":"emit","kind":"Call signature","comment":{"shortText":"Emits an event to the backend.","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"listen","module":"event","fileName":"event.ts","signatures":[{"name":"listen","kind":"Call signature","comment":{"shortText":"Listen to an event from the backend.","returns":"A promise resolving to a function to unlisten to the event.\n"},"type":{"type":"reference","typeArguments":[{"type":"reference","id":70,"name":"UnlistenFn"}],"name":"Promise"}}]},{"kind":"Function","name":"once","module":"event","fileName":"event.ts","signatures":[{"name":"once","kind":"Call signature","comment":{"shortText":"Listen to an one-off event from the backend.","returns":"A promise resolving to a function to unlisten to the event.\n"},"type":{"type":"reference","typeArguments":[{"type":"reference","id":70,"name":"UnlistenFn"}],"name":"Promise"}}]},{"kind":"Namespace","name":"fs","module":"fs","fileName":"fs.ts","comment":"This package is also accessible with `window.__TAURI__.fs` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"fs\": {\n \"all\": true, // enable all FS APIs\n \"readTextFile\": true,\n \"readBinaryFile\": true,\n \"writeFile\": true,\n \"writeBinaryFile\": true,\n \"readDir\": true,\n \"copyFile\": true,\n \"createDir\": true,\n \"removeDir\": true,\n \"removeFile\": true,\n \"renameFile\": true\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","children":[]},{"kind":"Reference","name":"Dir","module":"fs","fileName":"fs.ts"},{"kind":"Enumeration","name":"BaseDirectory","module":"fs","fileName":"fs.ts","children":[{"id":106,"name":"App","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":56,"character":2}],"defaultValue":"18"},{"id":89,"name":"Audio","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":39,"character":2}],"defaultValue":"1"},{"id":90,"name":"Cache","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":40,"character":2}],"defaultValue":"2"},{"id":91,"name":"Config","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":41,"character":2}],"defaultValue":"3"},{"id":107,"name":"Current","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":57,"character":2}],"defaultValue":"19"},{"id":92,"name":"Data","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":42,"character":2}],"defaultValue":"4"},{"id":94,"name":"Desktop","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":44,"character":2}],"defaultValue":"6"},{"id":95,"name":"Document","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":45,"character":2}],"defaultValue":"7"},{"id":96,"name":"Download","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":46,"character":2}],"defaultValue":"8"},{"id":97,"name":"Executable","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":47,"character":2}],"defaultValue":"9"},{"id":98,"name":"Font","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":48,"character":2}],"defaultValue":"10"},{"id":99,"name":"Home","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":49,"character":2}],"defaultValue":"11"},{"id":93,"name":"LocalData","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":43,"character":2}],"defaultValue":"5"},{"id":108,"name":"Log","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":58,"character":2}],"defaultValue":"20"},{"id":100,"name":"Picture","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":50,"character":2}],"defaultValue":"12"},{"id":101,"name":"Public","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":51,"character":2}],"defaultValue":"13"},{"id":105,"name":"Resource","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":55,"character":2}],"defaultValue":"17"},{"id":102,"name":"Runtime","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":52,"character":2}],"defaultValue":"14"},{"id":103,"name":"Template","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":53,"character":2}],"defaultValue":"15"},{"id":104,"name":"Video","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"fs.ts","line":54,"character":2}],"defaultValue":"16"}]},{"kind":"Interface","name":"FileEntry","module":"fs","fileName":"fs.ts","children":[{"id":123,"name":"children","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Children of this entry if it's a directory; null otherwise"},"sources":[{"fileName":"fs.ts","line":88,"character":2}],"type":{"type":"array","elementType":{"type":"reference","id":120,"name":"FileEntry"}}},{"id":122,"name":"name","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Name of the directory/file\ncan be null if the path terminates with `..`"},"sources":[{"fileName":"fs.ts","line":86,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":121,"name":"path","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"fs.ts","line":81,"character":2}],"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Interface","name":"FsBinaryFileOption","module":"fs","fileName":"fs.ts","children":[{"id":119,"name":"contents","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"fs.ts","line":77,"character":2}],"type":{"type":"reference","name":"ArrayBuffer"}},{"id":118,"name":"path","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"fs.ts","line":76,"character":2}],"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Interface","name":"FsDirOptions","module":"fs","fileName":"fs.ts","children":[{"id":112,"name":"dir","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"fs.ts","line":66,"character":2}],"type":{"type":"reference","id":88,"name":"BaseDirectory"}},{"id":113,"name":"recursive","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"fs.ts","line":67,"character":2}],"type":{"type":"intrinsic","name":"boolean"}}]},{"kind":"Interface","name":"FsOptions","module":"fs","fileName":"fs.ts","children":[{"id":110,"name":"dir","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"fs.ts","line":62,"character":2}],"type":{"type":"reference","id":88,"name":"BaseDirectory"}}]},{"kind":"Interface","name":"FsTextFileOption","module":"fs","fileName":"fs.ts","children":[{"id":116,"name":"contents","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"fs.ts","line":72,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":115,"name":"path","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"fs.ts","line":71,"character":2}],"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Function","name":"copyFile","module":"fs","fileName":"fs.ts","signatures":[{"name":"copyFile","kind":"Call signature","comment":{"shortText":"Copys a file to a destination.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"createDir","module":"fs","fileName":"fs.ts","signatures":[{"name":"createDir","kind":"Call signature","comment":{"shortText":"Creates a directory.\nIf one of the path's parent components doesn't exist\nand the `recursive` option isn't set to true, the promise will be rejected.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"readBinaryFile","module":"fs","fileName":"fs.ts","signatures":[{"name":"readBinaryFile","kind":"Call signature","comment":{"shortText":"Reads a file as byte array.","returns":"A promise resolving to the file bytes array.\n"},"type":{"type":"reference","typeArguments":[{"type":"array","elementType":{"type":"intrinsic","name":"number"}}],"name":"Promise"}}]},{"kind":"Function","name":"readDir","module":"fs","fileName":"fs.ts","signatures":[{"name":"readDir","kind":"Call signature","comment":{"shortText":"List directory files.","returns":"A promise resolving to the directory entries.\n"},"type":{"type":"reference","typeArguments":[{"type":"array","elementType":{"type":"reference","id":120,"name":"FileEntry"}}],"name":"Promise"}}]},{"kind":"Function","name":"readTextFile","module":"fs","fileName":"fs.ts","signatures":[{"name":"readTextFile","kind":"Call signature","comment":{"shortText":"Reads a file as UTF-8 encoded string.","returns":"A promise resolving to the file content as a UTF-8 encoded string.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"removeDir","module":"fs","fileName":"fs.ts","signatures":[{"name":"removeDir","kind":"Call signature","comment":{"shortText":"Removes a directory.\nIf the directory is not empty and the `recursive` option isn't set to true, the promise will be rejected.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"removeFile","module":"fs","fileName":"fs.ts","signatures":[{"name":"removeFile","kind":"Call signature","comment":{"shortText":"Removes a file.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"renameFile","module":"fs","fileName":"fs.ts","signatures":[{"name":"renameFile","kind":"Call signature","comment":{"shortText":"Renames a file.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"writeBinaryFile","module":"fs","fileName":"fs.ts","signatures":[{"name":"writeBinaryFile","kind":"Call signature","comment":{"shortText":"Writes a binary file.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"writeFile","module":"fs","fileName":"fs.ts","signatures":[{"name":"writeFile","kind":"Call signature","comment":{"shortText":"Writes a text file.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Namespace","name":"globalShortcut","module":"globalShortcut","fileName":"globalShortcut.ts","comment":"This package is also accessible with `window.__TAURI__.globalShortcut` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"globalShortcut\": {\n \"all\": true // enable all global shortcut APIs\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","children":[]},{"kind":"Type alias","name":"ShortcutHandler","module":"globalShortcut","type":{"type":"reflection","declaration":{"id":169,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"globalShortcut.ts","line":29,"character":30}],"signatures":[{"id":170,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":171,"name":"shortcut","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"void"}}]}},"fileName":"globalShortcut.ts"},{"kind":"Function","name":"isRegistered","module":"globalShortcut","fileName":"globalShortcut.ts","signatures":[{"name":"isRegistered","kind":"Call signature","comment":{"shortText":"Determines whether the given shortcut is registered by this application or not.","returns":"A promise resolving to the state.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"}}]},{"kind":"Function","name":"register","module":"globalShortcut","fileName":"globalShortcut.ts","signatures":[{"name":"register","kind":"Call signature","comment":{"shortText":"Register a global shortcut.","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"registerAll","module":"globalShortcut","fileName":"globalShortcut.ts","signatures":[{"name":"registerAll","kind":"Call signature","comment":{"shortText":"Register a collection of global shortcuts.","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"unregister","module":"globalShortcut","fileName":"globalShortcut.ts","signatures":[{"name":"unregister","kind":"Call signature","comment":{"shortText":"Unregister a global shortcut.","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"unregisterAll","module":"globalShortcut","fileName":"globalShortcut.ts","signatures":[{"name":"unregisterAll","kind":"Call signature","comment":{"shortText":"Unregisters all shortcuts registered by the application.","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Namespace","name":"http","module":"http","fileName":"http.ts","comment":"This package is also accessible with `window.__TAURI__.http` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"http\": {\n \"all\": true, // enable all http APIs\n \"request\": true // enable HTTP request API\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","children":[]},{"kind":"Enumeration","name":"ResponseType","module":"http","fileName":"http.ts","children":[{"id":283,"name":"Binary","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"http.ts","line":37,"character":2}],"defaultValue":"3"},{"id":281,"name":"JSON","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"http.ts","line":35,"character":2}],"defaultValue":"1"},{"id":282,"name":"Text","kind":16,"kindString":"Enumeration member","flags":{},"sources":[{"fileName":"http.ts","line":36,"character":2}],"defaultValue":"2"}]},{"kind":"Class","name":"Body","module":"http","fileName":"http.ts","children":[{"id":230,"name":"payload","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"http.ts","line":45,"character":2}],"type":{"type":"intrinsic","name":"unknown"}},{"id":229,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"http.ts","line":44,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":222,"name":"bytes","kind":2048,"kindString":"Method","flags":{"isStatic":true},"sources":[{"fileName":"http.ts","line":93,"character":9}],"signatures":[{"id":223,"name":"bytes","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a new byte array body.","returns":"The body object ready to be used on the POST and PUT requests.\n"},"parameters":[{"id":224,"name":"bytes","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"intrinsic","name":"number"}}}],"type":{"type":"reference","id":212,"name":"Body"}}]},{"id":213,"name":"form","kind":2048,"kindString":"Method","flags":{"isStatic":true},"sources":[{"fileName":"http.ts","line":60,"character":9}],"signatures":[{"id":214,"name":"form","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a new form data body.","returns":"The body object ready to be used on the POST and PUT requests.\n"},"parameters":[{"id":215,"name":"data","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The body data.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":192,"name":"Part"}],"name":"Record"}}],"type":{"type":"reference","id":212,"name":"Body"}}]},{"id":216,"name":"json","kind":2048,"kindString":"Method","flags":{"isStatic":true},"sources":[{"fileName":"http.ts","line":71,"character":9}],"signatures":[{"id":217,"name":"json","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a new JSON body.","returns":"The body object ready to be used on the POST and PUT requests.\n"},"parameters":[{"id":218,"name":"data","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The body JSON object.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Record"}}],"type":{"type":"reference","id":212,"name":"Body"}}]},{"id":219,"name":"text","kind":2048,"kindString":"Method","flags":{"isStatic":true},"sources":[{"fileName":"http.ts","line":82,"character":9}],"signatures":[{"id":220,"name":"text","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a new UTF-8 string body.","returns":"The body object ready to be used on the POST and PUT requests.\n"},"parameters":[{"id":221,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","id":212,"name":"Body"}}]}]},{"kind":"Class","name":"Client","module":"http","fileName":"http.ts","children":[{"id":235,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"http.ts","line":158,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":264,"name":"delete","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"http.ts","line":302,"character":8}],"signatures":[{"id":265,"name":"delete","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Makes a DELETE request.","returns":"A promise resolving to the response.\n"},"typeParameter":[{"id":266,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":267,"name":"url","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The request URL."},"type":{"type":"intrinsic","name":"string"}},{"id":268,"name":"options","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"The request options."},"type":{"type":"reference","id":202,"name":"RequestOptions"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":269,"typeArguments":[{"type":"reference","id":266,"name":"T"}],"name":"Response"}],"name":"Promise"}}]},{"id":236,"name":"drop","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"http.ts","line":169,"character":8}],"signatures":[{"id":237,"name":"drop","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Drops the client instance.","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":242,"name":"get","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"http.ts","line":230,"character":8}],"signatures":[{"id":243,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Makes a GET request.","returns":"A promise resolving to the response.\n"},"typeParameter":[{"id":244,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":245,"name":"url","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The request URL."},"type":{"type":"intrinsic","name":"string"}},{"id":246,"name":"options","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"The request options."},"type":{"type":"reference","id":202,"name":"RequestOptions"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":269,"typeArguments":[{"type":"reference","id":244,"name":"T"}],"name":"Response"}],"name":"Promise"}}]},{"id":259,"name":"patch","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"http.ts","line":287,"character":8}],"signatures":[{"id":260,"name":"patch","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Makes a PATCH request.","returns":"A promise resolving to the response.\n"},"typeParameter":[{"id":261,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":262,"name":"url","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The request URL."},"type":{"type":"intrinsic","name":"string"}},{"id":263,"name":"options","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"The request options."},"type":{"type":"reference","id":202,"name":"RequestOptions"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":269,"typeArguments":[{"type":"reference","id":261,"name":"T"}],"name":"Response"}],"name":"Promise"}}]},{"id":247,"name":"post","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"http.ts","line":246,"character":8}],"signatures":[{"id":248,"name":"post","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Makes a POST request.","returns":"A promise resolving to the response.\n"},"typeParameter":[{"id":249,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":250,"name":"url","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The request URL."},"type":{"type":"intrinsic","name":"string"}},{"id":251,"name":"body","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"The body of the request."},"type":{"type":"reference","id":212,"name":"Body"}},{"id":252,"name":"options","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"The request options."},"type":{"type":"reference","id":202,"name":"RequestOptions"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":269,"typeArguments":[{"type":"reference","id":249,"name":"T"}],"name":"Response"}],"name":"Promise"}}]},{"id":253,"name":"put","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"http.ts","line":267,"character":8}],"signatures":[{"id":254,"name":"put","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Makes a PUT request.","returns":"A promise resolving to the response.\n"},"typeParameter":[{"id":255,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":256,"name":"url","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The request URL."},"type":{"type":"intrinsic","name":"string"}},{"id":257,"name":"body","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"The body of the request."},"type":{"type":"reference","id":212,"name":"Body"}},{"id":258,"name":"options","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"Request options."},"type":{"type":"reference","id":202,"name":"RequestOptions"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":269,"typeArguments":[{"type":"reference","id":255,"name":"T"}],"name":"Response"}],"name":"Promise"}}]},{"id":238,"name":"request","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"http.ts","line":185,"character":8}],"signatures":[{"id":239,"name":"request","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Makes an HTTP request.","returns":"A promise resolving to the response.\n"},"typeParameter":[{"id":240,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":241,"name":"options","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The request options."},"type":{"type":"reference","id":194,"name":"HttpOptions"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":269,"typeArguments":[{"type":"reference","id":240,"name":"T"}],"name":"Response"}],"name":"Promise"}}]}]},{"kind":"Class","name":"Response","module":"http","fileName":"http.ts","children":[{"id":278,"name":"data","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"The response data."},"sources":[{"fileName":"http.ts","line":145,"character":2}],"type":{"type":"reference","name":"T"}},{"id":277,"name":"headers","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"The response headers."},"sources":[{"fileName":"http.ts","line":143,"character":2}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record"}},{"id":276,"name":"ok","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"A boolean indicating whether the response was successful (status in the range 200–299) or not."},"sources":[{"fileName":"http.ts","line":141,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":275,"name":"status","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"The response status code."},"sources":[{"fileName":"http.ts","line":139,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":274,"name":"url","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"The request URL."},"sources":[{"fileName":"http.ts","line":137,"character":2}],"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Interface","name":"ClientOptions","module":"http","fileName":"http.ts","children":[{"id":191,"name":"connectTimeout","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"http.ts","line":31,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":190,"name":"maxRedirections","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"http.ts","line":30,"character":2}],"type":{"type":"intrinsic","name":"number"}}]},{"kind":"Interface","name":"HttpOptions","module":"http","fileName":"http.ts","children":[{"id":199,"name":"body","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"http.ts","line":116,"character":2}],"type":{"type":"reference","id":212,"name":"Body"}},{"id":197,"name":"headers","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"http.ts","line":114,"character":2}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record"}},{"id":195,"name":"method","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"http.ts","line":112,"character":2}],"type":{"type":"reference","id":193,"name":"HttpVerb"}},{"id":198,"name":"query","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"http.ts","line":115,"character":2}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record"}},{"id":201,"name":"responseType","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"http.ts","line":118,"character":2}],"type":{"type":"reference","id":280,"name":"ResponseType"}},{"id":200,"name":"timeout","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"http.ts","line":117,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":196,"name":"url","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"http.ts","line":113,"character":2}],"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Type alias","name":"FetchOptions","module":"http","type":{"type":"reference","typeArguments":[{"type":"reference","id":194,"name":"HttpOptions"},{"type":"literal","value":"url"}],"name":"Omit"},"fileName":"http.ts"},{"kind":"Type alias","name":"HttpVerb","module":"http","type":{"type":"union","types":[{"type":"literal","value":"GET"},{"type":"literal","value":"POST"},{"type":"literal","value":"PUT"},{"type":"literal","value":"DELETE"},{"type":"literal","value":"PATCH"},{"type":"literal","value":"HEAD"},{"type":"literal","value":"OPTIONS"},{"type":"literal","value":"CONNECT"},{"type":"literal","value":"TRACE"}]},"fileName":"http.ts"},{"kind":"Type alias","name":"Part","module":"http","type":{"type":"union","types":[{"type":"literal","value":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"number"}}]},"fileName":"http.ts"},{"kind":"Type alias","name":"RequestOptions","module":"http","type":{"type":"reference","typeArguments":[{"type":"reference","id":194,"name":"HttpOptions"},{"type":"union","types":[{"type":"literal","value":"method"},{"type":"literal","value":"url"}]}],"name":"Omit"},"fileName":"http.ts"},{"kind":"Function","name":"fetch","module":"http","fileName":"http.ts","signatures":[{"name":"fetch","kind":"Call signature","comment":{"shortText":"Perform an HTTP request using the default client.","returns":"The response object.\n"},"type":{"type":"reference","typeArguments":[{"type":"reference","id":269,"typeArguments":[{"type":"reference","id":209,"name":"T"}],"name":"Response"}],"name":"Promise"}}]},{"kind":"Function","name":"getClient","module":"http","fileName":"http.ts","signatures":[{"name":"getClient","kind":"Call signature","comment":{"shortText":"Creates a new client using the specified options.","returns":"A promise resolving to the client instance.\n"},"type":{"type":"reference","typeArguments":[{"type":"reference","id":231,"name":"Client"}],"name":"Promise"}}]},{"kind":"Namespace","name":"notification","module":"notification","fileName":"notification.ts","comment":"This package is also accessible with `window.__TAURI__.notification` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"notification\": {\n \"all\": true // enable all notification APIs\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","children":[]},{"kind":"Interface","name":"Options","module":"notification","fileName":"notification.ts","children":[{"id":287,"name":"body","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Optional notification body."},"sources":[{"fileName":"notification.ts","line":36,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":288,"name":"icon","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Optional notification icon."},"sources":[{"fileName":"notification.ts","line":38,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":286,"name":"title","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Notification title."},"sources":[{"fileName":"notification.ts","line":34,"character":2}],"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Type alias","name":"Permission","module":"notification","type":{"type":"union","types":[{"type":"literal","value":"granted"},{"type":"literal","value":"denied"},{"type":"literal","value":"default"}]},"fileName":"notification.ts"},{"kind":"Function","name":"isPermissionGranted","module":"notification","fileName":"notification.ts","signatures":[{"name":"isPermissionGranted","kind":"Call signature","comment":{"shortText":"Checks if the permission to send notifications is granted.","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}],"name":"Promise"}}]},{"kind":"Function","name":"requestPermission","module":"notification","fileName":"notification.ts","signatures":[{"name":"requestPermission","kind":"Call signature","comment":{"shortText":"Requests the permission to send notifications.","returns":"A promise resolving to whether the user granted the permission or not.\n"},"type":{"type":"reference","typeArguments":[{"type":"reference","id":289,"name":"Permission"}],"name":"Promise"}}]},{"kind":"Function","name":"sendNotification","module":"notification","fileName":"notification.ts","signatures":[{"name":"sendNotification","kind":"Call signature","comment":{"shortText":"Sends a notification to the user."},"type":{"type":"intrinsic","name":"void"}}]},{"kind":"Namespace","name":"os","module":"os","fileName":"os.ts","comment":"This package is also accessible with `window.__TAURI__.fs` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"os\": {\n \"all\": true, // enable all Os APIs\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","children":[]},{"kind":"Variable","name":"EOL","module":"os","type":{"type":"union","types":[{"type":"literal","value":"\r\n"},{"type":"literal","value":"\n"}]},"fileName":"os.ts"},{"kind":"Function","name":"arch","module":"os","fileName":"os.ts","signatures":[{"name":"arch","kind":"Call signature","comment":{"shortText":"Returns the operating system CPU architecture for which the tauri app was compiled. Possible values are `'x86'`, `'x86_64'`, `'arm'`, `'aarch64'`, `'mips'`, `'mips64'`, `'powerpc'`, `'powerpc64'`, `'riscv64'`, `'s390x'`, `'sparc64'`"},"type":{"type":"reference","typeArguments":[{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"literal","value":"x86"},{"type":"literal","value":"x86_64"},{"type":"literal","value":"arm"},{"type":"literal","value":"aarch64"},{"type":"literal","value":"mips"},{"type":"literal","value":"mips64"},{"type":"literal","value":"powerpc"},{"type":"literal","value":"powerpc64"},{"type":"literal","value":"riscv64"},{"type":"literal","value":"s390x"},{"type":"literal","value":"sparc64"}]},{"type":"intrinsic","name":"string"}],"name":"LiteralUnion"}],"name":"Promise"}}]},{"kind":"Function","name":"platform","module":"os","fileName":"os.ts","signatures":[{"name":"platform","kind":"Call signature","comment":{"shortText":"Returns a string identifying the operating system platform.\nThe value is set at compile time. Possible values are `'linux'`, `'darwin'`, `'ios'`, `'freebsd'`, `'dragonfly'`, `'netbsd'`, `'openbsd'`, `'solaris'`, `'android'`, `'win32'`"},"type":{"type":"reference","typeArguments":[{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"literal","value":"linux"},{"type":"literal","value":"darwin"},{"type":"literal","value":"ios"},{"type":"literal","value":"freebsd"},{"type":"literal","value":"dragonfly"},{"type":"literal","value":"netbsd"},{"type":"literal","value":"openbsd"},{"type":"literal","value":"solaris"},{"type":"literal","value":"android"},{"type":"literal","value":"win32"}]},{"type":"intrinsic","name":"string"}],"name":"LiteralUnion"}],"name":"Promise"}}]},{"kind":"Function","name":"tempdir","module":"os","fileName":"os.ts","signatures":[{"name":"tempdir","kind":"Call signature","comment":{"shortText":"Returns the operating system's default directory for temporary files as a string."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"type","module":"os","fileName":"os.ts","signatures":[{"name":"type","kind":"Call signature","comment":{"shortText":"Returns `'Linux'` on Linux, `'Darwin'` on macOS, and `'Windows_NT'` on Windows."},"type":{"type":"reference","typeArguments":[{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"literal","value":"Linux"},{"type":"literal","value":"Darwin"},{"type":"literal","value":"Windows_NT"}]},{"type":"intrinsic","name":"string"}],"name":"LiteralUnion"}],"name":"Promise"}}]},{"kind":"Function","name":"version","module":"os","fileName":"os.ts","signatures":[{"name":"version","kind":"Call signature","comment":{"shortText":"Returns a string identifying the kernel version."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Namespace","name":"path","module":"path","fileName":"path.ts","children":[]},{"kind":"Reference","name":"BaseDirectory","module":"path","fileName":"path.ts"},{"kind":"Variable","name":"delimiter","module":"path","type":{"type":"union","types":[{"type":"literal","value":";"},{"type":"literal","value":":"}]},"fileName":"path.ts"},{"kind":"Variable","name":"sep","module":"path","type":{"type":"union","types":[{"type":"literal","value":"\\"},{"type":"literal","value":"/"}]},"fileName":"path.ts"},{"kind":"Function","name":"appDir","module":"path","fileName":"path.ts","signatures":[{"name":"appDir","kind":"Call signature","comment":{"shortText":"Returns the path to the suggested directory for your app config files.\nResolves to `${configDir}/${bundleIdentifier}`, where `bundleIdentifier` is the value configured on `tauri.conf.json > tauri > bundle > identifier`.","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"audioDir","module":"path","fileName":"path.ts","signatures":[{"name":"audioDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's audio directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_MUSIC_DIR`.\n- **macOS:** Resolves to `$HOME/Music`.\n- **Windows:** Resolves to `{FOLDERID_Music}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"basename","module":"path","fileName":"path.ts","signatures":[{"name":"basename","kind":"Call signature","comment":{"shortText":" Returns the last portion of a `path`. Trailing directory separators are ignored."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"cacheDir","module":"path","fileName":"path.ts","signatures":[{"name":"cacheDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's cache directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_CACHE_HOME` or `$HOME/.cache`.\n- **macOS:** Resolves to `$HOME/Library/Caches`.\n- **Windows:** Resolves to `{FOLDERID_LocalAppData}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"configDir","module":"path","fileName":"path.ts","signatures":[{"name":"configDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's config directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_CONFIG_HOME` or `$HOME/.config`.\n- **macOS:** Resolves to `$HOME/Library/Application Support`.\n- **Windows:** Resolves to `{FOLDERID_LocalAppData}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"currentDir","module":"path","fileName":"path.ts","signatures":[{"name":"currentDir","kind":"Call signature","comment":{"shortText":"Returns the path to the current working directory.","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"dataDir","module":"path","fileName":"path.ts","signatures":[{"name":"dataDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's data directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_DATA_HOME` or `$HOME/.local/share`.\n- **macOS:** Resolves to `$HOME/Library/Application Support`.\n- **Windows:** Resolves to `{FOLDERID_RoamingAppData}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"desktopDir","module":"path","fileName":"path.ts","signatures":[{"name":"desktopDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's desktop directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_DESKTOP_DIR`.\n- **macOS:** Resolves to `$HOME/Library/Desktop`.\n- **Windows:** Resolves to `{FOLDERID_Desktop}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"dirname","module":"path","fileName":"path.ts","signatures":[{"name":"dirname","kind":"Call signature","comment":{"shortText":"Returns the directory name of a `path`. Trailing directory separators are ignored."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"documentDir","module":"path","fileName":"path.ts","signatures":[{"name":"documentDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's document directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_DOCUMENTS_DIR`.\n- **macOS:** Resolves to `$HOME/Documents`.\n- **Windows:** Resolves to `{FOLDERID_Documents}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"downloadDir","module":"path","fileName":"path.ts","signatures":[{"name":"downloadDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's download directory.","text":"#### Platform-specific\n\n- **Linux**: Resolves to `$XDG_DOWNLOAD_DIR`.\n- **macOS**: Resolves to `$HOME/Downloads`.\n- **Windows**: Resolves to `{FOLDERID_Downloads}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"executableDir","module":"path","fileName":"path.ts","signatures":[{"name":"executableDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's executable directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_BIN_HOME/../bin` or `$XDG_DATA_HOME/../bin` or `$HOME/.local/bin`.\n- **macOS:** Not supported.\n- **Windows:** Not supported.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"extname","module":"path","fileName":"path.ts","signatures":[{"name":"extname","kind":"Call signature","comment":{"shortText":"Returns the extension of the `path`."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"fontDir","module":"path","fileName":"path.ts","signatures":[{"name":"fontDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's font directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_DATA_HOME/fonts` or `$HOME/.local/share/fonts`.\n- **macOS:** Resolves to `$HOME/Library/Fonts`.\n- **Windows:** Not supported.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"homeDir","module":"path","fileName":"path.ts","signatures":[{"name":"homeDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's home directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$HOME`.\n- **macOS:** Resolves to `$HOME`.\n- **Windows:** Resolves to `{FOLDERID_Profile}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"isAbsolute","module":"path","fileName":"path.ts","signatures":[{"name":"isAbsolute","kind":"Call signature","type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"}}]},{"kind":"Function","name":"join","module":"path","fileName":"path.ts","signatures":[{"name":"join","kind":"Call signature","comment":{"shortText":" Joins all given `path` segments together using the platform-specific separator as a delimiter, then normalizes the resulting path."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"localDataDir","module":"path","fileName":"path.ts","signatures":[{"name":"localDataDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's local data directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_DATA_HOME` or `$HOME/.local/share`.\n- **macOS:** Resolves to `$HOME/Library/Application Support`.\n- **Windows:** Resolves to `{FOLDERID_LocalAppData}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"logDir","module":"path","fileName":"path.ts","signatures":[{"name":"logDir","kind":"Call signature","comment":{"shortText":"Returns the path to the suggested log directory.","text":"### Platform-specific\n\n- **Linux:** Resolves to `${configDir}/${bundleIdentifier}`.\n- **macOS:** Resolves to `${homeDir}//Library/Logs/{bundleIdentifier}`\n- **Windows:** Resolves to `${configDir}/${bundleIdentifier}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"normalize","module":"path","fileName":"path.ts","signatures":[{"name":"normalize","kind":"Call signature","comment":{"shortText":"Normalizes the given `path`, resolving `'..'` and `'.'` segments and resolve symolic links."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"pictureDir","module":"path","fileName":"path.ts","signatures":[{"name":"pictureDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's picture directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_PICTURES_DIR`.\n- **macOS:** Resolves to `$HOME/Pictures`.\n- **Windows:** Resolves to `{FOLDERID_Pictures}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"publicDir","module":"path","fileName":"path.ts","signatures":[{"name":"publicDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's public directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_PUBLICSHARE_DIR`.\n- **macOS:** Resolves to `$HOME/Public`.\n- **Windows:** Resolves to `{FOLDERID_Public}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"resolve","module":"path","fileName":"path.ts","signatures":[{"name":"resolve","kind":"Call signature","comment":{"shortText":"Resolves a sequence of `paths` or `path` segments into an absolute path."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"resourceDir","module":"path","fileName":"path.ts","signatures":[{"name":"resourceDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's resource directory.","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"runtimeDir","module":"path","fileName":"path.ts","signatures":[{"name":"runtimeDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's runtime directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_RUNTIME_DIR`.\n- **macOS:** Not supported.\n- **Windows:** Not supported.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"templateDir","module":"path","fileName":"path.ts","signatures":[{"name":"templateDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's template directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_TEMPLATES_DIR`.\n- **macOS:** Not supported.\n- **Windows:** Resolves to `{FOLDERID_Templates}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Function","name":"videoDir","module":"path","fileName":"path.ts","signatures":[{"name":"videoDir","kind":"Call signature","comment":{"shortText":"Returns the path to the user's video directory.","text":"#### Platform-specific\n\n- **Linux:** Resolves to `$XDG_VIDEOS_DIR`.\n- **macOS:** Resolves to `$HOME/Movies`.\n- **Windows:** Resolves to `{FOLDERID_Videos}`.\n","returns":"\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise"}}]},{"kind":"Namespace","name":"process","module":"process","fileName":"process.ts","children":[]},{"kind":"Function","name":"exit","module":"process","fileName":"process.ts","signatures":[{"name":"exit","kind":"Call signature","comment":{"shortText":"Exits immediately with the given `exitCode`.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Function","name":"relaunch","module":"process","fileName":"process.ts","signatures":[{"name":"relaunch","kind":"Call signature","comment":{"shortText":"Exits the current instance of the app then relaunches it.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Namespace","name":"shell","module":"shell","fileName":"shell.ts","children":[]},{"kind":"Class","name":"Child","module":"shell","fileName":"shell.ts","children":[{"id":402,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"shell.ts","line":135,"character":2}],"signatures":[{"id":403,"name":"new Child","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":404,"name":"pid","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":401,"name":"Child"}}]},{"id":405,"name":"pid","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"The child process `pid`."},"sources":[{"fileName":"shell.ts","line":133,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":409,"name":"kill","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"shell.ts","line":169,"character":8}],"signatures":[{"id":410,"name":"kill","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Kills the child process.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":406,"name":"write","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"shell.ts","line":153,"character":8}],"signatures":[{"id":407,"name":"write","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Writes `data` to the `stdin`.","returns":"A promise indicating the success or failure of the operation.\n","tags":[{"tag":"example","text":"\n```typescript\nconst command = new Command('node')\nconst child = await command.spawn()\nawait child.write('message')\nawait child.write([0, 1, 2, 3, 4, 5])\n```\n"}]},"parameters":[{"id":408,"name":"data","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The message to write, either a string or a byte array."},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"number"}}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]}]},{"kind":"Class","name":"Command","module":"shell","commentTags":[{"tag":"example","text":"\n```typescript\nconst command = new Command('node')\ncommand.on('close', data => {\n console.log(`command finished with code ${data.code} and signal ${data.signal}`)\n})\ncommand.on('error', error => console.error(`command error: \"${error}\"`))\ncommand.stdout.on('data', line => console.log(`command stdout: \"${line}\"`))\ncommand.stderr.on('data', line => console.log(`command stderr: \"${line}\"`))\n\nconst child = await command.spawn()\nconsole.log('pid:', child.pid)\n```\n"}],"fileName":"shell.ts","children":[{"id":376,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"shell.ts","line":216,"character":2}],"signatures":[{"id":377,"name":"new Command","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates a new `Command` instance."},"parameters":[{"id":378,"name":"program","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The program to execute."},"type":{"type":"intrinsic","name":"string"}},{"id":379,"name":"args","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Program arguments."},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]},"defaultValue":"[]"},{"id":380,"name":"options","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"Spawn options.\n"},"type":{"type":"reference","id":420,"name":"SpawnOptions"}}],"type":{"type":"reference","id":370,"name":"Command"},"overwrites":{"type":"reference","name":"EventEmitter<'close' | 'error'>.constructor"}}],"overwrites":{"type":"reference","name":"EventEmitter<'close' | 'error'>.constructor"}},{"id":385,"name":"stderr","kind":1024,"kindString":"Property","flags":{"isReadonly":true},"comment":{"shortText":"Event emitter for the `stderr`. Emits the `data` event."},"sources":[{"fileName":"shell.ts","line":207,"character":11}],"type":{"type":"reference","typeArguments":[{"type":"literal","value":"data"}],"name":"EventEmitter"},"defaultValue":"..."},{"id":384,"name":"stdout","kind":1024,"kindString":"Property","flags":{"isReadonly":true},"comment":{"shortText":"Event emitter for the `stdout`. Emits the `data` event."},"sources":[{"fileName":"shell.ts","line":205,"character":11}],"type":{"type":"reference","typeArguments":[{"type":"literal","value":"data"}],"name":"EventEmitter"},"defaultValue":"..."},{"id":388,"name":"execute","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"shell.ts","line":292,"character":8}],"signatures":[{"id":389,"name":"execute","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Executes the command as a child process, waiting for it to finish and collecting all of its output.","returns":"A promise resolving to the child process output.\n","tags":[{"tag":"example","text":"\n```typescript\nconst output = await new Command('echo', 'message').execute()\nassert(output.code === 0)\nassert(output.signal === null)\nassert(output.stdout === 'message')\nassert(output.stderr === '')\n```\n"}]},"type":{"type":"reference","typeArguments":[{"type":"reference","id":415,"name":"ChildProcess"}],"name":"Promise"}}]},{"id":394,"name":"on","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"shell.ts","line":125,"character":2}],"signatures":[{"id":395,"name":"on","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Listen to an event from the child process.","returns":"The `this` instance for chained calls.\n"},"parameters":[{"id":396,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The event name."},"type":{"type":"union","types":[{"type":"literal","value":"close"},{"type":"literal","value":"error"}]}},{"id":397,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The event handler.\n"},"type":{"type":"reflection","declaration":{"id":398,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":399,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":400,"name":"arg","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"literal","value":"close"},{"type":"literal","value":"error"}]}],"name":"EventEmitter"},"inheritedFrom":{"type":"reference","name":"EventEmitter.on"}}],"inheritedFrom":{"type":"reference","name":"EventEmitter.on"}},{"id":386,"name":"spawn","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"shell.ts","line":255,"character":8}],"signatures":[{"id":387,"name":"spawn","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Executes the command as a child process, returning a handle to it.","returns":"A promise resolving to the child process handle.\n"},"type":{"type":"reference","typeArguments":[{"type":"reference","id":401,"name":"Child"}],"name":"Promise"}}]},{"id":371,"name":"sidecar","kind":2048,"kindString":"Method","flags":{"isStatic":true},"sources":[{"fileName":"shell.ts","line":240,"character":9}],"signatures":[{"id":372,"name":"sidecar","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a command to execute the given sidecar program.","returns":"\n","tags":[{"tag":"example","text":"\n```typescript\nconst command = Command.sidecar('my-sidecar')\nconst output = await command.execute()\n```\n"}]},"parameters":[{"id":373,"name":"program","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The program to execute."},"type":{"type":"intrinsic","name":"string"}},{"id":374,"name":"args","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Program arguments."},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]},"defaultValue":"[]"},{"id":375,"name":"options","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"Spawn options."},"type":{"type":"reference","id":420,"name":"SpawnOptions"}}],"type":{"type":"reference","id":370,"name":"Command"}}]}]},{"kind":"Interface","name":"ChildProcess","module":"shell","fileName":"shell.ts","children":[{"id":416,"name":"code","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Exit code of the process. `null` if the process was terminated by a signal on Unix."},"sources":[{"fileName":"shell.ts","line":46,"character":2}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}},{"id":417,"name":"signal","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"If the process was terminated by a signal, represents that signal."},"sources":[{"fileName":"shell.ts","line":48,"character":2}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}},{"id":419,"name":"stderr","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"The data that the process wrote to `stderr`."},"sources":[{"fileName":"shell.ts","line":52,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":418,"name":"stdout","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"The data that the process wrote to `stdout`."},"sources":[{"fileName":"shell.ts","line":50,"character":2}],"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Interface","name":"SpawnOptions","module":"shell","fileName":"shell.ts","children":[{"id":421,"name":"cwd","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Current working directory."},"sources":[{"fileName":"shell.ts","line":34,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":422,"name":"env","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Environment variables. set to `null` to clear the process env."},"sources":[{"fileName":"shell.ts","line":36,"character":2}],"type":{"type":"reflection","declaration":{"id":423,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"indexSignature":{"id":424,"name":"__index","kind":8192,"kindString":"Index signature","flags":{},"parameters":[{"id":425,"name":"name","kind":32768,"flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"string"}}}}}]},{"kind":"Function","name":"open","module":"shell","fileName":"shell.ts","signatures":[{"name":"open","kind":"Call signature","comment":{"shortText":"Opens a path or URL with the system's default app,\nor the one specified with `openWith`.","returns":"\n","tags":[{"tag":"example","text":"\n```typescript\n// opens the given URL on the default browser:\nawait open('https://github.com/tauri-apps/tauri')\n// opens the given URL using `firefox`:\nawait open('https://github.com/tauri-apps/tauri', 'firefox')\n// opens a file using the default program:\nawait open('/path/to/file')\n```\n"}]},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Namespace","name":"tauri","module":"tauri","fileName":"tauri.ts","comment":"This package is also accessible with `window.__TAURI__.tauri` when `tauri.conf.json > build > withGlobalTauri` is set to true.","children":[]},{"kind":"Interface","name":"InvokeArgs","module":"tauri","fileName":"tauri.ts"},{"kind":"Function","name":"convertFileSrc","module":"tauri","fileName":"tauri.ts","signatures":[{"name":"convertFileSrc","kind":"Call signature","comment":{"shortText":"Convert a device file path to an URL that can be loaded by the webview.\nNote that `asset:` must be allowed on the `csp` value configured on `tauri.conf.json`.","returns":"the URL that can be used as source on the webview\n"},"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Function","name":"invoke","module":"tauri","fileName":"tauri.ts","signatures":[{"name":"invoke","kind":"Call signature","comment":{"shortText":"Sends a message to the backend.","returns":"A promise resolving or rejecting to the backend response.\n"},"type":{"type":"reference","typeArguments":[{"type":"reference","id":439,"name":"T"}],"name":"Promise"}}]},{"kind":"Function","name":"transformCallback","module":"tauri","fileName":"tauri.ts","signatures":[{"name":"transformCallback","kind":"Call signature","comment":{"shortText":"Transforms a callback function to a string identifier that can be passed to the backend.\nThe backend uses the identifier to `eval()` the callback.","returns":"A unique identifier associated with the callback function.\n"},"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Namespace","name":"updater","module":"updater","fileName":"updater.ts","comment":"This package is also accessible with `window.__TAURI__.updater` when `tauri.conf.json > build > withGlobalTauri` is set to true.","children":[]},{"kind":"Interface","name":"UpdateManifest","module":"updater","fileName":"updater.ts","children":[{"id":453,"name":"body","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"updater.ts","line":24,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":452,"name":"date","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"updater.ts","line":23,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":451,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"updater.ts","line":22,"character":2}],"type":{"type":"intrinsic","name":"string"}}]},{"kind":"Interface","name":"UpdateResult","module":"updater","fileName":"updater.ts","children":[{"id":455,"name":"manifest","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"updater.ts","line":28,"character":2}],"type":{"type":"reference","id":450,"name":"UpdateManifest"}},{"id":456,"name":"shouldUpdate","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"updater.ts","line":29,"character":2}],"type":{"type":"intrinsic","name":"boolean"}}]},{"kind":"Interface","name":"UpdateStatusResult","module":"updater","fileName":"updater.ts","children":[{"id":448,"name":"error","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"updater.ts","line":17,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":449,"name":"status","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"updater.ts","line":18,"character":2}],"type":{"type":"reference","id":446,"name":"UpdateStatus"}}]},{"kind":"Type alias","name":"UpdateStatus","module":"updater","type":{"type":"union","types":[{"type":"literal","value":"PENDING"},{"type":"literal","value":"ERROR"},{"type":"literal","value":"DONE"},{"type":"literal","value":"UPTODATE"}]},"fileName":"updater.ts"},{"kind":"Function","name":"checkUpdate","module":"updater","fileName":"updater.ts","signatures":[{"name":"checkUpdate","kind":"Call signature","comment":{"shortText":"Checks if an update is available.","returns":"Promise resolving to the update status.\n"},"type":{"type":"reference","typeArguments":[{"type":"reference","id":454,"name":"UpdateResult"}],"name":"Promise"}}]},{"kind":"Function","name":"installUpdate","module":"updater","fileName":"updater.ts","signatures":[{"name":"installUpdate","kind":"Call signature","comment":{"shortText":"Install the update if there's one available.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"kind":"Namespace","name":"window","module":"window","fileName":"window.ts","comment":"This package is also accessible with `window.__TAURI__.window` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"window\": {\n \"all\": true, // enable all window APIs\n \"create\": true // enable window creation\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.\n\n# Window events\n\nEvents can be listened using `appWindow.listen`:\n```typescript\nimport { appWindow } from '@tauri-apps/api/window'\nappWindow.listen('tauri://move', ({ event, payload }) => {\n const { x, y } = payload // payload here is a `PhysicalPosition`\n})\n```\n\nWindow-specific events emitted by the backend:\n\n#### 'tauri://resize'\nEmitted when the size of the window has changed.\n*EventPayload*:\n```typescript\ntype ResizePayload = PhysicalSize\n```\n\n#### 'tauri://move'\nEmitted when the position of the window has changed.\n*EventPayload*:\n```typescript\ntype MovePayload = PhysicalPosition\n```\n\n#### 'tauri://close-requested'\nEmitted when the user requests the window to be closed.\nIf a listener is registered for this event, Tauri won't close the window so you must call `appWindow.close()` manually.\n\n#### 'tauri://focus'\nEmitted when the window gains focus.\n\n#### 'tauri://blur'\nEmitted when the window loses focus.\n\n#### 'tauri://scale-change'\nEmitted when the window's scale factor has changed.\nThe following user actions can cause DPI changes:\n- Changing the display's resolution.\n- Changing the display's scale factor (e.g. in Control Panel on Windows).\n- Moving the window to a display with a different scale factor.\n*Event payload*:\n```typescript\ninterface ScaleFactorChanged {\n scaleFactor: number\n size: PhysicalSize\n}\n```\n\n#### 'tauri://menu'\nEmitted when a menu item is clicked.\n*EventPayload*:\n```typescript\ntype MenuClicked = string\n```\n","children":[]},{"kind":"Enumeration","name":"UserAttentionType","module":"window","fileName":"window.ts","children":[{"id":751,"name":"Critical","kind":16,"kindString":"Enumeration member","flags":{},"comment":{"shortText":"#### Platform-specific\n - **macOS:** Bounces the dock icon until the application is in focus.\n- **Windows:** Flashes both the window and the taskbar button until the application is in focus."},"sources":[{"fileName":"window.ts","line":181,"character":2}],"defaultValue":"1"},{"id":752,"name":"Informational","kind":16,"kindString":"Enumeration member","flags":{},"comment":{"shortText":"#### Platform-specific\n- **macOS:** Bounces the dock icon once.\n- **Windows:** Flashes the taskbar button until the application is in focus."},"sources":[{"fileName":"window.ts","line":187,"character":2}],"defaultValue":"2"}]},{"kind":"Class","name":"LogicalPosition","module":"window","fileName":"window.ts","children":[{"id":732,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"window.ts","line":136,"character":2}],"signatures":[{"id":733,"name":"new LogicalPosition","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":734,"name":"x","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":735,"name":"y","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":731,"name":"LogicalPosition"}}]},{"id":736,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":132,"character":2}],"type":{"type":"intrinsic","name":"string"},"defaultValue":"'Logical'"},{"id":737,"name":"x","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":133,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":738,"name":"y","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":134,"character":2}],"type":{"type":"intrinsic","name":"number"}}]},{"kind":"Class","name":"LogicalSize","module":"window","fileName":"window.ts","children":[{"id":713,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"window.ts","line":107,"character":2}],"signatures":[{"id":714,"name":"new LogicalSize","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":715,"name":"width","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":716,"name":"height","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":712,"name":"LogicalSize"}}]},{"id":719,"name":"height","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":105,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":717,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":103,"character":2}],"type":{"type":"intrinsic","name":"string"},"defaultValue":"'Logical'"},{"id":718,"name":"width","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":104,"character":2}],"type":{"type":"intrinsic","name":"number"}}]},{"kind":"Class","name":"PhysicalPosition","module":"window","fileName":"window.ts","children":[{"id":740,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"window.ts","line":148,"character":2}],"signatures":[{"id":741,"name":"new PhysicalPosition","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":742,"name":"x","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":743,"name":"y","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":739,"name":"PhysicalPosition"}}]},{"id":744,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":144,"character":2}],"type":{"type":"intrinsic","name":"string"},"defaultValue":"'Physical'"},{"id":745,"name":"x","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":145,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":746,"name":"y","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":146,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":747,"name":"toLogical","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":154,"character":2}],"signatures":[{"id":748,"name":"toLogical","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Converts the physical position to a logical one."},"parameters":[{"id":749,"name":"scaleFactor","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":731,"name":"LogicalPosition"}}]}]},{"kind":"Class","name":"PhysicalSize","module":"window","fileName":"window.ts","children":[{"id":721,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"window.ts","line":119,"character":2}],"signatures":[{"id":722,"name":"new PhysicalSize","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":723,"name":"width","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":724,"name":"height","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":720,"name":"PhysicalSize"}}]},{"id":727,"name":"height","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":117,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":725,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":115,"character":2}],"type":{"type":"intrinsic","name":"string"},"defaultValue":"'Physical'"},{"id":726,"name":"width","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"window.ts","line":116,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":728,"name":"toLogical","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":125,"character":2}],"signatures":[{"id":729,"name":"toLogical","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Converts the physical size to a logical one."},"parameters":[{"id":730,"name":"scaleFactor","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":712,"name":"LogicalSize"}}]}]},{"kind":"Class","name":"WebviewWindow","module":"window","commentTags":[{"tag":"example","text":"\n```typescript\n// loading embedded asset:\nconst webview = new WebviewWindow('theUniqueLabel', {\n url: 'path/to/page.html'\n})\n// alternatively, load a remote URL:\nconst webview = new WebviewWindow('theUniqueLabel', {\n url: 'https://github.com/tauri-apps/tauri'\n})\n\nwebview.once('tauri://created', function () {\n // webview window successfully created\n})\nwebview.once('tauri://error', function (e) {\n // an error happened creating the webview window\n})\n\n// emit an event to the backend\nawait webview.emit(\"some event\", \"data\")\n// listen to an event from the backend\nconst unlisten = await webview.listen(\"event name\", e => {})\nunlisten()\n```\n"}],"fileName":"window.ts","children":[{"id":467,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"window.ts","line":1097,"character":2}],"signatures":[{"id":468,"name":"new WebviewWindow","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":469,"name":"label","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":470,"name":"options","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":764,"name":"WindowOptions"},"defaultValue":"{}"}],"type":{"type":"reference","id":463,"name":"WebviewWindow"},"overwrites":{"type":"reference","id":603,"name":"WindowManager.constructor"}}],"overwrites":{"type":"reference","id":602,"name":"WindowManager.constructor"}},{"id":549,"name":"label","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Window label."},"sources":[{"fileName":"window.ts","line":227,"character":2}],"type":{"type":"intrinsic","name":"string"},"inheritedFrom":{"type":"reference","id":683,"name":"WindowManager.label"}},{"id":550,"name":"listeners","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Local event listeners."},"sources":[{"fileName":"window.ts","line":229,"character":2}],"type":{"type":"reflection","declaration":{"id":551,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"indexSignature":{"id":552,"name":"__index","kind":8192,"kindString":"Index signature","flags":{},"parameters":[{"id":553,"name":"key","kind":32768,"flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"array","elementType":{"type":"reference","id":65,"typeArguments":[{"type":"intrinsic","name":"any"}],"name":"EventCallback"}}}}},"inheritedFrom":{"type":"reference","id":684,"name":"WindowManager.listeners"}},{"id":568,"name":"_handleTauriEvent","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":297,"character":2}],"signatures":[{"id":569,"name":"_handleTauriEvent","kind":4096,"kindString":"Call signature","flags":{},"typeParameter":[{"id":570,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":571,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}},{"id":572,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":65,"typeArguments":[{"type":"reference","id":570,"name":"T"}],"name":"EventCallback"}}],"type":{"type":"intrinsic","name":"boolean"},"inheritedFrom":{"type":"reference","id":703,"name":"WindowManager._handleTauriEvent"}}],"inheritedFrom":{"type":"reference","id":702,"name":"WindowManager._handleTauriEvent"}},{"id":491,"name":"center","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":491,"character":8}],"signatures":[{"id":492,"name":"center","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Centers the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":626,"name":"WindowManager.center"}}],"inheritedFrom":{"type":"reference","id":625,"name":"WindowManager.center"}},{"id":516,"name":"close","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":736,"character":8}],"signatures":[{"id":517,"name":"close","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Closes the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":651,"name":"WindowManager.close"}}],"inheritedFrom":{"type":"reference","id":650,"name":"WindowManager.close"}},{"id":564,"name":"emit","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":286,"character":8}],"signatures":[{"id":565,"name":"emit","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Emits an event to the backend, tied to the webview window."},"parameters":[{"id":566,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event name."},"type":{"type":"intrinsic","name":"string"}},{"id":567,"name":"payload","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"Event payload.\n"},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":699,"name":"WindowManager.emit"}}],"inheritedFrom":{"type":"reference","id":698,"name":"WindowManager.emit"}},{"id":514,"name":"hide","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":716,"character":8}],"signatures":[{"id":515,"name":"hide","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window visibility to false.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":649,"name":"WindowManager.hide"}}],"inheritedFrom":{"type":"reference","id":648,"name":"WindowManager.hide"}},{"id":473,"name":"innerPosition","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":334,"character":8}],"signatures":[{"id":474,"name":"innerPosition","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"The position of the top-left hand corner of the window's client area relative to the top-left hand corner of the desktop."},"type":{"type":"reference","typeArguments":[{"type":"reference","id":739,"name":"PhysicalPosition"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":608,"name":"WindowManager.innerPosition"}}],"inheritedFrom":{"type":"reference","id":607,"name":"WindowManager.innerPosition"}},{"id":477,"name":"innerSize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":369,"character":8}],"signatures":[{"id":478,"name":"innerSize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"The physical size of the window's client area.\nThe client area is the content of the window, excluding the title bar and borders."},"type":{"type":"reference","typeArguments":[{"type":"reference","id":720,"name":"PhysicalSize"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":612,"name":"WindowManager.innerSize"}}],"inheritedFrom":{"type":"reference","id":611,"name":"WindowManager.innerSize"}},{"id":485,"name":"isDecorated","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":436,"character":8}],"signatures":[{"id":486,"name":"isDecorated","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the window's current decorated state."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":620,"name":"WindowManager.isDecorated"}}],"inheritedFrom":{"type":"reference","id":619,"name":"WindowManager.isDecorated"}},{"id":481,"name":"isFullscreen","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":404,"character":8}],"signatures":[{"id":482,"name":"isFullscreen","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the window's current fullscreen state."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":616,"name":"WindowManager.isFullscreen"}}],"inheritedFrom":{"type":"reference","id":615,"name":"WindowManager.isFullscreen"}},{"id":483,"name":"isMaximized","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":420,"character":8}],"signatures":[{"id":484,"name":"isMaximized","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the window's current maximized state."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":618,"name":"WindowManager.isMaximized"}}],"inheritedFrom":{"type":"reference","id":617,"name":"WindowManager.isMaximized"}},{"id":487,"name":"isResizable","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":452,"character":8}],"signatures":[{"id":488,"name":"isResizable","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the window's current resizable state."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":622,"name":"WindowManager.isResizable"}}],"inheritedFrom":{"type":"reference","id":621,"name":"WindowManager.isResizable"}},{"id":489,"name":"isVisible","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":468,"character":8}],"signatures":[{"id":490,"name":"isVisible","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the window's current visible state."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":624,"name":"WindowManager.isVisible"}}],"inheritedFrom":{"type":"reference","id":623,"name":"WindowManager.isVisible"}},{"id":554,"name":"listen","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":248,"character":8}],"signatures":[{"id":555,"name":"listen","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Listen to an event emitted by the backend that is tied to the webview window.","returns":"A promise resolving to a function to unlisten to the event.\n"},"typeParameter":[{"id":556,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":557,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event name."},"type":{"type":"reference","id":64,"name":"EventName"}},{"id":558,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event handler."},"type":{"type":"reference","id":65,"typeArguments":[{"type":"reference","id":556,"name":"T"}],"name":"EventCallback"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":70,"name":"UnlistenFn"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":689,"name":"WindowManager.listen"}}],"inheritedFrom":{"type":"reference","id":688,"name":"WindowManager.listen"}},{"id":502,"name":"maximize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":596,"character":8}],"signatures":[{"id":503,"name":"maximize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Maximizes the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":637,"name":"WindowManager.maximize"}}],"inheritedFrom":{"type":"reference","id":636,"name":"WindowManager.maximize"}},{"id":508,"name":"minimize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":656,"character":8}],"signatures":[{"id":509,"name":"minimize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Minimizes the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":643,"name":"WindowManager.minimize"}}],"inheritedFrom":{"type":"reference","id":642,"name":"WindowManager.minimize"}},{"id":559,"name":"once","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":269,"character":8}],"signatures":[{"id":560,"name":"once","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Listen to an one-off event emitted by the backend that is tied to the webview window.","returns":"A promise resolving to a function to unlisten to the event.\n"},"typeParameter":[{"id":561,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":562,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event name."},"type":{"type":"intrinsic","name":"string"}},{"id":563,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event handler."},"type":{"type":"reference","id":65,"typeArguments":[{"type":"reference","id":561,"name":"T"}],"name":"EventCallback"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":70,"name":"UnlistenFn"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":694,"name":"WindowManager.once"}}],"inheritedFrom":{"type":"reference","id":693,"name":"WindowManager.once"}},{"id":475,"name":"outerPosition","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":350,"character":8}],"signatures":[{"id":476,"name":"outerPosition","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"The position of the top-left hand corner of the window relative to the top-left hand corner of the desktop."},"type":{"type":"reference","typeArguments":[{"type":"reference","id":739,"name":"PhysicalPosition"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":610,"name":"WindowManager.outerPosition"}}],"inheritedFrom":{"type":"reference","id":609,"name":"WindowManager.outerPosition"}},{"id":479,"name":"outerSize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":388,"character":8}],"signatures":[{"id":480,"name":"outerSize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"The physical size of the entire window.\nThese dimensions include the title bar and borders. If you don't want that (and you usually don't), use inner_size instead."},"type":{"type":"reference","typeArguments":[{"type":"reference","id":720,"name":"PhysicalSize"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":614,"name":"WindowManager.outerSize"}}],"inheritedFrom":{"type":"reference","id":613,"name":"WindowManager.outerSize"}},{"id":493,"name":"requestUserAttention","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":521,"character":8}],"signatures":[{"id":494,"name":"requestUserAttention","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":" Requests user attention to the window, this has no effect if the application\nis already focused. How requesting for user attention manifests is platform dependent,\nsee `UserAttentionType` for details.","text":"Providing `null` will unset the request for user attention. Unsetting the request for\nuser attention might not be done automatically by the WM when the window receives input.\n\n#### Platform-specific\n\n- **macOS:** `null` has no effect.\n","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":495,"name":"requestType","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":750,"name":"UserAttentionType"}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":628,"name":"WindowManager.requestUserAttention"}}],"inheritedFrom":{"type":"reference","id":627,"name":"WindowManager.requestUserAttention"}},{"id":471,"name":"scaleFactor","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":318,"character":8}],"signatures":[{"id":472,"name":"scaleFactor","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"The scale factor that can be used to map physical pixels to logical pixels."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"number"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":606,"name":"WindowManager.scaleFactor"}}],"inheritedFrom":{"type":"reference","id":605,"name":"WindowManager.scaleFactor"}},{"id":521,"name":"setAlwaysOnTop","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":779,"character":8}],"signatures":[{"id":522,"name":"setAlwaysOnTop","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Whether the window should always be on top of other windows.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":523,"name":"alwaysOnTop","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Whether the window should always be on top of other windows or not."},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":656,"name":"WindowManager.setAlwaysOnTop"}}],"inheritedFrom":{"type":"reference","id":655,"name":"WindowManager.setAlwaysOnTop"}},{"id":518,"name":"setDecorations","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":757,"character":8}],"signatures":[{"id":519,"name":"setDecorations","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Whether the window should have borders and bars.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":520,"name":"decorations","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Whether the window should have borders and bars."},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":653,"name":"WindowManager.setDecorations"}}],"inheritedFrom":{"type":"reference","id":652,"name":"WindowManager.setDecorations"}},{"id":539,"name":"setFocus","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":987,"character":8}],"signatures":[{"id":540,"name":"setFocus","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Bring the window to front and focus.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":674,"name":"WindowManager.setFocus"}}],"inheritedFrom":{"type":"reference","id":673,"name":"WindowManager.setFocus"}},{"id":536,"name":"setFullscreen","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":966,"character":8}],"signatures":[{"id":537,"name":"setFullscreen","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window fullscreen state.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":538,"name":"fullscreen","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Whether the window should go to fullscreen or not."},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":671,"name":"WindowManager.setFullscreen"}}],"inheritedFrom":{"type":"reference","id":670,"name":"WindowManager.setFullscreen"}},{"id":541,"name":"setIcon","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":1008,"character":8}],"signatures":[{"id":542,"name":"setIcon","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window icon.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":543,"name":"icon","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Icon bytes or path to the icon file."},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"number"}}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":676,"name":"WindowManager.setIcon"}}],"inheritedFrom":{"type":"reference","id":675,"name":"WindowManager.setIcon"}},{"id":530,"name":"setMaxSize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":886,"character":8}],"signatures":[{"id":531,"name":"setMaxSize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window maximum inner size. If the `size` argument is undefined, the constraint is unset.","returns":"A promise indicating the success or failure of the operation.\n","tags":[{"tag":"example","text":"\n```typescript\nimport { appWindow, LogicalSize } from '@tauri-apps/api/window'\nawait appWindow.setMaxSize(new LogicalSize(600, 500))\n```\n"}]},"parameters":[{"id":532,"name":"size","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The logical or physical inner size, or `null` to unset the constraint."},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"literal","value":null},{"type":"reference","id":720,"name":"PhysicalSize"},{"type":"reference","id":712,"name":"LogicalSize"}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":665,"name":"WindowManager.setMaxSize"}}],"inheritedFrom":{"type":"reference","id":664,"name":"WindowManager.setMaxSize"}},{"id":527,"name":"setMinSize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":844,"character":8}],"signatures":[{"id":528,"name":"setMinSize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window minimum inner size. If the `size` argument is not provided, the constraint is unset.","returns":"A promise indicating the success or failure of the operation.\n","tags":[{"tag":"example","text":"\n```typescript\nimport { appWindow, PhysicalSize } from '@tauri-apps/api/window'\nawait appWindow.setMinSize(new PhysicalSize(600, 500))\n```\n"}]},"parameters":[{"id":529,"name":"size","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The logical or physical inner size, or `null` to unset the constraint."},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"literal","value":null},{"type":"reference","id":720,"name":"PhysicalSize"},{"type":"reference","id":712,"name":"LogicalSize"}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":662,"name":"WindowManager.setMinSize"}}],"inheritedFrom":{"type":"reference","id":661,"name":"WindowManager.setMinSize"}},{"id":533,"name":"setPosition","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":928,"character":8}],"signatures":[{"id":534,"name":"setPosition","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window outer position.","returns":"A promise indicating the success or failure of the operation.\n","tags":[{"tag":"example","text":"\n```typescript\nimport { appWindow, LogicalPosition } from '@tauri-apps/api/window'\nawait appWindow.setPosition(new LogicalPosition(600, 500))\n```\n"}]},"parameters":[{"id":535,"name":"position","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The new position, in logical or physical pixels."},"type":{"type":"union","types":[{"type":"reference","id":739,"name":"PhysicalPosition"},{"type":"reference","id":731,"name":"LogicalPosition"}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":668,"name":"WindowManager.setPosition"}}],"inheritedFrom":{"type":"reference","id":667,"name":"WindowManager.setPosition"}},{"id":496,"name":"setResizable","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":553,"character":8}],"signatures":[{"id":497,"name":"setResizable","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Updates the window resizable flag.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":498,"name":"resizable","kind":32768,"kindString":"Parameter","flags":{},"comment":{},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":631,"name":"WindowManager.setResizable"}}],"inheritedFrom":{"type":"reference","id":630,"name":"WindowManager.setResizable"}},{"id":524,"name":"setSize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":806,"character":8}],"signatures":[{"id":525,"name":"setSize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Resizes the window with a new inner size.","returns":"A promise indicating the success or failure of the operation.\n","tags":[{"tag":"example","text":"\n```typescript\nimport { appWindow, LogicalSize } from '@tauri-apps/api/window'\nawait appWindow.setSize(new LogicalSize(600, 500))\n```\n"}]},"parameters":[{"id":526,"name":"size","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The logical or physical inner size."},"type":{"type":"union","types":[{"type":"reference","id":720,"name":"PhysicalSize"},{"type":"reference","id":712,"name":"LogicalSize"}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":659,"name":"WindowManager.setSize"}}],"inheritedFrom":{"type":"reference","id":658,"name":"WindowManager.setSize"}},{"id":544,"name":"setSkipTaskbar","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":1032,"character":8}],"signatures":[{"id":545,"name":"setSkipTaskbar","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Whether to show the window icon in the task bar or not.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":546,"name":"skip","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"true to hide window icon, false to show it."},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":679,"name":"WindowManager.setSkipTaskbar"}}],"inheritedFrom":{"type":"reference","id":678,"name":"WindowManager.setSkipTaskbar"}},{"id":499,"name":"setTitle","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":575,"character":8}],"signatures":[{"id":500,"name":"setTitle","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window title.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":501,"name":"title","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The new title"},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":634,"name":"WindowManager.setTitle"}}],"inheritedFrom":{"type":"reference","id":633,"name":"WindowManager.setTitle"}},{"id":512,"name":"show","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":696,"character":8}],"signatures":[{"id":513,"name":"show","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window visibility to true.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":647,"name":"WindowManager.show"}}],"inheritedFrom":{"type":"reference","id":646,"name":"WindowManager.show"}},{"id":547,"name":"startDragging","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":1053,"character":8}],"signatures":[{"id":548,"name":"startDragging","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Starts dragging the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":682,"name":"WindowManager.startDragging"}}],"inheritedFrom":{"type":"reference","id":681,"name":"WindowManager.startDragging"}},{"id":506,"name":"toggleMaximize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":636,"character":8}],"signatures":[{"id":507,"name":"toggleMaximize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Toggles the window maximized state.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":641,"name":"WindowManager.toggleMaximize"}}],"inheritedFrom":{"type":"reference","id":640,"name":"WindowManager.toggleMaximize"}},{"id":504,"name":"unmaximize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":616,"character":8}],"signatures":[{"id":505,"name":"unmaximize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Unmaximizes the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":639,"name":"WindowManager.unmaximize"}}],"inheritedFrom":{"type":"reference","id":638,"name":"WindowManager.unmaximize"}},{"id":510,"name":"unminimize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":676,"character":8}],"signatures":[{"id":511,"name":"unminimize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Unminimizes the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":645,"name":"WindowManager.unminimize"}}],"inheritedFrom":{"type":"reference","id":644,"name":"WindowManager.unminimize"}},{"id":464,"name":"getByLabel","kind":2048,"kindString":"Method","flags":{"isStatic":true},"sources":[{"fileName":"window.ts","line":1127,"character":9}],"signatures":[{"id":465,"name":"getByLabel","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the WebviewWindow for the webview associated with the given label.","returns":"The WebviewWindow instance to communicate with the webview or null if the webview doesn't exist.\n"},"parameters":[{"id":466,"name":"label","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The webview window label."},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":463,"name":"WebviewWindow"}]}}]}]},{"kind":"Class","name":"WebviewWindowHandle","module":"window","fileName":"window.ts","children":[{"id":574,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"window.ts","line":231,"character":2}],"signatures":[{"id":575,"name":"new WebviewWindowHandle","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":576,"name":"label","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"type":{"type":"reference","id":573,"name":"WebviewWindowHandle"}}]},{"id":577,"name":"label","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Window label."},"sources":[{"fileName":"window.ts","line":227,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":578,"name":"listeners","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Local event listeners."},"sources":[{"fileName":"window.ts","line":229,"character":2}],"type":{"type":"reflection","declaration":{"id":579,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"indexSignature":{"id":580,"name":"__index","kind":8192,"kindString":"Index signature","flags":{},"parameters":[{"id":581,"name":"key","kind":32768,"flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"array","elementType":{"type":"reference","id":65,"typeArguments":[{"type":"intrinsic","name":"any"}],"name":"EventCallback"}}}}}},{"id":596,"name":"_handleTauriEvent","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":297,"character":2}],"signatures":[{"id":597,"name":"_handleTauriEvent","kind":4096,"kindString":"Call signature","flags":{},"typeParameter":[{"id":598,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":599,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}},{"id":600,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":65,"typeArguments":[{"type":"reference","id":570,"name":"T"}],"name":"EventCallback"}}],"type":{"type":"intrinsic","name":"boolean"}}]},{"id":592,"name":"emit","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":286,"character":8}],"signatures":[{"id":593,"name":"emit","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Emits an event to the backend, tied to the webview window."},"parameters":[{"id":594,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event name."},"type":{"type":"intrinsic","name":"string"}},{"id":595,"name":"payload","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"Event payload.\n"},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":582,"name":"listen","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":248,"character":8}],"signatures":[{"id":583,"name":"listen","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Listen to an event emitted by the backend that is tied to the webview window.","returns":"A promise resolving to a function to unlisten to the event.\n"},"typeParameter":[{"id":584,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":585,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event name."},"type":{"type":"reference","id":64,"name":"EventName"}},{"id":586,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event handler."},"type":{"type":"reference","id":65,"typeArguments":[{"type":"reference","id":556,"name":"T"}],"name":"EventCallback"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":70,"name":"UnlistenFn"}],"name":"Promise"}}]},{"id":587,"name":"once","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":269,"character":8}],"signatures":[{"id":588,"name":"once","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Listen to an one-off event emitted by the backend that is tied to the webview window.","returns":"A promise resolving to a function to unlisten to the event.\n"},"typeParameter":[{"id":589,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":590,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event name."},"type":{"type":"intrinsic","name":"string"}},{"id":591,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event handler."},"type":{"type":"reference","id":65,"typeArguments":[{"type":"reference","id":561,"name":"T"}],"name":"EventCallback"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":70,"name":"UnlistenFn"}],"name":"Promise"}}]}]},{"kind":"Class","name":"WindowManager","module":"window","fileName":"window.ts","children":[{"id":602,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"signatures":[{"id":603,"name":"new WindowManager","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":604,"name":"label","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"type":{"type":"reference","id":601,"name":"WindowManager"},"inheritedFrom":{"type":"reference","id":575,"name":"WebviewWindowHandle.constructor"}}],"inheritedFrom":{"type":"reference","id":574,"name":"WebviewWindowHandle.constructor"}},{"id":683,"name":"label","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Window label."},"sources":[{"fileName":"window.ts","line":227,"character":2}],"type":{"type":"intrinsic","name":"string"},"inheritedFrom":{"type":"reference","id":577,"name":"WebviewWindowHandle.label"}},{"id":684,"name":"listeners","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Local event listeners."},"sources":[{"fileName":"window.ts","line":229,"character":2}],"type":{"type":"reflection","declaration":{"id":685,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"indexSignature":{"id":686,"name":"__index","kind":8192,"kindString":"Index signature","flags":{},"parameters":[{"id":687,"name":"key","kind":32768,"flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"array","elementType":{"type":"reference","id":65,"typeArguments":[{"type":"intrinsic","name":"any"}],"name":"EventCallback"}}}}},"inheritedFrom":{"type":"reference","id":578,"name":"WebviewWindowHandle.listeners"}},{"id":702,"name":"_handleTauriEvent","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":297,"character":2}],"signatures":[{"id":703,"name":"_handleTauriEvent","kind":4096,"kindString":"Call signature","flags":{},"typeParameter":[{"id":704,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":705,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}},{"id":706,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":65,"typeArguments":[{"type":"reference","id":570,"name":"T"}],"name":"EventCallback"}}],"type":{"type":"intrinsic","name":"boolean"},"inheritedFrom":{"type":"reference","id":597,"name":"WebviewWindowHandle._handleTauriEvent"}}],"inheritedFrom":{"type":"reference","id":596,"name":"WebviewWindowHandle._handleTauriEvent"}},{"id":625,"name":"center","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":491,"character":8}],"signatures":[{"id":626,"name":"center","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Centers the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":650,"name":"close","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":736,"character":8}],"signatures":[{"id":651,"name":"close","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Closes the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":698,"name":"emit","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":286,"character":8}],"signatures":[{"id":699,"name":"emit","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Emits an event to the backend, tied to the webview window."},"parameters":[{"id":700,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event name."},"type":{"type":"intrinsic","name":"string"}},{"id":701,"name":"payload","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"Event payload.\n"},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":593,"name":"WebviewWindowHandle.emit"}}],"inheritedFrom":{"type":"reference","id":592,"name":"WebviewWindowHandle.emit"}},{"id":648,"name":"hide","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":716,"character":8}],"signatures":[{"id":649,"name":"hide","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window visibility to false.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":607,"name":"innerPosition","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":334,"character":8}],"signatures":[{"id":608,"name":"innerPosition","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"The position of the top-left hand corner of the window's client area relative to the top-left hand corner of the desktop."},"type":{"type":"reference","typeArguments":[{"type":"reference","id":739,"name":"PhysicalPosition"}],"name":"Promise"}}]},{"id":611,"name":"innerSize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":369,"character":8}],"signatures":[{"id":612,"name":"innerSize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"The physical size of the window's client area.\nThe client area is the content of the window, excluding the title bar and borders."},"type":{"type":"reference","typeArguments":[{"type":"reference","id":720,"name":"PhysicalSize"}],"name":"Promise"}}]},{"id":619,"name":"isDecorated","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":436,"character":8}],"signatures":[{"id":620,"name":"isDecorated","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the window's current decorated state."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"}}]},{"id":615,"name":"isFullscreen","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":404,"character":8}],"signatures":[{"id":616,"name":"isFullscreen","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the window's current fullscreen state."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"}}]},{"id":617,"name":"isMaximized","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":420,"character":8}],"signatures":[{"id":618,"name":"isMaximized","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the window's current maximized state."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"}}]},{"id":621,"name":"isResizable","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":452,"character":8}],"signatures":[{"id":622,"name":"isResizable","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the window's current resizable state."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"}}]},{"id":623,"name":"isVisible","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":468,"character":8}],"signatures":[{"id":624,"name":"isVisible","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the window's current visible state."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise"}}]},{"id":688,"name":"listen","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":248,"character":8}],"signatures":[{"id":689,"name":"listen","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Listen to an event emitted by the backend that is tied to the webview window.","returns":"A promise resolving to a function to unlisten to the event.\n"},"typeParameter":[{"id":690,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":691,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event name."},"type":{"type":"reference","id":64,"name":"EventName"}},{"id":692,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event handler."},"type":{"type":"reference","id":65,"typeArguments":[{"type":"reference","id":556,"name":"T"}],"name":"EventCallback"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":70,"name":"UnlistenFn"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":583,"name":"WebviewWindowHandle.listen"}}],"inheritedFrom":{"type":"reference","id":582,"name":"WebviewWindowHandle.listen"}},{"id":636,"name":"maximize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":596,"character":8}],"signatures":[{"id":637,"name":"maximize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Maximizes the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":642,"name":"minimize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":656,"character":8}],"signatures":[{"id":643,"name":"minimize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Minimizes the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":693,"name":"once","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":269,"character":8}],"signatures":[{"id":694,"name":"once","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Listen to an one-off event emitted by the backend that is tied to the webview window.","returns":"A promise resolving to a function to unlisten to the event.\n"},"typeParameter":[{"id":695,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":696,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event name."},"type":{"type":"intrinsic","name":"string"}},{"id":697,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Event handler."},"type":{"type":"reference","id":65,"typeArguments":[{"type":"reference","id":561,"name":"T"}],"name":"EventCallback"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":70,"name":"UnlistenFn"}],"name":"Promise"},"inheritedFrom":{"type":"reference","id":588,"name":"WebviewWindowHandle.once"}}],"inheritedFrom":{"type":"reference","id":587,"name":"WebviewWindowHandle.once"}},{"id":609,"name":"outerPosition","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":350,"character":8}],"signatures":[{"id":610,"name":"outerPosition","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"The position of the top-left hand corner of the window relative to the top-left hand corner of the desktop."},"type":{"type":"reference","typeArguments":[{"type":"reference","id":739,"name":"PhysicalPosition"}],"name":"Promise"}}]},{"id":613,"name":"outerSize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":388,"character":8}],"signatures":[{"id":614,"name":"outerSize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"The physical size of the entire window.\nThese dimensions include the title bar and borders. If you don't want that (and you usually don't), use inner_size instead."},"type":{"type":"reference","typeArguments":[{"type":"reference","id":720,"name":"PhysicalSize"}],"name":"Promise"}}]},{"id":627,"name":"requestUserAttention","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":521,"character":8}],"signatures":[{"id":628,"name":"requestUserAttention","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":" Requests user attention to the window, this has no effect if the application\nis already focused. How requesting for user attention manifests is platform dependent,\nsee `UserAttentionType` for details.","text":"Providing `null` will unset the request for user attention. Unsetting the request for\nuser attention might not be done automatically by the WM when the window receives input.\n\n#### Platform-specific\n\n- **macOS:** `null` has no effect.\n","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":629,"name":"requestType","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":750,"name":"UserAttentionType"}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":605,"name":"scaleFactor","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":318,"character":8}],"signatures":[{"id":606,"name":"scaleFactor","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"The scale factor that can be used to map physical pixels to logical pixels."},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"number"}],"name":"Promise"}}]},{"id":655,"name":"setAlwaysOnTop","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":779,"character":8}],"signatures":[{"id":656,"name":"setAlwaysOnTop","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Whether the window should always be on top of other windows.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":657,"name":"alwaysOnTop","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Whether the window should always be on top of other windows or not."},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":652,"name":"setDecorations","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":757,"character":8}],"signatures":[{"id":653,"name":"setDecorations","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Whether the window should have borders and bars.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":654,"name":"decorations","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Whether the window should have borders and bars."},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":673,"name":"setFocus","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":987,"character":8}],"signatures":[{"id":674,"name":"setFocus","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Bring the window to front and focus.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":670,"name":"setFullscreen","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":966,"character":8}],"signatures":[{"id":671,"name":"setFullscreen","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window fullscreen state.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":672,"name":"fullscreen","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Whether the window should go to fullscreen or not."},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":675,"name":"setIcon","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":1008,"character":8}],"signatures":[{"id":676,"name":"setIcon","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window icon.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":677,"name":"icon","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"Icon bytes or path to the icon file."},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"number"}}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":664,"name":"setMaxSize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":886,"character":8}],"signatures":[{"id":665,"name":"setMaxSize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window maximum inner size. If the `size` argument is undefined, the constraint is unset.","returns":"A promise indicating the success or failure of the operation.\n","tags":[{"tag":"example","text":"\n```typescript\nimport { appWindow, LogicalSize } from '@tauri-apps/api/window'\nawait appWindow.setMaxSize(new LogicalSize(600, 500))\n```\n"}]},"parameters":[{"id":666,"name":"size","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The logical or physical inner size, or `null` to unset the constraint."},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"literal","value":null},{"type":"reference","id":720,"name":"PhysicalSize"},{"type":"reference","id":712,"name":"LogicalSize"}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":661,"name":"setMinSize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":844,"character":8}],"signatures":[{"id":662,"name":"setMinSize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window minimum inner size. If the `size` argument is not provided, the constraint is unset.","returns":"A promise indicating the success or failure of the operation.\n","tags":[{"tag":"example","text":"\n```typescript\nimport { appWindow, PhysicalSize } from '@tauri-apps/api/window'\nawait appWindow.setMinSize(new PhysicalSize(600, 500))\n```\n"}]},"parameters":[{"id":663,"name":"size","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The logical or physical inner size, or `null` to unset the constraint."},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"literal","value":null},{"type":"reference","id":720,"name":"PhysicalSize"},{"type":"reference","id":712,"name":"LogicalSize"}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":667,"name":"setPosition","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":928,"character":8}],"signatures":[{"id":668,"name":"setPosition","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window outer position.","returns":"A promise indicating the success or failure of the operation.\n","tags":[{"tag":"example","text":"\n```typescript\nimport { appWindow, LogicalPosition } from '@tauri-apps/api/window'\nawait appWindow.setPosition(new LogicalPosition(600, 500))\n```\n"}]},"parameters":[{"id":669,"name":"position","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The new position, in logical or physical pixels."},"type":{"type":"union","types":[{"type":"reference","id":739,"name":"PhysicalPosition"},{"type":"reference","id":731,"name":"LogicalPosition"}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":630,"name":"setResizable","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":553,"character":8}],"signatures":[{"id":631,"name":"setResizable","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Updates the window resizable flag.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":632,"name":"resizable","kind":32768,"kindString":"Parameter","flags":{},"comment":{},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":658,"name":"setSize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":806,"character":8}],"signatures":[{"id":659,"name":"setSize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Resizes the window with a new inner size.","returns":"A promise indicating the success or failure of the operation.\n","tags":[{"tag":"example","text":"\n```typescript\nimport { appWindow, LogicalSize } from '@tauri-apps/api/window'\nawait appWindow.setSize(new LogicalSize(600, 500))\n```\n"}]},"parameters":[{"id":660,"name":"size","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The logical or physical inner size."},"type":{"type":"union","types":[{"type":"reference","id":720,"name":"PhysicalSize"},{"type":"reference","id":712,"name":"LogicalSize"}]}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":678,"name":"setSkipTaskbar","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":1032,"character":8}],"signatures":[{"id":679,"name":"setSkipTaskbar","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Whether to show the window icon in the task bar or not.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":680,"name":"skip","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"true to hide window icon, false to show it."},"type":{"type":"intrinsic","name":"boolean"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":633,"name":"setTitle","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":575,"character":8}],"signatures":[{"id":634,"name":"setTitle","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window title.","returns":"A promise indicating the success or failure of the operation.\n"},"parameters":[{"id":635,"name":"title","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The new title"},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":646,"name":"show","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":696,"character":8}],"signatures":[{"id":647,"name":"show","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the window visibility to true.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":681,"name":"startDragging","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":1053,"character":8}],"signatures":[{"id":682,"name":"startDragging","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Starts dragging the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":640,"name":"toggleMaximize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":636,"character":8}],"signatures":[{"id":641,"name":"toggleMaximize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Toggles the window maximized state.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":638,"name":"unmaximize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":616,"character":8}],"signatures":[{"id":639,"name":"unmaximize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Unmaximizes the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]},{"id":644,"name":"unminimize","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"window.ts","line":676,"character":8}],"signatures":[{"id":645,"name":"unminimize","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Unminimizes the window.","returns":"A promise indicating the success or failure of the operation.\n"},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise"}}]}]},{"kind":"Interface","name":"Monitor","module":"window","fileName":"window.ts","children":[{"id":760,"name":"name","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"Human-readable name of the monitor"},"sources":[{"fileName":"window.ts","line":92,"character":2}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":762,"name":"position","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"the Top-left corner position of the monitor relative to the larger full screen area."},"sources":[{"fileName":"window.ts","line":96,"character":2}],"type":{"type":"reference","id":739,"name":"PhysicalPosition"}},{"id":763,"name":"scaleFactor","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"The scale factor that can be used to map physical pixels to logical pixels."},"sources":[{"fileName":"window.ts","line":98,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":761,"name":"size","kind":1024,"kindString":"Property","flags":{},"comment":{"shortText":"The monitor's resolution."},"sources":[{"fileName":"window.ts","line":94,"character":2}],"type":{"type":"reference","id":720,"name":"PhysicalSize"}}]},{"kind":"Interface","name":"WindowOptions","module":"window","fileName":"window.ts","children":[{"id":783,"name":"alwaysOnTop","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the window should always be on top of other windows or not."},"sources":[{"fileName":"window.ts","line":1183,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":766,"name":"center","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Show window in the center of the screen.."},"sources":[{"fileName":"window.ts","line":1149,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":782,"name":"decorations","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the window should have borders and bars or not."},"sources":[{"fileName":"window.ts","line":1181,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":785,"name":"fileDropEnabled","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the file drop is enabled or not on the webview. By default it is enabled.","text":"Disabling it is required to use drag and drop on the frontend on Windows.\n"},"sources":[{"fileName":"window.ts","line":1191,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":778,"name":"focus","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the window will be initially hidden or focused."},"sources":[{"fileName":"window.ts","line":1173,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":777,"name":"fullscreen","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the window is in fullscreen mode or not."},"sources":[{"fileName":"window.ts","line":1171,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":770,"name":"height","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"The initial height."},"sources":[{"fileName":"window.ts","line":1157,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":774,"name":"maxHeight","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"The maximum height. Only applies if `maxWidth` is also set."},"sources":[{"fileName":"window.ts","line":1165,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":773,"name":"maxWidth","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"The maximum width. Only applies if `maxHeight` is also set."},"sources":[{"fileName":"window.ts","line":1163,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":780,"name":"maximized","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the window should be maximized upon creation or not."},"sources":[{"fileName":"window.ts","line":1177,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":772,"name":"minHeight","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"The minimum height. Only applies if `minWidth` is also set."},"sources":[{"fileName":"window.ts","line":1161,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":771,"name":"minWidth","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"The minimum width. Only applies if `minHeight` is also set."},"sources":[{"fileName":"window.ts","line":1159,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":775,"name":"resizable","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the window is resizable or not."},"sources":[{"fileName":"window.ts","line":1167,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":784,"name":"skipTaskbar","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether or not the window icon should be added to the taskbar."},"sources":[{"fileName":"window.ts","line":1185,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":776,"name":"title","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Window title."},"sources":[{"fileName":"window.ts","line":1169,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":779,"name":"transparent","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the window is transparent or not."},"sources":[{"fileName":"window.ts","line":1175,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":765,"name":"url","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Remote URL or local file path to open, e.g. `https://github.com/tauri-apps` or `path/to/page.html`."},"sources":[{"fileName":"window.ts","line":1147,"character":2}],"type":{"type":"intrinsic","name":"string"}},{"id":781,"name":"visible","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"Whether the window should be immediately visible upon creation or not."},"sources":[{"fileName":"window.ts","line":1179,"character":2}],"type":{"type":"intrinsic","name":"boolean"}},{"id":769,"name":"width","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"The initial width."},"sources":[{"fileName":"window.ts","line":1155,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":767,"name":"x","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"The initial vertical position. Only applies if `y` is also set."},"sources":[{"fileName":"window.ts","line":1151,"character":2}],"type":{"type":"intrinsic","name":"number"}},{"id":768,"name":"y","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"shortText":"The initial horizontal position. Only applies if `x` is also set."},"sources":[{"fileName":"window.ts","line":1153,"character":2}],"type":{"type":"intrinsic","name":"number"}}]},{"kind":"Variable","name":"appWindow","module":"window","type":{"type":"reference","id":463,"name":"WebviewWindow"},"fileName":"window.ts"},{"kind":"Function","name":"availableMonitors","module":"window","fileName":"window.ts","signatures":[{"name":"availableMonitors","kind":"Call signature","comment":{"shortText":"Returns the list of all the monitors available on the system."},"type":{"type":"reference","typeArguments":[{"type":"array","elementType":{"type":"reference","id":759,"name":"Monitor"}}],"name":"Promise"}}]},{"kind":"Function","name":"currentMonitor","module":"window","fileName":"window.ts","signatures":[{"name":"currentMonitor","kind":"Call signature","comment":{"shortText":"Returns the monitor on which the window currently resides.\nReturns `null` if current monitor can't be detected."},"type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"reference","id":759,"name":"Monitor"},{"type":"literal","value":null}]}],"name":"Promise"}}]},{"kind":"Function","name":"getAll","module":"window","fileName":"window.ts","signatures":[{"name":"getAll","kind":"Call signature","comment":{"shortText":"Gets an instance of `WebviewWindow` for all available webview windows.","returns":"The list of WebviewWindow.\n"},"type":{"type":"array","elementType":{"type":"reference","id":463,"name":"WebviewWindow"}}}]},{"kind":"Function","name":"getCurrent","module":"window","fileName":"window.ts","signatures":[{"name":"getCurrent","kind":"Call signature","comment":{"shortText":"Get an instance of `WebviewWindow` for the current webview window.","returns":"The current WebviewWindow.\n"},"type":{"type":"reference","id":463,"name":"WebviewWindow"}}]},{"kind":"Function","name":"primaryMonitor","module":"window","fileName":"window.ts","signatures":[{"name":"primaryMonitor","kind":"Call signature","comment":{"shortText":"Returns the primary monitor of the system.\nReturns `null` if it can't identify any monitor as a primary one."},"type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"reference","id":759,"name":"Monitor"},{"type":"literal","value":null}]}],"name":"Promise"}}]}]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/api/ts-documents.json b/packages/tauri-search/src/generated/ast/api/ts-documents.json deleted file mode 100644 index 0196ea3..0000000 --- a/packages/tauri-search/src/generated/ast/api/ts-documents.json +++ /dev/null @@ -1 +0,0 @@ -[{"id":"ts_app_Namespace_app","name":"app","kind":"Namespace","module":"app","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.app` when `tauri.conf.json > build > withGlobalTauri` is set to true.","url":"https://tauri.studio/docs/api/js/modules/app#app","declaration":"Module app"},{"id":"ts_app_Function_getName","name":"getName","kind":"Function","module":"app","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/app#getName","declaration":"function getName(getName: Promise) { ... }"},{"id":"ts_app_Function_getTauriVersion","name":"getTauriVersion","kind":"Function","module":"app","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/app#getTauriVersion","declaration":"function getTauriVersion(getTauriVersion: Promise) { ... }"},{"id":"ts_app_Function_getVersion","name":"getVersion","kind":"Function","module":"app","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/app#getVersion","declaration":"function getVersion(getVersion: Promise) { ... }"},{"id":"ts_cli_Namespace_cli","name":"cli","kind":"Namespace","module":"cli","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.cli` when `tauri.conf.json > build > withGlobalTauri` is set to true.","url":"https://tauri.studio/docs/api/js/modules/cli#cli","declaration":"Module cli"},{"id":"ts_cli_Interface_ArgMatch","name":"ArgMatch","kind":"Interface","module":"cli","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/cli#ArgMatch","declaration":"interface ArgMatch {\n\toccurrences,\n\tvalue\n}"},{"id":"ts_cli_Interface_CliMatches","name":"CliMatches","kind":"Interface","module":"cli","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/cli#CliMatches","declaration":"interface CliMatches {\n\targs,\n\tsubcommand\n}"},{"id":"ts_cli_Interface_SubcommandMatch","name":"SubcommandMatch","kind":"Interface","module":"cli","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/cli#SubcommandMatch","declaration":"interface SubcommandMatch {\n\tmatches,\n\tname\n}"},{"id":"ts_cli_Function_getMatches","name":"getMatches","kind":"Function","module":"cli","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/cli#getMatches","declaration":"function getMatches(getMatches: Promise) { ... }"},{"id":"ts_clipboard_Namespace_clipboard","name":"clipboard","kind":"Namespace","module":"clipboard","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.clipboard` when `tauri.conf.json > build > withGlobalTauri` is set to true.","url":"https://tauri.studio/docs/api/js/modules/clipboard#clipboard","declaration":"Module clipboard"},{"id":"ts_clipboard_Function_readText","name":"readText","kind":"Function","module":"clipboard","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/clipboard#readText","declaration":"function readText(readText: Promise) { ... }"},{"id":"ts_clipboard_Function_writeText","name":"writeText","kind":"Function","module":"clipboard","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/clipboard#writeText","declaration":"function writeText(writeText: Promise) { ... }"},{"id":"ts_dialog_Namespace_dialog","name":"dialog","kind":"Namespace","module":"dialog","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.dialog` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"dialog\": {\n \"all\": true, // enable all dialog APIs\n \"open\": true, // enable file open API\n \"save\": true // enable file save API\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","url":"https://tauri.studio/docs/api/js/modules/dialog#dialog","declaration":"Module dialog"},{"id":"ts_dialog_Interface_DialogFilter","name":"DialogFilter","kind":"Interface","module":"dialog","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/dialog#DialogFilter","declaration":"interface DialogFilter {\n\textensions,\n\tname\n}"},{"id":"ts_dialog_Interface_OpenDialogOptions","name":"OpenDialogOptions","kind":"Interface","module":"dialog","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/dialog#OpenDialogOptions","declaration":"interface OpenDialogOptions {\n\tdefaultPath,\n\tdirectory,\n\tfilters,\n\tmultiple\n}"},{"id":"ts_dialog_Interface_SaveDialogOptions","name":"SaveDialogOptions","kind":"Interface","module":"dialog","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/dialog#SaveDialogOptions","declaration":"interface SaveDialogOptions {\n\tdefaultPath,\n\tfilters\n}"},{"id":"ts_dialog_Function_ask","name":"ask","kind":"Function","module":"dialog","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/dialog#ask","declaration":"function ask(ask: Promise) { ... }"},{"id":"ts_dialog_Function_confirm","name":"confirm","kind":"Function","module":"dialog","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/dialog#confirm","declaration":"function confirm(confirm: Promise) { ... }"},{"id":"ts_dialog_Function_message","name":"message","kind":"Function","module":"dialog","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/dialog#message","declaration":"function message(message: Promise) { ... }"},{"id":"ts_dialog_Function_open","name":"open","kind":"Function","module":"dialog","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/dialog#open","declaration":"function open(open: Promise) { ... }"},{"id":"ts_dialog_Function_save","name":"save","kind":"Function","module":"dialog","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/dialog#save","declaration":"function save(save: Promise) { ... }"},{"id":"ts_event_Namespace_event","name":"event","kind":"Namespace","module":"event","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.event` when `tauri.conf.json > build > withGlobalTauri` is set to true.","url":"https://tauri.studio/docs/api/js/modules/event#event","declaration":"Module event"},{"id":"ts_event_Interface_Event","name":"Event","kind":"Interface","module":"event","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/event#Event","declaration":"interface Event {\n\tevent,\n\tid,\n\tpayload\n}"},{"id":"ts_event_Type_alias_EventCallback","name":"EventCallback","kind":"Type alias","module":"event","language":"typescript","type":{"type":"reflection","declaration":{"id":66,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"event.ts","line":44,"character":24}],"signatures":[{"id":67,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":68,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":59,"typeArguments":[{"type":"reference","id":69,"name":"T"}],"name":"Event"}}],"type":{"type":"intrinsic","name":"void"}}]}},"url":"https://tauri.studio/docs/api/js/modules/event#EventCallback","declaration":"Type alias EventCallback"},{"id":"ts_event_Type_alias_EventName","name":"EventName","kind":"Type alias","module":"event","language":"typescript","type":{"type":"reference","typeArguments":[{"type":"union","types":[{"type":"literal","value":"tauri://update"},{"type":"literal","value":"tauri://update-available"},{"type":"literal","value":"tauri://update-install"},{"type":"literal","value":"tauri://update-status"},{"type":"literal","value":"tauri://resize"},{"type":"literal","value":"tauri://move"},{"type":"literal","value":"tauri://close-requested"},{"type":"literal","value":"tauri://focus"},{"type":"literal","value":"tauri://blur"},{"type":"literal","value":"tauri://scale-change"},{"type":"literal","value":"tauri://menu"},{"type":"literal","value":"tauri://file-drop"},{"type":"literal","value":"tauri://file-drop-hover"},{"type":"literal","value":"tauri://file-drop-cancelled"}]},{"type":"intrinsic","name":"string"}],"name":"LiteralUnion"},"url":"https://tauri.studio/docs/api/js/modules/event#EventName","declaration":"Type alias EventName"},{"id":"ts_event_Type_alias_UnlistenFn","name":"UnlistenFn","kind":"Type alias","module":"event","language":"typescript","type":{"type":"reflection","declaration":{"id":71,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"event.ts","line":46,"character":18}],"signatures":[{"id":72,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}]}},"url":"https://tauri.studio/docs/api/js/modules/event#UnlistenFn","declaration":"Type alias UnlistenFn"},{"id":"ts_event_Function_emit","name":"emit","kind":"Function","module":"event","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/event#emit","declaration":"function emit(emit: Promise) { ... }"},{"id":"ts_event_Function_listen","name":"listen","kind":"Function","module":"event","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/event#listen","declaration":"function listen(listen: Promise) { ... }"},{"id":"ts_event_Function_once","name":"once","kind":"Function","module":"event","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/event#once","declaration":"function once(once: Promise) { ... }"},{"id":"ts_fs_Namespace_fs","name":"fs","kind":"Namespace","module":"fs","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.fs` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"fs\": {\n \"all\": true, // enable all FS APIs\n \"readTextFile\": true,\n \"readBinaryFile\": true,\n \"writeFile\": true,\n \"writeBinaryFile\": true,\n \"readDir\": true,\n \"copyFile\": true,\n \"createDir\": true,\n \"removeDir\": true,\n \"removeFile\": true,\n \"renameFile\": true\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","url":"https://tauri.studio/docs/api/js/modules/fs#fs","declaration":"Module fs"},{"id":"ts_fs_Reference_Dir","name":"Dir","kind":"Reference","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#Dir","declaration":"type Dir = {\n\tundefined\n}"},{"id":"ts_fs_Enumeration_BaseDirectory","name":"BaseDirectory","kind":"Enumeration","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#BaseDirectory","declaration":"enum BaseDirectory {\n\tApp,\n\tAudio,\n\tCache,\n\tConfig,\n\tCurrent,\n\tData,\n\tDesktop,\n\tDocument,\n\tDownload,\n\tExecutable,\n\tFont,\n\tHome,\n\tLocalData,\n\tLog,\n\tPicture,\n\tPublic,\n\tResource,\n\tRuntime,\n\tTemplate,\n\tVideo\n}"},{"id":"ts_fs_Interface_FileEntry","name":"FileEntry","kind":"Interface","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#FileEntry","declaration":"interface FileEntry {\n\tchildren,\n\tname,\n\tpath\n}"},{"id":"ts_fs_Interface_FsBinaryFileOption","name":"FsBinaryFileOption","kind":"Interface","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#FsBinaryFileOption","declaration":"interface FsBinaryFileOption {\n\tcontents,\n\tpath\n}"},{"id":"ts_fs_Interface_FsDirOptions","name":"FsDirOptions","kind":"Interface","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#FsDirOptions","declaration":"interface FsDirOptions {\n\tdir,\n\trecursive\n}"},{"id":"ts_fs_Interface_FsOptions","name":"FsOptions","kind":"Interface","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#FsOptions","declaration":"interface FsOptions {\n\tdir\n}"},{"id":"ts_fs_Interface_FsTextFileOption","name":"FsTextFileOption","kind":"Interface","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#FsTextFileOption","declaration":"interface FsTextFileOption {\n\tcontents,\n\tpath\n}"},{"id":"ts_fs_Function_copyFile","name":"copyFile","kind":"Function","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#copyFile","declaration":"function copyFile(copyFile: Promise) { ... }"},{"id":"ts_fs_Function_createDir","name":"createDir","kind":"Function","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#createDir","declaration":"function createDir(createDir: Promise) { ... }"},{"id":"ts_fs_Function_readBinaryFile","name":"readBinaryFile","kind":"Function","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#readBinaryFile","declaration":"function readBinaryFile(readBinaryFile: Promise) { ... }"},{"id":"ts_fs_Function_readDir","name":"readDir","kind":"Function","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#readDir","declaration":"function readDir(readDir: Promise) { ... }"},{"id":"ts_fs_Function_readTextFile","name":"readTextFile","kind":"Function","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#readTextFile","declaration":"function readTextFile(readTextFile: Promise) { ... }"},{"id":"ts_fs_Function_removeDir","name":"removeDir","kind":"Function","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#removeDir","declaration":"function removeDir(removeDir: Promise) { ... }"},{"id":"ts_fs_Function_removeFile","name":"removeFile","kind":"Function","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#removeFile","declaration":"function removeFile(removeFile: Promise) { ... }"},{"id":"ts_fs_Function_renameFile","name":"renameFile","kind":"Function","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#renameFile","declaration":"function renameFile(renameFile: Promise) { ... }"},{"id":"ts_fs_Function_writeBinaryFile","name":"writeBinaryFile","kind":"Function","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#writeBinaryFile","declaration":"function writeBinaryFile(writeBinaryFile: Promise) { ... }"},{"id":"ts_fs_Function_writeFile","name":"writeFile","kind":"Function","module":"fs","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/fs#writeFile","declaration":"function writeFile(writeFile: Promise) { ... }"},{"id":"ts_globalShortcut_Namespace_globalShortcut","name":"globalShortcut","kind":"Namespace","module":"globalShortcut","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.globalShortcut` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"globalShortcut\": {\n \"all\": true // enable all global shortcut APIs\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","url":"https://tauri.studio/docs/api/js/modules/globalShortcut#globalShortcut","declaration":"Module globalShortcut"},{"id":"ts_globalShortcut_Type_alias_ShortcutHandler","name":"ShortcutHandler","kind":"Type alias","module":"globalShortcut","language":"typescript","type":{"type":"reflection","declaration":{"id":169,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"globalShortcut.ts","line":29,"character":30}],"signatures":[{"id":170,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":171,"name":"shortcut","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"void"}}]}},"url":"https://tauri.studio/docs/api/js/modules/globalShortcut#ShortcutHandler","declaration":"Type alias ShortcutHandler"},{"id":"ts_globalShortcut_Function_isRegistered","name":"isRegistered","kind":"Function","module":"globalShortcut","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/globalShortcut#isRegistered","declaration":"function isRegistered(isRegistered: Promise) { ... }"},{"id":"ts_globalShortcut_Function_register","name":"register","kind":"Function","module":"globalShortcut","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/globalShortcut#register","declaration":"function register(register: Promise) { ... }"},{"id":"ts_globalShortcut_Function_registerAll","name":"registerAll","kind":"Function","module":"globalShortcut","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/globalShortcut#registerAll","declaration":"function registerAll(registerAll: Promise) { ... }"},{"id":"ts_globalShortcut_Function_unregister","name":"unregister","kind":"Function","module":"globalShortcut","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/globalShortcut#unregister","declaration":"function unregister(unregister: Promise) { ... }"},{"id":"ts_globalShortcut_Function_unregisterAll","name":"unregisterAll","kind":"Function","module":"globalShortcut","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/globalShortcut#unregisterAll","declaration":"function unregisterAll(unregisterAll: Promise) { ... }"},{"id":"ts_http_Namespace_http","name":"http","kind":"Namespace","module":"http","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.http` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"http\": {\n \"all\": true, // enable all http APIs\n \"request\": true // enable HTTP request API\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","url":"https://tauri.studio/docs/api/js/modules/http#http","declaration":"Module http"},{"id":"ts_http_Enumeration_ResponseType","name":"ResponseType","kind":"Enumeration","module":"http","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/http#ResponseType","declaration":"enum ResponseType {\n\tBinary,\n\tJSON,\n\tText\n}"},{"id":"ts_http_Class_Body","name":"Body","kind":"Class","module":"http","language":"typescript","url":"https://tauri.studio/docs/api/js/classes/http.Body","declaration":"Class Body {\n\tpayload,\n\ttype,\n\tbytes,\n\tform,\n\tjson,\n\ttext\n}"},{"id":"ts_http_Class_Client","name":"Client","kind":"Class","module":"http","language":"typescript","url":"https://tauri.studio/docs/api/js/classes/http.Client","declaration":"Class Client {\n\tid,\n\tdelete,\n\tdrop,\n\tget,\n\tpatch,\n\tpost,\n\tput,\n\trequest\n}"},{"id":"ts_http_Class_Response","name":"Response","kind":"Class","module":"http","language":"typescript","url":"https://tauri.studio/docs/api/js/classes/http.Response","declaration":"Class Response {\n\tdata,\n\theaders,\n\tok,\n\tstatus,\n\turl\n}"},{"id":"ts_http_Interface_ClientOptions","name":"ClientOptions","kind":"Interface","module":"http","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/http#ClientOptions","declaration":"interface ClientOptions {\n\tconnectTimeout,\n\tmaxRedirections\n}"},{"id":"ts_http_Interface_HttpOptions","name":"HttpOptions","kind":"Interface","module":"http","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/http#HttpOptions","declaration":"interface HttpOptions {\n\tbody,\n\theaders,\n\tmethod,\n\tquery,\n\tresponseType,\n\ttimeout,\n\turl\n}"},{"id":"ts_http_Type_alias_FetchOptions","name":"FetchOptions","kind":"Type alias","module":"http","language":"typescript","type":{"type":"reference","typeArguments":[{"type":"reference","id":194,"name":"HttpOptions"},{"type":"literal","value":"url"}],"name":"Omit"},"url":"https://tauri.studio/docs/api/js/modules/http#FetchOptions","declaration":"Type alias FetchOptions"},{"id":"ts_http_Type_alias_HttpVerb","name":"HttpVerb","kind":"Type alias","module":"http","language":"typescript","type":{"type":"union","types":[{"type":"literal","value":"GET"},{"type":"literal","value":"POST"},{"type":"literal","value":"PUT"},{"type":"literal","value":"DELETE"},{"type":"literal","value":"PATCH"},{"type":"literal","value":"HEAD"},{"type":"literal","value":"OPTIONS"},{"type":"literal","value":"CONNECT"},{"type":"literal","value":"TRACE"}]},"url":"https://tauri.studio/docs/api/js/modules/http#HttpVerb","declaration":"Type alias HttpVerb"},{"id":"ts_http_Type_alias_Part","name":"Part","kind":"Type alias","module":"http","language":"typescript","type":{"type":"union","types":[{"type":"literal","value":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"number"}}]},"url":"https://tauri.studio/docs/api/js/modules/http#Part","declaration":"Type alias Part"},{"id":"ts_http_Type_alias_RequestOptions","name":"RequestOptions","kind":"Type alias","module":"http","language":"typescript","type":{"type":"reference","typeArguments":[{"type":"reference","id":194,"name":"HttpOptions"},{"type":"union","types":[{"type":"literal","value":"method"},{"type":"literal","value":"url"}]}],"name":"Omit"},"url":"https://tauri.studio/docs/api/js/modules/http#RequestOptions","declaration":"Type alias RequestOptions"},{"id":"ts_http_Function_fetch","name":"fetch","kind":"Function","module":"http","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/http#fetch","declaration":"function fetch(fetch: Promise) { ... }"},{"id":"ts_http_Function_getClient","name":"getClient","kind":"Function","module":"http","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/http#getClient","declaration":"function getClient(getClient: Promise) { ... }"},{"id":"ts_notification_Namespace_notification","name":"notification","kind":"Namespace","module":"notification","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.notification` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"notification\": {\n \"all\": true // enable all notification APIs\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","url":"https://tauri.studio/docs/api/js/modules/notification#notification","declaration":"Module notification"},{"id":"ts_notification_Interface_Options","name":"Options","kind":"Interface","module":"notification","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/notification#Options","declaration":"interface Options {\n\tbody,\n\ticon,\n\ttitle\n}"},{"id":"ts_notification_Type_alias_Permission","name":"Permission","kind":"Type alias","module":"notification","language":"typescript","type":{"type":"union","types":[{"type":"literal","value":"granted"},{"type":"literal","value":"denied"},{"type":"literal","value":"default"}]},"url":"https://tauri.studio/docs/api/js/modules/notification#Permission","declaration":"Type alias Permission"},{"id":"ts_notification_Function_isPermissionGranted","name":"isPermissionGranted","kind":"Function","module":"notification","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/notification#isPermissionGranted","declaration":"function isPermissionGranted(isPermissionGranted: Promise) { ... }"},{"id":"ts_notification_Function_requestPermission","name":"requestPermission","kind":"Function","module":"notification","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/notification#requestPermission","declaration":"function requestPermission(requestPermission: Promise) { ... }"},{"id":"ts_notification_Function_sendNotification","name":"sendNotification","kind":"Function","module":"notification","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/notification#sendNotification","declaration":"function sendNotification(sendNotification: void) { ... }"},{"id":"ts_os_Namespace_os","name":"os","kind":"Namespace","module":"os","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.fs` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"os\": {\n \"all\": true, // enable all Os APIs\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.","url":"https://tauri.studio/docs/api/js/modules/os#os","declaration":"Module os"},{"id":"ts_os_Variable_EOL","name":"EOL","kind":"Variable","module":"os","language":"typescript","type":{"type":"union","types":[{"type":"literal","value":"\r\n"},{"type":"literal","value":"\n"}]},"url":"https://tauri.studio/docs/api/js/modules/os#EOL","declaration":"Variable EOL"},{"id":"ts_os_Function_arch","name":"arch","kind":"Function","module":"os","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/os#arch","declaration":"function arch(arch: Promise) { ... }"},{"id":"ts_os_Function_platform","name":"platform","kind":"Function","module":"os","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/os#platform","declaration":"function platform(platform: Promise) { ... }"},{"id":"ts_os_Function_tempdir","name":"tempdir","kind":"Function","module":"os","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/os#tempdir","declaration":"function tempdir(tempdir: Promise) { ... }"},{"id":"ts_os_Function_type","name":"type","kind":"Function","module":"os","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/os#type","declaration":"function type(type: Promise) { ... }"},{"id":"ts_os_Function_version","name":"version","kind":"Function","module":"os","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/os#version","declaration":"function version(version: Promise) { ... }"},{"id":"ts_path_Namespace_path","name":"path","kind":"Namespace","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#path","declaration":"Module path"},{"id":"ts_path_Reference_BaseDirectory","name":"BaseDirectory","kind":"Reference","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#BaseDirectory","declaration":"type BaseDirectory = {\n\tundefined\n}"},{"id":"ts_path_Variable_delimiter","name":"delimiter","kind":"Variable","module":"path","language":"typescript","type":{"type":"union","types":[{"type":"literal","value":";"},{"type":"literal","value":":"}]},"url":"https://tauri.studio/docs/api/js/modules/path#delimiter","declaration":"Variable delimiter"},{"id":"ts_path_Variable_sep","name":"sep","kind":"Variable","module":"path","language":"typescript","type":{"type":"union","types":[{"type":"literal","value":"\\"},{"type":"literal","value":"/"}]},"url":"https://tauri.studio/docs/api/js/modules/path#sep","declaration":"Variable sep"},{"id":"ts_path_Function_appDir","name":"appDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#appDir","declaration":"function appDir(appDir: Promise) { ... }"},{"id":"ts_path_Function_audioDir","name":"audioDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#audioDir","declaration":"function audioDir(audioDir: Promise) { ... }"},{"id":"ts_path_Function_basename","name":"basename","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#basename","declaration":"function basename(basename: Promise) { ... }"},{"id":"ts_path_Function_cacheDir","name":"cacheDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#cacheDir","declaration":"function cacheDir(cacheDir: Promise) { ... }"},{"id":"ts_path_Function_configDir","name":"configDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#configDir","declaration":"function configDir(configDir: Promise) { ... }"},{"id":"ts_path_Function_currentDir","name":"currentDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#currentDir","declaration":"function currentDir(currentDir: Promise) { ... }"},{"id":"ts_path_Function_dataDir","name":"dataDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#dataDir","declaration":"function dataDir(dataDir: Promise) { ... }"},{"id":"ts_path_Function_desktopDir","name":"desktopDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#desktopDir","declaration":"function desktopDir(desktopDir: Promise) { ... }"},{"id":"ts_path_Function_dirname","name":"dirname","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#dirname","declaration":"function dirname(dirname: Promise) { ... }"},{"id":"ts_path_Function_documentDir","name":"documentDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#documentDir","declaration":"function documentDir(documentDir: Promise) { ... }"},{"id":"ts_path_Function_downloadDir","name":"downloadDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#downloadDir","declaration":"function downloadDir(downloadDir: Promise) { ... }"},{"id":"ts_path_Function_executableDir","name":"executableDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#executableDir","declaration":"function executableDir(executableDir: Promise) { ... }"},{"id":"ts_path_Function_extname","name":"extname","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#extname","declaration":"function extname(extname: Promise) { ... }"},{"id":"ts_path_Function_fontDir","name":"fontDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#fontDir","declaration":"function fontDir(fontDir: Promise) { ... }"},{"id":"ts_path_Function_homeDir","name":"homeDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#homeDir","declaration":"function homeDir(homeDir: Promise) { ... }"},{"id":"ts_path_Function_isAbsolute","name":"isAbsolute","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#isAbsolute","declaration":"function isAbsolute(isAbsolute: Promise) { ... }"},{"id":"ts_path_Function_join","name":"join","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#join","declaration":"function join(join: Promise) { ... }"},{"id":"ts_path_Function_localDataDir","name":"localDataDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#localDataDir","declaration":"function localDataDir(localDataDir: Promise) { ... }"},{"id":"ts_path_Function_logDir","name":"logDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#logDir","declaration":"function logDir(logDir: Promise) { ... }"},{"id":"ts_path_Function_normalize","name":"normalize","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#normalize","declaration":"function normalize(normalize: Promise) { ... }"},{"id":"ts_path_Function_pictureDir","name":"pictureDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#pictureDir","declaration":"function pictureDir(pictureDir: Promise) { ... }"},{"id":"ts_path_Function_publicDir","name":"publicDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#publicDir","declaration":"function publicDir(publicDir: Promise) { ... }"},{"id":"ts_path_Function_resolve","name":"resolve","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#resolve","declaration":"function resolve(resolve: Promise) { ... }"},{"id":"ts_path_Function_resourceDir","name":"resourceDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#resourceDir","declaration":"function resourceDir(resourceDir: Promise) { ... }"},{"id":"ts_path_Function_runtimeDir","name":"runtimeDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#runtimeDir","declaration":"function runtimeDir(runtimeDir: Promise) { ... }"},{"id":"ts_path_Function_templateDir","name":"templateDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#templateDir","declaration":"function templateDir(templateDir: Promise) { ... }"},{"id":"ts_path_Function_videoDir","name":"videoDir","kind":"Function","module":"path","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/path#videoDir","declaration":"function videoDir(videoDir: Promise) { ... }"},{"id":"ts_process_Namespace_process","name":"process","kind":"Namespace","module":"process","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/process#process","declaration":"Module process"},{"id":"ts_process_Function_exit","name":"exit","kind":"Function","module":"process","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/process#exit","declaration":"function exit(exit: Promise) { ... }"},{"id":"ts_process_Function_relaunch","name":"relaunch","kind":"Function","module":"process","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/process#relaunch","declaration":"function relaunch(relaunch: Promise) { ... }"},{"id":"ts_shell_Namespace_shell","name":"shell","kind":"Namespace","module":"shell","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/shell#shell","declaration":"Module shell"},{"id":"ts_shell_Class_Child","name":"Child","kind":"Class","module":"shell","language":"typescript","url":"https://tauri.studio/docs/api/js/classes/shell.Child","declaration":"Class Child {\n\tconstructor,\n\tpid,\n\tkill,\n\twrite\n}"},{"id":"ts_shell_Class_Command","name":"Command","kind":"Class","module":"shell","language":"typescript","commentTags":[{"tag":"example","text":"\n```typescript\nconst command = new Command('node')\ncommand.on('close', data => {\n console.log(`command finished with code ${data.code} and signal ${data.signal}`)\n})\ncommand.on('error', error => console.error(`command error: \"${error}\"`))\ncommand.stdout.on('data', line => console.log(`command stdout: \"${line}\"`))\ncommand.stderr.on('data', line => console.log(`command stderr: \"${line}\"`))\n\nconst child = await command.spawn()\nconsole.log('pid:', child.pid)\n```\n"}],"url":"https://tauri.studio/docs/api/js/classes/shell.Command","declaration":"Class Command {\n\tconstructor,\n\tstderr,\n\tstdout,\n\texecute,\n\ton,\n\tspawn,\n\tsidecar\n}"},{"id":"ts_shell_Interface_ChildProcess","name":"ChildProcess","kind":"Interface","module":"shell","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/shell#ChildProcess","declaration":"interface ChildProcess {\n\tcode,\n\tsignal,\n\tstderr,\n\tstdout\n}"},{"id":"ts_shell_Interface_SpawnOptions","name":"SpawnOptions","kind":"Interface","module":"shell","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/shell#SpawnOptions","declaration":"interface SpawnOptions {\n\tcwd,\n\tenv\n}"},{"id":"ts_shell_Function_open","name":"open","kind":"Function","module":"shell","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/shell#open","declaration":"function open(open: Promise) { ... }"},{"id":"ts_tauri_Namespace_tauri","name":"tauri","kind":"Namespace","module":"tauri","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.tauri` when `tauri.conf.json > build > withGlobalTauri` is set to true.","url":"https://tauri.studio/docs/api/js/modules/tauri#tauri","declaration":"Module tauri"},{"id":"ts_tauri_Interface_InvokeArgs","name":"InvokeArgs","kind":"Interface","module":"tauri","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/tauri#InvokeArgs","declaration":"interface InvokeArgs {\n\tundefined\n}"},{"id":"ts_tauri_Function_convertFileSrc","name":"convertFileSrc","kind":"Function","module":"tauri","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/tauri#convertFileSrc","declaration":"function convertFileSrc(convertFileSrc: string) { ... }"},{"id":"ts_tauri_Function_invoke","name":"invoke","kind":"Function","module":"tauri","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/tauri#invoke","declaration":"function invoke(invoke: Promise) { ... }"},{"id":"ts_tauri_Function_transformCallback","name":"transformCallback","kind":"Function","module":"tauri","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/tauri#transformCallback","declaration":"function transformCallback(transformCallback: string) { ... }"},{"id":"ts_updater_Namespace_updater","name":"updater","kind":"Namespace","module":"updater","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.updater` when `tauri.conf.json > build > withGlobalTauri` is set to true.","url":"https://tauri.studio/docs/api/js/modules/updater#updater","declaration":"Module updater"},{"id":"ts_updater_Interface_UpdateManifest","name":"UpdateManifest","kind":"Interface","module":"updater","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/updater#UpdateManifest","declaration":"interface UpdateManifest {\n\tbody,\n\tdate,\n\tversion\n}"},{"id":"ts_updater_Interface_UpdateResult","name":"UpdateResult","kind":"Interface","module":"updater","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/updater#UpdateResult","declaration":"interface UpdateResult {\n\tmanifest,\n\tshouldUpdate\n}"},{"id":"ts_updater_Interface_UpdateStatusResult","name":"UpdateStatusResult","kind":"Interface","module":"updater","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/updater#UpdateStatusResult","declaration":"interface UpdateStatusResult {\n\terror,\n\tstatus\n}"},{"id":"ts_updater_Type_alias_UpdateStatus","name":"UpdateStatus","kind":"Type alias","module":"updater","language":"typescript","type":{"type":"union","types":[{"type":"literal","value":"PENDING"},{"type":"literal","value":"ERROR"},{"type":"literal","value":"DONE"},{"type":"literal","value":"UPTODATE"}]},"url":"https://tauri.studio/docs/api/js/modules/updater#UpdateStatus","declaration":"Type alias UpdateStatus"},{"id":"ts_updater_Function_checkUpdate","name":"checkUpdate","kind":"Function","module":"updater","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/updater#checkUpdate","declaration":"function checkUpdate(checkUpdate: Promise) { ... }"},{"id":"ts_updater_Function_installUpdate","name":"installUpdate","kind":"Function","module":"updater","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/updater#installUpdate","declaration":"function installUpdate(installUpdate: Promise) { ... }"},{"id":"ts_window_Namespace_window","name":"window","kind":"Namespace","module":"window","language":"typescript","comment":"This package is also accessible with `window.__TAURI__.window` when `tauri.conf.json > build > withGlobalTauri` is set to true.\n\nThe APIs must be allowlisted on `tauri.conf.json`:\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"window\": {\n \"all\": true, // enable all window APIs\n \"create\": true // enable window creation\n }\n }\n }\n}\n```\nIt is recommended to allowlist only the APIs you use for optimal bundle size and security.\n\n# Window events\n\nEvents can be listened using `appWindow.listen`:\n```typescript\nimport { appWindow } from '@tauri-apps/api/window'\nappWindow.listen('tauri://move', ({ event, payload }) => {\n const { x, y } = payload // payload here is a `PhysicalPosition`\n})\n```\n\nWindow-specific events emitted by the backend:\n\n#### 'tauri://resize'\nEmitted when the size of the window has changed.\n*EventPayload*:\n```typescript\ntype ResizePayload = PhysicalSize\n```\n\n#### 'tauri://move'\nEmitted when the position of the window has changed.\n*EventPayload*:\n```typescript\ntype MovePayload = PhysicalPosition\n```\n\n#### 'tauri://close-requested'\nEmitted when the user requests the window to be closed.\nIf a listener is registered for this event, Tauri won't close the window so you must call `appWindow.close()` manually.\n\n#### 'tauri://focus'\nEmitted when the window gains focus.\n\n#### 'tauri://blur'\nEmitted when the window loses focus.\n\n#### 'tauri://scale-change'\nEmitted when the window's scale factor has changed.\nThe following user actions can cause DPI changes:\n- Changing the display's resolution.\n- Changing the display's scale factor (e.g. in Control Panel on Windows).\n- Moving the window to a display with a different scale factor.\n*Event payload*:\n```typescript\ninterface ScaleFactorChanged {\n scaleFactor: number\n size: PhysicalSize\n}\n```\n\n#### 'tauri://menu'\nEmitted when a menu item is clicked.\n*EventPayload*:\n```typescript\ntype MenuClicked = string\n```\n","url":"https://tauri.studio/docs/api/js/modules/window#window","declaration":"Module window"},{"id":"ts_window_Enumeration_UserAttentionType","name":"UserAttentionType","kind":"Enumeration","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/window#UserAttentionType","declaration":"enum UserAttentionType {\n\tCritical,\n\tInformational\n}"},{"id":"ts_window_Class_LogicalPosition","name":"LogicalPosition","kind":"Class","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/classes/window.LogicalPosition","declaration":"Class LogicalPosition {\n\tconstructor,\n\ttype,\n\tx,\n\ty\n}"},{"id":"ts_window_Class_LogicalSize","name":"LogicalSize","kind":"Class","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/classes/window.LogicalSize","declaration":"Class LogicalSize {\n\tconstructor,\n\theight,\n\ttype,\n\twidth\n}"},{"id":"ts_window_Class_PhysicalPosition","name":"PhysicalPosition","kind":"Class","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/classes/window.PhysicalPosition","declaration":"Class PhysicalPosition {\n\tconstructor,\n\ttype,\n\tx,\n\ty,\n\ttoLogical\n}"},{"id":"ts_window_Class_PhysicalSize","name":"PhysicalSize","kind":"Class","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/classes/window.PhysicalSize","declaration":"Class PhysicalSize {\n\tconstructor,\n\theight,\n\ttype,\n\twidth,\n\ttoLogical\n}"},{"id":"ts_window_Class_WebviewWindow","name":"WebviewWindow","kind":"Class","module":"window","language":"typescript","commentTags":[{"tag":"example","text":"\n```typescript\n// loading embedded asset:\nconst webview = new WebviewWindow('theUniqueLabel', {\n url: 'path/to/page.html'\n})\n// alternatively, load a remote URL:\nconst webview = new WebviewWindow('theUniqueLabel', {\n url: 'https://github.com/tauri-apps/tauri'\n})\n\nwebview.once('tauri://created', function () {\n // webview window successfully created\n})\nwebview.once('tauri://error', function (e) {\n // an error happened creating the webview window\n})\n\n// emit an event to the backend\nawait webview.emit(\"some event\", \"data\")\n// listen to an event from the backend\nconst unlisten = await webview.listen(\"event name\", e => {})\nunlisten()\n```\n"}],"url":"https://tauri.studio/docs/api/js/classes/window.WebviewWindow","declaration":"Class WebviewWindow {\n\tconstructor,\n\tlabel,\n\tlisteners,\n\t_handleTauriEvent,\n\tcenter,\n\tclose,\n\temit,\n\thide,\n\tinnerPosition,\n\tinnerSize,\n\tisDecorated,\n\tisFullscreen,\n\tisMaximized,\n\tisResizable,\n\tisVisible,\n\tlisten,\n\tmaximize,\n\tminimize,\n\tonce,\n\touterPosition,\n\touterSize,\n\trequestUserAttention,\n\tscaleFactor,\n\tsetAlwaysOnTop,\n\tsetDecorations,\n\tsetFocus,\n\tsetFullscreen,\n\tsetIcon,\n\tsetMaxSize,\n\tsetMinSize,\n\tsetPosition,\n\tsetResizable,\n\tsetSize,\n\tsetSkipTaskbar,\n\tsetTitle,\n\tshow,\n\tstartDragging,\n\ttoggleMaximize,\n\tunmaximize,\n\tunminimize,\n\tgetByLabel\n}"},{"id":"ts_window_Class_WebviewWindowHandle","name":"WebviewWindowHandle","kind":"Class","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/classes/window.WebviewWindowHandle","declaration":"Class WebviewWindowHandle {\n\tconstructor,\n\tlabel,\n\tlisteners,\n\t_handleTauriEvent,\n\temit,\n\tlisten,\n\tonce\n}"},{"id":"ts_window_Class_WindowManager","name":"WindowManager","kind":"Class","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/classes/window.WindowManager","declaration":"Class WindowManager {\n\tconstructor,\n\tlabel,\n\tlisteners,\n\t_handleTauriEvent,\n\tcenter,\n\tclose,\n\temit,\n\thide,\n\tinnerPosition,\n\tinnerSize,\n\tisDecorated,\n\tisFullscreen,\n\tisMaximized,\n\tisResizable,\n\tisVisible,\n\tlisten,\n\tmaximize,\n\tminimize,\n\tonce,\n\touterPosition,\n\touterSize,\n\trequestUserAttention,\n\tscaleFactor,\n\tsetAlwaysOnTop,\n\tsetDecorations,\n\tsetFocus,\n\tsetFullscreen,\n\tsetIcon,\n\tsetMaxSize,\n\tsetMinSize,\n\tsetPosition,\n\tsetResizable,\n\tsetSize,\n\tsetSkipTaskbar,\n\tsetTitle,\n\tshow,\n\tstartDragging,\n\ttoggleMaximize,\n\tunmaximize,\n\tunminimize\n}"},{"id":"ts_window_Interface_Monitor","name":"Monitor","kind":"Interface","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/window#Monitor","declaration":"interface Monitor {\n\tname,\n\tposition,\n\tscaleFactor,\n\tsize\n}"},{"id":"ts_window_Interface_WindowOptions","name":"WindowOptions","kind":"Interface","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/window#WindowOptions","declaration":"interface WindowOptions {\n\talwaysOnTop,\n\tcenter,\n\tdecorations,\n\tfileDropEnabled,\n\tfocus,\n\tfullscreen,\n\theight,\n\tmaxHeight,\n\tmaxWidth,\n\tmaximized,\n\tminHeight,\n\tminWidth,\n\tresizable,\n\tskipTaskbar,\n\ttitle,\n\ttransparent,\n\turl,\n\tvisible,\n\twidth,\n\tx,\n\ty\n}"},{"id":"ts_window_Variable_appWindow","name":"appWindow","kind":"Variable","module":"window","language":"typescript","type":{"type":"reference","id":463,"name":"WebviewWindow"},"url":"https://tauri.studio/docs/api/js/modules/window#appWindow","declaration":"Variable appWindow"},{"id":"ts_window_Function_availableMonitors","name":"availableMonitors","kind":"Function","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/window#availableMonitors","declaration":"function availableMonitors(availableMonitors: Promise) { ... }"},{"id":"ts_window_Function_currentMonitor","name":"currentMonitor","kind":"Function","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/window#currentMonitor","declaration":"function currentMonitor(currentMonitor: Promise) { ... }"},{"id":"ts_window_Function_getAll","name":"getAll","kind":"Function","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/window#getAll","declaration":"function getAll(getAll: undefined) { ... }"},{"id":"ts_window_Function_getCurrent","name":"getCurrent","kind":"Function","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/window#getCurrent","declaration":"function getCurrent(getCurrent: WebviewWindow) { ... }"},{"id":"ts_window_Function_primaryMonitor","name":"primaryMonitor","kind":"Function","module":"window","language":"typescript","url":"https://tauri.studio/docs/api/js/modules/window#primaryMonitor","declaration":"function primaryMonitor(primaryMonitor: Promise) { ... }"}] \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri-docs_dev/documents.json b/packages/tauri-search/src/generated/ast/prose/tauri-docs_dev/documents.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/packages/tauri-search/src/generated/ast/prose/tauri-docs_dev/documents.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/api/cli.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/api/cli.json deleted file mode 100644 index a70023c..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/api/cli.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"cli.md","filepath":"docs/api","hash":42,"frontmatter":{"id":"cli","title":"CLI"},"text":"\nimport Command from '@theme/Command'\nimport Alert from '@theme/Alert'\n\n\nThe tauri.js cli is composed in TypeScript and published as JavaScript. \n\n## `info`\n\n\n\n```\n Description\n Returns the known state of tauri dependencies and configuration\n```\n\nIt shows a concise list of information about the environment, Rust, Node.js and their versions as well as some relevant configurations.\n\n\nThis command is pretty helpful when you need to have a quick overview of your application. When requesting some help, it can be useful that you share this report with us.\n\n\n## `init`\n\n\n\n```\n Description\n Inits the Tauri template. If Tauri cannot find the src-tauri/tauri.conf.json\n it will create one.\n Usage\n $ tauri init\n Options\n --help, -h Displays this message\n --force, -f Force init to overwrite [conf|template|all]\n --log, -l Logging [boolean]\n --directory, -d Set target directory for init\n --tauriPath, -t Path of the Tauri project to use (relative to the cwd)\n```\n\n## `dev`\n\n\n\n```\n Description\n Tauri dev.\n Usage\n $ tauri dev\n Options\n --help, -h Displays this message\n```\n\nThis command will open the WebView in development mode. It makes use of the `build.devPath` property from your `src-tauri/tauri.conf.json` file.\n\nIf you have entered a command to the `build.beforeDevCommand` property, this one will be executed before the `dev` command.\n\nSee more about the configuration.

\n\n\n\nIf you're not using `build.beforeDevCommand`, make sure your `build.devPath` is correct and, if using a development server, that it's started before using this command.\n\n\n## `deps`\n\n\n\n```sh\n Description\n Tauri dependency management script\n Usage\n $ tauri deps [install|update]\n```\n\n\n## `build`\n\n\n\n```\n Description\n Tauri build.\n Usage\n $ tauri build\n Options\n --help, -h Displays this message\n --debug, -d Build a tauri app with debugging\n```\n\nThis command will bundle your application, either in production mode or debug mode if you used the `--debug` flag. It makes use of the `build.distDir` property from your `src-tauri/tauri.conf.json` file.\n\nIf you have entered a command to the `build.beforeBuildCommand` property, this one will be executed before the `build` command.\n\nSee more about the configuration.\n\n## `icon`\n\n\n\n```\n Description\n Create all the icons you need for your Tauri app.\n\n Usage\n $ tauri icon\n\n Options\n --help, -h Displays this message\n --log, -l Logging [boolean]\n --icon, -i Source icon (png, 1240x1240 with transparency)\n --target, -t Target folder (default: 'src-tauri/icons')\n --compression, -c Compression type [pngquant|optipng|zopfli]\n```\n\nThis command will generate a set of icons, based on the source icon you've entered.\n\n## `version`\n\n\n\n```\n Description\n Returns the current version of tauri\n```\n\nThis command will show the current version of Tauri.\n\n## CLI usage\n\nSee more about the usage through this [complete guide](/docs/usage/development/integration).\n\n","h1":[],"h2":[{"content":"info","type":"inlineCode"},{"content":"init","type":"inlineCode"},{"content":"dev","type":"inlineCode"},{"content":"deps","type":"inlineCode"},{"content":"build","type":"inlineCode"},{"content":"icon","type":"inlineCode"},{"content":"version","type":"inlineCode"},{"content":"CLI usage","type":"text"}],"h3":[],"hasCodeBlock":true,"programmingLanguages":[null,"sh"],"otherSymbols":["text","inlineCode","link"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/api/config.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/api/config.json deleted file mode 100644 index 4971d8c..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/api/config.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"config.md","filepath":"docs/api","hash":42,"frontmatter":{"title":"Configuration"},"text":"\nimport Properties from '@theme/Properties'\nimport Array from '@theme/Array'\nimport Alert from '@theme/Alert'\n\nThe `tauri.conf.json` is a file generated by the `tauri init` command (see here) that lives in your Tauri application source directory (src-tauri).\n\nOnce generated, you may modify it at will to customize your Tauri application.\n\n# Platform-specific configuration\n\nIn addition to the JSON defined on the `tauri.conf.json` file, Tauri reads a platform-specific configuration on `tauri.linux.conf.json`, `tauri.windows.conf.json` and `tauri.macos.conf.json` and merges it with the main `tauri.conf.json` configuration.\n\n# Configuration structure\n\n`tauri.conf.json` is composed of the following properties:\n\n## `build`\n\n\n The target directory must contain an index.html file.\n`},\n{property: \"devPath\", type: \"string\", description: `Can be a path to a folder (either absolute or relative to tauri.conf.json) or a URL (like a live reload server).`},\n{property: \"beforeDevCommand\", optional: true, type: \"string\", description: `A command to run before starting Tauri in dev mode.`},\n{property: \"beforeBuildCommand\", optional: true, type: \"string\", description: `A command to run before starting Tauri in build mode.`},\n{property: \"withGlobalTauri\", optional: true, type: \"boolean\", description: \"Enables the API injection to the window.__TAURI__ object. Useful if you're using Vanilla JS instead of importing the API using Rollup or Webpack. Reduces the command security since any external code can access it, so be careful with XSS attacks.\"}\n]}/>\n\n```js title=Example\n\"build\": {\n \"distDir\": \"../dist\",\n \"devPath\": \"http://localhost:4000\",\n \"beforeDevCommand\": \"npm run dev\",\n \"beforeBuildCommand\": \"npm run build\",\n \"withGlobalTauri\": false\n}\n```\n\n## `package`\n\n\n\n## `tauri`\n\n\n Any leading hyphen will be stripped, and only the first non hyphen character will be used as the short version.\n ` },\n { property: \"name\", type: \"string\", description: `The unique argument name.` },\n { property: \"description\", optional: true, type: \"string\", description: `The argument description which will be shown on the help information. Typically, this is a short (one line) description of the arg.` },\n { property: \"longDescription\", optional: true, type: \"string\", description: `The argument long description which will be shown on the help information.\n Typically, this a more detailed (multi-line) message that describes the argument` },\n { property: \"takesValue\", optional: true, type: \"boolean\", description: `Specifies that the argument takes a value at runtime.\n
\n Values for arguments may be specified in any of the following methods:\n
    \n
  • Using a space such as -o value or --option value
  • \n
  • Using an equals and no space such as -o=value or --option=value
  • \n
  • Use a short and no space such as -ovalue
  • \n
\n
`\n },\n { property: \"index\", type: \"number\", optional: true, description: `The positional argument index, starting at 1.\n
\n The index refers to position according to other positional argument. It does not define position in the argument list as a whole.\n When utilized with multiple=true, only the last positional argument may be defined as multiple (i.e. the one with the highest index).\n
`\n },\n { property: \"multiple\", optional: true, type: \"boolean\", description: `Specifies that the argument may appear more than once.\n For flags, this results in the number of occurrences of the flag being recorded. For example -ddd or -d -d -d would count as three occurrences.\n For options, there is a distinct difference in multiple occurrences vs multiple values. For example, --opt val1 val2 is one occurrence, but two values. Whereas --opt val1 --opt val2 is two occurrences.` },\n { property: \"possibleValues\", optional: true, type: \"string[]\", description: `Specifies a list of possible values for this argument. At runtime, the CLI verifies that only one of the specified values was used, or fails with an error message.` },\n { property: \"minValues\", optional: true, type: \"number\", description: `Specifies the minimum number of values for this argument.\n For example, if you had a -f <file> argument where you wanted at least 2 \"files\" you would set minValues: 2, and this argument would be satisfied if the user provided, 2 or more values.` },\n { property: \"maxValues\", optional: true, type: \"number\", description: `Specifies the maximum number of values for this argument.\n For example, if you had a -f <file> argument where you wanted up to 3 \"files\" you would set max_values: 3, and this argument would be satisfied if the user provided, 1, 2, or 3 values.` },\n { property: \"required\", optional: true, type: \"boolean\", description: `Sets whether or not the argument is required by default.\n \"required by default\" means it is required, when no other conflicting rules have been evaluated\n conflicting rules take precedence over being required.` },\n { property: \"requiredUnless\", optional: true, type: \"string\", description: `Sets an arg that overrides this arg's required setting.
\n i.e. this arg will be required unless this other argument is present.` },\n { property: \"requiredUnlessAll\", optional: true, type: \"string[]\", description: `Sets args that override this arg's required setting.
\n i.e. this arg will be required unless all these other arguments are present.` },\n { property: \"requiredUnlessOne\", optional: true, type: \"string[]\", description: `Sets args that override this arg's required setting.
\n i.e. this arg will be required unless at least one of these other arguments are present.` },\n { property: \"conflictsWith\", optional: true, type: \"string\", description: `Sets a conflicting argument by name\n i.e. when using this argument, the following argument can't be present and vice versa.` },\n { property: \"conflictsWithAll\", optional: true, type: \"string\", description: `The same as \"conflictsWith\" but allows specifying multiple two-way conflicts per argument.` },\n { property: \"requires\", optional: true, type: \"string\", description: `Sets an argument by name that is required when this one is present.
\n i.e. when using this argument, the following argument must be present.` },\n { property: \"requiresAll\", optional: true, type: \"string[]\", description: `Sets multiple arguments by names that are required when this one is present.
\n i.e. when using this argument, the following arguments must be present.` },\n { property: \"requiresIf\", optional: true, type: \"[string, string]\", description: `Allows a conditional requirement with the signature [arg: string, value: string].\n
\n The requirement will only become valid if \"arg\"'s value equals \\${value}.\n
\n ` },\n { property: \"requiredIf\", optional: true, type: \"[string, string]\", description: `Allows specifying that an argument is required conditionally with the signature [arg: string, value: string].\n
\n The requirement will only become valid if the \"arg\"'s value equals \\${value}.\n
\n ` },\n { property: \"requireEquals\", optional: true, type: \"boolean\", description: `Requires that options use the --option=val syntax.
\n i.e. an equals between the option and associated value.` },\n ]} /> },\n { property: \"description\", optional: true, type: \"string\", description: `Command description which will be shown on the help information.` },\n { property: \"longDescription\", optional: true, type: \"string\", description: `Command long description which will be shown on the help information.` },\n { property: \"beforeHelp\", optional: true, type: \"string\", description: `Adds additional help information to be displayed in addition to auto-generated help.
\n This information is displayed before the auto-generated help information.
\n This is often used for header information.` },\n { property: \"afterHelp\", optional: true, type: \"string\", description: `Adds additional help information to be displayed in addition to auto-generated help.
\n This information is displayed after the auto-generated help information.
\n This is often used to describe how to use the arguments, or caveats to be noted.` },\n { property: \"subcommands\", optional: true, type: \"{ [name: string]: CliConfig }\", description: `List of subcommands of this command.
\n Subcommands are effectively sub-apps, because they can contain their own arguments, subcommands, usage, etc.
\n They also function just like the app command, in that they get their own auto generated help and usage.` },\n ]} />\n },\n {\n property: \"bundle\", type: \"object\",\n child: cargo build.` },\n { property: \"targets\", optional: true, type: \"string | string[]\", description: `An array of the bundles you want to generate; e.g. [\"deb\", \"app\", \"msi\", \"appimage\", \"dmg\"] or the string 'all' to make every supported bundle. By default we bundle everything your target supports (app/dmg on mac, deb/appimage on linux, msi on windows).` },\n { property: \"identifier\", type: \"string\", description: `A string that uniquely identifies your application, in reverse-DNS form (for example, \"com.example.appname\" or \"io.github.username.project\"). For OS X and iOS, this is used as the bundle's CFBundleIdentifier value; for Windows, this is hashed to create an application GUID.` },\n { property: \"icon\", optional: true, type: \"string[]\", description: `A list of (relative to src-tauri) icon paths to use for your application bundle.` },\n { property: \"resources\", optional: true, type: \"string[]\", description: `A list of files or directories which will be copied to the resources section of the bundle. Globs are supported.` },\n { property: \"externalBin\", optional: true, type: \"string[]\", description: `A list of—either absolute or relative—paths to binaries to embed with your application.\n
\n Note that Tauri will look for system-specific binaries following the pattern \"binary-name{-target-triple}{.system-extension}\".
\n E.g. you typed \"my-binary\":\n
    \n
  • \"my-binary-x86_64-pc-windows-msvc.exe\" for Windows
  • \n
  • \"my-binary-x86_64-apple-darwin\" for macOS
  • \n
  • \"my-binary-x86_64-unknown-linux-gnu\" for Linux
  • \n
\n so don't forget to provide binaries for all targeted platforms.\n
` },\n { property: \"copyright\", optional: true, type: \"string\", description: `A copyright string associated with your application.` },\n { property: \"category\", optional: true, type: \"string\", description: `What kind of application this is.\n Should be one among the following list:
\n Business, DeveloperTool, Education, Entertainment, Finance, Game, ActionGame, AdventureGame, ArcadeGame, BoardGame, CardGame, CasinoGame, DiceGame, EducationalGame, FamilyGame, KidsGame, MusicGame, PuzzleGame, RacingGame, RolePlayingGame, SimulationGame, SportsGame, StrategyGame, TriviaGame, WordGame, GraphicsAndDesign, HealthcareAndFitness, Lifestyle, Medical, Music, News, Photography, Productivity, Reference, SocialNetworking, Sports, Travel, Utility, Video, Weather.\n ` },\n { property: \"shortDescription\", optional: true, type: \"string\", description: `A short description of your application.` },\n { property: \"longDescription\", optional: true, type: \"string\", description: `A longer, multi-line description of the application.` },\n { property: \"deb\", optional: true, type: \"object\", child: boostrapper script.` },\n { property: \"files\", optional: true, type: \"{ [path: string]: string }\", description: `The files to include on the package. See the debian guide.` }]} />\n },\n { property: \"windows\", optional: true, type: \"object\", child: \n }\n ]} />\n },\n { property: \"macOS\", optional: true, type: \"object\", child: boostrapper script.` },\n { property: \"exceptionDomain\", optional: true, type: \"string\", description: `Allows your application to communicate with the outside world.\n
\n It should be a lowercase, without port and protocol domain name.\n
\n ` },\n { property: \"signingIdentity\", optional: true, type: \"string\", description: `Identity to use for code signing.` },\n { property: \"entitlements\", optional: true, type: \"string\", description: `Path to the entitlements file.` },\n ]} /> },\n ]} />\n },\n {\n property: \"allowlist\", type: \"object\",\n child: \n },\n {\n property: \"window\", optional: true, type: \"object\", child: \n },\n {\n property: \"shell\", optional: true, type: \"object\", child: \n },\n {\n property: \"dialog\", optional: true, type: \"object\", child: \n },\n {\n property: \"http\", optional: true, type: \"object\", child: \n },\n {\n property: \"notification\", optional: true, type: \"object\", child: \n },\n {\n property: \"globalShortcut\", optional: true, type: \"object\", child: \n },\n {\n property: \"os\", optional: true, type: \"object\", child: \n },\n {\n property: \"path\", optional: true, type: \"object\", child: \n },\n ]} />\n },\n {\n property: \"windows\", type: \"WindowConfig[]\",\n child: \n \n },\n {\n property: \"security\", type: \"object\",\n child: \n This is a really important part of the configuration since it helps you ensure your WebView is secured. See more on Mozilla.\n` },\n ]} />\n },\n]} />\n\n\n
\n\n\nInstead of launching the app directly, we configure the bundled app to run a script that tries to expose the environment variables to the app; without that you'll have trouble using system CLI apps like Node.js.\n\n\n```js title=Example\n\"tauri\": {\n \"cli\": {\n \"description\": \"Tauri communication example\",\n \"longDescription\": null,\n \"beforeHelp\": null,\n \"afterHelp\": null,\n \"args\": [{\n \"short\": \"c\",\n \"name\": \"config\",\n \"takesValue\": true,\n \"description\": \"Config path\"\n }, {\n \"short\": \"t\",\n \"name\": \"theme\",\n \"takesValue\": true,\n \"description\": \"App theme\",\n \"possibleValues\": [\"light\", \"dark\", \"system\"]\n }, {\n \"short\": \"v\",\n \"name\": \"verbose\",\n \"multipleOccurrences\": true,\n \"description\": \"Verbosity level\"\n }],\n \"subcommands\": {\n \"update\": {\n \"description\": \"Updates the app\",\n \"longDescription\": null,\n \"beforeHelp\": null,\n \"afterHelp\": null,\n \"args\": [{\n \"short\": \"b\",\n \"name\": \"background\",\n \"description\": \"Update in background\"\n }],\n \"subcommands\": null\n }\n }\n },\n \"bundle\": {\n \"active\": true,\n \"targets\": [\"deb\"],\n \"identifier\": \"com.tauri.dev\",\n \"icon\": [\"icons/32x32.png\", \"icons/128x128.png\", \"icons/128x128@2x.png\", \"icons/icon.icns\", \"icons/icon.ico\"],\n \"resources\": [],\n \"externalBin\": [],\n \"copyright\": \"\",\n \"category\": \"DeveloperTool\",\n \"shortDescription\": \"\",\n \"longDescription\": \"\",\n \"deb\": {\n \"depends\": []\n },\n \"macOS\": {\n \"frameworks\": [],\n \"minimumSystemVersion\": \"\",\n \"exceptionDomain\": \"\"\n }\n },\n \"allowlist\": {\n \"all\": true\n },\n \"windows\": [{\n \"title\": \"Tauri App\",\n \"width\": 800,\n \"height\": 600,\n \"resizable\": true,\n \"fullscreen\": false\n }],\n \"security\": {\n \"csp\": \"default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self'\"\n }\n}\n```\n","h1":[{"content":"Platform","type":"text"},{"content":"Configuration structure","type":"text"}],"h2":[{"content":"build","type":"inlineCode"},{"content":"package","type":"inlineCode"},{"content":"tauri","type":"inlineCode"}],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","inlineCode","u"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/intro.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/intro.json deleted file mode 100644 index 848186d..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/intro.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"intro.md","filepath":"docs/getting-started","hash":42,"frontmatter":{"title":"Introduction"},"text":"\nimport OSList from '@theme/OSList'\n\nWelcome to Tauri!\n\nTauri is a polyglot and generic system that is very composable and allows engineers to make a wide variety of applications. It is used for building applications for Desktop Computers using a combination of [Rust](https://www.rust-lang.org/) tools and HTML rendered in a Webview. Apps built with Tauri can ship with any number of pieces of an optional JS API / Rust API so that webviews can control the system via message passing.\n\nAnything that can be displayed on a website, can be displayed in a Tauri webview app!\n\nDevelopers are free to build the web front-end displayed in a Webview through Tauri with any web frameworks of their choice!\n**Developers can even extend the default API** with their own functionality and bridge the Webview and Rust-based backend easily!\n\nThe Architecture is more fully described in [Architecture](https://github.com/tauri-apps/tauri/blob/dev/ARCHITECTURE.md).\n\nThis guide will help you create your first Tauri app. It should only take about 10 minutes, although it could take longer if you have a slower internet connection.\n\nIf you find an error or something unclear, or would like to propose an improvement, you have several options:\n\n1. Open an issue on our [Github Repo](https://github.com/tauri-apps/tauri-docs)\n2. Visit our [Discord server](https://discord.gg/tauri) and raise your concern\n3. Request to join the education working group on Discord to gain access to its discussion channel\n\n## Steps\n\n1. Install and configure system prerequisites\n2. Create a web app with your frontend framework of choice\n3. Use the Tauri CLI to setup Tauri in your app\n4. Write native Rust code to add functionality or improve performance (totally optional)\n5. Use `tauri dev` to develop your app with features like hot module reloading and webview devtools\n6. Use `tauri build` to package your app into a tiny installer\n\n### Setting up Your Environment\n\nBefore creating an app, you'll have to install and configure some developer tools. This guide assumes that you know what the command line is, how to install packages on your operating system, and generally know your way around the development side of computing.\n\nFollow the platform-specific guides to get started:\n\n\n\nAfter that, you'll be ready to [add Tauri to your project!](/docs/usage/development/integration)\n","h1":[],"h2":[{"content":"Steps","type":"text"}],"h3":[{"content":"Setting up Your Environment","type":"text"}],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","link","strong","list"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/setup-linux.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/setup-linux.json deleted file mode 100644 index 6555a4b..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/setup-linux.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"setup-linux.md","filepath":"docs/getting-started","hash":42,"frontmatter":{"title":"Setup for Linux"},"text":"\nimport Alert from '@theme/Alert'\nimport Icon from '@theme/Icon'\nimport { Intro } from '@theme/SetupDocs'\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n## 1. System Dependencies \n\n\n\n\n```sh\n$ sudo apt update && sudo apt install libwebkit2gtk-4.0-dev \\\n build-essential \\\n curl \\\n wget \\\n libssl-dev \\\n libgtk-3-dev \\\n libappindicator3-dev \\\n patchelf \\\n librsvg2-dev\n```\n\n\n\n\n```sh\n$ sudo pacman -Syy && sudo pacman -S webkit2gtk \\\n base-devel \\\n curl \\\n wget \\\n openssl \\\n appmenu-gtk-module \\\n gtk3 \\\n libappindicator-gtk3 \\\n patchelf \\\n librsvg \\\n libvips\n```\n\n\n\n\n```sh\n$ sudo dnf check-update && sudo dnf install webkit2gtk3-devel.x86_64 \\\n openssl-devel \\\n curl \\\n wget \\\n libappindicator-gtk3 \\ #\n patchelf \\\n librsvg2-devel \\\n && sudo dnf group install \"C Development Tools and Libraries\"\n```\n\n\n\n\n### Optional dependencies:\n\n- `libappindicator`: needed to use the system tray feature.\n- `patchelf` and `librsvg`: needed to bundle `AppImage`.\n\n## 2. Node.js Runtime and Package Manager \n\n### Node.js (npm included)\n\nWe recommend using nvm to manage your Node.js runtime. It allows you to easily switch versions and update Node.js.\n\n```sh\n$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash\n```\n\n\nWe have audited this bash script, and it does what it says it is supposed to do. Nevertheless, before blindly curl-bashing a script, it is always wise to look at it first. Here is the file as a mere download link.\n\n\nOnce nvm is installed, close and reopen your terminal, then install the latest version of Node.js and npm:\n\n```sh\n$ nvm install node --latest-npm\n$ nvm use node\n```\n\nIf you have any problems with nvm, please consult their project readme.\n\n### Optional Node.js Package Manager\n\nYou may want to use an alternative to npm:\n\n- Yarn, is preferred by Tauri's team\n- pnpm\n\n## 3. Rustc and Cargo Package Manager \n\nThe following command will install rustup, the official installer for Rust.\n\n```bash\n$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\n\nWe have audited this bash script, and it does what it says it is supposed to do. Nevertheless, before blindly curl-bashing a script, it is always wise to look at it first. Here is the file as a mere download link.\n\n\nTo make sure that Rust has been installed successfully, run the following command:\n\n```sh\n$ rustc --version\nlatest update on 2019-12-19, rust version 1.40.0\n```\n\nYou may need to restart your terminal if the command does not work.\n\n## 4. For Windows Subsystem for Linux (WSL) Users \n\nIn order to run a graphical application with WSL, you need to download **one** of these X servers: Xming, Cygwin X, and vcXsrv.\nSince vcXsrv has been used internally, it's the one we recommend to install.\n\n### WSL Version 1\n\nOpen the X server and then run `export DISPLAY=:0` in the terminal. You should now be able to run any graphical application via the terminal.\n\n### WSL Version 2\n\nYou'll need to run a command that is slightly more complex than WSL 1: `export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0` and you need to add `-ac` to the X server as an argument. Note: if for some reason this command doesn't work you can use an alternative command such as: `export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | sed 's/.* //g'):0` or you can manually find the Address using `cat /etc/resolve.conf | grep nameserver`.\n\n\n\nDon't forget that you'll have to use the \"export\" command anytime you want to use a graphical application, for each newly opened terminal.\n\nYou can download some examples to try with `sudo apt-get install x11-apps`. xeyes is always a good one. It can be handy when troubleshooting WSL issues.\n\n\n## Continue\n\nNow that you have set up the Linux-specific dependencies for Tauri, learn how to [add Tauri to your project](/docs/usage/development/integration).\n","h1":[],"h2":[{"content":"1","type":"text"},{"content":"2","type":"text"},{"content":"3","type":"text"},{"content":"4","type":"text"},{"content":"Continue","type":"text"}],"h3":[{"content":"Optional dependencies","type":"text"},{"content":"Node","type":"text"},{"content":"Optional Node","type":"text"},{"content":"WSL Version 1","type":"text"},{"content":"WSL Version 2","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["sh","bash"],"otherSymbols":["text","list","link","strong","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/setup-macos.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/setup-macos.json deleted file mode 100644 index f2f2141..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/setup-macos.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"setup-macos.md","filepath":"docs/getting-started","hash":42,"frontmatter":{"title":"Setup for macOS"},"text":"\nimport Alert from '@theme/Alert'\nimport { Intro } from '@theme/SetupDocs'\nimport Icon from '@theme/Icon'\n\n\n\n## 1. System Dependencies \n\n\nYou will need to have Homebrew installed to run the following command.\n\n```sh\n$ brew install gcc\n```\n\nYou will also need to make sure `xcode` is installed.\n\n```sh\n$ xcode-select --install\n```\n\n## 2. Node.js Runtime and Package Manager \n\n### Node.js (npm included)\n\nWe recommend using nvm to manage your Node.js runtime. It allows you to easily switch versions and update Node.js.\n\n```sh\n$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash\n```\n\n\nWe have audited this bash script, and it does what it says it is supposed to do. Nevertheless, before blindly curl-bashing a script, it is always wise to look at it first. Here is the file as a mere download link.\n\n\nOnce nvm is installed, close and reopen your terminal, then install the latest version of Node.js and npm:\n\n```sh\n$ nvm install node --latest-npm\n$ nvm use node\n```\n\nIf you have any problems with nvm, please consult their project readme.\n\n### Optional Node.js Package Manager\n\nYou may want to use an alternative to npm:\n\n- Yarn, is preferred by Tauri's team\n- pnpm\n\n## 3. Rustc and Cargo Package Manager \n\nThe following command will install rustup, the official installer for Rust.\n\n```\n$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\n\nWe have audited this bash script, and it does what it says it is supposed to do. Nevertheless, before blindly curl-bashing a script, it is always wise to look at it first. Here is the file as a mere download link.\n\n\nTo make sure that Rust has been installed successfully, run the following command:\n\n```sh\n$ rustc --version\nlatest update on 2019-12-19, rust version 1.40.0\n```\n\nYou may need to restart your terminal if the command does not work.\n\n## Continue\n\nNow that you have set up the macOS-specific dependencies for Tauri, learn how to [add Tauri to your project](/docs/usage/development/integration).\n","h1":[],"h2":[{"content":"1","type":"text"},{"content":"2","type":"text"},{"content":"3","type":"text"},{"content":"Continue","type":"text"}],"h3":[{"content":"Node","type":"text"},{"content":"Optional Node","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["sh",null],"otherSymbols":["text","link","inlineCode","list"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/setup-windows.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/setup-windows.json deleted file mode 100644 index e79549e..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/getting-started/setup-windows.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"setup-windows.md","filepath":"docs/getting-started","hash":42,"frontmatter":{"title":"Setup for Windows"},"text":"\nimport Alert from '@theme/Alert'\nimport Icon from '@theme/Icon'\nimport { Intro } from '@theme/SetupDocs'\n\n\n\nFor those using the Windows Subsystem for Linux (WSL) please refer to our [Linux specific instructions](/docs/getting-started/setup-linux) instead.\n\n\n\n\n## 1. System Dependencies \n\nYou'll need to install Microsoft Visual Studio C++ build tools. Download the installer here, and then run it. When it asks you what packages you would like to install, select C++ Build Tools.\n\n\nThis is a big download (over 1GB) and takes the most time, so go grab a coffee.\n\n\n\nYou may need to uninstall the 2017 version of the build tools if you have them. There are reports of Tauri not working with both the 2017 and 2019 versions installed.\n\n\n## 2. Node.js Runtime and Package Manager \n\n### Node.js (npm included)\n\nWe recommend using nvm-windows to manage your Node.js runtime. It allows you to easily switch versions and update Node.js.\n\nThen run the following from an Administrative PowerShell and press Y when prompted:\n\n```powershell\n# BE SURE YOU ARE IN AN ADMINISTRATIVE PowerShell!\nnvm install latest\nnvm use {{latest}} # Replace with your latest downloaded version\n```\n\nThis will install the most recent version of Node.js with npm.\n\n### Optional Node.js Package Manager\n\nYou may want to use an alternative to npm:\n\n- Yarn, is preferred by Tauri's team\n- pnpm\n\n## 3. Rustc and Cargo Package Manager \n\nNow you will need to install Rust. The easiest way to do this is to use rustup, the official installer.\n\n- 64-bit download link\n- 32-bit download link\n\nDownload and install the proper variant for your computer's architecture.\n\n## 4. Install WebView2\n\n\nWebView2 is pre-installed in Windows 11. \n\n\nFinally, you will need to install WebView2. The best way to do this is to download and run the Evergreen Bootstrapper from [this page](https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section).\n\n## Continue\n\nNow that you have set up the Windows-specific dependencies for Tauri, learn how to [add Tauri to your project](/docs/usage/development/integration).\n","h1":[],"h2":[{"content":"1","type":"text"},{"content":"2","type":"text"},{"content":"3","type":"text"},{"content":"4","type":"text"},{"content":"Continue","type":"text"}],"h3":[{"content":"Node","type":"text"},{"content":"Optional Node","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["powershell"],"otherSymbols":["text","link","list"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/ci-cd/cross-platform.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/ci-cd/cross-platform.json deleted file mode 100644 index 40c5a5a..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/ci-cd/cross-platform.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"cross-platform.md","filepath":"docs/usage/ci-cd","hash":42,"frontmatter":{"title":"Cross-Platform Compilation"},"text":"\nHow to use GH Action for Building: a glance at Tauri Action.","h1":[],"h2":[],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/ci-cd/signing-macos.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/ci-cd/signing-macos.json deleted file mode 100644 index de08ca6..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/ci-cd/signing-macos.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"signing-macos.md","filepath":"docs/usage/ci-cd","hash":42,"frontmatter":{"title":"Signing for macOS"},"text":"\nSigning for macOS","h1":[],"h2":[],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/ci-cd/workflow.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/ci-cd/workflow.json deleted file mode 100644 index ed1d6db..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/ci-cd/workflow.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"workflow.md","filepath":"docs/usage/ci-cd","hash":42,"frontmatter":{"id":"workflow","title":"Workflow"},"text":"\n## Continuous Integration\n\nGithub Actions has two triggers of which we make heavy use: `push` and `pull_request`. Every commit that made to the repo is a `push`. When you open a pull request from a branch (call it `great_feature`) to another branch (our working branch, `dev`), each commit to `great_feature` would possibly trigger both of these events. We can use a filter to focus on the events we care about though. In our workflows, we only PR (pull request) the `dev` and `master` branches. This means that if we filter to only the `dev` and `master` branches on commit, we will only run that workflow when we _merge_ a PR. A merged PR typically only occurs once a day or less so this will be a good fit for the longer running tests, e.g. the smoke tests in our case. Below is how that might look.\n\nUnit tests:\n\n```yml\n# these run fast so we can have them run on any commit\nname: unit tests\non:\n pull_request:\n push:\n branches:\n - dev\n - master\n```\n\nSmoke tests:\n\n```yml\n# these run slower so we run only on merges to dev or master branch\nname: smoke tests\non:\n push:\n branches:\n - dev\n - master\n```\n\nTauri operates off the `dev` branch as default, and merges to `master` for release. With these Github Actions set up, we will run the unit tests on every commit to an open PR (see `pull_request`). When that PR is merged into `dev`, we will run both the unit tests and the smoke tests.\n\n## Continuous Deployment\n\n### Introduction to immutable checksum\n\nIt is not only possible, but trivial to modify release notes and artifacts after it has been published on Github. While there are very valid reasons for doing this, it is not exactly a totally trustworthy method - i.e. you have no guarantee that what you are reading is really reflective of the underlying truth or the tarballs. It is technically possible to change downloads over the wire or in the box or change checksums in targeted attacks. What we are seeking to accomplish is a best case scenario where:\n\n1. Human error is reduced to a minimum, but humans are still integral in the actual release\n2. Machine built assets, changelogs and attached security audits are verifiable with checksums that are published in an immutable, globally available store.\n\nTo this end we fashioned a workflow shown below. As it stands now, we have #3 through #6 implemented. We manually do #2 which then feeds into #3 and kicks off the rest of the automatic workflow.\n\n1. a human pushes to dev through a pull request (can happen any number of times)\n - pull request includes a changeset file describing the change and required version bump\n2. a pull request is created (or updated) to include the change and version bump\n - this pull request stays open and will be force pushed until it gets merged (and published)\n - increase the version number based on changesets\n - delete all changeset files\n3. a codeowner merges the publish PR to dev (no direct push permissible for anyone)\n - all tests (unit, e2e, smoke tests) are run on the PR\n - failures prevent the publish so they must pass before merge\n4. merge to dev triggers release sequence\n - changes are squashed and a PR is opened against master\n5. when PR to master is merged...\n - vulnerability audit (crates and yarn) and output saved\n - checksums and metadata and output saved\n - packages are published on npm/cargo, tarball/zip created\n - release is created for each package that had updates (if version isn't changed, build skips the publish steps)\n - output from audit/checksums is piped into the release body\n - tarball / zip attached to release\n - async process to publish to IOTA tangle (feeless) via release tag [note: still have things to resolve here]\n6. release is complete\n - master has updated code and tagged\n - GitHub release has tarballs, checksums, and changelog (may have multiple releases if more than one package published) [note: is part of step 2 and is not yet implemented]\n\n### Next Steps\n\nNext steps may include transferring and publishing the built assets to additional places:\n\n1. Tauri's private verdaccio\n2. IPFS\n3. PureOS Gitlab\n4. GitHub Packages\n\nWe can also do some interesting things like signing our releases, including a hash in the release and/or even publishing this information on a blockchain that it can be easily verified. Publishing on the blockchain is another avenue to increase the confidence that what is seen on GitHub matches what you have downloaded. The IOTA foundation created a Github Action which will publish a release to their blockchain. This has shown promise, but he gave a couple errors to tackle still.\n","h1":[],"h2":[{"content":"Continuous Integration","type":"text"},{"content":"Continuous Deployment","type":"text"}],"h3":[{"content":"Introduction to immutable checksum","type":"text"},{"content":"Next Steps","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["yml"],"otherSymbols":["text","inlineCode","em","list"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/contributor-guide.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/contributor-guide.json deleted file mode 100644 index 20cdd36..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/contributor-guide.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"contributor-guide.md","filepath":"docs/usage","hash":42,"frontmatter":{"title":"Contributor Guide"},"text":"\ntodo: make this friendlier and more complete\n\nTauri is a polyglot system that uses:\n\n- git\n- Node.js\n- Rust\n- GitHub actions\n\nIt can be developed on macOS, Linux and Windows.\n\n## Contribution Flow\n\n1. File an Issue\n2. Fork the Repository\n3. Make Your Changes\n4. Make a PR\n\n### A Note About Contributions to the Rust Libraries\n\nWhen contributing to the Rust libraries `tauri`, `tauri-api`, and `tauri-updater`; you will want to setup an environment for RLS (the Rust Language Server). In the Tauri root directory, there is a `.scripts` folder that contains a set of scripts to automate adding a couple temporary environment variables to your shell/terminal. These environment variables point to directories in the test fixture which will prevent RLS from crashing on compile-time. This is a necessary step for setting up a development environment for Tauri's Rust libraries.\n\n##### _Example Instructions_\n\n1. Navigate to the Tauri Root directory.\n2. Execute a script based on your Operating System from this folder: `.scripts/init_env.bat` for Windows Cmd, `.scripts/init_env.ps1` for Windows Powershell, `. .scripts/init_env.sh` for Linux/macOS bash (note the first `.` in this command).\n3. Open your text editor/IDE from this shell/terminal.\n\n## Hands On Example\n\nLet's make a new example. That's a great way to learn. We are going to assume you are on a nixy type of environment like Linux or macOS and have all of your development dependencies like rust and node already sorted out.\n\n```sh\ngit clone git@github.com:tauri-apps/tauri.git\ncd tauri/cli/tauri.js\nyarn\nmkdir ../../examples/vanillajs && cd \"$_\"\n```\n\n```json\n \"tauri:source\": \"node ../../../cli/tauri.js/bin/tauri\",\n```\n\n```ini\n [dependencies.tauri]\n path = \"../../../../core/tauri\"\n features = [ \"all-api\" ]\n```\n","h1":[],"h2":[{"content":"Contribution Flow","type":"text"},{"content":"Hands On Example","type":"text"}],"h3":[{"content":"A Note About Contributions to the Rust Libraries","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["sh","json","ini"],"otherSymbols":["text","list","inlineCode","h5"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/debugging.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/debugging.json deleted file mode 100644 index 9ff3a2a..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/debugging.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"debugging.md","filepath":"docs/usage/development","hash":42,"frontmatter":{"title":"App Debugging","sidebar_label":"App Debugging (3/4)"},"text":"\nimport Alert from '@theme/Alert'\nimport Command from '@theme/Command'\n\nWith all the moving pieces in Tauri, you may run into a problem that requires debugging. There are a handful of locations where error details are printed, and Tauri includes some tools to make the debugging process easier.\n\n## Rust Console\n\nWhen you run a Tauri app in development mode you will have a Rust console available. This is in the terminal where you ran e.g. `tauri dev`. You can use the following code to print something to that console from within a Rust file:\n\n```rust\nprintln!(\"Message from Rust: {}\", msg);\n```\n\nSometimes you may have an error in your Rust code, and the Rust compiler can give you lots of information. If, for example, `tauri dev` crashes, you can rerun it like this on Linux and macOS:\n\n```sh\nRUST_DEBUG=1 tauri dev\n```\n\nor like this on MS Windows:\n\n```sh\nset RUST_DEBUG=1\ntauri dev\n```\n\nThis will give you a granular stack trace. Generally speaking, the Rust compiler will help you by\ngiving you detailed information about the issue, such as:\n\n```\nerror[E0425]: cannot find value `sun` in this scope\n --> src/main.rs:11:5\n |\n11 | sun += i.to_string().parse::().unwrap();\n | ^^^ help: a local variable with a similar name exists: `sum`\n\nerror: aborting due to previous error\n\nFor more information about this error, try `rustc --explain E0425`.\n```\n\n## WebView JS Console\n\nRight click in the WebView, and choose `Inspect Element`. This will open up a web-inspector similar to the Chrome or Firefox dev tools you are used to.\n\n## Create a Debug Build\n\nThere are cases where you might need to inspect the JS console in the final bundle, so Tauri provides a simple command to create a debugging bundle:\n\n\n\nLike the normal build and dev processes, the first time you run this it will take more time than subsequent runs. The final bundled app will be placed in `src-tauri/target/debug/bundle`. That app will ship with the development console enabled.\n\n## Run Your App From the Terminal\n\nYou can also run a built app from the terminal, which will also give you the Rust compiler notes (in case of errors) or your `println` messages. Just find the file `src-tauri/target/(release|debug)/[app name]` and either double click it (but be warned, the terminal will close on errors) or just run it in directly in your console.\n","h1":[],"h2":[{"content":"Rust Console","type":"text"},{"content":"WebView JS Console","type":"text"},{"content":"Create a Debug Build","type":"text"},{"content":"Run Your App From the Terminal","type":"text"}],"h3":[],"hasCodeBlock":true,"programmingLanguages":["rust","sh",null],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/development.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/development.json deleted file mode 100644 index 83f9044..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/development.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"development.md","filepath":"docs/usage/development","hash":42,"frontmatter":{"title":"App Development","sidebar_label":"App Development (2/4)"},"text":"\nimport Alert from '@theme/Alert'\nimport Command from '@theme/Command'\n\n### 1. Start Your Devserver\n\nNow that you have everything setup, you should start your application development server provided by your UI framework or bundler (assuming you're using one, of course).\n\n\nEvery framework has its own development tooling. It is outside of the scope of this document to treat them all or keep them up to date.\n\n\n### 2. Start Tauri Development Window\n\n\n\nThe first time you run this command, it will take several minutes for the Rust package manager to download and build all the required packages. Since they are cached, subsequent builds will be much faster, as only your code will need rebuilding.\n\nOnce Rust has finished building, the webview will open and it should display your web app. You can make changes to your web app, and if your tooling enables it, the webview should update automatically just like a browser. When you make changes to your Rust files, they will be rebuilt automatically and your app will restart.\n\n\n In your project repository, you SHOULD commit the \"src-tauri/Cargo.toml\" to git because you want it to be deterministic. You SHOULD NOT commit the \"src-tauri/target\" folder or any of its contents.\n\n","h1":[],"h2":[],"h3":[{"content":"1","type":"text"},{"content":"2","type":"text"}],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/integration.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/integration.json deleted file mode 100644 index 37d37b4..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/integration.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"integration.md","filepath":"docs/usage/development","hash":42,"frontmatter":{"title":"Tauri Integration","sidebar_label":"Tauri Integration (1/4)"},"text":"\nimport Alert from '@theme/Alert'\nimport Command from '@theme/Command'\nimport Link from '@docusaurus/Link'\n\n\n You must have completed all the steps required for setting up the development environment on your machine. If you haven't done this yet, please see the setup page for your operating system.\n\n\n### 1. Install Tauri CLI Package as a Dev Dependency:\n\n```bash\ncd project-folder\n\n# Not required if you already have a package.json:\n# yarn init\n# OR\n# npm init\n\nyarn add -D @tauri-apps/cli\n# OR\nnpm install -D @tauri-apps/cli\n```\n\n\n You can install Tauri as both a local and a global dependency, but we recommend installing it locally.\n\n\nIf you decide to use Tauri as a local package with npm (not yarn), you will have to define a custom script to your package.json:\n\n```js title=package.json\n{\n // This content is just a sample\n \"scripts\": {\n \"tauri\": \"tauri\"\n }\n}\n```\n\n### 1. Install Tauri API Package as a Dependency (optional):\n\nThe `@tauri-apps/api` package is recommended for projects using ES modules or modern build tools such as Webpack or Vite. It is the most secure way to access the Tauri APIs.\n\n```bash\nyarn add @tauri-apps/api\n# OR\nnpm install @tauri-apps/api\n```\n\n### 2. Initialize Tauri in Your App\n\n\n\nThis command will place a new folder in your current working directory, `src-tauri`.\n\n```sh\n└── src-tauri\n ├── .gitignore\n ├── Cargo.toml\n ├── rustfmt.toml\n ├── tauri.conf.json\n ├── icons\n │ ├── 128x128.png\n │ ├── 128x128@2x.png\n │ ├── 32x32.png\n │ ├── Square107x107Logo.png\n │ ├── Square142x142Logo.png\n │ ├── Square150x150Logo.png\n │ ├── Square284x284Logo.png\n │ ├── Square30x30Logo.png\n │ ├── Square310x310Logo.png\n │ ├── Square44x44Logo.png\n │ ├── Square71x71Logo.png\n │ ├── Square89x89Logo.png\n │ ├── StoreLogo.png\n │ ├── icon.icns\n │ ├── icon.ico\n │ └── icon.png\n └── src\n ├── build.rs\n ├── cmd.rs\n └── main.rs\n```\n\n### 3. Check `tauri info` to Make Sure Everything Is Set up Properly:\n\n\n\nWhich should return something like:\n\n```\nOperating System - Darwin(16.7.0) - darwin/x64\n\nNode.js environment\n Node.js - 12.16.3\n @tauri-apps/cli - 1.0.0-beta.2\n @tauri-apps/api - 1.0.0-beta.1\n\nGlobal packages\n npm - 6.14.4\n yarn - 1.22.4\n\nRust environment\n rustc - 1.52.1\n cargo - 1.52.0\n\nApp directory structure\n/node_modules\n/src-tauri\n/src\n/public\n\nApp\n tauri.rs - 1.0.0-beta.1\n build-type - bundle\n CSP - default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self' img-src: 'self'\n distDir - ../public\n devPath - ../public\n framework - Svelte\n bundler - Rollup\n```\n\nThis information can be very helpful when triaging problems.\n\n### Patterns\n\nWe've also defined prebuilt configurations called \"Patterns\". They may help you to customize Tauri to fit your needs.\n[See more about patterns](/docs/usage/patterns/about-patterns).\n\n## Vue CLI Plugin Tauri\n\nIf you are using Vue CLI, it is recommended to use the official [CLI plugin](https://github.com/tauri-apps/vue-cli-plugin-tauri).\n","h1":[],"h2":[{"content":"Vue CLI Plugin Tauri","type":"text"}],"h3":[{"content":"1","type":"text"},{"content":"1","type":"text"},{"content":"2","type":"text"},{"content":"3","type":"text"},{"content":"Patterns","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["bash","sh",null],"otherSymbols":["text","inlineCode","link"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/publishing.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/publishing.json deleted file mode 100644 index eeccb0f..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/publishing.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"publishing.md","filepath":"docs/usage/development","hash":42,"frontmatter":{"title":"App Publishing","sidebar_label":"App Publishing (4/4)"},"text":"\nimport Alert from '@theme/Alert'\nimport Command from '@theme/Command'\n\n### 1. Build Your Web App\n\nNow that you are ready to package your project, you will need to run your framework's or bundler's build command (assuming you're using one, of course).\n\n\nEvery framework has its own publishing tooling. It is outside of the scope of this document to treat them all or keep them up to date.\n\n\n### 2. Bundle your application with Tauri\n\n\n\nThis command will embed your web assets into a single binary with your Rust code. The binary itself will be located in `src-tauri/target/release/[app name]`, and installers will be located in `src-tauri/target/release/bundle/`.\n\nLike the `tauri dev` command, the first time you run this, it will take some time to collect the Rust crates and build everything - but on subsequent runs it will only need to rebuild your code, which is much quicker.\n","h1":[],"h2":[],"h3":[{"content":"1","type":"text"},{"content":"2","type":"text"}],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/updating.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/updating.json deleted file mode 100644 index 318d041..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/development/updating.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"updating.md","filepath":"docs/usage/development","hash":42,"frontmatter":{"title":"Updating"},"text":"import Alert from '@theme/Alert'\n\n\n Especially during the alpha and beta phases, you are expected to keep all Tauri dependencies and toolchains up to date. There is no support for any versions other than latest.\n\n\n## Automatic updates\n\nThe Tauri JS CLI has a command to install and update all needed dependencies, just run `tauri deps install` or `tauri deps update`.\n\n## Manual updates\n\n### Update NPM Packages\n\nIf you are using the `tauri` package:\n```bash\n$ yarn upgrade @tauri-apps/cli @tauri-apps/api --latest\n$ npm install @tauri-apps/cli@latest @tauri-apps/api@latest\n```\nYou can also detect what the latest version of Tauri is on the command line, using:\n- `npm outdated @tauri-apps/cli`\n- `yarn outdated @tauri-apps/cli`\n\nAlternatively, if you are using the `vue-cli-plugin-tauri` approach:\n```bash\n$ yarn upgrade vue-cli-plugin-tauri --latest\n$ npm install vue-cli-plugin-tauri@latest\n```\n\n### Update Cargo Packages\nGo to `src-tauri/Cargo.toml` and change `tauri` to\n`tauri = { version = \"%version%\" }` where `%version%` is the version number shown above. (You can just use the `MAJOR.MINOR`) version, like `0.9`.\n\nThen do the following:\n```bash\n$ cd src-tauri\n$ cargo update -p tauri\n```\nYou can also run `cargo outdated -r tauri` to get direct information about the core library's latest version.\n","h1":[],"h2":[{"content":"Automatic updates","type":"text"},{"content":"Manual updates","type":"text"}],"h3":[{"content":"Update NPM Packages","type":"text"}],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/anti-bloat.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/anti-bloat.json deleted file mode 100644 index 13b2d0a..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/anti-bloat.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"anti-bloat.md","filepath":"docs/usage/guides/bundler","hash":42,"frontmatter":{"title":"Anti Bloat"},"text":"\nimport Alert from '@theme/Alert'\n\nThe following links have tutorials on reducing the size of your installers:\n\n- https://github.com/RazrFalcon/cargo-bloat\n- https://lifthrasiir.github.io/rustlog/why-is-a-rust-executable-large.html\n- https://doc.rust-lang.org/cargo/reference/manifest.html#the-profile-sections\n\n### Rust Compression Features\n\nAdd this to your `src-tauri/Cargo.toml`\n\n [profile.release]\n panic = \"abort\"\n codegen-units = 1\n lto = true\n incremental = false\n opt-level = \"s\"\n\n\n\nThere is also `opt-level = \"z\"` available to try to reduce the resulting binary size. `\"s\"` and `\"z\"` can sometimes be smaller than the other, so test it with your own application!\n\nWe've seen smaller binary sizes from `\"s\"` for Tauri example applications, but real world applications can always differ.\n\n\n#### Unstable Rust Compression Features\n\n\nThe following suggestions are all unstable features and require a nightly toolchain. See the Unstable Features documentation for more information of what this involves.\n\n\nThe following methods involve using unstable compiler features and require having a rust nightly toolchain installed. If you don't have the nightly toolchain + `rust-src` nightly component added, try the following:\n\n $ rustup toolchain install nightly\n $ rustup component add rust-src --toolchain nightly\n\nThe Rust Standard Library comes precompiled. You can instead apply the optimization options used for the rest of your binary + dependencies to the std with an unstable flag. This flag requires specifying your target, so know the target triple that you are targeting.\n\n $ cargo +nightly build --release -Z build-std --target x86_64-unknown-linux-gnu\n\nIf you are using `panic = \"abort\"` in your release profile optimizations, then you need to make sure the `panic_abort` crate is compiled with std. Additionally, an extra std feature can be used to further reduce the binary size. The following applies both:\n\n $ cargo +nightly build --release -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort --target x86_64-unknown-linux-gnu\n\nSee the unstable documentation for more details about [`-Z build-std`](https://doc.rust-lang.org/cargo/reference/unstable.html#build-std) and [`-Z build-std-features`](https://doc.rust-lang.org/cargo/reference/unstable.html#build-std-features).\n\n### Stripping\n\nBinary size can easily be reduced by stripping out debugging information from binaries that ship to end users. This is not good for debuggable builds, but means good binary size savings for end user binaries. The easiest way is to use the famous `strip` utility to remove this debugging information.\n\n $ strip target/release/my_application\n\nSee your local `strip` manpage for more information and flags that can be used to specify what information gets stripped out from the binary.\n\n### Allowlist config\n\nYou can also reduce the application size with the `allowlist` config, and only enabling what you need. Sometimes this is useful with Tauri's [Bridge-Pattern](/docs/usage/patterns/bridge) or others, depending on needs.\n\nFor example in `tauri.conf.json` file:\n\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"all\": false,\n \"fs\": {\n \"writeFile\": true,\n \"writeBinaryFile\": true\n },\n \"shell\": {\n \"execute\": true\n },\n \"dialog\": {\n \"save\": true\n }\n }\n }\n}\n```\n\n### UPX\n\nUPX, **Ultimate Packer for eXecutables**, is a dinosaur amongst the binary packers. This 23-year old, well-maintained piece of kit is GPL-v2 licensed with a pretty liberal usage declaration. Our understanding of the licensing is that you can use it for any purposes (commercial or otherwise) without needing to change your license unless you modify the source code of UPX.\n\nBasically it compresses the binary and decompresses it at runtime. It should work for pretty much any binary type out there. Read more: https://github.com/upx/upx\n\n\nYou should know that this technique might flag your binary as a virus on Windows and macOS - so use at your own discretion, and as always validate with [Frida](https://frida.re/docs/home/) and do real distribution testing!\n\n\n#### Usage on macOS\n\n $ brew install upx\n $ yarn tauri build\n $ upx --ultra-brute src-tauri/target/release/bundle/macos/app.app/Contents/macOS/app\n Ultimate Packer for eXecutables\n Copyright (C) 1996 - 2018\n UPX 3.95 Markus Oberhumer, Laszlo Molnar & John Reiser Aug 26th 2018\n\n File size Ratio Format Name\n -------------------- ------ ----------- -----------\n 963140 -> 274448 28.50% macho/amd64 app\n","h1":[],"h2":[],"h3":[{"content":"Rust Compression Features","type":"text"},{"content":"Stripping","type":"text"},{"content":"Allowlist config","type":"text"},{"content":"UPX","type":"text"}],"hasCodeBlock":true,"programmingLanguages":[null,"json"],"otherSymbols":["text","list","inlineCode","h4","link","strong"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/debian.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/debian.json deleted file mode 100644 index 7461e09..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/debian.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"debian.md","filepath":"docs/usage/guides/bundler","hash":42,"frontmatter":{"title":"Debian packages"},"text":"\nimport Alert from '@theme/Alert'\n\nTauri allows your app to be packaged as a `.deb` (Debian package) file.\n\n# Bootstrapper\n\nInstead of launching the app directly, you can configure the bundled app to run a script that tries to expose the environment variables to the app; without that you'll have trouble using system programs because the `PATH` environment variable isn't correct. Enable it with the `useBootstrapper` config.\n\n# Custom files\n\nTo include custom files to the debian package, you can configure a mapping on `tauri.conf.json > tauri > bundle > deb > files` as follows:\n\n```json\n{\n \"tauri\": {\n \"bundle\": {\n \"deb\": {\n \"files\": {\n \"/usr/lib/README.md\": \"../README.md\", // copies the README.md file to /usr/lib/README.md\n \"usr/lib/assets\": \"../public/\" // copies the entire public directory to /usr/lib/assets\n }\n }\n }\n }\n}\n```\n\n\nEach `files` object key is the path on the debian package, and the value is a path to a file or directory relative to the `tauri.conf.json` file.\n\n","h1":[{"content":"Bootstrapper","type":"text"},{"content":"Custom files","type":"text"}],"h2":[],"h3":[],"hasCodeBlock":true,"programmingLanguages":["json"],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/introduction.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/introduction.json deleted file mode 100644 index 5e70874..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/introduction.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"introduction.md","filepath":"docs/usage/guides/bundler","hash":42,"frontmatter":{"title":"Introduction"},"text":"\nThe Tauri Bundler is a Rust harness for compiling your binary, packaging assets, and preparing a final bundle.\n\nIt will detect your operating system and build a bundle accordingly. It currently supports:\n\n- Linux: .deb, .appimage\n- macOS: .app, .dmg\n- Windows: .exe, .msi","h1":[],"h2":[],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","list"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/sidecar.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/sidecar.json deleted file mode 100644 index f315a49..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/bundler/sidecar.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"sidecar.md","filepath":"docs/usage/guides/bundler","hash":42,"frontmatter":{"title":"Sidecar (Embedding External Binaries)","sidebar_label":"Sidecar"},"text":"\nimport Alert from '@theme/Alert'\n\nYou may need to embed depending binaries in order to make your application work or to prevent users having to install additional dependencies (e.g. Node.js, Python, etc).\n\nTo bundle the binaries of your choice, you can add the `externalBin` property to the `tauri > bundle` object in your `tauri.conf.json`.\n\nSee more about tauri.conf.json configuration here.\n\n`externalBin` expects a list of strings targeting binaries either with absolute or relative paths.\n\nHere is a sample to illustrate the configuration, this is not a complete `tauri.conf.json` file:\n\n```json\n{\n \"tauri\": {\n \"bundle\": {\n \"externalBin\": [\"/absolute/path/to/app\", \"relative/path/to/binary\", \"bin/python\"]\n }\n }\n}\n```\n\nA binary with the same name and a `-$TARGET_TRIPLE` suffix must exist on the specified path. For instance, `\"externalBin\": [\"bin/python\"]` requires a `src-tauri/bin/python-x86_64-unknown-linux-gnu` executable on Linux. You can find the current platform's target triple running the following command:\n\n```bash\nRUSTC_BOOTSTRAP=1 rustc -Z unstable-options --print target-spec-json\n```\n\nHere's a Node.js script to append the target triple to a binary:\n\n```javascript\nconst execa = require('execa')\nconst fs = require('fs')\n\nlet extension = ''\nif (process.platform === 'win32') {\n extension = '.exe'\n}\n\nasync function main() {\n const rustInfo = (await execa('rustc', ['-vV'])).stdout\n const targetTriple = /host: (\\S+)/g.exec(rustInfo)[1]\n if (!targetTriple) {\n console.error('Failed to determine platform target triple')\n }\n fs.renameSync(\n `src-tauri/binaries/app${extension}`,\n `src-tauri/binaries/app-${targetTriple}${extension}`\n )\n}\n\nmain().catch((e) => {\n throw e\n})\n\n```\n\n## Running the sidecar binary on JavaScript\n\nOn the JavaScript code, import the `Command` class on the `shell` module and use the `sidecar` static method:\n\n```javascript\nimport { Command } from '@tauri-apps/api/shell'\n// alternatively, use `window.__TAURI__.shell.Command`\n// `my-sidecar` is the value specified on `tauri.conf.json > tauri > bundle > externalBin`\nconst command = Command.sidecar('my-sidecar')\nconst output = await command.execute()\n```\n\n## Running the sidecar binary on Rust\n\nOn the Rust code, import the `Command` struct from the `tauri::api::process` module:\n\n```rust\nlet (mut rx, mut child) = Command::new_sidecar(\"my-sidecar\")\n .expect(\"failed to create `my-sidecar` binary command\")\n .spawn()\n .expect(\"Failed to spawn sidecar\");\n\ntauri::async_runtime::spawn(async move {\n // read events such as stdout\n while let Some(event) = rx.recv().await {\n if let CommandEvent::Stdout(line) = event {\n window\n .emit(\"message\", Some(format!(\"'{}'\", line)))\n .expect(\"failed to emit event\");\n // write to stdin\n child.write(\"message from Rust\\n\".as_bytes()).unwrap();\n }\n }\n});\n```\n\n## Using Node.js on a sidecar\n\nThe Tauri [sidecar example](https://github.com/tauri-apps/tauri/tree/dev/examples/sidecar) demonstrates how to use the sidecar API to run a Node.js application on Tauri.\nIt compiles the Node.js code using [pkg](https://github.com/vercel/pkg) and uses the scripts above to run it.\n","h1":[],"h2":[{"content":"Running the sidecar binary on JavaScript","type":"text"},{"content":"Running the sidecar binary on Rust","type":"text"},{"content":"Using Node","type":"text"}],"h3":[],"hasCodeBlock":true,"programmingLanguages":["json","bash","javascript","rust"],"otherSymbols":["text","inlineCode","link"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/cli.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/cli.json deleted file mode 100644 index 00fa016..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/cli.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"cli.md","filepath":"docs/usage/guides","hash":42,"frontmatter":{"title":"Make your own CLI"},"text":"\nimport Alert from '@theme/Alert'\n\nTauri enables your app to have a CLI through clap, a robust command line argument parser. With a simple CLI definition in your `tauri.conf.json` file, you can define your interface and read its argument matches map on JavaScript and/or Rust.\n\n## Base Configuration\n\nUnder `tauri.conf.json`, you have the following structure to configure the interface:\n\n```js title=src-tauri/tauri.conf.json\n{\n \"tauri\": {\n \"cli\": {\n \"description\": \"\", // command description that's shown on help\n \"longDescription\": \"\", // command long description that's shown on help\n \"beforeHelp\": \"\", // content to show before the help text\n \"afterHelp\": \"\", // content to show after the help text\n \"args\": [], // list of arguments of the command, we'll explain it later\n \"subcommands\": {\n \"subcommand-name\": {\n // configures a subcommand that is accessible\n // with `$ ./app subcommand-name --arg1 --arg2 --etc`\n // configuration as above, with \"description\", \"args\", etc.\n }\n }\n }\n }\n}\n```\n\n\n All JSON configurations here are just samples, many other fields have been omitted for the sake of clarity.\n\n\n## Adding Arguments\n\nThe `args` array represents the list of arguments accepted by its command or subcommand. You can find more details about the way to configure them here.\n\n### Positional Arguments\n\nA positional argument is identified by its position in the list of arguments. With the following configuration:\n\n```json title=src-tauri/tauri.conf.json:tauri.cli\n{\n \"args\": [\n {\n \"name\": \"source\",\n \"index\": 1\n },\n {\n \"name\": \"destination\",\n \"index\": 2\n }\n ]\n}\n```\n\nUsers can run your app as `$ ./app tauri.txt dest.txt` and the arg matches map will define `source` as `\"tauri.txt\"` and `destination` as `\"dest.txt\"`.\n\n### Named Arguments\n\nA named argument is a (key, value) pair where the key identifies the value. With the following configuration:\n\n```json title=src-tauri/tauri.conf.json:tauri.cli\n{\n \"args\": [\n {\n \"name\": \"type\",\n \"short\": \"t\",\n \"takesValue\": true,\n \"multiple\": true,\n \"possibleValues\": [\"foo\", \"bar\"]\n }\n ]\n}\n```\n\nUsers can run your app as `$ ./app --type foo bar`, `$ ./app -t foo -t bar` or `$ ./app --type=foo,bar` and the arg matches map will define `type` as `[\"foo\", \"bar\"]`.\n\n### Flag Arguments\n\nA flag argument is a standalone key whose presence or absence provides information to your application. With the following configuration:\n\n```js title=src-tauri/tauri.conf.json:tauri.cli\n{\n \"args\": [\n \"name\": \"verbose\",\n \"short\": \"v\",\n \"multipleOccurrences\": true\n ]\n}\n```\n\nUsers can run your app as `$ ./app -v -v -v`, `$ ./app --verbose --verbose --verbose` or `$ ./app -vvv` and the arg matches map will define `verbose` as `true`, with `occurrences = 3`.\n\n## Subcommands\n\nSome CLI applications has additional interfaces as subcommands. For instance, the `git` CLI has `git branch`, `git commit` and `git push`. You can define additional nested interfaces with the `subcommands` array:\n\n```js title=src-tauri/tauri.conf.json:tauri\n{\n \"cli\": {\n ...\n \"subcommands\": {\n \"branch\": {\n \"args\": []\n },\n \"push\": {\n \"args\": []\n }\n }\n }\n}\n```\n\nIts configuration is the same as the root application configuration, with the `description`, `longDescription`, `args`, etc.\n\n## Reading the matches\n\n### Rust\n\n```rust\nuse tauri::api::cli::get_matches;\n\nfn main() {\n let context = tauri::generate_context!();\n let cli_config = context.config().tauri.cli.clone().unwrap();\n \n match get_matches(&cli_config) {\n // `matches` here is a Struct with { args, subcommand }.\n // `args` is `HashMap` where `ArgData` is a struct with { value, occurances }.\n // `subcommand` is `Option>` where `SubcommandMatches` is a struct with { name, matches }.\n Ok(matches) => {\n println!(\"{:?}\", matches)\n }\n Err(_) => {}\n };\n \n tauri::Builder::default()\n .run(context)\n .expect(\"error while running tauri application\");\n}\n```\n\n### JavaScript\n\n```js\nimport { getMatches } from '@tauri-apps/api/cli'\n\ngetMatches().then((matches) => {\n // do something with the { args, subcommand } matches\n})\n```\n\n## Complete documentation\n\nYou can find more about the CLI configuration here.\n","h1":[],"h2":[{"content":"Base Configuration","type":"text"},{"content":"Adding Arguments","type":"text"},{"content":"Subcommands","type":"text"},{"content":"Reading the matches","type":"text"},{"content":"Complete documentation","type":"text"}],"h3":[{"content":"Positional Arguments","type":"text"},{"content":"Named Arguments","type":"text"},{"content":"Flag Arguments","type":"text"},{"content":"Rust","type":"text"},{"content":"JavaScript","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["rust","js"],"otherSymbols":["text","link","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/command.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/command.json deleted file mode 100644 index f7abc28..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/command.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"command.md","filepath":"docs/usage/guides","hash":42,"frontmatter":{"title":"Create Rust Commands"},"text":"\nimport Alert from '@theme/Alert'\n\nTauri provides a simple yet powerful \"command\" system for calling Rust functions from your web app. Commands can accept arguments and return values. They can also return errors and be `async`.\n\n## Basic Example\n\nCommands are defined in your `src-tauri/src/main.rs` file. To create a command, just add a function and annotate it with `#[tauri::command]`:\n\n```rust\n#[tauri::command]\nfn my_custom_command() {\n println!(\"I was invoked from JS!\");\n}\n```\n\nYou will have to provide a list of your commands to the builder function like so:\n\n```rust\n// Also in main.rs\nfn main() {\n tauri::Builder::default()\n // This is where you pass in your commands\n .invoke_handler(tauri::generate_handler![my_custom_command])\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n```\n\nNow, you can invoke the command from your JS code:\n\n```js\n// With the Tauri API npm package:\nimport { invoke } from '@tauri-apps/api/tauri'\n// With the Tauri global script, enabled when `tauri.conf.json > build > withGlobalTauri` is set to true:\nconst invoke = window.__TAURI__.invoke\n\n// Invoke the command\ninvoke('my_custom_command')\n```\n\n## Passing Arguments\n\nYour command handlers can take arguments:\n\n```rust\n#[tauri::command]\nfn my_custom_command(invoke_message: String) {\n println!(\"I was invoked from JS, with this message: {}\", invoke_message);\n}\n```\n\nArguments should be passed as a JSON object with camelCase keys:\n\n```js\ninvoke('my_custom_command', { invokeMessage: 'Hello!' })\n```\n\nArguments can be of any type, as long as they implement [serde::Deserialize](https://serde.rs/derive.html).\n\n## Returning Data\n\nCommand handlers can return data as well:\n\n```rust\n#[tauri::command]\nfn my_custom_command() -> String {\n \"Hello from Rust!\".into()\n}\n```\n\nThe `invoke` function returns a promise that resolves with the returned value:\n\n```js\ninvoke('my_custom_command').then((message) => console.log(message))\n```\n\nReturned data can be of any type, as long as it implements [Serde::Serialize](https://serde.rs/derive.html).\n\n## Error Handling\n\nIf your handler could fail and needs to be able to return an error, have the function return a `Result`:\n\n```rust\n#[tauri::command]\nfn my_custom_command() -> Result {\n // If something fails\n Err(\"This failed!\".into())\n // If it worked\n Ok(\"This worked!\".into())\n}\n```\n\nIf the command returns an error, the promise will reject, otherwise it resolves:\n\n```js\ninvoke('my_custom_command')\n .then((message) => console.log(message))\n .catch((error) => console.error(error))\n```\n\n## Async Commands\n\n\nAsync commands are executed on a separate thread using the async runtime.\nCommands without the async keyword are executed on the main thread, unless defined with #[tauri::command(async)].\n\n\nIf your command needs to run asynchronously, simply declare it as `async`:\n\n```rust\n#[tauri::command]\nasync fn my_custom_command() {\n // Call another async function and wait for it to finish\n let result = some_async_function().await;\n println!(\"Result: {}\", result);\n}\n```\n\nSince invoking the command from JS already returns a promise, it works just like any other command:\n\n```js\ninvoke('my_custom_command').then(() => console.log('Completed!'))\n```\n\n## Accessing the Window in Commands\n\nCommands can access the `Window` instance that invoked the message:\n\n```rust\n#[tauri::command]\nasync fn my_custom_command(window: tauri::Window) {\n println!(\"Window: {}\", window.label());\n}\n```\n\n## Accessing an AppHandle in Commands\n\nCommands can access an `AppHandle` instance:\n\n```rust\n#[tauri::command]\nasync fn my_custom_command(app_handle: tauri::AppHandle) {\n let app_dir = app_handle.path_resolver().app_dir();\n use tauri::GlobalShortcutManager;\n app_handle.global_shortcut_manager().register(\"CTRL + U\", move || {});\n}\n```\n\n## Accessing managed state\n\nTauri can manage state using the `manage` function on `tauri::Builder`.\nThe state can be accessed on a command using `tauri::State`:\n\n```rust\nstruct MyState(String);\n\n#[tauri::command]\nfn my_custom_command(state: tauri::State) {\n assert_eq!(state.0 == \"some state value\", true);\n}\n\nfn main() {\n tauri::Builder::default()\n .manage(MyState(\"some state value\".into()))\n .invoke_handler(tauri::generate_handler![my_custom_command])\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n## Creating Multiple Commands\n\nThe `tauri::generate_handler!` macro takes an array of commands. To register\nmultiple commands, you cannot call invoke_handler multiple times. Only the last\ncall will be used. You must pass each command to a single call of\n`tauri::generate_handler!`.\n\n```rust\n#[tauri::command]\nfn cmd_a() -> String {\n\t\"Command a\"\n}\n#[tauri::command]\nfn cmd_b() -> String {\n\t\"Command b\"\n}\n\nfn main() {\n tauri::Builder::default()\n .invoke_handler(tauri::generate_handler![cmd_a, cmd_b])\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n## Complete Example\n\nAny or all of the above features can be combined:\n\n```rust title=main.rs\n// Definition in main.rs\n\nstruct Database;\n\n#[derive(serde::Serialize)]\nstruct CustomResponse {\n message: String,\n other_val: usize,\n}\n\nasync fn some_other_function() -> Option {\n Some(\"response\".into())\n}\n\n#[tauri::command]\nasync fn my_custom_command(\n window: tauri::Window,\n number: usize,\n database: tauri::State<'_, Database>,\n) -> Result {\n println!(\"Called from {}\", window.label());\n let result: Option = some_other_function().await;\n if let Some(message) = result {\n Ok(CustomResponse {\n message,\n other_val: 42 + number,\n })\n } else {\n Err(\"No result\".into())\n }\n}\n\nfn main() {\n tauri::Builder::default()\n .manage(Database {})\n .invoke_handler(tauri::generate_handler![my_custom_command])\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n```js\n// Invocation from JS\n\ninvoke('my_custom_command', {\n number: 42,\n})\n .then((res) =>\n console.log(`Message: ${res.message}, Other Val: ${res.other_val}`)\n )\n .catch((e) => console.error(e))\n```\n","h1":[],"h2":[{"content":"Basic Example","type":"text"},{"content":"Passing Arguments","type":"text"},{"content":"Returning Data","type":"text"},{"content":"Error Handling","type":"text"},{"content":"Async Commands","type":"text"},{"content":"Accessing the Window in Commands","type":"text"},{"content":"Accessing an AppHandle in Commands","type":"text"},{"content":"Accessing managed state","type":"text"},{"content":"Creating Multiple Commands","type":"text"},{"content":"Complete Example","type":"text"}],"h3":[],"hasCodeBlock":true,"programmingLanguages":["rust","js"],"otherSymbols":["text","inlineCode","link","em"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/events.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/events.json deleted file mode 100644 index 2e158bf..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/events.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"events.md","filepath":"docs/usage/guides","hash":42,"frontmatter":{"title":"Events"},"text":"\nThe Tauri event system is a multi-producer multi-consumer communication primitive that allows message passing between the frontend and the backend.\nIt is analogous to the command system, but payload type check must be written on the event handler and it simplifies communication from the backend to the frontend, working like a channel.\n\nA Tauri application can listen and emit to global and window-specific events. Usage from the frontend and the backend are described below.\n\n## Frontend\n\nThe event system is accessible on the frontend on the `event` and `window` modules of the `@tauri-apps/api` package.\n\n### Global events\n\nTo use the global event channel, import the `event` module and use the `emit` and `listen` functions:\n\n```ts\nimport { emit, listen } from '@tauri-apps/api/event'\n\n// listen to the `click` event and get a function to remove the event listener\n// there's also a `once` function that subscribes to an event and automatically unsubscribes the listener on the first event\nconst unlisten = await listen('click', event => {\n // event.event is the event name (useful if you want to use a single callback fn for multiple event types)\n // event.payload is the payload object\n})\n\n// emits the `click` event with the object payload\nemit('click', {\n theMessage: 'Tauri is awesome!'\n})\n```\n\n### Window-specific events\n\nWindow-specific events are exposed on the `window` module.\n\n```ts\nimport { getCurrent, WebviewWindow } from '@tauri-apps/api/window'\n\n// emit an event that are only visible to the current window\nconst current = getCurrent()\ncurrent.emit('event', { message: 'Tauri is awesome!' })\n\n// create a new webview window and emit an event only to that window\nconst webview = new WebviewWindow('window')\nwebview.emit('event')\n\n```\n\n## Backend\n\nOn the backend, the global event channel is exposed on the `App` struct, and window-specific events can be emitted using the `Window` trait.\n\n### Global events\n\n```rust\nuse tauri::Manager;\n\n// the payload type must implement `Serialize`.\n// for global events, it also must implement `Clone`.\n#[derive(Clone, serde::Serialize)]\nstruct Payload {\n message: String,\n}\n\nfn main() {\n tauri::Builder::default()\n .setup(|app| {\n // listen to the `event-name` (emitted on any window)\n let id = app.listen_global(\"event-name\", |event| {\n println!(\"got event-name with payload {:?}\", event.payload());\n });\n // unlisten to the event using the `id` returned on the `listen_global` function\n // an `once_global` API is also exposed on the `App` struct\n app.unlisten(id);\n\n // emit the `event-name` event to all webview windows on the frontend\n app.emit_all(\"event-name\", Payload { message: \"Tauri is awesome!\".into() }).unwrap();\n Ok(())\n })\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n```\n\n### Window-specific events\n\nTo use the window-specific event channel, a `Window` object can be obtained on a command handler or with the `get_window` function:\n\n```rust\nuse tauri::{Manager, Window};\n\n// the payload type must implement `Serialize`.\n#[derive(serde::Serialize)]\nstruct Payload {\n message: String,\n}\n\n// init a background process on the command, and emit periodic events only to the window that used the command\n#[tauri::command]\nfn init_process(window: Window) {\n std::thread::spawn(move || {\n loop {\n window.emit(\"event-name\", Payload { message: \"Tauri is awesome!\".into() }).unwrap();\n }\n });\n}\n\nfn main() {\n tauri::Builder::default()\n .setup(|app| {\n // `main` here is the window label; it is defined on the window creation or under `tauri.conf.json`\n // the default value is `main`. note that it must be unique\n let main_window = app.get_window(\"main\").unwrap();\n\n // listen to the `event-name` (emitted on the `main` window)\n let id = main_window.listen(\"event-name\", |event| {\n println!(\"got window event-name with payload {:?}\", event.payload());\n });\n // unlisten to the event using the `id` returned on the `listen` function\n // an `once` API is also exposed on the `Window` struct\n main_window.unlisten(id);\n\n // emit the `event-name` event to the `main` window\n main_window.emit(\"event-name\", Payload { message: \"Tauri is awesome!\".into() }).unwrap();\n Ok(())\n })\n .invoke_handler(tauri::generate_handler![init_process])\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n```\n","h1":[],"h2":[{"content":"Frontend","type":"text"},{"content":"Backend","type":"text"}],"h3":[{"content":"Global events","type":"text"},{"content":"Window","type":"text"},{"content":"Global events","type":"text"},{"content":"Window","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["ts","rust"],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/migration.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/migration.json deleted file mode 100644 index 8de42e4..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/migration.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"migration.md","filepath":"docs/usage/guides","hash":42,"frontmatter":{"title":"Migrating from 0.x"},"text":"\nFirst of all if you still have `tauri` as dependency in your `package.json`\nreplace it with a recent version of `@tauri-apps/cli` (make sure to also change\nthe import path in your JavaScript/TypeScript files, see [JavaScript](#javascript)).\n\nFor example:\n\n```diff\n- \"tauri\": \"^0.14.1\"\n+ \"@tauri-apps/cli\": \"^1.0.0-beta-rc.4\"\n```\n\nNext update your `Cargo.toml`:\n\n- add `tauri-build` as a new build-dependency and remove `winres`, e.g.:\n\n ```diff\n + [build-dependencies]\n + tauri-build = { version = \"1.0.0-beta-rc.0\" }\n\n - [target.\"cfg(windows)\".build-dependencies]\n - winres = \"0.1\"\n ```\n\n- update the version of `tauri` to e.g. `1.0.0-beta-rc.4`\n- remove all old features of the `tauri` dependency\n- remove all features, that tauri added and add `custom-protocol` as a new one:\n \n ```diff\n [features]\n - embedded-server = [ \"tauri/embedded-server\" ]\n - no-server = [ \"tauri/no-server\" ]\n + custom-protocol = [ \"tauri/custom-protocol\" ]\n + default = [ \"custom-protocol\" ]\n ```\n\nUpdate your `tauri.conf.json` like this:\n\n- remove `ctx`\n- remove the `embeddedServer`\n- rename `osx` to `macOS` and add some fields:\n - `\"exceptionDomain\": \"\"`\n - `\"signingIdentity\": null`\n - `\"entitlements\": null`\n- remove the `exceptionDomain`\n- add a configuration for `windows`:\n - `\"certificateThumbprint\": null`\n - `\"digestAlgorithm\": \"sha256\"`\n - `\"timestampUrl\": \"\"`\n- make the `window` definition into an array and call it `windows`\n- remove `inliner`\n\n> for more information about the config see [here](../../api/config.md)\n\n```diff\n {\n- \"ctx\": {},\n \"tauri\": {\n- \"embeddedServer\": {\n- \"active\": true\n- },\n \"bundle\": {\n- \"osx\": {\n+ \"macOS\": {\n \"frameworks\": [],\n \"minimumSystemVersion\": \"\",\n- \"useBootstrapper\": false\n+ \"useBootstrapper\": false,\n+ \"exceptionDomain\": \"\",\n+ \"signingIdentity\": null,\n+ \"entitlements\": null\n },\n- \"exceptionDomain\": \"\"\n+ \"windows\": {\n+ \"certificateThumbprint\": null,\n+ \"digestAlgorithm\": \"sha256\",\n+ \"timestampUrl\": \"\"\n+ }\n },\n+ \"updater\": {\n+ \"active\": false\n+ },\n- \"window\": {\n+ \"windows\": [\n {\n \"title\": \"Calciumdibromid\",\n \"width\": 800,\n \"height\": 600,\n \"resizable\": true,\n \"fullscreen\": false\n }\n+ ],\n- \"inliner\": {\n- \"active\": true\n- }\n }\n }\n```\n\n## Commands\n\nThe following example is taken from the previous documentation.\n\nIn the new version of Tauri there is no distinction between synchronous and\nasynchronous commands, the only difference in your code is a call of\n`tauri::execute_promise()`, that isn't there in a synchronous command.\n\n### Rust\n\nHere is the complete example code of the \"old\" version:\n\n```rust\nuse serde::{Deserialize, Serialize};\n\n#[derive(Deserialize)]\nstruct DoSomethingPayload {\n state: String,\n data: u64,\n}\n\n#[derive(Deserialize)]\n#[serde(tag = \"cmd\", rename_all = \"camelCase\")]\nenum Cmd {\n DoSomething {\n count: u64,\n payload: DoSomethingPayload,\n callback: String,\n error: String,\n },\n}\n\n#[derive(Serialize)]\nstruct Response<'a> {\n value: u64,\n message: &'a str,\n}\n\n#[derive(Debug, Clone)]\nstruct CommandError<'a> {\n message: &'a str,\n}\n\nimpl<'a> CommandError<'a> {\n fn new(message: &'a str) -> Self {\n Self { message }\n }\n}\n\nimpl<'a> std::fmt::Display for CommandError<'a> {\n fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n write!(f, \"{}\", self.message)\n }\n}\n\nimpl<'a> std::error::Error for CommandError<'a> {}\n\nfn main() {\n tauri::AppBuilder::new()\n .invoke_handler(|_webview, arg| {\n use Cmd::*;\n match serde_json::from_str(arg) {\n Err(e) => Err(e.to_string()),\n Ok(command) => {\n match command {\n DoSomething { count, payload, callback, error } => tauri::execute_promise(\n _webview,\n move || {\n if count > 5 {\n let response = Response {\n value: 5,\n message: \"async response!\",\n };\n Ok(response)\n } else {\n Err(CommandError::new(\"count should be > 5\").into())\n }\n },\n callback,\n error,\n ),\n }\n Ok(())\n }\n }\n })\n .build()\n .run();\n}\n```\n\nComplete the following steps to migrate your code:\n\n- create a new function for every `Cmd` enum variant\n- wrap the new function with the `#[tauri::command]` macro\n- use the fields of the enum as arguments (`callback` and `error` can be deleted)\n- as function body use the code inside the `match` block of the enum variant\n- add a return type\n- rename `AppBuilder` to `Builder` in `main()`\n- replace the big `invoke_handler` with the new syntax\n\nThe old example code should look like this now:\n\n```rust\nuse serde::{Deserialize, Serialize};\n\n#[derive(Deserialize)]\nstruct DoSomethingPayload {\n state: String,\n data: u64,\n}\n\n#[derive(Serialize)]\nstruct Response<'a> {\n value: u64,\n message: &'a str,\n}\n\n#[derive(Debug, Clone, Serialize)]\nstruct CommandError<'a> {\n message: &'a str,\n}\n\nimpl<'a> CommandError<'a> {\n fn new(message: &'a str) -> Self {\n Self { message }\n }\n}\n\nimpl<'a> std::fmt::Display for CommandError<'a> {\n fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n write!(f, \"{}\", self.message)\n }\n}\n\nimpl<'a> std::error::Error for CommandError<'a> {}\n\n#[tauri::command]\nfn do_something(count: u64, payload: DoSomethingPayload) -> Result {\n if count > 5 {\n let response = Response {\n value: 5,\n message: \"async response!\",\n };\n Ok(response)\n } else {\n Err(CommandError::new(\"count should be > 5\").into())\n }\n}\n\nfn main() {\n tauri::Builder::new()\n .invoke_handler(tauri::generate_handler![do_something])\n .run(tauri::generate_context!());\n}\n```\n\n### JavaScript\n\nLike mentioned above there is also no distinction between synchronous and\nasynchronous commands in JavaScript. \nYou only have to use `invoke` and optionally use the results.\n\nHere is an example of the \"old\" code:\n\n```js\ninvoke({\n cmd: 'doSomething',\n count: 5,\n payload: {\n state: 'some string data',\n data: 17\n }\n});\n\npromisified({\n cmd: 'doSomething',\n count: 5,\n payload: {\n state: 'some string data',\n data: 17\n }\n}).then(response => {\n console.log(response);\n}).catch(error => {\n console.error(error);\n});\n```\n\nComplete the following steps to migrate your code:\n\n- replace all `promisified`-calls with `invoke`-calls\n- extract the `cmd` attribute of the argument object as first parameter \n (you may have to rename it to `snake_case` as the `cmd` parameter is now the\n name of the function in Rust)\n- if you import parts of the tauri-api with `tauri/api/*` replace it with `@tauri-apps/api/*`, e.g.:\n\n ```diff\n - import { invoke } from 'tauri/api/tauri';\n + import { invoke } from '@tauri-apps/api/tauri';\n ```\n\nThe old example code should look like this now:\n\n```js\ninvoke(\n 'do_something',\n {\n count: 5,\n payload: {\n state: 'some string data',\n data: 17\n }\n }\n);\n\ninvoke(\n 'do_something',\n {\n count: 5,\n payload: {\n state: 'some string data',\n data: 17\n }\n }\n).then(response => {\n console.log(response);\n}).catch(error => {\n console.error(error);\n});\n```\n\nFor more information on commands read [Create Rust Commands](command.md).\n","h1":[],"h2":[{"content":"Commands","type":"text"}],"h3":[{"content":"Rust","type":"text"},{"content":"JavaScript","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["diff","rust","js"],"otherSymbols":["text","inlineCode","link","list","blockQuote","br"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/plugin.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/plugin.json deleted file mode 100644 index cb7023a..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/plugin.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"plugin.md","filepath":"docs/usage/guides","hash":42,"frontmatter":{"title":"Write Tauri Plugins"},"text":"\nimport Alert from '@theme/Alert'\n\n\nTauri will soon offer Plugin starter kits so the process of writing a Plugin crate will be simplified.\n\nFor now it's recommended to follow the [official Tauri plugins](#official-tauri-plugins).\n\n\nPlugins allow you to hook into the Tauri application lifecycle and introduce new commands.\n\n## Writing a Plugin\n\nTo write a plugin you just need to implement the `tauri::plugin::Plugin` trait:\n\n```rust\nuse tauri::{plugin::{Plugin, Result as PluginResult}, Runtime, PageLoadPayload, Window, Invoke, AppHandle};\n\nstruct MyAwesomePlugin {\n invoke_handler: Box) + Send + Sync>,\n // plugin state, configuration fields\n}\n\n// the plugin custom command handlers if you choose to extend the API.\n#[tauri::command]\n// this will be accessible with `invoke('plugin:awesome|initialize')`.\n// where `awesome` is the plugin name.\nfn initialize() {}\n\n#[tauri::command]\n// this will be accessible with `invoke('plugin:awesome|do_something')`.\nfn do_something() {}\n\nimpl MyAwesomePlugin {\n // you can add configuration fields here,\n // see https://doc.rust-lang.org/1.0.0/style/ownership/builders.html\n pub fn new() -> Self {\n Self {\n invoke_handler: Box::new(tauri::generate_handler![initialize, do_something]),\n }\n }\n}\n\nimpl Plugin for MyAwesomePlugin {\n /// The plugin name. Must be defined and used on the `invoke` calls.\n fn name(&self) -> &'static str {\n \"awesome\"\n }\n\n /// The JS script to evaluate on initialization.\n /// Useful when your plugin is accessible through `window`\n /// or needs to perform a JS task on app initialization\n /// e.g. \"window.awesomePlugin = { ... the plugin interface }\"\n fn initialization_script(&self) -> Option {\n None\n }\n\n /// initialize plugin with the config provided on `tauri.conf.json > plugins > $yourPluginName` or the default value.\n fn initialize(&mut self, app: &AppHandle, config: serde_json::Value) -> PluginResult<()> {\n Ok(())\n }\n\n /// Callback invoked when the Window is created.\n fn created(&mut self, window: Window) {}\n\n /// Callback invoked when the webview performs a navigation.\n fn on_page_load(&mut self, window: Window, payload: PageLoadPayload) {}\n\n /// Extend the invoke handler.\n fn extend_api(&mut self, message: Invoke) {\n (self.invoke_handler)(message)\n }\n}\n```\n\nNote that each function on the `Plugin` trait is optional, except the `name` function.\n\n## Using a plugin\n\nTo use a plugin, just pass an instance of the `MyAwesomePlugin` struct to the App's `plugin` method:\n\n```rust\nfn main() {\n let awesome_plugin = MyAwesomePlugin::new();\n tauri::Builder::default()\n .plugin(awesome_plugin)\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n```\n\n## Official Tauri Plugins\n\n- [Stronghold (WIP)](https://github.com/tauri-apps/tauri-plugin-stronghold)\n- [Authenticator (WIP)](https://github.com/tauri-apps/tauri-plugin-authenticator)\n- [Logging (WIP)](https://github.com/tauri-apps/tauri-plugin-log)\n- [SQL (WIP)](https://github.com/tauri-apps/tauri-plugin-sql)\n","h1":[],"h2":[{"content":"Writing a Plugin","type":"text"},{"content":"Using a plugin","type":"text"},{"content":"Official Tauri Plugins","type":"text"}],"h3":[],"hasCodeBlock":true,"programmingLanguages":["rust"],"otherSymbols":["text","link","inlineCode","list"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/updater.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/updater.json deleted file mode 100644 index fe5928b..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/updater.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"updater.md","filepath":"docs/usage/guides","hash":42,"frontmatter":{"title":"Updater"},"text":"\n# Configuration\n\nOnce you have your Tauri project ready, you need to configure the updater.\n\nAdd this in tauri.conf.json\n```json\n\"updater\": {\n \"active\": true,\n \"endpoints\": [\n \"https://releases.myapp.com/{{target}}/{{current_version}}\"\n ],\n \"dialog\": true,\n \"pubkey\": \"\"\n}\n```\n\nThe required keys are \"active\" and \"endpoints\", others are optional.\n\n\"active\" must be a boolean. By default, it's set to false.\n\n\"endpoints\" must be an array. The string `{{target}}` and `{{current_version}}` are automatically replaced in the URL allowing you determine [server-side](#update-server-json-format) if an update is available. If multiple endpoints are specified, the updater will fallback if a server is not responding within the pre-defined timeout.\n\n\"dialog\" if present must be a boolean. By default, it's set to true. If enabled, [events](#events) are turned-off as the updater will handle everything. If you need the custom events, you MUST turn off the built-in dialog.\n\n\"pubkey\" if present must be a valid public-key generated with Tauri cli. See [Signing updates](#signing-updates).\n\n## Update Requests\n\nTauri is indifferent to the request the client application provides for update checking.\n\n`Accept: application/json` is added to the request headers because Tauri is responsible for parsing the response.\n\nFor the requirements imposed on the responses and the body format of an update, response see [Server Support](#server-support).\n\nYour update request must *at least* include a version identifier so that the server can determine whether an update for this specific version is required.\n\nIt may also include other identifying criteria such as operating system version, to allow the server to deliver as fine-grained an update as you would like.\n\nHow you include the version identifier or other criteria is specific to the server that you are requesting updates from. A common approach is to use query parameters, [Configuration](#configuration) shows an example of this.\n\n## Built-in dialog\n\nBy default, updater uses a built-in dialog API from Tauri.\n\n![New Update](https://i.imgur.com/UMilB5A.png)\n\nThe dialog release notes is represented by the update `note` provided by the [server](#server-support).\n\nIf the user accepts, the download and install are initialized. The user will be then prompted to restart the application.\n\n## Javascript API\n\n**Attention, you need to _disable built-in dialog_ in your [tauri configuration](#configuration), otherwise, events aren't emitted and the javascript API will NOT work.**\n\n\n```js\nimport { checkUpdate, installUpdate } from \"@tauri-apps/api/updater\";\nimport { relaunch } from \"@tauri-apps/api/process\";\ntry {\n const {shouldUpdate, manifest} = await checkUpdate();\n if (shouldUpdate) {\n // display dialog\n await installUpdate();\n // install complete, restart app\n await relaunch();\n }\n} catch(error) {\n console.log(error);\n}\n```\n\n## Events\n\n**Attention, you need to _disable built-in dialog_ in your [tauri configuration](#configuration), otherwise, events aren't emitted.**\n\nTo know when an update is ready to be installed, you can subscribe to these events:\n\n### Initialize updater and check if a new version is available\n\n#### If a new version is available, the event `tauri://update-available` is emitted.\n\nEvent: `tauri://update`\n\n### Rust\n```rust\nwindow.emit(\"tauri://update\".to_string(), None);\n```\n\n### Javascript\n```js\nimport { emit } from \"@tauri-apps/api/event\";\nemit(\"tauri://update\");\n```\n\n### Listen New Update Available\n\nEvent: `tauri://update-available`\n\nEmitted data:\n```none\nversion Version announced by the server\ndate Date announced by the server\nbody Note announced by the server\n```\n\n### Rust\n```rust\nwindow.listen(\"tauri://update-available\".to_string(), move |msg| {\n println!(\"New version available: {:?}\", msg);\n})\n```\n\n### Javascript\n```js\nimport { listen } from \"@tauri-apps/api/event\";\nlisten(\"tauri://update-available\", function (res) {\n console.log(\"New version available: \", res);\n});\n```\n\n### Emit Install and Download\n\nYou need to emit this event to initialize the download and listen to the [install progress](#listen-install-progress).\n\nEvent: `tauri://update-install`\n\n### Rust\n```rust\nwindow.emit(\"tauri://update-install\".to_string(), None);\n```\n\n### Javascript\n```js\nimport { emit } from \"@tauri-apps/api/event\";\nemit(\"tauri://update-install\");\n```\n\n### Listen Install Progress\n\nEvent: `tauri://update-status`\n\nEmitted data:\n```none\nstatus [ERROR/PENDING/DONE]\nerror String/null\n```\n\nPENDING is emitted when the download is started and DONE when the install is complete. You can then ask to restart the application.\n\nERROR is emitted when there is an error with the updater. We suggest to listen to this event even if the dialog is enabled.\n\n### Rust\n```rust\nwindow.listen(\"tauri://update-status\".to_string(), move |msg| {\n println!(\"New status: {:?}\", msg);\n})\n```\n\n### Javascript\n```js\nimport { listen } from \"@tauri-apps/api/event\";\nlisten(\"tauri://update-status\", function (res) {\n console.log(\"New status: \", res);\n});\n```\n\n# Server Support\n\nYour server should determine whether an update is required based on the [Update Request](#update-requests) your client issues.\n\nIf an update is required your server should respond with a status code of [200 OK](http://tools.ietf.org/html/rfc2616#section-10.2.1) and include the [update JSON](#update-server-json-format) in the body. To save redundantly downloading the same version multiple times your server must not inform the client to update.\n\nIf no update is required your server must respond with a status code of [204 No Content](http://tools.ietf.org/html/rfc2616#section-10.2.5).\n\n## Update Server JSON Format\n\nWhen an update is available, Tauri expects the following schema in response to the update request provided:\n\n```json\n{\n \"url\": \"https://mycompany.example.com/myapp/releases/myrelease.tar.gz\",\n \"version\": \"0.0.1\",\n \"notes\": \"Theses are some release notes\",\n \"pub_date\": \"2020-09-18T12:29:53+01:00\",\n \"signature\": \"\"\n}\n```\n\nThe only required keys are \"url\" and \"version\", the others are optional.\n\n\"pub_date\" if present must be formatted according to ISO 8601.\n\n\"signature\" if present must be a valid signature generated with Tauri cli. See [Signing updates](#signing-updates).\n\n## Update File JSON Format\n\nThe alternate update technique uses a plain JSON file meaning you can store your update metadata on S3, gist, or another static file store. Tauri will check against the name/version field and if the version is smaller than the current one and the platform is available, the update will be triggered. The format of this file is detailed below:\n\n```json\n{\n\t\"name\":\"v1.0.0\",\n\t\"notes\":\"Test version\",\n\t\"pub_date\":\"2020-06-22T19:25:57Z\",\n\t\"platforms\": {\n\t\t\"darwin\": {\n\t\t\t\"signature\":\"\",\n\t\t\t\"url\":\"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.app.tar.gz\"\n\t\t},\n \t\t\"linux\": {\n\t\t\t\"signature\":\"\",\n\t\t\t\"url\":\"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.AppImage.tar.gz\"\n\t\t},\n\t\t\"win64\": {\n\t\t\t\"signature\":\"\",\n\t\t\t\"url\":\"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.x64.msi.zip\"\n\t\t}\n\t}\n}\n```\n\n# Bundler (Artifacts)\n\nThe Tauri bundler will automatically generate update artifacts if the updater is enabled in `tauri.conf.json`\n\nIf the bundler can locate your private and pubkey, your update artifacts will be automatically signed.\n\nThe signature can be found in the `sig` file. The signature can be uploaded to GitHub safely or made public as long as your private key is secure.\n\nYou can see how it's [bundled with the CI](https://github.com/tauri-apps/tauri/blob/5b6c7bb6ee3661f5a42917ce04a89d94f905c949/.github/workflows/artifacts-updater.yml#L44) and a [sample tauri.conf.json](https://github.com/tauri-apps/tauri/blob/5b6c7bb6ee3661f5a42917ce04a89d94f905c949/examples/updater/src-tauri/tauri.conf.json#L52)\n\n## macOS\n\nOn MACOS we create a .tar.gz from the whole application. (.app)\n\n```none\ntarget/release/bundle\n└── osx\n └── app.app\n └── app.app.tar.gz (update bundle)\n └── app.app.tar.gz.sig (if signature enabled)\n```\n\n## Windows\n\nOn Windows we create a .zip from the MSI, when downloaded and validated, we run the MSI install.\n\n```none\ntarget/release\n└── app.x64.msi\n└── app.x64.msi.zip (update bundle)\n└── app.x64.msi.zip.sig (if signature enabled)\n```\n\n## Linux\n\nOn Linux, we create a .tar.gz from the AppImage.\n\n```none\ntarget/release/bundle\n└── appimage\n └── app.AppImage\n └── app.AppImage.tar.gz (update bundle)\n └── app.AppImage.tar.gz.sig (if signature enabled)\n```\n\n# Signing updates\n\nWe offer a built-in signature to ensure your update is safe to be installed.\n\nTo sign your updates, you need two things.\n\nThe *Public-key* (pubkey) should be added inside your `tauri.conf.json` to validate the update archive before installing.\n\nThe *Private key* (privkey) is used to sign your update and should NEVER be shared with anyone. Also, if you lost this key, you'll NOT be able to publish a new update to the current user base (if pubkey is set in tauri.conf.json). It's important to save it at a safe place and you can always access it.\n\nTo generate your keys you need to use the Tauri cli.\n\n```bash\ntauri sign -g -w ~/.tauri/myapp.key\n```\n\nYou have multiple options available\n```bash\nTauri updates signer.\nUSAGE:\n tauri sign [FLAGS] [OPTIONS]\nFLAGS:\n --force Overwrite private key even if it exists on the specified path\n -g, --generate Generate keypair to sign files\n -h, --help Prints help information\n --no-password Set empty password for your private key\n -V, --version Prints version information\nOPTIONS:\n -p, --password Set private key password when signing\n -k, --private-key Load the private key from a string\n -f, --private-key-path Load the private key from a file\n --sign-file Sign the specified file\n -w, --write-keys Write private key to a file\n```\n***\nEnvironment variables used to sign with the Tauri `bundler`:\nIf they are set, and `tauri.conf.json` expose the public key, the bundler will automatically generate and sign the updater artifacts.\n`TAURI_PRIVATE_KEY` Path or String of your private key\n`TAURI_KEY_PASSWORD` Your private key password (optional)\n","h1":[{"content":"Configuration","type":"text"},{"content":"Server Support","type":"text"},{"content":"Bundler ","type":"text"},{"content":"Signing updates","type":"text"}],"h2":[{"content":"Update Requests","type":"text"},{"content":"Built","type":"text"},{"content":"Javascript API","type":"text"},{"content":"Events","type":"text"},{"content":"Update Server JSON Format","type":"text"},{"content":"Update File JSON Format","type":"text"},{"content":"macOS","type":"text"},{"content":"Windows","type":"text"},{"content":"Linux","type":"text"}],"h3":[{"content":"Initialize updater and check if a new version is available","type":"text"},{"content":"Listen New Update Available","type":"text"},{"content":"Emit Install and Download","type":"text"},{"content":"Listen Install Progress","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["js","json","none","bash"],"otherSymbols":["text","inlineCode","link","em","image","strong","h4"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/utils/multiwindow.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/utils/multiwindow.json deleted file mode 100644 index ac2f3fc..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/utils/multiwindow.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"multiwindow.md","filepath":"docs/usage/guides/utils","hash":42,"frontmatter":{"title":"Multiwindow"},"text":"\nManage multiple windows on a single application.\n","h1":[],"h2":[],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/icons.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/icons.json deleted file mode 100644 index 7770eb8..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/icons.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"icons.md","filepath":"docs/usage/guides/visual","hash":42,"frontmatter":{"title":"Icons"},"text":"\nimport Command from '@theme/Command'\nimport Alert from '@theme/Alert'\n\nTauri ships with a default iconset based on its logo. This is probably NOT what you want when you ship your application. To remedy this common situation, Tauri provides the `icon` command that will take an input file and create all the icons needed for the various platforms:\n\n\n\n```sh\nOptions\n --help, -h Displays this message\n --log, l Logging [boolean]\n --icon, i Source icon (png, 1240x1240 with transparency)\n --target, t Target folder (default: 'src-tauri/icons')\n --compression, c Compression type [pngquant|optipng|zopfli]\n```\n\nThese will be placed in your `src-tauri/icons` folder where they will automatically be included in your built app.\n\nIf you need to source your icons from some other location, you can edit this part of the `src-tauri/tauri.conf.json` file:\n\n```json\n{\n \"tauri\": {\n \"bundle\": {\n \"icon\": [\n \"icons/32x32.png\",\n \"icons/128x128.png\",\n \"icons/128x128@2x.png\",\n \"icons/icon.icns\",\n \"icons/icon.ico\"\n ]\n }\n }\n}\n```\n\n\n\n - icon.icns = macOS\n - icon.ico = MS Windows\n - \\*.png = Linux\n\n\n","h1":[],"h2":[],"h3":[],"hasCodeBlock":true,"programmingLanguages":["sh","json"],"otherSymbols":["text","inlineCode","list"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/menu.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/menu.json deleted file mode 100644 index ea6b24c..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/menu.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"menu.md","filepath":"docs/usage/guides/visual","hash":42,"frontmatter":{"title":"Window Menu"},"text":"\nNative application menus can be attached to a window.\n\n### Creating a menu\n\nTo create a native window menu, import the `Menu`, `Submenu`, `MenuItem` and `CustomMenuItem` types.\nThe `MenuItem` enum contains a collection of platform-specific items (currently not implemented on Windows).\nThe `CustomMenuItem` allows you to create your own menu items and add special functionality to them.\n\n```rust\nuse tauri::{CustomMenuItem, Menu, MenuItem, Submenu};\n```\n\nCreate a `Menu` instance:\n\n```rust\n// here `\"quit\".to_string()` defines the menu item id, and the second parameter is the menu item label.\nlet quit = CustomMenuItem::new(\"quit\".to_string(), \"Quit\");\nlet close = CustomMenuItem::new(\"close\".to_string(), \"Close\");\nlet submenu = Submenu::new(\"File\", Menu::new().add_item(quit).add_item(close));\nlet menu = Menu::new()\n .add_native_item(MenuItem::Copy)\n .add_item(CustomMenuItem::new(\"hide\", \"Hide\"))\n .add_submenu(submenu);\n```\n\n### Adding the menu to all windows\n\nThe defined menu can be set to all windows using the `menu` API on the `tauri::Builder` struct:\n\n```rust\nuse tauri::{CustomMenuItem, Menu, MenuItem, Submenu};\n\nfn main() {\n let menu = Menu::new(); // configure the menu\n tauri::Builder::default()\n .menu(menu)\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n### Adding the menu to a specific window\n\nYou can create a window and set the menu to be used. This allows defining a specific menu set for each application window.\n\n```rust\nuse tauri::{CustomMenuItem, Menu, MenuItem, Submenu};\nuse tauri::WindowBuilder;\n\nfn main() {\n let menu = Menu::new(); // configure the menu\n tauri::Builder::default()\n .create_window(\n \"main-window\".to_string(),\n tauri::WindowUrl::App(\"index.html\".into()),\n move |window_builder, webview_attributes| {\n (window_builder.menu(menu), webview_attributes)\n },\n )\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n### Listening to events on custom menu items\n\nEach `CustomMenuItem` triggers an event when clicked. Use the `on_menu_event` API to handle them, either on the global `tauri::Builder` or on an specific window.\n\n#### Listening to events on global menus\n\n```rust\nuse tauri::{CustomMenuItem, Menu, MenuItem};\n\nfn main() {\n let menu = vec![]; // insert the menu array here\n tauri::Builder::default()\n .menu(menu)\n .on_menu_event(|event| {\n match event.menu_item_id() {\n \"quit\" => {\n std::process::exit(0);\n }\n \"close\" => {\n event.window().close().unwrap();\n }\n _ => {}\n }\n })\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n#### Listening to events on window menus\n\n```rust\nuse tauri::{CustomMenuItem, Menu, MenuItem};\nuse tauri::{Manager, WindowBuilder};\n\nfn main() {\n let menu = vec![]; // insert the menu array here\n tauri::Builder::default()\n .create_window(\n \"main-window\".to_string(),\n tauri::WindowUrl::App(\"index.html\".into()),\n move |window_builder, webview_attributes| {\n (window_builder.menu(menu), webview_attributes)\n },\n )\n .setup(|app| {\n let window = app.get_window(\"main-window\").unwrap();\n let window_ = window.clone();\n window.on_menu_event(move |event| {\n match event.menu_item_id().as_str() {\n \"quit\" => {\n std::process::exit(0);\n }\n \"close\" => {\n window_.close().unwrap();\n }\n _ => {}\n }\n });\n Ok(())\n })\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n### Updating menu items\n\nThe `Window` struct has a `menu_handle` method, which allows updating menu items:\n\n```rust\nfn main() {\n tauri::Builder::default()\n .setup(|app| {\n let main_window = app.get_window(\"main\").unwrap();\n let menu_handle = main_window.menu_handle();\n std::thread::spawn(move || {\n // you can also `set_selected`, `set_enabled` and `set_native_image` (macOS only).\n menu_handle.get_item(\"item_id\").set_title(\"New title\");\n })\n Ok(())\n })\n}\n```\n","h1":[],"h2":[],"h3":[{"content":"Creating a menu","type":"text"},{"content":"Adding the menu to all windows","type":"text"},{"content":"Adding the menu to a specific window","type":"text"},{"content":"Listening to events on custom menu items","type":"text"},{"content":"Updating menu items","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["rust"],"otherSymbols":["text","inlineCode","h4"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/splashscreen.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/splashscreen.json deleted file mode 100644 index edba4c1..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/splashscreen.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"splashscreen.md","filepath":"docs/usage/guides/visual","hash":42,"frontmatter":{"title":"Splashscreen"},"text":"\nimport Link from '@docusaurus/Link'\n\nIf your webpage could take some time to load, or if you need to run an initialization procedure in Rust before displaying your main window, a splashscreen could improve the loading experience for the user.\n\n### Setup\n\nFirst, create a `splashscreen.html` in your `distDir` that contains the HTML code for a splashscreen. Then, update your `tauri.conf.json` like so:\n\n```diff\n\"windows\": [\n {\n \"title\": \"Tauri App\",\n \"width\": 800,\n \"height\": 600,\n \"resizable\": true,\n \"fullscreen\": false,\n+ \"visible\": false // Hide the main window by default\n },\n // Add the splashscreen window\n+ {\n+ \"width\": 400,\n+ \"height\": 200,\n+ \"decorations\": false,\n+ \"url\": \"splashscreen.html\",\n+ \"label\": \"splashscreen\"\n+ }\n]\n```\n\nNow, your main window will be hidden and the splashscreen window will show when your app is launched. Next, you'll need a way to close the splashscreen and show the main window when your app is ready. How you do this depends on what you are waiting for before closing the splashscreen.\n\n### Waiting for Webpage\n\nIf you are waiting for your web code, you'll want to create a `close_splashscreen` [command](../command.md).\n\n```rust title=src-tauri/main.rs\nuse tauri::Manager;\n// Create the command:\n#[tauri::command]\nfn close_splashscreen(window: tauri::Window) {\n // Close splashscreen\n if let Some(splashscreen) = window.get_window(\"splashscreen\") {\n splashscreen.close().unwrap();\n }\n // Show main window\n window.get_window(\"main\").unwrap().show().unwrap();\n}\n\n// Register the command:\nfn main() {\n tauri::Builder::default()\n // Add this line\n .invoke_handler(tauri::generate_handler![close_splashscreen])\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n\n```\n\nThen, you can call it from your JS:\n\n```js\n// With the Tauri API npm package:\nimport { invoke } from '@tauri-apps/api/tauri'\n// With the Tauri global script:\nconst invoke = window.__TAURI__.invoke\n\ndocument.addEventListener('DOMContentLoaded', () => {\n // This will wait for the window to load, but you could\n // run this function on whatever trigger you want\n invoke('close_splashscreen')\n})\n```\n\n### Waiting for Rust\n\nIf you are waiting for Rust code to run, put it in the `setup` function handler so you have access to the `App` instance:\n\n```rust title=src-tauri/main.rs\nuse tauri::Manager;\nfn main() {\n tauri::Builder::default()\n .setup(|app| {\n let splashscreen_window = app.get_window(\"splashscreen\").unwrap();\n let main_window = app.get_window(\"main\").unwrap();\n // we perform the initialization code on a new task so the app doesn't freeze\n tauri::async_runtime::spawn(async move {\n // initialize your app here instead of sleeping :)\n println!(\"Initializing...\");\n std::thread::sleep(std::time::Duration::from_secs(2));\n println!(\"Done initializing.\");\n\n // After it's done, close the splashscreen and display the main window\n splashscreen_window.close().unwrap();\n main_window.show().unwrap();\n });\n Ok(())\n })\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n```\n","h1":[],"h2":[],"h3":[{"content":"Setup","type":"text"},{"content":"Waiting for Webpage","type":"text"},{"content":"Waiting for Rust","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["diff",null],"otherSymbols":["text","inlineCode","link"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/system-tray.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/system-tray.json deleted file mode 100644 index dcb4953..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/system-tray.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"system-tray.md","filepath":"docs/usage/guides/visual","hash":42,"frontmatter":{"title":"System Tray"},"text":"\nNative application system tray.\n\n### Setup\n\nConfigure the `systemTray` object on `tauri.conf.json`:\n\n```json\n{\n \"tauri\": {\n \"systemTray\": {\n \"iconPath\": \"icons/icon.png\",\n \"iconAsTemplate\": true,\n }\n }\n}\n```\n\nThe `iconPath` is pointed to a PNG file on macOS and Linux, and a `.ico` file must exist for Windows support.\n\nThe `iconAsTemplate` is a boolean value that determines whether the image represents a [template](https://developer.apple.com/documentation/appkit/nsimage/1520017-template?language=objc) image on macOS.\n\n\n### Creating a system tray\n\nTo create a native system tray, import the `SystemTray` type:\n\n```rust\nuse tauri::SystemTray;\n```\n\nInitialize a new tray instance:\n\n```rust\nlet tray = SystemTray::new();\n```\n\n### Configuring a system tray context menu\n\nOptionally you can add a context menu that is visible when the tray icon is right clicked. Import the `SystemTrayMenu`, `SystemTrayMenuItem` and `CustomMenuItem` types:\n\n```rust\nuse tauri::{CustomMenuItem, SystemTrayMenu, SystemTrayMenuItem};\n```\n\nCreate the `SystemTrayMenu`:\n\n```rust\n// here `\"quit\".to_string()` defines the menu item id, and the second parameter is the menu item label.\nlet quit = CustomMenuItem::new(\"quit\".to_string(), \"Quit\");\nlet hide = CustomMenuItem::new(\"hide\".to_string(), \"Hide\");\nlet tray_menu = SystemTrayMenu::new()\n .add_item(quit)\n .add_native_item(SystemTrayMenuItem::Separator)\n .add_item(hide);\n```\n\nAdd the tray menu to the `SystemTray` instance:\n\n```rust\nlet tray = SystemTray::new().with_menu(tray_menu);\n```\n\n### Configure the app system tray\n\nThe created `SystemTray` instance can be set using the `system_tray` API on the `tauri::Builder` struct:\n\n```rust\nuse tauri::{CustomMenuItem, SystemTray, SystemTrayMenu};\n\nfn main() {\n let tray_menu = SystemTrayMenu::new(); // insert the menu items here\n let system_tray = SystemTray::new()\n .with_menu(tray_menu);\n tauri::Builder::default()\n .system_tray(system_tray)\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n### Listening to system tray events\n\nEach `CustomMenuItem` triggers an event when clicked.\nAlso, Tauri emits tray icon click events.\nUse the `on_system_tray_event` API to handle them:\n\n```rust\nuse tauri::{CustomMenuItem, SystemTray, SystemTrayMenu};\nuse tauri::Manager;\n\nfn main() {\n let tray_menu = SystemTrayMenu::new(); // insert the menu items here\n tauri::Builder::default()\n .system_tray(SystemTray::new().with_menu(tray_menu))\n .on_system_tray_event(|app, event| match event {\n SystemTrayEvent::LeftClick {\n position: _,\n size: _,\n ..\n } => {\n println!(\"system tray received a left click\");\n }\n SystemTrayEvent::RightClick {\n position: _,\n size: _,\n ..\n } => {\n println!(\"system tray received a right click\");\n }\n SystemTrayEvent::DoubleClick {\n position: _,\n size: _,\n ..\n } => {\n println!(\"system tray received a double click\");\n }\n SystemTrayEvent::MenuItemClick { id, .. } => {\n match id.as_str() {\n \"quit\" => {\n std::process::exit(0);\n }\n \"hide\" => {\n let window = app.get_window(\"main\").unwrap();\n window.hide().unwrap();\n }\n _ => {}\n }\n }\n _ => {}\n })\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n### Updating system tray\n\nThe `AppHandle` struct has a `tray_handle` method, which returns a handle to the system tray allowing updating tray icon and context menu items:\n\n#### Updating context menu items\n\n```rust\nuse tauri::{CustomMenuItem, SystemTray, SystemTrayMenu};\nuse tauri::Manager;\n\nfn main() {\n let tray_menu = SystemTrayMenu::new(); // insert the menu items here\n tauri::Builder::default()\n .system_tray(SystemTray::new().with_menu(tray_menu))\n .on_system_tray_event(|app, event| match event {\n SystemTrayEvent::MenuItemClick { id, .. } => {\n // get a handle to the clicked menu item\n // note that `tray_handle` can be called anywhere,\n // just get a `AppHandle` instance with `app.handle()` on the setup hook\n // and move it to another function or thread\n let item_handle = app.tray_handle().get_item(&id);\n match id.as_str() {\n \"hide\" => {\n let window = app.get_window(\"main\").unwrap();\n window.hide().unwrap();\n // you can also `set_selected`, `set_enabled` and `set_native_image` (macOS only).\n item_handle.set_title(\"Show\").unwrap();\n }\n _ => {}\n }\n }\n _ => {}\n })\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n#### Updating tray icon\n\nNote that `tauri::Icon` must be a `Path` variant on Linux, and `Raw` variant on Windows and macOS.\n\n```rust\napp.tray_handle().set_icon(tauri::Icon::Raw(include_bytes!(\"../path/to/myicon.ico\"))).unwrap();\n```\n","h1":[],"h2":[],"h3":[{"content":"Setup","type":"text"},{"content":"Creating a system tray","type":"text"},{"content":"Configuring a system tray context menu","type":"text"},{"content":"Configure the app system tray","type":"text"},{"content":"Listening to system tray events","type":"text"},{"content":"Updating system tray","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["json","rust"],"otherSymbols":["text","inlineCode","link","h4"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/window-customization.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/window-customization.json deleted file mode 100644 index 1f50c03..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/visual/window-customization.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"window-customization.md","filepath":"docs/usage/guides/visual","hash":42,"frontmatter":{"title":"Window Customization"},"text":"\nTauri provides lots of options for customizing the look and feel of your app's window. You can create custom titlebars, have transparent windows, enforce size constraints, and more.\n\n## Configuration\n\nThere are three ways to change the window configuration:\n\n- [Through tauri.conf.json](https://tauri.studio/en/docs/api/config/#tauri.windows)\n- [Through the JS API](https://tauri.studio/en/docs/api/js/classes/window.windowmanager)\n- [Through the Window in Rust](https://tauri.studio/en/docs/api/rust/tauri/window/struct.window)\n\n## Creating a Custom Titlebar\n\nA common use of these window features is creating a custom titlebar. This short tutorial will guide you through that process.\n\n### CSS\n\nYou'll need to add some CSS for the titlebar to keep it at the top of the screen and style the buttons:\n\n```css\n.titlebar {\n height: 30px;\n background: #329ea3;\n user-select: none;\n display: flex;\n justify-content: flex-end;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n.titlebar-button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: 30px;\n height: 30px;\n}\n.titlebar-button:hover {\n background: #5bbec3;\n}\n```\n\n### HTML\n\nNow, you'll need to add the HTML for the titlebar. Put this at the top of your `` tag:\n\n```html\n
\n
\n \n
\n
\n \n
\n
\n \"close\"\n
\n
\n```\n\nNote that you may need to move the rest of your content down so that the titlebar doesn't cover it.\n\n### JS\n\nFinally, you'll need to make the buttons work:\n\n\n```js\nimport { appWindow } from '@tauri-apps/api/window'\ndocument\n .getElementById('titlebar-minimize')\n .addEventListener('click', () => appWindow.minimize())\ndocument\n .getElementById('titlebar-maximize')\n .addEventListener('click', () => appWindow.toggleMaximize())\ndocument\n .getElementById('titlebar-close')\n .addEventListener('click', () => appWindow.close())\n```\n","h1":[],"h2":[{"content":"Configuration","type":"text"},{"content":"Creating a Custom Titlebar","type":"text"}],"h3":[{"content":"CSS","type":"text"},{"content":"HTML","type":"text"},{"content":"JS","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["css","html","js"],"otherSymbols":["text","list","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/ci.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/ci.json deleted file mode 100644 index 45d53ba..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/ci.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"ci.md","filepath":"docs/usage/guides/webdriver","hash":42,"frontmatter":{"title":"Continuous Integration"},"text":"\nUtilizing Linux and some programs to create a fake display, it is possible to run [WebDriver] tests with\n[`tauri-driver`] on your CI. The following example will use the [WebdriverIO] example we [previously built together] and\nGitHub Actions.\n\nThis means the following assumptions:\n\n1. The Tauri application is in the repository root and the binary builds when running `cargo build --release`.\n2. The [WebDriverIO] test runner is in the `webdriver/webdriverio` directory and runs when `yarn test` is used in that\n directory.\n\nThe following is a commented GitHub Actions workflow file at `.github/workflows/webdriver.yml`\n\n```yaml\n# run this action when the repository is pushed to\non: [ push ]\n\n# the name of our workflow\nname: WebDriver\n\njobs:\n # a single job named test\n test:\n # the display name the test job\n name: WebDriverIO Test Runner\n\n # we want to run on the latest linux environment\n runs-on: ubuntu-latest\n\n # the steps our job runs **in order**\n steps:\n # checkout the code on the workflow runner\n - uses: actions/checkout@v2\n\n # install system dependencies that Tauri needs to compile on Linux.\n # note the extra dependencies for `tauri-driver` to run which are `webkit2gtk-driver` and `xvfb`\n - name: Tauri dependencies\n run: >-\n sudo apt-get update &&\n sudo apt-get install -y\n libgtk-3-dev\n libgtksourceview-3.0-dev\n webkit2gtk-4.0\n libappindicator3-dev\n webkit2gtk-driver\n xvfb\n\n # install the latest Rust stable\n - name: Rust stable\n uses: actions-rs/toolchain@v1\n with:\n toolchain: stable\n\n # we run our rust tests before the webdriver tests to avoid testing a broken application\n - name: Cargo test\n uses: actions-rs/cargo@v1\n with:\n command: test\n\n # build a release build of our application to be used during our WebdriverIO tests\n - name: Cargo build\n uses: actions-rs/cargo@v1\n with:\n command: build\n args: --release\n\n # install the latest stable node version at the time of writing\n - name: Node v16\n uses: actions/setup-node@v1\n with:\n node-version: 16.x\n\n # install our Node.js dependencies with Yarn\n - name: Yarn install\n run: yarn install\n working-directory: webdriver/webdriverio\n\n # install the latest version of `tauri-driver`.\n # note: the tauri-driver version is independent of any other Tauri versions\n - name: Install tauri-driver\n uses: actions-rs/cargo@v1\n with:\n command: install\n args: tauri-driver\n\n # run the WebdriverIO test suite.\n # we run it through `xvfb-run` (the dependency we installed earlier) to have a fake\n # display server which allows our application to run headless without any changes to the code\n - name: WebdriverIO\n run: xvfb-run yarn test\n working-directory: webdriver/webdriverio\n```\n\n[WebDriver]: https://www.w3.org/TR/webdriver/\n[`tauri-driver`]: https://crates.io/crates/tauri-driver\n[WebdriverIO]: https://webdriver.io/\n[previously built together]: example/webdriverio\n","h1":[],"h2":[],"h3":[],"hasCodeBlock":true,"programmingLanguages":["yaml"],"otherSymbols":["text","inlineCode","list","def"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/example/selenium.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/example/selenium.json deleted file mode 100644 index 0fade97..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/example/selenium.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"selenium.md","filepath":"docs/usage/guides/webdriver/example","hash":42,"frontmatter":{"title":"Selenium"},"text":"import Alert from '@theme/Alert'\nimport Tabs from '@theme/Tabs'\nimport TabItem from '@theme/TabItem'\n\n\n\nThis [Selenium] guide expects you to have already gone through the [example Application setup] in order to follow\nstep-by-step. The general information may still be useful otherwise.\n\n\nThis WebDriver testing example will use [Selenium] and a popular Node.js testing suite. It is expected to already have\nNode.js installed, along with `npm` or `yarn` although the [finished example project] uses `yarn`.\n\n## Create a Directory for the Tests\n\nLet's start off by creating a space in our project to write these tests. We are going to be using a nested directory for\nthis example project as we will later also go over other frameworks, but typically you will only need to use one. Create\nthe directory we will use with `mkdir -p webdriver/selenium`. The rest of this guide will assume you are inside the\n`webdriver/selenium` directory.\n\n## Initializing a Selenium Project\n\nWe will be using a pre-existing `package.json` to bootstrap this test suite because we have already chosen specific\ndependencies to use and want to showcase a simple working solution. The bottom of this section has a collapsed\nguide on how to set it up from scratch.\n\n`package.json`:\n```json\n{\n \"name\": \"selenium\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"scripts\": {\n \"test\": \"mocha\"\n },\n \"dependencies\": {\n \"chai\": \"^4.3.4\",\n \"mocha\": \"^9.0.3\",\n \"selenium-webdriver\": \"^4.0.0-beta.4\"\n }\n}\n```\n\nWe have a script which runs [Mocha] as a test framework exposed as the `test` command. We also have various dependencies\nthat we will be using to run the tests. [Mocha] as the testing framework, [Chai] as the assertion library, and\n[`selenium-webdriver`] which is the Node.js [Selenium] package.\n\n
Click me if you want to see how to set a project up from scratch\n\nIf you wanted to install the dependencies from scratch, just run the following command.\n\n\n\n\n```sh\nnpm install mocha chai selenium-webdriver\n```\n\n\n\n\n\n```sh\nyarn add mocha chai selenium-webdriver\n```\n\n\n\n\nI suggest also adding a `\"test\": \"mocha\"` item in the `package.json` `\"scripts\"` key so that running mocha can be called\nsimply with\n\n\n\n\n```sh\nnpm test\n```\n\n\n\n\n\n```sh\nyarn test\n```\n\n\n\n\n
\n\n## Testing\n\nUnlike the [WebdriverIO Test Suite](webdriverio#config), Selenium does not come out of the box with a Test Suite and\nleaves it up to the developer to build those out. We chose [Mocha] which is pretty neutral, and not related to WebDrivers\nat all, so our script will need to do a bit of work to set up everything for us in the right order. [Mocha] expects a\ntesting file at `test/test.js` by default, so let's create that file now.\n\n`test/test.js`:\n```js\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst { expect } = require(\"chai\");\nconst { spawn, spawnSync } = require(\"child_process\");\nconst { Builder, By, Capabilities } = require(\"selenium-webdriver\");\n\n// create the path to the expected application binary\nconst application = path.resolve(\n __dirname,\n \"..\",\n \"..\",\n \"..\",\n \"target\",\n \"release\",\n \"hello-tauri-webdriver\"\n);\n\n// keep track of the webdriver instance we create\nlet driver;\n\n// keep track of the tauri-driver process we start\nlet tauriDriver;\n\nbefore(async function() {\n // set timeout to 2 minutes to allow the program to build if it needs to\n this.timeout(120000)\n\n // ensure the program has been built\n spawnSync(\"cargo\", [\"build\", \"--release\"]);\n\n // start tauri-driver\n tauriDriver = spawn(\n path.resolve(os.homedir(), \".cargo\", \"bin\", \"tauri-driver\"),\n [],\n { stdio: [null, process.stdout, process.stderr] }\n );\n\n const capabilities = new Capabilities();\n capabilities.set(\"tauri:options\", { application });\n capabilities.setBrowserName(\"wry\");\n\n // start the webdriver client\n driver = await new Builder()\n .withCapabilities(capabilities)\n .usingServer(\"http://localhost:4444/\")\n .build();\n});\n\nafter(async function() {\n // stop the webdriver session\n await driver.quit();\n\n // kill the tauri-driver process\n tauriDriver.kill();\n});\n\ndescribe(\"Hello Tauri\", () => {\n it(\"should be cordial\", async () => {\n const text = await driver.findElement(By.css(\"body > h1\")).getText();\n expect(text).to.match(/^[hH]ello/);\n });\n\n it(\"should be excited\", async () => {\n const text = await driver.findElement(By.css(\"body > h1\")).getText();\n expect(text).to.match(/!$/);\n });\n\n it(\"should be easy on the eyes\", async () => {\n // selenium returns color css values as rgb(r, g, b)\n const text = await driver.findElement(By.css(\"body\")).getCssValue(\"background-color\");\n\n const rgb = text.match(/^rgb\\((?\\d+), (?\\d+), (?\\d+)\\)$/).groups;\n expect(rgb).to.have.all.keys('r','g','b');\n\n const luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b ;\n expect(luma).to.be.lessThan(100)\n });\n});\n```\n\nIf you are familiar with JS testing frameworks, `describe`, `it`, and `expect` should look familiar. We also have\nsemi-complex `before()` and `after()` callbacks to setup and teardown mocha. Lines that are not the tests themselves\nhave comments explaining what the setup and teardown code is doing. If you were familiar with the Spec file from the\n[WebdriverIO example](webdriverio#spec), you will notice a lot more code that isn't tests, as we have to set up a few\nmore WebDriver related items.\n\n## Running the Test Suite\n\nNow that we are all set up with our dependencies and our test script, lets run it!\n\n\n\n\n```sh\nnpm test\n```\n\n\n\n\n\n```sh\nyarn test\n```\n\n\n\n\nWe should see output the following output:\n\n```text\n➜ selenium git:(main) ✗ yarn test\nyarn run v1.22.11\n$ mocha\n\n\n Hello Tauri\n ✔ should be cordial (120ms)\n ✔ should be excited\n ✔ should be easy on the eyes\n\n\n 3 passing (588ms)\n\nDone in 0.93s.\n```\n\nWe can see that our `Hello Tauri` sweet we created with `decribe` had all 3 items we created with `it` pass their\ntests!\n\nWith [Selenium] and some hooking up to a test suite, we just enabled e2e testing without modifying our Tauri\napplication at all!\n\n\n[Selenium]: https://selenium.dev/\n[finished example project]: https://github.com/chippers/hello_tauri\n[example Application setup]: setup\n[Mocha]: https://mochajs.org/\n[Chai]: https://www.chaijs.com/\n[`selenium-webdriver`]: https://www.npmjs.com/package/selenium-webdriver\n","h1":[],"h2":[{"content":"Create a Directory for the Tests","type":"text"},{"content":"Initializing a Selenium Project","type":"text"},{"content":"Testing","type":"text"},{"content":"Running the Test Suite","type":"text"}],"h3":[],"hasCodeBlock":true,"programmingLanguages":["sh",null,"text"],"otherSymbols":["text","inlineCode","link","def"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/example/setup.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/example/setup.json deleted file mode 100644 index 213e2c8..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/example/setup.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"setup.md","filepath":"docs/usage/guides/webdriver/example","hash":42,"frontmatter":{"title":"Setup Example"},"text":"\nimport HelloTauriWebdriver from '@site/static/img/webdriver/hello-tauri-webdriver.png'\n\nThis example application is going to solely focus on adding WebDriver testing to an already existing project. To have a\nproject to test on in the next two sections, we are going to set up an extremely minimal Tauri application for use in\nour testing. We will not use the Tauri CLI, any frontend dependencies or build steps, and not be bundling the\napplication afterwards. This is to showcase exactly a minimal suite to show off adding WebDriver testing to an existing\napplication.\n\nIf you just want to see the finished example project that utilizes what will be shown in this example guide, then you\ncan see https://github.com/chippers/hello_tauri.\n\n## Initializing a Cargo Project\n\nWe want to create a new binary Cargo project to house this example application. We can easily do this from the command\nline with `cargo new hello-tauri-webdriver --bin` which will scaffold a minimal binary Cargo project for us. This\ndirectory will serve as the working directory for the rest of this guide, so make sure commands you run are inside this\nnew `hello-tauri-webdriver/` directory.\n\n## Creating a Minimal Frontend\n\nWe will create a minimal HTML file to act as the frontend to our example application. We will also be using a few things\nfrom this frontend later during our WebDriver tests.\n\nFirst, let's create our Tauri `distDir` that we know we will need once building the Tauri portion of the application.\n`mkdir dist` should create a new directory called `dist/` in which we will be placing the following `index.html` file.\n\n`dist/index.html`:\n\n```html\n\n\n\n \n Hello Tauri!\n \n\n\n

Hello, Tauri!

\n\n\n```\n\n## Adding Tauri to the Cargo Project\n\nNext, we will add some necessary items to make our Cargo project into a Tauri project. First, is adding the dependencies\nto the Cargo Manifest (`Cargo.toml`) so that Cargo knows to pull in our dependencies while building.\n\n`Cargo.toml`:\n\n```toml\n[package]\nname = \"hello-tauri-webdriver\"\nversion = \"0.1.0\"\nedition = \"2018\"\n\n# Needed to set up some things for Tauri at build time\n[build-dependencies]\ntauri-build = \"1.0.0-beta.4\"\n\n# The actual Tauri dependency, along with `custom-protocol` to serve the pages.\n[dependencies]\ntauri = { version = \"1.0.0-beta.6\", features = [\"custom-protocol\"] }\n\n# Make --release build a binary that is small (opt-level = \"s\") and fast (lto = true).\n# This is completely optional, but shows that testing the application as close to the\n# typical release settings is possible. Note: this will slow down compilation.\n[profile.release]\nincremental = false\ncodegen-units = 1\npanic = \"abort\"\nopt-level = \"s\"\nlto = true\n```\n\nAs you may have noticed, we added a `[build-dependency]`. To use the build dependency, we must use it from a build\nscript. We will create one now at `build.rs`.\n\n`build.rs`:\n\n```rust\nfn main() {\n // Only watch the `dist/` directory for recompiling, preventing unnecessary\n // changes when we change files in other project subdirectories.\n println!(\"cargo:rerun-if-changed=dist\");\n\n // Run the Tauri build-time helpers\n tauri_build::build()\n}\n```\n\nWith all that setup, our Cargo Project now knows how to pull in and build our Tauri dependencies. Let's finish making\nthis minimal example a Tauri application by setting up Tauri in the actual project code. We will be editing\nthe `src/main.rs`\nfile to add this Tauri functionality.\n\n`src/main.rs`:\n\n```rust\nfn main() {\n tauri::Builder::default()\n .run(tauri::generate_context!())\n .expect(\"unable to run Tauri application\");\n}\n```\n\nPretty simple, right?\n\n## Tauri Configuration\n\nWe are going to need 2 things to successfully build the application. First, we need an icon file. You can use any PNG\nfor this next part and copy it into `icon.png`. Typically, this will be provided as part of the scaffolding when you use\nthe Tauri CLI to create a project. To get the default Tauri icon, we can download the icon used by the Hello Tauri\nexample repository with the\ncommand `curl -L \"https://github.com/chippers/hello_tauri/raw/main/icon.png\" --output icon.png`.\n\nThe second thing we will need is a `tauri.conf.json` to specify some important configuration values to Tauri. Again,\nthis would typically come from the `tauri init` scaffolding command, but we will be creating our own minimal config\nhere.\n\n`tauri.conf.json`:\n\n```json\n{\n \"build\": {\n \"distDir\": \"dist\"\n },\n \"tauri\": {\n \"bundle\": {\n \"identifier\": \"studio.tauri.hello_tauri_webdriver\",\n \"icon\": [\n \"icon.png\"\n ]\n },\n \"allowlist\": {\n \"all\": false\n },\n \"windows\": [\n {\n \"width\": 800,\n \"height\": 600,\n \"resizable\": true,\n \"fullscreen\": false\n }\n ]\n }\n}\n```\n\nI'll go over some of these. You can see the `dist/` directory we created earlier specified as the `distDir` property. We\nset a bundle identifier so that the built application has a unique id, along with setting the `icon.png` as the only\nicon. We aren't using any Tauri apis or features, so we just disable all them in `allowlist` by setting `\"all\": false`.\nThe window values just sets a single window to be created with some reasonable default values.\n\nAt this point, we have a basic Hello World application that when ran, should display a simple greeting.\n\n## Running the Example Application\n\nTo make sure we did it right, let's build this application! We will run this as a `--release` application because we\nwill also run our WebDriver tests with a release profile. Run `cargo run --release` and after some compiling we should\nsee the following application pop up.\n\n
\n \n
\n\n_Note: If you are modifying the application and want to use the Devtools, then run it without `--release` and \"Inspect\nElement\" should be available in the right click menu._\n\nWe should now be ready to start testing this application with some WebDriver frameworks. This guide will go over both\n[WebdriverIO](webdriverio) and [Selenium](selenium) in that order.","h1":[],"h2":[{"content":"Initializing a Cargo Project","type":"text"},{"content":"Creating a Minimal Frontend","type":"text"},{"content":"Adding Tauri to the Cargo Project","type":"text"},{"content":"Tauri Configuration","type":"text"},{"content":"Running the Example Application","type":"text"}],"h3":[],"hasCodeBlock":true,"programmingLanguages":["html","toml","rust","json"],"otherSymbols":["text","link","inlineCode","em"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/example/webdriverio.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/example/webdriverio.json deleted file mode 100644 index 621dd88..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/example/webdriverio.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"webdriverio.md","filepath":"docs/usage/guides/webdriver/example","hash":42,"frontmatter":{"title":"WebdriverIO"},"text":"import Alert from '@theme/Alert'\nimport Tabs from '@theme/Tabs'\nimport TabItem from '@theme/TabItem'\n\n\n\nThis [WebdriverIO] guide expects you to have already gone through the [example Application setup] in order to follow\nstep-by-step. The general information may still be useful otherwise.\n\n\nThis WebDriver testing example will use [WebdriverIO] and its testing suite. It is expected to already have Node.js\ninstalled, along with `npm` or `yarn` although the [finished example project] uses `yarn`.\n\n## Create a Directory for the Tests\n\nLet's start off by creating a space in our project to write these tests. We are going to be using a nested directory for\nthis example project as we will later also go over other frameworks, but typically you will only need to use one. Create\nthe directory we will use with `mkdir -p webdriver/webdriverio`. The rest of this guide will assume you are inside the\n`webdriver/webdriverio` directory.\n\n## Initializing a WebdriverIO Project\n\nWe will be using a pre-existing `package.json` to bootstrap this test suite because we have already chosen specific\n[WebdriverIO] config options and want to showcase a simple working solution. The bottom of this section has a collapsed\nguide on how to set it up from scratch.\n\n`package.json`:\n```json\n{\n \"name\": \"webdriverio\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"scripts\": {\n \"test\": \"wdio run wdio.conf.js\"\n },\n \"dependencies\": {\n \"@wdio/cli\": \"^7.9.1\"\n },\n \"devDependencies\": {\n \"@wdio/local-runner\": \"^7.9.1\",\n \"@wdio/mocha-framework\": \"^7.9.1\",\n \"@wdio/spec-reporter\": \"^7.9.0\"\n }\n}\n```\n\nWe have a script which runs a [WebdriverIO] config as a test suite exposed as the `test` command. We also have various\ndependencies that were added by the `@wdio/cli` command when we first set it up. In short, these dependencies are for\nthe most simple setup using a local WebDriver runner, [Mocha] as the test framework, and a simple Spec Reporter.\n\n
Click me if you want to see how to set a project up from scratch\n\nThe CLI is interactive, and you may choose the tools to work with yourself. Note that you will likely diverge from\nthe rest of the guide, and need to set up the differences yourself.\n\nLet's add the [WebdriverIO] CLI to this npm project.\n\n\n\n\n```sh\nnpm install @wdio/cli\n```\n\n\n\n\n\n```sh\nyarn add @wdio/cli\n```\n\n\n\n\nTo then run the interactive config command to set up a [WebdriverIO] test suite, you can then run:\n\n\n\n\n```sh\nnpx wdio config\n```\n\n\n\n\n\n```sh\nyarn wdio config\n```\n\n\n\n\n
\n\n## Config\n\nYou may have noticed that the `test` script in our `package.json` mentions a file `wdio.conf.js`. That's the [WebdriverIO]\nconfig file which controls most aspects of our testing suite.\n\n`wdio.conf.js`:\n```js\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst { spawn, spawnSync } = require(\"child_process\");\n\n// keep track of the `tauri-driver` child process\nlet tauriDriver;\n\nexports.config = {\n specs: [\"./test/specs/**/*.js\"],\n maxInstances: 1,\n capabilities: [\n {\n maxInstances: 1,\n \"tauri:options\": {\n application: \"../../target/release/hello-tauri-webdriver\",\n },\n },\n ],\n reporters: [\"spec\"],\n framework: \"mocha\",\n mochaOpts: {\n ui: \"bdd\",\n timeout: 60000,\n },\n\n // ensure the rust project is built since we expect this binary to exist for the webdriver sessions\n onPrepare: () => spawnSync(\"cargo\", [\"build\", \"--release\"]),\n\n // ensure we are running `tauri-driver` before the session starts so that we can proxy the webdriver requests\n beforeSession: () =>\n (tauriDriver = spawn(\n path.resolve(os.homedir(), \".cargo\", \"bin\", \"tauri-driver\"),\n [],\n { stdio: [null, process.stdout, process.stderr] }\n )),\n\n // clean up the `tauri-driver` process we spawned at the start of the session\n afterSession: () => tauriDriver.kill(),\n};\n```\n\nIf you are interested in the properties on `exports.config` object, then I [suggest reading the documentation] for it.\nFor non-WDIO specific items, there are comments explaining why we are running commands in `onPrepare`, `beforeSession`,\nand `afterSession`. We also have our specs set to `\"./test/specs/**/*.js\"`, so let's create a spec now.\n\n## Spec\n\nA spec contains the code that is testing your actual application. The test runner will load these specs and automatically\nrun them as it sees fit. Let's create our spec now in the directory we specified.\n\n`test/specs/example.e2e.js`:\n```js\n// calculates the luma from a hex color `#abcdef`\nfunction luma(hex) {\n if (hex.startsWith(\"#\")) {\n hex = hex.substring(1);\n }\n\n const rgb = parseInt(hex, 16);\n const r = (rgb >> 16) & 0xff;\n const g = (rgb >> 8) & 0xff;\n const b = (rgb >> 0) & 0xff;\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\ndescribe(\"Hello Tauri\", () => {\n it(\"should be cordial\", async () => {\n const header = await $(\"body > h1\");\n const text = await header.getText();\n expect(text).toMatch(/^[hH]ello/);\n });\n\n it(\"should be excited\", async () => {\n const header = await $(\"body > h1\");\n const text = await header.getText();\n expect(text).toMatch(/!$/);\n });\n\n it(\"should be easy on the eyes\", async () => {\n const body = await $(\"body\");\n const backgroundColor = await body.getCSSProperty(\"background-color\");\n expect(luma(backgroundColor.parsed.hex)).toBeLessThan(100);\n });\n});\n```\n\nThe `luma` function on top is just a helper function for one of our tests and is not related to the actual testing of\nthe application. If you are familiar with other testing frameworks, you may notice similar functions being exposed that\nare used such as `describe`, `it`, and `expect`. The other APIs, such as items like `$` and the methods it exposes is\ncovered by the [WebdriverIO API docs](https://webdriver.io/docs/api).\n\n## Running the Test Suite\n\nNow that we are all set up with a config and a spec, let's run it!\n\n\n\n\n```sh\nnpm test\n```\n\n\n\n\n\n```sh\nyarn test\n```\n\n\n\n\nWe should see output the following output:\n\n```text\n➜ webdriverio git:(main) ✗ yarn test\nyarn run v1.22.11\n$ wdio run wdio.conf.js\n\nExecution of 1 workers started at 2021-08-17T08:06:10.279Z\n\n[0-0] RUNNING in undefined - /test/specs/example.e2e.js\n[0-0] PASSED in undefined - /test/specs/example.e2e.js\n\n \"spec\" Reporter:\n------------------------------------------------------------------\n[wry 0.12.1 linux #0-0] Running: wry (v0.12.1) on linux\n[wry 0.12.1 linux #0-0] Session ID: 81e0107b-4d38-4eed-9b10-ee80ca47bb83\n[wry 0.12.1 linux #0-0]\n[wry 0.12.1 linux #0-0] » /test/specs/example.e2e.js\n[wry 0.12.1 linux #0-0] Hello Tauri\n[wry 0.12.1 linux #0-0] ✓ should be cordial\n[wry 0.12.1 linux #0-0] ✓ should be excited\n[wry 0.12.1 linux #0-0] ✓ should be easy on the eyes\n[wry 0.12.1 linux #0-0]\n[wry 0.12.1 linux #0-0] 3 passing (244ms)\n\n\nSpec Files:\t 1 passed, 1 total (100% completed) in 00:00:01\n\nDone in 1.98s.\n```\n\nWe see the Spec Reporter tell us that all 3 tests from the `test/specs/example.e2e.js` file, along with the final report\n`Spec Files:\t 1 passed, 1 total (100% completed) in 00:00:01`.\n\nUsing the [WebdriverIO] test suite, we just easily enabled e2e testing for our Tauri application from just a few lines\nof configuration and a single command to run it! Even better, we didn't have to modify the application at all.\n\n\n[WebdriverIO]: https://webdriver.io/\n[finished example project]: https://github.com/chippers/hello_tauri\n[example Application setup]: setup\n[Mocha]: https://mochajs.org/\n[suggest reading the documentation]: (https://webdriver.io/docs/configurationfile)\n","h1":[],"h2":[{"content":"Create a Directory for the Tests","type":"text"},{"content":"Initializing a WebdriverIO Project","type":"text"},{"content":"Config","type":"text"},{"content":"Spec","type":"text"},{"content":"Running the Test Suite","type":"text"}],"h3":[],"hasCodeBlock":true,"programmingLanguages":["sh","text"],"otherSymbols":["text","inlineCode","em","link","def"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/introduction.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/introduction.json deleted file mode 100644 index 2c4d2a7..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/guides/webdriver/introduction.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"introduction.md","filepath":"docs/usage/guides/webdriver","hash":42,"frontmatter":{"title":"Introduction"},"text":"import Alert from '@theme/Alert'\n\n\n\nWebdriver support for Tauri is still in pre-alpha. Tooling that is dedicated to it such as [tauri-driver] is still in\nactive development and may change as necessary over time. Additionally, only Windows and Linux are currently supported.\n\n\n[WebDriver] is a standardized interface to interact with web documents that is primarily intended for automated testing.\nTauri supports the [WebDriver] interface by leveraging the native platform's [WebDriver] server underneath a\ncross-platform wrapper [`tauri-driver`].\n\n## System Dependencies\n\nInstall the latest [`tauri-driver`] or update an existing installation by running:\n\n```sh\ncargo install tauri-driver\n```\n\nBecause we currently utilize the platform's native [WebDriver] server, there are some requirements for running\n[`tauri-driver`] on supported platforms. Platform support is currently limited to Linux and Windows.\n\n### Linux\n\nWe use `WebKitWebDriver` on linux platforms. Check if this binary exists already (command `which WebKitWebDriver`) as\nsome distributions bundle it with the regular webkit package. Other platforms may have a separate package for them such\nas `webkit2gtk-driver` on Debian based distributions.\n\n### Windows\n\nMake sure to grab the version of [Microsoft Edge Driver] that matches your Windows' Edge version that the application is\nbeing built and tested on. On up-to-date Window installs, this should almost always be the latest stable version. If the\ntwo versions do not match, you may experience your WebDriver testing suite hanging while trying to connect.\n\nThe download contains a binary called `msedgedriver.exe`. [`tauri-driver`] looks for that binary in the `$PATH` so make\nsure it's either available on the path or use the `--native-driver` option on [`tauri-driver`]. On Windows CI machines,\nyou may want to download this automatically as part of the CI setup process to ensure the Edge and Edge Driver versions\nstay in sync. A guide on how to do this may be added at a later date.\n\n## Example Application\n\nThe [next section](example/setup) of the guide will show step-by-step how to create a minimal example application that\nis tested with WebDriver.\n\nIf you prefer to just see the result of the guide and look over a finished minimal codebase that utilizes it then you\ncan look at https://github.com/chippers/hello_tauri. That example also comes with a CI script to test with GitHub\nactions, but you may still be interested in the [WebDriver CI](ci) guide as it explains the concept a bit more.\n\n[WebDriver]: https://www.w3.org/TR/webdriver/\n[`tauri-driver`]: https://crates.io/crates/tauri-driver\n[tauri-driver]: https://crates.io/crates/tauri-driver\n[Microsoft Edge Driver]: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/\n","h1":[],"h2":[{"content":"System Dependencies","type":"text"},{"content":"Example Application","type":"text"}],"h3":[{"content":"Linux","type":"text"},{"content":"Windows","type":"text"}],"hasCodeBlock":true,"programmingLanguages":["sh"],"otherSymbols":["text","inlineCode","link","def"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/intro.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/intro.json deleted file mode 100644 index 5839ab8..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/intro.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"intro.md","filepath":"docs/usage","hash":42,"frontmatter":{"title":"Introduction"},"text":"\nThis part of the documentation is dedicated to learning how to use Tauri.\n\nTauri provides a [CLI](/docs/api/cli), a Rust API, and a [JavaScript API](/docs/api/js/index) that you can use in your project. Because raw docs can be quite scary to newcomers (especially people who have never played with Rust before), we've created this \"learn by example\" section.\n\nHere you will find guides and techniques to add to your own project in order to fulfill your goals.\n\n## A Step Further\n\n- [Understanding Tauri Patterns](/docs/usage/patterns/about-patterns)\n- [Add Tauri to my existing project](/docs/usage/development/integration)\n- [Tauri Development Cycle](/docs/usage/development/development)\n\n## Guides\n\n- [How to embed custom binaries](/docs/usage/guides/bundler/sidecar)\n- [How to customize app icons](/docs/usage/guides/visual/icons)\n","h1":[],"h2":[{"content":"A Step Further","type":"text"},{"content":"Guides","type":"text"}],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","link","list"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/about-patterns.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/about-patterns.json deleted file mode 100644 index 1641028..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/about-patterns.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"about-patterns.md","filepath":"docs/usage/patterns","hash":42,"frontmatter":{"id":"about-patterns","title":"A word on patterns","sidebar_label":"A word on patterns"},"text":"\nTauri patterns are descriptions of use-cases that are entirely configurable within the `src-tauri/tauri.conf.json` file. These are not the limits of what Tauri can do, and there are probably more out there. If you discover one, why not get in touch and help us update this collection!\n\nIf you haven't read about the general design of Tauri, then it would make the most sense for you to visit the [\"Getting started\"](/docs/getting-started/intro) and become familiar with the basic architecture and terminology used in these patterns. \n","h1":[],"h2":[],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","inlineCode","link"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/bridge.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/bridge.json deleted file mode 100644 index d9b3c63..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/bridge.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"bridge.md","filepath":"docs/usage/patterns","hash":42,"frontmatter":{"title":"Bridge"},"text":"\nimport Rater from '@theme/Rater'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Bridge\"\n
\n
\n Pros:\n
    \n
  • Highly configurable
  • \n
  • No Rust skills required
  • \n
\n Cons:\n
    \n
  • Some WebAPIs unavailable
  • \n
  • Challenge to implement
  • \n
\n
\n
\n\n## Description\n\nThe Bridge recipe is a secure pattern where messages are passed between brokers via an implicit bridge using the API. It isolates functionality to scope and passes messages instead of functionality.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nF\n subgraph WEBVIEW\n F-.-E\n end\n D-->E\n E-->D\n B-->D\n D-->B\n subgraph RUST\n A==>H\n A-->B\n B-.-C\n B-.-G\n end\n A[Binary]\n B{Rust Broker}\n C[Subprocess 2]\n G[Subprocess 1]\n D(( API BRIDGE ))\n E{JS Broker}\n F[Window]\n H{Bootstrap}\n style D fill:#ccc,stroke:#333,stroke-width:4px,color:white\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px`} />\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": { // all API values are default false\n \"all\": false, // use this flag to enable all API features\n \"shell\": {\n \"execute\": false, // enable application execution\n \"open\": false, // open link/path in the default app\n },\n \"fs\": {\n \"listFiles\": false, // list files in a directory\n \"readBinaryFile\": false, // read binary file from local filesystem\n \"readTextFile\": false, // read text file from local filesystem\n \"setTitle\": false, // set the window title\n \"writeFile\": false // write file to local filesystem\n }\n }\n}\n\n```\n","h1":[],"h2":[{"content":"Description","type":"text"},{"content":"Diagram","type":"text"},{"content":"Configuration","type":"text"}],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/cloudbridge.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/cloudbridge.json deleted file mode 100644 index 3397751..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/cloudbridge.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"cloudbridge.md","filepath":"docs/usage/patterns","hash":42,"frontmatter":{"title":"Cloudbridge"},"text":"\nimport Rater from '@theme/Rater'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Cloudbridge\"\n
\n
\n Pros:\n
    \n
  • All available features
  • \n
  • No Rust skills required
  • \n
\n Cons:\n
    \n
  • Largest bundle size
  • \n
  • Hard to separate concerns
  • \n
\n
\n
\n\n## Description\n\nThe Cloudbridge recipe combines the flexibility of a localhost and the security of the bridge. With so many features, it can be easy to get lost.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nF2\n H==>D2\n D2-->F2\n F2-->D2\n B-->D\n D-->B\n E2-->D\n D-->E2\n subgraph WEBVIEW\n F2\n E2\n end\n subgraph SERVER\n D2\n E-->D2\n end\n subgraph RUST\n A==>H\n A-->B\n B-.-C\n end\n A[Binary]\n B{Rust Broker}\n C[Subprocess]\n D(( API BRIDGE ))\n E{JS Broker}\n D2(( localhost ))\n E[bundled resources]\n E2{JS Broker}\n F2[Window]\n H{Bootstrap}\n style D fill:#ccc,stroke:#333,stroke-width:4px,color:white\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px\n style SERVER fill:#49A24A,stroke:#2B6063,stroke-width:4px\n `} />\n\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": {\n \"all\": true // enable entire API\n }\n}\n```\n","h1":[],"h2":[{"content":"Description","type":"text"},{"content":"Diagram","type":"text"},{"content":"Configuration","type":"text"}],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/cloudish.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/cloudish.json deleted file mode 100644 index b1ec2fa..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/cloudish.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"cloudish.md","filepath":"docs/usage/patterns","hash":42,"frontmatter":{"title":"Cloudish"},"text":"\nimport Rater from '@theme/Rater'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Cloudish\"\n
\n
\n Pros:\n
    \n
  • Similar to a SPA web-app
  • \n
  • No Rust skills required
  • \n
\n Cons:\n
    \n
  • No access to Rust API
  • \n
  • Uses a localhost server
  • \n
\n
\n
\n\n## Description\n\nThe Cloudish recipe is a pattern for maximum flexibility and app performance. It uses a localhost server, which means that your app will technically be available to other processes, like browsers and potentially other devices on the network. All of your assets are baked into the binary, but served as if they were distinct files.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nF\n H==>D\n D-->F\n F-->D\n subgraph RUST\n A==>H\n end\n subgraph WEBVIEW\n F\n end\n subgraph SERVER\n D\n E-->D\n end\n A[Binary]\n D(( localhost ))\n E[bundled resources]\n F[Window]\n H{Bootstrap}\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px\n style SERVER fill:#49A24A,stroke:#2B6063,stroke-width:4px`} />\n\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": {\n \"all\": false // disable entire API\n }\n}\n\n```\n","h1":[],"h2":[{"content":"Description","type":"text"},{"content":"Diagram","type":"text"},{"content":"Configuration","type":"text"}],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/glui.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/glui.json deleted file mode 100644 index 33f111f..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/glui.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"glui.md","filepath":"docs/usage/patterns","hash":42,"frontmatter":{"title":"GLUI"},"text":"\nimport Alert from '@theme/Alert'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n\nThis pattern is not available for now.\n\n\nimport Rater from '@theme/Rater'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"GLUI\"\n
\n
\n Pros:\n
    \n
  • Framebuffer FTW
  • \n
  • Window events rigged
  • \n
\n Cons:\n
    \n
  • Broken on your machine
  • \n
\n
\n
\n\n## Description\n\nThe GLUI is a research pattern that we will use internally to test approaches using a GLUTIN window. We’re not sure yet if it will make the final cut as a bona fide alternative to WebView, although early tests with transparent and multiwindow are exciting.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nH\n H==>G\n A-->D\n D-->G\n subgraph GLUTIN\n G\n end\n subgraph RUST\n A\n end\n A[Binary]\n D(Framebuffer)\n G[GL Window]\n H{Bootstrap}\n style GLUTIN stroke:${colors.blue.dark},stroke-width:4px\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px`} />\n\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": { // all API endpoints are default false\n \"all\": false, // disable the api\n },\n \"window\": { // not yet normative\n \"glutin\": true,\n \"webview\": false\n }\n}\n```\n","h1":[],"h2":[{"content":"Description","type":"text"},{"content":"Diagram","type":"text"},{"content":"Configuration","type":"text"}],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/hermit.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/hermit.json deleted file mode 100644 index 9349e88..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/hermit.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"hermit.md","filepath":"docs/usage/patterns","hash":42,"frontmatter":{"title":"Hermit"},"text":"\nimport Rater from '@theme/Rater'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Hermit\"\n
\n
\n Pros:\n
    \n
  • Quick to make
  • \n
  • Smallest size
  • \n
\n Cons:\n
    \n
  • No remote resources
  • \n
  • No access to API
  • \n
\n
\n
\n\n## Description\n\nThe Hermit recipe is a pattern for ultimate application isolation where all logic is self-contained in the Window and the binary exists merely to bootstrap the Window. There is no communication back to Rust from the Window, there is no localhost server, and the Window has no access to any remote resources. The Hermit is great for interactive Kiosk Mode and standalone HTML based games.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nH\n H==>F\n subgraph WEBVIEW\n F\n end\n subgraph RUST\n A\n end\n A[fa:fa-cog Binary ]\n F[fa:fa-window-maximize Window]\n H{Bootstrap}\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px`} />\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n\n```json\n\"tauri\": {\n \"allowlist\": {\n \"all\": false, // disable and tree-shake all api functions\n }\n}\n```\n","h1":[],"h2":[{"content":"Description","type":"text"},{"content":"Diagram","type":"text"},{"content":"Configuration","type":"text"}],"h3":[],"hasCodeBlock":true,"programmingLanguages":["json"],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/lockdown.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/lockdown.json deleted file mode 100644 index 3cfc608..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/lockdown.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"lockdown.md","filepath":"docs/usage/patterns","hash":42,"frontmatter":{"title":"Lockdown"},"text":"\nimport Rater from '@theme/Rater'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Lockdown\"\n
\n
\n Pros:\n
    \n
  • Highest security rating
  • \n
  • Elegant and powerful
  • \n
\n Cons:\n
    \n
  • Rust skills required
  • \n
  • No remote resources
  • \n
\n
\n
\n\n\n## Description\n\nThe Lockdown recipe is a minimal usage of the [Bridge pattern](/docs/usage/patterns/bridge), which only allows interaction between Rust and the Window via expiring JS Promise Closures that are injected into the Window by Rust and nulled as part of the callback.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nF\n G-.->B\n B-->G\n subgraph WEBVIEW\n G-->F\n end\n subgraph RUST\n A-->B\n A==>H\n end\n A[Binary]\n B[API:Event]\n F[Window]\n G((Promise Closure))\n H{Bootstrap}\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px`} />\n\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": {} // all API endpoints are default false\n}\n```\n","h1":[],"h2":[{"content":"Description","type":"text"},{"content":"Diagram","type":"text"},{"content":"Configuration","type":"text"}],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","link","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/multiwin.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/multiwin.json deleted file mode 100644 index d146122..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/docs/usage/patterns/multiwin.json +++ /dev/null @@ -1 +0,0 @@ -{"filename":"multiwin.md","filepath":"docs/usage/patterns","hash":42,"frontmatter":{"title":"Multiwin"},"text":"\nimport Alert from '@theme/Alert'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\nimport Rater from '@theme/Rater'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Multiwin\"\n
\n
\n Pros:\n
    \n
  • Windows can be spawned or destroyed at runtime
  • \n
  • Separation of concerns
  • \n
\n Cons:\n
    \n
  • Somewhat complex
  • \n
\n
\n
\n\n## Description\n\nThe Multiwin recipe will allow you to have multiple windows.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nH\n H==>F\n H==>G\n subgraph WEBVIEW\n F\n end\n subgraph WINIT\n G\n end\n subgraph RUST\n A\n end\n A[Binary]\n F[Window]\n G[Window]\n H{Bootstrap}\n style WINIT stroke:${colors.blue.dark},stroke-width:4px\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px`} />\n\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": {}, // all API endpoints are default false\n \"windows\": [{\n \"title\": \"Window1\",\n \"label\": \"main\",\n }, {\n \"title\": \"Splash\",\n \"label\": \"splashscreen\"\n }]\n}\n\n```\n","h1":[],"h2":[{"content":"Description","type":"text"},{"content":"Diagram","type":"text"},{"content":"Configuration","type":"text"}],"h3":[],"hasCodeBlock":false,"programmingLanguages":[],"otherSymbols":["text","inlineCode"]} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/prose/tauri_dev/documents.json b/packages/tauri-search/src/generated/ast/prose/tauri_dev/documents.json deleted file mode 100644 index 13477f6..0000000 --- a/packages/tauri-search/src/generated/ast/prose/tauri_dev/documents.json +++ /dev/null @@ -1 +0,0 @@ -[{"id":"prose_docs_api_cli_md","title":"CLI","sections":["info","init","dev","deps","build","icon","version","CLI usage"],"subSections":[],"code":[null,"sh"],"text":"\nimport Command from '@theme/Command'\nimport Alert from '@theme/Alert'\n\n\nThe tauri.js cli is composed in TypeScript and published as JavaScript. \n\n## `info`\n\n\n\n```\n Description\n Returns the known state of tauri dependencies and configuration\n```\n\nIt shows a concise list of information about the environment, Rust, Node.js and their versions as well as some relevant configurations.\n\n\nThis command is pretty helpful when you need to have a quick overview of your application. When requesting some help, it can be useful that you share this report with us.\n\n\n## `init`\n\n\n\n```\n Description\n Inits the Tauri template. If Tauri cannot find the src-tauri/tauri.conf.json\n it will create one.\n Usage\n $ tauri init\n Options\n --help, -h Displays this message\n --force, -f Force init to overwrite [conf|template|all]\n --log, -l Logging [boolean]\n --directory, -d Set target directory for init\n --tauriPath, -t Path of the Tauri project to use (relative to the cwd)\n```\n\n## `dev`\n\n\n\n```\n Description\n Tauri dev.\n Usage\n $ tauri dev\n Options\n --help, -h Displays this message\n```\n\nThis command will open the WebView in development mode. It makes use of the `build.devPath` property from your `src-tauri/tauri.conf.json` file.\n\nIf you have entered a command to the `build.beforeDevCommand` property, this one will be executed before the `dev` command.\n\nSee more about the configuration.

\n\n\n\nIf you're not using `build.beforeDevCommand`, make sure your `build.devPath` is correct and, if using a development server, that it's started before using this command.\n\n\n## `deps`\n\n\n\n```sh\n Description\n Tauri dependency management script\n Usage\n $ tauri deps [install|update]\n```\n\n\n## `build`\n\n\n\n```\n Description\n Tauri build.\n Usage\n $ tauri build\n Options\n --help, -h Displays this message\n --debug, -d Build a tauri app with debugging\n```\n\nThis command will bundle your application, either in production mode or debug mode if you used the `--debug` flag. It makes use of the `build.distDir` property from your `src-tauri/tauri.conf.json` file.\n\nIf you have entered a command to the `build.beforeBuildCommand` property, this one will be executed before the `build` command.\n\nSee more about the configuration.\n\n## `icon`\n\n\n\n```\n Description\n Create all the icons you need for your Tauri app.\n\n Usage\n $ tauri icon\n\n Options\n --help, -h Displays this message\n --log, -l Logging [boolean]\n --icon, -i Source icon (png, 1240x1240 with transparency)\n --target, -t Target folder (default: 'src-tauri/icons')\n --compression, -c Compression type [pngquant|optipng|zopfli]\n```\n\nThis command will generate a set of icons, based on the source icon you've entered.\n\n## `version`\n\n\n\n```\n Description\n Returns the current version of tauri\n```\n\nThis command will show the current version of Tauri.\n\n## CLI usage\n\nSee more about the usage through this [complete guide](/docs/usage/development/integration).\n\n","url":"https://tauri.studio/docs/api/cli"},{"id":"prose_docs_api_config_md","title":"Configuration","sections":["build","package","tauri"],"subSections":[],"code":[],"text":"\nimport Properties from '@theme/Properties'\nimport Array from '@theme/Array'\nimport Alert from '@theme/Alert'\n\nThe `tauri.conf.json` is a file generated by the `tauri init` command (see here) that lives in your Tauri application source directory (src-tauri).\n\nOnce generated, you may modify it at will to customize your Tauri application.\n\n# Platform-specific configuration\n\nIn addition to the JSON defined on the `tauri.conf.json` file, Tauri reads a platform-specific configuration on `tauri.linux.conf.json`, `tauri.windows.conf.json` and `tauri.macos.conf.json` and merges it with the main `tauri.conf.json` configuration.\n\n# Configuration structure\n\n`tauri.conf.json` is composed of the following properties:\n\n## `build`\n\n\n The target directory must contain an index.html file.\n`},\n{property: \"devPath\", type: \"string\", description: `Can be a path to a folder (either absolute or relative to tauri.conf.json) or a URL (like a live reload server).`},\n{property: \"beforeDevCommand\", optional: true, type: \"string\", description: `A command to run before starting Tauri in dev mode.`},\n{property: \"beforeBuildCommand\", optional: true, type: \"string\", description: `A command to run before starting Tauri in build mode.`},\n{property: \"withGlobalTauri\", optional: true, type: \"boolean\", description: \"Enables the API injection to the window.__TAURI__ object. Useful if you're using Vanilla JS instead of importing the API using Rollup or Webpack. Reduces the command security since any external code can access it, so be careful with XSS attacks.\"}\n]}/>\n\n```js title=Example\n\"build\": {\n \"distDir\": \"../dist\",\n \"devPath\": \"http://localhost:4000\",\n \"beforeDevCommand\": \"npm run dev\",\n \"beforeBuildCommand\": \"npm run build\",\n \"withGlobalTauri\": false\n}\n```\n\n## `package`\n\n\n\n## `tauri`\n\n\n Any leading hyphen will be stripped, and only the first non hyphen character will be used as the short version.\n ` },\n { property: \"name\", type: \"string\", description: `The unique argument name.` },\n { property: \"description\", optional: true, type: \"string\", description: `The argument description which will be shown on the help information. Typically, this is a short (one line) description of the arg.` },\n { property: \"longDescription\", optional: true, type: \"string\", description: `The argument long description which will be shown on the help information.\n Typically, this a more detailed (multi-line) message that describes the argument` },\n { property: \"takesValue\", optional: true, type: \"boolean\", description: `Specifies that the argument takes a value at runtime.\n
\n Values for arguments may be specified in any of the following methods:\n
    \n
  • Using a space such as -o value or --option value
  • \n
  • Using an equals and no space such as -o=value or --option=value
  • \n
  • Use a short and no space such as -ovalue
  • \n
\n
`\n },\n { property: \"index\", type: \"number\", optional: true, description: `The positional argument index, starting at 1.\n
\n The index refers to position according to other positional argument. It does not define position in the argument list as a whole.\n When utilized with multiple=true, only the last positional argument may be defined as multiple (i.e. the one with the highest index).\n
`\n },\n { property: \"multiple\", optional: true, type: \"boolean\", description: `Specifies that the argument may appear more than once.\n For flags, this results in the number of occurrences of the flag being recorded. For example -ddd or -d -d -d would count as three occurrences.\n For options, there is a distinct difference in multiple occurrences vs multiple values. For example, --opt val1 val2 is one occurrence, but two values. Whereas --opt val1 --opt val2 is two occurrences.` },\n { property: \"possibleValues\", optional: true, type: \"string[]\", description: `Specifies a list of possible values for this argument. At runtime, the CLI verifies that only one of the specified values was used, or fails with an error message.` },\n { property: \"minValues\", optional: true, type: \"number\", description: `Specifies the minimum number of values for this argument.\n For example, if you had a -f <file> argument where you wanted at least 2 \"files\" you would set minValues: 2, and this argument would be satisfied if the user provided, 2 or more values.` },\n { property: \"maxValues\", optional: true, type: \"number\", description: `Specifies the maximum number of values for this argument.\n For example, if you had a -f <file> argument where you wanted up to 3 \"files\" you would set max_values: 3, and this argument would be satisfied if the user provided, 1, 2, or 3 values.` },\n { property: \"required\", optional: true, type: \"boolean\", description: `Sets whether or not the argument is required by default.\n \"required by default\" means it is required, when no other conflicting rules have been evaluated\n conflicting rules take precedence over being required.` },\n { property: \"requiredUnless\", optional: true, type: \"string\", description: `Sets an arg that overrides this arg's required setting.
\n i.e. this arg will be required unless this other argument is present.` },\n { property: \"requiredUnlessAll\", optional: true, type: \"string[]\", description: `Sets args that override this arg's required setting.
\n i.e. this arg will be required unless all these other arguments are present.` },\n { property: \"requiredUnlessOne\", optional: true, type: \"string[]\", description: `Sets args that override this arg's required setting.
\n i.e. this arg will be required unless at least one of these other arguments are present.` },\n { property: \"conflictsWith\", optional: true, type: \"string\", description: `Sets a conflicting argument by name\n i.e. when using this argument, the following argument can't be present and vice versa.` },\n { property: \"conflictsWithAll\", optional: true, type: \"string\", description: `The same as \"conflictsWith\" but allows specifying multiple two-way conflicts per argument.` },\n { property: \"requires\", optional: true, type: \"string\", description: `Sets an argument by name that is required when this one is present.
\n i.e. when using this argument, the following argument must be present.` },\n { property: \"requiresAll\", optional: true, type: \"string[]\", description: `Sets multiple arguments by names that are required when this one is present.
\n i.e. when using this argument, the following arguments must be present.` },\n { property: \"requiresIf\", optional: true, type: \"[string, string]\", description: `Allows a conditional requirement with the signature [arg: string, value: string].\n
\n The requirement will only become valid if \"arg\"'s value equals \\${value}.\n
\n ` },\n { property: \"requiredIf\", optional: true, type: \"[string, string]\", description: `Allows specifying that an argument is required conditionally with the signature [arg: string, value: string].\n
\n The requirement will only become valid if the \"arg\"'s value equals \\${value}.\n
\n ` },\n { property: \"requireEquals\", optional: true, type: \"boolean\", description: `Requires that options use the --option=val syntax.
\n i.e. an equals between the option and associated value.` },\n ]} /> },\n { property: \"description\", optional: true, type: \"string\", description: `Command description which will be shown on the help information.` },\n { property: \"longDescription\", optional: true, type: \"string\", description: `Command long description which will be shown on the help information.` },\n { property: \"beforeHelp\", optional: true, type: \"string\", description: `Adds additional help information to be displayed in addition to auto-generated help.
\n This information is displayed before the auto-generated help information.
\n This is often used for header information.` },\n { property: \"afterHelp\", optional: true, type: \"string\", description: `Adds additional help information to be displayed in addition to auto-generated help.
\n This information is displayed after the auto-generated help information.
\n This is often used to describe how to use the arguments, or caveats to be noted.` },\n { property: \"subcommands\", optional: true, type: \"{ [name: string]: CliConfig }\", description: `List of subcommands of this command.
\n Subcommands are effectively sub-apps, because they can contain their own arguments, subcommands, usage, etc.
\n They also function just like the app command, in that they get their own auto generated help and usage.` },\n ]} />\n },\n {\n property: \"bundle\", type: \"object\",\n child: cargo build.` },\n { property: \"targets\", optional: true, type: \"string | string[]\", description: `An array of the bundles you want to generate; e.g. [\"deb\", \"app\", \"msi\", \"appimage\", \"dmg\"] or the string 'all' to make every supported bundle. By default we bundle everything your target supports (app/dmg on mac, deb/appimage on linux, msi on windows).` },\n { property: \"identifier\", type: \"string\", description: `A string that uniquely identifies your application, in reverse-DNS form (for example, \"com.example.appname\" or \"io.github.username.project\"). For OS X and iOS, this is used as the bundle's CFBundleIdentifier value; for Windows, this is hashed to create an application GUID.` },\n { property: \"icon\", optional: true, type: \"string[]\", description: `A list of (relative to src-tauri) icon paths to use for your application bundle.` },\n { property: \"resources\", optional: true, type: \"string[]\", description: `A list of files or directories which will be copied to the resources section of the bundle. Globs are supported.` },\n { property: \"externalBin\", optional: true, type: \"string[]\", description: `A list of—either absolute or relative—paths to binaries to embed with your application.\n
\n Note that Tauri will look for system-specific binaries following the pattern \"binary-name{-target-triple}{.system-extension}\".
\n E.g. you typed \"my-binary\":\n
    \n
  • \"my-binary-x86_64-pc-windows-msvc.exe\" for Windows
  • \n
  • \"my-binary-x86_64-apple-darwin\" for macOS
  • \n
  • \"my-binary-x86_64-unknown-linux-gnu\" for Linux
  • \n
\n so don't forget to provide binaries for all targeted platforms.\n
` },\n { property: \"copyright\", optional: true, type: \"string\", description: `A copyright string associated with your application.` },\n { property: \"category\", optional: true, type: \"string\", description: `What kind of application this is.\n Should be one among the following list:
\n Business, DeveloperTool, Education, Entertainment, Finance, Game, ActionGame, AdventureGame, ArcadeGame, BoardGame, CardGame, CasinoGame, DiceGame, EducationalGame, FamilyGame, KidsGame, MusicGame, PuzzleGame, RacingGame, RolePlayingGame, SimulationGame, SportsGame, StrategyGame, TriviaGame, WordGame, GraphicsAndDesign, HealthcareAndFitness, Lifestyle, Medical, Music, News, Photography, Productivity, Reference, SocialNetworking, Sports, Travel, Utility, Video, Weather.\n ` },\n { property: \"shortDescription\", optional: true, type: \"string\", description: `A short description of your application.` },\n { property: \"longDescription\", optional: true, type: \"string\", description: `A longer, multi-line description of the application.` },\n { property: \"deb\", optional: true, type: \"object\", child: boostrapper script.` },\n { property: \"files\", optional: true, type: \"{ [path: string]: string }\", description: `The files to include on the package. See the debian guide.` }]} />\n },\n { property: \"windows\", optional: true, type: \"object\", child: \n }\n ]} />\n },\n { property: \"macOS\", optional: true, type: \"object\", child: boostrapper script.` },\n { property: \"exceptionDomain\", optional: true, type: \"string\", description: `Allows your application to communicate with the outside world.\n
\n It should be a lowercase, without port and protocol domain name.\n
\n ` },\n { property: \"signingIdentity\", optional: true, type: \"string\", description: `Identity to use for code signing.` },\n { property: \"entitlements\", optional: true, type: \"string\", description: `Path to the entitlements file.` },\n ]} /> },\n ]} />\n },\n {\n property: \"allowlist\", type: \"object\",\n child: \n },\n {\n property: \"window\", optional: true, type: \"object\", child: \n },\n {\n property: \"shell\", optional: true, type: \"object\", child: \n },\n {\n property: \"dialog\", optional: true, type: \"object\", child: \n },\n {\n property: \"http\", optional: true, type: \"object\", child: \n },\n {\n property: \"notification\", optional: true, type: \"object\", child: \n },\n {\n property: \"globalShortcut\", optional: true, type: \"object\", child: \n },\n {\n property: \"os\", optional: true, type: \"object\", child: \n },\n {\n property: \"path\", optional: true, type: \"object\", child: \n },\n ]} />\n },\n {\n property: \"windows\", type: \"WindowConfig[]\",\n child: \n \n },\n {\n property: \"security\", type: \"object\",\n child: \n This is a really important part of the configuration since it helps you ensure your WebView is secured. See more on Mozilla.\n` },\n ]} />\n },\n]} />\n\n\n
\n\n\nInstead of launching the app directly, we configure the bundled app to run a script that tries to expose the environment variables to the app; without that you'll have trouble using system CLI apps like Node.js.\n\n\n```js title=Example\n\"tauri\": {\n \"cli\": {\n \"description\": \"Tauri communication example\",\n \"longDescription\": null,\n \"beforeHelp\": null,\n \"afterHelp\": null,\n \"args\": [{\n \"short\": \"c\",\n \"name\": \"config\",\n \"takesValue\": true,\n \"description\": \"Config path\"\n }, {\n \"short\": \"t\",\n \"name\": \"theme\",\n \"takesValue\": true,\n \"description\": \"App theme\",\n \"possibleValues\": [\"light\", \"dark\", \"system\"]\n }, {\n \"short\": \"v\",\n \"name\": \"verbose\",\n \"multipleOccurrences\": true,\n \"description\": \"Verbosity level\"\n }],\n \"subcommands\": {\n \"update\": {\n \"description\": \"Updates the app\",\n \"longDescription\": null,\n \"beforeHelp\": null,\n \"afterHelp\": null,\n \"args\": [{\n \"short\": \"b\",\n \"name\": \"background\",\n \"description\": \"Update in background\"\n }],\n \"subcommands\": null\n }\n }\n },\n \"bundle\": {\n \"active\": true,\n \"targets\": [\"deb\"],\n \"identifier\": \"com.tauri.dev\",\n \"icon\": [\"icons/32x32.png\", \"icons/128x128.png\", \"icons/128x128@2x.png\", \"icons/icon.icns\", \"icons/icon.ico\"],\n \"resources\": [],\n \"externalBin\": [],\n \"copyright\": \"\",\n \"category\": \"DeveloperTool\",\n \"shortDescription\": \"\",\n \"longDescription\": \"\",\n \"deb\": {\n \"depends\": []\n },\n \"macOS\": {\n \"frameworks\": [],\n \"minimumSystemVersion\": \"\",\n \"exceptionDomain\": \"\"\n }\n },\n \"allowlist\": {\n \"all\": true\n },\n \"windows\": [{\n \"title\": \"Tauri App\",\n \"width\": 800,\n \"height\": 600,\n \"resizable\": true,\n \"fullscreen\": false\n }],\n \"security\": {\n \"csp\": \"default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self'\"\n }\n}\n```\n","url":"https://tauri.studio/docs/api/config"},{"id":"prose_docs_getting_started_intro_md","title":"Introduction","sections":["Steps"],"subSections":["Setting up Your Environment"],"code":[],"text":"\nimport OSList from '@theme/OSList'\n\nWelcome to Tauri!\n\nTauri is a polyglot and generic system that is very composable and allows engineers to make a wide variety of applications. It is used for building applications for Desktop Computers using a combination of [Rust](https://www.rust-lang.org/) tools and HTML rendered in a Webview. Apps built with Tauri can ship with any number of pieces of an optional JS API / Rust API so that webviews can control the system via message passing.\n\nAnything that can be displayed on a website, can be displayed in a Tauri webview app!\n\nDevelopers are free to build the web front-end displayed in a Webview through Tauri with any web frameworks of their choice!\n**Developers can even extend the default API** with their own functionality and bridge the Webview and Rust-based backend easily!\n\nThe Architecture is more fully described in [Architecture](https://github.com/tauri-apps/tauri/blob/dev/ARCHITECTURE.md).\n\nThis guide will help you create your first Tauri app. It should only take about 10 minutes, although it could take longer if you have a slower internet connection.\n\nIf you find an error or something unclear, or would like to propose an improvement, you have several options:\n\n1. Open an issue on our [Github Repo](https://github.com/tauri-apps/tauri-docs)\n2. Visit our [Discord server](https://discord.gg/tauri) and raise your concern\n3. Request to join the education working group on Discord to gain access to its discussion channel\n\n## Steps\n\n1. Install and configure system prerequisites\n2. Create a web app with your frontend framework of choice\n3. Use the Tauri CLI to setup Tauri in your app\n4. Write native Rust code to add functionality or improve performance (totally optional)\n5. Use `tauri dev` to develop your app with features like hot module reloading and webview devtools\n6. Use `tauri build` to package your app into a tiny installer\n\n### Setting up Your Environment\n\nBefore creating an app, you'll have to install and configure some developer tools. This guide assumes that you know what the command line is, how to install packages on your operating system, and generally know your way around the development side of computing.\n\nFollow the platform-specific guides to get started:\n\n\n\nAfter that, you'll be ready to [add Tauri to your project!](/docs/usage/development/integration)\n","url":"https://tauri.studio/docs/getting-started/intro"},{"id":"prose_docs_getting_started_setup_linux_md","title":"Setup for Linux","sections":["1","2","3","4","Continue"],"subSections":["Optional dependencies","Node","Optional Node","WSL Version 1","WSL Version 2"],"code":["sh","bash"],"text":"\nimport Alert from '@theme/Alert'\nimport Icon from '@theme/Icon'\nimport { Intro } from '@theme/SetupDocs'\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n## 1. System Dependencies \n\n\n\n\n```sh\n$ sudo apt update && sudo apt install libwebkit2gtk-4.0-dev \\\n build-essential \\\n curl \\\n wget \\\n libssl-dev \\\n libgtk-3-dev \\\n libappindicator3-dev \\\n patchelf \\\n librsvg2-dev\n```\n\n\n\n\n```sh\n$ sudo pacman -Syy && sudo pacman -S webkit2gtk \\\n base-devel \\\n curl \\\n wget \\\n openssl \\\n appmenu-gtk-module \\\n gtk3 \\\n libappindicator-gtk3 \\\n patchelf \\\n librsvg \\\n libvips\n```\n\n\n\n\n```sh\n$ sudo dnf check-update && sudo dnf install webkit2gtk3-devel.x86_64 \\\n openssl-devel \\\n curl \\\n wget \\\n libappindicator-gtk3 \\ #\n patchelf \\\n librsvg2-devel \\\n && sudo dnf group install \"C Development Tools and Libraries\"\n```\n\n\n\n\n### Optional dependencies:\n\n- `libappindicator`: needed to use the system tray feature.\n- `patchelf` and `librsvg`: needed to bundle `AppImage`.\n\n## 2. Node.js Runtime and Package Manager \n\n### Node.js (npm included)\n\nWe recommend using nvm to manage your Node.js runtime. It allows you to easily switch versions and update Node.js.\n\n```sh\n$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash\n```\n\n\nWe have audited this bash script, and it does what it says it is supposed to do. Nevertheless, before blindly curl-bashing a script, it is always wise to look at it first. Here is the file as a mere download link.\n\n\nOnce nvm is installed, close and reopen your terminal, then install the latest version of Node.js and npm:\n\n```sh\n$ nvm install node --latest-npm\n$ nvm use node\n```\n\nIf you have any problems with nvm, please consult their project readme.\n\n### Optional Node.js Package Manager\n\nYou may want to use an alternative to npm:\n\n- Yarn, is preferred by Tauri's team\n- pnpm\n\n## 3. Rustc and Cargo Package Manager \n\nThe following command will install rustup, the official installer for Rust.\n\n```bash\n$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\n\nWe have audited this bash script, and it does what it says it is supposed to do. Nevertheless, before blindly curl-bashing a script, it is always wise to look at it first. Here is the file as a mere download link.\n\n\nTo make sure that Rust has been installed successfully, run the following command:\n\n```sh\n$ rustc --version\nlatest update on 2019-12-19, rust version 1.40.0\n```\n\nYou may need to restart your terminal if the command does not work.\n\n## 4. For Windows Subsystem for Linux (WSL) Users \n\nIn order to run a graphical application with WSL, you need to download **one** of these X servers: Xming, Cygwin X, and vcXsrv.\nSince vcXsrv has been used internally, it's the one we recommend to install.\n\n### WSL Version 1\n\nOpen the X server and then run `export DISPLAY=:0` in the terminal. You should now be able to run any graphical application via the terminal.\n\n### WSL Version 2\n\nYou'll need to run a command that is slightly more complex than WSL 1: `export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0` and you need to add `-ac` to the X server as an argument. Note: if for some reason this command doesn't work you can use an alternative command such as: `export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | sed 's/.* //g'):0` or you can manually find the Address using `cat /etc/resolve.conf | grep nameserver`.\n\n\n\nDon't forget that you'll have to use the \"export\" command anytime you want to use a graphical application, for each newly opened terminal.\n\nYou can download some examples to try with `sudo apt-get install x11-apps`. xeyes is always a good one. It can be handy when troubleshooting WSL issues.\n\n\n## Continue\n\nNow that you have set up the Linux-specific dependencies for Tauri, learn how to [add Tauri to your project](/docs/usage/development/integration).\n","url":"https://tauri.studio/docs/getting-started/setup-linux"},{"id":"prose_docs_getting_started_setup_macos_md","title":"Setup for macOS","sections":["1","2","3","Continue"],"subSections":["Node","Optional Node"],"code":["sh",null],"text":"\nimport Alert from '@theme/Alert'\nimport { Intro } from '@theme/SetupDocs'\nimport Icon from '@theme/Icon'\n\n\n\n## 1. System Dependencies \n\n\nYou will need to have Homebrew installed to run the following command.\n\n```sh\n$ brew install gcc\n```\n\nYou will also need to make sure `xcode` is installed.\n\n```sh\n$ xcode-select --install\n```\n\n## 2. Node.js Runtime and Package Manager \n\n### Node.js (npm included)\n\nWe recommend using nvm to manage your Node.js runtime. It allows you to easily switch versions and update Node.js.\n\n```sh\n$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash\n```\n\n\nWe have audited this bash script, and it does what it says it is supposed to do. Nevertheless, before blindly curl-bashing a script, it is always wise to look at it first. Here is the file as a mere download link.\n\n\nOnce nvm is installed, close and reopen your terminal, then install the latest version of Node.js and npm:\n\n```sh\n$ nvm install node --latest-npm\n$ nvm use node\n```\n\nIf you have any problems with nvm, please consult their project readme.\n\n### Optional Node.js Package Manager\n\nYou may want to use an alternative to npm:\n\n- Yarn, is preferred by Tauri's team\n- pnpm\n\n## 3. Rustc and Cargo Package Manager \n\nThe following command will install rustup, the official installer for Rust.\n\n```\n$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\n\nWe have audited this bash script, and it does what it says it is supposed to do. Nevertheless, before blindly curl-bashing a script, it is always wise to look at it first. Here is the file as a mere download link.\n\n\nTo make sure that Rust has been installed successfully, run the following command:\n\n```sh\n$ rustc --version\nlatest update on 2019-12-19, rust version 1.40.0\n```\n\nYou may need to restart your terminal if the command does not work.\n\n## Continue\n\nNow that you have set up the macOS-specific dependencies for Tauri, learn how to [add Tauri to your project](/docs/usage/development/integration).\n","url":"https://tauri.studio/docs/getting-started/setup-macos"},{"id":"prose_docs_getting_started_setup_windows_md","title":"Setup for Windows","sections":["1","2","3","4","Continue"],"subSections":["Node","Optional Node"],"code":["powershell"],"text":"\nimport Alert from '@theme/Alert'\nimport Icon from '@theme/Icon'\nimport { Intro } from '@theme/SetupDocs'\n\n\n\nFor those using the Windows Subsystem for Linux (WSL) please refer to our [Linux specific instructions](/docs/getting-started/setup-linux) instead.\n\n\n\n\n## 1. System Dependencies \n\nYou'll need to install Microsoft Visual Studio C++ build tools. Download the installer here, and then run it. When it asks you what packages you would like to install, select C++ Build Tools.\n\n\nThis is a big download (over 1GB) and takes the most time, so go grab a coffee.\n\n\n\nYou may need to uninstall the 2017 version of the build tools if you have them. There are reports of Tauri not working with both the 2017 and 2019 versions installed.\n\n\n## 2. Node.js Runtime and Package Manager \n\n### Node.js (npm included)\n\nWe recommend using nvm-windows to manage your Node.js runtime. It allows you to easily switch versions and update Node.js.\n\nThen run the following from an Administrative PowerShell and press Y when prompted:\n\n```powershell\n# BE SURE YOU ARE IN AN ADMINISTRATIVE PowerShell!\nnvm install latest\nnvm use {{latest}} # Replace with your latest downloaded version\n```\n\nThis will install the most recent version of Node.js with npm.\n\n### Optional Node.js Package Manager\n\nYou may want to use an alternative to npm:\n\n- Yarn, is preferred by Tauri's team\n- pnpm\n\n## 3. Rustc and Cargo Package Manager \n\nNow you will need to install Rust. The easiest way to do this is to use rustup, the official installer.\n\n- 64-bit download link\n- 32-bit download link\n\nDownload and install the proper variant for your computer's architecture.\n\n## 4. Install WebView2\n\n\nWebView2 is pre-installed in Windows 11. \n\n\nFinally, you will need to install WebView2. The best way to do this is to download and run the Evergreen Bootstrapper from [this page](https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section).\n\n## Continue\n\nNow that you have set up the Windows-specific dependencies for Tauri, learn how to [add Tauri to your project](/docs/usage/development/integration).\n","url":"https://tauri.studio/docs/getting-started/setup-windows"},{"id":"prose_docs_usage_contributor_guide_md","title":"Contributor Guide","sections":["Contribution Flow","Hands On Example"],"subSections":["A Note About Contributions to the Rust Libraries"],"code":["sh","json","ini"],"text":"\ntodo: make this friendlier and more complete\n\nTauri is a polyglot system that uses:\n\n- git\n- Node.js\n- Rust\n- GitHub actions\n\nIt can be developed on macOS, Linux and Windows.\n\n## Contribution Flow\n\n1. File an Issue\n2. Fork the Repository\n3. Make Your Changes\n4. Make a PR\n\n### A Note About Contributions to the Rust Libraries\n\nWhen contributing to the Rust libraries `tauri`, `tauri-api`, and `tauri-updater`; you will want to setup an environment for RLS (the Rust Language Server). In the Tauri root directory, there is a `.scripts` folder that contains a set of scripts to automate adding a couple temporary environment variables to your shell/terminal. These environment variables point to directories in the test fixture which will prevent RLS from crashing on compile-time. This is a necessary step for setting up a development environment for Tauri's Rust libraries.\n\n##### _Example Instructions_\n\n1. Navigate to the Tauri Root directory.\n2. Execute a script based on your Operating System from this folder: `.scripts/init_env.bat` for Windows Cmd, `.scripts/init_env.ps1` for Windows Powershell, `. .scripts/init_env.sh` for Linux/macOS bash (note the first `.` in this command).\n3. Open your text editor/IDE from this shell/terminal.\n\n## Hands On Example\n\nLet's make a new example. That's a great way to learn. We are going to assume you are on a nixy type of environment like Linux or macOS and have all of your development dependencies like rust and node already sorted out.\n\n```sh\ngit clone git@github.com:tauri-apps/tauri.git\ncd tauri/cli/tauri.js\nyarn\nmkdir ../../examples/vanillajs && cd \"$_\"\n```\n\n```json\n \"tauri:source\": \"node ../../../cli/tauri.js/bin/tauri\",\n```\n\n```ini\n [dependencies.tauri]\n path = \"../../../../core/tauri\"\n features = [ \"all-api\" ]\n```\n","url":"https://tauri.studio/docs/usage/contributor-guide"},{"id":"prose_docs_usage_intro_md","title":"Introduction","sections":["A Step Further","Guides"],"subSections":[],"code":[],"text":"\nThis part of the documentation is dedicated to learning how to use Tauri.\n\nTauri provides a [CLI](/docs/api/cli), a Rust API, and a [JavaScript API](/docs/api/js/index) that you can use in your project. Because raw docs can be quite scary to newcomers (especially people who have never played with Rust before), we've created this \"learn by example\" section.\n\nHere you will find guides and techniques to add to your own project in order to fulfill your goals.\n\n## A Step Further\n\n- [Understanding Tauri Patterns](/docs/usage/patterns/about-patterns)\n- [Add Tauri to my existing project](/docs/usage/development/integration)\n- [Tauri Development Cycle](/docs/usage/development/development)\n\n## Guides\n\n- [How to embed custom binaries](/docs/usage/guides/bundler/sidecar)\n- [How to customize app icons](/docs/usage/guides/visual/icons)\n","url":"https://tauri.studio/docs/usage/intro"},{"id":"prose_docs_usage_ci_cd_cross_platform_md","title":"Cross-Platform Compilation","sections":[],"subSections":[],"code":[],"text":"\nHow to use GH Action for Building: a glance at Tauri Action.","url":"https://tauri.studio/docs/usage/ci-cd/cross-platform"},{"id":"prose_docs_usage_ci_cd_signing_macos_md","title":"Signing for macOS","sections":[],"subSections":[],"code":[],"text":"\nSigning for macOS","url":"https://tauri.studio/docs/usage/ci-cd/signing-macos"},{"id":"prose_docs_usage_ci_cd_workflow_md","title":"Workflow","sections":["Continuous Integration","Continuous Deployment"],"subSections":["Introduction to immutable checksum","Next Steps"],"code":["yml"],"text":"\n## Continuous Integration\n\nGithub Actions has two triggers of which we make heavy use: `push` and `pull_request`. Every commit that made to the repo is a `push`. When you open a pull request from a branch (call it `great_feature`) to another branch (our working branch, `dev`), each commit to `great_feature` would possibly trigger both of these events. We can use a filter to focus on the events we care about though. In our workflows, we only PR (pull request) the `dev` and `master` branches. This means that if we filter to only the `dev` and `master` branches on commit, we will only run that workflow when we _merge_ a PR. A merged PR typically only occurs once a day or less so this will be a good fit for the longer running tests, e.g. the smoke tests in our case. Below is how that might look.\n\nUnit tests:\n\n```yml\n# these run fast so we can have them run on any commit\nname: unit tests\non:\n pull_request:\n push:\n branches:\n - dev\n - master\n```\n\nSmoke tests:\n\n```yml\n# these run slower so we run only on merges to dev or master branch\nname: smoke tests\non:\n push:\n branches:\n - dev\n - master\n```\n\nTauri operates off the `dev` branch as default, and merges to `master` for release. With these Github Actions set up, we will run the unit tests on every commit to an open PR (see `pull_request`). When that PR is merged into `dev`, we will run both the unit tests and the smoke tests.\n\n## Continuous Deployment\n\n### Introduction to immutable checksum\n\nIt is not only possible, but trivial to modify release notes and artifacts after it has been published on Github. While there are very valid reasons for doing this, it is not exactly a totally trustworthy method - i.e. you have no guarantee that what you are reading is really reflective of the underlying truth or the tarballs. It is technically possible to change downloads over the wire or in the box or change checksums in targeted attacks. What we are seeking to accomplish is a best case scenario where:\n\n1. Human error is reduced to a minimum, but humans are still integral in the actual release\n2. Machine built assets, changelogs and attached security audits are verifiable with checksums that are published in an immutable, globally available store.\n\nTo this end we fashioned a workflow shown below. As it stands now, we have #3 through #6 implemented. We manually do #2 which then feeds into #3 and kicks off the rest of the automatic workflow.\n\n1. a human pushes to dev through a pull request (can happen any number of times)\n - pull request includes a changeset file describing the change and required version bump\n2. a pull request is created (or updated) to include the change and version bump\n - this pull request stays open and will be force pushed until it gets merged (and published)\n - increase the version number based on changesets\n - delete all changeset files\n3. a codeowner merges the publish PR to dev (no direct push permissible for anyone)\n - all tests (unit, e2e, smoke tests) are run on the PR\n - failures prevent the publish so they must pass before merge\n4. merge to dev triggers release sequence\n - changes are squashed and a PR is opened against master\n5. when PR to master is merged...\n - vulnerability audit (crates and yarn) and output saved\n - checksums and metadata and output saved\n - packages are published on npm/cargo, tarball/zip created\n - release is created for each package that had updates (if version isn't changed, build skips the publish steps)\n - output from audit/checksums is piped into the release body\n - tarball / zip attached to release\n - async process to publish to IOTA tangle (feeless) via release tag [note: still have things to resolve here]\n6. release is complete\n - master has updated code and tagged\n - GitHub release has tarballs, checksums, and changelog (may have multiple releases if more than one package published) [note: is part of step 2 and is not yet implemented]\n\n### Next Steps\n\nNext steps may include transferring and publishing the built assets to additional places:\n\n1. Tauri's private verdaccio\n2. IPFS\n3. PureOS Gitlab\n4. GitHub Packages\n\nWe can also do some interesting things like signing our releases, including a hash in the release and/or even publishing this information on a blockchain that it can be easily verified. Publishing on the blockchain is another avenue to increase the confidence that what is seen on GitHub matches what you have downloaded. The IOTA foundation created a Github Action which will publish a release to their blockchain. This has shown promise, but he gave a couple errors to tackle still.\n","url":"https://tauri.studio/docs/usage/ci-cd/workflow"},{"id":"prose_docs_usage_development_debugging_md","title":"App Debugging","sections":["Rust Console","WebView JS Console","Create a Debug Build","Run Your App From the Terminal"],"subSections":[],"code":["rust","sh",null],"text":"\nimport Alert from '@theme/Alert'\nimport Command from '@theme/Command'\n\nWith all the moving pieces in Tauri, you may run into a problem that requires debugging. There are a handful of locations where error details are printed, and Tauri includes some tools to make the debugging process easier.\n\n## Rust Console\n\nWhen you run a Tauri app in development mode you will have a Rust console available. This is in the terminal where you ran e.g. `tauri dev`. You can use the following code to print something to that console from within a Rust file:\n\n```rust\nprintln!(\"Message from Rust: {}\", msg);\n```\n\nSometimes you may have an error in your Rust code, and the Rust compiler can give you lots of information. If, for example, `tauri dev` crashes, you can rerun it like this on Linux and macOS:\n\n```sh\nRUST_DEBUG=1 tauri dev\n```\n\nor like this on MS Windows:\n\n```sh\nset RUST_DEBUG=1\ntauri dev\n```\n\nThis will give you a granular stack trace. Generally speaking, the Rust compiler will help you by\ngiving you detailed information about the issue, such as:\n\n```\nerror[E0425]: cannot find value `sun` in this scope\n --> src/main.rs:11:5\n |\n11 | sun += i.to_string().parse::().unwrap();\n | ^^^ help: a local variable with a similar name exists: `sum`\n\nerror: aborting due to previous error\n\nFor more information about this error, try `rustc --explain E0425`.\n```\n\n## WebView JS Console\n\nRight click in the WebView, and choose `Inspect Element`. This will open up a web-inspector similar to the Chrome or Firefox dev tools you are used to.\n\n## Create a Debug Build\n\nThere are cases where you might need to inspect the JS console in the final bundle, so Tauri provides a simple command to create a debugging bundle:\n\n\n\nLike the normal build and dev processes, the first time you run this it will take more time than subsequent runs. The final bundled app will be placed in `src-tauri/target/debug/bundle`. That app will ship with the development console enabled.\n\n## Run Your App From the Terminal\n\nYou can also run a built app from the terminal, which will also give you the Rust compiler notes (in case of errors) or your `println` messages. Just find the file `src-tauri/target/(release|debug)/[app name]` and either double click it (but be warned, the terminal will close on errors) or just run it in directly in your console.\n","url":"https://tauri.studio/docs/usage/development/debugging"},{"id":"prose_docs_usage_development_development_md","title":"App Development","sections":[],"subSections":["1","2"],"code":[],"text":"\nimport Alert from '@theme/Alert'\nimport Command from '@theme/Command'\n\n### 1. Start Your Devserver\n\nNow that you have everything setup, you should start your application development server provided by your UI framework or bundler (assuming you're using one, of course).\n\n\nEvery framework has its own development tooling. It is outside of the scope of this document to treat them all or keep them up to date.\n\n\n### 2. Start Tauri Development Window\n\n\n\nThe first time you run this command, it will take several minutes for the Rust package manager to download and build all the required packages. Since they are cached, subsequent builds will be much faster, as only your code will need rebuilding.\n\nOnce Rust has finished building, the webview will open and it should display your web app. You can make changes to your web app, and if your tooling enables it, the webview should update automatically just like a browser. When you make changes to your Rust files, they will be rebuilt automatically and your app will restart.\n\n\n In your project repository, you SHOULD commit the \"src-tauri/Cargo.toml\" to git because you want it to be deterministic. You SHOULD NOT commit the \"src-tauri/target\" folder or any of its contents.\n\n","url":"https://tauri.studio/docs/usage/development/development"},{"id":"prose_docs_usage_development_integration_md","title":"Tauri Integration","sections":["Vue CLI Plugin Tauri"],"subSections":["1","1","2","3","Patterns"],"code":["bash","sh",null],"text":"\nimport Alert from '@theme/Alert'\nimport Command from '@theme/Command'\nimport Link from '@docusaurus/Link'\n\n\n You must have completed all the steps required for setting up the development environment on your machine. If you haven't done this yet, please see the setup page for your operating system.\n\n\n### 1. Install Tauri CLI Package as a Dev Dependency:\n\n```bash\ncd project-folder\n\n# Not required if you already have a package.json:\n# yarn init\n# OR\n# npm init\n\nyarn add -D @tauri-apps/cli\n# OR\nnpm install -D @tauri-apps/cli\n```\n\n\n You can install Tauri as both a local and a global dependency, but we recommend installing it locally.\n\n\nIf you decide to use Tauri as a local package with npm (not yarn), you will have to define a custom script to your package.json:\n\n```js title=package.json\n{\n // This content is just a sample\n \"scripts\": {\n \"tauri\": \"tauri\"\n }\n}\n```\n\n### 1. Install Tauri API Package as a Dependency (optional):\n\nThe `@tauri-apps/api` package is recommended for projects using ES modules or modern build tools such as Webpack or Vite. It is the most secure way to access the Tauri APIs.\n\n```bash\nyarn add @tauri-apps/api\n# OR\nnpm install @tauri-apps/api\n```\n\n### 2. Initialize Tauri in Your App\n\n\n\nThis command will place a new folder in your current working directory, `src-tauri`.\n\n```sh\n└── src-tauri\n ├── .gitignore\n ├── Cargo.toml\n ├── rustfmt.toml\n ├── tauri.conf.json\n ├── icons\n │ ├── 128x128.png\n │ ├── 128x128@2x.png\n │ ├── 32x32.png\n │ ├── Square107x107Logo.png\n │ ├── Square142x142Logo.png\n │ ├── Square150x150Logo.png\n │ ├── Square284x284Logo.png\n │ ├── Square30x30Logo.png\n │ ├── Square310x310Logo.png\n │ ├── Square44x44Logo.png\n │ ├── Square71x71Logo.png\n │ ├── Square89x89Logo.png\n │ ├── StoreLogo.png\n │ ├── icon.icns\n │ ├── icon.ico\n │ └── icon.png\n └── src\n ├── build.rs\n ├── cmd.rs\n └── main.rs\n```\n\n### 3. Check `tauri info` to Make Sure Everything Is Set up Properly:\n\n\n\nWhich should return something like:\n\n```\nOperating System - Darwin(16.7.0) - darwin/x64\n\nNode.js environment\n Node.js - 12.16.3\n @tauri-apps/cli - 1.0.0-beta.2\n @tauri-apps/api - 1.0.0-beta.1\n\nGlobal packages\n npm - 6.14.4\n yarn - 1.22.4\n\nRust environment\n rustc - 1.52.1\n cargo - 1.52.0\n\nApp directory structure\n/node_modules\n/src-tauri\n/src\n/public\n\nApp\n tauri.rs - 1.0.0-beta.1\n build-type - bundle\n CSP - default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self' img-src: 'self'\n distDir - ../public\n devPath - ../public\n framework - Svelte\n bundler - Rollup\n```\n\nThis information can be very helpful when triaging problems.\n\n### Patterns\n\nWe've also defined prebuilt configurations called \"Patterns\". They may help you to customize Tauri to fit your needs.\n[See more about patterns](/docs/usage/patterns/about-patterns).\n\n## Vue CLI Plugin Tauri\n\nIf you are using Vue CLI, it is recommended to use the official [CLI plugin](https://github.com/tauri-apps/vue-cli-plugin-tauri).\n","url":"https://tauri.studio/docs/usage/development/integration"},{"id":"prose_docs_usage_development_publishing_md","title":"App Publishing","sections":[],"subSections":["1","2"],"code":[],"text":"\nimport Alert from '@theme/Alert'\nimport Command from '@theme/Command'\n\n### 1. Build Your Web App\n\nNow that you are ready to package your project, you will need to run your framework's or bundler's build command (assuming you're using one, of course).\n\n\nEvery framework has its own publishing tooling. It is outside of the scope of this document to treat them all or keep them up to date.\n\n\n### 2. Bundle your application with Tauri\n\n\n\nThis command will embed your web assets into a single binary with your Rust code. The binary itself will be located in `src-tauri/target/release/[app name]`, and installers will be located in `src-tauri/target/release/bundle/`.\n\nLike the `tauri dev` command, the first time you run this, it will take some time to collect the Rust crates and build everything - but on subsequent runs it will only need to rebuild your code, which is much quicker.\n","url":"https://tauri.studio/docs/usage/development/publishing"},{"id":"prose_docs_usage_development_updating_md","title":"Updating","sections":["Automatic updates","Manual updates"],"subSections":["Update NPM Packages"],"code":[],"text":"import Alert from '@theme/Alert'\n\n\n Especially during the alpha and beta phases, you are expected to keep all Tauri dependencies and toolchains up to date. There is no support for any versions other than latest.\n\n\n## Automatic updates\n\nThe Tauri JS CLI has a command to install and update all needed dependencies, just run `tauri deps install` or `tauri deps update`.\n\n## Manual updates\n\n### Update NPM Packages\n\nIf you are using the `tauri` package:\n```bash\n$ yarn upgrade @tauri-apps/cli @tauri-apps/api --latest\n$ npm install @tauri-apps/cli@latest @tauri-apps/api@latest\n```\nYou can also detect what the latest version of Tauri is on the command line, using:\n- `npm outdated @tauri-apps/cli`\n- `yarn outdated @tauri-apps/cli`\n\nAlternatively, if you are using the `vue-cli-plugin-tauri` approach:\n```bash\n$ yarn upgrade vue-cli-plugin-tauri --latest\n$ npm install vue-cli-plugin-tauri@latest\n```\n\n### Update Cargo Packages\nGo to `src-tauri/Cargo.toml` and change `tauri` to\n`tauri = { version = \"%version%\" }` where `%version%` is the version number shown above. (You can just use the `MAJOR.MINOR`) version, like `0.9`.\n\nThen do the following:\n```bash\n$ cd src-tauri\n$ cargo update -p tauri\n```\nYou can also run `cargo outdated -r tauri` to get direct information about the core library's latest version.\n","url":"https://tauri.studio/docs/usage/development/updating"},{"id":"prose_docs_usage_guides_cli_md","title":"Make your own CLI","sections":["Base Configuration","Adding Arguments","Subcommands","Reading the matches","Complete documentation"],"subSections":["Positional Arguments","Named Arguments","Flag Arguments","Rust","JavaScript"],"code":["rust","js"],"text":"\nimport Alert from '@theme/Alert'\n\nTauri enables your app to have a CLI through clap, a robust command line argument parser. With a simple CLI definition in your `tauri.conf.json` file, you can define your interface and read its argument matches map on JavaScript and/or Rust.\n\n## Base Configuration\n\nUnder `tauri.conf.json`, you have the following structure to configure the interface:\n\n```js title=src-tauri/tauri.conf.json\n{\n \"tauri\": {\n \"cli\": {\n \"description\": \"\", // command description that's shown on help\n \"longDescription\": \"\", // command long description that's shown on help\n \"beforeHelp\": \"\", // content to show before the help text\n \"afterHelp\": \"\", // content to show after the help text\n \"args\": [], // list of arguments of the command, we'll explain it later\n \"subcommands\": {\n \"subcommand-name\": {\n // configures a subcommand that is accessible\n // with `$ ./app subcommand-name --arg1 --arg2 --etc`\n // configuration as above, with \"description\", \"args\", etc.\n }\n }\n }\n }\n}\n```\n\n\n All JSON configurations here are just samples, many other fields have been omitted for the sake of clarity.\n\n\n## Adding Arguments\n\nThe `args` array represents the list of arguments accepted by its command or subcommand. You can find more details about the way to configure them here.\n\n### Positional Arguments\n\nA positional argument is identified by its position in the list of arguments. With the following configuration:\n\n```json title=src-tauri/tauri.conf.json:tauri.cli\n{\n \"args\": [\n {\n \"name\": \"source\",\n \"index\": 1\n },\n {\n \"name\": \"destination\",\n \"index\": 2\n }\n ]\n}\n```\n\nUsers can run your app as `$ ./app tauri.txt dest.txt` and the arg matches map will define `source` as `\"tauri.txt\"` and `destination` as `\"dest.txt\"`.\n\n### Named Arguments\n\nA named argument is a (key, value) pair where the key identifies the value. With the following configuration:\n\n```json title=src-tauri/tauri.conf.json:tauri.cli\n{\n \"args\": [\n {\n \"name\": \"type\",\n \"short\": \"t\",\n \"takesValue\": true,\n \"multiple\": true,\n \"possibleValues\": [\"foo\", \"bar\"]\n }\n ]\n}\n```\n\nUsers can run your app as `$ ./app --type foo bar`, `$ ./app -t foo -t bar` or `$ ./app --type=foo,bar` and the arg matches map will define `type` as `[\"foo\", \"bar\"]`.\n\n### Flag Arguments\n\nA flag argument is a standalone key whose presence or absence provides information to your application. With the following configuration:\n\n```js title=src-tauri/tauri.conf.json:tauri.cli\n{\n \"args\": [\n \"name\": \"verbose\",\n \"short\": \"v\",\n \"multipleOccurrences\": true\n ]\n}\n```\n\nUsers can run your app as `$ ./app -v -v -v`, `$ ./app --verbose --verbose --verbose` or `$ ./app -vvv` and the arg matches map will define `verbose` as `true`, with `occurrences = 3`.\n\n## Subcommands\n\nSome CLI applications has additional interfaces as subcommands. For instance, the `git` CLI has `git branch`, `git commit` and `git push`. You can define additional nested interfaces with the `subcommands` array:\n\n```js title=src-tauri/tauri.conf.json:tauri\n{\n \"cli\": {\n ...\n \"subcommands\": {\n \"branch\": {\n \"args\": []\n },\n \"push\": {\n \"args\": []\n }\n }\n }\n}\n```\n\nIts configuration is the same as the root application configuration, with the `description`, `longDescription`, `args`, etc.\n\n## Reading the matches\n\n### Rust\n\n```rust\nuse tauri::api::cli::get_matches;\n\nfn main() {\n let context = tauri::generate_context!();\n let cli_config = context.config().tauri.cli.clone().unwrap();\n \n match get_matches(&cli_config) {\n // `matches` here is a Struct with { args, subcommand }.\n // `args` is `HashMap` where `ArgData` is a struct with { value, occurances }.\n // `subcommand` is `Option>` where `SubcommandMatches` is a struct with { name, matches }.\n Ok(matches) => {\n println!(\"{:?}\", matches)\n }\n Err(_) => {}\n };\n \n tauri::Builder::default()\n .run(context)\n .expect(\"error while running tauri application\");\n}\n```\n\n### JavaScript\n\n```js\nimport { getMatches } from '@tauri-apps/api/cli'\n\ngetMatches().then((matches) => {\n // do something with the { args, subcommand } matches\n})\n```\n\n## Complete documentation\n\nYou can find more about the CLI configuration here.\n","url":"https://tauri.studio/docs/usage/guides/cli"},{"id":"prose_docs_usage_guides_command_md","title":"Create Rust Commands","sections":["Basic Example","Passing Arguments","Returning Data","Error Handling","Async Commands","Accessing the Window in Commands","Accessing an AppHandle in Commands","Accessing managed state","Creating Multiple Commands","Complete Example"],"subSections":[],"code":["rust","js"],"text":"\nimport Alert from '@theme/Alert'\n\nTauri provides a simple yet powerful \"command\" system for calling Rust functions from your web app. Commands can accept arguments and return values. They can also return errors and be `async`.\n\n## Basic Example\n\nCommands are defined in your `src-tauri/src/main.rs` file. To create a command, just add a function and annotate it with `#[tauri::command]`:\n\n```rust\n#[tauri::command]\nfn my_custom_command() {\n println!(\"I was invoked from JS!\");\n}\n```\n\nYou will have to provide a list of your commands to the builder function like so:\n\n```rust\n// Also in main.rs\nfn main() {\n tauri::Builder::default()\n // This is where you pass in your commands\n .invoke_handler(tauri::generate_handler![my_custom_command])\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n```\n\nNow, you can invoke the command from your JS code:\n\n```js\n// With the Tauri API npm package:\nimport { invoke } from '@tauri-apps/api/tauri'\n// With the Tauri global script, enabled when `tauri.conf.json > build > withGlobalTauri` is set to true:\nconst invoke = window.__TAURI__.invoke\n\n// Invoke the command\ninvoke('my_custom_command')\n```\n\n## Passing Arguments\n\nYour command handlers can take arguments:\n\n```rust\n#[tauri::command]\nfn my_custom_command(invoke_message: String) {\n println!(\"I was invoked from JS, with this message: {}\", invoke_message);\n}\n```\n\nArguments should be passed as a JSON object with camelCase keys:\n\n```js\ninvoke('my_custom_command', { invokeMessage: 'Hello!' })\n```\n\nArguments can be of any type, as long as they implement [serde::Deserialize](https://serde.rs/derive.html).\n\n## Returning Data\n\nCommand handlers can return data as well:\n\n```rust\n#[tauri::command]\nfn my_custom_command() -> String {\n \"Hello from Rust!\".into()\n}\n```\n\nThe `invoke` function returns a promise that resolves with the returned value:\n\n```js\ninvoke('my_custom_command').then((message) => console.log(message))\n```\n\nReturned data can be of any type, as long as it implements [Serde::Serialize](https://serde.rs/derive.html).\n\n## Error Handling\n\nIf your handler could fail and needs to be able to return an error, have the function return a `Result`:\n\n```rust\n#[tauri::command]\nfn my_custom_command() -> Result {\n // If something fails\n Err(\"This failed!\".into())\n // If it worked\n Ok(\"This worked!\".into())\n}\n```\n\nIf the command returns an error, the promise will reject, otherwise it resolves:\n\n```js\ninvoke('my_custom_command')\n .then((message) => console.log(message))\n .catch((error) => console.error(error))\n```\n\n## Async Commands\n\n\nAsync commands are executed on a separate thread using the async runtime.\nCommands without the async keyword are executed on the main thread, unless defined with #[tauri::command(async)].\n\n\nIf your command needs to run asynchronously, simply declare it as `async`:\n\n```rust\n#[tauri::command]\nasync fn my_custom_command() {\n // Call another async function and wait for it to finish\n let result = some_async_function().await;\n println!(\"Result: {}\", result);\n}\n```\n\nSince invoking the command from JS already returns a promise, it works just like any other command:\n\n```js\ninvoke('my_custom_command').then(() => console.log('Completed!'))\n```\n\n## Accessing the Window in Commands\n\nCommands can access the `Window` instance that invoked the message:\n\n```rust\n#[tauri::command]\nasync fn my_custom_command(window: tauri::Window) {\n println!(\"Window: {}\", window.label());\n}\n```\n\n## Accessing an AppHandle in Commands\n\nCommands can access an `AppHandle` instance:\n\n```rust\n#[tauri::command]\nasync fn my_custom_command(app_handle: tauri::AppHandle) {\n let app_dir = app_handle.path_resolver().app_dir();\n use tauri::GlobalShortcutManager;\n app_handle.global_shortcut_manager().register(\"CTRL + U\", move || {});\n}\n```\n\n## Accessing managed state\n\nTauri can manage state using the `manage` function on `tauri::Builder`.\nThe state can be accessed on a command using `tauri::State`:\n\n```rust\nstruct MyState(String);\n\n#[tauri::command]\nfn my_custom_command(state: tauri::State) {\n assert_eq!(state.0 == \"some state value\", true);\n}\n\nfn main() {\n tauri::Builder::default()\n .manage(MyState(\"some state value\".into()))\n .invoke_handler(tauri::generate_handler![my_custom_command])\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n## Creating Multiple Commands\n\nThe `tauri::generate_handler!` macro takes an array of commands. To register\nmultiple commands, you cannot call invoke_handler multiple times. Only the last\ncall will be used. You must pass each command to a single call of\n`tauri::generate_handler!`.\n\n```rust\n#[tauri::command]\nfn cmd_a() -> String {\n\t\"Command a\"\n}\n#[tauri::command]\nfn cmd_b() -> String {\n\t\"Command b\"\n}\n\nfn main() {\n tauri::Builder::default()\n .invoke_handler(tauri::generate_handler![cmd_a, cmd_b])\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n## Complete Example\n\nAny or all of the above features can be combined:\n\n```rust title=main.rs\n// Definition in main.rs\n\nstruct Database;\n\n#[derive(serde::Serialize)]\nstruct CustomResponse {\n message: String,\n other_val: usize,\n}\n\nasync fn some_other_function() -> Option {\n Some(\"response\".into())\n}\n\n#[tauri::command]\nasync fn my_custom_command(\n window: tauri::Window,\n number: usize,\n database: tauri::State<'_, Database>,\n) -> Result {\n println!(\"Called from {}\", window.label());\n let result: Option = some_other_function().await;\n if let Some(message) = result {\n Ok(CustomResponse {\n message,\n other_val: 42 + number,\n })\n } else {\n Err(\"No result\".into())\n }\n}\n\nfn main() {\n tauri::Builder::default()\n .manage(Database {})\n .invoke_handler(tauri::generate_handler![my_custom_command])\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n```js\n// Invocation from JS\n\ninvoke('my_custom_command', {\n number: 42,\n})\n .then((res) =>\n console.log(`Message: ${res.message}, Other Val: ${res.other_val}`)\n )\n .catch((e) => console.error(e))\n```\n","url":"https://tauri.studio/docs/usage/guides/command"},{"id":"prose_docs_usage_guides_events_md","title":"Events","sections":["Frontend","Backend"],"subSections":["Global events","Window","Global events","Window"],"code":["ts","rust"],"text":"\nThe Tauri event system is a multi-producer multi-consumer communication primitive that allows message passing between the frontend and the backend.\nIt is analogous to the command system, but payload type check must be written on the event handler and it simplifies communication from the backend to the frontend, working like a channel.\n\nA Tauri application can listen and emit to global and window-specific events. Usage from the frontend and the backend are described below.\n\n## Frontend\n\nThe event system is accessible on the frontend on the `event` and `window` modules of the `@tauri-apps/api` package.\n\n### Global events\n\nTo use the global event channel, import the `event` module and use the `emit` and `listen` functions:\n\n```ts\nimport { emit, listen } from '@tauri-apps/api/event'\n\n// listen to the `click` event and get a function to remove the event listener\n// there's also a `once` function that subscribes to an event and automatically unsubscribes the listener on the first event\nconst unlisten = await listen('click', event => {\n // event.event is the event name (useful if you want to use a single callback fn for multiple event types)\n // event.payload is the payload object\n})\n\n// emits the `click` event with the object payload\nemit('click', {\n theMessage: 'Tauri is awesome!'\n})\n```\n\n### Window-specific events\n\nWindow-specific events are exposed on the `window` module.\n\n```ts\nimport { getCurrent, WebviewWindow } from '@tauri-apps/api/window'\n\n// emit an event that are only visible to the current window\nconst current = getCurrent()\ncurrent.emit('event', { message: 'Tauri is awesome!' })\n\n// create a new webview window and emit an event only to that window\nconst webview = new WebviewWindow('window')\nwebview.emit('event')\n\n```\n\n## Backend\n\nOn the backend, the global event channel is exposed on the `App` struct, and window-specific events can be emitted using the `Window` trait.\n\n### Global events\n\n```rust\nuse tauri::Manager;\n\n// the payload type must implement `Serialize`.\n// for global events, it also must implement `Clone`.\n#[derive(Clone, serde::Serialize)]\nstruct Payload {\n message: String,\n}\n\nfn main() {\n tauri::Builder::default()\n .setup(|app| {\n // listen to the `event-name` (emitted on any window)\n let id = app.listen_global(\"event-name\", |event| {\n println!(\"got event-name with payload {:?}\", event.payload());\n });\n // unlisten to the event using the `id` returned on the `listen_global` function\n // an `once_global` API is also exposed on the `App` struct\n app.unlisten(id);\n\n // emit the `event-name` event to all webview windows on the frontend\n app.emit_all(\"event-name\", Payload { message: \"Tauri is awesome!\".into() }).unwrap();\n Ok(())\n })\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n```\n\n### Window-specific events\n\nTo use the window-specific event channel, a `Window` object can be obtained on a command handler or with the `get_window` function:\n\n```rust\nuse tauri::{Manager, Window};\n\n// the payload type must implement `Serialize`.\n#[derive(serde::Serialize)]\nstruct Payload {\n message: String,\n}\n\n// init a background process on the command, and emit periodic events only to the window that used the command\n#[tauri::command]\nfn init_process(window: Window) {\n std::thread::spawn(move || {\n loop {\n window.emit(\"event-name\", Payload { message: \"Tauri is awesome!\".into() }).unwrap();\n }\n });\n}\n\nfn main() {\n tauri::Builder::default()\n .setup(|app| {\n // `main` here is the window label; it is defined on the window creation or under `tauri.conf.json`\n // the default value is `main`. note that it must be unique\n let main_window = app.get_window(\"main\").unwrap();\n\n // listen to the `event-name` (emitted on the `main` window)\n let id = main_window.listen(\"event-name\", |event| {\n println!(\"got window event-name with payload {:?}\", event.payload());\n });\n // unlisten to the event using the `id` returned on the `listen` function\n // an `once` API is also exposed on the `Window` struct\n main_window.unlisten(id);\n\n // emit the `event-name` event to the `main` window\n main_window.emit(\"event-name\", Payload { message: \"Tauri is awesome!\".into() }).unwrap();\n Ok(())\n })\n .invoke_handler(tauri::generate_handler![init_process])\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n```\n","url":"https://tauri.studio/docs/usage/guides/events"},{"id":"prose_docs_usage_guides_migration_md","title":"Migrating from 0.x","sections":["Commands"],"subSections":["Rust","JavaScript"],"code":["diff","rust","js"],"text":"\nFirst of all if you still have `tauri` as dependency in your `package.json`\nreplace it with a recent version of `@tauri-apps/cli` (make sure to also change\nthe import path in your JavaScript/TypeScript files, see [JavaScript](#javascript)).\n\nFor example:\n\n```diff\n- \"tauri\": \"^0.14.1\"\n+ \"@tauri-apps/cli\": \"^1.0.0-beta-rc.4\"\n```\n\nNext update your `Cargo.toml`:\n\n- add `tauri-build` as a new build-dependency and remove `winres`, e.g.:\n\n ```diff\n + [build-dependencies]\n + tauri-build = { version = \"1.0.0-beta-rc.0\" }\n\n - [target.\"cfg(windows)\".build-dependencies]\n - winres = \"0.1\"\n ```\n\n- update the version of `tauri` to e.g. `1.0.0-beta-rc.4`\n- remove all old features of the `tauri` dependency\n- remove all features, that tauri added and add `custom-protocol` as a new one:\n \n ```diff\n [features]\n - embedded-server = [ \"tauri/embedded-server\" ]\n - no-server = [ \"tauri/no-server\" ]\n + custom-protocol = [ \"tauri/custom-protocol\" ]\n + default = [ \"custom-protocol\" ]\n ```\n\nUpdate your `tauri.conf.json` like this:\n\n- remove `ctx`\n- remove the `embeddedServer`\n- rename `osx` to `macOS` and add some fields:\n - `\"exceptionDomain\": \"\"`\n - `\"signingIdentity\": null`\n - `\"entitlements\": null`\n- remove the `exceptionDomain`\n- add a configuration for `windows`:\n - `\"certificateThumbprint\": null`\n - `\"digestAlgorithm\": \"sha256\"`\n - `\"timestampUrl\": \"\"`\n- make the `window` definition into an array and call it `windows`\n- remove `inliner`\n\n> for more information about the config see [here](../../api/config.md)\n\n```diff\n {\n- \"ctx\": {},\n \"tauri\": {\n- \"embeddedServer\": {\n- \"active\": true\n- },\n \"bundle\": {\n- \"osx\": {\n+ \"macOS\": {\n \"frameworks\": [],\n \"minimumSystemVersion\": \"\",\n- \"useBootstrapper\": false\n+ \"useBootstrapper\": false,\n+ \"exceptionDomain\": \"\",\n+ \"signingIdentity\": null,\n+ \"entitlements\": null\n },\n- \"exceptionDomain\": \"\"\n+ \"windows\": {\n+ \"certificateThumbprint\": null,\n+ \"digestAlgorithm\": \"sha256\",\n+ \"timestampUrl\": \"\"\n+ }\n },\n+ \"updater\": {\n+ \"active\": false\n+ },\n- \"window\": {\n+ \"windows\": [\n {\n \"title\": \"Calciumdibromid\",\n \"width\": 800,\n \"height\": 600,\n \"resizable\": true,\n \"fullscreen\": false\n }\n+ ],\n- \"inliner\": {\n- \"active\": true\n- }\n }\n }\n```\n\n## Commands\n\nThe following example is taken from the previous documentation.\n\nIn the new version of Tauri there is no distinction between synchronous and\nasynchronous commands, the only difference in your code is a call of\n`tauri::execute_promise()`, that isn't there in a synchronous command.\n\n### Rust\n\nHere is the complete example code of the \"old\" version:\n\n```rust\nuse serde::{Deserialize, Serialize};\n\n#[derive(Deserialize)]\nstruct DoSomethingPayload {\n state: String,\n data: u64,\n}\n\n#[derive(Deserialize)]\n#[serde(tag = \"cmd\", rename_all = \"camelCase\")]\nenum Cmd {\n DoSomething {\n count: u64,\n payload: DoSomethingPayload,\n callback: String,\n error: String,\n },\n}\n\n#[derive(Serialize)]\nstruct Response<'a> {\n value: u64,\n message: &'a str,\n}\n\n#[derive(Debug, Clone)]\nstruct CommandError<'a> {\n message: &'a str,\n}\n\nimpl<'a> CommandError<'a> {\n fn new(message: &'a str) -> Self {\n Self { message }\n }\n}\n\nimpl<'a> std::fmt::Display for CommandError<'a> {\n fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n write!(f, \"{}\", self.message)\n }\n}\n\nimpl<'a> std::error::Error for CommandError<'a> {}\n\nfn main() {\n tauri::AppBuilder::new()\n .invoke_handler(|_webview, arg| {\n use Cmd::*;\n match serde_json::from_str(arg) {\n Err(e) => Err(e.to_string()),\n Ok(command) => {\n match command {\n DoSomething { count, payload, callback, error } => tauri::execute_promise(\n _webview,\n move || {\n if count > 5 {\n let response = Response {\n value: 5,\n message: \"async response!\",\n };\n Ok(response)\n } else {\n Err(CommandError::new(\"count should be > 5\").into())\n }\n },\n callback,\n error,\n ),\n }\n Ok(())\n }\n }\n })\n .build()\n .run();\n}\n```\n\nComplete the following steps to migrate your code:\n\n- create a new function for every `Cmd` enum variant\n- wrap the new function with the `#[tauri::command]` macro\n- use the fields of the enum as arguments (`callback` and `error` can be deleted)\n- as function body use the code inside the `match` block of the enum variant\n- add a return type\n- rename `AppBuilder` to `Builder` in `main()`\n- replace the big `invoke_handler` with the new syntax\n\nThe old example code should look like this now:\n\n```rust\nuse serde::{Deserialize, Serialize};\n\n#[derive(Deserialize)]\nstruct DoSomethingPayload {\n state: String,\n data: u64,\n}\n\n#[derive(Serialize)]\nstruct Response<'a> {\n value: u64,\n message: &'a str,\n}\n\n#[derive(Debug, Clone, Serialize)]\nstruct CommandError<'a> {\n message: &'a str,\n}\n\nimpl<'a> CommandError<'a> {\n fn new(message: &'a str) -> Self {\n Self { message }\n }\n}\n\nimpl<'a> std::fmt::Display for CommandError<'a> {\n fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n write!(f, \"{}\", self.message)\n }\n}\n\nimpl<'a> std::error::Error for CommandError<'a> {}\n\n#[tauri::command]\nfn do_something(count: u64, payload: DoSomethingPayload) -> Result {\n if count > 5 {\n let response = Response {\n value: 5,\n message: \"async response!\",\n };\n Ok(response)\n } else {\n Err(CommandError::new(\"count should be > 5\").into())\n }\n}\n\nfn main() {\n tauri::Builder::new()\n .invoke_handler(tauri::generate_handler![do_something])\n .run(tauri::generate_context!());\n}\n```\n\n### JavaScript\n\nLike mentioned above there is also no distinction between synchronous and\nasynchronous commands in JavaScript. \nYou only have to use `invoke` and optionally use the results.\n\nHere is an example of the \"old\" code:\n\n```js\ninvoke({\n cmd: 'doSomething',\n count: 5,\n payload: {\n state: 'some string data',\n data: 17\n }\n});\n\npromisified({\n cmd: 'doSomething',\n count: 5,\n payload: {\n state: 'some string data',\n data: 17\n }\n}).then(response => {\n console.log(response);\n}).catch(error => {\n console.error(error);\n});\n```\n\nComplete the following steps to migrate your code:\n\n- replace all `promisified`-calls with `invoke`-calls\n- extract the `cmd` attribute of the argument object as first parameter \n (you may have to rename it to `snake_case` as the `cmd` parameter is now the\n name of the function in Rust)\n- if you import parts of the tauri-api with `tauri/api/*` replace it with `@tauri-apps/api/*`, e.g.:\n\n ```diff\n - import { invoke } from 'tauri/api/tauri';\n + import { invoke } from '@tauri-apps/api/tauri';\n ```\n\nThe old example code should look like this now:\n\n```js\ninvoke(\n 'do_something',\n {\n count: 5,\n payload: {\n state: 'some string data',\n data: 17\n }\n }\n);\n\ninvoke(\n 'do_something',\n {\n count: 5,\n payload: {\n state: 'some string data',\n data: 17\n }\n }\n).then(response => {\n console.log(response);\n}).catch(error => {\n console.error(error);\n});\n```\n\nFor more information on commands read [Create Rust Commands](command.md).\n","url":"https://tauri.studio/docs/usage/guides/migration"},{"id":"prose_docs_usage_guides_plugin_md","title":"Write Tauri Plugins","sections":["Writing a Plugin","Using a plugin","Official Tauri Plugins"],"subSections":[],"code":["rust"],"text":"\nimport Alert from '@theme/Alert'\n\n\nTauri will soon offer Plugin starter kits so the process of writing a Plugin crate will be simplified.\n\nFor now it's recommended to follow the [official Tauri plugins](#official-tauri-plugins).\n\n\nPlugins allow you to hook into the Tauri application lifecycle and introduce new commands.\n\n## Writing a Plugin\n\nTo write a plugin you just need to implement the `tauri::plugin::Plugin` trait:\n\n```rust\nuse tauri::{plugin::{Plugin, Result as PluginResult}, Runtime, PageLoadPayload, Window, Invoke, AppHandle};\n\nstruct MyAwesomePlugin {\n invoke_handler: Box) + Send + Sync>,\n // plugin state, configuration fields\n}\n\n// the plugin custom command handlers if you choose to extend the API.\n#[tauri::command]\n// this will be accessible with `invoke('plugin:awesome|initialize')`.\n// where `awesome` is the plugin name.\nfn initialize() {}\n\n#[tauri::command]\n// this will be accessible with `invoke('plugin:awesome|do_something')`.\nfn do_something() {}\n\nimpl MyAwesomePlugin {\n // you can add configuration fields here,\n // see https://doc.rust-lang.org/1.0.0/style/ownership/builders.html\n pub fn new() -> Self {\n Self {\n invoke_handler: Box::new(tauri::generate_handler![initialize, do_something]),\n }\n }\n}\n\nimpl Plugin for MyAwesomePlugin {\n /// The plugin name. Must be defined and used on the `invoke` calls.\n fn name(&self) -> &'static str {\n \"awesome\"\n }\n\n /// The JS script to evaluate on initialization.\n /// Useful when your plugin is accessible through `window`\n /// or needs to perform a JS task on app initialization\n /// e.g. \"window.awesomePlugin = { ... the plugin interface }\"\n fn initialization_script(&self) -> Option {\n None\n }\n\n /// initialize plugin with the config provided on `tauri.conf.json > plugins > $yourPluginName` or the default value.\n fn initialize(&mut self, app: &AppHandle, config: serde_json::Value) -> PluginResult<()> {\n Ok(())\n }\n\n /// Callback invoked when the Window is created.\n fn created(&mut self, window: Window) {}\n\n /// Callback invoked when the webview performs a navigation.\n fn on_page_load(&mut self, window: Window, payload: PageLoadPayload) {}\n\n /// Extend the invoke handler.\n fn extend_api(&mut self, message: Invoke) {\n (self.invoke_handler)(message)\n }\n}\n```\n\nNote that each function on the `Plugin` trait is optional, except the `name` function.\n\n## Using a plugin\n\nTo use a plugin, just pass an instance of the `MyAwesomePlugin` struct to the App's `plugin` method:\n\n```rust\nfn main() {\n let awesome_plugin = MyAwesomePlugin::new();\n tauri::Builder::default()\n .plugin(awesome_plugin)\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n```\n\n## Official Tauri Plugins\n\n- [Stronghold (WIP)](https://github.com/tauri-apps/tauri-plugin-stronghold)\n- [Authenticator (WIP)](https://github.com/tauri-apps/tauri-plugin-authenticator)\n- [Logging (WIP)](https://github.com/tauri-apps/tauri-plugin-log)\n- [SQL (WIP)](https://github.com/tauri-apps/tauri-plugin-sql)\n","url":"https://tauri.studio/docs/usage/guides/plugin"},{"id":"prose_docs_usage_guides_updater_md","title":"Updater","sections":["Update Requests","Built","Javascript API","Events","Update Server JSON Format","Update File JSON Format","macOS","Windows","Linux"],"subSections":["Initialize updater and check if a new version is available","Listen New Update Available","Emit Install and Download","Listen Install Progress"],"code":["js","json","none","bash"],"text":"\n# Configuration\n\nOnce you have your Tauri project ready, you need to configure the updater.\n\nAdd this in tauri.conf.json\n```json\n\"updater\": {\n \"active\": true,\n \"endpoints\": [\n \"https://releases.myapp.com/{{target}}/{{current_version}}\"\n ],\n \"dialog\": true,\n \"pubkey\": \"\"\n}\n```\n\nThe required keys are \"active\" and \"endpoints\", others are optional.\n\n\"active\" must be a boolean. By default, it's set to false.\n\n\"endpoints\" must be an array. The string `{{target}}` and `{{current_version}}` are automatically replaced in the URL allowing you determine [server-side](#update-server-json-format) if an update is available. If multiple endpoints are specified, the updater will fallback if a server is not responding within the pre-defined timeout.\n\n\"dialog\" if present must be a boolean. By default, it's set to true. If enabled, [events](#events) are turned-off as the updater will handle everything. If you need the custom events, you MUST turn off the built-in dialog.\n\n\"pubkey\" if present must be a valid public-key generated with Tauri cli. See [Signing updates](#signing-updates).\n\n## Update Requests\n\nTauri is indifferent to the request the client application provides for update checking.\n\n`Accept: application/json` is added to the request headers because Tauri is responsible for parsing the response.\n\nFor the requirements imposed on the responses and the body format of an update, response see [Server Support](#server-support).\n\nYour update request must *at least* include a version identifier so that the server can determine whether an update for this specific version is required.\n\nIt may also include other identifying criteria such as operating system version, to allow the server to deliver as fine-grained an update as you would like.\n\nHow you include the version identifier or other criteria is specific to the server that you are requesting updates from. A common approach is to use query parameters, [Configuration](#configuration) shows an example of this.\n\n## Built-in dialog\n\nBy default, updater uses a built-in dialog API from Tauri.\n\n![New Update](https://i.imgur.com/UMilB5A.png)\n\nThe dialog release notes is represented by the update `note` provided by the [server](#server-support).\n\nIf the user accepts, the download and install are initialized. The user will be then prompted to restart the application.\n\n## Javascript API\n\n**Attention, you need to _disable built-in dialog_ in your [tauri configuration](#configuration), otherwise, events aren't emitted and the javascript API will NOT work.**\n\n\n```js\nimport { checkUpdate, installUpdate } from \"@tauri-apps/api/updater\";\nimport { relaunch } from \"@tauri-apps/api/process\";\ntry {\n const {shouldUpdate, manifest} = await checkUpdate();\n if (shouldUpdate) {\n // display dialog\n await installUpdate();\n // install complete, restart app\n await relaunch();\n }\n} catch(error) {\n console.log(error);\n}\n```\n\n## Events\n\n**Attention, you need to _disable built-in dialog_ in your [tauri configuration](#configuration), otherwise, events aren't emitted.**\n\nTo know when an update is ready to be installed, you can subscribe to these events:\n\n### Initialize updater and check if a new version is available\n\n#### If a new version is available, the event `tauri://update-available` is emitted.\n\nEvent: `tauri://update`\n\n### Rust\n```rust\nwindow.emit(\"tauri://update\".to_string(), None);\n```\n\n### Javascript\n```js\nimport { emit } from \"@tauri-apps/api/event\";\nemit(\"tauri://update\");\n```\n\n### Listen New Update Available\n\nEvent: `tauri://update-available`\n\nEmitted data:\n```none\nversion Version announced by the server\ndate Date announced by the server\nbody Note announced by the server\n```\n\n### Rust\n```rust\nwindow.listen(\"tauri://update-available\".to_string(), move |msg| {\n println!(\"New version available: {:?}\", msg);\n})\n```\n\n### Javascript\n```js\nimport { listen } from \"@tauri-apps/api/event\";\nlisten(\"tauri://update-available\", function (res) {\n console.log(\"New version available: \", res);\n});\n```\n\n### Emit Install and Download\n\nYou need to emit this event to initialize the download and listen to the [install progress](#listen-install-progress).\n\nEvent: `tauri://update-install`\n\n### Rust\n```rust\nwindow.emit(\"tauri://update-install\".to_string(), None);\n```\n\n### Javascript\n```js\nimport { emit } from \"@tauri-apps/api/event\";\nemit(\"tauri://update-install\");\n```\n\n### Listen Install Progress\n\nEvent: `tauri://update-status`\n\nEmitted data:\n```none\nstatus [ERROR/PENDING/DONE]\nerror String/null\n```\n\nPENDING is emitted when the download is started and DONE when the install is complete. You can then ask to restart the application.\n\nERROR is emitted when there is an error with the updater. We suggest to listen to this event even if the dialog is enabled.\n\n### Rust\n```rust\nwindow.listen(\"tauri://update-status\".to_string(), move |msg| {\n println!(\"New status: {:?}\", msg);\n})\n```\n\n### Javascript\n```js\nimport { listen } from \"@tauri-apps/api/event\";\nlisten(\"tauri://update-status\", function (res) {\n console.log(\"New status: \", res);\n});\n```\n\n# Server Support\n\nYour server should determine whether an update is required based on the [Update Request](#update-requests) your client issues.\n\nIf an update is required your server should respond with a status code of [200 OK](http://tools.ietf.org/html/rfc2616#section-10.2.1) and include the [update JSON](#update-server-json-format) in the body. To save redundantly downloading the same version multiple times your server must not inform the client to update.\n\nIf no update is required your server must respond with a status code of [204 No Content](http://tools.ietf.org/html/rfc2616#section-10.2.5).\n\n## Update Server JSON Format\n\nWhen an update is available, Tauri expects the following schema in response to the update request provided:\n\n```json\n{\n \"url\": \"https://mycompany.example.com/myapp/releases/myrelease.tar.gz\",\n \"version\": \"0.0.1\",\n \"notes\": \"Theses are some release notes\",\n \"pub_date\": \"2020-09-18T12:29:53+01:00\",\n \"signature\": \"\"\n}\n```\n\nThe only required keys are \"url\" and \"version\", the others are optional.\n\n\"pub_date\" if present must be formatted according to ISO 8601.\n\n\"signature\" if present must be a valid signature generated with Tauri cli. See [Signing updates](#signing-updates).\n\n## Update File JSON Format\n\nThe alternate update technique uses a plain JSON file meaning you can store your update metadata on S3, gist, or another static file store. Tauri will check against the name/version field and if the version is smaller than the current one and the platform is available, the update will be triggered. The format of this file is detailed below:\n\n```json\n{\n\t\"name\":\"v1.0.0\",\n\t\"notes\":\"Test version\",\n\t\"pub_date\":\"2020-06-22T19:25:57Z\",\n\t\"platforms\": {\n\t\t\"darwin\": {\n\t\t\t\"signature\":\"\",\n\t\t\t\"url\":\"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.app.tar.gz\"\n\t\t},\n \t\t\"linux\": {\n\t\t\t\"signature\":\"\",\n\t\t\t\"url\":\"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.AppImage.tar.gz\"\n\t\t},\n\t\t\"win64\": {\n\t\t\t\"signature\":\"\",\n\t\t\t\"url\":\"https://github.com/lemarier/tauri-test/releases/download/v1.0.0/app.x64.msi.zip\"\n\t\t}\n\t}\n}\n```\n\n# Bundler (Artifacts)\n\nThe Tauri bundler will automatically generate update artifacts if the updater is enabled in `tauri.conf.json`\n\nIf the bundler can locate your private and pubkey, your update artifacts will be automatically signed.\n\nThe signature can be found in the `sig` file. The signature can be uploaded to GitHub safely or made public as long as your private key is secure.\n\nYou can see how it's [bundled with the CI](https://github.com/tauri-apps/tauri/blob/5b6c7bb6ee3661f5a42917ce04a89d94f905c949/.github/workflows/artifacts-updater.yml#L44) and a [sample tauri.conf.json](https://github.com/tauri-apps/tauri/blob/5b6c7bb6ee3661f5a42917ce04a89d94f905c949/examples/updater/src-tauri/tauri.conf.json#L52)\n\n## macOS\n\nOn MACOS we create a .tar.gz from the whole application. (.app)\n\n```none\ntarget/release/bundle\n└── osx\n └── app.app\n └── app.app.tar.gz (update bundle)\n └── app.app.tar.gz.sig (if signature enabled)\n```\n\n## Windows\n\nOn Windows we create a .zip from the MSI, when downloaded and validated, we run the MSI install.\n\n```none\ntarget/release\n└── app.x64.msi\n└── app.x64.msi.zip (update bundle)\n└── app.x64.msi.zip.sig (if signature enabled)\n```\n\n## Linux\n\nOn Linux, we create a .tar.gz from the AppImage.\n\n```none\ntarget/release/bundle\n└── appimage\n └── app.AppImage\n └── app.AppImage.tar.gz (update bundle)\n └── app.AppImage.tar.gz.sig (if signature enabled)\n```\n\n# Signing updates\n\nWe offer a built-in signature to ensure your update is safe to be installed.\n\nTo sign your updates, you need two things.\n\nThe *Public-key* (pubkey) should be added inside your `tauri.conf.json` to validate the update archive before installing.\n\nThe *Private key* (privkey) is used to sign your update and should NEVER be shared with anyone. Also, if you lost this key, you'll NOT be able to publish a new update to the current user base (if pubkey is set in tauri.conf.json). It's important to save it at a safe place and you can always access it.\n\nTo generate your keys you need to use the Tauri cli.\n\n```bash\ntauri sign -g -w ~/.tauri/myapp.key\n```\n\nYou have multiple options available\n```bash\nTauri updates signer.\nUSAGE:\n tauri sign [FLAGS] [OPTIONS]\nFLAGS:\n --force Overwrite private key even if it exists on the specified path\n -g, --generate Generate keypair to sign files\n -h, --help Prints help information\n --no-password Set empty password for your private key\n -V, --version Prints version information\nOPTIONS:\n -p, --password Set private key password when signing\n -k, --private-key Load the private key from a string\n -f, --private-key-path Load the private key from a file\n --sign-file Sign the specified file\n -w, --write-keys Write private key to a file\n```\n***\nEnvironment variables used to sign with the Tauri `bundler`:\nIf they are set, and `tauri.conf.json` expose the public key, the bundler will automatically generate and sign the updater artifacts.\n`TAURI_PRIVATE_KEY` Path or String of your private key\n`TAURI_KEY_PASSWORD` Your private key password (optional)\n","url":"https://tauri.studio/docs/usage/guides/updater"},{"id":"prose_docs_usage_guides_bundler_anti_bloat_md","title":"Anti Bloat","sections":[],"subSections":["Rust Compression Features","Stripping","Allowlist config","UPX"],"code":[null,"json"],"text":"\nimport Alert from '@theme/Alert'\n\nThe following links have tutorials on reducing the size of your installers:\n\n- https://github.com/RazrFalcon/cargo-bloat\n- https://lifthrasiir.github.io/rustlog/why-is-a-rust-executable-large.html\n- https://doc.rust-lang.org/cargo/reference/manifest.html#the-profile-sections\n\n### Rust Compression Features\n\nAdd this to your `src-tauri/Cargo.toml`\n\n [profile.release]\n panic = \"abort\"\n codegen-units = 1\n lto = true\n incremental = false\n opt-level = \"s\"\n\n\n\nThere is also `opt-level = \"z\"` available to try to reduce the resulting binary size. `\"s\"` and `\"z\"` can sometimes be smaller than the other, so test it with your own application!\n\nWe've seen smaller binary sizes from `\"s\"` for Tauri example applications, but real world applications can always differ.\n\n\n#### Unstable Rust Compression Features\n\n\nThe following suggestions are all unstable features and require a nightly toolchain. See the Unstable Features documentation for more information of what this involves.\n\n\nThe following methods involve using unstable compiler features and require having a rust nightly toolchain installed. If you don't have the nightly toolchain + `rust-src` nightly component added, try the following:\n\n $ rustup toolchain install nightly\n $ rustup component add rust-src --toolchain nightly\n\nThe Rust Standard Library comes precompiled. You can instead apply the optimization options used for the rest of your binary + dependencies to the std with an unstable flag. This flag requires specifying your target, so know the target triple that you are targeting.\n\n $ cargo +nightly build --release -Z build-std --target x86_64-unknown-linux-gnu\n\nIf you are using `panic = \"abort\"` in your release profile optimizations, then you need to make sure the `panic_abort` crate is compiled with std. Additionally, an extra std feature can be used to further reduce the binary size. The following applies both:\n\n $ cargo +nightly build --release -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort --target x86_64-unknown-linux-gnu\n\nSee the unstable documentation for more details about [`-Z build-std`](https://doc.rust-lang.org/cargo/reference/unstable.html#build-std) and [`-Z build-std-features`](https://doc.rust-lang.org/cargo/reference/unstable.html#build-std-features).\n\n### Stripping\n\nBinary size can easily be reduced by stripping out debugging information from binaries that ship to end users. This is not good for debuggable builds, but means good binary size savings for end user binaries. The easiest way is to use the famous `strip` utility to remove this debugging information.\n\n $ strip target/release/my_application\n\nSee your local `strip` manpage for more information and flags that can be used to specify what information gets stripped out from the binary.\n\n### Allowlist config\n\nYou can also reduce the application size with the `allowlist` config, and only enabling what you need. Sometimes this is useful with Tauri's [Bridge-Pattern](/docs/usage/patterns/bridge) or others, depending on needs.\n\nFor example in `tauri.conf.json` file:\n\n```json\n{\n \"tauri\": {\n \"allowlist\": {\n \"all\": false,\n \"fs\": {\n \"writeFile\": true,\n \"writeBinaryFile\": true\n },\n \"shell\": {\n \"execute\": true\n },\n \"dialog\": {\n \"save\": true\n }\n }\n }\n}\n```\n\n### UPX\n\nUPX, **Ultimate Packer for eXecutables**, is a dinosaur amongst the binary packers. This 23-year old, well-maintained piece of kit is GPL-v2 licensed with a pretty liberal usage declaration. Our understanding of the licensing is that you can use it for any purposes (commercial or otherwise) without needing to change your license unless you modify the source code of UPX.\n\nBasically it compresses the binary and decompresses it at runtime. It should work for pretty much any binary type out there. Read more: https://github.com/upx/upx\n\n\nYou should know that this technique might flag your binary as a virus on Windows and macOS - so use at your own discretion, and as always validate with [Frida](https://frida.re/docs/home/) and do real distribution testing!\n\n\n#### Usage on macOS\n\n $ brew install upx\n $ yarn tauri build\n $ upx --ultra-brute src-tauri/target/release/bundle/macos/app.app/Contents/macOS/app\n Ultimate Packer for eXecutables\n Copyright (C) 1996 - 2018\n UPX 3.95 Markus Oberhumer, Laszlo Molnar & John Reiser Aug 26th 2018\n\n File size Ratio Format Name\n -------------------- ------ ----------- -----------\n 963140 -> 274448 28.50% macho/amd64 app\n","url":"https://tauri.studio/docs/usage/guides/bundler/anti-bloat"},{"id":"prose_docs_usage_guides_bundler_debian_md","title":"Debian packages","sections":[],"subSections":[],"code":["json"],"text":"\nimport Alert from '@theme/Alert'\n\nTauri allows your app to be packaged as a `.deb` (Debian package) file.\n\n# Bootstrapper\n\nInstead of launching the app directly, you can configure the bundled app to run a script that tries to expose the environment variables to the app; without that you'll have trouble using system programs because the `PATH` environment variable isn't correct. Enable it with the `useBootstrapper` config.\n\n# Custom files\n\nTo include custom files to the debian package, you can configure a mapping on `tauri.conf.json > tauri > bundle > deb > files` as follows:\n\n```json\n{\n \"tauri\": {\n \"bundle\": {\n \"deb\": {\n \"files\": {\n \"/usr/lib/README.md\": \"../README.md\", // copies the README.md file to /usr/lib/README.md\n \"usr/lib/assets\": \"../public/\" // copies the entire public directory to /usr/lib/assets\n }\n }\n }\n }\n}\n```\n\n\nEach `files` object key is the path on the debian package, and the value is a path to a file or directory relative to the `tauri.conf.json` file.\n\n","url":"https://tauri.studio/docs/usage/guides/bundler/debian"},{"id":"prose_docs_usage_guides_bundler_introduction_md","title":"Introduction","sections":[],"subSections":[],"code":[],"text":"\nThe Tauri Bundler is a Rust harness for compiling your binary, packaging assets, and preparing a final bundle.\n\nIt will detect your operating system and build a bundle accordingly. It currently supports:\n\n- Linux: .deb, .appimage\n- macOS: .app, .dmg\n- Windows: .exe, .msi","url":"https://tauri.studio/docs/usage/guides/bundler/introduction"},{"id":"prose_docs_usage_guides_bundler_sidecar_md","title":"Sidecar (Embedding External Binaries)","sections":["Running the sidecar binary on JavaScript","Running the sidecar binary on Rust","Using Node"],"subSections":[],"code":["json","bash","javascript","rust"],"text":"\nimport Alert from '@theme/Alert'\n\nYou may need to embed depending binaries in order to make your application work or to prevent users having to install additional dependencies (e.g. Node.js, Python, etc).\n\nTo bundle the binaries of your choice, you can add the `externalBin` property to the `tauri > bundle` object in your `tauri.conf.json`.\n\nSee more about tauri.conf.json configuration here.\n\n`externalBin` expects a list of strings targeting binaries either with absolute or relative paths.\n\nHere is a sample to illustrate the configuration, this is not a complete `tauri.conf.json` file:\n\n```json\n{\n \"tauri\": {\n \"bundle\": {\n \"externalBin\": [\"/absolute/path/to/app\", \"relative/path/to/binary\", \"bin/python\"]\n }\n }\n}\n```\n\nA binary with the same name and a `-$TARGET_TRIPLE` suffix must exist on the specified path. For instance, `\"externalBin\": [\"bin/python\"]` requires a `src-tauri/bin/python-x86_64-unknown-linux-gnu` executable on Linux. You can find the current platform's target triple running the following command:\n\n```bash\nRUSTC_BOOTSTRAP=1 rustc -Z unstable-options --print target-spec-json\n```\n\nHere's a Node.js script to append the target triple to a binary:\n\n```javascript\nconst execa = require('execa')\nconst fs = require('fs')\n\nlet extension = ''\nif (process.platform === 'win32') {\n extension = '.exe'\n}\n\nasync function main() {\n const rustInfo = (await execa('rustc', ['-vV'])).stdout\n const targetTriple = /host: (\\S+)/g.exec(rustInfo)[1]\n if (!targetTriple) {\n console.error('Failed to determine platform target triple')\n }\n fs.renameSync(\n `src-tauri/binaries/app${extension}`,\n `src-tauri/binaries/app-${targetTriple}${extension}`\n )\n}\n\nmain().catch((e) => {\n throw e\n})\n\n```\n\n## Running the sidecar binary on JavaScript\n\nOn the JavaScript code, import the `Command` class on the `shell` module and use the `sidecar` static method:\n\n```javascript\nimport { Command } from '@tauri-apps/api/shell'\n// alternatively, use `window.__TAURI__.shell.Command`\n// `my-sidecar` is the value specified on `tauri.conf.json > tauri > bundle > externalBin`\nconst command = Command.sidecar('my-sidecar')\nconst output = await command.execute()\n```\n\n## Running the sidecar binary on Rust\n\nOn the Rust code, import the `Command` struct from the `tauri::api::process` module:\n\n```rust\nlet (mut rx, mut child) = Command::new_sidecar(\"my-sidecar\")\n .expect(\"failed to create `my-sidecar` binary command\")\n .spawn()\n .expect(\"Failed to spawn sidecar\");\n\ntauri::async_runtime::spawn(async move {\n // read events such as stdout\n while let Some(event) = rx.recv().await {\n if let CommandEvent::Stdout(line) = event {\n window\n .emit(\"message\", Some(format!(\"'{}'\", line)))\n .expect(\"failed to emit event\");\n // write to stdin\n child.write(\"message from Rust\\n\".as_bytes()).unwrap();\n }\n }\n});\n```\n\n## Using Node.js on a sidecar\n\nThe Tauri [sidecar example](https://github.com/tauri-apps/tauri/tree/dev/examples/sidecar) demonstrates how to use the sidecar API to run a Node.js application on Tauri.\nIt compiles the Node.js code using [pkg](https://github.com/vercel/pkg) and uses the scripts above to run it.\n","url":"https://tauri.studio/docs/usage/guides/bundler/sidecar"},{"id":"prose_docs_usage_guides_utils_multiwindow_md","title":"Multiwindow","sections":[],"subSections":[],"code":[],"text":"\nManage multiple windows on a single application.\n","url":"https://tauri.studio/docs/usage/guides/utils/multiwindow"},{"id":"prose_docs_usage_guides_visual_icons_md","title":"Icons","sections":[],"subSections":[],"code":["sh","json"],"text":"\nimport Command from '@theme/Command'\nimport Alert from '@theme/Alert'\n\nTauri ships with a default iconset based on its logo. This is probably NOT what you want when you ship your application. To remedy this common situation, Tauri provides the `icon` command that will take an input file and create all the icons needed for the various platforms:\n\n\n\n```sh\nOptions\n --help, -h Displays this message\n --log, l Logging [boolean]\n --icon, i Source icon (png, 1240x1240 with transparency)\n --target, t Target folder (default: 'src-tauri/icons')\n --compression, c Compression type [pngquant|optipng|zopfli]\n```\n\nThese will be placed in your `src-tauri/icons` folder where they will automatically be included in your built app.\n\nIf you need to source your icons from some other location, you can edit this part of the `src-tauri/tauri.conf.json` file:\n\n```json\n{\n \"tauri\": {\n \"bundle\": {\n \"icon\": [\n \"icons/32x32.png\",\n \"icons/128x128.png\",\n \"icons/128x128@2x.png\",\n \"icons/icon.icns\",\n \"icons/icon.ico\"\n ]\n }\n }\n}\n```\n\n\n\n - icon.icns = macOS\n - icon.ico = MS Windows\n - \\*.png = Linux\n\n\n","url":"https://tauri.studio/docs/usage/guides/visual/icons"},{"id":"prose_docs_usage_guides_visual_menu_md","title":"Window Menu","sections":[],"subSections":["Creating a menu","Adding the menu to all windows","Adding the menu to a specific window","Listening to events on custom menu items","Updating menu items"],"code":["rust"],"text":"\nNative application menus can be attached to a window.\n\n### Creating a menu\n\nTo create a native window menu, import the `Menu`, `Submenu`, `MenuItem` and `CustomMenuItem` types.\nThe `MenuItem` enum contains a collection of platform-specific items (currently not implemented on Windows).\nThe `CustomMenuItem` allows you to create your own menu items and add special functionality to them.\n\n```rust\nuse tauri::{CustomMenuItem, Menu, MenuItem, Submenu};\n```\n\nCreate a `Menu` instance:\n\n```rust\n// here `\"quit\".to_string()` defines the menu item id, and the second parameter is the menu item label.\nlet quit = CustomMenuItem::new(\"quit\".to_string(), \"Quit\");\nlet close = CustomMenuItem::new(\"close\".to_string(), \"Close\");\nlet submenu = Submenu::new(\"File\", Menu::new().add_item(quit).add_item(close));\nlet menu = Menu::new()\n .add_native_item(MenuItem::Copy)\n .add_item(CustomMenuItem::new(\"hide\", \"Hide\"))\n .add_submenu(submenu);\n```\n\n### Adding the menu to all windows\n\nThe defined menu can be set to all windows using the `menu` API on the `tauri::Builder` struct:\n\n```rust\nuse tauri::{CustomMenuItem, Menu, MenuItem, Submenu};\n\nfn main() {\n let menu = Menu::new(); // configure the menu\n tauri::Builder::default()\n .menu(menu)\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n### Adding the menu to a specific window\n\nYou can create a window and set the menu to be used. This allows defining a specific menu set for each application window.\n\n```rust\nuse tauri::{CustomMenuItem, Menu, MenuItem, Submenu};\nuse tauri::WindowBuilder;\n\nfn main() {\n let menu = Menu::new(); // configure the menu\n tauri::Builder::default()\n .create_window(\n \"main-window\".to_string(),\n tauri::WindowUrl::App(\"index.html\".into()),\n move |window_builder, webview_attributes| {\n (window_builder.menu(menu), webview_attributes)\n },\n )\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n### Listening to events on custom menu items\n\nEach `CustomMenuItem` triggers an event when clicked. Use the `on_menu_event` API to handle them, either on the global `tauri::Builder` or on an specific window.\n\n#### Listening to events on global menus\n\n```rust\nuse tauri::{CustomMenuItem, Menu, MenuItem};\n\nfn main() {\n let menu = vec![]; // insert the menu array here\n tauri::Builder::default()\n .menu(menu)\n .on_menu_event(|event| {\n match event.menu_item_id() {\n \"quit\" => {\n std::process::exit(0);\n }\n \"close\" => {\n event.window().close().unwrap();\n }\n _ => {}\n }\n })\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n#### Listening to events on window menus\n\n```rust\nuse tauri::{CustomMenuItem, Menu, MenuItem};\nuse tauri::{Manager, WindowBuilder};\n\nfn main() {\n let menu = vec![]; // insert the menu array here\n tauri::Builder::default()\n .create_window(\n \"main-window\".to_string(),\n tauri::WindowUrl::App(\"index.html\".into()),\n move |window_builder, webview_attributes| {\n (window_builder.menu(menu), webview_attributes)\n },\n )\n .setup(|app| {\n let window = app.get_window(\"main-window\").unwrap();\n let window_ = window.clone();\n window.on_menu_event(move |event| {\n match event.menu_item_id().as_str() {\n \"quit\" => {\n std::process::exit(0);\n }\n \"close\" => {\n window_.close().unwrap();\n }\n _ => {}\n }\n });\n Ok(())\n })\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n### Updating menu items\n\nThe `Window` struct has a `menu_handle` method, which allows updating menu items:\n\n```rust\nfn main() {\n tauri::Builder::default()\n .setup(|app| {\n let main_window = app.get_window(\"main\").unwrap();\n let menu_handle = main_window.menu_handle();\n std::thread::spawn(move || {\n // you can also `set_selected`, `set_enabled` and `set_native_image` (macOS only).\n menu_handle.get_item(\"item_id\").set_title(\"New title\");\n })\n Ok(())\n })\n}\n```\n","url":"https://tauri.studio/docs/usage/guides/visual/menu"},{"id":"prose_docs_usage_guides_visual_splashscreen_md","title":"Splashscreen","sections":[],"subSections":["Setup","Waiting for Webpage","Waiting for Rust"],"code":["diff",null],"text":"\nimport Link from '@docusaurus/Link'\n\nIf your webpage could take some time to load, or if you need to run an initialization procedure in Rust before displaying your main window, a splashscreen could improve the loading experience for the user.\n\n### Setup\n\nFirst, create a `splashscreen.html` in your `distDir` that contains the HTML code for a splashscreen. Then, update your `tauri.conf.json` like so:\n\n```diff\n\"windows\": [\n {\n \"title\": \"Tauri App\",\n \"width\": 800,\n \"height\": 600,\n \"resizable\": true,\n \"fullscreen\": false,\n+ \"visible\": false // Hide the main window by default\n },\n // Add the splashscreen window\n+ {\n+ \"width\": 400,\n+ \"height\": 200,\n+ \"decorations\": false,\n+ \"url\": \"splashscreen.html\",\n+ \"label\": \"splashscreen\"\n+ }\n]\n```\n\nNow, your main window will be hidden and the splashscreen window will show when your app is launched. Next, you'll need a way to close the splashscreen and show the main window when your app is ready. How you do this depends on what you are waiting for before closing the splashscreen.\n\n### Waiting for Webpage\n\nIf you are waiting for your web code, you'll want to create a `close_splashscreen` [command](../command.md).\n\n```rust title=src-tauri/main.rs\nuse tauri::Manager;\n// Create the command:\n#[tauri::command]\nfn close_splashscreen(window: tauri::Window) {\n // Close splashscreen\n if let Some(splashscreen) = window.get_window(\"splashscreen\") {\n splashscreen.close().unwrap();\n }\n // Show main window\n window.get_window(\"main\").unwrap().show().unwrap();\n}\n\n// Register the command:\nfn main() {\n tauri::Builder::default()\n // Add this line\n .invoke_handler(tauri::generate_handler![close_splashscreen])\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n\n```\n\nThen, you can call it from your JS:\n\n```js\n// With the Tauri API npm package:\nimport { invoke } from '@tauri-apps/api/tauri'\n// With the Tauri global script:\nconst invoke = window.__TAURI__.invoke\n\ndocument.addEventListener('DOMContentLoaded', () => {\n // This will wait for the window to load, but you could\n // run this function on whatever trigger you want\n invoke('close_splashscreen')\n})\n```\n\n### Waiting for Rust\n\nIf you are waiting for Rust code to run, put it in the `setup` function handler so you have access to the `App` instance:\n\n```rust title=src-tauri/main.rs\nuse tauri::Manager;\nfn main() {\n tauri::Builder::default()\n .setup(|app| {\n let splashscreen_window = app.get_window(\"splashscreen\").unwrap();\n let main_window = app.get_window(\"main\").unwrap();\n // we perform the initialization code on a new task so the app doesn't freeze\n tauri::async_runtime::spawn(async move {\n // initialize your app here instead of sleeping :)\n println!(\"Initializing...\");\n std::thread::sleep(std::time::Duration::from_secs(2));\n println!(\"Done initializing.\");\n\n // After it's done, close the splashscreen and display the main window\n splashscreen_window.close().unwrap();\n main_window.show().unwrap();\n });\n Ok(())\n })\n .run(tauri::generate_context!())\n .expect(\"failed to run app\");\n}\n```\n","url":"https://tauri.studio/docs/usage/guides/visual/splashscreen"},{"id":"prose_docs_usage_guides_visual_system_tray_md","title":"System Tray","sections":[],"subSections":["Setup","Creating a system tray","Configuring a system tray context menu","Configure the app system tray","Listening to system tray events","Updating system tray"],"code":["json","rust"],"text":"\nNative application system tray.\n\n### Setup\n\nConfigure the `systemTray` object on `tauri.conf.json`:\n\n```json\n{\n \"tauri\": {\n \"systemTray\": {\n \"iconPath\": \"icons/icon.png\",\n \"iconAsTemplate\": true,\n }\n }\n}\n```\n\nThe `iconPath` is pointed to a PNG file on macOS and Linux, and a `.ico` file must exist for Windows support.\n\nThe `iconAsTemplate` is a boolean value that determines whether the image represents a [template](https://developer.apple.com/documentation/appkit/nsimage/1520017-template?language=objc) image on macOS.\n\n\n### Creating a system tray\n\nTo create a native system tray, import the `SystemTray` type:\n\n```rust\nuse tauri::SystemTray;\n```\n\nInitialize a new tray instance:\n\n```rust\nlet tray = SystemTray::new();\n```\n\n### Configuring a system tray context menu\n\nOptionally you can add a context menu that is visible when the tray icon is right clicked. Import the `SystemTrayMenu`, `SystemTrayMenuItem` and `CustomMenuItem` types:\n\n```rust\nuse tauri::{CustomMenuItem, SystemTrayMenu, SystemTrayMenuItem};\n```\n\nCreate the `SystemTrayMenu`:\n\n```rust\n// here `\"quit\".to_string()` defines the menu item id, and the second parameter is the menu item label.\nlet quit = CustomMenuItem::new(\"quit\".to_string(), \"Quit\");\nlet hide = CustomMenuItem::new(\"hide\".to_string(), \"Hide\");\nlet tray_menu = SystemTrayMenu::new()\n .add_item(quit)\n .add_native_item(SystemTrayMenuItem::Separator)\n .add_item(hide);\n```\n\nAdd the tray menu to the `SystemTray` instance:\n\n```rust\nlet tray = SystemTray::new().with_menu(tray_menu);\n```\n\n### Configure the app system tray\n\nThe created `SystemTray` instance can be set using the `system_tray` API on the `tauri::Builder` struct:\n\n```rust\nuse tauri::{CustomMenuItem, SystemTray, SystemTrayMenu};\n\nfn main() {\n let tray_menu = SystemTrayMenu::new(); // insert the menu items here\n let system_tray = SystemTray::new()\n .with_menu(tray_menu);\n tauri::Builder::default()\n .system_tray(system_tray)\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n### Listening to system tray events\n\nEach `CustomMenuItem` triggers an event when clicked.\nAlso, Tauri emits tray icon click events.\nUse the `on_system_tray_event` API to handle them:\n\n```rust\nuse tauri::{CustomMenuItem, SystemTray, SystemTrayMenu};\nuse tauri::Manager;\n\nfn main() {\n let tray_menu = SystemTrayMenu::new(); // insert the menu items here\n tauri::Builder::default()\n .system_tray(SystemTray::new().with_menu(tray_menu))\n .on_system_tray_event(|app, event| match event {\n SystemTrayEvent::LeftClick {\n position: _,\n size: _,\n ..\n } => {\n println!(\"system tray received a left click\");\n }\n SystemTrayEvent::RightClick {\n position: _,\n size: _,\n ..\n } => {\n println!(\"system tray received a right click\");\n }\n SystemTrayEvent::DoubleClick {\n position: _,\n size: _,\n ..\n } => {\n println!(\"system tray received a double click\");\n }\n SystemTrayEvent::MenuItemClick { id, .. } => {\n match id.as_str() {\n \"quit\" => {\n std::process::exit(0);\n }\n \"hide\" => {\n let window = app.get_window(\"main\").unwrap();\n window.hide().unwrap();\n }\n _ => {}\n }\n }\n _ => {}\n })\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n### Updating system tray\n\nThe `AppHandle` struct has a `tray_handle` method, which returns a handle to the system tray allowing updating tray icon and context menu items:\n\n#### Updating context menu items\n\n```rust\nuse tauri::{CustomMenuItem, SystemTray, SystemTrayMenu};\nuse tauri::Manager;\n\nfn main() {\n let tray_menu = SystemTrayMenu::new(); // insert the menu items here\n tauri::Builder::default()\n .system_tray(SystemTray::new().with_menu(tray_menu))\n .on_system_tray_event(|app, event| match event {\n SystemTrayEvent::MenuItemClick { id, .. } => {\n // get a handle to the clicked menu item\n // note that `tray_handle` can be called anywhere,\n // just get a `AppHandle` instance with `app.handle()` on the setup hook\n // and move it to another function or thread\n let item_handle = app.tray_handle().get_item(&id);\n match id.as_str() {\n \"hide\" => {\n let window = app.get_window(\"main\").unwrap();\n window.hide().unwrap();\n // you can also `set_selected`, `set_enabled` and `set_native_image` (macOS only).\n item_handle.set_title(\"Show\").unwrap();\n }\n _ => {}\n }\n }\n _ => {}\n })\n .run(tauri::generate_context!())\n .expect(\"error while running tauri application\");\n}\n```\n\n#### Updating tray icon\n\nNote that `tauri::Icon` must be a `Path` variant on Linux, and `Raw` variant on Windows and macOS.\n\n```rust\napp.tray_handle().set_icon(tauri::Icon::Raw(include_bytes!(\"../path/to/myicon.ico\"))).unwrap();\n```\n","url":"https://tauri.studio/docs/usage/guides/visual/system-tray"},{"id":"prose_docs_usage_guides_visual_window_customization_md","title":"Window Customization","sections":["Configuration","Creating a Custom Titlebar"],"subSections":["CSS","HTML","JS"],"code":["css","html","js"],"text":"\nTauri provides lots of options for customizing the look and feel of your app's window. You can create custom titlebars, have transparent windows, enforce size constraints, and more.\n\n## Configuration\n\nThere are three ways to change the window configuration:\n\n- [Through tauri.conf.json](https://tauri.studio/en/docs/api/config/#tauri.windows)\n- [Through the JS API](https://tauri.studio/en/docs/api/js/classes/window.windowmanager)\n- [Through the Window in Rust](https://tauri.studio/en/docs/api/rust/tauri/window/struct.window)\n\n## Creating a Custom Titlebar\n\nA common use of these window features is creating a custom titlebar. This short tutorial will guide you through that process.\n\n### CSS\n\nYou'll need to add some CSS for the titlebar to keep it at the top of the screen and style the buttons:\n\n```css\n.titlebar {\n height: 30px;\n background: #329ea3;\n user-select: none;\n display: flex;\n justify-content: flex-end;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n.titlebar-button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: 30px;\n height: 30px;\n}\n.titlebar-button:hover {\n background: #5bbec3;\n}\n```\n\n### HTML\n\nNow, you'll need to add the HTML for the titlebar. Put this at the top of your `` tag:\n\n```html\n
\n
\n \n
\n
\n \n
\n
\n \"close\"\n
\n
\n```\n\nNote that you may need to move the rest of your content down so that the titlebar doesn't cover it.\n\n### JS\n\nFinally, you'll need to make the buttons work:\n\n\n```js\nimport { appWindow } from '@tauri-apps/api/window'\ndocument\n .getElementById('titlebar-minimize')\n .addEventListener('click', () => appWindow.minimize())\ndocument\n .getElementById('titlebar-maximize')\n .addEventListener('click', () => appWindow.toggleMaximize())\ndocument\n .getElementById('titlebar-close')\n .addEventListener('click', () => appWindow.close())\n```\n","url":"https://tauri.studio/docs/usage/guides/visual/window-customization"},{"id":"prose_docs_usage_guides_webdriver_ci_md","title":"Continuous Integration","sections":[],"subSections":[],"code":["yaml"],"text":"\nUtilizing Linux and some programs to create a fake display, it is possible to run [WebDriver] tests with\n[`tauri-driver`] on your CI. The following example will use the [WebdriverIO] example we [previously built together] and\nGitHub Actions.\n\nThis means the following assumptions:\n\n1. The Tauri application is in the repository root and the binary builds when running `cargo build --release`.\n2. The [WebDriverIO] test runner is in the `webdriver/webdriverio` directory and runs when `yarn test` is used in that\n directory.\n\nThe following is a commented GitHub Actions workflow file at `.github/workflows/webdriver.yml`\n\n```yaml\n# run this action when the repository is pushed to\non: [ push ]\n\n# the name of our workflow\nname: WebDriver\n\njobs:\n # a single job named test\n test:\n # the display name the test job\n name: WebDriverIO Test Runner\n\n # we want to run on the latest linux environment\n runs-on: ubuntu-latest\n\n # the steps our job runs **in order**\n steps:\n # checkout the code on the workflow runner\n - uses: actions/checkout@v2\n\n # install system dependencies that Tauri needs to compile on Linux.\n # note the extra dependencies for `tauri-driver` to run which are `webkit2gtk-driver` and `xvfb`\n - name: Tauri dependencies\n run: >-\n sudo apt-get update &&\n sudo apt-get install -y\n libgtk-3-dev\n libgtksourceview-3.0-dev\n webkit2gtk-4.0\n libappindicator3-dev\n webkit2gtk-driver\n xvfb\n\n # install the latest Rust stable\n - name: Rust stable\n uses: actions-rs/toolchain@v1\n with:\n toolchain: stable\n\n # we run our rust tests before the webdriver tests to avoid testing a broken application\n - name: Cargo test\n uses: actions-rs/cargo@v1\n with:\n command: test\n\n # build a release build of our application to be used during our WebdriverIO tests\n - name: Cargo build\n uses: actions-rs/cargo@v1\n with:\n command: build\n args: --release\n\n # install the latest stable node version at the time of writing\n - name: Node v16\n uses: actions/setup-node@v1\n with:\n node-version: 16.x\n\n # install our Node.js dependencies with Yarn\n - name: Yarn install\n run: yarn install\n working-directory: webdriver/webdriverio\n\n # install the latest version of `tauri-driver`.\n # note: the tauri-driver version is independent of any other Tauri versions\n - name: Install tauri-driver\n uses: actions-rs/cargo@v1\n with:\n command: install\n args: tauri-driver\n\n # run the WebdriverIO test suite.\n # we run it through `xvfb-run` (the dependency we installed earlier) to have a fake\n # display server which allows our application to run headless without any changes to the code\n - name: WebdriverIO\n run: xvfb-run yarn test\n working-directory: webdriver/webdriverio\n```\n\n[WebDriver]: https://www.w3.org/TR/webdriver/\n[`tauri-driver`]: https://crates.io/crates/tauri-driver\n[WebdriverIO]: https://webdriver.io/\n[previously built together]: example/webdriverio\n","url":"https://tauri.studio/docs/usage/guides/webdriver/ci"},{"id":"prose_docs_usage_guides_webdriver_introduction_md","title":"Introduction","sections":["System Dependencies","Example Application"],"subSections":["Linux","Windows"],"code":["sh"],"text":"import Alert from '@theme/Alert'\n\n\n\nWebdriver support for Tauri is still in pre-alpha. Tooling that is dedicated to it such as [tauri-driver] is still in\nactive development and may change as necessary over time. Additionally, only Windows and Linux are currently supported.\n\n\n[WebDriver] is a standardized interface to interact with web documents that is primarily intended for automated testing.\nTauri supports the [WebDriver] interface by leveraging the native platform's [WebDriver] server underneath a\ncross-platform wrapper [`tauri-driver`].\n\n## System Dependencies\n\nInstall the latest [`tauri-driver`] or update an existing installation by running:\n\n```sh\ncargo install tauri-driver\n```\n\nBecause we currently utilize the platform's native [WebDriver] server, there are some requirements for running\n[`tauri-driver`] on supported platforms. Platform support is currently limited to Linux and Windows.\n\n### Linux\n\nWe use `WebKitWebDriver` on linux platforms. Check if this binary exists already (command `which WebKitWebDriver`) as\nsome distributions bundle it with the regular webkit package. Other platforms may have a separate package for them such\nas `webkit2gtk-driver` on Debian based distributions.\n\n### Windows\n\nMake sure to grab the version of [Microsoft Edge Driver] that matches your Windows' Edge version that the application is\nbeing built and tested on. On up-to-date Window installs, this should almost always be the latest stable version. If the\ntwo versions do not match, you may experience your WebDriver testing suite hanging while trying to connect.\n\nThe download contains a binary called `msedgedriver.exe`. [`tauri-driver`] looks for that binary in the `$PATH` so make\nsure it's either available on the path or use the `--native-driver` option on [`tauri-driver`]. On Windows CI machines,\nyou may want to download this automatically as part of the CI setup process to ensure the Edge and Edge Driver versions\nstay in sync. A guide on how to do this may be added at a later date.\n\n## Example Application\n\nThe [next section](example/setup) of the guide will show step-by-step how to create a minimal example application that\nis tested with WebDriver.\n\nIf you prefer to just see the result of the guide and look over a finished minimal codebase that utilizes it then you\ncan look at https://github.com/chippers/hello_tauri. That example also comes with a CI script to test with GitHub\nactions, but you may still be interested in the [WebDriver CI](ci) guide as it explains the concept a bit more.\n\n[WebDriver]: https://www.w3.org/TR/webdriver/\n[`tauri-driver`]: https://crates.io/crates/tauri-driver\n[tauri-driver]: https://crates.io/crates/tauri-driver\n[Microsoft Edge Driver]: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/\n","url":"https://tauri.studio/docs/usage/guides/webdriver/introduction"},{"id":"prose_docs_usage_guides_webdriver_example_selenium_md","title":"Selenium","sections":["Create a Directory for the Tests","Initializing a Selenium Project","Testing","Running the Test Suite"],"subSections":[],"code":["sh",null,"text"],"text":"import Alert from '@theme/Alert'\nimport Tabs from '@theme/Tabs'\nimport TabItem from '@theme/TabItem'\n\n\n\nThis [Selenium] guide expects you to have already gone through the [example Application setup] in order to follow\nstep-by-step. The general information may still be useful otherwise.\n\n\nThis WebDriver testing example will use [Selenium] and a popular Node.js testing suite. It is expected to already have\nNode.js installed, along with `npm` or `yarn` although the [finished example project] uses `yarn`.\n\n## Create a Directory for the Tests\n\nLet's start off by creating a space in our project to write these tests. We are going to be using a nested directory for\nthis example project as we will later also go over other frameworks, but typically you will only need to use one. Create\nthe directory we will use with `mkdir -p webdriver/selenium`. The rest of this guide will assume you are inside the\n`webdriver/selenium` directory.\n\n## Initializing a Selenium Project\n\nWe will be using a pre-existing `package.json` to bootstrap this test suite because we have already chosen specific\ndependencies to use and want to showcase a simple working solution. The bottom of this section has a collapsed\nguide on how to set it up from scratch.\n\n`package.json`:\n```json\n{\n \"name\": \"selenium\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"scripts\": {\n \"test\": \"mocha\"\n },\n \"dependencies\": {\n \"chai\": \"^4.3.4\",\n \"mocha\": \"^9.0.3\",\n \"selenium-webdriver\": \"^4.0.0-beta.4\"\n }\n}\n```\n\nWe have a script which runs [Mocha] as a test framework exposed as the `test` command. We also have various dependencies\nthat we will be using to run the tests. [Mocha] as the testing framework, [Chai] as the assertion library, and\n[`selenium-webdriver`] which is the Node.js [Selenium] package.\n\n
Click me if you want to see how to set a project up from scratch\n\nIf you wanted to install the dependencies from scratch, just run the following command.\n\n\n\n\n```sh\nnpm install mocha chai selenium-webdriver\n```\n\n\n\n\n\n```sh\nyarn add mocha chai selenium-webdriver\n```\n\n\n\n\nI suggest also adding a `\"test\": \"mocha\"` item in the `package.json` `\"scripts\"` key so that running mocha can be called\nsimply with\n\n\n\n\n```sh\nnpm test\n```\n\n\n\n\n\n```sh\nyarn test\n```\n\n\n\n\n
\n\n## Testing\n\nUnlike the [WebdriverIO Test Suite](webdriverio#config), Selenium does not come out of the box with a Test Suite and\nleaves it up to the developer to build those out. We chose [Mocha] which is pretty neutral, and not related to WebDrivers\nat all, so our script will need to do a bit of work to set up everything for us in the right order. [Mocha] expects a\ntesting file at `test/test.js` by default, so let's create that file now.\n\n`test/test.js`:\n```js\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst { expect } = require(\"chai\");\nconst { spawn, spawnSync } = require(\"child_process\");\nconst { Builder, By, Capabilities } = require(\"selenium-webdriver\");\n\n// create the path to the expected application binary\nconst application = path.resolve(\n __dirname,\n \"..\",\n \"..\",\n \"..\",\n \"target\",\n \"release\",\n \"hello-tauri-webdriver\"\n);\n\n// keep track of the webdriver instance we create\nlet driver;\n\n// keep track of the tauri-driver process we start\nlet tauriDriver;\n\nbefore(async function() {\n // set timeout to 2 minutes to allow the program to build if it needs to\n this.timeout(120000)\n\n // ensure the program has been built\n spawnSync(\"cargo\", [\"build\", \"--release\"]);\n\n // start tauri-driver\n tauriDriver = spawn(\n path.resolve(os.homedir(), \".cargo\", \"bin\", \"tauri-driver\"),\n [],\n { stdio: [null, process.stdout, process.stderr] }\n );\n\n const capabilities = new Capabilities();\n capabilities.set(\"tauri:options\", { application });\n capabilities.setBrowserName(\"wry\");\n\n // start the webdriver client\n driver = await new Builder()\n .withCapabilities(capabilities)\n .usingServer(\"http://localhost:4444/\")\n .build();\n});\n\nafter(async function() {\n // stop the webdriver session\n await driver.quit();\n\n // kill the tauri-driver process\n tauriDriver.kill();\n});\n\ndescribe(\"Hello Tauri\", () => {\n it(\"should be cordial\", async () => {\n const text = await driver.findElement(By.css(\"body > h1\")).getText();\n expect(text).to.match(/^[hH]ello/);\n });\n\n it(\"should be excited\", async () => {\n const text = await driver.findElement(By.css(\"body > h1\")).getText();\n expect(text).to.match(/!$/);\n });\n\n it(\"should be easy on the eyes\", async () => {\n // selenium returns color css values as rgb(r, g, b)\n const text = await driver.findElement(By.css(\"body\")).getCssValue(\"background-color\");\n\n const rgb = text.match(/^rgb\\((?\\d+), (?\\d+), (?\\d+)\\)$/).groups;\n expect(rgb).to.have.all.keys('r','g','b');\n\n const luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b ;\n expect(luma).to.be.lessThan(100)\n });\n});\n```\n\nIf you are familiar with JS testing frameworks, `describe`, `it`, and `expect` should look familiar. We also have\nsemi-complex `before()` and `after()` callbacks to setup and teardown mocha. Lines that are not the tests themselves\nhave comments explaining what the setup and teardown code is doing. If you were familiar with the Spec file from the\n[WebdriverIO example](webdriverio#spec), you will notice a lot more code that isn't tests, as we have to set up a few\nmore WebDriver related items.\n\n## Running the Test Suite\n\nNow that we are all set up with our dependencies and our test script, lets run it!\n\n\n\n\n```sh\nnpm test\n```\n\n\n\n\n\n```sh\nyarn test\n```\n\n\n\n\nWe should see output the following output:\n\n```text\n➜ selenium git:(main) ✗ yarn test\nyarn run v1.22.11\n$ mocha\n\n\n Hello Tauri\n ✔ should be cordial (120ms)\n ✔ should be excited\n ✔ should be easy on the eyes\n\n\n 3 passing (588ms)\n\nDone in 0.93s.\n```\n\nWe can see that our `Hello Tauri` sweet we created with `decribe` had all 3 items we created with `it` pass their\ntests!\n\nWith [Selenium] and some hooking up to a test suite, we just enabled e2e testing without modifying our Tauri\napplication at all!\n\n\n[Selenium]: https://selenium.dev/\n[finished example project]: https://github.com/chippers/hello_tauri\n[example Application setup]: setup\n[Mocha]: https://mochajs.org/\n[Chai]: https://www.chaijs.com/\n[`selenium-webdriver`]: https://www.npmjs.com/package/selenium-webdriver\n","url":"https://tauri.studio/docs/usage/guides/webdriver/example/selenium"},{"id":"prose_docs_usage_guides_webdriver_example_setup_md","title":"Setup Example","sections":["Initializing a Cargo Project","Creating a Minimal Frontend","Adding Tauri to the Cargo Project","Tauri Configuration","Running the Example Application"],"subSections":[],"code":["html","toml","rust","json"],"text":"\nimport HelloTauriWebdriver from '@site/static/img/webdriver/hello-tauri-webdriver.png'\n\nThis example application is going to solely focus on adding WebDriver testing to an already existing project. To have a\nproject to test on in the next two sections, we are going to set up an extremely minimal Tauri application for use in\nour testing. We will not use the Tauri CLI, any frontend dependencies or build steps, and not be bundling the\napplication afterwards. This is to showcase exactly a minimal suite to show off adding WebDriver testing to an existing\napplication.\n\nIf you just want to see the finished example project that utilizes what will be shown in this example guide, then you\ncan see https://github.com/chippers/hello_tauri.\n\n## Initializing a Cargo Project\n\nWe want to create a new binary Cargo project to house this example application. We can easily do this from the command\nline with `cargo new hello-tauri-webdriver --bin` which will scaffold a minimal binary Cargo project for us. This\ndirectory will serve as the working directory for the rest of this guide, so make sure commands you run are inside this\nnew `hello-tauri-webdriver/` directory.\n\n## Creating a Minimal Frontend\n\nWe will create a minimal HTML file to act as the frontend to our example application. We will also be using a few things\nfrom this frontend later during our WebDriver tests.\n\nFirst, let's create our Tauri `distDir` that we know we will need once building the Tauri portion of the application.\n`mkdir dist` should create a new directory called `dist/` in which we will be placing the following `index.html` file.\n\n`dist/index.html`:\n\n```html\n\n\n\n \n Hello Tauri!\n \n\n\n

Hello, Tauri!

\n\n\n```\n\n## Adding Tauri to the Cargo Project\n\nNext, we will add some necessary items to make our Cargo project into a Tauri project. First, is adding the dependencies\nto the Cargo Manifest (`Cargo.toml`) so that Cargo knows to pull in our dependencies while building.\n\n`Cargo.toml`:\n\n```toml\n[package]\nname = \"hello-tauri-webdriver\"\nversion = \"0.1.0\"\nedition = \"2018\"\n\n# Needed to set up some things for Tauri at build time\n[build-dependencies]\ntauri-build = \"1.0.0-beta.4\"\n\n# The actual Tauri dependency, along with `custom-protocol` to serve the pages.\n[dependencies]\ntauri = { version = \"1.0.0-beta.6\", features = [\"custom-protocol\"] }\n\n# Make --release build a binary that is small (opt-level = \"s\") and fast (lto = true).\n# This is completely optional, but shows that testing the application as close to the\n# typical release settings is possible. Note: this will slow down compilation.\n[profile.release]\nincremental = false\ncodegen-units = 1\npanic = \"abort\"\nopt-level = \"s\"\nlto = true\n```\n\nAs you may have noticed, we added a `[build-dependency]`. To use the build dependency, we must use it from a build\nscript. We will create one now at `build.rs`.\n\n`build.rs`:\n\n```rust\nfn main() {\n // Only watch the `dist/` directory for recompiling, preventing unnecessary\n // changes when we change files in other project subdirectories.\n println!(\"cargo:rerun-if-changed=dist\");\n\n // Run the Tauri build-time helpers\n tauri_build::build()\n}\n```\n\nWith all that setup, our Cargo Project now knows how to pull in and build our Tauri dependencies. Let's finish making\nthis minimal example a Tauri application by setting up Tauri in the actual project code. We will be editing\nthe `src/main.rs`\nfile to add this Tauri functionality.\n\n`src/main.rs`:\n\n```rust\nfn main() {\n tauri::Builder::default()\n .run(tauri::generate_context!())\n .expect(\"unable to run Tauri application\");\n}\n```\n\nPretty simple, right?\n\n## Tauri Configuration\n\nWe are going to need 2 things to successfully build the application. First, we need an icon file. You can use any PNG\nfor this next part and copy it into `icon.png`. Typically, this will be provided as part of the scaffolding when you use\nthe Tauri CLI to create a project. To get the default Tauri icon, we can download the icon used by the Hello Tauri\nexample repository with the\ncommand `curl -L \"https://github.com/chippers/hello_tauri/raw/main/icon.png\" --output icon.png`.\n\nThe second thing we will need is a `tauri.conf.json` to specify some important configuration values to Tauri. Again,\nthis would typically come from the `tauri init` scaffolding command, but we will be creating our own minimal config\nhere.\n\n`tauri.conf.json`:\n\n```json\n{\n \"build\": {\n \"distDir\": \"dist\"\n },\n \"tauri\": {\n \"bundle\": {\n \"identifier\": \"studio.tauri.hello_tauri_webdriver\",\n \"icon\": [\n \"icon.png\"\n ]\n },\n \"allowlist\": {\n \"all\": false\n },\n \"windows\": [\n {\n \"width\": 800,\n \"height\": 600,\n \"resizable\": true,\n \"fullscreen\": false\n }\n ]\n }\n}\n```\n\nI'll go over some of these. You can see the `dist/` directory we created earlier specified as the `distDir` property. We\nset a bundle identifier so that the built application has a unique id, along with setting the `icon.png` as the only\nicon. We aren't using any Tauri apis or features, so we just disable all them in `allowlist` by setting `\"all\": false`.\nThe window values just sets a single window to be created with some reasonable default values.\n\nAt this point, we have a basic Hello World application that when ran, should display a simple greeting.\n\n## Running the Example Application\n\nTo make sure we did it right, let's build this application! We will run this as a `--release` application because we\nwill also run our WebDriver tests with a release profile. Run `cargo run --release` and after some compiling we should\nsee the following application pop up.\n\n
\n \n
\n\n_Note: If you are modifying the application and want to use the Devtools, then run it without `--release` and \"Inspect\nElement\" should be available in the right click menu._\n\nWe should now be ready to start testing this application with some WebDriver frameworks. This guide will go over both\n[WebdriverIO](webdriverio) and [Selenium](selenium) in that order.","url":"https://tauri.studio/docs/usage/guides/webdriver/example/setup"},{"id":"prose_docs_usage_guides_webdriver_example_webdriverio_md","title":"WebdriverIO","sections":["Create a Directory for the Tests","Initializing a WebdriverIO Project","Config","Spec","Running the Test Suite"],"subSections":[],"code":["sh","text"],"text":"import Alert from '@theme/Alert'\nimport Tabs from '@theme/Tabs'\nimport TabItem from '@theme/TabItem'\n\n\n\nThis [WebdriverIO] guide expects you to have already gone through the [example Application setup] in order to follow\nstep-by-step. The general information may still be useful otherwise.\n\n\nThis WebDriver testing example will use [WebdriverIO] and its testing suite. It is expected to already have Node.js\ninstalled, along with `npm` or `yarn` although the [finished example project] uses `yarn`.\n\n## Create a Directory for the Tests\n\nLet's start off by creating a space in our project to write these tests. We are going to be using a nested directory for\nthis example project as we will later also go over other frameworks, but typically you will only need to use one. Create\nthe directory we will use with `mkdir -p webdriver/webdriverio`. The rest of this guide will assume you are inside the\n`webdriver/webdriverio` directory.\n\n## Initializing a WebdriverIO Project\n\nWe will be using a pre-existing `package.json` to bootstrap this test suite because we have already chosen specific\n[WebdriverIO] config options and want to showcase a simple working solution. The bottom of this section has a collapsed\nguide on how to set it up from scratch.\n\n`package.json`:\n```json\n{\n \"name\": \"webdriverio\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"scripts\": {\n \"test\": \"wdio run wdio.conf.js\"\n },\n \"dependencies\": {\n \"@wdio/cli\": \"^7.9.1\"\n },\n \"devDependencies\": {\n \"@wdio/local-runner\": \"^7.9.1\",\n \"@wdio/mocha-framework\": \"^7.9.1\",\n \"@wdio/spec-reporter\": \"^7.9.0\"\n }\n}\n```\n\nWe have a script which runs a [WebdriverIO] config as a test suite exposed as the `test` command. We also have various\ndependencies that were added by the `@wdio/cli` command when we first set it up. In short, these dependencies are for\nthe most simple setup using a local WebDriver runner, [Mocha] as the test framework, and a simple Spec Reporter.\n\n
Click me if you want to see how to set a project up from scratch\n\nThe CLI is interactive, and you may choose the tools to work with yourself. Note that you will likely diverge from\nthe rest of the guide, and need to set up the differences yourself.\n\nLet's add the [WebdriverIO] CLI to this npm project.\n\n\n\n\n```sh\nnpm install @wdio/cli\n```\n\n\n\n\n\n```sh\nyarn add @wdio/cli\n```\n\n\n\n\nTo then run the interactive config command to set up a [WebdriverIO] test suite, you can then run:\n\n\n\n\n```sh\nnpx wdio config\n```\n\n\n\n\n\n```sh\nyarn wdio config\n```\n\n\n\n\n
\n\n## Config\n\nYou may have noticed that the `test` script in our `package.json` mentions a file `wdio.conf.js`. That's the [WebdriverIO]\nconfig file which controls most aspects of our testing suite.\n\n`wdio.conf.js`:\n```js\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst { spawn, spawnSync } = require(\"child_process\");\n\n// keep track of the `tauri-driver` child process\nlet tauriDriver;\n\nexports.config = {\n specs: [\"./test/specs/**/*.js\"],\n maxInstances: 1,\n capabilities: [\n {\n maxInstances: 1,\n \"tauri:options\": {\n application: \"../../target/release/hello-tauri-webdriver\",\n },\n },\n ],\n reporters: [\"spec\"],\n framework: \"mocha\",\n mochaOpts: {\n ui: \"bdd\",\n timeout: 60000,\n },\n\n // ensure the rust project is built since we expect this binary to exist for the webdriver sessions\n onPrepare: () => spawnSync(\"cargo\", [\"build\", \"--release\"]),\n\n // ensure we are running `tauri-driver` before the session starts so that we can proxy the webdriver requests\n beforeSession: () =>\n (tauriDriver = spawn(\n path.resolve(os.homedir(), \".cargo\", \"bin\", \"tauri-driver\"),\n [],\n { stdio: [null, process.stdout, process.stderr] }\n )),\n\n // clean up the `tauri-driver` process we spawned at the start of the session\n afterSession: () => tauriDriver.kill(),\n};\n```\n\nIf you are interested in the properties on `exports.config` object, then I [suggest reading the documentation] for it.\nFor non-WDIO specific items, there are comments explaining why we are running commands in `onPrepare`, `beforeSession`,\nand `afterSession`. We also have our specs set to `\"./test/specs/**/*.js\"`, so let's create a spec now.\n\n## Spec\n\nA spec contains the code that is testing your actual application. The test runner will load these specs and automatically\nrun them as it sees fit. Let's create our spec now in the directory we specified.\n\n`test/specs/example.e2e.js`:\n```js\n// calculates the luma from a hex color `#abcdef`\nfunction luma(hex) {\n if (hex.startsWith(\"#\")) {\n hex = hex.substring(1);\n }\n\n const rgb = parseInt(hex, 16);\n const r = (rgb >> 16) & 0xff;\n const g = (rgb >> 8) & 0xff;\n const b = (rgb >> 0) & 0xff;\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\ndescribe(\"Hello Tauri\", () => {\n it(\"should be cordial\", async () => {\n const header = await $(\"body > h1\");\n const text = await header.getText();\n expect(text).toMatch(/^[hH]ello/);\n });\n\n it(\"should be excited\", async () => {\n const header = await $(\"body > h1\");\n const text = await header.getText();\n expect(text).toMatch(/!$/);\n });\n\n it(\"should be easy on the eyes\", async () => {\n const body = await $(\"body\");\n const backgroundColor = await body.getCSSProperty(\"background-color\");\n expect(luma(backgroundColor.parsed.hex)).toBeLessThan(100);\n });\n});\n```\n\nThe `luma` function on top is just a helper function for one of our tests and is not related to the actual testing of\nthe application. If you are familiar with other testing frameworks, you may notice similar functions being exposed that\nare used such as `describe`, `it`, and `expect`. The other APIs, such as items like `$` and the methods it exposes is\ncovered by the [WebdriverIO API docs](https://webdriver.io/docs/api).\n\n## Running the Test Suite\n\nNow that we are all set up with a config and a spec, let's run it!\n\n\n\n\n```sh\nnpm test\n```\n\n\n\n\n\n```sh\nyarn test\n```\n\n\n\n\nWe should see output the following output:\n\n```text\n➜ webdriverio git:(main) ✗ yarn test\nyarn run v1.22.11\n$ wdio run wdio.conf.js\n\nExecution of 1 workers started at 2021-08-17T08:06:10.279Z\n\n[0-0] RUNNING in undefined - /test/specs/example.e2e.js\n[0-0] PASSED in undefined - /test/specs/example.e2e.js\n\n \"spec\" Reporter:\n------------------------------------------------------------------\n[wry 0.12.1 linux #0-0] Running: wry (v0.12.1) on linux\n[wry 0.12.1 linux #0-0] Session ID: 81e0107b-4d38-4eed-9b10-ee80ca47bb83\n[wry 0.12.1 linux #0-0]\n[wry 0.12.1 linux #0-0] » /test/specs/example.e2e.js\n[wry 0.12.1 linux #0-0] Hello Tauri\n[wry 0.12.1 linux #0-0] ✓ should be cordial\n[wry 0.12.1 linux #0-0] ✓ should be excited\n[wry 0.12.1 linux #0-0] ✓ should be easy on the eyes\n[wry 0.12.1 linux #0-0]\n[wry 0.12.1 linux #0-0] 3 passing (244ms)\n\n\nSpec Files:\t 1 passed, 1 total (100% completed) in 00:00:01\n\nDone in 1.98s.\n```\n\nWe see the Spec Reporter tell us that all 3 tests from the `test/specs/example.e2e.js` file, along with the final report\n`Spec Files:\t 1 passed, 1 total (100% completed) in 00:00:01`.\n\nUsing the [WebdriverIO] test suite, we just easily enabled e2e testing for our Tauri application from just a few lines\nof configuration and a single command to run it! Even better, we didn't have to modify the application at all.\n\n\n[WebdriverIO]: https://webdriver.io/\n[finished example project]: https://github.com/chippers/hello_tauri\n[example Application setup]: setup\n[Mocha]: https://mochajs.org/\n[suggest reading the documentation]: (https://webdriver.io/docs/configurationfile)\n","url":"https://tauri.studio/docs/usage/guides/webdriver/example/webdriverio"},{"id":"prose_docs_usage_patterns_about_patterns_md","title":"A word on patterns","sections":[],"subSections":[],"code":[],"text":"\nTauri patterns are descriptions of use-cases that are entirely configurable within the `src-tauri/tauri.conf.json` file. These are not the limits of what Tauri can do, and there are probably more out there. If you discover one, why not get in touch and help us update this collection!\n\nIf you haven't read about the general design of Tauri, then it would make the most sense for you to visit the [\"Getting started\"](/docs/getting-started/intro) and become familiar with the basic architecture and terminology used in these patterns. \n","url":"https://tauri.studio/docs/usage/patterns/about-patterns"},{"id":"prose_docs_usage_patterns_bridge_md","title":"Bridge","sections":["Description","Diagram","Configuration"],"subSections":[],"code":[],"text":"\nimport Rater from '@theme/Rater'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Bridge\"\n
\n
\n Pros:\n
    \n
  • Highly configurable
  • \n
  • No Rust skills required
  • \n
\n Cons:\n
    \n
  • Some WebAPIs unavailable
  • \n
  • Challenge to implement
  • \n
\n
\n
\n\n## Description\n\nThe Bridge recipe is a secure pattern where messages are passed between brokers via an implicit bridge using the API. It isolates functionality to scope and passes messages instead of functionality.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nF\n subgraph WEBVIEW\n F-.-E\n end\n D-->E\n E-->D\n B-->D\n D-->B\n subgraph RUST\n A==>H\n A-->B\n B-.-C\n B-.-G\n end\n A[Binary]\n B{Rust Broker}\n C[Subprocess 2]\n G[Subprocess 1]\n D(( API BRIDGE ))\n E{JS Broker}\n F[Window]\n H{Bootstrap}\n style D fill:#ccc,stroke:#333,stroke-width:4px,color:white\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px`} />\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": { // all API values are default false\n \"all\": false, // use this flag to enable all API features\n \"shell\": {\n \"execute\": false, // enable application execution\n \"open\": false, // open link/path in the default app\n },\n \"fs\": {\n \"listFiles\": false, // list files in a directory\n \"readBinaryFile\": false, // read binary file from local filesystem\n \"readTextFile\": false, // read text file from local filesystem\n \"setTitle\": false, // set the window title\n \"writeFile\": false // write file to local filesystem\n }\n }\n}\n\n```\n","url":"https://tauri.studio/docs/usage/patterns/bridge"},{"id":"prose_docs_usage_patterns_cloudbridge_md","title":"Cloudbridge","sections":["Description","Diagram","Configuration"],"subSections":[],"code":[],"text":"\nimport Rater from '@theme/Rater'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Cloudbridge\"\n
\n
\n Pros:\n
    \n
  • All available features
  • \n
  • No Rust skills required
  • \n
\n Cons:\n
    \n
  • Largest bundle size
  • \n
  • Hard to separate concerns
  • \n
\n
\n
\n\n## Description\n\nThe Cloudbridge recipe combines the flexibility of a localhost and the security of the bridge. With so many features, it can be easy to get lost.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nF2\n H==>D2\n D2-->F2\n F2-->D2\n B-->D\n D-->B\n E2-->D\n D-->E2\n subgraph WEBVIEW\n F2\n E2\n end\n subgraph SERVER\n D2\n E-->D2\n end\n subgraph RUST\n A==>H\n A-->B\n B-.-C\n end\n A[Binary]\n B{Rust Broker}\n C[Subprocess]\n D(( API BRIDGE ))\n E{JS Broker}\n D2(( localhost ))\n E[bundled resources]\n E2{JS Broker}\n F2[Window]\n H{Bootstrap}\n style D fill:#ccc,stroke:#333,stroke-width:4px,color:white\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px\n style SERVER fill:#49A24A,stroke:#2B6063,stroke-width:4px\n `} />\n\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": {\n \"all\": true // enable entire API\n }\n}\n```\n","url":"https://tauri.studio/docs/usage/patterns/cloudbridge"},{"id":"prose_docs_usage_patterns_cloudish_md","title":"Cloudish","sections":["Description","Diagram","Configuration"],"subSections":[],"code":[],"text":"\nimport Rater from '@theme/Rater'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Cloudish\"\n
\n
\n Pros:\n
    \n
  • Similar to a SPA web-app
  • \n
  • No Rust skills required
  • \n
\n Cons:\n
    \n
  • No access to Rust API
  • \n
  • Uses a localhost server
  • \n
\n
\n
\n\n## Description\n\nThe Cloudish recipe is a pattern for maximum flexibility and app performance. It uses a localhost server, which means that your app will technically be available to other processes, like browsers and potentially other devices on the network. All of your assets are baked into the binary, but served as if they were distinct files.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nF\n H==>D\n D-->F\n F-->D\n subgraph RUST\n A==>H\n end\n subgraph WEBVIEW\n F\n end\n subgraph SERVER\n D\n E-->D\n end\n A[Binary]\n D(( localhost ))\n E[bundled resources]\n F[Window]\n H{Bootstrap}\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px\n style SERVER fill:#49A24A,stroke:#2B6063,stroke-width:4px`} />\n\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": {\n \"all\": false // disable entire API\n }\n}\n\n```\n","url":"https://tauri.studio/docs/usage/patterns/cloudish"},{"id":"prose_docs_usage_patterns_glui_md","title":"GLUI","sections":["Description","Diagram","Configuration"],"subSections":[],"code":[],"text":"\nimport Alert from '@theme/Alert'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n\nThis pattern is not available for now.\n\n\nimport Rater from '@theme/Rater'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"GLUI\"\n
\n
\n Pros:\n
    \n
  • Framebuffer FTW
  • \n
  • Window events rigged
  • \n
\n Cons:\n
    \n
  • Broken on your machine
  • \n
\n
\n
\n\n## Description\n\nThe GLUI is a research pattern that we will use internally to test approaches using a GLUTIN window. We’re not sure yet if it will make the final cut as a bona fide alternative to WebView, although early tests with transparent and multiwindow are exciting.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nH\n H==>G\n A-->D\n D-->G\n subgraph GLUTIN\n G\n end\n subgraph RUST\n A\n end\n A[Binary]\n D(Framebuffer)\n G[GL Window]\n H{Bootstrap}\n style GLUTIN stroke:${colors.blue.dark},stroke-width:4px\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px`} />\n\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": { // all API endpoints are default false\n \"all\": false, // disable the api\n },\n \"window\": { // not yet normative\n \"glutin\": true,\n \"webview\": false\n }\n}\n```\n","url":"https://tauri.studio/docs/usage/patterns/glui"},{"id":"prose_docs_usage_patterns_hermit_md","title":"Hermit","sections":["Description","Diagram","Configuration"],"subSections":[],"code":["json"],"text":"\nimport Rater from '@theme/Rater'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Hermit\"\n
\n
\n Pros:\n
    \n
  • Quick to make
  • \n
  • Smallest size
  • \n
\n Cons:\n
    \n
  • No remote resources
  • \n
  • No access to API
  • \n
\n
\n
\n\n## Description\n\nThe Hermit recipe is a pattern for ultimate application isolation where all logic is self-contained in the Window and the binary exists merely to bootstrap the Window. There is no communication back to Rust from the Window, there is no localhost server, and the Window has no access to any remote resources. The Hermit is great for interactive Kiosk Mode and standalone HTML based games.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nH\n H==>F\n subgraph WEBVIEW\n F\n end\n subgraph RUST\n A\n end\n A[fa:fa-cog Binary ]\n F[fa:fa-window-maximize Window]\n H{Bootstrap}\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px`} />\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n\n```json\n\"tauri\": {\n \"allowlist\": {\n \"all\": false, // disable and tree-shake all api functions\n }\n}\n```\n","url":"https://tauri.studio/docs/usage/patterns/hermit"},{"id":"prose_docs_usage_patterns_lockdown_md","title":"Lockdown","sections":["Description","Diagram","Configuration"],"subSections":[],"code":[],"text":"\nimport Rater from '@theme/Rater'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Lockdown\"\n
\n
\n Pros:\n
    \n
  • Highest security rating
  • \n
  • Elegant and powerful
  • \n
\n Cons:\n
    \n
  • Rust skills required
  • \n
  • No remote resources
  • \n
\n
\n
\n\n\n## Description\n\nThe Lockdown recipe is a minimal usage of the [Bridge pattern](/docs/usage/patterns/bridge), which only allows interaction between Rust and the Window via expiring JS Promise Closures that are injected into the Window by Rust and nulled as part of the callback.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nF\n G-.->B\n B-->G\n subgraph WEBVIEW\n G-->F\n end\n subgraph RUST\n A-->B\n A==>H\n end\n A[Binary]\n B[API:Event]\n F[Window]\n G((Promise Closure))\n H{Bootstrap}\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px`} />\n\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": {} // all API endpoints are default false\n}\n```\n","url":"https://tauri.studio/docs/usage/patterns/lockdown"},{"id":"prose_docs_usage_patterns_multiwin_md","title":"Multiwin","sections":["Description","Diagram","Configuration"],"subSections":[],"code":[],"text":"\nimport Alert from '@theme/Alert'\nimport useBaseUrl from '@docusaurus/useBaseUrl'\n\nimport Rater from '@theme/Rater'\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Ease of Use
Extensibility
Performance
Security
\n
\n
\n \"Multiwin\"\n
\n
\n Pros:\n
    \n
  • Windows can be spawned or destroyed at runtime
  • \n
  • Separation of concerns
  • \n
\n Cons:\n
    \n
  • Somewhat complex
  • \n
\n
\n
\n\n## Description\n\nThe Multiwin recipe will allow you to have multiple windows.\n\n## Diagram\n\nimport Mermaid, { colors } from '@theme/Mermaid'\n\nH\n H==>F\n H==>G\n subgraph WEBVIEW\n F\n end\n subgraph WINIT\n G\n end\n subgraph RUST\n A\n end\n A[Binary]\n F[Window]\n G[Window]\n H{Bootstrap}\n style WINIT stroke:${colors.blue.dark},stroke-width:4px\n style RUST fill:${colors.orange.light},stroke:${colors.orange.dark},stroke-width:4px\n style WEBVIEW fill:${colors.blue.light},stroke:${colors.blue.dark},stroke-width:4px`} />\n\n\n## Configuration\n\nHere's what you need to add to your tauri.conf.json file:\n```json\n\"tauri\": {\n \"allowlist\": {}, // all API endpoints are default false\n \"windows\": [{\n \"title\": \"Window1\",\n \"label\": \"main\",\n }, {\n \"title\": \"Splash\",\n \"label\": \"splashscreen\"\n }]\n}\n\n```\n","url":"https://tauri.studio/docs/usage/patterns/multiwin"}] \ No newline at end of file diff --git a/packages/tauri-search/src/generated/ast/repo/documents.json b/packages/tauri-search/src/generated/ast/repo/documents.json deleted file mode 100644 index 9db3386..0000000 --- a/packages/tauri-search/src/generated/ast/repo/documents.json +++ /dev/null @@ -1 +0,0 @@ -[{"id":"github_tauri_apps_tauri","name":"tauri","description":"Build smaller, faster, and more secure desktop applications with a web frontend.","kind":"code","stars":29870,"watchers":29870,"subscribers":314,"openIssues":175,"forks":729,"defaultBranch":"next","language":"Rust","topics":["hacktoberfest","high-performance","rust","webview","works-with-clojurescript","works-with-construct","works-with-elm","works-with-flutter","works-with-gatsby","works-with-mint","works-with-phaser","works-with-quasar","works-with-react","works-with-reason","works-with-svelte","works-with-vue","works-with-yew"],"isTemplate":false,"lastUpdated":"2022-02-01T09:10:20Z","createdAt":"2019-07-13T09:09:37Z","license":"Other","text":"\"Tauri\"\n\n[![status](https://img.shields.io/badge/Status-Beta-green.svg)](https://github.com/tauri-apps/tauri/tree/dev)\n[![License](https://img.shields.io/badge/License-MIT%20or%20Apache%202-green.svg)](https://opencollective.com/tauri)\n[![test library](https://img.shields.io/github/workflow/status/tauri-apps/tauri/test%20library?label=test%20library)](https://github.com/tauri-apps/tauri/actions?query=workflow%3A%22test+library%22)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri?ref=badge_shield)\n\n[![Chat Server](https://img.shields.io/badge/chat-on%20discord-7289da.svg)](https://discord.gg/SpmNs4S)\n[![devto](https://img.shields.io/badge/blog-dev.to-black.svg)](https://dev.to/tauri)\n[![devto](https://img.shields.io/badge/documentation-tauri.studio-purple.svg)](https://tauri.studio/docs/get-started/intro)\n[![https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg](https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg)](https://good-labs.github.io/greater-good-affirmation)\n[![support](https://img.shields.io/badge/sponsor-open%20collective-blue.svg)](https://opencollective.com/tauri)\n\n## Current Releases\n\n| Component | Description | Version | Lin | Win | Mac |\n| --------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | --- | --- | --- |\n| [**cli.rs**](https://github.com/tauri-apps/tauri/tree/dev/tooling/cli.rs) | create, develop and build apps | [![](https://img.shields.io/crates/v/tauri-cli.svg)](https://crates.io/crates/tauri-cli) | ✅ | ✅ | ✅ |\n| [**cli.js**](https://github.com/tauri-apps/tauri/tree/dev/tooling/cli.js) | Node.js CLI wrapper for cli.rs | [![](https://img.shields.io/npm/v/@tauri-apps/cli.svg)](https://www.npmjs.com/package/@tauri-apps/cli) | ✅ | ✅ | ✅ |\n| [**api.js**](https://github.com/tauri-apps/tauri/tree/dev/tooling/api) | JS API for interaction with Rust backend | [![](https://img.shields.io/npm/v/@tauri-apps/api.svg)](https://www.npmjs.com/package/@tauri-apps/api) | ✅ | ✅ | ✅ |\n| [**create-tauri-app**](https://github.com/tauri-apps/tauri/tree/dev/tooling/create-tauri-app) | Get started with your first Tauri app | [![](https://img.shields.io/npm/v/create-tauri-app.svg)](https://www.npmjs.com/package/create-tauri-app) | ✅ | ✅ | ✅ |\n| [**vue-cli-plugin-tauri**](https://github.com/tauri-apps/vue-cli-plugin-tauri/) | Vue CLI plugin for Tauri | [![](https://img.shields.io/npm/v/vue-cli-plugin-tauri.svg)](https://www.npmjs.com/package/vue-cli-plugin-tauri) | ✅ | ✅ | ✅ |\n| [**core**](https://github.com/tauri-apps/tauri/tree/dev/core/tauri) | runtime core | [![](https://img.shields.io/crates/v/tauri.svg)](https://crates.io/crates/tauri) | ✅ | ✅ | ✅ |\n| [**bundler**](https://github.com/tauri-apps/tauri/tree/dev/tooling/bundler) | manufacture the final binaries | [![](https://img.shields.io/crates/v/tauri-bundler.svg)](https://crates.io/crates/tauri-bundler) | ✅ | ✅ | ✅ |\n\n## Introduction\nTauri is a framework for building tiny, blazing fast binaries for all major desktop platforms. Developers can integrate any front-end framework that compiles to HTML, JS and CSS for building their user interface. The backend of the application is a rust-sourced binary with an API that the front-end can interact with.\n\nThe user interface in Tauri apps currently leverages [`tao`](https://docs.rs/tao) as a window handling library on macOS and Windows, and [`gtk`](https://gtk-rs.org/docs/gtk/) on Linux via the **Tauri-team** incubated and maintained [WRY](https://github.com/tauri-apps/wry), which creates a unified interface to the system webview (and other goodies like Menu and Taskbar), leveraging WebKit on macOS, WebView2 on Windows and WebKitGTK on Linux.\n\nTo learn more about the details of how all of these pieces fit together, please consult this [ARCHITECTURE.md](https://github.com/tauri-apps/tauri/blob/dev/ARCHITECTURE.md) document.\n\n## Get Started\nIf you are interested in making a tauri-app, please visit the [documentation website](https://tauri.studio). This README is directed towards those who are interested in contributing to the core library. But if you just want a quick overview about where `tauri` is at in its development, here's a quick burndown:\n\n### Platforms\n- [x] Windows 7,8,10\n- [x] Linux\n- [x] macOS\n- [ ] iOS (in progress)\n- [ ] android (soon)\n\n### App Bundles\n- [x] App Icons\n- [x] Build on MacOS (.app, .dmg)\n- [x] Build on Linux (.deb, AppImage)\n- [x] Build on Windows (.exe, .msi)\n- [x] Copy Buffer\n- [x] Device Notifications (toast)\n- [x] Self Updater\n- [x] App Signing\n- [x] Frameless Mode\n- [x] Transparent Mode\n- [x] Multiwindow Mode\n- [x] Tray\n- [ ] deeplink RPC (in progress)\n- [ ] One-Time commands (coming soon)\n\n### Security Features\n- [x] localhost-free (:fire:)\n- [x] custom protocol for secure mode\n- [x] Dynamic ahead of Time Compilation (dAoT) with functional tree-shaking\n- [x] functional Address Space Layout Randomization\n- [x] OTP salting of function names and messages at runtime\n- [x] CSP Injection\n\n### Utilities\n- [x] GH Action for creating binaries for all platforms\n- [x] VS Code Extension\n- [x] Tauri Core Plugins\n- [x] Update core dependencies automatically from the command line\n- [x] Rust-based CLI\n\n### Comparison between Tauri and Electron\n\n| Detail | Tauri | Electron |\n| -------------------------- | ------ | -------------------- |\n| Installer Size Linux | 3.1 MB | 52.1 MB |\n| Memory Consumption Linux | 180 MB | 462 MB |\n| Launch Time Linux | 0.39s | 0.80s |\n| Interface Service Provider | WRY | Chromium |\n| Backend Binding | Rust | Node.js (ECMAScript) |\n| Underlying Engine | Rust | V8 (C/C++) |\n| FLOSS | Yes | No |\n| Multithreading | Yes | Yes |\n| Bytecode Delivery | Yes | No |\n| Multiple Windows | Yes | Yes |\n| Auto Updater | Yes | Yes1 |\n| Custom App Icon | Yes | Yes |\n| Windows Binary | Yes | Yes |\n| MacOS Binary | Yes | Yes |\n| Linux Binary | Yes | Yes |\n| iOS Binary | Soon | No |\n| Android Binary | Soon | No |\n| Desktop Tray | Yes | Yes |\n| Sidecar Binaries | Yes | No |\n\n#### Notes\n1. Electron has no native auto updater on Linux, but is offered by electron-packager\n\n## Development\n\nTauri is a system composed of a number of moving pieces:\n\n### Infrastructure\n- Git for code management\n- GitHub for project management\n- GitHub actions for CI and CD\n- Discord for discussions\n- Netlify-hosted documentation website\n- DigitalOcean meilisearch instance\n\n### Major Runtimes\n- Node.js for running the CLI (deno and pure rust are on the roadmap)\n- Cargo for testing, running the dev service, building binaries and as the runtime harness for the webview\n\n### Major Languages\n- Rust for the CLI\n- EcmaScript bindings to the Rust API, written in typescript\n- Rust for bindings, rust side of the API, harnesses\n- Rust plugins to Tauri backend\n\n### Operating systems\nTauri core can be developed on Mac, Linux and Windows, but you are encouraged to use the latest possible operating systems and build tools for your OS.\n\n### Contributing\nBefore you start working on something, it's best to check if there is an existing issue first. It's also is a good idea to stop by the Discord server and confirm with the team if it makes sense or if someone is already working on it.\n\nPlease make sure to read the [Contributing Guide](./.github/CONTRIBUTING.md) before making a pull request.\n\nThank you to everyone contributing to Tauri!\n\n### Documentation\nDocumentation in a polyglot system is a tricky proposition. To this end, we prefer to use inline documentation of Rust code and at JSDoc in typescript / javascript code. We autocollect these and publish them using Docusaurus v2 and netlify. Here is the hosting repository for the documentation site: https://github.com/tauri-apps/tauri-docs\n\n### Testing & Linting\nTest all the things! We have a number of test suites, but are always looking to improve our coverage:\n- Rust (`cargo test`) => sourced via inline `#[cfg(test)]` declarations\n- TS (`jest`) => via spec files\n- Smoke Tests (run on merges to latest)\n- eslint, clippy\n\n### CI/CD\nWe recommend you read this article to understand better how we run our pipelines: https://www.jacobbolda.com/setting-up-ci-and-cd-for-tauri/\n\n## Organization\nTauri aims to be a sustainable collective based on principles that guide [sustainable free and open software communities](https://sfosc.org). To this end it has become a Programme within the [Commons Conservancy](https://commonsconservancy.org/), and you can contribute financially via [Open Collective](https://opencollective.com/tauri).\n\n## Semver\n**tauri** is following [Semantic Versioning 2.0](https://semver.org/).\n\n## Licenses\nCode: (c) 2015 - 2021 - The Tauri Programme within The Commons Conservancy.\n\nMIT or MIT/Apache 2.0 where applicable.\n\nLogo: CC-BY-NC-ND\n- Original Tauri Logo Designs by [Alve Larsson](https://alve.io/), [Daniel Thompson-Yvetot](https://github.com/nothingismagick) and [Guillaume Chau](https://github.com/akryum)\n\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri?ref=badge_large)\n","url":"https://github.com/tauri-apps/tauri"},{"id":"github_tauri_apps_wry","name":"wry","description":"Cross-platform WebView library in Rust for Tauri.","kind":"code","stars":896,"watchers":896,"subscribers":24,"openIssues":43,"forks":59,"defaultBranch":"next","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-01T07:14:42Z","createdAt":"2020-07-12T15:12:44Z","license":"Other","text":"\"WRY\n\n[![](https://img.shields.io/crates/v/wry?style=flat-square)](https://crates.io/crates/wry) [![](https://img.shields.io/docsrs/wry?style=flat-square)](https://docs.rs/wry/) ![](https://img.shields.io/crates/l/wry?style=flat-square)\n\nCross-platform WebView rendering library in Rust that supports all major desktop platforms like Windows, macOS, and Linux.\n\n
\n \n \n \n
\n\n## Overview\n\nWry connects the web engine on each platform and provides easy to use and unified interface to render WebView. It also re-exports [tao] as a module for event loop and window creation.\n\n[tao]: https://crates.io/crates/tao\n\n## Usage\n\nThe minimum example to create a Window and browse a website looks like following:\n\n```rust\nfn main() -> wry::Result<()> {\n use wry::{\n application::{\n event::{Event, StartCause, WindowEvent},\n event_loop::{ControlFlow, EventLoop},\n window::WindowBuilder,\n },\n webview::WebViewBuilder,\n };\n\n let event_loop = EventLoop::new();\n let window = WindowBuilder::new()\n .with_title(\"Hello World\")\n .build(&event_loop)?;\n let _webview = WebViewBuilder::new(window)?\n .with_url(\"https://tauri.studio\")?\n .build()?;\n\n event_loop.run(move |event, _, control_flow| {\n *control_flow = ControlFlow::Wait;\n\n match event {\n Event::NewEvents(StartCause::Init) => println!(\"Wry has started!\"),\n Event::WindowEvent {\n event: WindowEvent::CloseRequested,\n ..\n } => *control_flow = ControlFlow::Exit,\n _ => (),\n }\n });\n}\n```\n\nThere are also more samples under `examples`, you can enter commands like following to try them:\n\n```\ncargo run --example multi_window\n```\n\nFor more information, please read the documentation below.\n\n## [Documentation](https://docs.rs/wry)\n\n## Platform-specific notes\n\nAll platforms uses [tao](https://github.com/tauri-apps/tao) to build the window, and wry re-export it as application module. Here are the underlying web engine each platform uses, and some dependencies you might need to install.\n\n### Linux\n\nTao uses [gtk-rs](https://gtk-rs.org/) and its related libraries for window creation and wry also needs [WebKitGTK](https://webkitgtk.org/) for WebView. So please make sure following packages are installed:\n\n#### Arch Linux / Manjaro:\n\n```bash\nsudo pacman -S webkit2gtk libappindicator-gtk3\n```\n\n#### Debian / Ubuntu:\n\n```bash\nsudo apt install libwebkit2gtk-4.0-dev libappindicator3-dev\n```\n\n#### Fedora\n\n```bash\nsudo dnf install gtk3-devel webkit2gtk3-devel libappindicator-gtk3-devel\n```\n\n### macOS\n\nWebKit is native on macOS so everything should be fine.\n\nIf you are cross-compiling for macOS using [osxcross](https://github.com/tpoechtrager/osxcross) and encounter a runtime panic like `Class with name WKWebViewConfiguration could not be found` it's possible that `WebKit.framework` has not been linked correctly, to fix this set the `RUSTFLAGS` environment variable:\n\n```\nRUSTFLAGS=\"-l framework=WebKit\" cargo build --target=x86_64-apple-darwin --release\n```\n\n### Windows\n\nWebView2 provided by Microsoft Edge Chromium is used. So wry supports Windows 7, 8, and 10.\n\n## License\nApache-2.0/MIT\n","url":"https://github.com/tauri-apps/wry"},{"id":"github_tauri_apps_tao","name":"tao","description":"The TAO of cross-platform windowing. A library in Rust built for Tauri.","kind":"code","stars":188,"watchers":188,"subscribers":13,"openIssues":50,"forks":21,"defaultBranch":"next","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-01T03:08:05Z","createdAt":"2021-05-03T02:40:47Z","license":"Apache License 2.0","text":"\"TAO\n\n[![](https://img.shields.io/crates/v/tao?style=flat-square)](https://crates.io/crates/tao) [![](https://img.shields.io/docsrs/tao?style=flat-square)](https://docs.rs/tao/) ![](https://img.shields.io/crates/l/tao?style=flat-square)\n\n[![Chat Server](https://img.shields.io/badge/chat-on%20discord-7289da.svg)](https://discord.gg/SpmNs4S)\n[![devto](https://img.shields.io/badge/blog-dev.to-black.svg)](https://dev.to/tauri)\n[![devto](https://img.shields.io/badge/documentation-tauri.studio-purple.svg)](https://tauri.studio/docs/getting-started/intro)\n[![https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg](https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg)](https://good-labs.github.io/greater-good-affirmation)\n[![support](https://img.shields.io/badge/sponsor-open%20collective-blue.svg)](https://opencollective.com/tauri)\n\n\nCross-platform application window creation library in Rust that supports all major platforms like \nWindows, macOS, Linux, iOS and Android. Built for you, maintained for Tauri.\n\n### Cargo Features\n\nTao provides the following features, which can be enabled in your `Cargo.toml` file:\n* `serde`: Enables serialization/deserialization of certain types with [Serde](https://crates.io/crates/serde).\n* `tray`: Enables system tray and more menu item variants on **Linux**. This flag is enabled by default.\n You can still create those types if you disable it. They just don't create the actual objects. We set this flag because some implementations require more installed packages. Disable this if you don't want to install `libappindicator` package.\n* `ayatana`: Enable this if you wish to use more update `libayatana-appindicator` since `libappindicator` is no longer\n maintained.\n\n## Platform-specific notes\n\n### Android\n\nThis library makes use of the [ndk-rs](https://github.com/rust-windowing/android-ndk-rs) crates, refer to that repo for more documentation.\n\nRunning on an Android device needs a dynamic system library, add this to Cargo.toml:\n```toml\n[[example]]\nname = \"request_redraw_threaded\"\ncrate-type = [\"cdylib\"]\n```\n\nAnd add this to the example file to add the native activity glue:\n\n```rust\n#[cfg_attr(target_os = \"android\", ndk_glue::main(backtrace = \"on\"))]\nfn main() {\n ...\n}\n```\n\nAnd run the application with `cargo apk run --example request_redraw_threaded`\n\n### Linux\n\nGtk and its related libraries are used to build the support of Linux. Be sure to install following packages before building:\n\n#### Arch Linux / Manjaro:\n\n```bash\nsudo pacman -S gtk3 libappindicator-gtk3\n```\n\n#### Debian / Ubuntu:\n\n```bash\nsudo apt install libgtk-3-dev libappindicator3-dev\n```\n\n#### MacOS\n\nTo ensure compatibility with older MacOS systems, tao links to\nCGDisplayCreateUUIDFromDisplayID through the CoreGraphics framework.\nHowever, under certain setups this function is only available to be linked\nthrough the newer ColorSync framework. So, tao provides the\n`TAO_LINK_COLORSYNC` environment variable which can be set to `1` or `true`\nwhile compiling to enable linking via ColorSync.\n\n### Acknowledgement\n\nWe would like to thank the authors and contributors to [winit](https://crates.io/crates/winit)\nfor their groundbreaking work upon which this crate is not only based, but\nalso leans heavily upon. Thankyou!!!\n","url":"https://github.com/tauri-apps/tao"},{"id":"github_tauri_apps_tauri_action","name":"tauri-action","description":"Build your Web application as a Tauri binary for MacOS, Linux and Windows","kind":"unknown","stars":101,"watchers":101,"subscribers":10,"openIssues":21,"forks":23,"defaultBranch":"dev","language":"TypeScript","topics":["github-actions","hacktoberfest"],"isTemplate":false,"lastUpdated":"2022-01-29T21:33:46Z","createdAt":"2020-07-07T21:41:23Z","license":"MIT License","text":"# Tauri GitHub Action\n\nThis GitHub Action builds your Web application as a Tauri native binary for MacOS, Linux and Windows.\nIf your project doesn't include the Tauri files, we create it at compile time, so if you don't need to use Tauri's API, you can just ship native apps through this Action.\n\n# Usage\n\nThis GitHub Action has three main usages: test the build pipeline of your Tauri app, uploading Tauri artifacts to an existing release, and creating a new release with the Tauri artifacts.\n\n## Testing the Build\n\n```yml\nname: \"test-on-pr\"\non: [pull_request]\n\njobs:\n test-tauri:\n strategy:\n fail-fast: false\n matrix:\n platform: [macos-latest, ubuntu-latest, windows-latest]\n\n runs-on: ${{ matrix.platform }}\n steps:\n - uses: actions/checkout@v2\n - name: setup node\n uses: actions/setup-node@v1\n with:\n node-version: 12\n - name: install Rust stable\n uses: actions-rs/toolchain@v1\n with:\n toolchain: stable\n - name: install webkit2gtk (ubuntu only)\n if: matrix.platform == 'ubuntu-latest'\n run: |\n sudo apt-get update\n sudo apt-get install -y webkit2gtk-4.0\n - name: install app dependencies and build it\n run: yarn && yarn build\n - uses: tauri-apps/tauri-action@v0\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n## Creating a release and uploading the Tauri bundles\n\n```yml\nname: \"publish\"\non:\n push:\n branches:\n - release\n\njobs:\n publish-tauri:\n strategy:\n fail-fast: false\n matrix:\n platform: [macos-latest, ubuntu-latest, windows-latest]\n\n runs-on: ${{ matrix.platform }}\n steps:\n - uses: actions/checkout@v2\n - name: setup node\n uses: actions/setup-node@v1\n with:\n node-version: 12\n - name: install Rust stable\n uses: actions-rs/toolchain@v1\n with:\n toolchain: stable\n - name: install webkit2gtk (ubuntu only)\n if: matrix.platform == 'ubuntu-latest'\n run: |\n sudo apt-get update\n sudo apt-get install -y webkit2gtk-4.0\n - name: install app dependencies and build it\n run: yarn && yarn build\n - uses: tauri-apps/tauri-action@v0\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n with:\n tagName: app-v__VERSION__ # the action automatically replaces \\_\\_VERSION\\_\\_ with the app version\n releaseName: \"App v__VERSION__\"\n releaseBody: \"See the assets to download this version and install.\"\n releaseDraft: true\n prerelease: false\n```\n\n## Uploading the artifacts to a release\n\nNote that `actions/create-release` isn't maintained so you should find an alternative or let the Tauri Action handle the release.\n\n```yml\nname: \"test-on-pr\"\non: [pull_request]\n\njobs:\n create-release:\n runs-on: ubuntu-latest\n outputs:\n RELEASE_UPLOAD_ID: ${{ steps.create_release.outputs.id }}\n\n steps:\n - uses: actions/checkout@v2\n - name: setup node\n uses: actions/setup-node@v1\n with:\n node-version: 12\n - name: get version\n run: echo \"PACKAGE_VERSION=$(node -p \"require('./package.json').version\")\" >> $GITHUB_ENV\n - name: create release\n id: create_release\n uses: actions/create-release@v1.1.0\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n with:\n tag_name: app-v${{ env.PACKAGE_VERSION }}\n release_name: \"Desktop app v${{ env.PACKAGE_VERSION }}\"\n body: \"See the assets to download this version and install.\"\n draft: true\n prerelease: false\n build-tauri:\n needs: create-release\n strategy:\n fail-fast: false\n matrix:\n platform: [macos-latest, ubuntu-latest, windows-latest]\n\n runs-on: ${{ matrix.platform }}\n steps:\n - uses: actions/checkout@v2\n - name: setup node\n uses: actions/setup-node@v1\n with:\n node-version: 12\n - name: install Rust stable\n uses: actions-rs/toolchain@v1\n with:\n toolchain: stable\n - name: install webkit2gtk (ubuntu only)\n if: matrix.platform == 'ubuntu-latest'\n run: |\n sudo apt-get update\n sudo apt-get install -y webkit2gtk-4.0\n - name: install app dependencies and build it\n run: yarn && yarn build\n - uses: tauri-apps/tauri-action@v0\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n with:\n releaseId: ${{ needs.create-release.outputs.RELEASE_UPLOAD_ID }}\n```\n\n## Inputs\n\n| Name | Required | Description | Type | Default |\n| ------------------ | :------: | ------------------------------------------------------------------------------------------- | ------ | --------------------- |\n| `projectPath` | false | Path to the root of the project that will be built | string | . |\n| `configPath` | false | Path to the tauri.conf.json file if you want a configuration different from the default one | string | tauri.conf.json |\n| `distPath` | false | Path to the distributable folder with your index.html and JS/CSS | string | |\n| `releaseId` | false | The id of the release to upload artifacts as release assets | string | |\n| `tagName` | false | The tag name of the release to create | string | |\n| `releaseName` | false | The name of the release to create | string | |\n| `releaseBody` | false | The body of the release to create | string | |\n| `releaseDraft` | false | Whether the release to create is a draft or not | bool | false |\n| `prerelease` | false | Whether the release to create is a prerelease or not | bool | false |\n| `releaseCommitish` | false | Any branch or commit SHA the Git tag is created from, unused if the Git tag already exists | string | SHA of current commit |\n| `iconPath` | false | path to the PNG icon to use as app icon, relative to the projectPath | string | |\n| `includeDebug` | false | whether to include a debug build or not | bool | |\n| `tauriScript` | false | the script to execute the Tauri CLI | string | `yarn\\|npm tauri` |\n\n## Outputs\n\n| Name | Description |\n| ------------------ | ------------------------------------------------------------------ |\n| `releaseId` | The ID of the created release |\n| `releaseHtmlUrl` | The URL users can navigate to in order to view the created release |\n| `releaseUploadUrl` | The URL for uploading assets to the created release |\n\n# Caveats\n\n- You can use this Action on a repo that doesn't have Tauri configured. We automatically initialize Tauri before building, and configure it to use your Web artifacts.\n - You can configure Tauri with the `configPath`, `distPath` and `iconPath` options.\n- You can run custom Tauri CLI scripts with the `tauriScript` option. So instead of running `yarn tauri build` or `npx tauri build`, we'll execute `${tauriScript}`.\n - Useful when you need custom build functionality when creating Tauri apps e.g. a `desktop:build` script.\n- When your app isn't on the root of the repo, use the `projectPath` input.\n","url":"https://github.com/tauri-apps/tauri-action"},{"id":"github_tauri_apps_tauri_docs","name":"tauri-docs","description":"The source for all tauri project documentation.","kind":"documentation","stars":204,"watchers":204,"subscribers":17,"openIssues":56,"forks":81,"defaultBranch":"dev","language":"JavaScript","topics":["documentation","hacktoberfest","tauri"],"isTemplate":false,"lastUpdated":"2022-01-31T14:06:54Z","createdAt":"2020-03-09T00:22:43Z","license":"MIT License","text":"# Tauri Docs\n\nThis website is built using [Docusaurus 2](https://v2.docusaurus.io/) with [MeiliSearch](https://github.com/meilisearch/) for the docs indexation and is deployed by Netlify.\n\n[![Deploys By Netlify](https://www.netlify.com/img/global/badges/netlify-light.svg)](https://www.netlify.com)\n\nIf you seek to change something from **our guides**, please refer to [the docs folder from the Core repository](https://github.com/tauri-apps/tauri/tree/dev/docs). \\\nWhen browsing the website, you will find edit links at the bottom of these docs.\n\nThe **API docs** are generated from our [Rust](https://github.com/tauri-apps/tauri/tree/dev/core/tauri) and [TypeScript](https://github.com/tauri-apps/tauri/tree/dev/tooling/api) source code.\n\nIn the end, as the guides and the API live in the Core repository, tauri-docs just holds the components and various pages that don't need to follow the Core repository version; this way, we don't pollute the Core repository with commits, PRs or issues related to the website only.\n\n\n## Installation\n\n```\n$ yarn\n```\n\n## Local Development\n\n```\n$ yarn start\n```\n\nThis command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server.\n\nTo develop in another language, use this command (setting your desired language):\n```\n$ yarn start --locale fr\n```\n\n## Build\n\n```\n$ yarn build\n```\n\nThis command generates static content and can be served using any static contents hosting service.\n\nTo build for only a specific language use:\n\n```\nyarn build --locale fr\n```\n\n## Deployment\n\n```\n$ GIT_USER= USE_SSH=true yarn deploy\n```\n\nIf you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.\n\n## Contributing\n\n### Writing/fixing docs\n\nFeel free to open an issue/a PR if you find something weird in the docs.\n\nYour PR once submitted to us, will automatically deploy to a temporary Netlify instance for us or you to review through GitHub's CI/CD checks: you will be able to click on a preview link once the build is ready.\n\n### Internationalization (i18n)\n\nWe're working with Crowdin to manage translations, if you feel like you want to lend a hand for translations, take a look at the documentation project: https://tauri.crowdin.com/documentation\n\nTo add a language to the site, add it to `docusaurus.config.js`'s `siteconfig.i18n.locales` object.\n\nThe following items should be translated before enabling a language:\n\n- strings in i18n/[language] json files\n- docs/about/intro.md and docs/about/security.md;\n- all files in docs/get-started;\n- all files in docs/development;\n\n\n\n## License\n\nMIT License\n\nCopyright (c) 2020-2021 Tauri Programme within The Commons Conservancy\n","url":"https://github.com/tauri-apps/tauri-docs"},{"id":"github_tauri_apps_tauri_vscode","name":"tauri-vscode","description":"Visual Studio Code Extension for Tauri apps development","kind":"unknown","stars":45,"watchers":45,"subscribers":10,"openIssues":5,"forks":3,"defaultBranch":"dev","language":"TypeScript","topics":[],"isTemplate":false,"lastUpdated":"2022-01-27T07:36:16Z","createdAt":"2020-07-06T16:20:49Z","text":"# Tauri VS Code Extension\n\nVisual Studio Code Extension that adds support to Tauri commands and `tauri.conf.json` JSON validation.\n\n## Supported commands\n\nIt adds the `init`, `deps`, `dev` and `build` commands to the `Command Palette`.\n\n## JSON validation\n\nThe extension automatically pulls the [latest config schema](https://github.com/tauri-apps/tauri/blob/dev/tooling/cli.rs/schema.json) so VS Code can display documentation and autocomplete.\n\n# Contributing\n\nFollowing [the official guide](https://code.visualstudio.com/api/get-started/your-first-extension), run `yarn` to install dependencies, `yarn compile` to build your changes and press `F5` to open a new `Extension Development Host` window.\n","url":"https://github.com/tauri-apps/tauri-vscode"},{"id":"github_tauri_apps_tauri_plugin_upload","name":"tauri-plugin-upload","description":"Tauri plugin for file uploads through HTTP","kind":"plugin","stars":2,"watchers":2,"subscribers":8,"openIssues":3,"forks":1,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2021-12-15T22:05:39Z","createdAt":"2021-10-01T16:11:09Z","license":"Other","text":"# Tauri Plugin Upload\n![Test](https://github.com/tauri-apps/tauri-plugin-upload/workflows/Test/badge.svg)\n\nThis plugin provides an interface for file uploads.\n\n## Architecture\nThis repo shape might appear to be strange, but it is really just a hybrid Rust / Typescript project that recommends a specific type of consumption, namely using GIT as the secure distribution mechanism, and referencing specific unforgeable git hashes. Of course, it can also be consumed via Cargo and NPM.\n\n### `/src`\nRust source code that contains the plugin definition.\n\n### `/webview-src`\nTypescript source for the /webview-dist folder that provides an API to interface with the rust code.\n\n### `/webview-dist`\nTree-shakeable transpiled JS to be consumed in a Tauri application.\n\n### `/bindings`\nForthcoming tauri bindings to other programming languages, like DENO.\n\n## Installation\nThere are three general methods of installation that we can recommend.\n1. Pull sources directly from Github using git tags / revision hashes (most secure, good for developement, shown below)\n2. Git submodule install this repo in your tauri project and then use `file` protocol to ingest the source\n3. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked)\n\nFor more details and usage see [the example app](examples/svelte-app). Please note, below in the dependencies you can also lock to a revision/tag in both the `Cargo.toml` and `package.json`\n\n### RUST\n`src-tauri/Cargo.toml`\n```yaml\n[dependencies.tauri-plugin-upload]\ngit = \"https://github.com/tauri-apps/tauri-plugin-upload\"\ntag = \"v0.1.0\"\n#branch = \"main\"\n```\n\nUse in `src-tauri/src/main.rs`:\n```rust\nuse tauri_plugin_upload::Upload;\n\nfn main() {\n tauri::Builder::default()\n .plugin(Upload::default())\n .build()\n .run();\n}\n```\n\n### WEBVIEW\n`Install from a tagged release`\n```\nnpm install github:tauri-apps/tauri-plugin-upload#v0.1.0\n# or\nyarn add github:tauri-apps/tauri-plugin-upload#v0.1.0\n```\n\n`Install from a commit`\n```\nnpm install github:tauri-apps/tauri-plugin-upload#488558717b77d8a2bcb37acfd2eca9658aeadc8e\n# or\nyarn add github:tauri-apps/tauri-plugin-upload#488558717b77d8a2bcb37acfd2eca9658aeadc8e\n```\n\n`package.json`\n```json\n \"dependencies\": {\n \"tauri-plugin-upload-api\": \"github:tauri-apps/tauri-plugin-upload#v0.1.0\",\n```\n\nUse within your JS/TS:\n```ts\nimport upload from 'tauri-plugin-upload-api'\nawait upload('/path/to/file')\n```\n\n# License\nMIT / Apache-2.0\n","url":"https://github.com/tauri-apps/tauri-plugin-upload"},{"id":"github_tauri_apps_tauri_plugin_window_state","name":"tauri-plugin-window-state","description":null,"kind":"plugin","stars":5,"watchers":5,"subscribers":8,"openIssues":3,"forks":0,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-01-23T02:29:35Z","createdAt":"2021-09-26T04:49:19Z","license":"Other","text":"# Tauri Plugin Window State\n![Test](https://github.com/tauri-apps/tauri-plugin-window-state/workflows/Test/badge.svg)\n\nThis plugin provides a Tauri Plugin that saves the window position and size and restores it when the app is reopened.\n\n## Installation\nThere are three general methods of installation that we can recommend.\n1. Pull sources directly from Github using git tags / revision hashes (most secure, good for developement, shown below)\n2. Git submodule install this repo in your tauri project and then use `file` protocol to ingest the source\n3. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked)\n\nFor more details and usage see [the vanilla demo](examples/vanilla/src-tauri/src/main.rs).\nPlease note, below in the dependencies you can also lock to a revision/tag in the `Cargo.toml`.\n\n`src-tauri/Cargo.toml`\n```yaml\n[dependencies.tauri]\ngit = \"https://github.com/tauri-apps/tauri/\"\nbranch = \"next\"\nfeatures = [\"api-all\"]\n\n[dependencies.tauri-plugin-window-state]\ngit = \"https://github.com/tauri-apps/tauri-plugin-window-state\"\ntag = \"tauri-plugin-window-state-v0.1.0\"\n#branch = \"main\"\n```\n\nUse in `src-tauri/src/main.rs`:\n```rust\nfn main() {\n tauri::Builder::default()\n .plugin(tauri_plugin_window_state::WindowState::default())\n .run();\n}\n```\n\nTo prevent flashes when the window is updated, the window `visible` property must be set to `false`.\nThe plugin is responsible for showing it after restoring its state.\n\n# License\nMIT / Apache-2.0\n","url":"https://github.com/tauri-apps/tauri-plugin-window-state"},{"id":"github_tauri_apps_tauri_plugin_store","name":"tauri-plugin-store","description":"This plugin provides an interface for storing unencrypted values on the application cache folder.","kind":"plugin","stars":15,"watchers":15,"subscribers":8,"openIssues":2,"forks":3,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-01-29T13:40:21Z","createdAt":"2021-09-27T16:10:02Z","license":"Other","text":"# Tauri Plugin Store\n[![devto](https://img.shields.io/badge/documentation-github.io-purple.svg)](https://tauri-apps.github.io/tauri-plugin-store)\n![Test](https://github.com/tauri-apps/tauri-plugin-store/workflows/Test/badge.svg)\n\nThis plugin provides an interface for storing unencrypted values on the application cache folder.\n\n## Architecture\nThis repo shape might appear to be strange, but it is really just a hybrid Rust / Typescript project that recommends a specific type of consumption, namely using GIT as the secure distribution mechanism, and referencing specific unforgeable git hashes. Of course, it can also be consumed via Cargo and NPM.\n\n### `/src`\nRust source code that contains the plugin definition.\n\n### `/webview-src`\nTypescript source for the /webview-dist folder that provides an API to interface with the rust code.\n\n### `/webview-dist`\nTree-shakeable transpiled JS to be consumed in a Tauri application.\n\n### `/bindings`\nForthcoming tauri bindings to other programming languages, like DENO.\n\n## Installation\nThere are three general methods of installation that we can recommend.\n1. Pull sources directly from Github using git tags / revision hashes (most secure, good for developement, shown below)\n2. Git submodule install this repo in your tauri project and then use `file` protocol to ingest the source\n3. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked)\n\nFor more details and usage see [the example app](examples/svelte-app). Please note, below in the dependencies you can also lock to a revision/tag in both the `Cargo.toml` and `package.json`\n\n### RUST\n`src-tauri/Cargo.toml`\n```yaml\n[dependencies.tauri-plugin-store]\ngit = \"https://github.com/tauri-apps/tauri-plugin-store\"\ntag = \"v0.1.0\"\n#branch = \"main\"\n```\n\nUse in `src-tauri/src/main.rs`:\n```rust\nuse tauri_plugin_store::PluginBuilder;\n\nfn main() {\n tauri::Builder::default()\n .plugin(PluginBuilder::default())\n .build()\n .run();\n}\n```\n\n### WEBVIEW\n`Install from a tagged release`\n```\nnpm install github:tauri-apps/tauri-plugin-store#v0.1.0\n# or\nyarn add github:tauri-apps/tauri-plugin-store#v0.1.0\n```\n\n`Install from a commit`\n```\nnpm install github:tauri-apps/tauri-plugin-store#488558717b77d8a2bcb37acfd2eca9658aeadc8e\n# or\nyarn add github:tauri-apps/tauri-plugin-store#488558717b77d8a2bcb37acfd2eca9658aeadc8e\n```\n\n`package.json`\n```json\n \"dependencies\": {\n \"tauri-plugin-store-api\": \"github:tauri-apps/tauri-plugin-store#v0.1.0\",\n```\n\nUse within your JS/TS:\n```ts\nimport { Store } from 'tauri-plugin-store-api'\nconst store = new Store('.settings.dat')\nawait store.set('some-key', { value: 5 })\nconst val = await store.get('some-key')\nassert(val, { value: 5 })\n```\n\n# License\nMIT / Apache-2.0\n","url":"https://github.com/tauri-apps/tauri-plugin-store"},{"id":"github_tauri_apps_tauri_plugin_websocket","name":"tauri-plugin-websocket","description":null,"kind":"plugin","stars":5,"watchers":5,"subscribers":8,"openIssues":4,"forks":0,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-01-30T04:52:31Z","createdAt":"2021-09-14T23:49:58Z","text":"","url":"https://github.com/tauri-apps/tauri-plugin-websocket"},{"id":"github_tauri_apps_tauri_plugin_fs_extra","name":"tauri-plugin-fs-extra","description":"Tauri plugin that adds file system methods that aren't included in the core API","kind":"plugin","stars":4,"watchers":4,"subscribers":8,"openIssues":2,"forks":0,"defaultBranch":"dev","language":"TypeScript","topics":[],"isTemplate":false,"lastUpdated":"2021-11-19T14:46:36Z","createdAt":"2021-10-19T15:18:57Z","license":"Other","text":"# tauri-plugin-fs-extra\n![Test](https://github.com/tauri-apps/tauri-plugin-fs-extra/workflows/Test/badge.svg)\n\nThis plugin provides a \"classical\" Tauri Plugin Interface that adds file system methods that aren't included in the Tauri core API.\n\n## Architecture\nThis repo shape might appear to be strange, but it is really just a hybrid Rust / Typescript project that recommends a specific type of consumption, namely using GIT as the secure distribution mechanism, and referencing specific unforgeable git hashes. Of course, it can also be consumed via Cargo and NPM.\n\n### `/src`\nRust source code that contains the plugin definition.\n\n### `/webview-src`\nTypescript source for the /webview-dist folder that provides an API to interface with the rust code.\n\n### `/webview-dist`\nTree-shakeable transpiled JS to be consumed in a Tauri application.\n\n### `/bindings`\nForthcoming tauri bindings to other programming languages, like DENO.\n\n## Installation\nThere are three general methods of installation that we can recommend.\n1. Pull sources directly from Github using git tags / revision hashes (most secure, good for developement, shown below)\n2. Git submodule install this repo in your tauri project and then use `file` protocol to ingest the source\n3. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked)\n\nFor more details and usage see [the Todo app](examples/todos-app/). Please note, below in the dependencies you can also lock to a revision/tag in both the `Cargo.toml` and `package.json`\n\n### RUST\n`src-tauri/Cargo.toml`\n```yaml\n[dependencies.tauri-plugin-fs-extra]\ngit = \"https://github.com/tauri-apps/tauri-plugin-fs-extra\"\ntag = \"v0.1.0\"\n#branch = \"main\"\n```\n\nUse in `src-tauri/src/main.rs`:\n```rust\nuse tauri_plugin_fs_extra::FsExtra;\n\nfn main() {\n tauri::Builder::default()\n .plugin(FsExtra::default())\n .build()\n .run();\n}\n```\n\n### WEBVIEW\n`Install from a tagged release`\n```\nnpm install github:tauri-apps/tauri-plugin-fs-extra#v0.1.0\n# or\nyarn add github:tauri-apps/tauri-plugin-fs-extra#v0.1.0\n```\n\n`Install from a commit`\n```\nnpm install github:tauri-apps/tauri-plugin-fs-extra#488558717b77d8a2bcb37acfd2eca9658aeadc8e\n# or\nyarn add github:tauri-apps/tauri-plugin-fs-extra#488558717b77d8a2bcb37acfd2eca9658aeadc8e\n```\n\n`package.json`\n```json\n \"dependencies\": {\n \"tauri-plugin-fs-extra-api\": \"github:tauri-apps/tauri-plugin-fs-extra#v0.1.0\",\n```\n\nUse within your JS/TS:\n```ts\nimport { metadata } from 'tauri-plugin-fs-extra-api'\nawait metadata('/path/to/file')\n```\n\n# License\nMIT / Apache-2.0\n","url":"https://github.com/tauri-apps/tauri-plugin-fs-extra"},{"id":"github_tauri_apps_tauri_plugin_stronghold","name":"tauri-plugin-stronghold","description":"An official Tauri Plugin for using Stronghold.","kind":"plugin","stars":20,"watchers":20,"subscribers":6,"openIssues":21,"forks":2,"defaultBranch":"main","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-01-25T15:24:00Z","createdAt":"2021-02-15T12:52:23Z","license":"Other","text":"# Tauri Plugin Stronghold\n![Test](https://github.com/tauri-apps/tauri-plugin-stronghold/workflows/Test/badge.svg)\n\nThis plugin provides a \"classical\" Tauri Plugin Interface to the [IOTA Stronghold](https://github.com/iotaledger/stronghold.rs) encrypted database, secure runtime, and peer-to-peer service.\n\n## Architecture\nThis repo shape might appear to be strange, but it is really just a hybrid Rust / Typescript project that recommends a specific type of consumption, namely using GIT as the secure distribution mechanism, and referencing specific unforgeable git hashes. Of course, it can also be consumed via Cargo and NPM.\n\n### `/src`\nRust source code that contains the plugin definition and Stronghold features.\n\n### `/webview-src`\nTypescript source for the /dist folder that provides an API to interface with the rust code.\n\n### `/webview-dist`\nTree-shakeable transpiled JS to be consumed in a WRY webview.\n\n### `/bindings`\nForthcoming tauri bindings to other programming languages, like DENO.\n\n## Installation\nThere are three general methods of installation that we can recommend.\n1. Pull sources directly from Github using git tags / revision hashes (most secure, good for developement, shown below)\n2. Git submodule install this repo in your tauri project and then use `file` protocol to ingest the source\n3. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked)\n\nFor more details and usage see [the svelte demo](examples/svelte-app/src/App.svelte). Please note, below in the dependencies you can also lock to a revision/tag in both the `Cargo.toml` and `package.json`\n\n### RUST\n`src-tauri/Cargo.toml`\n```yaml\n[dependencies.tauri-plugin-stronghold]\ngit = \"https://github.com/tauri-apps/tauri-plugin-stronghold\"\ntag = \"v0.1.0\"\n#branch = \"main\"\n\n# temporary fix to version resolution\n[patch.crates-io]\naesni = { git = \"https://github.com/RustCrypto/block-ciphers/\", rev = \"268dadc93df08928de3bc510ddf20aabfcc49435\" }\naes-soft = { git = \"https://github.com/RustCrypto/block-ciphers/\", rev = \"268dadc93df08928de3bc510ddf20aabfcc49435\" }\n```\n\nUse in `src-tauri/src/main.rs`:\n```rust\nuse tauri_plugin_stronghold::TauriStronghold;\n\nfn main() {\n tauri::Builder::default()\n .plugin(TauriStronghold {})\n .build()\n .run();\n}\n```\n\n### WEBVIEW\n`Install from a tagged release`\n```\nnpm install github:tauri-apps/tauri-plugin-stronghold#v0.2.0\n# or\nyarn add github:tauri-apps/tauri-plugin-stronghold#v0.2.0\n```\n\n`Install from a commit`\n```\nnpm install github:tauri-apps/tauri-plugin-stronghold#6749525a47a95439c9703d3a49b94ac65660998f\n# or\nyarn add github:tauri-apps/tauri-plugin-stronghold#6749525a47a95439c9703d3a49b94ac65660998f\n```\n\n`package.json`\n```json\n \"dependencies\": {\n \"tauri-plugin-stronghold-api\": \"github:tauri-apps/tauri-plugin-stronghold#v0.2.0\",\n```\n\nUse within your JS/TS:\n```ts\nimport { Stronghold, Location } from 'tauri-plugin-stronghold-api'\n```\n\n# License\nMIT / Apache-2.0\n","url":"https://github.com/tauri-apps/tauri-plugin-stronghold"},{"id":"github_tauri_apps_tauri_plugin_log","name":"tauri-plugin-log","description":null,"kind":"plugin","stars":9,"watchers":9,"subscribers":9,"openIssues":4,"forks":1,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-01-10T22:29:42Z","createdAt":"2021-09-14T17:58:12Z","license":"Other","text":"# Tauri Plugin Log\n\nThis plugin provides configurable interfaces for capturing and storing logs.\n\n## Installation\nThere are three general methods of installation that we can recommend.\n1. Pull sources directly from Github using git tags / revision hashes (most secure, good for developement, shown below)\n2. Git submodule install this repo in your tauri project and then use `file` protocol to ingest the source\n3. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked)\n\nFor more details and usage see [the example app](examples/svelte-app). Please note, below in the dependencies you can also lock to a revision/tag in both the `Cargo.toml` and `package.json`\n\n### RUST\n`src-tauri/Cargo.toml`\n```yaml\n[dependencies.tauri-plugin-log]\ngit = \"https://github.com/tauri-apps/tauri-plugin-log\"\ntag = \"v0.1.0\"\n```\n\n### WEBVIEW\n`Install from a tagged release`\n```\nnpm install github:tauri-apps/tauri-plugin-log#v0.1.0\n# or\nyarn add github:tauri-apps/tauri-plugin-log#v0.1.0\n```\n\n`package.json`\n```json\n \"dependencies\": {\n \"tauri-plugin-log-api\": \"tauri-apps/tauri-plugin-log#v0.1.0\",\n```\n\n## Usage\n\n### RUST\n\nUse in `src-tauri/src/main.rs`:\n```rust\nuse tauri_plugin_log::{LogTarget, LoggerBuilder};\nfn main() {\n tauri::Builder::default()\n .plugin(LoggerBuilder::new([\n LogTarget::LogDir,\n LogTarget::Stdout,\n LogTarget::Webview,\n ]).build())\n .build()\n .run();\n}\n```\n\n### WEBVIEW\n\n```ts\nimport { trace, info, error, attachConsole } from 'tauri-plugin-log-api'\n\n// with LogTarget::Webview enabled this function will print logs to the browser console\nconst detach = await attachConsole()\n\ntrace(\"Trace\")\ninfo(\"Info\")\nerror(\"Error\")\n\n// detach the browser console from the log stream\ndetach()\n```\n","url":"https://github.com/tauri-apps/tauri-plugin-log"},{"id":"github_tauri_apps_tauri_plugin_sql","name":"tauri-plugin-sql","description":null,"kind":"plugin","stars":28,"watchers":28,"subscribers":9,"openIssues":8,"forks":4,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-01-31T19:15:36Z","createdAt":"2021-09-13T23:51:17Z","license":"Other","text":"# Tauri Plugin SQL\n![Test](https://github.com/tauri-apps/tauri-plugin-sql/workflows/Test/badge.svg)\n\nThis plugin provides a \"classical\" Tauri Plugin Interface to SQL databases through [sqlx](https://github.com/launchbadge/sqlx).\nIt supports the `sqlite`, `mysql` and `postgres` drivers, enabled through a Cargo feature.\n\n## Architecture\nThis repo shape might appear to be strange, but it is really just a hybrid Rust / Typescript project that recommends a specific type of consumption, namely using GIT as the secure distribution mechanism, and referencing specific unforgeable git hashes. Of course, it can also be consumed via Cargo and NPM.\n\n### `/src`\nRust source code that contains the plugin definition and `sqlx` features.\n\n### `/webview-src`\nTypescript source for the /webview-dist folder that provides an API to interface with the rust code.\n\n### `/webview-dist`\nTree-shakeable transpiled JS to be consumed in a Tauri application.\n\n### `/bindings`\nForthcoming tauri bindings to other programming languages, like DENO.\n\n## Installation\nThere are three general methods of installation that we can recommend.\n1. Pull sources directly from Github using git tags / revision hashes (most secure, good for developement, shown below)\n2. Git submodule install this repo in your tauri project and then use `file` protocol to ingest the source\n3. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked)\n\nFor more details and usage see [the Todo app](examples/todos-app/). Please note, below in the dependencies you can also lock to a revision/tag in both the `Cargo.toml` and `package.json`\n\n### RUST\n`src-tauri/Cargo.toml`\n```yaml\n[dependencies.tauri-plugin-sql]\ngit = \"https://github.com/tauri-apps/tauri-plugin-sql\"\ntag = \"v0.1.0\"\nfeatures = [\"sqlite\"] # or \"postgres\", or \"mysql\"\n#branch = \"main\"\n```\n\nUse in `src-tauri/src/main.rs`:\n```rust\nuse tauri_plugin_sql::TauriSql;\n\nfn main() {\n tauri::Builder::default()\n .plugin(TauriSql::default())\n .build()\n .run();\n}\n```\n\n### WEBVIEW\n`Install from a tagged release`\n```\nnpm install github:tauri-apps/tauri-plugin-sql#v0.1.0\n# or\nyarn add github:tauri-apps/tauri-plugin-sql#v0.1.0\n```\n\n`Install from a commit`\n```\nnpm install github:tauri-apps/tauri-plugin-sql#488558717b77d8a2bcb37acfd2eca9658aeadc8e\n# or\nyarn add github:tauri-apps/tauri-plugin-sql#488558717b77d8a2bcb37acfd2eca9658aeadc8e\n```\n\n`package.json`\n```json\n \"dependencies\": {\n \"tauri-plugin-sql-api\": \"github:tauri-apps/tauri-plugin-sql#v0.1.0\",\n```\n\nUse within your JS/TS:\n```ts\nimport Database from 'tauri-plugin-sql-api'\n\n// sqlite. The path is relative to `tauri::api::path::BaseDirectory::App`.\nconst db = await Database.load('sqlite:test.db')\n// mysql\nconst db = await Database.load('mysql://user:pass@host/database')\n// postgres\nconst db = await Database.load('postgres://postgres:password@localhost/test')\n\nawait db.execute('INSERT INTO ...')\n```\n\n# License\nMIT / Apache-2.0\n","url":"https://github.com/tauri-apps/tauri-plugin-sql"},{"id":"github_tauri_apps_tauri_plugin_shadows","name":"tauri-plugin-shadows","description":"Add native shadows to your Tauri/TAO windows.","kind":"plugin","stars":3,"watchers":3,"subscribers":8,"openIssues":1,"forks":0,"defaultBranch":"dev","language":"Rust","topics":["macos","plugin","shadows","tao","tauri","tauri-plugin","windows"],"isTemplate":false,"lastUpdated":"2022-01-24T06:34:53Z","createdAt":"2021-12-30T14:10:26Z","license":"Other","text":"# tauri-plugin-shadows\n\nAdd native shadows to your Tauri/TAO windows.\n\n## Platform support\n\n - **`Windows:`** Yes, but shadows can't be turned off for a normal (decorated) window.\n - **`macOS:`** Yes!\n - **`Linux:`** No, shadows are controlled by the compositor installed on the user system and they can enable it for your app if they want.\n\n## Installation\n\nAdd it as a dependncy in `Cargo.toml` of your Tao/Tauri project\n```toml\n[dependencies]\ntauri-plugin-shadows = { git = \"https://github.com/tauri-apps/tauri-plugin-shadows\", features = [\"tauri-impl\"] } # or \"tao-impl\" for TAO projects.\n```\nYou also need to use Tauri/TAO from github using the `next` branch (Only until the next release of Tauri).\n\n## Cargo Features:\n\n- `tauri-impl`: for Tauri projects.\n- `tao-impl`: for TAO projects.\n\n## Usage\nImport the `Shadows` trait and use `set_shadow()` on your window type:\n- Tauri:\n ```rs\n let window = app.get_window(\"main\").unwrap();\n\n use tauri_plugin_shadows::Shadows;\n window.set_shadow(true);\n ```\n- Tao:\n ```rs\n let window = WindowBuilder::new().with_transparent(true).build(&event_loop).unwrap();\n\n use tauri_plugin_shadows::Shadows;\n window.set_shadow(true);\n ```","url":"https://github.com/tauri-apps/tauri-plugin-shadows"},{"id":"github_tauri_apps_tauri_plugin_vibrancy","name":"tauri-plugin-vibrancy","description":"Make your Tauri/TAO windows vibrant.","kind":"plugin","stars":9,"watchers":9,"subscribers":8,"openIssues":3,"forks":3,"defaultBranch":"dev","language":"Rust","topics":["acrylic","blur","macos","plugin","tao","tauri","tuari-plugin","vibrancy","windows"],"isTemplate":false,"lastUpdated":"2022-01-27T11:17:32Z","createdAt":"2021-11-30T17:19:44Z","license":"Other","text":"# tauri-plugin-vibrancy\n\nMake your Tauri/TAO windows vibrant.\n\n## Platform support\n\n- **`Windows:`** Yes!\n- **`macOS:`** Yes!\n- **`Linux:`** No, blur effect is controlled by the compositor installed on the user system and they can enable it for your app if they want.\n\n## Installation\n\nAdd it as a dependncy in `Cargo.toml` of your Tao/Tauri project\n```toml\n[dependencies]\ntauri-plugin-vibrancy = { git = \"https://github.com/tauri-apps/tauri-plugin-vibrancy\", features = [\"tauri-impl\"] } # or \"tao-impl\" for TAO projects.\n```\n> You also need to use Tauri/TAO from github using the `next` branch (Only until the next release of Tauri).\n\n## Cargo Features:\n\n- `tauri-impl`: for Tauri projects.\n- `tao-impl`: for TAO projects.\n\n## Usage\n\n1. Enable transparency on your window:\n - Tauri: Edit your window in `tauri.conf.json > tauri > windows` and add `\"transparent\": true`\n or use `tauri::WindowBuilder::transparent`.\n - TAO: Use `tao::window::WindowBuilder::with_transparent`.\n2. Use the `Vibrancy` trait methods on your window type:\n - Tauri:\n ```rs\n let window = app.get_window(\"main\").unwrap();\n\n use tauri_plugin_vibrancy::Vibrancy;\n #[cfg(target_os = \"windows\")]\n window.apply_blur();\n #[cfg(target_os = \"macos\")]\n {\n use tauri_plugin_vibrancy::MacOSVibrancy;\n window.apply_vibrancy(MacOSVibrancy::AppearanceBased);\n }\n ```\n - Tao:\n ```rs\n let window = WindowBuilder::new().with_transparent(true).build(&event_loop).unwrap();\n\n use tauri_plugin_vibrancy::Vibrancy;\n #[cfg(target_os = \"windows\")]\n window.apply_blur();\n #[cfg(target_os = \"macos\")]\n {\n use tauri_plugin_vibrancy::MacOSVibrancy;\n window.apply_vibrancy(MacOSVibrancy::AppearanceBased);\n }\n ```\n\n## Available methods\n\n> Please read the methods documentation in [src/lib.rs](src/lib.rs)\n- `apply_blur()` - **`Windows`**\n- `apply_acrylic()` - **`Windows`** works on Windows 10 v1809 and above and has bad performance when resizing/dragging the window\n- `apply_vibrancy()` - **`macOS`** thanks to [@youngsing](https://github.com/youngsing)\n\n## TODOS\n\n- [ ] `apply_mica()` for Windows 11\n\n","url":"https://github.com/tauri-apps/tauri-plugin-vibrancy"},{"id":"github_tauri_apps_tauri_plugin_localhost","name":"tauri-plugin-localhost","description":"An official Tauri Plugin for using a localhost server in production apps.","kind":"plugin","stars":5,"watchers":5,"subscribers":8,"openIssues":4,"forks":1,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-01-08T16:29:22Z","createdAt":"2021-11-13T01:45:52Z","text":"# Tauri Plugin Localhost\n","url":"https://github.com/tauri-apps/tauri-plugin-localhost"},{"id":"github_tauri_apps_tauri_plugin_fs_watch","name":"tauri-plugin-fs-watch","description":"A Tauri Plugin to watch the filesystem for changes","kind":"plugin","stars":7,"watchers":7,"subscribers":8,"openIssues":4,"forks":1,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-01-28T07:36:40Z","createdAt":"2021-10-18T16:16:35Z","text":"# Tauri Plugin FSWatch\n![Test](https://github.com/tauri-apps/tauri-plugin-fs-watch/workflows/Test/badge.svg)\n\nThis plugin provides a \"classical\" Tauri Plugin Interface to watch changes on files and directories through [notify](https://github.com/notify-rs/notify).\n\n## Architecture\nThis repo shape might appear to be strange, but it is really just a hybrid Rust / Typescript project that recommends a specific type of consumption, namely using GIT as the secure distribution mechanism, and referencing specific unforgeable git hashes. Of course, it can also be consumed via Cargo and NPM.\n\n### `/src`\nRust source code that contains the plugin definition.\n\n### `/webview-src`\nTypescript source for the /webview-dist folder that provides an API to interface with the rust code.\n\n### `/webview-dist`\nTree-shakeable transpiled JS to be consumed in a Tauri application.\n\n### `/bindings`\nForthcoming tauri bindings to other programming languages, like DENO.\n\n## Installation\nThere are three general methods of installation that we can recommend.\n1. Pull sources directly from Github using git tags / revision hashes (most secure, good for developement, shown below)\n2. Git submodule install this repo in your tauri project and then use `file` protocol to ingest the source\n3. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked)\n\nFor more details and usage see [the Todo app](examples/todos-app/). Please note, below in the dependencies you can also lock to a revision/tag in both the `Cargo.toml` and `package.json`\n\n### RUST\n`src-tauri/Cargo.toml`\n```yaml\n[dependencies.tauri-plugin-fs-watch]\ngit = \"https://github.com/tauri-apps/tauri-plugin-fs-watch\"\ntag = \"v0.1.0\"\n#branch = \"main\"\n```\n\nUse in `src-tauri/src/main.rs`:\n```rust\nuse tauri_plugin_fs_watch::Watcher;\n\nfn main() {\n tauri::Builder::default()\n .plugin(Watcher::default())\n .build()\n .run();\n}\n```\n\n### WEBVIEW\n`Install from a tagged release`\n```\nnpm install github:tauri-apps/tauri-plugin-fs-watch#v0.1.0\n# or\nyarn add github:tauri-apps/tauri-plugin-fs-watch#v0.1.0\n```\n\n`Install from a commit`\n```\nnpm install github:tauri-apps/tauri-plugin-fs-watch#488558717b77d8a2bcb37acfd2eca9658aeadc8e\n# or\nyarn add github:tauri-apps/tauri-plugin-fs-watch#488558717b77d8a2bcb37acfd2eca9658aeadc8e\n```\n\n`package.json`\n```json\n \"dependencies\": {\n \"tauri-plugin-fs-watch-api\": \"github:tauri-apps/tauri-plugin-fs-watch#v0.1.0\",\n```\n\nUse within your JS/TS:\n```ts\nimport { watch, watchImmediate } from 'tauri-plugin-fs-watch-api'\n\n// can also watch an array of paths\nconst stopWatching = await watch('/path/to/something', { recursive: true }, event => {\n const { type, payload } = event\n})\n\nconst stopRawWatcher = await watchImmediate(['/path/a', '/path/b'], {}, event => {\n const { path, operation, cookie } = event\n})\n```\n\n# License\nMIT / Apache-2.0\n","url":"https://github.com/tauri-apps/tauri-plugin-fs-watch"},{"id":"github_tauri_apps_tauri_forage","name":"tauri-forage","description":"Currified localForage with a side of extras.","kind":"unknown","stars":7,"watchers":7,"subscribers":5,"openIssues":6,"forks":1,"defaultBranch":"dev","language":"TypeScript","topics":[],"isTemplate":false,"lastUpdated":"2022-01-17T06:27:39Z","createdAt":"2020-01-15T11:32:27Z","text":"# tauri forage\n![test library](https://github.com/tauri-apps/tauri-forage/workflows/test%20library/badge.svg?branch=dev)\n![npm version](https://img.shields.io/npm/v/@tauri-apps/tauri-forage.svg)\n\n[localForage](https://localforage.github.io/localForage/) is a great way to make sure that you've got the most persistent localStorage available on the device and webview that you are using, but operations (like replacing a keyValue) can be tedious, and our approach of multi-op currying makes it very flexible. It is written and tested in typescript, and ships with commonjs and an ejs versions - as well as all of its own typings in case you are using typescript.\n\nIf you don't know how localForage works, you would do well to check out those docs - because that is the underlying engine that this library uses. But for a refresher, localForage uses IndexedDB, WebSQL, or localStorage - depending on the best engine that the browser offers.\n\n## Installation\n\nInstall with your package manager\n```\nyarn add @tauri-apps/tauri-forage\n```\n\nImport into your JS / TS\n```\nimport { forage } from '@tauri-apps/tauri-forage'\n```\n\nUse it:\n```\nforage.setItem({\n key: 'yourKey',\n value: 'a value'\n})()\n```\n\n## How does it work?\nHere is the `getItem` function. There is a lot to discuss, and once you've understood the principle all of the other functions will make sense to you. If you want to see more details, check out the tests in `test/__tests__/tauriForage.spec.ts`\n\n```ts\ngetItem ({ key, logger, returner, before, store }: BeforeItem = {}) {\n return async function (curry?: MaybeFunction) {\n const storage = await _defineStore({ store: store })\n key = before ? await handler.maybeCurry(curry || null)(key) : key\n return handler.returner(\n storage.getItem(key).then(async (v: any) => {\n return !before ? handler.maybeCurry(curry || null)(v) : v\n }).catch((err: any) => {\n /* istanbul ignore next */\n return handler.logger(err, logger)\n })\n )(returner)\n }\n}\n```\n\nIn its most simple incarnation, you can just get the keyValue of the keyName.\n```\n```\n\n### Returner\nYou can instruct every function to return the value in specific ways.\n\n#### TYPES\n- 1(quiet) - return void 0\n- 2(console) - log the returned value to the console\n- 3(break) - throw an error with the contents of the return\n- 4(truthy) - return a true or false value\n- 5(typeof) - return type of response\n- 6(trace) - get a console.trace() of the call stack\n- 7(passthrough) - the default does nothing to the return\n\n\n### Logger\nIf an error occurs, you can determine how to respond:\n\n#### TYPES\n- 1(none) - just return\n- 2(string) - returned the string value of the error\n- 3(trace) - try to return a stack trace up to the error\n- 4(console) - write a console.error\n- 5(throw) - throw the error\n- 6(default) - return undefined\n\n> If you want, you can also use these handler functions yourself! They are properly exported and typed!\n\n### Currying\nHowever you can also curry the returned value with a function you can pass into the function call.\n\nLet's look at a few tests to see how currying can be applied:\n```ts\nit('will curry after', async () => {\n\n await forage.setItem({\n key: 'user',\n value: { name: 'Alice' }\n } as any)()\n\n const curry = (v: any) => v.toUpperCase()\n\n const user = await forage.getKeyValue({\n key: 'user',\n value: 'name'\n } as any)(curry)\n\n expect(user).toStrictEqual('ALICE')\n})\n```\n\nYou can also curry the value BEFORE it is used by localForage. This example is obviously quite trivial, but you may start to see a pattern emerge.\n```ts\n it('will curry before', async () => {\n\n // you can set objects or arrays or even huge base64 strings for values\n await forage.setItem({\n key: 'user',\n value: {\n name: 'Alice'\n }\n } as any)()\n\n const curry = (v: any) => v.toLowerCase()\n\n const user = await forage.getKeyValue({\n key: 'user',\n value: 'NAME',\n before: true\n } as any)(curry)\n\n expect(user).toStrictEqual('Alice')\n })\n```\n\nIf you want to have multiple \"stores\", you can easily do that too.\n\n\n## Extensions to localForage\nOf note are the extensions to the generic interface:\n - mergeItem (with a number of merge strategies available)\n - getKeyValue\n - deleteItemKey\n - hasKey\n - hasKeyValue\n\n## undefined / void 0 => always returns null!\n> Even if undefined is saved, null will be returned by getItem().\nThis is due to a limitation in localStorage, and for compatibility\nreasons localForage cannot store the value undefined.\n\n# Development\n## Testing\nTests are written with Jasmine flavor using Jest.\n\n## Docs\nThe docs are available as a static site in /docs\n\n## License\n(c) 2019-2020 - Daniel Thompson-Yvetot and contributors\n\nMIT\n","url":"https://github.com/tauri-apps/tauri-forage"},{"id":"github_tauri_apps_tauri_hotkey_rs","name":"tauri-hotkey-rs","description":null,"kind":"code","stars":8,"watchers":8,"subscribers":4,"openIssues":2,"forks":1,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2021-08-04T09:13:38Z","createdAt":"2021-02-14T04:49:18Z","text":"# Tauri Hotkey\n\nThis crate provides cross platform APIs to register keyboard hotkeys. This is a fork of [hotkey-rs](https://github.com/gamebooster/soundboard/tree/master/extern/hotkey-rs).\n\n## Platform support\n\n- Linux\n- macOS\n- Windows\n\n## License\nMIT\n","url":"https://github.com/tauri-apps/tauri-hotkey-rs"},{"id":"github_tauri_apps_tauri_dialog_rs","name":"tauri-dialog-rs","description":null,"kind":"unknown","stars":1,"watchers":1,"subscribers":3,"openIssues":0,"forks":1,"defaultBranch":"master","language":"C","topics":[],"isTemplate":false,"lastUpdated":"2021-06-06T00:39:20Z","createdAt":"2020-06-14T10:59:41Z","text":"# tauri-dialog-rs\n\nRust bindings to forked https://github.com/aaronmjacobs/Boxer.\n\n## Deprecation notice\n\nThis crate is no longer maintained. Tauri now uses [rfd](https://github.com/PolyMeilex/rfd).\n","url":"https://github.com/tauri-apps/tauri-dialog-rs"},{"id":"github_tauri_apps_tauri_inliner_rs","name":"tauri-inliner-rs","description":null,"kind":"code","stars":0,"watchers":0,"subscribers":3,"openIssues":2,"forks":0,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2021-04-12T08:30:46Z","createdAt":"2020-12-12T13:20:34Z","license":"MIT License","text":"# Tauri Inliner\n\nA Rust library for inlining assets in an HTML file. Based on the work on [inline-assets-rs](https://github.com/8176135/inline-assets-rs) and [inliner](https://github.com/remy/inliner).\n","url":"https://github.com/tauri-apps/tauri-inliner-rs"},{"id":"github_tauri_apps_tauri_inliner_rs","name":"tauri-inliner-rs","description":null,"kind":"code","stars":0,"watchers":0,"subscribers":3,"openIssues":2,"forks":0,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2021-04-12T08:30:46Z","createdAt":"2020-12-12T13:20:34Z","license":"MIT License","text":"# Tauri Inliner\n\nA Rust library for inlining assets in an HTML file. Based on the work on [inline-assets-rs](https://github.com/8176135/inline-assets-rs) and [inliner](https://github.com/remy/inliner).\n","url":"https://github.com/tauri-apps/tauri-inliner-rs"},{"id":"github_tauri_apps_rfcs","name":"rfcs","description":"A medium for proposing and repo of accepted RFCs.","kind":"unknown","stars":12,"watchers":12,"subscribers":5,"openIssues":1,"forks":1,"defaultBranch":"master","language":null,"topics":[],"isTemplate":false,"lastUpdated":"2021-07-16T22:50:55Z","createdAt":"2020-03-10T14:53:02Z","text":"# Tauri RFC Repository\nThis repo is dedicated to an RFC process, through which we have significant changes to the project undergo a transparent consideration and confirm changes by accepting them into the repo.\n\n## Process\n1) **Start a discussion.** Writing an RFC is a large investment of time, it's best to discuss it with the community to be sure it's worthwhile and to get it done right.\n2) **Fork this repo.** The review period of RFCs is held in the PR back into the repo.\n3) **Copy the template.** Move your copy of `template.md` into the `texts` folder, naming it in the scheme of `0000-feature.md`. Note: the number is literal, it needs to be adjusted just before merging.\n4) **Fill the template out.** Replace all relevant sections with explanations. Put care into the details, as it will serve as a reference through the development process.\n5) **Open a PR.** At this point, the RFC is open for comment. Discussion should happen in the comments of the PR. RFCs that are \"invalid\" (don't follow the format/proceedure, violate CoC, or are otherwise unable to be used) may be closed immediately, otherwise they will be left open for a minimum of 2 weeks before being accepted or rejected.\n6) **After the comment period,** a member of the Core Team will handle closing the RFC. If accepted, the RFC will be assigned a number and a tracking issue opened on the appropriate repo. Both details will be added to the RFC, then the PR will be merged.\n","url":"https://github.com/tauri-apps/rfcs"},{"id":"github_tauri_apps_tauri_theia","name":"tauri-theia","description":"Tauri Flavor of Theia","kind":"code","stars":28,"watchers":28,"subscribers":5,"openIssues":7,"forks":4,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2021-12-01T07:36:59Z","createdAt":"2020-05-09T18:07:35Z","license":"MIT License","text":"# Tauri Theia\n\n[Theia IDE](https://theia-ide.org/) packaged as a Tauri application.\n\n## To Use\n\nCurrently only working in Linux\n\n1. Clone this repository and open a terminal in the root of it. Make sure to use Node v10.x\n2. Install deps with `yarn`\n3. Package Theia server as an executable with `yarn theia:package`\n4. Run `yarn tauri build` to build the executable\n","url":"https://github.com/tauri-apps/tauri-theia"},{"id":"github_tauri_apps_tauri_toml","name":"tauri-toml","description":"Better TOML parsing and stringifying all in that familiar JSON interface.","kind":"unknown","stars":0,"watchers":0,"subscribers":1,"openIssues":0,"forks":1,"defaultBranch":"dev","language":"JavaScript","topics":[],"isTemplate":false,"lastUpdated":"2019-12-15T20:14:20Z","createdAt":"2019-11-30T11:18:10Z","license":"ISC License","text":"# @tauri-apps/toml\n\n## This is a fork of iarna-toml so that we can make some needed modifations for `tauri`.\n\nBetter TOML parsing and stringifying all in that familiar JSON interface.\n\n[![Coverage Status](https://coveralls.io/repos/github/iarna/iarna-toml/badge.svg)](https://coveralls.io/github/iarna/iarna-toml)\n\n# ** TOML 0.5.0 **\n\n### TOML Spec Support\n\nThe most recent version as of 2018-07-26: [v0.5.0](https://github.com/mojombo/toml/blob/master/versions/en/toml-v0.5.0.md)\n\n### Example\n\n```js\nconst TOML = require('@tauri-apps/toml')\nconst obj = TOML.parse(`[abc]\nfoo = 123\nbar = [1,2,3]`)\n/* obj =\n{abc: {foo: 123, bar: [1,2,3]}}\n*/\nconst str = TOML.stringify(obj)\n/* str =\n[abc]\nfoo = 123\nbar = [ 1, 2, 3 ]\n*/\n```\n\nVisit the project github [for more examples](https://github.com/iarna/iarna-toml/tree/latest/examples)!\n\n\n## Why @tauri-apps/toml\n\n* See [TOML-SPEC-SUPPORT](https://shared.by.re-becca.org/misc/TOML-SPEC-SUPPORT.html) for a comparison of which TOML features\n are supported by the various Node.js TOML parsers.\n* BigInt support on Node 10!\n* 100% test coverage.\n* Faster parsing, even if you only use TOML 0.4.0, it's as much as 100 times\n faster than `toml` and 3 times faster than `toml-j0.4`. However a recent\n newcomer [`@ltd/j-toml`](https://www.npmjs.com/package/@ltd/j-toml) has\n appeared with 0.5 support and astoundingly fast parsing speeds for large\n text blocks. All I can say is you'll have to test your specific work loads\n if you want to know which of @tauri-apps/toml and @ltd/j-toml is faster for\n you, as we currently excell in different areas\n* Careful adherence to spec. Tests go beyond simple coverage.\n* Smallest parser bundle (if you use `@tauri-apps/toml/parse-string`).\n* No deps.\n* Detailed and easy to read error messages‼\n\n```console\n> TOML.parse(src)\nError: Unexpected character, expecting string, number, datetime, boolean, inline array or inline table at row 6, col 5, pos 87:\n5: \"abc\\\"\" = { abc=123,def=\"abc\" }\n6> foo=sdkfj\n ^\n7:\n```\n\n## TOML.parse(str) → Object [(example)](https://github.com/iarna/iarna-toml/blob/latest/examples/parse.js)\n\nAlso available with: `require('@tauri-apps/toml/parse-string')`\n\nSynchronously parse a TOML string and return an object.\n\n\n## TOML.stringify(obj) → String [(example)](https://github.com/iarna/iarna-toml/blob/latest/examples/stringify.js)\n\nAlso available with: `require('@tauri-apps/toml/stringify)`\n\nSerialize an object as TOML.\n\n## [your-object].toJSON\n\nIf an object `TOML.stringify` is serializing has a `toJSON` method then it\nwill call it to transform the object before serializing it. This matches\nthe behavior of `JSON.stringify`.\n\nThe one exception to this is that `toJSON` is not called for `Date` objects\nbecause `JSON` represents dates as strings and TOML can represent them natively.\n\n[`moment`](https://www.npmjs.com/package/moment) objects are treated the\nsame as native `Date` objects, in this respect.\n\n## TOML.stringify.value(obj) -> String\n\nAlso available with: `require('@tauri-apps/toml/stringify').value`\n\nSerialize a value as TOML would. This is a fragment and not a complete\nvalid TOML document.\n\n## Promises and Streaming\n\nThe parser provides alternative async and streaming interfaces, for times\nthat you're working with really absurdly big TOML files and don't want to\ntie-up the event loop while it parses.\n\n### TOML.parse.async(str[, opts]) → Promise(Object) [(example)](https://github.com/iarna/iarna-toml/blob/latest/examples/parse-async.js)\n\nAlso available with: `require('@tauri-apps/toml/parse-async')`\n\n`opts.blocksize` is the amount text to parser per pass through the event loop. Defaults to 40kb.\n\nAsynchronously parse a TOML string and return a promise of the resulting object.\n\n### TOML.parse.stream(readable) → Promise(Object) [(example)](https://github.com/iarna/iarna-toml/blob/latest/examples/parse-stream-readable.js)\n\nAlso available with: `require('@tauri-apps/toml/parse-stream')`\n\nGiven a readable stream, parse it as it feeds us data. Return a promise of the resulting object.\n\n### readable.pipe(TOML.parse.stream()) → Transform [(example)](https://github.com/iarna/iarna-toml/blob/latest/examples/parse-stream-through.js)\n\nAlso available with: `require('@tauri-apps/toml/parse-stream')`\n\nReturns a transform stream in object mode. When it completes, emit the\nresulting object. Only one object will ever be emitted.\n\n## Lowlevel Interface [(example)](https://github.com/iarna/iarna-toml/blob/latest/examples/parse-lowlevel.js) [(example w/ parser debugging)](https://github.com/iarna/iarna-toml/blob/latest/examples/parse-lowlevel-debug.js)\n\nYou construct a parser object, per TOML file you want to process:\n\n```js\nconst TOMLParser = require('@tauri-apps/toml/lib/toml-parser.js')\nconst parser = new TOMLParser()\n```\n\nThen you call the `parse` method for each chunk as you read them, or in a\nsingle call:\n\n```js\nparser.parse(`hello = 'world'`)\n```\n\nAnd finally, you call the `finish` method to complete parsing and retrieve\nthe resulting object.\n\n```js\nconst data = parser.finish()\n```\n\nBoth the `parse` method and `finish` method will throw if they find a\nproblem with the string they were given. Error objects thrown from the\nparser have `pos`, `line` and `col` attributes. `TOML.parse` adds a visual\nsummary of where in the source string there were issues using\n`parse-pretty-error` and you can too:\n\n```js\nconst prettyError = require('./parse-pretty-error.js')\nconst newErr = prettyError(err, sourceString)\n```\n\n## What's Different\n\nVersion 2 of this module supports TOML 0.5.0. Other modules currently\npublished to the npm registry support 0.4.0. 0.5.0 is mostly backwards\ncompatible with 0.4.0, but if you have need, you can install @tauri-apps/toml@1\nto get a version of this module that supports 0.4.0. Please see the\n[CHANGELOG](CHANGELOG.md#2.0.0) for details on exactly whats changed.\n\n## TOML we can't do\n\n* `-nan` is a valid TOML value and is converted into `NaN`. There is no way to\n produce `-nan` when stringifying. Stringification will produce positive `nan`.\n* Detecting and erroring on invalid utf8 documents: This is because Node's\n UTF8 processing converts invalid sequences into the placeholder character\n and does not have facilities for reporting these as errors instead. We\n _can_ detect the placeholder character, but it's valid to intentionally\n include them in documents, so erroring on them is not great.\n* On versions of Node < 10, very large Integer values will lose precision.\n On Node >=10, bigints are used.\n* Floating/local dates and times are still represented by JavaScript Date\n objects, which don't actually support these concepts. The objects\n returned have been modified so that you can determine what kind of thing\n they are (with `isFloating`, `isDate`, `isTime` properties) and that\n their ISO representation (via `toISOString`) is representative of their\n TOML value. They will correctly round trip if you pass them to\n `TOML.stringify`.\n* Binary, hexadecimal and octal values are converted to ordinary integers and\n will be decimal if you stringify them.\n\n## Changes\n\nI write a by hand, honest-to-god,\n[CHANGELOG](https://github.com/iarna/iarna-toml/blob/latest/CHANGELOG.md)\nfor this project. It's a description of what went into a release that you\nthe consumer of the module could care about, not a list of git commits, so\nplease check it out!\n\n## Benchmarks\n\nYou can run them yourself with:\n\n```console\n$ npm run benchmark\n```\n\nThe results below are from my laptop using Node 11.10.0. The library\nversions tested were `@tauri-apps/toml@2.2.2`, `toml-j0.4@1.1.1`, `toml@3.0.0`,\n`@sgarciac/bombadil@2.1.0` and `@ltd/j-toml@0.5.47`. The speed value is\nmegabytes-per-second that the parser can process of that document type.\nBigger is better. The percentage after average results is the margin of error.\n\nAs this table is getting a little wide, with how npm and github display it,\nyou can also view it seperately in the [BENCHMARK](https://shared.by.re-becca.org/misc/BENCHMARK.html) document.\n\n| | @tauri-apps/toml | | toml-j0.4 | | toml | | @sgarciac/bombadil | | @ltd/j-toml | |\n| - | ----------- | - | --------- | - | ---- | - | ------------------ | - | ----------- | - |\n| Overall | 25MB/sec | 0.55% | 7MB/sec | 1.39% | 0.2MB/sec | 3.47% | - | - | 38MB/sec | 1.37% |\n| Spec Example: v0.4.0 | 23MB/sec | 0.87% | 10MB/sec | 0.62% | 1MB/sec | 1.89% | 1.7MB/sec | 1.03% | 35MB/sec | 1.32% |\n| Spec Example: Hard Unicode | 57MB/sec | 1.46% | 16MB/sec | 0.66% | 2MB/sec | 2.25% | 0.8MB/sec | 0.57% | 93MB/sec | 1.79% |\n| Types: Array, Inline | 7.2MB/sec | 1.60% | 3.2MB/sec | 0.77% | 0.1MB/sec | 1.84% | 1.7MB/sec | 0.56% | 4.1MB/sec | 14.48% |\n| Types: Array | 6.9MB/sec | 0.47% | 5.8MB/sec | 0.46% | 0.1MB/sec | 3.67% | 1.4MB/sec | 0.76% | 2.5MB/sec | 8.19% |\n| Types: Boolean, | 22MB/sec | 0.85% | 8.5MB/sec | 0.55% | 0.2MB/sec | 1.83% | 2.1MB/sec | 1.29% | 5.6MB/sec | 0.58% |\n| Types: Datetime | 18MB/sec | 0.56% | 11MB/sec | 0.80% | 0.3MB/sec | 1.55% | 0.8MB/sec | 0.51% | 4.5MB/sec | 0.66% |\n| Types: Float | 9.2MB/sec | 0.71% | 5.2MB/sec | 1.12% | 0.3MB/sec | 2.04% | 2.6MB/sec | 0.86% | 3.7MB/sec | 0.61% |\n| Types: Int | 6.4MB/sec | 0.44% | 3.9MB/sec | 0.56% | 0.1MB/sec | 1.65% | 1.7MB/sec | 1.15% | 1.5MB/sec | 4.06% |\n| Types: Literal String, 7 char | 26MB/sec | 0.62% | 8.1MB/sec | 1.00% | 0.3MB/sec | 1.48% | 2.9MB/sec | 0.58% | 6MB/sec | 0.52% |\n| Types: Literal String, 92 char | 41MB/sec | 0.80% | 11MB/sec | 1.20% | 0.4MB/sec | 2.38% | 15MB/sec | 0.84% | 23MB/sec | 0.58% |\n| Types: Literal String, Multiline, 1079 char | 21MB/sec | 0.28% | 7.2MB/sec | 1.62% | 1.3MB/sec | 3.05% | 55MB/sec | 0.53% | 332MB/sec | 0.46% |\n| Types: Basic String, 7 char | 26MB/sec | 0.56% | 6.6MB/sec | 0.61% | 0.2MB/sec | 4.70% | 2.7MB/sec | 0.68% | 3.3MB/sec | 0.47% |\n| Types: Basic String, 92 char | 41MB/sec | 0.63% | 8MB/sec | 0.51% | 0.1MB/sec | 1.57% | 14MB/sec | 0.66% | 21MB/sec | 0.43% |\n| Types: Basic String, 1079 char | 21MB/sec | 0.36% | 6MB/sec | 0.81% | 0.1MB/sec | 1.81% | 51MB/sec | 0.53% | 13MB/sec | 0.62% |\n| Types: Table, Inline | 9.8MB/sec | 0.47% | 4.6MB/sec | 0.81% | 0.1MB/sec | 1.82% | 1.7MB/sec | 0.75% | 2.9MB/sec | 4.82% |\n| Types: Table | 6.9MB/sec | 0.43% | 4.9MB/sec | 0.46% | 0.1MB/sec | 3.59% | 1.6MB/sec | 0.88% | 4.4MB/sec | 0.53% |\n| Scaling: Array, Inline, 1000 elements | 33MB/sec | 2.15% | 2.5MB/sec | 1.07% | 0.1MB/sec | 3.57% | 1.8MB/sec | 0.64% | 8.7MB/sec | 4.12% |\n| Scaling: Array, Nested, 1000 deep | 1.6MB/sec | 2.50% | 1.2MB/sec | 0.49% | 0.1MB/sec | 3.62% | - | - | 1MB/sec | 3.79% |\n| Scaling: Literal String, 40kb | 56MB/sec | 0.58% | 12MB/sec | 1.03% | 3.6MB/sec | 4.00% | 17MB/sec | 0.54% | 498MB/sec | 0.52% |\n| Scaling: Literal String, Multiline, 40kb | 58MB/sec | 0.38% | 6.4MB/sec | 0.54% | 0.2MB/sec | 1.72% | 15MB/sec | 0.74% | 197MB/sec | 0.54% |\n| Scaling: Basic String, Multiline, 40kb | 57MB/sec | 1.03% | 7.2MB/sec | 1.22% | 3.4MB/sec | 4.24% | 15MB/sec | 0.75% | 840MB/sec | 0.52% |\n| Scaling: Basic String, 40kb | 57MB/sec | 0.43% | 8.6MB/sec | 0.57% | 0.2MB/sec | 1.71% | 17MB/sec | 0.51% | 394MB/sec | 0.54% |\n| Scaling: Table, Inline, 1000 elements | 27MB/sec | 0.46% | 7.5MB/sec | 0.71% | 0.3MB/sec | 2.24% | 3MB/sec | 0.74% | 2.3MB/sec | 0.81% |\n| Scaling: Table, Inline, Nested, 1000 deep | 7.8MB/sec | 0.61% | 4.3MB/sec | 0.83% | 0.1MB/sec | 2.93% | - | - | 1.2MB/sec | 13.45% |\n\n## Tests\n\nThe test suite is maintained at 100% coverage: [![Coverage Status](https://coveralls.io/repos/github/iarna/iarna-toml/badge.svg)](https://coveralls.io/github/iarna/iarna-toml)\n\nThe spec was carefully hand converted into a series of test framework\nindependent (and mostly language independent) assertions, as pairs of TOML\nand YAML files. You can find those files here:\n[spec-test](https://github.com/iarna/iarna-toml/blob/latest/test/spec-test/).\nA number of examples of invalid Unicode were also written, but are difficult\nto make use of in Node.js where Unicode errors are silently hidden. You can\nfind those here: [spec-test-disabled](https://github.com/iarna/iarna-toml/blob/latest/test/spec-test-disabled/).\n\nFurther tests were written to increase coverage to 100%, these may be more\nimplementation specific, but they can be found in [coverage](https://github.com/iarna/iarna-toml/blob/latest/test/coverage.js) and\n[coverage-error](https://github.com/iarna/iarna-toml/blob/latest/test/coverage-error.js).\n\nI've also written some quality assurance style tests, which don't contribute\nto coverage but do cover scenarios that could easily be problematic for some\nimplementations can be found in:\n[test/qa.js](https://github.com/iarna/iarna-toml/blob/latest/test/qa.js) and\n[test/qa-error.js](https://github.com/iarna/iarna-toml/blob/latest/test/qa-error.js).\n\nAll of the official example files from the TOML spec are run through this\nparser and compared to the official YAML files when available. These files are from the TOML spec as of:\n[357a4ba6](https://github.com/toml-lang/toml/tree/357a4ba6782e48ff26e646780bab11c90ed0a7bc)\nand specifically are:\n\n* [github.com/toml-lang/toml/tree/357a4ba6/examples](https://github.com/toml-lang/toml/tree/357a4ba6782e48ff26e646780bab11c90ed0a7bc/examples)\n* [github.com/toml-lang/toml/tree/357a4ba6/tests](https://github.com/toml-lang/toml/tree/357a4ba6782e48ff26e646780bab11c90ed0a7bc/tests)\n\nThe stringifier is tested by round-tripping these same files, asserting that\n`TOML.parse(sourcefile)` deepEqual\n`TOML.parse(TOML.stringify(TOML.parse(sourcefile))`. This is done in\n[test/roundtrip-examples.js](https://github.com/iarna/iarna-toml/blob/latest/test/round-tripping.js)\nThere are also some tests written to complete coverage from stringification in:\n[test/stringify.js](https://github.com/iarna/iarna-toml/blob/latest/test/stringify.js)\n\nTests for the async and streaming interfaces are in [test/async.js](https://github.com/iarna/iarna-toml/blob/latest/test/async.js) and [test/stream.js](https://github.com/iarna/iarna-toml/blob/latest/test/stream.js) respectively.\n\nTests for the parsers debugging mode live in [test/devel.js](https://github.com/iarna/iarna-toml/blob/latest/test/devel.js).\n\nAnd finally, many more stringification tests were borrowed from [@othiym23](https://github.com/othiym23)'s\n[toml-stream](https://npmjs.com/package/toml-stream) module. They were fetched as of\n[b6f1e26b572d49742d49fa6a6d11524d003441fa](https://github.com/othiym23/toml-stream/tree/b6f1e26b572d49742d49fa6a6d11524d003441fa/test) and live in\n[test/toml-stream](https://github.com/iarna/iarna-toml/blob/latest/test/toml-stream/).\n\n## Improvements to make\n\n* In stringify:\n * Any way to produce comments. As a JSON stand-in I'm not too worried\n about this. That said, a document orientated fork is something I'd like\n to look at eventually…\n * Stringification could use some work on its error reporting. It reports\n _what's_ wrong, but not where in your data structure it was.\n* Further optimize the parser:\n * There are some debugging assertions left in the main parser, these should be moved to a subclass.\n * Make the whole debugging parser thing work as a mixin instead of as a superclass.\n","url":"https://github.com/tauri-apps/tauri-toml"},{"id":"github_tauri_apps_realworld","name":"realworld","description":"Realworld apps made with Tauri: Proof of Agnosis.","kind":"unknown","stars":4,"watchers":4,"subscribers":4,"openIssues":1,"forks":0,"defaultBranch":"dev","language":"JavaScript","topics":[],"isTemplate":false,"lastUpdated":"2021-03-02T14:54:39Z","createdAt":"2020-02-05T22:02:37Z","license":"MIT License","text":"# Tauri x Realworld apps\n\nThis project is an experiment to demonstrate how easy you can bundle an existing frontend app with Tauri, whichever the framework you're using, without having to change a single line from the codebase.\n\nThe main script (build.js) simply consists in a pipeline that will clone, install dependencies, build the application, initialize Tauri then bundle the application. \n\n## Setup\n\n1. Take a look at the Wiki to setup Tauri: https://github.com/tauri-apps/tauri/wiki\n2. Have Git, Node and NPM installed\n3. Clone and install this project dependencies, either with NPM or Yarn:\n```bash\ngit clone git@github.com:tauri-apps/realworld.git\ncd realworld\n\nyarn install\n# OR\nnpm install\n```\n\n## Usage\n\n`node build {{app.repo}}`\nThis will apply the pipeline on a single application from apps.yaml. Copy/paste a `repo` property from the wanted application and let it build.\n\n`node build`\nThis will apply the pipeline on _every_ application from apps.yaml. Unless you have some spare time, enough disk space, a nice CPU and unlimited bandwidth, you should avoid to do it (and ensure the pipeline at least works for a single project in a first time).\n\n## Details about apps.yaml\n\nCommented apps have not been successfully bundled (yet), either because of the build or the bundle phase failing.\nA detail about what's wrong is displayed above the app title. \n","url":"https://github.com/tauri-apps/realworld"},{"id":"github_tauri_apps_governance_and_guidance","name":"governance-and-guidance","description":null,"kind":"unknown","stars":3,"watchers":3,"subscribers":15,"openIssues":7,"forks":2,"defaultBranch":"master","language":null,"topics":[],"isTemplate":false,"lastUpdated":"2021-03-15T09:00:16Z","createdAt":"2019-09-04T18:07:56Z","license":"MIT License","text":"# Governance and Guidance\n","url":"https://github.com/tauri-apps/governance-and-guidance"},{"id":"github_tauri_apps_tauri_search_bot","name":"tauri-search-bot","description":"Tauri's Discord Bot","kind":"unknown","stars":1,"watchers":1,"subscribers":4,"openIssues":10,"forks":0,"defaultBranch":"main","language":"JavaScript","topics":[],"isTemplate":false,"lastUpdated":"2021-08-09T07:21:36Z","createdAt":"2021-02-09T21:05:37Z","license":"MIT License","text":"# tauri-search-bot","url":"https://github.com/tauri-apps/tauri-search-bot"},{"id":"github_tauri_apps_webkit_gtk_rs","name":"webkit2gtk-rs","description":"WebKit2 bindings and wrappers for Rust","kind":"code","stars":77,"watchers":77,"subscribers":12,"openIssues":12,"forks":21,"defaultBranch":"crate","language":"Rust","topics":["hacktoberfest"],"isTemplate":false,"lastUpdated":"2022-01-06T06:45:42Z","createdAt":"2016-09-14T17:22:14Z","license":"MIT License","text":"# webkit2gtk\n\n__Rust__ bindings and wrappers for __webkit2gtk__.\n\n## Building\n\n__webkit2gtk-rs__ expects __GTK+__, __GLib__ and __webkit2gtk__ development files to be installed on your system.\nSee the [requirements page](http://gtk-rs.org/docs/requirements.html).\n\n## Using\n\n```toml\n[dependencies]\nwebkit2gtk-rs = \"0.15\"\n```\n\n## License\n\n__webkit2gtk-rs__ is available under the MIT License, please refer to it.\n","url":"https://github.com/tauri-apps/webkit2gtk-rs"},{"id":"github_tauri_apps_javascriptcore_rs","name":"javascriptcore-rs","description":"JavaScriptCore bindings and wrappers for Rust","kind":"code","stars":31,"watchers":31,"subscribers":11,"openIssues":1,"forks":16,"defaultBranch":"crate","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-01-03T16:30:15Z","createdAt":"2016-09-18T21:14:54Z","license":"MIT License","text":"# javascriptcore\n\n__Rust__ bindings and wrappers for __javascriptcore__.\n\n## Using\n\n```toml\n[dependencies]\njavascriptcore-rs = \"0.14\"\n```\n\n## License\n\n__javascriptcore-rs__ is available under the MIT License, please refer to it.\n","url":"https://github.com/tauri-apps/javascriptcore-rs"},{"id":"github_tauri_apps_awesome_tauri","name":"awesome-tauri","description":"🚀 Awesome Tauri Apps, Plugins and Resources","kind":"unknown","stars":41,"watchers":41,"subscribers":13,"openIssues":0,"forks":4,"defaultBranch":"dev","language":null,"topics":["awesome","awesome-list","tauri"],"isTemplate":false,"lastUpdated":"2022-01-29T20:51:30Z","createdAt":"2022-01-22T16:25:58Z","license":"MIT License","text":"\n\n

Awesome Tauri

\n\n

\nThis is where we collect all of the best stuff from the ecosystem and community.\n

\n\n\nAwesome\n\n

\n\n## Table of Contents\n- [Get Started](#get-started)\n- [Plugins](#plugins)\n- [Integrations](#integrations)\n- [Apps](#apps)\n- [Tutorials](#tutorials)\n- [Articles](#articles)\n\n## Get Started\n\n- [Introduction](https://tauri.studio/docs/development/intro) - Official introduction to Tauri.\n- [create-tauri-app](https://github.com/tauri-apps/tauri/tree/next/tooling/create-tauri-app) - Rapidly scaffold your Tauri app.\n\n### Templates\n\n## Plugins\n\n- [tauri-plugin-authenticator](https://github.com/tauri-apps/tauri-plugin-authenticator) ![official](https://img.shields.io/badge/-official-FFC131) - Interface with hardware security keys.\n- [tauri-plugin-log](https://github.com/tauri-apps/tauri-plugin-log) ![official](https://img.shields.io/badge/-official-FFC131) - Configurable logging.\n- [tauri-plugin-sql](https://github.com/tauri-apps/tauri-plugin-sql) ![official](https://img.shields.io/badge/-official-FFC131) - Interface with SQL databases.\n- [tauri-plugin-store](https://github.com/tauri-apps/tauri-plugin-store) ![official](https://img.shields.io/badge/-official-FFC131) - Persistent key value storage.\n- [tauri-plugin-stronghold](https://github.com/tauri-apps/tauri-plugin-stronghold) ![official](https://img.shields.io/badge/-official-FFC131) - Encrypted, secure, p2p database.\n- [tauri-plugin-window-state](https://github.com/tauri-apps/tauri-plugin-window-state) ![official](https://img.shields.io/badge/-official-FFC131) - Persist window sizes and positions.\n- [tauri-plugin-vibrancy](https://github.com/tauri-apps/tauri-plugin-vibrancy) ![official](https://img.shields.io/badge/-official-FFC131) - Make your Tauri/TAO windows vibrant.\n- [tauri-plugin-shadows](https://github.com/tauri-apps/tauri-plugin-shadows) ![official](https://img.shields.io/badge/-official-FFC131) - Add native shadows to your Tauri/TAO windows.\n- [tauri-plugin-positioner](https://github.com/JonasKruckenberg/tauri-plugin-positioner) - Move windows to common locations.\n \n## Integrations\n\n- [vue-cli-plugin-tauri](https://github.com/tauri-apps/vue-cli-plugin-tauri) ![official](https://img.shields.io/badge/-official-FFC131) - Turn your Vue SPA into a lightweight cross-platform desktop app.\n- [vite-plugin-tauri](https://github.com/amrbashir/vite-plugin-tauri) - Integrate Tauri in a Vite project to build cross-platform apps.\n- [axios-tauri-adapter](https://git.kaki87.net/KaKi87/axios-tauri-adapter) - `axios` adapter for the `@tauri-apps/api/http` module.\n\n## Apps\n\n### Open Source\n\n- [UsTaxes](https://github.com/ustaxes/ustaxes) - Free, private, open-source US tax filings.\n- [Xplorer](https://github.com/kimlimjustin/xplorer) - Customizable, modern and cross-platform File Explorer.\n- [Clash Verge](https://github.com/zzzgydi/clash-verge) - Rule based proxy for Mac and Windows based on `clash`.\n\n### Closed Source\n\n## Tutorials\n\n## Articles\n","url":"https://github.com/tauri-apps/awesome-tauri"}] \ No newline at end of file diff --git a/packages/tauri-search/src/generated/sitemap-tauri-dev.json b/packages/tauri-search/src/generated/sitemap-tauri-dev.json deleted file mode 100644 index 9e26dfe..0000000 --- a/packages/tauri-search/src/generated/sitemap-tauri-dev.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/packages/tauri-search/src/generated/sitemap-tauri-docs-dev.json b/packages/tauri-search/src/generated/sitemap-tauri-docs-dev.json new file mode 100644 index 0000000..8e43165 --- /dev/null +++ b/packages/tauri-search/src/generated/sitemap-tauri-docs-dev.json @@ -0,0 +1 @@ +{"docs/architecture.md":{"sha":"dac826ea9a0565762880235053c096c4536f8f43","size":11447,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/architecture.md"},"docs/faq.md":{"sha":"d34a2b65679a4d74243b353b03f6302e8f0b6839","size":683,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/faq.md"},"docs/.templates/cli.md":{"sha":"c8a913a20f9960913ad02b3afb8ef58227b8a396","size":2713,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/.templates/cli.md"},"docs/.templates/config.md":{"sha":"3d9d2391ce2f9c0102e7d4101221672ae6b59bde","size":2936,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/.templates/config.md"},"docs/about/book.md":{"sha":"9c73ed072e0f10b2415b200969125038de792ad5","size":11030,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/about/book.md"},"docs/about/governance.md":{"sha":"5d32aef726d78b1128f7550c6eea6ead829869f4","size":2206,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/about/governance.md"},"docs/about/intro.md":{"sha":"b89325c05041835216a976b2a831b4feecae3ea2","size":3671,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/about/intro.md"},"docs/about/security.md":{"sha":"1a08b26e915e3b215c4a77a4d9ec7d3351c8865e","size":6411,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/about/security.md"},"docs/api/cli.md":{"sha":"3f0760841093d006bec72d92a24d3de31015abd1","size":4953,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/cli.md"},"docs/api/config.md":{"sha":"cb8b51bc37bada4a84bc8581ab67521988558f81","size":29055,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/config.md"},"docs/api/js/index.md":{"sha":"0dacd9bb8c778006468cc66461b644bb18ada29b","size":690,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/index.md"},"docs/api/js/classes/http.Body.md":{"sha":"d8948b192dec9b21e44af63933db6ab19293062b","size":2212,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/http.Body.md"},"docs/api/js/classes/http.Client.md":{"sha":"4365201d679a5850dff50f6145f1fcae84754a52","size":4252,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/http.Client.md"},"docs/api/js/classes/http.Response.md":{"sha":"266c488777e62f6c59b4fb0d2b2c6e79486098d9","size":1171,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/http.Response.md"},"docs/api/js/classes/shell.Child.md":{"sha":"07d0c1199602046af2313111c5a2f898660c7f03","size":1501,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/shell.Child.md"},"docs/api/js/classes/shell.Command.md":{"sha":"1e9319606bd704e5a1f32113a2fa23b1e30ab867","size":4331,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/shell.Command.md"},"docs/api/js/classes/window.LogicalPosition.md":{"sha":"35e32db42afb0120648450666bb3c02726152dd3","size":959,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/window.LogicalPosition.md"},"docs/api/js/classes/window.LogicalSize.md":{"sha":"3dc103e92586d62e76f87e082b90961c9a8f78b5","size":975,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/window.LogicalSize.md"},"docs/api/js/classes/window.PhysicalPosition.md":{"sha":"f89244a2de61c8cf79c15704b00d607a566b1776","size":1387,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/window.PhysicalPosition.md"},"docs/api/js/classes/window.PhysicalSize.md":{"sha":"1757816a07986bcbf1c835bf354a87c8f905818f","size":1383,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/window.PhysicalSize.md"},"docs/api/js/classes/window.WebviewWindow.md":{"sha":"1f599c1bd4dd7879dff47a5e55c023976bda8322","size":22922,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/window.WebviewWindow.md"},"docs/api/js/classes/window.WebviewWindowHandle.md":{"sha":"7bbc54dd10d471acbf5b7b2efc7e3be388ea9038","size":3478,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/window.WebviewWindowHandle.md"},"docs/api/js/classes/window.WindowManager.md":{"sha":"a54dee2197876037319a1da0b0203bdce50e9ee0","size":18028,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/classes/window.WindowManager.md"},"docs/api/js/enums/fs.BaseDirectory.md":{"sha":"d762a2515df956d0fdfaee4a9ab1a62bc5b19051","size":2938,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/enums/fs.BaseDirectory.md"},"docs/api/js/enums/http.ResponseType.md":{"sha":"435f6a27e58941eb63b25c29a66cda23c48f4e0a","size":603,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/enums/http.ResponseType.md"},"docs/api/js/enums/window.UserAttentionType.md":{"sha":"1a3a8f3485da92477ccdfe97718fd097648749a8","size":885,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/enums/window.UserAttentionType.md"},"docs/api/js/interfaces/cli.ArgMatch.md":{"sha":"996285cf8a651ded26c0855b973aa0c4da7d18ee","size":590,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/cli.ArgMatch.md"},"docs/api/js/interfaces/cli.CliMatches.md":{"sha":"08ba8e177e7d1f239bc5f2e844ff9e332ea69f10","size":571,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/cli.CliMatches.md"},"docs/api/js/interfaces/cli.SubcommandMatch.md":{"sha":"e91ffe1471b417e3a54548ea8a01682859312526","size":483,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/cli.SubcommandMatch.md"},"docs/api/js/interfaces/dialog.DialogFilter.md":{"sha":"93b5e97c17d5ed0eaa16ed5a12fc6ca783730bc4","size":640,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/dialog.DialogFilter.md"},"docs/api/js/interfaces/dialog.OpenDialogOptions.md":{"sha":"87242e054bf403cdb45acad41a0f626ba5a39c2c","size":1119,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/dialog.OpenDialogOptions.md"},"docs/api/js/interfaces/dialog.SaveDialogOptions.md":{"sha":"c3a55b8ab82dd873c211ecb67ae6b606e639ef49","size":866,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/dialog.SaveDialogOptions.md"},"docs/api/js/interfaces/event.Event.md":{"sha":"d84dcab6d6f488f1a7f4aa404492de66cf2ccedf","size":704,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/event.Event.md"},"docs/api/js/interfaces/fs.FileEntry.md":{"sha":"95a1511074357e5ead5fc3c1ebea730fef90714b","size":758,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/fs.FileEntry.md"},"docs/api/js/interfaces/fs.FsBinaryFileOption.md":{"sha":"8114005c906de368324f047d2ae65de1c1a4868e","size":466,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/fs.FsBinaryFileOption.md"},"docs/api/js/interfaces/fs.FsDirOptions.md":{"sha":"dd22ccf32e180d69569041cd79f09851605c2911","size":505,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/fs.FsDirOptions.md"},"docs/api/js/interfaces/fs.FsOptions.md":{"sha":"0a3bcfa0da692d5f18d2ee6c5672dc13cc05dbb2","size":329,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/fs.FsOptions.md"},"docs/api/js/interfaces/fs.FsTextFileOption.md":{"sha":"6bf797f56b283ec6a2c39b2af0ac3b15d0758e08","size":455,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/fs.FsTextFileOption.md"},"docs/api/js/interfaces/helpers_tauri.TauriCommand.md":{"sha":"949b072069c69a6f91d9cef9e37ff2dbea99bc05","size":472,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/helpers_tauri.TauriCommand.md"},"docs/api/js/interfaces/http.ClientOptions.md":{"sha":"f317cd6986ccafbc75f8e0e11b37b76afdd1c11f","size":496,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/http.ClientOptions.md"},"docs/api/js/interfaces/http.HttpOptions.md":{"sha":"a9577ddb4d05830fb3acaeb767b34ae9a78c3304","size":1464,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/http.HttpOptions.md"},"docs/api/js/interfaces/notification.Options.md":{"sha":"27cfc7c6ef5832e1e1530b9209c73be4e96d6269","size":801,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/notification.Options.md"},"docs/api/js/interfaces/shell.ChildProcess.md":{"sha":"2c0cb80c10bb5918ced42290649c769dc305c700","size":1042,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/shell.ChildProcess.md"},"docs/api/js/interfaces/shell.SpawnOptions.md":{"sha":"0e655f8a48aa8a404d441bf7fdc21fd0089b53e0","size":623,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/shell.SpawnOptions.md"},"docs/api/js/interfaces/tauri.InvokeArgs.md":{"sha":"2f252ee1a5418c6775d36bd864c614078e7ab1dc","size":207,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/tauri.InvokeArgs.md"},"docs/api/js/interfaces/updater.UpdateManifest.md":{"sha":"34eb645a125928f66eb3663ad4700fce45a2c924","size":642,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/updater.UpdateManifest.md"},"docs/api/js/interfaces/updater.UpdateResult.md":{"sha":"ca964b8c7607031ec6a86ee5f4bc4fa864977651","size":548,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/updater.UpdateResult.md"},"docs/api/js/interfaces/updater.UpdateStatusResult.md":{"sha":"b733d7fd565cfa343f9a76b73313daf880de7a11","size":554,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/updater.UpdateStatusResult.md"},"docs/api/js/interfaces/window.Monitor.md":{"sha":"de20bcd19faec168d81c3599db1679f779ef9891","size":1173,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/window.Monitor.md"},"docs/api/js/interfaces/window.WindowOptions.md":{"sha":"f4dea195f6a9958c378a426d45f06a4112ebf034","size":4796,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/interfaces/window.WindowOptions.md"},"docs/api/js/modules/app.md":{"sha":"ef0d454d2e45aeb20e52266c879593e36447f854","size":1059,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/app.md"},"docs/api/js/modules/cli.md":{"sha":"bf9d4b5491f32b8162fe955b8d14a066c3c0c140","size":875,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/cli.md"},"docs/api/js/modules/clipboard.md":{"sha":"f816889e79fc78e1972b1640836ea6bb0cbd5643","size":992,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/clipboard.md"},"docs/api/js/modules/dialog.md":{"sha":"23ed3f0dd0161df3e988f04cfb38219ec28ea211","size":1707,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/dialog.md"},"docs/api/js/modules/event.md":{"sha":"2b929b25a8b19a6f55fe01168dd03aa0a2cfeff7","size":3372,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/event.md"},"docs/api/js/modules/fs.md":{"sha":"a6befbfe7988e018b79a6158a7d68e30a49738ce","size":7054,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/fs.md"},"docs/api/js/modules/globalShortcut.md":{"sha":"9ba0c0a6048709d63a3db62a3beda4a9d462e3b1","size":3454,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/globalShortcut.md"},"docs/api/js/modules/helpers_event.md":{"sha":"f730982cf2994c07a6caa676b01a784d23994bf7","size":544,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/helpers_event.md"},"docs/api/js/modules/helpers_os_check.md":{"sha":"77debd0f0792d9c838be16f59028d93f2d291712","size":505,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/helpers_os_check.md"},"docs/api/js/modules/helpers_tauri.md":{"sha":"6b86cec23a930af08d5751284ba378c4b0d3947a","size":1013,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/helpers_tauri.md"},"docs/api/js/modules/http.md":{"sha":"0916b23279b0216435de51a462ed2bebcbfff05f","size":3048,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/http.md"},"docs/api/js/modules/index.md":{"sha":"1cc7afb1bf088e0da9e8510a3df114d407c1fe2b","size":797,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/index.md"},"docs/api/js/modules/notification.md":{"sha":"401fe355a270ee56b665929009edecc7651e52a6","size":2147,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/notification.md"},"docs/api/js/modules/os.md":{"sha":"feed00e7323cf2d85dd6301eef8435e4fd0cfe03","size":2420,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/os.md"},"docs/api/js/modules/path.md":{"sha":"2905e2515452114826f1dec9031f214b0d31d8ce","size":11359,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/path.md"},"docs/api/js/modules/process.md":{"sha":"5a1db4115639a72862d23c52dc8880846d150d92","size":883,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/process.md"},"docs/api/js/modules/shell.md":{"sha":"8735e7419e11ba7fb95f5c1267231e94cad24cab","size":1158,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/shell.md"},"docs/api/js/modules/tauri.md":{"sha":"0e30c039ee2ab414632faba78af2c6c9e2b4ba65","size":2147,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/tauri.md"},"docs/api/js/modules/updater.md":{"sha":"3913704b0a9d42009be04ced96a6ccefa8950fad","size":1384,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/updater.md"},"docs/api/js/modules/window.md":{"sha":"1b877737d2249efaa1b4fa777a5177953b6e80b4","size":4892,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/js/modules/window.md"},"docs/api/rust/tauri/attr.command.md":{"sha":"3bcb72c5adc98eea5ec3027e92ff38a46752efa2","size":442,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/attr.command.md"},"docs/api/rust/tauri/enum.Error.md":{"sha":"408ee3d18c9d9f4fca9ba5cab0638731b005f6f0","size":17492,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/enum.Error.md"},"docs/api/rust/tauri/enum.Event.md":{"sha":"1a454ecc1e7cc10f79b9388e19291f348817e32f","size":9941,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/enum.Event.md"},"docs/api/rust/tauri/enum.Icon.md":{"sha":"a349389de8842fc21d070398dcbb469e4090c213","size":11045,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/enum.Icon.md"},"docs/api/rust/tauri/enum.InvokeResponse.md":{"sha":"54cf7c64d72369445e08d5d530e53e739907f9d0","size":10902,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/enum.InvokeResponse.md"},"docs/api/rust/tauri/enum.MenuItem.md":{"sha":"d63e4225f5c5b1751851638295c6fd40d58a1baa","size":14345,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/enum.MenuItem.md"},"docs/api/rust/tauri/enum.Position.md":{"sha":"191f7d2552d7faca94577573ff251198761f40a7","size":15653,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/enum.Position.md"},"docs/api/rust/tauri/enum.Size.md":{"sha":"ac22f101c773f277881757ab6f21853693001fbd","size":15405,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/enum.Size.md"},"docs/api/rust/tauri/enum.UserAttentionType.md":{"sha":"8b1d4229cc1ad13ea5836b36c53c6a7f5228d488","size":15318,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/enum.UserAttentionType.md"},"docs/api/rust/tauri/enum.WindowEvent.md":{"sha":"e9f8c99060dc9ecdd3c4cde9d62bff08688d7a33","size":11836,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/enum.WindowEvent.md"},"docs/api/rust/tauri/enum.WindowUrl.md":{"sha":"7196aaeaf97a27e51c33bec6dc6bbcf67390035e","size":16592,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/enum.WindowUrl.md"},"docs/api/rust/tauri/index.md":{"sha":"034b90a780564b275d358638a49cb8ec92e55738","size":17320,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/index.md"},"docs/api/rust/tauri/macro.generate_context.md":{"sha":"efa01d3b994b8e6f601fdfbc8af393160b6f9d47","size":1242,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/macro.generate_context.md"},"docs/api/rust/tauri/macro.generate_handler.md":{"sha":"f157dc2bc85a80d3c1b93181f8772f32c993d9a6","size":825,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/macro.generate_handler.md"},"docs/api/rust/tauri/macro.tauri_build_context.md":{"sha":"229c756027d0a249f31489b665f149270095bf4c","size":744,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/macro.tauri_build_context.md"},"docs/api/rust/tauri/struct.App.md":{"sha":"8e83116d1d860bfced9e59742dd1c13a766795a3","size":22308,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.App.md"},"docs/api/rust/tauri/struct.AppHandle.md":{"sha":"1496221aca442a63e4cd272949c2eb1b2ab5d709","size":27470,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.AppHandle.md"},"docs/api/rust/tauri/struct.Builder.md":{"sha":"5ca7d00e753a41872796b6780d58a694cd0dfcda","size":20450,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.Builder.md"},"docs/api/rust/tauri/struct.CloseRequestApi.md":{"sha":"be812323ce69b651d6e59908c85296de7d6ed141","size":8633,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.CloseRequestApi.md"},"docs/api/rust/tauri/struct.Config.md":{"sha":"11312ab86f76de2bde9dcff0155970a7e3bb3f29","size":14152,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.Config.md"},"docs/api/rust/tauri/struct.Context.md":{"sha":"d27370da4afdd5f50ef057af63407fdb4688879d","size":13780,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.Context.md"},"docs/api/rust/tauri/struct.CustomMenuItem.md":{"sha":"3c61eee3b71f181dc48a9bcb812f6cc44fa24d05","size":12796,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.CustomMenuItem.md"},"docs/api/rust/tauri/struct.GlobalWindowEvent.md":{"sha":"c614dcd22914253d20a1aa17d8fc299d1a5c285f","size":11913,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.GlobalWindowEvent.md"},"docs/api/rust/tauri/struct.Invoke.md":{"sha":"1f90fcfe8ca0aa4d977698aeb8d2daffb5f5453b","size":11006,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.Invoke.md"},"docs/api/rust/tauri/struct.InvokeError.md":{"sha":"864a077794c03a1a6bd714255b84c34ee82097db","size":10770,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.InvokeError.md"},"docs/api/rust/tauri/struct.InvokeMessage.md":{"sha":"ffd78126a320aef0e065d559301b39614326a44f","size":13110,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.InvokeMessage.md"},"docs/api/rust/tauri/struct.InvokeResolver.md":{"sha":"e8124bc4e15b584f6b531d8c09253ef94aba4a45","size":16568,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.InvokeResolver.md"},"docs/api/rust/tauri/struct.LogicalPosition.md":{"sha":"97dbd7bf3adf7e3c17ca0c3b01936a431b3a0876","size":20699,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.LogicalPosition.md"},"docs/api/rust/tauri/struct.LogicalSize.md":{"sha":"456924bab7c369b97cfbf44fdee7895023b62762","size":20380,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.LogicalSize.md"},"docs/api/rust/tauri/struct.Menu.md":{"sha":"752f1123744fcf0767f7c825e9f1c90d64c9af7c","size":12234,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.Menu.md"},"docs/api/rust/tauri/struct.MenuEvent.md":{"sha":"cfbd1ee9864a1f9bd20379c5472195aa7ca459ae","size":11085,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.MenuEvent.md"},"docs/api/rust/tauri/struct.PackageInfo.md":{"sha":"354b414810f460a5e5c8f381a09037d9fa299fc3","size":11005,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.PackageInfo.md"},"docs/api/rust/tauri/struct.PageLoadPayload.md":{"sha":"a4aec6387880bd6f802f167896f46a81292174a1","size":13728,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.PageLoadPayload.md"},"docs/api/rust/tauri/struct.PathResolver.md":{"sha":"a8c12902246472331fe6138d4f3f3a23b39844c4","size":11784,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.PathResolver.md"},"docs/api/rust/tauri/struct.PhysicalPosition.md":{"sha":"f754bfd01a16230fcc6e79365e32d9d36447b752","size":21416,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.PhysicalPosition.md"},"docs/api/rust/tauri/struct.PhysicalSize.md":{"sha":"360919c9794c8014f6e17fd157e45ac552522e28","size":21060,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.PhysicalSize.md"},"docs/api/rust/tauri/struct.RunIteration.md":{"sha":"1e682157792e7fd5cca3de39ce35fe7d805ebe78","size":11110,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.RunIteration.md"},"docs/api/rust/tauri/struct.State.md":{"sha":"27663891ac46ef06a1bee9b260375c4631633be6","size":13349,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.State.md"},"docs/api/rust/tauri/struct.StateManager.md":{"sha":"87fd28438b48427c25679190794ed5e531a5076c","size":9421,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.StateManager.md"},"docs/api/rust/tauri/struct.Submenu.md":{"sha":"77d0fb725f8666ca4cab7615fba3573252022e33","size":11363,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.Submenu.md"},"docs/api/rust/tauri/struct.WebviewAttributes.md":{"sha":"65a06d70faa67e936529b15846163c7c0eec1387","size":9981,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.WebviewAttributes.md"},"docs/api/rust/tauri/struct.WindowMenuEvent.md":{"sha":"174255225ab9543a61f09cb927afac0b0badb406","size":11800,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.WindowMenuEvent.md"},"docs/api/rust/tauri/struct.Wry.md":{"sha":"f63433ecf2d504a7d9c6894adb9b2beb6130f931","size":10089,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/struct.Wry.md"},"docs/api/rust/tauri/trait.Assets.md":{"sha":"bec9ed8d0b87fbad0bda3379b377566f95c2cb81","size":1506,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/trait.Assets.md"},"docs/api/rust/tauri/trait.ClipboardManager.md":{"sha":"5bae386789dbd5134abdd051e6808f1910dedbf5","size":3329,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/trait.ClipboardManager.md"},"docs/api/rust/tauri/trait.GlobalShortcutManager.md":{"sha":"ef7cd3ba4e332450d872c16fb41b4010356d0f3c","size":5812,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/trait.GlobalShortcutManager.md"},"docs/api/rust/tauri/trait.Manager.md":{"sha":"eaa9e1f0ee7c06ae40a9ad90f84ffe49bd9f12e1","size":9142,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/trait.Manager.md"},"docs/api/rust/tauri/trait.Pixel.md":{"sha":"0f54a4354fd08f24663d3f946d04d472ce8ffd08","size":3583,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/trait.Pixel.md"},"docs/api/rust/tauri/trait.Runtime.md":{"sha":"64f18887b0412846e3d336dda3c96df3d26b5473","size":6027,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/trait.Runtime.md"},"docs/api/rust/tauri/trait.WindowBuilder.md":{"sha":"27927348958fd465f63f984631b5e65d9021ddac","size":10443,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/trait.WindowBuilder.md"},"docs/api/rust/tauri/type.InvokeHandler.md":{"sha":"793abc9d794b3c2cd3655d406d84b1ce9fefc1de","size":330,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/type.InvokeHandler.md"},"docs/api/rust/tauri/type.OnPageLoad.md":{"sha":"35b55c012ce4c7d56589020bda7468ec438323f7","size":316,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/type.OnPageLoad.md"},"docs/api/rust/tauri/type.Result.md":{"sha":"51acd17dd18aa9f5ec0341d31400071df2ebe8e0","size":216,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/type.Result.md"},"docs/api/rust/tauri/type.SetupHook.md":{"sha":"f6229dee0c5bd2c56dfd8375a02ac942ae5a91ba","size":316,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/type.SetupHook.md"},"docs/api/rust/tauri/type.SyncTask.md":{"sha":"3066ba431e67c11c68cd8b63ff64daaee65a56f5","size":235,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/type.SyncTask.md"},"docs/api/rust/tauri/api/enum.Error.md":{"sha":"5abd45346fce19b0100bd06da2977798707c629b","size":21775,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/enum.Error.md"},"docs/api/rust/tauri/api/type.Result.md":{"sha":"a3fce689d6f55561adbe4582b9d6e5f54a23818d","size":235,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/type.Result.md"},"docs/api/rust/tauri/api/dialog/fn.ask.md":{"sha":"db7bb62fc4119f1a243fe1855252764bad01d88e","size":441,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/dialog/fn.ask.md"},"docs/api/rust/tauri/api/dialog/fn.message.md":{"sha":"a6d5e8f1559ffe127ec3ffa538c732bdda43e03e","size":339,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/dialog/fn.message.md"},"docs/api/rust/tauri/api/dir/fn.is_dir.md":{"sha":"589ffe682189ef647e3ca194d809522adaf30ca9","size":259,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/dir/fn.is_dir.md"},"docs/api/rust/tauri/api/dir/fn.read_dir.md":{"sha":"aaedfc722c85191bda6a2326a0cdb107474f01e6","size":325,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/dir/fn.read_dir.md"},"docs/api/rust/tauri/api/dir/fn.with_temp_dir.md":{"sha":"dc103d0133aecc90165e908df57c8491c1a841a5","size":305,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/dir/fn.with_temp_dir.md"},"docs/api/rust/tauri/api/dir/struct.DiskEntry.md":{"sha":"33509de499950d5fa483b496a9080e8a5e030113","size":10177,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/dir/struct.DiskEntry.md"},"docs/api/rust/tauri/api/file/enum.ArchiveFormat.md":{"sha":"84d55b6e08e40006fc48f77779ef1afcfa55b760","size":13210,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/file/enum.ArchiveFormat.md"},"docs/api/rust/tauri/api/file/enum.Compression.md":{"sha":"e3e4113a0c2d41e7e7da8e3d65924114bbb2d21b","size":12988,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/file/enum.Compression.md"},"docs/api/rust/tauri/api/file/fn.read_binary.md":{"sha":"92625811e59a353eb6114fb425a78b0202e63140","size":264,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/file/fn.read_binary.md"},"docs/api/rust/tauri/api/file/fn.read_string.md":{"sha":"5bb99ebc0bd88961d8cdd0577bf40ff0d2d88011","size":263,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/file/fn.read_string.md"},"docs/api/rust/tauri/api/file/struct.Extract.md":{"sha":"56484b92931fff005e6433f3a7e3447bdea56ebf","size":10913,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/file/struct.Extract.md"},"docs/api/rust/tauri/api/file/struct.Move.md":{"sha":"695842d81cb3c2984f164562a3953bb0d7f202d1","size":10910,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/file/struct.Move.md"},"docs/api/rust/tauri/api/http/enum.Body.md":{"sha":"3a71f1be23ff2f0f62b3114f53a7484ff2273365","size":11171,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/http/enum.Body.md"},"docs/api/rust/tauri/api/http/enum.FormPart.md":{"sha":"3bccece24de89a07c5a8ab181865beb2a1a1fa20","size":11262,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/http/enum.FormPart.md"},"docs/api/rust/tauri/api/http/enum.ResponseType.md":{"sha":"539e638a427cc049fa4ef193f9bc9756d0aa8296","size":14928,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/http/enum.ResponseType.md"},"docs/api/rust/tauri/api/http/struct.Client.md":{"sha":"74a9c71ce7798822ade7ccf19ef1bb50a305ed2c","size":11502,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/http/struct.Client.md"},"docs/api/rust/tauri/api/http/struct.ClientBuilder.md":{"sha":"9234aa9d111ea4c64f4614266caea29e61911634","size":15859,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/http/struct.ClientBuilder.md"},"docs/api/rust/tauri/api/http/struct.FormBody.md":{"sha":"2d6d0e450ef9dddd94e40b83dd5e4469f564c6f3","size":11518,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/http/struct.FormBody.md"},"docs/api/rust/tauri/api/http/struct.HttpRequestBuilder.md":{"sha":"ac3f92e734a8762d7e65e8cba3abcef60db34d6b","size":15197,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/http/struct.HttpRequestBuilder.md"},"docs/api/rust/tauri/api/http/struct.RawResponse.md":{"sha":"794c25fab81cb0872e6d1a825470acc0cf2849da","size":8737,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/http/struct.RawResponse.md"},"docs/api/rust/tauri/api/http/struct.Response.md":{"sha":"4200133f8dbe9a019aa13c1d32ddab3eb7342fda","size":9180,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/http/struct.Response.md"},"docs/api/rust/tauri/api/http/struct.ResponseData.md":{"sha":"9841b4532763671ca1e0e84839c8c5923e0a6f10","size":10099,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/http/struct.ResponseData.md"},"docs/api/rust/tauri/api/path/enum.BaseDirectory.md":{"sha":"c0cf08244b0ef6f67c2035ab3ce99ed2170f68cb","size":16118,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/enum.BaseDirectory.md"},"docs/api/rust/tauri/api/path/fn.app_dir.md":{"sha":"ff4617c2b07843f4b6ba868a8083dfe09e19d614","size":289,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.app_dir.md"},"docs/api/rust/tauri/api/path/fn.audio_dir.md":{"sha":"00708f60f62d49d39c3a48bb8ef312b2f27f6caa","size":261,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.audio_dir.md"},"docs/api/rust/tauri/api/path/fn.cache_dir.md":{"sha":"c096816bdbb5257a4f483ee9c1728b755be13ff1","size":261,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.cache_dir.md"},"docs/api/rust/tauri/api/path/fn.config_dir.md":{"sha":"dca12d464f74425e06818298238a307a52f314c9","size":266,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.config_dir.md"},"docs/api/rust/tauri/api/path/fn.data_dir.md":{"sha":"6c1002ba899779642b4cb625414ef0457201e6ee","size":256,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.data_dir.md"},"docs/api/rust/tauri/api/path/fn.desktop_dir.md":{"sha":"ae5b59bbbcb44347277da0e53d5a6f8ecc933fb5","size":271,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.desktop_dir.md"},"docs/api/rust/tauri/api/path/fn.document_dir.md":{"sha":"694dc2b1b025d03bc5fdcc55e65190684f4abe93","size":276,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.document_dir.md"},"docs/api/rust/tauri/api/path/fn.download_dir.md":{"sha":"c8593045cccfc715054db50852df0feb6c8f59bb","size":276,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.download_dir.md"},"docs/api/rust/tauri/api/path/fn.executable_dir.md":{"sha":"5ba86c971173d45ed01b29cb4eed62179488b3ba","size":286,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.executable_dir.md"},"docs/api/rust/tauri/api/path/fn.font_dir.md":{"sha":"7932e7edc99751227b65a701599c421d9de5f69b","size":256,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.font_dir.md"},"docs/api/rust/tauri/api/path/fn.home_dir.md":{"sha":"2c485e9aa06612afee586d610ef322faa82dafe3","size":256,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.home_dir.md"},"docs/api/rust/tauri/api/path/fn.local_data_dir.md":{"sha":"2ffd8549686944f48225c634d49ea634c2794b2e","size":286,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.local_data_dir.md"},"docs/api/rust/tauri/api/path/fn.picture_dir.md":{"sha":"09ab5a7583438aedf2adb9aae8dea4cdeb2ab3fb","size":271,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.picture_dir.md"},"docs/api/rust/tauri/api/path/fn.public_dir.md":{"sha":"9c0a981f8398bfee1347c7a3dc89cea7efeaf01a","size":266,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.public_dir.md"},"docs/api/rust/tauri/api/path/fn.resolve_path.md":{"sha":"b3f957ce1d7c70b109335e9de90f1191ebba979d","size":956,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.resolve_path.md"},"docs/api/rust/tauri/api/path/fn.resource_dir.md":{"sha":"bb3d5c36c2f7f3a9c70f121b24ea75fec3b21a82","size":305,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.resource_dir.md"},"docs/api/rust/tauri/api/path/fn.runtime_dir.md":{"sha":"83ae77072c4eefd388de6ac2daf7e697b4612b6f","size":271,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.runtime_dir.md"},"docs/api/rust/tauri/api/path/fn.template_dir.md":{"sha":"a189c0105d200788871d62cc7ee8ad1076a1a82c","size":276,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.template_dir.md"},"docs/api/rust/tauri/api/path/fn.video_dir.md":{"sha":"7d3d8ae20cae90aec1668063403df3e9c1449b4c","size":254,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/path/fn.video_dir.md"},"docs/api/rust/tauri/api/process/fn.current_binary.md":{"sha":"4f7f9bab50e2f8641f76b4b6d960728ec56e1282","size":262,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/process/fn.current_binary.md"},"docs/api/rust/tauri/api/process/fn.restart.md":{"sha":"5684b802e2a23cc007a08552bf7b46f564800431","size":212,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/process/fn.restart.md"},"docs/api/rust/tauri/api/rpc/fn.format_callback.md":{"sha":"4b0d8cce6689fdcb2e36f4a7f83b721288c89441","size":1552,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/rpc/fn.format_callback.md"},"docs/api/rust/tauri/api/rpc/fn.format_callback_result.md":{"sha":"3a55f60f5f59f1ad36702e703dd485142fd437d7","size":1512,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/rpc/fn.format_callback_result.md"},"docs/api/rust/tauri/api/version/fn.compare.md":{"sha":"4e2891e92d4b8e552bdc4a7c3a3a96ab4bc57a0d","size":258,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/version/fn.compare.md"},"docs/api/rust/tauri/api/version/fn.is_compatible.md":{"sha":"e21df43bfa83fec50c2fac9429ed8589e3e433e2","size":323,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/version/fn.is_compatible.md"},"docs/api/rust/tauri/api/version/fn.is_greater.md":{"sha":"77d2c1803a8715f4d1ca4d5810b7616b7ffa9dc9","size":291,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/version/fn.is_greater.md"},"docs/api/rust/tauri/api/version/fn.is_major.md":{"sha":"cc14aa98f98d937d0c0e1fa7d2ff46ea56205ee9","size":310,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/version/fn.is_major.md"},"docs/api/rust/tauri/api/version/fn.is_minor.md":{"sha":"a4610439ca520e827a98e858624e2ff575a9f535","size":310,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/version/fn.is_minor.md"},"docs/api/rust/tauri/api/version/fn.is_patch.md":{"sha":"437f85c2b42a1aad61840ebc85fffdd5c8322b2a","size":310,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/api/version/fn.is_patch.md"},"docs/api/rust/tauri/async_runtime/fn.block_on.md":{"sha":"9699fb53c72110548c3e775ae5caa3fe7ebaca56","size":268,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/fn.block_on.md"},"docs/api/rust/tauri/async_runtime/fn.channel.md":{"sha":"51c048813be7476197a4002bdf45ec80d95c7b57","size":1441,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/fn.channel.md"},"docs/api/rust/tauri/async_runtime/fn.handle.md":{"sha":"e445d7a3e8d5b188d5935aa0640aa150fb1d5164","size":249,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/fn.handle.md"},"docs/api/rust/tauri/async_runtime/fn.spawn.md":{"sha":"5194ed7785cc4a578613523ae9bfcf5db2a814a3","size":430,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/fn.spawn.md"},"docs/api/rust/tauri/async_runtime/struct.Handle.md":{"sha":"c3d03e8ca74a0d2205c92f9a5bd17f5df63725c3","size":20675,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/struct.Handle.md"},"docs/api/rust/tauri/async_runtime/struct.JoinHandle.md":{"sha":"23a88dfdaaeab087f766525683aa6d8fdc31aa13","size":35088,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/struct.JoinHandle.md"},"docs/api/rust/tauri/async_runtime/struct.Mutex.md":{"sha":"6d3793d0a56d055a7ef7d2d148ff024dc7affce4","size":20189,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/struct.Mutex.md"},"docs/api/rust/tauri/async_runtime/struct.Receiver.md":{"sha":"92f220f57a5210aa505b56e4c291f83aad6e8a88","size":14833,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/struct.Receiver.md"},"docs/api/rust/tauri/async_runtime/struct.RwLock.md":{"sha":"4e3180c621a5550f05bb82e8414dc4bfa962e45b","size":26461,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/struct.RwLock.md"},"docs/api/rust/tauri/async_runtime/struct.Sender.md":{"sha":"3e3471b5b3187e0d686812d75ee0bbde69227963","size":29822,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/struct.Sender.md"},"docs/api/rust/tauri/async_runtime/struct.TokioJoinHandle.md":{"sha":"6aac9d6700d26212bc0def8a2a323362c5432e78","size":39807,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/struct.TokioJoinHandle.md"},"docs/api/rust/tauri/async_runtime/trait.RuntimeHandle.md":{"sha":"1095dca55cd1d2891245ef63b16d386d8fedb918","size":4348,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/async_runtime/trait.RuntimeHandle.md"},"docs/api/rust/tauri/command/struct.CommandItem.md":{"sha":"0c2c0199ac01caea298a300a2e896f0b6f5a7f38","size":39599,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/command/struct.CommandItem.md"},"docs/api/rust/tauri/command/trait.CommandArg.md":{"sha":"2030134148fa811888e2c6db8f3363056b1411da","size":6486,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/command/trait.CommandArg.md"},"docs/api/rust/tauri/http/enum.MimeType.md":{"sha":"99910894c7370284732375b32c943115407afc96","size":10298,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/enum.MimeType.md"},"docs/api/rust/tauri/http/struct.HttpRange.md":{"sha":"f4bd8167b0d7beae9c49ed6fe1db3792120e5281","size":12430,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/struct.HttpRange.md"},"docs/api/rust/tauri/http/struct.InvalidUri.md":{"sha":"c3725a57514cd03c32e143572071942b0dc9b568","size":13326,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/struct.InvalidUri.md"},"docs/api/rust/tauri/http/struct.Request.md":{"sha":"ffb47a6b3931f4df6d9956d2414b93dfdf546dec","size":11341,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/struct.Request.md"},"docs/api/rust/tauri/http/struct.RequestParts.md":{"sha":"7f9406994b0c24eb16bc85e2a222c8d55e1b5bcb","size":11386,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/struct.RequestParts.md"},"docs/api/rust/tauri/http/struct.Response.md":{"sha":"b34bbc0cb7ef30699d2507bc273b9fc80b2ac9f6","size":11264,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/struct.Response.md"},"docs/api/rust/tauri/http/struct.ResponseBuilder.md":{"sha":"7a5d5bcffb4a9fed5b80989c0e6567e358e2b505","size":14385,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/struct.ResponseBuilder.md"},"docs/api/rust/tauri/http/struct.ResponseParts.md":{"sha":"ca888dda5310c4f6e776d8e6226d06ab8f631b16","size":11047,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/struct.ResponseParts.md"},"docs/api/rust/tauri/http/struct.Uri.md":{"sha":"5a79893af0ef5fa6e1e9762571b9bb170709be32","size":43404,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/struct.Uri.md"},"docs/api/rust/tauri/http/header/constant.ACCEPT.md":{"sha":"993beedb9cc3664389d58fc6e93782b30ca9111c","size":779,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCEPT.md"},"docs/api/rust/tauri/http/header/constant.ACCEPT_CHARSET.md":{"sha":"e95f3eb8547dd147f56dd4095148c78f8226f1ef","size":990,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCEPT_CHARSET.md"},"docs/api/rust/tauri/http/header/constant.ACCEPT_ENCODING.md":{"sha":"d8c6befca9f9b1a54ffe9d3ef117fe1c33b4d949","size":1447,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCEPT_ENCODING.md"},"docs/api/rust/tauri/http/header/constant.ACCEPT_LANGUAGE.md":{"sha":"1ec0bae68583f3463fefbf4c7fe52f512c031a13","size":1548,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCEPT_LANGUAGE.md"},"docs/api/rust/tauri/http/header/constant.ACCEPT_RANGES.md":{"sha":"b5ee84b017926bba09c91d7ed965cfca02c902b7","size":647,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCEPT_RANGES.md"},"docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.md":{"sha":"76af168067eb3d1bef179a1d917c28cdaf434345","size":1438,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_ALLOW_CREDENTIALS.md"},"docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.md":{"sha":"aa5ac5e260b43053069a12eb4db44dd8774b9add","size":948,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_ALLOW_HEADERS.md"},"docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.md":{"sha":"271ab13a1a343e52bd5bed1ea8e2f3c847d59646","size":522,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_ALLOW_METHODS.md"},"docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.md":{"sha":"8799eb77885998ea84a4a171a6ba60161fd247ce","size":384,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.md"},"docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.md":{"sha":"24c851caa7b1bd2700dd01975e18017dbb92a33e","size":396,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_EXPOSE_HEADERS.md"},"docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_MAX_AGE.md":{"sha":"c95b99033fc5b063d98418aab0b1b8965bb33623","size":350,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_MAX_AGE.md"},"docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.md":{"sha":"cb10fc1f8456be94f0bd0d057f2da3c207086efa","size":396,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_REQUEST_HEADERS.md"},"docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.md":{"sha":"fd5c45d0a4ac64378ae8f4e14c1156962b210483","size":397,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ACCESS_CONTROL_REQUEST_METHOD.md"},"docs/api/rust/tauri/http/header/constant.AGE.md":{"sha":"1753664af16df95a9e1f9c10f38d8207fce7d380","size":530,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.AGE.md"},"docs/api/rust/tauri/http/header/constant.ALLOW.md":{"sha":"bead8e610a12b6e82da2fe0c8b3ad9fadfe29df6","size":541,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ALLOW.md"},"docs/api/rust/tauri/http/header/constant.ALT_SVC.md":{"sha":"96133551b6a29987eaa7b15ab4fc1c779154f765","size":283,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ALT_SVC.md"},"docs/api/rust/tauri/http/header/constant.AUTHORIZATION.md":{"sha":"c3f599fb560f1c11cc6f6c41cfb3da3102af07d3","size":442,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.AUTHORIZATION.md"},"docs/api/rust/tauri/http/header/constant.CACHE_CONTROL.md":{"sha":"d5c315b624152726e9226b1ba2c260ad2c0b80db","size":477,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CACHE_CONTROL.md"},"docs/api/rust/tauri/http/header/constant.CONNECTION.md":{"sha":"e674441cd04b52838c38284c09f199416dd3941d","size":909,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CONNECTION.md"},"docs/api/rust/tauri/http/header/constant.CONTENT_DISPOSITION.md":{"sha":"5cd89f813efd10654efb28c043c5d0510bcb42f3","size":1214,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CONTENT_DISPOSITION.md"},"docs/api/rust/tauri/http/header/constant.CONTENT_ENCODING.md":{"sha":"eba4a1d482b25086382e8ce74b9034fe739d768b","size":774,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CONTENT_ENCODING.md"},"docs/api/rust/tauri/http/header/constant.CONTENT_LANGUAGE.md":{"sha":"a63a511615fdb7b5122bad7e65614b9e63b8f73f","size":950,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CONTENT_LANGUAGE.md"},"docs/api/rust/tauri/http/header/constant.CONTENT_LENGTH.md":{"sha":"8e3d69801419c4085abe5aa3f0f82b06315d8fe6","size":379,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CONTENT_LENGTH.md"},"docs/api/rust/tauri/http/header/constant.CONTENT_LOCATION.md":{"sha":"02cdcfd8695fc899014c375df896c3f4fafa7a6f","size":802,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CONTENT_LOCATION.md"},"docs/api/rust/tauri/http/header/constant.CONTENT_RANGE.md":{"sha":"a6f71aacf8e84b2252e14478f6815328123d4764","size":311,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CONTENT_RANGE.md"},"docs/api/rust/tauri/http/header/constant.CONTENT_SECURITY_POLICY.md":{"sha":"d0da4405f67bd8f3d891bc30eac12b52be198783","size":523,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CONTENT_SECURITY_POLICY.md"},"docs/api/rust/tauri/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.md":{"sha":"d224a6961ea9ced359484b05782b50e63836dcb3","size":660,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CONTENT_SECURITY_POLICY_REPORT_ONLY.md"},"docs/api/rust/tauri/http/header/constant.CONTENT_TYPE.md":{"sha":"b921db0f43ad386a0dd608d42d17d364afa86434","size":690,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.CONTENT_TYPE.md"},"docs/api/rust/tauri/http/header/constant.COOKIE.md":{"sha":"1e18cfa4436838fc263d682f9058f2d500bb67ad","size":424,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.COOKIE.md"},"docs/api/rust/tauri/http/header/constant.DATE.md":{"sha":"cdf3f1706af18c58bf695cdc42a0c6ec6588ebbd","size":273,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.DATE.md"},"docs/api/rust/tauri/http/header/constant.DNT.md":{"sha":"d032f5125fa90b0a1d5f8ebee57e25825067cb4c","size":352,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.DNT.md"},"docs/api/rust/tauri/http/header/constant.ETAG.md":{"sha":"cecc83b06f4a00a68a15a5757f5ece28b0de9764","size":946,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ETAG.md"},"docs/api/rust/tauri/http/header/constant.EXPECT.md":{"sha":"7f99b06abc92cb711fe36a3400f2a86576c00c57","size":813,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.EXPECT.md"},"docs/api/rust/tauri/http/header/constant.EXPIRES.md":{"sha":"f0c1951dbfacf2c8cd3ed234f6f2c91e5dbcf4d9","size":536,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.EXPIRES.md"},"docs/api/rust/tauri/http/header/constant.FORWARDED.md":{"sha":"ce26e42a8401181f726321881209b85d0056beba","size":772,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.FORWARDED.md"},"docs/api/rust/tauri/http/header/constant.FROM.md":{"sha":"ffb227e9c98d7fd36e3dc43110a0dff0b66294f1","size":520,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.FROM.md"},"docs/api/rust/tauri/http/header/constant.HOST.md":{"sha":"8c4f673e79693a3da9785763d819d078b336a85f","size":633,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.HOST.md"},"docs/api/rust/tauri/http/header/constant.IF_MATCH.md":{"sha":"50f4e2a0d052324c8652409e3efc70577e6ca32b","size":1329,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.IF_MATCH.md"},"docs/api/rust/tauri/http/header/constant.IF_MODIFIED_SINCE.md":{"sha":"957aafa4a8e7ec37ffd519f6a3ba9c70317ff3c8","size":957,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.IF_MODIFIED_SINCE.md"},"docs/api/rust/tauri/http/header/constant.IF_NONE_MATCH.md":{"sha":"cba7475f6fcf03d8cd1308cd5010af1b46c52af3","size":1927,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.IF_NONE_MATCH.md"},"docs/api/rust/tauri/http/header/constant.IF_RANGE.md":{"sha":"b0533e0dda505026b63a02fdcf3142b1cd6696f0","size":827,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.IF_RANGE.md"},"docs/api/rust/tauri/http/header/constant.IF_UNMODIFIED_SINCE.md":{"sha":"f3bfaa975cf1b2a22b8fa3ae95211439c23bf3f9","size":1124,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.IF_UNMODIFIED_SINCE.md"},"docs/api/rust/tauri/http/header/constant.LAST_MODIFIED.md":{"sha":"851d17e123333ee3adb9b9cfff8cceb80da7c4cf","size":297,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.LAST_MODIFIED.md"},"docs/api/rust/tauri/http/header/constant.LINK.md":{"sha":"87aaab0cdf2b0564ebe27f7d0b10848d6e230d88","size":327,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.LINK.md"},"docs/api/rust/tauri/http/header/constant.LOCATION.md":{"sha":"cba7d01956639d207e5f11c7173ccbd95bfb555b","size":1519,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.LOCATION.md"},"docs/api/rust/tauri/http/header/constant.MAX_FORWARDS.md":{"sha":"d6db7b723d6098a3c054b3c1ba6b3cabe27038a4","size":320,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.MAX_FORWARDS.md"},"docs/api/rust/tauri/http/header/constant.ORIGIN.md":{"sha":"41e9766f192ae8e6cae97bff2a912ed42c6fb4b0","size":490,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.ORIGIN.md"},"docs/api/rust/tauri/http/header/constant.PRAGMA.md":{"sha":"4922c5c1bfe96f97ab76870af2e756060dfdf789","size":532,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.PRAGMA.md"},"docs/api/rust/tauri/http/header/constant.PROXY_AUTHENTICATE.md":{"sha":"33ecff8e647617878a50a150b64bafb706b58d8d","size":1101,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.PROXY_AUTHENTICATE.md"},"docs/api/rust/tauri/http/header/constant.PROXY_AUTHORIZATION.md":{"sha":"6b3663194f8aa466785b3fb785f08d032443a578","size":489,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.PROXY_AUTHORIZATION.md"},"docs/api/rust/tauri/http/header/constant.PUBLIC_KEY_PINS.md":{"sha":"05570fbe954e24e8675bee511044032bd872e6f9","size":546,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.PUBLIC_KEY_PINS.md"},"docs/api/rust/tauri/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.md":{"sha":"0f48010ce6b9ae0be7dbaa776905807452bdd2d6","size":493,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.PUBLIC_KEY_PINS_REPORT_ONLY.md"},"docs/api/rust/tauri/http/header/constant.RANGE.md":{"sha":"c5fe5de028eefdd0a8bd170195b1c31138013da1","size":671,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.RANGE.md"},"docs/api/rust/tauri/http/header/constant.REFERER.md":{"sha":"91f6f7750e963d040f039670482e041b3489d2b9","size":495,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.REFERER.md"},"docs/api/rust/tauri/http/header/constant.REFERRER_POLICY.md":{"sha":"b6f97a8d502e35f103851a3b95046af6da3ea9bd","size":327,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.REFERRER_POLICY.md"},"docs/api/rust/tauri/http/header/constant.REFRESH.md":{"sha":"b861f434feeb8d7fa03e73814634d75d9fd6396f","size":297,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.REFRESH.md"},"docs/api/rust/tauri/http/header/constant.RETRY_AFTER.md":{"sha":"37bcf1f14ff4e38c97fed148cb3494d09087ca1a","size":703,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.RETRY_AFTER.md"},"docs/api/rust/tauri/http/header/constant.SEC_WEBSOCKET_ACCEPT.md":{"sha":"2774a2f3a70485a3973620b8d003ef3341e6008a","size":474,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.SEC_WEBSOCKET_ACCEPT.md"},"docs/api/rust/tauri/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.md":{"sha":"18509d561645aaafab1b0562468244065c571480","size":577,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.SEC_WEBSOCKET_EXTENSIONS.md"},"docs/api/rust/tauri/http/header/constant.SEC_WEBSOCKET_KEY.md":{"sha":"e8221007d6ee7d91405545cfc67c27ab183e8b63","size":680,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.SEC_WEBSOCKET_KEY.md"},"docs/api/rust/tauri/http/header/constant.SEC_WEBSOCKET_PROTOCOL.md":{"sha":"ae990a27dfe9429aa204911b3f74ca3abd78edef","size":605,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.SEC_WEBSOCKET_PROTOCOL.md"},"docs/api/rust/tauri/http/header/constant.SEC_WEBSOCKET_VERSION.md":{"sha":"c8ca9faddace38ce262eebca3036830d40e5296a","size":651,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.SEC_WEBSOCKET_VERSION.md"},"docs/api/rust/tauri/http/header/constant.SERVER.md":{"sha":"a1909035162c38bacd260880d74bd305b2110025","size":516,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.SERVER.md"},"docs/api/rust/tauri/http/header/constant.SET_COOKIE.md":{"sha":"d424a7891127d8e81c8133d508a40c97b4d9e8b8","size":289,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.SET_COOKIE.md"},"docs/api/rust/tauri/http/header/constant.STRICT_TRANSPORT_SECURITY.md":{"sha":"7135b52a7d721fb1e096c3c8024fe47cf6e67b3e","size":359,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.STRICT_TRANSPORT_SECURITY.md"},"docs/api/rust/tauri/http/header/constant.TE.md":{"sha":"1bfb51388a93c2a631c670377a575b96f2d4afc0","size":650,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.TE.md"},"docs/api/rust/tauri/http/header/constant.TRAILER.md":{"sha":"d25a991f439ec0d73980973bd9953f4b5a8b1aac","size":300,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.TRAILER.md"},"docs/api/rust/tauri/http/header/constant.TRANSFER_ENCODING.md":{"sha":"4f22d5e7d0a5c773571b7341f5f58dbbcdc91adb","size":814,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.TRANSFER_ENCODING.md"},"docs/api/rust/tauri/http/header/constant.UPGRADE.md":{"sha":"1af6346bb39a7c852af8384b4bcace4374b07120","size":275,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.UPGRADE.md"},"docs/api/rust/tauri/http/header/constant.UPGRADE_INSECURE_REQUESTS.md":{"sha":"d3870b62e8b036c9b7a21a6e9a549faafa3675b1","size":404,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.UPGRADE_INSECURE_REQUESTS.md"},"docs/api/rust/tauri/http/header/constant.USER_AGENT.md":{"sha":"55ed2e4dffef603dc8195be1d36404f1f0247085","size":311,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.USER_AGENT.md"},"docs/api/rust/tauri/http/header/constant.VARY.md":{"sha":"f29b96343968603e5163214e062fdac26cba1d95","size":734,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.VARY.md"},"docs/api/rust/tauri/http/header/constant.VIA.md":{"sha":"3dbc9459eb70b1ea558c3681df3454d1fb601960","size":538,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.VIA.md"},"docs/api/rust/tauri/http/header/constant.WARNING.md":{"sha":"670bfdec03e605caae31124bdacdff052c5bd65f","size":533,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.WARNING.md"},"docs/api/rust/tauri/http/header/constant.WWW_AUTHENTICATE.md":{"sha":"648ad26fe6f1a0f98dde4e267742b120746e8d5d","size":341,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.WWW_AUTHENTICATE.md"},"docs/api/rust/tauri/http/header/constant.X_CONTENT_TYPE_OPTIONS.md":{"sha":"61d2bc1119b98a8a7c2e41fe280edd66535bc846","size":913,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.X_CONTENT_TYPE_OPTIONS.md"},"docs/api/rust/tauri/http/header/constant.X_DNS_PREFETCH_CONTROL.md":{"sha":"aa6b04a21b283a51b2b093e74c8fe7ff22c397c6","size":800,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.X_DNS_PREFETCH_CONTROL.md"},"docs/api/rust/tauri/http/header/constant.X_FRAME_OPTIONS.md":{"sha":"fddd38cd9f7eab5b944c45b37bbc85a230326f44","size":572,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.X_FRAME_OPTIONS.md"},"docs/api/rust/tauri/http/header/constant.X_XSS_PROTECTION.md":{"sha":"005aafbcb5a26d7ad50a8c4820d9d195c226e331","size":789,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/constant.X_XSS_PROTECTION.md"},"docs/api/rust/tauri/http/header/enum.Entry.md":{"sha":"fb44d7b8c3e7dddca7792e0ea3d6e6287423ad50","size":11569,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/enum.Entry.md"},"docs/api/rust/tauri/http/header/struct.Drain.md":{"sha":"7f67768c91c11baf92bceccc6a866e8d38390680","size":89186,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.Drain.md"},"docs/api/rust/tauri/http/header/struct.GetAll.md":{"sha":"2683bc902e5595a587fc0f49d36fd5e36f1c8845","size":14925,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.GetAll.md"},"docs/api/rust/tauri/http/header/struct.HeaderMap.md":{"sha":"51978f5b4aa52d54d31638ce69a18c46f362996a","size":54241,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.HeaderMap.md"},"docs/api/rust/tauri/http/header/struct.HeaderName.md":{"sha":"0465f3d75b1a1d0aa052dc15ae686ed8f5b069a7","size":38642,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.HeaderName.md"},"docs/api/rust/tauri/http/header/struct.HeaderValue.md":{"sha":"82335c6409680f013c558e7118985c308fa4d560","size":72634,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.HeaderValue.md"},"docs/api/rust/tauri/http/header/struct.IntoIter.md":{"sha":"dc28b52c84e7596dbfcc0e2903f64d786b7c830a","size":89456,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.IntoIter.md"},"docs/api/rust/tauri/http/header/struct.InvalidHeaderName.md":{"sha":"d7f38170b02e55b10e6819ab6ff760823d4e1020","size":13765,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.InvalidHeaderName.md"},"docs/api/rust/tauri/http/header/struct.InvalidHeaderValue.md":{"sha":"1aac06feaf95bb3b0826d74953c1f54c43d3588f","size":13066,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.InvalidHeaderValue.md"},"docs/api/rust/tauri/http/header/struct.Iter.md":{"sha":"6dd3685162bafb198e7f1cfd75344fa0231705e4","size":88607,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.Iter.md"},"docs/api/rust/tauri/http/header/struct.IterMut.md":{"sha":"32437d797d9759c50bd663c4e72b3ed9d32044d3","size":88715,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.IterMut.md"},"docs/api/rust/tauri/http/header/struct.Keys.md":{"sha":"3e4224de2d527357fd90250ceb704cc6fb8842a6","size":89691,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.Keys.md"},"docs/api/rust/tauri/http/header/struct.OccupiedEntry.md":{"sha":"3ea3ecff9ec2eadead72018f782646a5cfdb4dbf","size":23410,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.OccupiedEntry.md"},"docs/api/rust/tauri/http/header/struct.ToStrError.md":{"sha":"9a0079a05107e97079faa0f504e8f7d157f465a8","size":12951,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.ToStrError.md"},"docs/api/rust/tauri/http/header/struct.VacantEntry.md":{"sha":"6c680475c30d8b6bc9a733ba6fb32bc99e6529f0","size":11558,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.VacantEntry.md"},"docs/api/rust/tauri/http/header/struct.ValueDrain.md":{"sha":"f611d25c742d78ca752600463120aeaad9e79a2e","size":92646,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.ValueDrain.md"},"docs/api/rust/tauri/http/header/struct.ValueIter.md":{"sha":"53d0dd65181e7d3a432191cd8d6e0c6aa4f4650a","size":94358,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.ValueIter.md"},"docs/api/rust/tauri/http/header/struct.ValueIterMut.md":{"sha":"edf8b10c8295f85b4b0fb4f66347c23cc6e28fa7","size":94555,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.ValueIterMut.md"},"docs/api/rust/tauri/http/header/struct.Values.md":{"sha":"a04f7876d3a034a001e7a538cc434652849e29ce","size":88186,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.Values.md"},"docs/api/rust/tauri/http/header/struct.ValuesMut.md":{"sha":"4049acc4efebee21d65e003b88b71b43675cd958","size":88232,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/struct.ValuesMut.md"},"docs/api/rust/tauri/http/header/trait.AsHeaderName.md":{"sha":"9ae3f82c47fd1157c759f982dd6a4221c87a348d","size":1920,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/trait.AsHeaderName.md"},"docs/api/rust/tauri/http/header/trait.IntoHeaderName.md":{"sha":"449f1ec731d8e02fd308f69835499e72db341531","size":1305,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/header/trait.IntoHeaderName.md"},"docs/api/rust/tauri/http/method/struct.InvalidMethod.md":{"sha":"d105ff520eb7880a90af9b8e1d4a40abee0e1dab","size":13590,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/method/struct.InvalidMethod.md"},"docs/api/rust/tauri/http/method/struct.Method.md":{"sha":"85d4c657e4393e0ae432d6f5e0c7268a400887ee","size":33522,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/method/struct.Method.md"},"docs/api/rust/tauri/http/status/struct.InvalidStatusCode.md":{"sha":"211a378f1214a5cba86249f731aa36affe0f062e","size":13121,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/status/struct.InvalidStatusCode.md"},"docs/api/rust/tauri/http/status/struct.StatusCode.md":{"sha":"22169af034fe1969010d019736ab54fc3399e202","size":61194,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/status/struct.StatusCode.md"},"docs/api/rust/tauri/http/version/struct.Version.md":{"sha":"24a6a9ca4f45526842cbd7cdafab6caaf015720e","size":22397,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/http/version/struct.Version.md"},"docs/api/rust/tauri/plugin/trait.Plugin.md":{"sha":"11ec1f61063fd2e3bd5ca87b5a7356a19d5546ac","size":3414,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/plugin/trait.Plugin.md"},"docs/api/rust/tauri/plugin/type.Result.md":{"sha":"1b2693a0ca224ff05324e8419fb91823553df7f4","size":253,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/plugin/type.Result.md"},"docs/api/rust/tauri/settings/fn.read_settings.md":{"sha":"8d16cba6bfb81f2538d54aa5cd2faab10ab3c795","size":302,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/settings/fn.read_settings.md"},"docs/api/rust/tauri/settings/struct.Settings.md":{"sha":"2d99ab5afb7d14f29b0e3b79d86e76cf52b569de","size":15020,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/settings/struct.Settings.md"},"docs/api/rust/tauri/window/struct.MenuEvent.md":{"sha":"8cb802f4faede4b209a251b4cb8597f6c7b77c3d","size":11056,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/window/struct.MenuEvent.md"},"docs/api/rust/tauri/window/struct.MenuHandle.md":{"sha":"8f3e2e48197c7c6ea1597cdace92515b6923d7ba","size":15433,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/window/struct.MenuHandle.md"},"docs/api/rust/tauri/window/struct.Monitor.md":{"sha":"882572314a3e7663000062edb65786a1a827fb77","size":13994,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/window/struct.Monitor.md"},"docs/api/rust/tauri/window/struct.Window.md":{"sha":"2212fd8712bf42d0fd6d66f317d8853022028f3f","size":55645,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/api/rust/tauri/window/struct.Window.md"},"docs/development/ci-cd.md":{"sha":"6d213c39bcdb5e5523c48443b5dbee493a295cfb","size":4659,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/development/ci-cd.md"},"docs/development/cross-platform.md":{"sha":"fc7ada90f18b51c65b5685a6022c64286bc0662e","size":103,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/development/cross-platform.md"},"docs/development/debugging.md":{"sha":"981ea4f056ded285ca9000394c2427939bd6f501","size":2394,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/development/debugging.md"},"docs/development/development-cycle.md":{"sha":"9a93dca6cb381bb6dcd3c2a132665b39b342f552","size":1534,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/development/development-cycle.md"},"docs/development/integration.md":{"sha":"6af73425cc122e93464cccad3c144b46a1fd6f85","size":4725,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/development/integration.md"},"docs/development/intro.md":{"sha":"2c06ba3eae90614231018c4a0a2684e6aefbf8a5","size":901,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/development/intro.md"},"docs/development/publishing.md":{"sha":"dd6d4848656d27c8f58d93dd4878baadfbb8a0f3","size":965,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/development/publishing.md"},"docs/development/signing-macos.md":{"sha":"3958bc8daa341c4f300a157e0a15ad6355bdea74","size":51,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/development/signing-macos.md"},"docs/development/updating.md":{"sha":"f0e37131b8fcff59255361cdd52902bedb465fc1","size":1408,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/development/updating.md"},"docs/get-started/intro.md":{"sha":"c9a8b9f03a1b4775aaecb5c05410992eeb8b05f7","size":2608,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/get-started/intro.md"},"docs/get-started/setup-linux.md":{"sha":"c65f524317e6da47dbe9e226c94719422ae61433","size":4982,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/get-started/setup-linux.md"},"docs/get-started/setup-macos.md":{"sha":"99cae698d91bdf79bef6876a8aed3d99c5e382ae","size":2754,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/get-started/setup-macos.md"},"docs/get-started/setup-windows.md":{"sha":"dde8488237d720e0a15b2d5ea2e0679b5cfd181d","size":3221,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/get-started/setup-windows.md"},"docs/guides/cli.md":{"sha":"af4b66e3d671b4e7065693a7b3fa3a57ed9f78b1","size":4605,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/cli.md"},"docs/guides/command.md":{"sha":"2b7324e9c66d035d8a525375e4cc8c8b9229ef3f","size":6319,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/command.md"},"docs/guides/contributor-guide.md":{"sha":"f6397d06c792e413cb58a8b80c6459261ee81a14","size":1813,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/contributor-guide.md"},"docs/guides/events.md":{"sha":"ed0d6d0e122ba0f1dd11492a5a4c19dcfde9430c","size":4446,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/events.md"},"docs/guides/icons.md":{"sha":"cc42057ce4fa47e3b24a5714045716a3bc1ed8cc","size":1326,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/icons.md"},"docs/guides/menu.md":{"sha":"b82a2dcc83714851d949cfecaf2f9b39c77ae152","size":4223,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/menu.md"},"docs/guides/migration.md":{"sha":"5cd2b3f6aa357360022a1b44e8553d25a63c01be","size":7537,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/migration.md"},"docs/guides/multiwindow.md":{"sha":"46b84b35625fd9c0080acb0b82ef6accf70ab354","size":77,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/multiwindow.md"},"docs/guides/plugin.md":{"sha":"f9a656bb427d06c3fdff8d0001b046617ef900fd","size":3351,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/plugin.md"},"docs/guides/splashscreen.md":{"sha":"81d444a73a24d7bcfcfd12071a1c251fa8121ee0","size":3185,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/splashscreen.md"},"docs/guides/system-tray.md":{"sha":"02f29f5985f1914c386714ce8e6e28361c872b71","size":5050,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/system-tray.md"},"docs/guides/updater.md":{"sha":"bbd29cf85f451debd56c12369e309654f72b705e","size":10528,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/updater.md"},"docs/guides/window-customization.md":{"sha":"83c66da66d9365b8ff493603d9cdf22f3222662b","size":2365,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/window-customization.md"},"docs/guides/bundler/anti-bloat.md":{"sha":"067fa9118bb309e8c8af87c4659d038680096a5c","size":4952,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/bundler/anti-bloat.md"},"docs/guides/bundler/debian.md":{"sha":"5d581d2b96e072d142da3ef8c566274fd73bb8c0","size":1176,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/bundler/debian.md"},"docs/guides/bundler/introduction.md":{"sha":"ba24668c624d14d7af656654fb1b45851cec5a70","size":300,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/bundler/introduction.md"},"docs/guides/bundler/sidecar.md":{"sha":"d3a25383d9daddf3edb9c879dbdc8bd020ee0def","size":3264,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/bundler/sidecar.md"},"docs/guides/bundler/sign-macos.md":{"sha":"3be227a80a92eeed567accc4a378a5848ee7340e","size":8072,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/bundler/sign-macos.md"},"docs/guides/bundler/sign-windows.md":{"sha":"626d68e10b86fba5571c2563e5a4e0820c0175ca","size":7181,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/bundler/sign-windows.md"},"docs/guides/patterns/about-patterns.md":{"sha":"0bfa7dc57be150ae4c684b4f9735a74fc3ff2209","size":616,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/patterns/about-patterns.md"},"docs/guides/patterns/bridge.md":{"sha":"ea9fb7a9cfe221ee887d966bb5b767480c5c4215","size":2607,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/patterns/bridge.md"},"docs/guides/patterns/cloudbridge.md":{"sha":"73ec4bdab3d88d2376882a67167197dcc9da7c9a","size":2175,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/patterns/cloudbridge.md"},"docs/guides/patterns/cloudish.md":{"sha":"4e511b8d269c760f19317c48e6969eac3d200937","size":2085,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/patterns/cloudish.md"},"docs/guides/patterns/glui.md":{"sha":"82504e37a41a3f21dcc6d79f9f290af0e9d38a3b","size":2070,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/patterns/glui.md"},"docs/guides/patterns/hermit.md":{"sha":"659281f0120d130020f8e263323f5921ca1fe1e6","size":1956,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/patterns/hermit.md"},"docs/guides/patterns/lockdown.md":{"sha":"95718743247a53aaac395e9fa34337df0a5f2460","size":1904,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/patterns/lockdown.md"},"docs/guides/patterns/multiwin.md":{"sha":"5d890623ac4f3c6126c0d465883cf1e55e2f9499","size":1881,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/patterns/multiwin.md"},"docs/guides/webdriver/ci.md":{"sha":"214e9c91c106922c414edb0ec630c4b10f76d848","size":3249,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/webdriver/ci.md"},"docs/guides/webdriver/introduction.md":{"sha":"dc87ecd2de01f2c6357654777cf41a1be0b1e12e","size":2874,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/webdriver/introduction.md"},"docs/guides/webdriver/example/selenium.md":{"sha":"361973dda3566a035cef36202c7e198dd1934b94","size":7038,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/webdriver/example/selenium.md"},"docs/guides/webdriver/example/setup.md":{"sha":"79b68a51b86fc56c660a0d7aa174499b93b46b98","size":6698,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/webdriver/example/setup.md"},"docs/guides/webdriver/example/webdriverio.md":{"sha":"0bfc7b8a9e19e8cbbda638c31942c7ab4b92282e","size":8233,"download_url":"https://raw.githubusercontent.com/tauri-apps/tauri-docs/dev/docs/guides/webdriver/example/webdriverio.md"}} \ No newline at end of file diff --git a/packages/tauri-search/src/mappers/ConsolidatedMapper.ts b/packages/tauri-search/src/mappers/ConsolidatedMapper.ts index 7bf50fe..bfdf1a6 100644 --- a/packages/tauri-search/src/mappers/ConsolidatedMapper.ts +++ b/packages/tauri-search/src/mappers/ConsolidatedMapper.ts @@ -38,7 +38,11 @@ export const ConsolidatedMapper: ModelMapper< : isApiDocument(i) ? null : i.code?.join(" ") || null, - hierarchy_lvl6: isRepoDocument(i) ? String(i.stars) || null : isApiDocument(i) ? null : null, + hierarchy_lvl6: isRepoDocument(i) + ? String(i.stars) || null + : isApiDocument(i) + ? null + : null, from: isRepoDocument(i) ? "repo" : isApiDocument(i) ? "api" : "prose", symbol: isApiDocument(i) ? i.kind : null, language: isApiDocument(i) @@ -46,7 +50,7 @@ export const ConsolidatedMapper: ModelMapper< : isRepoDocument(i) ? i.language : i.code?.pop() || null, - + tags: isRepoDocument(i) ? i.topics || null : isApiDocument(i) ? null : i.tags || null, content: isRepoDocument(i) ? i.text : isApiDocument(i) ? i.comment || null : i.text, rank: isRepoDocument(i) ? IndexRank.repo diff --git a/packages/tauri-search/src/models/ConsolidatedModel.ts b/packages/tauri-search/src/models/ConsolidatedModel.ts index 12be102..64fb2a0 100644 --- a/packages/tauri-search/src/models/ConsolidatedModel.ts +++ b/packages/tauri-search/src/models/ConsolidatedModel.ts @@ -6,6 +6,7 @@ export type IConsolidatedModel = IScrapeSelectorTargets & { from: "prose" | "api" | "repo"; rank: number; symbol: string | null; + tags: null | string[]; language: string | null; }; @@ -20,6 +21,15 @@ export const ConsolidatedModel = createModel("consolidated", javascript: ["ts", "typescript", "js"], }) .filterable("from", "language", "symbol") - .searchable("hierarchy_lvl0", "rank", "hierarchy_lvl3", "hierarchy_lvl2", "hierarchy_lvl1", "symbol", "content") - .rankingRules((r) => r.words().typo().sort().attribute().proximity().exactness()) + .searchable( + "hierarchy_lvl0", + "symbol", + "tags", + "hierarchy_lvl3", + "hierarchy_lvl2", + "hierarchy_lvl1", + "rank", + "content" + ) + .rankingRules((r) => r.words().typo().sort().attribute().proximity().ASC("rank").exactness()) ); diff --git a/packages/tauri-search/src/pipelines/refreshProse.ts b/packages/tauri-search/src/pipelines/refreshProse.ts index 7a260c6..bed66f2 100644 --- a/packages/tauri-search/src/pipelines/refreshProse.ts +++ b/packages/tauri-search/src/pipelines/refreshProse.ts @@ -136,5 +136,5 @@ export async function refreshProse( await writeFile(sitemap, JSON.stringify(currentSitemap), "utf-8"); console.log(`- wrote Repo Sitemap to: ${sitemap}`); - return { sitemap }; + return { }; } diff --git a/packages/tauri-search/src/pipelines/refreshSitemap.ts b/packages/tauri-search/src/pipelines/refreshSitemap.ts index 43e87e6..934dfdd 100644 --- a/packages/tauri-search/src/pipelines/refreshSitemap.ts +++ b/packages/tauri-search/src/pipelines/refreshSitemap.ts @@ -74,6 +74,8 @@ function reduceClutter( /** * Uses Github API to build a sitemap of markdown files for a given repo + * and will also report on changes since last sitemap if a prior sitemap + * existed */ export async function refreshSitemap(options: Partial = DEFAULT) { const o = { ...DEFAULT, ...options }; diff --git a/packages/tauri-search/src/types/apis.ts b/packages/tauri-search/src/types/apis.ts index 3127e48..0c8f27e 100644 --- a/packages/tauri-search/src/types/apis.ts +++ b/packages/tauri-search/src/types/apis.ts @@ -1,22 +1,21 @@ /* eslint-disable no-console */ /* eslint-disable no-use-before-define */ -import { Keys, UnionToTuple } from "inferred-types"; +import { Keys } from "inferred-types"; import { Type } from "~/enums"; +export type PropertyRank = `${Keys}:${"asc" | "desc"}`; + /** represents valid choices for ranking rules */ -export type RankingRule = +export type RankingRule = | "words" | "typo" | "proximity" | "attribute" | "sort" - | "exactness"; + | "exactness" + | PropertyRank; + -export type T = Record>, any>; -export type TT> = never> = Record< - Keys, E>, - () => TT ->; /** * An API that allows consumers to set a ranking order for Meilisearch Index. @@ -24,19 +23,19 @@ export type TT> = never> = Record< * ordering. * * [Ranking Rules Documentation](https://docs.meilisearch.com/learn/core_concepts/relevancy.html#ranking-rules) */ -export type RankingRulesApi = Omit< +export type RankingRulesApi = never> = Omit< { /** * Results are sorted by increasing number of typos. Returns documents that * match query terms with fewer typos first. */ - typo: () => RankingRulesApi; + typo: () => RankingRulesApi; /** * Results are sorted by increasing distance between matched query terms. Returns * documents where query terms occur close together and in the same order as the * query string first. */ - proximity: () => RankingRulesApi; + proximity: () => RankingRulesApi; /** * Results are sorted according to the * [attribute ranking order](https://docs.meilisearch.com/learn/core_concepts/relevancy.html#attribute-ranking-order). @@ -46,12 +45,12 @@ export type RankingRulesApi = Omit< * of the attribute list will be considered more relevant than documents containing the query * words at the end of the attributes. */ - attribute: () => RankingRulesApi; + attribute: () => RankingRulesApi; /** * Results are sorted by the similarity of the matched words with the query words. * Returns documents that contain exactly the same terms as the ones queried first. */ - exactness: () => RankingRulesApi; + exactness: () => RankingRulesApi; /** * Results are sorted according to parameters decided at query time. When the sort * ranking rule is in a higher position, sorting is exhaustive: results will be less @@ -59,12 +58,15 @@ export type RankingRulesApi = Omit< * lower position, sorting is relevant: results will be very relevant, but might not * always follow the order defined by the user. */ - sort: () => RankingRulesApi; + sort: () => RankingRulesApi; /** * Results are sorted by decreasing number of matched query terms. Returns documents * that contain all query terms first. */ - words: () => RankingRulesApi; + words: () => RankingRulesApi; + + ASC: (prop: keyof TDoc) => RankingRulesApi; + DESC: (prop: keyof TDoc) => RankingRulesApi; }, E >; @@ -79,37 +81,6 @@ export type StopWords = Record; */ export type IndexSynonyms = Record; -export type IndexDefnApi = { - /** - * Specify the order for the various _ranking rules_. The default ranking rules are: - * - * ```ts - * ["words", "typo", "proximity", "attribute", "sort", "exactness"] - * ``` - * - * Refer to [Ranking Rules Documentation](https://docs.meilisearch.com/learn/core_concepts/relevancy.html#ranking-rules) for more info. - */ - rankingRules?: (r: RankingRulesApi) => void; - /** - * Allows multiple words with the same meaning to be paired together to improve search results. - * - * [Synonyms Documentation](https://docs.meilisearch.com/reference/features/synonyms.html#synonyms) - */ - synonyms?: IndexSynonyms; - /** - * Because your website might provide content with structured English sentences, we - * recommend adding stop words. Indeed, the search-engine would not be "spoiled" by - * linking words and would focus on the main words of the query, rendering more - * accurate results. - * - * Here is the [dedicated page about stop-words](https://docs.meilisearch.com/reference/features/stop_words.html) - * in the official documentation. You can find more complete lists of - * English stop-words [like this one](https://gist.github.com/sebleier/554280). - - */ - stopWords?: string[]; -}; - export type DocumentProperty = { type: Type; literals: string[] | number[]; diff --git a/packages/tauri-search/src/types/meiliseach.ts b/packages/tauri-search/src/types/meiliseach.ts index 4892b1f..cd402eb 100644 --- a/packages/tauri-search/src/types/meiliseach.ts +++ b/packages/tauri-search/src/types/meiliseach.ts @@ -1,6 +1,6 @@ -import { AxiosRequestConfig } from "axios"; +import { AxiosRequestConfig } from 'axios'; +import { RankingRule, Wildcard } from '.'; import { ApiOptions } from "~/utils/MeiliSearchApi"; -import { RankingRule, Wildcard } from "."; export interface MsIndexStatusResponse { uid: string; @@ -42,18 +42,18 @@ export type IMeilisearchSearchHit = { id: string; } & T; -export interface IMeilisearchSettingsResponse { - displayAttributes: (keyof T)[] | ["*"]; - searchableAttributes: (keyof T)[] | ["*"]; - filterAttributes: (keyof T)[] | ["*"]; - sortableAttributes: (keyof T)[] | ["*"]; - rankingRules: RankingRule[]; +export interface IMeilisearchSettingsResponse { + displayAttributes: (keyof TDoc)[] | ["*"]; + searchableAttributes: (keyof TDoc)[] | ["*"]; + filterAttributes: (keyof TDoc)[] | ["*"]; + sortableAttributes: (keyof TDoc)[] | ["*"]; + rankingRules: RankingRule[]; stopWords: string[]; synonyms: Record; - distinctAttribute: null | (keyof T)[] | ["*"]; + distinctAttribute: null | (keyof TDoc)[] | ["*"]; } -export interface IMeilisearchIndexSettings { +export interface IMeilisearchIndexSettings { /** List of associated words treated similarly. A word associated to an array of word as synonyms. */ synonyms?: Record; /** List of words ignored when present in search queries. */ @@ -63,20 +63,20 @@ export interface IMeilisearchIndexSettings { * * The default is: words, typo, proximity, attribute, sort, exactness */ - rankingRules?: RankingRule[]; + rankingRules?: RankingRule[]; /** Search returns documents with distinct (different) values of the given field. */ - distinctAttribute?: null | keyof T; + distinctAttribute?: null | keyof TDoc; /** Fields in which to search for matching query words sorted by order of importance. */ - searchableAttributes?: Wildcard; + searchableAttributes?: Wildcard; /** Fields displayed in the returned documents. */ - displayedAttributes?: Wildcard; + displayedAttributes?: Wildcard; /** * Attributes to use for facetting and filtering. See * [Filtering and Faceted Search](https://docs.meilisearch.com/reference/features/filtering_and_faceted_search.html). */ - filterableAttributes?: Wildcard; + filterableAttributes?: Wildcard; /** List of attributes to sort on at search. */ - sortableAttributes?: Wildcard; + sortableAttributes?: Wildcard; } export interface IMeiliSearchHealth { diff --git a/packages/tauri-search/src/types/model.ts b/packages/tauri-search/src/types/model.ts index 8bf3f5e..a5b8ae3 100644 --- a/packages/tauri-search/src/types/model.ts +++ b/packages/tauri-search/src/types/model.ts @@ -43,7 +43,7 @@ export type IndexApi = Omit< * Refer to [Ranking Rules Documentation](https://docs.meilisearch.com/learn/core_concepts/relevancy.html#ranking-rules) for more info. */ rankingRules: ( - cb: (r: RankingRulesApi) => void + cb: (r: RankingRulesApi) => void ) => IndexApi; }, TExclude @@ -57,7 +57,7 @@ export type ISearchModel = { type: TDoc; index: { pk: string; - rules?: RankingRule[]; + rules?: RankingRule[]; displayed?: Wildcard; searchable?: Wildcard; filterable?: Wildcard; diff --git a/packages/tauri-search/src/utils/convertSitemap.ts b/packages/tauri-search/src/utils/convertSitemap.ts index 792edfe..b6bcd97 100644 --- a/packages/tauri-search/src/utils/convertSitemap.ts +++ b/packages/tauri-search/src/utils/convertSitemap.ts @@ -15,23 +15,29 @@ export type ISitemapDictionary = Record>; /** * Flattens the hierarchical structure of a sitemap into an easily iterable array */ -export function flattenSitemap(sm: IDocsSitemap): IFlatSitemap[] { +export function flattenSitemap(sm: S): S extends IDocsSitemap ? IFlatSitemap[] : undefined { let flat: IFlatSitemap[] = []; - for (const f of sm.files) { - const filepath = join(sm.dir, f.name); - flat.push({ filepath, sha: f.sha, size: f.size, download_url: f.download_url }); - } - if (sm.children && sm.children.length > 0) { - for (const child of sm.children) { - flat = flat.concat(...flattenSitemap(child)); + if(!sm) { + return undefined as S extends IDocsSitemap ? IFlatSitemap[] : undefined; + } else { + + for (const f of sm.files) { + const filepath = join(sm.dir, f.name); + flat.push({ filepath, sha: f.sha, size: f.size, download_url: f.download_url }); } + if (sm.children && sm.children.length > 0) { + for (const child of sm.children) { + flat = flat.concat(...flattenSitemap(child)); + } + } + } - - return flat; + return flat as S extends IDocsSitemap ? IFlatSitemap[] : undefined; } -export function sitemapDictionary(sm: IDocsSitemap) { - return flattenSitemap(sm).reduce((acc, i) => { +export function sitemapDictionary(sm: S) { + + return (sm ? flattenSitemap(sm as IDocsSitemap).reduce((acc, i) => { return { ...acc, [i.filepath]: { ...omit(i, "filepath") } }; - }, {} as ISitemapDictionary); + }, {} as ISitemapDictionary) : undefined) as S extends IDocsSitemap ? IFlatSitemap[] : undefined; } diff --git a/packages/tauri-search/src/utils/createModel.ts b/packages/tauri-search/src/utils/createModel.ts index 9d642ce..781d307 100644 --- a/packages/tauri-search/src/utils/createModel.ts +++ b/packages/tauri-search/src/utils/createModel.ts @@ -62,8 +62,8 @@ const modelConfigApi = (update: (s: PartialModel) => void return api(); }, - rankingRules(cb: (r: RankingRulesApi) => void) { - const updateRules = (r: RankingRule[]) => { + rankingRules(cb: (r: RankingRulesApi) => void) { + const updateRules = (r: RankingRule[]) => { update({ index: { rules: r } }); }; const ruleApi = rankingRules(updateRules); diff --git a/packages/tauri-search/src/utils/getCache.ts b/packages/tauri-search/src/utils/getCache.ts new file mode 100644 index 0000000..44eb645 --- /dev/null +++ b/packages/tauri-search/src/utils/getCache.ts @@ -0,0 +1,57 @@ +import { readFile } from "fs/promises"; +import { IDocsSitemap } from "~/pipelines"; +import { IApiModel, IProseModel, IRepoModel } from ".."; +import { getEnv } from "./getEnv"; + +export enum CacheKind { + sitemap = "Sitemap of Markdown files", + proseDocs = "Prose/Markdown docs", + repoDocs = "Repo docs", + typescriptDocs = "Typescript API docs", + rustDocs = "Rust API docs" +} + +export interface GetCacheOptions { + repo?:string; + branch?: string; +} + +export async function getCache(kind: K, options: GetCacheOptions = {}) { + const {repo, branch} = {...getEnv(), ...options}; + let content; + + try { + switch(kind) { + case CacheKind.sitemap: + content = await readFile(`src/generated/sitemap-${repo}-${branch}.json`, "utf-8").then(c => JSON.parse(c) as IDocsSitemap); + break; + + case CacheKind.proseDocs: + content = await readFile(`src/generated/prose/${repo}_${branch}/documents.json`, "utf-8").then(c => JSON.parse(c) as IProseModel[]); + break; + + case CacheKind.repoDocs: + content = await readFile(`src/generated/repos/documents.json`, "utf-8").then(c => JSON.parse(c) as IRepoModel[]); + break; + + case CacheKind.typescriptDocs: + content = await readFile(`src/generated/api/${repo}_${branch}/ts-documents.json`, "utf-8").then(c => JSON.parse(c) as IApiModel[]); + break; + + case CacheKind.rustDocs: + content = await readFile(`src/generated/api/${repo}_${branch}/rs-documents.json`, "utf-8").then(c => JSON.parse(c) as IApiModel[]); + break; + + default: + content = undefined; + } + + return content as K extends CacheKind.sitemap ? IDocsSitemap | undefined : K extends CacheKind.proseDocs | undefined? IProseModel[] : K extends CacheKind.repoDocs ? IRepoModel[]| undefined : K extends CacheKind.typescriptDocs | undefined ? IApiModel[] : undefined; + } catch (e) { + console.warn(e); + + // throw new Error(`Problem loading "${kind}" generated cache file: ${(e as Error).message}`); + return undefined; + } + +} \ No newline at end of file diff --git a/packages/tauri-search/src/utils/getEnv.ts b/packages/tauri-search/src/utils/getEnv.ts index b0bd4c5..4c52c98 100644 --- a/packages/tauri-search/src/utils/getEnv.ts +++ b/packages/tauri-search/src/utils/getEnv.ts @@ -3,7 +3,7 @@ import { config } from "dotenv"; export function getEnv() { config(); return { - repo: process.env.REPO || "tauri", + repo: process.env.REPO || "tauri-docs", branch: process.env.BRANCH || "dev", github_token: process.env.GH_TOKEN || process.env.GITHUB_TOKEN || undefined, github_user: process.env.GH_USER || undefined, diff --git a/packages/tauri-search/src/utils/model-api/rankingRules.ts b/packages/tauri-search/src/utils/model-api/rankingRules.ts index 3d44dba..51d851a 100644 --- a/packages/tauri-search/src/utils/model-api/rankingRules.ts +++ b/packages/tauri-search/src/utils/model-api/rankingRules.ts @@ -1,46 +1,60 @@ import { RankingRule, RankingRulesApi } from "~/types/apis"; -export const rankingRules = (update: (r: RankingRule[]) => void) => { - const api = ( - rules: RankingRule[] = [] - ): RankingRulesApi => { +export const rankingRules = (update: (r: RankingRule[]) => void) => { + const api = ( + rules: RankingRule[] = [] + ): RankingRulesApi => { return { typo: () => { - const updated = [...rules, "typo"] as RankingRule[]; + const updated = [...rules, "typo"] as RankingRule[]; update(updated); - return api(updated); + return api(updated); }, proximity: () => { - const updated = [...rules, "proximity"] as RankingRule[]; + const updated = [...rules, "proximity"] as RankingRule[]; update(updated); - return api(updated); + return api(updated); }, attribute: () => { - const updated = [...rules, "attribute"] as RankingRule[]; + const updated = [...rules, "attribute"] as RankingRule[]; update(updated); - return api(updated); + return api(updated); }, exactness: () => { - const updated = [...rules, "exactness"] as RankingRule[]; + const updated = [...rules, "exactness"] as RankingRule[]; update(updated); - return api(updated); + return api(updated); }, sort: () => { - const updated = [...rules, "sort"] as RankingRule[]; + const updated = [...rules, "sort"] as RankingRule[]; update(updated); - return api(updated); + return api(updated); }, words: () => { - const updated = [...rules, "words"] as RankingRule[]; + const updated = [...rules, "words"] as RankingRule[]; update(updated); - return api(updated); + return api(updated); }, - } as unknown as RankingRulesApi; + /** + * Make a property in the Model serve as a ranking rule, using + * ascending order to rank. + */ + ASC: (prop: keyof TDoc) => { + const updated = [...rules, `${prop}:asc`] as RankingRule[]; + update(updated); + return api(updated); + }, + DESC: (prop: keyof TDoc) => { + const updated = [...rules, `${prop}:desc`] as RankingRule[]; + update(updated); + return api(updated); + }, + } as unknown as RankingRulesApi; }; return api(); diff --git a/packages/tauri-search/src/utils/writeGeneratedFile.ts b/packages/tauri-search/src/utils/writeGeneratedFile.ts new file mode 100644 index 0000000..3d37b40 --- /dev/null +++ b/packages/tauri-search/src/utils/writeGeneratedFile.ts @@ -0,0 +1,15 @@ +import { mkdir, writeFile } from "fs/promises"; +import { dirname } from "path"; + +export async function writeGeneratedFile(file: string, data: any) { + const content = typeof data === "string" ? data : JSON.stringify(data); + const dir = dirname(file); + + try { + await mkdir(dir, { recursive: true }); + } catch(err) { + throw new Error(`Problem creating directory "${dir}" so that a generated file could be placed into this driectory: ${(err as Error).message}`); + } + + return writeFile(file, content, "utf-8"); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d487dc..e22a237 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -111,6 +111,7 @@ importers: specifiers: '@octokit/types': ^6.34.0 '@type-challenges/utils': ^0.1.1 + '@types/html-to-text': ^8.0.1 '@types/markdown-it': ^12.2.3 '@types/node': ^14.18.10 '@typescript-eslint/eslint-plugin': ^5.10.2 @@ -128,6 +129,7 @@ importers: fast-glob: ^3.2.11 fx: ^20.0.2 gray-matter: ^4.0.3 + html-to-text: ^8.1.0 husky: ^7.0.4 inferred-types: ^0.18.4 native-dash: ^1.21.5 @@ -143,10 +145,12 @@ importers: vite-plugin-inspect: ^0.3.13 vitest: ^0.2.6 dependencies: + '@types/html-to-text': 8.0.1 axios: 0.25.0 dotenv: 14.3.2 fast-glob: 3.2.11 gray-matter: 4.0.3 + html-to-text: 8.1.0 inferred-types: 0.18.4 native-dash: 1.21.5 simple-markdown-2: 0.7.5 @@ -1752,6 +1756,13 @@ packages: picomatch: 2.3.1 dev: true + /@selderee/plugin-htmlparser2/0.6.0: + resolution: {integrity: sha512-J3jpy002TyBjd4N/p6s+s90eX42H2eRhK3SbsZuvTDv977/E8p2U3zikdiehyJja66do7FlxLomZLPlvl2/xaA==} + dependencies: + domhandler: 4.3.0 + selderee: 0.6.0 + dev: false + /@surma/rollup-plugin-off-main-thread/2.2.3: resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} dependencies: @@ -1809,6 +1820,10 @@ packages: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true + /@types/html-to-text/8.0.1: + resolution: {integrity: sha512-0B/OifmJYmk5r9z9+KJtGWOF0LEjbTN4D2QeCh+mAw81JkJwC83NvNWUZFEqRT5PpnjX7vX0ab1SMGcwCs3Lag==} + dev: false + /@types/json-schema/7.0.9: resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} dev: true @@ -2719,7 +2734,6 @@ packages: /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true /commander/4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} @@ -2970,7 +2984,6 @@ packages: /deepmerge/4.2.2: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} engines: {node: '>=0.10.0'} - dev: true /define-properties/1.1.3: resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} @@ -3009,6 +3022,10 @@ packages: path-type: 4.0.0 dev: true + /discontinuous-range/1.0.0: + resolution: {integrity: sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=} + dev: false + /doctrine/2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -3033,11 +3050,9 @@ packages: domelementtype: 2.2.0 domhandler: 4.3.0 entities: 2.2.0 - dev: true /domelementtype/2.2.0: resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} - dev: true /domexception/4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} @@ -3051,7 +3066,6 @@ packages: engines: {node: '>= 4'} dependencies: domelementtype: 2.2.0 - dev: true /domutils/2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -3059,7 +3073,6 @@ packages: dom-serializer: 1.3.2 domelementtype: 2.2.0 domhandler: 4.3.0 - dev: true /dotenv/14.3.2: resolution: {integrity: sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==} @@ -3104,7 +3117,6 @@ packages: /entities/2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: true /entities/3.0.1: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} @@ -4337,7 +4349,6 @@ packages: /he/1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - dev: true /hosted-git-info/2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -4373,12 +4384,34 @@ packages: uglify-js: 3.15.0 dev: true + /html-to-text/8.1.0: + resolution: {integrity: sha512-Z9iYAqYK2c18GswSbnxJSeMs7lyJgwR2oIkDOyOHGBbYsPsG4HvT379jj3Lcbfko8A5ceyyMHAfkmp/BiXA9/Q==} + engines: {node: '>=10.23.2'} + hasBin: true + dependencies: + '@selderee/plugin-htmlparser2': 0.6.0 + deepmerge: 4.2.2 + he: 1.2.0 + htmlparser2: 6.1.0 + minimist: 1.2.5 + selderee: 0.6.0 + dev: false + /html5parser/2.0.2: resolution: {integrity: sha512-L0y+IdTVxHsovmye8MBtFgBvWZnq1C9WnI/SmJszxoQjmUH1psX2uzDk21O5k5et6udxdGjwxkbmT9eVRoG05w==} dependencies: tslib: 2.3.1 dev: true + /htmlparser2/6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + dependencies: + domelementtype: 2.2.0 + domhandler: 4.3.0 + domutils: 2.8.0 + entities: 2.2.0 + dev: false + /htmlparser2/7.2.0: resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} dependencies: @@ -5174,7 +5207,6 @@ packages: /minimist/1.2.5: resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} - dev: true /mkdirp/1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} @@ -5182,6 +5214,10 @@ packages: hasBin: true dev: true + /moo/0.5.1: + resolution: {integrity: sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==} + dev: false + /mrmime/1.0.0: resolution: {integrity: sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==} engines: {node: '>=10'} @@ -5222,6 +5258,16 @@ packages: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} dev: true + /nearley/2.20.1: + resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} + hasBin: true + dependencies: + commander: 2.20.3 + moo: 0.5.1 + railroad-diagrams: 1.0.0 + randexp: 0.4.6 + dev: false + /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -5504,6 +5550,13 @@ packages: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true + /parseley/0.7.0: + resolution: {integrity: sha512-xyOytsdDu077M3/46Am+2cGXEKM9U9QclBDv7fimY7e+BBlxh2JcBp2mgNsmkyA9uvgyTjVzDi7cP1v4hcFxbw==} + dependencies: + moo: 0.5.1 + nearley: 2.20.1 + dev: false + /parseurl/1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -5805,6 +5858,18 @@ packages: /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + /railroad-diagrams/1.0.0: + resolution: {integrity: sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=} + dev: false + + /randexp/0.4.6: + resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} + engines: {node: '>=0.12'} + dependencies: + discontinuous-range: 1.0.0 + ret: 0.1.15 + dev: false + /randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -5989,6 +6054,11 @@ packages: path-parse: 1.0.7 dev: true + /ret/0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: false + /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -6059,6 +6129,12 @@ packages: extend-shallow: 2.0.1 kind-of: 6.0.3 + /selderee/0.6.0: + resolution: {integrity: sha512-ibqWGV5aChDvfVdqNYuaJP/HnVBhlRGSRrlbttmlMpHcLuTqqbMH36QkSs9GEgj5M88JDYLI8eyP94JaQ8xRlg==} + dependencies: + parseley: 0.7.0 + dev: false + /select-hose/2.0.0: resolution: {integrity: sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=} dev: true