Liu Song’s Projects


~/Projects/hoppscotch

git clone https://code.lsong.org/hoppscotch

Commit

Commit
dbae90a1937bd96d976ff24bf6b4babc4abcb6b9
Author
liyasthomas <[email protected]>
Date
2021-09-08 09:21:22 +0530 +0530
Diffstat
 components/app/Fuse.vue | 38 +++++++++
 components/app/Header.vue | 2 
 components/app/Lunr.vue | 59 ---------------
  | 11 +-
  | 0 
 components/app/Shortcuts.vue | 128 +++++++++++++++++++-------------
 components/app/ShortcutsEntry.vue | 31 +++++++
 helpers/shortcuts.js | 45 +++++++++-
 package-lock.json | 41 +++------
 package.json | 3 

refactor: replace lunr with fuse


diff --git a/components/app/Fuse.vue b/components/app/Fuse.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ee19a31fb4001dc3504ac9fe9f872643862b5e14
--- /dev/null
+++ b/components/app/Fuse.vue
@@ -0,0 +1,38 @@
+<template>
+  <div key="outputHash">
+    <AppPowerSearchEntry
+      v-for="(shortcut, shortcutIndex) in searchResults"
+      :key="`shortcut-${shortcutIndex}`"
+      :ref="`item-${shortcutIndex}`"
+      :shortcut="shortcut.item"
+      @action="$emit('action', shortcut.item.action)"
+    />
+    <div
+      v-if="searchResults.length === 0"
+      class="flex flex-col text-secondaryLight p-4 items-center justify-center"
+    >
+      <i class="opacity-75 pb-2 material-icons">manage_search</i>
+      <span class="text-center">
+        {{ $t("state.nothing_found") }} "{{ search }}"
+      </span>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { computed } from "@nuxtjs/composition-api"
+import Fuse from "fuse.js"
+
+const props = defineProps<{
+  input: Record<string, any>[]
+  search: string
+}>()
+
+const options = {
+  keys: ["keys", "label", "action", "tags"],
+}
+
+const fuse = new Fuse(props.input, options)
+
+const searchResults = computed(() => fuse.search(props.search))
+</script>




diff --git a/components/app/Header.vue b/components/app/Header.vue
index 7d32d2e431798aa363e8fc47033bcdb4727290ce..567e969a76f7d334a7bb71d33f5b3e781200aa1e 100644
--- a/components/app/Header.vue
+++ b/components/app/Header.vue
@@ -83,7 +83,7 @@     
     <AppAnnouncement v-if="!isOnLine" />
     <FirebaseLogin :show="showLogin" @hide-modal="showLogin = false" />
     <AppSupport :show="showSupport" @hide-modal="showSupport = false" />
-    <AppSearch :show="showSearch" @hide-modal="showSearch = false" />
+    <AppPowerSearch :show="showSearch" @hide-modal="showSearch = false" />
   </div>
 </template>
 




diff --git a/components/app/Lunr.vue b/components/app/Lunr.vue
deleted file mode 100644
index c6f3dcbf383e0464dd5b28a8e6306f241025fa0d..0000000000000000000000000000000000000000
--- a/components/app/Lunr.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <div key="outputHash">
-    <AppSearchEntry
-      v-for="(shortcut, shortcutIndex) in searchResults"
-      :key="`shortcut-${shortcutIndex}`"
-      :ref="`item-${shortcutIndex}`"
-      :shortcut="shortcut"
-      @action="$emit('action', shortcut.action)"
-    />
-    <div
-      v-if="searchResults.length === 0"
-      class="flex flex-col text-secondaryLight p-4 items-center justify-center"
-    >
-      <i class="opacity-75 pb-2 material-icons">manage_search</i>
-      <span class="text-center">
-        {{ $t("state.nothing_found") }} "{{ search }}"
-      </span>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { computed } from "@nuxtjs/composition-api"
-import lunr from "lunr"
-
-const props = defineProps<{
-  input: Record<string, any>[]
-  search: string
-}>()
-
-const transformedInput = computed(() =>
-  props.input.map((val, i) => {
-    return {
-      __id: i,
-      ...val,
-    }
-  })
-)
-
-const firstInput = computed(() =>
-  transformedInput.value.length > 0 ? transformedInput.value[0] : {}
-)
-
-const idx = computed(() => {
-  return lunr(function () {
-    this.ref("__id")
-
-    Object.keys(firstInput.value).forEach((key) => this.field(key), this)
-
-    transformedInput.value.forEach((doc) => {
-      this.add(doc)
-    }, this)
-  })
-})
-
-const searchResults = computed(() =>
-  idx.value.search(`${props.search}*`).map((result) => props.input[+result.ref])
-)
-</script>




diff --git a/components/app/PowerSearch.vue b/components/app/PowerSearch.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ad402751c385daf94e3ec2ece98a1f9e20d14496
--- /dev/null
+++ b/components/app/PowerSearch.vue
@@ -0,0 +1,77 @@
+<template>
+  <SmartModal v-if="show" full-width @close="$emit('hide-modal')">
+    <template #body>
+      <input
+        id="command"
+        v-model="search"
+        v-focus
+        type="text"
+        autocomplete="off"
+        name="command"
+        :placeholder="$t('app.type_a_command_search').toString()"
+        class="
+          bg-transparent
+          border-b border-dividerLight
+          flex flex-shrink-0
+          text-secondaryDark text-base
+          p-6
+        "
+      />
+      <AppFuse
+        v-if="search"
+        :input="fuse"
+        :search="search"
+        @action="runAction"
+      />
+      <div
+        v-else
+        class="
+          divide-y divide-dividerLight
+          flex flex-col
+          space-y-4
+          flex-1
+          overflow-auto
+          hide-scrollbar
+        "
+      >
+        <div v-for="(map, mapIndex) in mappings" :key="`map-${mapIndex}`">
+          <h5 class="my-2 text-secondaryLight py-2 px-6">
+            {{ $t(map.section) }}
+          </h5>
+          <AppPowerSearchEntry
+            v-for="(shortcut, shortcutIndex) in map.shortcuts"
+            :key="`map-${mapIndex}-shortcut-${shortcutIndex}`"
+            :shortcut="shortcut"
+            @action="runAction"
+          />
+        </div>
+      </div>
+    </template>
+  </SmartModal>
+</template>
+
+<script setup lang="ts">
+import { ref } from "@nuxtjs/composition-api"
+import { HoppAction, invokeAction } from "~/helpers/actions"
+import { spotlight as mappings, fuse } from "~/helpers/shortcuts"
+
+defineProps<{
+  show: boolean
+}>()
+
+const emit = defineEmits<{
+  (e: "hide-modal"): void
+}>()
+
+const search = ref("")
+
+const hideModal = () => {
+  search.value = ""
+  emit("hide-modal")
+}
+
+const runAction = (command: HoppAction) => {
+  invokeAction(command)
+  hideModal()
+}
+</script>




diff --git a/components/app/PowerSearchEntry.vue b/components/app/PowerSearchEntry.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2b25f9eff35f89b6aeec929eea293cbe64e1d93d
--- /dev/null
+++ b/components/app/PowerSearchEntry.vue
@@ -0,0 +1,66 @@
+<template>
+  <div
+    class="
+      cursor-pointer
+      flex
+      py-2
+      px-6
+      transition
+      items-center
+      group
+      hover:bg-primaryLight
+      focus:outline-none
+      focus-visible:bg-primaryLight
+    "
+    tabindex="0"
+    @click="$emit('action', shortcut.action)"
+    @keydown.enter="$emit('action', shortcut.action)"
+  >
+    <SmartIcon
+      class="
+        mr-4
+        opacity-75
+        transition
+        svg-icons
+        group-hover:opacity-100
+        group-focus:opacity-100
+      "
+      :name="shortcut.icon"
+    />
+    <span
+      class="
+        flex flex-1
+        mr-4
+        transition
+        group-hover:text-secondaryDark
+        group-focus:text-secondaryDark
+      "
+    >
+      {{ $t(shortcut.label) }}
+    </span>
+    <span
+      v-for="(key, keyIndex) in shortcut.keys"
+      :key="`key-${keyIndex}`"
+      class="shortcut-key"
+    >
+      {{ key }}
+    </span>
+  </div>
+</template>
+
+<script setup lang="ts">
+defineProps<{
+  shortcut: Object
+}>()
+</script>
+
+<style lang="scss" scoped>
+.shortcut-key {
+  @apply bg-dividerLight;
+  @apply rounded;
+  @apply ml-2;
+  @apply py-1;
+  @apply px-2;
+  @apply inline-flex;
+}
+</style>




diff --git a/components/app/Search.vue b/components/app/Search.vue
deleted file mode 100644
index dbdd68f38e0b9f3fe193ba383f152404582aab8e..0000000000000000000000000000000000000000
--- a/components/app/Search.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-<template>
-  <SmartModal v-if="show" full-width @close="$emit('hide-modal')">
-    <template #body>
-      <input
-        id="command"
-        v-model="search"
-        v-focus
-        type="text"
-        autocomplete="off"
-        name="command"
-        :placeholder="$t('app.type_a_command_search')"
-        class="
-          bg-transparent
-          border-b border-dividerLight
-          flex flex-shrink-0
-          text-secondaryDark text-base
-          p-6
-        "
-      />
-      <AppLunr
-        v-if="search"
-        log
-        :input="lunr"
-        :search="search"
-        @action="runAction"
-      />
-      <div
-        v-else
-        class="
-          divide-y divide-dividerLight
-          flex flex-col
-          space-y-4
-          flex-1
-          overflow-auto
-          hide-scrollbar
-        "
-      >
-        <div v-for="(map, mapIndex) in mappings" :key="`map-${mapIndex}`">
-          <h5 class="my-2 text-secondaryLight py-2 px-6">
-            {{ $t(map.section) }}
-          </h5>
-          <AppSearchEntry
-            v-for="(shortcut, shortcutIndex) in map.shortcuts"
-            :key="`map-${mapIndex}-shortcut-${shortcutIndex}`"
-            :shortcut="shortcut"
-            @action="runAction"
-          />
-        </div>
-      </div>
-    </template>
-  </SmartModal>
-</template>
-
-<script setup lang="ts">
-import { ref } from "@nuxtjs/composition-api"
-import { HoppAction, invokeAction } from "~/helpers/actions"
-import { spotlight as mappings, lunr } from "~/helpers/shortcuts"
-
-defineProps<{
-  show: boolean
-}>()
-
-const emit = defineEmits<{
-  (e: "hide-modal"): void
-}>()
-
-const search = ref("")
-
-const hideModal = () => {
-  search.value = ""
-  emit("hide-modal")
-}
-
-const runAction = (command: HoppAction) => {
-  invokeAction(command)
-  hideModal()
-}
-</script>




diff --git a/components/app/SearchEntry.vue b/components/app/SearchEntry.vue
deleted file mode 100644
index 2b25f9eff35f89b6aeec929eea293cbe64e1d93d..0000000000000000000000000000000000000000
--- a/components/app/SearchEntry.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<template>
-  <div
-    class="
-      cursor-pointer
-      flex
-      py-2
-      px-6
-      transition
-      items-center
-      group
-      hover:bg-primaryLight
-      focus:outline-none
-      focus-visible:bg-primaryLight
-    "
-    tabindex="0"
-    @click="$emit('action', shortcut.action)"
-    @keydown.enter="$emit('action', shortcut.action)"
-  >
-    <SmartIcon
-      class="
-        mr-4
-        opacity-75
-        transition
-        svg-icons
-        group-hover:opacity-100
-        group-focus:opacity-100
-      "
-      :name="shortcut.icon"
-    />
-    <span
-      class="
-        flex flex-1
-        mr-4
-        transition
-        group-hover:text-secondaryDark
-        group-focus:text-secondaryDark
-      "
-    >
-      {{ $t(shortcut.label) }}
-    </span>
-    <span
-      v-for="(key, keyIndex) in shortcut.keys"
-      :key="`key-${keyIndex}`"
-      class="shortcut-key"
-    >
-      {{ key }}
-    </span>
-  </div>
-</template>
-
-<script setup lang="ts">
-defineProps<{
-  shortcut: Object
-}>()
-</script>
-
-<style lang="scss" scoped>
-.shortcut-key {
-  @apply bg-dividerLight;
-  @apply rounded;
-  @apply ml-2;
-  @apply py-1;
-  @apply px-2;
-  @apply inline-flex;
-}
-</style>




diff --git a/components/app/Shortcuts.vue b/components/app/Shortcuts.vue
index 1a27f422f76f109feaa5b1d825e4d31e529e5e66..0b8fd803dc0a85c3fbe228c05de3434fc97e1bd0 100644
--- a/components/app/Shortcuts.vue
+++ b/components/app/Shortcuts.vue
@@ -19,12 +19,13 @@         
<ButtonSecondary svg="x" class="rounded" @click.native="close()" /> </div> </div> - <!-- <div class="bg-primary border-b border-dividerLight"> + <div class="bg-primary border-b border-dividerLight"> <div class="flex flex-col my-4 mx-6"> <input v-model="filterText" + top-0 <AppSlideOver :show="show" @close="close()"> - bg-primary + autocomplete="off" class=" bg-primaryLight border border-dividerLight @@ -36,111 +37,136 @@ px-4 focus-visible:border-divider " :placeholder="$t('action.search')" + v-focus /> </div> - </div> --> - <div + </div> + top-0 class=" <div + <div +<template> + bg-primary <div -<template> + bg-primary <div - <AppSlideOver :show="show" @close="close()"> + border-b border-dividerLight <div - <template #content> + flex + <h1 class="font-semibold text-secondaryDark"> <template> + border-b border-dividerLight class=" +<template> <template> - bg-primary + flex + v-for="(shortcut, index) in map.item.shortcuts" + :key="`shortcut-${index}`" + :shortcut="shortcut" + /> + </div> <div + v-if="searchResults.length === 0" + class=" + z-10 <div + z-10 class=" - <div + z-10 bg-primary - <div + z-10 border-b border-dividerLight + justify-center + " > + <i class="opacity-75 pb-2 material-icons">manage_search</i> + <span class="text-center"> + {{ $t("state.nothing_found") }} "{{ filterText }}" + </span> + </div> + </div> <div - p-2 + v-else class=" + <div - class=" + <div <template> - class=" + <div <AppSlideOver :show="show" @close="close()"> - class=" + <div <template #content> +<template> class=" + > + <div <div - class=" + <div class=" - class=" + <div bg-primary - class=" + <div border-b border-dividerLight - class=" + <div flex - class=" + <div p-2 - bg-primary + class=" - bg-primary + class=" <template> - :key="`map-${mapIndex}-shortcut-${shortcutIndex}-key-${keyIndex}`" + <AppShortcutsEntry - bg-primary + class=" <template #content> - bg-primary + class=" <div - {{ key }} + :shortcut="shortcut" - </span> - </div> + /> </div> </div> </template> </AppSlideOver> </template> - border-b border-dividerLight <template> - border-b border-dividerLight <AppSlideOver :show="show" @close="close()"> -import shortcuts from "~/helpers/shortcuts" - -export default defineComponent({ - border-b border-dividerLight class=" - border-b border-dividerLight + items-center bg-primary - border-b border-dividerLight + items-center border-b border-dividerLight - border-b border-dividerLight + items-center flex border-b border-dividerLight + items-center p-2 - flex + sticky - flex <template> + flex + - flex + sticky <AppSlideOver :show="show" @close="close()"> - border-b border-dividerLight + keys: ["shortcuts.label"], +} border-b border-dividerLight - flex +<template> <template #content> - flex <div - flex + + sticky class=" - flex + + sticky bg-primary border-b border-dividerLight - border-b border-dividerLight - flex + sticky border-b border-dividerLight - close() { + sticky flex - class=" - }, +}>() border-b border-dividerLight - border-b border-dividerLight - flex +const close = () => { + filterText.value = "" + emit("close") + p-2 p-2 </script> diff --git a/components/app/ShortcutsEntry.vue b/components/app/ShortcutsEntry.vue new file mode 100644 index 0000000000000000000000000000000000000000..7115cc82189da40e89fa613a805534e27a062f24 --- /dev/null +++ b/components/app/ShortcutsEntry.vue @@ -0,0 +1,31 @@ +<template> + <div class="flex items-center"> + <span class="flex flex-1 mr-4"> + {{ $t(shortcut.label) }} + </span> + <span + v-for="(key, index) in shortcut.keys" + :key="`key-${index}`" + class="shortcut-key" + > + {{ key }} + </span> + </div> +</template> + +<script setup lang="ts"> +defineProps<{ + shortcut: Object +}>() +</script> + +<style lang="scss" scoped> +.shortcut-key { + @apply bg-dividerLight; + @apply rounded; + @apply ml-2; + @apply py-1; + @apply px-2; + @apply inline-flex; +} +</style> diff --git a/helpers/shortcuts.js b/helpers/shortcuts.js index 01cce5d48cefbd52645c2c22f64aa298e222e212..2a72b065d9913f26f046cc563c05f0f695e9d847 100644 --- a/helpers/shortcuts.js +++ b/helpers/shortcuts.js @@ -193,37 +193,54 @@ ], }, ] -export const lunr = [ +export const fuse = [ { keys: ["?"], label: "shortcut.general.help_menu", action: "modals.support.toggle", icon: "life-buoy", + tags: [ + "help", + "support", + "menu", + "discord", + label: "shortcut.general.command_menu", keys: ["?"], +import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils" + label: "shortcut.general.help_menu", + "troubleshooting", + "chat", + "community", + "feedback", + "report", + "bug", + "issue", + "ticket", + ], }, { keys: [getPlatformSpecialKey(), "K"], label: "shortcut.general.show_all", action: "flyouts.keybinds.toggle", icon: "zap", + keys: [getPlatformSpecialKey(), "K"], keys: ["?"], - { }, { keys: [getPlatformSpecialKey(), "←"], label: "shortcut.navigation.back", action: "navigation.jump.back", icon: "arrow-right", + keys: [getPlatformSpecialKey(), "K"], label: "shortcut.general.help_menu", - }, { keys: [getPlatformSpecialKey(), "→"], label: "shortcut.navigation.forward", action: "navigation.jump.forward", icon: "arrow-right", - tags: "forward jump next forward page navigation go", + tags: ["forward", "jump", "next", "forward", "page", "navigation", "go"], }, { keys: [getPlatformAlternateKey(), "R"], @@ -230,6 +248,7 @@ label: "shortcut.navigation.rest", action: "navigation.jump.rest", icon: "arrow-right", import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils" + label: "shortcut.request.delete_method", }, { keys: [getPlatformAlternateKey(), "Q"], @@ -236,7 +256,8 @@ label: "shortcut.navigation.graphql", action: "navigation.jump.graphql", icon: "arrow-right", import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils" { + }, { keys: [getPlatformAlternateKey(), "W"], @@ -243,8 +265,20 @@ label: "shortcut.navigation.realtime", action: "navigation.jump.realtime", icon: "arrow-right", import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils" + label: "shortcut.request.save_to_collections", + "realtime", + "jump", + "page", + "navigation", + "websocket", + label: "shortcut.general.show_all", keys: ["?"], import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils" + keys: [getPlatformAlternateKey(), "Q"], + "sse", + "go", + ], +import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils" keys: ["?"], { keys: [getPlatformAlternateKey(), "D"], @@ -252,7 +286,7 @@ label: "shortcut.navigation.documentation", action: "navigation.jump.documentation", icon: "arrow-right", import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils" -import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils" + section: "shortcut.general.title", }, { @@ -261,7 +295,7 @@ label: "shortcut.navigation.settings", action: "navigation.jump.settings", icon: "arrow-right", import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils" - label: "shortcut.general.close_current_menu", + keys: [getPlatformAlternateKey(), "D"], }, { keys: [getPlatformSpecialKey(), "M"], @@ -269,6 +303,6 @@ label: "shortcut.miscellaneous.invite", action: "modals.share.toggle", icon: "gift", import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils" - label: "shortcut.request.send_request", + label: "shortcut.navigation.documentation", }, ] diff --git a/package-lock.json b/package-lock.json index 85673876a2177eacf0bfd3624998ea178d928433..897a20ee07e472c2eda684476903cbb9cf3bbb0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,11 +21,11 @@ "acorn-walk": "^8.2.0", "core-js": "^3.17.2", "esprima": "^4.0.1", "firebase": "^9.0.1", + "fuse.js": "^6.4.6", "graphql": "^15.5.0", "graphql-language-service-interface": "^2.8.4", "json-loader": "^0.5.7", "lodash": "^4.17.21", - "lunr": "^2.3.9", "mustache": "^4.2.0", "node-interval-tree": "^1.3.3", "nuxt": "^2.15.8", @@ -62,7 +62,6 @@ "@nuxtjs/svg": "^0.2.0", "@testing-library/jest-dom": "^5.14.1", "@types/cookie": "^0.4.1", "@types/lodash": "^4.14.172", - "@types/lunr": "^2.3.4", "@types/splitpanes": "^2.2.1", "@vue/runtime-dom": "^3.2.9", "@vue/test-utils": "^1.2.2", @@ -8129,12 +8128,6 @@ "node_modules/@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "node_modules/@types/lunr": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/lunr/-/lunr-2.3.4.tgz", - "integrity": "sha512-j4x4XJwZvorEUbA519VdQ5b9AOU9TSvfi8tvxMAfP8XzNLtFex7A8vFQwqOx3WACbV0KMXbACV3cZl4/gynQ7g==", - "dev": true }, "node_modules/@types/mdast": { "version": "3.0.7", @@ -17443,6 +17436,14 @@ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/fuse.js": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.4.6.tgz", + "integrity": "sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw==", + "engines": { + "node": ">=10" + } + }, "node_modules/gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", @@ -23241,12 +23242,6 @@ "yallist": "^3.0.2" } }, "integrity": "sha512-qH9AYSQDDTaSWSdtOvB3G1RdPpcYSgddAdFYqpFewlKQ1GJj/L+sM7vwqCG7/ip6AiM04Sry1sgmFzaEoFREUA==", - "version": "2.0.0", - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - }, - "integrity": "sha512-qH9AYSQDDTaSWSdtOvB3G1RdPpcYSgddAdFYqpFewlKQ1GJj/L+sM7vwqCG7/ip6AiM04Sry1sgmFzaEoFREUA==", "": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -42088,13 +42083,6 @@ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "dir-glob": "^3.0.1", - "requires": true, - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/lunr/-/lunr-2.3.4.tgz", - "integrity": "sha512-j4x4XJwZvorEUbA519VdQ5b9AOU9TSvfi8tvxMAfP8XzNLtFex7A8vFQwqOx3WACbV0KMXbACV3cZl4/gynQ7g==", - "dev": true - }, - "dir-glob": "^3.0.1", "packages": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz", @@ -49464,6 +49452,12 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, { + "schema-utils": "^1.0.0", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.4.6.tgz", + "integrity": "sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw==" + }, +{ "@babel/plugin-transform-for-of": "^7.0.0", "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", @@ -53819,11 +53813,6 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "requires": { "yallist": "^3.0.2" } - }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" }, "magic-string": { "version": "0.25.7", diff --git a/package.json b/package.json index 8a015486602d3285b9c4e7ee1d665ff5a8496198..71b1e7143ca076c776140c75cbc3069a1324d8b9 100644 --- a/package.json +++ b/package.json @@ -37,11 +37,11 @@ "acorn-walk": "^8.2.0", "core-js": "^3.17.2", "esprima": "^4.0.1", "firebase": "^9.0.1", + "fuse.js": "^6.4.6", "graphql": "^15.5.0", "graphql-language-service-interface": "^2.8.4", "json-loader": "^0.5.7", "lodash": "^4.17.21", - "lunr": "^2.3.9", "mustache": "^4.2.0", "node-interval-tree": "^1.3.3", "nuxt": "^2.15.8", @@ -78,7 +78,6 @@ "@nuxtjs/svg": "^0.2.0", "@testing-library/jest-dom": "^5.14.1", "@types/cookie": "^0.4.1", "@types/lodash": "^4.14.172", - "@types/lunr": "^2.3.4", "@types/splitpanes": "^2.2.1", "@vue/runtime-dom": "^3.2.9", "@vue/test-utils": "^1.2.2",