You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-12-26 23:38:08 +02:00
Compare commits
174 Commits
release-2.
...
android_ci
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f895e939a2 | ||
|
|
54df603d6d | ||
|
|
f8bd084504 | ||
|
|
6f1e8e2983 | ||
|
|
739c5dbea5 | ||
|
|
5629a020ee | ||
|
|
e447e154bc | ||
|
|
a84589e3bb | ||
|
|
d21d198325 | ||
|
|
4f6ddfad43 | ||
|
|
42d1f9e2f7 | ||
|
|
f0c3f29ece | ||
|
|
ffe5721c44 | ||
|
|
07807d0a26 | ||
|
|
10d616b2c8 | ||
|
|
8d0525af1b | ||
|
|
8ffc2efa4f | ||
|
|
04bce0cbda | ||
|
|
e4a8a62ead | ||
|
|
2fffaec76e | ||
|
|
f746824494 | ||
|
|
50068dc80f | ||
|
|
d456ace317 | ||
|
|
ab37305625 | ||
|
|
e9f3ce5404 | ||
|
|
7268b2b758 | ||
|
|
1a060ad066 | ||
|
|
17502e3370 | ||
|
|
138e956d6c | ||
|
|
573db70d1a | ||
|
|
daea4021d7 | ||
|
|
53ce917db4 | ||
|
|
a22caf1440 | ||
|
|
2b1f4d7dab | ||
|
|
deacdb3d67 | ||
|
|
0075aa3d34 | ||
|
|
15886839a9 | ||
|
|
f61722dda6 | ||
|
|
38e34adb0d | ||
|
|
5aeaeee87e | ||
|
|
8ed4b7c5b7 | ||
|
|
d0befcc8f4 | ||
|
|
338f1d3aaa | ||
|
|
df5637889b | ||
|
|
6328829875 | ||
|
|
e15ab8edab | ||
|
|
ec6cb92622 | ||
|
|
9dd68c2ff8 | ||
|
|
44513bdc68 | ||
|
|
5e20ec1bd2 | ||
|
|
18976da8b9 | ||
|
|
f3d301766f | ||
|
|
7defd590ad | ||
|
|
dade64148d | ||
|
|
9607b016c0 | ||
|
|
db77057b46 | ||
|
|
6a594a5065 | ||
|
|
fb8c62fcaf | ||
|
|
032dd984fe | ||
|
|
94e8eb3132 | ||
|
|
e8cf5ae3f7 | ||
|
|
326c3ab297 | ||
|
|
e134908117 | ||
|
|
86ef8b9f98 | ||
|
|
4a4c257a88 | ||
|
|
c2c9121cf5 | ||
|
|
d1699fcf4d | ||
|
|
47839c38d6 | ||
|
|
f11651b503 | ||
|
|
97b1e35f2f | ||
|
|
061f5f22c4 | ||
|
|
9cb525e298 | ||
|
|
2b92fa5efb | ||
|
|
334fe4d437 | ||
|
|
70297b6a2a | ||
|
|
22ce3d4f7e | ||
|
|
5f0550ae51 | ||
|
|
644de0016f | ||
|
|
952cfa5689 | ||
|
|
47f62004b6 | ||
|
|
fc6c299198 | ||
|
|
ec93c7013a | ||
|
|
c188dafec4 | ||
|
|
f9c5792791 | ||
|
|
dfdee74242 | ||
|
|
5f0144cc23 | ||
|
|
fed35668ff | ||
|
|
058377da40 | ||
|
|
e4db0240e4 | ||
|
|
ba117ed430 | ||
|
|
086fb5c94d | ||
|
|
0907895e13 | ||
|
|
d30a8b3a9e | ||
|
|
16397893c1 | ||
|
|
a1ad28bcaf | ||
|
|
7be5462a34 | ||
|
|
2eb9e727e7 | ||
|
|
1771f721b7 | ||
|
|
2d730e1693 | ||
|
|
3c4c948fbd | ||
|
|
1f11b833b0 | ||
|
|
3bccdca9d6 | ||
|
|
3fd03e84ed | ||
|
|
8243d31836 | ||
|
|
faacf12bf3 | ||
|
|
22d7f57618 | ||
|
|
cb77adab3b | ||
|
|
12531a63f9 | ||
|
|
faab2ca998 | ||
|
|
9633ece009 | ||
|
|
683807d501 | ||
|
|
3a09945ad0 | ||
|
|
65c1fe1cdc | ||
|
|
0ebaf3b0ce | ||
|
|
85ab378ce6 | ||
|
|
3e60d285e9 | ||
|
|
c4577715bc | ||
|
|
a9d2af5631 | ||
|
|
917b60aee4 | ||
|
|
2c4f0290dc | ||
|
|
81209956c0 | ||
|
|
e43bae5133 | ||
|
|
bbed72b564 | ||
|
|
950f94654c | ||
|
|
327d4827d9 | ||
|
|
3c4953fdd9 | ||
|
|
39a5299293 | ||
|
|
50e4ca2149 | ||
|
|
49d500cbf1 | ||
|
|
76773831ba | ||
|
|
9e73946a31 | ||
|
|
b1110f768d | ||
|
|
439289ce24 | ||
|
|
8fc92886ee | ||
|
|
640721939c | ||
|
|
ccf5d204f0 | ||
|
|
21883b4e6b | ||
|
|
bbc4228ed9 | ||
|
|
e51d9c5621 | ||
|
|
119e457d5e | ||
|
|
7291ab876e | ||
|
|
e10bc33c3b | ||
|
|
f2f6f8ec78 | ||
|
|
f34078bd96 | ||
|
|
a8ed365bcf | ||
|
|
c8e8c3b20c | ||
|
|
dea15e749b | ||
|
|
1ab836961a | ||
|
|
ef0286bcc1 | ||
|
|
578d938a37 | ||
|
|
dc92546ac5 | ||
|
|
ec26d65311 | ||
|
|
eef81b2b86 | ||
|
|
99655f998a | ||
|
|
5456554dd1 | ||
|
|
91f9c6b7be | ||
|
|
1f24cc24c0 | ||
|
|
0e810092a4 | ||
|
|
750734129c | ||
|
|
a1157110ec | ||
|
|
c87b055528 | ||
|
|
0ffc5c526a | ||
|
|
ef40e945af | ||
|
|
ecef31ab5b | ||
|
|
24caa553e3 | ||
|
|
d151ca09b8 | ||
|
|
6536dde488 | ||
|
|
120ba40d21 | ||
|
|
db0cdea539 | ||
|
|
8b176ff207 | ||
|
|
9d137d94ac | ||
|
|
acd1b2f522 | ||
|
|
f81891d320 | ||
|
|
07b8e66122 |
5
.github/scripts/run_ci.sh
vendored
5
.github/scripts/run_ci.sh
vendored
@@ -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
44
.github/workflows/build-android.yml
vendored
Normal 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
|
||||
|
||||
51
.github/workflows/github-actions-main.yml
vendored
51
.github/workflows/github-actions-main.yml
vendored
@@ -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
|
||||
|
||||
@@ -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
|
||||
- }
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
10
README.md
10
README.md
@@ -2,16 +2,6 @@
|
||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=E8JMYD2LQ8MMA&lc=GB&item_name=Joplin+Development¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted) [](https://github.com/sponsors/laurent22/) [](https://www.patreon.com/joplin) [](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.
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
"packages": [
|
||||
"packages/*"
|
||||
],
|
||||
"version": "independent"
|
||||
"version": "independent",
|
||||
"useWorkspaces": true
|
||||
}
|
||||
|
||||
47
package.json
47
package.json
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
897
packages/app-clipper/popup/package-lock.json
generated
897
packages/app-clipper/popup/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
1
packages/app-mobile/.ruby-version
Normal file
1
packages/app-mobile/.ruby-version
Normal file
@@ -0,0 +1 @@
|
||||
2.7.4
|
||||
4
packages/app-mobile/Gemfile
Normal file
4
packages/app-mobile/Gemfile
Normal 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'
|
||||
96
packages/app-mobile/Gemfile.lock
Normal file
96
packages/app-mobile/Gemfile.lock
Normal 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
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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' }
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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', () => {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
52
packages/pdf-viewer/package-lock.json
generated
52
packages/pdf-viewer/package-lock.json
generated
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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": "*",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -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 } : {},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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 });
|
||||
}
|
||||
|
||||
|
||||
@@ -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');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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');
|
||||
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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]}`);
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user