@joshmossas/nx-cargo 0.6.3 → 0.6.5

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.
package/dist/index.cjs CHANGED
@@ -1,12 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  const devkit = require('@nx/devkit');
4
- const fs = require('node:fs');
5
- const cp = require('node:child_process');
6
- const os = require('node:os');
7
- const path = require('node:path');
8
-
9
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
4
+ const cp = require('child_process');
5
+ const os = require('os');
6
+ const path = require('path');
7
+ const fs = require('fs');
10
8
 
11
9
  function _interopNamespaceCompat(e) {
12
10
  if (e && typeof e === 'object' && 'default' in e) return e;
@@ -20,40 +18,47 @@ function _interopNamespaceCompat(e) {
20
18
  return n;
21
19
  }
22
20
 
23
- const fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
24
21
  const cp__namespace = /*#__PURE__*/_interopNamespaceCompat(cp);
25
22
  const os__namespace = /*#__PURE__*/_interopNamespaceCompat(os);
26
23
  const path__namespace = /*#__PURE__*/_interopNamespaceCompat(path);
24
+ const fs__namespace = /*#__PURE__*/_interopNamespaceCompat(fs);
27
25
 
28
26
  function createDependencies(_, ctx) {
29
27
  const allDependencies = [];
30
- const processedWorkspaceRoots = /* @__PURE__ */ new Set();
31
- const cargoConfigPaths = Object.values(ctx.projects).map((p) => path__namespace.join(ctx.workspaceRoot, p.root, "Cargo.toml")).filter((p) => fs__default.existsSync(p));
32
- for (const configPath of cargoConfigPaths) {
33
- const configDir = path__namespace.dirname(configPath);
34
- const metadata = getCargoMetadata(configDir);
35
- if (processedWorkspaceRoots.has(metadata.workspace_root)) {
28
+ const seenManifestPaths = /* @__PURE__ */ new Set();
29
+ const sortedManifests = Object.values(ctx.projects).map((project) => {
30
+ const filepath = path__namespace.resolve(ctx.workspaceRoot, project.root, "Cargo.toml");
31
+ const depth = filepath.split(path__namespace.sep).length;
32
+ return { filepath, depth };
33
+ }).filter((manifest) => fs__namespace.existsSync(manifest.filepath)).sort((a, b) => a.depth - b.depth);
34
+ for (const { filepath } of sortedManifests) {
35
+ if (seenManifestPaths.has(filepath)) {
36
36
  continue;
37
37
  }
38
- processedWorkspaceRoots.add(metadata.workspace_root);
39
- const workspaceDeps = processWorkspaceMetadata(ctx, metadata);
40
- allDependencies.push(...workspaceDeps);
38
+ try {
39
+ const metadata = getCargoMetadata(path__namespace.dirname(filepath));
40
+ for (const pkg of metadata.packages) {
41
+ seenManifestPaths.add(path__namespace.resolve(pkg.manifest_path));
42
+ }
43
+ const workspaceDeps = processWorkspaceMetadata(ctx, metadata);
44
+ allDependencies.push(...workspaceDeps);
45
+ } catch (e) {
46
+ console.warn(
47
+ `[nx-rust] Skipping ${filepath} due to error:`,
48
+ e instanceof Error ? e.message : e
49
+ );
50
+ }
41
51
  }
42
52
  return allDependencies;
43
53
  }
44
54
  function processWorkspaceMetadata(ctx, metadata) {
45
- const {
46
- packages,
47
- workspace_members: cargoWsMembers,
48
- resolve: cargoResolve
49
- } = metadata;
55
+ const { packages, resolve } = metadata;
50
56
  const workspacePackages = /* @__PURE__ */ new Map();
51
- for (const id of cargoWsMembers) {
52
- const pkg = packages.find((p) => p.id === id);
53
- if (pkg) workspacePackages.set(id, pkg);
57
+ for (const pkg of packages) {
58
+ workspacePackages.set(pkg.id, pkg);
54
59
  }
55
60
  const nxData = mapCargoProjects(ctx, workspacePackages);
56
- return cargoResolve.nodes.filter(({ id }) => nxData.has(id)).flatMap(({ id: sourceId, dependencies }) => {
61
+ return (resolve?.nodes ?? []).filter(({ id }) => nxData.has(id)).flatMap(({ id: sourceId, dependencies }) => {
57
62
  const sourceProject = nxData.get(sourceId);
58
63
  const cargoPackage = workspacePackages.get(sourceId);
59
64
  const sourceManifest = path__namespace.relative(ctx.workspaceRoot, cargoPackage.manifest_path).replace(/\\/g, "/");
@@ -65,29 +70,16 @@ function processWorkspaceMetadata(ctx, metadata) {
65
70
  }));
66
71
  });
67
72
  }
68
- function getCargoMetadata(cwd) {
69
- const availableMemory = os__namespace.freemem();
70
- const metadata = cp__namespace.execSync("cargo metadata --format-version=1", {
71
- encoding: "utf8",
72
- maxBuffer: availableMemory,
73
- cwd
74
- // Crucial: run in the workspace directory
75
- });
76
- return JSON.parse(metadata);
77
- }
78
73
  function mapCargoProjects(ctx, packages) {
79
- let result = /* @__PURE__ */ new Map();
80
- for (let [cargoId, cargoPackage] of packages) {
81
- if (!cargoPackage.manifest_path) {
82
- throw new Error("Expected cargo package's `manifest_path` to exist");
83
- }
84
- let manifestDir = path__namespace.dirname(cargoPackage.manifest_path);
85
- let projectDir = path__namespace.relative(ctx.workspaceRoot, manifestDir).replace(/\\/g, "/");
86
- let found = Object.entries(ctx.projects).find(
74
+ const result = /* @__PURE__ */ new Map();
75
+ for (const [cargoId, cargoPackage] of packages) {
76
+ const manifestDir = path__namespace.dirname(cargoPackage.manifest_path);
77
+ const projectDir = path__namespace.relative(ctx.workspaceRoot, manifestDir).replace(/\\/g, "/");
78
+ const found = Object.entries(ctx.projects).find(
87
79
  ([, config]) => config.root === projectDir
88
80
  );
89
81
  if (found) {
90
- let [projectName, projectConfig] = found;
82
+ const [projectName, projectConfig] = found;
91
83
  result.set(cargoId, {
92
84
  ...projectConfig,
93
85
  name: projectName
@@ -96,5 +88,18 @@ function mapCargoProjects(ctx, packages) {
96
88
  }
97
89
  return result;
98
90
  }
91
+ function getCargoMetadata(cwd) {
92
+ const availableMemory = os__namespace.freemem();
93
+ const cmd = "cargo metadata --format-version=1 --no-deps";
94
+ console.info(`[nx-json] Executing: "${cmd}"`);
95
+ const metadata = cp__namespace.execSync("cargo metadata --format-version=1 --no-deps", {
96
+ encoding: "utf8",
97
+ maxBuffer: availableMemory,
98
+ cwd,
99
+ env: { ...process.env },
100
+ stdio: ["ignore", "pipe", "pipe"]
101
+ });
102
+ return JSON.parse(metadata);
103
+ }
99
104
 
100
105
  exports.createDependencies = createDependencies;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,8 @@
1
1
  import { CreateDependenciesContext, RawProjectGraphDependency } from '@nx/devkit';
2
2
 
3
+ /**
4
+ * Main Nx Dependency Creator
5
+ */
3
6
  declare function createDependencies(_: unknown, ctx: CreateDependenciesContext): RawProjectGraphDependency[];
4
7
 
5
8
  export { createDependencies };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,8 @@
1
1
  import { CreateDependenciesContext, RawProjectGraphDependency } from '@nx/devkit';
2
2
 
3
+ /**
4
+ * Main Nx Dependency Creator
5
+ */
3
6
  declare function createDependencies(_: unknown, ctx: CreateDependenciesContext): RawProjectGraphDependency[];
4
7
 
5
8
  export { createDependencies };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import { CreateDependenciesContext, RawProjectGraphDependency } from '@nx/devkit';
2
2
 
3
+ /**
4
+ * Main Nx Dependency Creator
5
+ */
3
6
  declare function createDependencies(_: unknown, ctx: CreateDependenciesContext): RawProjectGraphDependency[];
4
7
 
5
8
  export { createDependencies };
package/dist/index.mjs CHANGED
@@ -1,38 +1,45 @@
1
1
  import { DependencyType } from '@nx/devkit';
2
- import fs from 'node:fs';
3
- import * as cp from 'node:child_process';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
2
+ import * as cp from 'child_process';
3
+ import * as os from 'os';
4
+ import * as path from 'path';
5
+ import * as fs from 'fs';
6
6
 
7
7
  function createDependencies(_, ctx) {
8
8
  const allDependencies = [];
9
- const processedWorkspaceRoots = /* @__PURE__ */ new Set();
10
- const cargoConfigPaths = Object.values(ctx.projects).map((p) => path.join(ctx.workspaceRoot, p.root, "Cargo.toml")).filter((p) => fs.existsSync(p));
11
- for (const configPath of cargoConfigPaths) {
12
- const configDir = path.dirname(configPath);
13
- const metadata = getCargoMetadata(configDir);
14
- if (processedWorkspaceRoots.has(metadata.workspace_root)) {
9
+ const seenManifestPaths = /* @__PURE__ */ new Set();
10
+ const sortedManifests = Object.values(ctx.projects).map((project) => {
11
+ const filepath = path.resolve(ctx.workspaceRoot, project.root, "Cargo.toml");
12
+ const depth = filepath.split(path.sep).length;
13
+ return { filepath, depth };
14
+ }).filter((manifest) => fs.existsSync(manifest.filepath)).sort((a, b) => a.depth - b.depth);
15
+ for (const { filepath } of sortedManifests) {
16
+ if (seenManifestPaths.has(filepath)) {
15
17
  continue;
16
18
  }
17
- processedWorkspaceRoots.add(metadata.workspace_root);
18
- const workspaceDeps = processWorkspaceMetadata(ctx, metadata);
19
- allDependencies.push(...workspaceDeps);
19
+ try {
20
+ const metadata = getCargoMetadata(path.dirname(filepath));
21
+ for (const pkg of metadata.packages) {
22
+ seenManifestPaths.add(path.resolve(pkg.manifest_path));
23
+ }
24
+ const workspaceDeps = processWorkspaceMetadata(ctx, metadata);
25
+ allDependencies.push(...workspaceDeps);
26
+ } catch (e) {
27
+ console.warn(
28
+ `[nx-rust] Skipping ${filepath} due to error:`,
29
+ e instanceof Error ? e.message : e
30
+ );
31
+ }
20
32
  }
21
33
  return allDependencies;
22
34
  }
23
35
  function processWorkspaceMetadata(ctx, metadata) {
24
- const {
25
- packages,
26
- workspace_members: cargoWsMembers,
27
- resolve: cargoResolve
28
- } = metadata;
36
+ const { packages, resolve } = metadata;
29
37
  const workspacePackages = /* @__PURE__ */ new Map();
30
- for (const id of cargoWsMembers) {
31
- const pkg = packages.find((p) => p.id === id);
32
- if (pkg) workspacePackages.set(id, pkg);
38
+ for (const pkg of packages) {
39
+ workspacePackages.set(pkg.id, pkg);
33
40
  }
34
41
  const nxData = mapCargoProjects(ctx, workspacePackages);
35
- return cargoResolve.nodes.filter(({ id }) => nxData.has(id)).flatMap(({ id: sourceId, dependencies }) => {
42
+ return (resolve?.nodes ?? []).filter(({ id }) => nxData.has(id)).flatMap(({ id: sourceId, dependencies }) => {
36
43
  const sourceProject = nxData.get(sourceId);
37
44
  const cargoPackage = workspacePackages.get(sourceId);
38
45
  const sourceManifest = path.relative(ctx.workspaceRoot, cargoPackage.manifest_path).replace(/\\/g, "/");
@@ -44,29 +51,16 @@ function processWorkspaceMetadata(ctx, metadata) {
44
51
  }));
45
52
  });
46
53
  }
47
- function getCargoMetadata(cwd) {
48
- const availableMemory = os.freemem();
49
- const metadata = cp.execSync("cargo metadata --format-version=1", {
50
- encoding: "utf8",
51
- maxBuffer: availableMemory,
52
- cwd
53
- // Crucial: run in the workspace directory
54
- });
55
- return JSON.parse(metadata);
56
- }
57
54
  function mapCargoProjects(ctx, packages) {
58
- let result = /* @__PURE__ */ new Map();
59
- for (let [cargoId, cargoPackage] of packages) {
60
- if (!cargoPackage.manifest_path) {
61
- throw new Error("Expected cargo package's `manifest_path` to exist");
62
- }
63
- let manifestDir = path.dirname(cargoPackage.manifest_path);
64
- let projectDir = path.relative(ctx.workspaceRoot, manifestDir).replace(/\\/g, "/");
65
- let found = Object.entries(ctx.projects).find(
55
+ const result = /* @__PURE__ */ new Map();
56
+ for (const [cargoId, cargoPackage] of packages) {
57
+ const manifestDir = path.dirname(cargoPackage.manifest_path);
58
+ const projectDir = path.relative(ctx.workspaceRoot, manifestDir).replace(/\\/g, "/");
59
+ const found = Object.entries(ctx.projects).find(
66
60
  ([, config]) => config.root === projectDir
67
61
  );
68
62
  if (found) {
69
- let [projectName, projectConfig] = found;
63
+ const [projectName, projectConfig] = found;
70
64
  result.set(cargoId, {
71
65
  ...projectConfig,
72
66
  name: projectName
@@ -75,5 +69,18 @@ function mapCargoProjects(ctx, packages) {
75
69
  }
76
70
  return result;
77
71
  }
72
+ function getCargoMetadata(cwd) {
73
+ const availableMemory = os.freemem();
74
+ const cmd = "cargo metadata --format-version=1 --no-deps";
75
+ console.info(`[nx-json] Executing: "${cmd}"`);
76
+ const metadata = cp.execSync("cargo metadata --format-version=1 --no-deps", {
77
+ encoding: "utf8",
78
+ maxBuffer: availableMemory,
79
+ cwd,
80
+ env: { ...process.env },
81
+ stdio: ["ignore", "pipe", "pipe"]
82
+ });
83
+ return JSON.parse(metadata);
84
+ }
78
85
 
79
86
  export { createDependencies };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@joshmossas/nx-cargo",
3
3
  "private": false,
4
- "version": "0.6.3",
4
+ "version": "0.6.5",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.mjs",
7
7
  "repository": {
@@ -160,10 +160,14 @@ function mapCargoProjects(ctx: Context, packages: Map<CargoId, CargoPackage>) {
160
160
  */
161
161
  function getCargoMetadata(cwd: string): CargoMetadata {
162
162
  const availableMemory = os.freemem();
163
+ const cmd = "cargo metadata --format-version=1 --no-deps";
164
+ console.info(`[nx-json] Executing: "${cmd}"`);
163
165
  const metadata = cp.execSync("cargo metadata --format-version=1 --no-deps", {
164
166
  encoding: "utf8",
165
167
  maxBuffer: availableMemory,
166
168
  cwd: cwd,
169
+ env: { ...process.env },
170
+ stdio: ["ignore", "pipe", "pipe"],
167
171
  });
168
172
 
169
173
  return JSON.parse(metadata);