From deb541fafe6dc5ad90d050dcbf8f81c8c387cf74 Mon Sep 17 00:00:00 2001 From: Ken Snyder Date: Mon, 7 Feb 2022 19:53:40 -0800 Subject: [PATCH] refactor: adjusted both CJS and ESM code to be able to interact better WRT to stage --- docker-compose.yml | 3 + package.json | 1 + packages/docs/package.json | 22 +- packages/docs/pnpm-global/5/pnpm-lock.yaml | 7 + packages/docs/src/components/SearchBar.vue | 18 +- packages/docs/src/components/SearchHit.vue | 4 +- packages/docs/src/pages/search.vue | 1 + packages/docs/src/shims.d.ts | 2 +- packages/docs/tsconfig.json | 2 +- packages/tauri-search/.env.staging | 15 + packages/tauri-search/package.json | 50 +- .../tauri-search/src/ast/parseMarkdown.ts | 2 +- .../tauri-search/src/cli/create-indexes.ts | 6 +- packages/tauri-search/src/cli/drop-indexes.ts | 9 +- .../tauri-search/src/cli/push-consolidated.ts | 17 +- packages/tauri-search/src/cli/push-prose.ts | 11 +- packages/tauri-search/src/cli/push-repos.ts | 8 +- .../tauri-search/src/cli/push-typescript.ts | 13 +- .../tauri-search/src/cli/refresh-prose.ts | 2 +- .../tauri-search/src/cli/refresh-sitemap.ts | 2 +- packages/tauri-search/src/env.d.ts | 15 + .../src/generated/repos/documents.json | 2 +- .../src/mappers/ConsolidatedMapper.ts | 36 +- .../tauri-search/src/mappers/ProseMapper.ts | 5 +- .../src/models/ConsolidatedModel.ts | 13 +- .../src/pipelines/createIndexes.ts | 34 +- .../src/pipelines/pushConsolidatedDocs.ts | 8 +- .../src/pipelines/pushProseDocs.ts | 7 +- .../src/pipelines/pushRepoDocs.ts | 8 +- .../src/pipelines/pushTypescriptDocs.ts | 10 +- .../src/pipelines/refreshProse.ts | 3 +- .../src/pipelines/refreshSitemap.ts | 4 +- .../src/pipelines/refreshTypescript.ts | 5 +- packages/tauri-search/src/types/env.ts | 22 + packages/tauri-search/src/types/index.ts | 1 + packages/tauri-search/src/types/model.ts | 4 + .../tauri-search/src/utils/MeiliSearchApi.ts | 27 +- .../tauri-search/src/utils/createModel.ts | 96 +-- packages/tauri-search/src/utils/getCache.ts | 2 +- .../src/utils/getEnv/esm/getEnv.ts | 28 + .../src/utils/{ => getEnv/node}/getEnv.ts | 23 +- .../src/utils/github/getDirectory.ts | 8 +- .../tauri-search/src/utils/github/getRepo.ts | 2 +- .../src/utils/github/getRepoReadme.ts | 2 +- .../src/utils/model-api/modelConfigApi.ts | 68 ++ packages/tauri-search/vite.config.ts | 3 + pnpm-lock.yaml | 791 +++++++++--------- 47 files changed, 799 insertions(+), 623 deletions(-) create mode 100644 packages/docs/pnpm-global/5/pnpm-lock.yaml create mode 100644 packages/tauri-search/.env.staging create mode 100644 packages/tauri-search/src/env.d.ts create mode 100644 packages/tauri-search/src/types/env.ts create mode 100644 packages/tauri-search/src/utils/getEnv/esm/getEnv.ts rename packages/tauri-search/src/utils/{ => getEnv/node}/getEnv.ts (66%) create mode 100644 packages/tauri-search/src/utils/model-api/modelConfigApi.ts diff --git a/docker-compose.yml b/docker-compose.yml index 2adb774..aef6d97 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,6 +20,9 @@ services: ports: - 7700:7700 - 2222:22 + restart: unless-stopped + security_opt: + - no-new-priveledges:true volumes: - search_db:/home/db diff --git a/package.json b/package.json index e487b28..11dea78 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "tauri-search-monorepo", "private": true, "license": "MIT", + "type": "module", "author": "Ken Snyder", "scripts": { "cli:reset-index-config": "run-s cli:drop-indexes cli:create-indexes cli:push-caches", diff --git a/packages/docs/package.json b/packages/docs/package.json index 4095e9d..f94e1a5 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -24,25 +24,25 @@ "docs-searchbar.js": "^2.1.0", "floating-vue": "^2.0.0-beta.5", "inferred-types": "^0.18.4", - "markdown-it-expandable": "^1.0.0", + "markdown-it-expandable": "^1.0.2", "nprogress": "^0.2.0", "pinia": "^2.0.11", "prism-theme-vars": "^0.2.2", "tauri-search": "workspace:*", - "vue": "^3.2.29", + "vue": "^3.2.30", "vue-demi": "^0.12.1", "vue-i18n": "^9.1.9", "vue-router": "^4.0.12" }, "devDependencies": { "@antfu/eslint-config": "^0.16.1", - "@iconify/json": "^2.0.33", - "@intlify/vite-plugin-vue-i18n": "^3.2.1", + "@iconify/json": "^2.0.34", + "@intlify/vite-plugin-vue-i18n": "^3.2.2", "@types/markdown-it-link-attributes": "^3.0.1", "@types/nprogress": "^0.2.0", "@vitejs/plugin-vue": "^2.1.0", - "@vue/compiler-sfc": "^3.2.29", - "@vue/server-renderer": "^3.2.29", + "@vue/compiler-sfc": "^3.2.30", + "@vue/server-renderer": "^3.2.30", "@vue/test-utils": "^2.0.0-rc.18", "critters": "^0.0.16", "cross-env": "^7.0.3", @@ -57,16 +57,16 @@ "typescript": "^4.5.5", "unplugin-auto-import": "^0.5.11", "unplugin-icons": "^0.13.0", - "unplugin-vue-components": "^0.17.15", + "unplugin-vue-components": "^0.17.17", "vite": "^2.7.13", "vite-plugin-inspect": "^0.3.13", "vite-plugin-md": "^0.11.7", - "vite-plugin-pages": "^0.20.1", + "vite-plugin-pages": "^0.20.2", "vite-plugin-pwa": "^0.11.13", "vite-plugin-vue-layouts": "^0.5.0", "vite-plugin-windicss": "^1.6.3", - "vite-ssg": "^0.17.9", - "vitest": "^0.2.6", - "vue-tsc": "^0.31.1" + "vite-ssg": "^0.17.10", + "vitest": "^0.2.7", + "vue-tsc": "^0.31.2" } } diff --git a/packages/docs/pnpm-global/5/pnpm-lock.yaml b/packages/docs/pnpm-global/5/pnpm-lock.yaml new file mode 100644 index 0000000..ad4035b --- /dev/null +++ b/packages/docs/pnpm-global/5/pnpm-lock.yaml @@ -0,0 +1,7 @@ +lockfileVersion: 5.3 + +specifiers: + meili-searchbar: ^2.1.0 + +dependencies: + meili-searchbar: link:../../../../../../../../../Users/ken/pnpm-global/5/node_modules/meili-searchbar diff --git a/packages/docs/src/components/SearchBar.vue b/packages/docs/src/components/SearchBar.vue index a39d7e8..141b675 100644 --- a/packages/docs/src/components/SearchBar.vue +++ b/packages/docs/src/components/SearchBar.vue @@ -1,17 +1,21 @@ diff --git a/packages/docs/src/components/SearchHit.vue b/packages/docs/src/components/SearchHit.vue index fecf59d..61ab6f8 100644 --- a/packages/docs/src/components/SearchHit.vue +++ b/packages/docs/src/components/SearchHit.vue @@ -79,9 +79,9 @@ const searchable =s.indexSettings[doc.value._idx as any].searchableAttributes as
- +
{{doc.hierarchy_lvl0}}
-
{{doc.hierarchy_lvl1}}
+
{{doc.hierarchy_lvl1 || doc.content}}
diff --git a/packages/docs/src/pages/search.vue b/packages/docs/src/pages/search.vue index c702b3c..e0a2236 100644 --- a/packages/docs/src/pages/search.vue +++ b/packages/docs/src/pages/search.vue @@ -66,5 +66,6 @@ onStartTyping(() => { + diff --git a/packages/docs/src/shims.d.ts b/packages/docs/src/shims.d.ts index 3a60923..4f1e8ea 100644 --- a/packages/docs/src/shims.d.ts +++ b/packages/docs/src/shims.d.ts @@ -15,4 +15,4 @@ declare module "*.vue" { export default component; } -declare module "docs-searchbar.js"; \ No newline at end of file +declare module "meili-searchbar"; \ No newline at end of file diff --git a/packages/docs/tsconfig.json b/packages/docs/tsconfig.json index 60f8e64..d1f3585 100644 --- a/packages/docs/tsconfig.json +++ b/packages/docs/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "baseUrl": ".", "module": "ESNext", - "target": "es2016", + "target": "ES2020", "lib": ["DOM", "ESNext"], "strict": true, "esModuleInterop": true, diff --git a/packages/tauri-search/.env.staging b/packages/tauri-search/.env.staging new file mode 100644 index 0000000..db4aab8 --- /dev/null +++ b/packages/tauri-search/.env.staging @@ -0,0 +1,15 @@ +GH_USER="ksnyde" +GH_TOKEN="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" +API_KEY="" +DOCS_PATH="docs" +ADMIN_KEY="MtgOqm4Nc9c2c3d8285f41e3e81d240ee48872b217380d7d80725cdf03dc78d327a19b6f" +SEARCH_KEY="XZEH8BS90ee09c45215a8421c06857bcbde5c1a6797bdf4859a57a3ac1228a2b81df0994" +MEILI_URL="http://localhost:7700" + +VITE_GH_USER="ksnyde" +VITE_GH_TOKEN="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" +VITE_API_KEY="" +VITE_DOCS_PATH="docs" +VITE_ADMIN_KEY="MtgOqm4Nc9c2c3d8285f41e3e81d240ee48872b217380d7d80725cdf03dc78d327a19b6f" +VITE_SEARCH_KEY="XZEH8BS90ee09c45215a8421c06857bcbde5c1a6797bdf4859a57a3ac1228a2b81df0994" +VITE_MEILI_URL="https://search2.tauri.studio" \ No newline at end of file diff --git a/packages/tauri-search/package.json b/packages/tauri-search/package.json index f33f4ef..0ec3360 100644 --- a/packages/tauri-search/package.json +++ b/packages/tauri-search/package.json @@ -5,39 +5,41 @@ "description": "Search Engine for Tauri website", "license": "MIT", "author": "Ken Snyder", - "main": "dist/index.js", - "module": "dist/index.mjs", + "main": "dist/index.cjs", + "module": "dist/index.js", "types": "dist/index.d.ts", + "type": "module", "bin": {}, "scripts": { "build": "run-p build:*", "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": "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", + "clear-caches": "rimraf src/generated/ast && node bin/clear-caches.cjs", + "create-indexes": "node bin/create-indexes.cjs", + "drop-indexes": "node bin/drop-indexes.cjs", + "current-indexes": "node bin/current-indexes.cjs", "lint": "eslint src --ext ts,js,tsx,jsx --fix --no-error-on-unmatched-pattern", "prune": "docker system prune", "delta-update": "run-s rebuild-caches ", "full-update": "run-s drop-indexes clear-caches rebuild-caches create-indexes push-consolidated push-prose push-repos push-typescript", - "push-caches": "node bin/push-cache.js", - "push-consolidated": "node bin/push-consolidated.js", - "push-prose": "node bin/push-prose.js", - "push-repos": "node bin/push-repos.js", - "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", + "full-update:staging": "NODE_ENV=staging pnpm run full-update", + "push-caches": "node bin/push-cache.cjs", + "push-consolidated": "node bin/push-consolidated.cjs", + "push-prose": "node bin/push-prose.cjs", + "push-repos": "node bin/push-repos.cjs", + "push-typescript": "node bin/push-typescript.cjs", + "rebuild-caches": "node bin/rebuild-caches.cjs", + "refresh-prose": "node bin/refresh-prose.cjs", + "refresh-sitemap": "node bin/refresh-sitemap.cjs", + "refresh-repos": "node bin/refresh-repos.cjs", + "refresh-typescript": "node bin/refresh-typescript.cjs", "restart": "docker compose restart", - "sitemap": "node bin/sitemap.js", + "sitemap": "node bin/sitemap.cjs", "test": "vitest run", "test:watch": "vitest watch --ui", - "ts-ast": "node ./bin/ts-ast.js", - "ts-ast-overview": "node ./bin/ts-ast-overview.js", + "ts-ast": "node ./bin/ts-ast.cjs", + "ts-ast-overview": "node ./bin/ts-ast-overview.cjs", "watch": "run-p watch:*", "watch:cli": "tsup src/cli/*.ts --format=esm,cjs --sourcemap -d bin --watch", "watch:npm": "tsup src/index.ts --dts --format=esm,cjs --sourcemap -d dist --watch" @@ -58,9 +60,9 @@ "@type-challenges/utils": "^0.1.1", "@types/markdown-it": "^12.2.3", "@types/node": "^14.18.10", - "@typescript-eslint/eslint-plugin": "^5.10.2", - "@typescript-eslint/parser": "^5.10.2", - "@vitest/ui": "^0.2.6", + "@typescript-eslint/eslint-plugin": "^5.11.0", + "@typescript-eslint/parser": "^5.11.0", + "@vitest/ui": "^0.2.7", "changeset": "^0.2.6", "eslint": "^8.8.0", "eslint-config-prettier": "^8.3.0", @@ -73,13 +75,13 @@ "npm-run-all": "^4.1.5", "prettier": "^2.5.1", "rimraf": "^3.0.2", - "ts-node": "^10.4.0", + "ts-node": "^10.5.0", "tsup": "^5.11.13", "typescript": "^4.5.5", "vite": "^2.7.13", "vite-plugin-dts": "^0.9.9", "vite-plugin-inspect": "^0.3.13", - "vitest": "^0.2.6" + "vitest": "^0.2.7" }, "engines": { "node": ">=14", diff --git a/packages/tauri-search/src/ast/parseMarkdown.ts b/packages/tauri-search/src/ast/parseMarkdown.ts index 74f7168..3463014 100644 --- a/packages/tauri-search/src/ast/parseMarkdown.ts +++ b/packages/tauri-search/src/ast/parseMarkdown.ts @@ -3,7 +3,7 @@ import { readFile } from "fs/promises"; // import xxhash from "xxhash-wasm"; import matter from "gray-matter"; -import {convert} from "html-to-text"; +import { convert } from "html-to-text"; import smd from "simple-markdown-2"; import { ITauriFrontmatter, MarkdownAst } from "~/types/markdown"; diff --git a/packages/tauri-search/src/cli/create-indexes.ts b/packages/tauri-search/src/cli/create-indexes.ts index 38e1ebb..63e7432 100644 --- a/packages/tauri-search/src/cli/create-indexes.ts +++ b/packages/tauri-search/src/cli/create-indexes.ts @@ -1,9 +1,13 @@ /* eslint-disable no-console */ import { createIndexes } from "~/pipelines/createIndexes"; +import { getEnv } from "~/utils/getEnv/node/getEnv"; (async () => { try { - const { skipping, created } = await createIndexes(); + const options = getEnv(); + console.log(`- creating Meilisearch indexes [${options.stage}]`); + + const { skipping, created } = await createIndexes(options); if (skipping.length > 0) { console.log( `- the following indexes -- ${skipping.join( diff --git a/packages/tauri-search/src/cli/drop-indexes.ts b/packages/tauri-search/src/cli/drop-indexes.ts index ad3d4ee..ea869b3 100644 --- a/packages/tauri-search/src/cli/drop-indexes.ts +++ b/packages/tauri-search/src/cli/drop-indexes.ts @@ -1,10 +1,15 @@ /* eslint-disable no-console */ import { ApiModel } from "~/models"; +import { getEnv } from "~/utils/getEnv/node/getEnv"; (async () => { - const active = (await ApiModel().query.currentIndexes()).map((i) => i.name); + const o = getEnv(); + + const active = ( + await ApiModel(o.stage, { admin_key: o.adminKey }).query.currentIndexes() + ).map((i) => i.name); console.log(`- clearing all active indexes: ${active.join(", ")}`); for (const idx of active) { - await ApiModel().query.deleteIndex(idx); + await ApiModel(o.stage, { admin_key: o.adminKey }).query.deleteIndex(idx); } })(); diff --git a/packages/tauri-search/src/cli/push-consolidated.ts b/packages/tauri-search/src/cli/push-consolidated.ts index 22ae16b..8391a31 100644 --- a/packages/tauri-search/src/cli/push-consolidated.ts +++ b/packages/tauri-search/src/cli/push-consolidated.ts @@ -2,15 +2,24 @@ import { pushConsolidatedDocs } from "~/pipelines/pushConsolidatedDocs"; import { communicateTaskStatus } from "~/utils/communicateTaskStatus"; import { ConsolidatedModel } from "~/models"; +import { getEnv } from "~/utils/getEnv/node/getEnv"; (async () => { - console.log(`- pushing all individual models into a consolidated index`); - - const { tasks } = await pushConsolidatedDocs(); + const o = getEnv(); + console.log( + `- pushing all individual doc caches into a consolidated index [${o.stage}]` + ); + const { tasks } = await pushConsolidatedDocs(o); console.log(); console.log( `- all consolidated documents [${tasks.length}] have been pushed to MeiliSearch queue` ); - communicateTaskStatus(ConsolidatedModel(), tasks, { timeout: 75000 }); + await communicateTaskStatus( + ConsolidatedModel(o.stage, { admin_key: o.adminKey }), + tasks, + { + timeout: 75000, + } + ); })(); diff --git a/packages/tauri-search/src/cli/push-prose.ts b/packages/tauri-search/src/cli/push-prose.ts index 2c20635..54ad6b9 100644 --- a/packages/tauri-search/src/cli/push-prose.ts +++ b/packages/tauri-search/src/cli/push-prose.ts @@ -2,13 +2,18 @@ import { pushProseDocs } from "~/pipelines"; import { communicateTaskStatus } from "~/utils/communicateTaskStatus"; import { ProseModel } from "~/models"; +import { getEnv } from "~/utils/getEnv/node/getEnv"; (async () => { - console.log(`- Pushing "prose" documents to MeiliSearch`); - const tasks = await pushProseDocs(); + const o = getEnv(); + console.log(`- Pushing "prose" documents to MeiliSearch [${o.stage}]`); + + const tasks = await pushProseDocs(o); console.log( `- all ${tasks.length} documents were pushed via API; monitoring task status ...` ); - await communicateTaskStatus(ProseModel(), tasks, { timeout: 75000 }); + await communicateTaskStatus(ProseModel(o.stage, { admin_key: o.adminKey }), tasks, { + timeout: 75000, + }); })(); diff --git a/packages/tauri-search/src/cli/push-repos.ts b/packages/tauri-search/src/cli/push-repos.ts index 6192953..5b73e85 100644 --- a/packages/tauri-search/src/cli/push-repos.ts +++ b/packages/tauri-search/src/cli/push-repos.ts @@ -1,12 +1,14 @@ /* eslint-disable no-console */ import { pushRepoDocs } from "~/pipelines"; import { communicateTaskStatus } from "~/utils/communicateTaskStatus"; -import { RepoModel } from ".."; +import { RepoModel } from "~/models"; +import { getEnv } from "~/utils/getEnv/node/getEnv"; (async () => { + const o = getEnv(); console.log(`- Pushing Repo document cache into MeiliSearch`); - const { docs, errors, tasks } = await pushRepoDocs(); + const { docs, errors, tasks } = await pushRepoDocs(o); console.log(); if (errors.length > 0) { console.log( @@ -20,6 +22,6 @@ import { RepoModel } from ".."; `- Completed pushing all ${docs.length} Repo docs to MeiliSearch; monitoring queue status` ); - await communicateTaskStatus(RepoModel(), tasks); + await communicateTaskStatus(RepoModel(o.stage, { admin_key: o.adminKey }), tasks); } })(); diff --git a/packages/tauri-search/src/cli/push-typescript.ts b/packages/tauri-search/src/cli/push-typescript.ts index a871f90..fe5746f 100644 --- a/packages/tauri-search/src/cli/push-typescript.ts +++ b/packages/tauri-search/src/cli/push-typescript.ts @@ -2,10 +2,15 @@ import { ApiModel } from "~/models"; import { pushTypescriptDocs } from "~/pipelines/pushTypescriptDocs"; import { communicateTaskStatus } from "~/utils/communicateTaskStatus"; +import { getEnv } from "~/utils/getEnv/node/getEnv"; (async () => { - console.log(`- pushing Typescript API documents to Meilisearch`); - const { errors, tasks } = await pushTypescriptDocs({ branch: "feat/generate-js-ast" }); + const o = getEnv(); + console.log(`- pushing Typescript API documents to Meilisearch [${o.stage}]`); + const { errors, tasks } = await pushTypescriptDocs({ + ...o, + branch: "feat/generate-js-ast", + }); console.log(); if (errors.length > 0) { @@ -21,6 +26,8 @@ import { communicateTaskStatus } from "~/utils/communicateTaskStatus"; console.log( `- Completed pushing all Typescript docs [${tasks.length}] to MeiliSearch. Now monitoring task progress ...` ); - communicateTaskStatus(ApiModel(), tasks, { timeout: 65000 }); + communicateTaskStatus(ApiModel(o.stage, { admin_key: o.adminKey }), tasks, { + timeout: 65000, + }); } })(); diff --git a/packages/tauri-search/src/cli/refresh-prose.ts b/packages/tauri-search/src/cli/refresh-prose.ts index c0bc601..b4a6b5c 100644 --- a/packages/tauri-search/src/cli/refresh-prose.ts +++ b/packages/tauri-search/src/cli/refresh-prose.ts @@ -1,6 +1,6 @@ /* eslint-disable no-console */ import { refreshProse } from "~/pipelines/refreshProse"; -import { getEnv } from "~/utils/getEnv"; +import { getEnv } from "~/utils/getEnv/node/getEnv"; (async () => { const { repo, branch } = getEnv(); diff --git a/packages/tauri-search/src/cli/refresh-sitemap.ts b/packages/tauri-search/src/cli/refresh-sitemap.ts index 63ebb99..861e908 100644 --- a/packages/tauri-search/src/cli/refresh-sitemap.ts +++ b/packages/tauri-search/src/cli/refresh-sitemap.ts @@ -1,6 +1,6 @@ /* eslint-disable no-console */ import { refreshSitemap } from "~/pipelines/refreshSitemap"; -import { getEnv } from "~/utils/getEnv"; +import { getEnv } from "~/utils/getEnv/node/getEnv"; (async () => { console.log(`- refreshing sitemap for prose content`); diff --git a/packages/tauri-search/src/env.d.ts b/packages/tauri-search/src/env.d.ts new file mode 100644 index 0000000..3cdb6a6 --- /dev/null +++ b/packages/tauri-search/src/env.d.ts @@ -0,0 +1,15 @@ +import { Stage } from "~/types"; + +export interface ImportMeta { + env: { + VITE_TITLE?: string; + VITE_GH_USER?: string; + VITE_GH_TOKEN?: string; + VITE_ADMIN_KEY?: string; + VITE_STAGE?: Stage; + BASE_URL: string; + MODE: string; + PROD: boolean; + DEV: boolean; + }; +} diff --git a/packages/tauri-search/src/generated/repos/documents.json b/packages/tauri-search/src/generated/repos/documents.json index cd1075b..84cab21 100644 --- a/packages/tauri-search/src/generated/repos/documents.json +++ b/packages/tauri-search/src/generated/repos/documents.json @@ -1 +1 @@ -[{"id":"github_tauri_apps_tauri","name":"tauri","description":"Build smaller, faster, and more secure desktop applications with a web frontend.","kind":"code","stars":30251,"watchers":30251,"subscribers":311,"openIssues":138,"forks":743,"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-07T11:27:44Z","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":926,"watchers":926,"subscribers":24,"openIssues":38,"forks":62,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-07T09:21:34Z","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":193,"watchers":193,"subscribers":13,"openIssues":50,"forks":21,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-06T22:23:07Z","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":102,"watchers":102,"subscribers":10,"openIssues":21,"forks":23,"defaultBranch":"dev","language":"TypeScript","topics":["github-actions","hacktoberfest"],"isTemplate":false,"lastUpdated":"2022-02-01T20:21:04Z","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":210,"watchers":210,"subscribers":17,"openIssues":55,"forks":82,"defaultBranch":"dev","language":"JavaScript","topics":["documentation","hacktoberfest","tauri"],"isTemplate":false,"lastUpdated":"2022-02-07T02:17:36Z","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":46,"watchers":46,"subscribers":10,"openIssues":5,"forks":3,"defaultBranch":"dev","language":"TypeScript","topics":[],"isTemplate":false,"lastUpdated":"2022-02-05T12:08:29Z","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":4,"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":3,"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":5,"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":3,"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":21,"watchers":21,"subscribers":6,"openIssues":21,"forks":2,"defaultBranch":"main","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-06T02:23:36Z","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":31,"watchers":31,"subscribers":9,"openIssues":9,"forks":4,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-06T02:23:32Z","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":11,"watchers":11,"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-02-04T13:37:51Z","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":2,"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":13,"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":32,"watchers":32,"subscribers":11,"openIssues":1,"forks":16,"defaultBranch":"crate","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-03T18:39:42Z","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":43,"watchers":43,"subscribers":13,"openIssues":0,"forks":4,"defaultBranch":"dev","language":null,"topics":["awesome","awesome-list","tauri"],"isTemplate":false,"lastUpdated":"2022-02-07T08:36:01Z","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 +[{"id":"github_tauri_apps_tauri","name":"tauri","description":"Build smaller, faster, and more secure desktop applications with a web frontend.","kind":"code","stars":30320,"watchers":30320,"subscribers":311,"openIssues":132,"forks":743,"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-08T02:16:37Z","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":929,"watchers":929,"subscribers":24,"openIssues":37,"forks":62,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-08T00:22:43Z","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":195,"watchers":195,"subscribers":13,"openIssues":51,"forks":21,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-08T01:51:13Z","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":102,"watchers":102,"subscribers":10,"openIssues":20,"forks":23,"defaultBranch":"dev","language":"TypeScript","topics":["github-actions","hacktoberfest"],"isTemplate":false,"lastUpdated":"2022-02-01T20:21:04Z","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":212,"watchers":212,"subscribers":17,"openIssues":55,"forks":82,"defaultBranch":"dev","language":"JavaScript","topics":["documentation","hacktoberfest","tauri"],"isTemplate":false,"lastUpdated":"2022-02-08T01:33:08Z","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":46,"watchers":46,"subscribers":10,"openIssues":5,"forks":3,"defaultBranch":"dev","language":"TypeScript","topics":[],"isTemplate":false,"lastUpdated":"2022-02-05T12:08:29Z","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":21,"watchers":21,"subscribers":6,"openIssues":21,"forks":2,"defaultBranch":"main","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-06T02:23:36Z","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":31,"watchers":31,"subscribers":9,"openIssues":7,"forks":4,"defaultBranch":"dev","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-06T02:23:32Z","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":12,"watchers":12,"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-02-07T17:32:38Z","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":2,"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":13,"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":32,"watchers":32,"subscribers":11,"openIssues":1,"forks":16,"defaultBranch":"crate","language":"Rust","topics":[],"isTemplate":false,"lastUpdated":"2022-02-03T18:39:42Z","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":46,"watchers":46,"subscribers":13,"openIssues":0,"forks":4,"defaultBranch":"dev","language":null,"topics":["awesome","awesome-list","tauri"],"isTemplate":false,"lastUpdated":"2022-02-07T23:35:35Z","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/mappers/ConsolidatedMapper.ts b/packages/tauri-search/src/mappers/ConsolidatedMapper.ts index bfdf1a6..138e112 100644 --- a/packages/tauri-search/src/mappers/ConsolidatedMapper.ts +++ b/packages/tauri-search/src/mappers/ConsolidatedMapper.ts @@ -12,22 +12,28 @@ export const ConsolidatedMapper: ModelMapper< IConsolidatedModel > = (i): IConsolidatedModel => ({ objectID: i.id, - hierarchy_lvl0: isRepoDocument(i) ? i.name : isApiDocument(i) ? i.name : i.title, + hierarchy_lvl0: isRepoDocument(i) + ? i.name + : isApiDocument(i) + ? i.name || null + : i.title, hierarchy_lvl1: isRepoDocument(i) + ? i.topics?.join(" ") || null + : isApiDocument(i) + ? i.module || null + : i.tags?.join(" ") || null, + hierarchy_lvl2: isRepoDocument(i) + ? i.kind === "unknown" + ? null + : i.kind || null + : isApiDocument(i) + ? i.language + : i.sections?.join(" ") || null, + hierarchy_lvl3: isRepoDocument(i) ? i.description || null : isApiDocument(i) ? i.module : i.tags?.join(" ") || null, - hierarchy_lvl2: isRepoDocument(i) - ? i.kind || null - : isApiDocument(i) - ? null - : i.sections?.join(" ") || null, - hierarchy_lvl3: isRepoDocument(i) - ? i.topics?.join(" ") || null - : isApiDocument(i) - ? i.language || null - : i.subSections?.join(" ") || null, hierarchy_lvl4: isRepoDocument(i) ? i.language || null : isApiDocument(i) @@ -51,7 +57,13 @@ export const ConsolidatedMapper: ModelMapper< ? 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, + content: isRepoDocument(i) + ? i.topics?.join(" ") || null + : isApiDocument(i) + ? i.declaration || null + : i.subSections?.join(" ") || null, + + text: isApiDocument(i) ? i.comment || null : i.text || null, rank: isRepoDocument(i) ? IndexRank.repo : isApiDocument(i) diff --git a/packages/tauri-search/src/mappers/ProseMapper.ts b/packages/tauri-search/src/mappers/ProseMapper.ts index f5b8f0b..f0fe6d2 100644 --- a/packages/tauri-search/src/mappers/ProseMapper.ts +++ b/packages/tauri-search/src/mappers/ProseMapper.ts @@ -8,7 +8,10 @@ import { sanitizeDocId } from "~/utils/sanitizeDocId"; */ export const ProseMapper: ModelMapper = (i) => ({ id: sanitizeDocId(`prose_${i.filepath}_${i.filename}`), - title: i.frontmatter.title?.content || i.h1.shift() || "UNKNOWN", + title: + typeof i.frontmatter.title === "object" && "content" in i.frontmatter.title + ? i.frontmatter.title?.content + : i.frontmatter.title || i.h1.shift() || "UNKNOWN", tags: i.frontmatter.tags as string[], category: i.frontmatter.section as string, sections: i.h2.map((i) => i.content), diff --git a/packages/tauri-search/src/models/ConsolidatedModel.ts b/packages/tauri-search/src/models/ConsolidatedModel.ts index 64fb2a0..aa4ea1a 100644 --- a/packages/tauri-search/src/models/ConsolidatedModel.ts +++ b/packages/tauri-search/src/models/ConsolidatedModel.ts @@ -8,6 +8,7 @@ export type IConsolidatedModel = IScrapeSelectorTargets & { symbol: string | null; tags: null | string[]; language: string | null; + text: string | null; }; export const ConsolidatedModel = createModel("consolidated", (c) => @@ -22,14 +23,16 @@ export const ConsolidatedModel = createModel("consolidated", }) .filterable("from", "language", "symbol") .searchable( + "content", "hierarchy_lvl0", + "hierarchy_lvl1", "symbol", "tags", - "hierarchy_lvl3", - "hierarchy_lvl2", - "hierarchy_lvl1", "rank", - "content" + "hierarchy_lvl3", + "hierarchy_lvl2" + ) + .rankingRules((r) => + r.words().typo().sort().attribute().proximity().ASC("rank").exactness() ) - .rankingRules((r) => r.words().typo().sort().attribute().proximity().ASC("rank").exactness()) ); diff --git a/packages/tauri-search/src/pipelines/createIndexes.ts b/packages/tauri-search/src/pipelines/createIndexes.ts index ce46569..88f265d 100644 --- a/packages/tauri-search/src/pipelines/createIndexes.ts +++ b/packages/tauri-search/src/pipelines/createIndexes.ts @@ -1,22 +1,36 @@ /* eslint-disable no-console */ import { ProseModel, ApiModel, RepoModel, ConsolidatedModel } from "~/models"; +import { ISearchModel, Stage, IEnv } from "~/types"; +import { getEnv } from "~/utils/getEnv/esm/getEnv"; -const models = { - api: ApiModel(), - repo: RepoModel(), - prose: ProseModel(), - consolidated: ConsolidatedModel(), -}; +const models = (stage: Stage, admin_key: string) => ({ + api: ApiModel(stage, { admin_key }), + repo: RepoModel(stage, { admin_key }), + prose: ProseModel(stage, { admin_key }), + consolidated: ConsolidatedModel(stage, { admin_key }), +}); /** * Will add -- and configure -- all known indexes to MeiliSearch which aren't already * present in server. */ -export async function createIndexes() { - const skipping = (await ProseModel().query.currentIndexes()).map((i) => i.name); +export async function createIndexes(options: Partial = {}) { + const { stage, adminKey } = { ...getEnv(), ...options }; + if (!adminKey && stage !== "local") { + throw new Error( + `- To publish to ${stage}, you will need set an ADMIN key!\n${Object.keys( + import.meta.env || {} + ).join(", ")}` + ); + } + const skipping = ( + await ProseModel(stage, { admin_key: adminKey }).query.currentIndexes() + ).map((i) => i.name); const created: string[] = []; - for (const key of Object.keys(models)) { - const model = models[key as keyof typeof models]; + for (const key of ["api", "repo", "prose", "consolidated"]) { + const model = models(stage, adminKey || "")[ + key as keyof typeof models + ] as ISearchModel; if (!skipping.includes(model.name)) { created.push(key); // create the index and configure it diff --git a/packages/tauri-search/src/pipelines/pushConsolidatedDocs.ts b/packages/tauri-search/src/pipelines/pushConsolidatedDocs.ts index 45c6615..a81729b 100644 --- a/packages/tauri-search/src/pipelines/pushConsolidatedDocs.ts +++ b/packages/tauri-search/src/pipelines/pushConsolidatedDocs.ts @@ -1,8 +1,8 @@ import { ConsolidatedMapper } from "~/mappers/ConsolidatedMapper"; import { CacheKind, getCache } from "~/utils/getCache"; -import { getEnv, IEnv } from "~/utils/getEnv"; +import { getEnv } from "~/utils/getEnv/esm/getEnv"; import { ConsolidatedModel, IConsolidatedModel } from "~/models"; -import { IMonitoredTask } from "~/types"; +import { IMonitoredTask, IEnv } from "~/types"; export async function pushConsolidatedDocs(options: Partial = {}) { const o = { ...getEnv(), ...options }; @@ -24,7 +24,9 @@ export async function pushConsolidatedDocs(options: Partial = {}) { const errors: IConsolidatedModel[] = []; const tasks: IMonitoredTask[] = []; for (const doc of docs) { - const res = await ConsolidatedModel().query.addOrReplaceDocuments(doc); + const res = await ConsolidatedModel(o.stage, { + admin_key: o.adminKey, + }).query.addOrReplaceDocuments(doc); if (res.status !== "enqueued") { errors.push(doc); } else { diff --git a/packages/tauri-search/src/pipelines/pushProseDocs.ts b/packages/tauri-search/src/pipelines/pushProseDocs.ts index e30fa86..5675060 100644 --- a/packages/tauri-search/src/pipelines/pushProseDocs.ts +++ b/packages/tauri-search/src/pipelines/pushProseDocs.ts @@ -1,20 +1,21 @@ import { ProseModel } from "~/models/ProseModel"; import { CacheKind, getCache } from "~/utils/getCache"; -import { getEnv, IEnv } from "~/utils/getEnv"; -import { IMonitoredTask } from "~/types"; +import { getEnv } from "~/utils/getEnv/esm/getEnv"; +import { IMonitoredTask, IEnv } from "~/types"; /** * Pushes the cached prose documents into the MeiliSearch "prose" index */ export async function pushProseDocs(options: Partial = {}) { const o = { ...getEnv(), ...options }; + const { cache } = await getCache(CacheKind.proseDocs, o); const tasks: IMonitoredTask[] = []; for (const doc of cache) { tasks.push( - await ProseModel() + await ProseModel(o.stage, { admin_key: o.adminKey }) .query.addOrReplaceDocuments(doc) .then((i) => ({ docId: doc.id, taskId: i.uid })) ); diff --git a/packages/tauri-search/src/pipelines/pushRepoDocs.ts b/packages/tauri-search/src/pipelines/pushRepoDocs.ts index f36aff4..920817f 100644 --- a/packages/tauri-search/src/pipelines/pushRepoDocs.ts +++ b/packages/tauri-search/src/pipelines/pushRepoDocs.ts @@ -1,7 +1,7 @@ import { IRepoModel, RepoModel } from "~/models"; import { CacheKind, getCache } from "~/utils/getCache"; -import { getEnv, IEnv } from "~/utils/getEnv"; -import { IMonitoredTask } from ".."; +import { getEnv } from "~/utils/getEnv/esm/getEnv"; +import { IMonitoredTask, IEnv } from "~/types"; /** * Pushes the cached REPO documents into the MeiliSearch "repo" index @@ -13,7 +13,9 @@ export async function pushRepoDocs(options: Partial = {}) { const tasks: IMonitoredTask[] = []; for (const doc of docs) { - const res = await RepoModel().query.addOrReplaceDocuments(doc); + const res = await RepoModel(o.stage, { + admin_key: o.adminKey, + }).query.addOrReplaceDocuments(doc); if (res.status !== "enqueued") { errors.push(doc); } else { diff --git a/packages/tauri-search/src/pipelines/pushTypescriptDocs.ts b/packages/tauri-search/src/pipelines/pushTypescriptDocs.ts index 350bf43..9352420 100644 --- a/packages/tauri-search/src/pipelines/pushTypescriptDocs.ts +++ b/packages/tauri-search/src/pipelines/pushTypescriptDocs.ts @@ -1,8 +1,8 @@ import { ApiModel, IApiModel } from "~/models"; -import { IMonitoredTask } from "~/types"; +import { IMonitoredTask, IEnv } from "~/types"; import { CacheKind, getCache } from "~/utils/getCache"; -import { getEnv, IEnv } from "~/utils/getEnv"; -import { refreshTypescript } from "."; +import { getEnv } from "~/utils/getEnv/esm/getEnv"; +import { refreshTypescript } from "./refreshTypescript"; /** * Iterates over each Typescript module and all of the @@ -20,7 +20,9 @@ export async function pushTypescriptDocs(options: Partial = {}) { const tasks: IMonitoredTask[] = []; for (const doc of docs) { - const res = await ApiModel().query.addOrReplaceDocuments(doc); + const res = await ApiModel(o.stage, { + admin_key: o.adminKey, + }).query.addOrReplaceDocuments(doc); if (res.status !== "enqueued") { errors.push(doc); } else { diff --git a/packages/tauri-search/src/pipelines/refreshProse.ts b/packages/tauri-search/src/pipelines/refreshProse.ts index 89fae2b..36106fa 100644 --- a/packages/tauri-search/src/pipelines/refreshProse.ts +++ b/packages/tauri-search/src/pipelines/refreshProse.ts @@ -4,9 +4,10 @@ import { join } from "node:path"; import { parseMarkdown } from "~/ast/parseMarkdown"; import { ProseMapper } from "~/mappers"; import { IProseModel } from "~/models/ProseModel"; +import { IEnv } from "~/types"; import { flattenSitemap } from "~/utils/convertSitemap"; import { CacheKind, getCache } from "~/utils/getCache"; -import { getEnv, IEnv } from "~/utils/getEnv"; +import { getEnv } from "~/utils/getEnv/esm/getEnv"; import { writeCacheFile } from "~/utils/writeCacheFile"; import { refreshSitemap } from "./refreshSitemap"; diff --git a/packages/tauri-search/src/pipelines/refreshSitemap.ts b/packages/tauri-search/src/pipelines/refreshSitemap.ts index 4e1f85a..6e4ca98 100644 --- a/packages/tauri-search/src/pipelines/refreshSitemap.ts +++ b/packages/tauri-search/src/pipelines/refreshSitemap.ts @@ -1,8 +1,8 @@ import { join } from "path"; -import { GithubContentsResp } from "~/types"; +import { GithubContentsResp, IEnv } from "~/types"; import { flattenSitemap, IFlatSitemap, sitemapDictionary } from "~/utils/convertSitemap"; import { CacheKind, getCache } from "~/utils/getCache"; -import { getEnv, IEnv } from "~/utils/getEnv"; +import { getEnv } from "~/utils/getEnv/esm/getEnv"; import { getDirectory } from "~/utils/github/getDirectory"; import { writeCacheFile } from "~/utils/writeCacheFile"; diff --git a/packages/tauri-search/src/pipelines/refreshTypescript.ts b/packages/tauri-search/src/pipelines/refreshTypescript.ts index 0ad101b..7acf85d 100644 --- a/packages/tauri-search/src/pipelines/refreshTypescript.ts +++ b/packages/tauri-search/src/pipelines/refreshTypescript.ts @@ -1,10 +1,11 @@ import { parseTypescriptAst } from "~/ast/parseTypescriptAst"; import { TypescriptMapper } from "~/mappers"; import { CacheKind, getCache } from "~/utils/getCache"; -import { getEnv, IEnv } from "~/utils/getEnv"; +import { getEnv } from "~/utils/getEnv/esm/getEnv"; import { getRepoFile } from "~/utils/github/getRepoFile"; import { writeCacheFile } from "~/utils/writeCacheFile"; -import { IApiModel, TypescriptBlock } from ".."; +import { TypescriptBlock, IEnv } from "~/types"; +import { IApiModel } from "~/models"; /** * Refreshes the document cache diff --git a/packages/tauri-search/src/types/env.ts b/packages/tauri-search/src/types/env.ts new file mode 100644 index 0000000..6e021b0 --- /dev/null +++ b/packages/tauri-search/src/types/env.ts @@ -0,0 +1,22 @@ +import { Stage } from "./model"; + +export interface IEnv { + org: string; + repo: string; + branch: string; + + stage: Stage; + + docsPath: string; + /** + * the full filename path to the AST JSON file exported by + */ + tsAstPath: string; + + adminKey?: string; + searchKey?: string; + + github_token?: string; + github_user?: string; + force?: boolean; +} diff --git a/packages/tauri-search/src/types/index.ts b/packages/tauri-search/src/types/index.ts index f86aee0..c8df113 100644 --- a/packages/tauri-search/src/types/index.ts +++ b/packages/tauri-search/src/types/index.ts @@ -1,6 +1,7 @@ export * from "./scraper"; export * from "./ts-ast"; export * from "./apis"; +export * from "./env"; export * from "./github"; export * from "./type-guards"; export * from "./mapping"; diff --git a/packages/tauri-search/src/types/model.ts b/packages/tauri-search/src/types/model.ts index daea5ff..cbe07c6 100644 --- a/packages/tauri-search/src/types/model.ts +++ b/packages/tauri-search/src/types/model.ts @@ -73,3 +73,7 @@ export type ISearchModel = { }; export type ISearchConfig = Omit, "query">; + +export type PartialModel = Omit>, "index"> & { + index: Partial["index"]>; +}; diff --git a/packages/tauri-search/src/utils/MeiliSearchApi.ts b/packages/tauri-search/src/utils/MeiliSearchApi.ts index 93a8b89..f284b26 100644 --- a/packages/tauri-search/src/utils/MeiliSearchApi.ts +++ b/packages/tauri-search/src/utils/MeiliSearchApi.ts @@ -10,14 +10,14 @@ import { MsIndexStatusResponse, IMeilisearchIndexSettings, IMeiliSearchQueryApi, - ISearchConfig, IMeilisearchAllTasks, + ISearchConfig, } from "~/types"; -import { getEnv } from "./getEnv"; export interface MeiliSearchOptions { url?: string; search_key?: string; + admin_key?: string; } export type PagingOptions = { limit?: number; @@ -28,16 +28,11 @@ export type ApiOptions = Omit; export function MeiliSearchApi( model: ISearchConfig, - options: MeiliSearchOptions = {} + searchOptions: MeiliSearchOptions = {} ) { - const baseURL = options.url || "http://localhost:7700"; + const baseURL = searchOptions.url || "http://localhost:7700"; const idx = model.name; - const { adminKey, searchKey } = getEnv(); - - const headers = { - "X-Meili-API-Key": options.search_key || adminKey || searchKey || "", - "Access-Control-Allow-Origin": "*", - }; + // const { adminKey, searchKey } = getEnv(); const call = async ( method: "get" | "post" | "put" | "delete", @@ -45,16 +40,24 @@ export function MeiliSearchApi( options: AxiosRequestConfig = {} ): Promise => { const fullUrl = `${baseURL}/${url.startsWith("/") ? url.slice(1) : url}`; + const token = searchOptions.admin_key || searchOptions.search_key || ""; + const headers: Record = { + "Access-Control-Allow-Origin": "*", + "Content-Type": "application/json", + }; + if (token && token.length > 0) { + headers["X-Meili-API-Key"] = token; + headers["Authorization"] = `Bearer ${token}`; + } const res = await axios({ method, url: fullUrl, ...{ - ...options, headers: { - "Content-Type": options.data ? "application/json" : "application/text", ...headers, }, + ...options, }, }).catch((err) => { if (axios.isAxiosError(err)) { diff --git a/packages/tauri-search/src/utils/createModel.ts b/packages/tauri-search/src/utils/createModel.ts index f6811a3..a9bccbe 100644 --- a/packages/tauri-search/src/utils/createModel.ts +++ b/packages/tauri-search/src/utils/createModel.ts @@ -1,83 +1,8 @@ import { SERVERS } from "~/constants"; -import { - IndexApi, - ISearchConfig, - ISearchModel, - RankingRule, - RankingRulesApi, - Stage, -} from "~/types"; -import { getEnv } from "./getEnv"; -import { MeiliSearchApi } from "./MeiliSearchApi"; -import { rankingRules } from "./model-api/rankingRules"; - -export type PartialModel = Omit>, "index"> & { - index: Partial["index"]>; -}; - -const modelConfigApi = (update: (s: PartialModel) => void) => { - const api = (): IndexApi< - TDoc, - TExclude - > => - ({ - pk(pk: string) { - update({ index: { pk } }); - return api(); - }, - searchable(...props) { - if (props?.length > 0) { - update({ index: { searchable: props } }); - } - return api(); - }, - displayed(...props) { - if (props?.length > 0) { - update({ index: { displayed: props } }); - } - return api(); - }, - distinct(...props) { - if (props?.length > 0) { - update({ index: { distinct: props } }); - } - return api(); - }, - filterable(...props) { - if (props?.length > 0) { - update({ index: { filterable: props } }); - } - return api(); - }, - sortable(...props) { - if (props?.length > 0) { - update({ index: { sortable: props } }); - } - return api(); - }, - stopWords(words) { - update({ index: { stopWords: words } }); - return api(); - }, - - synonyms(synonyms) { - update({ index: { synonyms } }); - return api(); - }, - - rankingRules(cb: (r: RankingRulesApi) => void) { - const updateRules = (r: RankingRule[]) => { - update({ index: { rules: r } }); - }; - const ruleApi = rankingRules(updateRules); - cb(ruleApi); - - return api(); - }, - } as IndexApi); - - return api(); -}; +import { IndexApi, ISearchConfig, ISearchModel, PartialModel, Stage } from "~/types"; +import { getEnv } from "./getEnv/esm/getEnv"; +import { MeiliSearchApi, MeiliSearchOptions } from "./MeiliSearchApi"; +import { modelConfigApi } from "./model-api/modelConfigApi"; export const createModel = >( /** the MeiliSearch index name which this model is servicing */ @@ -101,14 +26,15 @@ export const createModel = >( cb(modelConfigApi(updateState)); } - return (stage?: Stage) => { - const url = stage ? SERVERS[stage]?.url : SERVERS[getEnv().stage]?.url; - const search_key = stage - ? SERVERS[stage]?.search_key - : SERVERS[getEnv().stage]?.search_key; + return (stage?: Stage, options: MeiliSearchOptions = {}) => { + const { adminKey, searchKey, stage: s } = stage ? { ...getEnv(), stage } : getEnv(); + + const url = SERVERS[s]?.url; + const search_key = SERVERS[s]?.search_key || searchKey; + const admin_key: string | undefined = adminKey || options.admin_key || ""; return { ...state, - query: MeiliSearchApi(state, { url, search_key }), + query: MeiliSearchApi(state, { url, search_key, admin_key, ...options }), toString() { return `Model(${name}[${state.index.pk}])`; }, diff --git a/packages/tauri-search/src/utils/getCache.ts b/packages/tauri-search/src/utils/getCache.ts index aca80fd..4447b56 100644 --- a/packages/tauri-search/src/utils/getCache.ts +++ b/packages/tauri-search/src/utils/getCache.ts @@ -2,7 +2,7 @@ import { readFile } from "fs/promises"; import { IDocsSitemap } from "~/pipelines"; import { IApiModel, IProseModel, IRepoModel } from ".."; -import { getEnv } from "./getEnv"; +import { getEnv } from "./getEnv/node/getEnv"; export enum CacheKind { sitemap = "Sitemap of Markdown files", diff --git a/packages/tauri-search/src/utils/getEnv/esm/getEnv.ts b/packages/tauri-search/src/utils/getEnv/esm/getEnv.ts new file mode 100644 index 0000000..b9b8dd3 --- /dev/null +++ b/packages/tauri-search/src/utils/getEnv/esm/getEnv.ts @@ -0,0 +1,28 @@ +import { IEnv, Stage } from "~/types"; + +export function getEnv(): IEnv { + return { + org: (import.meta?.env?.ORG as string) || "tauri-apps", + repo: (import.meta?.env?.REPO as string) || "tauri-docs", + branch: (import.meta?.env?.BRANCH as string) || "dev", + stage: (import.meta?.env?.NODE_ENV as Stage) || "local", + docsPath: (import.meta?.env?.DOCS_PATH as string) || "docs", + tsAstPath: (import.meta?.env?.TS_AST_PATH as string) || "docs/api/js/js-api.json", + + adminKey: + (import.meta?.env?.ADMIN_KEY as string) || + (import.meta?.env?.VITE_ADMIN_KEY as string) || + undefined, + searchKey: + (import.meta?.env?.SEARCH_KEY as string) || + (import.meta?.env?.VITE_SEARCH_KEY as string) || + undefined, + + github_token: + (import.meta?.env?.GH_TOKEN as string | undefined) || + (import.meta?.env?.GITHUB_TOKEN as string | undefined) || + undefined, + github_user: (import.meta?.env?.GH_USER as string | undefined) || undefined, + force: import.meta?.env?.FORCE ? Boolean(import.meta?.env?.FORCE) : false, + }; +} diff --git a/packages/tauri-search/src/utils/getEnv.ts b/packages/tauri-search/src/utils/getEnv/node/getEnv.ts similarity index 66% rename from packages/tauri-search/src/utils/getEnv.ts rename to packages/tauri-search/src/utils/getEnv/node/getEnv.ts index 1afcf16..95d4bdb 100644 --- a/packages/tauri-search/src/utils/getEnv.ts +++ b/packages/tauri-search/src/utils/getEnv/node/getEnv.ts @@ -1,26 +1,5 @@ import { config } from "dotenv"; -import { Stage } from "~/types"; - -export interface IEnv { - org: string; - repo: string; - branch: string; - - stage: Stage; - - docsPath: string; - /** - * the full filename path to the AST JSON file exported by - */ - tsAstPath: string; - - adminKey?: string; - searchKey?: string; - - github_token?: string; - github_user?: string; - force?: boolean; -} +import { IEnv, Stage } from "~/types"; export function getEnv(): IEnv { config(); diff --git a/packages/tauri-search/src/utils/github/getDirectory.ts b/packages/tauri-search/src/utils/github/getDirectory.ts index 704637a..d984b0c 100644 --- a/packages/tauri-search/src/utils/github/getDirectory.ts +++ b/packages/tauri-search/src/utils/github/getDirectory.ts @@ -1,6 +1,6 @@ import { GITHUB_API_BASE } from "~/constants"; -import { getEnv, IEnv } from "../getEnv"; -import {GithubContentsResp } from "~/types"; +import { getEnv, IEnv } from "../getEnv/node/getEnv"; +import { GithubContentsResp } from "~/types"; import axios from "axios"; /** @@ -9,7 +9,7 @@ import axios from "axios"; export async function getDirectory(o: IEnv) { const { github_token, github_user } = getEnv(); const url = `${GITHUB_API_BASE}/repos/${o.org}/${o.repo}/contents/${o.docsPath}?ref=${o.branch}`; - + try { const res = await axios.get(url, { httpAgent: "Tauri Search", @@ -31,4 +31,4 @@ export async function getDirectory(o: IEnv) { }` ); } -} \ No newline at end of file +} diff --git a/packages/tauri-search/src/utils/github/getRepo.ts b/packages/tauri-search/src/utils/github/getRepo.ts index 53c1051..782d700 100644 --- a/packages/tauri-search/src/utils/github/getRepo.ts +++ b/packages/tauri-search/src/utils/github/getRepo.ts @@ -1,7 +1,7 @@ import axios from "axios"; import { GITHUB_API_BASE } from "~/constants"; import { GithubRepoResp } from "~/types"; -import { getEnv } from "../getEnv"; +import { getEnv } from "../getEnv/node/getEnv"; export async function getRepo(repo: `${string}/${string}`): Promise { const url = `${GITHUB_API_BASE}/repos/${repo}`; diff --git a/packages/tauri-search/src/utils/github/getRepoReadme.ts b/packages/tauri-search/src/utils/github/getRepoReadme.ts index 10bd49b..aa8aa52 100644 --- a/packages/tauri-search/src/utils/github/getRepoReadme.ts +++ b/packages/tauri-search/src/utils/github/getRepoReadme.ts @@ -1,7 +1,7 @@ import axios from "axios"; import { GITHUB_API_BASE } from "~/constants"; import { GithubContentsResp } from "~/types"; -import { getEnv } from "../getEnv"; +import { getEnv } from "../getEnv/node/getEnv"; /** returns the markdown text in the README.md file in the root of a repo */ export async function getRepoReadme( diff --git a/packages/tauri-search/src/utils/model-api/modelConfigApi.ts b/packages/tauri-search/src/utils/model-api/modelConfigApi.ts new file mode 100644 index 0000000..cb43564 --- /dev/null +++ b/packages/tauri-search/src/utils/model-api/modelConfigApi.ts @@ -0,0 +1,68 @@ +import { IndexApi, PartialModel, RankingRule, RankingRulesApi } from "~/types"; +import { rankingRules } from "./rankingRules"; + +export const modelConfigApi = ( + update: (s: PartialModel) => void +) => { + const api = (): IndexApi< + TDoc, + TExclude + > => + ({ + pk(pk: string) { + update({ index: { pk } }); + return api(); + }, + searchable(...props) { + if (props?.length > 0) { + update({ index: { searchable: props } }); + } + return api(); + }, + displayed(...props) { + if (props?.length > 0) { + update({ index: { displayed: props } }); + } + return api(); + }, + distinct(...props) { + if (props?.length > 0) { + update({ index: { distinct: props } }); + } + return api(); + }, + filterable(...props) { + if (props?.length > 0) { + update({ index: { filterable: props } }); + } + return api(); + }, + sortable(...props) { + if (props?.length > 0) { + update({ index: { sortable: props } }); + } + return api(); + }, + stopWords(words) { + update({ index: { stopWords: words } }); + return api(); + }, + + synonyms(synonyms) { + update({ index: { synonyms } }); + return api(); + }, + + rankingRules(cb: (r: RankingRulesApi) => void) { + const updateRules = (r: RankingRule[]) => { + update({ index: { rules: r } }); + }; + const ruleApi = rankingRules(updateRules); + cb(ruleApi); + + return api(); + }, + } as IndexApi); + + return api(); +}; diff --git a/packages/tauri-search/vite.config.ts b/packages/tauri-search/vite.config.ts index be98edf..fbd4b3e 100644 --- a/packages/tauri-search/vite.config.ts +++ b/packages/tauri-search/vite.config.ts @@ -2,6 +2,9 @@ import path from "path"; import { defineConfig, UserConfig } from "vite"; import inspect from "vite-plugin-inspect"; import dts from "vite-plugin-dts"; +import { config } from "dotenv"; + +config(); export default defineConfig({ resolve: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4dd5617..085c663 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,13 +13,13 @@ importers: packages/docs: specifiers: '@antfu/eslint-config': ^0.16.1 - '@iconify/json': ^2.0.33 - '@intlify/vite-plugin-vue-i18n': ^3.2.1 + '@iconify/json': ^2.0.34 + '@intlify/vite-plugin-vue-i18n': ^3.2.2 '@types/markdown-it-link-attributes': ^3.0.1 '@types/nprogress': ^0.2.0 '@vitejs/plugin-vue': ^2.1.0 - '@vue/compiler-sfc': ^3.2.29 - '@vue/server-renderer': ^3.2.29 + '@vue/compiler-sfc': ^3.2.30 + '@vue/server-renderer': ^3.2.30 '@vue/test-utils': ^2.0.0-rc.18 '@vueuse/core': ^7.5.5 '@vueuse/head': ^0.7.5 @@ -35,9 +35,10 @@ importers: inferred-types: ^0.18.4 jsdom: ^19.0.0 markdown-it: ^12.3.2 - markdown-it-expandable: ^1.0.0 + markdown-it-expandable: ^1.0.2 markdown-it-link-attributes: ^4.0.0 markdown-it-prism: ^2.2.2 + meili-searchbar: ^2.1.0 nprogress: ^0.2.0 pinia: ^2.0.11 prism-theme-vars: ^0.2.2 @@ -45,47 +46,48 @@ importers: typescript: ^4.5.5 unplugin-auto-import: ^0.5.11 unplugin-icons: ^0.13.0 - unplugin-vue-components: ^0.17.15 + unplugin-vue-components: ^0.17.17 vite: ^2.7.13 vite-plugin-inspect: ^0.3.13 vite-plugin-md: ^0.11.7 - vite-plugin-pages: ^0.20.1 + vite-plugin-pages: ^0.20.2 vite-plugin-pwa: ^0.11.13 vite-plugin-vue-layouts: ^0.5.0 vite-plugin-windicss: ^1.6.3 - vite-ssg: ^0.17.9 - vitest: ^0.2.6 - vue: ^3.2.29 + vite-ssg: ^0.17.10 + vitest: ^0.2.7 + vue: ^3.2.30 vue-demi: ^0.12.1 vue-i18n: ^9.1.9 vue-router: ^4.0.12 - vue-tsc: ^0.31.1 + vue-tsc: ^0.31.2 dependencies: - '@vueuse/core': 7.5.5_vue@3.2.29 - '@vueuse/head': 0.7.5_vue@3.2.29 + '@vueuse/core': 7.5.5_vue@3.2.30 + '@vueuse/head': 0.7.5_vue@3.2.30 date-fns: 2.28.0 docs-searchbar.js: 2.1.0 - floating-vue: 2.0.0-beta.5_vue@3.2.29 + floating-vue: 2.0.0-beta.5_vue@3.2.30 inferred-types: 0.18.4 - markdown-it-expandable: 1.0.0_markdown-it@12.3.2 + markdown-it-expandable: 1.0.2_markdown-it@12.3.2 + meili-searchbar: 2.1.0 nprogress: 0.2.0 - pinia: 2.0.11_typescript@4.5.5+vue@3.2.29 + pinia: 2.0.11_typescript@4.5.5+vue@3.2.30 prism-theme-vars: 0.2.2 tauri-search: link:../tauri-search - vue: 3.2.29 - vue-demi: 0.12.1_vue@3.2.29 - vue-i18n: 9.1.9_vue@3.2.29 - vue-router: 4.0.12_vue@3.2.29 + vue: 3.2.30 + vue-demi: 0.12.1_vue@3.2.30 + vue-i18n: 9.1.9_vue@3.2.30 + vue-router: 4.0.12_vue@3.2.30 devDependencies: '@antfu/eslint-config': 0.16.1_eslint@8.8.0+typescript@4.5.5 - '@iconify/json': 2.0.33 - '@intlify/vite-plugin-vue-i18n': 3.2.1_vite@2.7.13+vue-i18n@9.1.9 + '@iconify/json': 2.0.34 + '@intlify/vite-plugin-vue-i18n': 3.2.2_vite@2.7.13+vue-i18n@9.1.9 '@types/markdown-it-link-attributes': 3.0.1 '@types/nprogress': 0.2.0 - '@vitejs/plugin-vue': 2.1.0_vite@2.7.13+vue@3.2.29 - '@vue/compiler-sfc': 3.2.29 - '@vue/server-renderer': 3.2.29_vue@3.2.29 - '@vue/test-utils': 2.0.0-rc.18_vue@3.2.29 + '@vitejs/plugin-vue': 2.1.0_vite@2.7.13+vue@3.2.30 + '@vue/compiler-sfc': 3.2.30 + '@vue/server-renderer': 3.2.30_vue@3.2.30 + '@vue/test-utils': 2.0.0-rc.18_vue@3.2.30 critters: 0.0.16 cross-env: 7.0.3 dotenv: 14.3.2 @@ -98,18 +100,18 @@ importers: markdown-it-prism: 2.2.2 typescript: 4.5.5 unplugin-auto-import: 0.5.11_@vueuse+core@7.5.5+vite@2.7.13 - unplugin-icons: 0.13.0_156ab524000ac0f29e01f162b9943b71 - unplugin-vue-components: 0.17.15_vite@2.7.13+vue@3.2.29 + unplugin-icons: 0.13.0_ce60a1b69356065690c534e9989aa6a5 + unplugin-vue-components: 0.17.17_vite@2.7.13+vue@3.2.30 vite: 2.7.13 vite-plugin-inspect: 0.3.13_vite@2.7.13 vite-plugin-md: 0.11.7_vite@2.7.13 - vite-plugin-pages: 0.20.1_156ab524000ac0f29e01f162b9943b71 + vite-plugin-pages: 0.20.2_ce60a1b69356065690c534e9989aa6a5 vite-plugin-pwa: 0.11.13_vite@2.7.13 - vite-plugin-vue-layouts: 0.5.0_5be28afadb16af157591decefdfd37a0 + vite-plugin-vue-layouts: 0.5.0_5b0ad8637388dea40b9dd470d0b39363 vite-plugin-windicss: 1.6.3_vite@2.7.13 - vite-ssg: 0.17.9_1ede6668370ad42aad1df87e2fa73e29 - vitest: 0.2.6_jsdom@19.0.0 - vue-tsc: 0.31.1_typescript@4.5.5 + vite-ssg: 0.17.10_e5d54036a1dad4d2fb18754cb187ddb6 + vitest: 0.2.7_jsdom@19.0.0 + vue-tsc: 0.31.2_typescript@4.5.5 packages/tauri-search: specifiers: @@ -118,9 +120,9 @@ importers: '@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 - '@typescript-eslint/parser': ^5.10.2 - '@vitest/ui': ^0.2.6 + '@typescript-eslint/eslint-plugin': ^5.11.0 + '@typescript-eslint/parser': ^5.11.0 + '@vitest/ui': ^0.2.7 axios: ^0.25.0 changeset: ^0.2.6 dotenv: ^14.3.2 @@ -141,13 +143,13 @@ importers: prettier: ^2.5.1 rimraf: ^3.0.2 simple-markdown-2: ^0.7.5 - ts-node: ^10.4.0 + ts-node: ^10.5.0 tsup: ^5.11.13 typescript: ^4.5.5 vite: ^2.7.13 vite-plugin-dts: ^0.9.9 vite-plugin-inspect: ^0.3.13 - vitest: ^0.2.6 + vitest: ^0.2.7 dependencies: '@types/html-to-text': 8.0.1 axios: 0.25.0 @@ -163,9 +165,9 @@ importers: '@type-challenges/utils': 0.1.1 '@types/markdown-it': 12.2.3 '@types/node': 14.18.10 - '@typescript-eslint/eslint-plugin': 5.10.2_2595c2126aec4d4b6e944b931dabb4c2 - '@typescript-eslint/parser': 5.10.2_eslint@8.8.0+typescript@4.5.5 - '@vitest/ui': 0.2.6 + '@typescript-eslint/eslint-plugin': 5.11.0_de5a1ddccd75ca1e499b8b8491d3dcba + '@typescript-eslint/parser': 5.11.0_eslint@8.8.0+typescript@4.5.5 + '@vitest/ui': 0.2.7 changeset: 0.2.6 eslint: 8.8.0 eslint-config-prettier: 8.3.0_eslint@8.8.0 @@ -178,22 +180,21 @@ importers: npm-run-all: 4.1.5 prettier: 2.5.1 rimraf: 3.0.2 - ts-node: 10.4.0_d9704c9be36ede869b5c33ef6688872e - tsup: 5.11.13_ts-node@10.4.0+typescript@4.5.5 + ts-node: 10.5.0_d9704c9be36ede869b5c33ef6688872e + tsup: 5.11.13_ts-node@10.5.0+typescript@4.5.5 typescript: 4.5.5 vite: 2.7.13 vite-plugin-dts: 0.9.9_vite@2.7.13 vite-plugin-inspect: 0.3.13_vite@2.7.13 - vitest: 0.2.6_@vitest+ui@0.2.6 + vitest: 0.2.7_@vitest+ui@0.2.7 packages: - /@ampproject/remapping/2.0.2: - resolution: {integrity: sha512-sE8Gx+qSDMLoJvb3QarJJlDQK7SSY4rK3hxp4XsiANeFOmjU46ZI7Y9adAQRJrmbz8zbtZkp3mJTT+rGxtF0XA==} + /@ampproject/remapping/2.1.0: + resolution: {integrity: sha512-d5RysTlJ7hmw5Tw4UxgxcY3lkMe92n8sXCcuLPAyIAHK6j8DefDwtGnVVDgOnv+RnEosulDJ9NPKQL27bDId0g==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/trace-mapping': 0.2.5 - sourcemap-codec: 1.4.8 + '@jridgewell/trace-mapping': 0.3.2 dev: true /@antfu/eslint-config-basic/0.16.1_eslint@8.8.0: @@ -237,8 +238,8 @@ packages: typescript: '>=3.9' dependencies: '@antfu/eslint-config-basic': 0.16.1_eslint@8.8.0 - '@typescript-eslint/eslint-plugin': 5.10.2_2595c2126aec4d4b6e944b931dabb4c2 - '@typescript-eslint/parser': 5.10.2_eslint@8.8.0+typescript@4.5.5 + '@typescript-eslint/eslint-plugin': 5.11.0_de5a1ddccd75ca1e499b8b8491d3dcba + '@typescript-eslint/parser': 5.11.0_eslint@8.8.0+typescript@4.5.5 eslint: 8.8.0 typescript: 4.5.5 transitivePeerDependencies: @@ -252,7 +253,7 @@ packages: dependencies: '@antfu/eslint-config-ts': 0.16.1_eslint@8.8.0+typescript@4.5.5 eslint: 8.8.0 - eslint-plugin-vue: 8.4.0_eslint@8.8.0 + eslint-plugin-vue: 8.4.1_eslint@8.8.0 transitivePeerDependencies: - supports-color - typescript @@ -265,8 +266,8 @@ packages: dependencies: '@antfu/eslint-config-react': 0.16.1_eslint@8.8.0+typescript@4.5.5 '@antfu/eslint-config-vue': 0.16.1_eslint@8.8.0+typescript@4.5.5 - '@typescript-eslint/eslint-plugin': 5.10.2_2595c2126aec4d4b6e944b931dabb4c2 - '@typescript-eslint/parser': 5.10.2_eslint@8.8.0+typescript@4.5.5 + '@typescript-eslint/eslint-plugin': 5.11.0_de5a1ddccd75ca1e499b8b8491d3dcba + '@typescript-eslint/parser': 5.11.0_eslint@8.8.0+typescript@4.5.5 eslint: 8.8.0 eslint-config-standard: 17.0.0-0_d98185a972f50d26baaf376f983a6b27 eslint-plugin-eslint-comments: 3.2.0_eslint@8.8.0 @@ -276,7 +277,7 @@ packages: eslint-plugin-n: 14.0.0_eslint@8.8.0 eslint-plugin-promise: 6.0.0_eslint@8.8.0 eslint-plugin-unicorn: 40.1.0_eslint@8.8.0 - eslint-plugin-vue: 8.4.0_eslint@8.8.0 + eslint-plugin-vue: 8.4.1_eslint@8.8.0 eslint-plugin-yml: 0.12.0_eslint@8.8.0 jsonc-eslint-parser: 2.1.0 yaml-eslint-parser: 0.5.0 @@ -304,13 +305,13 @@ packages: '@types/throttle-debounce': 2.1.0 dev: true - /@apideck/better-ajv-errors/0.3.2_ajv@8.9.0: + /@apideck/better-ajv-errors/0.3.2_ajv@8.10.0: resolution: {integrity: sha512-JdEazx7qiVqTBzzBl5rolRwl5cmhihjfIcpqRzIZjtT6b18liVmDn/VlWpqW4C/qP2hrFFMLRV1wlex8ZVBPTg==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' dependencies: - ajv: 8.9.0 + ajv: 8.10.0 json-schema: 0.4.0 jsonpointer: 5.0.0 leven: 3.1.0 @@ -332,7 +333,7 @@ packages: resolution: {integrity: sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.0.2 + '@ampproject/remapping': 2.1.0 '@babel/code-frame': 7.16.7 '@babel/generator': 7.17.0 '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.17.0 @@ -1479,7 +1480,7 @@ packages: ignore: 4.0.6 import-fresh: 3.3.0 js-yaml: 4.1.0 - minimatch: 3.0.4 + minimatch: 3.0.5 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color @@ -1501,7 +1502,7 @@ packages: dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.3 - minimatch: 3.0.4 + minimatch: 3.0.5 transitivePeerDependencies: - supports-color dev: true @@ -1510,8 +1511,8 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@iconify/json/2.0.33: - resolution: {integrity: sha512-fVSm3rjcUJUX45BIs+AzVXQopI7oWfuxKnHleJKR//bEUK5UfUGHUu7860Wz8z9FuHKVejq+VxJItjFRl96OAQ==} + /@iconify/json/2.0.34: + resolution: {integrity: sha512-cS6RkZEIMKIazihACTjLXlA2uPaTOFAScvq6jmn62DZPwjP5eo2SO7DlkIGoP1w+fvKXOKgWJtLStkJLXWG6Sw==} dependencies: '@iconify/types': 1.0.12 pathe: 0.0.2 @@ -1521,8 +1522,8 @@ packages: resolution: {integrity: sha512-6er6wSGF3hgc1JEZqiGpg21CTCjHBYOUwqLmb2Idzkjiw6ogalGP0ZMLVutCzah+0WB4yP+Zd2oVPN8jvJ+Ftg==} dev: true - /@iconify/utils/1.0.21: - resolution: {integrity: sha512-Rf8vfOH7MI30xyc9rbLFdxnfsfdcrIiIxsoZyEWkUK8P65QsS9PrQXunOc9Wt7uZfJTiX25WMED3WqLKXrRx1Q==} + /@iconify/utils/1.0.23: + resolution: {integrity: sha512-Ktdmpe4mkMXQAnnDUz3s6s5aY/BeVPwHC1d5IhG1bgrWVNWFQNUj8cQPMbHpNCSD9MRC5yGxm9/PGPpOWGJLAg==} dependencies: '@antfu/install-pkg': 0.1.0 '@antfu/utils': 0.3.0 @@ -1550,7 +1551,7 @@ packages: '@intlify/shared': 9.2.0-beta.30 jsonc-eslint-parser: 1.4.1 source-map: 0.6.1 - vue-i18n: 9.1.9_vue@3.2.29 + vue-i18n: 9.1.9_vue@3.2.30 yaml-eslint-parser: 0.3.2 dev: true @@ -1614,8 +1615,8 @@ packages: engines: {node: '>= 12'} dev: true - /@intlify/vite-plugin-vue-i18n/3.2.1_vite@2.7.13+vue-i18n@9.1.9: - resolution: {integrity: sha512-h/nIShN/tljZZfTWAI2jyMwDI7UxSkOPMQbMAh2poC+wO1H9N/qaK6+GqyXG79g3PWtu6Igvfx/JH116cMD9fQ==} + /@intlify/vite-plugin-vue-i18n/3.2.2_vite@2.7.13+vue-i18n@9.1.9: + resolution: {integrity: sha512-d5SCEVanpF8yJFI15q6Q1vXB0t+pChSkbD3riT+/ih4LXqY8ZsUim053f4auhToj40wwVtF/9Fa9zioQbQGQbA==} engines: {node: '>= 12'} peerDependencies: petite-vue-i18n: ^9.0.0 @@ -1634,7 +1635,7 @@ packages: fast-glob: 3.2.11 source-map: 0.6.1 vite: 2.7.13 - vue-i18n: 9.1.9_vue@3.2.29 + vue-i18n: 9.1.9_vue@3.2.30 transitivePeerDependencies: - supports-color dev: true @@ -1653,11 +1654,15 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/trace-mapping/0.2.5: - resolution: {integrity: sha512-K+Eths78fXDFOvQ2hgJhCiI5s+g81r2yXmACBpbn+f2+Qt94PNoTgUcAXPT8DZkhXCsZRsHVWVtY5KIBMcpDqQ==} + /@jridgewell/sourcemap-codec/1.4.10: + resolution: {integrity: sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==} + dev: true + + /@jridgewell/trace-mapping/0.3.2: + resolution: {integrity: sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==} dependencies: '@jridgewell/resolve-uri': 3.0.4 - sourcemap-codec: 1.4.8 + '@jridgewell/sourcemap-codec': 1.4.10 dev: true /@medv/blessed/2.0.1: @@ -1698,7 +1703,7 @@ packages: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: true - /@rollup/plugin-babel/5.3.0_@babel+core@7.17.0+rollup@2.67.0: + /@rollup/plugin-babel/5.3.0_@babel+core@7.17.0+rollup@2.67.1: resolution: {integrity: sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -1711,36 +1716,36 @@ packages: dependencies: '@babel/core': 7.17.0 '@babel/helper-module-imports': 7.16.7 - '@rollup/pluginutils': 3.1.0_rollup@2.67.0 - rollup: 2.67.0 + '@rollup/pluginutils': 3.1.0_rollup@2.67.1 + rollup: 2.67.1 dev: true - /@rollup/plugin-node-resolve/11.2.1_rollup@2.67.0: + /@rollup/plugin-node-resolve/11.2.1_rollup@2.67.1: resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.67.0 + '@rollup/pluginutils': 3.1.0_rollup@2.67.1 '@types/resolve': 1.17.1 builtin-modules: 3.2.0 deepmerge: 4.2.2 is-module: 1.0.0 resolve: 1.22.0 - rollup: 2.67.0 + rollup: 2.67.1 dev: true - /@rollup/plugin-replace/2.4.2_rollup@2.67.0: + /@rollup/plugin-replace/2.4.2_rollup@2.67.1: resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.67.0 + '@rollup/pluginutils': 3.1.0_rollup@2.67.1 magic-string: 0.25.7 - rollup: 2.67.0 + rollup: 2.67.1 dev: true - /@rollup/pluginutils/3.1.0_rollup@2.67.0: + /@rollup/pluginutils/3.1.0_rollup@2.67.1: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: @@ -1749,7 +1754,7 @@ packages: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.1 - rollup: 2.67.0 + rollup: 2.67.1 dev: true /@rollup/pluginutils/4.1.2: @@ -1785,7 +1790,7 @@ packages: resolution: {integrity: sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w==} dependencies: fast-glob: 3.2.11 - minimatch: 3.0.4 + minimatch: 3.0.5 mkdirp: 1.0.4 path-browserify: 1.0.1 dev: true @@ -1861,8 +1866,8 @@ packages: resolution: {integrity: sha512-6iihJ/Pp5fsFJ/aEDGyvT4pHGmCpq7ToQ/yf4bl5SbVAvwpspYJ+v3jO7n8UyjhQVHTy+KNszOozDdv+O6sovQ==} dev: true - /@types/node/17.0.14: - resolution: {integrity: sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==} + /@types/node/17.0.16: + resolution: {integrity: sha512-ydLaGVfQOQ6hI1xK2A5nVh8bl0OGoIfYMxPWHqqYe9bTkWCfqiVvZoh2I/QF2sNSkZzZyROBoTefIEI+PB6iIA==} dev: true /@types/normalize-package-data/2.4.1: @@ -1876,7 +1881,7 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 17.0.14 + '@types/node': 17.0.16 dev: true /@types/throttle-debounce/2.1.0: @@ -1887,8 +1892,8 @@ packages: resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} dev: true - /@typescript-eslint/eslint-plugin/5.10.2_2595c2126aec4d4b6e944b931dabb4c2: - resolution: {integrity: sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==} + /@typescript-eslint/eslint-plugin/5.11.0_de5a1ddccd75ca1e499b8b8491d3dcba: + resolution: {integrity: sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -1898,10 +1903,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.10.2_eslint@8.8.0+typescript@4.5.5 - '@typescript-eslint/scope-manager': 5.10.2 - '@typescript-eslint/type-utils': 5.10.2_eslint@8.8.0+typescript@4.5.5 - '@typescript-eslint/utils': 5.10.2_eslint@8.8.0+typescript@4.5.5 + '@typescript-eslint/parser': 5.11.0_eslint@8.8.0+typescript@4.5.5 + '@typescript-eslint/scope-manager': 5.11.0 + '@typescript-eslint/type-utils': 5.11.0_eslint@8.8.0+typescript@4.5.5 + '@typescript-eslint/utils': 5.11.0_eslint@8.8.0+typescript@4.5.5 debug: 4.3.3 eslint: 8.8.0 functional-red-black-tree: 1.0.1 @@ -1914,8 +1919,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.10.2_eslint@8.8.0+typescript@4.5.5: - resolution: {integrity: sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==} + /@typescript-eslint/parser/5.11.0_eslint@8.8.0+typescript@4.5.5: + resolution: {integrity: sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1924,9 +1929,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.10.2 - '@typescript-eslint/types': 5.10.2 - '@typescript-eslint/typescript-estree': 5.10.2_typescript@4.5.5 + '@typescript-eslint/scope-manager': 5.11.0 + '@typescript-eslint/types': 5.11.0 + '@typescript-eslint/typescript-estree': 5.11.0_typescript@4.5.5 debug: 4.3.3 eslint: 8.8.0 typescript: 4.5.5 @@ -1934,16 +1939,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager/5.10.2: - resolution: {integrity: sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==} + /@typescript-eslint/scope-manager/5.11.0: + resolution: {integrity: sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.10.2 - '@typescript-eslint/visitor-keys': 5.10.2 + '@typescript-eslint/types': 5.11.0 + '@typescript-eslint/visitor-keys': 5.11.0 dev: true - /@typescript-eslint/type-utils/5.10.2_eslint@8.8.0+typescript@4.5.5: - resolution: {integrity: sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==} + /@typescript-eslint/type-utils/5.11.0_eslint@8.8.0+typescript@4.5.5: + resolution: {integrity: sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1952,7 +1957,7 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.10.2_eslint@8.8.0+typescript@4.5.5 + '@typescript-eslint/utils': 5.11.0_eslint@8.8.0+typescript@4.5.5 debug: 4.3.3 eslint: 8.8.0 tsutils: 3.21.0_typescript@4.5.5 @@ -1961,13 +1966,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types/5.10.2: - resolution: {integrity: sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==} + /@typescript-eslint/types/5.11.0: + resolution: {integrity: sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.10.2_typescript@4.5.5: - resolution: {integrity: sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==} + /@typescript-eslint/typescript-estree/5.11.0_typescript@4.5.5: + resolution: {integrity: sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1975,8 +1980,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.10.2 - '@typescript-eslint/visitor-keys': 5.10.2 + '@typescript-eslint/types': 5.11.0 + '@typescript-eslint/visitor-keys': 5.11.0 debug: 4.3.3 globby: 11.1.0 is-glob: 4.0.3 @@ -1987,16 +1992,16 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.10.2_eslint@8.8.0+typescript@4.5.5: - resolution: {integrity: sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==} + /@typescript-eslint/utils/5.11.0_eslint@8.8.0+typescript@4.5.5: + resolution: {integrity: sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.9 - '@typescript-eslint/scope-manager': 5.10.2 - '@typescript-eslint/types': 5.10.2 - '@typescript-eslint/typescript-estree': 5.10.2_typescript@4.5.5 + '@typescript-eslint/scope-manager': 5.11.0 + '@typescript-eslint/types': 5.11.0 + '@typescript-eslint/typescript-estree': 5.11.0_typescript@4.5.5 eslint: 8.8.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0_eslint@8.8.0 @@ -2005,15 +2010,15 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys/5.10.2: - resolution: {integrity: sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==} + /@typescript-eslint/visitor-keys/5.11.0: + resolution: {integrity: sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.10.2 + '@typescript-eslint/types': 5.11.0 eslint-visitor-keys: 3.2.0 dev: true - /@vitejs/plugin-vue/2.1.0_vite@2.7.13+vue@3.2.29: + /@vitejs/plugin-vue/2.1.0_vite@2.7.13+vue@3.2.30: resolution: {integrity: sha512-AZ78WxvFMYd8JmM/GBV6a6SGGTU0GgN/0/4T+FnMMsLzFEzTeAUwuraapy50ifHZsC+G5SvWs86bvaCPTneFlA==} engines: {node: '>=12.0.0'} peerDependencies: @@ -2021,24 +2026,24 @@ packages: vue: ^3.2.25 dependencies: vite: 2.7.13 - vue: 3.2.29 + vue: 3.2.30 dev: true - /@vitest/ui/0.2.6: - resolution: {integrity: sha512-BQnh/6EQmX9JJUvPZYhesCmOBgNSsxjUcA3V6k1SA4twarnuqHp4SiWCugIPzS+JKz5DVk4nep6uA3ukErc1hQ==} + /@vitest/ui/0.2.7: + resolution: {integrity: sha512-P1g9QsoxZGgpzazQr9q9nCRrvP9n2sX9BzuxOaBaAQ9xS/DS5aZZKFN6TKxuhXyp2S0R09UP4ibiO1CCSVmcGw==} dependencies: sirv: 2.0.2 dev: true - /@volar/code-gen/0.31.1: - resolution: {integrity: sha512-HsUNJHBdq4vGxenYlREqtBNf1Gh5JV1GBkD703bcH8clauc7ADTkUrayfLAF2ulXP/U0l7dFL8C8bwqJ7PZbMw==} + /@volar/code-gen/0.31.2: + resolution: {integrity: sha512-OfK2Duk+TL9utivzmhJVU6EV4kR5jlbSfTrTKCpiBHfZZv3VMKh57GVrX0ozPy3nKOo4J153M/LDE8GOyP+vjQ==} dependencies: - '@volar/shared': 0.31.1 - '@volar/source-map': 0.31.1 + '@volar/shared': 0.31.2 + '@volar/source-map': 0.31.2 dev: true - /@volar/html2pug/0.31.1: - resolution: {integrity: sha512-m/lbsz9t+zXx9HsuLH17Z/5nNtefv5qxncL8rycR+GaypHQKF5kg+GqQNOURMQ8T8lq2D6fNsGQOcMXoo3IqWQ==} + /@volar/html2pug/0.31.2: + resolution: {integrity: sha512-iTD2w2NPs9vBzKRA7/9BYpZGBrjp1S70kJfe0nWL+uu9NlpLRT9ORSYcQwOUPB845p1Fw7T0CIARNa724nG+Ig==} dependencies: domelementtype: 2.2.0 domhandler: 4.3.0 @@ -2046,8 +2051,8 @@ packages: pug: 3.0.2 dev: true - /@volar/shared/0.31.1: - resolution: {integrity: sha512-WbMiPOlXbpFinZnQ+/qsJQ7+YW6MFla2fLdD6Er5bLW5DEXI+GupLQ2gnia7F0w6QborMowfOIEXnrnMPPYGOA==} + /@volar/shared/0.31.2: + resolution: {integrity: sha512-Cy0ae3As4yUmoCJU68d1IGA7YoZwSIyJUkcbZe3Mb/Kpwn+MdtaxnWEP38jRbMyeN3mJVCd7OFIul8dcfnVieA==} dependencies: upath: 2.0.1 vscode-html-languageservice: 4.2.1 @@ -2055,29 +2060,29 @@ packages: vscode-uri: 3.0.3 dev: true - /@volar/source-map/0.31.1: - resolution: {integrity: sha512-t+bUmxI5bkunBxX6UYpBX6+xnYYJhpciL3Hqv0dkHSaS63kJqY13OhV/utmQMjto3b3FAbYLSVqpt09FtdTPzg==} + /@volar/source-map/0.31.2: + resolution: {integrity: sha512-8/KXK+6TW/2AgQMdsNo1mwE12TgwAm5b32cIc7sEOy+wtSwJmGkrt95eZVflzSnqZo9hrBFYibprgI5tycHd9g==} dependencies: - '@volar/shared': 0.31.1 + '@volar/shared': 0.31.2 vscode-languageserver-textdocument: 1.0.4 dev: true - /@volar/transforms/0.31.1: - resolution: {integrity: sha512-O9rrGwCTzzsVFe06WOKUx7f9rkPg396ugWkMX6O0M15EF1a3ykqH7QX1uxVhFS0NwvWDnIeJYe7NG1uf1BwR+w==} + /@volar/transforms/0.31.2: + resolution: {integrity: sha512-qLq/CX9evYuLjApwlvxjYhR2dyggjMETCZhLD+WT3YLounBkeSbyXTnGgerPaUKLcSA7wZKYF5ENX6UfPOIyCg==} dependencies: - '@volar/shared': 0.31.1 + '@volar/shared': 0.31.2 vscode-languageserver-types: 3.17.0-next.7 dev: true - /@volar/vue-code-gen/0.31.1: - resolution: {integrity: sha512-MBMqhE+Z7xt2MSeQQA4ld0qx894gr5eLFWkTORdNoCbK8+02oB3yrZVr3T+i9jprjiV6svXKBoyk0RZ6YsgNqw==} + /@volar/vue-code-gen/0.31.2: + resolution: {integrity: sha512-yI2we8RcO2i6vQHZCDGKos078S+CG4eb2EF9HJfzW6n4soAOPcjJJ26D9RAsXHCxI7iXOnOt6XA4pmpK0IkE5A==} dependencies: - '@volar/code-gen': 0.31.1 - '@volar/shared': 0.31.1 - '@volar/source-map': 0.31.1 - '@vue/compiler-core': 3.2.29 - '@vue/compiler-dom': 3.2.29 - '@vue/shared': 3.2.29 + '@volar/code-gen': 0.31.2 + '@volar/shared': 0.31.2 + '@volar/source-map': 0.31.2 + '@vue/compiler-core': 3.2.30 + '@vue/compiler-dom': 3.2.30 + '@vue/shared': 3.2.30 upath: 2.0.1 dev: true @@ -2092,94 +2097,94 @@ packages: vscode-uri: 2.1.2 dev: true - /@vue/compiler-core/3.2.29: - resolution: {integrity: sha512-RePZ/J4Ub3sb7atQw6V6Rez+/5LCRHGFlSetT3N4VMrejqJnNPXKUt5AVm/9F5MJriy2w/VudEIvgscCfCWqxw==} + /@vue/compiler-core/3.2.30: + resolution: {integrity: sha512-64fq1KfcR+k3Vlw+IsBM2VhV5B+2IP3YxvKU8LWCDLrkmlXtbf2eMK6+0IwX5KP41D0f1gzryIiXR7P8cB9O5Q==} dependencies: '@babel/parser': 7.17.0 - '@vue/shared': 3.2.29 + '@vue/shared': 3.2.30 estree-walker: 2.0.2 source-map: 0.6.1 - /@vue/compiler-dom/3.2.29: - resolution: {integrity: sha512-y26vK5khdNS9L3ckvkqJk/78qXwWb75Ci8iYLb67AkJuIgyKhIOcR1E8RIt4mswlVCIeI9gQ+fmtdhaiTAtrBQ==} + /@vue/compiler-dom/3.2.30: + resolution: {integrity: sha512-t7arHz2SXLCXlF2fdGDFVbhENbGMez254Z5edUqb//6WXJU1lC7GvSkUE7i5x8WSjgfqt60i0V8zdmk16rvLdw==} dependencies: - '@vue/compiler-core': 3.2.29 - '@vue/shared': 3.2.29 + '@vue/compiler-core': 3.2.30 + '@vue/shared': 3.2.30 - /@vue/compiler-sfc/3.2.29: - resolution: {integrity: sha512-X9+0dwsag2u6hSOP/XsMYqFti/edvYvxamgBgCcbSYuXx1xLZN+dS/GvQKM4AgGS4djqo0jQvWfIXdfZ2ET68g==} + /@vue/compiler-sfc/3.2.30: + resolution: {integrity: sha512-P/5YpILtcQY92z72gxhkyOUPHVskEzhSrvYi91Xcr+csOxaDaYU5OqOxCzZKcf3Og70Tat404vO1OHrwprN90A==} dependencies: '@babel/parser': 7.17.0 - '@vue/compiler-core': 3.2.29 - '@vue/compiler-dom': 3.2.29 - '@vue/compiler-ssr': 3.2.29 - '@vue/reactivity-transform': 3.2.29 - '@vue/shared': 3.2.29 + '@vue/compiler-core': 3.2.30 + '@vue/compiler-dom': 3.2.30 + '@vue/compiler-ssr': 3.2.30 + '@vue/reactivity-transform': 3.2.30 + '@vue/shared': 3.2.30 estree-walker: 2.0.2 magic-string: 0.25.7 postcss: 8.4.6 source-map: 0.6.1 - /@vue/compiler-ssr/3.2.29: - resolution: {integrity: sha512-LrvQwXlx66uWsB9/VydaaqEpae9xtmlUkeSKF6aPDbzx8M1h7ukxaPjNCAXuFd3fUHblcri8k42lfimHfzMICA==} + /@vue/compiler-ssr/3.2.30: + resolution: {integrity: sha512-OUh3MwAu/PsD7VN3UOdBbTkltkrUCNouSht47+CMRzpUR5+ta7+xyMAVHeq8wg4YZenWaJimbR5TL35Ka4Vk6g==} dependencies: - '@vue/compiler-dom': 3.2.29 - '@vue/shared': 3.2.29 + '@vue/compiler-dom': 3.2.30 + '@vue/shared': 3.2.30 - /@vue/devtools-api/6.0.0-beta.21.1: - resolution: {integrity: sha512-FqC4s3pm35qGVeXRGOjTsRzlkJjrBLriDS9YXbflHLsfA9FrcKzIyWnLXoNm+/7930E8rRakXuAc2QkC50swAw==} + /@vue/devtools-api/6.0.1: + resolution: {integrity: sha512-V2BKGa9pHf/sY2oBUr4uO8yF5MtgL2X96uJq2cBPxPqEUEkLfhJrbpU7t34JRjnanp2tkDJQrQsrsoMltHnFNQ==} dev: false - /@vue/reactivity-transform/3.2.29: - resolution: {integrity: sha512-YF6HdOuhdOw6KyRm59+3rML8USb9o8mYM1q+SH0G41K3/q/G7uhPnHGKvspzceD7h9J3VR1waOQ93CUZj7J7OA==} + /@vue/reactivity-transform/3.2.30: + resolution: {integrity: sha512-Le5XzCJyK3qTjoTnvQG/Ehu8fYjayauMNFyMaEnwFlm/avDofpuibpS9u+/6AgzsGnVWN+i0Jgf25bJd9DIwMw==} dependencies: '@babel/parser': 7.17.0 - '@vue/compiler-core': 3.2.29 - '@vue/shared': 3.2.29 + '@vue/compiler-core': 3.2.30 + '@vue/shared': 3.2.30 estree-walker: 2.0.2 magic-string: 0.25.7 - /@vue/reactivity/3.2.29: - resolution: {integrity: sha512-Ryhb6Gy62YolKXH1gv42pEqwx7zs3n8gacRVZICSgjQz8Qr8QeCcFygBKYfJm3o1SccR7U+bVBQDWZGOyG1k4g==} + /@vue/reactivity/3.2.30: + resolution: {integrity: sha512-qlNKbkRn2JiGxVUEdoXbLAy+vcuHUCcq+YH2uXWz0BNMvXY2plmz+oqsw+694llwmYLkke5lbdYF4DIupisIkg==} dependencies: - '@vue/shared': 3.2.29 + '@vue/shared': 3.2.30 - /@vue/runtime-core/3.2.29: - resolution: {integrity: sha512-VMvQuLdzoTGmCwIKTKVwKmIL0qcODIqe74JtK1pVr5lnaE0l25hopodmPag3RcnIcIXe+Ye3B2olRCn7fTCgig==} + /@vue/runtime-core/3.2.30: + resolution: {integrity: sha512-RTi7xH0Ht/6wfbo2WFBMJTEiyWFTqGhrksJm8lz6E+auO6lXZ6Eq3gPNfLt47GDWCm4xyrv+rs5R4UbarPEQ1Q==} dependencies: - '@vue/reactivity': 3.2.29 - '@vue/shared': 3.2.29 + '@vue/reactivity': 3.2.30 + '@vue/shared': 3.2.30 dev: false - /@vue/runtime-dom/3.2.29: - resolution: {integrity: sha512-YJgLQLwr+SQyORzTsBQLL5TT/5UiV83tEotqjL7F9aFDIQdFBTCwpkCFvX9jqwHoyi9sJqM9XtTrMcc8z/OjPA==} + /@vue/runtime-dom/3.2.30: + resolution: {integrity: sha512-a3+jrncDvEFQmB+v9k0VyT4/Y3XO6OAueCroXXY4yLyr6PJeyxljweV5TzvW0rvVzH9sZO0QAvG76Lo+6C92Qw==} dependencies: - '@vue/runtime-core': 3.2.29 - '@vue/shared': 3.2.29 + '@vue/runtime-core': 3.2.30 + '@vue/shared': 3.2.30 csstype: 2.6.19 dev: false - /@vue/server-renderer/3.2.29_vue@3.2.29: - resolution: {integrity: sha512-lpiYx7ciV7rWfJ0tPkoSOlLmwqBZ9FTmQm33S+T4g0j1fO/LmhJ9b9Ctl1o5xvIFVDk9QkSUWANZn7H2pXuxVw==} + /@vue/server-renderer/3.2.30_vue@3.2.30: + resolution: {integrity: sha512-pzb8J/w+JdZVOtuKFlirGqrs4GP60FXGDJySw3WV2pCetuFstaacDrnymEeSo3ohAD+Qjv7zAG+Y7OvkdxQxmQ==} peerDependencies: - vue: 3.2.29 + vue: 3.2.30 dependencies: - '@vue/compiler-ssr': 3.2.29 - '@vue/shared': 3.2.29 - vue: 3.2.29 + '@vue/compiler-ssr': 3.2.30 + '@vue/shared': 3.2.30 + vue: 3.2.30 - /@vue/shared/3.2.29: - resolution: {integrity: sha512-BjNpU8OK6Z0LVzGUppEk0CMYm/hKDnZfYdjSmPOs0N+TR1cLKJAkDwW8ASZUvaaSLEi6d3hVM7jnWnX+6yWnHw==} + /@vue/shared/3.2.30: + resolution: {integrity: sha512-B3HouBtUxcfu2w2d+VhdLcVBXKYYhXiFMAfQ+hoe8NUhKkPRkWDIqhpuehCZxVQ3S2dN1P1WfKGlxGC+pfmxGg==} - /@vue/test-utils/2.0.0-rc.18_vue@3.2.29: + /@vue/test-utils/2.0.0-rc.18_vue@3.2.30: resolution: {integrity: sha512-aifolXjVdsogjaLmDoZ0FU8vN+R67aWmg9OuVeED4w5Ij5GFQLrlhM19uhWe/r5xXUL4fXMk3pX5wW6FJP1NcQ==} peerDependencies: vue: ^3.0.1 dependencies: - vue: 3.2.29 + vue: 3.2.30 dev: true - /@vueuse/core/7.5.5_vue@3.2.29: + /@vueuse/core/7.5.5_vue@3.2.30: resolution: {integrity: sha512-RBDqmIoGfak4h3xdXa/Av+ibkb8NY044wEy6+PG2FAWNaID8/FkqmSFjbxogrbmpSX1yZ1PBHrM8DUp/FrIpbg==} peerDependencies: '@vue/composition-api': ^1.1.0 @@ -2190,20 +2195,20 @@ packages: vue: optional: true dependencies: - '@vueuse/shared': 7.5.5_vue@3.2.29 - vue: 3.2.29 - vue-demi: 0.12.1_vue@3.2.29 + '@vueuse/shared': 7.5.5_vue@3.2.30 + vue: 3.2.30 + vue-demi: 0.12.1_vue@3.2.30 dev: false - /@vueuse/head/0.7.5_vue@3.2.29: + /@vueuse/head/0.7.5_vue@3.2.30: resolution: {integrity: sha512-L+XQ5Act0nT/ZyO8Qo10J4FyM1qPOyQb6MT4MMn6+AITzrStpmKs/nUDDLJKD/rCcNWl/65XbdQm4T2vKp3VOQ==} peerDependencies: vue: '>=3' dependencies: - vue: 3.2.29 + vue: 3.2.30 dev: false - /@vueuse/shared/7.5.5_vue@3.2.29: + /@vueuse/shared/7.5.5_vue@3.2.30: resolution: {integrity: sha512-mzzTsotHQRPnPAChy8iCv6ek/90CKYhAFyMRgNsMxpT0afZJkbMO/X0OaOu/1NuGbgb8UVjlsWKmCUgKTOF5hA==} peerDependencies: '@vue/composition-api': ^1.1.0 @@ -2214,8 +2219,8 @@ packages: vue: optional: true dependencies: - vue: 3.2.29 - vue-demi: 0.12.1_vue@3.2.29 + vue: 3.2.30 + vue-demi: 0.12.1_vue@3.2.30 dev: false /@windicss/config/1.6.3: @@ -2317,8 +2322,8 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.9.0: - resolution: {integrity: sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==} + /ajv/8.10.0: + resolution: {integrity: sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -2556,8 +2561,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001306 - electron-to-chromium: 1.4.64 + caniuse-lite: 1.0.30001309 + electron-to-chromium: 1.4.66 escalade: 3.1.1 node-releases: 2.0.1 picocolors: 1.0.0 @@ -2572,13 +2577,13 @@ packages: engines: {node: '>=6'} dev: true - /bundle-require/3.0.4_esbuild@0.14.18: + /bundle-require/3.0.4_esbuild@0.14.20: resolution: {integrity: sha512-VXG6epB1yrLAvWVQpl92qF347/UXmncQj7J3U8kZEbdVZ1ZkQyr4hYeL/9RvcE8vVVdp53dY78Fd/3pqfRqI1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.13' dependencies: - esbuild: 0.14.18 + esbuild: 0.14.20 load-tsconfig: 0.2.3 dev: true @@ -2616,8 +2621,8 @@ packages: upper-case: 1.1.3 dev: true - /caniuse-lite/1.0.30001306: - resolution: {integrity: sha512-Wd1OuggRzg1rbnM5hv1wXs2VkxJH/AA+LuudlIqvZiCvivF+wJJe2mgBZC8gPMgI7D76PP5CTx8Luvaqc1V6OQ==} + /caniuse-lite/1.0.30001309: + resolution: {integrity: sha512-Pl8vfigmBXXq+/yUz1jUwULeq9xhMJznzdc/xwl4WclDAuebcTHVefpz8lE/bMI+UN7TOkSSe7B7RnZd6+dzjA==} dev: true /chai/4.3.6: @@ -2628,7 +2633,7 @@ packages: check-error: 1.0.2 deep-eql: 3.0.1 get-func-name: 2.0.0 - loupe: 2.3.2 + loupe: 2.3.3 pathval: 1.1.1 type-detect: 4.0.8 dev: true @@ -3119,8 +3124,8 @@ packages: jake: 10.8.2 dev: true - /electron-to-chromium/1.4.64: - resolution: {integrity: sha512-8mec/99xgLUZCIZZq3wt61Tpxg55jnOSpxGYapE/1Ma9MpFEYYaz4QNYm0CM1rrnCo7i3FRHhbaWjeCLsveGjQ==} + /electron-to-chromium/1.4.66: + resolution: {integrity: sha512-f1RXFMsvwufWLwYUxTiP7HmjprKXrqEWHiQkjAYa9DJeVIlZk5v8gBGcaV+FhtXLly6C1OTVzQY+2UQrACiLlg==} dev: true /emmet/2.3.5: @@ -3213,8 +3218,8 @@ packages: dev: true optional: true - /esbuild-android-arm64/0.14.18: - resolution: {integrity: sha512-AuE8vIwc6QLquwykyscFk0Ji3RFczoOvjka64FJlcjLLhD6VsS584RYlQrSnPpRkv69PunUvyrBoEF7JFTJijg==} + /esbuild-android-arm64/0.14.20: + resolution: {integrity: sha512-MPKVDe3TMjGDRB5WmY9XnBaXEsPiiTpkz6GjXgBhBkMFZm27PhvZT4JE0vZ1fsLb5hnGC/fYsfAnp9rsxTZhIg==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -3230,8 +3235,8 @@ packages: dev: true optional: true - /esbuild-darwin-64/0.14.18: - resolution: {integrity: sha512-nN1XziZtDy8QYOggaXC3zu0vVh8YJpS8Bol7bHaxx0enTLDSFBCXUUJEKYpmAAJ4OZRPgjXv8NzEHHQWQvLzXg==} + /esbuild-darwin-64/0.14.20: + resolution: {integrity: sha512-09PPWejM3rRFsGHvtaTuRlG+KOQlOMwPW4HwwzRlO4TuP+FNV1nTW4x2Nid3dYLzCkcjznJWQ0oylLBQvGTRyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -3247,8 +3252,8 @@ packages: dev: true optional: true - /esbuild-darwin-arm64/0.14.18: - resolution: {integrity: sha512-v0i2n6TCsbxco/W1fN8RgQt3RW00Q9zJO2eqiAdmLWg6Hx0HNHloZyfhF11i7nMUUgW8r5n++ZweIXjAFPE/gQ==} + /esbuild-darwin-arm64/0.14.20: + resolution: {integrity: sha512-jYLrSXAwygoFF2lpRJSUAghre+9IThbcPvJQbcZMONBQaaZft9nclNsrN3k4u7zQaC8v+xZDVSHkmw593tQvkg==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -3264,8 +3269,8 @@ packages: dev: true optional: true - /esbuild-freebsd-64/0.14.18: - resolution: {integrity: sha512-XLyJZTWbSuQJOqw867tBxvto6GjxULvWZYKs6RFHYQPCqgQ0ODLRtBmp4Fqqpde52yOe45npaaoup9IXNfr32A==} + /esbuild-freebsd-64/0.14.20: + resolution: {integrity: sha512-XShznPLW3QsK8/7iCx1euZTowWaWlcrlkq4YTlRqDKXkJRe98FJ6+V2QyoSTwwCoo5koaYwc+h/SYdglF5369A==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -3281,8 +3286,8 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64/0.14.18: - resolution: {integrity: sha512-0ItfrR8hePnDcUXxUQxY+VfICcBfeMJCdK6mcNUXnXw6LyHjyUYXWpFXF+J18pg1/YUWRWO1HbsJ7FEwELcQIA==} + /esbuild-freebsd-arm64/0.14.20: + resolution: {integrity: sha512-flb3tDd6SScKhBqzWAESVCErpaqrGmMSRrssjx1aC+Ai5ZQrEyhfs5OWL4A9qHuixkhfmXffci7rFD+bNeXmZg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -3298,8 +3303,8 @@ packages: dev: true optional: true - /esbuild-linux-32/0.14.18: - resolution: {integrity: sha512-mnG84D9NsEsoQdBpBT0IsFjm5iAwnd81SP4tRMXZLl09lPvIWjHHSq6LDlb4+L5H5K5y68WC//X5Dr2MtNY3DQ==} + /esbuild-linux-32/0.14.20: + resolution: {integrity: sha512-Avtxbd0MHFJ2QhNxj/e8VGGm1/VnEJZq9qiHUl3wQZ4S0o2Wf4ReAfhqmgAbOPFTuxuZm070rRDZYiZifWzFGQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -3315,8 +3320,8 @@ packages: dev: true optional: true - /esbuild-linux-64/0.14.18: - resolution: {integrity: sha512-HvExRtkeA8l/p+7Lf6aBrnLH+jTCFJTUMJxGKExh2RD8lCXGTeDJFyP+BOEetP80fuuH+Syj79+LVQ9MihdBsg==} + /esbuild-linux-64/0.14.20: + resolution: {integrity: sha512-ugisoRA/ajCr9JMszsQnT9hKkpbD7Gr1yl1mWdZhWQnGt6JKGIndGiihMURcrR44IK/2OMkixVe66D4gCHKdPA==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -3332,8 +3337,8 @@ packages: dev: true optional: true - /esbuild-linux-arm/0.14.18: - resolution: {integrity: sha512-+ZL8xfXVNaeaZ2Kxqlw2VYZWRDZ7NSK4zOV9GKNAtkkWURLsPUU84aUOBatRe9BH1O5FDo3LLQSlaA04ed6lhA==} + /esbuild-linux-arm/0.14.20: + resolution: {integrity: sha512-uo++Mo31+P2EA38oQgOeSIWgD7GMCMpZkaLfsCqtKJTIIL9fVzQHQYLDRIiFGpLHvs1faWWHDCEcXEFSP1Ou0g==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -3349,8 +3354,8 @@ packages: dev: true optional: true - /esbuild-linux-arm64/0.14.18: - resolution: {integrity: sha512-CCWmilODE1ckw+M7RVqoqKWA4UB0alCyK2bv0ikEeEAwkzinlJeoe94t9CnT/ECSQ2sL+C16idsr+aUviGp7sg==} + /esbuild-linux-arm64/0.14.20: + resolution: {integrity: sha512-hsrMbNzhh+ud3zUyhONlR41vpYMjINS7BHEzXHbzo4YiCsG9Ht3arbiSuNGrhR/ybLr+8J/0fYVCipiVeAjy3Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -3366,8 +3371,8 @@ packages: dev: true optional: true - /esbuild-linux-mips64le/0.14.18: - resolution: {integrity: sha512-8LjO4+6Vxz5gbyCHO4OONYMF689nLderCtzb8lG1Bncs4ZXHpo6bjvuWeTMRbGUkvAhp+P6hMTzia7RHOC53wQ==} + /esbuild-linux-mips64le/0.14.20: + resolution: {integrity: sha512-MBUu2Q+pzdTBWclPe7AwmRUMTUL0R99ONa8Hswpb987fXgFUdN4XBNBcEa5zy/l2UrIJK+9FUN1jjedZlxgP2A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -3383,8 +3388,8 @@ packages: dev: true optional: true - /esbuild-linux-ppc64le/0.14.18: - resolution: {integrity: sha512-0OJk/6iYEmF1J7LXY6+cqf6Ga5vG4an7n1nubTKce7kYqaTyNGfYcTjDZce6lnDVlZTJtwntIMszq1+ZX7Kenw==} + /esbuild-linux-ppc64le/0.14.20: + resolution: {integrity: sha512-xkYjQtITA6q/b+/5aAf5n2L063pOxLyXUIad+zYT8GpZh0Sa7aSn18BmrFa2fHb0QSGgTEeRfYkTcBGgoPDjBA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -3392,8 +3397,8 @@ packages: dev: true optional: true - /esbuild-linux-s390x/0.14.18: - resolution: {integrity: sha512-UNY7YKZHjY31KcNanJK4QaT2/aoIQyS+jViP3QuDRIoYAogRnc6WydylzIkkEzGMaC4fzaXOmQ8fxwpLAXK4Yg==} + /esbuild-linux-s390x/0.14.20: + resolution: {integrity: sha512-AAcj3x80TXIedpNVuZgjYNETXr2iciOBQv5pGdNGAy6rv7k6Y6sT6SXQ58l2LH2AHbaeTPQjze+Y6qgX1efzrA==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -3409,8 +3414,8 @@ packages: dev: true optional: true - /esbuild-netbsd-64/0.14.18: - resolution: {integrity: sha512-wE/2xT9KNzLCfEBw24YbVmMmXH92cFIzrRPUlwWH9dIizjvEYYcyQ+peTMVkqzUum7pdlVLZ2CDDqAaZo/nW/w==} + /esbuild-netbsd-64/0.14.20: + resolution: {integrity: sha512-30GQKCnsID1WddUi6tr5HFUxJD0t7Uitf6tO9Cf1WqF6C44pf8EflwrhyDFmUyvkddlyfb4OrYI6NNLC/G3ajg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -3426,8 +3431,8 @@ packages: dev: true optional: true - /esbuild-openbsd-64/0.14.18: - resolution: {integrity: sha512-vdymE2jyuH/FRmTvrguCYSrq81/rUwuhMYyvt/6ibv9ac7xQ674c8qTdT+RH73sR9/2WUD/NsYxrBA/wUVTxcg==} + /esbuild-openbsd-64/0.14.20: + resolution: {integrity: sha512-zVrf8fY46BK57AkxDdqu2S8TV3p7oLmYIiW707IOHrveI0TwJ2iypAxnwOQuCvowM3UWqVBO2RDBzV7S7t0klg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -3443,8 +3448,8 @@ packages: dev: true optional: true - /esbuild-sunos-64/0.14.18: - resolution: {integrity: sha512-X/Tesy6K1MdJF1d5cbzFDxrIMMn0ye+VgTQRI8P5Vo2CcKxOdckwsKUwpRAvg+VDZ6MxrSOTYS9OOoggPUjxTg==} + /esbuild-sunos-64/0.14.20: + resolution: {integrity: sha512-MYRsS1O7+aBr2T/0aA4OJrju6eMku4rm81fwGF1KLFwmymIpPGmj7n69n5JW3NKyW5j+FBt0GcyDh9nEnUL1FQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -3460,8 +3465,8 @@ packages: dev: true optional: true - /esbuild-windows-32/0.14.18: - resolution: {integrity: sha512-glG23I/JzCL4lu7DWFUtVwqFwNwlL0g+ks+mcjjUisHcINoSXTeCNToUN0bHhzn6IlXXnggNQ38Ew/idHPM8+g==} + /esbuild-windows-32/0.14.20: + resolution: {integrity: sha512-7VqDITqTU65LQ1Uka/4jx4sUIZc1L8NPlvc7HBRdR15TUyPxmHRQaxMGXd8aakI1FEBcImpJ9SQ4JLmPwRlS1w==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -3477,8 +3482,8 @@ packages: dev: true optional: true - /esbuild-windows-64/0.14.18: - resolution: {integrity: sha512-zEiFKHgV/3z14wsVamV98/5mxeOwz+ecyg0pD3fWcBz9j4EOIT1Tg47axypD4QLwiKFvve9mUBYX1cD99qxOyw==} + /esbuild-windows-64/0.14.20: + resolution: {integrity: sha512-q4GxY4m5+nXSgqCKx6Cc5pavnhd2g5mHn+K8kNdfCMZsWPDlHLMRjYF5NVQ3/5mJ1M7iR3/Ai4ISjxmsCeGOGA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -3494,8 +3499,8 @@ packages: dev: true optional: true - /esbuild-windows-arm64/0.14.18: - resolution: {integrity: sha512-Mh8lZFcPLat13dABN7lZThGUOn9YxoH5RYkhBq0U3WqQohHzKRhllYh7ibFixnkpMLnv8OZEbl8bGLMy03MpfA==} + /esbuild-windows-arm64/0.14.20: + resolution: {integrity: sha512-vOxfU7YwuBMjsUNUygMBhC8T60aCzeYptnHu4k7azqqOVo5EAyoueyWSkFR5GpX6bae5cXyB0vcOV/bfwqRwAg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -3527,30 +3532,30 @@ packages: esbuild-windows-arm64: 0.13.15 dev: true - /esbuild/0.14.18: - resolution: {integrity: sha512-vCUoISSltnX7ax01w70pWOSQT+e55o+2P/a+A9MSTukJAt3T4aDZajcjeG4fnZbkvOEv+dkKgdkvljz6vVQD4A==} + /esbuild/0.14.20: + resolution: {integrity: sha512-7aRJRnTjHZ6rFEre52tsAYZxatVELSA/QvYGUBf1iOsYKCnSJICE5seugQFFJgV1Gyl0/mngxQPhxBIqgYG2BA==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - esbuild-android-arm64: 0.14.18 - esbuild-darwin-64: 0.14.18 - esbuild-darwin-arm64: 0.14.18 - esbuild-freebsd-64: 0.14.18 - esbuild-freebsd-arm64: 0.14.18 - esbuild-linux-32: 0.14.18 - esbuild-linux-64: 0.14.18 - esbuild-linux-arm: 0.14.18 - esbuild-linux-arm64: 0.14.18 - esbuild-linux-mips64le: 0.14.18 - esbuild-linux-ppc64le: 0.14.18 - esbuild-linux-s390x: 0.14.18 - esbuild-netbsd-64: 0.14.18 - esbuild-openbsd-64: 0.14.18 - esbuild-sunos-64: 0.14.18 - esbuild-windows-32: 0.14.18 - esbuild-windows-64: 0.14.18 - esbuild-windows-arm64: 0.14.18 + esbuild-android-arm64: 0.14.20 + esbuild-darwin-64: 0.14.20 + esbuild-darwin-arm64: 0.14.20 + esbuild-freebsd-64: 0.14.20 + esbuild-freebsd-arm64: 0.14.20 + esbuild-linux-32: 0.14.20 + esbuild-linux-64: 0.14.20 + esbuild-linux-arm: 0.14.20 + esbuild-linux-arm64: 0.14.20 + esbuild-linux-mips64le: 0.14.20 + esbuild-linux-ppc64le: 0.14.20 + esbuild-linux-s390x: 0.14.20 + esbuild-netbsd-64: 0.14.20 + esbuild-openbsd-64: 0.14.20 + esbuild-sunos-64: 0.14.20 + esbuild-windows-32: 0.14.20 + esbuild-windows-64: 0.14.20 + esbuild-windows-arm64: 0.14.20 dev: true /escalade/3.1.1: @@ -3676,7 +3681,7 @@ packages: has: 1.0.3 is-core-module: 2.8.1 is-glob: 4.0.3 - minimatch: 3.0.4 + minimatch: 3.0.5 object.values: 1.1.5 resolve: 1.22.0 tsconfig-paths: 3.12.0 @@ -3705,7 +3710,7 @@ packages: eslint-utils: 3.0.0_eslint@8.8.0 ignore: 5.2.0 is-core-module: 2.8.1 - minimatch: 3.0.4 + minimatch: 3.0.5 resolve: 1.22.0 semver: 6.3.0 dev: true @@ -3748,7 +3753,7 @@ packages: eslint: 8.8.0 estraverse: 5.3.0 jsx-ast-utils: 3.2.1 - minimatch: 3.0.4 + minimatch: 3.0.5 object.entries: 1.1.5 object.fromentries: 2.0.5 object.hasown: 1.1.0 @@ -3782,8 +3787,8 @@ packages: strip-indent: 3.0.0 dev: true - /eslint-plugin-vue/8.4.0_eslint@8.8.0: - resolution: {integrity: sha512-Ga96QRG8GA9AyzKtEDxqYRCMt/VJM4SLkcNmm4FvUiFBE4jpaBr25unRBi9iVmHLYhA9EZ/4I+jD8n1vfWzyAA==} + /eslint-plugin-vue/8.4.1_eslint@8.8.0: + resolution: {integrity: sha512-nmWOhNmDx9TZ+yP9ZhezTkZUupSHsYA2TocRm+efPSXMOyFrVczVlaIuQcLBjCtI8CbkBiUQ3VcyQsjlIhDrhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 @@ -3892,7 +3897,7 @@ packages: json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 - minimatch: 3.0.4 + minimatch: 3.0.5 natural-compare: 1.4.0 optionator: 0.9.1 regexpp: 3.2.0 @@ -3989,7 +3994,7 @@ packages: dependencies: clean-css: 4.2.4 on-headers: 1.0.2 - uglify-js: 3.15.0 + uglify-js: 3.15.1 dev: true /express/4.17.2: @@ -4075,7 +4080,7 @@ packages: /filelist/1.0.2: resolution: {integrity: sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==} dependencies: - minimatch: 3.0.4 + minimatch: 3.0.5 dev: true /fill-range/7.0.1: @@ -4132,14 +4137,14 @@ packages: resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} dev: true - /floating-vue/2.0.0-beta.5_vue@3.2.29: + /floating-vue/2.0.0-beta.5_vue@3.2.30: resolution: {integrity: sha512-ZFg/4ByWS7MFTzxj2VKo06g7e3ZH6c4V3TPkuHK6lVr+hZlPt5vRRFkDRq/+Ic0qsMuqybARebs7S9wu6Qo5gg==} peerDependencies: vue: ^3.2.0 dependencies: '@floating-ui/dom': 0.1.10 - vue: 3.2.29 - vue-resize: 2.0.0-alpha.1_vue@3.2.29 + vue: 3.2.30 + vue-resize: 2.0.0-alpha.1_vue@3.2.30 dev: false /follow-redirects/1.14.7: @@ -4284,7 +4289,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.0.4 + minimatch: 3.0.5 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -4295,7 +4300,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.0.4 + minimatch: 3.0.5 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -4409,7 +4414,7 @@ packages: he: 1.2.0 param-case: 2.1.1 relateurl: 0.2.7 - uglify-js: 3.15.0 + uglify-js: 3.15.1 dev: true /html-to-text/8.1.0: @@ -4799,14 +4804,14 @@ packages: async: 0.9.2 chalk: 2.4.2 filelist: 1.0.2 - minimatch: 3.0.4 + minimatch: 3.0.5 dev: true /jest-worker/26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 17.0.14 + '@types/node': 17.0.16 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -4877,7 +4882,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 10.0.0 - ws: 8.4.2 + ws: 8.5.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -5105,8 +5110,8 @@ packages: resolution: {integrity: sha512-RicKUuLwZVNZ6ZdJHgIZnSeA05p8qWc5NW0uR96mpPIjN9WDLUg9+kj1esQU1GkPn9iLZVKatSQK5gyiaFHgJA==} dev: true - /loupe/2.3.2: - resolution: {integrity: sha512-QgVamnvj0jX1LMPlCAq0MK6hATORFtGqHoUKXTkwNe13BqlN6aePQCKnnTcFvdDYEEITcJ+gBl4mTW7YJtJbyQ==} + /loupe/2.3.3: + resolution: {integrity: sha512-krIV4Cf1BIGIx2t1e6tucThhrBemUnIUjMtD2vN4mrMxnxpBvrcosBSpooqunBqP/hOEEV1w/Cr1YskGtqw5Jg==} dependencies: get-func-name: 2.0.0 dev: true @@ -5131,8 +5136,8 @@ packages: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /markdown-it-expandable/1.0.0_markdown-it@12.3.2: - resolution: {integrity: sha512-NTOjwn/35I67CLUsBAwyoWtBTltviz4gnmvfV3N6dkFX77NGS+46v1wflUUaF7U3fHCnIxDp84pWxJhgyGV7Dg==} + /markdown-it-expandable/1.0.2_markdown-it@12.3.2: + resolution: {integrity: sha512-DX/WqnV0O9abfD8cdnKQLpYrerB3NGr2FjLa3FL/Ha1v9m71C6bMuPE1bbv7eVIamo0PGXzpxEjoohJA3DPttw==} peerDependencies: markdown-it: '>=12' dependencies: @@ -5170,6 +5175,17 @@ packages: engines: {node: '>= 0.6'} dev: true + /meili-searchbar/2.1.0: + resolution: {integrity: sha512-QCsk7d2dYirOvzKlCklDVOUuvNrPspFY6zUzEyJRds+FlDVpktOE+caPqPdITkq5Wj0z4ggTKvwOLLAwDfMQzw==} + dependencies: + autocomplete.js: 0.38.1 + meilisearch: 0.24.0 + to-factory: 1.0.0 + zepto: 1.2.0 + transitivePeerDependencies: + - encoding + dev: false + /meilisearch/0.24.0: resolution: {integrity: sha512-qME1dsHZePBQi8qFdhbilcFzaL+oZJgUuls+FZ23hHpdhJI+iMFSmjjcfsxq5hdg2qczbCXv7yAo3Sh8xgfkgA==} dependencies: @@ -5239,8 +5255,8 @@ packages: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimatch/3.0.4: - resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + /minimatch/3.0.5: + resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} dependencies: brace-expansion: 1.1.11 dev: true @@ -5362,7 +5378,7 @@ packages: chalk: 2.4.2 cross-spawn: 6.0.5 memorystream: 0.3.1 - minimatch: 3.0.4 + minimatch: 3.0.5 pidtree: 0.3.1 read-pkg: 3.0.0 shell-quote: 1.7.3 @@ -5689,7 +5705,7 @@ packages: engines: {node: '>=4'} dev: true - /pinia/2.0.11_typescript@4.5.5+vue@3.2.29: + /pinia/2.0.11_typescript@4.5.5+vue@3.2.30: resolution: {integrity: sha512-JzcmnMqu28PNWOjDgEDK6fTrIzX8eQZKPPKvu/fpHdpXARUj1xeVdFi3YFIMOWswqaBd589cpmAMdSSTryI9iw==} peerDependencies: '@vue/composition-api': ^1.4.0 @@ -5701,10 +5717,10 @@ packages: typescript: optional: true dependencies: - '@vue/devtools-api': 6.0.0-beta.21.1 + '@vue/devtools-api': 6.0.1 typescript: 4.5.5 - vue: 3.2.29 - vue-demi: 0.12.1_vue@3.2.29 + vue: 3.2.30 + vue-demi: 0.12.1_vue@3.2.30 dev: false /pirates/4.0.5: @@ -5717,7 +5733,7 @@ packages: engines: {node: '>=4'} dev: true - /postcss-load-config/3.1.1_ts-node@10.4.0: + /postcss-load-config/3.1.1_ts-node@10.5.0: resolution: {integrity: sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==} engines: {node: '>= 10'} peerDependencies: @@ -5727,7 +5743,7 @@ packages: optional: true dependencies: lilconfig: 2.0.4 - ts-node: 10.4.0_d9704c9be36ede869b5c33ef6688872e + ts-node: 10.5.0_d9704c9be36ede869b5c33ef6688872e yaml: 1.10.2 dev: true @@ -6122,22 +6138,22 @@ packages: glob: 7.2.0 dev: true - /rollup-plugin-terser/7.0.2_rollup@2.67.0: + /rollup-plugin-terser/7.0.2_rollup@2.67.1: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} peerDependencies: rollup: ^2.0.0 dependencies: '@babel/code-frame': 7.16.7 jest-worker: 26.6.2 - rollup: 2.67.0 + rollup: 2.67.1 serialize-javascript: 4.0.0 terser: 5.10.0 transitivePeerDependencies: - acorn dev: true - /rollup/2.67.0: - resolution: {integrity: sha512-W83AaERwvDiHwHEF/dfAfS3z1Be5wf7n+pO3ZAO5IQadCT2lBTr7WQ2MwZZe+nodbD+n3HtC4OCOAdsOPPcKZQ==} + /rollup/2.67.1: + resolution: {integrity: sha512-1Sbcs4OuW+aD+hhqpIRl+RqooIpF6uQcfzU/QSI7vGkwADY6cM4iLsBGRM2CGLXDTDN5y/yShohFmnKegSPWzg==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: @@ -6675,8 +6691,8 @@ packages: code-block-writer: 11.0.0 dev: true - /ts-node/10.4.0_d9704c9be36ede869b5c33ef6688872e: - resolution: {integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==} + /ts-node/10.5.0_d9704c9be36ede869b5c33ef6688872e: + resolution: {integrity: sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -6702,6 +6718,7 @@ packages: diff: 4.0.2 make-error: 1.3.6 typescript: 4.5.5 + v8-compile-cache-lib: 3.0.0 yn: 3.1.1 dev: true @@ -6722,7 +6739,7 @@ packages: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} dev: true - /tsup/5.11.13_ts-node@10.4.0+typescript@4.5.5: + /tsup/5.11.13_ts-node@10.5.0+typescript@4.5.5: resolution: {integrity: sha512-NVMK01gVmojZn7+iZwxRK1CzW2BIabaVMyEjs7Nm9lm4DrSf7IAqs2F3fg0vT7rH72x1cIBsW9U/TlWrCvHVQQ==} hasBin: true peerDependencies: @@ -6731,17 +6748,17 @@ packages: typescript: optional: true dependencies: - bundle-require: 3.0.4_esbuild@0.14.18 + bundle-require: 3.0.4_esbuild@0.14.20 cac: 6.7.12 chokidar: 3.5.3 debug: 4.3.3 - esbuild: 0.14.18 + esbuild: 0.14.20 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.1_ts-node@10.4.0 + postcss-load-config: 3.1.1_ts-node@10.5.0 resolve-from: 5.0.0 - rollup: 2.67.0 + rollup: 2.67.1 source-map: 0.7.3 sucrase: 3.20.3 tree-kill: 1.2.2 @@ -6826,8 +6843,8 @@ packages: resolution: {integrity: sha512-YTnDRlE1cIofRqOFN8ioAbz9qenDvkgVMSn0cnxvIDjM9sfEOMKB0ybMr+otSlCXMfQ/X35haYRoI7Nua82RrA==} dev: true - /uglify-js/3.15.0: - resolution: {integrity: sha512-x+xdeDWq7FiORDvyIJ0q/waWd4PhjBNOm5dQUOq2AKC0IEjxOS66Ha9tctiVDGcRQuh69K7fgU5oRuTK4cysSg==} + /uglify-js/3.15.1: + resolution: {integrity: sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==} engines: {node: '>=0.8.0'} hasBin: true dev: true @@ -6901,7 +6918,7 @@ packages: dependencies: '@antfu/utils': 0.4.0 '@rollup/pluginutils': 4.1.2 - '@vueuse/core': 7.5.5_vue@3.2.29 + '@vueuse/core': 7.5.5_vue@3.2.30 local-pkg: 0.4.1 magic-string: 0.25.7 resolve: 1.22.0 @@ -6913,7 +6930,7 @@ packages: - webpack dev: true - /unplugin-icons/0.13.0_156ab524000ac0f29e01f162b9943b71: + /unplugin-icons/0.13.0_ce60a1b69356065690c534e9989aa6a5: resolution: {integrity: sha512-CyAl0HV3bZUGT7ut9agpPRhEYXCvufr80Fh72yrkD57BVCTZ7ze10Rt63ZrvPXiJQpd+aI/Bizm2aqOf3WPSfg==} peerDependencies: '@svgr/core': ^5.5.0 @@ -6932,8 +6949,8 @@ packages: dependencies: '@antfu/install-pkg': 0.1.0 '@antfu/utils': 0.4.0 - '@iconify/utils': 1.0.21 - '@vue/compiler-sfc': 3.2.29 + '@iconify/utils': 1.0.23 + '@vue/compiler-sfc': 3.2.30 debug: 4.3.3 kolorist: 1.5.1 local-pkg: 0.4.1 @@ -6945,8 +6962,8 @@ packages: - webpack dev: true - /unplugin-vue-components/0.17.15_vite@2.7.13+vue@3.2.29: - resolution: {integrity: sha512-KpSlv7BaPRswwlCUy7gdpiqOAaHnMeMTmMOqJPmreYTGupt+6qXH3S3uLEmPmXUcuzRXlL+4eysuVunSAbsn0A==} + /unplugin-vue-components/0.17.17_vite@2.7.13+vue@3.2.30: + resolution: {integrity: sha512-XaaCbsdXGazTOl0nH4+PVsuGOXmYcrqLT8B8vO9Jzz9OaUq+S9Tz4KjzUNs7bhkp83SQWaKKF0+noAynYDa/Cg==} engines: {node: '>=14'} peerDependencies: '@babel/parser': ^7.15.8 @@ -6965,10 +6982,10 @@ packages: fast-glob: 3.2.11 local-pkg: 0.4.1 magic-string: 0.25.7 - minimatch: 3.0.4 + minimatch: 3.0.5 resolve: 1.22.0 unplugin: 0.3.2_vite@2.7.13 - vue: 3.2.29 + vue: 3.2.30 transitivePeerDependencies: - esbuild - rollup @@ -7045,6 +7062,10 @@ packages: engines: {node: '>= 0.4.0'} dev: true + /v8-compile-cache-lib/3.0.0: + resolution: {integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==} + dev: true + /v8-compile-cache/2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true @@ -7102,8 +7123,8 @@ packages: vite: 2.7.13 dev: true - /vite-plugin-pages/0.20.1_156ab524000ac0f29e01f162b9943b71: - resolution: {integrity: sha512-VHKE1/39HW4vqUcGLO6blq8MKqzP73kxYW9bykH1ihRfhgp7HLMCgTvmag6zDa66iKafzM3orzjVeIg4dUA+4A==} + /vite-plugin-pages/0.20.2_ce60a1b69356065690c534e9989aa6a5: + resolution: {integrity: sha512-A/N6Pez9sMzt7ZEfd1H7P9tmP6LrZwXMexV8xSiRahnUeNw+gz0W2dsPLJDZBvcixDZqoK8ggKdmyxgVBuTAfg==} peerDependencies: '@vue/compiler-sfc': '>=3' vite: '>=2' @@ -7111,7 +7132,7 @@ packages: '@vue/compiler-sfc': optional: true dependencies: - '@vue/compiler-sfc': 3.2.29 + '@vue/compiler-sfc': 3.2.30 debug: 4.3.3 deep-equal: 2.0.5 fast-glob: 3.2.11 @@ -7131,7 +7152,7 @@ packages: debug: 4.3.3 fast-glob: 3.2.11 pretty-bytes: 5.6.0 - rollup: 2.67.0 + rollup: 2.67.1 vite: 2.7.13 workbox-build: 6.4.2 workbox-window: 6.4.2 @@ -7141,19 +7162,19 @@ packages: - supports-color dev: true - /vite-plugin-vue-layouts/0.5.0_5be28afadb16af157591decefdfd37a0: + /vite-plugin-vue-layouts/0.5.0_5b0ad8637388dea40b9dd470d0b39363: resolution: {integrity: sha512-KN03GMSGNrWxeHJo5OO9fvdZh44PfievNAoLeMbf20UQPBBO6kpIMVTYB6sFPMWmiTbqZmq3we4z/ocJkxAEiA==} peerDependencies: vite: ^2.5.0 vue: ^2.6.12 || ^3.2.4 vue-router: ^3.5.1 || ^ 4.0.11 dependencies: - '@vue/compiler-sfc': 3.2.29 + '@vue/compiler-sfc': 3.2.30 debug: 4.3.3 fast-glob: 3.2.11 vite: 2.7.13 - vue: 3.2.29 - vue-router: 4.0.12_vue@3.2.29 + vue: 3.2.30 + vue-router: 4.0.12_vue@3.2.30 transitivePeerDependencies: - supports-color dev: true @@ -7172,8 +7193,8 @@ packages: - supports-color dev: true - /vite-ssg/0.17.9_1ede6668370ad42aad1df87e2fa73e29: - resolution: {integrity: sha512-uEyoCLlBAktO1irrWIeKJQF0H8P30gvDmzKl3wxIsVg8j06VAppaybdUJnKwX4GKxgNGfiExtV+WxSWW0PtDeQ==} + /vite-ssg/0.17.10_e5d54036a1dad4d2fb18754cb187ddb6: + resolution: {integrity: sha512-gPcw5RLmAq5CwZ9Q/Ca9kJWUm6KdxhkNRBzm8P4bGDCRQLNQkgTiQmK7ZwsdqD7C8bah4CMBFDeqz2MKSQintw==} engines: {node: '>=14.0.0'} hasBin: true peerDependencies: @@ -7186,7 +7207,7 @@ packages: critters: optional: true dependencies: - '@vueuse/head': 0.7.5_vue@3.2.29 + '@vueuse/head': 0.7.5_vue@3.2.30 critters: 0.0.16 fs-extra: 10.0.0 html-minifier: 4.0.0 @@ -7195,8 +7216,8 @@ packages: kolorist: 1.5.1 prettier: 2.5.1 vite: 2.7.13 - vue: 3.2.29 - vue-router: 4.0.12_vue@3.2.29 + vue: 3.2.30 + vue-router: 4.0.12_vue@3.2.30 yargs: 17.3.1 transitivePeerDependencies: - bufferutil @@ -7224,13 +7245,13 @@ packages: esbuild: 0.13.15 postcss: 8.4.6 resolve: 1.22.0 - rollup: 2.67.0 + rollup: 2.67.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vitest/0.2.6_@vitest+ui@0.2.6: - resolution: {integrity: sha512-qjjWJm+rpmqOmG3uSoFAh/8m9iZWzYmoWJTqqLKZYKRZSo0P+ibC05Atu8l1JRUrEgsgJIGot4JcPO4N42TX9Q==} + /vitest/0.2.7_@vitest+ui@0.2.7: + resolution: {integrity: sha512-rKbmtADi6jsxYrwBrw4+sdYPLm3eiTmx7ojoZXQshScxnGWbHP18hWNa2NUEOYgowatkIiWPDVIyFB1kPnhokw==} engines: {node: '>=14.14.0'} hasBin: true peerDependencies: @@ -7250,7 +7271,7 @@ packages: dependencies: '@types/chai': 4.3.0 '@types/chai-subset': 1.3.3 - '@vitest/ui': 0.2.6 + '@vitest/ui': 0.2.7 chai: 4.3.6 local-pkg: 0.4.1 tinypool: 0.1.1 @@ -7262,8 +7283,8 @@ packages: - stylus dev: true - /vitest/0.2.6_jsdom@19.0.0: - resolution: {integrity: sha512-qjjWJm+rpmqOmG3uSoFAh/8m9iZWzYmoWJTqqLKZYKRZSo0P+ibC05Atu8l1JRUrEgsgJIGot4JcPO4N42TX9Q==} + /vitest/0.2.7_jsdom@19.0.0: + resolution: {integrity: sha512-rKbmtADi6jsxYrwBrw4+sdYPLm3eiTmx7ojoZXQshScxnGWbHP18hWNa2NUEOYgowatkIiWPDVIyFB1kPnhokw==} engines: {node: '>=14.14.0'} hasBin: true peerDependencies: @@ -7356,23 +7377,23 @@ packages: resolution: {integrity: sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==} dev: true - /vscode-pug-languageservice/0.31.1: - resolution: {integrity: sha512-71aQbVF3RjE+dUbUA/DnL1oGaLXXIMEy5z4TkE/irO/qodMjfwVbW/bxMCBwrVrXmIObIMlsWYPD+S/+EE3CXQ==} + /vscode-pug-languageservice/0.31.2: + resolution: {integrity: sha512-vYaYLmSqO3UZ5746AmkgVNYFdMOFDAjBuNnD660UIHRQjdJ857SkL1XlzG4XrrKZAf6NJqc8xnsXxnRxo2bnOg==} dependencies: - '@volar/code-gen': 0.31.1 - '@volar/shared': 0.31.1 - '@volar/source-map': 0.31.1 - '@volar/transforms': 0.31.1 + '@volar/code-gen': 0.31.2 + '@volar/shared': 0.31.2 + '@volar/source-map': 0.31.2 + '@volar/transforms': 0.31.2 pug-lexer: 5.0.1 pug-parser: 6.0.0 vscode-languageserver-textdocument: 1.0.4 vscode-languageserver-types: 3.17.0-next.7 dev: true - /vscode-typescript-languageservice/0.31.1: - resolution: {integrity: sha512-qJlkrznmRJGHAxIclfnAuJSbNfmKwDfAn7o3PLM7bBqtBvJG6HAFCBXaBWaE1kkM/ELG20Dn8Xi7lCfT15DlpA==} + /vscode-typescript-languageservice/0.31.2: + resolution: {integrity: sha512-73VRiOLzmaQVF3l+TzhiC/hTxaaUX0pYN7fezCnpf8SPvSQP62x02WWOEBXY/H39Cgkns50xUP9N07TLPoSB7Q==} dependencies: - '@volar/shared': 0.31.1 + '@volar/shared': 0.31.2 semver: 7.3.5 upath: 2.0.1 vscode-languageserver-protocol: 3.17.0-next.14 @@ -7388,29 +7409,29 @@ packages: resolution: {integrity: sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==} dev: true - /vscode-vue-languageservice/0.31.1: - resolution: {integrity: sha512-7HY4VkD00iyfWyWpJcl3zObnsa9gBKGjTtrWflFR0SqGHMsccfh7QXdrPmgy/2nFRkD6n60XU7eSYg2rN/QexA==} + /vscode-vue-languageservice/0.31.2: + resolution: {integrity: sha512-aaeljk4IWYPb2StBQ4gdzliBqHNcTwrOyhwdXD/OXeKsZ6RUzX9tUVqQtvDnQ1UYs72dKJxkiU1UG6Ol59IeHw==} dependencies: - '@volar/code-gen': 0.31.1 - '@volar/html2pug': 0.31.1 - '@volar/shared': 0.31.1 - '@volar/source-map': 0.31.1 - '@volar/transforms': 0.31.1 - '@volar/vue-code-gen': 0.31.1 + '@volar/code-gen': 0.31.2 + '@volar/html2pug': 0.31.2 + '@volar/shared': 0.31.2 + '@volar/source-map': 0.31.2 + '@volar/transforms': 0.31.2 + '@volar/vue-code-gen': 0.31.2 '@vscode/emmet-helper': 2.8.3 - '@vue/reactivity': 3.2.29 - '@vue/shared': 3.2.29 + '@vue/reactivity': 3.2.30 + '@vue/shared': 3.2.30 upath: 2.0.1 vscode-css-languageservice: 5.1.12 vscode-html-languageservice: 4.2.1 vscode-json-languageservice: 4.2.0 vscode-languageserver-protocol: 3.17.0-next.14 vscode-languageserver-textdocument: 1.0.4 - vscode-pug-languageservice: 0.31.1 - vscode-typescript-languageservice: 0.31.1 + vscode-pug-languageservice: 0.31.2 + vscode-typescript-languageservice: 0.31.2 dev: true - /vue-demi/0.12.1_vue@3.2.29: + /vue-demi/0.12.1_vue@3.2.30: resolution: {integrity: sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw==} engines: {node: '>=12'} hasBin: true @@ -7422,7 +7443,7 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.2.29 + vue: 3.2.30 dev: false /vue-eslint-parser/8.2.0_eslint@8.8.0: @@ -7443,7 +7464,7 @@ packages: - supports-color dev: true - /vue-i18n/9.1.9_vue@3.2.29: + /vue-i18n/9.1.9_vue@3.2.30: resolution: {integrity: sha512-JeRdNVxS2OGp1E+pye5XB6+M6BBkHwAv9C80Q7+kzoMdUDGRna06tjC0vCB/jDX9aWrl5swxOMFcyAr7or8XTA==} engines: {node: '>= 10'} peerDependencies: @@ -7452,46 +7473,46 @@ packages: '@intlify/core-base': 9.1.9 '@intlify/shared': 9.1.9 '@intlify/vue-devtools': 9.1.9 - '@vue/devtools-api': 6.0.0-beta.21.1 - vue: 3.2.29 + '@vue/devtools-api': 6.0.1 + vue: 3.2.30 dev: false - /vue-resize/2.0.0-alpha.1_vue@3.2.29: + /vue-resize/2.0.0-alpha.1_vue@3.2.30: resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==} peerDependencies: vue: ^3.0.0 dependencies: - vue: 3.2.29 + vue: 3.2.30 dev: false - /vue-router/4.0.12_vue@3.2.29: + /vue-router/4.0.12_vue@3.2.30: resolution: {integrity: sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg==} peerDependencies: vue: ^3.0.0 dependencies: - '@vue/devtools-api': 6.0.0-beta.21.1 - vue: 3.2.29 + '@vue/devtools-api': 6.0.1 + vue: 3.2.30 dev: false - /vue-tsc/0.31.1_typescript@4.5.5: - resolution: {integrity: sha512-pyLQG1fCA02is6NAL0uY5SKxDfjJRI167x89iRz0gWOB0tUng6NjJZicE+Oh+3ZuN/LJ3J/wKfdW7O+hnfhxdg==} + /vue-tsc/0.31.2_typescript@4.5.5: + resolution: {integrity: sha512-eE6aM0ktgN+21paBiuXFSwWUz+TKg64acJUeUmXp8Z5yxzJ3YyNW8pAtAfpYtCHPNlZMNoqx17zbHfmGUqIWPA==} hasBin: true peerDependencies: typescript: '*' dependencies: - '@volar/shared': 0.31.1 + '@volar/shared': 0.31.2 typescript: 4.5.5 - vscode-vue-languageservice: 0.31.1 + vscode-vue-languageservice: 0.31.2 dev: true - /vue/3.2.29: - resolution: {integrity: sha512-cFIwr7LkbtCRanjNvh6r7wp2yUxfxeM2yPpDQpAfaaLIGZSrUmLbNiSze9nhBJt5MrZ68Iqt0O5scwAMEVxF+Q==} + /vue/3.2.30: + resolution: {integrity: sha512-ZmTFWVJUX2XADkuOB8GcLTuxnBLogjJBTNVrM7WsTnjqRQ+VR8bLNrvNsbn8vj/LaP5+0WFAPrpngOYE2x+e+Q==} dependencies: - '@vue/compiler-dom': 3.2.29 - '@vue/compiler-sfc': 3.2.29 - '@vue/runtime-dom': 3.2.29 - '@vue/server-renderer': 3.2.29_vue@3.2.29 - '@vue/shared': 3.2.29 + '@vue/compiler-dom': 3.2.30 + '@vue/compiler-sfc': 3.2.30 + '@vue/runtime-dom': 3.2.30 + '@vue/server-renderer': 3.2.30_vue@3.2.30 + '@vue/shared': 3.2.30 dev: false /w3c-hr-time/1.0.2: @@ -7649,23 +7670,23 @@ packages: resolution: {integrity: sha512-WMdYLhDIsuzViOTXDH+tJ1GijkFp5khSYolnxR/11zmfhNDtuo7jof72xPGFy+KRpsz6tug39RhivCj77qqO0w==} engines: {node: '>=10.0.0'} dependencies: - '@apideck/better-ajv-errors': 0.3.2_ajv@8.9.0 + '@apideck/better-ajv-errors': 0.3.2_ajv@8.10.0 '@babel/core': 7.17.0 '@babel/preset-env': 7.16.11_@babel+core@7.17.0 '@babel/runtime': 7.17.0 - '@rollup/plugin-babel': 5.3.0_@babel+core@7.17.0+rollup@2.67.0 - '@rollup/plugin-node-resolve': 11.2.1_rollup@2.67.0 - '@rollup/plugin-replace': 2.4.2_rollup@2.67.0 + '@rollup/plugin-babel': 5.3.0_@babel+core@7.17.0+rollup@2.67.1 + '@rollup/plugin-node-resolve': 11.2.1_rollup@2.67.1 + '@rollup/plugin-replace': 2.4.2_rollup@2.67.1 '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.9.0 + ajv: 8.10.0 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 glob: 7.2.0 lodash: 4.17.21 pretty-bytes: 5.6.0 - rollup: 2.67.0 - rollup-plugin-terser: 7.0.2_rollup@2.67.0 + rollup: 2.67.1 + rollup-plugin-terser: 7.0.2_rollup@2.67.1 source-map: 0.8.0-beta.0 source-map-url: 0.4.1 stringify-object: 3.3.0 @@ -7793,8 +7814,8 @@ packages: resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} dev: true - /ws/8.4.2: - resolution: {integrity: sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==} + /ws/8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1