diff options
author | Kristóf Marussy <kristof@marussy.com> | 2022-01-03 03:07:50 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2022-02-08 21:42:22 +0100 |
commit | 59fc8666ae26f672ab6232cd637021aa61cd0e76 (patch) | |
tree | 10a4328e9ccb1a2fcdc6c1042876d4f1d5630946 | |
parent | feat: Add Profile and Service stores (diff) | |
download | sophie-59fc8666ae26f672ab6232cd637021aa61cd0e76.tar.gz sophie-59fc8666ae26f672ab6232cd637021aa61cd0e76.tar.zst sophie-59fc8666ae26f672ab6232cd637021aa61cd0e76.zip |
feat: Rewrite the config if new details are added
If we generate a new ID or a new profile, it should be added to the
config file immediately.
Signed-off-by: Kristóf Marussy <kristof@marussy.com>
-rw-r--r-- | packages/main/package.json | 2 | ||||
-rw-r--r-- | packages/main/src/controllers/__tests__/initConfig.spec.ts | 41 | ||||
-rw-r--r-- | packages/main/src/controllers/initConfig.ts | 23 | ||||
-rw-r--r-- | yarn.lock | 173 |
4 files changed, 220 insertions, 19 deletions
diff --git a/packages/main/package.json b/packages/main/package.json index 80a93b9..c03e81e 100644 --- a/packages/main/package.json +++ b/packages/main/package.json | |||
@@ -11,6 +11,7 @@ | |||
11 | "@sophie/service-shared": "workspace:*", | 11 | "@sophie/service-shared": "workspace:*", |
12 | "@sophie/shared": "workspace:*", | 12 | "@sophie/shared": "workspace:*", |
13 | "chalk": "^5.0.0", | 13 | "chalk": "^5.0.0", |
14 | "deep-equal": "^2.0.5", | ||
14 | "electron": "17.0.0", | 15 | "electron": "17.0.0", |
15 | "fs-extra": "^10.0.0", | 16 | "fs-extra": "^10.0.0", |
16 | "json5": "^2.2.0", | 17 | "json5": "^2.2.0", |
@@ -26,6 +27,7 @@ | |||
26 | }, | 27 | }, |
27 | "devDependencies": { | 28 | "devDependencies": { |
28 | "@jest/globals": "^27.4.6", | 29 | "@jest/globals": "^27.4.6", |
30 | "@types/deep-equal": "^1.0.1", | ||
29 | "@types/electron-devtools-installer": "^2.2.1", | 31 | "@types/electron-devtools-installer": "^2.2.1", |
30 | "@types/lodash-es": "^4.17.5", | 32 | "@types/lodash-es": "^4.17.5", |
31 | "@types/ms": "^0.7.31", | 33 | "@types/ms": "^0.7.31", |
diff --git a/packages/main/src/controllers/__tests__/initConfig.spec.ts b/packages/main/src/controllers/__tests__/initConfig.spec.ts index 11e7690..241ab2d 100644 --- a/packages/main/src/controllers/__tests__/initConfig.spec.ts +++ b/packages/main/src/controllers/__tests__/initConfig.spec.ts | |||
@@ -20,6 +20,7 @@ | |||
20 | 20 | ||
21 | import { jest } from '@jest/globals'; | 21 | import { jest } from '@jest/globals'; |
22 | import { mocked } from 'jest-mock'; | 22 | import { mocked } from 'jest-mock'; |
23 | import { getSnapshot } from 'mobx-state-tree'; | ||
23 | import ms from 'ms'; | 24 | import ms from 'ms'; |
24 | 25 | ||
25 | import type ConfigPersistenceService from '../../services/ConfigPersistenceService'; | 26 | import type ConfigPersistenceService from '../../services/ConfigPersistenceService'; |
@@ -74,6 +75,8 @@ describe('when initializing', () => { | |||
74 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ | 75 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ |
75 | found: true, | 76 | found: true, |
76 | data: { | 77 | data: { |
78 | // Use a default empty config file to not trigger config rewrite. | ||
79 | ...getSnapshot(config), | ||
77 | themeSource: 'dark', | 80 | themeSource: 'dark', |
78 | }, | 81 | }, |
79 | }); | 82 | }); |
@@ -95,7 +98,21 @@ describe('when initializing', () => { | |||
95 | }); | 98 | }); |
96 | }); | 99 | }); |
97 | 100 | ||
98 | it('should not apply an invalid config file', async () => { | 101 | it('should update the config file if new details are added during read', async () => { |
102 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ | ||
103 | found: true, | ||
104 | data: { | ||
105 | themeSource: 'light', | ||
106 | profile: { | ||
107 | name: 'Test profile', | ||
108 | }, | ||
109 | }, | ||
110 | }); | ||
111 | await initConfig(config, persistenceService); | ||
112 | expect(persistenceService.writeConfig).toHaveBeenCalledTimes(1); | ||
113 | }); | ||
114 | |||
115 | it('should not apply an invalid config file but should not overwrite it', async () => { | ||
99 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ | 116 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ |
100 | found: true, | 117 | found: true, |
101 | data: { | 118 | data: { |
@@ -104,6 +121,7 @@ describe('when initializing', () => { | |||
104 | }); | 121 | }); |
105 | await initConfig(config, persistenceService); | 122 | await initConfig(config, persistenceService); |
106 | expect(config.themeSource).not.toBe(-1); | 123 | expect(config.themeSource).not.toBe(-1); |
124 | expect(persistenceService.writeConfig).not.toHaveBeenCalled(); | ||
107 | }); | 125 | }); |
108 | 126 | ||
109 | it('should bail if it cannot determine whether there is a config file', async () => { | 127 | it('should bail if it cannot determine whether there is a config file', async () => { |
@@ -122,7 +140,7 @@ describe('when it has loaded the config', () => { | |||
122 | beforeEach(async () => { | 140 | beforeEach(async () => { |
123 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ | 141 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ |
124 | found: true, | 142 | found: true, |
125 | data: {}, | 143 | data: getSnapshot(config), |
126 | }); | 144 | }); |
127 | mocked(persistenceService.watchConfig).mockReturnValueOnce(watcherDisposer); | 145 | mocked(persistenceService.watchConfig).mockReturnValueOnce(watcherDisposer); |
128 | sutDisposer = await initConfig(config, persistenceService, throttleMs); | 146 | sutDisposer = await initConfig(config, persistenceService, throttleMs); |
@@ -152,6 +170,8 @@ describe('when it has loaded the config', () => { | |||
152 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ | 170 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ |
153 | found: true, | 171 | found: true, |
154 | data: { | 172 | data: { |
173 | // Use a default empty config file to not trigger config rewrite. | ||
174 | ...getSnapshot(config), | ||
155 | themeSource: 'dark', | 175 | themeSource: 'dark', |
156 | }, | 176 | }, |
157 | }); | 177 | }); |
@@ -161,7 +181,21 @@ describe('when it has loaded the config', () => { | |||
161 | expect(config.themeSource).toBe('dark'); | 181 | expect(config.themeSource).toBe('dark'); |
162 | }); | 182 | }); |
163 | 183 | ||
164 | it('should not apply an invalid config file when it has changed', async () => { | 184 | it('should update the config file if new details are added', async () => { |
185 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ | ||
186 | found: true, | ||
187 | data: { | ||
188 | themeSource: 'light', | ||
189 | profile: { | ||
190 | name: 'Test profile', | ||
191 | }, | ||
192 | }, | ||
193 | }); | ||
194 | await configChangedCallback(); | ||
195 | expect(persistenceService.writeConfig).toHaveBeenCalledTimes(1); | ||
196 | }); | ||
197 | |||
198 | it('should not apply an invalid config file when it has changed but should not overwrite it', async () => { | ||
165 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ | 199 | mocked(persistenceService.readConfig).mockResolvedValueOnce({ |
166 | found: true, | 200 | found: true, |
167 | data: { | 201 | data: { |
@@ -170,6 +204,7 @@ describe('when it has loaded the config', () => { | |||
170 | }); | 204 | }); |
171 | await configChangedCallback(); | 205 | await configChangedCallback(); |
172 | expect(config.themeSource).not.toBe(-1); | 206 | expect(config.themeSource).not.toBe(-1); |
207 | expect(persistenceService.writeConfig).not.toHaveBeenCalled(); | ||
173 | }); | 208 | }); |
174 | 209 | ||
175 | it('should handle config reading errors gracefully', async () => { | 210 | it('should handle config reading errors gracefully', async () => { |
diff --git a/packages/main/src/controllers/initConfig.ts b/packages/main/src/controllers/initConfig.ts index 93be978..2dcabaf 100644 --- a/packages/main/src/controllers/initConfig.ts +++ b/packages/main/src/controllers/initConfig.ts | |||
@@ -18,12 +18,13 @@ | |||
18 | * SPDX-License-Identifier: AGPL-3.0-only | 18 | * SPDX-License-Identifier: AGPL-3.0-only |
19 | */ | 19 | */ |
20 | 20 | ||
21 | import deepEqual from 'deep-equal'; | ||
21 | import { debounce } from 'lodash-es'; | 22 | import { debounce } from 'lodash-es'; |
22 | import { getSnapshot, onSnapshot } from 'mobx-state-tree'; | 23 | import { getSnapshot, onSnapshot } from 'mobx-state-tree'; |
23 | import ms from 'ms'; | 24 | import ms from 'ms'; |
24 | 25 | ||
25 | import type ConfigPersistenceService from '../services/ConfigPersistenceService.js'; | 26 | import type ConfigPersistenceService from '../services/ConfigPersistenceService'; |
26 | import { Config, ConfigFileIn, ConfigSnapshotOut } from '../stores/Config.js'; | 27 | import { Config, ConfigFileIn, ConfigSnapshotOut } from '../stores/Config'; |
27 | import type Disposer from '../utils/Disposer'; | 28 | import type Disposer from '../utils/Disposer'; |
28 | import { getLogger } from '../utils/log'; | 29 | import { getLogger } from '../utils/log'; |
29 | 30 | ||
@@ -40,6 +41,12 @@ export default async function initConfig( | |||
40 | 41 | ||
41 | let lastSnapshotOnDisk: ConfigSnapshotOut | undefined; | 42 | let lastSnapshotOnDisk: ConfigSnapshotOut | undefined; |
42 | 43 | ||
44 | async function writeConfig(): Promise<void> { | ||
45 | const snapshot = getSnapshot(config); | ||
46 | await persistenceService.writeConfig(snapshot); | ||
47 | lastSnapshotOnDisk = snapshot; | ||
48 | } | ||
49 | |||
43 | async function readConfig(): Promise<boolean> { | 50 | async function readConfig(): Promise<boolean> { |
44 | const result = await persistenceService.readConfig(); | 51 | const result = await persistenceService.readConfig(); |
45 | if (result.found) { | 52 | if (result.found) { |
@@ -49,18 +56,16 @@ export default async function initConfig( | |||
49 | config.loadFromConfigFile(result.data as ConfigFileIn); | 56 | config.loadFromConfigFile(result.data as ConfigFileIn); |
50 | } catch (error) { | 57 | } catch (error) { |
51 | log.error('Failed to apply config snapshot', result.data, error); | 58 | log.error('Failed to apply config snapshot', result.data, error); |
59 | return true; | ||
60 | } | ||
61 | lastSnapshotOnDisk = getSnapshot(config); | ||
62 | if (!deepEqual(result.data, lastSnapshotOnDisk, { strict: true })) { | ||
63 | await writeConfig(); | ||
52 | } | 64 | } |
53 | } | 65 | } |
54 | lastSnapshotOnDisk = getSnapshot(config); | ||
55 | return result.found; | 66 | return result.found; |
56 | } | 67 | } |
57 | 68 | ||
58 | async function writeConfig(): Promise<void> { | ||
59 | const snapshot = getSnapshot(config); | ||
60 | await persistenceService.writeConfig(snapshot); | ||
61 | lastSnapshotOnDisk = snapshot; | ||
62 | } | ||
63 | |||
64 | if (!(await readConfig())) { | 69 | if (!(await readConfig())) { |
65 | log.info('Config file was not found'); | 70 | log.info('Config file was not found'); |
66 | await writeConfig(); | 71 | await writeConfig(); |
@@ -1237,12 +1237,14 @@ __metadata: | |||
1237 | "@jest/globals": ^27.4.6 | 1237 | "@jest/globals": ^27.4.6 |
1238 | "@sophie/service-shared": "workspace:*" | 1238 | "@sophie/service-shared": "workspace:*" |
1239 | "@sophie/shared": "workspace:*" | 1239 | "@sophie/shared": "workspace:*" |
1240 | "@types/deep-equal": ^1.0.1 | ||
1240 | "@types/electron-devtools-installer": ^2.2.1 | 1241 | "@types/electron-devtools-installer": ^2.2.1 |
1241 | "@types/lodash-es": ^4.17.5 | 1242 | "@types/lodash-es": ^4.17.5 |
1242 | "@types/ms": ^0.7.31 | 1243 | "@types/ms": ^0.7.31 |
1243 | "@types/node": ^17.0.12 | 1244 | "@types/node": ^17.0.12 |
1244 | "@types/slug": ^5 | 1245 | "@types/slug": ^5 |
1245 | chalk: ^5.0.0 | 1246 | chalk: ^5.0.0 |
1247 | deep-equal: ^2.0.5 | ||
1246 | electron: 17.0.0 | 1248 | electron: 17.0.0 |
1247 | electron-devtools-installer: ^3.2.0 | 1249 | electron-devtools-installer: ^3.2.0 |
1248 | esbuild: ^0.14.14 | 1250 | esbuild: ^0.14.14 |
@@ -1418,6 +1420,13 @@ __metadata: | |||
1418 | languageName: node | 1420 | languageName: node |
1419 | linkType: hard | 1421 | linkType: hard |
1420 | 1422 | ||
1423 | "@types/deep-equal@npm:^1.0.1": | ||
1424 | version: 1.0.1 | ||
1425 | resolution: "@types/deep-equal@npm:1.0.1" | ||
1426 | checksum: 689b5737dd0a37d173d9e1231c07f70a1a9a989087b757422e1d167ec3640fd7eb8a538bd6008b3df400c4c11ed07a6c2a92d9aafc1f98ffaa04731a9442c781 | ||
1427 | languageName: node | ||
1428 | linkType: hard | ||
1429 | |||
1421 | "@types/electron-devtools-installer@npm:^2.2.1": | 1430 | "@types/electron-devtools-installer@npm:^2.2.1": |
1422 | version: 2.2.1 | 1431 | version: 2.2.1 |
1423 | resolution: "@types/electron-devtools-installer@npm:2.2.1" | 1432 | resolution: "@types/electron-devtools-installer@npm:2.2.1" |
@@ -2203,6 +2212,13 @@ __metadata: | |||
2203 | languageName: node | 2212 | languageName: node |
2204 | linkType: hard | 2213 | linkType: hard |
2205 | 2214 | ||
2215 | "available-typed-arrays@npm:^1.0.5": | ||
2216 | version: 1.0.5 | ||
2217 | resolution: "available-typed-arrays@npm:1.0.5" | ||
2218 | checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a | ||
2219 | languageName: node | ||
2220 | linkType: hard | ||
2221 | |||
2206 | "axe-core@npm:^4.3.5": | 2222 | "axe-core@npm:^4.3.5": |
2207 | version: 4.3.5 | 2223 | version: 4.3.5 |
2208 | resolution: "axe-core@npm:4.3.5" | 2224 | resolution: "axe-core@npm:4.3.5" |
@@ -3113,6 +3129,29 @@ __metadata: | |||
3113 | languageName: node | 3129 | languageName: node |
3114 | linkType: hard | 3130 | linkType: hard |
3115 | 3131 | ||
3132 | "deep-equal@npm:^2.0.5": | ||
3133 | version: 2.0.5 | ||
3134 | resolution: "deep-equal@npm:2.0.5" | ||
3135 | dependencies: | ||
3136 | call-bind: ^1.0.0 | ||
3137 | es-get-iterator: ^1.1.1 | ||
3138 | get-intrinsic: ^1.0.1 | ||
3139 | is-arguments: ^1.0.4 | ||
3140 | is-date-object: ^1.0.2 | ||
3141 | is-regex: ^1.1.1 | ||
3142 | isarray: ^2.0.5 | ||
3143 | object-is: ^1.1.4 | ||
3144 | object-keys: ^1.1.1 | ||
3145 | object.assign: ^4.1.2 | ||
3146 | regexp.prototype.flags: ^1.3.0 | ||
3147 | side-channel: ^1.0.3 | ||
3148 | which-boxed-primitive: ^1.0.1 | ||
3149 | which-collection: ^1.0.1 | ||
3150 | which-typed-array: ^1.1.2 | ||
3151 | checksum: 2bb7332badf589b540184d25098acac750e30fe11c8dce4523d03fc5db15f46881a0105e6bf0b64bb0c57213a95ed964029ff0259026ad6f7f9e0019f8200de5 | ||
3152 | languageName: node | ||
3153 | linkType: hard | ||
3154 | |||
3116 | "deep-equal@npm:~0.0.0": | 3155 | "deep-equal@npm:~0.0.0": |
3117 | version: 0.0.0 | 3156 | version: 0.0.0 |
3118 | resolution: "deep-equal@npm:0.0.0" | 3157 | resolution: "deep-equal@npm:0.0.0" |
@@ -3508,7 +3547,7 @@ __metadata: | |||
3508 | languageName: node | 3547 | languageName: node |
3509 | linkType: hard | 3548 | linkType: hard |
3510 | 3549 | ||
3511 | "es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1": | 3550 | "es-abstract@npm:^1.18.5, es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1": |
3512 | version: 1.19.1 | 3551 | version: 1.19.1 |
3513 | resolution: "es-abstract@npm:1.19.1" | 3552 | resolution: "es-abstract@npm:1.19.1" |
3514 | dependencies: | 3553 | dependencies: |
@@ -3536,6 +3575,22 @@ __metadata: | |||
3536 | languageName: node | 3575 | languageName: node |
3537 | linkType: hard | 3576 | linkType: hard |
3538 | 3577 | ||
3578 | "es-get-iterator@npm:^1.1.1": | ||
3579 | version: 1.1.2 | ||
3580 | resolution: "es-get-iterator@npm:1.1.2" | ||
3581 | dependencies: | ||
3582 | call-bind: ^1.0.2 | ||
3583 | get-intrinsic: ^1.1.0 | ||
3584 | has-symbols: ^1.0.1 | ||
3585 | is-arguments: ^1.1.0 | ||
3586 | is-map: ^2.0.2 | ||
3587 | is-set: ^2.0.2 | ||
3588 | is-string: ^1.0.5 | ||
3589 | isarray: ^2.0.5 | ||
3590 | checksum: f75e66acb6a45686fa08b3ade9c9421a70d36a0c43ed4363e67f4d7aab2226cb73dd977cb48abbaf75721b946d3cd810682fcf310c7ad0867802fbf929b17dcf | ||
3591 | languageName: node | ||
3592 | linkType: hard | ||
3593 | |||
3539 | "es-to-primitive@npm:^1.2.1": | 3594 | "es-to-primitive@npm:^1.2.1": |
3540 | version: 1.2.1 | 3595 | version: 1.2.1 |
3541 | resolution: "es-to-primitive@npm:1.2.1" | 3596 | resolution: "es-to-primitive@npm:1.2.1" |
@@ -4587,6 +4642,13 @@ __metadata: | |||
4587 | languageName: node | 4642 | languageName: node |
4588 | linkType: hard | 4643 | linkType: hard |
4589 | 4644 | ||
4645 | "foreach@npm:^2.0.5": | ||
4646 | version: 2.0.5 | ||
4647 | resolution: "foreach@npm:2.0.5" | ||
4648 | checksum: dab4fbfef0b40b69ee5eab81bcb9626b8fa8b3469c8cfa26480f3e5e1ee08c40eae07048c9a967c65aeda26e774511ccc70b3f10a604c01753c6ef24361f0fc8 | ||
4649 | languageName: node | ||
4650 | linkType: hard | ||
4651 | |||
4590 | "form-data@npm:^3.0.0": | 4652 | "form-data@npm:^3.0.0": |
4591 | version: 3.0.1 | 4653 | version: 3.0.1 |
4592 | resolution: "form-data@npm:3.0.1" | 4654 | resolution: "form-data@npm:3.0.1" |
@@ -4723,7 +4785,7 @@ __metadata: | |||
4723 | languageName: node | 4785 | languageName: node |
4724 | linkType: hard | 4786 | linkType: hard |
4725 | 4787 | ||
4726 | "get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": | 4788 | "get-intrinsic@npm:^1.0.1, get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": |
4727 | version: 1.1.1 | 4789 | version: 1.1.1 |
4728 | resolution: "get-intrinsic@npm:1.1.1" | 4790 | resolution: "get-intrinsic@npm:1.1.1" |
4729 | dependencies: | 4791 | dependencies: |
@@ -5259,6 +5321,16 @@ __metadata: | |||
5259 | languageName: node | 5321 | languageName: node |
5260 | linkType: hard | 5322 | linkType: hard |
5261 | 5323 | ||
5324 | "is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.0": | ||
5325 | version: 1.1.1 | ||
5326 | resolution: "is-arguments@npm:1.1.1" | ||
5327 | dependencies: | ||
5328 | call-bind: ^1.0.2 | ||
5329 | has-tostringtag: ^1.0.0 | ||
5330 | checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 | ||
5331 | languageName: node | ||
5332 | linkType: hard | ||
5333 | |||
5262 | "is-arrayish@npm:^0.2.1": | 5334 | "is-arrayish@npm:^0.2.1": |
5263 | version: 0.2.1 | 5335 | version: 0.2.1 |
5264 | resolution: "is-arrayish@npm:0.2.1" | 5336 | resolution: "is-arrayish@npm:0.2.1" |
@@ -5341,7 +5413,7 @@ __metadata: | |||
5341 | languageName: node | 5413 | languageName: node |
5342 | linkType: hard | 5414 | linkType: hard |
5343 | 5415 | ||
5344 | "is-date-object@npm:^1.0.1": | 5416 | "is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.2": |
5345 | version: 1.0.5 | 5417 | version: 1.0.5 |
5346 | resolution: "is-date-object@npm:1.0.5" | 5418 | resolution: "is-date-object@npm:1.0.5" |
5347 | dependencies: | 5419 | dependencies: |
@@ -5397,6 +5469,13 @@ __metadata: | |||
5397 | languageName: node | 5469 | languageName: node |
5398 | linkType: hard | 5470 | linkType: hard |
5399 | 5471 | ||
5472 | "is-map@npm:^2.0.1, is-map@npm:^2.0.2": | ||
5473 | version: 2.0.2 | ||
5474 | resolution: "is-map@npm:2.0.2" | ||
5475 | checksum: ace3d0ecd667bbdefdb1852de601268f67f2db725624b1958f279316e13fecb8fa7df91fd60f690d7417b4ec180712f5a7ee967008e27c65cfd475cc84337728 | ||
5476 | languageName: node | ||
5477 | linkType: hard | ||
5478 | |||
5400 | "is-negative-zero@npm:^2.0.1": | 5479 | "is-negative-zero@npm:^2.0.1": |
5401 | version: 2.0.2 | 5480 | version: 2.0.2 |
5402 | resolution: "is-negative-zero@npm:2.0.2" | 5481 | resolution: "is-negative-zero@npm:2.0.2" |
@@ -5448,7 +5527,7 @@ __metadata: | |||
5448 | languageName: node | 5527 | languageName: node |
5449 | linkType: hard | 5528 | linkType: hard |
5450 | 5529 | ||
5451 | "is-regex@npm:^1.1.4": | 5530 | "is-regex@npm:^1.1.1, is-regex@npm:^1.1.4": |
5452 | version: 1.1.4 | 5531 | version: 1.1.4 |
5453 | resolution: "is-regex@npm:1.1.4" | 5532 | resolution: "is-regex@npm:1.1.4" |
5454 | dependencies: | 5533 | dependencies: |
@@ -5458,6 +5537,13 @@ __metadata: | |||
5458 | languageName: node | 5537 | languageName: node |
5459 | linkType: hard | 5538 | linkType: hard |
5460 | 5539 | ||
5540 | "is-set@npm:^2.0.1, is-set@npm:^2.0.2": | ||
5541 | version: 2.0.2 | ||
5542 | resolution: "is-set@npm:2.0.2" | ||
5543 | checksum: b64343faf45e9387b97a6fd32be632ee7b269bd8183701f3b3f5b71a7cf00d04450ed8669d0bd08753e08b968beda96fca73a10fd0ff56a32603f64deba55a57 | ||
5544 | languageName: node | ||
5545 | linkType: hard | ||
5546 | |||
5461 | "is-shared-array-buffer@npm:^1.0.1": | 5547 | "is-shared-array-buffer@npm:^1.0.1": |
5462 | version: 1.0.1 | 5548 | version: 1.0.1 |
5463 | resolution: "is-shared-array-buffer@npm:1.0.1" | 5549 | resolution: "is-shared-array-buffer@npm:1.0.1" |
@@ -5490,6 +5576,19 @@ __metadata: | |||
5490 | languageName: node | 5576 | languageName: node |
5491 | linkType: hard | 5577 | linkType: hard |
5492 | 5578 | ||
5579 | "is-typed-array@npm:^1.1.7": | ||
5580 | version: 1.1.8 | ||
5581 | resolution: "is-typed-array@npm:1.1.8" | ||
5582 | dependencies: | ||
5583 | available-typed-arrays: ^1.0.5 | ||
5584 | call-bind: ^1.0.2 | ||
5585 | es-abstract: ^1.18.5 | ||
5586 | foreach: ^2.0.5 | ||
5587 | has-tostringtag: ^1.0.0 | ||
5588 | checksum: aa0f9f0716e19e2fb8aef69e69e4205479d25ace778e2339fc910948115cde4b0d9aff9d5d1e8b80f09a5664998278e05e54ad3dc9cb12cefcf86db71084ed00 | ||
5589 | languageName: node | ||
5590 | linkType: hard | ||
5591 | |||
5493 | "is-typedarray@npm:^1.0.0": | 5592 | "is-typedarray@npm:^1.0.0": |
5494 | version: 1.0.0 | 5593 | version: 1.0.0 |
5495 | resolution: "is-typedarray@npm:1.0.0" | 5594 | resolution: "is-typedarray@npm:1.0.0" |
@@ -5497,6 +5596,13 @@ __metadata: | |||
5497 | languageName: node | 5596 | languageName: node |
5498 | linkType: hard | 5597 | linkType: hard |
5499 | 5598 | ||
5599 | "is-weakmap@npm:^2.0.1": | ||
5600 | version: 2.0.1 | ||
5601 | resolution: "is-weakmap@npm:2.0.1" | ||
5602 | checksum: 1222bb7e90c32bdb949226e66d26cb7bce12e1e28e3e1b40bfa6b390ba3e08192a8664a703dff2a00a84825f4e022f9cd58c4599ff9981ab72b1d69479f4f7f6 | ||
5603 | languageName: node | ||
5604 | linkType: hard | ||
5605 | |||
5500 | "is-weakref@npm:^1.0.1": | 5606 | "is-weakref@npm:^1.0.1": |
5501 | version: 1.0.2 | 5607 | version: 1.0.2 |
5502 | resolution: "is-weakref@npm:1.0.2" | 5608 | resolution: "is-weakref@npm:1.0.2" |
@@ -5506,6 +5612,16 @@ __metadata: | |||
5506 | languageName: node | 5612 | languageName: node |
5507 | linkType: hard | 5613 | linkType: hard |
5508 | 5614 | ||
5615 | "is-weakset@npm:^2.0.1": | ||
5616 | version: 2.0.2 | ||
5617 | resolution: "is-weakset@npm:2.0.2" | ||
5618 | dependencies: | ||
5619 | call-bind: ^1.0.2 | ||
5620 | get-intrinsic: ^1.1.1 | ||
5621 | checksum: 5d8698d1fa599a0635d7ca85be9c26d547b317ed8fd83fc75f03efbe75d50001b5eececb1e9971de85fcde84f69ae6f8346bc92d20d55d46201d328e4c74a367 | ||
5622 | languageName: node | ||
5623 | linkType: hard | ||
5624 | |||
5509 | "is-yarn-global@npm:^0.3.0": | 5625 | "is-yarn-global@npm:^0.3.0": |
5510 | version: 0.3.0 | 5626 | version: 0.3.0 |
5511 | resolution: "is-yarn-global@npm:0.3.0" | 5627 | resolution: "is-yarn-global@npm:0.3.0" |
@@ -5513,6 +5629,13 @@ __metadata: | |||
5513 | languageName: node | 5629 | languageName: node |
5514 | linkType: hard | 5630 | linkType: hard |
5515 | 5631 | ||
5632 | "isarray@npm:^2.0.5": | ||
5633 | version: 2.0.5 | ||
5634 | resolution: "isarray@npm:2.0.5" | ||
5635 | checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a | ||
5636 | languageName: node | ||
5637 | linkType: hard | ||
5638 | |||
5516 | "isarray@npm:~1.0.0": | 5639 | "isarray@npm:~1.0.0": |
5517 | version: 1.0.0 | 5640 | version: 1.0.0 |
5518 | resolution: "isarray@npm:1.0.0" | 5641 | resolution: "isarray@npm:1.0.0" |
@@ -7002,6 +7125,16 @@ __metadata: | |||
7002 | languageName: node | 7125 | languageName: node |
7003 | linkType: hard | 7126 | linkType: hard |
7004 | 7127 | ||
7128 | "object-is@npm:^1.1.4": | ||
7129 | version: 1.1.5 | ||
7130 | resolution: "object-is@npm:1.1.5" | ||
7131 | dependencies: | ||
7132 | call-bind: ^1.0.2 | ||
7133 | define-properties: ^1.1.3 | ||
7134 | checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe | ||
7135 | languageName: node | ||
7136 | linkType: hard | ||
7137 | |||
7005 | "object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": | 7138 | "object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": |
7006 | version: 1.1.1 | 7139 | version: 1.1.1 |
7007 | resolution: "object-keys@npm:1.1.1" | 7140 | resolution: "object-keys@npm:1.1.1" |
@@ -7703,7 +7836,7 @@ __metadata: | |||
7703 | languageName: node | 7836 | languageName: node |
7704 | linkType: hard | 7837 | linkType: hard |
7705 | 7838 | ||
7706 | "regexp.prototype.flags@npm:^1.3.1": | 7839 | "regexp.prototype.flags@npm:^1.3.0, regexp.prototype.flags@npm:^1.3.1": |
7707 | version: 1.3.1 | 7840 | version: 1.3.1 |
7708 | resolution: "regexp.prototype.flags@npm:1.3.1" | 7841 | resolution: "regexp.prototype.flags@npm:1.3.1" |
7709 | dependencies: | 7842 | dependencies: |
@@ -8099,7 +8232,7 @@ __metadata: | |||
8099 | languageName: node | 8232 | languageName: node |
8100 | linkType: hard | 8233 | linkType: hard |
8101 | 8234 | ||
8102 | "side-channel@npm:^1.0.4": | 8235 | "side-channel@npm:^1.0.3, side-channel@npm:^1.0.4": |
8103 | version: 1.0.4 | 8236 | version: 1.0.4 |
8104 | resolution: "side-channel@npm:1.0.4" | 8237 | resolution: "side-channel@npm:1.0.4" |
8105 | dependencies: | 8238 | dependencies: |
@@ -9176,7 +9309,7 @@ __metadata: | |||
9176 | languageName: node | 9309 | languageName: node |
9177 | linkType: hard | 9310 | linkType: hard |
9178 | 9311 | ||
9179 | "which-boxed-primitive@npm:^1.0.2": | 9312 | "which-boxed-primitive@npm:^1.0.1, which-boxed-primitive@npm:^1.0.2": |
9180 | version: 1.0.2 | 9313 | version: 1.0.2 |
9181 | resolution: "which-boxed-primitive@npm:1.0.2" | 9314 | resolution: "which-boxed-primitive@npm:1.0.2" |
9182 | dependencies: | 9315 | dependencies: |
@@ -9189,6 +9322,32 @@ __metadata: | |||
9189 | languageName: node | 9322 | languageName: node |
9190 | linkType: hard | 9323 | linkType: hard |
9191 | 9324 | ||
9325 | "which-collection@npm:^1.0.1": | ||
9326 | version: 1.0.1 | ||
9327 | resolution: "which-collection@npm:1.0.1" | ||
9328 | dependencies: | ||
9329 | is-map: ^2.0.1 | ||
9330 | is-set: ^2.0.1 | ||
9331 | is-weakmap: ^2.0.1 | ||
9332 | is-weakset: ^2.0.1 | ||
9333 | checksum: c815bbd163107ef9cb84f135e6f34453eaf4cca994e7ba85ddb0d27cea724c623fae2a473ceccfd5549c53cc65a5d82692de418166df3f858e1e5dc60818581c | ||
9334 | languageName: node | ||
9335 | linkType: hard | ||
9336 | |||
9337 | "which-typed-array@npm:^1.1.2": | ||
9338 | version: 1.1.7 | ||
9339 | resolution: "which-typed-array@npm:1.1.7" | ||
9340 | dependencies: | ||
9341 | available-typed-arrays: ^1.0.5 | ||
9342 | call-bind: ^1.0.2 | ||
9343 | es-abstract: ^1.18.5 | ||
9344 | foreach: ^2.0.5 | ||
9345 | has-tostringtag: ^1.0.0 | ||
9346 | is-typed-array: ^1.1.7 | ||
9347 | checksum: 147837cf5866e36b6b2e427731709e02f79f1578477cbde68ed773a5307520a6cb6836c73c79c30690a473266ee59010b83b6d9b25d8d677a40ff77fb37a8a84 | ||
9348 | languageName: node | ||
9349 | linkType: hard | ||
9350 | |||
9192 | "which@npm:^2.0.1, which@npm:^2.0.2": | 9351 | "which@npm:^2.0.1, which@npm:^2.0.2": |
9193 | version: 2.0.2 | 9352 | version: 2.0.2 |
9194 | resolution: "which@npm:2.0.2" | 9353 | resolution: "which@npm:2.0.2" |