Skip to content

Commit

Permalink
fix: use safe time as the default time (#3315)
Browse files Browse the repository at this point in the history
* refactor: move `safeTime` to `fslib`

* fix(patch): use `SAFE_TIME` for new files

* fix(fslib): use `SAFE_TIME` in `copyPromise`

* chore: versions

* fix(patch): let `copyPromise` create the destination

* fix(fslib): apply stable time to `destination`

* chore: update hook
  • Loading branch information
merceyz authored Aug 23, 2021
1 parent 5bff855 commit 7ae458b
Show file tree
Hide file tree
Showing 25 changed files with 256 additions and 204 deletions.
287 changes: 150 additions & 137 deletions .pnp.cjs

Large diffs are not rendered by default.

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.
37 changes: 37 additions & 0 deletions .yarn/versions/0644d592.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
releases:
"@yarnpkg/cli": patch
"@yarnpkg/core": patch
"@yarnpkg/fslib": patch
"@yarnpkg/plugin-exec": patch
"@yarnpkg/plugin-file": patch
"@yarnpkg/plugin-pack": patch
"@yarnpkg/plugin-patch": patch

declined:
- "@yarnpkg/plugin-compat"
- "@yarnpkg/plugin-constraints"
- "@yarnpkg/plugin-dlx"
- "@yarnpkg/plugin-essentials"
- "@yarnpkg/plugin-git"
- "@yarnpkg/plugin-github"
- "@yarnpkg/plugin-http"
- "@yarnpkg/plugin-init"
- "@yarnpkg/plugin-interactive-tools"
- "@yarnpkg/plugin-link"
- "@yarnpkg/plugin-nm"
- "@yarnpkg/plugin-npm"
- "@yarnpkg/plugin-npm-cli"
- "@yarnpkg/plugin-pnp"
- "@yarnpkg/plugin-stage"
- "@yarnpkg/plugin-typescript"
- "@yarnpkg/plugin-version"
- "@yarnpkg/plugin-workspace-tools"
- vscode-zipfs
- "@yarnpkg/builder"
- "@yarnpkg/doctor"
- "@yarnpkg/json-proxy"
- "@yarnpkg/nm"
- "@yarnpkg/pnp"
- "@yarnpkg/pnpify"
- "@yarnpkg/sdks"
- "@yarnpkg/shell"
2 changes: 1 addition & 1 deletion packages/plugin-exec/sources/ExecResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {PROTOCOL} from './constant
import * as execUtils from './execUtils';

// We use this for the generators to be regenerated without bumping the whole cache
const CACHE_VERSION = 1;
const CACHE_VERSION = 2;

export class ExecResolver implements Resolver {
supportsDescriptor(descriptor: Descriptor, opts: MinimalResolveOptions) {
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin-file/sources/FileResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {FILE_REGEXP, PROTOCOL} from './constants';
import * as fileUtils from './fileUtils';

// We use this for the folders to be regenerated without bumping the whole cache
const CACHE_VERSION = 1;
const CACHE_VERSION = 2;

export class FileResolver implements Resolver {
supportsDescriptor(descriptor: Descriptor, opts: MinimalResolveOptions) {
Expand Down
17 changes: 8 additions & 9 deletions packages/plugin-pack/sources/packUtils.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import {Manifest, Report, Workspace, scriptUtils, tgzUtils} from '@yarnpkg/core';
import {FakeFS, JailFS, xfs, PortablePath, ppath, Filename, npath} from '@yarnpkg/fslib';
import {Hooks as StageHooks} from '@yarnpkg/plugin-stage';
import mm from 'micromatch';
import tar from 'tar-stream';
import {createGzip} from 'zlib';
import {Manifest, Report, Workspace, scriptUtils} from '@yarnpkg/core';
import {FakeFS, JailFS, xfs, PortablePath, ppath, Filename, npath, constants} from '@yarnpkg/fslib';
import {Hooks as StageHooks} from '@yarnpkg/plugin-stage';
import mm from 'micromatch';
import tar from 'tar-stream';
import {createGzip} from 'zlib';

import {Hooks} from './';
import {Hooks} from './';

const NEVER_IGNORE = [
`/package.json`,
Expand Down Expand Up @@ -90,8 +90,7 @@ export async function genPackStream(workspace: Workspace, files?: Array<Portable

const opts = {
name: dest,
// 1984-06-22T21:50:00.000Z
mtime: new Date(tgzUtils.safeTime * 1000),
mtime: new Date(constants.SAFE_TIME * 1000),
};

const mode = executableFiles.has(file)
Expand Down
2 changes: 0 additions & 2 deletions packages/plugin-patch/sources/PatchFetcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@ export class PatchFetcher implements Fetcher {
level: opts.project.configuration.get(`compressionLevel`),
});

await initialCopy.mkdirpPromise(prefixPath);

await miscUtils.releaseAfterUseAsync(async () => {
await initialCopy.copyPromise(prefixPath, sourceFetch.prefixPath, {baseFs: sourceFetch.packageFs, stableSort: true});
}, sourceFetch.releaseFs);
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin-patch/sources/PatchResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import * as patchUtils

// We use this to for the patches to be regenerated without bumping the whole
// cache, like when the libzip had incorrect mtime in some cases
const CACHE_VERSION = 2;
const CACHE_VERSION = 3;

export class PatchResolver implements Resolver {
supportsDescriptor(descriptor: Descriptor, opts: MinimalResolveOptions) {
Expand Down
8 changes: 3 additions & 5 deletions packages/plugin-patch/sources/tools/apply.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import {miscUtils, semverUtils} from '@yarnpkg/core';
import {FakeFS, ppath, NodeFS, PortablePath} from '@yarnpkg/fslib';
import {FakeFS, ppath, NodeFS, PortablePath, constants} from '@yarnpkg/fslib';

import {UnmatchedHunkError} from './UnmatchedHunkError';
import {ParsedPatchFile, FilePatch, Hunk, PatchMutationType} from './parse';

const DEFAULT_TIME = 315532800;

async function preserveTime(baseFs: FakeFS<PortablePath>, p: PortablePath, cb: () => Promise<PortablePath | void>) {
const stat = await baseFs.lstatPromise(p);

Expand Down Expand Up @@ -69,10 +67,10 @@ export async function applyPatchFile(effects: ParsedPatchFile, {baseFs = new Nod
: ``;

// Todo: the parent of the first directory thus created will still see its mtime changed
await baseFs.mkdirpPromise(ppath.dirname(eff.path), {chmod: 0o755, utimes: [DEFAULT_TIME, DEFAULT_TIME]});
await baseFs.mkdirpPromise(ppath.dirname(eff.path), {chmod: 0o755, utimes: [constants.SAFE_TIME, constants.SAFE_TIME]});

await baseFs.writeFilePromise(eff.path, fileContents, {mode: eff.mode});
await baseFs.utimesPromise(eff.path, DEFAULT_TIME, DEFAULT_TIME);
await baseFs.utimesPromise(eff.path, constants.SAFE_TIME, constants.SAFE_TIME);
}
} break;

Expand Down
35 changes: 13 additions & 22 deletions packages/yarnpkg-core/sources/tgzUtils.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import {Filename, FakeFS, PortablePath, ZipCompression, ZipFS, NodeFS, ppath, xfs, npath} from '@yarnpkg/fslib';
import {getLibzipPromise} from '@yarnpkg/libzip';
import {PassThrough, Readable} from 'stream';
import tar from 'tar';
import {Filename, FakeFS, PortablePath, ZipCompression, ZipFS, NodeFS, ppath, xfs, npath, constants} from '@yarnpkg/fslib';
import {getLibzipPromise} from '@yarnpkg/libzip';
import {PassThrough, Readable} from 'stream';
import tar from 'tar';

import {WorkerPool} from './WorkerPool';
import * as miscUtils from './miscUtils';
import {getContent as getZipWorkerSource, ConvertToZipPayload} from './worker-zip';
import {WorkerPool} from './WorkerPool';
import * as miscUtils from './miscUtils';
import {getContent as getZipWorkerSource, ConvertToZipPayload} from './worker-zip';

interface MakeArchiveFromDirectoryOptions {
baseFs?: FakeFS<PortablePath>,
Expand All @@ -14,15 +14,6 @@ interface MakeArchiveFromDirectoryOptions {
inMemory?: boolean,
}

// 1984-06-22T21:50:00.000Z
//
// It needs to be after 1980-01-01 because that's what Zip supports, and it
// needs to have a slight offset to account for different timezones (because
// zip assumes that all times are local to whoever writes the file, which is
// really silly).
//
export const safeTime = 456789000;

export async function makeArchiveFromDirectory(source: PortablePath, {baseFs = new NodeFS(), prefixPath = PortablePath.root, compressionLevel, inMemory = false}: MakeArchiveFromDirectoryOptions = {}): Promise<ZipFS> {
const libzip = await getLibzipPromise();

Expand Down Expand Up @@ -125,25 +116,25 @@ export async function extractArchiveTo<T extends FakeFS<PortablePath>>(tgz: Buff

switch (entry.type) {
case `Directory`: {
targetFs.mkdirpSync(ppath.dirname(mappedPath), {chmod: 0o755, utimes: [safeTime, safeTime]});
targetFs.mkdirpSync(ppath.dirname(mappedPath), {chmod: 0o755, utimes: [constants.SAFE_TIME, constants.SAFE_TIME]});

targetFs.mkdirSync(mappedPath, {mode});
targetFs.utimesSync(mappedPath, safeTime, safeTime);
targetFs.utimesSync(mappedPath, constants.SAFE_TIME, constants.SAFE_TIME);
} break;

case `OldFile`:
case `File`: {
targetFs.mkdirpSync(ppath.dirname(mappedPath), {chmod: 0o755, utimes: [safeTime, safeTime]});
targetFs.mkdirpSync(ppath.dirname(mappedPath), {chmod: 0o755, utimes: [constants.SAFE_TIME, constants.SAFE_TIME]});

targetFs.writeFileSync(mappedPath, await miscUtils.bufferStream(entry as unknown as Readable), {mode});
targetFs.utimesSync(mappedPath, safeTime, safeTime);
targetFs.utimesSync(mappedPath, constants.SAFE_TIME, constants.SAFE_TIME);
} break;

case `SymbolicLink`: {
targetFs.mkdirpSync(ppath.dirname(mappedPath), {chmod: 0o755, utimes: [safeTime, safeTime]});
targetFs.mkdirpSync(ppath.dirname(mappedPath), {chmod: 0o755, utimes: [constants.SAFE_TIME, constants.SAFE_TIME]});

targetFs.symlinkSync((entry as any).linkpath, mappedPath);
targetFs.lutimesSync?.(mappedPath, safeTime, safeTime);
targetFs.lutimesSync?.(mappedPath, constants.SAFE_TIME, constants.SAFE_TIME);
} break;
}
}
Expand Down
2 changes: 0 additions & 2 deletions packages/yarnpkg-fslib/sources/FakeFS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,6 @@ export type ExtractHintOptions = {
export type SymlinkType = 'file' | 'dir' | 'junction';

export abstract class FakeFS<P extends Path> {
static DEFAULT_TIME = 315532800;

public readonly pathUtils: PathUtils<P>;

protected constructor(pathUtils: PathUtils<P>) {
Expand Down
10 changes: 7 additions & 3 deletions packages/yarnpkg-fslib/sources/algorithms/copyPromise.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import fs, {Stats} from 'fs';

import {FakeFS} from '../FakeFS';
import * as constants from '../constants';
import {Path, convertPath} from '../path';

// 1980-01-01, like Fedora
const defaultTime = new Date(315532800 * 1000);
const defaultTime = new Date(constants.SAFE_TIME * 1000);

export enum LinkStrategy {
Allow = `allow`,
Expand All @@ -31,7 +31,11 @@ export async function copyPromise<P1 extends Path, P2 extends Path>(destinationF
const prelayout: Operations = [];
const postlayout: Operations = [];

await destinationFs.mkdirPromise(destinationFs.pathUtils.dirname(destination), {recursive: true});
const referenceTime = opts.stableTime
? {mtime: defaultTime, atime: defaultTime} as const
: await sourceFs.lstatPromise(normalizedSource);

await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), {utimes: [referenceTime.atime, referenceTime.mtime]});

const updateTime = typeof destinationFs.lutimesPromise === `function`
? destinationFs.lutimesPromise.bind(destinationFs)
Expand Down
11 changes: 11 additions & 0 deletions packages/yarnpkg-fslib/sources/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,14 @@ export const S_IFMT = 0o170000;
export const S_IFDIR = 0o040000;
export const S_IFREG = 0o100000;
export const S_IFLNK = 0o120000;


/**
* Unix timestamp for `1984-06-22T21:50:00.000Z`
*
* It needs to be after 1980-01-01 because that's what Zip supports, and it
* needs to have a slight offset to account for different timezones (because
* zip assumes that all times are local to whoever writes the file, which is
* really silly).
*/
export const SAFE_TIME = 456789000;
3 changes: 3 additions & 0 deletions packages/yarnpkg-fslib/sources/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import * as constants from './constants';
import * as statUtils from './statUtils';

export {constants};

export {LinkStrategy} from './algorithms/copyPromise';
export {opendir} from './algorithms/opendir';

Expand Down
2 changes: 1 addition & 1 deletion packages/yarnpkg-pnp/sources/hook.js

Large diffs are not rendered by default.

40 changes: 20 additions & 20 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3745,13 +3745,13 @@ __metadata:

"@strictsoftware/typedoc-plugin-monorepo@patch:@strictsoftware/typedoc-plugin-monorepo@^0.2.2#./.patches/@strictsoftware/typedoc-plugin-monorepo.patch::locator=%40yarnpkg%2Fgatsby%40workspace%3Apackages%2Fgatsby":
version: 0.2.2
resolution: "@strictsoftware/typedoc-plugin-monorepo@patch:@strictsoftware/typedoc-plugin-monorepo@npm%3A0.2.2#./.patches/@strictsoftware/typedoc-plugin-monorepo.patch::version=0.2.2&hash=c53b58&locator=%40yarnpkg%2Fgatsby%40workspace%3Apackages%2Fgatsby"
resolution: "@strictsoftware/typedoc-plugin-monorepo@patch:@strictsoftware/typedoc-plugin-monorepo@npm%3A0.2.2#./.patches/@strictsoftware/typedoc-plugin-monorepo.patch::version=0.2.2&hash=916087&locator=%40yarnpkg%2Fgatsby%40workspace%3Apackages%2Fgatsby"
dependencies:
highlight.js: ^9.15.6
marked: ^0.8.0
peerDependencies:
typedoc: ">=0.8 <1.0"
checksum: b7a09743fd54d3a23022215febc4a827c354a15f95c98c895065c1e1de260b0bdda9082c5da12c106020b8320ddb8496367475b07b27ac0556b330b5b3bc58b4
checksum: a1ce9b8f68a58c3bb735a669c00503317bc31014d0082d67e5537c9f2118e28e746ee9afced53be18e0fa5ff10b0d1fa450eb58676878e3e715332c920956e6d
languageName: node
linkType: hard

Expand Down Expand Up @@ -12553,20 +12553,20 @@ fsevents@^1.2.7:

"fsevents@patch:fsevents@^1.2.7#~builtin<compat/fsevents>":
version: 1.2.7
resolution: "fsevents@patch:fsevents@npm%3A1.2.7#~builtin<compat/fsevents>::version=1.2.7&hash=1cc4b2"
resolution: "fsevents@patch:fsevents@npm%3A1.2.7#~builtin<compat/fsevents>::version=1.2.7&hash=18f3a7"
dependencies:
nan: ^2.9.2
node-pre-gyp: ^0.10.0
checksum: b31f577c1aac62e6e51df61e243b74fd5e9e157bb5c99a248b64f0b99940dcbcc1a7d693f880eec5195fbf1fbb91ccb39f1ddcaf0b10e835bc12bad8950a4098
checksum: 94a10c4d030ef662e75ea916ab326901e71e502250f1b8ab7d1902872cbbd576fcf93b2228e7e46bc02f33be0c6be9d2bf7f68cb913e20ecfe23cae178f003d0
languageName: node
linkType: hard

"fsevents@patch:fsevents@^2.1.2#~builtin<compat/fsevents>, fsevents@patch:fsevents@~2.3.1#~builtin<compat/fsevents>":
version: 2.3.2
resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=1cc4b2"
resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=18f3a7"
dependencies:
node-gyp: latest
checksum: 78db9daf1f6526a49cefee3917cc988f62dc7f25b5dd80ad6de4ffc4af7f0cab7491ac737626ff53e482a111bc53aac9e411fe3602458eca36f6a003ecf69c16
checksum: edbd0fd80be379c14409605f77e52fdc78a119e17f875e8b90a220c3e5b29e54a1477c21d91fd30b957ea4866406dc3ff87b61432d2840ff8866b309e5866140
languageName: node
linkType: hard

Expand Down Expand Up @@ -22790,30 +22790,30 @@ resolve@^2.0.0-next.3:

"resolve@patch:[email protected]#~builtin<compat/resolve>":
version: 1.9.0
resolution: "resolve@patch:resolve@npm%3A1.9.0#~builtin<compat/resolve>::version=1.9.0&hash=00b1ff"
resolution: "resolve@patch:resolve@npm%3A1.9.0#~builtin<compat/resolve>::version=1.9.0&hash=d4691f"
dependencies:
path-parse: ^1.0.6
checksum: d608d2915f41efa41a27533c5e331c10f382c55d8d54b4400a35feedc9adab4458fb2ccb6c569751fdadeb5b55d7a6b829e5b2a0271145a0e4d4ca777c57f483
checksum: ded24fe4f7c6a041dcc43778a925d64dce8bb729ffb3428a3310a87ec986aadaed22a2c70fd6db2a57d44138c9bea24a162a7ed1236551990a6264e96938f4c4
languageName: node
linkType: hard

"resolve@patch:resolve@^1.1.6#~builtin<compat/resolve>, resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.12.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.13.1#~builtin<compat/resolve>, resolve@patch:resolve@^1.14.2#~builtin<compat/resolve>, resolve@patch:resolve@^1.17.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.19.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.3.2#~builtin<compat/resolve>, resolve@patch:resolve@^1.9.0#~builtin<compat/resolve>":
version: 1.20.0
resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin<compat/resolve>::version=1.20.0&hash=00b1ff"
resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin<compat/resolve>::version=1.20.0&hash=d4691f"
dependencies:
is-core-module: ^2.2.0
path-parse: ^1.0.6
checksum: bed00be983cd20a8af0e7840664f655c4b269786dbd9595c5f156cd9d8a0050e65cdbbbdafc30ee9b6245b230c78a2c8ab6447a52545b582f476c29adb188cc5
checksum: 028141533a81a4515c8ac07e38a0ccde5e2722a0fa6bb83ac53ec463a764f1b7c021dcb98fc9a511a4f6e403f354d034bf250fcf9b7b8399bceb2a889ddf78ff
languageName: node
linkType: hard

"resolve@patch:resolve@^2.0.0-next.3#~builtin<compat/resolve>":
version: 2.0.0-next.3
resolution: "resolve@patch:resolve@npm%3A2.0.0-next.3#~builtin<compat/resolve>::version=2.0.0-next.3&hash=00b1ff"
resolution: "resolve@patch:resolve@npm%3A2.0.0-next.3#~builtin<compat/resolve>::version=2.0.0-next.3&hash=d4691f"
dependencies:
is-core-module: ^2.2.0
path-parse: ^1.0.6
checksum: eb88c5e53843bc022215744307a5f5664446c0fdb8f43c33456dce98d5ee6b3162d0cd0a177bb6f1c3d5c8bf01391ac7ab2de0e936e35318725fb40ba7efdaf6
checksum: 2b145f11f797d477c355e53dc70a1b991d95e7954ea6ab258bc1905d4c1658d477a7bcf912eda56c9643080206fe1f44a53fe96559e8da17140347447ce9c025
languageName: node
linkType: hard

Expand Down Expand Up @@ -25757,31 +25757,31 @@ typescript@^4.3.2:

"typescript@patch:[email protected]#~builtin<compat/typescript>":
version: 3.7.5
resolution: "typescript@patch:typescript@npm%3A3.7.5#~builtin<compat/typescript>::version=3.7.5&hash=d8b4e7"
resolution: "typescript@patch:typescript@npm%3A3.7.5#~builtin<compat/typescript>::version=3.7.5&hash=6454cb"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: fb62f24bfdb94766b99d2e3c8198e9e0c15d12f32c9d867a66585ec5f274944e88dd88f6c3e9930bb3cb030f0f35bbe1652ad2a3365651a0af45983833d7f194
checksum: 6a82cb02b2296ced3fd86aa470c0b062b1b46dd49e68ae97621af00db564aab2337feb2fd4f95511ad7f7e2385203e7f857c0db43500b63f9600479e2d0c07bb
languageName: node
linkType: hard

"typescript@patch:typescript@^3.8.3#~builtin<compat/typescript>":
version: 3.9.5
resolution: "typescript@patch:typescript@npm%3A3.9.5#~builtin<compat/typescript>::version=3.9.5&hash=d8b4e7"
resolution: "typescript@patch:typescript@npm%3A3.9.5#~builtin<compat/typescript>::version=3.9.5&hash=6454cb"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: ac6b67d95161285882b16c37ebb891e59b891b158a0c802e992ec1529182e69f32563346838ea06c295aca754e69fbae3ee4b40e6b8a65d9b3c7f9d353a11734
checksum: bfea14f536401538736250a512d6c779026e9af89a61be59aaefc35fcef9ed926aac1f90509eaa215023b1823d383090cfcc965bb91cbef47f74e151d723fd78
languageName: node
linkType: hard

"typescript@patch:typescript@^4.3.2#~builtin<compat/typescript>":
version: 4.3.2
resolution: "typescript@patch:typescript@npm%3A4.3.2#~builtin<compat/typescript>::version=4.3.2&hash=d8b4e7"
resolution: "typescript@patch:typescript@npm%3A4.3.2#~builtin<compat/typescript>::version=4.3.2&hash=6454cb"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 3d3dec06ba6e5b05caa292355712ed9db813fa1c2377630b1f24b42e5ee8957f0bcdd5efd1500c970a11a6f684897f5728f5542ac822932227159a0611499a5e
checksum: 120b3cc2f092ec537837a88a996f2bb4147cf775617322be0030451dc80f39fc3af509b6a1cfebdc43679d466784312189ab2e8c6180c33d603f3d55bbe6d576
languageName: node
linkType: hard

Expand Down Expand Up @@ -27777,10 +27777,10 @@ [email protected]:

"yoga-layout-prebuilt@patch:[email protected]#./.yarn/patches/yoga-layout-prebuilt.patch::locator=%40yarnpkg%2Fmonorepo%40workspace%3A.":
version: 1.10.0
resolution: "yoga-layout-prebuilt@patch:yoga-layout-prebuilt@npm%3A1.10.0#./.yarn/patches/yoga-layout-prebuilt.patch::version=1.10.0&hash=f2f3a3&locator=%40yarnpkg%2Fmonorepo%40workspace%3A."
resolution: "yoga-layout-prebuilt@patch:yoga-layout-prebuilt@npm%3A1.10.0#./.yarn/patches/yoga-layout-prebuilt.patch::version=1.10.0&hash=8c2d4c&locator=%40yarnpkg%2Fmonorepo%40workspace%3A."
dependencies:
"@types/yoga-layout": 1.9.2
checksum: 704a9fee9da6ece88eae796a640ed9187cfaa1fc6a2cffbfd58491768cf8c9e59c67402a7675446ac48ae216127dd5f6cdd1f35074dc240809195292d79bd558
checksum: e659d239b6f0a38a70d24e33802f906bf7e78654de91dde99bf59cc2e12a26f7102c57032428312c6c1646a956335157df3bdf06a70a9f5e6974e7dfb6460539
languageName: node
linkType: hard

Expand Down

0 comments on commit 7ae458b

Please sign in to comment.