package-graph-node.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. "use strict";
  2. const semver = require("semver");
  3. const { prereleaseIdFromVersion } = require("@lerna/prerelease-id-from-version");
  4. const PKG = Symbol("pkg");
  5. /**
  6. * A node in a PackageGraph.
  7. */
  8. class PackageGraphNode {
  9. /**
  10. * @param {import("@lerna/package").Package} pkg
  11. */
  12. constructor(pkg) {
  13. this.name = pkg.name;
  14. this[PKG] = pkg;
  15. // omit raw pkg from default util.inspect() output
  16. Object.defineProperty(this, PKG, { enumerable: false });
  17. /** @type {Map<string, import("npm-package-arg").Result>} */
  18. this.externalDependencies = new Map();
  19. /** @type {Map<string, import("npm-package-arg").Result>} */
  20. this.localDependencies = new Map();
  21. /** @type {Map<string, PackageGraphNode>} */
  22. this.localDependents = new Map();
  23. }
  24. get location() {
  25. return this[PKG].location;
  26. }
  27. get pkg() {
  28. return this[PKG];
  29. }
  30. get prereleaseId() {
  31. return prereleaseIdFromVersion(this.version);
  32. }
  33. get version() {
  34. return this[PKG].version;
  35. }
  36. /**
  37. * Determine if the Node satisfies a resolved semver range.
  38. * @see https://github.com/npm/npm-package-arg#result-object
  39. *
  40. * @param {!Result} resolved npm-package-arg Result object
  41. * @returns {Boolean}
  42. */
  43. satisfies({ gitCommittish, gitRange, fetchSpec }) {
  44. return semver.satisfies(this.version, gitCommittish || gitRange || fetchSpec);
  45. }
  46. /**
  47. * Returns a string representation of this node (its name)
  48. *
  49. * @returns {String}
  50. */
  51. toString() {
  52. return this.name;
  53. }
  54. }
  55. module.exports.PackageGraphNode = PackageGraphNode;