mirror of
https://github.com/dnlbauer/obsidian-dataview-autocompletion.git
synced 2026-09-10 14:15:29 +00:00
feat: use prettier
This commit is contained in:
@@ -1,10 +1,17 @@
|
|||||||
# top-most EditorConfig file
|
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
|
# Unix-style newlines with a newline ending every file
|
||||||
[*]
|
[*]
|
||||||
charset = utf-8
|
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
indent_style = tab
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.json]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.{ts,js}]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
tab_width = 4
|
|
||||||
|
|||||||
1
.husky/pre-commit
Normal file
1
.husky/pre-commit
Normal file
@@ -0,0 +1 @@
|
|||||||
|
npx lint-staged
|
||||||
4
.prettierignore
Normal file
4
.prettierignore
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Ignore artifacts:
|
||||||
|
build
|
||||||
|
coverage
|
||||||
|
test-vault
|
||||||
1
.prettierrc
Normal file
1
.prettierrc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
8
.prettierrc.json
Normal file
8
.prettierrc.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"tabWidth": 4,
|
||||||
|
"semi": true,
|
||||||
|
"embeddedLanguageFormatting": "off",
|
||||||
|
"parser": "typescript",
|
||||||
|
"printWidth": 120,
|
||||||
|
"arrowParens": "avoid"
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ This project uses TypeScript to provide type checking and documentation.
|
|||||||
The repo depends on the latest plugin API (obsidian.d.ts) in TypeScript Definition format, which contains TSDoc comments describing what it does.
|
The repo depends on the latest plugin API (obsidian.d.ts) in TypeScript Definition format, which contains TSDoc comments describing what it does.
|
||||||
|
|
||||||
This sample plugin demonstrates some of the basic functionality the plugin API can do.
|
This sample plugin demonstrates some of the basic functionality the plugin API can do.
|
||||||
|
|
||||||
- Adds a ribbon icon, which shows a Notice when clicked.
|
- Adds a ribbon icon, which shows a Notice when clicked.
|
||||||
- Adds a command "Open Sample Modal" which opens a Modal.
|
- Adds a command "Open Sample Modal" which opens a Modal.
|
||||||
- Adds a plugin setting tab to the settings page.
|
- Adds a plugin setting tab to the settings page.
|
||||||
@@ -56,6 +57,7 @@ Quick starting guide for new plugin devs:
|
|||||||
- Copy over `main.js`, `styles.css`, `manifest.json` to your vault `VaultFolder/.obsidian/plugins/your-plugin-id/`.
|
- Copy over `main.js`, `styles.css`, `manifest.json` to your vault `VaultFolder/.obsidian/plugins/your-plugin-id/`.
|
||||||
|
|
||||||
## Improve code quality with eslint (optional)
|
## Improve code quality with eslint (optional)
|
||||||
|
|
||||||
- [ESLint](https://eslint.org/) is a tool that analyzes your code to quickly find problems. You can run ESLint against your plugin to find common bugs and ways to improve your code.
|
- [ESLint](https://eslint.org/) is a tool that analyzes your code to quickly find problems. You can run ESLint against your plugin to find common bugs and ways to improve your code.
|
||||||
- To use eslint with this project, make sure to install eslint from terminal:
|
- To use eslint with this project, make sure to install eslint from terminal:
|
||||||
- `npm install -g eslint`
|
- `npm install -g eslint`
|
||||||
|
|||||||
@@ -2,14 +2,13 @@ import esbuild from "esbuild";
|
|||||||
import process from "process";
|
import process from "process";
|
||||||
import builtins from "builtin-modules";
|
import builtins from "builtin-modules";
|
||||||
|
|
||||||
const banner =
|
const banner = `/*
|
||||||
`/*
|
|
||||||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||||
if you want to view the source, please visit the github repository of this plugin
|
if you want to view the source, please visit the github repository of this plugin
|
||||||
*/
|
*/
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const prod = (process.argv[2] === "production");
|
const prod = process.argv[2] === "production";
|
||||||
|
|
||||||
const context = await esbuild.context({
|
const context = await esbuild.context({
|
||||||
banner: {
|
banner: {
|
||||||
@@ -31,7 +30,8 @@ const context = await esbuild.context({
|
|||||||
"@lezer/common",
|
"@lezer/common",
|
||||||
"@lezer/highlight",
|
"@lezer/highlight",
|
||||||
"@lezer/lr",
|
"@lezer/lr",
|
||||||
...builtins],
|
...builtins,
|
||||||
|
],
|
||||||
format: "cjs",
|
format: "cjs",
|
||||||
target: "es2018",
|
target: "es2018",
|
||||||
logLevel: "info",
|
logLevel: "info",
|
||||||
|
|||||||
726
package-lock.json
generated
726
package-lock.json
generated
@@ -23,7 +23,10 @@
|
|||||||
"babel-jest": "^29.7.0",
|
"babel-jest": "^29.7.0",
|
||||||
"builtin-modules": "3.3.0",
|
"builtin-modules": "3.3.0",
|
||||||
"esbuild": "0.17.3",
|
"esbuild": "0.17.3",
|
||||||
|
"husky": "^9.1.7",
|
||||||
|
"lint-staged": "^15.2.11",
|
||||||
"obsidian": "latest",
|
"obsidian": "latest",
|
||||||
|
"prettier": "3.4.2",
|
||||||
"ts-jest": "^29.2.5",
|
"ts-jest": "^29.2.5",
|
||||||
"tslib": "2.4.0",
|
"tslib": "2.4.0",
|
||||||
"typescript": "4.7.4"
|
"typescript": "4.7.4"
|
||||||
@@ -1983,6 +1986,87 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
|
"node_modules/cli-cursor": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"restore-cursor": "^5.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cli-truncate": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"slice-ansi": "^5.0.0",
|
||||||
|
"string-width": "^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cli-truncate/node_modules/ansi-regex": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cli-truncate/node_modules/emoji-regex": {
|
||||||
|
"version": "10.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
|
||||||
|
"integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/cli-truncate/node_modules/string-width": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"emoji-regex": "^10.3.0",
|
||||||
|
"get-east-asian-width": "^1.0.0",
|
||||||
|
"strip-ansi": "^7.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cli-truncate/node_modules/strip-ansi": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": "^6.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/cliui": {
|
"node_modules/cliui": {
|
||||||
"version": "8.0.1",
|
"version": "8.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
|
||||||
@@ -2037,6 +2121,15 @@
|
|||||||
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
|
||||||
"integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g=="
|
"integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g=="
|
||||||
},
|
},
|
||||||
|
"node_modules/commander": {
|
||||||
|
"version": "12.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
|
||||||
|
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/commondir": {
|
"node_modules/commondir": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
@@ -2077,7 +2170,6 @@
|
|||||||
"version": "7.0.6",
|
"version": "7.0.6",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"path-key": "^3.1.0",
|
"path-key": "^3.1.0",
|
||||||
"shebang-command": "^2.0.0",
|
"shebang-command": "^2.0.0",
|
||||||
@@ -2213,6 +2305,18 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
|
"node_modules/environment": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/error-ex": {
|
"node_modules/error-ex": {
|
||||||
"version": "1.3.2",
|
"version": "1.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
||||||
@@ -2499,6 +2603,12 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/eventemitter3": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/execa": {
|
"node_modules/execa": {
|
||||||
"version": "5.1.1",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
|
||||||
@@ -2770,6 +2880,18 @@
|
|||||||
"node": "6.* || 8.* || >= 10.*"
|
"node": "6.* || 8.* || >= 10.*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/get-east-asian-width": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/get-package-type": {
|
"node_modules/get-package-type": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
|
||||||
@@ -2904,6 +3026,21 @@
|
|||||||
"node": ">=10.17.0"
|
"node": ">=10.17.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/husky": {
|
||||||
|
"version": "9.1.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz",
|
||||||
|
"integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"husky": "bin.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/typicode"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ignore": {
|
"node_modules/ignore": {
|
||||||
"version": "5.3.2",
|
"version": "5.3.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -3075,8 +3212,7 @@
|
|||||||
"node_modules/isexe": {
|
"node_modules/isexe": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC"
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"node_modules/istanbul-lib-coverage": {
|
"node_modules/istanbul-lib-coverage": {
|
||||||
"version": "3.2.2",
|
"version": "3.2.2",
|
||||||
@@ -3885,6 +4021,18 @@
|
|||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/lilconfig": {
|
||||||
|
"version": "3.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
|
||||||
|
"integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antonk52"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/lines-and-columns": {
|
"node_modules/lines-and-columns": {
|
||||||
"version": "1.2.4",
|
"version": "1.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
||||||
@@ -3892,6 +4040,281 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
|
"node_modules/lint-staged": {
|
||||||
|
"version": "15.2.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.11.tgz",
|
||||||
|
"integrity": "sha512-Ev6ivCTYRTGs9ychvpVw35m/bcNDuBN+mnTeObCL5h+boS5WzBEC6LHI4I9F/++sZm1m+J2LEiy0gxL/R9TBqQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"chalk": "~5.3.0",
|
||||||
|
"commander": "~12.1.0",
|
||||||
|
"debug": "~4.4.0",
|
||||||
|
"execa": "~8.0.1",
|
||||||
|
"lilconfig": "~3.1.3",
|
||||||
|
"listr2": "~8.2.5",
|
||||||
|
"micromatch": "~4.0.8",
|
||||||
|
"pidtree": "~0.6.0",
|
||||||
|
"string-argv": "~0.3.2",
|
||||||
|
"yaml": "~2.6.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"lint-staged": "bin/lint-staged.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18.12.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://opencollective.com/lint-staged"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/chalk": {
|
||||||
|
"version": "5.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
|
||||||
|
"integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.17.0 || ^14.13 || >=16.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/execa": {
|
||||||
|
"version": "8.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
|
||||||
|
"integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"cross-spawn": "^7.0.3",
|
||||||
|
"get-stream": "^8.0.1",
|
||||||
|
"human-signals": "^5.0.0",
|
||||||
|
"is-stream": "^3.0.0",
|
||||||
|
"merge-stream": "^2.0.0",
|
||||||
|
"npm-run-path": "^5.1.0",
|
||||||
|
"onetime": "^6.0.0",
|
||||||
|
"signal-exit": "^4.1.0",
|
||||||
|
"strip-final-newline": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.17"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sindresorhus/execa?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/get-stream": {
|
||||||
|
"version": "8.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
|
||||||
|
"integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/human-signals": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.17.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/is-stream": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/mimic-fn": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/npm-run-path": {
|
||||||
|
"version": "5.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
|
||||||
|
"integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"path-key": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/onetime": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"mimic-fn": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/path-key": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/signal-exit": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lint-staged/node_modules/strip-final-newline": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/listr2": {
|
||||||
|
"version": "8.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz",
|
||||||
|
"integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"cli-truncate": "^4.0.0",
|
||||||
|
"colorette": "^2.0.20",
|
||||||
|
"eventemitter3": "^5.0.1",
|
||||||
|
"log-update": "^6.1.0",
|
||||||
|
"rfdc": "^1.4.1",
|
||||||
|
"wrap-ansi": "^9.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/listr2/node_modules/ansi-regex": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/listr2/node_modules/ansi-styles": {
|
||||||
|
"version": "6.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
||||||
|
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/listr2/node_modules/colorette": {
|
||||||
|
"version": "2.0.20",
|
||||||
|
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
|
||||||
|
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/listr2/node_modules/emoji-regex": {
|
||||||
|
"version": "10.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
|
||||||
|
"integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/listr2/node_modules/string-width": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"emoji-regex": "^10.3.0",
|
||||||
|
"get-east-asian-width": "^1.0.0",
|
||||||
|
"strip-ansi": "^7.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/listr2/node_modules/strip-ansi": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": "^6.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/listr2/node_modules/wrap-ansi": {
|
||||||
|
"version": "9.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
|
||||||
|
"integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^6.2.1",
|
||||||
|
"string-width": "^7.0.0",
|
||||||
|
"strip-ansi": "^7.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/locate-path": {
|
"node_modules/locate-path": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -3919,6 +4342,150 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
|
"node_modules/log-update": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-escapes": "^7.0.0",
|
||||||
|
"cli-cursor": "^5.0.0",
|
||||||
|
"slice-ansi": "^7.1.0",
|
||||||
|
"strip-ansi": "^7.1.0",
|
||||||
|
"wrap-ansi": "^9.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/log-update/node_modules/ansi-escapes": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"environment": "^1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/log-update/node_modules/ansi-regex": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/log-update/node_modules/ansi-styles": {
|
||||||
|
"version": "6.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
||||||
|
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/log-update/node_modules/emoji-regex": {
|
||||||
|
"version": "10.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
|
||||||
|
"integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/log-update/node_modules/is-fullwidth-code-point": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"get-east-asian-width": "^1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/log-update/node_modules/slice-ansi": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^6.2.1",
|
||||||
|
"is-fullwidth-code-point": "^5.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/log-update/node_modules/string-width": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"emoji-regex": "^10.3.0",
|
||||||
|
"get-east-asian-width": "^1.0.0",
|
||||||
|
"strip-ansi": "^7.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/log-update/node_modules/strip-ansi": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": "^6.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/log-update/node_modules/wrap-ansi": {
|
||||||
|
"version": "9.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
|
||||||
|
"integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^6.2.1",
|
||||||
|
"string-width": "^7.0.0",
|
||||||
|
"strip-ansi": "^7.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/lru-cache": {
|
"node_modules/lru-cache": {
|
||||||
"version": "5.1.1",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
|
||||||
@@ -4016,6 +4583,18 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/mimic-function": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/minimatch": {
|
"node_modules/minimatch": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.2",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
@@ -4220,7 +4799,6 @@
|
|||||||
"version": "3.1.1",
|
"version": "3.1.1",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
@@ -4252,6 +4830,18 @@
|
|||||||
"url": "https://github.com/sponsors/jonschlinkert"
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pidtree": {
|
||||||
|
"version": "0.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
|
||||||
|
"integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"pidtree": "bin/pidtree.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/pirates": {
|
"node_modules/pirates": {
|
||||||
"version": "4.0.6",
|
"version": "4.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
|
||||||
@@ -4329,6 +4919,21 @@
|
|||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/prettier": {
|
||||||
|
"version": "3.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
|
||||||
|
"integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"prettier": "bin/prettier.cjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/pretty-format": {
|
"node_modules/pretty-format": {
|
||||||
"version": "29.7.0",
|
"version": "29.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
|
||||||
@@ -4497,6 +5102,49 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/restore-cursor": {
|
||||||
|
"version": "5.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
|
||||||
|
"integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"onetime": "^7.0.0",
|
||||||
|
"signal-exit": "^4.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/restore-cursor/node_modules/onetime": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"mimic-function": "^5.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/restore-cursor/node_modules/signal-exit": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/reusify": {
|
"node_modules/reusify": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -4505,6 +5153,12 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/rfdc": {
|
||||||
|
"version": "1.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
|
||||||
|
"integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/rimraf": {
|
"node_modules/rimraf": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -4677,7 +5331,6 @@
|
|||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"shebang-regex": "^3.0.0"
|
"shebang-regex": "^3.0.0"
|
||||||
},
|
},
|
||||||
@@ -4689,7 +5342,6 @@
|
|||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
@@ -4714,6 +5366,46 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/slice-ansi": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^6.0.0",
|
||||||
|
"is-fullwidth-code-point": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/slice-ansi/node_modules/ansi-styles": {
|
||||||
|
"version": "6.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
||||||
|
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/source-map": {
|
"node_modules/source-map": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
@@ -4762,6 +5454,15 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/string-argv": {
|
||||||
|
"version": "0.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
|
||||||
|
"integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.6.19"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/string-length": {
|
"node_modules/string-length": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
|
||||||
@@ -5096,7 +5797,6 @@
|
|||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"isexe": "^2.0.0"
|
"isexe": "^2.0.0"
|
||||||
},
|
},
|
||||||
@@ -5167,6 +5867,18 @@
|
|||||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
|
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/yaml": {
|
||||||
|
"version": "2.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
|
||||||
|
"integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"yaml": "bin.mjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 14"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/yargs": {
|
"node_modules/yargs": {
|
||||||
"version": "17.7.2",
|
"version": "17.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
"dev": "npx rollup --config rollup.config.js -w",
|
"dev": "npx rollup --config rollup.config.js -w",
|
||||||
"build": "npx rollup --config rollup.config.js --environment BUILD:production",
|
"build": "npx rollup --config rollup.config.js --environment BUILD:production",
|
||||||
"test": "npx jest",
|
"test": "npx jest",
|
||||||
"version": "node version-bump.mjs && git add manifest.json versions.json"
|
"version": "node version-bump.mjs && git add manifest.json versions.json",
|
||||||
|
"prepare": "husky"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
@@ -20,7 +21,10 @@
|
|||||||
"babel-jest": "^29.7.0",
|
"babel-jest": "^29.7.0",
|
||||||
"builtin-modules": "3.3.0",
|
"builtin-modules": "3.3.0",
|
||||||
"esbuild": "0.17.3",
|
"esbuild": "0.17.3",
|
||||||
|
"husky": "^9.1.7",
|
||||||
|
"lint-staged": "^15.2.11",
|
||||||
"obsidian": "latest",
|
"obsidian": "latest",
|
||||||
|
"prettier": "3.4.2",
|
||||||
"ts-jest": "^29.2.5",
|
"ts-jest": "^29.2.5",
|
||||||
"tslib": "2.4.0",
|
"tslib": "2.4.0",
|
||||||
"typescript": "4.7.4"
|
"typescript": "4.7.4"
|
||||||
@@ -36,5 +40,8 @@
|
|||||||
"transform": {
|
"transform": {
|
||||||
"^.+\\.(ts|tsx|js|jsx)$": "ts-jest"
|
"^.+\\.(ts|tsx|js|jsx)$": "ts-jest"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"lint-staged": {
|
||||||
|
"**/*": "prettier --write --ignore-unknown"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,15 +5,13 @@ import typescript2 from "rollup-plugin-typescript2";
|
|||||||
|
|
||||||
const BASE_CONFIG = {
|
const BASE_CONFIG = {
|
||||||
input: "src/main.ts",
|
input: "src/main.ts",
|
||||||
external: ["obsidian"]
|
external: ["obsidian"],
|
||||||
};
|
};
|
||||||
|
|
||||||
const getRollupPlugins = (tsconfig, ...plugins) =>
|
const getRollupPlugins = (tsconfig, ...plugins) =>
|
||||||
[
|
[typescript2(tsconfig), nodeResolve({ browser: true }), commonjs()].concat(
|
||||||
typescript2(tsconfig),
|
plugins,
|
||||||
nodeResolve({ browser: true }),
|
);
|
||||||
commonjs(),
|
|
||||||
].concat(plugins);
|
|
||||||
|
|
||||||
const DEV_PLUGIN_CONFIG = {
|
const DEV_PLUGIN_CONFIG = {
|
||||||
...BASE_CONFIG,
|
...BASE_CONFIG,
|
||||||
@@ -28,10 +26,16 @@ const DEV_PLUGIN_CONFIG = {
|
|||||||
undefined,
|
undefined,
|
||||||
copy({
|
copy({
|
||||||
targets: [
|
targets: [
|
||||||
{ src: "manifest.json", dest: "test-vault/.obsidian/plugins/dataview-suggester/" },
|
{
|
||||||
{ src: "styles.css", dest: "test-vault/.obsidian/plugins/dataview-suggester/" },
|
src: "manifest.json",
|
||||||
|
dest: "test-vault/.obsidian/plugins/dataview-suggester/",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "styles.css",
|
||||||
|
dest: "test-vault/.obsidian/plugins/dataview-suggester/",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
})
|
}),
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,18 @@
|
|||||||
import { App, Editor, Plugin, EditorPosition, EditorSuggest, EditorSuggestContext, EditorSuggestTriggerInfo, TFile } from 'obsidian';
|
import {
|
||||||
import { getTriggerText } from './trigger';
|
App,
|
||||||
|
Editor,
|
||||||
|
Plugin,
|
||||||
|
EditorPosition,
|
||||||
|
EditorSuggest,
|
||||||
|
EditorSuggestContext,
|
||||||
|
EditorSuggestTriggerInfo,
|
||||||
|
TFile,
|
||||||
|
} from "obsidian";
|
||||||
|
import { getTriggerText } from "./trigger";
|
||||||
|
|
||||||
export class DataviewSuggester extends EditorSuggest<String> {
|
export class DataviewSuggester extends EditorSuggest<String> {
|
||||||
|
|
||||||
constructor(plugin: Plugin) {
|
constructor(plugin: Plugin) {
|
||||||
super(plugin.app)
|
super(plugin.app);
|
||||||
}
|
}
|
||||||
|
|
||||||
onTrigger(
|
onTrigger(
|
||||||
@@ -14,52 +22,56 @@ export class DataviewSuggester extends EditorSuggest<String> {
|
|||||||
): EditorSuggestTriggerInfo | null {
|
): EditorSuggestTriggerInfo | null {
|
||||||
const line = editor.getLine(cursor.line);
|
const line = editor.getLine(cursor.line);
|
||||||
|
|
||||||
let trigger = getTriggerText(line, cursor.ch)
|
let trigger = getTriggerText(line, cursor.ch);
|
||||||
if (trigger !== null) {
|
if (trigger !== null) {
|
||||||
return {
|
return {
|
||||||
query: trigger[0],
|
query: trigger[0],
|
||||||
start: { line: cursor.line, ch: trigger[1] },
|
start: { line: cursor.line, ch: trigger[1] },
|
||||||
end: { line: cursor.line, ch: trigger[2] },
|
end: { line: cursor.line, ch: trigger[2] },
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
return null;
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getSuggestions(context: EditorSuggestContext): string[] | Promise<string[]> {
|
getSuggestions(
|
||||||
const suggestions: string[] = []
|
context: EditorSuggestContext,
|
||||||
|
): string[] | Promise<string[]> {
|
||||||
|
const suggestions: string[] = [];
|
||||||
// TODO use official dv api?
|
// TODO use official dv api?
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
for (const page of this.app.plugins.plugins.dataview.index.pages) {
|
for (const page of this.app.plugins.plugins.dataview.index.pages) {
|
||||||
const fields = page[1].fields
|
const fields = page[1].fields;
|
||||||
for (let [key, val] of fields) {
|
for (let [key, val] of fields) {
|
||||||
let arrayVal
|
let arrayVal;
|
||||||
if (!Array.isArray(val)) {
|
if (!Array.isArray(val)) {
|
||||||
arrayVal = [val]
|
arrayVal = [val];
|
||||||
} else {
|
} else {
|
||||||
arrayVal = val
|
arrayVal = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const value of arrayVal) {
|
for (const value of arrayVal) {
|
||||||
// TODO whitespace in match
|
// TODO whitespace in match
|
||||||
// Fuzzy matching?
|
// Fuzzy matching?
|
||||||
const suggestion = key + ":: " + value
|
const suggestion = key + ":: " + value;
|
||||||
if (suggestion.includes(context.query) && !suggestions.includes(suggestion)) {
|
if (
|
||||||
suggestions.push(key+ ":: " + value)
|
suggestion.includes(context.query) &&
|
||||||
|
!suggestions.includes(suggestion)
|
||||||
|
) {
|
||||||
|
suggestions.push(key + ":: " + value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
console.log(suggestions)
|
console.log(suggestions);
|
||||||
return suggestions
|
return suggestions;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderSuggestion(value: string, el: HTMLElement): void {
|
renderSuggestion(value: string, el: HTMLElement): void {
|
||||||
el.setText(value)
|
el.setText(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
selectSuggestion(value: string, evt: MouseEvent | KeyboardEvent): void {
|
selectSuggestion(value: string, evt: MouseEvent | KeyboardEvent): void {
|
||||||
console.log("selected", value)
|
console.log("selected", value);
|
||||||
const { editor, start, end } = this.context!;
|
const { editor, start, end } = this.context!;
|
||||||
editor.replaceRange(value, start, end);
|
editor.replaceRange(value, start, end);
|
||||||
|
|
||||||
|
|||||||
18
src/main.ts
18
src/main.ts
@@ -1,5 +1,5 @@
|
|||||||
import { App, Plugin, PluginSettingTab, Setting } from 'obsidian';
|
import { App, Plugin, PluginSettingTab, Setting } from "obsidian";
|
||||||
import { DataviewSuggester } from './DataviewSuggester';
|
import { DataviewSuggester } from "./DataviewSuggester";
|
||||||
|
|
||||||
interface DataviewAutocompleteSettings {
|
interface DataviewAutocompleteSettings {
|
||||||
// mySetting: string;
|
// mySetting: string;
|
||||||
@@ -7,11 +7,11 @@ interface DataviewAutocompleteSettings {
|
|||||||
|
|
||||||
const DEFAULT_SETTINGS: DataviewAutocompleteSettings = {
|
const DEFAULT_SETTINGS: DataviewAutocompleteSettings = {
|
||||||
// mySetting: 'default'
|
// mySetting: 'default'
|
||||||
}
|
};
|
||||||
|
|
||||||
export default class DataviewAutocompletePlugin extends Plugin {
|
export default class DataviewAutocompletePlugin extends Plugin {
|
||||||
settings: DataviewAutocompleteSettings;
|
settings: DataviewAutocompleteSettings;
|
||||||
suggester: DataviewSuggester
|
suggester: DataviewSuggester;
|
||||||
|
|
||||||
async onload() {
|
async onload() {
|
||||||
await this.loadSettings();
|
await this.loadSettings();
|
||||||
@@ -21,12 +21,14 @@ export default class DataviewAutocompletePlugin extends Plugin {
|
|||||||
this.registerEditorSuggest(this.suggester);
|
this.registerEditorSuggest(this.suggester);
|
||||||
}
|
}
|
||||||
|
|
||||||
onunload() {
|
onunload() {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
async loadSettings() {
|
async loadSettings() {
|
||||||
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
|
this.settings = Object.assign(
|
||||||
|
{},
|
||||||
|
DEFAULT_SETTINGS,
|
||||||
|
await this.loadData(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async saveSettings() {
|
async saveSettings() {
|
||||||
|
|||||||
@@ -1,139 +1,262 @@
|
|||||||
import { getTriggerText } from "./trigger"
|
import { getTriggerText } from "./trigger";
|
||||||
|
|
||||||
describe("trigger", () => {
|
describe("trigger", () => {
|
||||||
describe("empty", () => {
|
describe("empty", () => {
|
||||||
test("empty parantheses", () => {
|
test("empty parantheses", () => {
|
||||||
expect(getTriggerText("() testing", 1)).toEqual(["", 1, 1])
|
expect(getTriggerText("() testing", 1)).toEqual(["", 1, 1]);
|
||||||
})
|
});
|
||||||
test("empty square brackets", () => {
|
test("empty square brackets", () => {
|
||||||
expect(getTriggerText("[] testing", 1)).toEqual(["", 1, 1])
|
expect(getTriggerText("[] testing", 1)).toEqual(["", 1, 1]);
|
||||||
})
|
});
|
||||||
test("empty square brackets in text", () => {
|
test("empty square brackets in text", () => {
|
||||||
expect(getTriggerText("test [] testing", 6)).toEqual(["", 6, 6])
|
expect(getTriggerText("test [] testing", 6)).toEqual(["", 6, 6]);
|
||||||
})
|
});
|
||||||
// test("not match empty double square brackets", () => {
|
// test("not match empty double square brackets", () => {
|
||||||
// expect(getTriggerText("[[]] testing", 2)).toEqual(null)
|
// expect(getTriggerText("[[]] testing", 2)).toEqual(null)
|
||||||
// })
|
// })
|
||||||
test("multiple empty brackets in text", () => {
|
test("multiple empty brackets in text", () => {
|
||||||
expect(getTriggerText("test [] and [] testing", 13)).toEqual(["", 13, 13])
|
expect(getTriggerText("test [] and [] testing", 13)).toEqual([
|
||||||
})
|
"",
|
||||||
})
|
13,
|
||||||
|
13,
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("text in parantheses", () => {
|
describe("text in parantheses", () => {
|
||||||
test("text behind", () => {
|
test("text behind", () => {
|
||||||
expect(getTriggerText("(capture) testing", 1)).toEqual(["capture", 1, 8])
|
expect(getTriggerText("(capture) testing", 1)).toEqual([
|
||||||
})
|
"capture",
|
||||||
|
1,
|
||||||
|
8,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text before", () => {
|
test("text before", () => {
|
||||||
expect(getTriggerText("testing (capture)", 12)).toEqual(["capture", 9, 16])
|
expect(getTriggerText("testing (capture)", 12)).toEqual([
|
||||||
})
|
"capture",
|
||||||
|
9,
|
||||||
|
16,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text behind no whitespace", () => {
|
test("text behind no whitespace", () => {
|
||||||
expect(getTriggerText("(capture)testing", 1)).toEqual(["capture", 1, 8])
|
expect(getTriggerText("(capture)testing", 1)).toEqual([
|
||||||
})
|
"capture",
|
||||||
|
1,
|
||||||
|
8,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text before no whitespace", () => {
|
test("text before no whitespace", () => {
|
||||||
expect(getTriggerText("test(capture)", 5)).toEqual(["capture", 5, 12])
|
expect(getTriggerText("test(capture)", 5)).toEqual([
|
||||||
})
|
"capture",
|
||||||
|
5,
|
||||||
|
12,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text before and behind", () => {
|
test("text before and behind", () => {
|
||||||
expect(getTriggerText("test (capture) testing", 6)).toEqual(["capture", 6, 13])
|
expect(getTriggerText("test (capture) testing", 6)).toEqual([
|
||||||
})
|
"capture",
|
||||||
|
6,
|
||||||
|
13,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text and colon", () => {
|
test("text and colon", () => {
|
||||||
expect(getTriggerText("(capture:) testing", 1)).toEqual(["capture:", 1, 9])
|
expect(getTriggerText("(capture:) testing", 1)).toEqual([
|
||||||
})
|
"capture:",
|
||||||
|
1,
|
||||||
|
9,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text and double colon", () => {
|
test("text and double colon", () => {
|
||||||
expect(getTriggerText("(capture::) testing", 1)).toEqual(["capture::", 1, 10])
|
expect(getTriggerText("(capture::) testing", 1)).toEqual([
|
||||||
})
|
"capture::",
|
||||||
|
1,
|
||||||
|
10,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("metadata field", () => {
|
test("metadata field", () => {
|
||||||
expect(getTriggerText("(capture::Bob) testing", 1)).toEqual(["capture::Bob", 1, 13])
|
expect(getTriggerText("(capture::Bob) testing", 1)).toEqual([
|
||||||
})
|
"capture::Bob",
|
||||||
|
1,
|
||||||
|
13,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("metadata field with whitespace", () => {
|
test("metadata field with whitespace", () => {
|
||||||
expect(getTriggerText("(capture:: Bob) testing", 1)).toEqual(["capture:: Bob", 1, 14])
|
expect(getTriggerText("(capture:: Bob) testing", 1)).toEqual([
|
||||||
})
|
"capture:: Bob",
|
||||||
|
1,
|
||||||
|
14,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("metadata field with more white space", () => {
|
test("metadata field with more white space", () => {
|
||||||
expect(getTriggerText("(capture:: Bob) testing", 1)).toEqual(["capture:: Bob", 1, 16])
|
expect(getTriggerText("(capture:: Bob) testing", 1)).toEqual([
|
||||||
})
|
"capture:: Bob",
|
||||||
|
1,
|
||||||
|
16,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text with markdown link", () => {
|
test("text with markdown link", () => {
|
||||||
expect(getTriggerText("([[test]]) testing", 1)).toEqual(["[[test]]", 1, 9])
|
expect(getTriggerText("([[test]]) testing", 1)).toEqual([
|
||||||
})
|
"[[test]]",
|
||||||
|
1,
|
||||||
|
9,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text with aliased markdown link", () => {
|
test("text with aliased markdown link", () => {
|
||||||
expect(getTriggerText("([[test|display]]) testing", 1)).toEqual(["[[test|display]]", 1, 17])
|
expect(getTriggerText("([[test|display]]) testing", 1)).toEqual([
|
||||||
})
|
"[[test|display]]",
|
||||||
|
1,
|
||||||
|
17,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text with wiki link", () => {
|
test("text with wiki link", () => {
|
||||||
expect(getTriggerText("([[test](https://example.com)]) testing", 1)).toEqual(["[[test](https://example.com)]", 1, 30])
|
expect(
|
||||||
})
|
getTriggerText("([[test](https://example.com)]) testing", 1),
|
||||||
|
).toEqual(["[[test](https://example.com)]", 1, 30]);
|
||||||
|
});
|
||||||
test("text with wiki link local", () => {
|
test("text with wiki link local", () => {
|
||||||
expect(getTriggerText("([[test](test)]) testing", 1)).toEqual(["[[test](test)]", 1, 15])
|
expect(getTriggerText("([[test](test)]) testing", 1)).toEqual([
|
||||||
})
|
"[[test](test)]",
|
||||||
})
|
1,
|
||||||
|
15,
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("text in square brackets", () => {
|
describe("text in square brackets", () => {
|
||||||
test("text behind", () => {
|
test("text behind", () => {
|
||||||
expect(getTriggerText("[capture] testing", 1)).toEqual(["capture", 1, 8])
|
expect(getTriggerText("[capture] testing", 1)).toEqual([
|
||||||
})
|
"capture",
|
||||||
|
1,
|
||||||
|
8,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text before", () => {
|
test("text before", () => {
|
||||||
expect(getTriggerText("testing [capture]", 12)).toEqual(["capture", 9, 16])
|
expect(getTriggerText("testing [capture]", 12)).toEqual([
|
||||||
})
|
"capture",
|
||||||
|
9,
|
||||||
|
16,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text behind no whitespace", () => {
|
test("text behind no whitespace", () => {
|
||||||
expect(getTriggerText("[capture]testing", 1)).toEqual(["capture", 1, 8])
|
expect(getTriggerText("[capture]testing", 1)).toEqual([
|
||||||
})
|
"capture",
|
||||||
|
1,
|
||||||
|
8,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text before no whitespace", () => {
|
test("text before no whitespace", () => {
|
||||||
expect(getTriggerText("test[capture]", 5)).toEqual(["capture", 5, 12])
|
expect(getTriggerText("test[capture]", 5)).toEqual([
|
||||||
})
|
"capture",
|
||||||
|
5,
|
||||||
|
12,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text before and behind", () => {
|
test("text before and behind", () => {
|
||||||
expect(getTriggerText("test [capture] testing", 6)).toEqual(["capture", 6, 13])
|
expect(getTriggerText("test [capture] testing", 6)).toEqual([
|
||||||
})
|
"capture",
|
||||||
|
6,
|
||||||
|
13,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text and colon", () => {
|
test("text and colon", () => {
|
||||||
expect(getTriggerText("[capture:] testing", 1)).toEqual(["capture:", 1, 9])
|
expect(getTriggerText("[capture:] testing", 1)).toEqual([
|
||||||
})
|
"capture:",
|
||||||
|
1,
|
||||||
|
9,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text and double colon", () => {
|
test("text and double colon", () => {
|
||||||
expect(getTriggerText("[capture::] testing", 1)).toEqual(["capture::", 1, 10])
|
expect(getTriggerText("[capture::] testing", 1)).toEqual([
|
||||||
})
|
"capture::",
|
||||||
|
1,
|
||||||
|
10,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("metadata field", () => {
|
test("metadata field", () => {
|
||||||
expect(getTriggerText("[capture::Bob] testing", 1)).toEqual(["capture::Bob", 1, 13])
|
expect(getTriggerText("[capture::Bob] testing", 1)).toEqual([
|
||||||
})
|
"capture::Bob",
|
||||||
|
1,
|
||||||
|
13,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("metadata field with whitespace", () => {
|
test("metadata field with whitespace", () => {
|
||||||
expect(getTriggerText("[capture:: Bob] testing", 1)).toEqual(["capture:: Bob", 1, 14])
|
expect(getTriggerText("[capture:: Bob] testing", 1)).toEqual([
|
||||||
})
|
"capture:: Bob",
|
||||||
|
1,
|
||||||
|
14,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("metadata field with more white space", () => {
|
test("metadata field with more white space", () => {
|
||||||
expect(getTriggerText("[capture:: Bob] testing", 1)).toEqual(["capture:: Bob", 1, 16])
|
expect(getTriggerText("[capture:: Bob] testing", 1)).toEqual([
|
||||||
})
|
"capture:: Bob",
|
||||||
|
1,
|
||||||
|
16,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text with markdown link", () => {
|
test("text with markdown link", () => {
|
||||||
expect(getTriggerText("[[[test]]] testing", 1)).toEqual(["[[test]]", 1, 9])
|
expect(getTriggerText("[[[test]]] testing", 1)).toEqual([
|
||||||
})
|
"[[test]]",
|
||||||
|
1,
|
||||||
|
9,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text with aliased markdown link", () => {
|
test("text with aliased markdown link", () => {
|
||||||
expect(getTriggerText("[[[test|display]]] testing", 1)).toEqual(["[[test|display]]", 1, 17])
|
expect(getTriggerText("[[[test|display]]] testing", 1)).toEqual([
|
||||||
})
|
"[[test|display]]",
|
||||||
|
1,
|
||||||
|
17,
|
||||||
|
]);
|
||||||
|
});
|
||||||
test("text with wiki link", () => {
|
test("text with wiki link", () => {
|
||||||
expect(getTriggerText("[[[test](https://example.com)]] testing", 1)).toEqual(["[[test](https://example.com)]", 1, 30])
|
expect(
|
||||||
})
|
getTriggerText("[[[test](https://example.com)]] testing", 1),
|
||||||
|
).toEqual(["[[test](https://example.com)]", 1, 30]);
|
||||||
|
});
|
||||||
test("text with wiki link local", () => {
|
test("text with wiki link local", () => {
|
||||||
expect(getTriggerText("[[[test](test)]] testing", 1)).toEqual(["[[test](test)]", 1, 15])
|
expect(getTriggerText("[[[test](test)]] testing", 1)).toEqual([
|
||||||
})
|
"[[test](test)]",
|
||||||
})
|
1,
|
||||||
|
15,
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("cursor position", () => {
|
describe("cursor position", () => {
|
||||||
test("cursor in first field", () => {
|
test("cursor in first field", () => {
|
||||||
expect(getTriggerText("test (test) string (test2) testing", 9)).toEqual(["test", 6, 10])
|
expect(
|
||||||
})
|
getTriggerText("test (test) string (test2) testing", 9),
|
||||||
|
).toEqual(["test", 6, 10]);
|
||||||
|
});
|
||||||
test("cursor in second field", () => {
|
test("cursor in second field", () => {
|
||||||
expect(getTriggerText("test (test) string (test2) testing", 21)).toEqual(["test2", 20, 25])
|
expect(
|
||||||
})
|
getTriggerText("test (test) string (test2) testing", 21),
|
||||||
|
).toEqual(["test2", 20, 25]);
|
||||||
|
});
|
||||||
test("ignore cursor out of field", () => {
|
test("ignore cursor out of field", () => {
|
||||||
expect(getTriggerText("test (test) string (test2) testing", 2)).toEqual(null)
|
expect(
|
||||||
})
|
getTriggerText("test (test) string (test2) testing", 2),
|
||||||
})
|
).toEqual(null);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("ignore plain markdown links", () => {
|
describe("ignore plain markdown links", () => {
|
||||||
test("cursor in link text", () => {
|
test("cursor in link text", () => {
|
||||||
expect(getTriggerText("test [test](https://example.com)", 8)).toEqual(null)
|
expect(
|
||||||
})
|
getTriggerText("test [test](https://example.com)", 8),
|
||||||
|
).toEqual(null);
|
||||||
|
});
|
||||||
test("cursor in link url", () => {
|
test("cursor in link url", () => {
|
||||||
expect(getTriggerText("test [test](https://example.com)", 15)).toEqual(null)
|
expect(
|
||||||
})
|
getTriggerText("test [test](https://example.com)", 15),
|
||||||
|
).toEqual(null);
|
||||||
|
});
|
||||||
test("cursor in empty link text", () => {
|
test("cursor in empty link text", () => {
|
||||||
expect(getTriggerText("test [](https://example.com)", 6)).toEqual(null)
|
expect(getTriggerText("test [](https://example.com)", 6)).toEqual(
|
||||||
})
|
null,
|
||||||
|
);
|
||||||
|
});
|
||||||
test("cursor in empty link url", () => {
|
test("cursor in empty link url", () => {
|
||||||
expect(getTriggerText("test [test]()", 12)).toEqual(null)
|
expect(getTriggerText("test [test]()", 12)).toEqual(null);
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
|
});
|
||||||
})
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
* (?<!\]) # Negative lookbehind to make sure there is no closing ] from a markdown link
|
* (?<!\]) # Negative lookbehind to make sure there is no closing ] from a markdown link
|
||||||
* \(\) # Matches ()
|
* \(\) # Matches ()
|
||||||
*/
|
*/
|
||||||
const emptyRegex = /(?<!\[)\[](?![\]\(])|(?<!\])\(\)/g
|
const emptyRegex = /(?<!\[)\[](?![\]\(])|(?<!\])\(\)/g;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maches single square brackets or parantheses with some text in them
|
* Maches single square brackets or parantheses with some text in them
|
||||||
@@ -25,7 +25,8 @@ const emptyRegex = /(?<!\[)\[](?![\]\(])|(?<!\])\(\)/g
|
|||||||
* (?=\]$|\]\s)
|
* (?=\]$|\]\s)
|
||||||
* )
|
* )
|
||||||
*/
|
*/
|
||||||
const filledRegex = /((?<=^\(|\s\().+?:{0,2}.*?(?=\)$|\)\s)|(?<=^\[|\s\[).+?:{0,2}.*?(?=\]$|\]\s))/g
|
const filledRegex =
|
||||||
|
/((?<=^\(|\s\().+?:{0,2}.*?(?=\)$|\)\s)|(?<=^\[|\s\[).+?:{0,2}.*?(?=\]$|\]\s))/g;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds the dataview metadata field the user is currently inside.
|
* Finds the dataview metadata field the user is currently inside.
|
||||||
@@ -33,38 +34,44 @@ const filledRegex = /((?<=^\(|\s\().+?:{0,2}.*?(?=\)$|\)\s)|(?<=^\[|\s\[).+?:{0,
|
|||||||
* and start and end are the cursor positions of the start and end of the field.
|
* and start and end are the cursor positions of the start and end of the field.
|
||||||
* If the user is not inside a field, it returns null.
|
* If the user is not inside a field, it returns null.
|
||||||
*/
|
*/
|
||||||
export function getTriggerText(line: string, cursorPos: number): [string, number, number] | null {
|
export function getTriggerText(
|
||||||
|
line: string,
|
||||||
|
cursorPos: number,
|
||||||
|
): [string, number, number] | null {
|
||||||
// Check for empty [] or ().
|
// Check for empty [] or ().
|
||||||
// If the user starts typing with no text in the field, this is the fastest way to find it.
|
// If the user starts typing with no text in the field, this is the fastest way to find it.
|
||||||
let match = getEmptyTrigger(line, cursorPos)
|
let match = getEmptyTrigger(line, cursorPos);
|
||||||
if (match) {
|
if (match) {
|
||||||
return match
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the user types inside an existing field, this is the function to find it.
|
// If the user types inside an existing field, this is the function to find it.
|
||||||
match = getTriggerTextFromRegex(line, cursorPos, filledRegex)
|
match = getTriggerTextFromRegex(line, cursorPos, filledRegex);
|
||||||
if (match !== null) {
|
if (match !== null) {
|
||||||
return match
|
return match;
|
||||||
}
|
}
|
||||||
return null
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Matches an empty [] or empty (), but not [[]]
|
* Matches an empty [] or empty (), but not [[]]
|
||||||
* Has its own function since there is no capture group resulting in a different index calculation
|
* Has its own function since there is no capture group resulting in a different index calculation
|
||||||
*/
|
*/
|
||||||
function getEmptyTrigger(line: string, cursorPos: number): [string, number, number] | null {
|
function getEmptyTrigger(
|
||||||
let matches = Array.from(line.matchAll(emptyRegex))
|
line: string,
|
||||||
|
cursorPos: number,
|
||||||
|
): [string, number, number] | null {
|
||||||
|
let matches = Array.from(line.matchAll(emptyRegex));
|
||||||
for (const match of matches) {
|
for (const match of matches) {
|
||||||
if (match.index === undefined) {
|
if (match.index === undefined) {
|
||||||
continue
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cursorPos === match.index+1) {
|
if (cursorPos === match.index + 1) {
|
||||||
return ["", match.index+1, match.index+1]
|
return ["", match.index + 1, match.index + 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -74,20 +81,24 @@ function getEmptyTrigger(line: string, cursorPos: number): [string, number, numb
|
|||||||
* start is the position of the start of the match, and end is the position of the end of the match.
|
* start is the position of the start of the match, and end is the position of the end of the match.
|
||||||
* Otherwise, returns null.
|
* Otherwise, returns null.
|
||||||
*/
|
*/
|
||||||
function getTriggerTextFromRegex(line: string, cursorPos: number, regex: RegExp): [string, number, number] | null {
|
function getTriggerTextFromRegex(
|
||||||
let matches = Array.from(line.matchAll(regex))
|
line: string,
|
||||||
|
cursorPos: number,
|
||||||
|
regex: RegExp,
|
||||||
|
): [string, number, number] | null {
|
||||||
|
let matches = Array.from(line.matchAll(regex));
|
||||||
for (const match of matches) {
|
for (const match of matches) {
|
||||||
if (match.index === undefined) {
|
if (match.index === undefined) {
|
||||||
continue
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const matchStart = match!.index
|
const matchStart = match!.index;
|
||||||
const matchEnd = matchStart + match[1].length
|
const matchEnd = matchStart + match[1].length;
|
||||||
const cursorInMatch = cursorPos >= matchStart && cursorPos <= matchEnd
|
const cursorInMatch = cursorPos >= matchStart && cursorPos <= matchEnd;
|
||||||
|
|
||||||
if (cursorInMatch) {
|
if (cursorInMatch) {
|
||||||
return [match[1], matchStart, matchEnd]
|
return [match[1], matchStart, matchEnd];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
4
test-vault/.obsidian/community-plugins.json
vendored
4
test-vault/.obsidian/community-plugins.json
vendored
@@ -1,4 +0,0 @@
|
|||||||
[
|
|
||||||
"dataview",
|
|
||||||
"sample-plugin"
|
|
||||||
]
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "sample-plugin",
|
|
||||||
"name": "Sample Plugin",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"minAppVersion": "0.15.0",
|
|
||||||
"description": "Demonstrates some of the capabilities of the Obsidian API.",
|
|
||||||
"author": "Obsidian",
|
|
||||||
"authorUrl": "https://obsidian.md",
|
|
||||||
"fundingUrl": "https://obsidian.md/pricing",
|
|
||||||
"isDesktopOnly": false
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
/*
|
|
||||||
|
|
||||||
This CSS file will be included with your plugin, and
|
|
||||||
available in the app when your plugin is enabled.
|
|
||||||
|
|
||||||
If your plugin does not need CSS, delete this file.
|
|
||||||
|
|
||||||
*/
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "dataview",
|
|
||||||
"name": "Dataview",
|
|
||||||
"version": "0.5.67",
|
|
||||||
"minAppVersion": "0.13.11",
|
|
||||||
"description": "Complex data views for the data-obsessed.",
|
|
||||||
"author": "Michael Brenan <blacksmithgu@gmail.com>",
|
|
||||||
"authorUrl": "https://github.com/blacksmithgu",
|
|
||||||
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
|
|
||||||
"isDesktopOnly": false
|
|
||||||
}
|
|
||||||
146
test-vault/.obsidian/plugins/dataview/styles.css
vendored
146
test-vault/.obsidian/plugins/dataview/styles.css
vendored
@@ -1,146 +0,0 @@
|
|||||||
/** Live Preview padding fixes, specifically for DataviewJS custom HTML elements. */
|
|
||||||
.is-live-preview .block-language-dataviewjs > p, .is-live-preview .block-language-dataviewjs > span {
|
|
||||||
line-height: 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.block-language-dataview {
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************/
|
|
||||||
/** Table Views **/
|
|
||||||
/*****************/
|
|
||||||
|
|
||||||
/* List View Default Styling; rendered internally as a table. */
|
|
||||||
.table-view-table {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table-view-table > thead > tr, .table-view-table > tbody > tr {
|
|
||||||
margin-top: 1em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table-view-table > tbody > tr:hover {
|
|
||||||
background-color: var(--table-row-background-hover);
|
|
||||||
}
|
|
||||||
|
|
||||||
.table-view-table > thead > tr > th {
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: larger;
|
|
||||||
border-top: none;
|
|
||||||
border-left: none;
|
|
||||||
border-right: none;
|
|
||||||
border-bottom: solid;
|
|
||||||
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table-view-table > tbody > tr > td {
|
|
||||||
text-align: left;
|
|
||||||
border: none;
|
|
||||||
font-weight: 400;
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table-view-table ul, .table-view-table ol {
|
|
||||||
margin-block-start: 0.2em !important;
|
|
||||||
margin-block-end: 0.2em !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Rendered value styling for any view. */
|
|
||||||
.dataview-result-list-root-ul {
|
|
||||||
padding: 0em !important;
|
|
||||||
margin: 0em !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataview-result-list-ul {
|
|
||||||
margin-block-start: 0.2em !important;
|
|
||||||
margin-block-end: 0.2em !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Generic grouping styling. */
|
|
||||||
.dataview.result-group {
|
|
||||||
padding-left: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************/
|
|
||||||
/** Inline Fields **/
|
|
||||||
/*******************/
|
|
||||||
|
|
||||||
.dataview.inline-field-key {
|
|
||||||
padding-left: 8px;
|
|
||||||
padding-right: 8px;
|
|
||||||
font-family: var(--font-monospace);
|
|
||||||
background-color: var(--background-primary-alt);
|
|
||||||
color: var(--text-nav-selected);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataview.inline-field-value {
|
|
||||||
padding-left: 8px;
|
|
||||||
padding-right: 8px;
|
|
||||||
font-family: var(--font-monospace);
|
|
||||||
background-color: var(--background-secondary-alt);
|
|
||||||
color: var(--text-nav-selected);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataview.inline-field-standalone-value {
|
|
||||||
padding-left: 8px;
|
|
||||||
padding-right: 8px;
|
|
||||||
font-family: var(--font-monospace);
|
|
||||||
background-color: var(--background-secondary-alt);
|
|
||||||
color: var(--text-nav-selected);
|
|
||||||
}
|
|
||||||
|
|
||||||
/***************/
|
|
||||||
/** Task View **/
|
|
||||||
/***************/
|
|
||||||
|
|
||||||
.dataview.task-list-item, .dataview.task-list-basic-item {
|
|
||||||
margin-top: 3px;
|
|
||||||
margin-bottom: 3px;
|
|
||||||
transition: 0.4s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
|
|
||||||
background-color: var(--text-selection);
|
|
||||||
box-shadow: -40px 0 0 var(--text-selection);
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************/
|
|
||||||
/** Error Views **/
|
|
||||||
/*****************/
|
|
||||||
|
|
||||||
div.dataview-error-box {
|
|
||||||
width: 100%;
|
|
||||||
min-height: 150px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
border: 4px dashed var(--background-secondary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataview-error-message {
|
|
||||||
color: var(--text-muted);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************/
|
|
||||||
/** Additional Metadata **/
|
|
||||||
/*************************/
|
|
||||||
|
|
||||||
.dataview.small-text {
|
|
||||||
font-size: smaller;
|
|
||||||
color: var(--text-muted);
|
|
||||||
margin-left: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataview.small-text::before {
|
|
||||||
content: "(";
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataview.small-text::after {
|
|
||||||
content: ")";
|
|
||||||
}
|
|
||||||
@@ -8,4 +8,3 @@
|
|||||||
[test:: [[Moods|Wiki link display]]]
|
[test:: [[Moods|Wiki link display]]]
|
||||||
[test:: [example link](https://example.com)]
|
[test:: [example link](https://example.com)]
|
||||||
[test::Text with [[Moods|wiki link]] and more text]
|
[test::Text with [[Moods|wiki link]] and more text]
|
||||||
|
|
||||||
|
|||||||
@@ -12,15 +12,7 @@
|
|||||||
"importHelpers": true,
|
"importHelpers": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"strictNullChecks": true,
|
"strictNullChecks": true,
|
||||||
"lib": [
|
"lib": ["DOM", "ES5", "ES6", "ES7", "es2020.string"]
|
||||||
"DOM",
|
|
||||||
"ES5",
|
|
||||||
"ES6",
|
|
||||||
"ES7",
|
|
||||||
"es2020.string"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"include": [
|
"include": ["**/*.ts"]
|
||||||
"**/*.ts"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user