init
This commit is contained in:
parent
760a54efd1
commit
ef59d612c3
23 changed files with 2139 additions and 0 deletions
2
.eslintignore
Normal file
2
.eslintignore
Normal file
|
@ -0,0 +1,2 @@
|
|||
node_modules
|
||||
dist
|
38
.eslintrc.cjs
Normal file
38
.eslintrc.cjs
Normal file
|
@ -0,0 +1,38 @@
|
|||
module.exports = {
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:svelte/recommended",
|
||||
"turbo",
|
||||
"prettier",
|
||||
],
|
||||
|
||||
parser: "@typescript-eslint/parser",
|
||||
|
||||
overrides: [
|
||||
{
|
||||
files: ["*.svelte"],
|
||||
parser: "svelte-eslint-parser",
|
||||
// Parse the script in `.svelte` as TypeScript by adding the following configuration.
|
||||
parserOptions: {
|
||||
parser: "@typescript-eslint/parser",
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
plugins: ["@typescript-eslint", "prettier"],
|
||||
|
||||
rules: {
|
||||
// Note: you must disable the base rule as it can report incorrect errors
|
||||
semi: "off",
|
||||
quotes: "off",
|
||||
"no-undef": "off",
|
||||
"@typescript-eslint/no-var-requires": "off",
|
||||
"@typescript-eslint/no-this-alias": "off",
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"@typescript-eslint/no-unused-vars": "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"turbo/no-undeclared-env-vars": "off",
|
||||
"prettier/prettier": "error",
|
||||
},
|
||||
}
|
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
.idea
|
||||
.vscode
|
||||
.DS_Store
|
||||
package.zip
|
||||
node_modules
|
||||
dev
|
||||
dist
|
||||
build
|
0
CHANGELOG.md
Normal file
0
CHANGELOG.md
Normal file
72
README_en_US.md
Normal file
72
README_en_US.md
Normal file
|
@ -0,0 +1,72 @@
|
|||
This plugin is a community third-party plug-in development template, in addition to the official development template provides a basic level of functionality, has the following features:
|
||||
|
||||
1. based on vite package project, support for hot-loading, in dev mode whether the code or i18n changes can be automatically tracked
|
||||
2. soft linking instead of putting the project into the plugins directory program development, you can feel free to develop multiple projects in the same workspace at the same time, and do not worry about accidentally deleting the project code in the source
|
||||
3. built-in support for the svelte framework, compared to react, vue and other virtual DOM-based solutions, svelte such compiled framework is more suitable for plug-in development of such lightweight scenarios
|
||||
4. provides a github action template to automatically generate package.zip and upload to new release
|
||||
5. pre-packaged siyuan.d.ts module, no need to manually replace the siyuan module under the node_module
|
||||
6. Provide with api.ts and sy-dtype.d.ts
|
||||
|
||||
|
||||
## Template usage
|
||||
|
||||
1. Use Template
|
||||
|
||||
2. Clone to local
|
||||
|
||||
3. Create development soft links
|
||||
|
||||
- Create the dev directory
|
||||
- Run the ``scripts/make_dev_link.py`` script, passing in the absolute path to the plugins directory, e.g.
|
||||
|
||||
```powershell
|
||||
>> sudo python . \scripts\make_dev_link.py H:\temporary folder\SiYuanDevSpace\data\plugins
|
||||
Folder already exists, exit
|
||||
```
|
||||
|
||||
- You may need sudo to run it, I installed sudo myself on windows via scoop and can run it directly that way, normal windows users can first open the command line as administrator and then run it.
|
||||
- If you haven't installed python in your environment, you can also manually make a soft link, reference to [mklink](https://learn.microsoft.com/windows-server/administration/windows-commands/mklink)
|
||||
- Notice: make sure that the name of soft link is same as the name in your plugin.json
|
||||
- As the generated softlink is the same as the plugin name, do not put the project directory under plugins (this is contrary to the official template)
|
||||
|
||||
4. development
|
||||
|
||||
- When pnpm dev mode is enabled, the code and i18n README plugin.json are automatically tracked and the compiled results are placed in the dev directory
|
||||
- The new version of SiYuan already allows soft links, so there is no need to put the project under plugin.
|
||||
|
||||
5. manual release (You can use github action instead)
|
||||
|
||||
- pnpm build, automatically generates package.zip
|
||||
|
||||
|
||||
## Github action
|
||||
|
||||
The github action is included and can be automatically packaged and published:
|
||||
|
||||
1. set the project `https://github.com/OWNER/REPO/settings/actions` page down to **Workflow Permissions** and open the configuration
|
||||
|
||||

|
||||
|
||||
2. when you need to release a version, push a tag in the format `v*` and github will automatically release (including package.zip)
|
||||
|
||||
3. use conservative pre-release by default, if you don't think this is necessary, change the settings in release.yml to
|
||||
|
||||
```yaml
|
||||
- name: Release
|
||||
uses: ncipollo/release-action@v1
|
||||
with.
|
||||
allowUpdates: true
|
||||
artifactErrorsFailBuild: true
|
||||
artifacts: 'package.zip'
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
prerelease: true # change this to false
|
||||
```
|
||||
|
||||
|
||||
## Dependencies
|
||||
|
||||
This item was modified from [terwer/siyuan-plugin-importer](https://github.com/terwer/siyuan-plugin-importer)
|
||||
|
||||
|
||||
*** Translated with www.DeepL.com/Translator (free version) ***
|
||||
|
BIN
icon.png
Normal file
BIN
icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
32
package.json
Normal file
32
package.json
Normal file
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"name": "sy-plugin-template-vite",
|
||||
"version": "1.0.0",
|
||||
"type": "module",
|
||||
"description": "",
|
||||
"repository": "",
|
||||
"homepage": "",
|
||||
"author": "",
|
||||
"license": "GPL-3.0",
|
||||
"scripts": {
|
||||
"dev": "vite build --watch",
|
||||
"build": "vite build",
|
||||
"start": "vite preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sveltejs/vite-plugin-svelte": "^2.0.3",
|
||||
"@tsconfig/svelte": "^4.0.1",
|
||||
"@types/node": "^20.2.0",
|
||||
"fast-glob": "^3.2.12",
|
||||
"glob": "^7.2.3",
|
||||
"minimist": "^1.2.8",
|
||||
"rollup-plugin-livereload": "^2.0.5",
|
||||
"sass": "^1.62.1",
|
||||
"siyuan": "^0.7.1",
|
||||
"svelte": "^3.57.0",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^5.0.4",
|
||||
"vite": "^4.3.7",
|
||||
"vite-plugin-static-copy": "^0.15.0",
|
||||
"vite-plugin-zip-pack": "^1.0.5"
|
||||
}
|
||||
}
|
27
plugin.json
Normal file
27
plugin.json
Normal file
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"name": "sy-plugin-template-vite",
|
||||
"author": "frostime",
|
||||
"url": "https://github.com/frostime/sy-plugin-template-vite",
|
||||
"version": "1.0.0",
|
||||
"displayName": {
|
||||
"en_US": "Plugin Template Vite Ver",
|
||||
"zh_CN": "插件开发模板-Vite版"
|
||||
},
|
||||
"description": {
|
||||
"en_US": "This is a plugin development template based on vite, provided by community",
|
||||
"zh_CN": "这是一个基于 Vite 的插件开发模板, 由社区热心用户提供"
|
||||
},
|
||||
"readme": {
|
||||
"en_US": "README_en_US.md",
|
||||
"zh_CN": "README.md"
|
||||
},
|
||||
"i18n": [
|
||||
"en_US",
|
||||
"zh_CN"
|
||||
],
|
||||
"funding": {
|
||||
"custom": [
|
||||
"https://afdian.net/a/frostime"
|
||||
]
|
||||
}
|
||||
}
|
955
pnpm-lock.yaml
generated
Normal file
955
pnpm-lock.yaml
generated
Normal file
|
@ -0,0 +1,955 @@
|
|||
lockfileVersion: '6.0'
|
||||
|
||||
devDependencies:
|
||||
'@sveltejs/vite-plugin-svelte':
|
||||
specifier: ^2.0.3
|
||||
version: 2.0.3(svelte@3.59.1)(vite@4.3.7)
|
||||
'@tsconfig/svelte':
|
||||
specifier: ^4.0.1
|
||||
version: 4.0.1
|
||||
'@types/node':
|
||||
specifier: ^20.2.0
|
||||
version: 20.2.0
|
||||
fast-glob:
|
||||
specifier: ^3.2.12
|
||||
version: 3.2.12
|
||||
glob:
|
||||
specifier: ^7.2.3
|
||||
version: 7.2.3
|
||||
minimist:
|
||||
specifier: ^1.2.8
|
||||
version: 1.2.8
|
||||
rollup-plugin-livereload:
|
||||
specifier: ^2.0.5
|
||||
version: 2.0.5
|
||||
sass:
|
||||
specifier: ^1.62.1
|
||||
version: 1.62.1
|
||||
siyuan:
|
||||
specifier: ^0.7.1
|
||||
version: 0.7.1
|
||||
svelte:
|
||||
specifier: ^3.57.0
|
||||
version: 3.59.1
|
||||
ts-node:
|
||||
specifier: ^10.9.1
|
||||
version: 10.9.1(@types/node@20.2.0)(typescript@5.0.4)
|
||||
typescript:
|
||||
specifier: ^5.0.4
|
||||
version: 5.0.4
|
||||
vite:
|
||||
specifier: ^4.3.7
|
||||
version: 4.3.7(@types/node@20.2.0)(sass@1.62.1)
|
||||
vite-plugin-static-copy:
|
||||
specifier: ^0.15.0
|
||||
version: 0.15.0(vite@4.3.7)
|
||||
vite-plugin-zip-pack:
|
||||
specifier: ^1.0.5
|
||||
version: 1.0.5(vite@4.3.7)
|
||||
|
||||
packages:
|
||||
|
||||
/@cspotcode/source-map-support@0.8.1:
|
||||
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
'@jridgewell/trace-mapping': 0.3.9
|
||||
dev: true
|
||||
|
||||
/@esbuild/android-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm@0.17.19:
|
||||
resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-x64@0.17.19:
|
||||
resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-x64@0.17.19:
|
||||
resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-x64@0.17.19:
|
||||
resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm@0.17.19:
|
||||
resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ia32@0.17.19:
|
||||
resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-loong64@0.17.19:
|
||||
resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-mips64el@0.17.19:
|
||||
resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [mips64el]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ppc64@0.17.19:
|
||||
resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-riscv64@0.17.19:
|
||||
resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-s390x@0.17.19:
|
||||
resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-x64@0.17.19:
|
||||
resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/netbsd-x64@0.17.19:
|
||||
resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [netbsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/openbsd-x64@0.17.19:
|
||||
resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [openbsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/sunos-x64@0.17.19:
|
||||
resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [sunos]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-ia32@0.17.19:
|
||||
resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-x64@0.17.19:
|
||||
resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@jridgewell/resolve-uri@3.1.1:
|
||||
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
dev: true
|
||||
|
||||
/@jridgewell/sourcemap-codec@1.4.15:
|
||||
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
|
||||
dev: true
|
||||
|
||||
/@jridgewell/trace-mapping@0.3.9:
|
||||
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
|
||||
dependencies:
|
||||
'@jridgewell/resolve-uri': 3.1.1
|
||||
'@jridgewell/sourcemap-codec': 1.4.15
|
||||
dev: true
|
||||
|
||||
/@nodelib/fs.scandir@2.1.5:
|
||||
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
||||
engines: {node: '>= 8'}
|
||||
dependencies:
|
||||
'@nodelib/fs.stat': 2.0.5
|
||||
run-parallel: 1.2.0
|
||||
dev: true
|
||||
|
||||
/@nodelib/fs.stat@2.0.5:
|
||||
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
|
||||
engines: {node: '>= 8'}
|
||||
dev: true
|
||||
|
||||
/@nodelib/fs.walk@1.2.8:
|
||||
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
|
||||
engines: {node: '>= 8'}
|
||||
dependencies:
|
||||
'@nodelib/fs.scandir': 2.1.5
|
||||
fastq: 1.15.0
|
||||
dev: true
|
||||
|
||||
/@sveltejs/vite-plugin-svelte@2.0.3(svelte@3.59.1)(vite@4.3.7):
|
||||
resolution: {integrity: sha512-o+cguBFdwIGtRbNkYOyqTM7KvRUffxh5bfK4oJsWKG2obu+v/cbpT03tJrGl58C7tRXo/aEC0/axN5FVHBj0nA==}
|
||||
engines: {node: ^14.18.0 || >= 16}
|
||||
peerDependencies:
|
||||
svelte: ^3.54.0
|
||||
vite: ^4.0.0
|
||||
dependencies:
|
||||
debug: 4.3.4
|
||||
deepmerge: 4.3.1
|
||||
kleur: 4.1.5
|
||||
magic-string: 0.29.0
|
||||
svelte: 3.59.1
|
||||
svelte-hmr: 0.15.1(svelte@3.59.1)
|
||||
vite: 4.3.7(@types/node@20.2.0)(sass@1.62.1)
|
||||
vitefu: 0.2.4(vite@4.3.7)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@tsconfig/node10@1.0.9:
|
||||
resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
|
||||
dev: true
|
||||
|
||||
/@tsconfig/node12@1.0.11:
|
||||
resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
|
||||
dev: true
|
||||
|
||||
/@tsconfig/node14@1.0.3:
|
||||
resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
|
||||
dev: true
|
||||
|
||||
/@tsconfig/node16@1.0.4:
|
||||
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
|
||||
dev: true
|
||||
|
||||
/@tsconfig/svelte@4.0.1:
|
||||
resolution: {integrity: sha512-B+XlGpmuAQzJqDoBATNCvEPqQg0HkO7S8pM14QDI5NsmtymzRexQ1N+nX2H6RTtFbuFgaZD4I8AAi8voGg0GLg==}
|
||||
dev: true
|
||||
|
||||
/@types/node@20.2.0:
|
||||
resolution: {integrity: sha512-3iD2jaCCziTx04uudpJKwe39QxXgSUnpxXSvRQjRvHPxFQfmfP4NXIm/NURVeNlTCc+ru4WqjYGTmpXrW9uMlw==}
|
||||
dev: true
|
||||
|
||||
/acorn-walk@8.2.0:
|
||||
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
dev: true
|
||||
|
||||
/acorn@8.8.2:
|
||||
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/anymatch@3.1.3:
|
||||
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
|
||||
engines: {node: '>= 8'}
|
||||
dependencies:
|
||||
normalize-path: 3.0.0
|
||||
picomatch: 2.3.1
|
||||
dev: true
|
||||
|
||||
/arg@4.1.3:
|
||||
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
|
||||
dev: true
|
||||
|
||||
/balanced-match@1.0.2:
|
||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||
dev: true
|
||||
|
||||
/binary-extensions@2.2.0:
|
||||
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
|
||||
engines: {node: '>=8'}
|
||||
dev: true
|
||||
|
||||
/brace-expansion@1.1.11:
|
||||
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
|
||||
dependencies:
|
||||
balanced-match: 1.0.2
|
||||
concat-map: 0.0.1
|
||||
dev: true
|
||||
|
||||
/braces@3.0.2:
|
||||
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
fill-range: 7.0.1
|
||||
dev: true
|
||||
|
||||
/chokidar@3.5.3:
|
||||
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
|
||||
engines: {node: '>= 8.10.0'}
|
||||
dependencies:
|
||||
anymatch: 3.1.3
|
||||
braces: 3.0.2
|
||||
glob-parent: 5.1.2
|
||||
is-binary-path: 2.1.0
|
||||
is-glob: 4.0.3
|
||||
normalize-path: 3.0.0
|
||||
readdirp: 3.6.0
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
dev: true
|
||||
|
||||
/concat-map@0.0.1:
|
||||
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
|
||||
dev: true
|
||||
|
||||
/core-util-is@1.0.3:
|
||||
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
|
||||
dev: true
|
||||
|
||||
/create-require@1.1.1:
|
||||
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
|
||||
dev: true
|
||||
|
||||
/debug@4.3.4:
|
||||
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
|
||||
engines: {node: '>=6.0'}
|
||||
peerDependencies:
|
||||
supports-color: '*'
|
||||
peerDependenciesMeta:
|
||||
supports-color:
|
||||
optional: true
|
||||
dependencies:
|
||||
ms: 2.1.2
|
||||
dev: true
|
||||
|
||||
/deepmerge@4.3.1:
|
||||
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/diff@4.0.2:
|
||||
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
|
||||
engines: {node: '>=0.3.1'}
|
||||
dev: true
|
||||
|
||||
/esbuild@0.17.19:
|
||||
resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
|
||||
engines: {node: '>=12'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
optionalDependencies:
|
||||
'@esbuild/android-arm': 0.17.19
|
||||
'@esbuild/android-arm64': 0.17.19
|
||||
'@esbuild/android-x64': 0.17.19
|
||||
'@esbuild/darwin-arm64': 0.17.19
|
||||
'@esbuild/darwin-x64': 0.17.19
|
||||
'@esbuild/freebsd-arm64': 0.17.19
|
||||
'@esbuild/freebsd-x64': 0.17.19
|
||||
'@esbuild/linux-arm': 0.17.19
|
||||
'@esbuild/linux-arm64': 0.17.19
|
||||
'@esbuild/linux-ia32': 0.17.19
|
||||
'@esbuild/linux-loong64': 0.17.19
|
||||
'@esbuild/linux-mips64el': 0.17.19
|
||||
'@esbuild/linux-ppc64': 0.17.19
|
||||
'@esbuild/linux-riscv64': 0.17.19
|
||||
'@esbuild/linux-s390x': 0.17.19
|
||||
'@esbuild/linux-x64': 0.17.19
|
||||
'@esbuild/netbsd-x64': 0.17.19
|
||||
'@esbuild/openbsd-x64': 0.17.19
|
||||
'@esbuild/sunos-x64': 0.17.19
|
||||
'@esbuild/win32-arm64': 0.17.19
|
||||
'@esbuild/win32-ia32': 0.17.19
|
||||
'@esbuild/win32-x64': 0.17.19
|
||||
dev: true
|
||||
|
||||
/fast-glob@3.2.12:
|
||||
resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
|
||||
engines: {node: '>=8.6.0'}
|
||||
dependencies:
|
||||
'@nodelib/fs.stat': 2.0.5
|
||||
'@nodelib/fs.walk': 1.2.8
|
||||
glob-parent: 5.1.2
|
||||
merge2: 1.4.1
|
||||
micromatch: 4.0.5
|
||||
dev: true
|
||||
|
||||
/fastq@1.15.0:
|
||||
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
|
||||
dependencies:
|
||||
reusify: 1.0.4
|
||||
dev: true
|
||||
|
||||
/fill-range@7.0.1:
|
||||
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
to-regex-range: 5.0.1
|
||||
dev: true
|
||||
|
||||
/fs-extra@11.1.1:
|
||||
resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==}
|
||||
engines: {node: '>=14.14'}
|
||||
dependencies:
|
||||
graceful-fs: 4.2.11
|
||||
jsonfile: 6.1.0
|
||||
universalify: 2.0.0
|
||||
dev: true
|
||||
|
||||
/fs.realpath@1.0.0:
|
||||
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
|
||||
dev: true
|
||||
|
||||
/fsevents@2.3.2:
|
||||
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/glob-parent@5.1.2:
|
||||
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
is-glob: 4.0.3
|
||||
dev: true
|
||||
|
||||
/glob@7.2.3:
|
||||
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
||||
dependencies:
|
||||
fs.realpath: 1.0.0
|
||||
inflight: 1.0.6
|
||||
inherits: 2.0.4
|
||||
minimatch: 3.1.2
|
||||
once: 1.4.0
|
||||
path-is-absolute: 1.0.1
|
||||
dev: true
|
||||
|
||||
/graceful-fs@4.2.11:
|
||||
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
||||
dev: true
|
||||
|
||||
/immediate@3.0.6:
|
||||
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
|
||||
dev: true
|
||||
|
||||
/immutable@4.3.0:
|
||||
resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==}
|
||||
dev: true
|
||||
|
||||
/inflight@1.0.6:
|
||||
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
|
||||
dependencies:
|
||||
once: 1.4.0
|
||||
wrappy: 1.0.2
|
||||
dev: true
|
||||
|
||||
/inherits@2.0.4:
|
||||
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
||||
dev: true
|
||||
|
||||
/is-binary-path@2.1.0:
|
||||
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
binary-extensions: 2.2.0
|
||||
dev: true
|
||||
|
||||
/is-extglob@2.1.1:
|
||||
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/is-glob@4.0.3:
|
||||
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
is-extglob: 2.1.1
|
||||
dev: true
|
||||
|
||||
/is-number@7.0.0:
|
||||
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
|
||||
engines: {node: '>=0.12.0'}
|
||||
dev: true
|
||||
|
||||
/isarray@1.0.0:
|
||||
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
|
||||
dev: true
|
||||
|
||||
/jsonfile@6.1.0:
|
||||
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
|
||||
dependencies:
|
||||
universalify: 2.0.0
|
||||
optionalDependencies:
|
||||
graceful-fs: 4.2.11
|
||||
dev: true
|
||||
|
||||
/jszip@3.10.1:
|
||||
resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
|
||||
dependencies:
|
||||
lie: 3.3.0
|
||||
pako: 1.0.11
|
||||
readable-stream: 2.3.8
|
||||
setimmediate: 1.0.5
|
||||
dev: true
|
||||
|
||||
/kleur@4.1.5:
|
||||
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
|
||||
engines: {node: '>=6'}
|
||||
dev: true
|
||||
|
||||
/lie@3.3.0:
|
||||
resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
|
||||
dependencies:
|
||||
immediate: 3.0.6
|
||||
dev: true
|
||||
|
||||
/livereload-js@3.4.1:
|
||||
resolution: {integrity: sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==}
|
||||
dev: true
|
||||
|
||||
/livereload@0.9.3:
|
||||
resolution: {integrity: sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
chokidar: 3.5.3
|
||||
livereload-js: 3.4.1
|
||||
opts: 2.0.2
|
||||
ws: 7.5.9
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- utf-8-validate
|
||||
dev: true
|
||||
|
||||
/magic-string@0.29.0:
|
||||
resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.4.15
|
||||
dev: true
|
||||
|
||||
/make-error@1.3.6:
|
||||
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
|
||||
dev: true
|
||||
|
||||
/merge2@1.4.1:
|
||||
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
|
||||
engines: {node: '>= 8'}
|
||||
dev: true
|
||||
|
||||
/micromatch@4.0.5:
|
||||
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
|
||||
engines: {node: '>=8.6'}
|
||||
dependencies:
|
||||
braces: 3.0.2
|
||||
picomatch: 2.3.1
|
||||
dev: true
|
||||
|
||||
/minimatch@3.1.2:
|
||||
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
|
||||
dependencies:
|
||||
brace-expansion: 1.1.11
|
||||
dev: true
|
||||
|
||||
/minimist@1.2.8:
|
||||
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
|
||||
dev: true
|
||||
|
||||
/ms@2.1.2:
|
||||
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||
dev: true
|
||||
|
||||
/nanoid@3.3.6:
|
||||
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
|
||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/normalize-path@3.0.0:
|
||||
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/once@1.4.0:
|
||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||
dependencies:
|
||||
wrappy: 1.0.2
|
||||
dev: true
|
||||
|
||||
/opts@2.0.2:
|
||||
resolution: {integrity: sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==}
|
||||
dev: true
|
||||
|
||||
/pako@1.0.11:
|
||||
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
|
||||
dev: true
|
||||
|
||||
/path-is-absolute@1.0.1:
|
||||
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/picocolors@1.0.0:
|
||||
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
|
||||
dev: true
|
||||
|
||||
/picomatch@2.3.1:
|
||||
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
|
||||
engines: {node: '>=8.6'}
|
||||
dev: true
|
||||
|
||||
/postcss@8.4.23:
|
||||
resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
dependencies:
|
||||
nanoid: 3.3.6
|
||||
picocolors: 1.0.0
|
||||
source-map-js: 1.0.2
|
||||
dev: true
|
||||
|
||||
/process-nextick-args@2.0.1:
|
||||
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
|
||||
dev: true
|
||||
|
||||
/queue-microtask@1.2.3:
|
||||
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||
dev: true
|
||||
|
||||
/readable-stream@2.3.8:
|
||||
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
|
||||
dependencies:
|
||||
core-util-is: 1.0.3
|
||||
inherits: 2.0.4
|
||||
isarray: 1.0.0
|
||||
process-nextick-args: 2.0.1
|
||||
safe-buffer: 5.1.2
|
||||
string_decoder: 1.1.1
|
||||
util-deprecate: 1.0.2
|
||||
dev: true
|
||||
|
||||
/readdirp@3.6.0:
|
||||
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
|
||||
engines: {node: '>=8.10.0'}
|
||||
dependencies:
|
||||
picomatch: 2.3.1
|
||||
dev: true
|
||||
|
||||
/reusify@1.0.4:
|
||||
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
|
||||
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/rollup-plugin-livereload@2.0.5:
|
||||
resolution: {integrity: sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==}
|
||||
engines: {node: '>=8.3'}
|
||||
dependencies:
|
||||
livereload: 0.9.3
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- utf-8-validate
|
||||
dev: true
|
||||
|
||||
/rollup@3.21.7:
|
||||
resolution: {integrity: sha512-KXPaEuR8FfUoK2uHwNjxTmJ18ApyvD6zJpYv9FOJSqLStmt6xOY84l1IjK2dSolQmoXknrhEFRaPRgOPdqCT5w==}
|
||||
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
|
||||
hasBin: true
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
dev: true
|
||||
|
||||
/run-parallel@1.2.0:
|
||||
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
||||
dependencies:
|
||||
queue-microtask: 1.2.3
|
||||
dev: true
|
||||
|
||||
/safe-buffer@5.1.2:
|
||||
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
|
||||
dev: true
|
||||
|
||||
/sass@1.62.1:
|
||||
resolution: {integrity: sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
chokidar: 3.5.3
|
||||
immutable: 4.3.0
|
||||
source-map-js: 1.0.2
|
||||
dev: true
|
||||
|
||||
/setimmediate@1.0.5:
|
||||
resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
|
||||
dev: true
|
||||
|
||||
/siyuan@0.7.1:
|
||||
resolution: {integrity: sha512-Q7OZqpJ8h+axLDkn6afoAdKD6mHPAona/jsoUpf8UgFqHuOscNS6ub8RudhTCPKppDnQzBy5o35xhlecxnrbjQ==}
|
||||
dev: true
|
||||
|
||||
/source-map-js@1.0.2:
|
||||
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/string_decoder@1.1.1:
|
||||
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
|
||||
dependencies:
|
||||
safe-buffer: 5.1.2
|
||||
dev: true
|
||||
|
||||
/svelte-hmr@0.15.1(svelte@3.59.1):
|
||||
resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==}
|
||||
engines: {node: ^12.20 || ^14.13.1 || >= 16}
|
||||
peerDependencies:
|
||||
svelte: '>=3.19.0'
|
||||
dependencies:
|
||||
svelte: 3.59.1
|
||||
dev: true
|
||||
|
||||
/svelte@3.59.1:
|
||||
resolution: {integrity: sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==}
|
||||
engines: {node: '>= 8'}
|
||||
dev: true
|
||||
|
||||
/to-regex-range@5.0.1:
|
||||
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
||||
engines: {node: '>=8.0'}
|
||||
dependencies:
|
||||
is-number: 7.0.0
|
||||
dev: true
|
||||
|
||||
/ts-node@10.9.1(@types/node@20.2.0)(typescript@5.0.4):
|
||||
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@swc/core': '>=1.2.50'
|
||||
'@swc/wasm': '>=1.2.50'
|
||||
'@types/node': '*'
|
||||
typescript: '>=2.7'
|
||||
peerDependenciesMeta:
|
||||
'@swc/core':
|
||||
optional: true
|
||||
'@swc/wasm':
|
||||
optional: true
|
||||
dependencies:
|
||||
'@cspotcode/source-map-support': 0.8.1
|
||||
'@tsconfig/node10': 1.0.9
|
||||
'@tsconfig/node12': 1.0.11
|
||||
'@tsconfig/node14': 1.0.3
|
||||
'@tsconfig/node16': 1.0.4
|
||||
'@types/node': 20.2.0
|
||||
acorn: 8.8.2
|
||||
acorn-walk: 8.2.0
|
||||
arg: 4.1.3
|
||||
create-require: 1.1.1
|
||||
diff: 4.0.2
|
||||
make-error: 1.3.6
|
||||
typescript: 5.0.4
|
||||
v8-compile-cache-lib: 3.0.1
|
||||
yn: 3.1.1
|
||||
dev: true
|
||||
|
||||
/typescript@5.0.4:
|
||||
resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==}
|
||||
engines: {node: '>=12.20'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/universalify@2.0.0:
|
||||
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
dev: true
|
||||
|
||||
/util-deprecate@1.0.2:
|
||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
dev: true
|
||||
|
||||
/v8-compile-cache-lib@3.0.1:
|
||||
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
|
||||
dev: true
|
||||
|
||||
/vite-plugin-static-copy@0.15.0(vite@4.3.7):
|
||||
resolution: {integrity: sha512-Ww+/Ug9guV45oIfIi/lA2z8v3K+lLHV9zCJqTVO4FTdqrJoZBj68VgGBSH1fi0N4q/EHW32RsL3ympi4Wlsq5w==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
vite: ^3.0.0 || ^4.0.0
|
||||
dependencies:
|
||||
chokidar: 3.5.3
|
||||
fast-glob: 3.2.12
|
||||
fs-extra: 11.1.1
|
||||
picocolors: 1.0.0
|
||||
vite: 4.3.7(@types/node@20.2.0)(sass@1.62.1)
|
||||
dev: true
|
||||
|
||||
/vite-plugin-zip-pack@1.0.5(vite@4.3.7):
|
||||
resolution: {integrity: sha512-AY6F3GJL///Dc3d7fQhalJvWb08e0oIATVqHLwDAiK2/S1NCxbAFXfT4m2V+LtJRjHrRkHa0zbZvAI6/lb6vTQ==}
|
||||
peerDependencies:
|
||||
vite: '>=2.x'
|
||||
dependencies:
|
||||
jszip: 3.10.1
|
||||
vite: 4.3.7(@types/node@20.2.0)(sass@1.62.1)
|
||||
dev: true
|
||||
|
||||
/vite@4.3.7(@types/node@20.2.0)(sass@1.62.1):
|
||||
resolution: {integrity: sha512-MTIFpbIm9v7Hh5b0wSBgkcWzSBz7SAa6K/cBTwS4kUiQJfQLFlZZRJRQgqunCVzhTPCk674tW+0Qaqh3Q00dBg==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@types/node': '>= 14'
|
||||
less: '*'
|
||||
sass: '*'
|
||||
stylus: '*'
|
||||
sugarss: '*'
|
||||
terser: ^5.4.0
|
||||
peerDependenciesMeta:
|
||||
'@types/node':
|
||||
optional: true
|
||||
less:
|
||||
optional: true
|
||||
sass:
|
||||
optional: true
|
||||
stylus:
|
||||
optional: true
|
||||
sugarss:
|
||||
optional: true
|
||||
terser:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@types/node': 20.2.0
|
||||
esbuild: 0.17.19
|
||||
postcss: 8.4.23
|
||||
rollup: 3.21.7
|
||||
sass: 1.62.1
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
dev: true
|
||||
|
||||
/vitefu@0.2.4(vite@4.3.7):
|
||||
resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==}
|
||||
peerDependencies:
|
||||
vite: ^3.0.0 || ^4.0.0
|
||||
peerDependenciesMeta:
|
||||
vite:
|
||||
optional: true
|
||||
dependencies:
|
||||
vite: 4.3.7(@types/node@20.2.0)(sass@1.62.1)
|
||||
dev: true
|
||||
|
||||
/wrappy@1.0.2:
|
||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||
dev: true
|
||||
|
||||
/ws@7.5.9:
|
||||
resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
|
||||
engines: {node: '>=8.3.0'}
|
||||
peerDependencies:
|
||||
bufferutil: ^4.0.1
|
||||
utf-8-validate: ^5.0.2
|
||||
peerDependenciesMeta:
|
||||
bufferutil:
|
||||
optional: true
|
||||
utf-8-validate:
|
||||
optional: true
|
||||
dev: true
|
||||
|
||||
/yn@3.1.1:
|
||||
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
|
||||
engines: {node: '>=6'}
|
||||
dev: true
|
BIN
preview.png
Normal file
BIN
preview.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
32
scripts/make_dev_link.py
Normal file
32
scripts/make_dev_link.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
import os
|
||||
import json
|
||||
from argparse import ArgumentParser
|
||||
|
||||
# 1. 读取一个参数 plugin_dir
|
||||
parser = ArgumentParser()
|
||||
parser.add_argument('plugin_dir')
|
||||
args = parser.parse_args()
|
||||
plugin_dir = args.plugin_dir
|
||||
|
||||
# 2. 读取当前根目录下 plugin.json 的 name 字段
|
||||
with open('plugin.json', 'r', encoding='utf-8') as f:
|
||||
content = json.load(f)
|
||||
name = content.get('name')
|
||||
|
||||
# ...如果 name 字段为空,报错并退出
|
||||
if not name or name == '':
|
||||
print('"name" in plugin.json not found, exit')
|
||||
exit()
|
||||
|
||||
dev_dir = os.path.abspath('dev')
|
||||
if not os.path.exists(dev_dir):
|
||||
os.mkdir(dev_dir)
|
||||
|
||||
# 3. 读取 plugin_dir 下的是否有和 name 字段相同的文件夹
|
||||
# ...如果没有,创建一个软链接到当前根目录下的 dev 文件夹
|
||||
# ...如果有,报错并退出
|
||||
if not os.path.exists(os.path.join(plugin_dir, name)):
|
||||
os.symlink(dev_dir, os.path.join(plugin_dir, name))
|
||||
else:
|
||||
print('Folder already exists, exit')
|
||||
exit()
|
387
src/api.ts
Normal file
387
src/api.ts
Normal file
|
@ -0,0 +1,387 @@
|
|||
/**
|
||||
* Copyright (c) 2023 frostime. All rights reserved.
|
||||
* https://github.com/frostime/sy-plugin-template-vite
|
||||
*
|
||||
* See API Document in [API.md](https://github.com/siyuan-note/siyuan/blob/master/API.md)
|
||||
* API 文档见 [API_zh_CN.md](https://github.com/siyuan-note/siyuan/blob/master/API_zh_CN.md)
|
||||
*/
|
||||
|
||||
import {
|
||||
Block, Notebook, NotebookConf, NotebookId, DocumentId, BlockId,
|
||||
doOperation, PreviousID, ParentID, BlockType, BlockSubType
|
||||
} from "sy-dtype";
|
||||
import { fetchSyncPost, IWebSocketData } from "siyuan";
|
||||
|
||||
|
||||
async function request(url: string, data: any) {
|
||||
let response: IWebSocketData = await fetchSyncPost(url, data);
|
||||
let res = response.code === 0 ? response.data : null;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
// **************************************** Noteboook ****************************************
|
||||
|
||||
export type ReslsNotebooks = {
|
||||
notebooks: Notebook[];
|
||||
}
|
||||
|
||||
export async function lsNotebooks(): Promise<ReslsNotebooks> {
|
||||
let url = '/api/notebook/lsNotebooks';
|
||||
return request(url, '');
|
||||
}
|
||||
|
||||
|
||||
export async function openNotebook(notebook: NotebookId) {
|
||||
let url = '/api/notebook/openNotebook';
|
||||
return request(url, { notebook: notebook });
|
||||
}
|
||||
|
||||
|
||||
export async function closeNotebook(notebook: NotebookId) {
|
||||
let url = '/api/notebook/closeNotebook';
|
||||
return request(url, { notebook: notebook });
|
||||
}
|
||||
|
||||
|
||||
export async function renameNotebook(notebook: NotebookId, name: string) {
|
||||
let url = '/api/notebook/renameNotebook';
|
||||
return request(url, { notebook: notebook, name: name });
|
||||
}
|
||||
|
||||
|
||||
export async function createNotebook(name: string): Promise<Notebook> {
|
||||
let url = '/api/notebook/createNotebook';
|
||||
return request(url, { name: name });
|
||||
}
|
||||
|
||||
|
||||
export async function removeNotebook(notebook: NotebookId) {
|
||||
let url = '/api/notebook/removeNotebook';
|
||||
return request(url, { notebook: notebook });
|
||||
}
|
||||
|
||||
export type ResGetNotebookConf = {
|
||||
box: string;
|
||||
conf: NotebookConf;
|
||||
name: string;
|
||||
}
|
||||
|
||||
|
||||
export async function getNotebookConf(notebook: NotebookId): Promise<ResGetNotebookConf> {
|
||||
let data = { notebook: notebook };
|
||||
let url = '/api/notebook/getNotebookConf';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export async function setNotebookConf(notebook: NotebookId, conf: NotebookConf): Promise<NotebookConf> {
|
||||
let data = { notebook: notebook, conf: conf };
|
||||
let url = '/api/notebook/setNotebookConf';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
// **************************************** Document ****************************************
|
||||
export async function createDocWithMd(notebook: NotebookId, path: string, markdown: string): Promise<DocumentId> {
|
||||
let data = {
|
||||
notebook: notebook,
|
||||
path: path,
|
||||
markdown: markdown,
|
||||
};
|
||||
let url = '/api/filetree/createDocWithMd';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export async function renameDoc(notebook: NotebookId, path: string, title: string): Promise<DocumentId> {
|
||||
let data = {
|
||||
doc: notebook,
|
||||
path: path,
|
||||
title: title
|
||||
};
|
||||
let url = '/api/filetree/renameDoc';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export async function removeDoc(notebook: NotebookId, path: string) {
|
||||
let data = {
|
||||
notebook: notebook,
|
||||
path: path,
|
||||
};
|
||||
let url = '/api/filetree/removeDoc';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export async function moveDocs(fromPaths: string[], toNotebook: NotebookId, toPath: string) {
|
||||
let data = {
|
||||
fromPaths: fromPaths,
|
||||
toNotebook: toNotebook,
|
||||
toPath: toPath
|
||||
};
|
||||
let url = '/api/filetree/moveDocs';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export async function getHPathByPath(notebook: NotebookId, path: string): Promise<string> {
|
||||
let data = {
|
||||
notebook: notebook,
|
||||
path: path
|
||||
};
|
||||
let url = '/api/filetree/getHPathByPath';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export async function getHPathByID(id: BlockId): Promise<string> {
|
||||
let data = {
|
||||
id: id
|
||||
};
|
||||
let url = '/api/filetree/getHPathByID';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
// **************************************** Asset Files ****************************************
|
||||
export type ResUpload = {
|
||||
errFiles: string[];
|
||||
succMap: { [key: string]: string };
|
||||
}
|
||||
|
||||
export async function upload(assetsDirPath: string, files: any[]): Promise<ResUpload> {
|
||||
let form = new FormData();
|
||||
form.append('assetsDirPath', assetsDirPath);
|
||||
for (let file of files) {
|
||||
form.append('file[]', file);
|
||||
}
|
||||
let url = '/api/asset/upload';
|
||||
return request(url, form);
|
||||
}
|
||||
|
||||
// **************************************** Block ****************************************
|
||||
export type ResdoOperations = {
|
||||
doOperations: doOperation[];
|
||||
undoOperations: doOperation[] | null;
|
||||
}
|
||||
type DataType = "markdown" | "dom";
|
||||
export async function insertBlock(dataType: DataType, data: string, previousID: BlockId): Promise<ResdoOperations> {
|
||||
let data1 = {
|
||||
dataType: dataType,
|
||||
data: data,
|
||||
previousID: previousID
|
||||
}
|
||||
let url = '/api/block/insertBlock';
|
||||
return request(url, data1);
|
||||
}
|
||||
|
||||
|
||||
export async function appendBlock(dataType: DataType, data: string, parentID: BlockId | DocumentId): Promise<ResdoOperations> {
|
||||
let data1 = {
|
||||
dataType: dataType,
|
||||
data: data,
|
||||
parentID: parentID
|
||||
}
|
||||
let url = '/api/block/appendBlock';
|
||||
return request(url, data1);
|
||||
}
|
||||
|
||||
|
||||
export async function updateBlock(dataType: DataType, data: string, id: BlockId): Promise<ResdoOperations> {
|
||||
let data1 = {
|
||||
dataType: dataType,
|
||||
data: data,
|
||||
id: id
|
||||
}
|
||||
let url = '/api/block/updateBlock';
|
||||
return request(url, data1);
|
||||
}
|
||||
|
||||
|
||||
export async function deleteBlock(id: BlockId): Promise<ResdoOperations> {
|
||||
let data = {
|
||||
id: id
|
||||
}
|
||||
let url = '/api/block/deleteBlock';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export async function moveBlock(id: BlockId, previousID: PreviousID | null = null, parentID: ParentID | null = null): Promise<ResdoOperations> {
|
||||
let data = {
|
||||
id: id,
|
||||
previousID: previousID,
|
||||
parentID: parentID
|
||||
}
|
||||
let url = '/api/block/moveBlock';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export type ResGetBlockKramdown = {
|
||||
id: BlockId;
|
||||
kramdown: string;
|
||||
}
|
||||
|
||||
export async function getBlockKramdown(id: BlockId): Promise<ResGetBlockKramdown> {
|
||||
let data = {
|
||||
id: id
|
||||
}
|
||||
let url = '/api/block/getBlockKramdown';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
export type ChildBlock = {
|
||||
id: BlockId;
|
||||
type: BlockType;
|
||||
subtype?: BlockSubType;
|
||||
}
|
||||
export async function getChildBlocks(id: BlockId): Promise<ChildBlock[]> {
|
||||
let data = {
|
||||
id: id
|
||||
}
|
||||
let url = '/api/block/getChildBlocks';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
// **************************************** Attributes ****************************************
|
||||
export async function setBlockAttrs(id: BlockId, attrs: { [key: string]: string }) {
|
||||
let data = {
|
||||
id: id,
|
||||
attrs: attrs
|
||||
}
|
||||
let url = '/api/attr/setBlockAttrs';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export async function getBlockAttrs(id: BlockId): Promise<{ [key: string]: string }> {
|
||||
let data = {
|
||||
id: id
|
||||
}
|
||||
let url = '/api/attr/getBlockAttrs';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
// **************************************** SQL ****************************************
|
||||
|
||||
export async function sql(sql: string): Promise<any[]> {
|
||||
let sqldata = {
|
||||
stmt: sql,
|
||||
};
|
||||
let url = '/api/query/sql';
|
||||
return request(url, sqldata);
|
||||
}
|
||||
|
||||
export async function getBlockByID(blockId: string): Promise<Block> {
|
||||
let sqlScript = `select * from blocks where id ='${blockId}'`;
|
||||
let data = await sql(sqlScript);
|
||||
return data[0];
|
||||
}
|
||||
|
||||
// **************************************** Template ****************************************
|
||||
|
||||
export type ResGetTemplates = {
|
||||
content: string;
|
||||
path: string;
|
||||
}
|
||||
export async function render(id: DocumentId, path: string): Promise<ResGetTemplates> {
|
||||
let data = {
|
||||
id: id,
|
||||
path: path
|
||||
}
|
||||
let url = '/api/template/render';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export async function renderSprig(template: string): Promise<string> {
|
||||
let url = '/api/template/renderSprig';
|
||||
return request(url, { template: template });
|
||||
}
|
||||
|
||||
// **************************************** File ****************************************
|
||||
|
||||
export async function getFile(path: string): Promise<any> {
|
||||
let data = {
|
||||
path: path
|
||||
}
|
||||
let url = '/api/file/getFile';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
export async function putFile(path: string, isDir: boolean, file: any) {
|
||||
let form = new FormData();
|
||||
form.append('path', path);
|
||||
form.append('isDir', isDir.toString());
|
||||
// Copyright (c) 2023, terwer.
|
||||
// https://github.com/terwer/siyuan-plugin-importer/blob/v1.4.1/src/api/kernel-api.ts
|
||||
form.append('modTime', Math.floor(Date.now() / 1000).toString());
|
||||
form.append('file', file);
|
||||
let url = '/api/file/putFile';
|
||||
return request(url, form);
|
||||
}
|
||||
|
||||
export async function removeFile(path: string) {
|
||||
let data = {
|
||||
path: path
|
||||
}
|
||||
let url = '/api/file/removeFile';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export type ResReadDir = {
|
||||
isDir: boolean;
|
||||
name: string;
|
||||
}
|
||||
export async function readDir(path: string): Promise<ResReadDir> {
|
||||
let data = {
|
||||
path: path
|
||||
}
|
||||
let url = '/api/file/readDir';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
export type ResExportMdContent = {
|
||||
hPath: string;
|
||||
content: string;
|
||||
}
|
||||
export async function exportMdContent(id: DocumentId): Promise<ResExportMdContent> {
|
||||
let data = {
|
||||
id: id
|
||||
}
|
||||
let url = '/api/export/exportMdContent';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
export type PandocArgs = string;
|
||||
export async function pandoc(args: PandocArgs[]) {
|
||||
let data = {
|
||||
args: args
|
||||
}
|
||||
let url = '/api/convert/pandoc';
|
||||
return request(url, data);
|
||||
}
|
||||
|
||||
|
||||
// **************************************** System ****************************************
|
||||
export type ResBootProgress = {
|
||||
progress: number;
|
||||
details: string;
|
||||
}
|
||||
export async function bootProgress(): Promise<ResBootProgress> {
|
||||
return request('/api/system/bootProgress', {});
|
||||
}
|
||||
|
||||
|
||||
export async function version(): Promise<string> {
|
||||
return request('/api/system/version', {});
|
||||
}
|
||||
|
||||
|
||||
export async function currentTime(): Promise<number> {
|
||||
return request('/api/system/currentTime', {});
|
||||
}
|
70
src/hello.svelte
Normal file
70
src/hello.svelte
Normal file
|
@ -0,0 +1,70 @@
|
|||
<!--
|
||||
* Copyright (c) 2023 frostime. All rights reserved.
|
||||
* https://github.com/frostime/sy-plugin-template-vite
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { onMount } from "svelte";
|
||||
import { version } from "./api";
|
||||
export let name: string;
|
||||
|
||||
let time;
|
||||
let ver;
|
||||
|
||||
onMount(async () => {
|
||||
time = new Date();
|
||||
ver = await version();
|
||||
});
|
||||
|
||||
$: time_str = new Date(time).toLocaleTimeString();
|
||||
|
||||
setInterval(async () => {
|
||||
time = new Date();
|
||||
}, 1000);
|
||||
|
||||
</script>
|
||||
|
||||
<div id="hello">
|
||||
<div class="row">
|
||||
<div class="col left">
|
||||
<h2>Hello {name} v{ver}</h2>
|
||||
</div>
|
||||
<div class="col right">
|
||||
{time_str}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
<p>
|
||||
使用这个模板之前,请阅读<a
|
||||
href="https://github.com/siyuan-note/plugin-sample">官方教程</a
|
||||
>, 确保自己已经理解了插件的基本开发流程。
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Before using this template, please read the <a
|
||||
href="https://github.com/siyuan-note/plugin-sample">offical sample</a
|
||||
>, make sure that you've known about the pipeline for plugin developing.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<style lang="scss">
|
||||
#hello {
|
||||
margin: 1rem;
|
||||
text-align: left;
|
||||
}
|
||||
.row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
.col {
|
||||
flex: 1;
|
||||
}
|
||||
.left {
|
||||
text-align: left;
|
||||
}
|
||||
.right {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
</style>
|
3
src/i18n/en_US.json
Normal file
3
src/i18n/en_US.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"name": "SiYuan"
|
||||
}
|
3
src/i18n/zh_CN.json
Normal file
3
src/i18n/zh_CN.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"name": "思源"
|
||||
}
|
3
src/index.scss
Normal file
3
src/index.scss
Normal file
|
@ -0,0 +1,3 @@
|
|||
#helloPanel {
|
||||
border: 1px rgb(189, 119, 119) dashed;
|
||||
}
|
38
src/index.ts
Normal file
38
src/index.ts
Normal file
|
@ -0,0 +1,38 @@
|
|||
/**
|
||||
* Copyright (c) 2023 frostime. All rights reserved.
|
||||
* https://github.com/frostime/sy-plugin-template-vite
|
||||
*/
|
||||
import { Plugin, showMessage, Dialog } from "siyuan"
|
||||
import Hello from "./hello.svelte"
|
||||
import "./index.scss"
|
||||
|
||||
export default class SamplePlugin extends Plugin {
|
||||
|
||||
async onload() {
|
||||
console.log("onload");
|
||||
showMessage("Hello World");
|
||||
this.addTopBar(
|
||||
{
|
||||
icon: "iconEmoji",
|
||||
"title": "Hello SiYuan",
|
||||
"callback": () => {
|
||||
let dialog = new Dialog({
|
||||
title: "Hello World",
|
||||
content: `<div id="helloPanel"></div>`,
|
||||
});
|
||||
new Hello({
|
||||
target: dialog.element.querySelector("#helloPanel"),
|
||||
props: {
|
||||
name: this.i18n.name,
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
async onunload() {
|
||||
showMessage("Goodbye World");
|
||||
console.log("onunload");
|
||||
}
|
||||
}
|
206
src/siyuan.d.ts
vendored
Normal file
206
src/siyuan.d.ts
vendored
Normal file
|
@ -0,0 +1,206 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Terwer . All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Terwer designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Terwer in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com
|
||||
* or visit www.terwer.space if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
declare module "siyuan" {
|
||||
type TEventBus = "ws-main"
|
||||
|
||||
interface IObject {
|
||||
[key: string]: string;
|
||||
}
|
||||
|
||||
interface IWebSocketData {
|
||||
cmd: string
|
||||
callback?: string
|
||||
data: any
|
||||
msg: string
|
||||
code: number
|
||||
sid: string
|
||||
}
|
||||
|
||||
declare interface IPluginDockTab {
|
||||
position: "LeftTop" | "LeftBottom" | "RightTop" | "RightBottom" | "BottomLeft" | "BottomRight",
|
||||
size: { width: number, height: number },
|
||||
icon: string,
|
||||
hotkey?: string,
|
||||
title: string,
|
||||
}
|
||||
|
||||
interface IMenuItemOption {
|
||||
label?: string,
|
||||
click?: (element: HTMLElement) => void,
|
||||
type?: "separator" | "submenu" | "readonly",
|
||||
accelerator?: string,
|
||||
action?: string,
|
||||
id?: string,
|
||||
submenu?: IMenuItemOption[]
|
||||
disabled?: boolean
|
||||
icon?: string
|
||||
iconHTML?: string
|
||||
current?: boolean
|
||||
bind?: (element: HTMLElement) => void
|
||||
}
|
||||
|
||||
export function fetchPost(url: string, data?: any, cb?: (response: IWebSocketData) => void, headers?: IObject): void;
|
||||
|
||||
export function fetchSyncPost(url: string, data?: any): Promise<IWebSocketData>;
|
||||
|
||||
export function fetchGet(url: string, cb: (response: IWebSocketData) => void): void;
|
||||
|
||||
export function openTab(options: {
|
||||
custom?: {
|
||||
title: string,
|
||||
icon: string,
|
||||
data?: any
|
||||
fn?: () => any,
|
||||
} // card 和自定义页签 必填
|
||||
position?: "right" | "bottom",
|
||||
keepCursor?: boolean // 是否跳转到新 tab 上
|
||||
removeCurrentTab?: boolean // 在当前页签打开时需移除原有页签
|
||||
afterOpen?: () => void // 打开后回调
|
||||
}): void
|
||||
|
||||
export function isMobile(): boolean;
|
||||
|
||||
export function adaptHotkey(hotkey: string): string;
|
||||
|
||||
export function confirm(title: string, text: string, confirmCB?: () => void, cancelCB?: () => void): void;
|
||||
|
||||
/**
|
||||
* @param timeout - ms. 0: manual close;-1: always show; 6000: default
|
||||
* @param {string} [type=info]
|
||||
*/
|
||||
export function showMessage(text: string, timeout?: number, type?: "info" | "error", id?: string): void;
|
||||
|
||||
export class App {
|
||||
plugins: Plugin[];
|
||||
}
|
||||
|
||||
export abstract class Plugin {
|
||||
eventBus: EventBus;
|
||||
i18n: IObject;
|
||||
data: any;
|
||||
name: string;
|
||||
|
||||
constructor(options: {
|
||||
app: App,
|
||||
id: string,
|
||||
name: string,
|
||||
i18n: IObject
|
||||
})
|
||||
|
||||
onload(): void;
|
||||
|
||||
onunload(): void;
|
||||
|
||||
/*
|
||||
* @param {string} [options.position=right]
|
||||
*/
|
||||
addTopBar(options: {
|
||||
icon: string,
|
||||
title: string,
|
||||
callback: (evt: MouseEvent) => void
|
||||
position?: "right" | "left"
|
||||
}): HTMLDivElement;
|
||||
|
||||
openSetting(): void
|
||||
|
||||
// registerCommand(command: IPluginCommand): void;
|
||||
|
||||
// registerSettingRender(settingRender: SettingRender): void;
|
||||
|
||||
loadData(storageName: string): Promise<any>;
|
||||
|
||||
saveData(storageName: string, content: any): Promise<void>;
|
||||
|
||||
removeData(storageName: string): Promise<any>;
|
||||
|
||||
addTab(options: {
|
||||
type: string,
|
||||
destroy?: () => void,
|
||||
resize?: () => void,
|
||||
update?: () => void,
|
||||
init: () => void
|
||||
}): () => any
|
||||
|
||||
addDock(options: {
|
||||
config: IPluginDockTab,
|
||||
data: any,
|
||||
type: string,
|
||||
destroy?: () => void,
|
||||
resize?: () => void,
|
||||
update?: () => void,
|
||||
init: () => void
|
||||
}): any
|
||||
}
|
||||
|
||||
export class EventBus {
|
||||
on(type: TEventBus, listener: (event: CustomEvent<any>) => void): void;
|
||||
|
||||
once(type: TEventBus, listener: (event: CustomEvent<any>) => void): void;
|
||||
|
||||
off(type: TEventBus, listener: (event: CustomEvent<any>) => void): void;
|
||||
|
||||
emit(type: TEventBus, detail?: any): boolean;
|
||||
}
|
||||
|
||||
export class Dialog {
|
||||
|
||||
element: HTMLElement;
|
||||
|
||||
constructor(options: {
|
||||
title?: string,
|
||||
transparent?: boolean,
|
||||
content: string,
|
||||
width?: string
|
||||
height?: string,
|
||||
destroyCallback?: (options?: IObject) => void
|
||||
disableClose?: boolean
|
||||
disableAnimation?: boolean
|
||||
});
|
||||
|
||||
destroy(options?: IObject): void;
|
||||
|
||||
bindInput(inputElement: HTMLInputElement | HTMLTextAreaElement, enterEvent?: () => void): void;
|
||||
}
|
||||
|
||||
export class Menu {
|
||||
constructor(id?: string, closeCB?: () => void);
|
||||
|
||||
showSubMenu(subMenuElement: HTMLElement): void;
|
||||
|
||||
addItem(options: IMenuItemOption): HTMLElement;
|
||||
|
||||
addSeparator(): void;
|
||||
|
||||
open(options: { x: number, y: number, h?: number, w?: number, isLeft?: boolean }): void;
|
||||
|
||||
/*
|
||||
* @param {string} [position=all]
|
||||
*/
|
||||
fullscreen(position?: "bottom" | "all"): void;
|
||||
|
||||
close(): void;
|
||||
}
|
||||
}
|
70
src/sy-dtype.d.ts
vendored
Normal file
70
src/sy-dtype.d.ts
vendored
Normal file
|
@ -0,0 +1,70 @@
|
|||
/**
|
||||
* Copyright (c) 2023 frostime. All rights reserved.
|
||||
* https://github.com/frostime/sy-plugin-template-vite
|
||||
*/
|
||||
|
||||
/**
|
||||
* 思源内部常用的数据格式
|
||||
*/
|
||||
declare module "sy-dtype" {
|
||||
|
||||
export type DocumentId = string;
|
||||
export type BlockId = string;
|
||||
export type NotebookId = string;
|
||||
export type PreviousID = BlockId;
|
||||
export type ParentID = BlockId | DocumentId;
|
||||
|
||||
export type Notebook = {
|
||||
id: NotebookId;
|
||||
name: string;
|
||||
icon: string;
|
||||
sort: number;
|
||||
closed: boolean;
|
||||
}
|
||||
|
||||
export type NotebookConf = {
|
||||
name: string;
|
||||
closed: boolean;
|
||||
refCreateSavePath: string;
|
||||
createDocNameTemplate: string;
|
||||
dailyNoteSavePath: string;
|
||||
dailyNoteTemplatePath: string;
|
||||
}
|
||||
|
||||
export type BlockType = "d" | "s" | "h" | "t" | "i" | "p" | "f" | "audio" | "video" | "other";
|
||||
|
||||
export type BlockSubType = "d1" | "d2" | "s1" | "s2" | "s3" | "t1" | "t2" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "table" | "task" | "toggle" | "latex" | "quote" | "html" | "code" | "footnote" | "cite" | "collection" | "bookmark" | "attachment" | "comment" | "mindmap" | "spreadsheet" | "calendar" | "image" | "audio" | "video" | "other";
|
||||
|
||||
export type Block = {
|
||||
id: BlockId;
|
||||
parent_id?: BlockId;
|
||||
root_id: DocumentId;
|
||||
hash: string;
|
||||
box: string;
|
||||
path: string;
|
||||
hpath: string;
|
||||
name: string;
|
||||
alias: string;
|
||||
memo: string;
|
||||
tag: string;
|
||||
content: string;
|
||||
fcontent?: string;
|
||||
markdown: string;
|
||||
length: number;
|
||||
type: BlockType;
|
||||
subtype: BlockSubType;
|
||||
ial?: { [key: string]: string };
|
||||
sort: number;
|
||||
created: string;
|
||||
updated: string;
|
||||
}
|
||||
|
||||
export type doOperation = {
|
||||
action: string;
|
||||
data: string;
|
||||
id: BlockId;
|
||||
parentID: BlockId | DocumentId;
|
||||
previousID: BlockId;
|
||||
retData: null;
|
||||
}
|
||||
}
|
7
svelte.config.js
Normal file
7
svelte.config.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"
|
||||
|
||||
export default {
|
||||
// Consult https://svelte.dev/docs#compile-time-svelte-preprocess
|
||||
// for more information about preprocessors
|
||||
preprocess: vitePreprocess(),
|
||||
}
|
53
tsconfig.json
Normal file
53
tsconfig.json
Normal file
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "ESNext",
|
||||
"useDefineForClassFields": true,
|
||||
"module": "ESNext",
|
||||
"lib": [
|
||||
"ES2020",
|
||||
"DOM",
|
||||
"DOM.Iterable"
|
||||
],
|
||||
"skipLibCheck": true,
|
||||
/* Bundler mode */
|
||||
"moduleResolution": "Node",
|
||||
// "allowImportingTsExtensions": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"noEmit": true,
|
||||
"jsx": "preserve",
|
||||
/* Linting */
|
||||
"strict": false,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
/* Svelte */
|
||||
/**
|
||||
* Typecheck JS in `.svelte` and `.js` files by default.
|
||||
* Disable checkJs if you'd like to use dynamic types in JS.
|
||||
* Note that setting allowJs false does not prevent the use
|
||||
* of JS in `.svelte` files.
|
||||
*/
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"types": [
|
||||
"node",
|
||||
"vite/client",
|
||||
"svelte"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
"tools/**/*.ts",
|
||||
"src/**/*.ts",
|
||||
"src/**/*.d.ts",
|
||||
"src/**/*.tsx",
|
||||
"src/**/*.vue"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.node.json"
|
||||
}
|
||||
],
|
||||
"root": "."
|
||||
}
|
12
tsconfig.node.json
Normal file
12
tsconfig.node.json
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"skipLibCheck": true,
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "Node",
|
||||
"allowSyntheticDefaultImports": true
|
||||
},
|
||||
"include": [
|
||||
"vite.config.ts"
|
||||
]
|
||||
}
|
121
vite.config.ts
Normal file
121
vite.config.ts
Normal file
|
@ -0,0 +1,121 @@
|
|||
import { resolve } from "path"
|
||||
import { defineConfig, loadEnv } from "vite"
|
||||
import minimist from "minimist"
|
||||
import { viteStaticCopy } from "vite-plugin-static-copy"
|
||||
import livereload from "rollup-plugin-livereload"
|
||||
import { svelte } from "@sveltejs/vite-plugin-svelte"
|
||||
import zipPack from "vite-plugin-zip-pack";
|
||||
import fg from 'fast-glob';
|
||||
|
||||
const args = minimist(process.argv.slice(2))
|
||||
const isWatch = args.watch || args.w || false
|
||||
const devDistDir = "./dev"
|
||||
const distDir = isWatch ? devDistDir : "./dist"
|
||||
|
||||
console.log("isWatch=>", isWatch)
|
||||
console.log("distDir=>", distDir)
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
svelte(),
|
||||
|
||||
viteStaticCopy({
|
||||
targets: [
|
||||
{
|
||||
src: "./README*.md",
|
||||
dest: "./",
|
||||
},
|
||||
{
|
||||
src: "./icon.png",
|
||||
dest: "./",
|
||||
},
|
||||
{
|
||||
src: "./preview.png",
|
||||
dest: "./",
|
||||
},
|
||||
{
|
||||
src: "./plugin.json",
|
||||
dest: "./",
|
||||
},
|
||||
{
|
||||
src: "./src/i18n/**",
|
||||
dest: "./i18n/",
|
||||
},
|
||||
],
|
||||
}),
|
||||
],
|
||||
|
||||
// https://github.com/vitejs/vite/issues/1930
|
||||
// https://vitejs.dev/guide/env-and-mode.html#env-files
|
||||
// https://github.com/vitejs/vite/discussions/3058#discussioncomment-2115319
|
||||
// 在这里自定义变量
|
||||
define: {
|
||||
"process.env.DEV_MODE": `"${isWatch}"`,
|
||||
},
|
||||
|
||||
build: {
|
||||
// 输出路径
|
||||
outDir: distDir,
|
||||
emptyOutDir: false,
|
||||
|
||||
// 构建后是否生成 source map 文件
|
||||
sourcemap: false,
|
||||
|
||||
// 设置为 false 可以禁用最小化混淆
|
||||
// 或是用来指定是应用哪种混淆器
|
||||
// boolean | 'terser' | 'esbuild'
|
||||
// 不压缩,用于调试
|
||||
minify: !isWatch,
|
||||
|
||||
lib: {
|
||||
// Could also be a dictionary or array of multiple entry points
|
||||
entry: resolve(__dirname, "src/index.ts"),
|
||||
// the proper extensions will be added
|
||||
fileName: "index",
|
||||
formats: ["cjs"],
|
||||
},
|
||||
rollupOptions: {
|
||||
plugins: [
|
||||
...(
|
||||
isWatch ? [
|
||||
livereload(devDistDir),
|
||||
{
|
||||
//监听静态资源文件
|
||||
name: 'watch-external',
|
||||
async buildStart() {
|
||||
const files = await fg([
|
||||
'src/i18n/*.json',
|
||||
'./README*.md',
|
||||
'./plugin.json'
|
||||
]);
|
||||
for (let file of files) {
|
||||
this.addWatchFile(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
] : [
|
||||
zipPack({
|
||||
inDir: './dist',
|
||||
outDir: './',
|
||||
outFileName: 'package.zip'
|
||||
})
|
||||
]
|
||||
)
|
||||
],
|
||||
|
||||
// make sure to externalize deps that shouldn't be bundled
|
||||
// into your library
|
||||
external: ["siyuan", "process"],
|
||||
|
||||
output: {
|
||||
entryFileNames: "[name].js",
|
||||
assetFileNames: (assetInfo) => {
|
||||
if (assetInfo.name === "style.css") {
|
||||
return "index.css"
|
||||
}
|
||||
return assetInfo.name
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue