diff options
| author | omagdy7 <omar.professional8777@gmail.com> | 2023-11-02 23:55:13 +0200 |
|---|---|---|
| committer | omagdy7 <omar.professional8777@gmail.com> | 2023-11-02 23:55:13 +0200 |
| commit | c38d70c1752234bfc041c7fd5d762eec83cfbb9b (patch) | |
| tree | 3a94ec905db50dc2f217d0390c718dc17272d2ba | |
| download | ollama-logseq-c38d70c1752234bfc041c7fd5d762eec83cfbb9b.tar.xz ollama-logseq-c38d70c1752234bfc041c7fd5d762eec83cfbb9b.zip | |
First commit
| -rw-r--r-- | .gitignore | 94 | ||||
| -rw-r--r-- | README.md | 31 | ||||
| -rw-r--r-- | index.html | 14 | ||||
| -rw-r--r-- | index.ts | 89 | ||||
| -rw-r--r-- | package.json | 29 | ||||
| -rw-r--r-- | pnpm-lock.yaml | 1987 |
6 files changed, 2244 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eabe0a3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,94 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc + +# parcel +.parcel-cache + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# IDEs and editors +.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +.sass-cache +connect.lock +typings + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + + +# Dependency directories +node_modules/ +jspm_packages/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next + +# Lerna +lerna-debug.log + +# System Files +.DS_Store +Thumbs.db diff --git a/README.md b/README.md new file mode 100644 index 0000000..5d17030 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +## Reddit Hot News Sample + +This is a sample that show you how to manipulate blocks :) + +### Demo + + + +### API + +[](https://badge.fury.io/js/%40logseq%2Flibs) + +##### [Logseq.Editor](https://logseq.github.io/plugins/interfaces/ieditorproxy.html) + +- `insertBlock: ( + srcBlock: BlockIdentity, content: string, opts?: Partial<{ before: boolean; sibling: boolean; properties: {} }> + ) => Promise<BlockEntity | null>` +- `insertBatchBlock: ( + srcBlock: BlockIdentity, batch: IBatchBlock | Array<IBatchBlock>, opts?: Partial<{ before: boolean, sibling: boolean }> + ) => Promise<Array<BlockEntity> | null>` +- `updateBlock: ( + srcBlock: BlockIdentity, content: string, opts?: Partial<{ properties: {} }> + ) => Promise<void>` +- `removeBlock: ( + srcBlock: BlockIdentity + )` + +### Running the Sample + +- `npm install && npm run build` in terminal to install dependencies. +- `Load unpacked plugin` in Logseq Desktop client. diff --git a/index.html b/index.html new file mode 100644 index 0000000..465c3f0 --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ +<!doctype html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" + content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> + <meta http-equiv="X-UA-Compatible" content="ie=edge"> + <title>r/logseq</title> +</head> +<body> +<div id="app"></div> +<script src="index.ts" type="module"></script> +</body> +</html> diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..a6ec1b1 --- /dev/null +++ b/index.ts @@ -0,0 +1,89 @@ +import '@logseq/libs' +import { LSPluginBaseInfo } from '@logseq/libs/dist/libs' + +const delay = (t = 100) => new Promise(r => setTimeout(r, t)) + +async function loadRedditData () { + const endpoint = 'https://www.reddit.com/r/logseq/hot.json' + + const { data: { children } } = await fetch(endpoint).then(res => res.json()) + const ret = children || [] + + return ret.map(({ data }, i) => { + const { title, selftext, url, ups, downs, num_comments } = data + + return `${i}. [${title}](${url}) [:small.opacity-50 "🔥 ${ups} 💬 ${num_comments}"] +collapsed:: true +> ${selftext}` + }) +} + +/** + * main entry + * @param baseInfo + */ +function main (baseInfo: LSPluginBaseInfo) { + let loading = false + + logseq.provideModel({ + async loadReddits () { + + const info = await logseq.App.getUserConfigs() + if (loading) return + + const pageName = 'reddit-logseq-hots-news' + const blockTitle = (new Date()).toLocaleString() + + logseq.App.pushState('page', { name: pageName }) + + await delay(300) + + loading = true + + try { + const currentPage = await logseq.Editor.getCurrentPage() + if (currentPage?.originalName !== pageName) throw new Error('page error') + + const pageBlocksTree = await logseq.Editor.getCurrentPageBlocksTree() + let targetBlock = pageBlocksTree[0]! + + targetBlock = await logseq.Editor.insertBlock(targetBlock.uuid, '🚀 Fetching r/logseq ...', { before: true }) + + let blocks = await loadRedditData() + + blocks = blocks.map(it => ({ content: it })) + + await logseq.Editor.insertBatchBlock(targetBlock.uuid, blocks, { + sibling: false + }) + + await logseq.Editor.updateBlock(targetBlock.uuid, `## 🔖 r/logseq - ${blockTitle}`) + } catch (e) { + logseq.App.showMsg(e.toString(), 'warning') + console.error(e) + } finally { + loading = false + } + } + }) + + logseq.App.registerUIItem('toolbar', { + key: 'logseq-reddit', + template: ` + <a data-on-click="loadReddits" + class="button"> + <i class="ti ti-brand-reddit"></i> + </a> + ` + }) + + logseq.provideStyle(` + [data-injected-ui=logseq-reddit-${baseInfo.id}] { + display: flex; + align-items: center; + } + `) +} + +// bootstrap +logseq.ready(main).catch(console.error) diff --git a/package.json b/package.json new file mode 100644 index 0000000..84be998 --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "ollama-logseq", + "version": "0.0.1", + "description": "Integrate ollama with logseq and utilizing local LLMs", + "main": "dist/index.html", + "targets": { + "main": false + }, + "default": "dist/index.html", + "repository": { + "type": "git", + "url": "https://github.com/omagdy7/ollama-logseq" + }, + "author": "Logseq", + "scripts": { + "dev": "parcel ./index.html --public-url ./", + "build": "parcel build --public-url . --no-source-maps index.html" + }, + "license": "MIT", + "logseq": { + "id": "_rw0rys037" + }, + "dependencies": { + "@logseq/libs": "^0.0.1-alpha.22" + }, + "devDependencies": { + "parcel": "^2.0.0" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..2f0eb3c --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1987 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@logseq/libs': + specifier: ^0.0.1-alpha.22 + version: 0.0.1-alpha.35 + +devDependencies: + parcel: + specifier: ^2.0.0 + version: 2.10.2 + +packages: + + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.20 + chalk: 2.4.2 + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@lezer/common@1.1.0: + resolution: {integrity: sha512-XPIN3cYDXsoJI/oDWoR2tD++juVrhgIago9xyKhZ7IhGlzdDM9QgC8D8saKNCz5pindGcznFr2HBSsEQSWnSjw==} + dev: true + + /@lezer/lr@1.3.14: + resolution: {integrity: sha512-z5mY4LStlA3yL7aHT/rqgG614cfcvklS+8oFRFBYrs4YaWLJyKKM4+nN6KopToX0o9Hj6zmH6M5kinOYuy06ug==} + dependencies: + '@lezer/common': 1.1.0 + dev: true + + /@lmdb/lmdb-darwin-arm64@2.8.5: + resolution: {integrity: sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@lmdb/lmdb-darwin-x64@2.8.5: + resolution: {integrity: sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@lmdb/lmdb-linux-arm64@2.8.5: + resolution: {integrity: sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@lmdb/lmdb-linux-arm@2.8.5: + resolution: {integrity: sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@lmdb/lmdb-linux-x64@2.8.5: + resolution: {integrity: sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@lmdb/lmdb-win32-x64@2.8.5: + resolution: {integrity: sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@logseq/libs@0.0.1-alpha.35: + resolution: {integrity: sha512-KikcqgolrTFqlEWoiprAdRsz9kwUX3XwcjzWa9usBGLwgGCpq6E/1UvvhQweJJAXAGDUVUHIzdJ6Cm6pvuOBWQ==} + dependencies: + csstype: 3.0.8 + debug: 4.3.1 + dompurify: 2.3.1 + eventemitter3: 4.0.7 + fast-deep-equal: 3.1.3 + lodash-es: 4.17.21 + path: 0.12.7 + snake-case: 3.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@mischnic/json-sourcemap@0.1.1: + resolution: {integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==} + engines: {node: '>=12.0.0'} + dependencies: + '@lezer/common': 1.1.0 + '@lezer/lr': 1.3.14 + json5: 2.2.3 + dev: true + + /@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2: + resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2: + resolution: {integrity: sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2: + resolution: {integrity: sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2: + resolution: {integrity: sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2: + resolution: {integrity: sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2: + resolution: {integrity: sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@parcel/bundler-default@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-XlVGsScK5PgIFXNJ0Yx/+nHu1RFCuslCbrb8MIs0yqS790yzvyJF2QHX5WAr7Qc5powij/+2tfBHiViauWwVpA==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/graph': 3.0.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/rust': 2.10.2 + '@parcel/utils': 2.10.2 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/cache@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-B69e5n+bBzYoaJdUOviYeUT7N1iXI3IC5G8dAxKNZ9Zgn+pjZ5BwltbfmP47+NTfQ7LqM8Ea4UJxysQsLdwb+Q==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.10.2 + dependencies: + '@parcel/core': 2.10.2 + '@parcel/fs': 2.10.2(@parcel/core@2.10.2) + '@parcel/logger': 2.10.2 + '@parcel/utils': 2.10.2 + lmdb: 2.8.5 + dev: true + + /@parcel/codeframe@2.10.2: + resolution: {integrity: sha512-EZrYSIlVg4qiBLHRRqC/BGN2MLG0SKnw4u7kpviwz63I+v36ghqmHGOomwfn4x13nDL+EgOFz4/+Q7QpbMTKug==} + engines: {node: '>= 12.0.0'} + dependencies: + chalk: 4.1.2 + dev: true + + /@parcel/compressor-raw@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-zIbtmL7vGfWkvBwD29zVdDosFR1eKHa29SpPOQXYLmDO0EVdwzYcTQq2OrlZM07o759QUqwXJfuAYxwcBNRTYg==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/config-default@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-BGn7G5MT6VXpnI5Rj8fzHT1ij0YElge3l2KVGSOJ5crho2Fmz7UKmm8kJ9kdcLrzHWOIH07T100YoQuAwKVQaA==} + peerDependencies: + '@parcel/core': ^2.10.2 + dependencies: + '@parcel/bundler-default': 2.10.2(@parcel/core@2.10.2) + '@parcel/compressor-raw': 2.10.2(@parcel/core@2.10.2) + '@parcel/core': 2.10.2 + '@parcel/namer-default': 2.10.2(@parcel/core@2.10.2) + '@parcel/optimizer-css': 2.10.2(@parcel/core@2.10.2) + '@parcel/optimizer-htmlnano': 2.10.2(@parcel/core@2.10.2) + '@parcel/optimizer-image': 2.10.2(@parcel/core@2.10.2) + '@parcel/optimizer-svgo': 2.10.2(@parcel/core@2.10.2) + '@parcel/optimizer-swc': 2.10.2(@parcel/core@2.10.2) + '@parcel/packager-css': 2.10.2(@parcel/core@2.10.2) + '@parcel/packager-html': 2.10.2(@parcel/core@2.10.2) + '@parcel/packager-js': 2.10.2(@parcel/core@2.10.2) + '@parcel/packager-raw': 2.10.2(@parcel/core@2.10.2) + '@parcel/packager-svg': 2.10.2(@parcel/core@2.10.2) + '@parcel/packager-wasm': 2.10.2(@parcel/core@2.10.2) + '@parcel/reporter-dev-server': 2.10.2(@parcel/core@2.10.2) + '@parcel/resolver-default': 2.10.2(@parcel/core@2.10.2) + '@parcel/runtime-browser-hmr': 2.10.2(@parcel/core@2.10.2) + '@parcel/runtime-js': 2.10.2(@parcel/core@2.10.2) + '@parcel/runtime-react-refresh': 2.10.2(@parcel/core@2.10.2) + '@parcel/runtime-service-worker': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-babel': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-css': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-html': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-image': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-js': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-json': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-postcss': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-posthtml': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-raw': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-react-refresh-wrap': 2.10.2(@parcel/core@2.10.2) + '@parcel/transformer-svg': 2.10.2(@parcel/core@2.10.2) + transitivePeerDependencies: + - '@swc/helpers' + - cssnano + - postcss + - purgecss + - relateurl + - srcset + - terser + - typescript + - uncss + dev: true + + /@parcel/core@2.10.2: + resolution: {integrity: sha512-c6hh13oYk9w5creiQ9yCz9GLQ17ZRMonULhJ46J0yoFArynVhNTJ9B5xVst7rS/chOTY8jU0jSdJuxQCR4fjkg==} + engines: {node: '>= 12.0.0'} + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + '@parcel/cache': 2.10.2(@parcel/core@2.10.2) + '@parcel/diagnostic': 2.10.2 + '@parcel/events': 2.10.2 + '@parcel/fs': 2.10.2(@parcel/core@2.10.2) + '@parcel/graph': 3.0.2 + '@parcel/logger': 2.10.2 + '@parcel/package-manager': 2.10.2(@parcel/core@2.10.2) + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/profiler': 2.10.2 + '@parcel/rust': 2.10.2 + '@parcel/source-map': 2.1.1 + '@parcel/types': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + '@parcel/workers': 2.10.2(@parcel/core@2.10.2) + abortcontroller-polyfill: 1.7.5 + base-x: 3.0.9 + browserslist: 4.22.1 + clone: 2.1.2 + dotenv: 7.0.0 + dotenv-expand: 5.1.0 + json5: 2.2.3 + msgpackr: 1.9.9 + nullthrows: 1.1.1 + semver: 7.5.4 + dev: true + + /@parcel/diagnostic@2.10.2: + resolution: {integrity: sha512-FwtphyiV/TJEiYIRYXBOloXp7XhTW37ifRSLr7RdLbDVyn/P9q/7l0+ORlnOL+WuKwbDQtY+dXYLh/ijTsq7qQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + nullthrows: 1.1.1 + dev: true + + /@parcel/events@2.10.2: + resolution: {integrity: sha512-Dp8Oqh5UvSuIASfiHP8jrEtdtzzmTKiOG/RkSL3mtp2tK3mu6dZLJZbcdJXrvBTg7smtRiznkrIOJCawALC7AQ==} + engines: {node: '>= 12.0.0'} + dev: true + + /@parcel/fs@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-80SXdFGDJtil9tTbWrYiZRfQ5ehMAT/dq6eY4EYcFg+MvSiwBL/4GfYMfqXn6AamuSVeQlsFCPpunFLNl9YDDA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.10.2 + dependencies: + '@parcel/core': 2.10.2 + '@parcel/rust': 2.10.2 + '@parcel/types': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + '@parcel/watcher': 2.3.0 + '@parcel/workers': 2.10.2(@parcel/core@2.10.2) + dev: true + + /@parcel/graph@3.0.2: + resolution: {integrity: sha512-cPxCN3+QF+5l4BJ0wnLeb3DPJarWQoD3W984CfuEYy/8Zgo2oayd31soZzkevyTYtp7H4tJKo+I79i2TJdNq5Q==} + engines: {node: '>= 12.0.0'} + dependencies: + nullthrows: 1.1.1 + dev: true + + /@parcel/logger@2.10.2: + resolution: {integrity: sha512-5lufBuBnXDs3hjAaptmeEAxpH0eHe0+2hJvlVv5lE/RwHR7vDjh+FDwzPfCLWNM3TQhPQdZPdHcDsuA539GHcw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/events': 2.10.2 + dev: true + + /@parcel/markdown-ansi@2.10.2: + resolution: {integrity: sha512-uZrysHjJ+0vbQNK2bhKy8yoVso8KnoW6O/SW8MiGQ4lpDJdqHShkW08wZUKr4sjl7h/WVFdNsDdgvi2/ANwoRQ==} + engines: {node: '>= 12.0.0'} + dependencies: + chalk: 4.1.2 + dev: true + + /@parcel/namer-default@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-wjn3MCus0w9IOjCtQsp5fgb8hgITyxMr0OPF9cBVAhVJI1X9vvd4RurHuLJ3MjvlCqrP1en09yg3ME7VO1kPuA==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/node-resolver-core@3.1.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-xvIBgYBRQGmCkfwK/yxVSDtPEvWDVH9poQcGpKHT1jqstYju5crXro0acni5nYF0hWZu7Kttrp9G9fXJQWBksw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@mischnic/json-sourcemap': 0.1.1 + '@parcel/diagnostic': 2.10.2 + '@parcel/fs': 2.10.2(@parcel/core@2.10.2) + '@parcel/rust': 2.10.2 + '@parcel/utils': 2.10.2 + nullthrows: 1.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/optimizer-css@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-05H/Ng90TErSFZkNaUwi7gNCf2gLWi3/w07oIzHu1wjRjjKjZidqaQqZtHTEYoO9ffmhK14Xwh9q4IpOTa0sbQ==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.10.2 + browserslist: 4.22.1 + lightningcss: 1.22.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/optimizer-htmlnano@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-9Sg2xLsfX7CPLd1AO3uVa/Kh9EROKVNHMnmNxlzmO2+LEOU/M1OHalvt4bhC7I+cNFPLN5BePdBv3QMYpO0yyA==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + htmlnano: 2.1.0(svgo@2.8.0) + nullthrows: 1.1.1 + posthtml: 0.16.6 + svgo: 2.8.0 + transitivePeerDependencies: + - '@parcel/core' + - cssnano + - postcss + - purgecss + - relateurl + - srcset + - terser + - typescript + - uncss + dev: true + + /@parcel/optimizer-image@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-X8q7mvWJEIXsEMYHYKbwIRUJvI0W41YWCEW7Ohmn0SSi+KuiO8BW5JEPKs7HboO9bX+i6Yxa/T1h9HgRXhdUug==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + peerDependencies: + '@parcel/core': ^2.10.2 + dependencies: + '@parcel/core': 2.10.2 + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/rust': 2.10.2 + '@parcel/utils': 2.10.2 + '@parcel/workers': 2.10.2(@parcel/core@2.10.2) + dev: true + + /@parcel/optimizer-svgo@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-Ws+xd6nbetMCZHmRj54tIF8wYuu/JwkEvn5BotLE69l3naf2ELtsQ+PHg9G5jUa+PnSNMHhykIhBOqjxhTeq/w==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + svgo: 2.8.0 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/optimizer-swc@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-/4yMgMgLvF4yCHh0QnZlTUTpKobuFK/lNhB1i5yrtiipRaYcS+OgtakB83grfK+x1KwTbYjzXZBILwqu6GKJDQ==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.10.2 + '@swc/core': 1.3.95 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + - '@swc/helpers' + dev: true + + /@parcel/package-manager@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-c91YYsIxjX3YhMvtPT7v2MpDOn/Qyw13bi1+0Ftd2JNjUZPlm8+xKizlmgvdi75dgs7dGIUVpvrGLU9LoKthCA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.10.2 + dependencies: + '@parcel/core': 2.10.2 + '@parcel/diagnostic': 2.10.2 + '@parcel/fs': 2.10.2(@parcel/core@2.10.2) + '@parcel/logger': 2.10.2 + '@parcel/node-resolver-core': 3.1.2(@parcel/core@2.10.2) + '@parcel/types': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + '@parcel/workers': 2.10.2(@parcel/core@2.10.2) + semver: 7.5.4 + dev: true + + /@parcel/packager-css@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-+X4dV7mBdOhXSHeg5gAkk0Qju6A1oezYIancqDC17zoFzbHUfD13nHNDOXrEfMNFVWy93lB8vLJwchH54MDMwQ==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.10.2 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/packager-html@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-GonfLzuzEkelJde89sq9P9LowLJrFNkuEt33nRokc1Q5TPNOWfTYb6difjuVIMr/j0c4nWlOzUrkGJsyo++F7w==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/types': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + nullthrows: 1.1.1 + posthtml: 0.16.6 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/packager-js@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-SgKJqIvMt+UJM0x3F21yBVsgdHbTnOnBrNJ7VoY3nujQX5fa+pxTf0emWuX1vSUDbBaJOmO/pC9rKwWP5enqfQ==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/rust': 2.10.2 + '@parcel/source-map': 2.1.1 + '@parcel/types': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + globals: 13.23.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/packager-raw@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-+/O2DeMIB9d+1+zCPOkaf2aTl2rN5TFod/UcMzG/HGFlDVqhkV9xgfwV4rV+Vso5TlyHA4p53BFgvGWQBQJAQw==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/packager-svg@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-eQx3VJpuuDcen+DcLxlPn95txlnbpEH8TES+Ezym/LFyD8oQQfok/VFHy/iGoG4r1CtH0/c7lFUJE8+LZdwYmQ==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/types': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + posthtml: 0.16.6 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/packager-wasm@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-Y/UyyOePb3WmWy2WtmXn4QLLrb7wjWL/ZhVgvhFiQft4lCbdGBGz1BiKEzhFkkN2IGdX06XZolmKCQieAM6zlQ==} + engines: {node: '>=12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/plugin@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-1u+GJhuqqlYjMAQLBbMExfFCbsbtuSAm6wXmMmTse5cBpFqxgsMumMeztAhcTy0oMnMhbZg2AKZV0XVSMrIgng==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/types': 2.10.2(@parcel/core@2.10.2) + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/profiler@2.10.2: + resolution: {integrity: sha512-YQugGhf12u83O0RJLWbhkPV772nePPxNZjvFJmV++7buPUpgJW2m1lVOrut/s/8ZZIPqcxJe8dyxSSOtvdG7OQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/events': 2.10.2 + chrome-trace-event: 1.0.3 + dev: true + + /@parcel/reporter-cli@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-6/cLuiGfMh1ny8ULNOXJkugIvJRVo4tV4XA3vJXH96SYqFSfiWxtHqb6MAVndBy8MezEAv0EsLqc7yR7ygdZJw==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/types': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + chalk: 4.1.2 + term-size: 2.2.1 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/reporter-dev-server@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-mLEcZFPpw0ixlvbT846NwmPEVv1ej7H5dwCQ3r1Ca1nQjyXkmQMM06rdb5M+/gk12WVEDOuienWqBL44Xsz3NA==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/reporter-tracer@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-oreu3vIdN5u9ONSNhqypcK3nR91NoreR4B4vwD/1Rqod1ud2Vb9awJZv7QIrkdnEMmGcr5DQ/R872s7XYWeZnA==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + chrome-trace-event: 1.0.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/resolver-default@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-ENEq8f4wRQlU7p3tCelXWK6xIsL+57q9hQ+b4eRJOEctjfN1/BguxZDh+P+fIlJ1lkqiX4UB/PUkK97uSI5XTQ==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/node-resolver-core': 3.1.2(@parcel/core@2.10.2) + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/runtime-browser-hmr@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-ABlCzDYI16lAZLTTL2g3JZasU/dWuSzRGK5paC6JhIJJwQwPeTwu4PaUoEPKeyk0iE9PzVuXjkBbGuSLXQFmmA==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/runtime-js@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-a6TaMVg1Xgy+WJJ0a3sC/Taw5hkN4hmLnz00jg7G6LwoGbBpvjJn8pm4eovkMFJz13RCjmS9q0K+qZnvXh1WYA==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/runtime-react-refresh@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-9xW3g4FH9iizHWscHD2yEWJOCfYkIYMbWsZoj0EOMILqrRd1OZxHH8FbLYBQKT6swRbZI2mM19veVVBBfxco/Q==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + react-error-overlay: 6.0.9 + react-refresh: 0.9.0 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/runtime-service-worker@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-XY1GrY4r+zu0b/pZiTflZHdk9+I3XoxpExgPcZzep5hnq2UdyXbS4yDhmen7pTcqay5U9NmRw/62YrKL+yPang==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/rust@2.10.2: + resolution: {integrity: sha512-v/Cyf3iXlzSc6vgvPiEZzqdKAZ1jJ/aZX7y1YSupDh3RoqJI2bZ93kAOyEi+S7P3kshJkQM0px3YveJFOAMUOA==} + engines: {node: '>= 12.0.0'} + dev: true + + /@parcel/source-map@2.1.1: + resolution: {integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==} + engines: {node: ^12.18.3 || >=14} + dependencies: + detect-libc: 1.0.3 + dev: true + + /@parcel/transformer-babel@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-lmuksSzEBdPL1nVTznsQi5hQ+4mJ7GP+jvOv/Tvx3MjnzIu1G6Fs5MvNpAwBRXmG/F1+0aw/Wa8J38HYfN05dA==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.10.2 + browserslist: 4.22.1 + json5: 2.2.3 + nullthrows: 1.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/transformer-css@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-WxKe1YherQrX0vEfxAsBALEIsztGStmfXF0GAMeynE4q/w1iHQdTzu29tqLrJY7x532Ric8TxnwO8zR0r89DJg==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.10.2 + browserslist: 4.22.1 + lightningcss: 1.22.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/transformer-html@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-Zkg1HHdYp14ecdtNF+s4d/e1lr8/PAQgBTYhyEVLVC1N7uivjjZ9XClxZlHuZImbQvX3q3PgZS+PocIizhY4rQ==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/rust': 2.10.2 + nullthrows: 1.1.1 + posthtml: 0.16.6 + posthtml-parser: 0.10.2 + posthtml-render: 3.0.0 + semver: 7.5.4 + srcset: 4.0.0 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/transformer-image@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-sR2kTsPykYRujKR7ISn0d6Fhem1pMQoqm0cFTrtC9Te5pfIjZ72NfM9clP7jPK660Gd2DYudhUa48y+qKBfCAw==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + peerDependencies: + '@parcel/core': ^2.10.2 + dependencies: + '@parcel/core': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/utils': 2.10.2 + '@parcel/workers': 2.10.2(@parcel/core@2.10.2) + nullthrows: 1.1.1 + dev: true + + /@parcel/transformer-js@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-qcVLyikhSVf3oHhzReECkKdPU5uHVH4L0TC5O9ahlsq2IUTqR8Swq+9wUgUN0S2aYFTWreH05bQwBCNrLzF/eQ==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + peerDependencies: + '@parcel/core': ^2.10.2 + dependencies: + '@parcel/core': 2.10.2 + '@parcel/diagnostic': 2.10.2 + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + '@parcel/rust': 2.10.2 + '@parcel/source-map': 2.1.1 + '@parcel/utils': 2.10.2 + '@parcel/workers': 2.10.2(@parcel/core@2.10.2) + '@swc/helpers': 0.5.3 + browserslist: 4.22.1 + nullthrows: 1.1.1 + regenerator-runtime: 0.13.11 + semver: 7.5.4 + dev: true + + /@parcel/transformer-json@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-iVgwuaLNqH3jgoBzMds63zd9FULvYb/s/5Hq9JZJ6pCZrOQoPruurgAW8A/t2IE4CSFkDDNoFvRpjsq1WBsSvA==} + engines: {node: '>= 12.0.0', parcel: ^2.10.2} + dependencies: + '@parcel/plugin': 2.10.2(@parcel/core@2.10.2) + json5: 2.2.3 + transitivePeerDependencies: + - '@parcel/core' + dev: true + + /@parcel/transformer-postcss@2.10.2(@parcel/core@2.10.2): + resolution: {integrity: sha512-2/ehCZgj5TOmsAIeGiLwrm6gO/M+X4fZ/O71MhpmXd8zr08j25T0VdSdw5UyopsBvtPYM7DI/F |
