@pnpm/workspace.projects-filter 1100.0.23 → 1100.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,11 +12,11 @@ export async function filterProjectsBySelectorObjectsFromDir(workspaceDir, proje
12
12
  libc: ['current'],
13
13
  },
14
14
  });
15
- const { allProjectsGraph, selectedProjectsGraph } = await filterProjectsBySelectorObjects(allProjects, projectSelectors, {
15
+ const { allProjectsGraph, selectedProjectsGraph, prodAllProjectsGraph, prodOnlySelectedProjectDirs } = await filterProjectsBySelectorObjects(allProjects, projectSelectors, {
16
16
  linkWorkspacePackages: opts?.linkWorkspacePackages,
17
17
  workspaceDir,
18
18
  changedFilesIgnorePattern: opts?.changedFilesIgnorePattern,
19
19
  });
20
- return { allProjects, allProjectsGraph, selectedProjectsGraph };
20
+ return { allProjects, allProjectsGraph, selectedProjectsGraph, prodAllProjectsGraph, prodOnlySelectedProjectDirs };
21
21
  }
22
22
  //# sourceMappingURL=filterProjectsFromDir.js.map
package/lib/index.d.ts CHANGED
@@ -15,6 +15,8 @@ export interface ReadProjectsResult {
15
15
  allProjects: Project[];
16
16
  allProjectsGraph: ProjectGraph<Project>;
17
17
  selectedProjectsGraph: ProjectGraph<Project>;
18
+ prodAllProjectsGraph?: ProjectGraph<Project>;
19
+ prodOnlySelectedProjectDirs?: ProjectRootDir[];
18
20
  }
19
21
  export interface FilterProjectsOptions {
20
22
  linkWorkspacePackages?: boolean;
@@ -37,6 +39,14 @@ export declare function filterProjectsFromDir(workspaceDir: string, filter: Work
37
39
  export interface FilterProjectsResult<Pkg extends BaseProject> {
38
40
  allProjectsGraph: ProjectGraph<Pkg>;
39
41
  selectedProjectsGraph: ProjectGraph<Pkg>;
42
+ /**
43
+ * The prod-pruned full graph, set when prod-only filters (`--filter-prod`) are
44
+ * used. The recursive-command sorter resolves prod-only selected projects
45
+ * through it so transitive prod dependencies are honored without reintroducing
46
+ * the dev edges the filter dropped.
47
+ */
48
+ prodAllProjectsGraph?: ProjectGraph<Pkg>;
49
+ prodOnlySelectedProjectDirs?: ProjectRootDir[];
40
50
  unmatchedFilters: string[];
41
51
  }
42
52
  export declare function filterProjects<Pkg extends BaseProject>(projects: Pkg[], filter: WorkspaceFilter[], opts: FilterProjectsOptions): Promise<FilterProjectsResult<Pkg>>;
@@ -49,6 +59,8 @@ export declare function filterProjectsBySelectorObjects<Pkg extends BaseProject>
49
59
  }): Promise<{
50
60
  allProjectsGraph: ProjectGraph<Pkg>;
51
61
  selectedProjectsGraph: ProjectGraph<Pkg>;
62
+ prodAllProjectsGraph?: ProjectGraph<Pkg>;
63
+ prodOnlySelectedProjectDirs?: ProjectRootDir[];
52
64
  unmatchedFilters: string[];
53
65
  }>;
54
66
  export declare function filterWorkspaceProjects<Pkg extends BaseProject>(projectsGraph: ProjectGraph<Pkg>, projectSelectors: ProjectSelector[], opts: {
package/lib/index.js CHANGED
@@ -39,21 +39,30 @@ export async function filterProjectsBySelectorObjects(projects, projectSelectors
39
39
  });
40
40
  }
41
41
  let prodFilteredGraph;
42
+ let prodGraph;
42
43
  if (prodProjectSelectors.length > 0) {
43
- const { graph } = createProjectsGraph(projects, { ignoreDevDeps: true, linkWorkspacePackages: opts.linkWorkspacePackages });
44
- prodFilteredGraph = await filterWorkspaceProjects(graph, prodProjectSelectors, {
44
+ prodGraph = createProjectsGraph(projects, { ignoreDevDeps: true, linkWorkspacePackages: opts.linkWorkspacePackages }).graph;
45
+ prodFilteredGraph = await filterWorkspaceProjects(prodGraph, prodProjectSelectors, {
45
46
  workspaceDir: opts.workspaceDir,
46
47
  testPattern: opts.testPattern,
47
48
  changedFilesIgnorePattern: opts.changedFilesIgnorePattern,
48
49
  useGlobDirFiltering: opts.useGlobDirFiltering,
49
50
  });
50
51
  }
52
+ let prodOnlySelectedProjectDirs;
53
+ if (prodFilteredGraph != null) {
54
+ const regularSelectedProjectDirs = new Set(Object.keys(filteredGraph?.selectedProjectsGraph ?? {}));
55
+ prodOnlySelectedProjectDirs = Object.keys(prodFilteredGraph.selectedProjectsGraph)
56
+ .filter((projectDir) => !regularSelectedProjectDirs.has(projectDir));
57
+ }
51
58
  return {
52
59
  allProjectsGraph: graph,
53
60
  selectedProjectsGraph: {
54
61
  ...prodFilteredGraph?.selectedProjectsGraph,
55
62
  ...filteredGraph?.selectedProjectsGraph,
56
63
  },
64
+ prodAllProjectsGraph: prodGraph,
65
+ prodOnlySelectedProjectDirs,
57
66
  unmatchedFilters: [
58
67
  ...(prodFilteredGraph !== undefined ? prodFilteredGraph.unmatchedFilters : []),
59
68
  ...(filteredGraph !== undefined ? filteredGraph.unmatchedFilters : []),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnpm/workspace.projects-filter",
3
- "version": "1100.0.23",
3
+ "version": "1100.0.24",
4
4
  "description": "Filters packages in a workspace",
5
5
  "keywords": [
6
6
  "pnpm",
@@ -33,10 +33,10 @@
33
33
  "micromatch": "^4.0.8",
34
34
  "ramda": "npm:@pnpm/ramda@0.28.1",
35
35
  "@pnpm/config.matcher": "1100.0.1",
36
- "@pnpm/error": "1100.0.1",
36
+ "@pnpm/workspace.projects-graph": "1100.0.21",
37
37
  "@pnpm/workspace.projects-reader": "1101.0.13",
38
- "@pnpm/workspace.projects-graph": "1100.0.20",
39
- "@pnpm/workspace.workspace-manifest-reader": "1100.0.9"
38
+ "@pnpm/workspace.workspace-manifest-reader": "1100.0.9",
39
+ "@pnpm/error": "1100.0.1"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@jest/globals": "30.4.1",
@@ -48,8 +48,8 @@
48
48
  "is-windows": "^1.0.2",
49
49
  "tempy": "3.0.0",
50
50
  "touch": "3.1.1",
51
- "@pnpm/types": "1101.3.2",
52
- "@pnpm/workspace.projects-filter": "1100.0.23"
51
+ "@pnpm/workspace.projects-filter": "1100.0.24",
52
+ "@pnpm/types": "1101.3.2"
53
53
  },
54
54
  "engines": {
55
55
  "node": ">=22.13"