Merge branch 'dev' into mobile_profile_switcher

pull/6976/head
Laurent Cozic 2022-11-05 15:19:57 +00:00 committed by GitHub
commit f1b4557b2f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
71 changed files with 2576 additions and 2407 deletions

View File

@ -8,6 +8,22 @@ jobs:
os: [macos-latest, ubuntu-latest, windows-2019]
steps:
# Trying to fix random networking issues on Windows
# https://github.com/actions/runner-images/issues/1187#issuecomment-686735760
- name: Disable TCP/UDP offload on Windows
if: runner.os == 'Windows'
run: Disable-NetAdapterChecksumOffload -Name * -TcpIPv4 -UdpIPv4 -TcpIPv6 -UdpIPv6
- name: Disable TCP/UDP offload on Linux
if: runner.os == 'Linux'
run: sudo ethtool -K eth0 tx off rx off
- name: Disable TCP/UDP offload on macOS
if: runner.os == 'macOS'
run: |
sudo sysctl -w net.link.generic.system.hwcksum_tx=0
sudo sysctl -w net.link.generic.system.hwcksum_rx=0
# Silence apt-get update errors (for example when a module doesn't
# exist) since otherwise it will make the whole build fails, even though
# it might work without update. libsecret-1-dev is required for keytar -
@ -48,7 +64,7 @@ jobs:
- uses: olegtarasov/get-tag@v2.1
- uses: actions/setup-node@v2
with:
node-version: '16'
node-version: '18'
- name: Install Yarn
run: |
@ -130,7 +146,7 @@ jobs:
- uses: actions/setup-node@v2
with:
node-version: '16'
node-version: '18'
- name: Install Yarn
run: |

View File

@ -10,9 +10,9 @@
"license": "ISC",
"devDependencies": {
"@ephox/oxide-icons-tools": "^2.1.1",
"gulp": "^4.0.2",
"gulp": "4.0.2",
"gulp-clean": "^0.4.0",
"prompts": "^2.2.1"
},
"iconPackName": "Joplin"
}
}

View File

@ -2,7 +2,7 @@
# Build stage
# =============================================================================
FROM node:16-bullseye AS builder
FROM node:18-bullseye AS builder
RUN apt-get update \
&& apt-get install -y \

View File

@ -2,16 +2,6 @@
[![Donate using PayPal](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=E8JMYD2LQ8MMA&lc=GB&item_name=Joplin+Development&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted) [![Sponsor on GitHub](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/GitHub-Badge.svg)](https://github.com/sponsors/laurent22/) [![Become a patron](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Patreon-Badge.svg)](https://www.patreon.com/joplin) [![Donate using IBAN](https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Donate-IBAN.svg)](https://joplinapp.org/donate/#donations)
<!-- DONATELINKS -->
* * *
Joplin will have [its first Meetup on 30 August 2022](https://discourse.joplinapp.org/t/joplin-first-meetup-on-30-august/26808)! Come and join us at the Old Thameside Inn next to London Bridge!
* * *
🌞 Joplin participates in **Google Summer of Code 2022**! More info on [the announcement post](https://github.com/laurent22/joplin/blob/dev/readme/news/20220308-gsoc2022-start.md). 🌞
* * *
<img width="64" src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/LinuxIcons/256x256.png" align="left" /> **Joplin** is a free, open source note taking and to-do application, which can handle a large number of notes organised into notebooks. The notes are searchable, can be copied, tagged and modified either from the applications directly or from your own text editor. The notes are in [Markdown format](#markdown).
Notes exported from Evernote [can be imported](#importing) into Joplin, including the formatted content (which is converted to Markdown), resources (images, attachments, etc.) and complete metadata (geolocation, updated time, created time, etc.). Plain Markdown files can also be imported.

View File

@ -62,30 +62,30 @@
}
},
"devDependencies": {
"@seiyab/eslint-plugin-react-hooks": "^4.5.1-alpha.5",
"@typescript-eslint/eslint-plugin": "^5.33.1",
"@typescript-eslint/parser": "^5.33.1",
"cspell": "^5.20.0",
"eslint": "^8.22.0",
"eslint-interactive": "^10.0.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-promise": "^6.0.1",
"eslint-plugin-react": "^7.30.1",
"fs-extra": "^8.1.0",
"glob": "^7.1.6",
"gulp": "^4.0.2",
"husky": "^3.0.2",
"lerna": "^3.22.1",
"lint-staged": "^9.2.1",
"madge": "^4.0.2",
"typedoc": "^0.17.8",
"@seiyab/eslint-plugin-react-hooks": "4.5.1-alpha.5",
"@typescript-eslint/eslint-plugin": "5.33.1",
"@typescript-eslint/parser": "5.33.1",
"cspell": "5.20.0",
"eslint": "8.22.0",
"eslint-interactive": "10.0.0",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-promise": "6.0.1",
"eslint-plugin-react": "7.30.1",
"fs-extra": "8.1.0",
"glob": "7.2.0",
"gulp": "4.0.2",
"husky": "3.1.0",
"lerna": "3.22.1",
"lint-staged": "9.5.0",
"madge": "4.0.2",
"typedoc": "0.17.8",
"typescript": "4.7.4"
},
"dependencies": {
"@types/fs-extra": "^9.0.13",
"http-server": "^0.12.3",
"node-gyp": "^8.4.1",
"nodemon": "^2.0.9"
"@types/fs-extra": "9.0.13",
"http-server": "0.13.0",
"node-gyp": "8.4.1",
"nodemon": "2.0.15"
},
"packageManager": "yarn@3.1.1"
"packageManager": "yarn@3.2.4"
}

View File

@ -42,39 +42,39 @@
"dependencies": {
"@joplin/lib": "~2.9",
"@joplin/renderer": "~2.9",
"aws-sdk": "^2.588.0",
"chalk": "^4.1.0",
"compare-version": "^0.1.2",
"fs-extra": "^5.0.0",
"html-entities": "^1.2.1",
"image-type": "^3.0.0",
"keytar": "^7.0.0",
"md5": "^2.2.1",
"node-rsa": "^1.1.1",
"open": "^7.0.4",
"proper-lockfile": "^2.0.1",
"read-chunk": "^2.1.0",
"server-destroy": "^1.0.1",
"sharp": "^0.26.2",
"sprintf-js": "^1.1.2",
"sqlite3": "^5.0.2",
"string-padding": "^1.0.2",
"strip-ansi": "^4.0.0",
"tcp-port-used": "^1.0.2",
"terminal-kit": "^1.30.0",
"aws-sdk": "2.1043.0",
"chalk": "4.1.2",
"compare-version": "0.1.2",
"fs-extra": "5.0.0",
"html-entities": "1.4.0",
"image-type": "3.1.0",
"keytar": "7.7.0",
"md5": "2.3.0",
"node-rsa": "1.1.1",
"open": "7.4.2",
"proper-lockfile": "2.0.1",
"read-chunk": "2.1.0",
"server-destroy": "1.0.1",
"sharp": "0.31.1",
"sprintf-js": "1.1.2",
"sqlite3": "5.0.2",
"string-padding": "1.0.2",
"strip-ansi": "4.0.0",
"tcp-port-used": "1.0.2",
"terminal-kit": "1.49.4",
"tkwidgets": "0.5.27",
"url-parse": "^1.4.7",
"word-wrap": "^1.2.3",
"yargs-parser": "^7.0.0"
"url-parse": "1.5.3",
"word-wrap": "1.2.3",
"yargs-parser": "7.0.0"
},
"devDependencies": {
"@joplin/tools": "~2.9",
"@types/fs-extra": "^9.0.6",
"@types/jest": "^26.0.15",
"@types/node": "^14.14.6",
"gulp": "^4.0.2",
"jest": "^26.6.3",
"temp": "^0.9.1",
"typescript": "^4.0.5"
"@types/fs-extra": "9.0.13",
"@types/jest": "26.0.24",
"@types/node": "14.18.0",
"gulp": "4.0.2",
"jest": "26.6.3",
"temp": "0.9.4",
"typescript": "4.5.2"
}
}

View File

@ -12,16 +12,16 @@
],
"devDependencies": {
"@types/node": "^14.0.14",
"chalk": "^4.1.0",
"chalk": "4.1.2",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"yargs": "^16.2.0"
"yargs": "16.2.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -14,18 +14,18 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
},
"dependencies": {
"left-pad": "^1.3.0"
"left-pad": "1.3.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -12,16 +12,16 @@
],
"devDependencies": {
"@types/node": "^14.0.14",
"chalk": "^4.1.0",
"chalk": "4.1.2",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"yargs": "^16.2.0"
"yargs": "16.2.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -12,16 +12,16 @@
],
"devDependencies": {
"@types/node": "^14.0.14",
"chalk": "^4.1.0",
"chalk": "4.1.2",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"yargs": "^16.2.0"
"yargs": "16.2.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -12,16 +12,16 @@
],
"devDependencies": {
"@types/node": "^14.0.14",
"chalk": "^4.1.0",
"chalk": "4.1.2",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"yargs": "^16.2.0"
"yargs": "16.2.0"
}
}
}

View File

@ -12,16 +12,16 @@
],
"devDependencies": {
"@types/node": "^14.0.14",
"chalk": "^4.1.0",
"chalk": "4.1.2",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"yargs": "^16.2.0"
"yargs": "16.2.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -14,15 +14,15 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
}
}
}

View File

@ -14,18 +14,18 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
},
"dependencies": {
"uslug": "^1.0.4"
}
}
}

View File

@ -14,18 +14,18 @@
"devDependencies": {
"@types/node": "^14.0.14",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"chalk": "^4.1.0",
"yargs": "^16.2.0"
"chalk": "4.1.2",
"yargs": "16.2.0"
},
"dependencies": {
"left-pad": "^1.3.0"
"left-pad": "1.3.0"
}
}
}

View File

@ -24,6 +24,19 @@ const getClientEnvironment = require('./env');
const ModuleNotFoundPlugin = require('react-dev-utils/ModuleNotFoundPlugin');
const ForkTsCheckerWebpackPlugin = require('react-dev-utils/ForkTsCheckerWebpackPlugin');
const typescriptFormatter = require('react-dev-utils/typescriptFormatter');
const md5 = require('md5');
class HashGen {
update(data) {
this.data_ = data;
}
digest() {
return md5(escape(this.data_));
}
}
const postcssNormalize = require('postcss-normalize');
@ -166,6 +179,8 @@ module.exports = function(webpackEnv) {
// changing JS code would still trigger a refresh.
].filter(Boolean),
output: {
// Needed to fix this: https://www.reddit.com/r/webdev/comments/qd14bm/node_17_currently_breaks_most_webpack/
hashFunction: HashGen,
// The build folder.
path: isEnvProduction ? paths.appBuild : undefined,
// Add /* filename */ comments to generated require()s in the output.

View File

@ -20,8 +20,8 @@
"babel-preset-react-app": "^9.1.1",
"camelcase": "^5.3.1",
"case-sensitive-paths-webpack-plugin": "2.3.0",
"css-loader": "3.4.2",
"dotenv": "8.2.0",
"css-loader": "3.6.0",
"dotenv": "8.6.0",
"dotenv-expand": "5.1.0",
"file-loader": "4.3.0",
"fs-extra": "^8.1.0",
@ -38,14 +38,14 @@
"postcss-loader": "3.0.0",
"postcss-normalize": "8.0.1",
"postcss-preset-env": "6.7.1",
"postcss-safe-parser": "4.0.1",
"postcss-safe-parser": "4.0.2",
"react": "^16.12.0",
"react-app-polyfill": "^1.0.6",
"react-dev-utils": "^10.1.0",
"react-dom": "^16.12.0",
"react-redux": "^5.0.7",
"redux": "^4.0.0",
"resolve": "1.15.0",
"resolve": "1.22.1",
"resolve-url-loader": "^3.1.3",
"sass-loader": "8.0.2",
"semver": "6.3.0",
@ -61,6 +61,7 @@
"devDependencies": {
"cra-build-watch": "^3.4.0",
"fs-extra": "^6.0.1",
"md5": "^2.3.0",
"react-scripts": "^3.3.1"
}
},
@ -3126,17 +3127,6 @@
"eslint": ">= 4.12.1"
}
},
"node_modules/babel-eslint/node_modules/resolve": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
"integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
"dependencies": {
"path-parse": "^1.0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/babel-extract-comments": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz",
@ -3286,17 +3276,6 @@
"node": ">=8"
}
},
"node_modules/babel-plugin-macros/node_modules/resolve": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
"integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
"dependencies": {
"path-parse": "^1.0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/babel-plugin-macros/node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@ -3984,6 +3963,15 @@
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
},
"node_modules/charenc": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
"integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/chokidar": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
@ -4840,6 +4828,15 @@
"semver": "bin/semver"
}
},
"node_modules/crypt": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
"integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/crypto-browserify": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
@ -4946,22 +4943,23 @@
}
},
"node_modules/css-loader": {
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz",
"integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==",
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
"integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
"dependencies": {
"camelcase": "^5.3.1",
"cssesc": "^3.0.0",
"icss-utils": "^4.1.1",
"loader-utils": "^1.2.3",
"normalize-path": "^3.0.0",
"postcss": "^7.0.23",
"postcss": "^7.0.32",
"postcss-modules-extract-imports": "^2.0.0",
"postcss-modules-local-by-default": "^3.0.2",
"postcss-modules-scope": "^2.1.1",
"postcss-modules-scope": "^2.2.0",
"postcss-modules-values": "^3.0.0",
"postcss-value-parser": "^4.0.2",
"schema-utils": "^2.6.0"
"postcss-value-parser": "^4.1.0",
"schema-utils": "^2.7.0",
"semver": "^6.3.0"
},
"engines": {
"node": ">= 8.9.0"
@ -5663,11 +5661,11 @@
}
},
"node_modules/dotenv": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
"integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
"engines": {
"node": ">=8"
"node": ">=10"
}
},
"node_modules/dotenv-expand": {
@ -6454,18 +6452,6 @@
"react-is": "^16.8.1"
}
},
"node_modules/eslint-plugin-react/node_modules/resolve": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
"dev": true,
"dependencies": {
"path-parse": "^1.0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/eslint-scope": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
@ -8375,10 +8361,9 @@
}
},
"node_modules/is-core-module": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz",
"integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==",
"dev": true,
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
"integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"dependencies": {
"has": "^1.0.3"
},
@ -10662,6 +10647,17 @@
"node": ">=0.10.0"
}
},
"node_modules/md5": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
"integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
"dev": true,
"dependencies": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
}
},
"node_modules/md5.js": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
@ -10913,19 +10909,6 @@
"node": ">=8"
}
},
"node_modules/meow/node_modules/resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"dev": true,
"dependencies": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/meow/node_modules/semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@ -12488,9 +12471,9 @@
}
},
"node_modules/path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-to-regexp": {
"version": "0.1.7",
@ -12528,6 +12511,11 @@
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"node_modules/picocolors": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
"integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="
},
"node_modules/picomatch": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz",
@ -12645,20 +12633,19 @@
}
},
"node_modules/postcss": {
"version": "7.0.26",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz",
"integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==",
"version": "7.0.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
"dependencies": {
"chalk": "^2.4.2",
"source-map": "^0.6.1",
"supports-color": "^6.1.0"
"picocolors": "^0.2.1",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=6.0.0"
},
"funding": {
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
}
},
"node_modules/postcss-attribute-case-insensitive": {
@ -13288,9 +13275,9 @@
}
},
"node_modules/postcss-modules-scope": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz",
"integrity": "sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==",
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
"integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
"dependencies": {
"postcss": "^7.0.6",
"postcss-selector-parser": "^6.0.0"
@ -13673,11 +13660,11 @@
}
},
"node_modules/postcss-safe-parser": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
"integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz",
"integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==",
"dependencies": {
"postcss": "^7.0.0"
"postcss": "^7.0.26"
},
"engines": {
"node": ">=6.0.0"
@ -13747,9 +13734,9 @@
}
},
"node_modules/postcss-value-parser": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
"integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ=="
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
"node_modules/postcss-values-parser": {
"version": "2.0.1",
@ -13772,17 +13759,6 @@
"node": ">=0.10.0"
}
},
"node_modules/postcss/node_modules/supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@ -16025,6 +16001,71 @@
"node": ">= 8"
}
},
"node_modules/react-scripts/node_modules/css-loader": {
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz",
"integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==",
"dev": true,
"dependencies": {
"camelcase": "^5.3.1",
"cssesc": "^3.0.0",
"icss-utils": "^4.1.1",
"loader-utils": "^1.2.3",
"normalize-path": "^3.0.0",
"postcss": "^7.0.23",
"postcss-modules-extract-imports": "^2.0.0",
"postcss-modules-local-by-default": "^3.0.2",
"postcss-modules-scope": "^2.1.1",
"postcss-modules-values": "^3.0.0",
"postcss-value-parser": "^4.0.2",
"schema-utils": "^2.6.0"
},
"engines": {
"node": ">= 8.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^4.0.0 || ^5.0.0"
}
},
"node_modules/react-scripts/node_modules/css-loader/node_modules/postcss": {
"version": "7.0.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
"dev": true,
"dependencies": {
"picocolors": "^0.2.1",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
}
},
"node_modules/react-scripts/node_modules/css-loader/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-scripts/node_modules/dotenv": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/react-scripts/node_modules/electron-to-chromium": {
"version": "1.3.427",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.427.tgz",
@ -16565,6 +16606,18 @@
"node": ">=6.0.0"
}
},
"node_modules/react-scripts/node_modules/postcss-safe-parser": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
"integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
"dev": true,
"dependencies": {
"postcss": "^7.0.0"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/react-scripts/node_modules/postcss/node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@ -16851,6 +16904,18 @@
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
"dev": true
},
"node_modules/react-scripts/node_modules/resolve": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz",
"integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==",
"dev": true,
"dependencies": {
"path-parse": "^1.0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/react-scripts/node_modules/resolve-url-loader": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz",
@ -18201,11 +18266,16 @@
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
},
"node_modules/resolve": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz",
"integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==",
"version": "1.22.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
"integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
"dependencies": {
"path-parse": "^1.0.6"
"is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@ -19765,6 +19835,17 @@
"node": ">=4"
}
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/svg-parser": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.3.tgz",
@ -24417,16 +24498,6 @@
"@babel/types": "^7.0.0",
"eslint-visitor-keys": "^1.0.0",
"resolve": "^1.12.0"
},
"dependencies": {
"resolve": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
"integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
"requires": {
"path-parse": "^1.0.6"
}
}
}
},
"babel-extract-comments": {
@ -24543,14 +24614,6 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
},
"resolve": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
"integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
"requires": {
"path-parse": "^1.0.6"
}
},
"resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@ -25148,6 +25211,12 @@
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
},
"charenc": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
"integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
"dev": true
},
"chokidar": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
@ -25824,6 +25893,12 @@
}
}
},
"crypt": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
"integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
"dev": true
},
"crypto-browserify": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
@ -25909,22 +25984,23 @@
}
},
"css-loader": {
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz",
"integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==",
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
"integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
"requires": {
"camelcase": "^5.3.1",
"cssesc": "^3.0.0",
"icss-utils": "^4.1.1",
"loader-utils": "^1.2.3",
"normalize-path": "^3.0.0",
"postcss": "^7.0.23",
"postcss": "^7.0.32",
"postcss-modules-extract-imports": "^2.0.0",
"postcss-modules-local-by-default": "^3.0.2",
"postcss-modules-scope": "^2.1.1",
"postcss-modules-scope": "^2.2.0",
"postcss-modules-values": "^3.0.0",
"postcss-value-parser": "^4.0.2",
"schema-utils": "^2.6.0"
"postcss-value-parser": "^4.1.0",
"schema-utils": "^2.7.0",
"semver": "^6.3.0"
},
"dependencies": {
"normalize-path": {
@ -26490,9 +26566,9 @@
}
},
"dotenv": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
"integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
},
"dotenv-expand": {
"version": "5.1.0",
@ -27156,15 +27232,6 @@
"object-assign": "^4.1.1",
"react-is": "^16.8.1"
}
},
"resolve": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
}
}
},
@ -28678,10 +28745,9 @@
}
},
"is-core-module": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz",
"integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==",
"dev": true,
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
"integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"requires": {
"has": "^1.0.3"
}
@ -30480,6 +30546,17 @@
"object-visit": "^1.0.0"
}
},
"md5": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
"integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
"dev": true,
"requires": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
}
},
"md5.js": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
@ -30678,16 +30755,6 @@
}
}
},
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"dev": true,
"requires": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@ -31879,9 +31946,9 @@
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"path-to-regexp": {
"version": "0.1.7",
@ -31913,6 +31980,11 @@
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"picocolors": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
"integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="
},
"picomatch": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz",
@ -31999,27 +32071,18 @@
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
},
"postcss": {
"version": "7.0.26",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz",
"integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==",
"version": "7.0.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
"requires": {
"chalk": "^2.4.2",
"source-map": "^0.6.1",
"supports-color": "^6.1.0"
"picocolors": "^0.2.1",
"source-map": "^0.6.1"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"requires": {
"has-flag": "^3.0.0"
}
}
}
},
@ -32530,9 +32593,9 @@
}
},
"postcss-modules-scope": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz",
"integrity": "sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==",
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
"integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
"requires": {
"postcss": "^7.0.6",
"postcss-selector-parser": "^6.0.0"
@ -32868,11 +32931,11 @@
}
},
"postcss-safe-parser": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
"integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz",
"integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==",
"requires": {
"postcss": "^7.0.0"
"postcss": "^7.0.26"
}
},
"postcss-selector-matches": {
@ -32932,9 +32995,9 @@
}
},
"postcss-value-parser": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
"integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ=="
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
"postcss-values-parser": {
"version": "2.0.1",
@ -34780,6 +34843,50 @@
"which": "^2.0.1"
}
},
"css-loader": {
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz",
"integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==",
"dev": true,
"requires": {
"camelcase": "^5.3.1",
"cssesc": "^3.0.0",
"icss-utils": "^4.1.1",
"loader-utils": "^1.2.3",
"normalize-path": "^3.0.0",
"postcss": "^7.0.23",
"postcss-modules-extract-imports": "^2.0.0",
"postcss-modules-local-by-default": "^3.0.2",
"postcss-modules-scope": "^2.1.1",
"postcss-modules-values": "^3.0.0",
"postcss-value-parser": "^4.0.2",
"schema-utils": "^2.6.0"
},
"dependencies": {
"postcss": {
"version": "7.0.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
"dev": true,
"requires": {
"picocolors": "^0.2.1",
"source-map": "^0.6.1"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"dotenv": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.427",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.427.tgz",
@ -35217,6 +35324,15 @@
"postcss-selector-not": "^4.0.0"
}
},
"postcss-safe-parser": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
"integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
"dev": true,
"requires": {
"postcss": "^7.0.0"
}
},
"react-dev-utils": {
"version": "10.2.1",
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz",
@ -35424,6 +35540,15 @@
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
"dev": true
},
"resolve": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz",
"integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
},
"resolve-url-loader": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz",
@ -36451,11 +36576,13 @@
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
},
"resolve": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz",
"integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==",
"version": "1.22.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
"integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
"requires": {
"path-parse": "^1.0.6"
"is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
},
"resolve-cwd": {
@ -37686,6 +37813,11 @@
"has-flag": "^3.0.0"
}
},
"supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
},
"svg-parser": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.3.tgz",

View File

@ -13,13 +13,13 @@
"babel-loader": "8.0.6",
"babel-plugin-named-asset-import": "^0.3.6",
"babel-preset-react-app": "^9.1.1",
"camelcase": "^5.3.1",
"camelcase": "5.3.1",
"case-sensitive-paths-webpack-plugin": "2.3.0",
"css-loader": "3.4.2",
"dotenv": "8.2.0",
"css-loader": "3.6.0",
"dotenv": "8.6.0",
"dotenv-expand": "5.1.0",
"file-loader": "4.3.0",
"fs-extra": "^8.1.0",
"fs-extra": "8.1.0",
"html-webpack-plugin": "4.0.0-beta.11",
"identity-obj-proxy": "3.0.0",
"jest": "24.9.0",
@ -33,14 +33,14 @@
"postcss-loader": "3.0.0",
"postcss-normalize": "8.0.1",
"postcss-preset-env": "6.7.1",
"postcss-safe-parser": "4.0.1",
"postcss-safe-parser": "4.0.2",
"react": "^16.12.0",
"react-app-polyfill": "^1.0.6",
"react-dev-utils": "^10.1.0",
"react-dom": "^16.12.0",
"react-redux": "^5.0.7",
"redux": "^4.0.0",
"resolve": "1.15.0",
"redux": "4.1.2",
"resolve": "1.22.1",
"resolve-url-loader": "^3.1.3",
"sass-loader": "8.0.2",
"semver": "6.3.0",
@ -55,7 +55,8 @@
},
"scripts": {
"start": "node scripts/start.js",
"build": "node scripts/build.js SKIP_PREFLIGHT_CHECK",
"build": "echo 'Clipper build is disabled due to disabled due to ERR_OSSL_EVP_UNSUPPORTED error on CI'",
"build_DISABLED": "node scripts/build.js SKIP_PREFLIGHT_CHECK",
"test": "node scripts/test.js --env=jsdom",
"watch": "cra-build-watch",
"postinstall": "node postinstall.js && npm run build"
@ -63,6 +64,7 @@
"devDependencies": {
"cra-build-watch": "^3.4.0",
"fs-extra": "^6.0.1",
"md5": "^2.3.0",
"react-scripts": "^3.3.1"
},
"browserslist": [
@ -124,4 +126,4 @@
"react-app"
]
}
}
}

View File

@ -107,26 +107,26 @@
"homepage": "https://github.com/laurent22/joplin#readme",
"devDependencies": {
"@joplin/tools": "~2.9",
"@testing-library/react-hooks": "^3.4.2",
"@types/jest": "^26.0.15",
"@types/node": "^14.14.6",
"@types/react": "16.9.55",
"@testing-library/react-hooks": "8.0.1",
"@types/jest": "26.0.24",
"@types/node": "14.18.0",
"@types/react": "16.14.34",
"@types/react-redux": "7.1.24",
"@types/styled-components": "5.1.4",
"ajv": "^6.5.0",
"app-builder-bin": "^1.9.11",
"babel-cli": "^6.26.0",
"babel-preset-react": "^6.24.1",
"electron": "19.0.10",
"electron-builder": "^23.0.3",
"electron-notarize": "^1.2.1",
"electron-rebuild": "^3.2.7",
"glob": "^7.1.6",
"gulp": "^4.0.2",
"jest": "^26.6.3",
"js-sha512": "^0.8.0",
"nan": "2.14.2",
"react-test-renderer": "^16.14.0",
"@types/styled-components": "5.1.26",
"ajv": "6.12.6",
"app-builder-bin": "1.11.6",
"babel-cli": "6.26.0",
"babel-preset-react": "6.24.1",
"electron": "19.1.4",
"electron-builder": "23.0.8",
"electron-notarize": "1.2.1",
"electron-rebuild": "3.2.7",
"glob": "7.2.0",
"gulp": "4.0.2",
"jest": "26.6.3",
"js-sha512": "0.8.0",
"nan": "2.17.0",
"react-test-renderer": "16.14.0",
"typescript": "4.0.5"
},
"optionalDependencies": {
@ -135,47 +135,47 @@
"7zip-bin-win": "^2.1.1"
},
"dependencies": {
"@electron/remote": "^2.0.1",
"@fortawesome/fontawesome-free": "^5.13.0",
"@joeattardi/emoji-button": "^4.6.0",
"@electron/remote": "2.0.8",
"@fortawesome/fontawesome-free": "5.15.4",
"@joeattardi/emoji-button": "4.6.4",
"@joplin/lib": "~2.9",
"@joplin/pdf-viewer": "~2.9",
"@joplin/renderer": "~2.9",
"async-mutex": "^0.1.3",
"codemirror": "^5.56.0",
"color": "^3.1.2",
"compare-versions": "^3.2.1",
"countable": "^3.0.1",
"debounce": "^1.2.0",
"electron-window-state": "^5.0.3",
"formatcoords": "^1.1.3",
"async-mutex": "0.4.0",
"codemirror": "5.64.0",
"color": "3.2.1",
"compare-versions": "3.6.0",
"countable": "3.0.1",
"debounce": "1.2.1",
"electron-window-state": "5.0.3",
"formatcoords": "1.1.3",
"fs-extra": "10.0.0",
"highlight.js": "^10.2.1",
"immer": "^7.0.5",
"keytar": "^7.0.0",
"mark.js": "^8.11.1",
"md5": "^2.2.1",
"moment": "^2.22.2",
"node-fetch": "^1.7.3",
"node-notifier": "^8.0.0",
"node-rsa": "^1.1.1",
"pretty-bytes": "^5.3.0",
"re-resizable": "^6.5.4",
"react": "16.13.1",
"react-datetime": "^2.14.0",
"react-dom": "16.9.0",
"react-redux": "5.0.7",
"react-select": "^2.4.3",
"react-toggle-button": "^2.2.0",
"react-tooltip": "^3.10.0",
"highlight.js": "10.7.3",
"immer": "7.0.15",
"keytar": "7.7.0",
"mark.js": "8.11.1",
"md5": "2.3.0",
"moment": "2.29.1",
"node-fetch": "1.7.3",
"node-notifier": "8.0.2",
"node-rsa": "1.1.1",
"pretty-bytes": "5.6.0",
"re-resizable": "6.9.1",
"react": "16.14.0",
"react-datetime": "2.16.3",
"react-dom": "16.14.0",
"react-redux": "5.1.2",
"react-select": "2.4.4",
"react-toggle-button": "2.2.0",
"react-tooltip": "3.11.6",
"redux": "3.7.2",
"reselect": "^4.0.0",
"roboto-fontface": "^0.10.0",
"smalltalk": "^2.5.1",
"sqlite3": "^5.0.2",
"styled-components": "5.1.1",
"reselect": "4.1.5",
"roboto-fontface": "0.10.0",
"smalltalk": "2.5.1",
"sqlite3": "5.0.2",
"styled-components": "5.3.6",
"styled-system": "5.1.5",
"taboverride": "^4.0.3",
"tinymce": "^5.2.0"
"taboverride": "4.0.3",
"tinymce": "5.10.2"
}
}

View File

@ -225,20 +225,20 @@ PODS:
- React-Core
- react-native-document-picker (4.3.0):
- React-Core
- react-native-geolocation (2.0.2):
- React
- react-native-geolocation (3.0.3):
- React-Core
- react-native-get-random-values (1.7.1):
- React-Core
- react-native-image-picker (4.10.0):
- React-Core
- react-native-image-resizer (1.4.5):
- React-Core
- react-native-netinfo (6.2.1):
- react-native-netinfo (9.3.6):
- React-Core
- react-native-rsa-native (2.0.4):
- React
- react-native-slider (3.0.3):
- React
- react-native-slider (4.3.3):
- React-Core
- react-native-sqlite-storage (5.0.0):
- React
- react-native-version-info (1.1.1):
@ -316,7 +316,7 @@ PODS:
- React-Core
- RNCPushNotificationIOS (1.10.1):
- React-Core
- RNDateTimePicker (3.5.2):
- RNDateTimePicker (6.5.4):
- React-Core
- RNFileViewer (2.1.4):
- React-Core
@ -531,13 +531,13 @@ SPEC CHECKSUMS:
react-native-alarm-notification: 4817a2a0d7cc2ed2acc97337ebcdf9ae2a69c9d5
react-native-camera: b8cc03e2feec0c04403d0998e37cf519d8fd4c6f
react-native-document-picker: 20f652c2402d3ddc81f396d8167c3bd978add4a2
react-native-geolocation: c956aeb136625c23e0dce0467664af2c437888c9
react-native-geolocation: 2b4052c14edff18ba402795f4ce0f2a093c4ba3e
react-native-get-random-values: 2c4ff6b44cb71291dabe9a8ae87d3877dcf387da
react-native-image-picker: 4bc9ed38c8be255b515d8c88babbaf74973f91a8
react-native-image-resizer: d9fb629a867335bdc13230ac2a58702bb8c8828f
react-native-netinfo: 3d3769f0d65de15c83a9bf1346f8be71de5a24bf
react-native-netinfo: f80db8cac2151405633324cb645c60af098ee461
react-native-rsa-native: 1f6bba06dd02f0e652a66a384c75c270f7a0062f
react-native-slider: e99fc201cefe81270fc9d81714a7a0f5e566b168
react-native-slider: 7d19220da2f2ae7cbb9aa80127cb73c597fa221f
react-native-sqlite-storage: 418ef4afc5e6df6ce3574c4617e5f0b65cffde55
react-native-version-info: a106f23009ac0db4ee00de39574eb546682579b9
react-native-webview: 0aa2cde4ee7e3e1c5fffdf64dbce9c709aa18155
@ -556,7 +556,7 @@ SPEC CHECKSUMS:
rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
RNCPushNotificationIOS: 87b8d16d3ede4532745e05b03c42cff33a36cc45
RNDateTimePicker: 7658208086d86d09e1627b5c34ba0cf237c60140
RNDateTimePicker: 93b9659fbd0fd91a4fb568bf8f5c00b0175aa1ba
RNFileViewer: 83cc066ad795b1f986791d03b56fe0ee14b6a69f
RNFS: 3ab21fa6c56d65566d1fb26c2228e2b6132e5e32
RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93

View File

@ -21,92 +21,92 @@
"@joplin/lib": "~2.9",
"@joplin/react-native-saf-x": "~2.9",
"@joplin/renderer": "~2.9",
"@react-native-community/clipboard": "^1.5.0",
"@react-native-community/datetimepicker": "^3.0.3",
"@react-native-community/geolocation": "^2.0.2",
"@react-native-community/netinfo": "^6.0.0",
"@react-native-community/push-notification-ios": "^1.6.0",
"@react-native-community/slider": "^3.0.3",
"assert-browserify": "^2.0.0",
"buffer": "^5.0.8",
"constants-browserify": "^1.0.0",
"crypto-browserify": "^3.12.0",
"events": "^3.2.0",
"joplin-rn-alarm-notification": "^1.0.5",
"@react-native-community/clipboard": "1.5.1",
"@react-native-community/datetimepicker": "6.5.4",
"@react-native-community/geolocation": "3.0.3",
"@react-native-community/netinfo": "9.3.6",
"@react-native-community/push-notification-ios": "1.10.1",
"@react-native-community/slider": "4.3.3",
"assert-browserify": "2.0.0",
"buffer": "5.7.1",
"constants-browserify": "1.0.0",
"crypto-browserify": "3.12.0",
"events": "3.3.0",
"joplin-rn-alarm-notification": "1.0.5",
"jsc-android": "241213.1.0",
"md5": "^2.2.1",
"prop-types": "^15.6.0",
"punycode": "^2.1.1",
"md5": "2.3.0",
"prop-types": "15.7.2",
"punycode": "2.1.1",
"react": "17.0.2",
"react-native": "0.66.1",
"react-native-action-button": "^2.8.5",
"react-native-camera": "^3.40.0",
"react-native-dialogbox": "^0.6.10",
"react-native-document-picker": "^4.0.0",
"react-native-dropdownalert": "^3.1.2",
"react-native-file-viewer": "^2.1.4",
"react-native-fs": "^2.16.6",
"react-native-get-random-values": "^1.7.0",
"react-native-image-picker": "^4.10.0",
"react-native-image-resizer": "^1.3.0",
"react-native-modal-datetime-picker": "^9.0.0",
"react-native-popup-menu": "^0.15.13",
"react-native-quick-actions": "^0.3.13",
"react-native-rsa-native": "^2.0.4",
"react-native-securerandom": "^1.0.0-rc.0",
"react-native-share": "^7.2.1",
"react-native-side-menu-updated": "^1.3.2",
"react-native-sqlite-storage": "^5.0.0",
"react-native-url-polyfill": "^1.3.0",
"react-native-vector-icons": "^7.1.0",
"react-native-version-info": "^1.1.0",
"react-native-webview": "^10.9.2",
"react-redux": "5.0.7",
"react-native-action-button": "2.8.5",
"react-native-camera": "3.44.3",
"react-native-dialogbox": "0.6.10",
"react-native-document-picker": "4.3.0",
"react-native-dropdownalert": "3.11.0",
"react-native-file-viewer": "2.1.4",
"react-native-fs": "2.18.0",
"react-native-get-random-values": "1.7.1",
"react-native-image-picker": "4.10.0",
"react-native-image-resizer": "1.4.5",
"react-native-modal-datetime-picker": "9.2.3",
"react-native-popup-menu": "0.15.13",
"react-native-quick-actions": "0.3.13",
"react-native-rsa-native": "2.0.4",
"react-native-securerandom": "1.0.0",
"react-native-share": "7.3.2",
"react-native-side-menu-updated": "1.3.2",
"react-native-sqlite-storage": "5.0.0",
"react-native-url-polyfill": "1.3.0",
"react-native-vector-icons": "7.1.0",
"react-native-version-info": "1.1.1",
"react-native-webview": "10.10.2",
"react-redux": "5.1.2",
"redux": "4.0.0",
"rn-fetch-blob": "^0.12.0",
"rn-fetch-blob": "0.12.0",
"stream": "0.0.2",
"stream-browserify": "^3.0.0",
"string-natural-compare": "^2.0.2",
"timers": "^0.1.1",
"url": "^0.11.0"
"stream-browserify": "3.0.0",
"string-natural-compare": "2.0.3",
"timers": "0.1.1",
"url": "0.11.0"
},
"devDependencies": {
"@babel/core": "^7.12.9",
"@babel/runtime": "^7.12.5",
"@codemirror/commands": "^6.0.0",
"@codemirror/lang-cpp": "^6.0.0",
"@codemirror/lang-html": "^6.0.0",
"@codemirror/lang-java": "^6.0.0",
"@codemirror/lang-javascript": "^6.0.0",
"@codemirror/lang-markdown": "^6.0.0",
"@codemirror/lang-php": "^6.0.0",
"@codemirror/lang-rust": "^6.0.0",
"@codemirror/language": "^6.0.0",
"@codemirror/legacy-modes": "^6.1.0",
"@codemirror/search": "^6.0.0",
"@codemirror/state": "^6.0.0",
"@codemirror/view": "^6.0.0",
"@babel/core": "7.16.0",
"@babel/runtime": "7.16.3",
"@codemirror/commands": "6.0.0",
"@codemirror/lang-cpp": "6.0.1",
"@codemirror/lang-html": "6.0.0",
"@codemirror/lang-java": "6.0.0",
"@codemirror/lang-javascript": "6.0.0",
"@codemirror/lang-markdown": "6.0.0",
"@codemirror/lang-php": "6.0.0",
"@codemirror/lang-rust": "6.0.0",
"@codemirror/language": "6.0.0",
"@codemirror/legacy-modes": "6.1.0",
"@codemirror/search": "6.0.0",
"@codemirror/state": "6.0.0",
"@codemirror/view": "6.0.0",
"@joplin/tools": "~2.9",
"@lezer/highlight": "^1.0.0",
"@types/fs-extra": "^9.0.13",
"@types/jest": "^28.1.3",
"@types/react-native": "^0.64.4",
"@types/react-redux": "^7.1.24",
"babel-plugin-module-resolver": "^4.1.0",
"execa": "^4.0.0",
"fs-extra": "^8.1.0",
"gulp": "^4.0.2",
"jest": "^28.1.1",
"jest-environment-jsdom": "^28.1.3",
"jetifier": "^1.6.5",
"jsdom": "^20.0.0",
"metro-react-native-babel-preset": "^0.66.2",
"nodemon": "^2.0.12",
"ts-jest": "^28.0.5",
"ts-loader": "^9.3.1",
"ts-node": "^10.9.1",
"typescript": "^4.7.4",
"uglify-js": "^3.13.10",
"webpack": "^5.74.0"
"@lezer/highlight": "1.0.0",
"@types/fs-extra": "9.0.13",
"@types/jest": "28.1.5",
"@types/react-native": "0.64.19",
"@types/react-redux": "7.1.24",
"babel-plugin-module-resolver": "4.1.0",
"execa": "4.1.0",
"fs-extra": "8.1.0",
"gulp": "4.0.2",
"jest": "28.1.2",
"jest-environment-jsdom": "28.1.3",
"jetifier": "1.6.8",
"jsdom": "20.0.0",
"metro-react-native-babel-preset": "0.66.2",
"nodemon": "2.0.15",
"ts-jest": "28.0.5",
"ts-loader": "9.3.1",
"ts-node": "10.9.1",
"typescript": "4.7.4",
"uglify-js": "3.14.4",
"webpack": "5.74.0"
}
}

View File

@ -39,23 +39,23 @@
"prepare": "npm run build"
},
"dependencies": {
"domelementtype": "^2.0.1",
"domhandler": "3.0.0",
"domutils": "^2.0.0",
"entities": "^2.0.0"
"domelementtype": "2.2.0",
"domhandler": "3.3.0",
"domutils": "2.8.0",
"entities": "2.2.0"
},
"devDependencies": {
"@types/jest": "^25.1.3",
"@types/node": "^13.1.1",
"@typescript-eslint/eslint-plugin": "^1.13.0",
"@typescript-eslint/parser": "^1.13.0",
"coveralls": "^3.0.1",
"eslint": "^6.0.0",
"eslint-config-prettier": "^6.0.0",
"jest": "^26.6.3",
"prettier": "^1.18.2",
"ts-jest": "^24.0.2",
"typescript": "3.8.2"
"@types/jest": "25.2.3",
"@types/node": "13.13.52",
"@typescript-eslint/eslint-plugin": "1.13.0",
"@typescript-eslint/parser": "1.13.0",
"coveralls": "3.1.1",
"eslint": "6.8.0",
"eslint-config-prettier": "6.15.0",
"jest": "26.6.3",
"prettier": "1.19.1",
"ts-jest": "24.3.0",
"typescript": "3.9.10"
},
"jest": {
"preset": "ts-jest",

View File

@ -15,8 +15,8 @@
"README.md"
],
"devDependencies": {
"standard": "^8.6.0",
"tap": "^10.5.1"
"standard": "8.6.0",
"tap": "10.7.3"
},
"gitHead": "eb4b0e64eab40a51b0895d3a40a9d8c3cb7b1b14"
}

View File

@ -8,10 +8,10 @@
},
"dependencies": {
"node-emoji": "1.11.0",
"unorm": ">= 1.0.0"
"unorm": "1.6.0"
},
"devDependencies": {
"should": ">= 0.2.1"
"should": "13.2.3"
},
"repository": {
"type": "git",

View File

@ -23,13 +23,13 @@
"npm": ">= 4.0.0"
},
"dependencies": {
"chalk": "^2.1.0",
"slugify": "^1.4.6",
"yeoman-generator": "^2.0.1",
"yosay": "^2.0.1"
"chalk": "2.4.2",
"slugify": "1.6.3",
"yeoman-generator": "2.0.5",
"yosay": "2.0.2"
},
"devDependencies": {
"jest": "^26.6.3"
"jest": "26.6.3"
},
"repository": "https://github.com/laurent22/generator-joplin",
"license": "MIT",

View File

@ -15,13 +15,13 @@
"license": "MIT",
"dependencies": {
"@joplin/fork-htmlparser2": "^4.1.41",
"css": "^3.0.0",
"datauri": "^4.1.0",
"fs-extra": "^10.0.0",
"html-entities": "^1.2.1"
"css": "3.0.0",
"datauri": "4.1.0",
"fs-extra": "10.0.0",
"html-entities": "1.4.0"
},
"devDependencies": {
"@types/fs-extra": "^9.0.6"
"@types/fs-extra": "9.0.13"
},
"gitHead": "eb4b0e64eab40a51b0895d3a40a9d8c3cb7b1b14"
}

View File

@ -16,20 +16,20 @@
"test-ci": "yarn test"
},
"devDependencies": {
"@types/fs-extra": "^9.0.6",
"@types/jest": "^26.0.15",
"@types/js-yaml": "^4.0.2",
"@types/node": "^14.14.6",
"@types/node-rsa": "^1.1.1",
"@types/react": "^17.0.20",
"clean-html": "^1.5.0",
"@types/fs-extra": "9.0.13",
"@types/jest": "26.0.24",
"@types/js-yaml": "4.0.5",
"@types/node": "14.18.0",
"@types/node-rsa": "1.1.1",
"@types/react": "17.0.37",
"clean-html": "1.5.0",
"jest": "26.6.3",
"sharp": "^0.26.2",
"typescript": "^4.0.5"
"sharp": "0.31.1",
"typescript": "4.5.2"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.34.0",
"@aws-sdk/s3-request-presigner": "^3.34.0",
"@aws-sdk/client-s3": "3.44.0",
"@aws-sdk/s3-request-presigner": "3.44.0",
"@joplin/fork-htmlparser2": "^4.1.41",
"@joplin/fork-sax": "^1.2.45",
"@joplin/fork-uslug": "^1.0.6",
@ -37,60 +37,60 @@
"@joplin/renderer": "^2.9.1",
"@joplin/turndown": "^4.0.63",
"@joplin/turndown-plugin-gfm": "^1.0.45",
"@types/nanoid": "^3.0.0",
"async-mutex": "^0.1.3",
"base-64": "^0.1.0",
"base64-stream": "^1.0.0",
"builtin-modules": "^3.1.0",
"chokidar": "^3.4.3",
"color": "3.1.2",
"compare-versions": "^3.6.0",
"css": "^3.0.0",
"diff-match-patch": "^1.0.4",
"es6-promise-pool": "^2.5.0",
"fast-deep-equal": "^3.1.3",
"@types/nanoid": "3.0.0",
"async-mutex": "0.4.0",
"base-64": "0.1.0",
"base64-stream": "1.0.0",
"builtin-modules": "3.2.0",
"chokidar": "3.5.2",
"color": "3.2.1",
"compare-versions": "3.6.0",
"css": "3.0.0",
"diff-match-patch": "1.0.5",
"es6-promise-pool": "2.5.0",
"fast-deep-equal": "3.1.3",
"fast-xml-parser": "3.21.1",
"follow-redirects": "^1.2.4",
"form-data": "^2.1.4",
"fs-extra": "^5.0.0",
"hpagent": "^1.0.0",
"html-entities": "^1.2.1",
"html-minifier": "^3.5.15",
"image-data-uri": "^2.0.0",
"image-type": "^3.0.0",
"immer": "^7.0.14",
"js-yaml": "^4.1.0",
"levenshtein": "^1.0.5",
"markdown-it": "^10.0.0",
"md5": "^2.2.1",
"md5-file": "^4.0.0",
"moment": "^2.29.1",
"multiparty": "^4.2.1",
"mustache": "^4.0.1",
"nanoid": "^3.1.12",
"node-fetch": "^1.7.1",
"node-notifier": "^8.0.0",
"node-persist": "^2.1.0",
"node-rsa": "^1.1.1",
"promise": "^7.1.1",
"follow-redirects": "1.14.5",
"form-data": "2.5.1",
"fs-extra": "5.0.0",
"hpagent": "1.0.0",
"html-entities": "1.4.0",
"html-minifier": "3.5.21",
"image-data-uri": "2.0.1",
"image-type": "3.1.0",
"immer": "7.0.15",
"js-yaml": "4.1.0",
"levenshtein": "1.0.5",
"markdown-it": "10.0.0",
"md5": "2.3.0",
"md5-file": "4.0.0",
"moment": "2.29.1",
"multiparty": "4.2.2",
"mustache": "4.2.0",
"nanoid": "3.1.30",
"node-fetch": "1.7.3",
"node-notifier": "8.0.2",
"node-persist": "2.1.0",
"node-rsa": "1.1.1",
"promise": "7.3.1",
"query-string": "4.3.4",
"re-reselect": "^4.0.0",
"read-chunk": "^2.1.0",
"redux": "^3.7.2",
"relative": "^3.0.2",
"reselect": "^4.0.0",
"server-destroy": "^1.0.1",
"sprintf-js": "^1.1.2",
"sqlite3": "^5.0.2",
"string-padding": "^1.0.2",
"string-to-stream": "^1.1.0",
"tar": "^4.4.10",
"tcp-port-used": "^0.1.2",
"re-reselect": "4.0.0",
"read-chunk": "2.1.0",
"redux": "3.7.2",
"relative": "3.0.2",
"reselect": "4.1.5",
"server-destroy": "1.0.1",
"sprintf-js": "1.1.2",
"sqlite3": "5.0.2",
"string-padding": "1.0.2",
"string-to-stream": "1.1.1",
"tar": "4.4.19",
"tcp-port-used": "0.1.2",
"uglifycss": "0.0.29",
"url-parse": "^1.4.7",
"uuid": "^3.0.1",
"word-wrap": "^1.2.3",
"xml2js": "^0.4.19"
"url-parse": "1.5.3",
"uuid": "3.4.0",
"word-wrap": "1.2.3",
"xml2js": "0.4.23"
},
"gitHead": "eb4b0e64eab40a51b0895d3a40a9d8c3cb7b1b14"
}

View File

@ -19,31 +19,31 @@
"author": "Joplin",
"license": "MIT",
"devDependencies": {
"@types/jest": "^28.1.6",
"@types/pdfjs-dist": "^2.10.378",
"@types/react": "16.9.55",
"@types/react-dom": "^16.9.0",
"@types/styled-components": "^5.1.25",
"babel-jest": "^28.1.3",
"css-loader": "^6.7.1",
"jest": "^28.1.3",
"jest-environment-jsdom": "^28.1.3",
"style-loader": "^3.3.1",
"ts-jest": "^28.0.7",
"ts-loader": "^9.3.0",
"typescript": "^4.0.5",
"webpack": "^5.73.0",
"webpack-cli": "^4.10.0"
"@types/jest": "28.1.6",
"@types/pdfjs-dist": "2.10.378",
"@types/react": "16.14.34",
"@types/react-dom": "16.9.16",
"@types/styled-components": "5.1.25",
"babel-jest": "28.1.3",
"css-loader": "6.7.1",
"jest": "28.1.3",
"jest-environment-jsdom": "28.1.3",
"style-loader": "3.3.1",
"ts-jest": "28.0.7",
"ts-loader": "9.3.1",
"typescript": "4.5.2",
"webpack": "5.74.0",
"webpack-cli": "4.10.0"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.1.2",
"@fortawesome/free-solid-svg-icons": "^6.1.2",
"@fortawesome/react-fontawesome": "^0.2.0",
"@fortawesome/fontawesome-svg-core": "6.1.2",
"@fortawesome/free-solid-svg-icons": "6.1.2",
"@fortawesome/react-fontawesome": "0.2.0",
"@joplin/lib": "~2.9",
"async-mutex": "^0.4.0",
"pdfjs-dist": "^2.14.305",
"react": "16.13.1",
"react-dom": "16.9.0",
"styled-components": "^5.3.5"
"async-mutex": "0.4.0",
"pdfjs-dist": "2.14.305",
"react": "16.14.0",
"react-dom": "16.14.0",
"styled-components": "5.3.5"
}
}

View File

@ -29,12 +29,15 @@ describe('pdfData', () => {
expect(pdf.pageCount).toBe(1);
});
test('Should throw error on invalid file', async () => {
const pdf = new PdfDocument(document);
await expect(async () => {
await pdf.loadDoc('');
}).rejects.toThrowError();
});
// Disable test because it throws warnings in console
// https://github.com/mozilla/pdf.js/issues/12443
// test('Should throw error on invalid file', async () => {
// const pdf = new PdfDocument(document);
// await expect(async () => {
// await pdf.loadDoc('');
// }).rejects.toThrowError();
// });
test('Should get correct page size', async () => {
const file = await loadFile(pdfFilePath1);

View File

@ -20,21 +20,21 @@
"dependencies": {
"@joplin/lib": "^2.9.1",
"@joplin/tools": "^2.9.1",
"fs-extra": "^9.0.1",
"gh-release-assets": "^2.0.0",
"node-fetch": "^2.6.1",
"source-map-support": "^0.5.21",
"yargs": "^16.0.3"
"fs-extra": "9.1.0",
"gh-release-assets": "2.0.0",
"node-fetch": "2.6.6",
"source-map-support": "0.5.21",
"yargs": "16.2.0"
},
"devDependencies": {
"@types/fs-extra": "^9.0.6",
"@types/jest": "^26.0.15",
"@types/node": "^14.14.6",
"jest": "^26.6.3",
"source-map-loader": "^3.0.0",
"@types/fs-extra": "9.0.13",
"@types/jest": "26.0.24",
"@types/node": "14.18.0",
"jest": "26.6.3",
"source-map-loader": "3.0.0",
"typescript": "4.1.3",
"webpack": "^5.65.0",
"webpack-cli": "^4.9.1"
"webpack": "5.65.0",
"webpack-cli": "4.9.1"
},
"gitHead": "eb4b0e64eab40a51b0895d3a40a9d8c3cb7b1b14"
}

View File

@ -15,16 +15,16 @@
],
"devDependencies": {
"@types/node": "^14.0.14",
"chalk": "^4.1.0",
"chalk": "4.1.2",
"copy-webpack-plugin": "^6.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"fs-extra": "9.1.0",
"glob": "7.2.0",
"on-build-webpack": "^0.1.0",
"tar": "^6.0.5",
"tar": "6.1.11",
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"yargs": "^16.2.0"
"yargs": "16.2.0"
}
}
}

View File

@ -39,12 +39,12 @@
"access": "public"
},
"devDependencies": {
"@babel/core": "^7.12.9",
"@types/react": "^16.9.55",
"@types/react-native": "^0.64.4",
"@babel/core": "7.16.0",
"@types/react": "16.14.21",
"@types/react-native": "0.64.19",
"react": "17.0.2",
"react-native": "0.66.1",
"typescript": "^4.0.5"
"typescript": "4.5.2"
},
"peerDependencies": {
"react": "*",

View File

@ -18,35 +18,35 @@
"author": "",
"license": "MIT",
"devDependencies": {
"@types/jest": "^26.0.15",
"@types/node": "^14.14.6",
"jest": "^26.6.3",
"typescript": "^4.0.5"
"@types/jest": "26.0.24",
"@types/node": "14.18.0",
"jest": "26.6.3",
"typescript": "4.5.2"
},
"dependencies": {
"@joplin/fork-htmlparser2": "^4.1.41",
"@joplin/fork-uslug": "^1.0.6",
"font-awesome-filetypes": "^2.1.0",
"fs-extra": "^8.1.0",
"font-awesome-filetypes": "2.1.0",
"fs-extra": "8.1.0",
"highlight.js": "11.1.0",
"html-entities": "^1.2.1",
"json-stringify-safe": "^5.0.1",
"katex": "^0.13.3",
"markdown-it": "^10.0.0",
"markdown-it-abbr": "^1.0.4",
"markdown-it-anchor": "^5.2.5",
"markdown-it-deflist": "^2.0.3",
"markdown-it-emoji": "^1.4.0",
"markdown-it-expand-tabs": "^1.0.13",
"markdown-it-footnote": "^3.0.2",
"markdown-it-ins": "^3.0.0",
"markdown-it-mark": "^3.0.0",
"markdown-it-multimd-table": "^4.1.2",
"markdown-it-sub": "^1.0.0",
"markdown-it-sup": "^1.0.0",
"markdown-it-toc-done-right": "^4.1.0",
"md5": "^2.2.1",
"mermaid": "^9.1.7"
"html-entities": "1.4.0",
"json-stringify-safe": "5.0.1",
"katex": "0.13.24",
"markdown-it": "10.0.0",
"markdown-it-abbr": "1.0.4",
"markdown-it-anchor": "5.3.0",
"markdown-it-deflist": "2.1.0",
"markdown-it-emoji": "1.4.0",
"markdown-it-expand-tabs": "1.0.13",
"markdown-it-footnote": "3.0.3",
"markdown-it-ins": "3.0.1",
"markdown-it-mark": "3.0.1",
"markdown-it-multimd-table": "4.1.2",
"markdown-it-sub": "1.0.0",
"markdown-it-sup": "1.0.0",
"markdown-it-toc-done-right": "4.2.0",
"md5": "2.3.0",
"mermaid": "9.1.7"
},
"gitHead": "eb4b0e64eab40a51b0895d3a40a9d8c3cb7b1b14"
}

View File

@ -1,6 +1,6 @@
{
"name": "@joplin/server",
"version": "2.9.5",
"version": "2.9.6",
"private": true,
"scripts": {
"start-dev": "yarn run build && JOPLIN_IS_TESTING=1 nodemon --config nodemon.json --ext ts,js,mustache,css,tsx dist/app.js --env dev",
@ -21,61 +21,61 @@
"watch": "tsc --watch --preserveWatchOutput --project tsconfig.json"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.40.0",
"@fortawesome/fontawesome-free": "^5.15.1",
"@aws-sdk/client-s3": "3.44.0",
"@fortawesome/fontawesome-free": "5.15.4",
"@joplin/lib": "~2.9",
"@joplin/renderer": "~2.9",
"@koa/cors": "^3.1.0",
"@types/uuid": "^8.3.1",
"bcryptjs": "^2.4.3",
"bulma": "^0.9.1",
"bulma-prefers-dark": "^0.1.0-beta.0",
"compare-versions": "^3.6.0",
"dayjs": "^1.9.8",
"formidable": "^1.2.2",
"fs-extra": "^8.1.0",
"html-entities": "^1.3.1",
"jquery": "^3.6.0",
"@koa/cors": "4.0.0",
"@types/uuid": "8.3.3",
"bcryptjs": "2.4.3",
"bulma": "0.9.3",
"bulma-prefers-dark": "0.1.0-beta.1",
"compare-versions": "3.6.0",
"dayjs": "1.10.7",
"formidable": "1.2.6",
"fs-extra": "8.1.0",
"html-entities": "1.4.0",
"jquery": "3.6.0",
"knex": "0.95.15",
"koa": "2.8.1",
"markdown-it": "^12.0.4",
"mustache": "^3.1.0",
"nanoid": "^2.1.1",
"node-cron": "^3.0.0",
"node-env-file": "^0.1.8",
"nodemailer": "^6.6.0",
"nodemon": "^2.0.6",
"pg": "^8.5.1",
"pretty-bytes": "^5.6.0",
"prettycron": "^0.10.0",
"query-string": "^6.8.3",
"rate-limiter-flexible": "^2.2.4",
"raw-body": "^2.4.1",
"sqlite3": "^4.1.0",
"stripe": "^8.150.0",
"uuid": "^8.3.2",
"yargs": "^17.2.1",
"zxcvbn": "^4.4.2"
"koa": "2.13.4",
"markdown-it": "12.2.0",
"mustache": "3.2.1",
"nanoid": "2.1.11",
"node-cron": "3.0.0",
"node-env-file": "0.1.8",
"nodemailer": "6.7.2",
"nodemon": "2.0.15",
"pg": "8.7.1",
"pretty-bytes": "5.6.0",
"prettycron": "0.10.0",
"query-string": "6.14.1",
"rate-limiter-flexible": "2.3.6",
"raw-body": "2.4.2",
"sqlite3": "4.2.0",
"stripe": "8.191.0",
"uuid": "8.3.2",
"yargs": "17.3.0",
"zxcvbn": "4.4.2"
},
"devDependencies": {
"@joplin/tools": "~2.9",
"@rmp135/sql-ts": "^1.12.1",
"@types/fs-extra": "^8.0.0",
"@types/jest": "^26.0.15",
"@types/jest-expect-message": "^1.0.3",
"@types/jsdom": "^16.2.6",
"@types/koa": "2.0.49",
"@types/markdown-it": "^12.0.0",
"@types/mustache": "^0.8.32",
"@types/nodemailer": "^6.4.1",
"@types/yargs": "^17.0.4",
"@types/zxcvbn": "^4.4.1",
"gulp": "^4.0.2",
"jest": "^26.6.3",
"jest-expect-message": "^1.0.2",
"jsdom": "^16.4.0",
"node-mocks-http": "^1.10.0",
"source-map-support": "^0.5.13",
"@rmp135/sql-ts": "1.12.1",
"@types/fs-extra": "8.1.2",
"@types/jest": "26.0.24",
"@types/jest-expect-message": "1.0.3",
"@types/jsdom": "16.2.13",
"@types/koa": "2.13.4",
"@types/markdown-it": "12.2.3",
"@types/mustache": "0.8.32",
"@types/nodemailer": "6.4.4",
"@types/yargs": "17.0.7",
"@types/zxcvbn": "4.4.1",
"gulp": "4.0.2",
"jest": "26.6.3",
"jest-expect-message": "1.0.2",
"jsdom": "16.7.0",
"node-mocks-http": "1.11.0",
"source-map-support": "0.5.21",
"typescript": "4.1.2"
}
}

View File

@ -184,7 +184,7 @@ async function main() {
app.use(cors({
// https://github.com/koajs/cors/issues/52#issuecomment-413887382
origin: (ctx: AppContext) => {
const origin = ctx.request.header.origin;
const origin = ctx.request.origin;
if (acceptOrigin(origin)) {
return origin;

View File

@ -34,6 +34,11 @@ export default class UserDeletionModel extends BaseModel<UserDeletion> {
return !!r;
}
public async isDeletedOrBeingDeleted(userId: Uuid) {
const r: UserDeletion = await this.db(this.tableName).select(['id', 'start_time']).where('user_id', '=', userId).first();
return !!r && !!r.start_time;
}
public async add(userId: Uuid, scheduledTime: number, options: AddOptions = null): Promise<UserDeletion> {
options = {
...defaultAddOptions(),
@ -120,4 +125,10 @@ export default class UserDeletionModel extends BaseModel<UserDeletion> {
return userIds;
}
// Remove a user from the deletion queue, before it gets deleted. If it has
// already been deleted or if it's being deleted, no action is performed.
public async removeFromQueueByUserId(userId: Uuid) {
await this.db(this.tableName).where('user_id', '=', userId).andWhere('start_time', '=', 0).delete();
}
}

View File

@ -1,8 +1,11 @@
import Logger from '@joplin/lib/Logger';
import { isUniqueConstraintError } from '../db';
import { User, UserFlag, UserFlagType, userFlagTypeToLabel, Uuid } from '../services/database/types';
import { formatDateTime } from '../utils/time';
import BaseModel from './BaseModel';
const logger = Logger.create('UserFlagModel');
interface AddRemoveOptions {
updateUser?: boolean;
}
@ -138,15 +141,35 @@ export default class UserFlagModels extends BaseModel<UserFlag> {
newProps.enabled = 0;
}
let removeFromDeletionQueue = false;
if (!user.enabled && newProps.enabled) {
if (await this.models().userDeletion().isDeletedOrBeingDeleted(userId)) {
// User account is being deleted or already deleted and cannot
// be enabled again.
logger.error('Trying to enable an account that is queued for deletion - leaving account disabled');
newProps.enabled = 0;
} else {
// If the user has been re-enabled, we want to remove it from
// the deletion queue (if it has been queued there) immediately,
// so that it doesn't incorrectly get deleted.
removeFromDeletionQueue = true;
}
}
if (user.enabled !== newProps.enabled) {
newProps.disabled_time = !newProps.enabled ? Date.now() : 0;
}
if (user.can_upload !== newProps.can_upload || user.enabled !== newProps.enabled) {
await this.models().user().save({
id: userId,
...newProps,
});
await this.withTransaction(async () => {
if (removeFromDeletionQueue) await this.models().userDeletion().removeFromQueueByUserId(userId);
await this.models().user().save({
id: userId,
...newProps,
});
}, 'UserFlagModel::updateUserFromFlags');
}
}

View File

@ -5,6 +5,7 @@ import { betaUserDateRange, stripeConfig } from '../utils/stripe';
import { accountByType, AccountType } from './UserModel';
import { failedPaymentFinalAccount, failedPaymentWarningInterval } from './SubscriptionModel';
import { stripePortalUrl } from '../utils/urlUtils';
import { Day } from '../utils/time';
describe('UserModel', function() {
@ -403,4 +404,54 @@ describe('UserModel', function() {
expect(await models().userFlag().byUserId(user1.id, UserFlagType.AccountOverLimit)).toBeFalsy();
});
test('should disable and enable users', async () => {
const { user: user1 } = await createUserAndSession(1);
const { user: user2 } = await createUserAndSession(2);
jest.useFakeTimers('modern');
const t0 = new Date('2022-01-01').getTime();
jest.setSystemTime(t0);
await models().userFlag().add(user1.id, UserFlagType.ManuallyDisabled);
expect((await models().user().load(user1.id)).enabled).toBe(0);
expect((await models().user().load(user2.id)).enabled).toBe(1);
const t1 = new Date('2022-02-01').getTime();
jest.setSystemTime(t1);
// If we run the user deletion service at this point, it should add the
// disabled account
await models().userDeletion().autoAdd(10, 10 * Day, t1 + 3 * Day);
expect(await models().userDeletion().count()).toBe(1);
// If we make the account enabled again, the user should be immediately
// removed from the queue
await models().userFlag().remove(user1.id, UserFlagType.ManuallyDisabled);
expect(await models().userDeletion().count()).toBe(0);
await models().userFlag().add(user1.id, UserFlagType.ManuallyDisabled);
const t2 = new Date('2022-03-01').getTime();
jest.setSystemTime(t2);
// Should be added again
await models().userDeletion().autoAdd(10, 10 * Day, t2 + 3 * Day);
expect(await models().userDeletion().count()).toBe(1);
const t3 = new Date('2022-04-01').getTime();
jest.setSystemTime(t3);
// Now if the service were to run, the user deletion would start and it
// should no longer be possible to remove it from the queue. And it
// shouldn't be possible to enable the user either.
const job = await models().userDeletion().next();
expect(job.user_id).toBe(user1.id);
await models().userDeletion().start(job.id);
await models().userFlag().add(user1.id, UserFlagType.ManuallyDisabled);
expect((await models().user().load(user1.id)).enabled).toBe(0);
});
});

View File

@ -84,7 +84,7 @@ router.post('api/batch', async (_path: SubPath, ctx: AppContext) => {
response[subRequestId] = {
status: r.status,
body: typeof r.body === 'object' ? { ...r.body } : r.body,
body: typeof r.body === 'object' ? { ...(r.body as object) } : r.body,
header: r.header ? { ...r.header } : {},
};
}

View File

@ -49,7 +49,7 @@ export async function putItemContents(path: SubPath, ctx: AppContext, isBatch: b
// include the "share_id" field property so it doesn't need to be set via
// query parameter.
if (ctx.query['share_id']) {
saveOptions.shareId = ctx.query['share_id'];
saveOptions.shareId = ctx.query['share_id'] as string;
await ctx.joplin.models.item().checkIfAllowed(ctx.joplin.owner, AclAction.Create, { jop_share_id: saveOptions.shareId });
}

View File

@ -24,9 +24,11 @@ describe('api_ping', function() {
await routeHandler(context);
const body = context.response.body as any;
expect(context.response.status).toBe(200);
expect(context.response.body.status).toBe('ok');
expect(context.response.body.message).toBe('Joplin Server is running');
expect(body.status).toBe('ok');
expect(body.message).toBe('Joplin Server is running');
});
});

View File

@ -39,9 +39,9 @@ describe('api/sessions', function() {
const context = await postSession(user.email, password);
expect(context.response.status).toBe(200);
expect(!!context.response.body.id).toBe(true);
expect(!!(context.response.body as any).id).toBe(true);
const session: Session = await models().session().load(context.response.body.id);
const session: Session = await models().session().load((context.response.body as any).id);
expect(session.user_id).toBe(user.id);
});

View File

@ -28,7 +28,7 @@ describe('index/home', function() {
await routeHandler(context);
expect(context.response.body.indexOf(user.email) >= 0).toBe(true);
expect((context.response.body as any).indexOf(user.email) >= 0).toBe(true);
});
});

View File

@ -44,7 +44,7 @@ describe('index_login', function() {
await routeHandler(context);
const doc = parseHtml(context.response.body);
const doc = parseHtml(context.response.body as string);
expect(!!doc.querySelector('input[name=email]')).toBe(true);
expect(!!doc.querySelector('input[name=password]')).toBe(true);
});

View File

@ -48,7 +48,7 @@ const subRoutes: Record<string, RouteHandler> = {
reset: async (_path: SubPath, ctx: AppContext) => {
let successMessage: string = '';
let error: Error = null;
const token = ctx.query.token;
const token = ctx.query.token as string;
if (ctx.method === 'POST') {
const fields = await bodyFields<ResetPasswordFields>(ctx.req);

View File

@ -37,7 +37,7 @@ async function getShareContent(shareId: string, query: any = {}): Promise<string
});
await routeHandler(context);
await checkContextError(context);
return context.response.body;
return context.response.body as any;
}
describe('shares.link', function() {

View File

@ -407,7 +407,7 @@ const getHandlers: Record<string, StripeRouteHandler> = {
success: async (stripe: Stripe, _path: SubPath, ctx: AppContext) => {
try {
const models = ctx.joplin.models;
const checkoutSession = await stripe.checkout.sessions.retrieve(ctx.query.session_id);
const checkoutSession = await stripe.checkout.sessions.retrieve(ctx.query.session_id as string);
const userEmail = checkoutSession.customer_details.email || checkoutSession.customer_email; // customer_email appears to be always null but fallback to it just in case
if (!userEmail) throw new Error(`Could not find email from checkout session: ${JSON.stringify(checkoutSession)}`);
const user = await waitForUserCreation(models, userEmail);

View File

@ -59,7 +59,7 @@ async function getUserHtml(sessionId: string, userId: string): Promise<string> {
await routeHandler(context);
checkContextError(context);
return context.response.body;
return context.response.body as string;
}
describe('index/users', function() {

View File

@ -124,7 +124,7 @@ router.publicSchemas.push('users/:id/confirm');
router.get('users/:id/confirm', async (path: SubPath, ctx: AppContext, error: Error = null) => {
const models = ctx.joplin.models;
const userId = path.id;
const token = ctx.query.token;
const token = ctx.query.token as string;
if (!token) throw new ErrorBadRequest('Missing token');

View File

@ -2,7 +2,7 @@ import config from '../config';
import { shareFolderWithUser } from '../utils/testing/shareApiUtils';
import { afterAllTests, beforeAllDb, beforeEachDb, createNote, createUserAndSession, models } from '../utils/testing/testUtils';
import { Env } from '../utils/types';
import { BackupItemType } from './database/types';
import { BackupItemType, UserFlagType } from './database/types';
import UserDeletionService from './UserDeletionService';
const newService = () => {
@ -32,6 +32,8 @@ describe('UserDeletionService', function() {
const t0 = new Date('2021-12-14').getTime();
const t1 = t0 + 1000;
await models().userFlag().toggle(user1.id, UserFlagType.ManuallyDisabled, true);
const job = await models().userDeletion().add(user1.id, t1, {
processData: true,
processAccount: false,
@ -63,6 +65,8 @@ describe('UserDeletionService', function() {
const t0 = new Date('2021-12-14').getTime();
const t1 = t0 + 1000;
await models().userFlag().toggle(user1.id, UserFlagType.ManuallyDisabled, true);
const job = await models().userDeletion().add(user1.id, t1, {
processData: false,
processAccount: true,
@ -92,7 +96,7 @@ describe('UserDeletionService', function() {
const content = JSON.parse(backupItem.content.toString());
expect(content.user.id).toBe(user1.id);
expect(content.user.email).toBe(user1.email);
expect(content.flags.length).toBe(0);
expect(content.flags.length).toBe(1);
});
test('should not delete notebooks that are not owned', async function() {
@ -113,6 +117,8 @@ describe('UserDeletionService', function() {
expect(await models().share().count()).toBe(1);
expect(await models().shareUser().count()).toBe(1);
await models().userFlag().toggle(user2.id, UserFlagType.ManuallyDisabled, true);
const job = await models().userDeletion().add(user2.id, Date.now());
const service = newService();
await service.processDeletionJob(job, { sleepBetweenOperations: 0 });
@ -140,6 +146,8 @@ describe('UserDeletionService', function() {
expect(await models().share().count()).toBe(1);
expect(await models().shareUser().count()).toBe(1);
await models().userFlag().toggle(user1.id, UserFlagType.ManuallyDisabled, true);
const job = await models().userDeletion().add(user1.id, Date.now());
const service = newService();
await service.processDeletionJob(job, { sleepBetweenOperations: 0 });
@ -149,4 +157,27 @@ describe('UserDeletionService', function() {
expect(await models().item().count()).toBe(0);
});
test('should not do anything if the user is still enabled', async function() {
const { user: user1 } = await createUserAndSession(1);
const t0 = new Date('2021-12-14').getTime();
const t1 = t0 + 1000;
const job = await models().userDeletion().add(user1.id, t1, {
processData: false,
processAccount: true,
});
expect(await models().userDeletion().count()).toBe(1);
const service = newService();
await service.processDeletionJob(job, { sleepBetweenOperations: 0 });
// Nothing has been done because the user is still enabled
expect(await models().user().count()).toBe(1);
// And the job should have been removed from the queue
expect(await models().userDeletion().count()).toBe(0);
});
});

View File

@ -90,6 +90,20 @@ export default class UserDeletionService extends BaseService {
logger.info('Starting user deletion: ', deletion);
// Normally, a user that is still enabled should not be processed here,
// because it should not have been queued to begin with (or if it was
// queued, then enabled, it should have been removed from the queue).
// But as a fail safe we have this extra check.
//
// We also remove the job from the queue so that the service doesn't try
// to process it again.
const user = await this.models.user().load(deletion.user_id);
if (user.enabled) {
logger.error(`Trying to delete a user that is still enabled - aborting and removing the user from the queue. Deletion job: ${JSON.stringify(deletion)}`);
await this.models.userDeletion().removeFromQueueByUserId(user.id);
return;
}
let error: any = null;
let success: boolean = true;

View File

@ -60,7 +60,7 @@ export function headerSessionId(headers: any): string {
}
export function contextSessionId(ctx: AppContext, throwIfNotFound = true): string {
if (ctx.headers['x-api-auth']) return ctx.headers['x-api-auth'];
if (ctx.headers['x-api-auth']) return ctx.headers['x-api-auth'] as string;
const id = cookieGet(ctx, 'sessionId');
if (!id && throwIfNotFound) throw new ErrorForbidden('Invalid or missing session');
@ -76,6 +76,6 @@ export function isAdminRequest(ctx: AppContext): boolean {
}
export function userIp(ctx: AppContext): string {
if (ctx.headers['x-real-ip']) return ctx.headers['x-real-ip'];
if (ctx.headers['x-real-ip']) return ctx.headers['x-real-ip'] as string;
return ctx.ip;
}

View File

@ -6,6 +6,7 @@ import { downloadPlugins, extractPlugins, localPluginsVersion } from './bundleDe
import { pathExists, readFile, remove } from 'fs-extra';
import Setting from '@joplin/lib/models/Setting';
import { createTempDir, supportDir } from '@joplin/lib/testing/test-utils';
import { rootDir } from './tool-utils';
const fetch = require('node-fetch');
@ -170,8 +171,6 @@ describe('bundleDefaultPlugins', function() {
.mockResolvedValueOnce({ text: () => Promise.resolve(NPM_Response2), ok: true })
.mockResolvedValueOnce({ buffer: () => Promise.resolve(tgzData), ok: true });
const tempDir = await createTempDir();
const downloadedPlugins = await downloadPlugins(testCase.localVersions, testDefaultPluginsInfo, manifests);
expect(downloadedPlugins[Object.keys(testDefaultPluginsInfo)[0]]).toBe(testCase.downloadedPlugin1);
@ -182,9 +181,10 @@ describe('bundleDefaultPlugins', function() {
testCase.calledWith.forEach((callValue, index) => expect(mockFetch).toHaveBeenNthCalledWith(index + 1, callValue));
jest.clearAllMocks();
await remove(tempDir);
}
await remove(`${rootDir}/packages/tools/joplin-plugin-backup-1.1.0.tgz`);
await remove(`${rootDir}/packages/tools/joplin-plugin-rich-markdown-0.9.0.tgz`);
});
it('should extract plugins files', async () => {

View File

@ -41,7 +41,7 @@ async function downloadFile(url: string, outputPath: string) {
export async function extractPlugins(currentDir: string, defaultPluginDir: string, downloadedPluginsNames: PluginIdAndName): Promise<void> {
for (const pluginId of Object.keys(downloadedPluginsNames)) {
await execCommand2(`tar xzf ${currentDir}/${downloadedPluginsNames[pluginId]}`);
await execCommand2(`tar xzf ${currentDir}/${downloadedPluginsNames[pluginId]}`, { quiet: true });
await move(`package/publish/${pluginId}.jpl`,`${defaultPluginDir}/${pluginId}/plugin.jpl`, { overwrite: true });
await move(`package/publish/${pluginId}.json`,`${defaultPluginDir}/${pluginId}/manifest.json`, { overwrite: true });
await remove(`${downloadedPluginsNames[pluginId]}`);

View File

@ -23,37 +23,37 @@
"@joplin/lib": "^2.9.1",
"@joplin/renderer": "^2.9.1",
"@types/node-fetch": "1.6.9",
"@types/yargs": "16.0.3",
"dayjs": "^1.10.7",
"execa": "^4.1.0",
"fs-extra": "^4.0.3",
"gettext-parser": "^1.3.0",
"glob": "^7.1.6",
"markdown-it": "^8.4.1",
"md5-file": "^4.0.0",
"moment": "^2.24.0",
"mustache": "^2.3.0",
"@types/yargs": "16.0.4",
"dayjs": "1.10.7",
"execa": "4.1.0",
"fs-extra": "4.0.3",
"gettext-parser": "1.4.0",
"glob": "7.2.0",
"markdown-it": "8.4.2",
"md5-file": "4.0.0",
"moment": "2.29.1",
"mustache": "2.3.2",
"node-fetch": "1.7.3",
"relative": "^3.0.2",
"request": "^2.88.0",
"sharp": "^0.25.2",
"source-map-support": "^0.5.19",
"uri-template": "^1.0.1",
"yargs": "16.0.3"
"relative": "3.0.2",
"request": "2.88.2",
"sharp": "0.31.1",
"source-map-support": "0.5.21",
"uri-template": "1.0.3",
"yargs": "16.2.0"
},
"devDependencies": {
"@rmp135/sql-ts": "^1.6.0",
"@types/fs-extra": "^9.0.6",
"@types/jest": "^26.0.15",
"@types/mustache": "^0.8.32",
"@types/node": "^14.14.6",
"gettext-extractor": "^3.5.3",
"gulp": "^4.0.2",
"jest": "^26.6.3",
"rss": "^1.2.2",
"sass": "^1.39.2",
"sqlite3": "^5.0.0",
"typescript": "^4.1.3"
"@rmp135/sql-ts": "1.12.1",
"@types/fs-extra": "9.0.13",
"@types/jest": "26.0.24",
"@types/mustache": "0.8.32",
"@types/node": "14.18.0",
"gettext-extractor": "3.5.3",
"gulp": "4.0.2",
"jest": "26.6.3",
"rss": "1.2.2",
"sass": "1.44.0",
"sqlite3": "5.0.2",
"typescript": "4.5.2"
},
"gitHead": "eb4b0e64eab40a51b0895d3a40a9d8c3cb7b1b14"
}

View File

@ -8,10 +8,10 @@
"author": "Dom Christie",
"main": "lib/turndown-plugin-gfm.cjs.js",
"devDependencies": {
"browserify": "^14.5.0",
"rollup": "^0.50.0",
"standard": "^10.0.3",
"turndown": "4.0.1",
"browserify": "14.5.0",
"rollup": "0.50.1",
"standard": "10.0.3",
"turndown": "4.0.2",
"turndown-attendant": "0.0.3"
},
"files": [

View File

@ -11,17 +11,17 @@
"jsdom": false
},
"dependencies": {
"css": "^2.2.4",
"html-entities": "^1.2.1",
"jsdom": "^15.2.1"
"css": "2.2.4",
"html-entities": "1.4.0",
"jsdom": "15.2.1"
},
"devDependencies": {
"browserify": "^14.5.0",
"rollup": "^0.50.0",
"rollup-plugin-commonjs": "^8.2.6",
"rollup-plugin-node-resolve": "^3.0.0",
"rollup-plugin-replace": "^2.0.0",
"standard": "^10.0.3",
"browserify": "14.5.0",
"rollup": "0.50.1",
"rollup-plugin-commonjs": "8.4.1",
"rollup-plugin-node-resolve": "3.4.0",
"rollup-plugin-replace": "2.2.0",
"standard": "10.0.3",
"turndown-attendant": "0.0.3"
},
"files": [

View File

@ -1,5 +1,18 @@
# Joplin Server Changelog
## [server-v2.9.6](https://github.com/laurent22/joplin/releases/tag/server-v2.9.6) - 2022-11-05T11:52:09Z
- Improved: Allow enabling and disabling tasks (1379c9c)
- Improved: Allow searching user by email or name (1cfbefb)
- Improved: Fail-safe when trying to delete a non-disabled account (21883b4)
- Improved: Paginate users (8ac8d53)
- Improved: Refactor table structure (8ea6d89)
- Improved: Update sender email (bf92ee7)
- Improved: Upgrade Koa framework to 2.13.4 (dc92546)
- Improved: Upgrade to Node 18 (f34078b)
- Improved: When re-activating an account, remove it from the deletion queue (bbc4228)
- Fixed: Fixed account activation logic (ccf5d20)
## [server-v2.9.5](https://github.com/laurent22/joplin/releases/tag/server-v2.9.5) - 2022-10-11T10:44:01Z
- New: Add support for sidebar in user pages (053dbab)

View File

@ -1,4 +1,4 @@
## How to add a new default plugin
# How to add a new default plugin
To add a new default plugin for desktop:
- Add the plugin ID and pinned version to `defaultPlugins` object located in [desktopDefaultPluginsInfo.ts](https://github.com/laurent22/joplin/blob/eb7083d7888433ff6ef76ccfb7fb87ba951d513f/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts#L5)
@ -19,6 +19,7 @@ To add a new default plugin for desktop:
```
## Bundling of default plugins
Script for bundling default plugins is present in [bundleDefaultPlugins.ts](https://github.com/laurent22/joplin/blob/eb7083d7888433ff6ef76ccfb7fb87ba951d513f/packages/tools/bundleDefaultPlugins.ts)
Every time a new desktop release is being built, we compare the local default plugins version with pinned plugin version mentioned in [desktopDefaultPluginsInfo.ts](https://github.com/laurent22/joplin/blob/eb7083d7888433ff6ef76ccfb7fb87ba951d513f/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts)
@ -26,6 +27,7 @@ Every time a new desktop release is being built, we compare the local default pl
If there is a newer version available, we will pull the `tgz` file of plugin from NPM registry and extract it. We will then move `manifest.json` and `plugin.jpl` to the build folder of desktop.
## Installing of default plugins
- All the functions related to default plugins are located in [defaultPluginsUtils.ts](https://github.com/laurent22/joplin/blob/eb7083d7888433ff6ef76ccfb7fb87ba951d513f/packages/lib/services/plugins/defaultPlugins/defaultPluginsUtils.ts)
- On every startup, we check if there are new plugins available in build folder that have not been installed yet. After installing the new plugin, we update the `installedDefaultPlugins` array in `Setting.ts` with respective plugin ID for future reference.
- After installing is complete, we apply the default settings for each default plugin. Default settings are located in [desktopDefaultPluginsInfo.ts](https://github.com/laurent22/joplin/blob/eb7083d7888433ff6ef76ccfb7fb87ba951d513f/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts)

View File

@ -12,6 +12,17 @@
],
"ignoreDeps": [
"react-native",
"@types/react-native"
"@types/react-native",
"@babel/core",
"babel-eslint",
"babel-loader",
"katex",
"jsc-android",
"metro-react-native-babel-preset",
"webpack",
"rollup",
"typedoc",
"actions/stale",
"@svgr/webpack"
]
}

3057
yarn.lock

File diff suppressed because it is too large Load Diff