mirror of
https://github.com/tauri-apps/tauri-search.git
synced 2026-02-04 10:51:19 +01:00
chore: properly setup docs as monorepo
This commit is contained in:
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"i18n-ally.localesPaths": ["docs/locales"]
|
||||
}
|
||||
99
README.md
99
README.md
@@ -14,7 +14,7 @@ If you've already installed all the deps and want more granular control you can
|
||||
|
||||
```bash
|
||||
# start Docker services (you must have Docker installed)
|
||||
docker compose up
|
||||
docker compose up -d
|
||||
# or
|
||||
pnpm run up
|
||||
|
||||
@@ -29,100 +29,3 @@ pnpm run watch
|
||||
|
||||
A browser window should now have opened up pointing to `http://localhost:3333`. See you over there.
|
||||
|
||||
|
||||
## Content Types
|
||||
|
||||
|
||||
|
||||
+++ **1. API Documents**
|
||||
- RUST indexes
|
||||
- _will create index references to all **RUST symbols** and home page_
|
||||
- [Home Page](https://docs.rs/tauri/latest/tauri/) plus sections in home page
|
||||
- [Re-exports](https://docs.rs/tauri/latest/tauri/#reexports)
|
||||
- [Modules](https://docs.rs/tauri/latest/tauri/#modules)
|
||||
- [Structs](https://docs.rs/tauri/latest/tauri/#structs)
|
||||
- [Functions](https://docs.rs/tauri/latest/tauri/#functions)
|
||||
- [Type Definitions](https://docs.rs/tauri/latest/tauri/#types)
|
||||
- **Re-Exports**
|
||||
- [`tauri-api`](https://docs.rs/tauri-api/latest/tauri_api/index.html)
|
||||
- **Modules**:
|
||||
- [`command`](https://docs.rs/tauri-api/latest/tauri_api/command/index.html)
|
||||
- [`http`](https://docs.rs/tauri-api/latest/tauri_api/http/index.html)
|
||||
- etc.
|
||||
- **Functions**:
|
||||
- [`make_request`](https://docs.rs/tauri-api/latest/tauri_api/http/fn.make_request.html)
|
||||
-
|
||||
- **Enums**
|
||||
- [`http::ResponseType`](https://docs.rs/tauri-api/latest/tauri_api/http/enum.ResponseType.html)
|
||||
- [`tauri_api::dialog::Response`](https://docs.rs/tauri-api/latest/tauri_api/dialog/enum.Response.html)
|
||||
- etc.
|
||||
- **Type Definitions**:
|
||||
- [`Result`](https://docs.rs/tauri/latest/tauri/type.Result.html)
|
||||
- etc.
|
||||
- _all indexes will point directly to `docs.rs`_
|
||||
- Typescript indexes
|
||||
- _we will host the API docs on [Tauri's Website](https://tauri.studio) and all search indexes will point there_
|
||||
- indexes will largely mirror what we are doing on the Rust side
|
||||
+++
|
||||
|
||||
- **Primary / Prose Documentation**
|
||||
- _all sections will be authored in English and using Markdown format_
|
||||
- _we will need separate indexes for `i18n` content_
|
||||
- _All documentation outside of generated API docs will be considered part of this section_
|
||||
- The current site includes these areas:
|
||||
- About
|
||||
- Docs section
|
||||
- Community
|
||||
- Configuration
|
||||
|
||||
## Indexes
|
||||
|
||||
### [Meilisearch Index Overview](https://docs.meilisearch.com/learn/core_concepts/indexes.html#index-creation)
|
||||
|
||||
|
||||
|
||||
### [Meilisearch Relevance Overview](https://docs.meilisearch.com/learn/core_concepts/relevancy.html)
|
||||
|
||||
Meilisearch provides **Ranking Rules** which you can use to help tune each index's strategy. The default rule ordering is as follows (most significant first):
|
||||
|
||||
1. Words
|
||||
1. Typo
|
||||
1. Proximity
|
||||
1. Attribute
|
||||
1. Sort
|
||||
1. Exactness
|
||||
|
||||
Rule #4 above -- `Attribute` -- points to another ranking system: **Attribute Ranking**. Attribute Ranking allows you to state the order of importance of each attribute in a document.
|
||||
|
||||
### Tauri Indexes
|
||||
|
||||
- `rust` -
|
||||
- `typescript` -
|
||||
- `docs` - we may break this up into further indexes later but best to start with the KISS principle
|
||||
|
||||
## Documents
|
||||
|
||||
Documents are key-value pairs (referred to as attribute/value in Meili speak).
|
||||
|
||||
- The "Primary Field" is the only _required_ attribute/value pair. It will always have a key of `id` and it's value contains the primary key and document identifier.
|
||||
- Data can be ingested in any of the three formats:
|
||||
- JSOn
|
||||
- [NDJSON](https://docs.meilisearch.com/learn/core_concepts/documents.html#ndjson)
|
||||
- CSV
|
||||
- In general we should prefer NDJSON where possible as it has better performance than JSON and also allows for nested data.
|
||||
|
||||
## Deployment Environments
|
||||
|
||||
You can test everything locally by firing up the included Docker compose configuration: `docker compose up` but for production Meilisearch has three pre-configured setups that Meilisearch provides:
|
||||
|
||||
- [AWS](https://github.com/meilisearch/meilisearch-aws)
|
||||
- [Digital Ocean](https://github.com/meilisearch/meilisearch-digitalocean)
|
||||
- [GCP](https://github.com/meilisearch/meilisearch-gcp)
|
||||
|
||||
I prefer AWS out of familiarity but also:
|
||||
- arguably their investment in Rust might facilitate future synergies
|
||||
- since we use Netlify for hosting and Netlify uses AWS for functions and basic CDN (advanced CDN is via Cloudflare)
|
||||
|
||||
That said, we probably need to consider Digital Ocean too simply because that is the status quo. I'd avoid GCP.
|
||||
|
||||
> Note: for local experimentation you can use the Meilisearch API directly at http://localhost:7700 or fire up the demo app with `pnpm run demo`
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020-2021 Anthony Fu
|
||||
Copyright (c) 2020-2021 The Tauri Programme in the Commons Conservancy
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
SOFTWARE.
|
||||
@@ -19,7 +19,7 @@
|
||||
"nprogress": "^0.2.0",
|
||||
"pinia": "^2.0.9",
|
||||
"prism-theme-vars": "^0.2.2",
|
||||
"tauri-search": "link:../",
|
||||
"tauri-search": "workspace:*",
|
||||
"ts-morph": "^13.0.3",
|
||||
"vue": "^3.2.28",
|
||||
"vue-demi": "^0.12.1",
|
||||
|
||||
7
docs/src/components.d.ts
vendored
7
docs/src/components.d.ts
vendored
@@ -4,12 +4,9 @@
|
||||
|
||||
declare module 'vue' {
|
||||
export interface GlobalComponents {
|
||||
'AntDesign:fileMarkdownOutlined': typeof import('~icons/ant-design/file-markdown-outlined')['default']
|
||||
'Bx:bxSearchAlt': typeof import('~icons/bx/bx-search-alt')['default']
|
||||
'Carbon:document': typeof import('~icons/carbon/document')['default']
|
||||
'Carbon:errorFilled': typeof import('~icons/carbon/error-filled')['default']
|
||||
'Carbon:listDropdown': typeof import('~icons/carbon/list-dropdown')['default']
|
||||
'Carbon:nextFilled': typeof import('~icons/carbon/next-filled')['default']
|
||||
CarbonLanguage: typeof import('~icons/carbon/language')['default']
|
||||
CarbonMoon: typeof import('~icons/carbon/moon')['default']
|
||||
CarbonSun: typeof import('~icons/carbon/sun')['default']
|
||||
@@ -17,10 +14,8 @@ declare module 'vue' {
|
||||
'Fluent:databaseSearch24Regular': typeof import('~icons/fluent/database-search24-regular')['default']
|
||||
Footer: typeof import('./components/Footer.vue')['default']
|
||||
'Mdi:folderHome': typeof import('~icons/mdi/folder-home')['default']
|
||||
'Mdi:github': typeof import('~icons/mdi/github')['default']
|
||||
'Mdi:languageRust': typeof import('~icons/mdi/language-rust')['default']
|
||||
'Mdi:languageTypescript': typeof import('~icons/mdi/language-typescript')['default']
|
||||
'Ph:linkLight': typeof import('~icons/ph/link-light')['default']
|
||||
README: typeof import('./components/README.md')['default']
|
||||
SearchActions: typeof import('./components/SearchActions.vue')['default']
|
||||
SearchHit: typeof import('./components/SearchHit.vue')['default']
|
||||
@@ -29,8 +24,6 @@ declare module 'vue' {
|
||||
SimpleCard: typeof import('./components/SimpleCard.vue')['default']
|
||||
'Tabler:databaseImport': typeof import('~icons/tabler/database-import')['default']
|
||||
'Teenyicons:dockerOutline': typeof import('~icons/teenyicons/docker-outline')['default']
|
||||
'VscodeIcons:fileTypeRust': typeof import('~icons/vscode-icons/file-type-rust')['default']
|
||||
'VscodeIcons:fileTypeTypescriptOfficial': typeof import('~icons/vscode-icons/file-type-typescript-official')['default']
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
const props = defineProps({
|
||||
title: { type: String, required: true },
|
||||
/** */
|
||||
kind: { type: String, required: true },
|
||||
/** the link URL */
|
||||
url: { type: String, required: true },
|
||||
@@ -8,7 +9,7 @@ const props = defineProps({
|
||||
description: { type: String, required: false },
|
||||
/** any other properties that don't fit above */
|
||||
rest: { type: Object, required: false },
|
||||
})
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
|
||||
@@ -2,15 +2,75 @@
|
||||
|
||||

|
||||
|
||||
## First Considerations
|
||||
|
||||
If you use Vuepress documentation then there is a fully integrated solution from Meilisearch but outside of that they provide [`docs-searchbar.js`](https://github.com/meilisearch/docs-searchbar.js) repo for any JS based frontend to get a search bar implementation that matches up perfectly with their scraper's configuration.
|
||||
|
||||
Unfortunately this implementation -- as well as the VuePress implementation -- can only work on a _single index_ and it expects the documents to be scraped with MeiliSearch's [scraper]() tool which imposes an awkward looking document (arguably this last point may not matter too much).
|
||||
|
||||
+++ MeiliSearch Scraper and Searchbar schema
|
||||
```ts
|
||||
export type ScrapeSelector =
|
||||
| string
|
||||
| {
|
||||
selector: string;
|
||||
global?: boolean;
|
||||
default_value?: string;
|
||||
};
|
||||
|
||||
export type ScrapeSelectorTargets = {
|
||||
lvl0: ScrapeSelector;
|
||||
lvl1: ScrapeSelector;
|
||||
lvl2: ScrapeSelector;
|
||||
lvl3: ScrapeSelector;
|
||||
lvl4: ScrapeSelector;
|
||||
lvl5: ScrapeSelector;
|
||||
lvl6: ScrapeSelector;
|
||||
/** the main body of text */
|
||||
text: ScrapeSelector;
|
||||
};
|
||||
```
|
||||
> NOTE: there are additional fields but these are the core ones
|
||||
+++
|
||||
+++ To provide flexibility, our parsing/modeling approach supports both
|
||||
```mermaid
|
||||
flowchart TD;
|
||||
TS((TS AST)) --map--> ApiModel[ApiModel]
|
||||
RS((Rust AST)) --map--> ApiModel
|
||||
ApiModel --produces--> ApiIndex(API index)
|
||||
|
||||
Prose((MD AST)) --map--> ProseModel[ProseModel]
|
||||
ProseModel --produces--> ProseIndex(Prose index)
|
||||
|
||||
Repo[/Github API/] --map--> RepoModel[Repo Model]
|
||||
RepoModel --produces--> RepoIndex(Repo Index)
|
||||
|
||||
ApiModel --map--> CrossIndex(Cross index)
|
||||
ProseModel --map--> CrossIndex
|
||||
RepoModel --map--> CrossIndex
|
||||
```
|
||||
+++
|
||||
|
||||
### Single versus Multi Index Solution
|
||||
|
||||
- Having all "content-types" concentrated into a **single index** has the following benefits:
|
||||
- the "relevancy score" will fully determine the sort order for recommended search results; this gives a blended set of content-types based on what it thinks is most relevant being at the top
|
||||
- Meilisearch's [doc-searchbar.js](https://github.com/meilisearch/docs-searchbar.js) component could be used
|
||||
- If we had multiple indexes the benefits are:
|
||||
- ability to have different index settings per content type (aka, synonmys, relevancy rules, stop words, etc.)
|
||||
- we can quite easily _force rank_ content-types (aka., Prose is first, then Repos, then API) if this is desired
|
||||
- this _is_ a reasonable strategy with some portfolios of content-types
|
||||
- others strategies benefit from a blended cross-index sort and we _could_ do some blending ourselves but this is extra work
|
||||
- we can give the property fields more specific names, and add only properties which pertain to the given type.
|
||||
- This helps search maintenance, and custom development of the search toolbar (which is necessary when you have multiple indexes)
|
||||
|
||||
## Installing
|
||||
|
||||
```bash
|
||||
pnpm install docs-searchbar.js
|
||||
```
|
||||
|
||||
- +++ The Repo Suggests these steps to get it working for any JS framework
|
||||
+++ When using the
|
||||
|
||||
Instantiate the component:
|
||||
|
||||
|
||||
@@ -21,7 +21,19 @@ If you've already installed all the deps and want more granular control you can
|
||||
pnpm run watch
|
||||
```
|
||||
+++
|
||||
|
||||
+++ Ways to Consume this library
|
||||
- **Search Development** - if you are updating docs, index definitions, etc. you'll run this in _watch_ mode (aka., `pnpm run start` (first time) or `pnpm run watch`)
|
||||
- **Deployment** - When an _upstream_ dependency is updated this repo should be trigged by a Netlify build hook. For instance:
|
||||
- `tauri` has a new release to production branch, as a `postbuild` step in Netlify build process, it will call Netlify's API and ask for a rebuild of this repo.
|
||||
- we care about picking up the two AST files to build the API docs (`ts-docs.json`, `rust.json`)
|
||||
- `tauri-docs` releases new docs, again a `postbuild` hook on Netlify is called to it requests a rebuild from this repo
|
||||
- here we need to pickup the directly or MD files
|
||||
- `NPM Dependency` - the `Models` you've defined along with all of the _types_ defined are available as an NPM dependency
|
||||
```ts
|
||||
import { ProseModel } from "tauri-search";
|
||||
import type { MeiliSearchResponse } from "tauri-search";
|
||||
```
|
||||
+++
|
||||
|
||||
|
||||
## Sitemap
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
import path from 'path'
|
||||
import { defineConfig } from 'vite'
|
||||
import Vue from '@vitejs/plugin-vue'
|
||||
import Pages from 'vite-plugin-pages'
|
||||
import Layouts from 'vite-plugin-vue-layouts'
|
||||
import Icons from 'unplugin-icons/vite'
|
||||
import IconsResolver from 'unplugin-icons/resolver'
|
||||
import Components from 'unplugin-vue-components/vite'
|
||||
import AutoImport from 'unplugin-auto-import/vite'
|
||||
import Markdown from 'vite-plugin-md'
|
||||
import WindiCSS from 'vite-plugin-windicss'
|
||||
import { VitePWA } from 'vite-plugin-pwa'
|
||||
import VueI18n from '@intlify/vite-plugin-vue-i18n'
|
||||
import Inspect from 'vite-plugin-inspect'
|
||||
import Prism from 'markdown-it-prism'
|
||||
import LinkAttributes from 'markdown-it-link-attributes'
|
||||
import MdCollapsible from 'markdown-it-collapsible'
|
||||
import path from "path";
|
||||
import { defineConfig } from "vite";
|
||||
import Vue from "@vitejs/plugin-vue";
|
||||
import Pages from "vite-plugin-pages";
|
||||
import Layouts from "vite-plugin-vue-layouts";
|
||||
import Icons from "unplugin-icons/vite";
|
||||
import IconsResolver from "unplugin-icons/resolver";
|
||||
import Components from "unplugin-vue-components/vite";
|
||||
import AutoImport from "unplugin-auto-import/vite";
|
||||
import Markdown from "vite-plugin-md";
|
||||
import WindiCSS from "vite-plugin-windicss";
|
||||
import { VitePWA } from "vite-plugin-pwa";
|
||||
import VueI18n from "@intlify/vite-plugin-vue-i18n";
|
||||
import Inspect from "vite-plugin-inspect";
|
||||
import Prism from "markdown-it-prism";
|
||||
import LinkAttributes from "markdown-it-link-attributes";
|
||||
import MdCollapsible from "markdown-it-collapsible";
|
||||
|
||||
const markdownWrapperClasses = 'prose prose-sm m-auto text-left'
|
||||
const markdownWrapperClasses = "prose prose-sm m-auto text-left";
|
||||
|
||||
export default defineConfig({
|
||||
resolve: {
|
||||
alias: {
|
||||
'~/': `${path.resolve(__dirname, 'src')}/`,
|
||||
"~/": `${path.resolve(__dirname, "src")}/`,
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
@@ -31,7 +31,7 @@ export default defineConfig({
|
||||
|
||||
// https://github.com/hannoeru/vite-plugin-pages
|
||||
Pages({
|
||||
extensions: ['vue', 'md'],
|
||||
extensions: ["vue", "md"],
|
||||
}),
|
||||
|
||||
// https://github.com/JohnCampionJr/vite-plugin-vue-layouts
|
||||
@@ -40,20 +40,20 @@ export default defineConfig({
|
||||
// https://github.com/antfu/unplugin-auto-import
|
||||
AutoImport({
|
||||
imports: [
|
||||
'vue',
|
||||
'vue-router',
|
||||
'vue-i18n',
|
||||
'@vueuse/head',
|
||||
'@vueuse/core',
|
||||
'vitest',
|
||||
"vue",
|
||||
"vue-router",
|
||||
"vue-i18n",
|
||||
"@vueuse/head",
|
||||
"@vueuse/core",
|
||||
"vitest",
|
||||
],
|
||||
dts: 'src/auto-imports.d.ts',
|
||||
dts: "src/auto-imports.d.ts",
|
||||
}),
|
||||
|
||||
// https://github.com/antfu/unplugin-vue-components
|
||||
Components({
|
||||
// allow auto load markdown components under `./src/components/`
|
||||
extensions: ['vue', 'md'],
|
||||
extensions: ["vue", "md"],
|
||||
|
||||
// allow auto import and register components used in markdown
|
||||
include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
|
||||
@@ -63,12 +63,12 @@ export default defineConfig({
|
||||
// auto import icons
|
||||
// https://github.com/antfu/unplugin-icons
|
||||
IconsResolver({
|
||||
componentPrefix: '',
|
||||
componentPrefix: "",
|
||||
// enabledCollections: ['carbon']
|
||||
}),
|
||||
],
|
||||
|
||||
dts: 'src/components.d.ts',
|
||||
dts: "src/components.d.ts",
|
||||
}),
|
||||
|
||||
// https://github.com/antfu/unplugin-icons
|
||||
@@ -88,44 +88,42 @@ export default defineConfig({
|
||||
headEnabled: true,
|
||||
markdownItSetup(md) {
|
||||
// https://prismjs.com/
|
||||
// @ts-expect-error types mismatch
|
||||
md.use(Prism)
|
||||
// @ts-expect-error types mismatch
|
||||
md.use(Prism);
|
||||
md.use(LinkAttributes, {
|
||||
pattern: /^https?:\/\//,
|
||||
attrs: {
|
||||
target: '_blank',
|
||||
rel: 'noopener',
|
||||
target: "_blank",
|
||||
rel: "noopener",
|
||||
},
|
||||
})
|
||||
md.use(MdCollapsible)
|
||||
});
|
||||
md.use(MdCollapsible);
|
||||
},
|
||||
}),
|
||||
|
||||
// https://github.com/antfu/vite-plugin-pwa
|
||||
VitePWA({
|
||||
registerType: 'autoUpdate',
|
||||
includeAssets: ['favicon.svg', 'robots.txt', 'safari-pinned-tab.svg'],
|
||||
registerType: "autoUpdate",
|
||||
includeAssets: ["favicon.svg", "robots.txt", "safari-pinned-tab.svg"],
|
||||
manifest: {
|
||||
name: 'Vitesse',
|
||||
short_name: 'Vitesse',
|
||||
theme_color: '#ffffff',
|
||||
name: "Vitesse",
|
||||
short_name: "Vitesse",
|
||||
theme_color: "#ffffff",
|
||||
icons: [
|
||||
{
|
||||
src: '/pwa-192x192.png',
|
||||
sizes: '192x192',
|
||||
type: 'image/png',
|
||||
src: "/pwa-192x192.png",
|
||||
sizes: "192x192",
|
||||
type: "image/png",
|
||||
},
|
||||
{
|
||||
src: '/pwa-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png',
|
||||
src: "/pwa-512x512.png",
|
||||
sizes: "512x512",
|
||||
type: "image/png",
|
||||
},
|
||||
{
|
||||
src: '/pwa-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png',
|
||||
purpose: 'any maskable',
|
||||
src: "/pwa-512x512.png",
|
||||
sizes: "512x512",
|
||||
type: "image/png",
|
||||
purpose: "any maskable",
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -135,7 +133,7 @@ export default defineConfig({
|
||||
VueI18n({
|
||||
runtimeOnly: true,
|
||||
compositionOnly: true,
|
||||
include: [path.resolve(__dirname, 'locales/**')],
|
||||
include: [path.resolve(__dirname, "locales/**")],
|
||||
}),
|
||||
|
||||
// https://github.com/antfu/vite-plugin-inspect
|
||||
@@ -153,26 +151,26 @@ export default defineConfig({
|
||||
|
||||
// https://github.com/antfu/vite-ssg
|
||||
ssgOptions: {
|
||||
script: 'async',
|
||||
formatting: 'minify',
|
||||
script: "async",
|
||||
formatting: "minify",
|
||||
},
|
||||
|
||||
optimizeDeps: {
|
||||
include: ['vue', 'vue-router', '@vueuse/core', '@vueuse/head'],
|
||||
exclude: ['vue-demi'],
|
||||
include: ["vue", "vue-router", "@vueuse/core", "@vueuse/head"],
|
||||
exclude: ["vue-demi"],
|
||||
},
|
||||
|
||||
// https://github.com/vitest-dev/vitest
|
||||
test: {
|
||||
include: ['test/**/*.test.ts'],
|
||||
environment: 'jsdom',
|
||||
include: ["test/**/*.test.ts"],
|
||||
environment: "jsdom",
|
||||
api: {
|
||||
port: 5555,
|
||||
host: '0.0.0.0',
|
||||
host: "0.0.0.0",
|
||||
|
||||
},
|
||||
deps: {
|
||||
inline: ['@vue', '@vueuse', 'vue-demi'],
|
||||
inline: ["@vue", "@vueuse", "vue-demi"],
|
||||
},
|
||||
},
|
||||
})
|
||||
});
|
||||
|
||||
61
package.json
61
package.json
@@ -2,44 +2,40 @@
|
||||
"name": "tauri-search",
|
||||
"version": "0.1.0",
|
||||
"description": "Search Engine for Tauri website",
|
||||
"license": "MIT",
|
||||
"author": "Ken Snyder<ken@ken.net>",
|
||||
"bin": {
|
||||
"ts-ast-overview": "./bin/ts-ast-overview.cjs",
|
||||
"ts-ast": "./bin/ts-ast.cjs"
|
||||
"ts-ast": "./bin/ts-ast.cjs",
|
||||
"ts-ast-overview": "./bin/ts-ast-overview.cjs"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "run-s prep watch",
|
||||
"prep": "run-p start:*",
|
||||
"start:cli": "pnpm install",
|
||||
"start:docs": "pnpm -C docs start",
|
||||
"start:docker": "run-s up",
|
||||
"up": "docker compose up -d",
|
||||
"down": "docker compose down",
|
||||
"restart": "docker compose restart",
|
||||
"vol:inspect": "run-s vol:inspect:*",
|
||||
"vol:inspect:search": "docker volume inspect search_db",
|
||||
"vol:inspect:scraper": "docker volume inspect scraper",
|
||||
"vol:create": "run-s vol:create:*",
|
||||
"vol:create:search": "docker volume create search_db",
|
||||
"vol:create:scraper": "docker volume create scraper",
|
||||
"into:search": "docker exec -it search bash",
|
||||
"into:scraper": "docker exec -it scraper bash",
|
||||
"ping": "http GET localhost:7700/health",
|
||||
"prune": "docker system prune",
|
||||
"dev": "pnpm -C docs dev",
|
||||
"down": "docker compose down",
|
||||
"into:scraper": "docker exec -it scraper bash",
|
||||
"into:search": "docker exec -it search bash",
|
||||
"lint": "eslint src --ext ts,js,tsx,jsx --fix --no-error-on-unmatched-pattern",
|
||||
"ping": "http GET localhost:7700/health",
|
||||
"prep": "run-p start:*",
|
||||
"prune": "docker system prune",
|
||||
"restart": "docker compose restart",
|
||||
"start": "run-s prep watch",
|
||||
"start:cli": "pnpm install",
|
||||
"start:docker": "run-s up",
|
||||
"start:docs": "pnpm -C docs start",
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"ts-ast-overview": "node ./bin/ts-ast-overview.js",
|
||||
"ts-ast": "node ./bin/ts-ast.js",
|
||||
"ts-ast-overview": "node ./bin/ts-ast-overview.js",
|
||||
"up": "docker compose up -d",
|
||||
"vol:create": "run-s vol:create:*",
|
||||
"vol:create:scraper": "docker volume create scraper",
|
||||
"vol:create:search": "docker volume create search_db",
|
||||
"vol:inspect": "run-s vol:inspect:*",
|
||||
"vol:inspect:scraper": "docker volume inspect scraper",
|
||||
"vol:inspect:search": "docker volume inspect search_db",
|
||||
"watch": "run-p watch:*",
|
||||
"watch:docs": "pnpm -C docs dev",
|
||||
"watch:cli": "tsup src/cli/*.ts --format=esm,cjs --clean --sourcemap -d bin --watch",
|
||||
"watch:types": "tsup src/models/index.ts src/type/index.ts --dts"
|
||||
},
|
||||
"author": "Ken Snyder<ken@ken.net>",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14",
|
||||
"pnpm": ">=3"
|
||||
"watch:npm": "tsup src/models/*.ts src/type/*.ts --format=esm,cjs --clean --sourcemap -d dist --dts --watch",
|
||||
"watch:docs": "pnpm -C docs dev"
|
||||
},
|
||||
"dependencies": {
|
||||
"cheerio": "^1.0.0-rc.10",
|
||||
@@ -47,6 +43,7 @@
|
||||
"inferred-types": "^0.18.4",
|
||||
"native-dash": "^1.21.5",
|
||||
"node-fetch": "^3.2.0",
|
||||
"simple-markdown": "^0.7.3",
|
||||
"ts-morph": "^13.0.3",
|
||||
"xxhash-wasm": "^1.0.1"
|
||||
},
|
||||
@@ -58,6 +55,7 @@
|
||||
"@types/node": "^14.18.9",
|
||||
"@typescript-eslint/eslint-plugin": "^5.10.0",
|
||||
"@typescript-eslint/parser": "^5.10.0",
|
||||
"changeset": "^0.2.6",
|
||||
"eslint": "^8.7.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-cypress": "^2.12.1",
|
||||
@@ -76,10 +74,13 @@
|
||||
"npm-run-all": "^4.1.5",
|
||||
"prettier": "^2.5.1",
|
||||
"rimraf": "^3.0.2",
|
||||
"simple-markdown": "^0.7.3",
|
||||
"ts-jest": "^27.1.3",
|
||||
"ts-node": "^10.4.0",
|
||||
"tsup": "^5.11.11",
|
||||
"typescript": "^4.6.0-dev.20220124"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14",
|
||||
"pnpm": ">=3"
|
||||
}
|
||||
}
|
||||
|
||||
17
pnpm-lock.yaml
generated
17
pnpm-lock.yaml
generated
@@ -8,6 +8,7 @@ specifiers:
|
||||
'@types/node': ^14.18.9
|
||||
'@typescript-eslint/eslint-plugin': ^5.10.0
|
||||
'@typescript-eslint/parser': ^5.10.0
|
||||
changeset: ^0.2.6
|
||||
cheerio: ^1.0.0-rc.10
|
||||
eslint: ^8.7.0
|
||||
eslint-config-prettier: ^8.3.0
|
||||
@@ -40,6 +41,7 @@ specifiers:
|
||||
xxhash-wasm: ^1.0.1
|
||||
|
||||
dependencies:
|
||||
changeset: 0.2.6
|
||||
cheerio: 1.0.0-rc.10
|
||||
gray-matter: 4.0.3
|
||||
inferred-types: 0.18.4
|
||||
@@ -1337,6 +1339,13 @@ packages:
|
||||
supports-color: 7.2.0
|
||||
dev: true
|
||||
|
||||
/changeset/0.2.6:
|
||||
resolution: {integrity: sha512-d21ym9zLPOKMVhIa8ulJo5IV3QR2NNdK6BWuwg48qJA0XSQaMeDjo1UGThcTn7YDmU08j3UpKyFNvb3zplk8mw==}
|
||||
dependencies:
|
||||
udc: 1.0.1
|
||||
underscore: 1.13.2
|
||||
dev: false
|
||||
|
||||
/char-regex/1.0.2:
|
||||
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
|
||||
engines: {node: '>=10'}
|
||||
@@ -4591,6 +4600,10 @@ packages:
|
||||
resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}
|
||||
dev: true
|
||||
|
||||
/udc/1.0.1:
|
||||
resolution: {integrity: sha1-xeYkSKzzXqpSTVw2mMhjpbrEa/w=}
|
||||
dev: false
|
||||
|
||||
/unbox-primitive/1.0.1:
|
||||
resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==}
|
||||
dependencies:
|
||||
@@ -4600,6 +4613,10 @@ packages:
|
||||
which-boxed-primitive: 1.0.2
|
||||
dev: true
|
||||
|
||||
/underscore/1.13.2:
|
||||
resolution: {integrity: sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==}
|
||||
dev: false
|
||||
|
||||
/universalify/0.1.2:
|
||||
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
|
||||
engines: {node: '>= 4.0.0'}
|
||||
|
||||
7
pnpm-workspace.yaml
Normal file
7
pnpm-workspace.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
packages:
|
||||
- "docs"
|
||||
# excludes test dirs and node_modules
|
||||
- "!**/test/**"
|
||||
- "!**/node_modules/**"
|
||||
# [Ref](https://pnpm.io/workspaces#shared-workspace-lockfile)
|
||||
shared-workspace-lockfile: true
|
||||
15
tauri-search.code-workspace
Normal file
15
tauri-search.code-workspace
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"name": "✨ tauri-search",
|
||||
"path": "."
|
||||
},
|
||||
{
|
||||
"name": "📚 docs",
|
||||
"path": "./docs"
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
"monorepoWorkspace.includeRoot": true
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
module.exports = () => ({
|
||||
wallaby: {
|
||||
autoDetect: true,
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user