From 4709eba2c7cb85bdab890b3a918cc171a2dafead Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Tue, 24 Oct 2023 20:46:19 -0700 Subject: [PATCH 01/17] remove value objects in file nodes --- packages/core/core/src/RequestTracker.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index 4da53bbb4e4..45fe00a1485 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -84,7 +84,7 @@ type SerializedRequestGraph = {| invalidateOnBuildNodeIds: Set, |}; -type FileNode = {|id: ContentKey, +type: 'file', value: InternalFile|}; +type FileNode = {|id: ContentKey, +type: 'file'|}; type GlobNode = {|id: ContentKey, +type: 'glob', value: InternalGlob|}; type FileNameNode = {| id: ContentKey, @@ -167,7 +167,7 @@ export type StaticRunOpts = {| const nodeFromFilePath = (filePath: ProjectPath): RequestGraphNode => ({ id: fromProjectPathRelative(filePath), type: 'file', - value: {filePath}, + //value: {filePath}, }); const nodeFromGlob = (glob: InternalGlob): RequestGraphNode => ({ @@ -609,7 +609,7 @@ export class RequestGraph extends ContentGraph< let node = nullthrows(this.getNode(nodeId)); switch (node.type) { case 'file': - return {type: 'file', filePath: node.value.filePath}; + return {type: 'file', filePath: node.id}; case 'env': return {type: 'env', key: node.value.key}; case 'option': @@ -674,10 +674,7 @@ export class RequestGraph extends ContentGraph< matchNodeId, requestGraphEdgeTypes.invalidated_by_create_above, ) && - isDirectoryInside( - fromProjectPathRelative(matchNode.value.filePath), - dirname, - ) + isDirectoryInside(fromProjectPathRelative(matchNode.id), dirname) ) { let connectedNodes = this.getNodeIdsConnectedTo( matchNodeId, From 15f62921e73635d69488605fed1ce22dd0ada3ad Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Wed, 1 Nov 2023 13:54:36 -0700 Subject: [PATCH 02/17] reduce redundancy of request nodes WIP --- packages/core/core/src/RequestTracker.js | 125 +++++++++++------- packages/core/integration-tests/test/cache.js | 21 +-- 2 files changed, 89 insertions(+), 57 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index 45fe00a1485..b39537fb738 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -89,18 +89,19 @@ type GlobNode = {|id: ContentKey, +type: 'glob', value: InternalGlob|}; type FileNameNode = {| id: ContentKey, +type: 'file_name', - value: string, + //value: string, |}; type EnvNode = {| id: ContentKey, +type: 'env', - value: {|key: string, value: string | void|}, + value: string | void, + //value: {|key: string, value: string | void|}, |}; type OptionNode = {| id: ContentKey, +type: 'option', - value: {|key: string, hash: string|}, + hash: string, |}; type Request = {| @@ -110,20 +111,41 @@ type Request = {| run: ({|input: TInput, ...StaticRunOpts|}) => Async, |}; -type StoredRequest = {| - id: string, - +type: string, - result?: mixed, - resultCacheKey?: ?string, -|}; +// type StoredRequest = {| +// id: string, +// +type: string, +// result?: mixed, +// resultCacheKey?: ?string, +// |}; type InvalidateReason = number; -type RequestNode = {| +export type RequestNode = {| id: ContentKey, +type: 'request', - value: StoredRequest, + //value: StoredRequest, + +requestType?: RequestType, invalidateReason: InvalidateReason, + result?: mixed, + resultCacheKey?: ?string, + hash?: string, |}; +// TODO enumerate these +type RequestType = + | 'parcel_build_request' + | 'bundle_graph_request' + | 'asset_graph_request' + | 'entry_request' + | 'target_request' + | 'parcel_config_request' + | 'path_request' + | 'dev_dep_request' + | 'asset_request' + | 'config_request' + | 'write_bundles_request' + | 'package_request' + | 'write_bundle_request' + | 'validation_request'; + type RequestGraphNode = | RequestNode | FileNode @@ -144,8 +166,8 @@ export type RunAPI = {| storeResult(result: TResult, cacheKey?: string): void, getRequestResult(contentKey: ContentKey): Async, getPreviousResult(ifMatch?: string): Async, - getSubRequests(): Array, - getInvalidSubRequests(): Array, + getSubRequests(): Array, + getInvalidSubRequests(): Array, canSkipSubrequest(ContentKey): boolean, runRequest: ( subRequest: Request, @@ -179,32 +201,29 @@ const nodeFromGlob = (glob: InternalGlob): RequestGraphNode => ({ const nodeFromFileName = (fileName: string): RequestGraphNode => ({ id: 'file_name:' + fileName, type: 'file_name', - value: fileName, }); -const nodeFromRequest = (request: StoredRequest): RequestGraphNode => ({ +const nodeFromRequest = (request: RequestNode): RequestGraphNode => ({ id: request.id, type: 'request', - value: request, + //value: request, invalidateReason: INITIAL_BUILD, }); const nodeFromEnv = (env: string, value: string | void): RequestGraphNode => ({ id: 'env:' + env, type: 'env', - value: { - key: env, - value, - }, + value, }); const nodeFromOption = (option: string, value: mixed): RequestGraphNode => ({ id: 'option:' + option, type: 'option', - value: { - key: option, - hash: hashFromOption(value), - }, + hash: hashFromOption(value), + // value: { + // key: option, + // hash: hashFromOption(value), + // }, }); export class RequestGraph extends ContentGraph< @@ -346,7 +365,7 @@ export class RequestGraph extends ContentGraph< for (let nodeId of this.envNodeIds) { let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'env'); - if (env[node.value.key] !== node.value.value) { + if (env[node.id.slice(node.id.indexOf(':'))] !== node.value) { let parentNodes = this.getNodeIdsConnectedTo( nodeId, requestGraphEdgeTypes.invalidated_by_update, @@ -362,7 +381,10 @@ export class RequestGraph extends ContentGraph< for (let nodeId of this.optionNodeIds) { let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'option'); - if (hashFromOption(options[node.value.key]) !== node.value.hash) { + if ( + hashFromOption(options[node.id.slice(node.id.indexOf(':'))]) !== + node.hash + ) { let parentNodes = this.getNodeIdsConnectedTo( nodeId, requestGraphEdgeTypes.invalidated_by_update, @@ -611,15 +633,18 @@ export class RequestGraph extends ContentGraph< case 'file': return {type: 'file', filePath: node.id}; case 'env': - return {type: 'env', key: node.value.key}; + return {type: 'env', key: node.id.slice(node.id.indexOf(':') + 1)}; case 'option': - return {type: 'option', key: node.value.key}; + return { + type: 'option', + key: node.id.slice(node.id.indexOf(':') + 1), + }; } }) .filter(Boolean); } - getSubRequests(requestNodeId: NodeId): Array { + getSubRequests(requestNodeId: NodeId): Array { if (!this.hasNode(requestNodeId)) { return []; } @@ -632,11 +657,11 @@ export class RequestGraph extends ContentGraph< return subRequests.map(nodeId => { let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'request'); - return node.value; + return node; }); } - getInvalidSubRequests(requestNodeId: NodeId): Array { + getInvalidSubRequests(requestNodeId: NodeId): Array { if (!this.hasNode(requestNodeId)) { return []; } @@ -651,7 +676,7 @@ export class RequestGraph extends ContentGraph< .map(nodeId => { let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'request'); - return node.value; + return node; }); } @@ -841,8 +866,8 @@ export default class RequestTracker { setSignal(signal?: AbortSignal) { this.signal = signal; } - - startRequest(request: StoredRequest): {| + // request used to be StoredRequest + startRequest(request: RequestNode): {| requestNodeId: NodeId, deferred: Deferred, |} { @@ -870,8 +895,8 @@ export default class RequestTracker { storeResult(nodeId: NodeId, result: mixed, cacheKey: ?string) { let node = this.graph.getNode(nodeId); if (node && node.type === 'request') { - node.value.result = result; - node.value.resultCacheKey = cacheKey; + node.result = result; + node.resultCacheKey = cacheKey; } } @@ -890,21 +915,21 @@ export default class RequestTracker { let node = nullthrows(this.graph.getNodeByContentKey(contentKey)); invariant(node.type === 'request'); - if (ifMatch != null && node.value.resultCacheKey !== ifMatch) { + if (ifMatch != null && node.resultCacheKey !== ifMatch) { return null; } - if (node.value.result != undefined) { + if (node.result != undefined) { // $FlowFixMe - let result: T = (node.value.result: any); + let result: T = (node.result: any); return result; - } else if (node.value.resultCacheKey != null && ifMatch == null) { - let key = node.value.resultCacheKey; + } else if (node.resultCacheKey != null && ifMatch == null) { + let key = node.resultCacheKey; invariant(this.options.cache.hasLargeBlob(key)); let cachedResult: T = deserialize( await this.options.cache.getLargeBlob(key), ); - node.value.result = cachedResult; + node.result = cachedResult; return cachedResult; } } @@ -939,12 +964,12 @@ export default class RequestTracker { return this.graph.invalidNodeIds.size > 0; } - getInvalidRequests(): Array { + getInvalidRequests(): Array { let invalidRequests = []; for (let id of this.graph.invalidNodeIds) { let node = nullthrows(this.graph.getNode(id)); invariant(node.type === 'request'); - invalidRequests.push(node.value); + invalidRequests.push(node); } return invalidRequests; } @@ -989,7 +1014,9 @@ export default class RequestTracker { requestId != null ? this.graph.getInvalidations(requestId) : []; let {requestNodeId, deferred} = this.startRequest({ id: request.id, - type: request.type, + type: 'request', + requestType: request.type, + invalidateReason: INITIAL_BUILD, }); let {api, subRequestContentKeys} = this.createAPI( @@ -1093,15 +1120,15 @@ export default class RequestTracker { continue; } - let resultCacheKey = node.value.resultCacheKey; - if (resultCacheKey != null && node.value.result != null) { + let resultCacheKey = node.resultCacheKey; + if (resultCacheKey != null && node.result != null) { promises.push( this.options.cache.setLargeBlob( resultCacheKey, - serialize(node.value.result), + serialize(node.result), ), ); - delete node.value.result; + delete node.result; } } diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index 626402cbe0e..a3852fda6ba 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -226,14 +226,14 @@ describe('cache', function () { // TODO: not sure how to invalidate the ESM cache in node... // let mjs = (config) => `export default ${JSON.stringify(config)}`; let configs = [ - {name: '.babelrc', formatter: json, nesting: true}, - {name: '.babelrc.json', formatter: json, nesting: true}, - {name: '.babelrc.js', formatter: cjs, nesting: true}, + // {name: '.babelrc', formatter: json, nesting: true}, + // {name: '.babelrc.json', formatter: json, nesting: true}, + // {name: '.babelrc.js', formatter: cjs, nesting: true}, {name: '.babelrc.cjs', formatter: cjs, nesting: true}, - // {name: '.babelrc.mjs', formatter: mjs, nesting: true}, - {name: 'babel.config.json', formatter: json, nesting: false}, - {name: 'babel.config.js', formatter: cjs, nesting: false}, - {name: 'babel.config.cjs', formatter: cjs, nesting: false}, + // // {name: '.babelrc.mjs', formatter: mjs, nesting: true}, + // {name: 'babel.config.json', formatter: json, nesting: false}, + // {name: 'babel.config.js', formatter: cjs, nesting: false}, + // {name: 'babel.config.cjs', formatter: cjs, nesting: false}, // {name: 'babel.config.mjs', formatter: mjs, nesting: false}, ]; @@ -295,7 +295,8 @@ describe('cache', function () { ); }); - it(`should support updating a ${name}`, async function () { + it.only(`should support updating a ${name}`, async function () { + console.log('🎀 ~ inputDir:', inputDir); let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -320,6 +321,8 @@ describe('cache', function () { b.bundleGraph.getBundles()[0].filePath, 'utf8', ); + //console.log('🎀 ~ contents:', contents); + assert( contents.includes('class Test'), 'class should not be transpiled', @@ -340,6 +343,8 @@ describe('cache', function () { b.bundleGraph.getBundles()[0].filePath, 'utf8', ); + //console.log('🎀 ~ contents:', contents); + // fails here because contents still include class Test assert( !contents.includes('class Test'), 'class should be transpiled', From 6392e287769aac7fff689cc337ac8ffeb6175db7 Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Thu, 2 Nov 2023 15:48:17 -0700 Subject: [PATCH 03/17] debugging wip --- packages/core/core/src/RequestTracker.js | 6 +++++- packages/core/core/src/Transformation.js | 4 +++- packages/core/core/src/assetUtils.js | 8 ++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index b39537fb738..de279b07e7a 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -630,8 +630,12 @@ export class RequestGraph extends ContentGraph< .map(nodeId => { let node = nullthrows(this.getNode(nodeId)); switch (node.type) { - case 'file': + case 'file': { + if (node.id === '.babelrc.cjs') { + console.log(nodeId); + } return {type: 'file', filePath: node.id}; + } case 'env': return {type: 'env', key: node.id.slice(node.id.indexOf(':') + 1)}; case 'option': diff --git a/packages/core/core/src/Transformation.js b/packages/core/core/src/Transformation.js index 316d0deac26..b70f62a24bd 100644 --- a/packages/core/core/src/Transformation.js +++ b/packages/core/core/src/Transformation.js @@ -734,7 +734,9 @@ export default class Transformation { for (let devDep of config.devDeps) { await this.addDevDependency(devDep); } - + console.log( + config.invalidateOnFileCreate.filter(a => a.fileName === '.babelrc.cjs'), + ); return config; } diff --git a/packages/core/core/src/assetUtils.js b/packages/core/core/src/assetUtils.js index 5aab67b05cc..af30f4e4ee8 100644 --- a/packages/core/core/src/assetUtils.js +++ b/packages/core/core/src/assetUtils.js @@ -227,8 +227,16 @@ export async function getInvalidationHash( for (let invalidation of sortedInvalidations) { switch (invalidation.type) { case 'file': { + // if (!invalidation.filePath.includes('/Users/gkong/parcel/')) { + // console.log('file', invalidation.filePath); + // } + // Only recompute the hash of this file if we haven't seen it already during this build. let fileHash = hashCache.get(invalidation.filePath); + if (invalidation.filePath.includes('babelrc')) { + console.log('🎀 ~ fileHash:', fileHash); + } + if (fileHash == null) { fileHash = hashFile( options.inputFS, From f00cbebd23dafb4fc34530c01dcd57fce591fbf1 Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Thu, 2 Nov 2023 20:07:07 -0700 Subject: [PATCH 04/17] graphviz fixes --- packages/core/core/src/RequestTracker.js | 16 +++++++++++++++- packages/core/core/src/dumpGraphToGraphViz.js | 4 ++-- packages/core/integration-tests/test/cache.js | 1 - 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index 783085b253f..fa4108992da 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -629,8 +629,14 @@ export class RequestGraph extends ContentGraph< let node = nullthrows(this.getNode(nodeId)); switch (node.type) { case 'file': { + //console.log('!!!invalidated', node.id); if (node.id === '.babelrc.cjs') { - console.log(nodeId); + console.log( + 'babelrc invalidated. babelrc:', + nodeId, + 'requestNodeId:', + requestNodeId, + ); } return {type: 'file', filePath: toProjectPathUnsafe(node.id)}; } @@ -763,11 +769,19 @@ export class RequestGraph extends ContentGraph< // if it was a create event, but the file already exists in the graph, // then also invalidate nodes connected by invalidated_by_update edges. if (hasFileRequest && (type === 'create' || type === 'update')) { + console.log({filePath}); let nodeId = this.getNodeIdByContentKey(filePath); let nodes = this.getNodeIdsConnectedTo( nodeId, requestGraphEdgeTypes.invalidated_by_update, ); + if (filePath === '.babelrc.cjs') { + console.log( + '🎀 ~ invByUpdate parent node:', + {nodes}, + nodes.map(n => this.getNode(n)), + ); + } for (let connectedNode of nodes) { didInvalidate = true; diff --git a/packages/core/core/src/dumpGraphToGraphViz.js b/packages/core/core/src/dumpGraphToGraphViz.js index f07983cf9dd..907831426dd 100644 --- a/packages/core/core/src/dumpGraphToGraphViz.js +++ b/packages/core/core/src/dumpGraphToGraphViz.js @@ -164,7 +164,7 @@ export default async function dumpGraphToGraphViz( } else if (node.type === 'asset_group') { if (node.deferred) label += '(deferred)'; } else if (node.type === 'file') { - label += path.basename(node.value.filePath); + label += path.basename(node.id); } else if (node.type === 'transformer_request') { label += path.basename(node.value.filePath) + @@ -178,7 +178,7 @@ export default async function dumpGraphToGraphViz( if (parts.length) label += ' (' + parts.join(', ') + ')'; if (node.value.env) label += ` (${getEnvDescription(node.value.env)})`; } else if (node.type === 'request') { - label = node.value.type + ':' + node.id; + label = node.requestType + ':' + node.id; } } n.set('label', label); diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index a3852fda6ba..64d72783512 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -296,7 +296,6 @@ describe('cache', function () { }); it.only(`should support updating a ${name}`, async function () { - console.log('🎀 ~ inputDir:', inputDir); let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, From 6af2c0da0907cf09e6d1320bad0bbbd807f35710 Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Fri, 3 Nov 2023 15:16:57 -0700 Subject: [PATCH 05/17] wip --- packages/core/core/src/RequestTracker.js | 33 +++++++++++++++++-- .../core/src/requests/AssetGraphRequest.js | 4 +++ .../core/core/src/requests/AssetRequest.js | 5 ++- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index fa4108992da..f6d0f9a7502 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -329,6 +329,9 @@ export class RequestGraph extends ContentGraph< } invalidateNode(nodeId: NodeId, reason: InvalidateReason) { + // if (nodeId === 626) { + // console.trace('invalidating node 626'); + // } let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'request'); node.invalidateReason |= reason; @@ -615,6 +618,7 @@ export class RequestGraph extends ContentGraph< } getInvalidations(requestNodeId: NodeId): Array { + //console.log('running getInvlidations for node', requestNodeId); if (!this.hasNode(requestNodeId)) { return []; } @@ -629,12 +633,17 @@ export class RequestGraph extends ContentGraph< let node = nullthrows(this.getNode(nodeId)); switch (node.type) { case 'file': { - //console.log('!!!invalidated', node.id); + // console.log( + // '!!!invalidated', + // node.id, + // 'requestnode', + // requestNodeId, + // ); if (node.id === '.babelrc.cjs') { console.log( 'babelrc invalidated. babelrc:', nodeId, - 'requestNodeId:', + 'invalidated by requestNodeId:', requestNodeId, ); } @@ -777,7 +786,7 @@ export class RequestGraph extends ContentGraph< ); if (filePath === '.babelrc.cjs') { console.log( - '🎀 ~ invByUpdate parent node:', + '🎀 ~in respondtoFSEvnts .babelrc.cjs invByUpdate parent node:', {nodes}, nodes.map(n => this.getNode(n)), ); @@ -785,6 +794,9 @@ export class RequestGraph extends ContentGraph< for (let connectedNode of nodes) { didInvalidate = true; + // if (connectedNode === 626) { + // console.log('herehere!!!', filePath); + // } this.invalidateNode(connectedNode, FILE_UPDATE); } @@ -920,6 +932,17 @@ export default class RequestTracker { } hasValidResult(nodeId: NodeId): boolean { + if (nodeId === 626) { + console.log('this.graph.hasNode(nodeId)?', this.graph.hasNode(nodeId)); + console.log( + '!this.graph.invalidNodeIds.has(nodeId)?', + !this.graph.invalidNodeIds.has(nodeId), + ); + console.log( + '!this.graph.incompleteNodeIds.has(nodeId)?', + !this.graph.incompleteNodeIds.has(nodeId), + ); + } return ( this.graph.hasNode(nodeId) && !this.graph.invalidNodeIds.has(nodeId) && @@ -1008,6 +1031,10 @@ export default class RequestTracker { ? this.graph.getNodeIdByContentKey(request.id) : undefined; let hasValidResult = requestId != null && this.hasValidResult(requestId); + if (requestId === 626) { + console.log('hihihi at 626. hasValidResult?', hasValidResult); + debugger; + } if (!opts?.force && hasValidResult) { // $FlowFixMe[incompatible-type] diff --git a/packages/core/core/src/requests/AssetGraphRequest.js b/packages/core/core/src/requests/AssetGraphRequest.js index 0895418ac59..38f78d7e88a 100644 --- a/packages/core/core/src/requests/AssetGraphRequest.js +++ b/packages/core/core/src/requests/AssetGraphRequest.js @@ -475,6 +475,10 @@ export class AssetGraphBuilder { optionsRef: this.optionsRef, isSingleChangeRebuild: this.isSingleChangeRebuild, }); + + if (request.id.includes('dev_dep_request:./.babelrc.cjs')) { + console.log('!!!!!!!!assetgroup', input); + } let assets = await this.api.runRequest>( request, {force: true}, diff --git a/packages/core/core/src/requests/AssetRequest.js b/packages/core/core/src/requests/AssetRequest.js index 77880e0820c..57ffb608597 100644 --- a/packages/core/core/src/requests/AssetRequest.js +++ b/packages/core/core/src/requests/AssetRequest.js @@ -171,7 +171,10 @@ async function run({input, api, farm, invalidateReason, options}) { } for (let devDepRequest of devDepRequests) { - await runDevDepRequest(api, devDepRequest); + // if (devDepRequest.specifier === './.babelrc.cjs') { + // console.trace('hihihihihihihihihi', {devDepRequest}); + // } + await runDevDepRequest(api, devDepRequest); //here } for (let configRequest of configRequests) { From df947ed1589ff2312d1c2fc1ab1a9d6788d661dc Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Fri, 3 Nov 2023 15:16:57 -0700 Subject: [PATCH 06/17] wip --- packages/core/core/src/RequestTracker.js | 42 +++++++++++++++---- packages/core/core/src/Transformation.js | 6 +-- packages/core/core/src/assetUtils.js | 6 +-- .../core/core/src/requests/AssetRequest.js | 12 ++++-- .../core/core/src/requests/DevDepRequest.js | 3 ++ 5 files changed, 50 insertions(+), 19 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index f6d0f9a7502..c94176866f5 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -287,6 +287,12 @@ export class RequestGraph extends ContentGraph< } removeNode(nodeId: NodeId): void { + if (nodeId === 626) { + ('626 DELETED IN REMOVENODE!!!!!!'); + } + if (nodeId === 1340) { + ('1340 DELETED IN REMOVENODE!!!!!!'); + } this.invalidNodeIds.delete(nodeId); this.incompleteNodeIds.delete(nodeId); this.incompleteNodePromises.delete(nodeId); @@ -329,12 +335,15 @@ export class RequestGraph extends ContentGraph< } invalidateNode(nodeId: NodeId, reason: InvalidateReason) { - // if (nodeId === 626) { - // console.trace('invalidating node 626'); - // } + if (nodeId === 626) { + console.trace('in invalidateNode.invalidating node 626'); + } let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'request'); node.invalidateReason |= reason; + if (nodeId === 626) { + console.log('in invalidateNode.*********adding 626 to invalidnodeids'); + } this.invalidNodeIds.add(nodeId); let parentNodes = this.getNodeIdsConnectedTo( @@ -786,7 +795,7 @@ export class RequestGraph extends ContentGraph< ); if (filePath === '.babelrc.cjs') { console.log( - '🎀 ~in respondtoFSEvnts .babelrc.cjs invByUpdate parent node:', + '🎀 in respondTOFSEvnts. invByUpdate parent node:', {nodes}, nodes.map(n => this.getNode(n)), ); @@ -914,6 +923,12 @@ export default class RequestTracker { } this.graph.incompleteNodeIds.add(requestNodeId); + if (requestNodeId === 626) { + ('626 DELETED IN startrequest!!!!!!'); + } + if (requestNodeId === 1340) { + ('1340 DELETED IN startrequest!!!!!!'); + } this.graph.invalidNodeIds.delete(requestNodeId); let {promise, deferred} = makeDeferredWithPromise(); @@ -933,12 +948,11 @@ export default class RequestTracker { hasValidResult(nodeId: NodeId): boolean { if (nodeId === 626) { - console.log('this.graph.hasNode(nodeId)?', this.graph.hasNode(nodeId)); console.log( + 'this.graph.hasNode(nodeId)?', + this.graph.hasNode(nodeId), '!this.graph.invalidNodeIds.has(nodeId)?', !this.graph.invalidNodeIds.has(nodeId), - ); - console.log( '!this.graph.incompleteNodeIds.has(nodeId)?', !this.graph.incompleteNodeIds.has(nodeId), ); @@ -977,6 +991,12 @@ export default class RequestTracker { } completeRequest(nodeId: NodeId) { + if (nodeId === 626) { + ('626 DELETED IN completerequest!!!!!!'); + } + if (nodeId === 1340) { + ('1340 DELETED IN completerequest!!!!!!'); + } this.graph.invalidNodeIds.delete(nodeId); this.graph.incompleteNodeIds.delete(nodeId); this.graph.incompleteNodePromises.delete(nodeId); @@ -1031,9 +1051,13 @@ export default class RequestTracker { ? this.graph.getNodeIdByContentKey(request.id) : undefined; let hasValidResult = requestId != null && this.hasValidResult(requestId); + if (requestId === 626) { - console.log('hihihi at 626. hasValidResult?', hasValidResult); - debugger; + console.log(requestId, {hasValidResult}); + } + + if (request.id.includes('babelrc')) { + console.log(request.id, {hasValidResult}); } if (!opts?.force && hasValidResult) { diff --git a/packages/core/core/src/Transformation.js b/packages/core/core/src/Transformation.js index b70f62a24bd..078be8aa649 100644 --- a/packages/core/core/src/Transformation.js +++ b/packages/core/core/src/Transformation.js @@ -734,9 +734,9 @@ export default class Transformation { for (let devDep of config.devDeps) { await this.addDevDependency(devDep); } - console.log( - config.invalidateOnFileCreate.filter(a => a.fileName === '.babelrc.cjs'), - ); + // console.log( + // config.invalidateOnFileCreate.filter(a => a.fileName === '.babelrc.cjs'), + // ); return config; } diff --git a/packages/core/core/src/assetUtils.js b/packages/core/core/src/assetUtils.js index af30f4e4ee8..bb9647a786b 100644 --- a/packages/core/core/src/assetUtils.js +++ b/packages/core/core/src/assetUtils.js @@ -233,9 +233,9 @@ export async function getInvalidationHash( // Only recompute the hash of this file if we haven't seen it already during this build. let fileHash = hashCache.get(invalidation.filePath); - if (invalidation.filePath.includes('babelrc')) { - console.log('🎀 ~ fileHash:', fileHash); - } + // if (invalidation.filePath.includes('babelrc')) { + // console.log('🎀 ~ fileHash:', fileHash); + // } if (fileHash == null) { fileHash = hashFile( diff --git a/packages/core/core/src/requests/AssetRequest.js b/packages/core/core/src/requests/AssetRequest.js index 57ffb608597..099fc6454cc 100644 --- a/packages/core/core/src/requests/AssetRequest.js +++ b/packages/core/core/src/requests/AssetRequest.js @@ -171,10 +171,14 @@ async function run({input, api, farm, invalidateReason, options}) { } for (let devDepRequest of devDepRequests) { - // if (devDepRequest.specifier === './.babelrc.cjs') { - // console.trace('hihihihihihihihihi', {devDepRequest}); - // } - await runDevDepRequest(api, devDepRequest); //here + if (devDepRequest.specifier.includes('babelrc.cjs')) { + console.log( + '!!!!!!!!!iterating devdepreqs of', + input.filePath, + devDepRequest.specifier + ':' + devDepRequest.hash, + ); + } + await runDevDepRequest(api, devDepRequest); } for (let configRequest of configRequests) { diff --git a/packages/core/core/src/requests/DevDepRequest.js b/packages/core/core/src/requests/DevDepRequest.js index d6caf7cb4d1..09101e569e5 100644 --- a/packages/core/core/src/requests/DevDepRequest.js +++ b/packages/core/core/src/requests/DevDepRequest.js @@ -181,6 +181,9 @@ export async function runDevDepRequest( api: RunAPI, devDepRequest: DevDepRequest, ) { + if (devDepRequest.hash === '93be19cfb0ff8fd7') { + console.log('running devDepReq', devDepRequest.hash); + } await api.runRequest({ id: 'dev_dep_request:' + devDepRequest.specifier + ':' + devDepRequest.hash, type: 'dev_dep_request', From 48eb25fea834636a2e34f7d33a4fdfb65d54480f Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Fri, 3 Nov 2023 15:16:57 -0700 Subject: [PATCH 07/17] wip --- packages/core/core/src/RequestTracker.js | 4 +++- packages/core/core/src/assetUtils.js | 7 +++---- packages/core/core/src/requests/AssetRequest.js | 3 +++ packages/core/core/src/requests/DevDepRequest.js | 7 +++++++ packages/core/package-manager/src/NodePackageManager.js | 6 ++++++ 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index c94176866f5..c569540efd9 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -1096,7 +1096,9 @@ export default class RequestTracker { try { let node = this.graph.getRequestNode(requestNodeId); - + if (request.id === '9627b0e91fc9a842') { + debugger; + } let result = await request.run({ input: request.input, api, diff --git a/packages/core/core/src/assetUtils.js b/packages/core/core/src/assetUtils.js index bb9647a786b..50dc3da0bb6 100644 --- a/packages/core/core/src/assetUtils.js +++ b/packages/core/core/src/assetUtils.js @@ -233,10 +233,9 @@ export async function getInvalidationHash( // Only recompute the hash of this file if we haven't seen it already during this build. let fileHash = hashCache.get(invalidation.filePath); - // if (invalidation.filePath.includes('babelrc')) { - // console.log('🎀 ~ fileHash:', fileHash); - // } - + if (invalidation.filePath.includes('babelrc.cjs')) { + debugger; + } if (fileHash == null) { fileHash = hashFile( options.inputFS, diff --git a/packages/core/core/src/requests/AssetRequest.js b/packages/core/core/src/requests/AssetRequest.js index 099fc6454cc..8167f4e856a 100644 --- a/packages/core/core/src/requests/AssetRequest.js +++ b/packages/core/core/src/requests/AssetRequest.js @@ -125,6 +125,9 @@ async function run({input, api, farm, invalidateReason, options}) { }), ), }; + if (request.invalidDevDeps.filter(d => d.specifier.includes('babelrc'))) { + debugger; + } let { assets, diff --git a/packages/core/core/src/requests/DevDepRequest.js b/packages/core/core/src/requests/DevDepRequest.js index 09101e569e5..78aab39a556 100644 --- a/packages/core/core/src/requests/DevDepRequest.js +++ b/packages/core/core/src/requests/DevDepRequest.js @@ -75,6 +75,10 @@ export async function createDevDependency( options, ); + if (hash === '93be19cfb0ff8fd7') { + debugger; + } + let devDepRequest: DevDepRequest = { specifier, resolveFrom, @@ -225,6 +229,9 @@ export function getWorkerDevDepRequests( // If we've already sent a matching transformer + hash to the main thread during this build, // there's no need to repeat ourselves. let {specifier, resolveFrom, hash} = devDepRequest; + if (specifier.includes('babelrc.cjs')) { + debugger; + } if (hash === pluginCache.get(specifier)) { return {specifier, resolveFrom, hash}; } else { diff --git a/packages/core/package-manager/src/NodePackageManager.js b/packages/core/package-manager/src/NodePackageManager.js index dc1d091f871..d139b8489d0 100644 --- a/packages/core/package-manager/src/NodePackageManager.js +++ b/packages/core/package-manager/src/NodePackageManager.js @@ -505,6 +505,9 @@ export class NodePackageManager implements PackageManager { let seen = new Set(); let invalidate = (name, from) => { + if (name.includes('babelrc')) { + debugger; + } let basedir = path.dirname(from); let key = basedir + ':' + name; if (seen.has(key)) { @@ -534,6 +537,9 @@ export class NodePackageManager implements PackageManager { } children.delete(resolved.resolved); + if (key.includes('babelrc.cjs')) { + console.log('deleting KEY!!!!!!!!!!!!!!!!!!!', key); + } cache.delete(key); }; From 645cb9186ae8703119862e7fca862e2f5812c76e Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Mon, 13 Nov 2023 16:08:34 -0800 Subject: [PATCH 08/17] fixed devDepRequest invalidation + wip --- packages/core/core/src/RequestTracker.js | 15 ++------------- packages/core/core/src/UncommittedAsset.js | 2 ++ .../core/core/src/requests/AssetGraphRequest.js | 5 +++-- packages/core/core/src/requests/AssetRequest.js | 2 +- packages/core/core/src/requests/DevDepRequest.js | 2 +- packages/core/integration-tests/test/cache.js | 4 ++-- 6 files changed, 11 insertions(+), 19 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index c569540efd9..84d070d21be 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -204,6 +204,7 @@ const nodeFromFileName = (fileName: string): RequestGraphNode => ({ const nodeFromRequest = (request: RequestNode): RequestGraphNode => ({ id: request.id, type: 'request', + requestType: request.requestType, //value: request, invalidateReason: INITIAL_BUILD, }); @@ -287,12 +288,6 @@ export class RequestGraph extends ContentGraph< } removeNode(nodeId: NodeId): void { - if (nodeId === 626) { - ('626 DELETED IN REMOVENODE!!!!!!'); - } - if (nodeId === 1340) { - ('1340 DELETED IN REMOVENODE!!!!!!'); - } this.invalidNodeIds.delete(nodeId); this.incompleteNodeIds.delete(nodeId); this.incompleteNodePromises.delete(nodeId); @@ -564,6 +559,7 @@ export class RequestGraph extends ContentGraph< ) { let envNode = nodeFromEnv(env, value); let envNodeId = this.addNode(envNode); + console.log({envNode}); if ( !this.hasEdge( @@ -787,7 +783,6 @@ export class RequestGraph extends ContentGraph< // if it was a create event, but the file already exists in the graph, // then also invalidate nodes connected by invalidated_by_update edges. if (hasFileRequest && (type === 'create' || type === 'update')) { - console.log({filePath}); let nodeId = this.getNodeIdByContentKey(filePath); let nodes = this.getNodeIdsConnectedTo( nodeId, @@ -923,12 +918,6 @@ export default class RequestTracker { } this.graph.incompleteNodeIds.add(requestNodeId); - if (requestNodeId === 626) { - ('626 DELETED IN startrequest!!!!!!'); - } - if (requestNodeId === 1340) { - ('1340 DELETED IN startrequest!!!!!!'); - } this.graph.invalidNodeIds.delete(requestNodeId); let {promise, deferred} = makeDeferredWithPromise(); diff --git a/packages/core/core/src/UncommittedAsset.js b/packages/core/core/src/UncommittedAsset.js index 48e0a1e33fc..044840b4c59 100644 --- a/packages/core/core/src/UncommittedAsset.js +++ b/packages/core/core/src/UncommittedAsset.js @@ -357,6 +357,8 @@ export default class UncommittedAsset { key, }; + console.log('invalidateOnEnvChange in uncommittedasset'); + this.invalidations.set(getInvalidationId(invalidation), invalidation); } diff --git a/packages/core/core/src/requests/AssetGraphRequest.js b/packages/core/core/src/requests/AssetGraphRequest.js index 38f78d7e88a..707dc4e83e2 100644 --- a/packages/core/core/src/requests/AssetGraphRequest.js +++ b/packages/core/core/src/requests/AssetGraphRequest.js @@ -161,8 +161,9 @@ export class AssetGraphBuilder { ); this.isSingleChangeRebuild = - api.getInvalidSubRequests().filter(req => req.type === 'asset_request') - .length === 1; + api + .getInvalidSubRequests() + .filter(req => req.requestType === 'asset_request').length === 1; this.queue = new PromiseQueue(); assetGraph.onNodeRemoved = nodeId => { diff --git a/packages/core/core/src/requests/AssetRequest.js b/packages/core/core/src/requests/AssetRequest.js index 8167f4e856a..68720e29486 100644 --- a/packages/core/core/src/requests/AssetRequest.js +++ b/packages/core/core/src/requests/AssetRequest.js @@ -81,7 +81,7 @@ async function run({input, api, farm, invalidateReason, options}) { await Promise.all( api .getSubRequests() - .filter(req => req.type === 'dev_dep_request') + .filter(req => req.requestType === 'dev_dep_request') .map(async req => [ req.id, nullthrows(await api.getRequestResult(req.id)), diff --git a/packages/core/core/src/requests/DevDepRequest.js b/packages/core/core/src/requests/DevDepRequest.js index 78aab39a556..9780bea7a7a 100644 --- a/packages/core/core/src/requests/DevDepRequest.js +++ b/packages/core/core/src/requests/DevDepRequest.js @@ -112,7 +112,7 @@ export async function getDevDepRequests( await Promise.all( api .getSubRequests() - .filter(req => req.type === 'dev_dep_request') + .filter(req => req.requestType === 'dev_dep_request') .map(async req => [ req.id, nullthrows(await api.getRequestResult(req.id)), diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index 64d72783512..2f6a148ad9b 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -295,7 +295,7 @@ describe('cache', function () { ); }); - it.only(`should support updating a ${name}`, async function () { + it(`should support updating a ${name}`, async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -1216,7 +1216,7 @@ describe('cache', function () { assert.equal(await run(b.bundleGraph), 'updated'); }); - it('should not invalidate when a set environment variable does not change', async () => { + it.only('should not invalidate when a set environment variable does not change', async () => { let b = await testCache({ async setup() { await overlayFS.writeFile(path.join(inputDir, '.env'), 'TEST=hi'); From 7aed81f79a68ae6a1bd27217a0aed20244f9fd9a Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Mon, 13 Nov 2023 18:22:26 -0800 Subject: [PATCH 09/17] fix env node invalidations --- packages/core/core/src/RequestTracker.js | 7 ++----- packages/core/integration-tests/test/cache.js | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index 84d070d21be..b69369efdc5 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -370,7 +370,7 @@ export class RequestGraph extends ContentGraph< for (let nodeId of this.envNodeIds) { let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'env'); - if (env[node.id.slice(node.id.indexOf(':'))] !== node.value) { + if (env[node.id.slice(node.id.indexOf(':') + 1)] !== node.value) { let parentNodes = this.getNodeIdsConnectedTo( nodeId, requestGraphEdgeTypes.invalidated_by_update, @@ -387,7 +387,7 @@ export class RequestGraph extends ContentGraph< let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'option'); if ( - hashFromOption(options[node.id.slice(node.id.indexOf(':'))]) !== + hashFromOption(options[node.id.slice(node.id.indexOf(':') + 1)]) !== node.hash ) { let parentNodes = this.getNodeIdsConnectedTo( @@ -798,9 +798,6 @@ export class RequestGraph extends ContentGraph< for (let connectedNode of nodes) { didInvalidate = true; - // if (connectedNode === 626) { - // console.log('herehere!!!', filePath); - // } this.invalidateNode(connectedNode, FILE_UPDATE); } diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index 2f6a148ad9b..afa0bf614a5 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -1216,7 +1216,7 @@ describe('cache', function () { assert.equal(await run(b.bundleGraph), 'updated'); }); - it.only('should not invalidate when a set environment variable does not change', async () => { + it('should not invalidate when a set environment variable does not change', async () => { let b = await testCache({ async setup() { await overlayFS.writeFile(path.join(inputDir, '.env'), 'TEST=hi'); From 5360bd6d0d1f4ea0ae4f60c3a30a18562ce71399 Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Mon, 13 Nov 2023 18:30:36 -0800 Subject: [PATCH 10/17] remove debugging --- packages/core/core/src/RequestTracker.js | 50 +------------------ packages/core/core/src/Transformation.js | 4 +- packages/core/core/src/UncommittedAsset.js | 2 - packages/core/core/src/assetUtils.js | 7 --- .../core/src/requests/AssetGraphRequest.js | 3 -- .../core/core/src/requests/AssetRequest.js | 10 ---- .../core/core/src/requests/DevDepRequest.js | 10 ---- packages/core/integration-tests/test/cache.js | 18 +++---- .../package-manager/src/NodePackageManager.js | 6 --- 9 files changed, 10 insertions(+), 100 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index b69369efdc5..980dd0ca7ae 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -330,15 +330,9 @@ export class RequestGraph extends ContentGraph< } invalidateNode(nodeId: NodeId, reason: InvalidateReason) { - if (nodeId === 626) { - console.trace('in invalidateNode.invalidating node 626'); - } let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'request'); node.invalidateReason |= reason; - if (nodeId === 626) { - console.log('in invalidateNode.*********adding 626 to invalidnodeids'); - } this.invalidNodeIds.add(nodeId); let parentNodes = this.getNodeIdsConnectedTo( @@ -559,7 +553,6 @@ export class RequestGraph extends ContentGraph< ) { let envNode = nodeFromEnv(env, value); let envNodeId = this.addNode(envNode); - console.log({envNode}); if ( !this.hasEdge( @@ -623,7 +616,6 @@ export class RequestGraph extends ContentGraph< } getInvalidations(requestNodeId: NodeId): Array { - //console.log('running getInvlidations for node', requestNodeId); if (!this.hasNode(requestNodeId)) { return []; } @@ -638,24 +630,11 @@ export class RequestGraph extends ContentGraph< let node = nullthrows(this.getNode(nodeId)); switch (node.type) { case 'file': { - // console.log( - // '!!!invalidated', - // node.id, - // 'requestnode', - // requestNodeId, - // ); - if (node.id === '.babelrc.cjs') { - console.log( - 'babelrc invalidated. babelrc:', - nodeId, - 'invalidated by requestNodeId:', - requestNodeId, - ); - } return {type: 'file', filePath: toProjectPathUnsafe(node.id)}; } - case 'env': + case 'env': { return {type: 'env', key: node.id.slice(node.id.indexOf(':') + 1)}; + } case 'option': return { type: 'option', @@ -788,13 +767,6 @@ export class RequestGraph extends ContentGraph< nodeId, requestGraphEdgeTypes.invalidated_by_update, ); - if (filePath === '.babelrc.cjs') { - console.log( - '🎀 in respondTOFSEvnts. invByUpdate parent node:', - {nodes}, - nodes.map(n => this.getNode(n)), - ); - } for (let connectedNode of nodes) { didInvalidate = true; @@ -933,16 +905,6 @@ export default class RequestTracker { } hasValidResult(nodeId: NodeId): boolean { - if (nodeId === 626) { - console.log( - 'this.graph.hasNode(nodeId)?', - this.graph.hasNode(nodeId), - '!this.graph.invalidNodeIds.has(nodeId)?', - !this.graph.invalidNodeIds.has(nodeId), - '!this.graph.incompleteNodeIds.has(nodeId)?', - !this.graph.incompleteNodeIds.has(nodeId), - ); - } return ( this.graph.hasNode(nodeId) && !this.graph.invalidNodeIds.has(nodeId) && @@ -1038,14 +1000,6 @@ export default class RequestTracker { : undefined; let hasValidResult = requestId != null && this.hasValidResult(requestId); - if (requestId === 626) { - console.log(requestId, {hasValidResult}); - } - - if (request.id.includes('babelrc')) { - console.log(request.id, {hasValidResult}); - } - if (!opts?.force && hasValidResult) { // $FlowFixMe[incompatible-type] return this.getRequestResult(request.id); diff --git a/packages/core/core/src/Transformation.js b/packages/core/core/src/Transformation.js index 078be8aa649..316d0deac26 100644 --- a/packages/core/core/src/Transformation.js +++ b/packages/core/core/src/Transformation.js @@ -734,9 +734,7 @@ export default class Transformation { for (let devDep of config.devDeps) { await this.addDevDependency(devDep); } - // console.log( - // config.invalidateOnFileCreate.filter(a => a.fileName === '.babelrc.cjs'), - // ); + return config; } diff --git a/packages/core/core/src/UncommittedAsset.js b/packages/core/core/src/UncommittedAsset.js index 044840b4c59..48e0a1e33fc 100644 --- a/packages/core/core/src/UncommittedAsset.js +++ b/packages/core/core/src/UncommittedAsset.js @@ -357,8 +357,6 @@ export default class UncommittedAsset { key, }; - console.log('invalidateOnEnvChange in uncommittedasset'); - this.invalidations.set(getInvalidationId(invalidation), invalidation); } diff --git a/packages/core/core/src/assetUtils.js b/packages/core/core/src/assetUtils.js index 50dc3da0bb6..5aab67b05cc 100644 --- a/packages/core/core/src/assetUtils.js +++ b/packages/core/core/src/assetUtils.js @@ -227,15 +227,8 @@ export async function getInvalidationHash( for (let invalidation of sortedInvalidations) { switch (invalidation.type) { case 'file': { - // if (!invalidation.filePath.includes('/Users/gkong/parcel/')) { - // console.log('file', invalidation.filePath); - // } - // Only recompute the hash of this file if we haven't seen it already during this build. let fileHash = hashCache.get(invalidation.filePath); - if (invalidation.filePath.includes('babelrc.cjs')) { - debugger; - } if (fileHash == null) { fileHash = hashFile( options.inputFS, diff --git a/packages/core/core/src/requests/AssetGraphRequest.js b/packages/core/core/src/requests/AssetGraphRequest.js index b22b209a2be..0461f036349 100644 --- a/packages/core/core/src/requests/AssetGraphRequest.js +++ b/packages/core/core/src/requests/AssetGraphRequest.js @@ -484,9 +484,6 @@ export class AssetGraphBuilder { isSingleChangeRebuild: this.isSingleChangeRebuild, }); - if (request.id.includes('dev_dep_request:./.babelrc.cjs')) { - console.log('!!!!!!!!assetgroup', input); - } let assets = await this.api.runRequest>( request, {force: true}, diff --git a/packages/core/core/src/requests/AssetRequest.js b/packages/core/core/src/requests/AssetRequest.js index 68720e29486..6e0cce3f7e0 100644 --- a/packages/core/core/src/requests/AssetRequest.js +++ b/packages/core/core/src/requests/AssetRequest.js @@ -125,9 +125,6 @@ async function run({input, api, farm, invalidateReason, options}) { }), ), }; - if (request.invalidDevDeps.filter(d => d.specifier.includes('babelrc'))) { - debugger; - } let { assets, @@ -174,13 +171,6 @@ async function run({input, api, farm, invalidateReason, options}) { } for (let devDepRequest of devDepRequests) { - if (devDepRequest.specifier.includes('babelrc.cjs')) { - console.log( - '!!!!!!!!!iterating devdepreqs of', - input.filePath, - devDepRequest.specifier + ':' + devDepRequest.hash, - ); - } await runDevDepRequest(api, devDepRequest); } diff --git a/packages/core/core/src/requests/DevDepRequest.js b/packages/core/core/src/requests/DevDepRequest.js index 9780bea7a7a..fca3a03cec2 100644 --- a/packages/core/core/src/requests/DevDepRequest.js +++ b/packages/core/core/src/requests/DevDepRequest.js @@ -75,10 +75,6 @@ export async function createDevDependency( options, ); - if (hash === '93be19cfb0ff8fd7') { - debugger; - } - let devDepRequest: DevDepRequest = { specifier, resolveFrom, @@ -185,9 +181,6 @@ export async function runDevDepRequest( api: RunAPI, devDepRequest: DevDepRequest, ) { - if (devDepRequest.hash === '93be19cfb0ff8fd7') { - console.log('running devDepReq', devDepRequest.hash); - } await api.runRequest({ id: 'dev_dep_request:' + devDepRequest.specifier + ':' + devDepRequest.hash, type: 'dev_dep_request', @@ -229,9 +222,6 @@ export function getWorkerDevDepRequests( // If we've already sent a matching transformer + hash to the main thread during this build, // there's no need to repeat ourselves. let {specifier, resolveFrom, hash} = devDepRequest; - if (specifier.includes('babelrc.cjs')) { - debugger; - } if (hash === pluginCache.get(specifier)) { return {specifier, resolveFrom, hash}; } else { diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index 05cb46fa50a..3bf1a51457b 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -231,14 +231,14 @@ describe('cache', function () { // TODO: not sure how to invalidate the ESM cache in node... // let mjs = (config) => `export default ${JSON.stringify(config)}`; let configs = [ - // {name: '.babelrc', formatter: json, nesting: true}, - // {name: '.babelrc.json', formatter: json, nesting: true}, - // {name: '.babelrc.js', formatter: cjs, nesting: true}, + {name: '.babelrc', formatter: json, nesting: true}, + {name: '.babelrc.json', formatter: json, nesting: true}, + {name: '.babelrc.js', formatter: cjs, nesting: true}, {name: '.babelrc.cjs', formatter: cjs, nesting: true}, - // // {name: '.babelrc.mjs', formatter: mjs, nesting: true}, - // {name: 'babel.config.json', formatter: json, nesting: false}, - // {name: 'babel.config.js', formatter: cjs, nesting: false}, - // {name: 'babel.config.cjs', formatter: cjs, nesting: false}, + // {name: '.babelrc.mjs', formatter: mjs, nesting: true}, + {name: 'babel.config.json', formatter: json, nesting: false}, + {name: 'babel.config.js', formatter: cjs, nesting: false}, + {name: 'babel.config.cjs', formatter: cjs, nesting: false}, // {name: 'babel.config.mjs', formatter: mjs, nesting: false}, ]; @@ -325,8 +325,6 @@ describe('cache', function () { b.bundleGraph.getBundles()[0].filePath, 'utf8', ); - //console.log('🎀 ~ contents:', contents); - assert( contents.includes('class Test'), 'class should not be transpiled', @@ -347,8 +345,6 @@ describe('cache', function () { b.bundleGraph.getBundles()[0].filePath, 'utf8', ); - //console.log('🎀 ~ contents:', contents); - // fails here because contents still include class Test assert( !contents.includes('class Test'), 'class should be transpiled', diff --git a/packages/core/package-manager/src/NodePackageManager.js b/packages/core/package-manager/src/NodePackageManager.js index d139b8489d0..dc1d091f871 100644 --- a/packages/core/package-manager/src/NodePackageManager.js +++ b/packages/core/package-manager/src/NodePackageManager.js @@ -505,9 +505,6 @@ export class NodePackageManager implements PackageManager { let seen = new Set(); let invalidate = (name, from) => { - if (name.includes('babelrc')) { - debugger; - } let basedir = path.dirname(from); let key = basedir + ':' + name; if (seen.has(key)) { @@ -537,9 +534,6 @@ export class NodePackageManager implements PackageManager { } children.delete(resolved.resolved); - if (key.includes('babelrc.cjs')) { - console.log('deleting KEY!!!!!!!!!!!!!!!!!!!', key); - } cache.delete(key); }; From dfb7747bb83dd8e7d7991d99b5d34305bdf62ebf Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Tue, 14 Nov 2023 11:49:49 -0800 Subject: [PATCH 11/17] keyFromEnvOrOptionContentKey utility function --- packages/core/core/src/RequestTracker.js | 60 +++++++------------ .../core/src/requests/ParcelConfigRequest.js | 3 +- packages/core/core/src/utils.js | 5 ++ packages/dev/query/src/index.js | 20 +++---- 4 files changed, 38 insertions(+), 50 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index 980dd0ca7ae..28b2797e830 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -29,7 +29,11 @@ import { import {hashString} from '@parcel/rust'; import {ContentGraph} from '@parcel/graph'; import {deserialize, serialize} from './serializer'; -import {assertSignalNotAborted, hashFromOption} from './utils'; +import { + assertSignalNotAborted, + hashFromOption, + keyFromEnvOrOptionContentKey, +} from './utils'; import { type ProjectPath, fromProjectPathRelative, @@ -84,17 +88,18 @@ type SerializedRequestGraph = {| |}; type FileNode = {|id: ContentKey, +type: 'file'|}; + type GlobNode = {|id: ContentKey, +type: 'glob', value: InternalGlob|}; + type FileNameNode = {| id: ContentKey, +type: 'file_name', - //value: string, |}; + type EnvNode = {| id: ContentKey, +type: 'env', value: string | void, - //value: {|key: string, value: string | void|}, |}; type OptionNode = {| @@ -105,31 +110,23 @@ type OptionNode = {| type Request = {| id: string, - +type: string, + +type: RequestType, input: TInput, run: ({|input: TInput, ...StaticRunOpts|}) => Async, |}; -// type StoredRequest = {| -// id: string, -// +type: string, -// result?: mixed, -// resultCacheKey?: ?string, -// |}; - type InvalidateReason = number; -export type RequestNode = {| +type RequestNode = {| id: ContentKey, +type: 'request', - //value: StoredRequest, +requestType?: RequestType, invalidateReason: InvalidateReason, result?: mixed, resultCacheKey?: ?string, hash?: string, |}; -// TODO enumerate these -type RequestType = + +export type RequestType = | 'parcel_build_request' | 'bundle_graph_request' | 'asset_graph_request' @@ -143,7 +140,8 @@ type RequestType = | 'write_bundles_request' | 'package_request' | 'write_bundle_request' - | 'validation_request'; + | 'validation_request' + | string; type RequestGraphNode = | RequestNode @@ -205,7 +203,6 @@ const nodeFromRequest = (request: RequestNode): RequestGraphNode => ({ id: request.id, type: 'request', requestType: request.requestType, - //value: request, invalidateReason: INITIAL_BUILD, }); @@ -219,10 +216,6 @@ const nodeFromOption = (option: string, value: mixed): RequestGraphNode => ({ id: 'option:' + option, type: 'option', hash: hashFromOption(value), - // value: { - // key: option, - // hash: hashFromOption(value), - // }, }); export class RequestGraph extends ContentGraph< @@ -364,7 +357,7 @@ export class RequestGraph extends ContentGraph< for (let nodeId of this.envNodeIds) { let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'env'); - if (env[node.id.slice(node.id.indexOf(':') + 1)] !== node.value) { + if (env[keyFromEnvOrOptionContentKey(node.id)] !== node.value) { let parentNodes = this.getNodeIdsConnectedTo( nodeId, requestGraphEdgeTypes.invalidated_by_update, @@ -381,7 +374,7 @@ export class RequestGraph extends ContentGraph< let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'option'); if ( - hashFromOption(options[node.id.slice(node.id.indexOf(':') + 1)]) !== + hashFromOption(options[keyFromEnvOrOptionContentKey(node.id)]) !== node.hash ) { let parentNodes = this.getNodeIdsConnectedTo( @@ -629,16 +622,14 @@ export class RequestGraph extends ContentGraph< .map(nodeId => { let node = nullthrows(this.getNode(nodeId)); switch (node.type) { - case 'file': { + case 'file': return {type: 'file', filePath: toProjectPathUnsafe(node.id)}; - } - case 'env': { - return {type: 'env', key: node.id.slice(node.id.indexOf(':') + 1)}; - } + case 'env': + return {type: 'env', key: keyFromEnvOrOptionContentKey(node.id)}; case 'option': return { type: 'option', - key: node.id.slice(node.id.indexOf(':') + 1), + key: keyFromEnvOrOptionContentKey(node.id), }; } }) @@ -870,7 +861,7 @@ export default class RequestTracker { setSignal(signal?: AbortSignal) { this.signal = signal; } - // request used to be StoredRequest + startRequest(request: RequestNode): {| requestNodeId: NodeId, deferred: Deferred, @@ -939,12 +930,6 @@ export default class RequestTracker { } completeRequest(nodeId: NodeId) { - if (nodeId === 626) { - ('626 DELETED IN completerequest!!!!!!'); - } - if (nodeId === 1340) { - ('1340 DELETED IN completerequest!!!!!!'); - } this.graph.invalidNodeIds.delete(nodeId); this.graph.incompleteNodeIds.delete(nodeId); this.graph.incompleteNodePromises.delete(nodeId); @@ -1036,9 +1021,6 @@ export default class RequestTracker { try { let node = this.graph.getRequestNode(requestNodeId); - if (request.id === '9627b0e91fc9a842') { - debugger; - } let result = await request.run({ input: request.input, api, diff --git a/packages/core/core/src/requests/ParcelConfigRequest.js b/packages/core/core/src/requests/ParcelConfigRequest.js index 6f082e60d50..b1017904e01 100644 --- a/packages/core/core/src/requests/ParcelConfigRequest.js +++ b/packages/core/core/src/requests/ParcelConfigRequest.js @@ -37,6 +37,7 @@ import {optionsProxy} from '../utils'; import ParcelConfig from '../ParcelConfig'; import {createBuildCache} from '../buildCache'; import {toProjectPath} from '../projectPath'; +import type {RequestType} from '../RequestTracker'; type ConfigMap = {[K]: V, ...}; @@ -52,7 +53,7 @@ type RunOpts = {| export type ParcelConfigRequest = {| id: string, - type: string, + type: RequestType, input: null, run: (RunOpts) => Async, |}; diff --git a/packages/core/core/src/utils.js b/packages/core/core/src/utils.js index 19e161b1292..c17c66045fb 100644 --- a/packages/core/core/src/utils.js +++ b/packages/core/core/src/utils.js @@ -18,6 +18,7 @@ import type {PackageManager} from '@parcel/package-manager'; import invariant from 'assert'; import baseX from 'base-x'; import {Graph} from '@parcel/graph'; +import type {ContentKey} from '@parcel/graph'; import {hashObject} from '@parcel/utils'; import {registerSerializableClass} from './serializer'; @@ -235,3 +236,7 @@ export function toInternalSymbols( ]), ); } + +export function keyFromEnvOrOptionContentKey(contentKey: ContentKey): string { + return contentKey.slice(contentKey.indexOf(':') + 1); +} diff --git a/packages/dev/query/src/index.js b/packages/dev/query/src/index.js index 2875c909bce..5cb89d9f8f4 100644 --- a/packages/dev/query/src/index.js +++ b/packages/dev/query/src/index.js @@ -99,12 +99,12 @@ export async function loadGraphs(cacheDir: string): Promise<{| ); invariant( buildRequestNode.type === 'request' && - buildRequestNode.value.type === 'parcel_build_request', + buildRequestNode.requestType === 'parcel_build_request', ); let buildRequestSubRequests = getSubRequests(buildRequestId); let bundleGraphRequestNode = buildRequestSubRequests.find( - n => n.type === 'request' && n.value.type === 'bundle_graph_request', + n => n.type === 'request' && n.requestType === 'bundle_graph_request', ); if (bundleGraphRequestNode != null) { bundleGraph = BundleGraph.deserialize( @@ -119,7 +119,9 @@ export async function loadGraphs(cacheDir: string): Promise<{| let assetGraphRequest = getSubRequests( requestTracker.graph.getNodeIdByContentKey(bundleGraphRequestNode.id), - ).find(n => n.type === 'request' && n.value.type === 'asset_graph_request'); + ).find( + n => n.type === 'request' && n.requestType === 'asset_graph_request', + ); if (assetGraphRequest != null) { assetGraph = AssetGraph.deserialize( (await loadLargeBlobRequestRequest(cache, assetGraphRequest, cacheInfo)) @@ -129,12 +131,12 @@ export async function loadGraphs(cacheDir: string): Promise<{| } cacheInfo.get('RequestGraph')?.push(timeToDeserialize); let writeBundlesRequest = buildRequestSubRequests.find( - n => n.type === 'request' && n.value.type === 'write_bundles_request', + n => n.type === 'request' && n.requestType === 'write_bundles_request', ); if (writeBundlesRequest != null) { invariant(writeBundlesRequest.type === 'request'); // $FlowFixMe[incompatible-cast] - bundleInfo = (nullthrows(writeBundlesRequest.value.result): Map< + bundleInfo = (nullthrows(writeBundlesRequest.result): Map< ContentKey, PackagedBundleInfo, >); @@ -146,15 +148,13 @@ export async function loadGraphs(cacheDir: string): Promise<{| async function loadLargeBlobRequestRequest(cache, node, cacheInfo) { invariant(node.type === 'request'); - let cachedFile = await cache.getLargeBlob( - nullthrows(node.value.resultCacheKey), - ); - cacheInfo.get(node.value.type)?.push(cachedFile.byteLength); //Add size + let cachedFile = await cache.getLargeBlob(nullthrows(node.resultCacheKey)); + cacheInfo.get(node.type)?.push(cachedFile.byteLength); //Add size let TTD = Date.now(); let result = v8.deserialize(cachedFile); TTD = Date.now() - TTD; - cacheInfo.get(node.value.type)?.push(TTD); + cacheInfo.get(node.type)?.push(TTD); return result; } From d9cbb5fabae811213f2e481ae6eb7a4f41b14411 Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Tue, 14 Nov 2023 12:54:03 -0800 Subject: [PATCH 12/17] add flow suppressions --- packages/core/core/src/RequestTracker.js | 3 +-- .../core/core/test/RequestTracker.test.js | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index 28b2797e830..fde46830caf 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -140,8 +140,7 @@ export type RequestType = | 'write_bundles_request' | 'package_request' | 'write_bundle_request' - | 'validation_request' - | string; + | 'validation_request'; type RequestGraphNode = | RequestNode diff --git a/packages/core/core/test/RequestTracker.test.js b/packages/core/core/test/RequestTracker.test.js index 6810c2fdc92..3e6659e17dd 100644 --- a/packages/core/core/test/RequestTracker.test.js +++ b/packages/core/core/test/RequestTracker.test.js @@ -16,6 +16,7 @@ describe('RequestTracker', () => { let tracker = new RequestTracker({farm, options}); await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -23,6 +24,7 @@ describe('RequestTracker', () => { let called = false; await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => { called = true; @@ -36,6 +38,7 @@ describe('RequestTracker', () => { let tracker = new RequestTracker({farm, options}); await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -47,6 +50,7 @@ describe('RequestTracker', () => { let called = false; await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => { called = true; @@ -60,10 +64,12 @@ describe('RequestTracker', () => { let tracker = new RequestTracker({farm, options}); await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}) => { await api.runRequest({ id: 'xyz', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -88,6 +94,7 @@ describe('RequestTracker', () => { await tracker .runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async () => { await Promise.resolve(); @@ -110,10 +117,12 @@ describe('RequestTracker', () => { let tracker = new RequestTracker({farm, options}); await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}) => { await api.runRequest({ id: 'xyz', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -125,10 +134,12 @@ describe('RequestTracker', () => { tracker.graph.invalidateNode(nodeId, INITIAL_BUILD); await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}) => { await api.runRequest({ id: '123', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -143,6 +154,7 @@ describe('RequestTracker', () => { let tracker = new RequestTracker({farm, options}); await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { let result = await Promise.resolve('hello'); @@ -152,6 +164,7 @@ describe('RequestTracker', () => { }); let result = await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async () => {}, input: null, @@ -164,6 +177,7 @@ describe('RequestTracker', () => { let p = tracker .runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async () => { await Promise.resolve('hello'); @@ -192,6 +206,7 @@ describe('RequestTracker', () => { let requestA = tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { await lockA.promise; @@ -204,6 +219,7 @@ describe('RequestTracker', () => { let calledB = false; let requestB = tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { calledB = true; @@ -224,6 +240,7 @@ describe('RequestTracker', () => { let cachedResult = await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -240,6 +257,7 @@ describe('RequestTracker', () => { let requestA = tracker .runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async () => { await lockA.promise; @@ -253,6 +271,7 @@ describe('RequestTracker', () => { let requestB = tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { await lockB.promise; @@ -269,6 +288,7 @@ describe('RequestTracker', () => { let called = false; let cachedResult = await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => { called = true; From 194323612d7b03fe1264465aa1c17cedf852eaf1 Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Tue, 14 Nov 2023 14:44:37 -0800 Subject: [PATCH 13/17] separate keyFromEnvOrOptionContentKey --- packages/core/core/src/RequestTracker.js | 21 +++++++++++---------- packages/core/core/src/utils.js | 5 ----- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index fde46830caf..c902e26a956 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -29,11 +29,7 @@ import { import {hashString} from '@parcel/rust'; import {ContentGraph} from '@parcel/graph'; import {deserialize, serialize} from './serializer'; -import { - assertSignalNotAborted, - hashFromOption, - keyFromEnvOrOptionContentKey, -} from './utils'; +import {assertSignalNotAborted, hashFromOption} from './utils'; import { type ProjectPath, fromProjectPathRelative, @@ -217,6 +213,12 @@ const nodeFromOption = (option: string, value: mixed): RequestGraphNode => ({ hash: hashFromOption(value), }); +const keyFromEnvContentKey = (contentKey: ContentKey): string => + contentKey.slice('env:'.length); + +const keyFromOptionContentKey = (contentKey: ContentKey): string => + contentKey.slice('option:'.length); + export class RequestGraph extends ContentGraph< RequestGraphNode, RequestGraphEdgeType, @@ -356,7 +358,7 @@ export class RequestGraph extends ContentGraph< for (let nodeId of this.envNodeIds) { let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'env'); - if (env[keyFromEnvOrOptionContentKey(node.id)] !== node.value) { + if (env[keyFromEnvContentKey(node.id)] !== node.value) { let parentNodes = this.getNodeIdsConnectedTo( nodeId, requestGraphEdgeTypes.invalidated_by_update, @@ -373,8 +375,7 @@ export class RequestGraph extends ContentGraph< let node = nullthrows(this.getNode(nodeId)); invariant(node.type === 'option'); if ( - hashFromOption(options[keyFromEnvOrOptionContentKey(node.id)]) !== - node.hash + hashFromOption(options[keyFromOptionContentKey(node.id)]) !== node.hash ) { let parentNodes = this.getNodeIdsConnectedTo( nodeId, @@ -624,11 +625,11 @@ export class RequestGraph extends ContentGraph< case 'file': return {type: 'file', filePath: toProjectPathUnsafe(node.id)}; case 'env': - return {type: 'env', key: keyFromEnvOrOptionContentKey(node.id)}; + return {type: 'env', key: keyFromEnvContentKey(node.id)}; case 'option': return { type: 'option', - key: keyFromEnvOrOptionContentKey(node.id), + key: keyFromOptionContentKey(node.id), }; } }) diff --git a/packages/core/core/src/utils.js b/packages/core/core/src/utils.js index c17c66045fb..19e161b1292 100644 --- a/packages/core/core/src/utils.js +++ b/packages/core/core/src/utils.js @@ -18,7 +18,6 @@ import type {PackageManager} from '@parcel/package-manager'; import invariant from 'assert'; import baseX from 'base-x'; import {Graph} from '@parcel/graph'; -import type {ContentKey} from '@parcel/graph'; import {hashObject} from '@parcel/utils'; import {registerSerializableClass} from './serializer'; @@ -236,7 +235,3 @@ export function toInternalSymbols( ]), ); } - -export function keyFromEnvOrOptionContentKey(contentKey: ContentKey): string { - return contentKey.slice(contentKey.indexOf(':') + 1); -} From 53fdf808757413c9fb5d3dbf2de2e4f0f7ab91a5 Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Tue, 14 Nov 2023 21:16:03 -0800 Subject: [PATCH 14/17] mockRunRequest --- packages/core/core/src/RequestTracker.js | 4 +- .../core/src/requests/ParcelConfigRequest.js | 3 +- .../core/core/test/RequestTracker.test.js | 183 ++++++++++-------- 3 files changed, 108 insertions(+), 82 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index c902e26a956..128c26491b1 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -104,7 +104,7 @@ type OptionNode = {| hash: string, |}; -type Request = {| +export type Request = {| id: string, +type: RequestType, input: TInput, @@ -167,7 +167,7 @@ export type RunAPI = {| ) => Promise, |}; -type RunRequestOpts = {| +export type RunRequestOpts = {| force: boolean, |}; diff --git a/packages/core/core/src/requests/ParcelConfigRequest.js b/packages/core/core/src/requests/ParcelConfigRequest.js index b1017904e01..cc0ccc96893 100644 --- a/packages/core/core/src/requests/ParcelConfigRequest.js +++ b/packages/core/core/src/requests/ParcelConfigRequest.js @@ -37,7 +37,6 @@ import {optionsProxy} from '../utils'; import ParcelConfig from '../ParcelConfig'; import {createBuildCache} from '../buildCache'; import {toProjectPath} from '../projectPath'; -import type {RequestType} from '../RequestTracker'; type ConfigMap = {[K]: V, ...}; @@ -53,7 +52,7 @@ type RunOpts = {| export type ParcelConfigRequest = {| id: string, - type: RequestType, + type: 'parcel_config_request', input: null, run: (RunOpts) => Async, |}; diff --git a/packages/core/core/test/RequestTracker.test.js b/packages/core/core/test/RequestTracker.test.js index 3e6659e17dd..258db74d072 100644 --- a/packages/core/core/test/RequestTracker.test.js +++ b/packages/core/core/test/RequestTracker.test.js @@ -2,7 +2,12 @@ import assert from 'assert'; import nullthrows from 'nullthrows'; -import RequestTracker, {type RunAPI} from '../src/RequestTracker'; +import RequestTracker, { + type RunAPI, + type Request, + type RequestType, + type RunRequestOpts, +} from '../src/RequestTracker'; import WorkerFarm from '@parcel/workers'; import {DEFAULT_OPTIONS} from './test-utils'; import {INITIAL_BUILD} from '../src/constants'; @@ -11,20 +16,68 @@ import {makeDeferredWithPromise} from '@parcel/utils'; const options = DEFAULT_OPTIONS; const farm = new WorkerFarm({workerPath: require.resolve('../src/worker.js')}); +type MockRequest = { + ...Request, + type: RequestType | 'mock_request', + ... +}; + +const extractRequestType = ( + request: MockRequest, +): Request => { + let newRequest: ?Request; + if (request.type === 'mock_request') { + newRequest = { + id: request.id, + // For Flow: Mock all mock_request types to parcel_build_request + type: 'parcel_build_request', + input: request.input, + run: request.run, + }; + } else { + newRequest = { + id: request.id, + type: request.type, + input: request.input, + run: request.run, + }; + } + return newRequest; +}; + +// eslint-disable-next-line require-await +async function mockRunRequest( + tracker: RequestTracker, + request: MockRequest, + opts?: RunRequestOpts, +): Promise { + const newRequest = extractRequestType(request); + return tracker.runRequest(newRequest, opts); +} + +// eslint-disable-next-line require-await +async function apiMockRunRequest( + api: RunAPI, + request: MockRequest, + opts?: RunRequestOpts, +): Promise { + const newRequest = extractRequestType(request); + + return api.runRequest(newRequest, opts); +} + describe('RequestTracker', () => { it('should not run requests that have not been invalidated', async () => { let tracker = new RequestTracker({farm, options}); - await tracker.runRequest({ + await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, }); let called = false; - await tracker.runRequest({ + await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => { called = true; @@ -36,9 +89,8 @@ describe('RequestTracker', () => { it('should rerun requests that have been invalidated', async () => { let tracker = new RequestTracker({farm, options}); - await tracker.runRequest({ + await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -48,9 +100,8 @@ describe('RequestTracker', () => { INITIAL_BUILD, ); let called = false; - await tracker.runRequest({ + await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => { called = true; @@ -62,14 +113,12 @@ describe('RequestTracker', () => { it('should invalidate requests with invalidated subrequests', async () => { let tracker = new RequestTracker({farm, options}); - await tracker.runRequest({ + await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}) => { - await api.runRequest({ + await apiMockRunRequest(api, { id: 'xyz', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -91,20 +140,17 @@ describe('RequestTracker', () => { it('should invalidate requests that failed', async () => { let tracker = new RequestTracker({farm, options}); - await tracker - .runRequest({ - id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', - run: async () => { - await Promise.resolve(); - throw new Error('woops'); - }, - input: null, - }) - .then(null, () => { - /* do nothing */ - }); + await mockRunRequest(tracker, { + id: 'abc', + type: 'mock_request', + run: async () => { + await Promise.resolve(); + throw new Error('woops'); + }, + input: null, + }).then(null, () => { + /* do nothing */ + }); assert( tracker .getInvalidRequests() @@ -115,14 +161,12 @@ describe('RequestTracker', () => { it('should remove subrequests that are no longer called within a request', async () => { let tracker = new RequestTracker({farm, options}); - await tracker.runRequest({ + await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}) => { - await api.runRequest({ + await apiMockRunRequest(api, { id: 'xyz', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -132,14 +176,12 @@ describe('RequestTracker', () => { }); let nodeId = nullthrows(tracker.graph.getNodeIdByContentKey('abc')); tracker.graph.invalidateNode(nodeId, INITIAL_BUILD); - await tracker.runRequest({ + await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}) => { - await api.runRequest({ + await apiMockRunRequest(api, { id: '123', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -152,9 +194,8 @@ describe('RequestTracker', () => { it('should return a cached result if it was stored', async () => { let tracker = new RequestTracker({farm, options}); - await tracker.runRequest({ + await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { let result = await Promise.resolve('hello'); @@ -162,9 +203,8 @@ describe('RequestTracker', () => { }, input: null, }); - let result = await tracker.runRequest({ + let result = await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: async () => {}, input: null, @@ -174,19 +214,16 @@ describe('RequestTracker', () => { it('should reject all in progress requests when the abort controller aborts', async () => { let tracker = new RequestTracker({farm, options}); - let p = tracker - .runRequest({ - id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', - run: async () => { - await Promise.resolve('hello'); - }, - input: null, - }) - .then(null, () => { - /* do nothing */ - }); + let p = mockRunRequest(tracker, { + id: 'abc', + type: 'mock_request', + run: async () => { + await Promise.resolve('hello'); + }, + input: null, + }).then(null, () => { + /* do nothing */ + }); // $FlowFixMe tracker.setSignal({aborted: true}); await p; @@ -200,13 +237,11 @@ describe('RequestTracker', () => { it('should not requeue requests if the previous request is still running', async () => { let tracker = new RequestTracker({farm, options}); - let lockA = makeDeferredWithPromise(); let lockB = makeDeferredWithPromise(); - let requestA = tracker.runRequest({ + let requestA = mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { await lockA.promise; @@ -217,9 +252,8 @@ describe('RequestTracker', () => { }); let calledB = false; - let requestB = tracker.runRequest({ + let requestB = mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { calledB = true; @@ -238,9 +272,8 @@ describe('RequestTracker', () => { assert.strictEqual(resultB, 'a'); assert.strictEqual(calledB, false); - let cachedResult = await tracker.runRequest({ + let cachedResult = await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -250,28 +283,23 @@ describe('RequestTracker', () => { it('should requeue requests if the previous request is still running but failed', async () => { let tracker = new RequestTracker({farm, options}); - let lockA = makeDeferredWithPromise(); let lockB = makeDeferredWithPromise(); - let requestA = tracker - .runRequest({ - id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', - run: async () => { - await lockA.promise; - throw new Error('whoops'); - }, - input: null, - }) - .catch(() => { - // ignore - }); + let requestA = mockRunRequest(tracker, { + id: 'abc', + type: 'mock_request', + run: async () => { + await lockA.promise; + throw new Error('whoops'); + }, + input: null, + }).catch(() => { + // ignore + }); - let requestB = tracker.runRequest({ + let requestB = mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { await lockB.promise; @@ -286,9 +314,8 @@ describe('RequestTracker', () => { await requestB; let called = false; - let cachedResult = await tracker.runRequest({ + let cachedResult = await mockRunRequest(tracker, { id: 'abc', - // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => { called = true; From 928592deb2297a6e39d131ac433d0ba0bce7a9f0 Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Wed, 15 Nov 2023 17:52:25 -0800 Subject: [PATCH 15/17] make mock_request one of the union requestTypes --- packages/core/core/src/RequestTracker.js | 2 +- packages/dev/query/src/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index 128c26491b1..2af101cfaf0 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -115,7 +115,7 @@ type InvalidateReason = number; type RequestNode = {| id: ContentKey, +type: 'request', - +requestType?: RequestType, + +requestType: RequestType, invalidateReason: InvalidateReason, result?: mixed, resultCacheKey?: ?string, diff --git a/packages/dev/query/src/index.js b/packages/dev/query/src/index.js index 5cb89d9f8f4..cc1d8985a27 100644 --- a/packages/dev/query/src/index.js +++ b/packages/dev/query/src/index.js @@ -149,7 +149,7 @@ async function loadLargeBlobRequestRequest(cache, node, cacheInfo) { invariant(node.type === 'request'); let cachedFile = await cache.getLargeBlob(nullthrows(node.resultCacheKey)); - cacheInfo.get(node.type)?.push(cachedFile.byteLength); //Add size + cacheInfo.get(node.requestType)?.push(cachedFile.byteLength); //Add size let TTD = Date.now(); let result = v8.deserialize(cachedFile); From e7455c375f5ad20f1ae1a4811ff74d11568044b2 Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Wed, 15 Nov 2023 17:52:35 -0800 Subject: [PATCH 16/17] Revert "mockRunRequest" This reverts commit 53fdf808757413c9fb5d3dbf2de2e4f0f7ab91a5. --- packages/core/core/src/RequestTracker.js | 4 +- .../core/src/requests/ParcelConfigRequest.js | 3 +- .../core/core/test/RequestTracker.test.js | 183 ++++++++---------- 3 files changed, 82 insertions(+), 108 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index 2af101cfaf0..80b90d0a8c5 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -104,7 +104,7 @@ type OptionNode = {| hash: string, |}; -export type Request = {| +type Request = {| id: string, +type: RequestType, input: TInput, @@ -167,7 +167,7 @@ export type RunAPI = {| ) => Promise, |}; -export type RunRequestOpts = {| +type RunRequestOpts = {| force: boolean, |}; diff --git a/packages/core/core/src/requests/ParcelConfigRequest.js b/packages/core/core/src/requests/ParcelConfigRequest.js index cc0ccc96893..b1017904e01 100644 --- a/packages/core/core/src/requests/ParcelConfigRequest.js +++ b/packages/core/core/src/requests/ParcelConfigRequest.js @@ -37,6 +37,7 @@ import {optionsProxy} from '../utils'; import ParcelConfig from '../ParcelConfig'; import {createBuildCache} from '../buildCache'; import {toProjectPath} from '../projectPath'; +import type {RequestType} from '../RequestTracker'; type ConfigMap = {[K]: V, ...}; @@ -52,7 +53,7 @@ type RunOpts = {| export type ParcelConfigRequest = {| id: string, - type: 'parcel_config_request', + type: RequestType, input: null, run: (RunOpts) => Async, |}; diff --git a/packages/core/core/test/RequestTracker.test.js b/packages/core/core/test/RequestTracker.test.js index 258db74d072..3e6659e17dd 100644 --- a/packages/core/core/test/RequestTracker.test.js +++ b/packages/core/core/test/RequestTracker.test.js @@ -2,12 +2,7 @@ import assert from 'assert'; import nullthrows from 'nullthrows'; -import RequestTracker, { - type RunAPI, - type Request, - type RequestType, - type RunRequestOpts, -} from '../src/RequestTracker'; +import RequestTracker, {type RunAPI} from '../src/RequestTracker'; import WorkerFarm from '@parcel/workers'; import {DEFAULT_OPTIONS} from './test-utils'; import {INITIAL_BUILD} from '../src/constants'; @@ -16,68 +11,20 @@ import {makeDeferredWithPromise} from '@parcel/utils'; const options = DEFAULT_OPTIONS; const farm = new WorkerFarm({workerPath: require.resolve('../src/worker.js')}); -type MockRequest = { - ...Request, - type: RequestType | 'mock_request', - ... -}; - -const extractRequestType = ( - request: MockRequest, -): Request => { - let newRequest: ?Request; - if (request.type === 'mock_request') { - newRequest = { - id: request.id, - // For Flow: Mock all mock_request types to parcel_build_request - type: 'parcel_build_request', - input: request.input, - run: request.run, - }; - } else { - newRequest = { - id: request.id, - type: request.type, - input: request.input, - run: request.run, - }; - } - return newRequest; -}; - -// eslint-disable-next-line require-await -async function mockRunRequest( - tracker: RequestTracker, - request: MockRequest, - opts?: RunRequestOpts, -): Promise { - const newRequest = extractRequestType(request); - return tracker.runRequest(newRequest, opts); -} - -// eslint-disable-next-line require-await -async function apiMockRunRequest( - api: RunAPI, - request: MockRequest, - opts?: RunRequestOpts, -): Promise { - const newRequest = extractRequestType(request); - - return api.runRequest(newRequest, opts); -} - describe('RequestTracker', () => { it('should not run requests that have not been invalidated', async () => { let tracker = new RequestTracker({farm, options}); - await mockRunRequest(tracker, { + await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, }); let called = false; - await mockRunRequest(tracker, { + await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => { called = true; @@ -89,8 +36,9 @@ describe('RequestTracker', () => { it('should rerun requests that have been invalidated', async () => { let tracker = new RequestTracker({farm, options}); - await mockRunRequest(tracker, { + await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -100,8 +48,9 @@ describe('RequestTracker', () => { INITIAL_BUILD, ); let called = false; - await mockRunRequest(tracker, { + await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => { called = true; @@ -113,12 +62,14 @@ describe('RequestTracker', () => { it('should invalidate requests with invalidated subrequests', async () => { let tracker = new RequestTracker({farm, options}); - await mockRunRequest(tracker, { + await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}) => { - await apiMockRunRequest(api, { + await api.runRequest({ id: 'xyz', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -140,17 +91,20 @@ describe('RequestTracker', () => { it('should invalidate requests that failed', async () => { let tracker = new RequestTracker({farm, options}); - await mockRunRequest(tracker, { - id: 'abc', - type: 'mock_request', - run: async () => { - await Promise.resolve(); - throw new Error('woops'); - }, - input: null, - }).then(null, () => { - /* do nothing */ - }); + await tracker + .runRequest({ + id: 'abc', + // $FlowFixMe[incompatible-call] + type: 'mock_request', + run: async () => { + await Promise.resolve(); + throw new Error('woops'); + }, + input: null, + }) + .then(null, () => { + /* do nothing */ + }); assert( tracker .getInvalidRequests() @@ -161,12 +115,14 @@ describe('RequestTracker', () => { it('should remove subrequests that are no longer called within a request', async () => { let tracker = new RequestTracker({farm, options}); - await mockRunRequest(tracker, { + await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}) => { - await apiMockRunRequest(api, { + await api.runRequest({ id: 'xyz', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -176,12 +132,14 @@ describe('RequestTracker', () => { }); let nodeId = nullthrows(tracker.graph.getNodeIdByContentKey('abc')); tracker.graph.invalidateNode(nodeId, INITIAL_BUILD); - await mockRunRequest(tracker, { + await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}) => { - await apiMockRunRequest(api, { + await api.runRequest({ id: '123', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -194,8 +152,9 @@ describe('RequestTracker', () => { it('should return a cached result if it was stored', async () => { let tracker = new RequestTracker({farm, options}); - await mockRunRequest(tracker, { + await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { let result = await Promise.resolve('hello'); @@ -203,8 +162,9 @@ describe('RequestTracker', () => { }, input: null, }); - let result = await mockRunRequest(tracker, { + let result = await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async () => {}, input: null, @@ -214,16 +174,19 @@ describe('RequestTracker', () => { it('should reject all in progress requests when the abort controller aborts', async () => { let tracker = new RequestTracker({farm, options}); - let p = mockRunRequest(tracker, { - id: 'abc', - type: 'mock_request', - run: async () => { - await Promise.resolve('hello'); - }, - input: null, - }).then(null, () => { - /* do nothing */ - }); + let p = tracker + .runRequest({ + id: 'abc', + // $FlowFixMe[incompatible-call] + type: 'mock_request', + run: async () => { + await Promise.resolve('hello'); + }, + input: null, + }) + .then(null, () => { + /* do nothing */ + }); // $FlowFixMe tracker.setSignal({aborted: true}); await p; @@ -237,11 +200,13 @@ describe('RequestTracker', () => { it('should not requeue requests if the previous request is still running', async () => { let tracker = new RequestTracker({farm, options}); + let lockA = makeDeferredWithPromise(); let lockB = makeDeferredWithPromise(); - let requestA = mockRunRequest(tracker, { + let requestA = tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { await lockA.promise; @@ -252,8 +217,9 @@ describe('RequestTracker', () => { }); let calledB = false; - let requestB = mockRunRequest(tracker, { + let requestB = tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { calledB = true; @@ -272,8 +238,9 @@ describe('RequestTracker', () => { assert.strictEqual(resultB, 'a'); assert.strictEqual(calledB, false); - let cachedResult = await mockRunRequest(tracker, { + let cachedResult = await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => {}, input: null, @@ -283,23 +250,28 @@ describe('RequestTracker', () => { it('should requeue requests if the previous request is still running but failed', async () => { let tracker = new RequestTracker({farm, options}); + let lockA = makeDeferredWithPromise(); let lockB = makeDeferredWithPromise(); - let requestA = mockRunRequest(tracker, { - id: 'abc', - type: 'mock_request', - run: async () => { - await lockA.promise; - throw new Error('whoops'); - }, - input: null, - }).catch(() => { - // ignore - }); + let requestA = tracker + .runRequest({ + id: 'abc', + // $FlowFixMe[incompatible-call] + type: 'mock_request', + run: async () => { + await lockA.promise; + throw new Error('whoops'); + }, + input: null, + }) + .catch(() => { + // ignore + }); - let requestB = mockRunRequest(tracker, { + let requestB = tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: async ({api}: {api: RunAPI, ...}) => { await lockB.promise; @@ -314,8 +286,9 @@ describe('RequestTracker', () => { await requestB; let called = false; - let cachedResult = await mockRunRequest(tracker, { + let cachedResult = await tracker.runRequest({ id: 'abc', + // $FlowFixMe[incompatible-call] type: 'mock_request', run: () => { called = true; From 41f2ca77e5a461758f3568ad0366aba313a71a62 Mon Sep 17 00:00:00 2001 From: Gora Kong Date: Wed, 15 Nov 2023 17:54:10 -0800 Subject: [PATCH 17/17] Revert "add flow suppressions" This reverts commit d9cbb5fabae811213f2e481ae6eb7a4f41b14411. --- packages/core/core/src/RequestTracker.js | 2 +- .../core/src/requests/ParcelConfigRequest.js | 3 +- .../core/core/test/RequestTracker.test.js | 60 +++++++------------ 3 files changed, 22 insertions(+), 43 deletions(-) diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index 80b90d0a8c5..8e345babb93 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -122,7 +122,7 @@ type RequestNode = {| hash?: string, |}; -export type RequestType = +type RequestType = | 'parcel_build_request' | 'bundle_graph_request' | 'asset_graph_request' diff --git a/packages/core/core/src/requests/ParcelConfigRequest.js b/packages/core/core/src/requests/ParcelConfigRequest.js index b1017904e01..cc0ccc96893 100644 --- a/packages/core/core/src/requests/ParcelConfigRequest.js +++ b/packages/core/core/src/requests/ParcelConfigRequest.js @@ -37,7 +37,6 @@ import {optionsProxy} from '../utils'; import ParcelConfig from '../ParcelConfig'; import {createBuildCache} from '../buildCache'; import {toProjectPath} from '../projectPath'; -import type {RequestType} from '../RequestTracker'; type ConfigMap = {[K]: V, ...}; @@ -53,7 +52,7 @@ type RunOpts = {| export type ParcelConfigRequest = {| id: string, - type: RequestType, + type: 'parcel_config_request', input: null, run: (RunOpts) => Async, |}; diff --git a/packages/core/core/test/RequestTracker.test.js b/packages/core/core/test/RequestTracker.test.js index 3e6659e17dd..eefa5fbf54a 100644 --- a/packages/core/core/test/RequestTracker.test.js +++ b/packages/core/core/test/RequestTracker.test.js @@ -16,16 +16,14 @@ describe('RequestTracker', () => { let tracker = new RequestTracker({farm, options}); await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: () => {}, input: null, }); let called = false; await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: () => { called = true; }, @@ -38,8 +36,7 @@ describe('RequestTracker', () => { let tracker = new RequestTracker({farm, options}); await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: () => {}, input: null, }); @@ -50,8 +47,7 @@ describe('RequestTracker', () => { let called = false; await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: () => { called = true; }, @@ -64,13 +60,11 @@ describe('RequestTracker', () => { let tracker = new RequestTracker({farm, options}); await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async ({api}) => { await api.runRequest({ id: 'xyz', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: () => {}, input: null, }); @@ -94,8 +88,7 @@ describe('RequestTracker', () => { await tracker .runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async () => { await Promise.resolve(); throw new Error('woops'); @@ -117,13 +110,11 @@ describe('RequestTracker', () => { let tracker = new RequestTracker({farm, options}); await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async ({api}) => { await api.runRequest({ id: 'xyz', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: () => {}, input: null, }); @@ -134,13 +125,11 @@ describe('RequestTracker', () => { tracker.graph.invalidateNode(nodeId, INITIAL_BUILD); await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async ({api}) => { await api.runRequest({ id: '123', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: () => {}, input: null, }); @@ -154,8 +143,7 @@ describe('RequestTracker', () => { let tracker = new RequestTracker({farm, options}); await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async ({api}: {api: RunAPI, ...}) => { let result = await Promise.resolve('hello'); api.storeResult(result); @@ -164,8 +152,7 @@ describe('RequestTracker', () => { }); let result = await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async () => {}, input: null, }); @@ -177,8 +164,7 @@ describe('RequestTracker', () => { let p = tracker .runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async () => { await Promise.resolve('hello'); }, @@ -206,8 +192,7 @@ describe('RequestTracker', () => { let requestA = tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async ({api}: {api: RunAPI, ...}) => { await lockA.promise; api.storeResult('a'); @@ -219,8 +204,7 @@ describe('RequestTracker', () => { let calledB = false; let requestB = tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async ({api}: {api: RunAPI, ...}) => { calledB = true; await lockB.promise; @@ -240,8 +224,7 @@ describe('RequestTracker', () => { let cachedResult = await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: () => {}, input: null, }); @@ -257,8 +240,7 @@ describe('RequestTracker', () => { let requestA = tracker .runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async () => { await lockA.promise; throw new Error('whoops'); @@ -271,8 +253,7 @@ describe('RequestTracker', () => { let requestB = tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: async ({api}: {api: RunAPI, ...}) => { await lockB.promise; api.storeResult('b'); @@ -288,8 +269,7 @@ describe('RequestTracker', () => { let called = false; let cachedResult = await tracker.runRequest({ id: 'abc', - // $FlowFixMe[incompatible-call] - type: 'mock_request', + type: 'path_request', run: () => { called = true; },