Skip to content

Commit 2ca1937

Browse files
authored
Persist diff options across reload (#224)
* update to react-router v6 * stash; going to upgrade to react-router 6 first * store some options in query params * save max width in URL parameters as well * cleanup
1 parent f59c8eb commit 2ca1937

6 files changed

Lines changed: 93 additions & 120 deletions

File tree

ts/Root.tsx

Lines changed: 55 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import React from 'react';
2-
import {RouteComponentProps, useHistory} from 'react-router';
2+
import {useNavigate, useParams} from 'react-router';
3+
import {useSearchParams} from 'react-router-dom';
34
import {FilePair} from './CodeDiffContainer';
4-
import {DiffOptions} from './diff-options';
5+
import {decodeDiffOptions, DiffOptions, encodeDiffOptions} from './diff-options';
56
import {DiffView, PerceptualDiffMode} from './DiffView';
67
import {FileSelector, FileSelectorMode} from './FileSelector';
78
import {isLegitKeypress} from './file_diff';
@@ -15,35 +16,76 @@ declare const pairs: FilePair[];
1516
declare const initialIdx: number;
1617
declare const GIT_CONFIG: GitConfig;
1718

18-
type Props = RouteComponentProps<{index?: string}>;
19+
interface CombinedOptions extends DiffOptions {
20+
maxDiffWidth: number;
21+
}
22+
23+
function parseOptions(query: URLSearchParams): Partial<CombinedOptions> {
24+
const flags = query.getAll('flag');
25+
const diffOptions = decodeDiffOptions(flags);
26+
const maxWidthStr = query.get('width');
27+
const maxDiffWidth = maxWidthStr ? {maxDiffWidth: Number(maxWidthStr)} : undefined;
28+
return {...diffOptions, ...maxDiffWidth};
29+
}
30+
31+
function encodeOptions(diffOptions: Partial<DiffOptions>, maxDiffWidth: number) {
32+
const flags = encodeDiffOptions(diffOptions);
33+
const params = new URLSearchParams(flags.map(f => ['flag', f]));
34+
if (maxDiffWidth !== GIT_CONFIG.webdiff.maxDiffWidth) {
35+
params.set('width', String(maxDiffWidth));
36+
}
37+
return params;
38+
}
1939

2040
// Webdiff application root.
21-
export function Root(props: Props) {
41+
export function Root() {
2242
const [pdiffMode, setPDiffMode] = React.useState<PerceptualDiffMode>('off');
2343
const [imageDiffMode, setImageDiffMode] = React.useState<ImageDiffMode>('side-by-side');
24-
const [diffOptions, setDiffOptions] = React.useState<Partial<DiffOptions>>({});
25-
const [maxDiffWidth, setMaxDiffWidth] = React.useState(GIT_CONFIG.webdiff.maxDiffWidth);
2644
const [showKeyboardHelp, setShowKeyboardHelp] = React.useState(false);
2745
const [showOptions, setShowOptions] = React.useState(false);
46+
2847
// An explicit list is better, unless there are a ton of files.
2948
const [fileSelectorMode, setFileSelectorMode] = React.useState<FileSelectorMode>(
3049
pairs.length <= 6 ? 'list' : 'dropdown',
3150
);
3251

33-
const history = useHistory();
52+
const [searchParams, setSearchParams] = useSearchParams();
53+
const navigate = useNavigate();
3454
const selectIndex = React.useCallback(
3555
(idx: number) => {
36-
history.push(`/${idx}`);
56+
const search = searchParams.toString();
57+
const url = `/${idx}` + (search ? `?${search}` : '');
58+
navigate(url);
3759
},
38-
[history],
60+
[navigate, searchParams],
3961
);
4062

41-
const idx = Number(props.match.params.index ?? initialIdx);
63+
const params = useParams();
64+
const idx = Number(params.index ?? initialIdx);
4265
const filePair = pairs[idx];
4366
React.useEffect(() => {
44-
document.title = 'Diff: ' + filePairDisplayName(filePair) + ' (' + filePair.type + ')';
67+
const fileName = filePairDisplayName(filePair);
68+
const diffType = filePair.type;
69+
document.title = `Diff: ${fileName} (${diffType})`;
4570
}, [filePair]);
4671

72+
const options = React.useMemo(() => parseOptions(searchParams), [searchParams]);
73+
const maxDiffWidth = options.maxDiffWidth ?? GIT_CONFIG.webdiff.maxDiffWidth;
74+
75+
const setDiffOptions = React.useCallback(
76+
(newOptions: Partial<DiffOptions>) => {
77+
setSearchParams(encodeOptions(newOptions, maxDiffWidth));
78+
},
79+
[maxDiffWidth, setSearchParams],
80+
);
81+
82+
const setMaxDiffWidth = React.useCallback(
83+
(newMaxWidth: number) => {
84+
setSearchParams(encodeOptions(options, newMaxWidth));
85+
},
86+
[options, setSearchParams],
87+
);
88+
4789
// TODO: switch to useKey() or some such
4890
React.useEffect(() => {
4991
const handleKeydown = (e: KeyboardEvent) => {
@@ -82,7 +124,7 @@ export function Root(props: Props) {
82124
<style>{inlineStyle}</style>
83125
<div>
84126
<DiffOptionsControl
85-
options={diffOptions}
127+
options={options}
86128
setOptions={setDiffOptions}
87129
maxDiffWidth={maxDiffWidth}
88130
setMaxDiffWidth={setMaxDiffWidth}
@@ -109,7 +151,7 @@ export function Root(props: Props) {
109151
thinFilePair={filePair}
110152
imageDiffMode={imageDiffMode}
111153
pdiffMode={pdiffMode}
112-
diffOptions={diffOptions}
154+
diffOptions={options}
113155
changeImageDiffMode={setImageDiffMode}
114156
changePDiffMode={setPDiffMode}
115157
changeDiffOptions={setDiffOptions}

ts/__tests__/diff-options.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ describe('encodeDiffOptions', () => {
1414
});
1515

1616
it('should decode flags', () => {
17-
expect(decodeDiffOptions('-w')).toEqual({ignoreAllSpace: true});
17+
expect(decodeDiffOptions(['-w'])).toEqual({ignoreAllSpace: true});
18+
expect(decodeDiffOptions(['-W'])).toEqual({functionContext: true});
1819
});
1920
});

ts/diff-options.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,21 @@ export function encodeDiffOptions(opts: Partial<DiffOptions>) {
4343
return flags;
4444
}
4545

46-
export function decodeDiffOptions(flags: string): Partial<DiffOptions> {
47-
const args = flags.split(' ');
46+
export function decodeDiffOptions(flags: string[]): Partial<DiffOptions> {
4847
const options: Partial<DiffOptions> = {};
49-
for (const arg of args) {
50-
if (arg == '-w' || arg == '--ignoreAllSpace') {
48+
for (const flag of flags) {
49+
if (flag == '-w' || flag == '--ignore-all-space') {
5150
options.ignoreAllSpace = true;
52-
} else if (arg == '-b' || arg == '--ignoreSpaceChange') {
51+
} else if (flag == '-b' || flag == '--ignore-space-change') {
5352
options.ignoreSpaceChange = true;
54-
} else if (arg.startsWith('--diff-algorithm=')) {
53+
} else if (flag == '-W' || flag == '--function-context') {
54+
options.functionContext = true;
55+
} else if (flag.startsWith('--diff-algorithm=')) {
5556
// This is pretty imprecise; I believe `--diff-algorithm patience` would also work.
56-
const algo = arg.split('=')[1];
57+
const algo = flag.split('=')[1];
5758
options.diffAlgorithm = algo as DiffAlgorithm;
58-
} else if (arg.startsWith('-U')) {
59-
options.unified = Number(arg.slice(2));
59+
} else if (flag.startsWith('-U')) {
60+
options.unified = Number(flag.slice(2));
6061
}
6162
}
6263
return options;

ts/index.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
3-
import {BrowserRouter as Router, Switch, Route} from 'react-router-dom';
3+
import {BrowserRouter as Router, Routes, Route} from 'react-router-dom';
44
import {injectStylesFromConfig} from './options';
55
import {Root} from './Root';
66

77
const App = () => (
88
<Router>
9-
<Switch>
10-
<Route path="/:index?" component={Root} />
11-
</Switch>
9+
<Routes>
10+
<Route path="/:index?" element={<Root />} />
11+
</Routes>
1212
</Router>
1313
);
1414

ts/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"lodash": "^4.17.20",
4545
"react": "^16.13.1",
4646
"react-dom": "^16.13.1",
47-
"react-router": "^5.2.0",
48-
"react-router-dom": "^5.2.0"
47+
"react-router": "^6.25.0",
48+
"react-router-dom": "^6.25.0"
4949
}
5050
}

ts/yarn.lock

Lines changed: 20 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -258,13 +258,6 @@
258258
dependencies:
259259
"@babel/helper-plugin-utils" "^7.24.6"
260260

261-
"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.13":
262-
version "7.24.6"
263-
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.6.tgz#5b76eb89ad45e2e4a0a8db54c456251469a3358e"
264-
integrity sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==
265-
dependencies:
266-
regenerator-runtime "^0.14.0"
267-
268261
"@babel/template@^7.24.6", "@babel/template@^7.3.3":
269262
version "7.24.6"
270263
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.6.tgz#048c347b2787a6072b24c723664c8d02b67a44f9"
@@ -667,6 +660,11 @@
667660
"@nodelib/fs.scandir" "2.1.5"
668661
fastq "^1.6.0"
669662

663+
"@remix-run/router@1.18.0":
664+
version "1.18.0"
665+
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.18.0.tgz#20b033d1f542a100c1d57cfd18ecf442d1784732"
666+
integrity sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw==
667+
670668
"@sinclair/typebox@^0.27.8":
671669
version "0.27.8"
672670
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
@@ -3015,18 +3013,6 @@ highlight.js@^11.9.0:
30153013
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.9.0.tgz#04ab9ee43b52a41a047432c8103e2158a1b8b5b0"
30163014
integrity sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==
30173015

3018-
history@^4.9.0:
3019-
version "4.10.1"
3020-
resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
3021-
integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==
3022-
dependencies:
3023-
"@babel/runtime" "^7.1.2"
3024-
loose-envify "^1.2.0"
3025-
resolve-pathname "^3.0.0"
3026-
tiny-invariant "^1.0.2"
3027-
tiny-warning "^1.0.0"
3028-
value-equal "^1.0.1"
3029-
30303016
hmac-drbg@^1.0.1:
30313017
version "1.0.1"
30323018
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -3036,13 +3022,6 @@ hmac-drbg@^1.0.1:
30363022
minimalistic-assert "^1.0.0"
30373023
minimalistic-crypto-utils "^1.0.1"
30383024

3039-
hoist-non-react-statics@^3.1.0:
3040-
version "3.3.2"
3041-
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
3042-
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
3043-
dependencies:
3044-
react-is "^16.7.0"
3045-
30463025
homedir-polyfill@^1.0.1:
30473026
version "1.0.3"
30483027
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
@@ -3344,11 +3323,6 @@ is-wsl@^1.1.0:
33443323
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
33453324
integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==
33463325

3347-
isarray@0.0.1:
3348-
version "0.0.1"
3349-
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
3350-
integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
3351-
33523326
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
33533327
version "1.0.0"
33543328
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@@ -4038,7 +4012,7 @@ lodash@^4.17.20:
40384012
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
40394013
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
40404014

4041-
loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
4015+
loose-envify@^1.1.0, loose-envify@^1.4.0:
40424016
version "1.4.0"
40434017
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
40444018
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -4613,13 +4587,6 @@ path-parse@^1.0.7:
46134587
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
46144588
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
46154589

4616-
path-to-regexp@^1.7.0:
4617-
version "1.8.0"
4618-
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
4619-
integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
4620-
dependencies:
4621-
isarray "0.0.1"
4622-
46234590
path-type@^4.0.0:
46244591
version "4.0.0"
46254592
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -4852,7 +4819,7 @@ react-dom@^16.13.1:
48524819
prop-types "^15.6.2"
48534820
scheduler "^0.19.1"
48544821

4855-
react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0:
4822+
react-is@^16.13.1:
48564823
version "16.13.1"
48574824
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
48584825
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -4862,33 +4829,20 @@ react-is@^18.0.0:
48624829
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
48634830
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
48644831

4865-
react-router-dom@^5.2.0:
4866-
version "5.3.4"
4867-
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6"
4868-
integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==
4832+
react-router-dom@^6.25.0:
4833+
version "6.25.0"
4834+
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.25.0.tgz#f46f98553e1b4b3bcd2e4bb1021e9144b02671bf"
4835+
integrity sha512-BhcczgDWWgvGZxjDDGuGHrA8HrsSudilqTaRSBYLWDayvo1ClchNIDVt5rldqp6e7Dro5dEFx9Mzc+r292lN0w==
48694836
dependencies:
4870-
"@babel/runtime" "^7.12.13"
4871-
history "^4.9.0"
4872-
loose-envify "^1.3.1"
4873-
prop-types "^15.6.2"
4874-
react-router "5.3.4"
4875-
tiny-invariant "^1.0.2"
4876-
tiny-warning "^1.0.0"
4877-
4878-
react-router@5.3.4, react-router@^5.2.0:
4879-
version "5.3.4"
4880-
resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5"
4881-
integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==
4882-
dependencies:
4883-
"@babel/runtime" "^7.12.13"
4884-
history "^4.9.0"
4885-
hoist-non-react-statics "^3.1.0"
4886-
loose-envify "^1.3.1"
4887-
path-to-regexp "^1.7.0"
4888-
prop-types "^15.6.2"
4889-
react-is "^16.6.0"
4890-
tiny-invariant "^1.0.2"
4891-
tiny-warning "^1.0.0"
4837+
"@remix-run/router" "1.18.0"
4838+
react-router "6.25.0"
4839+
4840+
react-router@6.25.0, react-router@^6.25.0:
4841+
version "6.25.0"
4842+
resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.25.0.tgz#24f72cdf3bcc9be0f60b95af6cd88950c3d246e4"
4843+
integrity sha512-bziKjCcDbcxgWS9WlWFcQIVZ2vJHnCP6DGpQDT0l+0PFDasfJKgzf9CM22eTyhFsZkjk8ApCdKjJwKtzqH80jQ==
4844+
dependencies:
4845+
"@remix-run/router" "1.18.0"
48924846

48934847
react@^16.13.1:
48944848
version "16.14.0"
@@ -4937,11 +4891,6 @@ readdirp@~3.6.0:
49374891
dependencies:
49384892
picomatch "^2.2.1"
49394893

4940-
regenerator-runtime@^0.14.0:
4941-
version "0.14.1"
4942-
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
4943-
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
4944-
49454894
regex-not@^1.0.0, regex-not@^1.0.2:
49464895
version "1.0.2"
49474896
resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
@@ -5017,11 +4966,6 @@ resolve-from@^5.0.0:
50174966
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
50184967
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
50194968

5020-
resolve-pathname@^3.0.0:
5021-
version "3.0.0"
5022-
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
5023-
integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
5024-
50254969
resolve-url@^0.2.1:
50264970
version "0.2.1"
50274971
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@@ -5575,16 +5519,6 @@ timers-browserify@^2.0.4:
55755519
dependencies:
55765520
setimmediate "^1.0.4"
55775521

5578-
tiny-invariant@^1.0.2:
5579-
version "1.3.3"
5580-
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127"
5581-
integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==
5582-
5583-
tiny-warning@^1.0.0:
5584-
version "1.0.3"
5585-
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
5586-
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
5587-
55885522
tmpl@1.0.5:
55895523
version "1.0.5"
55905524
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
@@ -5867,11 +5801,6 @@ v8-to-istanbul@^9.0.1:
58675801
"@types/istanbul-lib-coverage" "^2.0.1"
58685802
convert-source-map "^2.0.0"
58695803

5870-
value-equal@^1.0.1:
5871-
version "1.0.1"
5872-
resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
5873-
integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
5874-
58755804
vlq@^0.2.1:
58765805
version "0.2.3"
58775806
resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"

0 commit comments

Comments
 (0)