mirror of
https://github.com/streetwriters/notesnook.git
synced 2026-08-29 18:19:38 +02:00
Compare commits
79 Commits
fix-beta-t
...
fix-codebl
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
74a0a117e6 | ||
|
|
e8e50bebcf | ||
|
|
fa0610e392 | ||
|
|
124489a5a5 | ||
|
|
22fcdc0fb1 | ||
|
|
1375300a91 | ||
|
|
e6f4aea4d7 | ||
|
|
d72c4057ff | ||
|
|
02d80ee4fa | ||
|
|
2da3e9e0be | ||
|
|
8333e7bdb3 | ||
|
|
cef2472aae | ||
|
|
a4946f7e89 | ||
|
|
3e95e0feae | ||
|
|
b81843cdf7 | ||
|
|
eedd50fc64 | ||
|
|
1cb00bca0d | ||
|
|
8c233570a7 | ||
|
|
8a3c8b85bb | ||
|
|
2ee8a807dc | ||
|
|
ec85f748fa | ||
|
|
051b7fcb8c | ||
|
|
9af88811d8 | ||
|
|
6c4672037c | ||
|
|
d59e0d9ee2 | ||
|
|
5a001a1457 | ||
|
|
44d6474b36 | ||
|
|
0607e005f5 | ||
|
|
308eb4b55f | ||
|
|
6abb6207c5 | ||
|
|
89189d52ae | ||
|
|
e653ce69f8 | ||
|
|
9b89b328f6 | ||
|
|
77ae71fab1 | ||
|
|
7f7c1e6b93 | ||
|
|
30341bea1c | ||
|
|
82d44ea890 | ||
|
|
5f0907168f | ||
|
|
48061962b1 | ||
|
|
24141b66cf | ||
|
|
41beee45ba | ||
|
|
cb7c70b0d6 | ||
|
|
2aa5a57557 | ||
|
|
17582bcefb | ||
|
|
1f5a5afb10 | ||
|
|
d1c724563f | ||
|
|
72aa5eccb7 | ||
|
|
95e0c4b0d6 | ||
|
|
9ec6ca0ded | ||
|
|
85b7611214 | ||
|
|
d256d435e4 | ||
|
|
577a976e01 | ||
|
|
07453834b0 | ||
|
|
59f6b5e411 | ||
|
|
ac9be8360a | ||
|
|
32d0b07f09 | ||
|
|
7b57639076 | ||
|
|
1fa174bab7 | ||
|
|
6c52b5a77d | ||
|
|
d4a6157ed3 | ||
|
|
a86358bbcd | ||
|
|
20d0e6d047 | ||
|
|
51fc4bf3e4 | ||
|
|
61d0dafd21 | ||
|
|
89398cb5e5 | ||
|
|
72ec4063de | ||
|
|
f8423eeea8 | ||
|
|
d91203990e | ||
|
|
fc84c1af51 | ||
|
|
58de07073d | ||
|
|
cafa5ff821 | ||
|
|
1859799ca3 | ||
|
|
271aa11f74 | ||
|
|
e42f1a65f5 | ||
|
|
73f3a31614 | ||
|
|
4d7792d06a | ||
|
|
1a0f17c059 | ||
|
|
89d941401a | ||
|
|
a076ee640d |
@@ -19,7 +19,6 @@ runs:
|
||||
packages/crypto/package-lock.json
|
||||
packages/sodium/package-lock.json
|
||||
packages/clipper/package-lock.json
|
||||
packages/crypto-worker/package-lock.json
|
||||
packages/editor-mobile/package-lock.json
|
||||
packages/editor/package-lock.json
|
||||
packages/logger/package-lock.json
|
||||
|
||||
@@ -103,7 +103,7 @@ All commits must include valid scopes in the commit message. **Valid commit scop
|
||||
|
||||
**Packages:**
|
||||
|
||||
1. `crypto`: changes related to the cryptographic core (including `@notesnook/crypto-worker`)
|
||||
1. `crypto`: changes related to the cryptographic core
|
||||
2. `editor`: changes related to the editor (including `@notesnook/editor-mobile`)
|
||||
3. `logger`: changes related to the logger
|
||||
4. `theme`: changes related to the theme
|
||||
|
||||
@@ -46,7 +46,6 @@ Notesnook is built using the following technologies:
|
||||
| `@notesnook/editor-mobile` | [/packages/editor-mobile](/packages/editor-mobile) | A very thin wrapper around `@notesnook/editor` for mobile clients |
|
||||
| `@notesnook/logger` | [/packages/logger](/packages/logger) | Simple & pluggable logger |
|
||||
| `@notesnook/sodium` | [/packages/sodium](/packages/sodium) | Wrapper around libsodium to support Node.js & Browser |
|
||||
| `@notesnook/crypto-worker` | [/packages/crypto-worker](/packages/crypto-worker) | Helpers to use `@notesnook/crypto` from a Worker |
|
||||
| `@notesnook/streamable-fs` | [/packages/streamable-fs](/packages/streamable-fs) | Streaming interface around an IndexedDB based file system |
|
||||
| `@notesnook/theme` | [/packages/theme](/packages/theme) | The core theme used in web & desktop clients |
|
||||
|
||||
|
||||
108
apps/desktop/package-lock.json
generated
108
apps/desktop/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@notesnook/desktop",
|
||||
"version": "2.6.1",
|
||||
"version": "2.6.3",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@notesnook/desktop",
|
||||
"version": "2.6.1",
|
||||
"version": "2.6.3",
|
||||
"hasInstallScript": true,
|
||||
"license": "GPL-3.0-or-later",
|
||||
"dependencies": {
|
||||
@@ -14,7 +14,7 @@
|
||||
"@trpc/client": "10.31.0",
|
||||
"@trpc/server": "10.31.0",
|
||||
"electron-trpc": "0.5.2",
|
||||
"electron-updater": "6.1.1",
|
||||
"electron-updater": "6.1.4",
|
||||
"icojs": "^0.17.1",
|
||||
"typed-emitter": "^2.1.0",
|
||||
"yargs": "^17.6.2",
|
||||
@@ -24,8 +24,8 @@
|
||||
"@types/node": "18.16.1",
|
||||
"@types/yargs": "^17.0.24",
|
||||
"chokidar": "^3.5.3",
|
||||
"electron": "^26.1.0",
|
||||
"electron-builder": "^24.6.3",
|
||||
"electron": "25.8.0",
|
||||
"electron-builder": "^24.6.4",
|
||||
"electron-builder-notarize": "^1.5.1",
|
||||
"esbuild": "^0.17.19",
|
||||
"tree-kill": "^1.2.2",
|
||||
@@ -270,13 +270,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/notarize": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-1.2.4.tgz",
|
||||
"integrity": "sha512-W5GQhJEosFNafewnS28d3bpQ37/s91CDWqxVchHfmv2dQSTWpOzNlUVQwYzC1ay5bChRV/A9BTL68yj0Pa+TSg==",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.1.0.tgz",
|
||||
"integrity": "sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"debug": "^4.1.1",
|
||||
"fs-extra": "^9.0.1"
|
||||
"fs-extra": "^9.0.1",
|
||||
"promise-retry": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.0.0"
|
||||
@@ -331,9 +332,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/universal": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.3.4.tgz",
|
||||
"integrity": "sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg==",
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.4.1.tgz",
|
||||
"integrity": "sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@electron/asar": "^3.2.1",
|
||||
@@ -1040,15 +1041,15 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/app-builder-lib": {
|
||||
"version": "24.6.3",
|
||||
"resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.6.3.tgz",
|
||||
"integrity": "sha512-++0Zp7vcCHfXMBGVj7luFxpqvMPk5mcWeTuw7OK0xNAaNtYQTTN0d9YfWRsb1MvviTOOhyHeULWz1CaixrdrDg==",
|
||||
"version": "24.6.4",
|
||||
"resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.6.4.tgz",
|
||||
"integrity": "sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@develar/schema-utils": "~2.6.5",
|
||||
"@electron/notarize": "^1.2.3",
|
||||
"@electron/osx-sign": "^1.0.4",
|
||||
"@electron/universal": "1.3.4",
|
||||
"@electron/notarize": "2.1.0",
|
||||
"@electron/osx-sign": "1.0.5",
|
||||
"@electron/universal": "1.4.1",
|
||||
"@malept/flatpak-bundler": "^0.4.0",
|
||||
"@types/fs-extra": "9.0.13",
|
||||
"7zip-bin": "~5.1.1",
|
||||
@@ -1678,12 +1679,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/dmg-builder": {
|
||||
"version": "24.6.3",
|
||||
"resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.6.3.tgz",
|
||||
"integrity": "sha512-O7KNT7OKqtV54fMYUpdlyTOCP5DoPuRMLqMTgxxV2PO8Hj/so6zOl5o8GTs8pdDkeAhJzCFOUNB3BDhgXbUbJg==",
|
||||
"version": "24.6.4",
|
||||
"resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.6.4.tgz",
|
||||
"integrity": "sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"app-builder-lib": "24.6.3",
|
||||
"app-builder-lib": "24.6.4",
|
||||
"builder-util": "24.5.0",
|
||||
"builder-util-runtime": "9.2.1",
|
||||
"fs-extra": "^10.1.0",
|
||||
@@ -1750,9 +1751,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/electron": {
|
||||
"version": "26.1.0",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-26.1.0.tgz",
|
||||
"integrity": "sha512-qEh19H09Pysn3ibms5nZ0haIh5pFoOd7/5Ww7gzmAwDQOulRi8Sa2naeueOyIb1GKpf+6L4ix3iceYRAuA5r5Q==",
|
||||
"version": "25.8.0",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-25.8.0.tgz",
|
||||
"integrity": "sha512-T3kC1a/3ntSaYMCVVfUUc9v7myPzi6J2GP0Ad/CyfWKDPp054dGyKxb2EEjKnxQQ7wfjsT1JTEdBG04x6ekVBw==",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@electron/get": "^2.0.0",
|
||||
@@ -1767,16 +1768,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/electron-builder": {
|
||||
"version": "24.6.3",
|
||||
"resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.6.3.tgz",
|
||||
"integrity": "sha512-O6PqhRXwfxCNTXI4BlhELSeYYO6/tqlxRuy+4+xKBokQvwDDjDgZMMoSgAmanVSCuzjE7MZldI9XYrKFk+EQDw==",
|
||||
"version": "24.6.4",
|
||||
"resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.6.4.tgz",
|
||||
"integrity": "sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"app-builder-lib": "24.6.3",
|
||||
"app-builder-lib": "24.6.4",
|
||||
"builder-util": "24.5.0",
|
||||
"builder-util-runtime": "9.2.1",
|
||||
"chalk": "^4.1.2",
|
||||
"dmg-builder": "24.6.3",
|
||||
"dmg-builder": "24.6.4",
|
||||
"fs-extra": "^10.1.0",
|
||||
"is-ci": "^3.0.0",
|
||||
"lazy-val": "^1.0.5",
|
||||
@@ -1896,9 +1897,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/electron-updater": {
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.1.1.tgz",
|
||||
"integrity": "sha512-IBT3zJ4yO5UZMF2gOTC9HrlmG4OYSRtOiHKzNAShJvfuicdx6UaXoa6AvhcTxdx6zf/rJyFMRBISS9jhVwTfow==",
|
||||
"version": "6.1.4",
|
||||
"resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.1.4.tgz",
|
||||
"integrity": "sha512-yYAJc6RQjjV4WtInZVn+ZcLyXRhbVXoomKEfUUwDqIk5s2wxzLhWaor7lrNgxODyODhipjg4SVPMhJHi5EnsCA==",
|
||||
"dependencies": {
|
||||
"builder-util-runtime": "9.2.1",
|
||||
"fs-extra": "^10.1.0",
|
||||
@@ -1907,7 +1908,7 @@
|
||||
"lodash.escaperegexp": "^4.1.2",
|
||||
"lodash.isequal": "^4.5.0",
|
||||
"semver": "^7.3.8",
|
||||
"typed-emitter": "^2.1.0"
|
||||
"tiny-typed-emitter": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
@@ -1931,6 +1932,12 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/err-code": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
|
||||
"integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/error-ex": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
||||
@@ -3102,6 +3109,19 @@
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/promise-retry": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
|
||||
"integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"err-code": "^2.0.2",
|
||||
"retry": "^0.12.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/pump": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
||||
@@ -3331,6 +3351,15 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/retry": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
|
||||
"integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
}
|
||||
},
|
||||
"node_modules/rimraf": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||
@@ -3674,9 +3703,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/tar": {
|
||||
"version": "6.1.15",
|
||||
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz",
|
||||
"integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==",
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
|
||||
"integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"chownr": "^2.0.0",
|
||||
@@ -3700,6 +3729,11 @@
|
||||
"fs-extra": "^10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tiny-typed-emitter": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz",
|
||||
"integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA=="
|
||||
},
|
||||
"node_modules/tmp": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@notesnook/desktop",
|
||||
"productName": "Notesnook",
|
||||
"description": "Your private note taking space",
|
||||
"version": "2.6.1",
|
||||
"version": "2.6.3",
|
||||
"appAppleId": "1544027013",
|
||||
"private": true,
|
||||
"main": "./dist/index.js",
|
||||
@@ -15,7 +15,7 @@
|
||||
"@trpc/client": "10.31.0",
|
||||
"@trpc/server": "10.31.0",
|
||||
"electron-trpc": "0.5.2",
|
||||
"electron-updater": "6.1.1",
|
||||
"electron-updater": "6.1.4",
|
||||
"icojs": "^0.17.1",
|
||||
"typed-emitter": "^2.1.0",
|
||||
"yargs": "^17.6.2",
|
||||
@@ -25,8 +25,8 @@
|
||||
"@types/node": "18.16.1",
|
||||
"@types/yargs": "^17.0.24",
|
||||
"chokidar": "^3.5.3",
|
||||
"electron": "^26.1.0",
|
||||
"electron-builder": "^24.6.3",
|
||||
"electron": "25.8.0",
|
||||
"electron-builder": "^24.6.4",
|
||||
"electron-builder-notarize": "^1.5.1",
|
||||
"esbuild": "^0.17.19",
|
||||
"tree-kill": "^1.2.2",
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/node_modules/app-builder-lib/out/targets/LinuxTargetHelper.js b/node_modules/app-builder-lib/out/targets/LinuxTargetHelper.js
|
||||
index 3ba5d6a..cf8e147 100644
|
||||
index fcb7f54..cb1c7f7 100644
|
||||
--- a/node_modules/app-builder-lib/out/targets/LinuxTargetHelper.js
|
||||
+++ b/node_modules/app-builder-lib/out/targets/LinuxTargetHelper.js
|
||||
@@ -105,6 +105,7 @@ class LinuxTargetHelper {
|
||||
@@ -116,6 +116,7 @@ class LinuxTargetHelper {
|
||||
StartupWMClass: appInfo.productName,
|
||||
...extra,
|
||||
...targetSpecificOptions.desktop,
|
||||
@@ -10,7 +10,7 @@ index 3ba5d6a..cf8e147 100644
|
||||
};
|
||||
const description = this.getDescription(targetSpecificOptions);
|
||||
if (!(0, builder_util_1.isEmptyOrSpaces)(description)) {
|
||||
@@ -148,6 +149,23 @@ class LinuxTargetHelper {
|
||||
@@ -159,6 +160,23 @@ class LinuxTargetHelper {
|
||||
data += `\n${name}=${desktopMeta[name]}`;
|
||||
}
|
||||
data += "\n";
|
||||
@@ -53,6 +53,13 @@ if (process.platform === "win32") {
|
||||
app.setAppUserModelId(app.name);
|
||||
}
|
||||
|
||||
process.on("uncaughtException", (error) => {
|
||||
console.error("uncaughtException:", error);
|
||||
});
|
||||
process.on("unhandledRejection", (reason) => {
|
||||
console.error("unhandledRejection:", reason);
|
||||
});
|
||||
|
||||
app.commandLine.appendSwitch("lang", "en-US");
|
||||
|
||||
async function createWindow() {
|
||||
|
||||
@@ -62,14 +62,9 @@ function registerProtocol() {
|
||||
headers: { "Content-Type": extensionToMimeType[fileExtension] }
|
||||
});
|
||||
} else {
|
||||
try {
|
||||
return net.fetch(request, {
|
||||
bypassCustomProtocolHandlers: true
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
return Response.error();
|
||||
return net.fetch(request, {
|
||||
bypassCustomProtocolHandlers: true
|
||||
});
|
||||
}
|
||||
});
|
||||
console.info(`${SCHEME} protocol inteception "successful"`);
|
||||
|
||||
@@ -17,18 +17,14 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import { database } from "@notesnook/common";
|
||||
import { initalize, logger as dbLogger } from "@notesnook/core/dist/logger";
|
||||
import { logger as dbLogger } from "@notesnook/core/dist/logger";
|
||||
import { Platform } from "react-native";
|
||||
import { MMKVLoader } from "react-native-mmkv-storage";
|
||||
import filesystem from "../filesystem";
|
||||
import * as Gzip from "react-native-gzip";
|
||||
import EventSource from "../../utils/sse/even-source-ios";
|
||||
import AndroidEventSource from "../../utils/sse/event-source";
|
||||
import Storage, { KV } from "./storage";
|
||||
import * as Gzip from "react-native-gzip";
|
||||
|
||||
const LoggerStorage = new MMKVLoader()
|
||||
.withInstanceID("notesnook_logs")
|
||||
.initialize();
|
||||
import filesystem from "../filesystem";
|
||||
import "./logger";
|
||||
import Storage from "./storage";
|
||||
|
||||
database.host(
|
||||
__DEV__
|
||||
@@ -63,7 +59,5 @@ database.setup(
|
||||
}
|
||||
);
|
||||
|
||||
initalize(new KV(LoggerStorage));
|
||||
|
||||
export const db = database;
|
||||
export const DatabaseLogger = dbLogger;
|
||||
|
||||
29
apps/mobile/app/common/database/logger.js
Normal file
29
apps/mobile/app/common/database/logger.js
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
This file is part of the Notesnook project (https://notesnook.com/)
|
||||
|
||||
Copyright (C) 2023 Streetwriters (Private) Limited
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import { MMKVLoader } from "react-native-mmkv-storage";
|
||||
import { initalize } from "@notesnook/core/dist/logger";
|
||||
import { KV } from "./storage";
|
||||
|
||||
const LoggerStorage = new MMKVLoader()
|
||||
.withInstanceID("notesnook_logs")
|
||||
.initialize();
|
||||
|
||||
initalize(new KV(LoggerStorage));
|
||||
|
||||
export {};
|
||||
@@ -26,4 +26,5 @@ export const MMKV = new MMKVLoader()
|
||||
? ProcessingModes.MULTI_PROCESS
|
||||
: ProcessingModes.SINGLE_PROCESS
|
||||
)
|
||||
.disableIndexing()
|
||||
.initialize();
|
||||
|
||||
@@ -128,7 +128,9 @@ export const Cta = ({ actions, style = {}, color, inline }) => {
|
||||
fontSize={SIZE.md}
|
||||
buttonType={{
|
||||
color: color ? color : colors.primary.accent,
|
||||
text: colors.static.white,
|
||||
text: color
|
||||
? colors.static.white
|
||||
: colors.primary.accentForeground,
|
||||
selected: color ? color : colors.primary.accent,
|
||||
opacity: 1
|
||||
}}
|
||||
|
||||
@@ -214,6 +214,7 @@ const TwoFactorVerification = ({ onMfaLogin, mfaInfo }) => {
|
||||
code.current = value;
|
||||
//onNext();
|
||||
}}
|
||||
caretHidden
|
||||
inputStyle={{
|
||||
fontSize: SIZE.lg,
|
||||
height: 60,
|
||||
|
||||
@@ -140,7 +140,7 @@ const FloatingButton = ({
|
||||
>
|
||||
<Icon
|
||||
name={title === "Clear all trash" ? "delete" : "plus"}
|
||||
color="white"
|
||||
color={colors.primary.accentForeground}
|
||||
size={SIZE.xxl}
|
||||
/>
|
||||
</View>
|
||||
|
||||
@@ -40,6 +40,7 @@ import { TimeSince } from "../../ui/time-since";
|
||||
import Heading from "../../ui/typography/heading";
|
||||
import Paragraph from "../../ui/typography/paragraph";
|
||||
import { useIsCompactModeEnabled } from "../../../hooks/use-is-compact-mode-enabled";
|
||||
import { useEditorStore } from "../../../stores/use-editor-store";
|
||||
|
||||
function navigateToTag(item) {
|
||||
const tag = db.tags.tag(item.id);
|
||||
@@ -98,6 +99,9 @@ const NoteItem = ({
|
||||
dateBy = "dateCreated",
|
||||
noOpen = false
|
||||
}) => {
|
||||
const currentEditingNote = useEditorStore(
|
||||
(state) => state.currentEditingNote
|
||||
);
|
||||
const { colors } = useThemeColors();
|
||||
const compactMode = useIsCompactModeEnabled(item);
|
||||
const attachmentCount = db.attachments?.ofNote(item.id, "all")?.length || 0;
|
||||
@@ -108,6 +112,9 @@ const NoteItem = ({
|
||||
const reminder = getUpcomingReminder(reminders);
|
||||
const noteColor = ColorValues[item.color?.toLowerCase()];
|
||||
const tags = getTags(item);
|
||||
const primaryColors =
|
||||
currentEditingNote === item.id ? colors.selected : colors.primary;
|
||||
|
||||
return (
|
||||
<>
|
||||
<View
|
||||
@@ -148,7 +155,7 @@ const NoteItem = ({
|
||||
borderRadius: 5,
|
||||
marginRight: 5,
|
||||
borderWidth: 0.5,
|
||||
borderColor: colors.primary.border,
|
||||
borderColor: primaryColors.border,
|
||||
paddingHorizontal: 6,
|
||||
marginBottom: 5
|
||||
}}
|
||||
@@ -179,7 +186,7 @@ const NoteItem = ({
|
||||
<Paragraph
|
||||
numberOfLines={1}
|
||||
color={
|
||||
ColorValues[item.color?.toLowerCase()] || colors.primary.heading
|
||||
ColorValues[item.color?.toLowerCase()] || primaryColors.heading
|
||||
}
|
||||
style={{
|
||||
flexWrap: "wrap"
|
||||
@@ -192,7 +199,7 @@ const NoteItem = ({
|
||||
<Heading
|
||||
numberOfLines={1}
|
||||
color={
|
||||
ColorValues[item.color?.toLowerCase()] || colors.primary.heading
|
||||
ColorValues[item.color?.toLowerCase()] || primaryColors.heading
|
||||
}
|
||||
style={{
|
||||
flexWrap: "wrap"
|
||||
@@ -208,6 +215,7 @@ const NoteItem = ({
|
||||
style={{
|
||||
flexWrap: "wrap"
|
||||
}}
|
||||
color={primaryColors.paragraph}
|
||||
numberOfLines={2}
|
||||
>
|
||||
{decode(item.headline, {
|
||||
@@ -262,7 +270,7 @@ const NoteItem = ({
|
||||
<Icon
|
||||
name="attachment"
|
||||
size={SIZE.md}
|
||||
color={colors.primary.icon}
|
||||
color={primaryColors.icon}
|
||||
/>
|
||||
<Paragraph
|
||||
color={colors.secondary.paragraph}
|
||||
@@ -283,7 +291,7 @@ const NoteItem = ({
|
||||
}}
|
||||
color={
|
||||
ColorValues[item.color?.toLowerCase()] ||
|
||||
colors.primary.accent
|
||||
primaryColors.accent
|
||||
}
|
||||
/>
|
||||
) : null}
|
||||
@@ -296,7 +304,7 @@ const NoteItem = ({
|
||||
style={{
|
||||
marginRight: 6
|
||||
}}
|
||||
color={colors.primary.icon}
|
||||
color={primaryColors.icon}
|
||||
/>
|
||||
) : null}
|
||||
|
||||
@@ -354,7 +362,7 @@ const NoteItem = ({
|
||||
</Paragraph>
|
||||
|
||||
<Paragraph
|
||||
color={colors.primary.accent}
|
||||
color={primaryColors.accent}
|
||||
size={SIZE.xs}
|
||||
style={{
|
||||
marginRight: 6
|
||||
@@ -424,7 +432,7 @@ const NoteItem = ({
|
||||
|
||||
<IconButton
|
||||
testID={notesnook.listitem.menu}
|
||||
color={colors.primary.paragraph}
|
||||
color={primaryColors.paragraph}
|
||||
name="dots-horizontal"
|
||||
size={SIZE.xl}
|
||||
onPress={() => !noOpen && showActionSheet(item, isTrash)}
|
||||
|
||||
@@ -35,10 +35,14 @@ import { presentDialog } from "../../dialog/functions";
|
||||
import { Button } from "../../ui/button";
|
||||
import Seperator from "../../ui/seperator";
|
||||
import Paragraph from "../../ui/typography/paragraph";
|
||||
import { useStoredRef } from "../../../hooks/use-stored-ref";
|
||||
|
||||
export const Issue = ({ defaultTitle, defaultBody, issueTitle }) => {
|
||||
const { colors } = useThemeColors();
|
||||
const body = useRef(defaultBody);
|
||||
const title = useRef(defaultTitle);
|
||||
|
||||
const body = useStoredRef("issueBody", defaultBody);
|
||||
const title = useStoredRef("issueTitle", defaultTitle);
|
||||
|
||||
const user = useUserStore((state) => state.user);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const bodyRef = useRef();
|
||||
@@ -70,6 +74,8 @@ Logged in: ${user ? "yes" : "no"}`,
|
||||
});
|
||||
setLoading(false);
|
||||
eSendEvent(eCloseSheet);
|
||||
body.reset();
|
||||
title.reset();
|
||||
await sleep(300);
|
||||
presentDialog({
|
||||
title: "Issue reported",
|
||||
|
||||
@@ -64,7 +64,7 @@ export const Progress = () => {
|
||||
width={null}
|
||||
animated={true}
|
||||
useNativeDriver
|
||||
progress={currentProgress || 0.1}
|
||||
indeterminate
|
||||
unfilledColor={colors.secondary.background}
|
||||
color={colors.primary.accent}
|
||||
borderWidth={0}
|
||||
@@ -74,7 +74,7 @@ export const Progress = () => {
|
||||
{progress ? (
|
||||
<Paragraph color={colors.secondary.paragraph}>
|
||||
{progress.type?.slice(0, 1).toUpperCase() + progress.type?.slice(1)}
|
||||
ing {progress?.current}/{progress?.total}
|
||||
ing {progress?.current}
|
||||
</Paragraph>
|
||||
) : null}
|
||||
</View>
|
||||
|
||||
@@ -17,20 +17,18 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { useThemeColors } from "@notesnook/theme";
|
||||
import React, { useCallback, useEffect, useState } from "react";
|
||||
import { View } from "react-native";
|
||||
import Icon from "react-native-vector-icons/MaterialCommunityIcons";
|
||||
import ToggleSwitch from "toggle-switch-react-native";
|
||||
import Navigation from "../../services/navigation";
|
||||
import useNavigationStore from "../../stores/use-navigation-store";
|
||||
import { useThemeColors } from "@notesnook/theme";
|
||||
import { normalize, SIZE } from "../../utils/size";
|
||||
import { SIZE, normalize } from "../../utils/size";
|
||||
import { Button } from "../ui/button";
|
||||
import { PressableButton } from "../ui/pressable";
|
||||
import Heading from "../ui/typography/heading";
|
||||
import Paragraph from "../ui/typography/paragraph";
|
||||
import { useCallback } from "react";
|
||||
import Tag from "../ui/tag";
|
||||
|
||||
export const MenuItem = React.memo(
|
||||
function MenuItem({ item, index, testID, rightBtn }) {
|
||||
@@ -40,6 +38,7 @@ export const MenuItem = React.memo(
|
||||
);
|
||||
const screenId = item.name.toLowerCase() + "_navigation";
|
||||
let isFocused = headerTextState?.id === screenId;
|
||||
const primaryColors = isFocused ? colors.selected : colors.primary;
|
||||
|
||||
const _onPress = () => {
|
||||
if (item.func) {
|
||||
@@ -132,13 +131,13 @@ export const MenuItem = React.memo(
|
||||
<View
|
||||
style={{
|
||||
borderRadius: 100,
|
||||
backgroundColor: colors.primary.accent,
|
||||
backgroundColor: primaryColors.accent,
|
||||
paddingHorizontal: 4,
|
||||
marginLeft: 5,
|
||||
paddingVertical: 2
|
||||
}}
|
||||
>
|
||||
<Paragraph color={colors.static.white} size={SIZE.xxs}>
|
||||
<Paragraph color={primaryColors.accentForeground} size={SIZE.xxs}>
|
||||
BETA
|
||||
</Paragraph>
|
||||
</View>
|
||||
@@ -148,8 +147,8 @@ export const MenuItem = React.memo(
|
||||
{item.switch ? (
|
||||
<ToggleSwitch
|
||||
isOn={item.on}
|
||||
onColor={colors.primary.accent}
|
||||
offColor={colors.primary.icon}
|
||||
onColor={primaryColors.accent}
|
||||
offColor={primaryColors.icon}
|
||||
size="small"
|
||||
animationSpeed={150}
|
||||
onToggle={_onPress}
|
||||
|
||||
@@ -108,9 +108,12 @@ export const PinItem = React.memo(
|
||||
alias = item?.alias || item?.title;
|
||||
const [visible, setVisible] = useState(false);
|
||||
const [headerTextState, setHeaderTextState] = useState(null);
|
||||
const primaryColors =
|
||||
headerTextState?.id === item.id ? colors.selected : colors.primary;
|
||||
|
||||
const color =
|
||||
headerTextState?.id === item.id
|
||||
? colors.primary.accent
|
||||
? colors.selected.accent
|
||||
: colors.primary.icon;
|
||||
const fwdRef = useRef();
|
||||
|
||||
@@ -230,7 +233,7 @@ export const PinItem = React.memo(
|
||||
style={{
|
||||
flexWrap: "wrap"
|
||||
}}
|
||||
color={colors.primary.heading}
|
||||
color={primaryColors.heading}
|
||||
size={SIZE.md}
|
||||
>
|
||||
{alias}
|
||||
@@ -238,7 +241,7 @@ export const PinItem = React.memo(
|
||||
) : (
|
||||
<Paragraph
|
||||
numberOfLines={1}
|
||||
color={colors.primary.paragraph}
|
||||
color={primaryColors.paragraph}
|
||||
size={SIZE.md}
|
||||
>
|
||||
{alias}
|
||||
|
||||
@@ -135,7 +135,7 @@ export const UserStatus = () => {
|
||||
? "Last sync failed, tap to try again"
|
||||
: syncing
|
||||
? `Syncing your notes${
|
||||
progress ? ` (${progress.current}/${progress.total})` : ""
|
||||
progress ? ` (${progress.current})` : ""
|
||||
}`
|
||||
: "Tap here to sync your notes."}
|
||||
</Paragraph>
|
||||
|
||||
@@ -77,7 +77,9 @@ export const Tip = ({
|
||||
alignSelf: "flex-start",
|
||||
borderRadius: 100,
|
||||
borderWidth: 1,
|
||||
borderColor: colors.static[color as never] || colors.primary[color as never] as string
|
||||
borderColor:
|
||||
colors.static[color as never] ||
|
||||
(colors.primary[color as never] as string)
|
||||
}}
|
||||
/>
|
||||
|
||||
@@ -139,7 +141,7 @@ export const Tip = ({
|
||||
icon={tip.button.icon}
|
||||
buttonType={{
|
||||
color: colors.static[color as never],
|
||||
text: colors.static.white
|
||||
text: colors.primary.accentForeground
|
||||
}}
|
||||
style={{
|
||||
marginTop: 10
|
||||
|
||||
@@ -108,7 +108,7 @@ export const useButton = ({
|
||||
},
|
||||
accent: {
|
||||
primary: accent || colors.primary.accent,
|
||||
text: text || colors.primary.paragraph,
|
||||
text: text || colors.primary.accentForeground,
|
||||
selected: accent || colors.primary.accent
|
||||
},
|
||||
inverted: {
|
||||
|
||||
@@ -16,9 +16,9 @@ GNU General Public License for more details.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import React from "react";
|
||||
import { View, ViewStyle } from "react-native";
|
||||
import { useThemeColors } from "@notesnook/theme";
|
||||
import React from "react";
|
||||
import { ViewStyle } from "react-native";
|
||||
import { SIZE } from "../../../utils/size";
|
||||
import Paragraph from "../typography/paragraph";
|
||||
|
||||
@@ -50,7 +50,7 @@ export default function Tag({
|
||||
textAlign: "center",
|
||||
...style
|
||||
}}
|
||||
color={textColor || colors.static.white}
|
||||
color={textColor || colors.primary.accentForeground}
|
||||
size={SIZE.xxs}
|
||||
>
|
||||
{text}
|
||||
|
||||
@@ -101,13 +101,6 @@ const onSyncAborted = () => {
|
||||
useUserStore.getState().setSyncing(false, SyncStatus.Failed);
|
||||
};
|
||||
|
||||
const onSyncProgress = ({ type, total, current }) => {
|
||||
if (type !== "download") return;
|
||||
if (total < 10 || current % 10 === 0) {
|
||||
initAfterSync();
|
||||
}
|
||||
};
|
||||
|
||||
const onFileEncryptionProgress = ({ total, progress }) => {
|
||||
useAttachmentStore
|
||||
.getState()
|
||||
@@ -167,13 +160,15 @@ const onUserSubscriptionStatusChanged = async (userStatus) => {
|
||||
useMessageStore.getState().setAnnouncement();
|
||||
};
|
||||
|
||||
const onRequestPartialSync = async (full, force) => {
|
||||
const onRequestPartialSync = async (full, force, lastSyncTime) => {
|
||||
if (SettingsService.get().disableAutoSync) return;
|
||||
DatabaseLogger.info(`onRequestPartialSync full:${full}, force:${force}`);
|
||||
DatabaseLogger.info(
|
||||
`onRequestPartialSync full:${full}, force:${force}, lastSyncTime:${lastSyncTime}`
|
||||
);
|
||||
if (full || force) {
|
||||
await Sync.run("global", force, full);
|
||||
await Sync.run("global", force, full, undefined, lastSyncTime);
|
||||
} else {
|
||||
await Sync.run("global", false, false);
|
||||
await Sync.run("global", false, false, undefined, lastSyncTime);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -253,7 +248,6 @@ export const useAppEvents = () => {
|
||||
]);
|
||||
|
||||
const syncedOnLaunch = useRef(false);
|
||||
const { isDark } = useThemeColors();
|
||||
const refValues = useRef({
|
||||
subsriptionSuccessListener: null,
|
||||
subsriptionErrorListener: null,
|
||||
@@ -278,7 +272,6 @@ export const useAppEvents = () => {
|
||||
const eventManager = db?.eventManager;
|
||||
eventSubscriptions = [
|
||||
eventManager?.subscribe(EVENTS.syncCompleted, onSyncComplete),
|
||||
eventManager?.subscribe(EVENTS.syncProgress, onSyncProgress),
|
||||
eventManager?.subscribe(
|
||||
EVENTS.databaseSyncRequested,
|
||||
onRequestPartialSync
|
||||
@@ -533,6 +526,12 @@ export const useAppEvents = () => {
|
||||
if (refValues.current?.isReconnecting || !refValues.current?.isUserReady)
|
||||
return;
|
||||
|
||||
if (useSettingStore.getState().appDidEnterBackgroundForAction) {
|
||||
useSettingStore.getState().setAppDidEnterBackgroundForAction(false);
|
||||
console.log("AppDidEnterForegroundAfterAction");
|
||||
return;
|
||||
}
|
||||
|
||||
if (SettingsService.get().sessionExpired) {
|
||||
refValues.current.isReconnecting = false;
|
||||
return;
|
||||
|
||||
52
apps/mobile/app/hooks/use-stored-ref.ts
Normal file
52
apps/mobile/app/hooks/use-stored-ref.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
This file is part of the Notesnook project (https://notesnook.com/)
|
||||
|
||||
Copyright (C) 2023 Streetwriters (Private) Limited
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import { useRef } from "react";
|
||||
import { MMKV } from "../common/database/mmkv";
|
||||
|
||||
export function useStoredRef<T>(
|
||||
key: string,
|
||||
initialValue: T
|
||||
): {
|
||||
current: T;
|
||||
reset(): void;
|
||||
} {
|
||||
const refKey = `storedRef:${key}`;
|
||||
const value = useRef(
|
||||
MMKV.getMap<{ current: T }>(refKey)?.current || initialValue
|
||||
);
|
||||
const frameRef = useRef(0);
|
||||
|
||||
return {
|
||||
get current() {
|
||||
return value.current;
|
||||
},
|
||||
set current(next: T) {
|
||||
value.current = next;
|
||||
cancelAnimationFrame(frameRef.current);
|
||||
frameRef.current = requestAnimationFrame(() => {
|
||||
MMKV.setMap(refKey, {
|
||||
current: value.current
|
||||
});
|
||||
});
|
||||
},
|
||||
reset() {
|
||||
MMKV.removeItem(refKey);
|
||||
}
|
||||
};
|
||||
}
|
||||
49
apps/mobile/app/hooks/use-stored-state.ts
Normal file
49
apps/mobile/app/hooks/use-stored-state.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
This file is part of the Notesnook project (https://notesnook.com/)
|
||||
|
||||
Copyright (C) 2023 Streetwriters (Private) Limited
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import { useRef, useState } from "react";
|
||||
import { MMKV } from "../common/database/mmkv";
|
||||
|
||||
export function useStoredValue<T>(
|
||||
key: string,
|
||||
initialValue: T
|
||||
): { value: T; reset(): void } {
|
||||
const refKey = `storedState:${key}`;
|
||||
const [value, setValue] = useState<T>(
|
||||
MMKV.getMap<{ value: T }>(refKey)?.value || initialValue
|
||||
);
|
||||
const frameRef = useRef(0);
|
||||
|
||||
return {
|
||||
get value() {
|
||||
return value;
|
||||
},
|
||||
set value(next: T) {
|
||||
setValue(next);
|
||||
cancelAnimationFrame(frameRef.current);
|
||||
frameRef.current = requestAnimationFrame(() => {
|
||||
MMKV.setMap(refKey, {
|
||||
value: value
|
||||
});
|
||||
});
|
||||
},
|
||||
reset() {
|
||||
MMKV.removeItem(refKey);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -34,6 +34,7 @@ import PremiumService from "../../../services/premium";
|
||||
import { FILE_SIZE_LIMIT, IMAGE_SIZE_LIMIT } from "../../../utils/constants";
|
||||
import { eCloseSheet } from "../../../utils/events";
|
||||
import { editorController, editorState } from "./utils";
|
||||
import { useSettingStore } from "../../../stores/use-setting-store";
|
||||
|
||||
const showEncryptionSheet = (file) => {
|
||||
presentSheet({
|
||||
@@ -62,6 +63,7 @@ const file = async (fileOptions) => {
|
||||
|
||||
let file;
|
||||
try {
|
||||
useSettingStore.getState().setAppDidEnterBackgroundForAction(true);
|
||||
file = await DocumentPicker.pick(options);
|
||||
} catch (e) {
|
||||
return;
|
||||
@@ -135,6 +137,7 @@ const file = async (fileOptions) => {
|
||||
const camera = async (options) => {
|
||||
try {
|
||||
await db.attachments.generateKey();
|
||||
useSettingStore.getState().setAppDidEnterBackgroundForAction(true);
|
||||
launchCamera(
|
||||
{
|
||||
includeBase64: true,
|
||||
@@ -156,6 +159,7 @@ const camera = async (options) => {
|
||||
const gallery = async (options) => {
|
||||
try {
|
||||
await db.attachments.generateKey();
|
||||
useSettingStore.getState().setAppDidEnterBackgroundForAction(true);
|
||||
launchImageLibrary(
|
||||
{
|
||||
includeBase64: true,
|
||||
|
||||
@@ -141,6 +141,7 @@ export const useEditor = (
|
||||
clearTimeout(timers.current["loading-images"]);
|
||||
sessionHistoryId.current = undefined;
|
||||
saveCount.current = 0;
|
||||
lock.current = false;
|
||||
useEditorStore.getState().setReadonly(false);
|
||||
resetContent && postMessage(EditorEvents.title, "");
|
||||
lastContentChangeTime.current = 0;
|
||||
|
||||
@@ -55,6 +55,7 @@ export const EditorWrapper = ({ width }) => {
|
||||
prevState.current = state;
|
||||
return;
|
||||
}
|
||||
if (useSettingStore.getState().appDidEnterBackgroundForAction) return;
|
||||
if (state === "active") {
|
||||
editorController.current.onReady();
|
||||
editorController.current.overlay(false);
|
||||
|
||||
@@ -748,7 +748,7 @@ const ThemeSetter = ({
|
||||
paddingVertical: 12
|
||||
}}
|
||||
>
|
||||
<Heading color={colors.accent} size={SIZE.md}>
|
||||
<Heading color={colors.accentForeground} size={SIZE.md}>
|
||||
{darkTheme.id === theme.id
|
||||
? "Applied as dark theme"
|
||||
: "Applied as light theme"}
|
||||
|
||||
@@ -49,7 +49,6 @@ import NetInfo from "@react-native-community/netinfo";
|
||||
import { encodeNonAsciiHTML } from "entities";
|
||||
import { convertNoteToText } from "../utils/note-to-text";
|
||||
|
||||
|
||||
export type Reminder = {
|
||||
id: string;
|
||||
type: string;
|
||||
@@ -142,6 +141,7 @@ const onEvent = async ({ type, detail }: Event) => {
|
||||
const ReminderNotify =
|
||||
require("../components/sheets/reminder-notify").default;
|
||||
ReminderNotify.present(reminder);
|
||||
useRelationStore.getState().update();
|
||||
return;
|
||||
}
|
||||
editorState().movedAway = false;
|
||||
|
||||
@@ -39,7 +39,8 @@ const run = async (
|
||||
context = "global",
|
||||
forced = false,
|
||||
full = true,
|
||||
onCompleted
|
||||
onCompleted,
|
||||
lastSyncTime
|
||||
) => {
|
||||
if (useUserStore.getState().syncing) {
|
||||
DatabaseLogger.log("Sync in progress");
|
||||
@@ -68,7 +69,7 @@ const run = async (
|
||||
try {
|
||||
let res = await BackgroundSync.doInBackground(async () => {
|
||||
try {
|
||||
await db.sync(full, forced);
|
||||
await db.sync(full, forced, lastSyncTime);
|
||||
return true;
|
||||
} catch (e) {
|
||||
error = e;
|
||||
|
||||
@@ -103,6 +103,8 @@ export interface SettingStore extends State {
|
||||
sheetKeyboardHandler: boolean;
|
||||
requestBiometrics: boolean;
|
||||
setRequestBiometrics: (requestBiometrics: boolean) => void;
|
||||
appDidEnterBackgroundForAction: boolean;
|
||||
setAppDidEnterBackgroundForAction: (value: boolean) => void;
|
||||
insets: Insets;
|
||||
setInsets: (insets: Insets) => void;
|
||||
timeFormat: string;
|
||||
@@ -155,7 +157,7 @@ export const defaultSettings: SettingStore["settings"] = {
|
||||
darkTheme: ThemeDark
|
||||
};
|
||||
|
||||
export const useSettingStore = create<SettingStore>((set) => ({
|
||||
export const useSettingStore = create<SettingStore>((set, get) => ({
|
||||
settings: { ...defaultSettings },
|
||||
sheetKeyboardHandler: true,
|
||||
fullscreen: false,
|
||||
@@ -174,6 +176,12 @@ export const useSettingStore = create<SettingStore>((set) => ({
|
||||
setInsets: (insets) => set({ insets }),
|
||||
timeFormat: "12-hour",
|
||||
dateFormat: "DD-MM-YYYY",
|
||||
setAppDidEnterBackgroundForAction: (value: boolean) => {
|
||||
set({
|
||||
appDidEnterBackgroundForAction: value
|
||||
});
|
||||
},
|
||||
appDidEnterBackgroundForAction: false,
|
||||
insets: initialWindowMetrics?.insets
|
||||
? initialWindowMetrics.insets
|
||||
: { top: 0, right: 0, left: 0, bottom: 0 }
|
||||
|
||||
@@ -111,7 +111,7 @@ android {
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
multiDexEnabled true
|
||||
versionCode 2057
|
||||
versionCode 2059
|
||||
versionName getNpmVersion()
|
||||
testBuildType System.getProperty('testBuildType', 'debug')
|
||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
- Added support for custom themes
|
||||
- Syntax highlighting and rendered Math in exports
|
||||
- Improved copy/pasting to and from Notesnook
|
||||
- Support copying link & link text in directly from the Link toolbar
|
||||
- Many other bug fixes and performance improvements
|
||||
|
||||
Thank you for using Notesnook!
|
||||
|
||||
- Much improved and faster sync
|
||||
- Note pinned in notifications will update automatically when content changes
|
||||
- Quick notes from notifications now respect paragraph spacing settings.
|
||||
- Many bug fixes and small improvements
|
||||
@@ -33,6 +33,8 @@
|
||||
<dict>
|
||||
<key>NSExtensionActivationRule</key>
|
||||
<dict>
|
||||
<key>NSExtensionActivationDictionaryVersion</key>
|
||||
<integer>2</integer>
|
||||
<key>NSExtensionActivationSupportsFileWithMaxCount</key>
|
||||
<integer>5</integer>
|
||||
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
|
||||
|
||||
@@ -997,7 +997,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 2050;
|
||||
CURRENT_PROJECT_VERSION = 2053;
|
||||
DEVELOPMENT_TEAM = 53CWBG3QUC;
|
||||
ENABLE_BITCODE = NO;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
||||
@@ -1071,7 +1071,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.6.1;
|
||||
MARKETING_VERSION = 2.6.3;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
@@ -1102,7 +1102,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 2050;
|
||||
CURRENT_PROJECT_VERSION = 2053;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 53CWBG3QUC;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
||||
@@ -1176,7 +1176,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.6.1;
|
||||
MARKETING_VERSION = 2.6.3;
|
||||
ONLY_ACTIVE_ARCH = NO;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
@@ -1335,7 +1335,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 2050;
|
||||
CURRENT_PROJECT_VERSION = 2053;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = 53CWBG3QUC;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
||||
@@ -1347,7 +1347,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.6.1;
|
||||
MARKETING_VERSION = 2.6.3;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.streetwriters.notesnook.notewidget;
|
||||
@@ -1378,7 +1378,7 @@
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 2050;
|
||||
CURRENT_PROJECT_VERSION = 2053;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 53CWBG3QUC;
|
||||
@@ -1391,7 +1391,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.6.1;
|
||||
MARKETING_VERSION = 2.6.3;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.streetwriters.notesnook.notewidget;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
@@ -1421,7 +1421,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "Make Note/Make Note.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 2050;
|
||||
CURRENT_PROJECT_VERSION = 2053;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = 53CWBG3QUC;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
||||
@@ -1495,7 +1495,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.6.1;
|
||||
MARKETING_VERSION = 2.6.3;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.streetwriters.notesnook.share;
|
||||
@@ -1526,7 +1526,7 @@
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 2050;
|
||||
CURRENT_PROJECT_VERSION = 2053;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 53CWBG3QUC;
|
||||
@@ -1601,7 +1601,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.6.1;
|
||||
MARKETING_VERSION = 2.6.3;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.streetwriters.notesnook.share;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
<EnvironmentVariables>
|
||||
<EnvironmentVariable
|
||||
key = "NSZombieEnabled"
|
||||
value = "YES"
|
||||
value = "NO"
|
||||
isEnabled = "YES">
|
||||
</EnvironmentVariable>
|
||||
<EnvironmentVariable
|
||||
@@ -77,13 +77,6 @@
|
||||
isEnabled = "YES">
|
||||
</EnvironmentVariable>
|
||||
</EnvironmentVariables>
|
||||
<AdditionalOptions>
|
||||
<AdditionalOption
|
||||
key = "NSZombieEnabled"
|
||||
value = "YES"
|
||||
isEnabled = "YES">
|
||||
</AdditionalOption>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
|
||||
@@ -327,7 +327,7 @@ PODS:
|
||||
- React-Core
|
||||
- react-native-keep-awake (1.2.0):
|
||||
- React-Core
|
||||
- react-native-mmkv-storage (0.10.0-alpha.6):
|
||||
- react-native-mmkv-storage (0.10.0-alpha.7):
|
||||
- MMKV (~> 1.3.1)
|
||||
- React
|
||||
- React-Core
|
||||
@@ -347,7 +347,7 @@ PODS:
|
||||
- ReactCommon/turbomodule/core
|
||||
- react-native-share-extension (2.5.6):
|
||||
- React
|
||||
- react-native-sodium (1.5.1):
|
||||
- react-native-sodium (1.5.2):
|
||||
- React
|
||||
- react-native-webview (11.26.1):
|
||||
- React-Core
|
||||
@@ -875,14 +875,14 @@ SPEC CHECKSUMS:
|
||||
react-native-image-resizer: 00ceb0e05586c7aadf061eea676957a6c2ec60fa
|
||||
react-native-in-app-review: db8bb167a5f238e7ceca5c242d6b36ce8c4404a4
|
||||
react-native-keep-awake: caee3ff89eaa21dfe29010f0d143566874a04441
|
||||
react-native-mmkv-storage: a38beae34b1f7906a2f5e715f54216f9ddab14c0
|
||||
react-native-mmkv-storage: ec32fd68168716755e1b30f09b476c236c6c68a8
|
||||
react-native-netinfo: ccbe1085dffd16592791d550189772e13bf479e2
|
||||
react-native-notification-sounds: da78c828fe1bcbb92d8b505d5261890ed315ff39
|
||||
react-native-orientation: f1caf84d65f1a4fd4511a18f2b924e634ad7a628
|
||||
react-native-pdf: 33c622cbdf776a649929e8b9d1ce2d313347c4fa
|
||||
react-native-safe-area-context: 36cc67648134e89465663b8172336a19eeda493d
|
||||
react-native-share-extension: df66a2ee48a62277d79898375e2142bde0782063
|
||||
react-native-sodium: 08d459dfcb5d246363a30712d816acea56ab8f1c
|
||||
react-native-sodium: 7d2bbb9ca840dc58d63f661b2ff733a38170fec5
|
||||
react-native-webview: 9f111dfbcfc826084d6c507f569e5e03342ee1c1
|
||||
React-NativeModulesApple: 1d81d927ef1a67a3545a01e14c2e98500bf9b199
|
||||
React-perflogger: 684a11499a0589cc42135d6d5cc04d0e4e0e261a
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
"react-native-image-picker": "4.1.2",
|
||||
"react-native-in-app-review": "4.3.3",
|
||||
"react-native-keychain": "4.0.5",
|
||||
"react-native-mmkv-storage": "^0.10.0-alpha.7",
|
||||
"react-native-mmkv-storage": "^0.10.0-alpha.9",
|
||||
"react-native-modal-datetime-picker": "14.0.0",
|
||||
"react-native-navigation-bar-color": "2.0.2",
|
||||
"react-native-notification-sounds": "0.5.5",
|
||||
|
||||
128
apps/mobile/package-lock.json
generated
128
apps/mobile/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@notesnook/mobile",
|
||||
"version": "2.6.1",
|
||||
"version": "2.6.2",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@notesnook/mobile",
|
||||
"version": "2.6.1",
|
||||
"version": "2.6.2",
|
||||
"hasInstallScript": true,
|
||||
"license": "GPL-3.0-or-later",
|
||||
"workspaces": [
|
||||
@@ -86,8 +86,8 @@
|
||||
"cross-env": "^7.0.3",
|
||||
"dotenv": "^16.0.1",
|
||||
"eventsource": "^2.0.2",
|
||||
"happy-dom": "^10.9.0",
|
||||
"isomorphic-fetch": "^3.0.0",
|
||||
"jsdom": "^22.1.0",
|
||||
"mockdate": "^3.0.5",
|
||||
"otplib": "^12.0.1",
|
||||
"refractor": "^4.8.1",
|
||||
@@ -101,40 +101,43 @@
|
||||
"hasInstallScript": true,
|
||||
"license": "GPL-3.0-or-later",
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.10.0",
|
||||
"@emotion/react": "11.11.1",
|
||||
"@notesnook/core": "file:../core",
|
||||
"@notesnook/theme": "file:../theme",
|
||||
"@notesnook/ui": "file:../ui",
|
||||
"@social-embed/lib": "^0.0.2-next.1",
|
||||
"@theme-ui/components": ">=0.14.0",
|
||||
"@theme-ui/core": ">=0.14.0",
|
||||
"@tiptap/core": "2.0.3",
|
||||
"@tiptap/extension-character-count": "2.0.3",
|
||||
"@tiptap/extension-color": "2.0.3",
|
||||
"@tiptap/extension-font-family": "2.0.3",
|
||||
"@tiptap/extension-history": "2.0.3",
|
||||
"@tiptap/extension-horizontal-rule": "2.0.3",
|
||||
"@tiptap/extension-link": "2.0.3",
|
||||
"@tiptap/extension-placeholder": "2.0.3",
|
||||
"@tiptap/extension-subscript": "2.0.3",
|
||||
"@tiptap/extension-superscript": "2.0.3",
|
||||
"@tiptap/extension-table": "2.0.3",
|
||||
"@tiptap/extension-table-cell": "2.0.3",
|
||||
"@tiptap/extension-table-header": "2.0.3",
|
||||
"@tiptap/extension-table-row": "2.0.3",
|
||||
"@tiptap/extension-task-item": "2.0.3",
|
||||
"@tiptap/extension-task-list": "2.0.3",
|
||||
"@tiptap/extension-text-align": "2.0.3",
|
||||
"@tiptap/extension-text-style": "2.0.3",
|
||||
"@tiptap/extension-underline": "2.0.3",
|
||||
"@tiptap/pm": "2.0.3",
|
||||
"@tiptap/starter-kit": "2.0.3",
|
||||
"@tiptap/core": "2.1.7",
|
||||
"@tiptap/extension-character-count": "2.1.7",
|
||||
"@tiptap/extension-color": "2.1.7",
|
||||
"@tiptap/extension-font-family": "2.1.7",
|
||||
"@tiptap/extension-history": "2.1.7",
|
||||
"@tiptap/extension-horizontal-rule": "2.1.7",
|
||||
"@tiptap/extension-link": "2.1.7",
|
||||
"@tiptap/extension-list-keymap": "2.1.7",
|
||||
"@tiptap/extension-placeholder": "2.1.7",
|
||||
"@tiptap/extension-subscript": "2.1.7",
|
||||
"@tiptap/extension-superscript": "2.1.7",
|
||||
"@tiptap/extension-table": "2.1.7",
|
||||
"@tiptap/extension-table-cell": "2.1.7",
|
||||
"@tiptap/extension-table-header": "2.1.7",
|
||||
"@tiptap/extension-table-row": "2.1.7",
|
||||
"@tiptap/extension-task-item": "2.1.7",
|
||||
"@tiptap/extension-task-list": "2.1.7",
|
||||
"@tiptap/extension-text-align": "2.1.7",
|
||||
"@tiptap/extension-text-style": "2.1.7",
|
||||
"@tiptap/extension-underline": "2.1.7",
|
||||
"@tiptap/pm": "2.1.7",
|
||||
"@tiptap/starter-kit": "2.1.7",
|
||||
"clipboard-polyfill": "4.0.0",
|
||||
"detect-indent": "^7.0.0",
|
||||
"entities": "^4.5.0",
|
||||
"katex": "0.16.4",
|
||||
"nanoid": "^4.0.1",
|
||||
"prism-themes": "^1.9.0",
|
||||
"prosemirror-codemark": "^0.4.1",
|
||||
"prosemirror-codemark": "^0.4.2",
|
||||
"prosemirror-view": "^1.31.7",
|
||||
"re-resizable": "^6.9.9",
|
||||
"react-colorful": "^5.5.1",
|
||||
"react-modal": "3.13.1",
|
||||
@@ -191,14 +194,17 @@
|
||||
"zustand": "^3.6.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.37.1",
|
||||
"@testing-library/jest-dom": "^5.16.0",
|
||||
"@testing-library/react": "^11.2.7",
|
||||
"@testing-library/user-event": "^12.8.3",
|
||||
"@types/ip": "^1.1.0",
|
||||
"@types/jest": "^27.0.3",
|
||||
"@types/node": "^16.11.11",
|
||||
"@types/react": "^17.0.2",
|
||||
"@types/react-dom": "^17.0.2",
|
||||
"env-cmd": "^10.1.0",
|
||||
"ip": "^1.1.8",
|
||||
"react-error-overlay": "6.0.9",
|
||||
"react-scripts": "^5.0.1",
|
||||
"web-vitals": "^1.1.2"
|
||||
@@ -309,7 +315,7 @@
|
||||
"react-native-image-picker": "4.1.2",
|
||||
"react-native-in-app-review": "4.3.3",
|
||||
"react-native-keychain": "4.0.5",
|
||||
"react-native-mmkv-storage": "^0.10.0-alpha.7",
|
||||
"react-native-mmkv-storage": "^0.10.0-alpha.9",
|
||||
"react-native-modal-datetime-picker": "14.0.0",
|
||||
"react-native-navigation-bar-color": "2.0.2",
|
||||
"react-native-notification-sounds": "0.5.5",
|
||||
@@ -18254,9 +18260,9 @@
|
||||
"integrity": "sha512-TbiO8AO055EPjaxIuKxrCEOB4r81uQCVDFbtcs+e4pEOHxf6z3JgDC0UU0poJElKfCh37b+TFRxQhg6DbsYJBA=="
|
||||
},
|
||||
"node_modules/react-native-mmkv-storage": {
|
||||
"version": "0.10.0-alpha.7",
|
||||
"resolved": "https://registry.npmjs.org/react-native-mmkv-storage/-/react-native-mmkv-storage-0.10.0-alpha.7.tgz",
|
||||
"integrity": "sha512-MCMLMh0NYB4U9My/AZxdcfd/Skg7Pqfe+BHI5aMgV7+HUfAtEA08OX7FGPK6WCVFkNm0JSJt6VSthla/xNWZDg==",
|
||||
"version": "0.10.0-alpha.9",
|
||||
"resolved": "https://registry.npmjs.org/react-native-mmkv-storage/-/react-native-mmkv-storage-0.10.0-alpha.9.tgz",
|
||||
"integrity": "sha512-nv1A0t5dxhcAtMnhqqBodNp94U4QziW1RO352GB3BPpic03abPHj+0HjBJH72VeKKMfYIc0PR5pmo6BbsaPExw==",
|
||||
"bin": {
|
||||
"mmkv-link": "autolink/postlink/run.js"
|
||||
},
|
||||
@@ -26433,10 +26439,10 @@
|
||||
"dotenv": "^16.0.1",
|
||||
"entities": "^4.3.1",
|
||||
"eventsource": "^2.0.2",
|
||||
"happy-dom": "^10.9.0",
|
||||
"html-to-text": "^9.0.5",
|
||||
"htmlparser2": "^8.0.1",
|
||||
"isomorphic-fetch": "^3.0.0",
|
||||
"jsdom": "^22.1.0",
|
||||
"katex": "0.16.2",
|
||||
"linkedom": "^0.14.17",
|
||||
"liqe": "^1.13.0",
|
||||
@@ -26454,7 +26460,7 @@
|
||||
"@notesnook/editor": {
|
||||
"version": "file:../../packages/editor",
|
||||
"requires": {
|
||||
"@emotion/react": "^11.10.0",
|
||||
"@emotion/react": "11.11.1",
|
||||
"@mdi/js": "^7.2.96",
|
||||
"@mdi/react": "^1.6.1",
|
||||
"@notesnook/core": "file:../core",
|
||||
@@ -26463,27 +26469,28 @@
|
||||
"@social-embed/lib": "^0.0.2-next.1",
|
||||
"@theme-ui/components": ">=0.14.0",
|
||||
"@theme-ui/core": ">=0.14.0",
|
||||
"@tiptap/core": "2.0.3",
|
||||
"@tiptap/extension-character-count": "2.0.3",
|
||||
"@tiptap/extension-color": "2.0.3",
|
||||
"@tiptap/extension-font-family": "2.0.3",
|
||||
"@tiptap/extension-history": "2.0.3",
|
||||
"@tiptap/extension-horizontal-rule": "2.0.3",
|
||||
"@tiptap/extension-link": "2.0.3",
|
||||
"@tiptap/extension-placeholder": "2.0.3",
|
||||
"@tiptap/extension-subscript": "2.0.3",
|
||||
"@tiptap/extension-superscript": "2.0.3",
|
||||
"@tiptap/extension-table": "2.0.3",
|
||||
"@tiptap/extension-table-cell": "2.0.3",
|
||||
"@tiptap/extension-table-header": "2.0.3",
|
||||
"@tiptap/extension-table-row": "2.0.3",
|
||||
"@tiptap/extension-task-item": "2.0.3",
|
||||
"@tiptap/extension-task-list": "2.0.3",
|
||||
"@tiptap/extension-text-align": "2.0.3",
|
||||
"@tiptap/extension-text-style": "2.0.3",
|
||||
"@tiptap/extension-underline": "2.0.3",
|
||||
"@tiptap/pm": "2.0.3",
|
||||
"@tiptap/starter-kit": "2.0.3",
|
||||
"@tiptap/core": "2.1.7",
|
||||
"@tiptap/extension-character-count": "2.1.7",
|
||||
"@tiptap/extension-color": "2.1.7",
|
||||
"@tiptap/extension-font-family": "2.1.7",
|
||||
"@tiptap/extension-history": "2.1.7",
|
||||
"@tiptap/extension-horizontal-rule": "2.1.7",
|
||||
"@tiptap/extension-link": "2.1.7",
|
||||
"@tiptap/extension-list-keymap": "2.1.7",
|
||||
"@tiptap/extension-placeholder": "2.1.7",
|
||||
"@tiptap/extension-subscript": "2.1.7",
|
||||
"@tiptap/extension-superscript": "2.1.7",
|
||||
"@tiptap/extension-table": "2.1.7",
|
||||
"@tiptap/extension-table-cell": "2.1.7",
|
||||
"@tiptap/extension-table-header": "2.1.7",
|
||||
"@tiptap/extension-table-row": "2.1.7",
|
||||
"@tiptap/extension-task-item": "2.1.7",
|
||||
"@tiptap/extension-task-list": "2.1.7",
|
||||
"@tiptap/extension-text-align": "2.1.7",
|
||||
"@tiptap/extension-text-style": "2.1.7",
|
||||
"@tiptap/extension-underline": "2.1.7",
|
||||
"@tiptap/pm": "2.1.7",
|
||||
"@tiptap/starter-kit": "2.1.7",
|
||||
"@types/katex": "^0.14.0",
|
||||
"@types/prismjs": "^1.26.0",
|
||||
"@types/react": "17.0.2",
|
||||
@@ -26493,14 +26500,16 @@
|
||||
"@types/tinycolor2": "^1.4.3",
|
||||
"clipboard-polyfill": "4.0.0",
|
||||
"detect-indent": "^7.0.0",
|
||||
"entities": "^4.5.0",
|
||||
"framer-motion": "^6.5.1",
|
||||
"happy-dom": "^8.9.0",
|
||||
"isomorphic-fetch": "^3.0.0",
|
||||
"katex": "0.16.4",
|
||||
"nanoid": "^4.0.1",
|
||||
"prism-themes": "^1.9.0",
|
||||
"prosemirror-codemark": "^0.4.1",
|
||||
"prosemirror-codemark": "^0.4.2",
|
||||
"prosemirror-test-builder": "^1.1.0",
|
||||
"prosemirror-view": "^1.31.7",
|
||||
"re-resizable": "^6.9.9",
|
||||
"react": "17.0.2",
|
||||
"react-colorful": "^5.5.1",
|
||||
@@ -26524,15 +26533,18 @@
|
||||
"@mdi/react": "^1.6.0",
|
||||
"@notesnook/editor": "file:../editor",
|
||||
"@notesnook/theme": "file:../theme",
|
||||
"@playwright/test": "^1.37.1",
|
||||
"@testing-library/jest-dom": "^5.16.0",
|
||||
"@testing-library/react": "^11.2.7",
|
||||
"@testing-library/user-event": "^12.8.3",
|
||||
"@types/ip": "^1.1.0",
|
||||
"@types/jest": "^27.0.3",
|
||||
"@types/node": "^16.11.11",
|
||||
"@types/react": "^17.0.2",
|
||||
"@types/react-dom": "^17.0.2",
|
||||
"env-cmd": "^10.1.0",
|
||||
"framer-motion": "^6.5.1",
|
||||
"ip": "^1.1.8",
|
||||
"mdi-react": "9.1.0",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
@@ -26657,7 +26669,7 @@
|
||||
"react-native-image-picker": "4.1.2",
|
||||
"react-native-in-app-review": "4.3.3",
|
||||
"react-native-keychain": "4.0.5",
|
||||
"react-native-mmkv-storage": "^0.10.0-alpha.7",
|
||||
"react-native-mmkv-storage": "^0.10.0-alpha.9",
|
||||
"react-native-modal-datetime-picker": "14.0.0",
|
||||
"react-native-navigation-bar-color": "2.0.2",
|
||||
"react-native-notification-sounds": "0.5.5",
|
||||
@@ -35790,9 +35802,9 @@
|
||||
"integrity": "sha512-TbiO8AO055EPjaxIuKxrCEOB4r81uQCVDFbtcs+e4pEOHxf6z3JgDC0UU0poJElKfCh37b+TFRxQhg6DbsYJBA=="
|
||||
},
|
||||
"react-native-mmkv-storage": {
|
||||
"version": "0.10.0-alpha.7",
|
||||
"resolved": "https://registry.npmjs.org/react-native-mmkv-storage/-/react-native-mmkv-storage-0.10.0-alpha.7.tgz",
|
||||
"integrity": "sha512-MCMLMh0NYB4U9My/AZxdcfd/Skg7Pqfe+BHI5aMgV7+HUfAtEA08OX7FGPK6WCVFkNm0JSJt6VSthla/xNWZDg==",
|
||||
"version": "0.10.0-alpha.9",
|
||||
"resolved": "https://registry.npmjs.org/react-native-mmkv-storage/-/react-native-mmkv-storage-0.10.0-alpha.9.tgz",
|
||||
"integrity": "sha512-nv1A0t5dxhcAtMnhqqBodNp94U4QziW1RO352GB3BPpic03abPHj+0HjBJH72VeKKMfYIc0PR5pmo6BbsaPExw==",
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-modal-datetime-picker": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@notesnook/mobile",
|
||||
"version": "2.6.1",
|
||||
"version": "2.6.3",
|
||||
"private": true,
|
||||
"license": "GPL-3.0-or-later",
|
||||
"workspaces": [
|
||||
@@ -43,4 +43,4 @@
|
||||
"react": "18.2.0",
|
||||
"react-native": "0.72.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -602,8 +602,9 @@ const ShareView = ({ quicknote = false }) => {
|
||||
marginBottom: 0
|
||||
}}
|
||||
loading={loading}
|
||||
iconColor={colors.static.white}
|
||||
iconColor={colors.primary.accentForeground}
|
||||
onPress={onPress}
|
||||
textColor={colors.primary.accentForeground}
|
||||
textStyle={{
|
||||
fontSize: 16,
|
||||
marginLeft: 0
|
||||
|
||||
12
apps/theme-builder/package-lock.json
generated
12
apps/theme-builder/package-lock.json
generated
@@ -210,17 +210,6 @@
|
||||
},
|
||||
"devDependencies": {}
|
||||
},
|
||||
"../../packages/crypto-worker": {
|
||||
"name": "@notesnook/crypto-worker",
|
||||
"version": "1.0.0",
|
||||
"extraneous": true,
|
||||
"license": "GPL-3.0-or-later",
|
||||
"dependencies": {
|
||||
"@notesnook/crypto": "file:../crypto",
|
||||
"comlink": "^4.3.1"
|
||||
},
|
||||
"devDependencies": {}
|
||||
},
|
||||
"../../packages/editor": {
|
||||
"name": "@notesnook/editor",
|
||||
"version": "1.6.1",
|
||||
@@ -1402,7 +1391,6 @@
|
||||
"@notesnook/common": "file:../../packages/common",
|
||||
"@notesnook/core": "file:../../packages/core",
|
||||
"@notesnook/crypto": "file:../../packages/crypto",
|
||||
"@notesnook/crypto-worker": "file:../../packages/crypto-worker",
|
||||
"@notesnook/desktop": "file:../desktop",
|
||||
"@notesnook/editor": "file:../../packages/editor",
|
||||
"@notesnook/logger": "file:../../packages/logger",
|
||||
|
||||
@@ -23,7 +23,8 @@ import {
|
||||
ThemeDefinition,
|
||||
THEME_SCOPES,
|
||||
Variants,
|
||||
validateTheme
|
||||
validateTheme,
|
||||
ALPHA_COLORS
|
||||
} from "@notesnook/theme";
|
||||
import { Button, Flex, Input, Text } from "@theme-ui/components";
|
||||
import FileSaver from "file-saver";
|
||||
@@ -44,14 +45,15 @@ const JSON_SCHEMA_URL =
|
||||
"https://raw.githubusercontent.com/streetwriters/notesnook-themes/main/schemas/v1.schema.json";
|
||||
const ThemeInfoTemplate: Omit<
|
||||
ThemeDefinition,
|
||||
"authors" | "compatibilityVersion" | "colorScheme" | "codeBlockCSS" | "scopes"
|
||||
"authors" | "compatibilityVersion" | "colorScheme" | "scopes"
|
||||
> = {
|
||||
name: "",
|
||||
id: "",
|
||||
version: 0,
|
||||
license: "",
|
||||
homepage: "",
|
||||
description: ""
|
||||
description: "",
|
||||
codeBlockCSS: "https://github.com/PrismJS/prism-themes/tree/master/themes"
|
||||
};
|
||||
|
||||
export default function ThemeBuilder() {
|
||||
@@ -302,7 +304,7 @@ export default function ThemeBuilder() {
|
||||
paddingX: "10px"
|
||||
}}
|
||||
>
|
||||
{Object.keys(ThemeInfoTemplate).map((key) => {
|
||||
{Object.keys(ThemeInfoTemplate).map((key: string) => {
|
||||
return (
|
||||
<Field
|
||||
key={`${getThemeKey(currentTheme)}-${key}`}
|
||||
@@ -355,7 +357,7 @@ export default function ThemeBuilder() {
|
||||
key="compatibilityVersion"
|
||||
/>
|
||||
|
||||
{authors.map((author, index) => (
|
||||
{authors.map((author, index: number) => (
|
||||
<Flex
|
||||
key={`${getThemeKey(currentTheme)}-${author.name}`}
|
||||
sx={{
|
||||
@@ -524,9 +526,7 @@ export default function ThemeBuilder() {
|
||||
}
|
||||
}}
|
||||
title={
|
||||
/hover|shade|backdrop|textSelection/g.test(
|
||||
colorName
|
||||
)
|
||||
ALPHA_COLORS.includes(colorName)
|
||||
? `Hex RGB & ARGB values both are supported. (e.g. #dbdbdb99)`
|
||||
: `Only Hex RGB values are supported. No Alpha. (e.g. #f33ff3)`
|
||||
}
|
||||
@@ -555,9 +555,7 @@ export default function ThemeBuilder() {
|
||||
);
|
||||
}}
|
||||
title={
|
||||
/hover|shade|backdrop|textSelection/g.test(
|
||||
colorName
|
||||
)
|
||||
ALPHA_COLORS.includes(colorName)
|
||||
? `Only Hex RGB values are supported. No Alpha. (e.g. #f33ff3)`
|
||||
: `Hex RGB & ARGB values both are supported. (e.g. #dbdbdb99)`
|
||||
}
|
||||
@@ -698,7 +696,10 @@ function getThemeFromFormData(
|
||||
function toTitleCase(value: string) {
|
||||
return (
|
||||
value.slice(0, 1).toUpperCase() +
|
||||
value.slice(1).replace(/([A-Z]+)*([A-Z][a-z])/g, "$1 $2")
|
||||
value
|
||||
.slice(1)
|
||||
.replace(/([A-Z]+)/g, " $1")
|
||||
.replace(/([A-Z][a-z])/g, " $1")
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
15
apps/vericrypt/package-lock.json
generated
15
apps/vericrypt/package-lock.json
generated
@@ -11,7 +11,6 @@
|
||||
"@emotion/react": "^11.10.0",
|
||||
"@microsoft/signalr-protocol-msgpack": "^7.0.9",
|
||||
"@notesnook/crypto": "file:../../packages/crypto",
|
||||
"@notesnook/crypto-worker": "file:../../packages/crypto-worker",
|
||||
"@notesnook/theme": "1.2.0",
|
||||
"@theme-ui/components": "^0.14.7",
|
||||
"@theme-ui/core": "^0.14.7",
|
||||
@@ -42,16 +41,6 @@
|
||||
},
|
||||
"devDependencies": {}
|
||||
},
|
||||
"../../packages/crypto-worker": {
|
||||
"name": "@notesnook/crypto-worker",
|
||||
"version": "1.0.0",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"dependencies": {
|
||||
"@notesnook/crypto": "file:../crypto",
|
||||
"comlink": "^4.3.1"
|
||||
},
|
||||
"devDependencies": {}
|
||||
},
|
||||
"node_modules/@ampproject/remapping": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
|
||||
@@ -915,10 +904,6 @@
|
||||
"resolved": "../../packages/crypto",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/@notesnook/crypto-worker": {
|
||||
"resolved": "../../packages/crypto-worker",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/@notesnook/theme": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@notesnook/theme/-/theme-1.2.0.tgz",
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
"@emotion/react": "^11.10.0",
|
||||
"@microsoft/signalr-protocol-msgpack": "^7.0.9",
|
||||
"@notesnook/crypto": "file:../../packages/crypto",
|
||||
"@notesnook/crypto-worker": "file:../../packages/crypto-worker",
|
||||
"@notesnook/theme": "1.2.0",
|
||||
"@theme-ui/components": "^0.14.7",
|
||||
"@theme-ui/core": "^0.14.7",
|
||||
|
||||
@@ -74,3 +74,30 @@ test("restore an encrypted backup", async ({ page }) => {
|
||||
const notebooks = await app.goToNotebooks();
|
||||
expect(await notebooks.isEmpty()).toBeFalsy();
|
||||
});
|
||||
|
||||
test("turning off encrypted backups should ask for password", async ({
|
||||
page
|
||||
}) => {
|
||||
const app = new AppModel(page);
|
||||
await app.auth.goto();
|
||||
await app.auth.login(USER.CURRENT);
|
||||
const settings = await app.goToSettings();
|
||||
|
||||
await settings.toggleBackupEncryption(USER.CURRENT.password);
|
||||
|
||||
expect(await settings.isBackupEncryptionEnabled(false)).toBe(false);
|
||||
});
|
||||
|
||||
test("turning on encrypted backups should not ask for password", async ({
|
||||
page
|
||||
}) => {
|
||||
const app = new AppModel(page);
|
||||
await app.auth.goto();
|
||||
await app.auth.login(USER.CURRENT);
|
||||
const settings = await app.goToSettings();
|
||||
await settings.toggleBackupEncryption(USER.CURRENT.password);
|
||||
|
||||
await settings.toggleBackupEncryption();
|
||||
|
||||
expect(await settings.isBackupEncryptionEnabled(true)).toBe(true);
|
||||
});
|
||||
|
||||
@@ -84,16 +84,32 @@ export class SettingsViewModel {
|
||||
return !!(await item?.getTitle());
|
||||
}
|
||||
|
||||
async createBackup(password?: string) {
|
||||
async isBackupEncryptionEnabled(state: boolean) {
|
||||
const encyptBackups = this.page
|
||||
.locator(getTestId("setting-encrypt-backups"))
|
||||
.locator(
|
||||
state ? `input[data-checked="true"]` : `input[data-checked="false"]`
|
||||
);
|
||||
await encyptBackups.waitFor({ state: "visible" });
|
||||
return (await encyptBackups.getAttribute("data-checked")) === "true";
|
||||
}
|
||||
|
||||
async toggleBackupEncryption(password?: string) {
|
||||
const item = await this.navigation.findItem("Backup & export");
|
||||
await item?.click();
|
||||
|
||||
if (password) {
|
||||
const encyptBackups = this.page
|
||||
.locator(getTestId("setting-encrypt-backups"))
|
||||
.locator("label");
|
||||
await encyptBackups.click();
|
||||
}
|
||||
const encyptBackups = this.page
|
||||
.locator(getTestId("setting-encrypt-backups"))
|
||||
.locator("label");
|
||||
|
||||
await encyptBackups.click();
|
||||
|
||||
if (password) await fillPasswordDialog(this.page, password);
|
||||
}
|
||||
|
||||
async createBackup(password?: string) {
|
||||
const item = await this.navigation.findItem("Backup & export");
|
||||
await item?.click();
|
||||
|
||||
const backupData = this.page
|
||||
.locator(getTestId("setting-create-backup"))
|
||||
|
||||
1570
apps/web/package-lock.json
generated
1570
apps/web/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@notesnook/web",
|
||||
"description": "Your private note taking space",
|
||||
"version": "2.6.1",
|
||||
"version": "2.6.3",
|
||||
"private": true,
|
||||
"main": "./src/app.js",
|
||||
"homepage": "https://notesnook.com/",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
.allotment-module_splitView__L-yRc.allotment-module_separatorBorder__x-rDS
|
||||
> .allotment-module_splitViewContainer__rQnVa
|
||||
> .allotment-module_splitViewView__MGZ6O:not(:first-child)::before {
|
||||
background-color: var(--border);
|
||||
background-color: transparent;
|
||||
}
|
||||
/* open-sans-regular - vietnamese_latin-ext_latin_hebrew_greek-ext_greek_cyrillic-ext_cyrillic */
|
||||
@font-face {
|
||||
@@ -138,25 +138,25 @@ textarea,
|
||||
}
|
||||
|
||||
.rpv-core__text-layer-text::selection {
|
||||
background-color: var(--textSelection) !important;
|
||||
background-color: var(--background-selected) !important;
|
||||
color: transparent;
|
||||
}
|
||||
|
||||
.rpv-core__text-layer-text::-moz-selection {
|
||||
/* Code for Firefox */
|
||||
background-color: var(--textSelection) !important;
|
||||
background-color: var(--background-selected) !important;
|
||||
color: transparent;
|
||||
}
|
||||
|
||||
::-moz-selection {
|
||||
/* Code for Firefox */
|
||||
background-color: var(--textSelection);
|
||||
color: var(--paragraph);
|
||||
background-color: var(--background-selected);
|
||||
color: var(--paragraph-selected);
|
||||
}
|
||||
|
||||
::selection {
|
||||
background-color: var(--textSelection);
|
||||
color: var(--paragraph);
|
||||
background-color: var(--background-selected);
|
||||
color: var(--paragraph-selected);
|
||||
}
|
||||
|
||||
*::-moz-focus-inner {
|
||||
|
||||
@@ -177,7 +177,8 @@ function DesktopAppContents({
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
flex: 1,
|
||||
bg: "background"
|
||||
bg: "background",
|
||||
borderRight: "1px solid var(--separator)"
|
||||
}}
|
||||
>
|
||||
{isAppLoaded && <CachedRouter />}
|
||||
|
||||
@@ -33,7 +33,8 @@ export async function exportToPDF(
|
||||
|
||||
return new Promise<boolean>((resolve) => {
|
||||
const iframe = document.createElement("iframe");
|
||||
iframe.srcdoc = content.replaceAll(/<p(.+?)><\/p>/gm, "<p$1><br/></p>");
|
||||
|
||||
iframe.srcdoc = content;
|
||||
iframe.style.position = "fixed";
|
||||
iframe.style.right = "0";
|
||||
iframe.style.bottom = "0";
|
||||
|
||||
@@ -159,10 +159,9 @@ function ListContainer(props: ListContainerProps) {
|
||||
onKeyDown={(e) => onKeyDown(e.nativeEvent)}
|
||||
components={{
|
||||
Scroller: CustomScrollbarsVirtualList,
|
||||
Item: (props) => (
|
||||
Item: ({ item: _item, ...props }) => (
|
||||
<div
|
||||
{...props}
|
||||
style={{ paddingBottom: 1 }}
|
||||
onFocus={() => onFocus(props["data-item-index"])}
|
||||
onMouseDown={(e) =>
|
||||
onMouseDown(e.nativeEvent, props["data-item-index"])
|
||||
|
||||
@@ -31,8 +31,8 @@ import { alpha } from "@theme-ui/color";
|
||||
|
||||
type ListItemProps = {
|
||||
colors?: {
|
||||
heading: SchemeColors;
|
||||
accent: SchemeColors;
|
||||
paragraph: SchemeColors;
|
||||
background: SchemeColors;
|
||||
};
|
||||
isFocused?: boolean;
|
||||
@@ -53,9 +53,9 @@ type ListItemProps = {
|
||||
|
||||
function ListItem(props: ListItemProps) {
|
||||
const {
|
||||
colors: { paragraph, background, accent } = {
|
||||
colors: { heading, background, accent } = {
|
||||
heading: "heading",
|
||||
accent: "accent",
|
||||
paragraph: "paragraph",
|
||||
background: "background"
|
||||
},
|
||||
isFocused,
|
||||
@@ -76,6 +76,7 @@ function ListItem(props: ListItemProps) {
|
||||
? store.selectedItems.length > 1 && isInSelection
|
||||
: isInSelection;
|
||||
});
|
||||
const selected = isSelected || isMenuTarget || isFocused;
|
||||
|
||||
return (
|
||||
<Flex
|
||||
@@ -112,7 +113,7 @@ function ListItem(props: ListItemProps) {
|
||||
pl={1}
|
||||
pr={2}
|
||||
py={1}
|
||||
mb={isCompact ? 0 : 1}
|
||||
mb={isCompact ? 0 : 0}
|
||||
tabIndex={-1}
|
||||
dir="auto"
|
||||
sx={{
|
||||
@@ -130,24 +131,20 @@ function ListItem(props: ListItemProps) {
|
||||
|
||||
borderLeft: "5px solid",
|
||||
borderLeftColor: isFocused ? accent : "transparent",
|
||||
ml: "2px",
|
||||
mr: "1px",
|
||||
|
||||
backgroundColor:
|
||||
isSelected || isMenuTarget || isFocused
|
||||
? "background-selected"
|
||||
: background,
|
||||
backgroundColor: selected ? "background-selected" : background,
|
||||
|
||||
":hover": {
|
||||
backgroundColor: isSelected ? "hover-selected" : "hover"
|
||||
backgroundColor: selected ? "hover-selected" : "hover"
|
||||
},
|
||||
":focus": {
|
||||
backgroundColor: isSelected ? "hover-selected" : "hover"
|
||||
backgroundColor: selected ? "hover-selected" : "hover"
|
||||
},
|
||||
":focus-visible": {
|
||||
outline: `1px solid`,
|
||||
outlineColor: accent === "accent" ? "accent" : alpha("accent", 0.7),
|
||||
backgroundColor: isSelected ? "textSelection" : background
|
||||
backgroundColor:
|
||||
isSelected || isFocused ? "background-selected" : background
|
||||
}
|
||||
}}
|
||||
onKeyPress={(e) => {
|
||||
@@ -172,7 +169,8 @@ function ListItem(props: ListItemProps) {
|
||||
overflow: "hidden",
|
||||
textOverflow: "ellipsis",
|
||||
fontWeight: isCompact || isSimple ? "body" : "bold",
|
||||
color: paragraph,
|
||||
color:
|
||||
selected && heading === "heading" ? `${heading}-selected` : heading,
|
||||
display: "block"
|
||||
}}
|
||||
>
|
||||
@@ -185,6 +183,7 @@ function ListItem(props: ListItemProps) {
|
||||
variant="body"
|
||||
data-test-id={`description`}
|
||||
sx={{
|
||||
color: selected ? "paragraph-selected" : "paragraph",
|
||||
lineHeight: `1.2rem`,
|
||||
overflow: "hidden",
|
||||
textOverflow: "ellipsis",
|
||||
|
||||
@@ -141,7 +141,20 @@ function NavigationMenu(props: NavigationMenuProps) {
|
||||
}, [location, previousLocation, state]);
|
||||
|
||||
return (
|
||||
<ScopedThemeProvider scope="navigationMenu" injectCssVars={false}>
|
||||
<ScopedThemeProvider
|
||||
scope="navigationMenu"
|
||||
sx={{
|
||||
display: "flex",
|
||||
zIndex: 1,
|
||||
position: "relative",
|
||||
flex: 1,
|
||||
flexDirection: "column",
|
||||
height: "100%",
|
||||
overflow: "hidden",
|
||||
bg: "background",
|
||||
borderRight: "1px solid var(--separator)"
|
||||
}}
|
||||
>
|
||||
<AnimatedFlex
|
||||
id="navigation-menu"
|
||||
data-test-id="navigation-menu"
|
||||
@@ -154,14 +167,10 @@ function NavigationMenu(props: NavigationMenuProps) {
|
||||
}}
|
||||
transition={{ duration: 0.2, ease: "easeInOut" }}
|
||||
sx={{
|
||||
zIndex: 1,
|
||||
position: "relative",
|
||||
flex: 1,
|
||||
height: "100%",
|
||||
overflow: "hidden",
|
||||
flexDirection: "column",
|
||||
justifyContent: "space-between",
|
||||
bg: "background"
|
||||
justifyContent: "space-between"
|
||||
}}
|
||||
px={0}
|
||||
>
|
||||
@@ -218,7 +227,7 @@ function NavigationMenu(props: NavigationMenuProps) {
|
||||
/>
|
||||
))}
|
||||
<Box
|
||||
bg="border"
|
||||
bg="separator"
|
||||
my={1}
|
||||
sx={{ width: "85%", height: "0.8px", alignSelf: "center" }}
|
||||
/>
|
||||
@@ -301,7 +310,7 @@ function NavigationMenu(props: NavigationMenuProps) {
|
||||
<Button
|
||||
variant={"icon"}
|
||||
title="Toggle dark/light mode"
|
||||
sx={{ borderLeft: "1px solid var(--border)" }}
|
||||
sx={{ borderLeft: "1px solid var(--separator)" }}
|
||||
onClick={() => {
|
||||
setFollowSystemTheme(false);
|
||||
toggleNightMode();
|
||||
|
||||
@@ -131,7 +131,7 @@ function Note(props: NoteProps) {
|
||||
}}
|
||||
colors={{
|
||||
accent: primary,
|
||||
paragraph: note.color ? primary : "heading",
|
||||
heading: note.color ? primary : "heading",
|
||||
background: "background"
|
||||
}}
|
||||
menuItems={menuItems}
|
||||
@@ -179,7 +179,7 @@ function Note(props: NoteProps) {
|
||||
<Flex
|
||||
sx={{
|
||||
fontSize: "subBody",
|
||||
color: "var(--paragraph-secondary)",
|
||||
color: "paragraph-secondary",
|
||||
alignItems: "center",
|
||||
gap: 1
|
||||
}}
|
||||
|
||||
@@ -19,13 +19,50 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import { Button, Flex, Text } from "@theme-ui/components";
|
||||
import { Context, useTip } from "../../hooks/use-tip";
|
||||
import { Info } from "../icons";
|
||||
import { Info, Sync } from "../icons";
|
||||
import { useStore as useAppStore } from "../../stores/app-store";
|
||||
import { toTitleCase } from "@notesnook/common";
|
||||
|
||||
type PlaceholderProps = { context: Context; text?: string };
|
||||
function Placeholder(props: PlaceholderProps) {
|
||||
const { context, text } = props;
|
||||
const tip = useTip(context);
|
||||
const syncStatus = useAppStore((store) => store.syncStatus);
|
||||
|
||||
if (syncStatus.key === "syncing" && context === "notes") {
|
||||
return (
|
||||
<Flex
|
||||
variant="columnCenter"
|
||||
sx={{
|
||||
position: "relative",
|
||||
justifyContent: "flex-start",
|
||||
alignItems: "flex-start",
|
||||
alignSelf: "stretch",
|
||||
px: 6
|
||||
}}
|
||||
>
|
||||
<Flex
|
||||
sx={{
|
||||
border: "1px solid var(--accent)",
|
||||
alignItems: "center",
|
||||
borderRadius: 50,
|
||||
p: 1,
|
||||
py: "1.5px"
|
||||
}}
|
||||
>
|
||||
<Sync color="accent" size={12} sx={{ mr: "small" }} />
|
||||
<Text variant="subBody" sx={{ fontSize: 10 }} color="accent">
|
||||
Syncing your {context}
|
||||
</Text>
|
||||
</Flex>
|
||||
|
||||
<Text variant="subBody" sx={{ fontSize: "body", mt: 1 }}>
|
||||
{toTitleCase(syncStatus.type || "syncing")}ing {syncStatus.progress}{" "}
|
||||
items
|
||||
</Text>
|
||||
</Flex>
|
||||
);
|
||||
}
|
||||
if (!tip) return null;
|
||||
|
||||
return (
|
||||
|
||||
@@ -102,7 +102,7 @@ function Header(props: RouteContainerProps) {
|
||||
{!isMobile && buttons?.create && (
|
||||
<Plus
|
||||
data-test-id={`${type}-action-button`}
|
||||
color="white"
|
||||
color="accentForeground"
|
||||
size={18}
|
||||
sx={{
|
||||
bg: "accent",
|
||||
|
||||
@@ -43,6 +43,7 @@ import {
|
||||
import useStatus from "../../hooks/use-status";
|
||||
import { ScopedThemeProvider } from "../theme-provider";
|
||||
import { checkForUpdate, installUpdate } from "../../utils/updater";
|
||||
import { toTitleCase } from "@notesnook/common";
|
||||
|
||||
function StatusBar() {
|
||||
const user = useUserStore((state) => state.user);
|
||||
@@ -56,7 +57,7 @@ function StatusBar() {
|
||||
bg="background"
|
||||
sx={{
|
||||
borderTop: "1px solid",
|
||||
borderTopColor: "border",
|
||||
borderTopColor: "separator",
|
||||
justifyContent: "space-between",
|
||||
display: ["none", "none", "flex"]
|
||||
}}
|
||||
@@ -230,9 +231,7 @@ function SyncStatus() {
|
||||
title={status.tooltip}
|
||||
data-test-id={`sync-status-${status.key}`}
|
||||
>
|
||||
{syncStatus.progress ? (
|
||||
<Text variant={"subBody"}>{syncStatus.progress}</Text>
|
||||
) : (
|
||||
{!syncStatus.progress && (
|
||||
<status.icon
|
||||
size={12}
|
||||
rotate={status.loading}
|
||||
@@ -253,6 +252,12 @@ function SyncStatus() {
|
||||
</>
|
||||
) : null}
|
||||
</Text>
|
||||
{syncStatus.progress && (
|
||||
<Text variant={"subBody"} ml={1}>
|
||||
{" "}
|
||||
({syncStatus.progress})
|
||||
</Text>
|
||||
)}
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
@@ -309,7 +314,7 @@ const syncStatusFilters: SyncStatusFilter[] = [
|
||||
isActive: (syncStatus) => syncStatus === "syncing",
|
||||
icon: Sync,
|
||||
loading: true,
|
||||
text: ({ type }) => <>{type || "sync"}ing</>,
|
||||
text: ({ type }) => <>{toTitleCase(type || "sync")}ing</>,
|
||||
tooltip: "Syncing your notes..."
|
||||
},
|
||||
{
|
||||
|
||||
@@ -127,7 +127,7 @@ export function ThemePreview(props: ThemePreviewProps) {
|
||||
Notes
|
||||
</Text>
|
||||
<Plus
|
||||
color="white"
|
||||
color={theme.previewColors.list.accentForeground}
|
||||
size={8}
|
||||
sx={{
|
||||
bg: theme.previewColors.list.accent,
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { useCallback, useEffect, useRef, useState } from "react";
|
||||
import { Text, Flex, Button } from "@theme-ui/components";
|
||||
import { Text, Flex, Button, Link } from "@theme-ui/components";
|
||||
import { Cross, Check, Loading } from "../../components/icons";
|
||||
import { useStore as useUserStore } from "../../stores/user-store";
|
||||
import { useStore as useThemeStore } from "../../stores/theme-store";
|
||||
@@ -461,7 +461,21 @@ function SelectedPlan(props: SelectedPlanProps) {
|
||||
>
|
||||
{metadata.title}
|
||||
</Text>
|
||||
|
||||
{plan.period === "education" && (
|
||||
<Link
|
||||
href="https://notesnook.com/education"
|
||||
target="_blank"
|
||||
variant="text.body"
|
||||
mt={1}
|
||||
sx={{
|
||||
textDecorationColor: "primary",
|
||||
color: "primary",
|
||||
textAlign: "center"
|
||||
}}
|
||||
>
|
||||
Apply here to get your Education discount code.
|
||||
</Link>
|
||||
)}
|
||||
{pricingInfo ? (
|
||||
<>
|
||||
<Text data-test-id={`checkout-plan-country-${pricingInfo.country}`} />
|
||||
@@ -602,7 +616,9 @@ function CheckoutPricing(props: CheckoutPricingProps) {
|
||||
{currentTotal}
|
||||
</Text>
|
||||
<Text as="div" sx={{ fontSize: "body", color: "paragraph" }}>
|
||||
{isDiscounted
|
||||
{period === "education" && discount.amount > 0
|
||||
? "for one year"
|
||||
: isDiscounted
|
||||
? "forever"
|
||||
: `first ${getFullPeriod(period)} then ${recurringTotal}`}
|
||||
</Text>
|
||||
|
||||
@@ -141,7 +141,11 @@ function RecurringPricing(props: RecurringPricingProps) {
|
||||
}
|
||||
|
||||
export function formatPeriod(period: Period) {
|
||||
return period === "monthly" ? "/mo" : period === "yearly" ? "/yr" : "";
|
||||
return period === "monthly"
|
||||
? "/mo"
|
||||
: period === "yearly" || period === "education"
|
||||
? "/yr"
|
||||
: "";
|
||||
}
|
||||
|
||||
export function getFullPeriod(period: Period) {
|
||||
|
||||
@@ -26,6 +26,15 @@ type PlanMetadata = {
|
||||
subtitle: string;
|
||||
};
|
||||
|
||||
export const EDUCATION_PLAN: Plan = {
|
||||
id: import.meta.env.DEV || IS_TESTING ? "50305" : "658759",
|
||||
period: "education",
|
||||
country: "US",
|
||||
currency: "USD",
|
||||
discount: 0,
|
||||
price: { gross: 9.99, net: 0, tax: 0 }
|
||||
};
|
||||
|
||||
export const DEFAULT_PLANS: Plan[] = [
|
||||
{
|
||||
period: "monthly",
|
||||
@@ -42,12 +51,17 @@ export const DEFAULT_PLANS: Plan[] = [
|
||||
discount: 0,
|
||||
id: import.meta.env.DEV || IS_TESTING ? "50305" : "658759",
|
||||
price: { gross: 49.99, net: 0, tax: 0 }
|
||||
}
|
||||
},
|
||||
EDUCATION_PLAN
|
||||
];
|
||||
|
||||
export const PLAN_METADATA: Record<Period, PlanMetadata> = {
|
||||
monthly: { title: "Monthly", subtitle: `Pay once a month.` },
|
||||
yearly: { title: "Yearly", subtitle: `Pay once a year.` }
|
||||
yearly: { title: "Yearly", subtitle: `Pay once a year.` },
|
||||
education: {
|
||||
title: "Education",
|
||||
subtitle: "Special offer for students & teachers."
|
||||
}
|
||||
};
|
||||
|
||||
let CACHED_PLANS: Plan[];
|
||||
@@ -59,6 +73,7 @@ export async function getPlans(): Promise<Plan[] | null> {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) return null;
|
||||
const plans = (await response.json()) as Plan[];
|
||||
plans.push(EDUCATION_PLAN);
|
||||
CACHED_PLANS = plans;
|
||||
return plans;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
export type Period = "monthly" | "yearly";
|
||||
export type Period = "monthly" | "yearly" | "education";
|
||||
|
||||
export enum PaddleEvents {
|
||||
/** Checkout has been initialized on the page **/
|
||||
|
||||
@@ -91,19 +91,9 @@ const features: Record<FeatureKeys, Feature> = {
|
||||
]
|
||||
: [
|
||||
{
|
||||
title: "Custom themes",
|
||||
title: "Much faster & more reliable sync",
|
||||
subtitle:
|
||||
"You can now customize how each part of Notesnook looks to your hearts desire. To access all available themes just go to Settings > Appearance."
|
||||
},
|
||||
{
|
||||
title: "Improved copy/pasting formatting",
|
||||
subtitle:
|
||||
"The copy/pasting has been significantly improved and should now cause much less frustration due to bad formatting. Give it a try!"
|
||||
},
|
||||
{
|
||||
title: "More reliable attachment uploads",
|
||||
subtitle:
|
||||
"No more sudden and unexpected error popups due to broken attachment uploads. We have fixed lots of bugs in this release to make upload of attachment as smooth as possible."
|
||||
"Syncing should now work more reliably & also much, much faster. Like 10x faster than before."
|
||||
}
|
||||
],
|
||||
cta: {
|
||||
|
||||
@@ -50,7 +50,7 @@ export const BackupExportSettings: SettingsGroup[] = [
|
||||
)
|
||||
useSettingStore.getState().toggleEncryptBackups();
|
||||
const verified =
|
||||
useSettingStore.getState().encryptBackups ||
|
||||
!useSettingStore.getState().encryptBackups ||
|
||||
(await verifyAccount());
|
||||
if (verified) await createBackup();
|
||||
},
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import { httpBatchLink } from "@trpc/client";
|
||||
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
||||
import { useCallback, useRef, useState } from "react";
|
||||
import { useCallback, useState } from "react";
|
||||
import { Box, Button, Flex, Input, Text } from "@theme-ui/components";
|
||||
import { CheckCircleOutline, Loading } from "../../../components/icons";
|
||||
import {
|
||||
@@ -74,7 +74,6 @@ function ThemesList() {
|
||||
);
|
||||
|
||||
const [isApplying, setIsApplying] = useState(false);
|
||||
const parentScrollRef = useRef<HTMLElement>();
|
||||
const setCurrentTheme = useThemeStore((store) => store.setTheme);
|
||||
const user = useUserStore((store) => store.user);
|
||||
const darkTheme = useThemeStore((store) => store.darkTheme);
|
||||
@@ -198,11 +197,6 @@ function ThemesList() {
|
||||
</Flex>
|
||||
|
||||
<Box
|
||||
ref={(ref) => {
|
||||
if (ref && ref instanceof HTMLElement)
|
||||
parentScrollRef.current =
|
||||
(ref.closest(".ms-container") as HTMLElement) || undefined;
|
||||
}}
|
||||
sx={{
|
||||
".virtuoso-grid-list": {
|
||||
display: "grid",
|
||||
@@ -216,7 +210,9 @@ function ThemesList() {
|
||||
<Loader title={"Loading themes..."} />
|
||||
) : (
|
||||
<VirtuosoGrid
|
||||
customScrollParent={parentScrollRef.current || undefined}
|
||||
customScrollParent={
|
||||
document.getElementById("settings-scrollbar") || undefined
|
||||
}
|
||||
data={[
|
||||
{
|
||||
...darkTheme,
|
||||
|
||||
@@ -476,6 +476,7 @@ function SettingItem(props: { item: Setting }) {
|
||||
disabled={isWorking}
|
||||
onChange={() => workWithLoading(component.toggle)}
|
||||
checked={component.isToggled()}
|
||||
data-checked={component.isToggled()}
|
||||
/>
|
||||
);
|
||||
case "dropdown":
|
||||
|
||||
@@ -104,10 +104,10 @@ class AppStore extends BaseStore {
|
||||
|
||||
db.eventManager.subscribe(
|
||||
EVENTS.databaseSyncRequested,
|
||||
async (full, force) => {
|
||||
async (full, force, lastSynced) => {
|
||||
if (!this.get().isAutoSyncEnabled) return;
|
||||
|
||||
await this.get().sync(full, force);
|
||||
await this.get().sync(full, force, lastSynced);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -273,21 +273,30 @@ class AppStore extends BaseStore {
|
||||
this.set((state) => (state.lastSynced = lastSynced));
|
||||
};
|
||||
|
||||
sync = async (full = true, force = false) => {
|
||||
sync = async (full = true, force = false, lastSynced = null) => {
|
||||
if (
|
||||
this.isSyncing() ||
|
||||
!this.get().isSyncEnabled ||
|
||||
!navigator.onLine ||
|
||||
!(await networkCheck.waitForInternet())
|
||||
)
|
||||
) {
|
||||
logger.info("Ignoring duplicate sync", {
|
||||
full,
|
||||
force,
|
||||
lastSynced,
|
||||
syncing: this.isSyncing(),
|
||||
syncDisabled: !this.get().isSyncEnabled,
|
||||
offline: !navigator.onLine
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
clearTimeout(syncStatusTimeout);
|
||||
this.updateLastSynced();
|
||||
|
||||
this.updateSyncStatus("syncing");
|
||||
try {
|
||||
const result = await db.sync(full, force);
|
||||
const result = await db.sync(full, force, lastSynced);
|
||||
|
||||
if (!result) return this.updateSyncStatus("failed");
|
||||
this.updateSyncStatus("completed", true);
|
||||
|
||||
@@ -17,12 +17,15 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { PAGE_VISIBILITY_CHANGE } from "./page-visibility";
|
||||
|
||||
type FilePickerOptions = { acceptedFileTypes: string };
|
||||
|
||||
export function showFilePicker({
|
||||
acceptedFileTypes
|
||||
}: FilePickerOptions): Promise<File | undefined> {
|
||||
return new Promise((resolve) => {
|
||||
PAGE_VISIBILITY_CHANGE.ignore = true;
|
||||
const input = document.createElement("input");
|
||||
input.setAttribute("type", "file");
|
||||
input.setAttribute("accept", acceptedFileTypes);
|
||||
|
||||
@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import { debounce } from "@notesnook/common";
|
||||
|
||||
export const PAGE_VISIBILITY_CHANGE = { ignore: false };
|
||||
function visibilityChange() {
|
||||
return "msHidden" in document
|
||||
? "msvisibilityChange"
|
||||
@@ -58,6 +59,10 @@ export function onPageVisibilityChanged(
|
||||
document.addEventListener(
|
||||
visibilityChange(),
|
||||
debounce((_) => {
|
||||
if (PAGE_VISIBILITY_CHANGE.ignore) {
|
||||
PAGE_VISIBILITY_CHANGE.ignore = false;
|
||||
return;
|
||||
}
|
||||
handler("visibilitychange", isDocumentHidden());
|
||||
}, 1000)
|
||||
);
|
||||
@@ -66,7 +71,11 @@ export function onPageVisibilityChanged(
|
||||
"focus",
|
||||
debounce((_) => {
|
||||
if (!window.document.hasFocus()) return;
|
||||
if (PAGE_VISIBILITY_CHANGE.ignore) {
|
||||
PAGE_VISIBILITY_CHANGE.ignore = false;
|
||||
return;
|
||||
}
|
||||
handler("focus", false);
|
||||
}, 1000)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,14 +352,14 @@ function Signup(props: BaseAuthComponentProps<"signup">) {
|
||||
<AuthField
|
||||
id="password"
|
||||
type="password"
|
||||
autoComplete="current-password"
|
||||
autoComplete="new-password"
|
||||
label="Set password"
|
||||
defaultValue={form?.password}
|
||||
/>
|
||||
<AuthField
|
||||
id="confirm-password"
|
||||
type="password"
|
||||
autoComplete="confirm-password"
|
||||
autoComplete="new-password"
|
||||
label="Confirm password"
|
||||
defaultValue={form?.["confirm-password"]}
|
||||
/>
|
||||
@@ -999,7 +999,7 @@ export function SubmitButton(props: SubmitButtonProps) {
|
||||
}}
|
||||
disabled={props.disabled}
|
||||
>
|
||||
{props.loading ? <Loading color="white" /> : props.text}
|
||||
{props.loading ? <Loading color="accentForeground" /> : props.text}
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -120,20 +120,19 @@ Currently, Notesnook has 5 variants:
|
||||
|
||||
Each variant further contains a total of 12 Colors:
|
||||
|
||||
| Color | Description | Transparent |
|
||||
| --------------- | ------------------------------------------------------------------------------------------------------------------ | ----------- |
|
||||
| `accent` | Color used to make something stand out (like the primary button in dialogs). Can be both background or foreground. | ❌ |
|
||||
| `shade` | Color used as a background to show prominence. | ✅ |
|
||||
| `background` | Background color of elements | ❌ |
|
||||
| `paragraph` | Color of paragraphs and other text | ❌ |
|
||||
| `heading` | Color of headings & titles | ❌ |
|
||||
| `backdrop` | The color of the overlay shown behind dialogs & modals | ✅ |
|
||||
| `textSelection` | The text color of selected text | ✅ |
|
||||
| `hover` | Background color when hovering over elements (that support it) | ✅ |
|
||||
| `border` | Border color | ❌ |
|
||||
| `separator` | Color of the separator line between items | ❌ |
|
||||
| `placeholder` | Color of the placeholder in input fields | ❌ |
|
||||
| `icon` | Color of icons | ❌ |
|
||||
| Color | Description | Transparent |
|
||||
| ------------------ | ------------------------------------------------------------------------------------------------------------------ | ----------- |
|
||||
| `accent` | Color used to make something stand out (like the primary button in dialogs). Can be both background or foreground. | ❌ |
|
||||
| `accentForeground` | Color for icons & text on accent background | ❌ |
|
||||
| `background` | Background color of elements | ❌ |
|
||||
| `paragraph` | Color of paragraphs and other text | ❌ |
|
||||
| `heading` | Color of headings & titles | ❌ |
|
||||
| `backdrop` | The color of the overlay shown behind dialogs & modals | ✅ |
|
||||
| `hover` | Background color when hovering over elements (that support it) | ✅ |
|
||||
| `border` | Border color | ❌ |
|
||||
| `separator` | Color of the separator line between items | ❌ |
|
||||
| `placeholder` | Color of the placeholder in input fields | ❌ |
|
||||
| `icon` | Color of icons | ❌ |
|
||||
|
||||
### Theme Metadata
|
||||
|
||||
|
||||
@@ -31,13 +31,13 @@ textarea {
|
||||
|
||||
::-moz-selection {
|
||||
/* Code for Firefox */
|
||||
background-color: var(--textSelection);
|
||||
color: var(--paragraph);
|
||||
background-color: var(--background-selected);
|
||||
color: var(--paragraph-selected);
|
||||
}
|
||||
|
||||
::selection {
|
||||
background-color: var(--textSelection);
|
||||
color: var(--paragraph);
|
||||
background-color: var(--background-selected);
|
||||
color: var(--paragraph-selected);
|
||||
}
|
||||
|
||||
.ms-track:hover,
|
||||
|
||||
4
fastlane/metadata/android/en-US/changelogs/10294.txt
Normal file
4
fastlane/metadata/android/en-US/changelogs/10294.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Much improved and faster sync
|
||||
- Note pinned in notifications will update automatically when content changes
|
||||
- Quick notes from notifications now respect paragraph spacing settings.
|
||||
- Many bug fixes and small improvements
|
||||
4
fastlane/metadata/android/en-US/changelogs/10299.txt
Normal file
4
fastlane/metadata/android/en-US/changelogs/10299.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Much improved and faster sync
|
||||
- Note pinned in notifications will update automatically when content changes
|
||||
- Quick notes from notifications now respect paragraph spacing settings.
|
||||
- Many bug fixes and small improvements
|
||||
223
package-lock.json
generated
223
package-lock.json
generated
@@ -2321,7 +2321,6 @@
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
|
||||
"integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"eslint-visitor-keys": "^3.3.0"
|
||||
},
|
||||
@@ -2336,7 +2335,6 @@
|
||||
"version": "4.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
|
||||
"integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
|
||||
}
|
||||
@@ -2345,7 +2343,6 @@
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
|
||||
"integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ajv": "^6.12.4",
|
||||
"debug": "^4.3.2",
|
||||
@@ -2368,7 +2365,6 @@
|
||||
"version": "6.12.6",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
@@ -2383,14 +2379,12 @@
|
||||
"node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "8.42.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz",
|
||||
"integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
}
|
||||
@@ -2399,7 +2393,6 @@
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
|
||||
"integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@humanwhocodes/object-schema": "^1.2.1",
|
||||
"debug": "^4.1.1",
|
||||
@@ -2413,7 +2406,6 @@
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
|
||||
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=12.22"
|
||||
},
|
||||
@@ -2425,8 +2417,7 @@
|
||||
"node_modules/@humanwhocodes/object-schema": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
|
||||
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
"version": "0.1.1",
|
||||
@@ -3411,7 +3402,6 @@
|
||||
"version": "8.8.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
|
||||
"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
@@ -3423,7 +3413,6 @@
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
||||
"dev": true,
|
||||
"peerDependencies": {
|
||||
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
||||
}
|
||||
@@ -4060,7 +4049,6 @@
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
@@ -4514,7 +4502,6 @@
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ms": "2.1.2"
|
||||
},
|
||||
@@ -4601,8 +4588,7 @@
|
||||
"node_modules/deep-is": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
||||
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
|
||||
},
|
||||
"node_modules/define-lazy-prop": {
|
||||
"version": "2.0.0",
|
||||
@@ -4661,7 +4647,6 @@
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
|
||||
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"esutils": "^2.0.2"
|
||||
},
|
||||
@@ -4867,7 +4852,6 @@
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
||||
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
@@ -4879,7 +4863,6 @@
|
||||
"version": "8.42.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz",
|
||||
"integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.4.0",
|
||||
@@ -5410,7 +5393,6 @@
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
|
||||
"integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
},
|
||||
@@ -5422,7 +5404,6 @@
|
||||
"version": "6.12.6",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
@@ -5438,7 +5419,6 @@
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
|
||||
"integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"esrecurse": "^4.3.0",
|
||||
"estraverse": "^5.2.0"
|
||||
@@ -5453,14 +5433,12 @@
|
||||
"node_modules/eslint/node_modules/json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||
},
|
||||
"node_modules/espree": {
|
||||
"version": "9.5.2",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
|
||||
"integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"acorn": "^8.8.0",
|
||||
"acorn-jsx": "^5.3.2",
|
||||
@@ -5489,7 +5467,6 @@
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz",
|
||||
"integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"estraverse": "^5.1.0"
|
||||
},
|
||||
@@ -5501,7 +5478,6 @@
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
|
||||
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"estraverse": "^5.2.0"
|
||||
},
|
||||
@@ -5513,7 +5489,6 @@
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
|
||||
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
}
|
||||
@@ -5522,7 +5497,6 @@
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
||||
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
@@ -5553,8 +5527,7 @@
|
||||
"node_modules/fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
||||
"dev": true
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
||||
},
|
||||
"node_modules/fast-glob": {
|
||||
"version": "3.3.0",
|
||||
@@ -5587,14 +5560,12 @@
|
||||
"node_modules/fast-json-stable-stringify": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
|
||||
},
|
||||
"node_modules/fast-levenshtein": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
||||
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
|
||||
},
|
||||
"node_modules/fast-url-parser": {
|
||||
"version": "1.1.3",
|
||||
@@ -5652,7 +5623,6 @@
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
||||
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"flat-cache": "^3.0.4"
|
||||
},
|
||||
@@ -5675,7 +5645,6 @@
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
|
||||
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"locate-path": "^6.0.0",
|
||||
"path-exists": "^4.0.0"
|
||||
@@ -5707,7 +5676,6 @@
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
|
||||
"integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"flatted": "^3.1.0",
|
||||
"rimraf": "^3.0.2"
|
||||
@@ -5719,8 +5687,7 @@
|
||||
"node_modules/flatted": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
|
||||
"integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
@@ -5931,7 +5898,6 @@
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
|
||||
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"is-glob": "^4.0.3"
|
||||
},
|
||||
@@ -5955,7 +5921,6 @@
|
||||
"version": "13.20.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
|
||||
"integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"type-fest": "^0.20.2"
|
||||
},
|
||||
@@ -6027,8 +5992,7 @@
|
||||
"node_modules/graphemer": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
|
||||
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
|
||||
"dev": true
|
||||
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
|
||||
},
|
||||
"node_modules/hard-rejection": {
|
||||
"version": "2.1.0",
|
||||
@@ -6223,7 +6187,6 @@
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
|
||||
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"parent-module": "^1.0.0",
|
||||
"resolve-from": "^4.0.0"
|
||||
@@ -6239,7 +6202,6 @@
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
||||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
@@ -6248,7 +6210,6 @@
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
|
||||
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.8.19"
|
||||
}
|
||||
@@ -6508,7 +6469,6 @@
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
|
||||
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
@@ -6749,8 +6709,7 @@
|
||||
"node_modules/json-stable-stringify-without-jsonify": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
|
||||
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
|
||||
},
|
||||
"node_modules/json5": {
|
||||
"version": "2.2.3",
|
||||
@@ -6853,7 +6812,6 @@
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
|
||||
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"prelude-ls": "^1.2.1",
|
||||
"type-check": "~0.4.0"
|
||||
@@ -7174,7 +7132,6 @@
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
||||
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"p-locate": "^5.0.0"
|
||||
},
|
||||
@@ -7224,8 +7181,7 @@
|
||||
"node_modules/lodash.merge": {
|
||||
"version": "4.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
|
||||
},
|
||||
"node_modules/lodash.mergewith": {
|
||||
"version": "4.6.2",
|
||||
@@ -7727,14 +7683,12 @@
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||
"dev": true
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"node_modules/natural-compare": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
||||
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
|
||||
},
|
||||
"node_modules/natural-compare-lite": {
|
||||
"version": "1.4.0",
|
||||
@@ -8177,7 +8131,6 @@
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
|
||||
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"deep-is": "^0.1.3",
|
||||
"fast-levenshtein": "^2.0.6",
|
||||
@@ -8202,7 +8155,6 @@
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
|
||||
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"yocto-queue": "^0.1.0"
|
||||
},
|
||||
@@ -8217,7 +8169,6 @@
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
|
||||
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"p-limit": "^3.0.2"
|
||||
},
|
||||
@@ -8241,7 +8192,6 @@
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
||||
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"callsites": "^3.0.0"
|
||||
},
|
||||
@@ -8369,7 +8319,6 @@
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
@@ -8438,7 +8387,6 @@
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
||||
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 0.8.0"
|
||||
}
|
||||
@@ -9314,8 +9262,7 @@
|
||||
"node_modules/text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
|
||||
},
|
||||
"node_modules/through": {
|
||||
"version": "2.3.8",
|
||||
@@ -9483,7 +9430,6 @@
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
||||
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"prelude-ls": "^1.2.1"
|
||||
},
|
||||
@@ -9495,7 +9441,6 @@
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
|
||||
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
@@ -9632,7 +9577,6 @@
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
|
||||
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
@@ -9641,7 +9585,6 @@
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
||||
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
@@ -9809,7 +9752,6 @@
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
@@ -9909,7 +9851,6 @@
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
|
||||
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
@@ -11542,7 +11483,6 @@
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
|
||||
"integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eslint-visitor-keys": "^3.3.0"
|
||||
}
|
||||
@@ -11550,14 +11490,12 @@
|
||||
"@eslint-community/regexpp": {
|
||||
"version": "4.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
|
||||
"integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ=="
|
||||
},
|
||||
"@eslint/eslintrc": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
|
||||
"integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^6.12.4",
|
||||
"debug": "^4.3.2",
|
||||
@@ -11574,7 +11512,6 @@
|
||||
"version": "6.12.6",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
@@ -11585,22 +11522,19 @@
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@eslint/js": {
|
||||
"version": "8.42.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz",
|
||||
"integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw=="
|
||||
},
|
||||
"@humanwhocodes/config-array": {
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
|
||||
"integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@humanwhocodes/object-schema": "^1.2.1",
|
||||
"debug": "^4.1.1",
|
||||
@@ -11610,14 +11544,12 @@
|
||||
"@humanwhocodes/module-importer": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
|
||||
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="
|
||||
},
|
||||
"@humanwhocodes/object-schema": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
|
||||
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
|
||||
},
|
||||
"@jridgewell/gen-mapping": {
|
||||
"version": "0.1.1",
|
||||
@@ -12238,14 +12170,13 @@
|
||||
"acorn": {
|
||||
"version": "8.8.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
|
||||
"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
||||
"dev": true
|
||||
"requires": {}
|
||||
},
|
||||
"acorn-walk": {
|
||||
"version": "8.2.0",
|
||||
@@ -12686,8 +12617,7 @@
|
||||
"callsites": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
|
||||
},
|
||||
"camelcase": {
|
||||
"version": "5.3.1",
|
||||
@@ -12971,7 +12901,8 @@
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz",
|
||||
"integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==",
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
},
|
||||
"create-require": {
|
||||
"version": "1.1.1",
|
||||
@@ -13010,7 +12941,6 @@
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
@@ -13073,8 +13003,7 @@
|
||||
"deep-is": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
||||
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
|
||||
},
|
||||
"define-lazy-prop": {
|
||||
"version": "2.0.0",
|
||||
@@ -13115,7 +13044,6 @@
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
|
||||
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esutils": "^2.0.2"
|
||||
}
|
||||
@@ -13284,14 +13212,12 @@
|
||||
"escape-string-regexp": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
||||
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
|
||||
},
|
||||
"eslint": {
|
||||
"version": "8.42.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz",
|
||||
"integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.4.0",
|
||||
@@ -13338,7 +13264,6 @@
|
||||
"version": "6.12.6",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
@@ -13350,7 +13275,6 @@
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
|
||||
"integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esrecurse": "^4.3.0",
|
||||
"estraverse": "^5.2.0"
|
||||
@@ -13359,8 +13283,7 @@
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -13467,7 +13390,8 @@
|
||||
"eslint-plugin-header": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz",
|
||||
"integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg=="
|
||||
"integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==",
|
||||
"requires": {}
|
||||
},
|
||||
"eslint-plugin-import": {
|
||||
"version": "2.27.5",
|
||||
@@ -13631,7 +13555,8 @@
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
|
||||
"integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
},
|
||||
"eslint-plugin-react-native": {
|
||||
"version": "4.0.0",
|
||||
@@ -13711,14 +13636,12 @@
|
||||
"eslint-visitor-keys": {
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
|
||||
"integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA=="
|
||||
},
|
||||
"espree": {
|
||||
"version": "9.5.2",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
|
||||
"integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"acorn": "^8.8.0",
|
||||
"acorn-jsx": "^5.3.2",
|
||||
@@ -13734,7 +13657,6 @@
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz",
|
||||
"integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"estraverse": "^5.1.0"
|
||||
}
|
||||
@@ -13743,7 +13665,6 @@
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
|
||||
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"estraverse": "^5.2.0"
|
||||
}
|
||||
@@ -13751,14 +13672,12 @@
|
||||
"estraverse": {
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
|
||||
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
|
||||
},
|
||||
"esutils": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
||||
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
|
||||
"dev": true
|
||||
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
|
||||
},
|
||||
"execa": {
|
||||
"version": "5.1.1",
|
||||
@@ -13780,8 +13699,7 @@
|
||||
"fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
||||
"dev": true
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
||||
},
|
||||
"fast-glob": {
|
||||
"version": "3.3.0",
|
||||
@@ -13810,14 +13728,12 @@
|
||||
"fast-json-stable-stringify": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
|
||||
},
|
||||
"fast-levenshtein": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
||||
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
|
||||
},
|
||||
"fast-url-parser": {
|
||||
"version": "1.1.3",
|
||||
@@ -13839,7 +13755,8 @@
|
||||
"fdir": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.0.2.tgz",
|
||||
"integrity": "sha512-XJVxBciDoEpRipMYyrTCqVQA4jMTfHNiYNy8OvIGTaQzEFPuMJEvmps+Rouo6rsnivkQax9s5m5gy1lHmY2Hmg=="
|
||||
"integrity": "sha512-XJVxBciDoEpRipMYyrTCqVQA4jMTfHNiYNy8OvIGTaQzEFPuMJEvmps+Rouo6rsnivkQax9s5m5gy1lHmY2Hmg==",
|
||||
"requires": {}
|
||||
},
|
||||
"figures": {
|
||||
"version": "3.2.0",
|
||||
@@ -13860,7 +13777,6 @@
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
||||
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"flat-cache": "^3.0.4"
|
||||
}
|
||||
@@ -13877,7 +13793,6 @@
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
|
||||
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"locate-path": "^6.0.0",
|
||||
"path-exists": "^4.0.0"
|
||||
@@ -13900,7 +13815,6 @@
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
|
||||
"integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"flatted": "^3.1.0",
|
||||
"rimraf": "^3.0.2"
|
||||
@@ -13909,8 +13823,7 @@
|
||||
"flatted": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
|
||||
"integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
@@ -14056,7 +13969,6 @@
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
|
||||
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-glob": "^4.0.3"
|
||||
}
|
||||
@@ -14074,7 +13986,6 @@
|
||||
"version": "13.20.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
|
||||
"integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"type-fest": "^0.20.2"
|
||||
}
|
||||
@@ -14125,8 +14036,7 @@
|
||||
"graphemer": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
|
||||
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
|
||||
"dev": true
|
||||
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
|
||||
},
|
||||
"hard-rejection": {
|
||||
"version": "2.1.0",
|
||||
@@ -14251,7 +14161,6 @@
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
|
||||
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"parent-module": "^1.0.0",
|
||||
"resolve-from": "^4.0.0"
|
||||
@@ -14260,16 +14169,14 @@
|
||||
"resolve-from": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
||||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
|
||||
"dev": true
|
||||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"imurmurhash": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
|
||||
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
|
||||
},
|
||||
"indent-string": {
|
||||
"version": "4.0.0",
|
||||
@@ -14444,8 +14351,7 @@
|
||||
"is-path-inside": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
|
||||
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="
|
||||
},
|
||||
"is-plain-obj": {
|
||||
"version": "1.1.0",
|
||||
@@ -14614,8 +14520,7 @@
|
||||
"json-stable-stringify-without-jsonify": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
|
||||
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
|
||||
},
|
||||
"json5": {
|
||||
"version": "2.2.3",
|
||||
@@ -14695,7 +14600,6 @@
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
|
||||
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"prelude-ls": "^1.2.1",
|
||||
"type-check": "~0.4.0"
|
||||
@@ -14935,7 +14839,6 @@
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
||||
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"p-locate": "^5.0.0"
|
||||
}
|
||||
@@ -14979,8 +14882,7 @@
|
||||
"lodash.merge": {
|
||||
"version": "4.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
|
||||
},
|
||||
"lodash.mergewith": {
|
||||
"version": "4.6.2",
|
||||
@@ -15365,14 +15267,12 @@
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||
"dev": true
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"natural-compare": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
||||
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
|
||||
},
|
||||
"natural-compare-lite": {
|
||||
"version": "1.4.0",
|
||||
@@ -15698,7 +15598,6 @@
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
|
||||
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"deep-is": "^0.1.3",
|
||||
"fast-levenshtein": "^2.0.6",
|
||||
@@ -15717,7 +15616,6 @@
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
|
||||
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"yocto-queue": "^0.1.0"
|
||||
}
|
||||
@@ -15726,7 +15624,6 @@
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
|
||||
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"p-limit": "^3.0.2"
|
||||
}
|
||||
@@ -15741,7 +15638,6 @@
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
||||
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"callsites": "^3.0.0"
|
||||
}
|
||||
@@ -15835,8 +15731,7 @@
|
||||
"path-exists": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
|
||||
"dev": true
|
||||
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
|
||||
},
|
||||
"path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
@@ -15886,8 +15781,7 @@
|
||||
"prelude-ls": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
||||
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
|
||||
"dev": true
|
||||
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
|
||||
},
|
||||
"prettier": {
|
||||
"version": "2.8.8",
|
||||
@@ -16542,8 +16436,7 @@
|
||||
"text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
|
||||
},
|
||||
"through": {
|
||||
"version": "2.3.8",
|
||||
@@ -16671,7 +16564,6 @@
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
||||
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"prelude-ls": "^1.2.1"
|
||||
}
|
||||
@@ -16679,8 +16571,7 @@
|
||||
"type-fest": {
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
|
||||
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
|
||||
},
|
||||
"typed-array-length": {
|
||||
"version": "1.0.4",
|
||||
@@ -16767,7 +16658,6 @@
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
|
||||
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"punycode": "^2.1.0"
|
||||
},
|
||||
@@ -16775,8 +16665,7 @@
|
||||
"punycode": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
||||
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -16899,8 +16788,7 @@
|
||||
"word-wrap": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
|
||||
},
|
||||
"wrap-ansi": {
|
||||
"version": "7.0.0",
|
||||
@@ -16974,8 +16862,7 @@
|
||||
"yocto-queue": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
|
||||
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
|
||||
"dev": true
|
||||
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,8 +40,15 @@ export class NodeStorageInterface {
|
||||
}
|
||||
|
||||
async write(key, data) {
|
||||
return new Promise((resolve) => resolve((this.storage[key] = data)));
|
||||
this.storage[key] = data;
|
||||
}
|
||||
|
||||
async writeMulti(entries) {
|
||||
for (const [key, value] of entries) {
|
||||
this.storage[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
remove(key) {
|
||||
delete this.storage[key];
|
||||
}
|
||||
|
||||
@@ -20,7 +20,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
import "isomorphic-fetch";
|
||||
import crypto from "crypto";
|
||||
import dotenv from "dotenv";
|
||||
import { DOMParser } from "linkedom";
|
||||
|
||||
globalThis.DOMParser = DOMParser;
|
||||
require("abortcontroller-polyfill/dist/polyfill-patch-fetch");
|
||||
globalThis.crypto = crypto;
|
||||
dotenv.config();
|
||||
|
||||
604
packages/core/package-lock.json
generated
604
packages/core/package-lock.json
generated
@@ -37,8 +37,8 @@
|
||||
"cross-env": "^7.0.3",
|
||||
"dotenv": "^16.0.1",
|
||||
"eventsource": "^2.0.2",
|
||||
"happy-dom": "^10.9.0",
|
||||
"isomorphic-fetch": "^3.0.0",
|
||||
"jsdom": "^22.1.0",
|
||||
"mockdate": "^3.0.5",
|
||||
"otplib": "^12.0.1",
|
||||
"refractor": "^4.8.1",
|
||||
@@ -598,6 +598,15 @@
|
||||
"url": "https://www.paypal.me/tiviesantos"
|
||||
}
|
||||
},
|
||||
"node_modules/@tootallnate/once": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
|
||||
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/chai": {
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz",
|
||||
@@ -881,6 +890,12 @@
|
||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/abab": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
||||
"integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/abort-controller": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
||||
@@ -919,6 +934,18 @@
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/agent-base": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"debug": "4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/assertion-error": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
||||
@@ -936,6 +963,12 @@
|
||||
"tslib": "^2.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/balanced-match": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||
@@ -1023,6 +1056,18 @@
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/comma-separated-tokens": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
|
||||
@@ -1116,13 +1161,41 @@
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
|
||||
"integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/cssom": {
|
||||
"version": "0.5.0",
|
||||
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
|
||||
"integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
|
||||
},
|
||||
"node_modules/cssstyle": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
|
||||
"integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"rrweb-cssom": "^0.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/data-urls": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz",
|
||||
"integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"abab": "^2.0.6",
|
||||
"whatwg-mimetype": "^3.0.0",
|
||||
"whatwg-url": "^12.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/dayjs": {
|
||||
"version": "1.11.9",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
|
||||
@@ -1145,6 +1218,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/decimal.js": {
|
||||
"version": "10.4.3",
|
||||
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
|
||||
"integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/decode-named-character-reference": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
|
||||
@@ -1178,6 +1257,15 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/discontinuous-range": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
|
||||
@@ -1207,6 +1295,18 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/domexception": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
|
||||
"integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"webidl-conversions": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/domhandler": {
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
|
||||
@@ -1316,6 +1416,20 @@
|
||||
"tough-cookie": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/form-data": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"mime-types": "^2.1.12"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
@@ -1366,10 +1480,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/happy-dom": {
|
||||
"version": "10.9.0",
|
||||
"resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-10.9.0.tgz",
|
||||
"integrity": "sha512-SGZ8QqSNDVkWt5T7GNACKS+CpGvr58OKurqCR1iH371dMgpXyUI2tJA91cASG6fe2d5xYnVFOgOwx4MmOaXepw==",
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-10.11.2.tgz",
|
||||
"integrity": "sha512-rzgmLjLkhyaOdFEyU8CWXzbgyCyM7wJHLqhaoeEVSTyur1fjcUaiNTHx+D4CPaLvx16tGy+SBPd9TVnP/kzL3w==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"css.escape": "^1.5.1",
|
||||
"entities": "^4.5.0",
|
||||
@@ -1418,6 +1534,18 @@
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/html-encoding-sniffer": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
|
||||
"integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"whatwg-encoding": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/html-escaper": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
|
||||
@@ -1457,6 +1585,33 @@
|
||||
"entities": "^4.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/http-proxy-agent": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
|
||||
"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@tootallnate/once": "2",
|
||||
"agent-base": "6",
|
||||
"debug": "4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/https-proxy-agent": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
|
||||
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"agent-base": "6",
|
||||
"debug": "4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/iconv-lite": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
@@ -1529,6 +1684,12 @@
|
||||
"url": "https://github.com/sponsors/wooorm"
|
||||
}
|
||||
},
|
||||
"node_modules/is-potential-custom-element-name": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
|
||||
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/isexe": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||
@@ -1595,6 +1756,69 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/jsdom": {
|
||||
"version": "22.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz",
|
||||
"integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"abab": "^2.0.6",
|
||||
"cssstyle": "^3.0.0",
|
||||
"data-urls": "^4.0.0",
|
||||
"decimal.js": "^10.4.3",
|
||||
"domexception": "^4.0.0",
|
||||
"form-data": "^4.0.0",
|
||||
"html-encoding-sniffer": "^3.0.0",
|
||||
"http-proxy-agent": "^5.0.0",
|
||||
"https-proxy-agent": "^5.0.1",
|
||||
"is-potential-custom-element-name": "^1.0.1",
|
||||
"nwsapi": "^2.2.4",
|
||||
"parse5": "^7.1.2",
|
||||
"rrweb-cssom": "^0.6.0",
|
||||
"saxes": "^6.0.0",
|
||||
"symbol-tree": "^3.2.4",
|
||||
"tough-cookie": "^4.1.2",
|
||||
"w3c-xmlserializer": "^4.0.0",
|
||||
"webidl-conversions": "^7.0.0",
|
||||
"whatwg-encoding": "^2.0.0",
|
||||
"whatwg-mimetype": "^3.0.0",
|
||||
"whatwg-url": "^12.0.1",
|
||||
"ws": "^8.13.0",
|
||||
"xml-name-validator": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"canvas": "^2.5.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"canvas": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/jsdom/node_modules/ws": {
|
||||
"version": "8.13.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
|
||||
"integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": ">=5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/jsonc-parser": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
|
||||
@@ -1729,6 +1953,18 @@
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-types": {
|
||||
"version": "2.1.35",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"mime-db": "1.52.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
@@ -1863,6 +2099,12 @@
|
||||
"url": "https://github.com/fb55/nth-check?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/nwsapi": {
|
||||
"version": "2.2.7",
|
||||
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
|
||||
"integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
@@ -1903,6 +2145,18 @@
|
||||
"url": "https://github.com/sponsors/wooorm"
|
||||
}
|
||||
},
|
||||
"node_modules/parse5": {
|
||||
"version": "7.1.2",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
|
||||
"integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"entities": "^4.4.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/inikulin/parse5?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/parseley": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.0.tgz",
|
||||
@@ -2110,12 +2364,30 @@
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/rrweb-cssom": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
|
||||
"integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/saxes": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
|
||||
"integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"xmlchars": "^2.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=v12.22.7"
|
||||
}
|
||||
},
|
||||
"node_modules/selderee": {
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz",
|
||||
@@ -2243,6 +2515,12 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/symbol-tree": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/test-exclude": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
|
||||
@@ -2304,6 +2582,18 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/tr46": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz",
|
||||
"integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"punycode": "^2.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/ts-error": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/ts-error/-/ts-error-1.0.6.tgz",
|
||||
@@ -2535,6 +2825,18 @@
|
||||
"vitest": ">=0.16.0"
|
||||
}
|
||||
},
|
||||
"node_modules/w3c-xmlserializer": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
|
||||
"integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"xml-name-validator": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||
@@ -2571,6 +2873,19 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/whatwg-url": {
|
||||
"version": "12.0.1",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz",
|
||||
"integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"tr46": "^4.1.1",
|
||||
"webidl-conversions": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/which": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||
@@ -2628,6 +2943,21 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/xml-name-validator": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
|
||||
"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/xmlchars": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
|
||||
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/yallist": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||
@@ -2947,6 +3277,12 @@
|
||||
"resolved": "https://registry.npmjs.org/@streetwriters/showdown/-/showdown-3.0.1-alpha.2.tgz",
|
||||
"integrity": "sha512-GkIDQlcvJVVMgp1J5H5upiRr2hZQJAJK6gnDzOjvJAflKO4gV96xCq4RFakwahLLhL7uQ8Yx10qtmrtBuJMsEw=="
|
||||
},
|
||||
"@tootallnate/once": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
|
||||
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/chai": {
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz",
|
||||
@@ -3176,6 +3512,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"abab": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
||||
"integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
|
||||
"dev": true
|
||||
},
|
||||
"abort-controller": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
||||
@@ -3202,6 +3544,15 @@
|
||||
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
|
||||
"dev": true
|
||||
},
|
||||
"agent-base": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"debug": "4"
|
||||
}
|
||||
},
|
||||
"assertion-error": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
||||
@@ -3216,6 +3567,12 @@
|
||||
"tslib": "^2.3.1"
|
||||
}
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
||||
"dev": true
|
||||
},
|
||||
"balanced-match": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||
@@ -3282,6 +3639,15 @@
|
||||
"integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
|
||||
"dev": true
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"comma-separated-tokens": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
|
||||
@@ -3350,13 +3716,35 @@
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
|
||||
"integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"cssom": {
|
||||
"version": "0.5.0",
|
||||
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
|
||||
"integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
|
||||
},
|
||||
"cssstyle": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
|
||||
"integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"rrweb-cssom": "^0.6.0"
|
||||
}
|
||||
},
|
||||
"data-urls": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz",
|
||||
"integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"abab": "^2.0.6",
|
||||
"whatwg-mimetype": "^3.0.0",
|
||||
"whatwg-url": "^12.0.0"
|
||||
}
|
||||
},
|
||||
"dayjs": {
|
||||
"version": "1.11.9",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
|
||||
@@ -3371,6 +3759,12 @@
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"decimal.js": {
|
||||
"version": "10.4.3",
|
||||
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
|
||||
"integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
|
||||
"dev": true
|
||||
},
|
||||
"decode-named-character-reference": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
|
||||
@@ -3394,6 +3788,12 @@
|
||||
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
|
||||
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="
|
||||
},
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||
"dev": true
|
||||
},
|
||||
"discontinuous-range": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
|
||||
@@ -3414,6 +3814,15 @@
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
|
||||
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
|
||||
},
|
||||
"domexception": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
|
||||
"integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"webidl-conversions": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"domhandler": {
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
|
||||
@@ -3492,6 +3901,17 @@
|
||||
"tough-cookie": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"form-data": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
@@ -3526,10 +3946,12 @@
|
||||
}
|
||||
},
|
||||
"happy-dom": {
|
||||
"version": "10.9.0",
|
||||
"resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-10.9.0.tgz",
|
||||
"integrity": "sha512-SGZ8QqSNDVkWt5T7GNACKS+CpGvr58OKurqCR1iH371dMgpXyUI2tJA91cASG6fe2d5xYnVFOgOwx4MmOaXepw==",
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-10.11.2.tgz",
|
||||
"integrity": "sha512-rzgmLjLkhyaOdFEyU8CWXzbgyCyM7wJHLqhaoeEVSTyur1fjcUaiNTHx+D4CPaLvx16tGy+SBPd9TVnP/kzL3w==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"css.escape": "^1.5.1",
|
||||
"entities": "^4.5.0",
|
||||
@@ -3567,6 +3989,15 @@
|
||||
"space-separated-tokens": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"html-encoding-sniffer": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
|
||||
"integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"whatwg-encoding": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"html-escaper": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
|
||||
@@ -3596,6 +4027,27 @@
|
||||
"entities": "^4.3.0"
|
||||
}
|
||||
},
|
||||
"http-proxy-agent": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
|
||||
"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@tootallnate/once": "2",
|
||||
"agent-base": "6",
|
||||
"debug": "4"
|
||||
}
|
||||
},
|
||||
"https-proxy-agent": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
|
||||
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"agent-base": "6",
|
||||
"debug": "4"
|
||||
}
|
||||
},
|
||||
"iconv-lite": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
@@ -3649,6 +4101,12 @@
|
||||
"integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
|
||||
"dev": true
|
||||
},
|
||||
"is-potential-custom-element-name": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
|
||||
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
|
||||
"dev": true
|
||||
},
|
||||
"isexe": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||
@@ -3703,6 +4161,46 @@
|
||||
"istanbul-lib-report": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"jsdom": {
|
||||
"version": "22.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz",
|
||||
"integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"abab": "^2.0.6",
|
||||
"cssstyle": "^3.0.0",
|
||||
"data-urls": "^4.0.0",
|
||||
"decimal.js": "^10.4.3",
|
||||
"domexception": "^4.0.0",
|
||||
"form-data": "^4.0.0",
|
||||
"html-encoding-sniffer": "^3.0.0",
|
||||
"http-proxy-agent": "^5.0.0",
|
||||
"https-proxy-agent": "^5.0.1",
|
||||
"is-potential-custom-element-name": "^1.0.1",
|
||||
"nwsapi": "^2.2.4",
|
||||
"parse5": "^7.1.2",
|
||||
"rrweb-cssom": "^0.6.0",
|
||||
"saxes": "^6.0.0",
|
||||
"symbol-tree": "^3.2.4",
|
||||
"tough-cookie": "^4.1.2",
|
||||
"w3c-xmlserializer": "^4.0.0",
|
||||
"webidl-conversions": "^7.0.0",
|
||||
"whatwg-encoding": "^2.0.0",
|
||||
"whatwg-mimetype": "^3.0.0",
|
||||
"whatwg-url": "^12.0.1",
|
||||
"ws": "^8.13.0",
|
||||
"xml-name-validator": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ws": {
|
||||
"version": "8.13.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
|
||||
"integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"jsonc-parser": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
|
||||
@@ -3804,6 +4302,15 @@
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.35",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"mime-db": "1.52.0"
|
||||
}
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
@@ -3903,6 +4410,12 @@
|
||||
"boolbase": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"nwsapi": {
|
||||
"version": "2.2.7",
|
||||
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
|
||||
"integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
|
||||
"dev": true
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
@@ -3939,6 +4452,15 @@
|
||||
"is-hexadecimal": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"parse5": {
|
||||
"version": "7.1.2",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
|
||||
"integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"entities": "^4.4.0"
|
||||
}
|
||||
},
|
||||
"parseley": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.0.tgz",
|
||||
@@ -4087,12 +4609,27 @@
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"rrweb-cssom": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
|
||||
"integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
|
||||
"dev": true
|
||||
},
|
||||
"safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||
"dev": true
|
||||
},
|
||||
"saxes": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
|
||||
"integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"xmlchars": "^2.2.0"
|
||||
}
|
||||
},
|
||||
"selderee": {
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz",
|
||||
@@ -4191,6 +4728,12 @@
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"symbol-tree": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
|
||||
"dev": true
|
||||
},
|
||||
"test-exclude": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
|
||||
@@ -4237,6 +4780,15 @@
|
||||
"url-parse": "^1.5.3"
|
||||
}
|
||||
},
|
||||
"tr46": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz",
|
||||
"integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"punycode": "^2.3.0"
|
||||
}
|
||||
},
|
||||
"ts-error": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/ts-error/-/ts-error-1.0.6.tgz",
|
||||
@@ -4356,6 +4908,15 @@
|
||||
"cross-fetch": "^3.0.6"
|
||||
}
|
||||
},
|
||||
"w3c-xmlserializer": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
|
||||
"integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"xml-name-validator": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"webidl-conversions": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||
@@ -4383,6 +4944,16 @@
|
||||
"integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"whatwg-url": {
|
||||
"version": "12.0.1",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz",
|
||||
"integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tr46": "^4.1.1",
|
||||
"webidl-conversions": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"which": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||
@@ -4411,7 +4982,20 @@
|
||||
"ws": {
|
||||
"version": "7.5.9",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
|
||||
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q=="
|
||||
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
|
||||
"requires": {}
|
||||
},
|
||||
"xml-name-validator": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
|
||||
"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
|
||||
"dev": true
|
||||
},
|
||||
"xmlchars": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
|
||||
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
|
||||
"dev": true
|
||||
},
|
||||
"yallist": {
|
||||
"version": "4.0.0",
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
"cross-env": "^7.0.3",
|
||||
"dotenv": "^16.0.1",
|
||||
"eventsource": "^2.0.2",
|
||||
"happy-dom": "^10.9.0",
|
||||
"isomorphic-fetch": "^3.0.0",
|
||||
"jsdom": "^22.1.0",
|
||||
"mockdate": "^3.0.5",
|
||||
"otplib": "^12.0.1",
|
||||
"refractor": "^4.8.1",
|
||||
|
||||
@@ -284,8 +284,8 @@ class Database {
|
||||
return (await this.storage.read("lastSynced")) || 0;
|
||||
}
|
||||
|
||||
sync(full = true, force = false) {
|
||||
return this.syncer.start(full, force);
|
||||
sync(full = true, force = false, lastSynced = null) {
|
||||
return this.syncer.start(full, force, lastSynced);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -47,18 +47,25 @@ class Settings {
|
||||
|
||||
async merge(remoteItem, lastSynced) {
|
||||
if (this._settings.dateModified > lastSynced) {
|
||||
this._settings.id = remoteItem.id;
|
||||
this._settings.groupOptions = {
|
||||
...this._settings.groupOptions,
|
||||
...remoteItem.groupOptions
|
||||
};
|
||||
this._settings.toolbarConfig = {
|
||||
...this._settings.toolbarConfig,
|
||||
...remoteItem.toolbarConfig
|
||||
};
|
||||
this._settings.aliases = {
|
||||
...this._settings.aliases,
|
||||
...remoteItem.aliases
|
||||
this._settings = {
|
||||
...this._settings,
|
||||
...(remoteItem.deleted
|
||||
? {}
|
||||
: {
|
||||
...remoteItem,
|
||||
groupOptions: {
|
||||
...this._settings.groupOptions,
|
||||
...remoteItem.groupOptions
|
||||
},
|
||||
toolbarConfig: {
|
||||
...this._settings.toolbarConfig,
|
||||
...remoteItem.toolbarConfig
|
||||
},
|
||||
aliases: {
|
||||
...this._settings.aliases,
|
||||
...remoteItem.aliases
|
||||
}
|
||||
})
|
||||
};
|
||||
this._settings.dateModified = Date.now();
|
||||
} else {
|
||||
@@ -73,6 +80,7 @@ class Settings {
|
||||
* @param {GroupOptions} groupOptions
|
||||
*/
|
||||
async setGroupOptions(key, groupOptions) {
|
||||
if (!this._settings.groupOptions) this._settings.groupOptions = {};
|
||||
this._settings.groupOptions[key] = groupOptions;
|
||||
await this._saveSettings();
|
||||
}
|
||||
@@ -84,7 +92,7 @@ class Settings {
|
||||
*/
|
||||
getGroupOptions(key) {
|
||||
return (
|
||||
this._settings.groupOptions[key] || {
|
||||
(this._settings.groupOptions && this._settings.groupOptions[key]) || {
|
||||
groupBy: "default",
|
||||
sortBy:
|
||||
key === "trash"
|
||||
@@ -103,6 +111,7 @@ class Settings {
|
||||
* @param {{preset: string, config?: any[]}} config
|
||||
*/
|
||||
async setToolbarConfig(key, config) {
|
||||
if (!this._settings.toolbarConfig) this._settings.toolbarConfig = {};
|
||||
this._settings.toolbarConfig[key] = config;
|
||||
await this._saveSettings();
|
||||
}
|
||||
@@ -113,16 +122,17 @@ class Settings {
|
||||
* @returns {{preset: string, config: any[]}}
|
||||
*/
|
||||
getToolbarConfig(key) {
|
||||
return this._settings.toolbarConfig[key];
|
||||
return this._settings.toolbarConfig && this._settings.toolbarConfig[key];
|
||||
}
|
||||
|
||||
async setAlias(id, name) {
|
||||
if (!this._settings.aliases) this._settings.aliases = {};
|
||||
this._settings.aliases[id] = name;
|
||||
await this._saveSettings();
|
||||
}
|
||||
|
||||
getAlias(id) {
|
||||
return this._settings.aliases[id];
|
||||
return this._settings.aliases && this._settings.aliases[id];
|
||||
}
|
||||
/**
|
||||
* Setting to -1 means never clear trash.
|
||||
@@ -162,20 +172,20 @@ class Settings {
|
||||
}
|
||||
|
||||
async setTitleFormat(format) {
|
||||
this._settings.titleFormat = format || "Note $date$ $time$";
|
||||
this._settings.titleFormat = format;
|
||||
await this._saveSettings();
|
||||
}
|
||||
|
||||
getTitleFormat() {
|
||||
return this._settings.titleFormat;
|
||||
return this._settings.titleFormat || "Note $date$ $time$";
|
||||
}
|
||||
|
||||
getDateFormat() {
|
||||
return this._settings.dateFormat;
|
||||
return this._settings.dateFormat || "DD-MM-YYYY";
|
||||
}
|
||||
|
||||
async setDateFormat(format) {
|
||||
this._settings.dateFormat = format || "DD-MM-YYYY";
|
||||
this._settings.dateFormat = format;
|
||||
await this._saveSettings();
|
||||
}
|
||||
/**
|
||||
@@ -183,11 +193,11 @@ class Settings {
|
||||
* @returns {"12-hour" | "24-hour"}
|
||||
*/
|
||||
getTimeFormat() {
|
||||
return this._settings.timeFormat;
|
||||
return this._settings.timeFormat || "12-hour";
|
||||
}
|
||||
|
||||
async setTimeFormat(format) {
|
||||
this._settings.timeFormat = format || "12-hour";
|
||||
this._settings.timeFormat = format;
|
||||
await this._saveSettings();
|
||||
}
|
||||
|
||||
@@ -195,31 +205,26 @@ class Settings {
|
||||
this._settings = {
|
||||
type: "settings",
|
||||
id: getId(),
|
||||
groupOptions: {},
|
||||
toolbarConfig: {},
|
||||
aliases: {},
|
||||
dateModified: 0,
|
||||
dateCreated: 0,
|
||||
trashCleanupInterval: 7,
|
||||
titleFormat: "Note $date$ $time$",
|
||||
timeFormat: "12-hour",
|
||||
dateFormat: "DD-MM-YYYY",
|
||||
...(settings || {})
|
||||
};
|
||||
}
|
||||
|
||||
async _saveSettings(updateDateModified = true) {
|
||||
if (updateDateModified) {
|
||||
this._settings.dateModified = Date.now();
|
||||
this._settings.synced = false;
|
||||
}
|
||||
|
||||
await this._db.storage.write("settings", this._settings);
|
||||
this._db.eventManager.publish(
|
||||
EVENTS.databaseUpdated,
|
||||
"settings",
|
||||
this._settings
|
||||
);
|
||||
|
||||
if (updateDateModified) {
|
||||
this._settings.dateModified = Date.now();
|
||||
this._settings.synced = false;
|
||||
}
|
||||
delete this._settings.remote;
|
||||
|
||||
await this._db.storage.write("settings", this._settings);
|
||||
}
|
||||
}
|
||||
export default Settings;
|
||||
|
||||
@@ -41,10 +41,10 @@ test("newly created note should get included in collector", () =>
|
||||
}
|
||||
|
||||
expect(items).toHaveLength(2);
|
||||
expect(items[0].items[0].id).toBe(noteId);
|
||||
expect(items[0].type).toBe("note");
|
||||
expect(items[1].type).toBe("content");
|
||||
expect(items[1].items[0].id).toBe(db.notes.note(noteId).data.contentId);
|
||||
expect(items[0].type).toBe("content");
|
||||
expect(items[0].items[0].id).toBe(db.notes.note(noteId).data.contentId);
|
||||
expect(items[1].items[0].id).toBe(noteId);
|
||||
expect(items[1].type).toBe("note");
|
||||
}));
|
||||
|
||||
test("edited note after last synced time should get included in collector", () =>
|
||||
@@ -103,6 +103,6 @@ test("localOnly note should get included as a deleted item in collector", () =>
|
||||
|
||||
expect(items[0].items[0].length).toBe(104);
|
||||
expect(items[1].items[0].length).toBe(104);
|
||||
expect(items[0].type).toBe("note");
|
||||
expect(items[1].type).toBe("content");
|
||||
expect(items[0].type).toBe("content");
|
||||
expect(items[1].type).toBe("note");
|
||||
}));
|
||||
|
||||
@@ -21,7 +21,6 @@ import { CURRENT_DATABASE_VERSION } from "../../common";
|
||||
import { logger } from "../../logger";
|
||||
|
||||
const SYNC_COLLECTIONS_MAP = {
|
||||
attachment: "attachments",
|
||||
note: "notes",
|
||||
notebook: "notebooks",
|
||||
shortcut: "shortcuts",
|
||||
@@ -44,21 +43,24 @@ class Collector {
|
||||
|
||||
async *collect(chunkSize, lastSyncedTimestamp, isForceSync) {
|
||||
const key = await this._db.user.getEncryptionKey();
|
||||
for (const itemType in SYNC_COLLECTIONS_MAP) {
|
||||
const collectionKey = SYNC_COLLECTIONS_MAP[itemType];
|
||||
const collection = this._db[collectionKey]._collection;
|
||||
for (const chunk of collection.iterateSync(chunkSize)) {
|
||||
const items = await this.prepareChunk(
|
||||
chunk,
|
||||
lastSyncedTimestamp,
|
||||
isForceSync,
|
||||
key,
|
||||
itemType
|
||||
);
|
||||
if (!items) continue;
|
||||
yield items;
|
||||
}
|
||||
}
|
||||
|
||||
const settings = await this.prepareChunk(
|
||||
[this._db.settings.raw],
|
||||
lastSyncedTimestamp,
|
||||
isForceSync,
|
||||
key,
|
||||
"settings"
|
||||
);
|
||||
if (settings) yield settings;
|
||||
|
||||
const attachments = await this.prepareChunk(
|
||||
this._db.attachments.syncable,
|
||||
lastSyncedTimestamp,
|
||||
isForceSync,
|
||||
key,
|
||||
"attachment"
|
||||
);
|
||||
if (attachments) yield attachments;
|
||||
|
||||
for (const itemType in ASYNC_COLLECTIONS_MAP) {
|
||||
const collectionKey = ASYNC_COLLECTIONS_MAP[itemType];
|
||||
@@ -76,15 +78,21 @@ class Collector {
|
||||
}
|
||||
}
|
||||
|
||||
const items = await this.prepareChunk(
|
||||
[this._db.settings.raw],
|
||||
lastSyncedTimestamp,
|
||||
isForceSync,
|
||||
key,
|
||||
"settings"
|
||||
);
|
||||
if (!items) return;
|
||||
yield items;
|
||||
for (const itemType in SYNC_COLLECTIONS_MAP) {
|
||||
const collectionKey = SYNC_COLLECTIONS_MAP[itemType];
|
||||
const collection = this._db[collectionKey]._collection;
|
||||
for (const chunk of collection.iterateSync(chunkSize)) {
|
||||
const items = await this.prepareChunk(
|
||||
chunk,
|
||||
lastSyncedTimestamp,
|
||||
isForceSync,
|
||||
key,
|
||||
itemType
|
||||
);
|
||||
if (!items) continue;
|
||||
yield items;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async prepareChunk(chunk, lastSyncedTimestamp, isForceSync, key, itemType) {
|
||||
|
||||
@@ -54,10 +54,10 @@ export default class SyncManager {
|
||||
this._db = db;
|
||||
}
|
||||
|
||||
async start(full, force) {
|
||||
async start(full, force, serverLastSynced) {
|
||||
try {
|
||||
await this.sync.autoSync.start();
|
||||
await this.sync.start(full, force);
|
||||
await this.sync.start(full, force, serverLastSynced);
|
||||
return true;
|
||||
} catch (e) {
|
||||
var isHubException = e.message.includes("HubException:");
|
||||
@@ -155,9 +155,6 @@ class Sync {
|
||||
if (this.connection.state !== signalr.HubConnectionState.Connected)
|
||||
return;
|
||||
|
||||
count += chunk.items.length;
|
||||
sendSyncProgressEvent(this.db.eventManager, "download", count);
|
||||
|
||||
clearTimeout(remoteSyncTimeout);
|
||||
remoteSyncTimeout = setTimeout(() => {
|
||||
this.db.eventManager.publish(EVENTS.syncAborted);
|
||||
@@ -252,11 +249,11 @@ class Sync {
|
||||
if (this.connection.state !== signalr.HubConnectionState.Connected)
|
||||
return;
|
||||
|
||||
await this.processChunk(chunk, key, dbLastSynced);
|
||||
|
||||
count += chunk.items.length;
|
||||
sendSyncProgressEvent(this.db.eventManager, `download`, count);
|
||||
|
||||
await this.processChunk(chunk, key, dbLastSynced);
|
||||
|
||||
return true;
|
||||
});
|
||||
const serverResponse = await this.connection.invoke(
|
||||
@@ -313,7 +310,7 @@ class Sync {
|
||||
}
|
||||
}
|
||||
if (!isSyncInitialized) return;
|
||||
await this.connection.send("SyncCompleted", newLastSynced);
|
||||
await this.connection.invoke("SyncCompleted", newLastSynced);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -323,6 +320,11 @@ class Sync {
|
||||
if (lastSynced > storedLastSynced)
|
||||
await this.db.storage.write("lastSynced", lastSynced);
|
||||
this.db.eventManager.publish(EVENTS.syncCompleted);
|
||||
|
||||
// refresh monographs on sync completed
|
||||
await this.db.monographs.init();
|
||||
// refresh topic references
|
||||
this.db.notes.topicReferences.rebuild();
|
||||
}
|
||||
|
||||
async cancel() {
|
||||
@@ -359,13 +361,13 @@ class Sync {
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
async onPushCompleted(lastSynced) {
|
||||
// refresh monographs on sync completed
|
||||
await this.db.monographs.init();
|
||||
// refresh topic references
|
||||
this.db.notes.topicReferences.rebuild();
|
||||
|
||||
await this.start(false, false, lastSynced);
|
||||
onPushCompleted(lastSynced) {
|
||||
this.db.eventManager.publish(
|
||||
EVENTS.databaseSyncRequested,
|
||||
false,
|
||||
false,
|
||||
lastSynced
|
||||
);
|
||||
}
|
||||
|
||||
async processChunk(chunk, key, dbLastSynced, notify = false) {
|
||||
@@ -422,8 +424,9 @@ class Sync {
|
||||
*/
|
||||
async pushItem(item, newLastSynced) {
|
||||
await this.checkConnection();
|
||||
await this.connection.send("PushItems", item, newLastSynced);
|
||||
return true; // () === 1;
|
||||
return (
|
||||
(await this.connection.invoke("PushItems", item, newLastSynced)) === 1
|
||||
);
|
||||
}
|
||||
|
||||
async checkConnection() {
|
||||
|
||||
@@ -39,6 +39,12 @@ export default class Attachments extends Collection {
|
||||
merge(localAttachment, remoteAttachment) {
|
||||
if (remoteAttachment.deleted) return remoteAttachment;
|
||||
|
||||
if (
|
||||
!localAttachment ||
|
||||
remoteAttachment.dateModified > localAttachment.dateModified
|
||||
)
|
||||
return remoteAttachment;
|
||||
|
||||
if (localAttachment && localAttachment.noteIds) {
|
||||
remoteAttachment.noteIds = setManipulator.union(
|
||||
remoteAttachment.noteIds,
|
||||
|
||||
@@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { logger } from "../logger";
|
||||
import { makeId } from "../utils/id";
|
||||
import Collection from "./collection";
|
||||
|
||||
@@ -190,6 +191,7 @@ export default class Relations extends Collection {
|
||||
}
|
||||
|
||||
async cleanup() {
|
||||
const relationsLogger = logger.scope("Relations");
|
||||
const relations = this._collection.getItems();
|
||||
for (const relation of relations) {
|
||||
const references = [relation.to, relation.from];
|
||||
@@ -210,7 +212,13 @@ export default class Relations extends Collection {
|
||||
this._db.trash.exists(reference.id);
|
||||
break;
|
||||
}
|
||||
if (!exists) await this.remove(relation.id);
|
||||
if (!exists) {
|
||||
relationsLogger.debug(
|
||||
`Removing relation during cleanup`,
|
||||
relation.id
|
||||
);
|
||||
await this.remove(relation.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ hello
|
||||
`;
|
||||
|
||||
exports[`convert HTML to markdown with codeblocks > html-to-md-codeblocks.md 1`] = `
|
||||
"Typescript is one of those languages that appear to be very simple. It's often described as \\"Javascript with types\\" and it fits that name very well. However, what many don't realize starting out with Typescript is that Typescript *is *a language and like all other languages it has it's own \\"secrets\\", it's own set of quirks.
|
||||
"Typescript is one of those languages that appear to be very simple. It's often described as \\"Javascript with types\\" and it fits that name very well. However, what many don't realize starting out with Typescript is that Typescript*is *a language and like all other languages it has it's own \\"secrets\\", it's own set of quirks.
|
||||
|
||||
When I started out with Typescript a few years back, I absolutely hated it. It was unnecessary, a box of clutter, making me write code that would never actually run. I hated defining interfaces, typing out all my functions, and thinking in terms I was not used to as a Javascript developer. Before Javascript, I had coded in C# and I had never really liked C# (I still don't) mostly for the huge amounts of boilerplate and magic involved. Typescript is heavily inspired by C# and seeing that contaminate the Javascript ecosystem irked me no end.
|
||||
|
||||
@@ -135,15 +135,15 @@ exports[`convert HTML to markdown with outlinelists > html-to-md-outlinelists.md
|
||||
|
||||
- but sometimes
|
||||
|
||||
- It doesn't
|
||||
- It doesn't
|
||||
|
||||
- what do I do?
|
||||
- what do I do?
|
||||
|
||||
- I need to do something!
|
||||
- I need to do something!
|
||||
|
||||
<li data-type=\\"outlineListItem\\"><p>Makes no sense!</p></li>
|
||||
- Makes no sense!
|
||||
|
||||
<li data-type=\\"outlineListItem\\"><p>Yes it doesn't!</p></li>
|
||||
- Yes it doesn't!
|
||||
|
||||
"
|
||||
`;
|
||||
@@ -154,10 +154,6 @@ exports[`convert HTML to markdown with tables > html-to-md-tables.md 1`] = `
|
||||
| Frequency | 1/week or 2/week |
|
||||
| Types | Feature intro, upgrade promo, one time emails |
|
||||
| | |
|
||||
| Goal | To introduce various features of the app to the user and to convert a user on trial or basic plan to upgrade. |
|
||||
| Frequency | 1/week or 2/week |
|
||||
| Types | Feature intro, upgrade promo, one time emails |
|
||||
| | |
|
||||
|
||||
## Emails
|
||||
|
||||
@@ -203,9 +199,6 @@ what
|
||||
| -------------- | -------------- | -------------- |
|
||||
| dsvsajkdb | dskajvbsadj | kjdasvbkj |
|
||||
| daskvbkdsa | kdsajvbsajkd | kjdsavbdsa |
|
||||
| sdsdavav | daskvjbdsva | vsadjkvsadbvjk |
|
||||
| dsvsajkdb | dskajvbsadj | kjdasvbkj |
|
||||
| daskvbkdsa | kdsajvbsajkd | kjdsavbdsa |
|
||||
|
||||
"
|
||||
`;
|
||||
@@ -221,11 +214,11 @@ exports[`convert HTML to markdown with tasklists > html-to-md-tasklists.md 1`] =
|
||||
|
||||
- [ ] Task item 4
|
||||
|
||||
- [ ] Sub task item 1
|
||||
- [ ] Sub task item 1
|
||||
|
||||
- [ ] Sub task item 2
|
||||
- [ ] Sub task item 2
|
||||
|
||||
<li class=\\"checklist--item\\"><p>Task Item 5</p></li>
|
||||
- [ ] Task Item 5
|
||||
|
||||
Nene
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ class Migrator {
|
||||
await migrateCollection(collection.dbCollection, version);
|
||||
|
||||
const index = (await collection.index()) || [];
|
||||
const toAdd = [];
|
||||
for (var i = 0; i < index.length; ++i) {
|
||||
let id = index[i];
|
||||
let item = get(id, collection.dbCollection.collectionName);
|
||||
@@ -43,14 +44,6 @@ class Migrator {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (collection.dbCollection.collectionName)
|
||||
sendMigrationProgressEvent(
|
||||
db.eventManager,
|
||||
collection.dbCollection.collectionName,
|
||||
index.length,
|
||||
i + 1
|
||||
);
|
||||
|
||||
// check if item is permanently deleted or just a soft delete
|
||||
if (item.deleted && !item.type) {
|
||||
await collection.dbCollection?._collection?.addItem(item);
|
||||
@@ -68,8 +61,10 @@ class Migrator {
|
||||
if (migrated || restore) {
|
||||
if (collection.type === "settings") {
|
||||
await collection.dbCollection.merge(item);
|
||||
} else if (item.type === "note") {
|
||||
toAdd.push(await db.notes.merge(null, item));
|
||||
} else if (collection.dbCollection._collection) {
|
||||
await collection.dbCollection._collection?.addItem(item);
|
||||
toAdd.push(item);
|
||||
} else {
|
||||
throw new Error(
|
||||
`No idea how to handle this kind of item: ${item.type}.`
|
||||
@@ -78,10 +73,21 @@ class Migrator {
|
||||
|
||||
// if id changed after migration, we need to delete the old one.
|
||||
if (item.id !== itemId) {
|
||||
await collection.dbCollection?._collection?.deleteItem(itemId);
|
||||
await collection.dbCollection._collection.deleteItem(itemId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (toAdd.length > 0) {
|
||||
await collection.dbCollection._collection.setItems(toAdd);
|
||||
if (collection.dbCollection.collectionName)
|
||||
sendMigrationProgressEvent(
|
||||
db.eventManager,
|
||||
collection.dbCollection.collectionName,
|
||||
toAdd.length,
|
||||
toAdd.length
|
||||
);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -79,21 +79,19 @@ class DatabaseLogWriter {
|
||||
|
||||
async read() {
|
||||
const logKeys = await this.storage.getAllKeys();
|
||||
const logs = [];
|
||||
const keys = [];
|
||||
for (let key of logKeys) {
|
||||
if (key.startsWith(this.key)) logs.push(await this.storage.read(key));
|
||||
if (key.startsWith(this.key)) keys.push(key);
|
||||
}
|
||||
return logs;
|
||||
return Object.values(await this.storage.readMulti(keys));
|
||||
}
|
||||
|
||||
async flush() {
|
||||
if (Object.keys(this.queue).length === 0) return;
|
||||
const queueCopy = { ...this.queue };
|
||||
const queueCopy = Object.entries(this.queue);
|
||||
this.queue = {};
|
||||
|
||||
for (let key in queueCopy) {
|
||||
await this.storage.write(key, queueCopy[key]);
|
||||
}
|
||||
await this.storage.writeMulti(queueCopy);
|
||||
}
|
||||
|
||||
async rotate() {
|
||||
|
||||
@@ -20,6 +20,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
import { parseHTML } from "../../html-parser";
|
||||
import HTMLTemplate from "./template";
|
||||
|
||||
const replaceableAttributes = {
|
||||
'data-float="true" data-align="right"': 'align="right"',
|
||||
'data-float="true" data-align="left"': 'align="left"',
|
||||
'data-align="left"':
|
||||
'style="margin-right:auto;margin-left:0;display: block;"',
|
||||
'data-align="right"':
|
||||
'style="margin-left:auto;margin-right:0;display: block;"',
|
||||
'data-align="center"':
|
||||
'style="margin-left:auto;margin-right:auto;display: block;"'
|
||||
};
|
||||
|
||||
const LANGUAGE_REGEX = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i;
|
||||
|
||||
async function buildHTML(templateData) {
|
||||
@@ -28,9 +39,14 @@ async function buildHTML(templateData) {
|
||||
|
||||
async function preprocessHTML(templateData) {
|
||||
const { content } = templateData;
|
||||
const doc = parseHTML(
|
||||
content.replaceAll(/<p([^>]*)><\/p>/gm, "<p$1><br/></p>")
|
||||
);
|
||||
|
||||
let html = content.replaceAll(/<p([^>]*)><\/p>/gm, "<p$1><br/></p>");
|
||||
console.log(html);
|
||||
for (const attribute in replaceableAttributes) {
|
||||
html = html.replaceAll(attribute, replaceableAttributes[attribute]);
|
||||
}
|
||||
|
||||
const doc = parseHTML(html);
|
||||
|
||||
const mathBlocks = doc.querySelectorAll(".math-block.math-node");
|
||||
const mathInlines = doc.querySelectorAll(".math-inline.math-node");
|
||||
|
||||
@@ -23,7 +23,6 @@ const IS_E2E = process.env.IS_E2E === "true";
|
||||
|
||||
export default defineConfig({
|
||||
test: {
|
||||
environment: "happy-dom",
|
||||
setupFiles: ["./globals.setup.js"],
|
||||
coverage: {
|
||||
reporter: ["text", "html"]
|
||||
|
||||
48
packages/editor-mobile/__e2e__/device-utils.ts
Normal file
48
packages/editor-mobile/__e2e__/device-utils.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
This file is part of the Notesnook project (https://notesnook.com/)
|
||||
|
||||
Copyright (C) 2023 Streetwriters (Private) Limited
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { AndroidDevice } from "@playwright/test";
|
||||
export type DeviceSize = {
|
||||
width: number;
|
||||
height: number;
|
||||
/**
|
||||
* Convert device independent height to device specific height
|
||||
*/
|
||||
h: (percentage: number) => number;
|
||||
/**
|
||||
* Convert device independent width to device specific width
|
||||
*/
|
||||
w: (percentage: number) => number;
|
||||
};
|
||||
export async function getDeviceSize(
|
||||
device: AndroidDevice
|
||||
): Promise<DeviceSize> {
|
||||
const output = (await device.shell(`wm size`)).toString("utf-8");
|
||||
const parsed = /(\d+)x(\d+)/g.exec(output);
|
||||
if (!parsed) throw new Error("Failed to find device size.");
|
||||
|
||||
const width = parseInt(parsed[1]);
|
||||
const height = parseInt(parsed[2]);
|
||||
return {
|
||||
height,
|
||||
width,
|
||||
h: (p) => p * height,
|
||||
w: (p) => p * width
|
||||
};
|
||||
}
|
||||
97
packages/editor-mobile/__e2e__/editor.mobile.test.ts
Normal file
97
packages/editor-mobile/__e2e__/editor.mobile.test.ts
Normal file
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
This file is part of the Notesnook project (https://notesnook.com/)
|
||||
|
||||
Copyright (C) 2023 Streetwriters (Private) Limited
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { expect, test } from "@playwright/test";
|
||||
import { androidTest } from "./test-utils";
|
||||
import { getKey, setKeyboard, type } from "./keyboard-utils";
|
||||
|
||||
androidTest(
|
||||
"backspacing from new line should not change caret position",
|
||||
async ({ chrome, device, keyboards, baseURL, size }, info) => {
|
||||
info.setTimeout(30000);
|
||||
|
||||
for (const keyboard of keyboards) {
|
||||
await test.step(keyboard.name, async () => {
|
||||
if (!(await setKeyboard(device, keyboard.ime)))
|
||||
throw new Error("Failed to set keyboard.");
|
||||
|
||||
const page = await chrome.newPage();
|
||||
|
||||
await page.goto(baseURL);
|
||||
|
||||
await page.focus(".ProseMirror");
|
||||
|
||||
await page.waitForTimeout(1000);
|
||||
|
||||
await type(page, device, keyboard, size, "HI\nLA");
|
||||
|
||||
await page.waitForTimeout(100);
|
||||
|
||||
await page.keyboard.press("ArrowLeft");
|
||||
await page.keyboard.press("ArrowLeft");
|
||||
|
||||
await device.input.tap(getKey(keyboard, size, "DEL"));
|
||||
|
||||
await page.waitForTimeout(100);
|
||||
|
||||
await type(page, device, keyboard, size, "HO");
|
||||
|
||||
expect((await page.textContent(".ProseMirror"))?.toLowerCase()).toBe(
|
||||
"hihola"
|
||||
);
|
||||
|
||||
await page.close();
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
androidTest(
|
||||
"pressing enter after entering a word should move the caret to the new line",
|
||||
async ({ chrome, device, keyboards, baseURL, size }, info) => {
|
||||
info.setTimeout(30000);
|
||||
|
||||
for (const keyboard of keyboards) {
|
||||
await test.step(keyboard.name, async () => {
|
||||
if (!(await setKeyboard(device, keyboard.ime)))
|
||||
throw new Error("Failed to set keyboard.");
|
||||
|
||||
const page = await chrome.newPage();
|
||||
|
||||
await page.goto(baseURL);
|
||||
|
||||
await page.focus(".ProseMirror");
|
||||
|
||||
await page.waitForTimeout(1000);
|
||||
|
||||
await type(page, device, keyboard, size, "HELLO");
|
||||
|
||||
await page.waitForTimeout(100);
|
||||
|
||||
await type(page, device, keyboard, size, "\nWORLD");
|
||||
|
||||
expect((await page.innerHTML(".ProseMirror"))?.toLowerCase()).toBe(
|
||||
'<p data-spacing="double">hello</p><p data-spacing="double">world</p>'
|
||||
);
|
||||
|
||||
await page.close();
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
213
packages/editor-mobile/__e2e__/keyboard-utils.ts
Normal file
213
packages/editor-mobile/__e2e__/keyboard-utils.ts
Normal file
@@ -0,0 +1,213 @@
|
||||
/*
|
||||
This file is part of the Notesnook project (https://notesnook.com/)
|
||||
|
||||
Copyright (C) 2023 Streetwriters (Private) Limited
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { AndroidDevice, Page } from "@playwright/test";
|
||||
import { DeviceSize } from "./device-utils";
|
||||
|
||||
export type Keyboard = {
|
||||
name: string;
|
||||
ime: string;
|
||||
pkg: string;
|
||||
layout: {
|
||||
start: number;
|
||||
end: number;
|
||||
keyHeight: number;
|
||||
keyWidth: number;
|
||||
rowMargin: number;
|
||||
specialKeyWidth: number;
|
||||
spaceBarWidth: number;
|
||||
rows: number;
|
||||
};
|
||||
};
|
||||
|
||||
const KEYBOARD_ROWS = [
|
||||
"QWERTYUIOP".split(""),
|
||||
["", ..."ASDFGHJKL".split(""), ""],
|
||||
["SHIFT", ..."ZXCVBNM".split(""), "DEL"]
|
||||
];
|
||||
|
||||
const SPECIAL_KEY_MAP = {
|
||||
"\n": "Enter",
|
||||
".": "Period",
|
||||
" ": "Space"
|
||||
} as const;
|
||||
|
||||
/**
|
||||
* Pixels to device independent height (percentage based)
|
||||
*/
|
||||
function h(px: number) {
|
||||
return px / 2460;
|
||||
}
|
||||
/**
|
||||
* Pixels to device independent width (percentage based)
|
||||
*/
|
||||
function w(px: number) {
|
||||
return px / 1080;
|
||||
}
|
||||
|
||||
export const SUPPORTED_KEYBOARDS: Keyboard[] = [
|
||||
{
|
||||
name: "Gboard",
|
||||
ime: "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME",
|
||||
pkg: "com.google.android.inputmethod.latin",
|
||||
|
||||
layout: {
|
||||
start: h(1700), //,
|
||||
end: h(2300),
|
||||
keyHeight: h(120),
|
||||
keyWidth: w(100),
|
||||
rowMargin: h(30),
|
||||
specialKeyWidth: w(100 + 50),
|
||||
spaceBarWidth: w(100 * 4),
|
||||
rows: 4
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "OpenBoard",
|
||||
ime: "org.dslul.openboard.inputmethod.latin/.LatinIME",
|
||||
pkg: "org.dslul.openboard.inputmethod.latin",
|
||||
layout: {
|
||||
start: h(1650),
|
||||
end: h(2300),
|
||||
keyHeight: h(110),
|
||||
rowMargin: h(40),
|
||||
keyWidth: w(100),
|
||||
specialKeyWidth: w(100 + 50),
|
||||
spaceBarWidth: w(100 * 4),
|
||||
rows: 4
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "SwiftKey",
|
||||
ime: "com.touchtype.swiftkey/com.touchtype.KeyboardService",
|
||||
pkg: "com.touchtype.swiftkey",
|
||||
layout: {
|
||||
start: h(1800),
|
||||
end: h(2300),
|
||||
keyHeight: h(100),
|
||||
rowMargin: h(10),
|
||||
keyWidth: w(100),
|
||||
specialKeyWidth: w(100 + 50),
|
||||
spaceBarWidth: w(100 * 4.5),
|
||||
rows: 4
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Grammarly Keyboard",
|
||||
ime: "com.grammarly.android.keyboard/.LatinIME",
|
||||
pkg: "com.grammarly.android.keyboard",
|
||||
layout: {
|
||||
start: h(1700),
|
||||
end: h(2300),
|
||||
keyHeight: h(120),
|
||||
rowMargin: h(25),
|
||||
keyWidth: w(100),
|
||||
specialKeyWidth: w(140),
|
||||
spaceBarWidth: w(100 * 4),
|
||||
rows: 4
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
export async function getKeyboards(device: AndroidDevice) {
|
||||
const imeList = (await device.shell("ime list -s -a"))
|
||||
.toString("utf-8")
|
||||
.split("\n");
|
||||
return SUPPORTED_KEYBOARDS.filter((keyboard) =>
|
||||
imeList.includes(keyboard.ime)
|
||||
);
|
||||
}
|
||||
|
||||
export async function setKeyboard(device: AndroidDevice, ime: string) {
|
||||
const output = (await device.shell(`ime set ${ime}`)).toString("utf-8");
|
||||
return output.includes(`Input method ${ime} selected`);
|
||||
}
|
||||
|
||||
export async function type(
|
||||
page: Page,
|
||||
device: AndroidDevice,
|
||||
keyboard: Keyboard,
|
||||
deviceSize: DeviceSize,
|
||||
str: string
|
||||
) {
|
||||
for (const char of str) {
|
||||
const specialKey = SPECIAL_KEY_MAP[char];
|
||||
if (specialKey)
|
||||
await device.input.tap(getSpecialKey(keyboard, deviceSize, specialKey));
|
||||
else await device.input.tap(getKey(keyboard, deviceSize, char));
|
||||
|
||||
await page.waitForTimeout(50);
|
||||
}
|
||||
}
|
||||
|
||||
export function getKey(
|
||||
keyboard: Keyboard,
|
||||
deviceSize: DeviceSize,
|
||||
key: string
|
||||
) {
|
||||
key = key.toUpperCase();
|
||||
const rowIndex = KEYBOARD_ROWS.findIndex((r) => r.includes(key));
|
||||
if (rowIndex < 0) throw new Error(`Key (${key}) not found in any row.`);
|
||||
const keyIndex = KEYBOARD_ROWS[rowIndex].indexOf(key);
|
||||
const specialKeysCount = KEYBOARD_ROWS[rowIndex].filter(
|
||||
(k, i) => k.length > 1 && i <= keyIndex
|
||||
).length;
|
||||
const emptySpaceCount = KEYBOARD_ROWS[rowIndex].filter(
|
||||
(k, i) => k.length < 1 && i <= keyIndex
|
||||
).length;
|
||||
|
||||
const keyHeight = deviceSize.h(keyboard.layout.keyHeight);
|
||||
const rowMargin = deviceSize.h(keyboard.layout.rowMargin);
|
||||
const keyWidth = deviceSize.w(keyboard.layout.keyWidth);
|
||||
const specialKeyWidth = deviceSize.w(keyboard.layout.specialKeyWidth);
|
||||
const start = deviceSize.h(keyboard.layout.start);
|
||||
|
||||
const specialKeysX = specialKeysCount * specialKeyWidth;
|
||||
const emptySpaceX = emptySpaceCount * (keyWidth / 2);
|
||||
const keysX = (keyIndex + 1 - specialKeysCount - emptySpaceCount) * keyWidth;
|
||||
|
||||
const y = (rowIndex + 1) * (keyHeight + rowMargin) + start;
|
||||
|
||||
//console.log(key, keysX + specialKeysX + emptySpaceX, y);
|
||||
|
||||
return { y, x: keysX + specialKeysX + emptySpaceX };
|
||||
}
|
||||
|
||||
export function getSpecialKey(
|
||||
keyboard: Keyboard,
|
||||
deviceSize: DeviceSize,
|
||||
key: "Space" | "Enter" | "Period"
|
||||
) {
|
||||
const keyHeight = deviceSize.h(keyboard.layout.keyHeight);
|
||||
const rowMargin = deviceSize.h(keyboard.layout.rowMargin);
|
||||
const keyWidth = deviceSize.w(keyboard.layout.keyWidth);
|
||||
const specialKeyWidth = deviceSize.w(keyboard.layout.specialKeyWidth);
|
||||
const spaceBarWidth = deviceSize.w(keyboard.layout.spaceBarWidth);
|
||||
const start = deviceSize.h(keyboard.layout.start);
|
||||
|
||||
return {
|
||||
x:
|
||||
key === "Space"
|
||||
? specialKeyWidth + 2 * keyWidth + spaceBarWidth / 2
|
||||
: key === "Period"
|
||||
? specialKeyWidth + 3 * keyWidth + spaceBarWidth
|
||||
: specialKeyWidth + 4 * keyWidth + spaceBarWidth,
|
||||
y: keyboard.layout.rows * (keyHeight + rowMargin) + start
|
||||
};
|
||||
}
|
||||
83
packages/editor-mobile/__e2e__/test-utils.ts
Normal file
83
packages/editor-mobile/__e2e__/test-utils.ts
Normal file
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
This file is part of the Notesnook project (https://notesnook.com/)
|
||||
|
||||
Copyright (C) 2023 Streetwriters (Private) Limited
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import {
|
||||
AndroidDevice,
|
||||
BrowserContext,
|
||||
TestInfo,
|
||||
_android as android,
|
||||
test
|
||||
} from "@playwright/test";
|
||||
import { Keyboard, SUPPORTED_KEYBOARDS, getKeyboards } from "./keyboard-utils";
|
||||
import * as ip from "ip";
|
||||
import { DeviceSize, getDeviceSize } from "./device-utils";
|
||||
|
||||
type AndroidTestArgs = {
|
||||
chrome: BrowserContext;
|
||||
device: AndroidDevice;
|
||||
baseURL: string;
|
||||
keyboards: Keyboard[];
|
||||
size: DeviceSize;
|
||||
};
|
||||
|
||||
const SERVER_ADDRESS = `http://${ip.address("Wi-Fi", "ipv4")}:3000`;
|
||||
|
||||
export function androidTest(
|
||||
title: string,
|
||||
testFunction: (
|
||||
args: AndroidTestArgs,
|
||||
testInfo: TestInfo
|
||||
) => Promise<void> | void
|
||||
) {
|
||||
test(title, async ({ channel: _ }, testInfo) => {
|
||||
const [device] = await android.devices();
|
||||
if (!device) {
|
||||
console.error("Please connect an Android device or emulator.");
|
||||
return;
|
||||
}
|
||||
|
||||
const keyboards = await getKeyboards(device);
|
||||
if (!keyboards.length) {
|
||||
console.error(
|
||||
"No supported keyboard found. Please install one of",
|
||||
SUPPORTED_KEYBOARDS
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const deviceSize = await getDeviceSize(device);
|
||||
|
||||
await device.shell("am force-stop com.android.chrome");
|
||||
const chrome = await device.launchBrowser({});
|
||||
|
||||
await testFunction(
|
||||
{
|
||||
chrome: chrome,
|
||||
device,
|
||||
keyboards,
|
||||
baseURL: SERVER_ADDRESS,
|
||||
size: deviceSize
|
||||
},
|
||||
testInfo
|
||||
);
|
||||
|
||||
await device.shell("am force-stop com.android.chrome");
|
||||
await device.close();
|
||||
});
|
||||
}
|
||||
179
packages/editor-mobile/package-lock.json
generated
179
packages/editor-mobile/package-lock.json
generated
@@ -21,14 +21,17 @@
|
||||
"zustand": "^3.6.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.37.1",
|
||||
"@testing-library/jest-dom": "^5.16.0",
|
||||
"@testing-library/react": "^11.2.7",
|
||||
"@testing-library/user-event": "^12.8.3",
|
||||
"@types/ip": "^1.1.0",
|
||||
"@types/jest": "^27.0.3",
|
||||
"@types/node": "^16.11.11",
|
||||
"@types/react": "^17.0.2",
|
||||
"@types/react-dom": "^17.0.2",
|
||||
"env-cmd": "^10.1.0",
|
||||
"ip": "^1.1.8",
|
||||
"react-error-overlay": "6.0.9",
|
||||
"react-scripts": "^5.0.1",
|
||||
"web-vitals": "^1.1.2"
|
||||
@@ -40,40 +43,43 @@
|
||||
"hasInstallScript": true,
|
||||
"license": "GPL-3.0-or-later",
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.10.0",
|
||||
"@emotion/react": "11.11.1",
|
||||
"@notesnook/core": "file:../core",
|
||||
"@notesnook/theme": "file:../theme",
|
||||
"@notesnook/ui": "file:../ui",
|
||||
"@social-embed/lib": "^0.0.2-next.1",
|
||||
"@theme-ui/components": ">=0.14.0",
|
||||
"@theme-ui/core": ">=0.14.0",
|
||||
"@tiptap/core": "2.0.3",
|
||||
"@tiptap/extension-character-count": "2.0.3",
|
||||
"@tiptap/extension-color": "2.0.3",
|
||||
"@tiptap/extension-font-family": "2.0.3",
|
||||
"@tiptap/extension-history": "2.0.3",
|
||||
"@tiptap/extension-horizontal-rule": "2.0.3",
|
||||
"@tiptap/extension-link": "2.0.3",
|
||||
"@tiptap/extension-placeholder": "2.0.3",
|
||||
"@tiptap/extension-subscript": "2.0.3",
|
||||
"@tiptap/extension-superscript": "2.0.3",
|
||||
"@tiptap/extension-table": "2.0.3",
|
||||
"@tiptap/extension-table-cell": "2.0.3",
|
||||
"@tiptap/extension-table-header": "2.0.3",
|
||||
"@tiptap/extension-table-row": "2.0.3",
|
||||
"@tiptap/extension-task-item": "2.0.3",
|
||||
"@tiptap/extension-task-list": "2.0.3",
|
||||
"@tiptap/extension-text-align": "2.0.3",
|
||||
"@tiptap/extension-text-style": "2.0.3",
|
||||
"@tiptap/extension-underline": "2.0.3",
|
||||
"@tiptap/pm": "2.0.3",
|
||||
"@tiptap/starter-kit": "2.0.3",
|
||||
"@tiptap/core": "2.1.7",
|
||||
"@tiptap/extension-character-count": "2.1.7",
|
||||
"@tiptap/extension-color": "2.1.7",
|
||||
"@tiptap/extension-font-family": "2.1.7",
|
||||
"@tiptap/extension-history": "2.1.7",
|
||||
"@tiptap/extension-horizontal-rule": "2.1.7",
|
||||
"@tiptap/extension-link": "2.1.7",
|
||||
"@tiptap/extension-list-keymap": "2.1.7",
|
||||
"@tiptap/extension-placeholder": "2.1.7",
|
||||
"@tiptap/extension-subscript": "2.1.7",
|
||||
"@tiptap/extension-superscript": "2.1.7",
|
||||
"@tiptap/extension-table": "2.1.7",
|
||||
"@tiptap/extension-table-cell": "2.1.7",
|
||||
"@tiptap/extension-table-header": "2.1.7",
|
||||
"@tiptap/extension-table-row": "2.1.7",
|
||||
"@tiptap/extension-task-item": "2.1.7",
|
||||
"@tiptap/extension-task-list": "2.1.7",
|
||||
"@tiptap/extension-text-align": "2.1.7",
|
||||
"@tiptap/extension-text-style": "2.1.7",
|
||||
"@tiptap/extension-underline": "2.1.7",
|
||||
"@tiptap/pm": "2.1.7",
|
||||
"@tiptap/starter-kit": "2.1.7",
|
||||
"clipboard-polyfill": "4.0.0",
|
||||
"detect-indent": "^7.0.0",
|
||||
"entities": "^4.5.0",
|
||||
"katex": "0.16.4",
|
||||
"nanoid": "^4.0.1",
|
||||
"prism-themes": "^1.9.0",
|
||||
"prosemirror-codemark": "^0.4.1",
|
||||
"prosemirror-codemark": "^0.4.2",
|
||||
"prosemirror-view": "^1.31.7",
|
||||
"re-resizable": "^6.9.9",
|
||||
"react-colorful": "^5.5.1",
|
||||
"react-modal": "3.13.1",
|
||||
@@ -3705,6 +3711,25 @@
|
||||
"resolved": "../theme",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/@playwright/test": {
|
||||
"version": "1.37.1",
|
||||
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.37.1.tgz",
|
||||
"integrity": "sha512-bq9zTli3vWJo8S3LwB91U0qDNQDpEXnw7knhxLM0nwDvexQAwx9tO8iKDZSqqneVq+URd/WIoz+BALMqUTgdSg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*",
|
||||
"playwright-core": "1.37.1"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@pmmmwh/react-refresh-webpack-plugin": {
|
||||
"version": "0.5.10",
|
||||
"resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz",
|
||||
@@ -4390,6 +4415,15 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/ip": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/ip/-/ip-1.1.0.tgz",
|
||||
"integrity": "sha512-dwNe8gOoF70VdL6WJBwVHtQmAX4RMd62M+mAB9HQFjG1/qiCLM/meRy95Pd14FYBbEDwCq7jgJs89cHpLBu4HQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/istanbul-lib-coverage": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
|
||||
@@ -10201,6 +10235,12 @@
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/ip": {
|
||||
"version": "1.1.8",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
|
||||
"integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/ipaddr.js": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
|
||||
@@ -14167,6 +14207,18 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/playwright-core": {
|
||||
"version": "1.37.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.37.1.tgz",
|
||||
"integrity": "sha512-17EuQxlSIYCmEMwzMqusJ2ztDgJePjrbttaefgdsiqeLWidjYz9BxXaTaZWxH1J95SHGk6tjE+dwgWILJoUZfA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"playwright-core": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
}
|
||||
},
|
||||
"node_modules/popmotion": {
|
||||
"version": "11.0.3",
|
||||
"resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz",
|
||||
@@ -21577,7 +21629,7 @@
|
||||
"@notesnook/editor": {
|
||||
"version": "file:../editor",
|
||||
"requires": {
|
||||
"@emotion/react": "^11.10.0",
|
||||
"@emotion/react": "11.11.1",
|
||||
"@mdi/js": "^7.2.96",
|
||||
"@mdi/react": "^1.6.1",
|
||||
"@notesnook/core": "file:../core",
|
||||
@@ -21586,27 +21638,28 @@
|
||||
"@social-embed/lib": "^0.0.2-next.1",
|
||||
"@theme-ui/components": ">=0.14.0",
|
||||
"@theme-ui/core": ">=0.14.0",
|
||||
"@tiptap/core": "2.0.3",
|
||||
"@tiptap/extension-character-count": "2.0.3",
|
||||
"@tiptap/extension-color": "2.0.3",
|
||||
"@tiptap/extension-font-family": "2.0.3",
|
||||
"@tiptap/extension-history": "2.0.3",
|
||||
"@tiptap/extension-horizontal-rule": "2.0.3",
|
||||
"@tiptap/extension-link": "2.0.3",
|
||||
"@tiptap/extension-placeholder": "2.0.3",
|
||||
"@tiptap/extension-subscript": "2.0.3",
|
||||
"@tiptap/extension-superscript": "2.0.3",
|
||||
"@tiptap/extension-table": "2.0.3",
|
||||
"@tiptap/extension-table-cell": "2.0.3",
|
||||
"@tiptap/extension-table-header": "2.0.3",
|
||||
"@tiptap/extension-table-row": "2.0.3",
|
||||
"@tiptap/extension-task-item": "2.0.3",
|
||||
"@tiptap/extension-task-list": "2.0.3",
|
||||
"@tiptap/extension-text-align": "2.0.3",
|
||||
"@tiptap/extension-text-style": "2.0.3",
|
||||
"@tiptap/extension-underline": "2.0.3",
|
||||
"@tiptap/pm": "2.0.3",
|
||||
"@tiptap/starter-kit": "2.0.3",
|
||||
"@tiptap/core": "2.1.7",
|
||||
"@tiptap/extension-character-count": "2.1.7",
|
||||
"@tiptap/extension-color": "2.1.7",
|
||||
"@tiptap/extension-font-family": "2.1.7",
|
||||
"@tiptap/extension-history": "2.1.7",
|
||||
"@tiptap/extension-horizontal-rule": "2.1.7",
|
||||
"@tiptap/extension-link": "2.1.7",
|
||||
"@tiptap/extension-list-keymap": "2.1.7",
|
||||
"@tiptap/extension-placeholder": "2.1.7",
|
||||
"@tiptap/extension-subscript": "2.1.7",
|
||||
"@tiptap/extension-superscript": "2.1.7",
|
||||
"@tiptap/extension-table": "2.1.7",
|
||||
"@tiptap/extension-table-cell": "2.1.7",
|
||||
"@tiptap/extension-table-header": "2.1.7",
|
||||
"@tiptap/extension-table-row": "2.1.7",
|
||||
"@tiptap/extension-task-item": "2.1.7",
|
||||
"@tiptap/extension-task-list": "2.1.7",
|
||||
"@tiptap/extension-text-align": "2.1.7",
|
||||
"@tiptap/extension-text-style": "2.1.7",
|
||||
"@tiptap/extension-underline": "2.1.7",
|
||||
"@tiptap/pm": "2.1.7",
|
||||
"@tiptap/starter-kit": "2.1.7",
|
||||
"@types/katex": "^0.14.0",
|
||||
"@types/prismjs": "^1.26.0",
|
||||
"@types/react": "17.0.2",
|
||||
@@ -21616,14 +21669,16 @@
|
||||
"@types/tinycolor2": "^1.4.3",
|
||||
"clipboard-polyfill": "4.0.0",
|
||||
"detect-indent": "^7.0.0",
|
||||
"entities": "^4.5.0",
|
||||
"framer-motion": "^6.5.1",
|
||||
"happy-dom": "^8.9.0",
|
||||
"isomorphic-fetch": "^3.0.0",
|
||||
"katex": "0.16.4",
|
||||
"nanoid": "^4.0.1",
|
||||
"prism-themes": "^1.9.0",
|
||||
"prosemirror-codemark": "^0.4.1",
|
||||
"prosemirror-codemark": "^0.4.2",
|
||||
"prosemirror-test-builder": "^1.1.0",
|
||||
"prosemirror-view": "^1.31.7",
|
||||
"re-resizable": "^6.9.9",
|
||||
"react": "17.0.2",
|
||||
"react-colorful": "^5.5.1",
|
||||
@@ -21656,6 +21711,17 @@
|
||||
"zustand": "^4.3.8"
|
||||
}
|
||||
},
|
||||
"@playwright/test": {
|
||||
"version": "1.37.1",
|
||||
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.37.1.tgz",
|
||||
"integrity": "sha512-bq9zTli3vWJo8S3LwB91U0qDNQDpEXnw7knhxLM0nwDvexQAwx9tO8iKDZSqqneVq+URd/WIoz+BALMqUTgdSg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*",
|
||||
"fsevents": "2.3.2",
|
||||
"playwright-core": "1.37.1"
|
||||
}
|
||||
},
|
||||
"@pmmmwh/react-refresh-webpack-plugin": {
|
||||
"version": "0.5.10",
|
||||
"resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz",
|
||||
@@ -22148,6 +22214,15 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/ip": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/ip/-/ip-1.1.0.tgz",
|
||||
"integrity": "sha512-dwNe8gOoF70VdL6WJBwVHtQmAX4RMd62M+mAB9HQFjG1/qiCLM/meRy95Pd14FYBbEDwCq7jgJs89cHpLBu4HQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/istanbul-lib-coverage": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
|
||||
@@ -26560,6 +26635,12 @@
|
||||
"side-channel": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"ip": {
|
||||
"version": "1.1.8",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
|
||||
"integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
|
||||
"dev": true
|
||||
},
|
||||
"ipaddr.js": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
|
||||
@@ -29564,6 +29645,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"playwright-core": {
|
||||
"version": "1.37.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.37.1.tgz",
|
||||
"integrity": "sha512-17EuQxlSIYCmEMwzMqusJ2ztDgJePjrbttaefgdsiqeLWidjYz9BxXaTaZWxH1J95SHGk6tjE+dwgWILJoUZfA==",
|
||||
"dev": true
|
||||
},
|
||||
"popmotion": {
|
||||
"version": "11.0.3",
|
||||
"resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user