Compare commits

...
Author SHA1 Message Date
StandardNotes CI 0082a76b19 chore(release): publish
- @standardnotes/[email protected]
 - @standardnotes/[email protected].6
 - @standardnotes/[email protected]
 - @standardnotes/[email protected].0
 - @standardnotes/[email protected].2
2022-10-17 13:44:54 +00:00
Karol Sójko 3f7d4a4cd9 feat: add workspaces workflow e2e tests (#1810)
* feat: add workspaces workflow e2e tests

* fix: collection finding data for assertions
2022-10-17 15:07:30 +02:00
StandardNotes CI a17ed963cd chore(release): publish
- @standardnotes/[email protected]
 - @standardnotes/[email protected]
2022-10-14 15:11:18 +00:00
Mo dd55c63955 fix(desktop): plugin installation 2022-10-14 09:35:37 -05:00
StandardNotes CI a3a8acdd55 chore(release): publish
- @standardnotes/[email protected]
 - @standardnotes/[email protected].5
 - @standardnotes/[email protected]
 - @standardnotes/[email protected].1
2022-10-14 13:47:22 +00:00
Mo b849c122d6 fix: android build 2022-10-14 08:18:51 -05:00
Aman Harwara d0c413cd15 fix: don't render editor view on mobile if editor pane not selected (#1790) 2022-10-14 18:33:43 +05:30
Karol Sójko 0dad616c5c chore: restore publishing workflow until further fixes 2022-10-14 14:35:56 +02:00
Karol Sójko 3f87f223a3 chore: add components node module binding to cache 2022-10-14 14:12:49 +02:00
Karol Sójko dc96b38c52 chore: fix docker publishing image step 2022-10-14 13:51:13 +02:00
Karol Sójko 38385dee90 chore: allow reruns of yarn install for yarn non pnp resolution 2022-10-14 13:46:08 +02:00
Karol Sójko 0738342cd6 chore: add caching only root node_modules 2022-10-14 13:44:53 +02:00
Karol Sójko 2000435ed5 chore: remove node_modules symlinks from cache dir 2022-10-14 13:38:35 +02:00
Karol Sójko cff1a753ad chore: fix multiple paths yml syntax 2022-10-14 13:10:30 +02:00
Karol Sójko 846648ba25 chore: fix setup node order in publish workflow 2022-10-14 13:07:00 +02:00
Karol Sójko b8a758180e Revert "chore: merge yarn and build cache"
This reverts commit 84bb2db048.
2022-10-14 13:05:18 +02:00
Karol Sójko 84bb2db048 chore: merge yarn and build cache 2022-10-14 13:04:23 +02:00
Karol Sójko 2a7d7c94f5 chore: yarn cache syntax 2022-10-14 12:59:11 +02:00
Karol Sójko dd2a19f33d chore: improve publishing workflow 2022-10-14 12:56:14 +02:00
StandardNotes CI 5cc471cfd5 chore(release): publish
- @standardnotes/[email protected].4
 - @standardnotes/[email protected]
2022-10-13 23:18:12 +00:00
Mo d9d44c7d7c chore: fix android build 2022-10-13 17:48:06 -05:00
StandardNotes CI 638ce849b5 chore(release): publish
- @standardnotes/[email protected]
 - @standardnotes/[email protected].3
 - @standardnotes/[email protected]
 - @standardnotes/[email protected].0
 - @standardnotes/[email protected].0
 - @standardnotes/[email protected]
 - @standardnotes/[email protected].0
2022-10-13 21:24:19 +00:00
Mo 1a2dde2e0e feat: soft biometrics lock (#1793) 2022-10-13 15:48:36 -05:00
74 changed files with 487 additions and 173 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+18
View File
@@ -3,6 +3,24 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.23.219](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-17)
**Note:** Version bump only for package @standardnotes/desktop
## [3.23.218](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-14)
### Bug Fixes
* **desktop:** plugin installation ([dd55c63](https://github.com/standardnotes/app/commit/dd55c63955fd71a4d4ea0c83144873a53412c341))
## [3.23.217](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-14)
**Note:** Version bump only for package @standardnotes/desktop
## [3.23.216](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/desktop
## [3.23.215](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/desktop
@@ -10,8 +10,9 @@ import {
deleteDir,
deleteDirContents,
ensureDirectoryExists,
extractNestedZip,
extractZip,
FileDoesNotExist,
moveDirContents,
readJSONFile,
} from '../Utils/FileUtils'
import { timeout } from '../Utils/Utils'
@@ -267,6 +268,30 @@ async function checkForUpdate(webContents: Electron.WebContents, mapping: Mappin
}
}
/**
* Some plugin zips may be served directly from GitHub's Releases feature, which automatically generates a zip file.
* However, the actual assets end up being nested inside a root level folder within that zip.
* We can detect if we have a legacy nested structure if after unzipping the zip we end up with
* only 1 entry and that entry is a folder.
*/
async function usesLegacyNestedFolderStructure(dir: string) {
const fileNames = await fs.promises.readdir(dir)
if (fileNames.length > 1) {
return false
}
const stat = fs.lstatSync(path.join(dir, fileNames[0]))
return stat.isDirectory()
}
async function unnestLegacyStructure(dir: string) {
const fileNames = await fs.promises.readdir(dir)
const sourceDir = path.join(dir, fileNames[0])
const destDir = dir
await moveDirContents(sourceDir, destDir)
}
async function installComponent(
webContents: Electron.WebContents,
mapping: MappingFileHandler,
@@ -312,7 +337,12 @@ async function installComponent(
])
logMessage('Extracting', paths.downloadPath, 'to', paths.absolutePath)
await extractNestedZip(paths.downloadPath, paths.absolutePath)
await extractZip(paths.downloadPath, paths.absolutePath)
const legacyStructure = await usesLegacyNestedFolderStructure(paths.absolutePath)
if (legacyStructure) {
await unnestLegacyStructure(paths.absolutePath)
}
let main = 'index.html'
try {
@@ -169,31 +169,37 @@ export async function moveDirContents(srcDir: string, destDir: string): Promise<
)
}
export async function extractNestedZip(source: string, dest: string): Promise<void> {
export async function extractZip(source: string, dest: string): Promise<void> {
return new Promise((resolve, reject) => {
yauzl.open(source, { lazyEntries: true, autoClose: true }, (err, zipFile) => {
let cancelled = false
const tryReject = (err: Error) => {
if (!cancelled) {
cancelled = true
reject(err)
}
}
if (err) {
return tryReject(err)
}
if (!zipFile) {
return tryReject(new Error('zipFile === undefined'))
}
zipFile.readEntry()
zipFile.on('close', resolve)
zipFile.on('entry', (entry) => {
if (cancelled) {
return
}
if (entry.fileName.endsWith('/')) {
/** entry is a directory, skip and read next entry */
const isEntryDirectory = entry.fileName.endsWith('/')
if (isEntryDirectory) {
zipFile.readEntry()
return
}
@@ -202,21 +208,19 @@ export async function extractNestedZip(source: string, dest: string): Promise<vo
if (cancelled) {
return
}
if (err) {
return tryReject(err)
}
if (!stream) {
return tryReject(new Error('stream === undefined'))
}
stream.on('error', tryReject)
const filepath = path.join(
dest,
/**
* Remove the first element of the entry's path, which is the base
* directory we want to ignore
*/
entry.fileName.substring(entry.fileName.indexOf('/') + 1),
)
const filepath = path.join(dest, entry.fileName)
try {
await ensureDirectoryExists(path.dirname(filepath))
} catch (error: any) {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@standardnotes/desktop",
"main": "./app/dist/index.js",
"version": "3.23.215",
"version": "3.23.219",
"license": "AGPL-3.0-or-later",
"author": "Standard Notes.",
"private": true,
+2 -2
View File
@@ -4,7 +4,7 @@ import path from 'path'
import {
deleteDir,
ensureDirectoryExists,
extractNestedZip,
extractZip,
FileDoesNotExist,
moveDirContents,
readJSONFile,
@@ -25,7 +25,7 @@ test.afterEach(async () => {
})
test('extracts a zip and unnests the folders by one level', async (t) => {
await extractNestedZip(path.join(dataPath, 'zip-file.zip'), zipFileDestination)
await extractZip(path.join(dataPath, 'zip-file.zip'), zipFileDestination)
t.deepEqual(await fs.readdir(zipFileDestination), ['package.json', 'test-file.txt'])
})
+18
View File
@@ -3,6 +3,24 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.43.6](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-17)
**Note:** Version bump only for package @standardnotes/mobile
## [3.43.5](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-14)
### Bug Fixes
* android build ([b849c12](https://github.com/standardnotes/app/commit/b849c122d62e023dbfd6d3fb0399ddffaacd689b))
## [3.43.4](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/mobile
## [3.43.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/mobile
## [3.43.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/mobile
-6
View File
@@ -83,12 +83,6 @@ project.ext.react = [
apply from: "../../node_modules/react-native/react.gradle"
project.ext.vectoricons = [
iconFontNames: [ 'Ionicons.ttf' ] // Name of the font files you want to copy
]
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
@@ -8,20 +8,36 @@ import android.content.res.Configuration;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
public class MainActivity extends ReactActivity {
@Override
@Override
protected String getMainComponentName() {
return "StandardNotes";
}
@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(null);
}
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new SNReactActivityDelegate(this, getMainComponentName());
}
public static class SNReactActivityDelegate extends ReactActivityDelegate {
public SNReactActivityDelegate(ReactActivity activity, String mainComponentName) {
super(activity, mainComponentName);
}
@Override
protected ReactRootView createRootView() {
ReactRootView reactRootView = new ReactRootView(getContext());
return reactRootView;
}
@Override
protected Bundle getLaunchOptions() {
String packageName = this.getContext().getPackageName();
@@ -31,10 +47,7 @@ public class MainActivity extends ReactActivity {
}
}
@Override
protected String getMainComponentName() {
return "StandardNotes";
}
// Fix for Dark theme subscriptions https://github.com/facebook/react-native/issues/28823#issuecomment-642032481
@Override
@@ -43,16 +56,6 @@ public class MainActivity extends ReactActivity {
getReactInstanceManager().onConfigurationChanged(this, newConfig);
}
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new SNReactActivityDelegate(this, getMainComponentName()) {
@Override
protected ReactRootView createRootView() {
return new RNGestureHandlerEnabledRootView(MainActivity.this);
}
};
}
/*
On back button press, background app instead of quitting it
https://github.com/facebook/react-native/issues/13775
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@standardnotes/mobile",
"version": "3.43.2",
"version": "3.43.6",
"author": "Standard Notes.",
"private": true,
"license": "AGPL-3.0-or-later",
+20
View File
@@ -3,6 +3,26 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.3.148](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-17)
**Note:** Version bump only for package @standardnotes/releases
## [1.3.147](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-14)
**Note:** Version bump only for package @standardnotes/releases
## [1.3.146](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-14)
**Note:** Version bump only for package @standardnotes/releases
## [1.3.145](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/releases
## [1.3.144](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/releases
## [1.3.143](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/releases
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@standardnotes/releases",
"version": "1.3.143",
"version": "1.3.148",
"license": "AGPL-3.0-or-later",
"main": "dist/releases.json",
"types": "dist/index.d.ts",
+6
View File
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.33.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
### Features
* soft biometrics lock ([#1793](https://github.com/standardnotes/app/issues/1793)) ([1a2dde2](https://github.com/standardnotes/app/commit/1a2dde2e0ea406b9818571ab71d38442f9c9fb50))
## [1.32.3](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/services
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@standardnotes/services",
"version": "1.32.3",
"version": "1.33.0",
"engines": {
"node": ">=16.0.0 <17.0.0"
},
@@ -30,6 +30,7 @@ export interface ApplicationInterface {
createDecryptedBackupFile(): Promise<BackupFile | undefined>
hasPasscode(): boolean
lock(): Promise<void>
softLockBiometrics(): void
setValue(key: string, value: unknown, mode?: StorageValueModes): void
getValue(key: string, mode?: StorageValueModes): unknown
removeValue(key: string, mode?: StorageValueModes): Promise<void>
@@ -62,4 +62,6 @@ export enum ApplicationEvent {
UnprotectedSessionExpired = 29,
/** Called when the app first launches and after first sync request made after sign in */
CompletedInitialSync = 30,
BiometricsSoftLockEngaged = 31,
BiometricsSoftLockDisengaged = 32,
}
+12
View File
@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [2.141.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-17)
### Features
* add workspaces workflow e2e tests ([#1810](https://github.com/standardnotes/app/issues/1810)) ([3f7d4a4](https://github.com/standardnotes/app/commit/3f7d4a4cd9a06f33bb51cbe678ab06dbe456dda6))
# [2.140.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
### Features
* soft biometrics lock ([#1793](https://github.com/standardnotes/app/issues/1793)) ([1a2dde2](https://github.com/standardnotes/app/commit/1a2dde2e0ea406b9818571ab71d38442f9c9fb50))
## [2.139.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
### Bug Fixes
@@ -51,6 +51,7 @@ import {
SubscriptionManager,
WorkspaceClientInterface,
WorkspaceManager,
ChallengePrompt,
} from '@standardnotes/services'
import { FilesClientInterface } from '@standardnotes/files'
import { ComputePrivateUsername } from '@standardnotes/encryption'
@@ -929,6 +930,24 @@ export class SNApplication
return this.deinit(this.getDeinitMode(), DeinitSource.Lock)
}
public softLockBiometrics(): void {
const challenge = new Challenge(
[new ChallengePrompt(ChallengeValidation.Biometric)],
ChallengeReason.ApplicationUnlock,
false,
)
void this.promptForCustomChallenge(challenge)
void this.notifyEvent(ApplicationEvent.BiometricsSoftLockEngaged)
this.addChallengeObserver(challenge, {
onComplete: () => {
void this.notifyEvent(ApplicationEvent.BiometricsSoftLockDisengaged)
},
})
}
isNativeMobileWeb() {
return this.environment === Environment.NativeMobileWeb
}
+1
View File
@@ -92,6 +92,7 @@
<script type="module" src="files.test.js"></script>
<script type="module" src="session.test.js"></script>
<script type="module" src="subscriptions.test.js"></script>
<script type="module" src="workspaces.test.js"></script>
<script type="module">
mocha.run();
</script>
+103
View File
@@ -0,0 +1,103 @@
import * as Factory from './lib/factory.js'
chai.use(chaiAsPromised)
const expect = chai.expect
describe('workspaces', function () {
this.timeout(Factory.TwentySecondTimeout)
let ownerContext
let owner
let inviteeContext
let invitee
afterEach(async function () {
await Factory.safeDeinit(ownerContext.application)
await Factory.safeDeinit(inviteeContext.application)
localStorage.clear()
})
beforeEach(async function () {
localStorage.clear()
ownerContext = await Factory.createAppContextWithFakeCrypto()
await ownerContext.launch()
const ownerRegistrationResponse = await ownerContext.register()
owner = ownerRegistrationResponse.user
inviteeContext = await Factory.createAppContextWithFakeCrypto()
await inviteeContext.launch()
const inviteeRegistrationResponse = await inviteeContext.register()
invitee = inviteeRegistrationResponse.user
})
it('should create workspaces for user', async () => {
await ownerContext.application.workspaceManager.createWorkspace({
workspaceType: 'team',
encryptedWorkspaceKey: 'foo',
encryptedPrivateKey: 'bar',
publicKey: 'buzz',
workspaceName: 'Acme Team',
})
await ownerContext.application.workspaceManager.createWorkspace({
workspaceType: 'private',
encryptedWorkspaceKey: 'foo',
encryptedPrivateKey: 'bar',
publicKey: 'buzz',
})
const { ownedWorkspaces, joinedWorkspaces } = await ownerContext.application.workspaceManager.listWorkspaces()
expect(joinedWorkspaces.length).to.equal(0)
expect(ownedWorkspaces.length).to.equal(2)
})
it('should allow inviting and adding users to a workspace', async () => {
const { uuid } = await ownerContext.application.workspaceManager.createWorkspace({
workspaceType: 'team',
encryptedWorkspaceKey: 'foo',
encryptedPrivateKey: 'bar',
publicKey: 'buzz',
workspaceName: 'Acme Team',
})
const result = await ownerContext.application.workspaceManager.inviteToWorkspace({
inviteeEmail: '[email protected]',
workspaceUuid: uuid,
accessLevel: 'read-only'
})
await inviteeContext.application.workspaceManager.acceptInvite({
inviteUuid: result.uuid,
userUuid: invitee.uuid,
publicKey: 'foobar',
encryptedPrivateKey: 'buzz',
})
let listUsersResult = await inviteeContext.application.workspaceManager.listWorkspaceUsers({ workspaceUuid: uuid })
let inviteeAssociation = listUsersResult.users.find(user => user.userDisplayName === '[email protected]')
expect(inviteeAssociation.userUuid).to.equal(invitee.uuid)
expect(inviteeAssociation.status).to.equal('pending-keyshare')
await ownerContext.application.workspaceManager.initiateKeyshare({
workspaceUuid: inviteeAssociation.workspaceUuid,
userUuid: inviteeAssociation.userUuid,
encryptedWorkspaceKey: 'foobarbuzz',
})
listUsersResult = await inviteeContext.application.workspaceManager.listWorkspaceUsers({ workspaceUuid: uuid })
inviteeAssociation = listUsersResult.users.find(user => user.userDisplayName === '[email protected]')
expect(inviteeAssociation.userUuid).to.equal(invitee.uuid)
expect(inviteeAssociation.status).to.equal('active')
expect(inviteeAssociation.encryptedWorkspaceKey).to.equal('foobarbuzz')
const { ownedWorkspaces, joinedWorkspaces } = await inviteeContext.application.workspaceManager.listWorkspaces()
expect(joinedWorkspaces.length).to.equal(1)
expect(ownedWorkspaces.length).to.equal(0)
})
})
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@standardnotes/snjs",
"version": "2.139.1",
"version": "2.141.0",
"engines": {
"node": ">=16.0.0 <17.0.0"
},
+4
View File
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.8.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/ui-services
## [1.8.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/ui-services
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@standardnotes/ui-services",
"version": "1.8.1",
"version": "1.8.2",
"engines": {
"node": ">=16.0.0 <17.0.0"
},
+16
View File
@@ -3,6 +3,22 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.76.2](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-17)
**Note:** Version bump only for package @standardnotes/web
## [3.76.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-14)
### Bug Fixes
* don't render editor view on mobile if editor pane not selected ([#1790](https://github.com/standardnotes/app/issues/1790)) ([d0c413c](https://github.com/standardnotes/app/commit/d0c413cd150ea835a4cb22aefadd6d9e477b1039))
# [3.76.0](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
### Features
* soft biometrics lock ([#1793](https://github.com/standardnotes/app/issues/1793)) ([1a2dde2](https://github.com/standardnotes/app/commit/1a2dde2e0ea406b9818571ab71d38442f9c9fb50))
## [3.75.1](https://github.com/standardnotes/app/compare/@standardnotes/[email protected]...@standardnotes/[email protected]) (2022-10-13)
**Note:** Version bump only for package @standardnotes/web
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@standardnotes/web",
"version": "3.75.1",
"version": "3.76.2",
"license": "AGPL-3.0-or-later",
"main": "dist/app.js",
"author": "Standard Notes.",
@@ -33,7 +33,7 @@ import {
ThemeManager,
WebAlertService,
} from '@standardnotes/ui-services'
import { MobileWebReceiver } from './MobileWebReceiver'
import { MobileWebReceiver } from '../NativeMobileWeb/MobileWebReceiver'
import { AndroidBackHandler } from '@/NativeMobileWeb/AndroidBackHandler'
import { PrefDefaults } from '@/Constants/PrefDefaults'
import { setViewportHeightWithFallback } from '@/setViewportHeightWithFallback'
@@ -289,8 +289,10 @@ export class WebApplication extends SNApplication implements WebApplicationInter
const passcodeLockImmediately = hasPasscode && passcodeTiming === MobileUnlockTiming.Immediately
const biometricsLockImmediately = hasBiometrics && biometricsTiming === MobileUnlockTiming.Immediately
if (passcodeLockImmediately || biometricsLockImmediately) {
if (passcodeLockImmediately) {
await this.lock()
} else if (biometricsLockImmediately) {
this.softLockBiometrics()
}
}
@@ -121,6 +121,10 @@ const ApplicationView: FunctionComponent<Props> = ({ application, mainApplicatio
alertDialog({
text: 'Unable to write to local database. Please restart the app and try again.',
}).catch(console.error)
} else if (eventName === ApplicationEvent.BiometricsSoftLockEngaged) {
setNeedsUnlock(true)
} else if (eventName === ApplicationEvent.BiometricsSoftLockDisengaged) {
setNeedsUnlock(false)
}
})
@@ -197,7 +201,7 @@ const ApplicationView: FunctionComponent<Props> = ({ application, mainApplicatio
return (
<AndroidBackHandlerProvider application={application}>
<DarkModeHandler application={application} />
<ResponsivePaneProvider>
<ResponsivePaneProvider paneController={application.getViewControllerManager().paneController}>
<PremiumModalProvider application={application} viewControllerManager={viewControllerManager}>
<div className={platformString + ' main-ui-view sn-component'}>
<div id="app" className="app app-column-container" ref={appColumnContainerRef}>
@@ -2,19 +2,21 @@ import { FileItem, FileViewController, NoteViewController } from '@standardnotes
import { PureComponent } from '@/Components/Abstract/PureComponent'
import { WebApplication } from '@/Application/Application'
import MultipleSelectedNotes from '@/Components/MultipleSelectedNotes/MultipleSelectedNotes'
import NoteView from '@/Components/NoteView/NoteView'
import MultipleSelectedFiles from '../MultipleSelectedFiles/MultipleSelectedFiles'
import { ElementIds } from '@/Constants/ElementIDs'
import FileView from '@/Components/FileView/FileView'
import { FileDnDContext } from '@/Components/FileDragNDropProvider/FileDragNDropProvider'
import { AppPaneId } from '../ResponsivePane/AppPaneMetadata'
import ResponsivePaneContent from '../ResponsivePane/ResponsivePaneContent'
import FileView from '../FileView/FileView'
import NoteView from '../NoteView/NoteView'
type State = {
showMultipleSelectedNotes: boolean
showMultipleSelectedFiles: boolean
controllers: (NoteViewController | FileViewController)[]
selectedFile: FileItem | undefined
selectedPane?: AppPaneId
isInMobileView?: boolean
}
type Props = {
@@ -73,6 +75,15 @@ class NoteGroupView extends PureComponent<Props, State> {
})
}
})
this.autorun(() => {
if (this.viewControllerManager && this.viewControllerManager.paneController) {
this.setState({
selectedPane: this.viewControllerManager.paneController.currentPane,
isInMobileView: this.viewControllerManager.paneController.isInMobileView,
})
}
})
}
override deinit() {
@@ -88,6 +99,10 @@ class NoteGroupView extends PureComponent<Props, State> {
const shouldNotShowMultipleSelectedItems =
!this.state.showMultipleSelectedNotes && !this.state.showMultipleSelectedFiles
const hasControllers = this.state.controllers.length > 0
const canRenderEditorView = this.state.selectedPane === AppPaneId.Editor || !this.state.isInMobileView
return (
<div
id={ElementIds.EditorColumn}
@@ -118,7 +133,7 @@ class NoteGroupView extends PureComponent<Props, State> {
Drop your files to upload them
</div>
)}
{shouldNotShowMultipleSelectedItems && this.state.controllers.length > 0 && (
{shouldNotShowMultipleSelectedItems && hasControllers && canRenderEditorView && (
<>
{this.state.controllers.map((controller) => {
return controller instanceof NoteViewController ? (
@@ -1,6 +1,5 @@
import { ElementIds } from '@/Constants/ElementIDs'
import { useAndroidBackHandler } from '@/NativeMobileWeb/useAndroidBackHandler'
import { isMobileScreen } from '@/Utils'
import {
useEffect,
ReactNode,
@@ -15,6 +14,8 @@ import {
MutableRefObject,
} from 'react'
import { AppPaneId } from './AppPaneMetadata'
import { PaneController } from '../../Controllers/PaneController'
import { observer } from 'mobx-react-lite'
type ResponsivePaneData = {
selectedPane: AppPaneId
@@ -39,6 +40,10 @@ type ChildrenProps = {
children: ReactNode
}
type ProviderProps = {
paneController: PaneController
} & ChildrenProps
function useStateRef<State>(state: State): MutableRefObject<State> {
const ref = useRef<State>(state)
@@ -51,21 +56,17 @@ function useStateRef<State>(state: State): MutableRefObject<State> {
const MemoizedChildren = memo(({ children }: ChildrenProps) => <div>{children}</div>)
const ResponsivePaneProvider = ({ children }: ChildrenProps) => {
const [currentSelectedPane, setCurrentSelectedPane] = useState<AppPaneId>(
isMobileScreen() ? AppPaneId.Items : AppPaneId.Editor,
)
const ResponsivePaneProvider = ({ paneController, children }: ProviderProps) => {
const currentSelectedPane = paneController.currentPane
const previousSelectedPane = paneController.previousPane
const currentSelectedPaneRef = useStateRef<AppPaneId>(currentSelectedPane)
const [previousSelectedPane, setPreviousSelectedPane] = useState<AppPaneId>(
isMobileScreen() ? AppPaneId.Items : AppPaneId.Editor,
)
const toggleAppPane = useCallback(
(paneId: AppPaneId) => {
setPreviousSelectedPane(currentSelectedPane)
setCurrentSelectedPane(paneId)
paneController.setPreviousPane(currentSelectedPane)
paneController.setCurrentPane(paneId)
},
[currentSelectedPane],
[paneController, currentSelectedPane],
)
useEffect(() => {
@@ -122,4 +123,4 @@ const ResponsivePaneProvider = ({ children }: ChildrenProps) => {
)
}
export default ResponsivePaneProvider
export default observer(ResponsivePaneProvider)
@@ -0,0 +1,50 @@
import { AppPaneId } from './../Components/ResponsivePane/AppPaneMetadata'
import { isMobileScreen } from '@/Utils'
import { makeObservable, observable, action } from 'mobx'
import { Disposer } from '@/Types/Disposer'
import { MediaQueryBreakpoints } from '@/Hooks/useMediaQuery'
export class PaneController {
currentPane: AppPaneId = isMobileScreen() ? AppPaneId.Items : AppPaneId.Editor
previousPane: AppPaneId = isMobileScreen() ? AppPaneId.Items : AppPaneId.Editor
isInMobileView = isMobileScreen()
protected disposers: Disposer[] = []
constructor() {
makeObservable(this, {
currentPane: observable,
previousPane: observable,
isInMobileView: observable,
setCurrentPane: action,
setPreviousPane: action,
setIsInMobileView: action,
})
window.matchMedia(MediaQueryBreakpoints.md).addEventListener('change', this.mediumScreenMQHandler)
}
deinit() {
window.matchMedia(MediaQueryBreakpoints.md).removeEventListener('change', this.mediumScreenMQHandler)
}
mediumScreenMQHandler = (event: MediaQueryListEvent) => {
if (event.matches) {
this.isInMobileView = false
} else {
this.isInMobileView = true
}
}
setCurrentPane(pane: AppPaneId): void {
this.currentPane = pane
}
setPreviousPane(pane: AppPaneId): void {
this.previousPane = pane
}
setIsInMobileView(isInMobileView: boolean) {
this.isInMobileView = isInMobileView
}
}
@@ -1,3 +1,4 @@
import { PaneController } from './PaneController'
import { RouteType, storage, StorageKey } from '@standardnotes/ui-services'
import { WebApplication } from '@/Application/Application'
import { AccountMenuController } from '@/Controllers/AccountMenu/AccountMenuController'
@@ -56,6 +57,7 @@ export class ViewControllerManager {
readonly selectionController: SelectedItemsController
readonly historyModalController: HistoryModalController
readonly linkingController: LinkingController
readonly paneController: PaneController
public isSessionsModalVisible = false
@@ -71,6 +73,8 @@ export class ViewControllerManager {
this.subscriptionManager = application.subscriptions
this.paneController = new PaneController()
this.preferencesController = new PreferencesController(application, this.eventBus)
this.selectionController = new SelectedItemsController(application, this.eventBus)
@@ -208,6 +212,9 @@ export class ViewControllerManager {
this.historyModalController.deinit()
;(this.historyModalController as unknown) = undefined
this.paneController.deinit()
;(this.paneController as unknown) = undefined
destroyAllObjectProperties(this)
}
+95 -111
View File
@@ -3764,12 +3764,12 @@ __metadata:
languageName: node
linkType: hard
"@jest/expect-utils@npm:^29.1.2":
version: 29.1.2
resolution: "@jest/expect-utils@npm:29.1.2"
"@jest/expect-utils@npm:^29.2.0":
version: 29.2.0
resolution: "@jest/expect-utils@npm:29.2.0"
dependencies:
jest-get-type: ^29.0.0
checksum: 31c2a690b5720cc52698d144a81aac152a7e5072d92c80e2a027c79fdbd845dd53f92b45170ba71aa7304eaf487f0a5064e96c67ff1825e175466feae156ea05
jest-get-type: ^29.2.0
checksum: dae6df9292501e5d9380ed26f0dde04761de977aad4d3bcb386feb0055944c1c0b4794e83d1f41f974d5ff51dae0126842ff52ba7c46a59f294bb957b145acda
languageName: node
linkType: hard
@@ -4083,9 +4083,9 @@ __metadata:
languageName: node
linkType: hard
"@jest/types@npm:^29.1.2":
version: 29.1.2
resolution: "@jest/types@npm:29.1.2"
"@jest/types@npm:^29.2.0":
version: 29.2.0
resolution: "@jest/types@npm:29.2.0"
dependencies:
"@jest/schemas": ^29.0.0
"@types/istanbul-lib-coverage": ^2.0.0
@@ -4093,7 +4093,7 @@ __metadata:
"@types/node": "*"
"@types/yargs": ^17.0.8
chalk: ^4.0.0
checksum: 697fc72c37814606715fd1dcbdcb84129d8b292dc6d6d5fa9b8f2b7e8ffd297757b508913be049a4acfbe9f80b982d96e4aa9aa60c40bbc643274ca1867194f8
checksum: 6b04cbb23306f16eaf4f0d158cfcb7cc905b352e2e44a0a4618c46cf3bdf7a1da64cea8fbc731a19e8a86dc5b80a75aec985cf8764b3178939b5d850ccc68b57
languageName: node
linkType: hard
@@ -4160,12 +4160,12 @@ __metadata:
linkType: hard
"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.14, @jridgewell/trace-mapping@npm:^0.3.8, @jridgewell/trace-mapping@npm:^0.3.9":
version: 0.3.16
resolution: "@jridgewell/trace-mapping@npm:0.3.16"
version: 0.3.17
resolution: "@jridgewell/trace-mapping@npm:0.3.17"
dependencies:
"@jridgewell/resolve-uri": 3.1.0
"@jridgewell/sourcemap-codec": 1.4.14
checksum: 881fa21ce066ab5e9c23991ac435dfae2ac8ffa74510379a028b0d002437b48a50464369436c5d242b6e648eec17f77003c73c1f54325cfcd8824967c2356910
checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339
languageName: node
linkType: hard
@@ -5014,7 +5014,7 @@ __metadata:
languageName: node
linkType: hard
"@octokit/core@npm:^4.0.0":
"@octokit/core@npm:^4.1.0":
version: 4.1.0
resolution: "@octokit/core@npm:4.1.0"
dependencies:
@@ -5041,20 +5041,13 @@ __metadata:
linkType: hard
"@octokit/graphql@npm:^5.0.0":
version: 5.0.2
resolution: "@octokit/graphql@npm:5.0.2"
version: 5.0.3
resolution: "@octokit/graphql@npm:5.0.3"
dependencies:
"@octokit/request": ^6.0.0
"@octokit/types": ^8.0.0
universal-user-agent: ^6.0.0
checksum: cc746573f5782f92723d988c44c1864b6cf51bbfe7b2f33c9dcc1c5dc3fd7b58bacce083a3631512e1200e3d6e00a21f66b26e69b92d7d4d0e682d630e712eb9
languageName: node
linkType: hard
"@octokit/openapi-types@npm:^13.11.0":
version: 13.13.1
resolution: "@octokit/openapi-types@npm:13.13.1"
checksum: 7f49a46ada1cc6ed105b19aa839f570643c099488929939d7c690d3f466b6c6e0b54e066a557bd0679e0cc36d706a992c9c763c63c5f1f90afe98a68fcb15186
checksum: cc02df32ccd0dc2f500a165381ed1db27f9499767e450b5275f0a366637985d5f42ca40915eda31f5675e652e18dbb423514cba263a11877f52cce2a65aa4faf
languageName: node
linkType: hard
@@ -5072,14 +5065,14 @@ __metadata:
languageName: node
linkType: hard
"@octokit/plugin-paginate-rest@npm:^4.0.0":
version: 4.3.1
resolution: "@octokit/plugin-paginate-rest@npm:4.3.1"
"@octokit/plugin-paginate-rest@npm:^5.0.0":
version: 5.0.1
resolution: "@octokit/plugin-paginate-rest@npm:5.0.1"
dependencies:
"@octokit/types": ^7.5.0
"@octokit/types": ^8.0.0
peerDependencies:
"@octokit/core": ">=4"
checksum: 96d420fc9944cd3cb67c41d47781ee00d406e34622ed6a6cc1995ee9602e1ab23b51e30f5a5d3b80d4b62879234e0c21fe6c654b267ccb9550379f2e0051e681
checksum: cfded297d9f66c7607bd34075eb0c5f7278a1617d6be86115997c0757151c9be2fcf7a8849c2a5cebab56931a263b5cc35742b6227935afe77f5ed61b0627a3d
languageName: node
linkType: hard
@@ -5092,7 +5085,7 @@ __metadata:
languageName: node
linkType: hard
"@octokit/plugin-rest-endpoint-methods@npm:^6.0.0":
"@octokit/plugin-rest-endpoint-methods@npm:^6.7.0":
version: 6.7.0
resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.7.0"
dependencies:
@@ -5130,23 +5123,14 @@ __metadata:
linkType: hard
"@octokit/rest@npm:^19.0.4":
version: 19.0.4
resolution: "@octokit/rest@npm:19.0.4"
version: 19.0.5
resolution: "@octokit/rest@npm:19.0.5"
dependencies:
"@octokit/core": ^4.0.0
"@octokit/plugin-paginate-rest": ^4.0.0
"@octokit/core": ^4.1.0
"@octokit/plugin-paginate-rest": ^5.0.0
"@octokit/plugin-request-log": ^1.0.4
"@octokit/plugin-rest-endpoint-methods": ^6.0.0
checksum: 7eba9148b707c713705ba8d75c25fbb22488f30abef7967ce92884a51e411e709b90ff56b0e6fa5521b261f343a7fd33b8ad5d0b87cab4bc2e178002b2566cf2
languageName: node
linkType: hard
"@octokit/types@npm:^7.5.0":
version: 7.5.1
resolution: "@octokit/types@npm:7.5.1"
dependencies:
"@octokit/openapi-types": ^13.11.0
checksum: eaa9aac2f4760aef5e69e4f663450fce34d4fab5a6a8c26cba49257ce0c4b621fd8f19ddad0ce9764b64cc6b3ef5d6fe631ff518832d3e09affbc96b7432fae5
"@octokit/plugin-rest-endpoint-methods": ^6.7.0
checksum: ed4c36859aafb64e23f7f708086fe7e2ecda17ffd8c1594817d539f766f5855af79f17f5d225d96d34cd9b97cbfea988dac3df39a7cc928b2d2b7b75ed981056
languageName: node
linkType: hard
@@ -14038,8 +14022,8 @@ __metadata:
linkType: hard
"css-minimizer-webpack-plugin@npm:^4.0.0":
version: 4.2.1
resolution: "css-minimizer-webpack-plugin@npm:4.2.1"
version: 4.2.2
resolution: "css-minimizer-webpack-plugin@npm:4.2.2"
dependencies:
cssnano: ^5.1.8
jest-worker: ^29.1.2
@@ -14062,7 +14046,7 @@ __metadata:
optional: true
lightningcss:
optional: true
checksum: d7de086b6e8a762f554a7e13b0c3154b0b314ae45a831b451e8a10ede39519b2cb16d0dd7b3cb6eadea72d7dee29f2a2fea74cf752e66b791cf873da0f4c22f3
checksum: 5417e76a445f35832aa96807c835b8e92834a6cd285b1b788dfe3ca0fa90fec7eb2dd6efa9d3649f9d8244b99b7da2d065951603b94918e8f6a366a5049cacdd
languageName: node
linkType: hard
@@ -14181,9 +14165,9 @@ __metadata:
linkType: hard
"cssdb@npm:^7.0.1":
version: 7.0.1
resolution: "cssdb@npm:7.0.1"
checksum: 4b4de59864c8d3adb5f90fad2b97d527714bb7702f317275b43e2d4e91cb68408130e9c8bdef932027feec86bd74beb847509ee931a3338f7a5be7d01c81eac8
version: 7.0.2
resolution: "cssdb@npm:7.0.2"
checksum: 521957cc26d71525186e9027b01440681b510e9fe02485963eeabf5051c627b44642c3a7a2a53e1760dfab24ecdb7d8c75ee35373d8cfbb3547502960fb186c7
languageName: node
linkType: hard
@@ -15732,10 +15716,10 @@ __metadata:
languageName: node
linkType: hard
"diff-sequences@npm:^29.0.0":
version: 29.0.0
resolution: "diff-sequences@npm:29.0.0"
checksum: 2c084a3db03ecde26f649f6f2559974e01e174451debeb301a7e17199e73423a8e8ddeb9a35ae38638c084b4fa51296a4a20fa7f44f3db0c0ba566bdc704ed3d
"diff-sequences@npm:^29.2.0":
version: 29.2.0
resolution: "diff-sequences@npm:29.2.0"
checksum: e7b874cc7a4ce76fd199794c4d5fabb099ab4bce069592407ac2933e3a10e05f035111498e2f2c86572f5cfa9668a191b09e79f1d967dc39d9ca0a12aacde41a
languageName: node
linkType: hard
@@ -16342,9 +16326,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.4.251":
version: 1.4.281
resolution: "electron-to-chromium@npm:1.4.281"
checksum: 8c64a7b8a652405f0d8856f9b6df6d8a0188a71f4d03b938bc76456b3fb27fe9b5a7c3a9805e9e3cce482033a9645f13391a3416483498dca1c23bce1ff858dc
version: 1.4.282
resolution: "electron-to-chromium@npm:1.4.282"
checksum: 6cc5f05596bbe364908dbc4d604a0ee9bcda9e0dcbcc662a285ec75a29adf1685d7f51ab338fc41594af204b7a55c30490d4df8618af3b313593a47702a146ad
languageName: node
linkType: hard
@@ -17619,15 +17603,15 @@ __metadata:
linkType: hard
"expect@npm:^29.0.0":
version: 29.1.2
resolution: "expect@npm:29.1.2"
version: 29.2.0
resolution: "expect@npm:29.2.0"
dependencies:
"@jest/expect-utils": ^29.1.2
jest-get-type: ^29.0.0
jest-matcher-utils: ^29.1.2
jest-message-util: ^29.1.2
jest-util: ^29.1.2
checksum: 578c61459e0f4b2b8f93f11f38264446aa3be1f8bf4b85eaeb56be035535877514bc15a5aaaffc714961b872fd0ea3c2bc7dfe6efd4acf0a3315ffab0597fd7a
"@jest/expect-utils": ^29.2.0
jest-get-type: ^29.2.0
jest-matcher-utils: ^29.2.0
jest-message-util: ^29.2.0
jest-util: ^29.2.0
checksum: 1d309c5218b514e54afb96b01141829a093ad424f7ba9e0b9fd2b1e08dfb04b39ff57d19e678105a5b7de9111d57f49d89c9c541f6f584a5735af2c31292fe11
languageName: node
linkType: hard
@@ -18348,9 +18332,9 @@ __metadata:
linkType: hard
"flow-parser@npm:0.*":
version: 0.189.0
resolution: "flow-parser@npm:0.189.0"
checksum: c59ab3e81c63c22898b830df513db62db28223062fcb8d53c215ad9a5162ca0ecf124862599cb5c67e1fe88f506a8812daa96b2ca66d06918f38ec6fa4209328
version: 0.190.0
resolution: "flow-parser@npm:0.190.0"
checksum: d3d3c258a5e6dd11796a2f4dcdb335348b26f927f6f552e92f84ed8470ee0062252d941e88b2e77eb5ac7f6bd8ab633042a6445eeed79c59ca41052d54a902cc
languageName: node
linkType: hard
@@ -22351,15 +22335,15 @@ __metadata:
languageName: node
linkType: hard
"jest-diff@npm:^29.1.2":
version: 29.1.2
resolution: "jest-diff@npm:29.1.2"
"jest-diff@npm:^29.2.0":
version: 29.2.0
resolution: "jest-diff@npm:29.2.0"
dependencies:
chalk: ^4.0.0
diff-sequences: ^29.0.0
jest-get-type: ^29.0.0
pretty-format: ^29.1.2
checksum: 0c9774155965f38ddeebacc1a0c3301f27f8c35935020e6088278cc37d5b1470ae8a8ade848b3e20ba066e146f79e3c52f0fb76c1b99f1574732e7c697dfb305
diff-sequences: ^29.2.0
jest-get-type: ^29.2.0
pretty-format: ^29.2.0
checksum: 149381e8ba41a699a06e01efd650403b8dd2a4bfaea16be463def32a89e3b98bb41e7679b1e9a4b907fdee193c05419ce1d9bf1d6673e612305c32a6387fce07
languageName: node
linkType: hard
@@ -22487,10 +22471,10 @@ __metadata:
languageName: node
linkType: hard
"jest-get-type@npm:^29.0.0":
version: 29.0.0
resolution: "jest-get-type@npm:29.0.0"
checksum: 9abdd11d69788963a92fb9d813a7b887654ecc8f3a3c8bf83166d33aaf4d57ed380e74ab8ef106f57565dd235446ca6ebc607679f0c516c4633e6d09f0540a2b
"jest-get-type@npm:^29.2.0":
version: 29.2.0
resolution: "jest-get-type@npm:29.2.0"
checksum: e396fd880a30d08940ed8a8e43cd4595db1b8ff09649018eb358ca701811137556bae82626af73459e3c0f8c5e972ed1e57fd3b1537b13a260893dac60a90942
languageName: node
linkType: hard
@@ -22635,15 +22619,15 @@ __metadata:
languageName: node
linkType: hard
"jest-matcher-utils@npm:^29.1.2":
version: 29.1.2
resolution: "jest-matcher-utils@npm:29.1.2"
"jest-matcher-utils@npm:^29.2.0":
version: 29.2.0
resolution: "jest-matcher-utils@npm:29.2.0"
dependencies:
chalk: ^4.0.0
jest-diff: ^29.1.2
jest-get-type: ^29.0.0
pretty-format: ^29.1.2
checksum: 648afe4349eecf33316b08cf92b85a9a61aa6d1cf9b086a619ba494842888e1d883a783616d09c07a7a63e030983d4bb902e9a6b07702dc5247282d25c4c644f
jest-diff: ^29.2.0
jest-get-type: ^29.2.0
pretty-format: ^29.2.0
checksum: 8beeb95677d6b79a7858cd4c80fd16607cae0367d02fe24054f370fc23298af44844c5fc93a723568a1e23007fff3d086d3e9a9377621182fcaf1db1b01147ca
languageName: node
linkType: hard
@@ -22681,20 +22665,20 @@ __metadata:
languageName: node
linkType: hard
"jest-message-util@npm:^29.1.2":
version: 29.1.2
resolution: "jest-message-util@npm:29.1.2"
"jest-message-util@npm:^29.2.0":
version: 29.2.0
resolution: "jest-message-util@npm:29.2.0"
dependencies:
"@babel/code-frame": ^7.12.13
"@jest/types": ^29.1.2
"@jest/types": ^29.2.0
"@types/stack-utils": ^2.0.0
chalk: ^4.0.0
graceful-fs: ^4.2.9
micromatch: ^4.0.4
pretty-format: ^29.1.2
pretty-format: ^29.2.0
slash: ^3.0.0
stack-utils: ^2.0.3
checksum: d1541bd7264ee048f486b01e9b7d30fef0c343576119401e6569b3b865e9f2146e30e5d0f3b3bdf34f3feee42e5137affbfbe5bebea93a661be96d1abb167f29
checksum: de74c6aeffbbae736f2be32ffaf238ec8944a213dca2e2f85ef845b92ca0a01496504a007fc5557e9ee8d2f1ead634962a53fe86d4483cd61ea82d6b790bdfb2
languageName: node
linkType: hard
@@ -23048,17 +23032,17 @@ __metadata:
languageName: node
linkType: hard
"jest-util@npm:^29.1.2":
version: 29.1.2
resolution: "jest-util@npm:29.1.2"
"jest-util@npm:^29.2.0":
version: 29.2.0
resolution: "jest-util@npm:29.2.0"
dependencies:
"@jest/types": ^29.1.2
"@jest/types": ^29.2.0
"@types/node": "*"
chalk: ^4.0.0
ci-info: ^3.2.0
graceful-fs: ^4.2.9
picomatch: ^2.2.3
checksum: 6c55464e2028032692c4801b339bc1f7418826072d75981b8f29ded6ccba8cb8e1f164eb3d12d859cb63c24a8e9be90204f0d3c4d33e530375f1e5935755b5a9
checksum: c1fc26008b3199387dbd28f145f692f48b7c8e911c6a71892e579544ee62819ecc2c693f7fc5e41284119a6f742130ef5c92f485caed89eea47c5e627003ad2d
languageName: node
linkType: hard
@@ -23186,14 +23170,14 @@ __metadata:
linkType: hard
"jest-worker@npm:^29.1.2":
version: 29.1.2
resolution: "jest-worker@npm:29.1.2"
version: 29.2.0
resolution: "jest-worker@npm:29.2.0"
dependencies:
"@types/node": "*"
jest-util: ^29.1.2
jest-util: ^29.2.0
merge-stream: ^2.0.0
supports-color: ^8.0.0
checksum: 788d14b2a051bf548a316dd177175c0e46127e63d794677fb0ba67e9b0b9f579cbc6a602a72671c80a020bf4d3f502b0a2dff7bf380986e5f30d30ec0f69168b
checksum: 680afa2b9efd0f6548a52210d055e1d8a5de2e8602cf5547d59075a55f7d9b6d4fd3c4a8bb34e03a3815975ae4c737b6dbc2c194e12088611a19941836960374
languageName: node
linkType: hard
@@ -30430,14 +30414,14 @@ __metadata:
languageName: node
linkType: hard
"pretty-format@npm:^29.0.0, pretty-format@npm:^29.1.2":
version: 29.1.2
resolution: "pretty-format@npm:29.1.2"
"pretty-format@npm:^29.0.0, pretty-format@npm:^29.2.0":
version: 29.2.0
resolution: "pretty-format@npm:29.2.0"
dependencies:
"@jest/schemas": ^29.0.0
ansi-styles: ^5.0.0
react-is: ^18.0.0
checksum: b2c6e77666716e55094f29dcbd92e431a1b8cc0a06cd41ec1a3c8a10e5e56bb1f2d7b5942f1d8f6a0f69912712f3edb4c41713926d60cbb89f2a41355d49e7a4
checksum: f5ef6a848540f0881baafbcf6bf9908d2d8e2a47692bc095abbb06881ed3c780b41b08cb537b7d020fc79cec04c4a8bbd6a15cd44a3fe0693ddd235a2d0bda3a
languageName: node
linkType: hard
@@ -32285,9 +32269,9 @@ __metadata:
linkType: hard
"regenerator-runtime@npm:^0.13.2, regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:^0.13.7, regenerator-runtime@npm:^0.13.9":
version: 0.13.9
resolution: "regenerator-runtime@npm:0.13.9"
checksum: 65ed455fe5afd799e2897baf691ca21c2772e1a969d19bb0c4695757c2d96249eb74ee3553ea34a91062b2a676beedf630b4c1551cc6299afb937be1426ec55e
version: 0.13.10
resolution: "regenerator-runtime@npm:0.13.10"
checksum: 09893f5a9e82932642d9a999716b6c626dc53ef2a01307c952ebbf8e011802360163a37c304c18a6c358548be5a72b448e37209954a18696f21e438c81cbb4b9
languageName: node
linkType: hard
@@ -34104,9 +34088,9 @@ __metadata:
linkType: hard
"shell-quote@npm:^1.4.2, shell-quote@npm:^1.6.1, shell-quote@npm:^1.7.2, shell-quote@npm:^1.7.3":
version: 1.7.3
resolution: "shell-quote@npm:1.7.3"
checksum: aca58e73a3a5d933d02e0bdddedc53ee14f7c2ec264f97ac915b9d4482d077a38e422aa664631d60a672cd3cdb4054eb2e6c0303f54882453dacb6483e482d34
version: 1.7.4
resolution: "shell-quote@npm:1.7.4"
checksum: 2874ea9c1a7c3ebfc9ec5734a897e16533d0d06f2e4cddc22ba3d1cab5cdc07d0f825364c1b1e39abe61236f44d8e60e933c7ad7349ce44de4f5dddc7b4354e9
languageName: node
linkType: hard