1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-12-29 23:48:19 +02:00

Compare commits

...

174 Commits

Author SHA1 Message Date
Laurent Cozic
f895e939a2 update 2022-11-11 12:53:29 +00:00
Laurent Cozic
54df603d6d fix 2022-11-11 12:37:42 +00:00
Laurent Cozic
f8bd084504 android ci 2022-11-11 12:36:18 +00:00
Laurent Cozic
6f1e8e2983 Tools: Upgrade to React Native 0.67.2 2022-11-11 12:22:52 +00:00
Laurent Cozic
739c5dbea5 Update renovate.json 2022-11-11 10:04:03 +00:00
renovate[bot]
5629a020ee Update dependency @react-native-community/datetimepicker to v6.5.5 (#7200)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-11 07:18:23 +00:00
renovate[bot]
e447e154bc Update dependency sass to v1.56.1 (#7187)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-11 04:43:05 +00:00
sammyhori
a84589e3bb Fixed grammatical error in faq.md (#7197) 2022-11-11 00:37:13 +00:00
renovate[bot]
d21d198325 Update dependency eslint to v8.27.0 (#7168) 2022-11-10 08:31:03 +00:00
Laurent Cozic
4f6ddfad43 Renovate ignore 2022-11-10 07:54:23 +00:00
renovate[bot]
42d1f9e2f7 Update dependency aws-sdk to v2.1251.0 (#7171) 2022-11-10 07:50:06 +00:00
Laurent Cozic
f0c3f29ece Revert "Update dependency domhandler to v5 (#7162)"
Build fails due to nonsensical TS errors.

This reverts commit 10d616b2c8.
2022-11-10 07:47:39 +00:00
Laurent Cozic
ffe5721c44 Removed unused package 2022-11-08 21:12:23 +00:00
Laurent Cozic
07807d0a26 Renovate ignore 2022-11-08 20:55:38 +00:00
renovate[bot]
10d616b2c8 Update dependency domhandler to v5 (#7162) 2022-11-08 20:49:49 +00:00
renovate[bot]
8d0525af1b Update dependency css to v3 (#7160) 2022-11-08 20:49:08 +00:00
renovate[bot]
8ffc2efa4f Update dependency buffer to v6 (#7152) 2022-11-08 20:46:32 +00:00
renovate[bot]
04bce0cbda Update dependency base-64 to v1 (#7150) 2022-11-08 20:45:36 +00:00
Laurent Cozic
e4a8a62ead Improve CI 2022-11-08 18:27:29 +00:00
Laurent Cozic
2fffaec76e Tools: Disable flaky test 2022-11-08 18:18:48 +00:00
Laurent Cozic
f746824494 Update renovate.json 2022-11-08 18:15:25 +00:00
renovate[bot]
50068dc80f Update dependency @types/react-dom to v18 (#7146) 2022-11-08 18:02:27 +00:00
renovate[bot]
d456ace317 Update typescript-eslint monorepo to v5.42.1 (#7145) 2022-11-08 18:02:04 +00:00
renovate[bot]
ab37305625 Update dependency webpack-cli to v4.10.0 (#7144) 2022-11-08 16:59:07 +00:00
renovate[bot]
e9f3ce5404 Update dependency uglify-js to v3.17.4 (#7143) 2022-11-08 16:58:56 +00:00
renovate[bot]
7268b2b758 Update dependency ts-loader to v9.4.1 (#7142) 2022-11-08 16:58:32 +00:00
renovate[bot]
1a060ad066 Update dependency stripe to v8.222.0 (#7141) 2022-11-08 16:58:06 +00:00
Laurent Cozic
17502e3370 Tools: Remove package-lock 2022-11-08 15:52:08 +00:00
renovate[bot]
138e956d6c Update dependency pdfjs-dist to v2.16.105 (#7131) 2022-11-08 14:26:42 +00:00
renovate[bot]
573db70d1a Update dependency eslint-plugin-promise to v6.1.1 (#7118) 2022-11-08 14:24:11 +00:00
renovate[bot]
daea4021d7 Update dependency eslint-interactive to v10.2.0 (#7117) 2022-11-08 14:23:59 +00:00
renovate[bot]
53ce917db4 Update dependency sass to v1.56.0 (#7140) 2022-11-08 14:23:38 +00:00
renovate[bot]
a22caf1440 Update dependency react-native-share to v7.9.1 (#7139) 2022-11-08 14:23:13 +00:00
renovate[bot]
2b1f4d7dab Update dependency react-native-popup-menu to v0.16.1 (#7138) 2022-11-08 14:22:53 +00:00
renovate[bot]
deacdb3d67 Update dependency react-native-get-random-values to v1.8.0 (#7137) 2022-11-08 14:22:37 +00:00
renovate[bot]
0075aa3d34 Update dependency eslint-plugin-react to v7.31.10 (#7119) 2022-11-08 12:32:13 +00:00
Laurent Cozic
15886839a9 Tools: Renovate: Increase concurrent PRs to 20 2022-11-08 12:31:50 +00:00
renovate[bot]
f61722dda6 Update dependency react-native-fs to v2.20.0 (#7136) 2022-11-08 11:56:56 +00:00
renovate[bot]
38e34adb0d Update dependency raw-body to v2.5.1 (#7135) 2022-11-08 11:56:20 +00:00
Laurent Cozic
5aeaeee87e "useWorkspaces": true 2022-11-08 10:28:43 +00:00
Laurent Cozic
8ed4b7c5b7 Tools: Renovate: Ignore a package 2022-11-08 10:08:22 +00:00
renovate[bot]
d0befcc8f4 Update dependency rate-limiter-flexible to v2.4.1 (#7134) 2022-11-08 10:07:41 +00:00
renovate[bot]
338f1d3aaa Update dependency prop-types to v15.8.1 (#7133) 2022-11-08 10:07:29 +00:00
renovate[bot]
df5637889b Update dependency pg to v8.8.0 (#7132) 2022-11-08 10:07:15 +00:00
renovate[bot]
6328829875 Update dependency nodemailer to v6.8.0 (#7130) 2022-11-08 10:06:17 +00:00
renovate[bot]
e15ab8edab Update dependency aws-sdk to v2.1249.0 (#7127) 2022-11-07 23:13:50 +00:00
renovate[bot]
ec6cb92622 Update dependency nanoid to v3.3.4 (#7129) 2022-11-07 23:12:51 +00:00
renovate[bot]
9dd68c2ff8 Update dependency markdown-it-multimd-table to v4.2.0 (#7126) 2022-11-07 19:57:29 +00:00
renovate[bot]
44513bdc68 Update dependency markdown-it to v12.3.2 (#7125) 2022-11-07 19:56:58 +00:00
renovate[bot]
5e20ec1bd2 Update dependency jest-expect-message to v1.1.3 (#7123) 2022-11-07 19:56:45 +00:00
renovate[bot]
18976da8b9 Update dependency gettext-extractor to v3.6.0 (#7121) 2022-11-07 19:56:25 +00:00
Laurent Cozic
f3d301766f CI: Skip duplicate jobs 2022-11-07 18:51:22 +00:00
renovate[bot]
7defd590ad Update dependency keytar to v7.9.0 (#7124) 2022-11-07 18:43:02 +00:00
renovate[bot]
dade64148d Update dependency hpagent to v1.2.0 (#7122) 2022-11-07 17:58:33 +00:00
Laurent Cozic
9607b016c0 CI: Skip duplicate jobs 2022-11-07 17:56:50 +00:00
renovate[bot]
db77057b46 Update dependency follow-redirects to v1.15.2 (#7120) 2022-11-07 17:45:37 +00:00
Laurent Cozic
6a594a5065 CI: Skip duplicate jobs 2022-11-07 16:25:12 +00:00
renovate[bot]
fb8c62fcaf Update dependency electron-builder to v23.6.0 (#7116) 2022-11-07 15:52:08 +00:00
renovate[bot]
032dd984fe Update dependency domelementtype to v2.3.0 (#7115) 2022-11-07 15:51:38 +00:00
Laurent Cozic
94e8eb3132 lock files 2022-11-07 10:18:27 +00:00
Laurent Cozic
e8cf5ae3f7 Tools: Renovate: Ignore CodeMirror 6 2022-11-07 10:12:21 +00:00
renovate[bot]
326c3ab297 Update dependency codemirror to v5.65.9 (#7112) 2022-11-07 10:11:33 +00:00
Laurent Cozic
e134908117 Tools: Let Renovate automerge patch upgrades 2022-11-07 10:05:04 +00:00
renovate[bot]
86ef8b9f98 Update dependency @lezer/highlight to v1.1.2 (#7108) 2022-11-07 10:03:03 +00:00
renovate[bot]
4a4c257a88 Update dependency cspell to v5.21.2 (#7113) 2022-11-07 10:01:46 +00:00
renovate[bot]
c2c9121cf5 Update dependency dayjs to v1.11.6 (#7114) 2022-11-07 10:01:27 +00:00
renovate[bot]
d1699fcf4d Update aws-sdk-js-v3 monorepo to v3.204.0 (#7106) 2022-11-07 07:51:30 +00:00
renovate[bot]
47839c38d6 Update dependency builtin-modules to v3.3.0 (#7111) 2022-11-07 07:51:00 +00:00
renovate[bot]
f11651b503 Update dependency aws-sdk to v2.1248.0 (#7110) 2022-11-07 07:50:29 +00:00
renovate[bot]
97b1e35f2f Update dependency @rmp135/sql-ts to v1.15.1 (#7109) 2022-11-07 07:50:06 +00:00
renovate[bot]
061f5f22c4 Update dependency url-parse to v1.5.10 (#7102) 2022-11-06 22:34:03 +00:00
renovate[bot]
9cb525e298 Update jest monorepo (#7103) 2022-11-06 22:31:38 +00:00
renovate[bot]
2b92fa5efb Update dependency ts-jest to v28.0.8 (#7101) 2022-11-06 17:11:09 +00:00
renovate[bot]
334fe4d437 Update dependency tinymce to v5.10.6 (#7100) 2022-11-06 17:10:52 +00:00
renovate[bot]
70297b6a2a Update dependency reselect to v4.1.7 (#7097) 2022-11-06 16:34:36 +00:00
renovate[bot]
22ce3d4f7e Update dependency slugify to v1.6.5 (#7098) 2022-11-06 16:34:20 +00:00
renovate[bot]
5f0550ae51 Update dependency source-map-loader to v3.0.2 (#7099) 2022-11-06 16:34:01 +00:00
renovate[bot]
644de0016f Update dependency multiparty to v4.2.3 (#7088) 2022-11-06 15:47:31 +00:00
renovate[bot]
952cfa5689 Update dependency react-native-rsa-native to v2.0.5 (#7095) 2022-11-06 14:39:33 +00:00
renovate[bot]
47f62004b6 Update dependency react-native-file-viewer to v2.1.5 (#7094) 2022-11-06 14:39:23 +00:00
renovate[bot]
fc6c299198 Update dependency re-resizable to v6.9.9 (#7093) 2022-11-06 14:39:09 +00:00
renovate[bot]
ec93c7013a Update dependency re-reselect to v4.0.1 (#7092) 2022-11-06 14:38:57 +00:00
renovate[bot]
c188dafec4 Update dependency node-cron to v3.0.2 (#7089) 2022-11-06 14:38:47 +00:00
renovate[bot]
f9c5792791 Update dependency electron-rebuild to v3.2.9 (#7083) 2022-11-06 14:38:02 +00:00
Laurent Cozic
dfdee74242 Tools: Trying to fix CI - macOS translation kit not needed 2022-11-06 14:37:26 +00:00
Laurent Cozic
5f0144cc23 Tools: Trying to fix CI - macOS translation kit not needed 2022-11-06 13:02:31 +00:00
renovate[bot]
fed35668ff Update dependency nodemon to v2.0.20 (#7090) 2022-11-06 12:39:18 +00:00
renovate[bot]
058377da40 Update dependency glob to v7.2.3 (#7085) 2022-11-06 12:38:58 +00:00
renovate[bot]
e4db0240e4 Update dependency electron-notarize to v1.2.2 (#7082) 2022-11-06 12:38:32 +00:00
renovate[bot]
ba117ed430 Update dependency moment to v2.29.4 (#7087) 2022-11-06 12:37:47 +00:00
renovate[bot]
086fb5c94d Update dependency jquery to v3.6.1 (#7086) 2022-11-06 12:37:39 +00:00
renovate[bot]
0907895e13 Update dependency gh-release-assets to v2.0.1 (#7084) 2022-11-06 12:37:31 +00:00
Laurent Cozic
d30a8b3a9e lock file 2022-11-06 12:37:08 +00:00
renovate[bot]
16397893c1 Update dependency @types/react-dom to v16.9.17 (#7080) 2022-11-05 20:12:45 +00:00
renovate[bot]
a1ad28bcaf Update dependency chokidar to v3.5.3 (#7081) 2022-11-05 20:12:21 +00:00
renovate[bot]
7be5462a34 Update dependency @types/fs-extra to v9 (#7067) 2022-11-05 18:52:14 +00:00
renovate[bot]
2eb9e727e7 Update dependency @types/node to v18 (#7068) 2022-11-05 18:52:00 +00:00
renovate[bot]
1771f721b7 Update dependency @types/react to v17.0.52 (#7079) 2022-11-05 18:51:42 +00:00
renovate[bot]
2d730e1693 Update dependency sharp to v0.31.2 (#7078) 2022-11-05 18:51:21 +00:00
Laurent Cozic
3c4c948fbd Tools: Fix CI 2022-11-05 17:56:38 +00:00
renovate[bot]
1f11b833b0 Update dependency @types/jsdom to v16.2.15 (#7075) 2022-11-05 17:15:22 +00:00
renovate[bot]
3bccdca9d6 Update dependency bulma to v0.9.4 (#7074) 2022-11-05 17:15:12 +00:00
renovate[bot]
3fd03e84ed Update dependency @types/uuid to v8.3.4 (#7073) 2022-11-05 17:15:03 +00:00
renovate[bot]
8243d31836 Update dependency node-fetch to v2.6.7 (#7069) 2022-11-05 17:13:55 +00:00
Laurent Cozic
faacf12bf3 Tools: Add basic test to CI to ensure created Joplin Server image is valid 2022-11-05 16:57:09 +00:00
Laurent Cozic
22d7f57618 Server v2.9.7 2022-11-05 16:52:15 +00:00
Laurent Cozic
cb77adab3b Server: Fix Node version 2022-11-05 16:51:09 +00:00
Laurent Cozic
12531a63f9 Tools: Also pin dev dependencies 2022-11-05 14:52:40 +00:00
renovate[bot]
faab2ca998 Update dependency @electron/remote to v2.0.8 (#7071) 2022-11-05 14:28:25 +00:00
renovate[bot]
9633ece009 Update dependency @electron/remote to v2.0.8 (#7071) 2022-11-05 14:28:06 +00:00
renovate[bot]
683807d501 Update dependency @joeattardi/emoji-button to v4.6.4 (#7072) 2022-11-05 14:27:35 +00:00
Laurent Cozic
3a09945ad0 Tools: Pin all dependencies 2022-11-05 13:09:41 +00:00
Laurent Cozic
65c1fe1cdc Upgrade to @react-native-community/slider 4.3.3 2022-11-05 12:22:47 +00:00
Laurent Cozic
0ebaf3b0ce Chore: Clean up tests 2022-11-05 12:17:56 +00:00
Laurent Cozic
85ab378ce6 Server v2.9.6 2022-11-05 11:52:49 +00:00
Laurent Cozic
3e60d285e9 Lock file 2022-11-05 11:50:46 +00:00
Laurent Cozic
c4577715bc Renovate 2022-11-05 11:50:45 +00:00
Laurent Cozic
a9d2af5631 Chore: Fixed server origin (regression) 2022-11-05 11:50:45 +00:00
renovate[bot]
917b60aee4 Update dependency @testing-library/react-hooks to v8 (#7066) 2022-11-05 11:50:09 +00:00
renovate[bot]
2c4f0290dc Update dependency @react-native-community/netinfo to v9 (#7062) 2022-11-05 11:20:30 +00:00
Laurent Cozic
81209956c0 Tools: Disable TCP/UDP offload on macOS and Linux 2022-11-05 10:16:23 +00:00
Laurent Cozic
e43bae5133 Update @react-native-community/datetimepicker@npm:6.5.4 2022-11-05 10:11:10 +00:00
Laurent Cozic
bbed72b564 Tools: Ignore a few packages for Renovate 2022-11-05 10:03:00 +00:00
renovate[bot]
950f94654c Update dependency @react-native-community/geolocation to v3 (#7061) 2022-11-05 09:59:15 +00:00
renovate[bot]
327d4827d9 Update dependency @koa/cors to v4 (#7059) 2022-11-05 09:58:11 +00:00
renovate[bot]
3c4953fdd9 Update react monorepo to v16.14.0 (#7053) 2022-11-05 09:56:05 +00:00
renovate[bot]
39a5299293 Update dependency yargs to v16.2.0 (#7050) 2022-11-05 09:55:54 +00:00
Laurent Cozic
50e4ca2149 Update readme 2022-11-05 00:17:45 +00:00
Laurent Cozic
49d500cbf1 Tools: Trying to fix CI 2022-11-05 00:14:43 +00:00
Laurent Cozic
76773831ba Tools: Renovate ignore 2022-11-04 20:22:27 +00:00
renovate[bot]
9e73946a31 Update dependency typescript to v3.9.10 (#7048) 2022-11-04 20:14:19 +00:00
renovate[bot]
b1110f768d Update dependency styled-components to v5.3.6 (#7043) 2022-11-04 20:13:51 +00:00
renovate[bot]
439289ce24 Update dependency sharp to ^0.31.0 (#7041) 2022-11-04 20:13:18 +00:00
renovate[bot]
8fc92886ee Update dependency resolve to v1.22.1 (#7039) 2022-11-04 20:12:21 +00:00
renovate[bot]
640721939c Update dependency react-redux to v5.1.2 (#7038) 2022-11-04 20:12:03 +00:00
Laurent Cozic
ccf5d204f0 Server: Fixed account activation logic 2022-11-04 16:36:54 +00:00
Laurent Cozic
21883b4e6b Server: Fail-safe when trying to delete a non-disabled account 2022-11-04 16:18:41 +00:00
Laurent Cozic
bbc4228ed9 Server: When re-activating an account, remove it from the deletion queue 2022-11-04 15:30:04 +00:00
Laurent Cozic
e51d9c5621 Tools: Trying to disable clipper build for now 2022-11-04 15:26:17 +00:00
Laurent Cozic
119e457d5e Tools: Trying to fix clipper webpack config 2022-11-04 14:23:43 +00:00
Laurent Cozic
7291ab876e Tools: Trying to fix clipper webpack config 2022-11-04 13:45:21 +00:00
Laurent Cozic
e10bc33c3b Update renovate.json 2022-11-04 12:39:53 +00:00
Laurent Cozic
f2f6f8ec78 CI: Upgrade to Node 18 2022-11-04 11:48:02 +00:00
Laurent Cozic
f34078bd96 Server: Upgrade to Node 18
To fix error ERR_OSSL_EVP_UNSUPPORTED

Ref: https://stackoverflow.com/questions/69394632
Ref: https://github.com/laurent22/joplin/actions/runs/3392538624/jobs/5638855521#step:6:4386
2022-11-04 11:33:21 +00:00
Laurent Cozic
a8ed365bcf Chore: Fixed types in server pckage 2022-11-04 09:08:49 +00:00
Laurent Cozic
c8e8c3b20c Tools: Upgrade types/koa to 2.13.4 2022-11-03 22:41:15 +00:00
Laurent Cozic
dea15e749b Tools: Update Node version to 18 on CI 2022-11-03 20:18:11 +00:00
Laurent Cozic
1ab836961a Tools: Upgrade http-server to 0.13.0 2022-11-03 20:14:12 +00:00
Laurent Cozic
ef0286bcc1 Doc: Fixed Markdown title 2022-11-03 20:13:52 +00:00
Laurent Cozic
578d938a37 Tools: Make renovate ignore some packages 2022-11-03 20:10:34 +00:00
Laurent Cozic
dc92546ac5 Server: Upgrade Koa framework to 2.13.4 2022-11-03 20:05:57 +00:00
renovate[bot]
ec26d65311 Update dependency nan to v2.17.0 (#7029) 2022-11-03 08:40:25 +00:00
renovate[bot]
eef81b2b86 Update dependency dotenv to v8.6.0 (#7019) 2022-11-02 22:14:01 +00:00
renovate[bot]
99655f998a Update dependency electron to v19.1.4 (#7020) 2022-11-02 22:13:32 +00:00
renovate[bot]
5456554dd1 Update dependency domhandler to v3.3.0 (#7017) 2022-11-02 19:52:28 +00:00
renovate[bot]
91f9c6b7be Update dependency css-loader to v3.6.0 (#7016) 2022-11-02 19:51:51 +00:00
renovate[bot]
1f24cc24c0 Update dependency color to v3.2.1 (#7015) 2022-11-02 17:38:00 +00:00
renovate[bot]
0e810092a4 Update dependency async-mutex to ^0.4.0 (#7013) 2022-11-02 16:32:55 +00:00
renovate[bot]
750734129c Update dependency turndown to v4.0.2 (#7003) 2022-11-02 16:02:26 +00:00
renovate[bot]
a1157110ec Update dependency postcss-safe-parser to v4.0.2 (#7001) 2022-11-02 16:02:11 +00:00
Laurent Cozic
c87b055528 Update renovate.json 2022-11-02 15:22:48 +00:00
renovate[bot]
0ffc5c526a Update Yarn to v3.2.4 (#7006) 2022-11-02 15:01:28 +00:00
renovate[bot]
ef40e945af Update dependency @types/react to v16.14.34 (#7008) 2022-11-02 15:01:12 +00:00
renovate[bot]
ecef31ab5b Update dependency turndown-attendant to v0.0.3 (#7004) 2022-11-02 13:24:33 +00:00
Laurent Cozic
24caa553e3 Tools: Ignore react-native dependency for Renovate 2022-11-02 13:22:36 +00:00
Laurent Cozic
d151ca09b8 Tools: Ignore react-native dependency for Renovate 2022-11-02 13:22:04 +00:00
renovate[bot]
6536dde488 Update dependency terser-webpack-plugin to v2.3.8 (#7002) 2022-11-02 13:19:17 +00:00
renovate[bot]
120ba40d21 Update dependency postcss-preset-env to v6.7.1 (#7000) 2022-11-02 13:08:19 +00:00
renovate[bot]
db0cdea539 Update dependency optimize-css-assets-webpack-plugin to v5.0.8 (#6999) 2022-11-02 11:29:02 +00:00
renovate[bot]
8b176ff207 Update dependency knex to v0.95.15 (#6998) 2022-11-02 11:28:41 +00:00
renovate[bot]
9d137d94ac Update dependency gradle to v6.9.3 (#6995) 2022-11-02 11:28:15 +00:00
renovate[bot]
acd1b2f522 Update dependency @types/react-redux to v7.1.24 (#6994) 2022-11-02 11:27:47 +00:00
Laurent Cozic
f81891d320 Tools: Fixed test 2022-11-02 10:04:31 +00:00
Joplin Bot
07b8e66122 Doc: Auto-update documentation
Auto-updated using release-website.sh
2022-11-01 18:19:46 +00:00
89 changed files with 5070 additions and 5045 deletions

View File

@@ -130,12 +130,11 @@ fi
# =============================================================================
# Check that we didn't lose any string due to gettext not being able to parse
# newly modified or added scripts. This is convenient to quickly view on GitHub
# what commit may have broken translation building. We run this on macOS because
# we need the latest version of gettext (and stable Ubuntu doesn't have it).
# what commit may have broken translation building.
# =============================================================================
if [ "$IS_PULL_REQUEST" == "1" ] || [ "$IS_DEV_BRANCH" = "1" ]; then
if [ "$IS_MACOS" == "1" ]; then
if [ "$IS_LINUX" == "1" ]; then
echo "Step: Checking for lost translation strings..."
xgettext --version

44
.github/workflows/build-android.yml vendored Normal file
View File

@@ -0,0 +1,44 @@
# The goal of this action is to compile the Android debug build. That should
# tell us automatically if something got broken when a dependency was changed.
name: react-native-android-build-apk
on: [push, pull_request]
jobs:
pre_job:
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
concurrent_skipping: 'same_content_newer'
BuildAndroidDebug:
needs: pre_job
if: needs.pre_job.outputs.should_skip != 'true'
runs-on: ubuntu-latest
steps:
- name: Install Linux dependencies
run: |
sudo apt-get update || true
sudo apt-get install -y libsecret-1-dev
- uses: actions/setup-node@v2
with:
node-version: '18'
- name: Install Yarn
run: |
corepack enable
- uses: actions/checkout@v2
- name: Install
run: yarn install
- name: Build Android Release
run: |
cd packages/app-mobile/android && ./gradlew assembleDebug

View File

@@ -1,13 +1,41 @@
name: Joplin Continuous Integration
on: [push, pull_request]
jobs:
pre_job:
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
concurrent_skipping: 'same_content_newer'
Main:
needs: pre_job
if: needs.pre_job.outputs.should_skip != 'true'
runs-on: ${{ matrix.os }}
strategy:
matrix:
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 -
@@ -21,12 +49,12 @@ jobs:
sudo apt-get install -y libsecret-1-dev
sudo apt-get install -y translate-toolkit
- name: Install macOS dependencies
if: runner.os == 'macOS'
run: |
brew update
brew install gettext
brew install translate-toolkit
# - name: Install macOS dependencies
# if: runner.os == 'macOS'
# run: |
# brew update
# brew install gettext
# brew install translate-toolkit
- name: Install Docker Engine
# if: runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/server-v')
@@ -48,7 +76,7 @@ jobs:
- uses: olegtarasov/get-tag@v2.1
- uses: actions/setup-node@v2
with:
node-version: '16'
node-version: '18'
- name: Install Yarn
run: |
@@ -106,6 +134,8 @@ jobs:
yarn install && cd packages/app-desktop && yarn run dist --publish=never
ServerDockerImage:
needs: pre_job
if: needs.pre_job.outputs.should_skip != 'true'
runs-on: ${{ matrix.os }}
strategy:
matrix:
@@ -130,7 +160,7 @@ jobs:
- uses: actions/setup-node@v2
with:
node-version: '16'
node-version: '18'
- name: Install Yarn
run: |
@@ -143,4 +173,7 @@ jobs:
run: |
yarn install
yarn run buildServerDocker --tag-name server-v0.0.0 --repository joplin/server
# Basic test to ensure that the created build is valid. It should exit with
# code 0 if it works.
docker run joplin/server:0.0.0-beta node dist/app.js migrate list

View File

@@ -0,0 +1,33 @@
diff --git a/android/build.gradle b/android/build.gradle
index 1ae415331855895ed6c65d72e155ff91d02b4b39..a7548535a7fb08800fb4731c1d8e36efa8afa1ae 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -22,7 +22,7 @@ def safeExtGet(prop, fallback) {
}
apply plugin: 'com.android.library'
-apply plugin: 'maven'
+apply plugin: 'maven-publish'
buildscript {
// The Android Gradle plugin is only required when opening the android folder stand-alone.
@@ -41,7 +41,7 @@ buildscript {
}
apply plugin: 'com.android.library'
-apply plugin: 'maven'
+apply plugin: 'maven-publish'
android {
compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION)
@@ -140,10 +140,5 @@ afterEvaluate { project ->
task installArchives(type: Upload) {
configuration = configurations.archives
- repositories.mavenDeployer {
- // Deploy to react-native-event-bridge/maven, ready to publish to npm
- repository url: "file://${projectDir}/../android/maven"
- configureReactNativePom pom
- }
}
}

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 \
@@ -51,7 +51,7 @@ RUN BUILD_SEQUENCIAL=1 yarn install --inline-builds \
# from a smaller base image.
# =============================================================================
FROM node:16-bullseye-slim
FROM node:18-bullseye-slim
ARG user=joplin
RUN useradd --create-home --shell /bin/bash $user

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

@@ -2,5 +2,6 @@
"packages": [
"packages/*"
],
"version": "independent"
"version": "independent",
"useWorkspaces": true
}

View File

@@ -62,30 +62,33 @@
}
},
"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.42.1",
"@typescript-eslint/parser": "5.42.1",
"cspell": "5.21.2",
"eslint": "8.27.0",
"eslint-interactive": "10.2.0",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-promise": "6.1.1",
"eslint-plugin-react": "7.31.10",
"fs-extra": "8.1.0",
"glob": "7.2.3",
"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.20"
},
"packageManager": "yarn@3.1.1"
"packageManager": "yarn@3.2.4",
"resolutions": {
"joplin-rn-alarm-notification@1.0.5": "patch:joplin-rn-alarm-notification@npm:1.0.5#.yarn/patches/joplin-rn-alarm-notification-npm-1.0.5-662e871c03"
}
}

View File

@@ -1,4 +1,4 @@
const { BaseCommand } = require('./base-command.js');
const BaseCommand = require('./base-command').default;
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;

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.1251.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.9.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.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.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.10",
"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": "18.11.9",
"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.

File diff suppressed because it is too large Load Diff

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",
@@ -27,25 +27,25 @@
"jest-resolve": "24.9.0",
"jest-watch-typeahead": "0.4.2",
"mini-css-extract-plugin": "0.9.0",
"optimize-css-assets-webpack-plugin": "5.0.3",
"optimize-css-assets-webpack-plugin": "5.0.8",
"pnp-webpack-plugin": "1.6.0",
"postcss-flexbugs-fixes": "4.1.0",
"postcss-loader": "3.0.0",
"postcss-normalize": "8.0.1",
"postcss-preset-env": "6.7.0",
"postcss-safe-parser": "4.0.1",
"postcss-preset-env": "6.7.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",
"style-loader": "1.1.3",
"terser-webpack-plugin": "2.3.4",
"terser-webpack-plugin": "2.3.8",
"ts-pnp": "1.1.5",
"url-loader": "2.3.0",
"webpack": "4.41.5",
@@ -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,24 @@
"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",
"@types/react-redux": "7.1.9",
"@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",
"@testing-library/react-hooks": "8.0.1",
"@types/jest": "26.0.24",
"@types/node": "18.11.9",
"@types/react": "16.14.34",
"@types/react-redux": "7.1.24",
"@types/styled-components": "5.1.26",
"babel-cli": "6.26.0",
"babel-preset-react": "6.24.1",
"electron": "19.1.4",
"electron-builder": "23.6.0",
"electron-notarize": "1.2.2",
"electron-rebuild": "3.2.9",
"glob": "7.2.3",
"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 +133,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.65.9",
"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.9.0",
"mark.js": "8.11.1",
"md5": "2.3.0",
"moment": "2.29.4",
"node-fetch": "1.7.3",
"node-notifier": "8.0.2",
"node-rsa": "1.1.1",
"pretty-bytes": "5.6.0",
"re-resizable": "6.9.9",
"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.7",
"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.6"
}
}

View File

@@ -0,0 +1 @@
2.7.4

View File

@@ -0,0 +1,4 @@
source 'https://rubygems.org'
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby '2.7.4'
gem 'cocoapods', '~> 1.11', '>= 1.11.2'

View File

@@ -0,0 +1,96 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.5)
rexml
activesupport (6.1.4.4)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
atomos (0.1.3)
claide (1.1.0)
cocoapods (1.11.2)
addressable (~> 2.8)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.11.2)
cocoapods-deintegrate (>= 1.0.3, < 2.0)
cocoapods-downloader (>= 1.4.0, < 2.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
cocoapods-search (>= 1.0.0, < 2.0)
cocoapods-trunk (>= 1.4.0, < 2.0)
cocoapods-try (>= 1.1.0, < 2.0)
colored2 (~> 3.1)
escape (~> 0.0.4)
fourflusher (>= 2.3.0, < 3.0)
gh_inspector (~> 1.0)
molinillo (~> 0.8.0)
nap (~> 1.0)
ruby-macho (>= 1.0, < 3.0)
xcodeproj (>= 1.21.0, < 2.0)
cocoapods-core (1.11.2)
activesupport (>= 5.0, < 7)
addressable (~> 2.8)
algoliasearch (~> 1.0)
concurrent-ruby (~> 1.1)
fuzzy_match (~> 2.0.4)
nap (~> 1.0)
netrc (~> 0.11)
public_suffix (~> 4.0)
typhoeus (~> 1.0)
cocoapods-deintegrate (1.0.5)
cocoapods-downloader (1.5.1)
cocoapods-plugins (1.0.0)
nap
cocoapods-search (1.0.1)
cocoapods-trunk (1.6.0)
nap (>= 0.8, < 2.0)
netrc (~> 0.11)
cocoapods-try (1.2.0)
colored2 (3.1.2)
concurrent-ruby (1.1.9)
escape (0.0.4)
ethon (0.15.0)
ffi (>= 1.15.0)
ffi (1.15.5)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
httpclient (2.8.3)
i18n (1.9.1)
concurrent-ruby (~> 1.0)
json (2.6.1)
minitest (5.15.0)
molinillo (0.8.0)
nanaimo (0.3.0)
nap (1.1.0)
netrc (0.11.0)
public_suffix (4.0.6)
rexml (3.2.5)
ruby-macho (2.5.1)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (2.0.4)
concurrent-ruby (~> 1.0)
xcodeproj (1.21.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
zeitwerk (2.5.4)
PLATFORMS
ruby
DEPENDENCIES
cocoapods (~> 1.11, >= 1.11.2)
RUBY VERSION
ruby 2.7.4p191
BUNDLED WITH
2.2.27

View File

@@ -117,7 +117,7 @@ def jscFlavor = 'org.webkit:android-jsc-intl:+'
/**
* Whether to enable the Hermes VM.
*
* This should be set on project.ext.react and mirrored here. If it is not set
* This should be set on project.ext.react and that value will be read here. If it is not set
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced.
*/

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
<selector>
<!--
This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).
The item below with state_pressed="false" and state_focused="false" causes a NullPointerException.
NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'
<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR.
-->
<item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
</selector>
</inset>

View File

@@ -3,6 +3,7 @@
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
</style>
</resources>

View File

@@ -21,8 +21,6 @@ buildscript {
allprojects {
repositories {
mavenCentral()
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
@@ -31,7 +29,13 @@ allprojects {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
mavenCentral {
// We don't want to fetch react-native from Maven Central as there are
// older versions over there.
content {
excludeGroup "com.facebook.react"
}
}
google()
maven { url 'https://www.jitpack.io' }
}

View File

@@ -9,7 +9,7 @@
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# DDefault value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -102,39 +102,43 @@ describe('markdownCommands.toggleList', () => {
'# List test\n * This\n * is\na\ntest\n * of list toggling'
);
// The below test:
// `expect(editor.state.doc.toString()).toBe(expectedChecklistPart)`
// randomly fails on CI, so disabling it for now.
// Put the cursor in the middle of the list
editor.dispatch({ selection: EditorSelection.cursor(preSubListText.length) });
// Sublists should be changed
toggleList(ListType.CheckList)(editor);
const expectedChecklistPart =
'# List test\n - [ ] This\n - [ ] is\n - [ ] a\n - [ ] test\n - [ ] of list toggling';
expect(editor.state.doc.toString()).toBe(
expectedChecklistPart
);
// // Put the cursor in the middle of the list
// editor.dispatch({ selection: EditorSelection.cursor(preSubListText.length) });
editor.dispatch({ selection: EditorSelection.cursor(editor.state.doc.length) });
editor.dispatch(editor.state.replaceSelection('\n\n\n'));
// // Sublists should be changed
// toggleList(ListType.CheckList)(editor);
// const expectedChecklistPart =
// '# List test\n - [ ] This\n - [ ] is\n - [ ] a\n - [ ] test\n - [ ] of list toggling';
// expect(editor.state.doc.toString()).toBe(
// expectedChecklistPart
// );
// toggleList should also create a new list if the cursor is on an empty line.
toggleList(ListType.OrderedList)(editor);
editor.dispatch(editor.state.replaceSelection('Test.\n2. Test2\n3. Test3'));
// editor.dispatch({ selection: EditorSelection.cursor(editor.state.doc.length) });
// editor.dispatch(editor.state.replaceSelection('\n\n\n'));
expect(editor.state.doc.toString()).toBe(
`${expectedChecklistPart}\n\n\n1. Test.\n2. Test2\n3. Test3`
);
// // toggleList should also create a new list if the cursor is on an empty line.
// toggleList(ListType.OrderedList)(editor);
// editor.dispatch(editor.state.replaceSelection('Test.\n2. Test2\n3. Test3'));
toggleList(ListType.CheckList)(editor);
expect(editor.state.doc.toString()).toBe(
`${expectedChecklistPart}\n\n\n- [ ] Test.\n- [ ] Test2\n- [ ] Test3`
);
// expect(editor.state.doc.toString()).toBe(
// `${expectedChecklistPart}\n\n\n1. Test.\n2. Test2\n3. Test3`
// );
// The entire checklist should have been selected (and thus will now be indented)
increaseIndent(editor);
expect(editor.state.doc.toString()).toBe(
`${expectedChecklistPart}\n\n\n\t- [ ] Test.\n\t- [ ] Test2\n\t- [ ] Test3`
);
// toggleList(ListType.CheckList)(editor);
// expect(editor.state.doc.toString()).toBe(
// `${expectedChecklistPart}\n\n\n- [ ] Test.\n- [ ] Test2\n- [ ] Test3`
// );
// // The entire checklist should have been selected (and thus will now be indented)
// increaseIndent(editor);
// expect(editor.state.doc.toString()).toBe(
// `${expectedChecklistPart}\n\n\n\t- [ ] Test.\n\t- [ ] Test2\n\t- [ ] Test3`
// );
});
it('should toggle a numbered list without changing its sublists', () => {

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-get-random-values (1.7.1):
- react-native-geolocation (3.0.3):
- React-Core
- react-native-get-random-values (1.8.0):
- 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-native-rsa-native (2.0.5):
- 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,17 +316,17 @@ PODS:
- React-Core
- RNCPushNotificationIOS (1.10.1):
- React-Core
- RNDateTimePicker (3.5.2):
- RNDateTimePicker (6.5.4):
- React-Core
- RNFileViewer (2.1.4):
- RNFileViewer (2.1.5):
- React-Core
- RNFS (2.20.0):
- React-Core
- RNFS (2.18.0):
- React
- RNQuickAction (0.3.13):
- React
- RNSecureRandom (1.0.0):
- React
- RNShare (7.3.2):
- RNShare (7.9.1):
- React-Core
- RNVectorIcons (7.1.0):
- React
@@ -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-get-random-values: 2c4ff6b44cb71291dabe9a8ae87d3877dcf387da
react-native-geolocation: 2b4052c14edff18ba402795f4ce0f2a093c4ba3e
react-native-get-random-values: a6ea6a8a65dc93e96e24a11105b1a9c8cfe1d72a
react-native-image-picker: 4bc9ed38c8be255b515d8c88babbaf74973f91a8
react-native-image-resizer: d9fb629a867335bdc13230ac2a58702bb8c8828f
react-native-netinfo: 3d3769f0d65de15c83a9bf1346f8be71de5a24bf
react-native-rsa-native: 1f6bba06dd02f0e652a66a384c75c270f7a0062f
react-native-slider: e99fc201cefe81270fc9d81714a7a0f5e566b168
react-native-netinfo: f80db8cac2151405633324cb645c60af098ee461
react-native-rsa-native: 12132eb627797529fdb1f0d22fd0f8f9678df64a
react-native-slider: 7d19220da2f2ae7cbb9aa80127cb73c597fa221f
react-native-sqlite-storage: 418ef4afc5e6df6ce3574c4617e5f0b65cffde55
react-native-version-info: a106f23009ac0db4ee00de39574eb546682579b9
react-native-webview: 0aa2cde4ee7e3e1c5fffdf64dbce9c709aa18155
@@ -556,12 +556,12 @@ SPEC CHECKSUMS:
rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
RNCPushNotificationIOS: 87b8d16d3ede4532745e05b03c42cff33a36cc45
RNDateTimePicker: 7658208086d86d09e1627b5c34ba0cf237c60140
RNFileViewer: 83cc066ad795b1f986791d03b56fe0ee14b6a69f
RNFS: 3ab21fa6c56d65566d1fb26c2228e2b6132e5e32
RNDateTimePicker: 93b9659fbd0fd91a4fb568bf8f5c00b0175aa1ba
RNFileViewer: ce7ca3ac370e18554d35d6355cffd7c30437c592
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93
RNSecureRandom: 0dcee021fdb3d50cd5cee5db0ebf583c42f5af0e
RNShare: d76b8c9c6e6ffb38fc18f40b4338c9d867592ed3
RNShare: a5dc3b9c53ddc73e155b8cd9a94c70c91913c43c
RNVectorIcons: bc69e6a278b14842063605de32bec61f0b251a59
Yoga: 2b4a01651f42a32f82e6cef3830a3ba48088237f

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.5",
"@react-native-community/geolocation": "2.1.0",
"@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": "6.0.3",
"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.8.1",
"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": "0.67.2",
"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.5",
"react-native-fs": "2.20.0",
"react-native-get-random-values": "1.8.0",
"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.16.1",
"react-native-quick-actions": "0.3.13",
"react-native-rsa-native": "2.0.5",
"react-native-securerandom": "1.0.1",
"react-native-share": "7.9.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.1",
"react-native-webview": "11.23.1",
"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.1.2",
"@types/fs-extra": "9.0.13",
"@types/jest": "28.1.8",
"@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.3",
"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.20",
"ts-jest": "28.0.8",
"ts-loader": "9.4.1",
"ts-node": "10.9.1",
"typescript": "4.7.4",
"uglify-js": "3.17.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.3.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": "18.11.9",
"@typescript-eslint/eslint-plugin": "1.13.0",
"@typescript-eslint/parser": "1.13.0",
"coveralls": "3.1.1",
"eslint": "8.27.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.5",
"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": "18.11.9",
"@types/node-rsa": "1.1.1",
"@types/react": "17.0.52",
"clean-html": "1.5.0",
"jest": "26.6.3",
"sharp": "^0.26.2",
"typescript": "^4.0.5"
"sharp": "0.31.2",
"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.204.0",
"@aws-sdk/s3-request-presigner": "3.204.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": "1.0.0",
"base64-stream": "1.0.0",
"builtin-modules": "3.3.0",
"chokidar": "3.5.3",
"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.15.2",
"form-data": "2.5.1",
"fs-extra": "5.0.0",
"hpagent": "1.2.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.4",
"multiparty": "4.2.3",
"mustache": "4.2.0",
"nanoid": "3.3.4",
"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.1",
"read-chunk": "2.1.0",
"redux": "3.7.2",
"relative": "3.0.2",
"reselect": "4.1.7",
"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.10",
"uuid": "3.4.0",
"word-wrap": "1.2.3",
"xml2js": "0.4.23"
},
"gitHead": "eb4b0e64eab40a51b0895d3a40a9d8c3cb7b1b14"
}

View File

@@ -1,52 +0,0 @@
{
"name": "@joplin/pdf-viewer",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@types/prop-types": {
"version": "15.7.5",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
"dev": true
},
"@types/react": {
"version": "18.0.14",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.14.tgz",
"integrity": "sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q==",
"dev": true,
"requires": {
"@types/prop-types": "*",
"@types/scheduler": "*",
"csstype": "^3.0.2"
}
},
"@types/react-dom": {
"version": "16.9.0",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.0.tgz",
"integrity": "sha512-OL2lk7LYGjxn4b0efW3Pvf2KBVP0y1v3wip1Bp7nA79NkOpElH98q3WdCEdDj93b2b0zaeBG9DvriuKjIK5xDA==",
"dev": true,
"requires": {
"@types/react": "*"
}
},
"@types/scheduler": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
"integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
"dev": true
},
"csstype": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==",
"dev": true
},
"typescript": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz",
"integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==",
"dev": true
}
}
}

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.8",
"@types/pdfjs-dist": "2.10.378",
"@types/react": "16.14.34",
"@types/react-dom": "18.0.8",
"@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.8",
"ts-loader": "9.4.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.16.105",
"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.1",
"node-fetch": "2.6.7",
"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": "18.11.9",
"jest": "26.6.3",
"source-map-loader": "3.0.2",
"typescript": "4.1.3",
"webpack": "^5.65.0",
"webpack-cli": "^4.9.1"
"webpack": "5.65.0",
"webpack-cli": "4.10.0"
},
"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": "18.11.9",
"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.2.0",
"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.7",
"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.204.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",
"knex": "0.95.4",
"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/cors": "4.0.0",
"@types/uuid": "8.3.4",
"bcryptjs": "2.4.3",
"bulma": "0.9.4",
"bulma-prefers-dark": "0.1.0-beta.1",
"compare-versions": "3.6.0",
"dayjs": "1.11.6",
"formidable": "1.2.6",
"fs-extra": "8.1.0",
"html-entities": "1.4.0",
"jquery": "3.6.1",
"knex": "0.95.15",
"koa": "2.13.4",
"markdown-it": "12.3.2",
"mustache": "3.2.1",
"nanoid": "2.1.11",
"node-cron": "3.0.2",
"node-env-file": "0.1.8",
"nodemailer": "6.8.0",
"nodemon": "2.0.20",
"pg": "8.8.0",
"pretty-bytes": "5.6.0",
"prettycron": "0.10.0",
"query-string": "6.14.1",
"rate-limiter-flexible": "2.4.1",
"raw-body": "2.5.1",
"sqlite3": "4.2.0",
"stripe": "8.222.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.15.1",
"@types/fs-extra": "9.0.13",
"@types/jest": "26.0.24",
"@types/jest-expect-message": "1.0.4",
"@types/jsdom": "16.2.15",
"@types/koa": "2.13.4",
"@types/markdown-it": "12.2.3",
"@types/mustache": "0.8.32",
"@types/nodemailer": "6.4.6",
"@types/yargs": "17.0.7",
"@types/zxcvbn": "4.4.1",
"gulp": "4.0.2",
"jest": "26.6.3",
"jest-expect-message": "1.1.3",
"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

@@ -22,38 +22,38 @@
"dependencies": {
"@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/node-fetch": "2.6.2",
"@types/yargs": "16.0.4",
"dayjs": "1.11.6",
"execa": "4.1.0",
"fs-extra": "4.0.3",
"gettext-parser": "1.4.0",
"glob": "7.2.3",
"markdown-it": "8.4.2",
"md5-file": "4.0.0",
"moment": "2.29.4",
"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.2",
"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.15.1",
"@types/fs-extra": "9.0.13",
"@types/jest": "26.0.24",
"@types/mustache": "0.8.32",
"@types/node": "18.11.9",
"gettext-extractor": "3.6.0",
"gulp": "4.0.2",
"jest": "26.6.3",
"rss": "1.2.2",
"sass": "1.56.1",
"sqlite3": "5.0.2",
"typescript": "4.5.2"
},
"gitHead": "eb4b0e64eab40a51b0895d3a40a9d8c3cb7b1b14"
}

View File

@@ -8,11 +8,11 @@
"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",
"turndown-attendant": "0.0.2"
"browserify": "14.5.0",
"rollup": "0.50.1",
"standard": "10.0.3",
"turndown": "4.0.2",
"turndown-attendant": "0.0.3"
},
"files": [
"lib",

View File

@@ -11,17 +11,17 @@
"jsdom": false
},
"dependencies": {
"css": "^2.2.4",
"html-entities": "^1.2.1",
"jsdom": "^15.2.1"
"css": "3.0.0",
"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,15 @@
# Joplin changelog
## [v2.9.12](https://github.com/laurent22/joplin/releases/tag/v2.9.12) (Pre-release) - 2022-11-01T17:06:05Z
- Improved: Display the plugin name in dialog boxes created by plugins ([#6979](https://github.com/laurent22/joplin/issues/6979))
- Improved: Regression: Plugin CSS files were no longer being loaded correctly ([99a61f1](https://github.com/laurent22/joplin/commit/99a61f1))
- Improved: Remove unnecessary PDF viewer messages ([db4c6ea](https://github.com/laurent22/joplin/commit/db4c6ea))
- Fixed: Fix exporting resources to md and md + frontmatter ([#6768](https://github.com/laurent22/joplin/issues/6768)) ([#6721](https://github.com/laurent22/joplin/issues/6721) by [@SFulpius](https://github.com/SFulpius))
- Fixed: Fixed crash when setting spellchecker language to en-IN ([ae17801](https://github.com/laurent22/joplin/commit/ae17801))
- Fixed: Fixed sidebar tag header click ([5b80fbc](https://github.com/laurent22/joplin/commit/5b80fbc))
- Fixed: Fixes an error when importing a shortcut map and canceling the dialog ([#6975](https://github.com/laurent22/joplin/issues/6975) by Ahmed Azzam)
## [v2.9.11](https://github.com/laurent22/joplin/releases/tag/v2.9.11) (Pre-release) - 2022-10-23T16:09:58Z
- New: Add PDF full screen viewer ([#6821](https://github.com/laurent22/joplin/issues/6821) by [@asrient](https://github.com/asrient))

View File

@@ -1,5 +1,18 @@
# Joplin Server Changelog
## [server-v2.9.7](https://github.com/laurent22/joplin/releases/tag/server-v2.9.7) - 2022-11-05T16:51:39Z
- 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

@@ -84,7 +84,7 @@ You may use a special keyboard such as [Multiling O Keyboard](https://play.googl
## The initial sync is very slow, how can I speed it up?
Whenever importing a large number of notes, for example from Evernote, it may take a very long time for the first sync to complete. There are various techniques to speed thing up (if you don't want to simply wait for the sync to complete), which are outlined in [this post](https://discourse.joplinapp.org/t/workaround-for-slow-initial-bulk-sync-after-evernote-import/746?u=laurent).
Whenever importing a large number of notes, for example from Evernote, it may take a very long time for the first sync to complete. There are various techniques to speed this up (if you don't want to simply wait for the sync to complete), which are outlined in [this post](https://discourse.joplinapp.org/t/workaround-for-slow-initial-bulk-sync-after-evernote-import/746?u=laurent).
## Not all notes, folders, or tags are displayed on the mobile app

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

@@ -3,11 +3,62 @@
"extends": [
"config:base"
],
"prConcurrentLimit": 20,
"prHourlyLimit": 0,
"ignorePaths": [
"**/node_modules/**",
"**/bower_components/**",
"packages/app-cli/tests/**",
"packages/plugins/**",
"Assets/**"
],
"ignoreDeps": [
"@babel/core",
"@codemirror/commands",
"@codemirror/lang-cpp",
"@codemirror/lang-html",
"@codemirror/lang-java",
"@codemirror/lang-javascript",
"@codemirror/lang-markdown",
"@codemirror/lang-php",
"@codemirror/lang-rust",
"@codemirror/language",
"@codemirror/legacy-modes",
"@codemirror/search",
"@codemirror/state",
"@codemirror/view",
"@fortawesome/fontawesome-svg-core",
"@fortawesome/free-solid-svg-icons",
"@svgr/webpack",
"@types/react-native",
"actions/stale",
"babel-eslint",
"babel-loader",
"babel-preset-react-app",
"browserify",
"codemirror",
"com.android.tools.build:gradle",
"cspell",
"electron",
"jsc-android",
"katex",
"mermaid",
"metro-react-native-babel-preset",
"react-native",
"rollup",
"file-loader",
"gradle",
"html-webpack-plugin",
"typedoc",
"com.facebook.flipper:flipper",
"com.facebook.flipper:flipper-fresco-plugin",
"com.facebook.flipper:flipper-network-plugin",
"webpack"
],
"packageRules": [
{
"matchUpdateTypes": ["patch"],
"automerge": true
}
]
}

7328
yarn.lock

File diff suppressed because it is too large Load Diff