diff --git a/package.json b/package.json index 387f76c7..b0232335 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "dist-list-cmd": "node ./packages/cli/dist/cli.js list --all", "dist-roll-version-dry-run": "node ./packages/cli/dist/cli.js version --git-dry-run", "dist-roll-publish-dry-run": "node ./packages/cli/dist/cli.js publish from-package --git-dry-run", + "dist-roll-publish-alpha-dry-run": "node ./packages/cli/dist/cli.js publish --git-dry-run --exact --include-merged-tags --preid alpha --dist-tag next prerelease", "dist-exec-win": "node ./packages/cli/dist/cli.js exec --scope {@lerna-lite/cli,@lerna-lite/core} -- echo hello from package: %LERNA_PACKAGE_NAME%", "dist-exec-unix": "node ./packages/cli/dist/cli.js exec -- echo hello from package: ${LERNA_PACKAGE_NAME}", "dist-pack-tarball": "node ./packages/cli/dist/cli.js run pack-tarball", diff --git a/packages/core/src/package-graph/package-graph.ts b/packages/core/src/package-graph/package-graph.ts index 621c5300..fb430855 100644 --- a/packages/core/src/package-graph/package-graph.ts +++ b/packages/core/src/package-graph/package-graph.ts @@ -10,9 +10,9 @@ import { NpaResolveResult } from '../models'; * * @extends {Map} */ -export class PackageGraph extends Map { +export class PackageGraph extends Map { /** - * @param {import("@lerna/package").Package[]} packages An array of Packages to build the graph out of. + * @param {Package[]} packages - An array of Packages to build the graph out of. * @param {'allDependencies'|'dependencies'} [graphType] * Pass "dependencies" to create a graph of only dependencies, * excluding the devDependencies that would normally be included. @@ -28,7 +28,6 @@ export class PackageGraph extends Map { localDependencies = 'force'; // eslint-disable-line } - // @ts-ignore super(packages.map((pkg: Package) => [pkg?.name ?? '', new PackageGraphNode(pkg)])); if (packages.length !== this.size) { @@ -127,7 +126,7 @@ export class PackageGraph extends Map { * they depend on. i.e if packageA depended on packageB `graph.addDependencies([packageA])` * would return [packageA, packageB]. * - * @param {import("@lerna/package").Package[]} filteredPackages The packages to include dependencies for. + * @param {Package[]} filteredPackages - The packages to include dependencies for. */ addDependencies(filteredPackages: Package[]) { return this.extendList(filteredPackages, 'localDependencies'); @@ -138,7 +137,7 @@ export class PackageGraph extends Map { * that depend on them. i.e if packageC depended on packageD `graph.addDependents([packageD])` * would return [packageD, packageC]. * - * @param {import("@lerna/package").Package[]} filteredPackages The packages to include dependents for. + * @param {Package[]} filteredPackages - The packages to include dependents for. */ addDependents(filteredPackages: Package[]) { return this.extendList(filteredPackages, 'localDependents'); @@ -149,16 +148,15 @@ export class PackageGraph extends Map { * `PackageGraphNode` property that is a collection of `PackageGraphNode`s. * Returns input packages with any additional packages found by traversing `nodeProp`. * - * @param {import("@lerna/package").Package[]} packageList The list of packages to extend - * @param {'localDependencies'|'localDependents'} nodeProp The property on `PackageGraphNode` used to traverse + * @param {Package[]} packageList - The list of packages to extend + * @param {'localDependencies'|'localDependents'} nodeProp - The property on `PackageGraphNode` used to traverse */ extendList(packageList: Package[], nodeProp: 'localDependencies' | 'localDependents') { // the current list of packages we are expanding using breadth-first-search - const search = new Set(packageList.map(({ name }) => this.get(name))); + const search = new Set(packageList.map(({ name }) => this.get(name) as PackageGraphNode)); // an intermediate list of matched PackageGraphNodes - /** @type {PackageGraphNode[]} */ - const result: PackageGraphNode[] = []; + const result: Array = []; search.forEach((currentNode) => { // anything searched for is always a result @@ -167,7 +165,7 @@ export class PackageGraph extends Map { currentNode[nodeProp].forEach((meta, depName) => { const depNode = this.get(depName); - if (depNode !== currentNode && !search.has(depNode)) { + if (depNode && depNode !== currentNode && !search.has(depNode)) { search.add(depNode); } }); @@ -245,7 +243,7 @@ export class PackageGraph extends Map { const cyclePaths: string[] = []; const nodeToCycle = new Map(); const cycles = new Set(); - const alreadyVisited = new Set(); + const alreadyVisited = new Set(); const walkStack: Array = []; function visits(baseNode, dependentNode) { @@ -259,10 +257,11 @@ export class PackageGraph extends Map { } // Otherwise the same node is checked multiple times which is very wasteful in a large repository - if (alreadyVisited.has(topLevelDependent)) { + const identifier = `${baseNode.name}:${topLevelDependent.name}`; + if (alreadyVisited.has(identifier)) { return; } - alreadyVisited.add(topLevelDependent); + alreadyVisited.add(identifier); if (topLevelDependent === baseNode || (topLevelDependent.isCycle && topLevelDependent.has(baseNode.name))) { const cycle: any = new CyclicPackageGraphNode(); diff --git a/packages/diff/src/diff-command.ts b/packages/diff/src/diff-command.ts index 07390100..39199c83 100644 --- a/packages/diff/src/diff-command.ts +++ b/packages/diff/src/diff-command.ts @@ -1,4 +1,4 @@ -import { Command, CommandType, DiffCommandOption, Package, spawn, ValidationError } from '@lerna-lite/core'; +import { Command, CommandType, DiffCommandOption, PackageGraphNode, spawn, ValidationError } from '@lerna-lite/core'; import { getLastCommit } from './lib/get-last-commit'; import { hasCommit } from './lib/has-commit'; @@ -17,7 +17,7 @@ export class DiffCommand extends Command { } initialize() { - let targetPackage: Package | undefined = undefined; + let targetPackage: PackageGraphNode | undefined = undefined; const packageName = this.options.pkgName; if (packageName) { diff --git a/packages/publish/src/publish-command.ts b/packages/publish/src/publish-command.ts index 840af2c4..cda32887 100644 --- a/packages/publish/src/publish-command.ts +++ b/packages/publish/src/publish-command.ts @@ -563,7 +563,7 @@ export class PublishCommand extends Command { for (const [depName, resolved] of node.localDependencies) { // other canary versions need to be updated, non-canary is a no-op - const depVersion = this.updatesVersions?.get(depName) || this.packageGraph?.get(depName).pkg.version; + const depVersion = this.updatesVersions?.get(depName) || this.packageGraph?.get(depName)!.pkg.version; // it no longer matters if we mutate the shared Package instance node.pkg.updateLocalDependency( @@ -588,7 +588,7 @@ export class PublishCommand extends Command { return pMap(updatesWithLocalLinks, (node: PackageGraphNode) => { for (const [depName, resolved] of node.localDependencies) { // regardless of where the version comes from, we can't publish 'file:../sibling-pkg' specs - const depVersion = this.updatesVersions?.get(depName) || this.packageGraph?.get(depName).pkg.version; + const depVersion = this.updatesVersions?.get(depName) || this.packageGraph?.get(depName)!.pkg.version; // it no longer matters if we mutate the shared Package instance node.pkg.updateLocalDependency( @@ -616,7 +616,7 @@ export class PublishCommand extends Command { // 1. update & bump version of local dependencies for (const [depName, resolved] of node.localDependencies) { - const depVersion = this.updatesVersions?.get(depName) || this.packageGraph?.get(depName).pkg.version; + const depVersion = this.updatesVersions?.get(depName) || this.packageGraph?.get(depName)!.pkg.version; // it no longer matters if we mutate the shared Package instance node.pkg.updateLocalDependency( diff --git a/packages/version/src/version-command.ts b/packages/version/src/version-command.ts index 11658a4a..77763684 100644 --- a/packages/version/src/version-command.ts +++ b/packages/version/src/version-command.ts @@ -451,7 +451,7 @@ export class VersionCommand extends Command { let hasBreakingChange = false; for (const [name, bump] of versions) { - hasBreakingChange = hasBreakingChange || isBreakingChange(this.packageGraph?.get(name).version, bump); + hasBreakingChange = hasBreakingChange || isBreakingChange(this.packageGraph?.get(name)!.version, bump); } if (hasBreakingChange) { @@ -610,7 +610,7 @@ export class VersionCommand extends Command { pkg.set('version', this.updatesVersions?.get(pkg?.name ?? '')); // update pkg dependencies - for (const [depName, resolved] of this.packageGraph?.get(pkg.name).localDependencies) { + for (const [depName, resolved] of this.packageGraph?.get(pkg.name)!.localDependencies) { const depVersion = this.updatesVersions?.get(depName); if (depVersion && resolved.type !== 'directory') {