Skip to content

Commit

Permalink
fix(build-tools): Resolve issue with Nx file imports
Browse files Browse the repository at this point in the history
  • Loading branch information
sullivanpj committed Apr 8, 2024
1 parent 9b3e287 commit e86eff4
Show file tree
Hide file tree
Showing 9 changed files with 167 additions and 103 deletions.
6 changes: 3 additions & 3 deletions packages/build-tools/src/build/rolldown.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import type { StormConfig } from "@storm-software/config";
import {
createProjectRootMappings,
findProjectForPath
} from "nx/src/project-graph/utils/find-project-for-path";
} from "nx/src/project-graph/utils/find-project-for-path.js";
import type { RolldownOptions } from "../types";
import {
type ProjectTokenizerOptions,
Expand All @@ -25,10 +25,10 @@ import { copyAssets } from "@nx/js";
import type { AssetGlob } from "@nx/js/src/utils/assets/assets";
import { removeSync } from "fs-extra";
import { applyDefaultRolldownOptions } from "../utils/apply-default-options";
import { calculateProjectBuildableDependencies } from "@nx/js/src/utils/buildable-libs-utils";
import { calculateProjectBuildableDependencies } from "@nx/js/src/utils/buildable-libs-utils.js";
import { readFileSync } from "node:fs";
import { writeFile } from "node:fs/promises";
import { readNxJson } from "nx/src/config/nx-json";
import { readNxJson } from "nx/src/config/nx-json.js";
import { createTaskId, getAllWorkspaceTaskGraphs } from "../utils/task-graph";
import { getRolldownBuildOptions } from "../config/get-rolldown-config";
import { rolldown as rolldownBuild } from "rolldown";
Expand Down
8 changes: 4 additions & 4 deletions packages/build-tools/src/build/ts-build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,17 @@ import {
type ExecutorContext,
type ProjectConfiguration
} from "@nx/devkit";
import { writeJsonFile } from "nx/src/utils/fileutils";
import { writeJsonFile } from "nx/src/utils/fileutils.js";
import { globSync } from "glob";
import { writeFile } from "node:fs/promises";
import { readFileSync } from "node:fs";
import { getEntryPoints } from "../utils/get-entry-points";
import { readProjectsConfigurationFromProjectGraph } from "nx/src/project-graph/project-graph";
import { readNxJson } from "nx/src/config/nx-json";
import { readProjectsConfigurationFromProjectGraph } from "nx/src/project-graph/project-graph.js";
import { readNxJson } from "nx/src/config/nx-json.js";
import {
createProjectRootMappings,
findProjectForPath
} from "nx/src/project-graph/utils/find-project-for-path";
} from "nx/src/project-graph/utils/find-project-for-path.js";

/**
* Build and bundle a TypeScript project using the tsup build tools.
Expand Down
8 changes: 4 additions & 4 deletions packages/build-tools/src/config/get-rolldown-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ import type {
} from "../types";
import { pathToFileURL } from "node:url";
import merge from "deepmerge";
import { createEntryPoints } from "@nx/js/src/utils/package-json/create-entry-points";
import { createEntryPoints } from "@nx/js/src/utils/package-json/create-entry-points.js";
import { joinPathFragments } from "@nx/devkit";
import ts from "typescript";
import {
computeCompilerOptionsPaths,
type DependentBuildableProjectNode
} from "@nx/js/src/utils/buildable-libs-utils";
import type { PackageJson } from "nx/src/utils/package-json";
} from "@nx/js/src/utils/buildable-libs-utils.js";
import type { PackageJson } from "nx/src/utils/package-json.js";
import type { StormConfig } from "@storm-software/config";
import { analyze } from "../plugins/analyze-plugin";
import { typeDefinitions } from "@nx/js/src/plugins/rollup/type-definitions";
import { typeDefinitions } from "@nx/js/src/plugins/rollup/type-definitions.js";
import peerDepsExternal from "rollup-plugin-peer-deps-external";
import nodeResolve from "@rollup/plugin-node-resolve";
import deepClone from "deep-clone";
Expand Down
134 changes: 89 additions & 45 deletions packages/build-tools/src/utils/generate-package-json.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@ import type { TypeScriptBuildOptions } from "../../declarations";
import { writeFileSync } from "node:fs";
import { joinPathFragments, readJsonFile } from "@nx/devkit";
import type { ProjectGraph } from "@nx/devkit";
import { retrieveProjectConfigurationsWithoutPluginInference } from "nx/src/project-graph/utils/retrieve-workspace-files";
import { retrieveProjectConfigurationsWithoutPluginInference } from "nx/src/project-graph/utils/retrieve-workspace-files.js";
import type { DependentBuildableProjectNode } from "@nx/js/src/utils/buildable-libs-utils.js";
import type { StormConfig } from "@storm-software/config";
import { fileExists } from "nx/src/utils/fileutils.js";
import { removeExtension } from "@storm-software/config-tools";
import { getExtraDependencies, getInternalDependencies } from "./get-project-deps";
import {
getExtraDependencies,
getInternalDependencies
} from "./get-project-deps";
import {
findWorkspaceRoot,
LogLevel,
Expand All @@ -34,9 +37,17 @@ export const generatePackageJson = async (
): Promise<Record<string, any>> => {
// #region Generate the package.json file

const workspaceRoot = config.workspaceRoot ? config.workspaceRoot : findWorkspaceRoot();
const workspacePackageJson = readJsonFile(joinPathFragments(workspaceRoot, "package.json"));
const pathToPackageJson = joinPathFragments(workspaceRoot, projectRoot, "package.json");
const workspaceRoot = config.workspaceRoot
? config.workspaceRoot
: findWorkspaceRoot();
const workspacePackageJson = readJsonFile(
joinPathFragments(workspaceRoot, "package.json")
);
const pathToPackageJson = joinPathFragments(
workspaceRoot,
projectRoot,
"package.json"
);

// let projectName = projectRoot.replace(config.packageDirectory ?? "", "");
// if (projectName.startsWith("/")) {
Expand All @@ -46,7 +57,9 @@ export const generatePackageJson = async (
// projectName = projectName.substring(-1);
// }

const packageJson: Record<string, any> | undefined = fileExists(pathToPackageJson)
const packageJson: Record<string, any> | undefined = fileExists(
pathToPackageJson
)
? readJsonFile(pathToPackageJson)
: {
name: `@${config.namespace}/${projectName}`,
Expand Down Expand Up @@ -82,43 +95,53 @@ export const generatePackageJson = async (
throw new Error("No project configurations found");
}

const externalDependencies: DependentBuildableProjectNode[] = options.external.reduce(
(ret: DependentBuildableProjectNode[], name: string) => {
if (!packageJson?.devDependencies?.[name]) {
const externalNode = projectGraph?.externalNodes?.[`npm:${name}`];
if (externalNode) {
ret.push({
name,
outputs: [],
node: externalNode
});
const externalDependencies: DependentBuildableProjectNode[] =
options.external.reduce(
(ret: DependentBuildableProjectNode[], name: string) => {
if (!packageJson?.devDependencies?.[name]) {
const externalNode = projectGraph?.externalNodes?.[`npm:${name}`];
if (externalNode) {
ret.push({
name,
outputs: [],
node: externalNode
});
}
}
}

return ret;
},
[]
);
return ret;
},
[]
);

const implicitDependencies = projectsConfigurations.projects?.[projectName]?.implicitDependencies;
const implicitDependencies =
projectsConfigurations.projects?.[projectName]?.implicitDependencies;
const internalDependencies: string[] = [];

if (implicitDependencies && implicitDependencies.length > 0) {
options.external = implicitDependencies.reduce((ret: string[], key: string) => {
writeDebug(config, `⚡ Adding implicit dependency: ${key}`);
options.external = implicitDependencies.reduce(
(ret: string[], key: string) => {
writeDebug(config, `⚡ Adding implicit dependency: ${key}`);

const projectConfig = projectsConfigurations[key];
if (projectConfig?.targets?.build) {
const projectPackageJson = readJsonFile(projectConfig.targets?.build.options.project);
const projectConfig = projectsConfigurations[key];
if (projectConfig?.targets?.build) {
const projectPackageJson = readJsonFile(
projectConfig.targets?.build.options.project
);

if (projectPackageJson?.name && !options.external?.includes(projectPackageJson.name)) {
ret.push(projectPackageJson.name);
internalDependencies.push(projectPackageJson.name);
if (
projectPackageJson?.name &&
!options.external?.includes(projectPackageJson.name)
) {
ret.push(projectPackageJson.name);
internalDependencies.push(projectPackageJson.name);
}
}
}

return ret;
}, options.external);
return ret;
},
options.external
);
}

for (const internalDependency of getInternalDependencies(
Expand All @@ -127,11 +150,12 @@ export const generatePackageJson = async (
)) {
if (
internalDependency?.name &&
config?.externalPackagePatterns?.some((pattern) =>
config?.externalPackagePatterns?.some(pattern =>
internalDependency.name.includes(pattern)
) &&
!externalDependencies?.some(
(externalDependency) => externalDependency.name === internalDependency.name
externalDependency =>
externalDependency.name === internalDependency.name
)
) {
externalDependencies.push({
Expand All @@ -146,14 +170,16 @@ export const generatePackageJson = async (
projectName,
projectGraph as ProjectGraph
)) {
const packageConfig = thirdPartyDependency?.node?.data as DependencyNodeData;
const packageConfig = thirdPartyDependency?.node
?.data as DependencyNodeData;
if (
packageConfig?.packageName &&
config?.externalPackagePatterns?.some((pattern) =>
config?.externalPackagePatterns?.some(pattern =>
packageConfig.packageName.includes(pattern)
) &&
!externalDependencies?.some(
(externalDependency) => externalDependency.name === packageConfig.packageName
externalDependency =>
externalDependency.name === packageConfig.packageName
)
) {
externalDependencies.push(thirdPartyDependency);
Expand All @@ -164,7 +190,7 @@ export const generatePackageJson = async (
config,
`Building with the following dependencies marked as external:
${externalDependencies
.map((dep) => {
.map(dep => {
return `name: ${dep.name}, node: ${dep.node}, outputs: ${dep.outputs}`;
})
.join("\n")}`
Expand All @@ -190,10 +216,14 @@ export const generatePackageJson = async (
if (options.bundle === false) {
packageJson.dependencies = undefined;
for (const externalDependency of externalDependencies) {
const packageConfig = externalDependency?.node?.data as DependencyNodeData;
const packageConfig = externalDependency?.node
?.data as DependencyNodeData;
if (
packageConfig?.packageName &&
!!(projectGraph.externalNodes?.[externalDependency.node.name]?.type === "npm")
!!(
projectGraph.externalNodes?.[externalDependency.node.name]?.type ===
"npm"
)
) {
const { packageName, version } = packageConfig;
if (
Expand All @@ -202,7 +232,9 @@ export const generatePackageJson = async (
!packageJson?.devDependencies?.[packageName]
) {
packageJson.dependencies ??= {};
packageJson.dependencies[packageName] = projectGraph.nodes[externalDependency.node.name]
packageJson.dependencies[packageName] = projectGraph.nodes[
externalDependency.node.name
]
? "latest"
: version;
}
Expand Down Expand Up @@ -239,9 +271,17 @@ export const generatePackageJson = async (
"./package.json": "./package.json"
};

const entryPoints = getEntryPoints(config, projectRoot, sourceRoot, options);
const entryPoints = getEntryPoints(
config,
projectRoot,
sourceRoot,
options
);
for (const entryPoint of entryPoints) {
let formattedEntryPoint = removeExtension(entryPoint).replace(sourceRoot, "");
let formattedEntryPoint = removeExtension(entryPoint).replace(
sourceRoot,
""
);
if (formattedEntryPoint.startsWith(".")) {
formattedEntryPoint = formattedEntryPoint.substring(1);
}
Expand Down Expand Up @@ -342,7 +382,11 @@ export const generatePackageJson = async (
? projectRoot
: joinPathFragments("packages", projectName);

const packageJsonPath = joinPathFragments(workspaceRoot, options.outputPath, "package.json");
const packageJsonPath = joinPathFragments(
workspaceRoot,
options.outputPath,
"package.json"
);

writeDebug(config, `⚡ Writing package.json file to: ${packageJsonPath}`);

Expand Down
24 changes: 12 additions & 12 deletions packages/build-tools/src/utils/get-project-deps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import type {
ProjectGraph,
ProjectGraphDependency,
ProjectGraphExternalNode,
ProjectGraphProjectNode,
ProjectGraphProjectNode
} from "@nx/devkit";
import type { DependentBuildableProjectNode } from "@nx/js/src/utils/buildable-libs-utils";
import type { DependentBuildableProjectNode } from "@nx/js/src/utils/buildable-libs-utils.js";

export function getExtraDependencies(
projectName: string,
graph: ProjectGraph,
graph: ProjectGraph
): DependentBuildableProjectNode[] {
const deps = new Map<string, DependentBuildableProjectNode>();
recur(projectName);
Expand All @@ -24,7 +24,7 @@ export function getExtraDependencies(
}
return acc;
},
[],
[]
) ?? [];
const internalDeps =
allDeps?.reduce(
Expand All @@ -33,14 +33,14 @@ export function getExtraDependencies(
if (found) acc.push(found);
return acc;
},
[],
[]
) ?? [];

for (const externalDep of externalDeps) {
deps.set(externalDep.name, {
name: externalDep.name,
outputs: [],
node: externalDep,
node: externalDep
});
}

Expand All @@ -54,7 +54,7 @@ export function getExtraDependencies(

export function getInternalDependencies(
projectName: string,
graph: ProjectGraph,
graph: ProjectGraph
): ProjectGraphProjectNode[] {
const allDeps = graph.dependencies[projectName] ?? [];

Expand All @@ -65,14 +65,14 @@ export function getInternalDependencies(
if (found) acc.push(found);
return acc;
},
[],
),
[]
)
);
}

export function getExternalDependencies(
projectName: string,
graph: ProjectGraph,
graph: ProjectGraph
): ProjectGraphExternalNode[] {
const allDeps = graph.dependencies[projectName];

Expand All @@ -84,8 +84,8 @@ export function getExternalDependencies(
if (found) acc.push(found);
return acc;
},
[],
) ?? [],
[]
) ?? []
) ?? []
);
}
4 changes: 2 additions & 2 deletions packages/build-tools/src/utils/out-extension.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export const outExtension = ({
format,
format
}: {
format?: string;
}): { js: string; dts: string } => {
Expand All @@ -19,6 +19,6 @@ export const outExtension = ({

return {
js: jsExtension,
dts: dtsExtension,
dts: dtsExtension
};
};
Loading

0 comments on commit e86eff4

Please sign in to comment.