@tamagui/static 1.112.23 → 1.112.25-1728362181133
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/check-dep-versions/index.js +1 -0
 - package/dist/check-dep-versions/index.js.map +6 -0
 - package/dist/check-dep-versions/index.native.js +2 -0
 - package/dist/check-dep-versions/index.native.js.map +6 -0
 - package/dist/check-dep-versions.js +391 -0
 - package/dist/check-dep-versions.js.map +6 -0
 - package/dist/check-dep-versions.native.js +605 -0
 - package/dist/check-dep-versions.native.js.map +6 -0
 - package/dist/checkDeps.js +6 -14
 - package/dist/checkDeps.js.map +1 -1
 - package/dist/checkDeps.native.js +6 -14
 - package/dist/checkDeps.native.js.map +2 -2
 - package/dist/extractor/createExtractor.js +2 -2
 - package/dist/extractor/createExtractor.js.map +1 -1
 - package/dist/extractor/createExtractor.native.js +1 -1
 - package/dist/extractor/createExtractor.native.js.map +2 -2
 - package/package.json +15 -14
 - package/src/check-dep-versions.ts +742 -0
 - package/src/checkDeps.ts +10 -5
 - package/src/extractor/createExtractor.ts +2 -2
 - package/types/check-dep-versions.d.ts +37 -0
 - package/types/check-dep-versions.d.ts.map +1 -0
 - package/types/checkDeps.d.ts +1 -2
 - package/types/checkDeps.d.ts.map +1 -1
 
| 
         @@ -0,0 +1,742 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /**
         
     | 
| 
      
 2 
     | 
    
         
            +
             * "license": "MIT",
         
     | 
| 
      
 3 
     | 
    
         
            +
              "author": "Bryan Mishkin",
         
     | 
| 
      
 4 
     | 
    
         
            +
             */
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            import { globSync } from 'fast-glob'
         
     | 
| 
      
 7 
     | 
    
         
            +
            import { load } from 'js-yaml'
         
     | 
| 
      
 8 
     | 
    
         
            +
            import { existsSync, readFileSync } from 'node:fs'
         
     | 
| 
      
 9 
     | 
    
         
            +
            import { join, relative } from 'node:path'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            type PackageJson = {
         
     | 
| 
      
 12 
     | 
    
         
            +
              name?: string
         
     | 
| 
      
 13 
     | 
    
         
            +
              version?: string
         
     | 
| 
      
 14 
     | 
    
         
            +
              dependencies?: Record<string, string>
         
     | 
| 
      
 15 
     | 
    
         
            +
              devDependencies?: Record<string, string>
         
     | 
| 
      
 16 
     | 
    
         
            +
              peerDependencies?: Record<string, string>
         
     | 
| 
      
 17 
     | 
    
         
            +
              optionalDependencies?: Record<string, string>
         
     | 
| 
      
 18 
     | 
    
         
            +
              resolutions?: Record<string, string>
         
     | 
| 
      
 19 
     | 
    
         
            +
              workspaces:
         
     | 
| 
      
 20 
     | 
    
         
            +
                | string[]
         
     | 
| 
      
 21 
     | 
    
         
            +
                | {
         
     | 
| 
      
 22 
     | 
    
         
            +
                    packages?: string
         
     | 
| 
      
 23 
     | 
    
         
            +
                  }
         
     | 
| 
      
 24 
     | 
    
         
            +
            }
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            type DependenciesToVersionsSeen = Map<
         
     | 
| 
      
 27 
     | 
    
         
            +
              string,
         
     | 
| 
      
 28 
     | 
    
         
            +
              { package: Package; version: string; isLocalPackageVersion: boolean }[] // Array can't be readonly since we are adding to it.
         
     | 
| 
      
 29 
     | 
    
         
            +
            >
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            /** A dependency, the versions present of it, and the packages each of those versions are seen in. */
         
     | 
| 
      
 32 
     | 
    
         
            +
            type DependencyAndVersions = {
         
     | 
| 
      
 33 
     | 
    
         
            +
              dependency: string
         
     | 
| 
      
 34 
     | 
    
         
            +
              readonly versions: {
         
     | 
| 
      
 35 
     | 
    
         
            +
                version: string
         
     | 
| 
      
 36 
     | 
    
         
            +
                packages: readonly Package[]
         
     | 
| 
      
 37 
     | 
    
         
            +
              }[]
         
     | 
| 
      
 38 
     | 
    
         
            +
            }
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            /**
         
     | 
| 
      
 41 
     | 
    
         
            +
             * Creates a map of each dependency in the workspace to an array of the packages it is used in.
         
     | 
| 
      
 42 
     | 
    
         
            +
             *
         
     | 
| 
      
 43 
     | 
    
         
            +
             * Example of such a map represented as an object:
         
     | 
| 
      
 44 
     | 
    
         
            +
             *
         
     | 
| 
      
 45 
     | 
    
         
            +
             * {
         
     | 
| 
      
 46 
     | 
    
         
            +
             *  'ember-cli': [
         
     | 
| 
      
 47 
     | 
    
         
            +
             *     { package: Package...'@scope/package1', version: '~3.18.0' },
         
     | 
| 
      
 48 
     | 
    
         
            +
             *     { package: Package...'@scope/package2', version: '~3.18.0' }
         
     | 
| 
      
 49 
     | 
    
         
            +
             *  ]
         
     | 
| 
      
 50 
     | 
    
         
            +
             *  'eslint': [
         
     | 
| 
      
 51 
     | 
    
         
            +
             *     { package: Package...'@scope/package1', version: '^7.0.0' },
         
     | 
| 
      
 52 
     | 
    
         
            +
             *     { package: Package...'@scope/package2', version: '^7.0.0' }
         
     | 
| 
      
 53 
     | 
    
         
            +
             *  ]
         
     | 
| 
      
 54 
     | 
    
         
            +
             * }
         
     | 
| 
      
 55 
     | 
    
         
            +
             */
         
     | 
| 
      
 56 
     | 
    
         
            +
            function calculateVersionsForEachDependency(
         
     | 
| 
      
 57 
     | 
    
         
            +
              packages: readonly Package[],
         
     | 
| 
      
 58 
     | 
    
         
            +
              depType: readonly DEPENDENCY_TYPE[] = DEFAULT_DEP_TYPES
         
     | 
| 
      
 59 
     | 
    
         
            +
            ): DependenciesToVersionsSeen {
         
     | 
| 
      
 60 
     | 
    
         
            +
              const dependenciesToVersionsSeen: DependenciesToVersionsSeen = new Map<
         
     | 
| 
      
 61 
     | 
    
         
            +
                string,
         
     | 
| 
      
 62 
     | 
    
         
            +
                { package: Package; version: string; isLocalPackageVersion: boolean }[]
         
     | 
| 
      
 63 
     | 
    
         
            +
              >()
         
     | 
| 
      
 64 
     | 
    
         
            +
              for (const package_ of packages) {
         
     | 
| 
      
 65 
     | 
    
         
            +
                recordDependencyVersionsForPackageJson(dependenciesToVersionsSeen, package_, depType)
         
     | 
| 
      
 66 
     | 
    
         
            +
              }
         
     | 
| 
      
 67 
     | 
    
         
            +
              return dependenciesToVersionsSeen
         
     | 
| 
      
 68 
     | 
    
         
            +
            }
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            // eslint-disable-next-line complexity
         
     | 
| 
      
 71 
     | 
    
         
            +
            function recordDependencyVersionsForPackageJson(
         
     | 
| 
      
 72 
     | 
    
         
            +
              dependenciesToVersionsSeen: DependenciesToVersionsSeen,
         
     | 
| 
      
 73 
     | 
    
         
            +
              package_: Package,
         
     | 
| 
      
 74 
     | 
    
         
            +
              depType: readonly DEPENDENCY_TYPE[]
         
     | 
| 
      
 75 
     | 
    
         
            +
            ) {
         
     | 
| 
      
 76 
     | 
    
         
            +
              if (package_.packageJson.name && package_.packageJson.version) {
         
     | 
| 
      
 77 
     | 
    
         
            +
                recordDependencyVersion(
         
     | 
| 
      
 78 
     | 
    
         
            +
                  dependenciesToVersionsSeen,
         
     | 
| 
      
 79 
     | 
    
         
            +
                  package_.packageJson.name,
         
     | 
| 
      
 80 
     | 
    
         
            +
                  package_.packageJson.version,
         
     | 
| 
      
 81 
     | 
    
         
            +
                  package_,
         
     | 
| 
      
 82 
     | 
    
         
            +
                  true
         
     | 
| 
      
 83 
     | 
    
         
            +
                )
         
     | 
| 
      
 84 
     | 
    
         
            +
              }
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
              if (
         
     | 
| 
      
 87 
     | 
    
         
            +
                depType.includes(DEPENDENCY_TYPE.dependencies) &&
         
     | 
| 
      
 88 
     | 
    
         
            +
                package_.packageJson.dependencies
         
     | 
| 
      
 89 
     | 
    
         
            +
              ) {
         
     | 
| 
      
 90 
     | 
    
         
            +
                for (const [dependency, dependencyVersion] of Object.entries(
         
     | 
| 
      
 91 
     | 
    
         
            +
                  package_.packageJson.dependencies
         
     | 
| 
      
 92 
     | 
    
         
            +
                )) {
         
     | 
| 
      
 93 
     | 
    
         
            +
                  if (dependencyVersion) {
         
     | 
| 
      
 94 
     | 
    
         
            +
                    recordDependencyVersion(
         
     | 
| 
      
 95 
     | 
    
         
            +
                      dependenciesToVersionsSeen,
         
     | 
| 
      
 96 
     | 
    
         
            +
                      dependency,
         
     | 
| 
      
 97 
     | 
    
         
            +
                      dependencyVersion,
         
     | 
| 
      
 98 
     | 
    
         
            +
                      package_
         
     | 
| 
      
 99 
     | 
    
         
            +
                    )
         
     | 
| 
      
 100 
     | 
    
         
            +
                  }
         
     | 
| 
      
 101 
     | 
    
         
            +
                }
         
     | 
| 
      
 102 
     | 
    
         
            +
              }
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
              if (
         
     | 
| 
      
 105 
     | 
    
         
            +
                depType.includes(DEPENDENCY_TYPE.devDependencies) &&
         
     | 
| 
      
 106 
     | 
    
         
            +
                package_.packageJson.devDependencies
         
     | 
| 
      
 107 
     | 
    
         
            +
              ) {
         
     | 
| 
      
 108 
     | 
    
         
            +
                for (const [dependency, dependencyVersion] of Object.entries(
         
     | 
| 
      
 109 
     | 
    
         
            +
                  package_.packageJson.devDependencies
         
     | 
| 
      
 110 
     | 
    
         
            +
                )) {
         
     | 
| 
      
 111 
     | 
    
         
            +
                  if (dependencyVersion) {
         
     | 
| 
      
 112 
     | 
    
         
            +
                    recordDependencyVersion(
         
     | 
| 
      
 113 
     | 
    
         
            +
                      dependenciesToVersionsSeen,
         
     | 
| 
      
 114 
     | 
    
         
            +
                      dependency,
         
     | 
| 
      
 115 
     | 
    
         
            +
                      dependencyVersion,
         
     | 
| 
      
 116 
     | 
    
         
            +
                      package_
         
     | 
| 
      
 117 
     | 
    
         
            +
                    )
         
     | 
| 
      
 118 
     | 
    
         
            +
                  }
         
     | 
| 
      
 119 
     | 
    
         
            +
                }
         
     | 
| 
      
 120 
     | 
    
         
            +
              }
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
              if (
         
     | 
| 
      
 123 
     | 
    
         
            +
                depType.includes(DEPENDENCY_TYPE.optionalDependencies) &&
         
     | 
| 
      
 124 
     | 
    
         
            +
                package_.packageJson.optionalDependencies
         
     | 
| 
      
 125 
     | 
    
         
            +
              ) {
         
     | 
| 
      
 126 
     | 
    
         
            +
                for (const [dependency, dependencyVersion] of Object.entries(
         
     | 
| 
      
 127 
     | 
    
         
            +
                  package_.packageJson.optionalDependencies
         
     | 
| 
      
 128 
     | 
    
         
            +
                )) {
         
     | 
| 
      
 129 
     | 
    
         
            +
                  if (dependencyVersion) {
         
     | 
| 
      
 130 
     | 
    
         
            +
                    recordDependencyVersion(
         
     | 
| 
      
 131 
     | 
    
         
            +
                      dependenciesToVersionsSeen,
         
     | 
| 
      
 132 
     | 
    
         
            +
                      dependency,
         
     | 
| 
      
 133 
     | 
    
         
            +
                      dependencyVersion,
         
     | 
| 
      
 134 
     | 
    
         
            +
                      package_
         
     | 
| 
      
 135 
     | 
    
         
            +
                    )
         
     | 
| 
      
 136 
     | 
    
         
            +
                  }
         
     | 
| 
      
 137 
     | 
    
         
            +
                }
         
     | 
| 
      
 138 
     | 
    
         
            +
              }
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
              if (
         
     | 
| 
      
 141 
     | 
    
         
            +
                depType.includes(DEPENDENCY_TYPE.peerDependencies) &&
         
     | 
| 
      
 142 
     | 
    
         
            +
                package_.packageJson.peerDependencies
         
     | 
| 
      
 143 
     | 
    
         
            +
              ) {
         
     | 
| 
      
 144 
     | 
    
         
            +
                for (const [dependency, dependencyVersion] of Object.entries(
         
     | 
| 
      
 145 
     | 
    
         
            +
                  package_.packageJson.peerDependencies
         
     | 
| 
      
 146 
     | 
    
         
            +
                )) {
         
     | 
| 
      
 147 
     | 
    
         
            +
                  if (dependencyVersion) {
         
     | 
| 
      
 148 
     | 
    
         
            +
                    recordDependencyVersion(
         
     | 
| 
      
 149 
     | 
    
         
            +
                      dependenciesToVersionsSeen,
         
     | 
| 
      
 150 
     | 
    
         
            +
                      dependency,
         
     | 
| 
      
 151 
     | 
    
         
            +
                      dependencyVersion,
         
     | 
| 
      
 152 
     | 
    
         
            +
                      package_
         
     | 
| 
      
 153 
     | 
    
         
            +
                    )
         
     | 
| 
      
 154 
     | 
    
         
            +
                  }
         
     | 
| 
      
 155 
     | 
    
         
            +
                }
         
     | 
| 
      
 156 
     | 
    
         
            +
              }
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
              if (depType.includes(DEPENDENCY_TYPE.resolutions) && package_.packageJson.resolutions) {
         
     | 
| 
      
 159 
     | 
    
         
            +
                for (const [dependency, dependencyVersion] of Object.entries(
         
     | 
| 
      
 160 
     | 
    
         
            +
                  package_.packageJson.resolutions
         
     | 
| 
      
 161 
     | 
    
         
            +
                )) {
         
     | 
| 
      
 162 
     | 
    
         
            +
                  if (dependencyVersion) {
         
     | 
| 
      
 163 
     | 
    
         
            +
                    recordDependencyVersion(
         
     | 
| 
      
 164 
     | 
    
         
            +
                      dependenciesToVersionsSeen,
         
     | 
| 
      
 165 
     | 
    
         
            +
                      dependency,
         
     | 
| 
      
 166 
     | 
    
         
            +
                      dependencyVersion,
         
     | 
| 
      
 167 
     | 
    
         
            +
                      package_
         
     | 
| 
      
 168 
     | 
    
         
            +
                    )
         
     | 
| 
      
 169 
     | 
    
         
            +
                  }
         
     | 
| 
      
 170 
     | 
    
         
            +
                }
         
     | 
| 
      
 171 
     | 
    
         
            +
              }
         
     | 
| 
      
 172 
     | 
    
         
            +
            }
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
            function recordDependencyVersion(
         
     | 
| 
      
 175 
     | 
    
         
            +
              dependenciesToVersionsSeen: DependenciesToVersionsSeen,
         
     | 
| 
      
 176 
     | 
    
         
            +
              dependency: string,
         
     | 
| 
      
 177 
     | 
    
         
            +
              version: string,
         
     | 
| 
      
 178 
     | 
    
         
            +
              package_: Package,
         
     | 
| 
      
 179 
     | 
    
         
            +
              isLocalPackageVersion = false
         
     | 
| 
      
 180 
     | 
    
         
            +
            ) {
         
     | 
| 
      
 181 
     | 
    
         
            +
              if (!dependenciesToVersionsSeen.has(dependency)) {
         
     | 
| 
      
 182 
     | 
    
         
            +
                dependenciesToVersionsSeen.set(dependency, [])
         
     | 
| 
      
 183 
     | 
    
         
            +
              }
         
     | 
| 
      
 184 
     | 
    
         
            +
              const list = dependenciesToVersionsSeen.get(dependency)
         
     | 
| 
      
 185 
     | 
    
         
            +
              /* istanbul ignore if */
         
     | 
| 
      
 186 
     | 
    
         
            +
              if (list) {
         
     | 
| 
      
 187 
     | 
    
         
            +
                // `list` should always exist at this point, this if statement is just to please TypeScript.
         
     | 
| 
      
 188 
     | 
    
         
            +
                list.push({ package: package_, version, isLocalPackageVersion })
         
     | 
| 
      
 189 
     | 
    
         
            +
              }
         
     | 
| 
      
 190 
     | 
    
         
            +
            }
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
            function calculateDependenciesAndVersions(
         
     | 
| 
      
 193 
     | 
    
         
            +
              dependencyVersions: DependenciesToVersionsSeen
         
     | 
| 
      
 194 
     | 
    
         
            +
            ): readonly DependencyAndVersions[] {
         
     | 
| 
      
 195 
     | 
    
         
            +
              // Loop through all dependencies seen.
         
     | 
| 
      
 196 
     | 
    
         
            +
              return [...dependencyVersions.entries()]
         
     | 
| 
      
 197 
     | 
    
         
            +
                .sort((a, b) => a[0].localeCompare(b[0]))
         
     | 
| 
      
 198 
     | 
    
         
            +
                .flatMap(([dependency, versionObjectsForDep]) => {
         
     | 
| 
      
 199 
     | 
    
         
            +
                  /* istanbul ignore if */
         
     | 
| 
      
 200 
     | 
    
         
            +
                  if (!versionObjectsForDep) {
         
     | 
| 
      
 201 
     | 
    
         
            +
                    // Should always exist at this point, this if statement is just to please TypeScript.
         
     | 
| 
      
 202 
     | 
    
         
            +
                    return []
         
     | 
| 
      
 203 
     | 
    
         
            +
                  }
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
                  // Check what versions we have seen for this dependency.
         
     | 
| 
      
 206 
     | 
    
         
            +
                  let versions = versionObjectsForDep
         
     | 
| 
      
 207 
     | 
    
         
            +
                    .filter((versionObject) => !versionObject.isLocalPackageVersion)
         
     | 
| 
      
 208 
     | 
    
         
            +
                    .map((versionObject) => versionObject.version)
         
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
      
 210 
     | 
    
         
            +
                  // Check if this dependency is a local package.
         
     | 
| 
      
 211 
     | 
    
         
            +
                  const localPackageVersions = versionObjectsForDep
         
     | 
| 
      
 212 
     | 
    
         
            +
                    .filter((versionObject) => versionObject.isLocalPackageVersion)
         
     | 
| 
      
 213 
     | 
    
         
            +
                    .map((versionObject) => versionObject.version)
         
     | 
| 
      
 214 
     | 
    
         
            +
                  const allVersionsHaveWorkspacePrefix = versions.every((version) =>
         
     | 
| 
      
 215 
     | 
    
         
            +
                    version.startsWith('workspace:')
         
     | 
| 
      
 216 
     | 
    
         
            +
                  )
         
     | 
| 
      
 217 
     | 
    
         
            +
                  const hasIncompatibilityWithLocalPackageVersion = versions.some(
         
     | 
| 
      
 218 
     | 
    
         
            +
                    (version) => localPackageVersions[0] !== version
         
     | 
| 
      
 219 
     | 
    
         
            +
                  )
         
     | 
| 
      
 220 
     | 
    
         
            +
                  if (
         
     | 
| 
      
 221 
     | 
    
         
            +
                    localPackageVersions.length === 1 &&
         
     | 
| 
      
 222 
     | 
    
         
            +
                    !allVersionsHaveWorkspacePrefix &&
         
     | 
| 
      
 223 
     | 
    
         
            +
                    hasIncompatibilityWithLocalPackageVersion
         
     | 
| 
      
 224 
     | 
    
         
            +
                  ) {
         
     | 
| 
      
 225 
     | 
    
         
            +
                    // If we saw a version for this dependency that isn't compatible with its actual local package version, add the local package version to the list of versions seen.
         
     | 
| 
      
 226 
     | 
    
         
            +
                    // Note that using the `workspace:` prefix to refer to the local package version is allowed.
         
     | 
| 
      
 227 
     | 
    
         
            +
                    versions = [...versions, ...localPackageVersions]
         
     | 
| 
      
 228 
     | 
    
         
            +
                  }
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
                  // Calculate unique versions seen for this dependency.
         
     | 
| 
      
 231 
     | 
    
         
            +
                  const uniqueVersions = [...new Set(versions)]
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
      
 233 
     | 
    
         
            +
                  const uniqueVersionsWithInfo = versionsObjectsWithSortedPackages(
         
     | 
| 
      
 234 
     | 
    
         
            +
                    uniqueVersions,
         
     | 
| 
      
 235 
     | 
    
         
            +
                    versionObjectsForDep
         
     | 
| 
      
 236 
     | 
    
         
            +
                  )
         
     | 
| 
      
 237 
     | 
    
         
            +
                  return {
         
     | 
| 
      
 238 
     | 
    
         
            +
                    dependency,
         
     | 
| 
      
 239 
     | 
    
         
            +
                    versions: uniqueVersionsWithInfo,
         
     | 
| 
      
 240 
     | 
    
         
            +
                  }
         
     | 
| 
      
 241 
     | 
    
         
            +
                })
         
     | 
| 
      
 242 
     | 
    
         
            +
            }
         
     | 
| 
      
 243 
     | 
    
         
            +
             
     | 
| 
      
 244 
     | 
    
         
            +
            function versionsObjectsWithSortedPackages(
         
     | 
| 
      
 245 
     | 
    
         
            +
              versions: readonly string[],
         
     | 
| 
      
 246 
     | 
    
         
            +
              versionObjects: readonly {
         
     | 
| 
      
 247 
     | 
    
         
            +
                package: Package
         
     | 
| 
      
 248 
     | 
    
         
            +
                version: string
         
     | 
| 
      
 249 
     | 
    
         
            +
                isLocalPackageVersion: boolean
         
     | 
| 
      
 250 
     | 
    
         
            +
              }[]
         
     | 
| 
      
 251 
     | 
    
         
            +
            ) {
         
     | 
| 
      
 252 
     | 
    
         
            +
              return versions.map((version) => {
         
     | 
| 
      
 253 
     | 
    
         
            +
                const matchingVersionObjects = versionObjects.filter(
         
     | 
| 
      
 254 
     | 
    
         
            +
                  (versionObject) => versionObject.version === version
         
     | 
| 
      
 255 
     | 
    
         
            +
                )
         
     | 
| 
      
 256 
     | 
    
         
            +
                return {
         
     | 
| 
      
 257 
     | 
    
         
            +
                  version,
         
     | 
| 
      
 258 
     | 
    
         
            +
                  packages: matchingVersionObjects
         
     | 
| 
      
 259 
     | 
    
         
            +
                    .map((object) => object.package)
         
     | 
| 
      
 260 
     | 
    
         
            +
                    .sort((a, b) => Package.comparator(a, b)),
         
     | 
| 
      
 261 
     | 
    
         
            +
                }
         
     | 
| 
      
 262 
     | 
    
         
            +
              })
         
     | 
| 
      
 263 
     | 
    
         
            +
            }
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
            const HARDCODED_IGNORED_DEPENDENCIES = new Set([
         
     | 
| 
      
 266 
     | 
    
         
            +
              '//', // May be used to add comments to package.json files.
         
     | 
| 
      
 267 
     | 
    
         
            +
            ])
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
            function filterOutIgnoredDependencies(
         
     | 
| 
      
 270 
     | 
    
         
            +
              mismatchingVersions: readonly DependencyAndVersions[],
         
     | 
| 
      
 271 
     | 
    
         
            +
              ignoredDependencies: readonly string[],
         
     | 
| 
      
 272 
     | 
    
         
            +
              includedDependencyPatterns: readonly RegExp[]
         
     | 
| 
      
 273 
     | 
    
         
            +
            ): readonly DependencyAndVersions[] {
         
     | 
| 
      
 274 
     | 
    
         
            +
              for (const ignoreDependency of ignoredDependencies) {
         
     | 
| 
      
 275 
     | 
    
         
            +
                if (
         
     | 
| 
      
 276 
     | 
    
         
            +
                  !mismatchingVersions.some(
         
     | 
| 
      
 277 
     | 
    
         
            +
                    (mismatchingVersion) => mismatchingVersion.dependency === ignoreDependency
         
     | 
| 
      
 278 
     | 
    
         
            +
                  )
         
     | 
| 
      
 279 
     | 
    
         
            +
                ) {
         
     | 
| 
      
 280 
     | 
    
         
            +
                  throw new Error(
         
     | 
| 
      
 281 
     | 
    
         
            +
                    `Specified option '--ignore-dep ${ignoreDependency}', but no version mismatches detected for this dependency.`
         
     | 
| 
      
 282 
     | 
    
         
            +
                  )
         
     | 
| 
      
 283 
     | 
    
         
            +
                }
         
     | 
| 
      
 284 
     | 
    
         
            +
              }
         
     | 
| 
      
 285 
     | 
    
         
            +
             
     | 
| 
      
 286 
     | 
    
         
            +
              if (
         
     | 
| 
      
 287 
     | 
    
         
            +
                ignoredDependencies.length > 0 ||
         
     | 
| 
      
 288 
     | 
    
         
            +
                includedDependencyPatterns.length > 0 ||
         
     | 
| 
      
 289 
     | 
    
         
            +
                mismatchingVersions.some((mismatchingVersion) =>
         
     | 
| 
      
 290 
     | 
    
         
            +
                  HARDCODED_IGNORED_DEPENDENCIES.has(mismatchingVersion.dependency)
         
     | 
| 
      
 291 
     | 
    
         
            +
                )
         
     | 
| 
      
 292 
     | 
    
         
            +
              ) {
         
     | 
| 
      
 293 
     | 
    
         
            +
                return mismatchingVersions.filter(
         
     | 
| 
      
 294 
     | 
    
         
            +
                  (mismatchingVersion) =>
         
     | 
| 
      
 295 
     | 
    
         
            +
                    !ignoredDependencies.includes(mismatchingVersion.dependency) &&
         
     | 
| 
      
 296 
     | 
    
         
            +
                    includedDependencyPatterns.some((ignoreDependencyPattern) =>
         
     | 
| 
      
 297 
     | 
    
         
            +
                      mismatchingVersion.dependency.match(ignoreDependencyPattern)
         
     | 
| 
      
 298 
     | 
    
         
            +
                    ) &&
         
     | 
| 
      
 299 
     | 
    
         
            +
                    !HARDCODED_IGNORED_DEPENDENCIES.has(mismatchingVersion.dependency)
         
     | 
| 
      
 300 
     | 
    
         
            +
                )
         
     | 
| 
      
 301 
     | 
    
         
            +
              }
         
     | 
| 
      
 302 
     | 
    
         
            +
             
     | 
| 
      
 303 
     | 
    
         
            +
              return mismatchingVersions
         
     | 
| 
      
 304 
     | 
    
         
            +
            }
         
     | 
| 
      
 305 
     | 
    
         
            +
             
     | 
| 
      
 306 
     | 
    
         
            +
            function getPackages(
         
     | 
| 
      
 307 
     | 
    
         
            +
              root: string,
         
     | 
| 
      
 308 
     | 
    
         
            +
              ignorePackages: readonly string[],
         
     | 
| 
      
 309 
     | 
    
         
            +
              ignorePackagePatterns: readonly RegExp[],
         
     | 
| 
      
 310 
     | 
    
         
            +
              ignorePaths: readonly string[],
         
     | 
| 
      
 311 
     | 
    
         
            +
              ignorePathPatterns: readonly RegExp[]
         
     | 
| 
      
 312 
     | 
    
         
            +
            ): readonly Package[] {
         
     | 
| 
      
 313 
     | 
    
         
            +
              // Check for some error cases first.
         
     | 
| 
      
 314 
     | 
    
         
            +
              if (!Package.exists(root)) {
         
     | 
| 
      
 315 
     | 
    
         
            +
                throw new Error('No package.json found at provided path.')
         
     | 
| 
      
 316 
     | 
    
         
            +
              }
         
     | 
| 
      
 317 
     | 
    
         
            +
              const package_ = new Package(root, root)
         
     | 
| 
      
 318 
     | 
    
         
            +
              if (package_.workspacePatterns.length === 0) {
         
     | 
| 
      
 319 
     | 
    
         
            +
                throw new Error('Package at provided path has no workspaces specified.')
         
     | 
| 
      
 320 
     | 
    
         
            +
              }
         
     | 
| 
      
 321 
     | 
    
         
            +
             
     | 
| 
      
 322 
     | 
    
         
            +
              const packages = accumulatePackages(root, ['.'])
         
     | 
| 
      
 323 
     | 
    
         
            +
             
     | 
| 
      
 324 
     | 
    
         
            +
              for (const ignoredPackage of ignorePackages) {
         
     | 
| 
      
 325 
     | 
    
         
            +
                if (
         
     | 
| 
      
 326 
     | 
    
         
            +
                  !Package.some(packages, (package_) => package_.name === ignoredPackage) // eslint-disable-line unicorn/no-array-method-this-argument,unicorn/no-array-callback-reference -- false positive
         
     | 
| 
      
 327 
     | 
    
         
            +
                ) {
         
     | 
| 
      
 328 
     | 
    
         
            +
                  throw new Error(
         
     | 
| 
      
 329 
     | 
    
         
            +
                    `Specified option '--ignore-package ${ignoredPackage}', but no such package detected in workspace.`
         
     | 
| 
      
 330 
     | 
    
         
            +
                  )
         
     | 
| 
      
 331 
     | 
    
         
            +
                }
         
     | 
| 
      
 332 
     | 
    
         
            +
              }
         
     | 
| 
      
 333 
     | 
    
         
            +
             
     | 
| 
      
 334 
     | 
    
         
            +
              for (const ignoredPackagePattern of ignorePackagePatterns) {
         
     | 
| 
      
 335 
     | 
    
         
            +
                if (
         
     | 
| 
      
 336 
     | 
    
         
            +
                  // eslint-disable-next-line unicorn/no-array-method-this-argument,unicorn/no-array-callback-reference -- false positive
         
     | 
| 
      
 337 
     | 
    
         
            +
                  !Package.some(packages, (package_) => ignoredPackagePattern.test(package_.name))
         
     | 
| 
      
 338 
     | 
    
         
            +
                ) {
         
     | 
| 
      
 339 
     | 
    
         
            +
                  throw new Error(
         
     | 
| 
      
 340 
     | 
    
         
            +
                    `Specified option '--ignore-package-pattern ${String(
         
     | 
| 
      
 341 
     | 
    
         
            +
                      ignoredPackagePattern
         
     | 
| 
      
 342 
     | 
    
         
            +
                    )}', but no matching packages detected in workspace.`
         
     | 
| 
      
 343 
     | 
    
         
            +
                  )
         
     | 
| 
      
 344 
     | 
    
         
            +
                }
         
     | 
| 
      
 345 
     | 
    
         
            +
              }
         
     | 
| 
      
 346 
     | 
    
         
            +
             
     | 
| 
      
 347 
     | 
    
         
            +
              for (const ignoredPath of ignorePaths) {
         
     | 
| 
      
 348 
     | 
    
         
            +
                if (
         
     | 
| 
      
 349 
     | 
    
         
            +
                  // eslint-disable-next-line unicorn/no-array-method-this-argument,unicorn/no-array-callback-reference -- false positive
         
     | 
| 
      
 350 
     | 
    
         
            +
                  !Package.some(packages, (package_) => package_.pathRelative.includes(ignoredPath))
         
     | 
| 
      
 351 
     | 
    
         
            +
                ) {
         
     | 
| 
      
 352 
     | 
    
         
            +
                  throw new Error(
         
     | 
| 
      
 353 
     | 
    
         
            +
                    `Specified option '--ignore-path ${ignoredPath}', but no matching paths detected in workspace.`
         
     | 
| 
      
 354 
     | 
    
         
            +
                  )
         
     | 
| 
      
 355 
     | 
    
         
            +
                }
         
     | 
| 
      
 356 
     | 
    
         
            +
              }
         
     | 
| 
      
 357 
     | 
    
         
            +
             
     | 
| 
      
 358 
     | 
    
         
            +
              for (const ignoredPathPattern of ignorePathPatterns) {
         
     | 
| 
      
 359 
     | 
    
         
            +
                if (
         
     | 
| 
      
 360 
     | 
    
         
            +
                  // eslint-disable-next-line unicorn/no-array-method-this-argument,unicorn/no-array-callback-reference -- false positive
         
     | 
| 
      
 361 
     | 
    
         
            +
                  !Package.some(packages, (package_) =>
         
     | 
| 
      
 362 
     | 
    
         
            +
                    ignoredPathPattern.test(package_.pathRelative)
         
     | 
| 
      
 363 
     | 
    
         
            +
                  )
         
     | 
| 
      
 364 
     | 
    
         
            +
                ) {
         
     | 
| 
      
 365 
     | 
    
         
            +
                  throw new Error(
         
     | 
| 
      
 366 
     | 
    
         
            +
                    `Specified option '--ignore-path-pattern ${String(
         
     | 
| 
      
 367 
     | 
    
         
            +
                      ignoredPathPattern
         
     | 
| 
      
 368 
     | 
    
         
            +
                    )}', but no matching paths detected in workspace.`
         
     | 
| 
      
 369 
     | 
    
         
            +
                  )
         
     | 
| 
      
 370 
     | 
    
         
            +
                }
         
     | 
| 
      
 371 
     | 
    
         
            +
              }
         
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
      
 373 
     | 
    
         
            +
              if (
         
     | 
| 
      
 374 
     | 
    
         
            +
                ignorePackages.length > 0 ||
         
     | 
| 
      
 375 
     | 
    
         
            +
                ignorePackagePatterns.length > 0 ||
         
     | 
| 
      
 376 
     | 
    
         
            +
                ignorePaths.length > 0 ||
         
     | 
| 
      
 377 
     | 
    
         
            +
                ignorePathPatterns.length > 0
         
     | 
| 
      
 378 
     | 
    
         
            +
              ) {
         
     | 
| 
      
 379 
     | 
    
         
            +
                return packages.filter(
         
     | 
| 
      
 380 
     | 
    
         
            +
                  (package_) =>
         
     | 
| 
      
 381 
     | 
    
         
            +
                    !ignorePackages.includes(package_.name) &&
         
     | 
| 
      
 382 
     | 
    
         
            +
                    !ignorePackagePatterns.some((ignorePackagePattern) =>
         
     | 
| 
      
 383 
     | 
    
         
            +
                      package_.name.match(ignorePackagePattern)
         
     | 
| 
      
 384 
     | 
    
         
            +
                    ) &&
         
     | 
| 
      
 385 
     | 
    
         
            +
                    !ignorePaths.some((ignorePath) => package_.pathRelative.includes(ignorePath)) &&
         
     | 
| 
      
 386 
     | 
    
         
            +
                    !ignorePathPatterns.some((ignorePathPattern) =>
         
     | 
| 
      
 387 
     | 
    
         
            +
                      package_.pathRelative.match(ignorePathPattern)
         
     | 
| 
      
 388 
     | 
    
         
            +
                    )
         
     | 
| 
      
 389 
     | 
    
         
            +
                )
         
     | 
| 
      
 390 
     | 
    
         
            +
              }
         
     | 
| 
      
 391 
     | 
    
         
            +
             
     | 
| 
      
 392 
     | 
    
         
            +
              return packages
         
     | 
| 
      
 393 
     | 
    
         
            +
            }
         
     | 
| 
      
 394 
     | 
    
         
            +
             
     | 
| 
      
 395 
     | 
    
         
            +
            // Expand workspace globs into concrete paths.
         
     | 
| 
      
 396 
     | 
    
         
            +
            function expandWorkspaces(
         
     | 
| 
      
 397 
     | 
    
         
            +
              root: string,
         
     | 
| 
      
 398 
     | 
    
         
            +
              workspacePatterns: readonly string[]
         
     | 
| 
      
 399 
     | 
    
         
            +
            ): readonly string[] {
         
     | 
| 
      
 400 
     | 
    
         
            +
              return workspacePatterns.flatMap((workspace) => {
         
     | 
| 
      
 401 
     | 
    
         
            +
                if (!workspace.includes('*')) {
         
     | 
| 
      
 402 
     | 
    
         
            +
                  return [workspace]
         
     | 
| 
      
 403 
     | 
    
         
            +
                }
         
     | 
| 
      
 404 
     | 
    
         
            +
                // Use cwd instead of passing join()'d paths to globby for Windows support: https://github.com/micromatch/micromatch/blob/34f44b4f57eacbdbcc74f64252e0845cf44bbdbd/README.md?plain=1#L822
         
     | 
| 
      
 405 
     | 
    
         
            +
                // Ignore any node_modules that may be present due to the use of nohoist.
         
     | 
| 
      
 406 
     | 
    
         
            +
                return globSync(workspace, {
         
     | 
| 
      
 407 
     | 
    
         
            +
                  onlyDirectories: true,
         
     | 
| 
      
 408 
     | 
    
         
            +
                  cwd: root,
         
     | 
| 
      
 409 
     | 
    
         
            +
                  ignore: ['**/node_modules'],
         
     | 
| 
      
 410 
     | 
    
         
            +
                })
         
     | 
| 
      
 411 
     | 
    
         
            +
              })
         
     | 
| 
      
 412 
     | 
    
         
            +
            }
         
     | 
| 
      
 413 
     | 
    
         
            +
             
     | 
| 
      
 414 
     | 
    
         
            +
            // Recursively collect packages from a workspace.
         
     | 
| 
      
 415 
     | 
    
         
            +
            function accumulatePackages(root: string, paths: readonly string[]): readonly Package[] {
         
     | 
| 
      
 416 
     | 
    
         
            +
              const results: Package[] = []
         
     | 
| 
      
 417 
     | 
    
         
            +
              for (const relativePath of paths) {
         
     | 
| 
      
 418 
     | 
    
         
            +
                const path = join(root, relativePath)
         
     | 
| 
      
 419 
     | 
    
         
            +
                if (Package.exists(path)) {
         
     | 
| 
      
 420 
     | 
    
         
            +
                  const package_ = new Package(path, root)
         
     | 
| 
      
 421 
     | 
    
         
            +
                  results.push(
         
     | 
| 
      
 422 
     | 
    
         
            +
                    // Add the current package.
         
     | 
| 
      
 423 
     | 
    
         
            +
                    package_,
         
     | 
| 
      
 424 
     | 
    
         
            +
                    // Recursively add any nested workspace packages that might exist here.
         
     | 
| 
      
 425 
     | 
    
         
            +
                    // This package is the new root.
         
     | 
| 
      
 426 
     | 
    
         
            +
                    ...accumulatePackages(path, expandWorkspaces(path, package_.workspacePatterns))
         
     | 
| 
      
 427 
     | 
    
         
            +
                  )
         
     | 
| 
      
 428 
     | 
    
         
            +
                }
         
     | 
| 
      
 429 
     | 
    
         
            +
              }
         
     | 
| 
      
 430 
     | 
    
         
            +
              return results
         
     | 
| 
      
 431 
     | 
    
         
            +
            }
         
     | 
| 
      
 432 
     | 
    
         
            +
             
     | 
| 
      
 433 
     | 
    
         
            +
            /*
         
     | 
| 
      
 434 
     | 
    
         
            +
             * Class to represent all of the information we need to know about a package in a workspace.
         
     | 
| 
      
 435 
     | 
    
         
            +
             */
         
     | 
| 
      
 436 
     | 
    
         
            +
            class Package {
         
     | 
| 
      
 437 
     | 
    
         
            +
              /** Absolute path to package */
         
     | 
| 
      
 438 
     | 
    
         
            +
              path: string
         
     | 
| 
      
 439 
     | 
    
         
            +
              /** Absolute path to workspace.*/
         
     | 
| 
      
 440 
     | 
    
         
            +
              pathWorkspace: string
         
     | 
| 
      
 441 
     | 
    
         
            +
              /** Absolute path to package.json. */
         
     | 
| 
      
 442 
     | 
    
         
            +
              pathPackageJson: string
         
     | 
| 
      
 443 
     | 
    
         
            +
              packageJson: PackageJson
         
     | 
| 
      
 444 
     | 
    
         
            +
              packageJsonEndsInNewline: boolean
         
     | 
| 
      
 445 
     | 
    
         
            +
              pnpmWorkspacePackages?: readonly string[]
         
     | 
| 
      
 446 
     | 
    
         
            +
             
     | 
| 
      
 447 
     | 
    
         
            +
              constructor(path: string, pathWorkspace: string) {
         
     | 
| 
      
 448 
     | 
    
         
            +
                this.path = path
         
     | 
| 
      
 449 
     | 
    
         
            +
                this.pathWorkspace = pathWorkspace
         
     | 
| 
      
 450 
     | 
    
         
            +
             
     | 
| 
      
 451 
     | 
    
         
            +
                // package.json
         
     | 
| 
      
 452 
     | 
    
         
            +
                this.pathPackageJson = join(path, 'package.json')
         
     | 
| 
      
 453 
     | 
    
         
            +
                const packageJsonContents = readFileSync(this.pathPackageJson, 'utf8')
         
     | 
| 
      
 454 
     | 
    
         
            +
                this.packageJsonEndsInNewline = packageJsonContents.endsWith('\n')
         
     | 
| 
      
 455 
     | 
    
         
            +
                this.packageJson = JSON.parse(packageJsonContents) as PackageJson
         
     | 
| 
      
 456 
     | 
    
         
            +
             
     | 
| 
      
 457 
     | 
    
         
            +
                // pnpm-workspace.yaml
         
     | 
| 
      
 458 
     | 
    
         
            +
                const pnpmWorkspacePath = join(path, 'pnpm-workspace.yaml')
         
     | 
| 
      
 459 
     | 
    
         
            +
                if (existsSync(pnpmWorkspacePath)) {
         
     | 
| 
      
 460 
     | 
    
         
            +
                  const pnpmWorkspaceContents = readFileSync(pnpmWorkspacePath, 'utf8')
         
     | 
| 
      
 461 
     | 
    
         
            +
                  const pnpmWorkspaceYaml = load(pnpmWorkspaceContents) as {
         
     | 
| 
      
 462 
     | 
    
         
            +
                    packages?: readonly string[]
         
     | 
| 
      
 463 
     | 
    
         
            +
                  }
         
     | 
| 
      
 464 
     | 
    
         
            +
                  this.pnpmWorkspacePackages = pnpmWorkspaceYaml.packages
         
     | 
| 
      
 465 
     | 
    
         
            +
                }
         
     | 
| 
      
 466 
     | 
    
         
            +
              }
         
     | 
| 
      
 467 
     | 
    
         
            +
             
     | 
| 
      
 468 
     | 
    
         
            +
              get name(): string {
         
     | 
| 
      
 469 
     | 
    
         
            +
                if (this.workspacePatterns.length > 0 && !this.packageJson.name) {
         
     | 
| 
      
 470 
     | 
    
         
            +
                  return '(Root)'
         
     | 
| 
      
 471 
     | 
    
         
            +
                }
         
     | 
| 
      
 472 
     | 
    
         
            +
                if (!this.packageJson.name) {
         
     | 
| 
      
 473 
     | 
    
         
            +
                  throw new Error(`${this.pathPackageJson} missing \`name\``)
         
     | 
| 
      
 474 
     | 
    
         
            +
                }
         
     | 
| 
      
 475 
     | 
    
         
            +
                return this.packageJson.name
         
     | 
| 
      
 476 
     | 
    
         
            +
              }
         
     | 
| 
      
 477 
     | 
    
         
            +
             
     | 
| 
      
 478 
     | 
    
         
            +
              /** Relative to workspace root. */
         
     | 
| 
      
 479 
     | 
    
         
            +
              get pathRelative(): string {
         
     | 
| 
      
 480 
     | 
    
         
            +
                return relative(this.pathWorkspace, this.path)
         
     | 
| 
      
 481 
     | 
    
         
            +
              }
         
     | 
| 
      
 482 
     | 
    
         
            +
             
     | 
| 
      
 483 
     | 
    
         
            +
              get workspacePatterns(): readonly string[] {
         
     | 
| 
      
 484 
     | 
    
         
            +
                if (this.packageJson.workspaces) {
         
     | 
| 
      
 485 
     | 
    
         
            +
                  if (Array.isArray(this.packageJson.workspaces)) {
         
     | 
| 
      
 486 
     | 
    
         
            +
                    return this.packageJson.workspaces
         
     | 
| 
      
 487 
     | 
    
         
            +
                  } else if (this.packageJson.workspaces.packages) {
         
     | 
| 
      
 488 
     | 
    
         
            +
                    if (!Array.isArray(this.packageJson.workspaces.packages)) {
         
     | 
| 
      
 489 
     | 
    
         
            +
                      throw new TypeError('package.json `workspaces.packages` is not a string array.')
         
     | 
| 
      
 490 
     | 
    
         
            +
                    }
         
     | 
| 
      
 491 
     | 
    
         
            +
                    return this.packageJson.workspaces.packages
         
     | 
| 
      
 492 
     | 
    
         
            +
                  } else {
         
     | 
| 
      
 493 
     | 
    
         
            +
                    throw new TypeError('package.json `workspaces` is not a string array.')
         
     | 
| 
      
 494 
     | 
    
         
            +
                  }
         
     | 
| 
      
 495 
     | 
    
         
            +
                }
         
     | 
| 
      
 496 
     | 
    
         
            +
             
     | 
| 
      
 497 
     | 
    
         
            +
                if (this.pnpmWorkspacePackages) {
         
     | 
| 
      
 498 
     | 
    
         
            +
                  if (!Array.isArray(this.pnpmWorkspacePackages)) {
         
     | 
| 
      
 499 
     | 
    
         
            +
                    throw new TypeError('pnpm-workspace.yaml `packages` is not a string array.')
         
     | 
| 
      
 500 
     | 
    
         
            +
                  }
         
     | 
| 
      
 501 
     | 
    
         
            +
                  return this.pnpmWorkspacePackages
         
     | 
| 
      
 502 
     | 
    
         
            +
                }
         
     | 
| 
      
 503 
     | 
    
         
            +
             
     | 
| 
      
 504 
     | 
    
         
            +
                return []
         
     | 
| 
      
 505 
     | 
    
         
            +
              }
         
     | 
| 
      
 506 
     | 
    
         
            +
             
     | 
| 
      
 507 
     | 
    
         
            +
              static exists(path: string): boolean {
         
     | 
| 
      
 508 
     | 
    
         
            +
                const packageJsonPath = join(path, 'package.json')
         
     | 
| 
      
 509 
     | 
    
         
            +
                return existsSync(packageJsonPath)
         
     | 
| 
      
 510 
     | 
    
         
            +
              }
         
     | 
| 
      
 511 
     | 
    
         
            +
             
     | 
| 
      
 512 
     | 
    
         
            +
              static some(
         
     | 
| 
      
 513 
     | 
    
         
            +
                packages: readonly Package[],
         
     | 
| 
      
 514 
     | 
    
         
            +
                callback: (package_: Package) => boolean
         
     | 
| 
      
 515 
     | 
    
         
            +
              ): boolean {
         
     | 
| 
      
 516 
     | 
    
         
            +
                return packages.some((package_) => callback(package_))
         
     | 
| 
      
 517 
     | 
    
         
            +
              }
         
     | 
| 
      
 518 
     | 
    
         
            +
             
     | 
| 
      
 519 
     | 
    
         
            +
              static comparator(package1: Package, package2: Package) {
         
     | 
| 
      
 520 
     | 
    
         
            +
                return package1.name.localeCompare(package2.name)
         
     | 
| 
      
 521 
     | 
    
         
            +
              }
         
     | 
| 
      
 522 
     | 
    
         
            +
            }
         
     | 
| 
      
 523 
     | 
    
         
            +
             
     | 
| 
      
 524 
     | 
    
         
            +
            /** Map of dependency name to information about the dependency. */
         
     | 
| 
      
 525 
     | 
    
         
            +
            type Dependencies = Record<
         
     | 
| 
      
 526 
     | 
    
         
            +
              string,
         
     | 
| 
      
 527 
     | 
    
         
            +
              {
         
     | 
| 
      
 528 
     | 
    
         
            +
                isMismatching: boolean
         
     | 
| 
      
 529 
     | 
    
         
            +
                versions: readonly {
         
     | 
| 
      
 530 
     | 
    
         
            +
                  version: string
         
     | 
| 
      
 531 
     | 
    
         
            +
                  packages: readonly Package[]
         
     | 
| 
      
 532 
     | 
    
         
            +
                }[]
         
     | 
| 
      
 533 
     | 
    
         
            +
              }
         
     | 
| 
      
 534 
     | 
    
         
            +
            >
         
     | 
| 
      
 535 
     | 
    
         
            +
             
     | 
| 
      
 536 
     | 
    
         
            +
            enum DEPENDENCY_TYPE {
         
     | 
| 
      
 537 
     | 
    
         
            +
              dependencies = 'dependencies',
         
     | 
| 
      
 538 
     | 
    
         
            +
              devDependencies = 'devDependencies',
         
     | 
| 
      
 539 
     | 
    
         
            +
              optionalDependencies = 'optionalDependencies',
         
     | 
| 
      
 540 
     | 
    
         
            +
              peerDependencies = 'peerDependencies',
         
     | 
| 
      
 541 
     | 
    
         
            +
              resolutions = 'resolutions',
         
     | 
| 
      
 542 
     | 
    
         
            +
            }
         
     | 
| 
      
 543 
     | 
    
         
            +
             
     | 
| 
      
 544 
     | 
    
         
            +
            type Options = {
         
     | 
| 
      
 545 
     | 
    
         
            +
              depType?: readonly `${DEPENDENCY_TYPE}`[] // Allow strings so the enum type doesn't always have to be used.
         
     | 
| 
      
 546 
     | 
    
         
            +
              fix?: boolean
         
     | 
| 
      
 547 
     | 
    
         
            +
              ignoreDep?: readonly string[]
         
     | 
| 
      
 548 
     | 
    
         
            +
              includeDepPattern?: readonly string[]
         
     | 
| 
      
 549 
     | 
    
         
            +
              ignorePackage?: readonly string[]
         
     | 
| 
      
 550 
     | 
    
         
            +
              ignorePackagePattern?: readonly string[]
         
     | 
| 
      
 551 
     | 
    
         
            +
              ignorePath?: readonly string[]
         
     | 
| 
      
 552 
     | 
    
         
            +
              ignorePathPattern?: readonly string[]
         
     | 
| 
      
 553 
     | 
    
         
            +
            }
         
     | 
| 
      
 554 
     | 
    
         
            +
             
     | 
| 
      
 555 
     | 
    
         
            +
            const DEFAULT_DEP_TYPES = [
         
     | 
| 
      
 556 
     | 
    
         
            +
              DEPENDENCY_TYPE.dependencies,
         
     | 
| 
      
 557 
     | 
    
         
            +
              DEPENDENCY_TYPE.devDependencies,
         
     | 
| 
      
 558 
     | 
    
         
            +
              DEPENDENCY_TYPE.optionalDependencies,
         
     | 
| 
      
 559 
     | 
    
         
            +
              DEPENDENCY_TYPE.resolutions,
         
     | 
| 
      
 560 
     | 
    
         
            +
              // peerDependencies is not included by default, see discussion in: https://github.com/bmish/check-dependency-version-consistency/issues/402
         
     | 
| 
      
 561 
     | 
    
         
            +
            ]
         
     | 
| 
      
 562 
     | 
    
         
            +
             
     | 
| 
      
 563 
     | 
    
         
            +
            /**
         
     | 
| 
      
 564 
     | 
    
         
            +
             * Checks for inconsistencies across a workspace. Optionally fixes them.
         
     | 
| 
      
 565 
     | 
    
         
            +
             * @param path - path to the workspace root
         
     | 
| 
      
 566 
     | 
    
         
            +
             * @param options
         
     | 
| 
      
 567 
     | 
    
         
            +
             * @param options.depType - Dependency type(s) to check
         
     | 
| 
      
 568 
     | 
    
         
            +
             * @param options.fix - Whether to autofix inconsistencies (using latest version present)
         
     | 
| 
      
 569 
     | 
    
         
            +
             * @param options.ignoreDep - Dependency(s) to ignore mismatches for
         
     | 
| 
      
 570 
     | 
    
         
            +
             * @param options.includeDepPattern - RegExp(s) of dependency names to ignore mismatches for
         
     | 
| 
      
 571 
     | 
    
         
            +
             * @param options.ignorePackage - Workspace package(s) to ignore mismatches for
         
     | 
| 
      
 572 
     | 
    
         
            +
             * @param options.ignorePackagePattern - RegExp(s) of package names to ignore mismatches for
         
     | 
| 
      
 573 
     | 
    
         
            +
             * @param options.ignorePath - Workspace-relative path(s) of packages to ignore mismatches for
         
     | 
| 
      
 574 
     | 
    
         
            +
             * @param options.ignorePathPattern - RegExp(s) of workspace-relative path of packages to ignore mismatches for
         
     | 
| 
      
 575 
     | 
    
         
            +
             * @returns an object with the following properties:
         
     | 
| 
      
 576 
     | 
    
         
            +
             * - `dependencies`: An object mapping each dependency in the workspace to information about it including the versions found of it.
         
     | 
| 
      
 577 
     | 
    
         
            +
             */
         
     | 
| 
      
 578 
     | 
    
         
            +
            function check(path: string): {
         
     | 
| 
      
 579 
     | 
    
         
            +
              dependencies: Dependencies
         
     | 
| 
      
 580 
     | 
    
         
            +
            } {
         
     | 
| 
      
 581 
     | 
    
         
            +
              const options: Options = {
         
     | 
| 
      
 582 
     | 
    
         
            +
                includeDepPattern: ['tamagui'],
         
     | 
| 
      
 583 
     | 
    
         
            +
              }
         
     | 
| 
      
 584 
     | 
    
         
            +
             
     | 
| 
      
 585 
     | 
    
         
            +
              if (
         
     | 
| 
      
 586 
     | 
    
         
            +
                options &&
         
     | 
| 
      
 587 
     | 
    
         
            +
                options.depType &&
         
     | 
| 
      
 588 
     | 
    
         
            +
                options.depType.some((dt) => !Object.keys(DEPENDENCY_TYPE).includes(dt))
         
     | 
| 
      
 589 
     | 
    
         
            +
              ) {
         
     | 
| 
      
 590 
     | 
    
         
            +
                throw new Error(
         
     | 
| 
      
 591 
     | 
    
         
            +
                  `Invalid depType provided. Choices are: ${Object.keys(DEPENDENCY_TYPE).join(', ')}.`
         
     | 
| 
      
 592 
     | 
    
         
            +
                )
         
     | 
| 
      
 593 
     | 
    
         
            +
              }
         
     | 
| 
      
 594 
     | 
    
         
            +
             
     | 
| 
      
 595 
     | 
    
         
            +
              const optionsWithDefaults = {
         
     | 
| 
      
 596 
     | 
    
         
            +
                fix: false,
         
     | 
| 
      
 597 
     | 
    
         
            +
                ignoreDep: [],
         
     | 
| 
      
 598 
     | 
    
         
            +
                includeDepPattern: [],
         
     | 
| 
      
 599 
     | 
    
         
            +
                ignorePackage: [],
         
     | 
| 
      
 600 
     | 
    
         
            +
                ignorePackagePattern: [],
         
     | 
| 
      
 601 
     | 
    
         
            +
                ignorePath: [],
         
     | 
| 
      
 602 
     | 
    
         
            +
                ignorePathPattern: [],
         
     | 
| 
      
 603 
     | 
    
         
            +
                ...options,
         
     | 
| 
      
 604 
     | 
    
         
            +
             
     | 
| 
      
 605 
     | 
    
         
            +
                // Fallback to default if no depType(s) provided.
         
     | 
| 
      
 606 
     | 
    
         
            +
                depType:
         
     | 
| 
      
 607 
     | 
    
         
            +
                  options && options.depType && options.depType.length > 0
         
     | 
| 
      
 608 
     | 
    
         
            +
                    ? options.depType
         
     | 
| 
      
 609 
     | 
    
         
            +
                    : DEFAULT_DEP_TYPES,
         
     | 
| 
      
 610 
     | 
    
         
            +
              }
         
     | 
| 
      
 611 
     | 
    
         
            +
             
     | 
| 
      
 612 
     | 
    
         
            +
              // Calculate.
         
     | 
| 
      
 613 
     | 
    
         
            +
              const packages = getPackages(
         
     | 
| 
      
 614 
     | 
    
         
            +
                path,
         
     | 
| 
      
 615 
     | 
    
         
            +
                optionsWithDefaults.ignorePackage,
         
     | 
| 
      
 616 
     | 
    
         
            +
                optionsWithDefaults.ignorePackagePattern.map((s) => new RegExp(s)),
         
     | 
| 
      
 617 
     | 
    
         
            +
                optionsWithDefaults.ignorePath,
         
     | 
| 
      
 618 
     | 
    
         
            +
                optionsWithDefaults.ignorePathPattern.map((s) => new RegExp(s))
         
     | 
| 
      
 619 
     | 
    
         
            +
              )
         
     | 
| 
      
 620 
     | 
    
         
            +
             
     | 
| 
      
 621 
     | 
    
         
            +
              const dependencies = calculateVersionsForEachDependency(
         
     | 
| 
      
 622 
     | 
    
         
            +
                packages,
         
     | 
| 
      
 623 
     | 
    
         
            +
                optionsWithDefaults.depType.map((dt) => DEPENDENCY_TYPE[dt]) // Convert string to enum.
         
     | 
| 
      
 624 
     | 
    
         
            +
              )
         
     | 
| 
      
 625 
     | 
    
         
            +
              const dependenciesAndVersions = calculateDependenciesAndVersions(dependencies)
         
     | 
| 
      
 626 
     | 
    
         
            +
              const dependenciesAndVersionsWithMismatches = dependenciesAndVersions.filter(
         
     | 
| 
      
 627 
     | 
    
         
            +
                ({ versions }) => versions.length > 1
         
     | 
| 
      
 628 
     | 
    
         
            +
              )
         
     | 
| 
      
 629 
     | 
    
         
            +
             
     | 
| 
      
 630 
     | 
    
         
            +
              // Information about all dependencies.
         
     | 
| 
      
 631 
     | 
    
         
            +
              const dependenciesAndVersionsWithoutIgnored = filterOutIgnoredDependencies(
         
     | 
| 
      
 632 
     | 
    
         
            +
                dependenciesAndVersions,
         
     | 
| 
      
 633 
     | 
    
         
            +
                optionsWithDefaults.ignoreDep,
         
     | 
| 
      
 634 
     | 
    
         
            +
                optionsWithDefaults.includeDepPattern.map((s) => new RegExp(s))
         
     | 
| 
      
 635 
     | 
    
         
            +
              )
         
     | 
| 
      
 636 
     | 
    
         
            +
             
     | 
| 
      
 637 
     | 
    
         
            +
              // Information about mismatches.
         
     | 
| 
      
 638 
     | 
    
         
            +
              const dependenciesAndVersionsMismatchesWithoutIgnored = filterOutIgnoredDependencies(
         
     | 
| 
      
 639 
     | 
    
         
            +
                dependenciesAndVersionsWithMismatches,
         
     | 
| 
      
 640 
     | 
    
         
            +
                optionsWithDefaults.ignoreDep,
         
     | 
| 
      
 641 
     | 
    
         
            +
                optionsWithDefaults.includeDepPattern.map((s) => new RegExp(s))
         
     | 
| 
      
 642 
     | 
    
         
            +
              )
         
     | 
| 
      
 643 
     | 
    
         
            +
             
     | 
| 
      
 644 
     | 
    
         
            +
              return {
         
     | 
| 
      
 645 
     | 
    
         
            +
                // Information about all dependencies.
         
     | 
| 
      
 646 
     | 
    
         
            +
                dependencies: Object.fromEntries(
         
     | 
| 
      
 647 
     | 
    
         
            +
                  dependenciesAndVersionsWithoutIgnored.map(({ dependency, versions }) => {
         
     | 
| 
      
 648 
     | 
    
         
            +
                    return [
         
     | 
| 
      
 649 
     | 
    
         
            +
                      dependency,
         
     | 
| 
      
 650 
     | 
    
         
            +
                      {
         
     | 
| 
      
 651 
     | 
    
         
            +
                        isMismatching: dependenciesAndVersionsMismatchesWithoutIgnored.some(
         
     | 
| 
      
 652 
     | 
    
         
            +
                          (dep) => dep.dependency === dependency
         
     | 
| 
      
 653 
     | 
    
         
            +
                        ),
         
     | 
| 
      
 654 
     | 
    
         
            +
                        versions,
         
     | 
| 
      
 655 
     | 
    
         
            +
                      },
         
     | 
| 
      
 656 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 657 
     | 
    
         
            +
                  })
         
     | 
| 
      
 658 
     | 
    
         
            +
                ),
         
     | 
| 
      
 659 
     | 
    
         
            +
              }
         
     | 
| 
      
 660 
     | 
    
         
            +
            }
         
     | 
| 
      
 661 
     | 
    
         
            +
             
     | 
| 
      
 662 
     | 
    
         
            +
            /** Relevant public data about a dependency. */
         
     | 
| 
      
 663 
     | 
    
         
            +
            type Dependency = {
         
     | 
| 
      
 664 
     | 
    
         
            +
              name: string
         
     | 
| 
      
 665 
     | 
    
         
            +
              isMismatching: boolean
         
     | 
| 
      
 666 
     | 
    
         
            +
              versions: readonly {
         
     | 
| 
      
 667 
     | 
    
         
            +
                version: string
         
     | 
| 
      
 668 
     | 
    
         
            +
                packages: readonly { pathRelative: string }[]
         
     | 
| 
      
 669 
     | 
    
         
            +
              }[]
         
     | 
| 
      
 670 
     | 
    
         
            +
            }
         
     | 
| 
      
 671 
     | 
    
         
            +
             
     | 
| 
      
 672 
     | 
    
         
            +
            export class CDVC {
         
     | 
| 
      
 673 
     | 
    
         
            +
              /** An object mapping each dependency in the workspace to information including the versions found of it. */
         
     | 
| 
      
 674 
     | 
    
         
            +
              private readonly dependencies: Dependencies
         
     | 
| 
      
 675 
     | 
    
         
            +
             
     | 
| 
      
 676 
     | 
    
         
            +
              /**
         
     | 
| 
      
 677 
     | 
    
         
            +
               * @param path - path to the workspace root
         
     | 
| 
      
 678 
     | 
    
         
            +
               * @param options
         
     | 
| 
      
 679 
     | 
    
         
            +
               * @param options.fix - Whether to autofix inconsistencies (using latest version present)
         
     | 
| 
      
 680 
     | 
    
         
            +
               * @param options.ignoreDep - Dependency(s) to ignore mismatches for
         
     | 
| 
      
 681 
     | 
    
         
            +
               * @param options.includeDepPattern - RegExp(s) of dependency names to ignore mismatches for
         
     | 
| 
      
 682 
     | 
    
         
            +
               * @param options.ignorePackage - Workspace package(s) to ignore mismatches for
         
     | 
| 
      
 683 
     | 
    
         
            +
               * @param options.ignorePackagePattern - RegExp(s) of package names to ignore mismatches for
         
     | 
| 
      
 684 
     | 
    
         
            +
               * @param options.ignorePath - Workspace-relative path(s) of packages to ignore mismatches for
         
     | 
| 
      
 685 
     | 
    
         
            +
               * @param options.ignorePathPattern - RegExp(s) of workspace-relative path of packages to ignore mismatches for
         
     | 
| 
      
 686 
     | 
    
         
            +
               */
         
     | 
| 
      
 687 
     | 
    
         
            +
              constructor(path: string) {
         
     | 
| 
      
 688 
     | 
    
         
            +
                const { dependencies } = check(path)
         
     | 
| 
      
 689 
     | 
    
         
            +
                this.dependencies = dependencies
         
     | 
| 
      
 690 
     | 
    
         
            +
              }
         
     | 
| 
      
 691 
     | 
    
         
            +
             
     | 
| 
      
 692 
     | 
    
         
            +
              public toMismatchSummary(): string {
         
     | 
| 
      
 693 
     | 
    
         
            +
                return dependenciesToMismatchSummary(this.dependencies)
         
     | 
| 
      
 694 
     | 
    
         
            +
              }
         
     | 
| 
      
 695 
     | 
    
         
            +
             
     | 
| 
      
 696 
     | 
    
         
            +
              public getDependencies(): readonly Dependency[] {
         
     | 
| 
      
 697 
     | 
    
         
            +
                return Object.keys(this.dependencies).map((dependency) =>
         
     | 
| 
      
 698 
     | 
    
         
            +
                  this.getDependency(dependency)
         
     | 
| 
      
 699 
     | 
    
         
            +
                )
         
     | 
| 
      
 700 
     | 
    
         
            +
              }
         
     | 
| 
      
 701 
     | 
    
         
            +
             
     | 
| 
      
 702 
     | 
    
         
            +
              public getDependency(name: string): Dependency {
         
     | 
| 
      
 703 
     | 
    
         
            +
                // Convert underlying dependency data object with relevant public data.
         
     | 
| 
      
 704 
     | 
    
         
            +
                return {
         
     | 
| 
      
 705 
     | 
    
         
            +
                  name,
         
     | 
| 
      
 706 
     | 
    
         
            +
                  isMismatching: this.dependencies[name].isMismatching,
         
     | 
| 
      
 707 
     | 
    
         
            +
                  versions: this.dependencies[name].versions.map((version) => ({
         
     | 
| 
      
 708 
     | 
    
         
            +
                    version: version.version,
         
     | 
| 
      
 709 
     | 
    
         
            +
                    packages: version.packages.map((package_) => ({
         
     | 
| 
      
 710 
     | 
    
         
            +
                      pathRelative: package_.pathRelative,
         
     | 
| 
      
 711 
     | 
    
         
            +
                    })),
         
     | 
| 
      
 712 
     | 
    
         
            +
                  })),
         
     | 
| 
      
 713 
     | 
    
         
            +
                }
         
     | 
| 
      
 714 
     | 
    
         
            +
              }
         
     | 
| 
      
 715 
     | 
    
         
            +
             
     | 
| 
      
 716 
     | 
    
         
            +
              public get hasMismatchingDependencies(): boolean {
         
     | 
| 
      
 717 
     | 
    
         
            +
                return Object.values(this.dependencies).some((dep) => dep.isMismatching)
         
     | 
| 
      
 718 
     | 
    
         
            +
              }
         
     | 
| 
      
 719 
     | 
    
         
            +
            }
         
     | 
| 
      
 720 
     | 
    
         
            +
             
     | 
| 
      
 721 
     | 
    
         
            +
            function dependenciesToMismatchSummary(dependencies: Dependencies): string {
         
     | 
| 
      
 722 
     | 
    
         
            +
              const mismatchingDependencyVersions = Object.entries(dependencies)
         
     | 
| 
      
 723 
     | 
    
         
            +
                .filter(([, value]) => value.isMismatching)
         
     | 
| 
      
 724 
     | 
    
         
            +
                .map(([dependency, value]) => ({ dependency, versions: value.versions }))
         
     | 
| 
      
 725 
     | 
    
         
            +
             
     | 
| 
      
 726 
     | 
    
         
            +
              if (mismatchingDependencyVersions.length === 0) {
         
     | 
| 
      
 727 
     | 
    
         
            +
                return ''
         
     | 
| 
      
 728 
     | 
    
         
            +
              }
         
     | 
| 
      
 729 
     | 
    
         
            +
             
     | 
| 
      
 730 
     | 
    
         
            +
              const tables = mismatchingDependencyVersions
         
     | 
| 
      
 731 
     | 
    
         
            +
                .map((object) => {
         
     | 
| 
      
 732 
     | 
    
         
            +
                  return `${object.dependency} - ${object.versions.map((v) => `${v.version}`).join(', ')}`
         
     | 
| 
      
 733 
     | 
    
         
            +
                })
         
     | 
| 
      
 734 
     | 
    
         
            +
                .join('')
         
     | 
| 
      
 735 
     | 
    
         
            +
             
     | 
| 
      
 736 
     | 
    
         
            +
              return [
         
     | 
| 
      
 737 
     | 
    
         
            +
                `Found ${mismatchingDependencyVersions.length} ${
         
     | 
| 
      
 738 
     | 
    
         
            +
                  mismatchingDependencyVersions.length === 1 ? 'dependency' : 'dependencies'
         
     | 
| 
      
 739 
     | 
    
         
            +
                } with mismatching versions across the workspace.`,
         
     | 
| 
      
 740 
     | 
    
         
            +
                tables,
         
     | 
| 
      
 741 
     | 
    
         
            +
              ].join('\n')
         
     | 
| 
      
 742 
     | 
    
         
            +
            }
         
     |