Skip to content

Commit

Permalink
feat(core): pass source maps up the chain and write them to json
Browse files Browse the repository at this point in the history
  • Loading branch information
MaxKless committed Nov 9, 2023
1 parent 512e527 commit 5c6e6f7
Show file tree
Hide file tree
Showing 8 changed files with 79 additions and 36 deletions.
Original file line number Diff line number Diff line change
@@ -1,37 +1,33 @@
import { performance } from 'perf_hooks';
import { readNxJson } from '../../config/nx-json';
import {
FileData,
FileMap,
ProjectFileMap,
ProjectGraph,
ProjectGraphExternalNode,
} from '../../config/project-graph';
import { ProjectConfiguration } from '../../config/workspace-json-project-json';
import { hashArray } from '../../hasher/file-hasher';
import { buildProjectGraphUsingProjectFileMap as buildProjectGraphUsingFileMap } from '../../project-graph/build-project-graph';
import { updateFileMap } from '../../project-graph/file-map-utils';
import {
nxProjectGraph,
FileMapCache,
nxProjectGraph,
readFileMapCache,
} from '../../project-graph/nx-deps-cache';
import { fileExists } from '../../utils/fileutils';
import { notifyFileWatcherSockets } from './file-watching/file-watcher-sockets';
import { serverLogger } from './logger';
import { workspaceRoot } from '../../utils/workspace-root';
import { execSync } from 'child_process';
import { hashArray } from '../../hasher/file-hasher';
import {
retrieveWorkspaceFiles,
retrieveProjectConfigurations,
retrieveWorkspaceFiles,
} from '../../project-graph/utils/retrieve-workspace-files';
import {
ProjectConfiguration,
ProjectsConfigurations,
} from '../../config/workspace-json-project-json';
import { readNxJson } from '../../config/nx-json';
import { fileExists } from '../../utils/fileutils';
import { writeSourceMaps } from '../../utils/source-maps';
import {
resetWorkspaceContext,
updateFilesInContext,
} from '../../utils/workspace-context';
import { workspaceRoot } from '../../utils/workspace-root';
import { notifyFileWatcherSockets } from './file-watching/file-watcher-sockets';
import { serverLogger } from './logger';

let cachedSerializedProjectGraphPromise: Promise<{
error: Error | null;
Expand Down Expand Up @@ -278,6 +274,8 @@ async function createAndSerializeProjectGraph(): Promise<{
'json-stringify-end'
);

writeSourceMaps(projectConfigurations.sourceMaps);

return {
error: null,
projectGraph,
Expand Down
2 changes: 2 additions & 0 deletions packages/nx/src/native/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,14 @@ export const enum WorkspaceErrors {
export interface ConfigurationParserResult {
projectNodes: Record<string, object>
externalNodes: Record<string, object>
sourceMaps: Record<string, Record<string, Array<string>>>
}
export interface NxWorkspaceFiles {
projectFileMap: Record<string, Array<FileData>>
globalFiles: Array<FileData>
projectConfigurations: Record<string, object>
externalNodes: Record<string, object>
sourceMaps: Record<string, Record<string, Array<string>>>
}
export class ImportResult {
file: string
Expand Down
1 change: 1 addition & 0 deletions packages/nx/src/native/workspace/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ pub enum FileLocation {
pub struct ConfigurationParserResult {
pub project_nodes: HashMap<String, JsObject>,
pub external_nodes: HashMap<String, JsObject>,
pub source_maps: HashMap<String, HashMap<String, Vec<String>>>
}
2 changes: 2 additions & 0 deletions packages/nx/src/native/workspace/workspace_files.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ pub struct NxWorkspaceFiles {
pub global_files: Vec<FileData>,
pub project_configurations: HashMap<String, JsObject>,
pub external_nodes: HashMap<String, JsObject>,
pub source_maps: HashMap<String, HashMap<String, Vec<String>>>
}

pub(super) fn get_files<ConfigurationParser>(
Expand Down Expand Up @@ -91,6 +92,7 @@ where
global_files,
external_nodes: parsed_graph_nodes.external_nodes,
project_configurations: parsed_graph_nodes.project_nodes,
source_maps: parsed_graph_nodes.source_maps
})
}

Expand Down
12 changes: 10 additions & 2 deletions packages/nx/src/project-graph/project-graph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { performance } from 'perf_hooks';
import { retrieveWorkspaceFiles } from './utils/retrieve-workspace-files';
import { readNxJson } from '../config/nx-json';
import { unregisterPluginTSTranspiler } from '../utils/nx-plugin';
import { writeSourceMaps } from '../utils/source-maps';

/**
* Synchronously reads the latest cached copy of the workspace's ProjectGraph.
Expand Down Expand Up @@ -77,8 +78,13 @@ export function readProjectsConfigurationFromProjectGraph(
export async function buildProjectGraphWithoutDaemon() {
const nxJson = readNxJson();

const { allWorkspaceFiles, fileMap, projectConfigurations, externalNodes } =
await retrieveWorkspaceFiles(workspaceRoot, nxJson);
const {
allWorkspaceFiles,
fileMap,
projectConfigurations,
externalNodes,
sourceMaps,
} = await retrieveWorkspaceFiles(workspaceRoot, nxJson);

const cacheEnabled = process.env.NX_CACHE_PROJECT_GRAPH !== 'false';
const projectGraph = (
Expand All @@ -92,6 +98,8 @@ export async function buildProjectGraphWithoutDaemon() {
)
).projectGraph;

writeSourceMaps(sourceMaps);

unregisterPluginTSTranspiler();

return projectGraph;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ export function buildProjectsConfigurationsFromProjectPathsAndPlugins(
): {
projects: Record<string, ProjectConfiguration>;
externalNodes: Record<string, ProjectGraphExternalNode>;
// sourceMap: Record<string, { plugin: string; file: string }>;
sourceMaps: Record<string, Record<string, SourceInformation>>;
} {
const projectRootMap: Map<string, ProjectConfiguration> = new Map();
const externalNodes: Record<string, ProjectGraphExternalNode> = {};
Expand Down Expand Up @@ -197,6 +197,7 @@ export function buildProjectsConfigurationsFromProjectPathsAndPlugins(
return {
projects: readProjectConfigurationsFromRootMap(projectRootMap),
externalNodes,
sourceMaps: projectRootSourceMaps,
};
}

Expand Down
57 changes: 38 additions & 19 deletions packages/nx/src/project-graph/utils/retrieve-workspace-files.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ import {
getGlobPatternsFromPackageManagerWorkspaces,
getNxPackageJsonWorkspacesPlugin,
} from '../../../plugins/package-json-workspaces';
import { buildProjectsConfigurationsFromProjectPathsAndPlugins } from './project-configuration-utils';
import {
SourceInformation,
buildProjectsConfigurationsFromProjectPathsAndPlugins,
} from './project-configuration-utils';
import {
LoadedNxPlugin,
loadNxPlugins,
Expand Down Expand Up @@ -61,24 +64,30 @@ export async function retrieveWorkspaceFiles(

performance.mark('get-workspace-files:start');

const { projectConfigurations, projectFileMap, globalFiles, externalNodes } =
getNxWorkspaceFilesFromContext(
workspaceRoot,
globs,
(configs: string[]) => {
const projectConfigurations = createProjectConfigurations(
workspaceRoot,
nxJson,
configs,
plugins
);
const {
projectConfigurations,
projectFileMap,
globalFiles,
externalNodes,
sourceMaps,
} = getNxWorkspaceFilesFromContext(
workspaceRoot,
globs,
(configs: string[]) => {
const projectConfigurations = createProjectConfigurations(
workspaceRoot,
nxJson,
configs,
plugins
);

return {
projectNodes: projectConfigurations.projects,
externalNodes: projectConfigurations.externalNodes,
};
}
) as NxWorkspaceFiles;
return {
projectNodes: projectConfigurations.projects,
externalNodes: projectConfigurations.externalNodes,
sourceMaps: projectConfigurations.sourceMaps,
};
}
) as NxWorkspaceFiles;
performance.mark('get-workspace-files:end');
performance.measure(
'get-workspace-files',
Expand All @@ -97,6 +106,7 @@ export async function retrieveWorkspaceFiles(
projects: projectConfigurations,
} as ProjectsConfigurations,
externalNodes: externalNodes as Record<string, ProjectGraphExternalNode>,
sourceMaps,
};
}

Expand All @@ -112,6 +122,7 @@ export async function retrieveProjectConfigurations(
): Promise<{
externalNodes: Record<string, ProjectGraphExternalNode>;
projectNodes: Record<string, ProjectConfiguration>;
sourceMaps: Record<string, Record<string, SourceInformation>>;
}> {
const plugins = await loadNxPlugins(
nxJson?.plugins ?? [],
Expand All @@ -129,6 +140,7 @@ export async function retrieveProjectConfigurationsWithAngularProjects(
): Promise<{
externalNodes: Record<string, ProjectGraphExternalNode>;
projectNodes: Record<string, ProjectConfiguration>;
sourceMaps: Record<string, Record<string, SourceInformation>>;
}> {
const plugins = await loadNxPlugins(
nxJson?.plugins ?? [],
Expand Down Expand Up @@ -156,6 +168,7 @@ export function retrieveProjectConfigurationsSync(
): {
externalNodes: Record<string, ProjectGraphExternalNode>;
projectNodes: Record<string, ProjectConfiguration>;
sourceMaps: Record<string, Record<string, SourceInformation>>;
} {
const plugins = loadNxPluginsSync(
nxJson?.plugins ?? [],
Expand All @@ -175,6 +188,7 @@ function _retrieveProjectConfigurations(
): {
externalNodes: Record<string, ProjectGraphExternalNode>;
projectNodes: Record<string, ProjectConfiguration>;
sourceMaps: Record<string, Record<string, SourceInformation>>;
} {
return getProjectConfigurationsFromContext(
workspaceRoot,
Expand All @@ -190,11 +204,13 @@ function _retrieveProjectConfigurations(
return {
projectNodes: projectConfigurations.projects,
externalNodes: projectConfigurations.externalNodes,
sourceMaps: projectConfigurations.sourceMaps,
};
}
) as {
externalNodes: Record<string, ProjectGraphExternalNode>;
projectNodes: Record<string, ProjectConfiguration>;
sourceMaps: Record<string, Record<string, SourceInformation>>;
};
}

Expand Down Expand Up @@ -243,6 +259,7 @@ export function retrieveProjectConfigurationsWithoutPluginInference(
return {
projectNodes: projects,
externalNodes: {},
sourceMaps: {},
};
}
).projectNodes as Record<string, ProjectConfiguration>;
Expand Down Expand Up @@ -279,10 +296,11 @@ export function createProjectConfigurations(
): {
projects: Record<string, ProjectConfiguration>;
externalNodes: Record<string, ProjectGraphExternalNode>;
sourceMaps: Record<string, Record<string, SourceInformation>>;
} {
performance.mark('build-project-configs:start');

const { projects, externalNodes } =
const { projects, externalNodes, sourceMaps } =
buildProjectsConfigurationsFromProjectPathsAndPlugins(
nxJson,
configFiles,
Expand All @@ -302,6 +320,7 @@ export function createProjectConfigurations(
return {
projects: projectConfigurations,
externalNodes,
sourceMaps,
};
}

Expand Down
12 changes: 12 additions & 0 deletions packages/nx/src/utils/source-maps.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { join } from 'path';
import { projectGraphCacheDirectory } from './cache-directory';
import { writeJsonFile } from './fileutils';

export function writeSourceMaps(
sourceMaps: Record<string, Record<string, string[]>>
) {
writeJsonFile(
join(projectGraphCacheDirectory, 'configuration-source-maps.json'),
sourceMaps
);
}

0 comments on commit 5c6e6f7

Please sign in to comment.