Skip to content

Commit 95f3335

Browse files
committed
[heft] Move loader cache to instance
1 parent 6bb2332 commit 95f3335

File tree

1 file changed

+25
-31
lines changed

1 file changed

+25
-31
lines changed

apps/heft/src/configuration/HeftConfiguration.ts

+25-31
Original file line numberDiff line numberDiff line change
@@ -33,35 +33,6 @@ interface IProjectConfigurationFileEntry<TConfigFile> {
3333
loader: ProjectConfigurationFile<TConfigFile>;
3434
}
3535

36-
const projectConfigurationFileRegistry: Map<string, IProjectConfigurationFileEntry<unknown>> = new Map();
37-
function getAndValidateProjectConfigurationFileEntry<TConfigFile>(
38-
options: IProjectConfigurationFileSpecification<TConfigFile>
39-
): IProjectConfigurationFileEntry<TConfigFile> {
40-
let entry: IProjectConfigurationFileEntry<TConfigFile> | undefined = projectConfigurationFileRegistry.get(
41-
options.projectRelativeFilePath
42-
) as IProjectConfigurationFileEntry<TConfigFile> | undefined;
43-
44-
if (!entry) {
45-
entry = {
46-
options: Object.freeze(options),
47-
loader: new ProjectConfigurationFile<TConfigFile>(options)
48-
};
49-
} else if (options !== entry.options) {
50-
throw new Error(
51-
`The project configuration file for ${options.projectRelativeFilePath} has already been loaded with different options. Please ensure that options object used to load the configuration file is the same referenced object in all calls.`
52-
);
53-
}
54-
55-
return entry;
56-
}
57-
/**
58-
* For unit test usage.
59-
* @internal
60-
*/
61-
export function _clearProjectConfigurationFileRegistry(): void {
62-
projectConfigurationFileRegistry.clear();
63-
}
64-
6536
/**
6637
* @public
6738
*/
@@ -75,6 +46,8 @@ export class HeftConfiguration {
7546
private _terminalProvider!: ITerminalProvider;
7647
private _rigPackageResolver!: RigPackageResolver;
7748

49+
private readonly _knownConfigurationFiles: Map<string, IProjectConfigurationFileEntry<unknown>> = new Map();
50+
7851
/**
7952
* Project build folder path. This is the folder containing the project's package.json file.
8053
*/
@@ -197,7 +170,7 @@ export class HeftConfiguration {
197170
options: IProjectConfigurationFileSpecification<TConfigFile>,
198171
terminal: ITerminal
199172
): TConfigFile | undefined {
200-
const { loader } = getAndValidateProjectConfigurationFileEntry(options);
173+
const loader: ProjectConfigurationFile<TConfigFile> = this._getConfigFileLoader(options);
201174
return loader.tryLoadConfigurationFileForProject(terminal, this._buildFolderPath, this._rigConfig);
202175
}
203176

@@ -211,7 +184,7 @@ export class HeftConfiguration {
211184
options: IProjectConfigurationFileSpecification<TConfigFile>,
212185
terminal: ITerminal
213186
): Promise<TConfigFile | undefined> {
214-
const { loader } = getAndValidateProjectConfigurationFileEntry(options);
187+
const loader: ProjectConfigurationFile<TConfigFile> = this._getConfigFileLoader(options);
215188
return loader.tryLoadConfigurationFileForProjectAsync(terminal, this._buildFolderPath, this._rigConfig);
216189
}
217190

@@ -241,4 +214,25 @@ export class HeftConfiguration {
241214
configuration._globalTerminal = new Terminal(options.terminalProvider);
242215
return configuration;
243216
}
217+
218+
private _getConfigFileLoader<TConfigFile>(
219+
options: IProjectConfigurationFileSpecification<TConfigFile>
220+
): ProjectConfigurationFile<TConfigFile> {
221+
let entry: IProjectConfigurationFileEntry<TConfigFile> | undefined = this._knownConfigurationFiles.get(
222+
options.projectRelativeFilePath
223+
) as IProjectConfigurationFileEntry<TConfigFile> | undefined;
224+
225+
if (!entry) {
226+
entry = {
227+
options: Object.freeze(options),
228+
loader: new ProjectConfigurationFile<TConfigFile>(options)
229+
};
230+
} else if (options !== entry.options) {
231+
throw new Error(
232+
`The project configuration file for ${options.projectRelativeFilePath} has already been loaded with different options. Please ensure that options object used to load the configuration file is the same referenced object in all calls.`
233+
);
234+
}
235+
236+
return entry.loader;
237+
}
244238
}

0 commit comments

Comments
 (0)