sanity 4.9.0-next.16 → 4.9.0-next.19
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/lib/_chunks-cjs/buildAction.js +17 -6
- package/lib/_chunks-cjs/buildAction.js.map +1 -1
- package/lib/_chunks-cjs/buildAction2.js +17 -6
- package/lib/_chunks-cjs/buildAction2.js.map +1 -1
- package/lib/_chunks-cjs/deployAction.js +23 -7
- package/lib/_chunks-cjs/deployAction.js.map +1 -1
- package/lib/_chunks-cjs/deployAction2.js +31 -9
- package/lib/_chunks-cjs/deployAction2.js.map +1 -1
- package/lib/_chunks-cjs/devAction.js +2 -2
- package/lib/_chunks-cjs/devAction.js.map +1 -1
- package/lib/_chunks-cjs/devAction2.js +30 -22
- package/lib/_chunks-cjs/devAction2.js.map +1 -1
- package/lib/_chunks-cjs/getAppId.js +23 -0
- package/lib/_chunks-cjs/getAppId.js.map +1 -0
- package/lib/_chunks-cjs/helpers.js +15 -12
- package/lib/_chunks-cjs/helpers.js.map +1 -1
- package/lib/_chunks-cjs/undeployAction.js +5 -2
- package/lib/_chunks-cjs/undeployAction.js.map +1 -1
- package/lib/_chunks-cjs/upgradePackages.js +4 -4
- package/lib/_chunks-cjs/upgradePackages.js.map +1 -1
- package/lib/_chunks-cjs/version.js +1 -1
- package/lib/_chunks-cjs/{shouldAutoUpdate.js → warnAboutMissingAppId.js} +39 -5
- package/lib/_chunks-cjs/warnAboutMissingAppId.js.map +1 -0
- package/lib/_chunks-es/version.mjs +1 -1
- package/package.json +14 -14
- package/lib/_chunks-cjs/shouldAutoUpdate.js.map +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"upgradePackages.js","sources":["../../src/_internal/cli/util/checkStudioDependencyVersions.ts","../../src/_internal/cli/util/checkRequiredDependencies.ts","../../src/_internal/cli/util/packageManager/packageManagerChoice.ts","../../src/_internal/cli/util/packageManager/upgradePackages.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {generateHelpUrl} from '@sanity/generate-help-url'\nimport resolveFrom from 'resolve-from'\nimport semver, {type SemVer} from 'semver'\n\nimport {readPackageJson, readPackageManifest} from './readPackageManifest'\n\ninterface PackageInfo {\n name: string\n supported: string[]\n deprecatedBelow: null | string\n installed: SemVer\n isUnsupported: boolean\n isDeprecated: boolean\n isUntested: boolean\n}\n\n// NOTE: when doing changes here, also remember to update versions in help docs at\n// https://sanity.io/admin/structure/docs;helpArticle;upgrade-packages\nconst PACKAGES = [\n {name: 'react', supported: ['^18 || ^19'], deprecatedBelow: null},\n {name: 'react-dom', supported: ['^18 || ^19'], deprecatedBelow: null},\n {name: 'styled-components', supported: ['^6'], deprecatedBelow: null},\n {name: '@sanity/ui', supported: ['^2', '^3'], deprecatedBelow: null},\n]\n\nexport async function checkStudioDependencyVersions(workDir: string): Promise<void> {\n const manifest = await readPackageJson(path.join(workDir, 'package.json'))\n const dependencies = {...manifest.dependencies, ...manifest.devDependencies}\n\n const packageInfo = PACKAGES.map(async (pkg): Promise<PackageInfo | false> => {\n const dependency = dependencies[pkg.name]\n if (!dependency) {\n return false\n }\n\n const manifestPath = resolveFrom.silent(workDir, path.join(pkg.name, 'package.json'))\n const installed = semver.coerce(\n manifestPath\n ? (await readPackageManifest(manifestPath)).version\n : dependency.replace(/[\\D.]/g, ''),\n )\n\n if (!installed) {\n return false\n }\n\n const supported = pkg.supported.join(' || ')\n\n // \"Untested\" is usually the case where we have not upgraded the React version requirements\n // before a release, but given that is usually works in a backwards-compatible way, we want\n // to indicate that it's _untested_, not necessarily _unsupported_\n // Ex: Installed is react@19.0.0, but we've only _tested_ with react@^18\n const isUntested = !semver.satisfies(installed, supported) && semver.gtr(installed, supported)\n\n // \"Unsupported\" in that the installed version is _lower than_ the minimum version\n // Ex: Installed is react@15.0.0, but we require react@^16\n const isUnsupported = !semver.satisfies(installed, supported) && !isUntested\n\n // \"Deprecated\" in that we will stop supporting it at some point in the near future,\n // so users should be prompted to upgrade\n const isDeprecated = pkg.deprecatedBelow ? semver.ltr(installed, pkg.deprecatedBelow) : false\n\n return {\n ...pkg,\n installed,\n isUnsupported,\n isDeprecated,\n isUntested,\n }\n })\n\n const installedPackages = (await Promise.all(packageInfo)).filter(\n (inp): inp is PackageInfo => inp !== false,\n )\n const unsupported = installedPackages.filter((pkg) => pkg.isUnsupported)\n const deprecated = installedPackages.filter((pkg) => !pkg.isUnsupported && pkg.isDeprecated)\n const untested = installedPackages.filter((pkg) => pkg.isUntested)\n\n if (deprecated.length > 0) {\n console.warn(`\n[WARN] The following package versions have been deprecated and should be upgraded:\n\n ${listPackages(deprecated)}\n\nSupport for these will be removed in a future release!\n\n ${getUpgradeInstructions(deprecated)}\n`)\n }\n\n if (untested.length > 0) {\n console.warn(`\n[WARN] The following package versions have not yet been marked as supported:\n\n ${listPackages(untested)}\n\nYou _may_ encounter bugs while using these versions.\n\n ${getDowngradeInstructions(untested)}\n`)\n }\n\n if (unsupported.length > 0) {\n console.error(`\n[ERROR] The following package versions are no longer supported and needs to be upgraded:\n\n ${listPackages(unsupported)}\n\n ${getUpgradeInstructions(unsupported)}\n`)\n process.exit(1)\n }\n}\n\nfunction listPackages(pkgs: PackageInfo[]) {\n return pkgs\n .map(\n (pkg) =>\n `${pkg.name} (installed: ${pkg.installed}, want: ${\n pkg.deprecatedBelow || pkg.supported.join(' || ')\n })`,\n )\n .join('\\n ')\n}\n\nfunction getUpgradeInstructions(pkgs: PackageInfo[]) {\n const inst = pkgs\n .map((pkg) => {\n const [highestSupported] = pkg.supported\n .map((version) => (semver.coerce(version) || {version: ''}).version)\n .sort(semver.rcompare)\n\n return `\"${pkg.name}@${highestSupported}\"`\n })\n .join(' ')\n\n return `To upgrade, run either:\n\n npm install ${inst}\n\n or\n\n yarn add ${inst}\n\n or\n\n pnpm add ${inst}\n\n\nRead more at ${generateHelpUrl('upgrade-packages')}`\n}\n\nfunction getDowngradeInstructions(pkgs: PackageInfo[]) {\n const inst = pkgs\n .map((pkg) => {\n const [highestSupported] = pkg.supported\n .map((version) => (semver.coerce(version) || {version: ''}).version)\n .sort(semver.rcompare)\n\n return `\"${pkg.name}@${highestSupported}\"`\n })\n .join(' ')\n\n return `To downgrade, run either:\n\n yarn add ${inst}\n\n or\n\n npm install ${inst}\n\n or\n\n pnpm install ${inst}`\n}\n","import path from 'node:path'\n\nimport {type CliCommandContext} from '@sanity/cli'\nimport execa from 'execa'\nimport oneline from 'oneline'\nimport semver, {type SemVer} from 'semver'\n\nimport {peerDependencies} from '../../../../package.json'\nimport {determineIsApp} from './determineIsApp'\nimport {readModuleVersion} from './readModuleVersion'\nimport {type PartialPackageManifest, readPackageManifest} from './readPackageManifest'\n\nconst defaultStudioManifestProps: PartialPackageManifest = {\n name: 'studio',\n version: '1.0.0',\n}\n\ninterface CheckResult {\n didInstall: boolean\n installedSanityVersion: string\n}\n\n/**\n * Checks that the studio has declared and installed the required dependencies\n * needed by the Sanity modules. While we generally use regular, explicit\n * dependencies in modules, there are certain dependencies that are better\n * served being peer dependencies, such as react and styled-components.\n *\n * If these dependencies are not installed/declared, we want to prompt the user\n * whether or not to add them to `package.json` and install them\n *\n * Additionally, returns the version of the 'sanity' dependency from the package.json.\n */\nexport async function checkRequiredDependencies(context: CliCommandContext): Promise<CheckResult> {\n // currently there's no check needed for custom apps,\n // but this should be removed once they are more mature\n const isApp = determineIsApp(context.cliConfig)\n if (isApp) {\n return {didInstall: false, installedSanityVersion: ''}\n }\n\n const {workDir: studioPath, output} = context\n const [studioPackageManifest, installedStyledComponentsVersion, installedSanityVersion] =\n await Promise.all([\n await readPackageManifest(path.join(studioPath, 'package.json'), defaultStudioManifestProps),\n await readModuleVersion(studioPath, 'styled-components'),\n await readModuleVersion(studioPath, 'sanity'),\n ])\n\n const wantedStyledComponentsVersionRange = peerDependencies['styled-components']\n\n // Retrieve the version of the 'sanity' dependency\n if (!installedSanityVersion) {\n throw new Error('Failed to read the installed sanity version.')\n }\n\n // The studio _must_ now declare `styled-components` as a dependency. If it's not there,\n // we'll want to automatically _add it_ to the manifest and tell the user to reinstall\n // dependencies before running whatever command was being run\n const declaredStyledComponentsVersion =\n studioPackageManifest.dependencies['styled-components'] ||\n studioPackageManifest.devDependencies['styled-components']\n\n if (!declaredStyledComponentsVersion) {\n const [file, ...args] = process.argv\n const deps = {'styled-components': wantedStyledComponentsVersionRange}\n await installDependencies(deps, context)\n\n // Re-run the same command (sanity dev/sanity build etc) after installation,\n // as it can have shifted the entire `node_modules` folder around, result in\n // broken assumptions about installation paths. This is a hack, and should be\n // solved properly.\n await execa(file, args, {cwd: studioPath, stdio: 'inherit'})\n return {didInstall: true, installedSanityVersion}\n }\n\n // We ignore catalog identifiers since we check the actual version anyway\n const isStyledComponentsVersionRangeInCatalog =\n declaredStyledComponentsVersion.startsWith('catalog:')\n // Theoretically the version specified in package.json could be incorrect, eg `foo`\n let minDeclaredStyledComponentsVersion: SemVer | null = null\n try {\n minDeclaredStyledComponentsVersion = semver.minVersion(declaredStyledComponentsVersion)\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredStyledComponentsVersion && !isStyledComponentsVersionRangeInCatalog) {\n throw new Error(oneline`\n Declared dependency \\`styled-components\\` has an invalid version range:\n \\`${declaredStyledComponentsVersion}\\`.\n `)\n }\n\n // The declared version should be semver-compatible with the version specified as a\n // peer dependency in `sanity`. If not, we should tell the user to change it.\n //\n // Exception: Ranges are hard to compare. `>=5.0.0 && <=5.3.2 || ^6`... Comparing this\n // to anything is going to be challenging, so only compare \"simple\" ranges/versions\n // (^x.x.x / ~x.x.x / x.x.x)\n if (\n !isStyledComponentsVersionRangeInCatalog &&\n isComparableRange(declaredStyledComponentsVersion) &&\n !semver.satisfies(minDeclaredStyledComponentsVersion!, wantedStyledComponentsVersionRange)\n ) {\n output.warn(oneline`\n Declared version of styled-components (${declaredStyledComponentsVersion})\n is not compatible with the version required by sanity (${wantedStyledComponentsVersionRange}).\n This might cause problems!\n `)\n }\n\n // Ensure the studio has _installed_ a version of `styled-components`\n if (!installedStyledComponentsVersion) {\n throw new Error(oneline`\n Declared dependency \\`styled-components\\` is not installed - run\n \\`npm install\\`, \\`yarn install\\` or \\`pnpm install\\` to install it before re-running this command.\n `)\n }\n\n // The studio should have an _installed_ version of `styled-components`, and it should\n // be semver compatible with the version specified in `sanity` peer dependencies.\n if (!semver.satisfies(installedStyledComponentsVersion, wantedStyledComponentsVersionRange)) {\n output.warn(oneline`\n Installed version of styled-components (${installedStyledComponentsVersion})\n is not compatible with the version required by sanity (${wantedStyledComponentsVersionRange}).\n This might cause problems!\n `)\n }\n\n return {didInstall: false, installedSanityVersion}\n}\n\n/**\n * Install the passed dependencies at the given version/version range,\n * prompting the user which package manager to use. We will try to detect\n * a package manager from files in the directory and show that as the default\n *\n * @param dependencies - Object of dependencies `({[package name]: version})`\n * @param context - CLI context\n */\nasync function installDependencies(\n dependencies: Record<string, string>,\n context: CliCommandContext,\n): Promise<void> {\n const {output, prompt, workDir, cliPackageManager} = context\n const packages: string[] = []\n\n output.print('The Sanity studio needs to install missing dependencies:')\n for (const [pkgName, version] of Object.entries(dependencies)) {\n const declaration = `${pkgName}@${version}`\n output.print(`- ${declaration}`)\n packages.push(declaration)\n }\n\n if (!cliPackageManager) {\n output.error(\n 'ERROR: Could not determine package manager choice - run `npm install` or equivalent',\n )\n return\n }\n\n const {getPackageManagerChoice, installNewPackages} = cliPackageManager\n const {mostOptimal, chosen: pkgManager} = await getPackageManagerChoice(workDir, {prompt})\n if (mostOptimal && pkgManager !== mostOptimal) {\n output.warn(\n `WARN: This project appears to be installed with or using ${mostOptimal} - using a different package manager _may_ result in errors.`,\n )\n }\n\n await installNewPackages({packages, packageManager: pkgManager}, context)\n}\n\nfunction isComparableRange(range: string): boolean {\n return /^[\\^~]?\\d+(\\.\\d+)?(\\.\\d+)?$/.test(range)\n}\n","import path from 'node:path'\n\nimport {type CliPrompter} from '@sanity/cli'\nimport preferredPM from 'preferred-pm'\nimport which from 'which'\n\nimport {isInteractive} from '../isInteractive'\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun' | 'manual'\n\nexport const ALLOWED_PACKAGE_MANAGERS: PackageManager[] = ['npm', 'yarn', 'pnpm', 'bun', 'manual']\nexport const allowedPackageManagersString = ALLOWED_PACKAGE_MANAGERS.map((pm) => `\"${pm}\"`).join(\n ' | ',\n)\n\nconst EXPERIMENTAL = ['bun']\n\n/**\n * Attempts to resolve the most optimal package manager to use to install/upgrade\n * packages/dependencies at a given path. It does so by looking for package manager\n * specific lockfiles. If it finds a lockfile belonging to a certain package manager,\n * it prioritizes this one. However, if that package manager is not installed, it will\n * prompt the user for which one they want to use and hint at the most optimal one\n * not being installed.\n *\n * Note that this function also takes local npm binary paths into account - for instance,\n * `yarn` can be installed as a dependency of the project instead of globally, and it\n * will use that is available.\n *\n * The user can also select 'manual' to skip the process and run their preferred package\n * manager manually. Commands using this function must take this `manual` choice into\n * account and act accordingly if chosen.\n *\n * @param workDir - The working directory where a lockfile is most likely to be present\n * @param options - Pass `interactive: false` to fall back to npm if most optimal is\n * not available, instead of prompting\n * @returns Object of `chosen` and, if a lockfile is found, the `mostOptimal` choice\n */\nexport async function getPackageManagerChoice(\n workDir: string,\n options: {interactive: false} | {interactive?: true; prompt: CliPrompter},\n): Promise<{chosen: PackageManager; mostOptimal?: PackageManager}> {\n const rootDir = workDir || process.cwd()\n const preferred = (await preferredPM(rootDir))?.name\n\n if (preferred && (await hasCommand(preferred, rootDir))) {\n // There is an optimal/preferred package manager, and the user has it installed!\n return {chosen: preferred, mostOptimal: preferred}\n }\n\n const mostLikelyPM = await getMostLikelyInstalledPackageManager(rootDir)\n const interactive = typeof options.interactive === 'boolean' ? options.interactive : isInteractive\n if (!interactive) {\n // We can't ask the user for their preference, so fall back to either the one that is being run\n // or whatever is installed on the system (npm being the preferred choice).\n // Note that the most optimal choice is already picked above if available.\n return {chosen: mostLikelyPM || (await getFallback(rootDir)), mostOptimal: preferred}\n }\n\n if (!('prompt' in options)) {\n throw new Error('Must pass `prompt` when in interactive mode')\n }\n\n // We can ask the user for their preference, hurray!\n const messageSuffix = preferred ? ` (preferred is ${preferred}, but is not installed)` : ''\n const installed = await getAvailablePackageManagers(rootDir)\n const chosen = await options.prompt.single<PackageManager>({\n type: 'list',\n choices: installed.map((pm) => ({\n value: pm,\n name: EXPERIMENTAL.includes(pm) ? `${pm} (experimental)` : pm,\n })),\n default: preferred || mostLikelyPM,\n message: `Package manager to use for installing dependencies?${messageSuffix}`,\n })\n\n return {chosen, mostOptimal: preferred}\n}\n\nasync function getFallback(cwd: string): Promise<PackageManager> {\n if (await hasNpmInstalled(cwd)) {\n return 'npm'\n }\n\n if (await hasYarnInstalled(cwd)) {\n return 'yarn'\n }\n\n if (await hasPnpmInstalled(cwd)) {\n return 'pnpm'\n }\n\n if (await hasBunInstalled(cwd)) {\n return 'bun'\n }\n\n return 'manual'\n}\n\nasync function getAvailablePackageManagers(cwd: string): Promise<PackageManager[]> {\n const [npm, yarn, pnpm, bun] = await Promise.all([\n hasNpmInstalled(cwd),\n hasYarnInstalled(cwd),\n hasPnpmInstalled(cwd),\n hasBunInstalled(cwd),\n ])\n\n const choices = [npm && 'npm', yarn && 'yarn', pnpm && 'pnpm', bun && 'bun', 'manual']\n return choices.filter((pm): pm is PackageManager => pm !== false)\n}\n\nexport function hasNpmInstalled(cwd?: string): Promise<boolean> {\n return hasCommand('npm', cwd)\n}\n\nexport function hasYarnInstalled(cwd?: string): Promise<boolean> {\n return hasCommand('yarn', cwd)\n}\n\nexport function hasPnpmInstalled(cwd?: string): Promise<boolean> {\n return hasCommand('pnpm', cwd)\n}\n\nexport function hasBunInstalled(cwd?: string): Promise<boolean> {\n return hasCommand('bun', cwd)\n}\n\nexport function getNpmRunPath(cwd: string): string {\n let previous\n let cwdPath = path.resolve(cwd)\n const result: string[] = []\n\n while (previous !== cwdPath) {\n result.push(path.join(cwdPath, 'node_modules', '.bin'))\n previous = cwdPath\n cwdPath = path.resolve(cwdPath, '..')\n }\n\n result.push(path.resolve(cwd, process.execPath, '..'))\n\n const pathEnv = process.env[getPathEnvVarKey()]\n return [...result, pathEnv].join(path.delimiter)\n}\n\nexport function getPartialEnvWithNpmPath(cwd: string): NodeJS.ProcessEnv {\n const key = getPathEnvVarKey()\n return {[key]: getNpmRunPath(cwd)}\n}\n\nfunction getPathEnvVarKey(): string {\n if (process.platform !== 'win32') {\n return 'PATH'\n }\n\n return (\n Object.keys(process.env)\n .reverse()\n .find((key) => key.toUpperCase() === 'PATH') || 'Path'\n )\n}\n\nfunction getCommandPath(cmd: string, cwd?: string): Promise<string | null> {\n const options = {path: cwd ? getNpmRunPath(cwd) : undefined}\n return which(cmd, options).catch(() => null)\n}\n\nfunction hasCommand(cmd: string, cwd?: string): Promise<boolean> {\n return getCommandPath(cmd, cwd).then((cmdPath) => cmdPath !== null)\n}\n\nasync function getMostLikelyInstalledPackageManager(\n rootDir: string,\n): Promise<PackageManager | undefined> {\n const installed = await getAvailablePackageManagers(rootDir)\n const running = getRunningPackageManager()\n return running && installed.includes(running) ? running : undefined\n}\n\nfunction getRunningPackageManager(): PackageManager | undefined {\n // Yes, the env var is lowercase - it is set by the package managers themselves\n const agent = process.env.npm_config_user_agent || ''\n\n if (agent.includes('yarn')) {\n return 'yarn'\n }\n\n if (agent.includes('pnpm')) {\n return 'pnpm'\n }\n\n if (agent.includes('bun')) {\n return 'bun'\n }\n\n // Both yarn and pnpm does a `npm/?` thing, thus the slightly different match here\n // Theoretically not needed since we check for yarn/pnpm above, but in case other\n // package managers do the same thing, we'll (hopefully) catch them here.\n if (/^npm\\/\\d/.test(agent)) {\n return 'npm'\n }\n\n return undefined\n}\n","import execa, {type CommonOptions, type ExecaReturnValue} from 'execa'\n\nimport {getPartialEnvWithNpmPath, type PackageManager} from './packageManagerChoice'\n\nexport interface InstallOptions {\n packageManager: PackageManager\n packages: [name: string, version: string][]\n}\n\nexport async function upgradePackages(\n options: InstallOptions,\n context: {output: {print: (output: string) => void}; workDir: string},\n): Promise<void> {\n const {packageManager, packages} = options\n const {output, workDir} = context\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n env: getPartialEnvWithNpmPath(workDir),\n cwd: workDir,\n stdio: 'inherit',\n }\n const upgradePackageArgs = packages.map((pkg) => pkg.join('@'))\n let result: ExecaReturnValue<string> | undefined\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--legacy-peer-deps', ...upgradePackageArgs]\n output.print(`Running 'npm ${npmArgs.join(' ')}'`)\n result = await execa('npm', npmArgs, execOptions)\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['upgrade ', ...upgradePackageArgs]\n output.print(`Running 'yarn ${yarnArgs.join(' ')}'`)\n result = await execa('yarn', yarnArgs, execOptions)\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['upgrade', ...upgradePackageArgs]\n output.print(`Running 'pnpm ${pnpmArgs.join(' ')}'`)\n result = await execa('pnpm', pnpmArgs, execOptions)\n } else if (packageManager === 'bun') {\n const bunArgs = ['update', ...upgradePackageArgs]\n output.print(`Running 'bun ${bunArgs.join(' ')}'`)\n result = await execa('bun', bunArgs, execOptions)\n } else if (packageManager === 'manual') {\n output.print(\n `Manual installation selected - run 'npm upgrade ${upgradePackageArgs.join(' ')}' or equivalent`,\n )\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package upgrade failed')\n }\n}\n"],"names":["PACKAGES","name","supported","deprecatedBelow","checkStudioDependencyVersions","workDir","manifest","readPackageJson","path","join","dependencies","devDependencies","packageInfo","map","pkg","dependency","manifestPath","resolveFrom","silent","installed","semver","coerce","readPackageManifest","version","replace","isUntested","satisfies","gtr","isUnsupported","isDeprecated","ltr","installedPackages","Promise","all","filter","inp","unsupported","deprecated","untested","length","console","warn","listPackages","getUpgradeInstructions","getDowngradeInstructions","error","process","exit","pkgs","inst","highestSupported","sort","rcompare","generateHelpUrl","defaultStudioManifestProps","checkRequiredDependencies","context","determineIsApp","cliConfig","didInstall","installedSanityVersion","studioPath","output","studioPackageManifest","installedStyledComponentsVersion","readModuleVersion","wantedStyledComponentsVersionRange","peerDependencies","Error","declaredStyledComponentsVersion","file","args","argv","installDependencies","execa","cwd","stdio","isStyledComponentsVersionRangeInCatalog","startsWith","minDeclaredStyledComponentsVersion","minVersion","oneline","isComparableRange","prompt","cliPackageManager","packages","print","pkgName","Object","entries","declaration","push","getPackageManagerChoice","installNewPackages","mostOptimal","chosen","pkgManager","packageManager","range","test","EXPERIMENTAL","options","rootDir","preferred","preferredPM","hasCommand","mostLikelyPM","getMostLikelyInstalledPackageManager","interactive","isInteractive","getFallback","messageSuffix","getAvailablePackageManagers","single","type","choices","pm","value","includes","default","message","hasNpmInstalled","hasYarnInstalled","hasPnpmInstalled","hasBunInstalled","npm","yarn","pnpm","bun","getNpmRunPath","previous","cwdPath","resolve","result","execPath","pathEnv","env","getPathEnvVarKey","delimiter","getPartialEnvWithNpmPath","platform","keys","reverse","find","key","toUpperCase","getCommandPath","cmd","undefined","which","catch","then","cmdPath","running","getRunningPackageManager","agent","npm_config_user_agent","upgradePackages","execOptions","encoding","upgradePackageArgs","npmArgs","yarnArgs","pnpmArgs","bunArgs","exitCode","failed"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"upgradePackages.js","sources":["../../src/_internal/cli/util/checkStudioDependencyVersions.ts","../../src/_internal/cli/util/checkRequiredDependencies.ts","../../src/_internal/cli/util/packageManager/packageManagerChoice.ts","../../src/_internal/cli/util/packageManager/upgradePackages.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {generateHelpUrl} from '@sanity/generate-help-url'\nimport resolveFrom from 'resolve-from'\nimport semver, {type SemVer} from 'semver'\n\nimport {readPackageJson, readPackageManifest} from './readPackageManifest'\n\ninterface PackageInfo {\n name: string\n supported: string[]\n deprecatedBelow: null | string\n installed: SemVer\n isUnsupported: boolean\n isDeprecated: boolean\n isUntested: boolean\n}\n\n// NOTE: when doing changes here, also remember to update versions in help docs at\n// https://sanity.io/admin/structure/docs;helpArticle;upgrade-packages\nconst PACKAGES = [\n {name: 'react', supported: ['^18 || ^19'], deprecatedBelow: null},\n {name: 'react-dom', supported: ['^18 || ^19'], deprecatedBelow: null},\n {name: 'styled-components', supported: ['^6'], deprecatedBelow: null},\n {name: '@sanity/ui', supported: ['^2', '^3'], deprecatedBelow: null},\n]\n\nexport async function checkStudioDependencyVersions(workDir: string): Promise<void> {\n const manifest = await readPackageJson(path.join(workDir, 'package.json'))\n const dependencies = {...manifest.dependencies, ...manifest.devDependencies}\n\n const packageInfo = PACKAGES.map(async (pkg): Promise<PackageInfo | false> => {\n const dependency = dependencies[pkg.name]\n if (!dependency) {\n return false\n }\n\n const manifestPath = resolveFrom.silent(workDir, path.join(pkg.name, 'package.json'))\n const installed = semver.coerce(\n manifestPath\n ? (await readPackageManifest(manifestPath)).version\n : dependency.replace(/[\\D.]/g, ''),\n )\n\n if (!installed) {\n return false\n }\n\n const supported = pkg.supported.join(' || ')\n\n // \"Untested\" is usually the case where we have not upgraded the React version requirements\n // before a release, but given that is usually works in a backwards-compatible way, we want\n // to indicate that it's _untested_, not necessarily _unsupported_\n // Ex: Installed is react@19.0.0, but we've only _tested_ with react@^18\n const isUntested = !semver.satisfies(installed, supported) && semver.gtr(installed, supported)\n\n // \"Unsupported\" in that the installed version is _lower than_ the minimum version\n // Ex: Installed is react@15.0.0, but we require react@^16\n const isUnsupported = !semver.satisfies(installed, supported) && !isUntested\n\n // \"Deprecated\" in that we will stop supporting it at some point in the near future,\n // so users should be prompted to upgrade\n const isDeprecated = pkg.deprecatedBelow ? semver.ltr(installed, pkg.deprecatedBelow) : false\n\n return {\n ...pkg,\n installed,\n isUnsupported,\n isDeprecated,\n isUntested,\n }\n })\n\n const installedPackages = (await Promise.all(packageInfo)).filter(\n (inp): inp is PackageInfo => inp !== false,\n )\n const unsupported = installedPackages.filter((pkg) => pkg.isUnsupported)\n const deprecated = installedPackages.filter((pkg) => !pkg.isUnsupported && pkg.isDeprecated)\n const untested = installedPackages.filter((pkg) => pkg.isUntested)\n\n if (deprecated.length > 0) {\n console.warn(`\n[WARN] The following package versions have been deprecated and should be upgraded:\n\n ${listPackages(deprecated)}\n\nSupport for these will be removed in a future release!\n\n ${getUpgradeInstructions(deprecated)}\n`)\n }\n\n if (untested.length > 0) {\n console.warn(`\n[WARN] The following package versions have not yet been marked as supported:\n\n ${listPackages(untested)}\n\nYou _may_ encounter bugs while using these versions.\n\n ${getDowngradeInstructions(untested)}\n`)\n }\n\n if (unsupported.length > 0) {\n console.error(`\n[ERROR] The following package versions are no longer supported and needs to be upgraded:\n\n ${listPackages(unsupported)}\n\n ${getUpgradeInstructions(unsupported)}\n`)\n process.exit(1)\n }\n}\n\nfunction listPackages(pkgs: PackageInfo[]) {\n return pkgs\n .map(\n (pkg) =>\n `${pkg.name} (installed: ${pkg.installed}, want: ${\n pkg.deprecatedBelow || pkg.supported.join(' || ')\n })`,\n )\n .join('\\n ')\n}\n\nfunction getUpgradeInstructions(pkgs: PackageInfo[]) {\n const inst = pkgs\n .map((pkg) => {\n const [highestSupported] = pkg.supported\n .map((version) => (semver.coerce(version) || {version: ''}).version)\n .sort(semver.rcompare)\n\n return `\"${pkg.name}@${highestSupported}\"`\n })\n .join(' ')\n\n return `To upgrade, run either:\n\n npm install ${inst}\n\n or\n\n yarn add ${inst}\n\n or\n\n pnpm add ${inst}\n\n\nRead more at ${generateHelpUrl('upgrade-packages')}`\n}\n\nfunction getDowngradeInstructions(pkgs: PackageInfo[]) {\n const inst = pkgs\n .map((pkg) => {\n const [highestSupported] = pkg.supported\n .map((version) => (semver.coerce(version) || {version: ''}).version)\n .sort(semver.rcompare)\n\n return `\"${pkg.name}@${highestSupported}\"`\n })\n .join(' ')\n\n return `To downgrade, run either:\n\n yarn add ${inst}\n\n or\n\n npm install ${inst}\n\n or\n\n pnpm install ${inst}`\n}\n","import path from 'node:path'\n\nimport {type CliCommandContext} from '@sanity/cli'\nimport execa from 'execa'\nimport oneline from 'oneline'\nimport semver, {type SemVer} from 'semver'\n\nimport {peerDependencies} from '../../../../package.json'\nimport {determineIsApp} from './determineIsApp'\nimport {readModuleVersion} from './readModuleVersion'\nimport {type PartialPackageManifest, readPackageManifest} from './readPackageManifest'\n\nconst defaultStudioManifestProps: PartialPackageManifest = {\n name: 'studio',\n version: '1.0.0',\n}\n\ninterface CheckResult {\n didInstall: boolean\n installedSanityVersion: string\n}\n\n/**\n * Checks that the studio has declared and installed the required dependencies\n * needed by the Sanity modules. While we generally use regular, explicit\n * dependencies in modules, there are certain dependencies that are better\n * served being peer dependencies, such as react and styled-components.\n *\n * If these dependencies are not installed/declared, we want to prompt the user\n * whether or not to add them to `package.json` and install them\n *\n * Additionally, returns the version of the 'sanity' dependency from the package.json.\n */\nexport async function checkRequiredDependencies(context: CliCommandContext): Promise<CheckResult> {\n // currently there's no check needed for custom apps,\n // but this should be removed once they are more mature\n const isApp = determineIsApp(context.cliConfig)\n if (isApp) {\n return {didInstall: false, installedSanityVersion: ''}\n }\n\n const {workDir: studioPath, output} = context\n const [studioPackageManifest, installedStyledComponentsVersion, installedSanityVersion] =\n await Promise.all([\n await readPackageManifest(path.join(studioPath, 'package.json'), defaultStudioManifestProps),\n await readModuleVersion(studioPath, 'styled-components'),\n await readModuleVersion(studioPath, 'sanity'),\n ])\n\n const wantedStyledComponentsVersionRange = peerDependencies['styled-components']\n\n // Retrieve the version of the 'sanity' dependency\n if (!installedSanityVersion) {\n throw new Error('Failed to read the installed sanity version.')\n }\n\n // The studio _must_ now declare `styled-components` as a dependency. If it's not there,\n // we'll want to automatically _add it_ to the manifest and tell the user to reinstall\n // dependencies before running whatever command was being run\n const declaredStyledComponentsVersion =\n studioPackageManifest.dependencies['styled-components'] ||\n studioPackageManifest.devDependencies['styled-components']\n\n if (!declaredStyledComponentsVersion) {\n const [file, ...args] = process.argv\n const deps = {'styled-components': wantedStyledComponentsVersionRange}\n await installDependencies(deps, context)\n\n // Re-run the same command (sanity dev/sanity build etc) after installation,\n // as it can have shifted the entire `node_modules` folder around, result in\n // broken assumptions about installation paths. This is a hack, and should be\n // solved properly.\n await execa(file, args, {cwd: studioPath, stdio: 'inherit'})\n return {didInstall: true, installedSanityVersion}\n }\n\n // We ignore catalog identifiers since we check the actual version anyway\n const isStyledComponentsVersionRangeInCatalog =\n declaredStyledComponentsVersion.startsWith('catalog:')\n // Theoretically the version specified in package.json could be incorrect, eg `foo`\n let minDeclaredStyledComponentsVersion: SemVer | null = null\n try {\n minDeclaredStyledComponentsVersion = semver.minVersion(declaredStyledComponentsVersion)\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredStyledComponentsVersion && !isStyledComponentsVersionRangeInCatalog) {\n throw new Error(oneline`\n Declared dependency \\`styled-components\\` has an invalid version range:\n \\`${declaredStyledComponentsVersion}\\`.\n `)\n }\n\n // The declared version should be semver-compatible with the version specified as a\n // peer dependency in `sanity`. If not, we should tell the user to change it.\n //\n // Exception: Ranges are hard to compare. `>=5.0.0 && <=5.3.2 || ^6`... Comparing this\n // to anything is going to be challenging, so only compare \"simple\" ranges/versions\n // (^x.x.x / ~x.x.x / x.x.x)\n if (\n !isStyledComponentsVersionRangeInCatalog &&\n isComparableRange(declaredStyledComponentsVersion) &&\n !semver.satisfies(minDeclaredStyledComponentsVersion!, wantedStyledComponentsVersionRange)\n ) {\n output.warn(oneline`\n Declared version of styled-components (${declaredStyledComponentsVersion})\n is not compatible with the version required by sanity (${wantedStyledComponentsVersionRange}).\n This might cause problems!\n `)\n }\n\n // Ensure the studio has _installed_ a version of `styled-components`\n if (!installedStyledComponentsVersion) {\n throw new Error(oneline`\n Declared dependency \\`styled-components\\` is not installed - run\n \\`npm install\\`, \\`yarn install\\` or \\`pnpm install\\` to install it before re-running this command.\n `)\n }\n\n // The studio should have an _installed_ version of `styled-components`, and it should\n // be semver compatible with the version specified in `sanity` peer dependencies.\n if (!semver.satisfies(installedStyledComponentsVersion, wantedStyledComponentsVersionRange)) {\n output.warn(oneline`\n Installed version of styled-components (${installedStyledComponentsVersion})\n is not compatible with the version required by sanity (${wantedStyledComponentsVersionRange}).\n This might cause problems!\n `)\n }\n\n return {didInstall: false, installedSanityVersion}\n}\n\n/**\n * Install the passed dependencies at the given version/version range,\n * prompting the user which package manager to use. We will try to detect\n * a package manager from files in the directory and show that as the default\n *\n * @param dependencies - Object of dependencies `({[package name]: version})`\n * @param context - CLI context\n */\nasync function installDependencies(\n dependencies: Record<string, string>,\n context: CliCommandContext,\n): Promise<void> {\n const {output, prompt, workDir, cliPackageManager} = context\n const packages: string[] = []\n\n output.print('The Sanity studio needs to install missing dependencies:')\n for (const [pkgName, version] of Object.entries(dependencies)) {\n const declaration = `${pkgName}@${version}`\n output.print(`- ${declaration}`)\n packages.push(declaration)\n }\n\n if (!cliPackageManager) {\n output.error(\n 'ERROR: Could not determine package manager choice - run `npm install` or equivalent',\n )\n return\n }\n\n const {getPackageManagerChoice, installNewPackages} = cliPackageManager\n const {mostOptimal, chosen: pkgManager} = await getPackageManagerChoice(workDir, {prompt})\n if (mostOptimal && pkgManager !== mostOptimal) {\n output.warn(\n `WARN: This project appears to be installed with or using ${mostOptimal} - using a different package manager _may_ result in errors.`,\n )\n }\n\n await installNewPackages({packages, packageManager: pkgManager}, context)\n}\n\nfunction isComparableRange(range: string): boolean {\n return /^[\\^~]?\\d+(\\.\\d+)?(\\.\\d+)?$/.test(range)\n}\n","import path from 'node:path'\n\nimport {type CliPrompter} from '@sanity/cli'\nimport preferredPM from 'preferred-pm'\nimport which from 'which'\n\nimport {isInteractive} from '../isInteractive'\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun' | 'manual'\n\nexport const ALLOWED_PACKAGE_MANAGERS: PackageManager[] = ['npm', 'yarn', 'pnpm', 'bun', 'manual']\nexport const allowedPackageManagersString = ALLOWED_PACKAGE_MANAGERS.map((pm) => `\"${pm}\"`).join(\n ' | ',\n)\n\nconst EXPERIMENTAL = ['bun']\n\n/**\n * Attempts to resolve the most optimal package manager to use to install/upgrade\n * packages/dependencies at a given path. It does so by looking for package manager\n * specific lockfiles. If it finds a lockfile belonging to a certain package manager,\n * it prioritizes this one. However, if that package manager is not installed, it will\n * prompt the user for which one they want to use and hint at the most optimal one\n * not being installed.\n *\n * Note that this function also takes local npm binary paths into account - for instance,\n * `yarn` can be installed as a dependency of the project instead of globally, and it\n * will use that is available.\n *\n * The user can also select 'manual' to skip the process and run their preferred package\n * manager manually. Commands using this function must take this `manual` choice into\n * account and act accordingly if chosen.\n *\n * @param workDir - The working directory where a lockfile is most likely to be present\n * @param options - Pass `interactive: false` to fall back to npm if most optimal is\n * not available, instead of prompting\n * @returns Object of `chosen` and, if a lockfile is found, the `mostOptimal` choice\n */\nexport async function getPackageManagerChoice(\n workDir: string,\n options: {interactive: false} | {interactive?: true; prompt: CliPrompter},\n): Promise<{chosen: PackageManager; mostOptimal?: PackageManager}> {\n const rootDir = workDir || process.cwd()\n const preferred = (await preferredPM(rootDir))?.name\n\n if (preferred && (await hasCommand(preferred, rootDir))) {\n // There is an optimal/preferred package manager, and the user has it installed!\n return {chosen: preferred, mostOptimal: preferred}\n }\n\n const mostLikelyPM = await getMostLikelyInstalledPackageManager(rootDir)\n const interactive = typeof options.interactive === 'boolean' ? options.interactive : isInteractive\n if (!interactive) {\n // We can't ask the user for their preference, so fall back to either the one that is being run\n // or whatever is installed on the system (npm being the preferred choice).\n // Note that the most optimal choice is already picked above if available.\n return {chosen: mostLikelyPM || (await getFallback(rootDir)), mostOptimal: preferred}\n }\n\n if (!('prompt' in options)) {\n throw new Error('Must pass `prompt` when in interactive mode')\n }\n\n // We can ask the user for their preference, hurray!\n const messageSuffix = preferred ? ` (preferred is ${preferred}, but is not installed)` : ''\n const installed = await getAvailablePackageManagers(rootDir)\n const chosen = await options.prompt.single<PackageManager>({\n type: 'list',\n choices: installed.map((pm) => ({\n value: pm,\n name: EXPERIMENTAL.includes(pm) ? `${pm} (experimental)` : pm,\n })),\n default: preferred || mostLikelyPM,\n message: `Package manager to use for installing dependencies?${messageSuffix}`,\n })\n\n return {chosen, mostOptimal: preferred}\n}\n\nasync function getFallback(cwd: string): Promise<PackageManager> {\n if (await hasNpmInstalled(cwd)) {\n return 'npm'\n }\n\n if (await hasYarnInstalled(cwd)) {\n return 'yarn'\n }\n\n if (await hasPnpmInstalled(cwd)) {\n return 'pnpm'\n }\n\n if (await hasBunInstalled(cwd)) {\n return 'bun'\n }\n\n return 'manual'\n}\n\nasync function getAvailablePackageManagers(cwd: string): Promise<PackageManager[]> {\n const [npm, yarn, pnpm, bun] = await Promise.all([\n hasNpmInstalled(cwd),\n hasYarnInstalled(cwd),\n hasPnpmInstalled(cwd),\n hasBunInstalled(cwd),\n ])\n\n const choices = [npm && 'npm', yarn && 'yarn', pnpm && 'pnpm', bun && 'bun', 'manual']\n return choices.filter((pm): pm is PackageManager => pm !== false)\n}\n\nexport function hasNpmInstalled(cwd?: string): Promise<boolean> {\n return hasCommand('npm', cwd)\n}\n\nexport function hasYarnInstalled(cwd?: string): Promise<boolean> {\n return hasCommand('yarn', cwd)\n}\n\nexport function hasPnpmInstalled(cwd?: string): Promise<boolean> {\n return hasCommand('pnpm', cwd)\n}\n\nexport function hasBunInstalled(cwd?: string): Promise<boolean> {\n return hasCommand('bun', cwd)\n}\n\nexport function getNpmRunPath(cwd: string): string {\n let previous\n let cwdPath = path.resolve(cwd)\n const result: string[] = []\n\n while (previous !== cwdPath) {\n result.push(path.join(cwdPath, 'node_modules', '.bin'))\n previous = cwdPath\n cwdPath = path.resolve(cwdPath, '..')\n }\n\n result.push(path.resolve(cwd, process.execPath, '..'))\n\n const pathEnv = process.env[getPathEnvVarKey()]\n return [...result, pathEnv].join(path.delimiter)\n}\n\nexport function getPartialEnvWithNpmPath(cwd: string): NodeJS.ProcessEnv {\n const key = getPathEnvVarKey()\n return {[key]: getNpmRunPath(cwd)}\n}\n\nfunction getPathEnvVarKey(): string {\n if (process.platform !== 'win32') {\n return 'PATH'\n }\n\n return (\n Object.keys(process.env)\n .reverse()\n .find((key) => key.toUpperCase() === 'PATH') || 'Path'\n )\n}\n\nfunction getCommandPath(cmd: string, cwd?: string): Promise<string | null> {\n const options = {path: cwd ? getNpmRunPath(cwd) : undefined}\n return which(cmd, options).catch(() => null)\n}\n\nfunction hasCommand(cmd: string, cwd?: string): Promise<boolean> {\n return getCommandPath(cmd, cwd).then((cmdPath) => cmdPath !== null)\n}\n\nasync function getMostLikelyInstalledPackageManager(\n rootDir: string,\n): Promise<PackageManager | undefined> {\n const installed = await getAvailablePackageManagers(rootDir)\n const running = getRunningPackageManager()\n return running && installed.includes(running) ? running : undefined\n}\n\nfunction getRunningPackageManager(): PackageManager | undefined {\n // Yes, the env var is lowercase - it is set by the package managers themselves\n const agent = process.env.npm_config_user_agent || ''\n\n if (agent.includes('yarn')) {\n return 'yarn'\n }\n\n if (agent.includes('pnpm')) {\n return 'pnpm'\n }\n\n if (agent.includes('bun')) {\n return 'bun'\n }\n\n // Both yarn and pnpm does a `npm/?` thing, thus the slightly different match here\n // Theoretically not needed since we check for yarn/pnpm above, but in case other\n // package managers do the same thing, we'll (hopefully) catch them here.\n if (/^npm\\/\\d/.test(agent)) {\n return 'npm'\n }\n\n return undefined\n}\n","import execa, {type CommonOptions, type ExecaReturnValue} from 'execa'\n\nimport {getPartialEnvWithNpmPath, type PackageManager} from './packageManagerChoice'\n\nexport interface InstallOptions {\n packageManager: PackageManager\n packages: [name: string, version: string][]\n}\n\nexport async function upgradePackages(\n options: InstallOptions,\n context: {output: {print: (output: string) => void}; workDir: string},\n): Promise<void> {\n const {packageManager, packages} = options\n const {output, workDir} = context\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n env: getPartialEnvWithNpmPath(workDir),\n cwd: workDir,\n stdio: 'inherit',\n }\n const upgradePackageArgs = packages.map((pkg) => pkg.join('@'))\n let result: ExecaReturnValue<string> | undefined\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--legacy-peer-deps', ...upgradePackageArgs]\n output.print(`Running 'npm ${npmArgs.join(' ')}'`)\n result = await execa('npm', npmArgs, execOptions)\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['upgrade ', ...upgradePackageArgs]\n output.print(`Running 'yarn ${yarnArgs.join(' ')}'`)\n result = await execa('yarn', yarnArgs, execOptions)\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['upgrade', ...upgradePackageArgs]\n output.print(`Running 'pnpm ${pnpmArgs.join(' ')}'`)\n result = await execa('pnpm', pnpmArgs, execOptions)\n } else if (packageManager === 'bun') {\n const bunArgs = ['update', ...upgradePackageArgs]\n output.print(`Running 'bun ${bunArgs.join(' ')}'`)\n result = await execa('bun', bunArgs, execOptions)\n } else if (packageManager === 'manual') {\n output.print(\n `Manual installation selected - run 'npm upgrade ${upgradePackageArgs.join(' ')}' or equivalent`,\n )\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package upgrade failed')\n }\n}\n"],"names":["PACKAGES","name","supported","deprecatedBelow","checkStudioDependencyVersions","workDir","manifest","readPackageJson","path","join","dependencies","devDependencies","packageInfo","map","pkg","dependency","manifestPath","resolveFrom","silent","installed","semver","coerce","readPackageManifest","version","replace","isUntested","satisfies","gtr","isUnsupported","isDeprecated","ltr","installedPackages","Promise","all","filter","inp","unsupported","deprecated","untested","length","console","warn","listPackages","getUpgradeInstructions","getDowngradeInstructions","error","process","exit","pkgs","inst","highestSupported","sort","rcompare","generateHelpUrl","defaultStudioManifestProps","checkRequiredDependencies","context","determineIsApp","cliConfig","didInstall","installedSanityVersion","studioPath","output","studioPackageManifest","installedStyledComponentsVersion","readModuleVersion","wantedStyledComponentsVersionRange","peerDependencies","Error","declaredStyledComponentsVersion","file","args","argv","installDependencies","execa","cwd","stdio","isStyledComponentsVersionRangeInCatalog","startsWith","minDeclaredStyledComponentsVersion","minVersion","oneline","isComparableRange","prompt","cliPackageManager","packages","print","pkgName","Object","entries","declaration","push","getPackageManagerChoice","installNewPackages","mostOptimal","chosen","pkgManager","packageManager","range","test","EXPERIMENTAL","options","rootDir","preferred","preferredPM","hasCommand","mostLikelyPM","getMostLikelyInstalledPackageManager","interactive","isInteractive","getFallback","messageSuffix","getAvailablePackageManagers","single","type","choices","pm","value","includes","default","message","hasNpmInstalled","hasYarnInstalled","hasPnpmInstalled","hasBunInstalled","npm","yarn","pnpm","bun","getNpmRunPath","previous","cwdPath","resolve","result","execPath","pathEnv","env","getPathEnvVarKey","delimiter","getPartialEnvWithNpmPath","platform","keys","reverse","find","key","toUpperCase","getCommandPath","cmd","undefined","which","catch","then","cmdPath","running","getRunningPackageManager","agent","npm_config_user_agent","upgradePackages","execOptions","encoding","upgradePackageArgs","npmArgs","yarnArgs","pnpmArgs","bunArgs","exitCode","failed"],"mappings":";;;;;;;;AAoBA,MAAMA,WAAW,CACf;AAAA,EAACC,MAAM;AAAA,EAASC,WAAW,CAAC,YAAY;AAAA,EAAGC,iBAAiB;AAAI,GAChE;AAAA,EAACF,MAAM;AAAA,EAAaC,WAAW,CAAC,YAAY;AAAA,EAAGC,iBAAiB;AAAI,GACpE;AAAA,EAACF,MAAM;AAAA,EAAqBC,WAAW,CAAC,IAAI;AAAA,EAAGC,iBAAiB;AAAI,GACpE;AAAA,EAACF,MAAM;AAAA,EAAcC,WAAW,CAAC,MAAM,IAAI;AAAA,EAAGC,iBAAiB;AAAI,CAAC;AAGtE,eAAsBC,8BAA8BC,SAAgC;AAClF,QAAMC,WAAW,MAAMC,sBAAAA,gBAAgBC,cAAAA,QAAKC,KAAKJ,SAAS,cAAc,CAAC,GACnEK,eAAe;AAAA,IAAC,GAAGJ,SAASI;AAAAA,IAAc,GAAGJ,SAASK;AAAAA,EAAAA,GAEtDC,cAAcZ,SAASa,IAAI,OAAOC,QAAsC;AAC5E,UAAMC,aAAaL,aAAaI,IAAIb,IAAI;AACxC,QAAI,CAACc;AACH,aAAO;AAGT,UAAMC,eAAeC,qBAAAA,QAAYC,OAAOb,SAASG,cAAAA,QAAKC,KAAKK,IAAIb,MAAM,cAAc,CAAC,GAC9EkB,YAAYC,wBAAOC,OACvBL,gBACK,MAAMM,sBAAAA,oBAAoBN,YAAY,GAAGO,UAC1CR,WAAWS,QAAQ,UAAU,EAAE,CACrC;AAEA,QAAI,CAACL;AACH,aAAO;AAGT,UAAMjB,YAAYY,IAAIZ,UAAUO,KAAK,MAAM,GAMrCgB,aAAa,CAACL,gBAAAA,QAAOM,UAAUP,WAAWjB,SAAS,KAAKkB,gBAAAA,QAAOO,IAAIR,WAAWjB,SAAS,GAIvF0B,gBAAgB,CAACR,gBAAAA,QAAOM,UAAUP,WAAWjB,SAAS,KAAK,CAACuB,YAI5DI,eAAef,IAAIX,kBAAkBiB,gBAAAA,QAAOU,IAAIX,WAAWL,IAAIX,eAAe,IAAI;AAExF,WAAO;AAAA,MACL,GAAGW;AAAAA,MACHK;AAAAA,MACAS;AAAAA,MACAC;AAAAA,MACAJ;AAAAA,IAAAA;AAAAA,EAEJ,CAAC,GAEKM,qBAAqB,MAAMC,QAAQC,IAAIrB,WAAW,GAAGsB,OACxDC,SAA4BA,QAAQ,EACvC,GACMC,cAAcL,kBAAkBG,OAAQpB,CAAAA,QAAQA,IAAIc,aAAa,GACjES,aAAaN,kBAAkBG,OAAQpB,CAAAA,QAAQ,CAACA,IAAIc,iBAAiBd,IAAIe,YAAY,GACrFS,WAAWP,kBAAkBG,OAAQpB,CAAAA,QAAQA,IAAIW,UAAU;AAE7DY,aAAWE,SAAS,KACtBC,QAAQC,KAAK;AAAA;AAAA;AAAA,IAGbC,aAAaL,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA,IAIxBM,uBAAuBN,UAAU,CAAC;AAAA,CACrC,GAGKC,SAASC,SAAS,KACpBC,QAAQC,KAAK;AAAA;AAAA;AAAA,IAGbC,aAAaJ,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA,IAItBM,yBAAyBN,QAAQ,CAAC;AAAA,CACrC,GAGKF,YAAYG,SAAS,MACvBC,QAAQK,MAAM;AAAA;AAAA;AAAA,IAGdH,aAAaN,WAAW,CAAC;AAAA;AAAA,IAEzBO,uBAAuBP,WAAW,CAAC;AAAA,CACtC,GACGU,QAAQC,KAAK,CAAC;AAElB;AAEA,SAASL,aAAaM,MAAqB;AACzC,SAAOA,KACJnC,IACEC,CAAAA,QACC,GAAGA,IAAIb,IAAI,gBAAgBa,IAAIK,SAAS,WACtCL,IAAIX,mBAAmBW,IAAIZ,UAAUO,KAAK,MAAM,CAAC,GAEvD,EACCA,KAAK;AAAA,GAAM;AAChB;AAEA,SAASkC,uBAAuBK,MAAqB;AACnD,QAAMC,OAAOD,KACVnC,IAAKC,CAAAA,QAAQ;AACZ,UAAM,CAACoC,gBAAgB,IAAIpC,IAAIZ,UAC5BW,IAAKU,CAAAA,aAAaH,gBAAAA,QAAOC,OAAOE,OAAO,KAAK;AAAA,MAACA,SAAS;AAAA,IAAA,GAAKA,OAAO,EAClE4B,KAAK/B,gBAAAA,QAAOgC,QAAQ;AAEvB,WAAO,IAAItC,IAAIb,IAAI,IAAIiD,gBAAgB;AAAA,EACzC,CAAC,EACAzC,KAAK,GAAG;AAEX,SAAO;AAAA;AAAA,gBAEOwC,IAAI;AAAA;AAAA;AAAA;AAAA,aAIPA,IAAI;AAAA;AAAA;AAAA;AAAA,aAIJA,IAAI;AAAA;AAAA;AAAA,eAGFI,oBAAAA,gBAAgB,kBAAkB,CAAC;AAClD;AAEA,SAAST,yBAAyBI,MAAqB;AACrD,QAAMC,OAAOD,KACVnC,IAAKC,CAAAA,QAAQ;AACZ,UAAM,CAACoC,gBAAgB,IAAIpC,IAAIZ,UAC5BW,IAAKU,CAAAA,aAAaH,gBAAAA,QAAOC,OAAOE,OAAO,KAAK;AAAA,MAACA,SAAS;AAAA,IAAA,GAAKA,OAAO,EAClE4B,KAAK/B,gBAAAA,QAAOgC,QAAQ;AAEvB,WAAO,IAAItC,IAAIb,IAAI,IAAIiD,gBAAgB;AAAA,EACzC,CAAC,EACAzC,KAAK,GAAG;AAEX,SAAO;AAAA;AAAA,aAEIwC,IAAI;AAAA;AAAA;AAAA;AAAA,gBAIDA,IAAI;AAAA;AAAA;AAAA;AAAA,iBAIHA,IAAI;AACrB;ACpKA,MAAMK,6BAAqD;AAAA,EACzDrD,MAAM;AAAA,EACNsB,SAAS;AACX;AAkBA,eAAsBgC,0BAA0BC,SAAkD;AAIhG,MADcC,UAAAA,eAAeD,QAAQE,SAAS;AAE5C,WAAO;AAAA,MAACC,YAAY;AAAA,MAAOC,wBAAwB;AAAA,IAAA;AAGrD,QAAM;AAAA,IAACvD,SAASwD;AAAAA,IAAYC;AAAAA,EAAAA,IAAUN,SAChC,CAACO,uBAAuBC,kCAAkCJ,sBAAsB,IACpF,MAAM5B,QAAQC,IAAI,CAChB,MAAMX,sBAAAA,oBAAoBd,cAAAA,QAAKC,KAAKoD,YAAY,cAAc,GAAGP,0BAA0B,GAC3F,MAAMW,sBAAAA,kBAAkBJ,YAAY,mBAAmB,GACvD,MAAMI,sBAAAA,kBAAkBJ,YAAY,QAAQ,CAAC,CAC9C,GAEGK,qCAAqCC,iBAAiB,mBAAmB;AAG/E,MAAI,CAACP;AACH,UAAM,IAAIQ,MAAM,8CAA8C;AAMhE,QAAMC,kCACJN,sBAAsBrD,aAAa,mBAAmB,KACtDqD,sBAAsBpD,gBAAgB,mBAAmB;AAE3D,MAAI,CAAC0D,iCAAiC;AACpC,UAAM,CAACC,MAAM,GAAGC,IAAI,IAAIzB,QAAQ0B;AAEhC,WAAA,MAAMC,oBADO;AAAA,MAAC,qBAAqBP;AAAAA,IAAAA,GACHV,OAAO,GAMvC,MAAMkB,uBAAMJ,MAAMC,MAAM;AAAA,MAACI,KAAKd;AAAAA,MAAYe,OAAO;AAAA,IAAA,CAAU,GACpD;AAAA,MAACjB,YAAY;AAAA,MAAMC;AAAAA,IAAAA;AAAAA,EAC5B;AAGA,QAAMiB,0CACJR,gCAAgCS,WAAW,UAAU;AAEvD,MAAIC,qCAAoD;AACxD,MAAI;AACFA,yCAAqC3D,gBAAAA,QAAO4D,WAAWX,+BAA+B;AAAA,EACxF,QAAc;AAAA,EACZ;AAGF,MAAI,CAACU,sCAAsC,CAACF;AAC1C,UAAM,IAAIT,MAAMa,iBAAAA;AAAAA;AAAAA,UAEVZ,+BAA+B;AAAA,KACpC;AAsBH,MAZE,CAACQ,2CACDK,kBAAkBb,+BAA+B,KACjD,CAACjD,gBAAAA,QAAOM,UAAUqD,oCAAqCb,kCAAkC,KAEzFJ,OAAOrB,KAAKwC,iBAAAA;AAAAA,+CAC+BZ,+BAA+B;AAAA,+DACfH,kCAAkC;AAAA;AAAA,KAE5F,GAIC,CAACF;AACH,UAAM,IAAII,MAAMa,iBAAAA;AAAAA;AAAAA;AAAAA,KAGf;AAKH,SAAK7D,gBAAAA,QAAOM,UAAUsC,kCAAkCE,kCAAkC,KACxFJ,OAAOrB,KAAKwC,iBAAAA;AAAAA,gDACgCjB,gCAAgC;AAAA,+DACjBE,kCAAkC;AAAA;AAAA,KAE5F,GAGI;AAAA,IAACP,YAAY;AAAA,IAAOC;AAAAA,EAAAA;AAC7B;AAUA,eAAea,oBACb/D,cACA8C,SACe;AACf,QAAM;AAAA,IAACM;AAAAA,IAAQqB;AAAAA,IAAQ9E;AAAAA,IAAS+E;AAAAA,EAAAA,IAAqB5B,SAC/C6B,WAAqB,CAAA;AAE3BvB,SAAOwB,MAAM,0DAA0D;AACvE,aAAW,CAACC,SAAShE,OAAO,KAAKiE,OAAOC,QAAQ/E,YAAY,GAAG;AAC7D,UAAMgF,cAAc,GAAGH,OAAO,IAAIhE,OAAO;AACzCuC,WAAOwB,MAAM,KAAKI,WAAW,EAAE,GAC/BL,SAASM,KAAKD,WAAW;AAAA,EAC3B;AAEA,MAAI,CAACN,mBAAmB;AACtBtB,WAAOjB,MACL,qFACF;AACA;AAAA,EACF;AAEA,QAAM;AAAA,IAAC+C,yBAAAA;AAAAA,IAAyBC;AAAAA,EAAAA,IAAsBT,mBAChD;AAAA,IAACU;AAAAA,IAAaC,QAAQC;AAAAA,EAAAA,IAAc,MAAMJ,yBAAwBvF,SAAS;AAAA,IAAC8E;AAAAA,EAAAA,CAAO;AACrFW,iBAAeE,eAAeF,eAChChC,OAAOrB,KACL,4DAA4DqD,WAAW,8DACzE,GAGF,MAAMD,mBAAmB;AAAA,IAACR;AAAAA,IAAUY,gBAAgBD;AAAAA,EAAAA,GAAaxC,OAAO;AAC1E;AAEA,SAAS0B,kBAAkBgB,OAAwB;AACjD,SAAO,8BAA8BC,KAAKD,KAAK;AACjD;AChKA,MAAME,eAAe,CAAC,KAAK;AAuB3B,eAAsBR,wBACpBvF,SACAgG,SACiE;AACjE,QAAMC,UAAUjG,WAAWyC,QAAQ6B,IAAAA,GAC7B4B,aAAa,MAAMC,qBAAAA,QAAYF,OAAO,IAAIrG;AAEhD,MAAIsG,aAAc,MAAME,WAAWF,WAAWD,OAAO;AAEnD,WAAO;AAAA,MAACP,QAAQQ;AAAAA,MAAWT,aAAaS;AAAAA,IAAAA;AAG1C,QAAMG,eAAe,MAAMC,qCAAqCL,OAAO;AAEvE,MAAI,EADgB,OAAOD,QAAQO,eAAgB,YAAYP,QAAQO,cAAcC;AAKnF,WAAO;AAAA,MAACd,QAAQW,gBAAiB,MAAMI,YAAYR,OAAO;AAAA,MAAIR,aAAaS;AAAAA,IAAAA;AAG7E,MAAI,EAAE,YAAYF;AAChB,UAAM,IAAIjC,MAAM,6CAA6C;AAI/D,QAAM2C,gBAAgBR,YAAY,kBAAkBA,SAAS,4BAA4B,IACnFpF,YAAY,MAAM6F,4BAA4BV,OAAO;AAW3D,SAAO;AAAA,IAACP,QAVO,MAAMM,QAAQlB,OAAO8B,OAAuB;AAAA,MACzDC,MAAM;AAAA,MACNC,SAAShG,UAAUN,IAAKuG,CAAAA,QAAQ;AAAA,QAC9BC,OAAOD;AAAAA,QACPnH,MAAMmG,aAAakB,SAASF,EAAE,IAAI,GAAGA,EAAE,oBAAoBA;AAAAA,MAAAA,EAC3D;AAAA,MACFG,SAAShB,aAAaG;AAAAA,MACtBc,SAAS,sDAAsDT,aAAa;AAAA,IAAA,CAC7E;AAAA,IAEejB,aAAaS;AAAAA,EAAAA;AAC/B;AAEA,eAAeO,YAAYnC,KAAsC;AAC/D,SAAI,MAAM8C,gBAAgB9C,GAAG,IACpB,QAGL,MAAM+C,iBAAiB/C,GAAG,IACrB,SAGL,MAAMgD,iBAAiBhD,GAAG,IACrB,SAGL,MAAMiD,gBAAgBjD,GAAG,IACpB,QAGF;AACT;AAEA,eAAeqC,4BAA4BrC,KAAwC;AACjF,QAAM,CAACkD,KAAKC,MAAMC,MAAMC,GAAG,IAAI,MAAMhG,QAAQC,IAAI,CAC/CwF,gBAAgB9C,GAAG,GACnB+C,iBAAiB/C,GAAG,GACpBgD,iBAAiBhD,GAAG,GACpBiD,gBAAgBjD,GAAG,CAAC,CACrB;AAGD,SADgB,CAACkD,OAAO,OAAOC,QAAQ,QAAQC,QAAQ,QAAQC,OAAO,OAAO,QAAQ,EACtE9F,OAAQkF,CAAAA,OAA6BA,OAAO,EAAK;AAClE;AAEO,SAASK,gBAAgB9C,KAAgC;AAC9D,SAAO8B,WAAW,OAAO9B,GAAG;AAC9B;AAEO,SAAS+C,iBAAiB/C,KAAgC;AAC/D,SAAO8B,WAAW,QAAQ9B,GAAG;AAC/B;AAEO,SAASgD,iBAAiBhD,KAAgC;AAC/D,SAAO8B,WAAW,QAAQ9B,GAAG;AAC/B;AAEO,SAASiD,gBAAgBjD,KAAgC;AAC9D,SAAO8B,WAAW,OAAO9B,GAAG;AAC9B;AAEO,SAASsD,cAActD,KAAqB;AACjD,MAAIuD,UACAC,UAAU3H,sBAAK4H,QAAQzD,GAAG;AAC9B,QAAM0D,SAAmB,CAAA;AAEzB,SAAOH,aAAaC;AAClBE,WAAO1C,KAAKnF,cAAAA,QAAKC,KAAK0H,SAAS,gBAAgB,MAAM,CAAC,GACtDD,WAAWC,SACXA,UAAU3H,cAAAA,QAAK4H,QAAQD,SAAS,IAAI;AAGtCE,SAAO1C,KAAKnF,cAAAA,QAAK4H,QAAQzD,KAAK7B,QAAQwF,UAAU,IAAI,CAAC;AAErD,QAAMC,UAAUzF,QAAQ0F,IAAIC,iBAAAA,CAAkB;AAC9C,SAAO,CAAC,GAAGJ,QAAQE,OAAO,EAAE9H,KAAKD,cAAAA,QAAKkI,SAAS;AACjD;AAEO,SAASC,yBAAyBhE,KAAgC;AAEvE,SAAO;AAAA,IAAC,CADI8D,iBAAAA,CACA,GAAGR,cAActD,GAAG;AAAA,EAAA;AAClC;AAEA,SAAS8D,mBAA2B;AAClC,SAAI3F,QAAQ8F,aAAa,UAChB,SAIPpD,OAAOqD,KAAK/F,QAAQ0F,GAAG,EACpBM,QAAAA,EACAC,KAAMC,CAAAA,QAAQA,IAAIC,YAAAA,MAAkB,MAAM,KAAK;AAEtD;AAEA,SAASC,eAAeC,KAAaxE,KAAsC;AACzE,QAAM0B,UAAU;AAAA,IAAC7F,MAAMmE,MAAMsD,cAActD,GAAG,IAAIyE;AAAAA,EAAAA;AAClD,SAAOC,eAAAA,QAAMF,KAAK9C,OAAO,EAAEiD,MAAM,MAAM,IAAI;AAC7C;AAEA,SAAS7C,WAAW0C,KAAaxE,KAAgC;AAC/D,SAAOuE,eAAeC,KAAKxE,GAAG,EAAE4E,KAAMC,CAAAA,YAAYA,YAAY,IAAI;AACpE;AAEA,eAAe7C,qCACbL,SACqC;AACrC,QAAMnF,YAAY,MAAM6F,4BAA4BV,OAAO,GACrDmD,UAAUC,yBAAAA;AAChB,SAAOD,WAAWtI,UAAUmG,SAASmC,OAAO,IAAIA,UAAUL;AAC5D;AAEA,SAASM,2BAAuD;AAE9D,QAAMC,QAAQ7G,QAAQ0F,IAAIoB,yBAAyB;AAEnD,MAAID,MAAMrC,SAAS,MAAM;AACvB,WAAO;AAGT,MAAIqC,MAAMrC,SAAS,MAAM;AACvB,WAAO;AAGT,MAAIqC,MAAMrC,SAAS,KAAK;AACtB,WAAO;AAMT,MAAI,WAAWnB,KAAKwD,KAAK;AACvB,WAAO;AAIX;ACjMA,eAAsBE,gBACpBxD,SACA7C,SACe;AACf,QAAM;AAAA,IAACyC;AAAAA,IAAgBZ;AAAAA,EAAAA,IAAYgB,SAC7B;AAAA,IAACvC;AAAAA,IAAQzD;AAAAA,EAAAA,IAAWmD,SACpBsG,cAAqC;AAAA,IACzCC,UAAU;AAAA,IACVvB,KAAKG,yBAAyBtI,OAAO;AAAA,IACrCsE,KAAKtE;AAAAA,IACLuE,OAAO;AAAA,EAAA,GAEHoF,qBAAqB3E,SAASxE,IAAKC,SAAQA,IAAIL,KAAK,GAAG,CAAC;AAC9D,MAAI4H;AACJ,MAAIpC,mBAAmB,OAAO;AAC5B,UAAMgE,UAAU,CAAC,WAAW,sBAAsB,GAAGD,kBAAkB;AACvElG,WAAOwB,MAAM,gBAAgB2E,QAAQxJ,KAAK,GAAG,CAAC,GAAG,GACjD4H,SAAS,MAAM3D,eAAAA,QAAM,OAAOuF,SAASH,WAAW;AAAA,EAClD,WAAW7D,mBAAmB,QAAQ;AACpC,UAAMiE,WAAW,CAAC,YAAY,GAAGF,kBAAkB;AACnDlG,WAAOwB,MAAM,iBAAiB4E,SAASzJ,KAAK,GAAG,CAAC,GAAG,GACnD4H,SAAS,MAAM3D,eAAAA,QAAM,QAAQwF,UAAUJ,WAAW;AAAA,EACpD,WAAW7D,mBAAmB,QAAQ;AACpC,UAAMkE,WAAW,CAAC,WAAW,GAAGH,kBAAkB;AAClDlG,WAAOwB,MAAM,iBAAiB6E,SAAS1J,KAAK,GAAG,CAAC,GAAG,GACnD4H,SAAS,MAAM3D,eAAAA,QAAM,QAAQyF,UAAUL,WAAW;AAAA,EACpD,WAAW7D,mBAAmB,OAAO;AACnC,UAAMmE,UAAU,CAAC,UAAU,GAAGJ,kBAAkB;AAChDlG,WAAOwB,MAAM,gBAAgB8E,QAAQ3J,KAAK,GAAG,CAAC,GAAG,GACjD4H,SAAS,MAAM3D,eAAAA,QAAM,OAAO0F,SAASN,WAAW;AAAA,EAClD,MAAW7D,oBAAmB,YAC5BnC,OAAOwB,MACL,mDAAmD0E,mBAAmBvJ,KAAK,GAAG,CAAC,iBACjF;AAGF,MAAI4H,QAAQgC,YAAYhC,QAAQiC;AAC9B,UAAM,IAAIlG,MAAM,wBAAwB;AAE5C;;;;;"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
"use strict";
|
2
|
-
var path = require("node:path"), resolveFrom = require("resolve-from"), semver = require("semver"), fs = require("node:fs/promises"), chalk = require("chalk");
|
2
|
+
var path = require("node:path"), resolveFrom = require("resolve-from"), semver = require("semver"), fs = require("node:fs/promises"), chalk = require("chalk"), logSymbols = require("log-symbols");
|
3
3
|
function _interopDefaultCompat(e) {
|
4
4
|
return e && typeof e == "object" && "default" in e ? e : { default: e };
|
5
5
|
}
|
@@ -18,8 +18,23 @@ function getAppAutoUpdateImportMapForPackage(pkg, options = {}) {
|
|
18
18
|
function getModuleUrl(pkg, options = {}) {
|
19
19
|
const {
|
20
20
|
timestamp = currentUnixTime()
|
21
|
-
} = options
|
22
|
-
return
|
21
|
+
} = options;
|
22
|
+
return options.appId ? getByAppModuleUrl(pkg, {
|
23
|
+
appId: options.appId,
|
24
|
+
baseUrl: options.baseUrl,
|
25
|
+
timestamp
|
26
|
+
}) : getLegacyModuleUrl(pkg, {
|
27
|
+
timestamp,
|
28
|
+
baseUrl: options.baseUrl
|
29
|
+
});
|
30
|
+
}
|
31
|
+
function getLegacyModuleUrl(pkg, options) {
|
32
|
+
const encodedMinVer = encodeURIComponent(`^${pkg.version}`);
|
33
|
+
return `${options.baseUrl || MODULES_HOST}/v1/modules/${rewriteScopedPackage(pkg.name)}/default/${encodedMinVer}/t${options.timestamp}`;
|
34
|
+
}
|
35
|
+
function getByAppModuleUrl(pkg, options) {
|
36
|
+
const encodedMinVer = encodeURIComponent(`^${pkg.version}`);
|
37
|
+
return `${options.baseUrl || MODULES_HOST}/v1/modules/by-app/${options.appId}/t${options.timestamp}/${encodedMinVer}/${rewriteScopedPackage(pkg.name)}`;
|
23
38
|
}
|
24
39
|
function rewriteScopedPackage(pkgName) {
|
25
40
|
if (!pkgName.includes("@"))
|
@@ -115,7 +130,25 @@ function shouldAutoUpdate({
|
|
115
130
|
}
|
116
131
|
return !!flags["auto-updates"];
|
117
132
|
}
|
118
|
-
|
133
|
+
const hasOldCliConfigFlag = cliConfig && "autoUpdates" in cliConfig, hasNewCliConfigFlag = cliConfig && "deployment" in cliConfig && cliConfig.deployment && "autoUpdates" in cliConfig.deployment;
|
134
|
+
if (hasOldCliConfigFlag && hasNewCliConfigFlag)
|
135
|
+
throw new Error("Found both `autoUpdates` (deprecated) and `deployment.autoUpdates` in sanity.cli.js. Please remove the deprecated top level `autoUpdates` config.");
|
136
|
+
return hasOldCliConfigFlag && output?.warn(chalk__default.default.yellow(`The \`autoUpdates\` config has moved to \`deployment.autoUpdates\`.
|
137
|
+
Please update \`sanity.cli.ts\` or \`sanity.cli.js\` and make the following change:
|
138
|
+
${chalk__default.default.red(`- autoUpdates: ${cliConfig.autoUpdates},`)}
|
139
|
+
${chalk__default.default.green(`+ deployment: {autoUpdates: ${cliConfig.autoUpdates}}}`)}
|
140
|
+
`)), !!(hasOldCliConfigFlag ? cliConfig.autoUpdates : cliConfig?.deployment?.autoUpdates);
|
141
|
+
}
|
142
|
+
const baseUrl = process.env.SANITY_INTERNAL_ENV === "staging" ? "https://sanity.work" : "https://sanity.io";
|
143
|
+
function warnAboutMissingAppId({
|
144
|
+
appType,
|
145
|
+
projectId,
|
146
|
+
output,
|
147
|
+
cliConfigPath
|
148
|
+
}) {
|
149
|
+
const manageUrl = `${baseUrl}/manage${projectId ? `/project/${projectId}/studios` : ""}`, cliConfigFile = cliConfigPath ? path__default.default.basename(cliConfigPath) : "sanity.cli.js";
|
150
|
+
output.print(`${logSymbols.warning} No ${chalk__default.default.bold("appId")} configured. This ${appType} will auto-update to the ${chalk__default.default.green.bold("latest")} channel. To enable fine grained version selection, head over to ${chalk__default.default.cyan(manageUrl)} and add the appId to the ${chalk__default.default.bold("deployment")} section in ${chalk__default.default.bold(cliConfigFile)}.
|
151
|
+
`);
|
119
152
|
}
|
120
153
|
exports.compareDependencyVersions = compareDependencyVersions;
|
121
154
|
exports.getAutoUpdatesImportMap = getAutoUpdatesImportMap;
|
@@ -123,4 +156,5 @@ exports.readModuleVersion = readModuleVersion;
|
|
123
156
|
exports.readPackageJson = readPackageJson;
|
124
157
|
exports.readPackageManifest = readPackageManifest;
|
125
158
|
exports.shouldAutoUpdate = shouldAutoUpdate;
|
126
|
-
|
159
|
+
exports.warnAboutMissingAppId = warnAboutMissingAppId;
|
160
|
+
//# sourceMappingURL=warnAboutMissingAppId.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"warnAboutMissingAppId.js","sources":["../../src/_internal/cli/util/getAutoUpdatesImportMap.ts","../../src/_internal/cli/util/readPackageManifest.ts","../../src/_internal/cli/util/compareDependencyVersions.ts","../../src/_internal/cli/util/readModuleVersion.ts","../../src/_internal/cli/util/shouldAutoUpdate.ts","../../src/_internal/cli/util/baseUrl.ts","../../src/_internal/cli/util/warnAboutMissingAppId.ts"],"sourcesContent":["const MODULES_HOST =\n process.env.SANITY_MODULES_HOST ||\n (process.env.SANITY_INTERNAL_ENV === 'staging'\n ? 'https://sanity-cdn.work'\n : 'https://sanity-cdn.com')\n\nfunction currentUnixTime(): number {\n return Math.floor(Date.now() / 1000)\n}\n\ntype Package = {version: string; name: string}\n/**\n * @internal\n */\nexport function getAutoUpdatesImportMap<const Pkg extends Package>(\n packages: Pkg[],\n options: {timestamp?: number; baseUrl?: string; appId?: string} = {},\n) {\n return Object.fromEntries(\n packages.flatMap((pkg) => getAppAutoUpdateImportMapForPackage(pkg, options)),\n ) as {[K in Pkg['name'] | `${Pkg['name']}/`]: string}\n}\n\nfunction getAppAutoUpdateImportMapForPackage<const Pkg extends Package>(\n pkg: Pkg,\n options: {timestamp?: number; baseUrl?: string; appId?: string} = {},\n): [[Pkg['name'], string], [`${Pkg['name']}/`, string]] {\n const moduleUrl = getModuleUrl(pkg, options)\n\n return [\n [pkg.name, moduleUrl],\n [`${pkg.name}/`, `${moduleUrl}/`],\n ]\n}\n\nexport function getModuleUrl(\n pkg: Package,\n options: {timestamp?: number; baseUrl?: string; appId?: string} = {},\n) {\n const {timestamp = currentUnixTime()} = options\n return options.appId\n ? getByAppModuleUrl(pkg, {appId: options.appId, baseUrl: options.baseUrl, timestamp})\n : getLegacyModuleUrl(pkg, {timestamp, baseUrl: options.baseUrl})\n}\n\nfunction getLegacyModuleUrl(pkg: Package, options: {timestamp: number; baseUrl?: string}) {\n const encodedMinVer = encodeURIComponent(`^${pkg.version}`)\n return `${options.baseUrl || MODULES_HOST}/v1/modules/${rewriteScopedPackage(pkg.name)}/default/${encodedMinVer}/t${options.timestamp}`\n}\n\nfunction getByAppModuleUrl(\n pkg: Package,\n options: {appId: string; baseUrl?: string; timestamp: number},\n) {\n const encodedMinVer = encodeURIComponent(`^${pkg.version}`)\n return `${options.baseUrl || MODULES_HOST}/v1/modules/by-app/${options.appId}/t${options.timestamp}/${encodedMinVer}/${rewriteScopedPackage(pkg.name)}`\n}\n\n/**\n * replaces '/' with '__' similar to how eg `@types/scope__pkg` are rewritten\n * scoped packages are stored this way both in the manifest and in the cloud storage bucket\n */\nfunction rewriteScopedPackage(pkgName: string) {\n if (!pkgName.includes('@')) {\n return pkgName\n }\n const [scope, ...pkg] = pkgName.split('/')\n return `${scope}__${pkg.join('')}`\n}\n","import {readFile} from 'node:fs/promises'\n\nimport {type PackageJson} from '@sanity/cli'\n\ninterface DependencyDeclarations {\n dependencies: Record<string, string | undefined>\n devDependencies: Record<string, string | undefined>\n}\n\ninterface PackageManifest extends DependencyDeclarations {\n name: string\n version: string\n}\n\nexport interface PartialPackageManifest extends Partial<DependencyDeclarations> {\n name: string\n version: string\n}\n\nfunction isPackageManifest(item: unknown): item is PartialPackageManifest {\n return typeof item === 'object' && item !== null && 'name' in item && 'version' in item\n}\n\n/**\n * Read the `package.json` file at the given path\n *\n * @param filePath - Path to package.json to read\n * @returns The parsed package.json\n */\nexport async function readPackageJson(filePath: string): Promise<PackageJson> {\n try {\n return JSON.parse(await readFile(filePath, 'utf8'))\n } catch (err) {\n throw new Error(`Failed to read \"${filePath}\": ${err.message}`)\n }\n}\n/**\n * Read the `package.json` file at the given path and return an object that guarantees\n * the presence of name, version, dependencies, dev dependencies and peer dependencies\n *\n * @param packageJsonPath - Path to package.json to read\n * @returns Reduced package.json with guarantees for name, version and dependency fields\n */\nexport async function readPackageManifest(\n packageJsonPath: string,\n defaults: Partial<PartialPackageManifest> = {},\n): Promise<PackageManifest> {\n let manifest: unknown\n try {\n manifest = {...defaults, ...(await readPackageJson(packageJsonPath))}\n } catch (err) {\n throw new Error(`Failed to read \"${packageJsonPath}\": ${err.message}`)\n }\n\n if (!isPackageManifest(manifest)) {\n throw new Error(`Failed to read \"${packageJsonPath}\": Invalid package manifest`)\n }\n\n const {name, version, dependencies = {}, devDependencies = {}} = manifest\n return {name, version, dependencies, devDependencies}\n}\n","import path from 'node:path'\n\nimport resolveFrom from 'resolve-from'\nimport semver from 'semver'\n\nimport {getModuleUrl} from './getAutoUpdatesImportMap'\nimport {readPackageManifest} from './readPackageManifest'\n\nfunction getRemoteResolvedVersion(fetchFn: typeof fetch, url: string) {\n return fetchFn(url, {\n method: 'HEAD',\n redirect: 'manual',\n }).then(\n (res) => {\n // 302 is expected, but lets also handle 2xx\n if (res.ok || res.status < 400) {\n const resolved = res.headers.get('x-resolved-version')\n if (!resolved) {\n throw new Error(`Missing 'x-resolved-version' header on response from HEAD ${url}`)\n }\n return resolved\n }\n throw new Error(`Unexpected HTTP response: ${res.status} ${res.statusText}`)\n },\n (err) => {\n throw new Error(`Failed to fetch remote version for ${url}: ${err.message}`, {cause: err})\n },\n )\n}\n\ninterface CompareDependencyVersions {\n pkg: string\n installed: string\n remote: string\n}\n\n/**\n * Compares the versions of dependencies in the studio or app with their remote versions.\n *\n * This function reads the package.json file in the provided working directory, and compares the versions of the dependencies\n * specified in the `autoUpdatesImports` parameter with their remote versions. If the versions do not match, the dependency is\n * added to a list of failed dependencies, which is returned by the function.\n *\n * The failed dependencies are anything that does not strictly match the remote version.\n * This means that if a version is lower or greater by even a patch it will be marked as failed.\n *\n * @param autoUpdatesImports - An object mapping package names to their remote import URLs.\n * @param workDir - The path to the working directory containing the package.json file.\n * @param fetchFn - Optional {@link https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API | Fetch}-compatible function to use for requesting the current remote version of a module\n *\n * @returns A promise that resolves to an array of objects, each containing\n * the name of a package whose local and remote versions do not match, along with the local and remote versions.\n *\n * @throws Throws an error if the remote version of a package cannot be fetched, or if the local version of a package\n * cannot be parsed.\n */\nexport async function compareDependencyVersions(\n packages: {version: string; name: string}[],\n workDir: string,\n {fetchFn = globalThis.fetch}: {appId?: string; fetchFn?: typeof fetch} = {},\n): Promise<Array<CompareDependencyVersions>> {\n const manifest = await readPackageManifest(path.join(workDir, 'package.json'))\n const dependencies = {...manifest.dependencies, ...manifest.devDependencies}\n\n const failedDependencies: Array<CompareDependencyVersions> = []\n\n for (const pkg of packages) {\n const resolvedVersion = await getRemoteResolvedVersion(fetchFn, getModuleUrl(pkg))\n\n const manifestPath = resolveFrom.silent(workDir, path.join(pkg.name, 'package.json'))\n\n const manifestVersion = dependencies[pkg.name]\n\n const installed = semver.coerce(\n manifestPath\n ? semver.parse((await readPackageManifest(manifestPath)).version)\n : semver.coerce(manifestVersion),\n )\n\n if (!installed) {\n throw new Error(`Failed to parse installed version for ${pkg}`)\n }\n\n if (!semver.eq(resolvedVersion, installed.version)) {\n failedDependencies.push({\n pkg: pkg.name,\n installed: installed.version,\n remote: resolvedVersion,\n })\n }\n }\n\n return failedDependencies\n}\n","import path from 'node:path'\n\nimport resolveFrom from 'resolve-from'\n\nimport {readPackageManifest} from './readPackageManifest'\n\n/**\n * Reads the version number of the _installed_ module, or returns `null` if not found\n *\n * @param dir - Path of the directory to read the module from\n * @param moduleName - Name of module to get installed version for\n * @returns Version number, of null\n */\nexport async function readModuleVersion(dir: string, moduleName: string): Promise<string | null> {\n const manifestPath = resolveFrom.silent(dir, path.join(moduleName, 'package.json'))\n return manifestPath ? (await readPackageManifest(manifestPath)).version : null\n}\n","import {type CliConfig} from '@sanity/cli'\nimport chalk from 'chalk'\n\ninterface AutoUpdateSources {\n flags: {['auto-updates']?: boolean}\n cliConfig?: CliConfig\n output?: {warn: (message: string) => void}\n}\n\n/**\n * Compares parameters from various sources to determine whether or not to auto-update\n * @param sources - The sources of the auto-update parameter, including CLI flags and the CLI config\n * @returns boolean\n * @internal\n */\nexport function shouldAutoUpdate({flags, cliConfig, output}: AutoUpdateSources): boolean {\n // cli flags (for example, '--no-auto-updates') should take precedence\n if ('auto-updates' in flags) {\n if (output) {\n const flagUsed = flags['auto-updates'] ? '--auto-updates' : '--no-auto-updates'\n output.warn(\n chalk.yellow(\n `The ${flagUsed} flag is deprecated for \\`deploy\\` and \\`build\\` commands. Set the \\`autoUpdates\\` option in \\`sanity.cli.ts\\` or \\`sanity.cli.js\\` instead.`,\n ),\n )\n }\n return Boolean(flags['auto-updates'])\n }\n\n const hasOldCliConfigFlag = cliConfig && 'autoUpdates' in cliConfig\n const hasNewCliConfigFlag =\n cliConfig &&\n 'deployment' in cliConfig &&\n cliConfig.deployment &&\n 'autoUpdates' in cliConfig.deployment\n\n if (hasOldCliConfigFlag && hasNewCliConfigFlag) {\n throw new Error(\n 'Found both `autoUpdates` (deprecated) and `deployment.autoUpdates` in sanity.cli.js. Please remove the deprecated top level `autoUpdates` config.',\n )\n }\n if (hasOldCliConfigFlag) {\n output?.warn(\n chalk.yellow(\n `The \\`autoUpdates\\` config has moved to \\`deployment.autoUpdates\\`.\nPlease update \\`sanity.cli.ts\\` or \\`sanity.cli.js\\` and make the following change:\n${chalk.red(`- autoUpdates: ${cliConfig.autoUpdates},`)}\n${chalk.green(`+ deployment: {autoUpdates: ${cliConfig.autoUpdates}}}`)}\n`,\n ),\n )\n }\n return Boolean(hasOldCliConfigFlag ? cliConfig.autoUpdates : cliConfig?.deployment?.autoUpdates)\n}\n","export const baseUrl =\n process.env.SANITY_INTERNAL_ENV === 'staging' ? 'https://sanity.work' : 'https://sanity.io'\n","import path from 'node:path'\n\nimport {type CliOutputter} from '@sanity/cli'\nimport chalk from 'chalk'\nimport {warning} from 'log-symbols'\n\nimport {baseUrl} from './baseUrl'\n\nexport function warnAboutMissingAppId({\n appType,\n projectId,\n output,\n cliConfigPath,\n}: {\n appType: 'studio' | 'app'\n output: CliOutputter\n projectId: string | undefined\n cliConfigPath: string | undefined\n}) {\n const manageUrl = `${baseUrl}/manage${projectId ? `/project/${projectId}/studios` : ''}`\n const cliConfigFile = cliConfigPath ? path.basename(cliConfigPath) : 'sanity.cli.js'\n output.print(\n `${warning} No ${chalk.bold('appId')} configured. This ${appType} will auto-update to the ${chalk.green.bold('latest')} channel. To enable fine grained version selection, head over to ${chalk.cyan(manageUrl)} and add the appId to the ${chalk.bold('deployment')} section in ${chalk.bold(cliConfigFile)}.\n `,\n )\n}\n"],"names":["MODULES_HOST","process","env","SANITY_MODULES_HOST","SANITY_INTERNAL_ENV","currentUnixTime","Math","floor","Date","now","getAutoUpdatesImportMap","packages","options","Object","fromEntries","flatMap","pkg","getAppAutoUpdateImportMapForPackage","moduleUrl","getModuleUrl","name","timestamp","appId","getByAppModuleUrl","baseUrl","getLegacyModuleUrl","encodedMinVer","encodeURIComponent","version","rewriteScopedPackage","pkgName","includes","scope","split","join","isPackageManifest","item","readPackageJson","filePath","JSON","parse","readFile","err","Error","message","readPackageManifest","packageJsonPath","defaults","manifest","dependencies","devDependencies","getRemoteResolvedVersion","fetchFn","url","method","redirect","then","res","ok","status","resolved","headers","get","statusText","cause","compareDependencyVersions","workDir","globalThis","fetch","path","failedDependencies","resolvedVersion","manifestPath","resolveFrom","silent","manifestVersion","installed","semver","coerce","eq","push","remote","readModuleVersion","dir","moduleName","shouldAutoUpdate","flags","cliConfig","output","flagUsed","warn","chalk","yellow","Boolean","hasOldCliConfigFlag","hasNewCliConfigFlag","deployment","red","autoUpdates","green","warnAboutMissingAppId","appType","projectId","cliConfigPath","manageUrl","cliConfigFile","basename","print","warning","bold","cyan"],"mappings":";;;;;;AAAA,MAAMA,eACJC,QAAQC,IAAIC,wBACXF,QAAQC,IAAIE,wBAAwB,YACjC,4BACA;AAEN,SAASC,kBAA0B;AACjC,SAAOC,KAAKC,MAAMC,KAAKC,IAAAA,IAAQ,GAAI;AACrC;AAMO,SAASC,wBACdC,UACAC,UAAkE,IAClE;AACA,SAAOC,OAAOC,YACZH,SAASI,QAASC,SAAQC,oCAAoCD,KAAKJ,OAAO,CAAC,CAC7E;AACF;AAEA,SAASK,oCACPD,KACAJ,UAAkE,IACZ;AACtD,QAAMM,YAAYC,aAAaH,KAAKJ,OAAO;AAE3C,SAAO,CACL,CAACI,IAAII,MAAMF,SAAS,GACpB,CAAC,GAAGF,IAAII,IAAI,KAAK,GAAGF,SAAS,GAAG,CAAC;AAErC;AAEO,SAASC,aACdH,KACAJ,UAAkE,IAClE;AACA,QAAM;AAAA,IAACS,YAAYhB,gBAAAA;AAAAA,EAAgB,IAAKO;AACxC,SAAOA,QAAQU,QACXC,kBAAkBP,KAAK;AAAA,IAACM,OAAOV,QAAQU;AAAAA,IAAOE,SAASZ,QAAQY;AAAAA,IAASH;AAAAA,EAAAA,CAAU,IAClFI,mBAAmBT,KAAK;AAAA,IAACK;AAAAA,IAAWG,SAASZ,QAAQY;AAAAA,EAAAA,CAAQ;AACnE;AAEA,SAASC,mBAAmBT,KAAcJ,SAAgD;AACxF,QAAMc,gBAAgBC,mBAAmB,IAAIX,IAAIY,OAAO,EAAE;AAC1D,SAAO,GAAGhB,QAAQY,WAAWxB,YAAY,eAAe6B,qBAAqBb,IAAII,IAAI,CAAC,YAAYM,aAAa,KAAKd,QAAQS,SAAS;AACvI;AAEA,SAASE,kBACPP,KACAJ,SACA;AACA,QAAMc,gBAAgBC,mBAAmB,IAAIX,IAAIY,OAAO,EAAE;AAC1D,SAAO,GAAGhB,QAAQY,WAAWxB,YAAY,sBAAsBY,QAAQU,KAAK,KAAKV,QAAQS,SAAS,IAAIK,aAAa,IAAIG,qBAAqBb,IAAII,IAAI,CAAC;AACvJ;AAMA,SAASS,qBAAqBC,SAAiB;AAC7C,MAAI,CAACA,QAAQC,SAAS,GAAG;AACvB,WAAOD;AAET,QAAM,CAACE,OAAO,GAAGhB,GAAG,IAAIc,QAAQG,MAAM,GAAG;AACzC,SAAO,GAAGD,KAAK,KAAKhB,IAAIkB,KAAK,EAAE,CAAC;AAClC;ACjDA,SAASC,kBAAkBC,MAA+C;AACxE,SAAO,OAAOA,QAAS,YAAYA,SAAS,QAAQ,UAAUA,QAAQ,aAAaA;AACrF;AAQA,eAAsBC,gBAAgBC,UAAwC;AAC5E,MAAI;AACF,WAAOC,KAAKC,MAAM,MAAMC,GAAAA,SAASH,UAAU,MAAM,CAAC;AAAA,EACpD,SAASI,KAAK;AACZ,UAAM,IAAIC,MAAM,mBAAmBL,QAAQ,MAAMI,IAAIE,OAAO,EAAE;AAAA,EAChE;AACF;AAQA,eAAsBC,oBACpBC,iBACAC,WAA4C,IAClB;AAC1B,MAAIC;AACJ,MAAI;AACFA,eAAW;AAAA,MAAC,GAAGD;AAAAA,MAAU,GAAI,MAAMV,gBAAgBS,eAAe;AAAA,IAAA;AAAA,EACpE,SAASJ,KAAK;AACZ,UAAM,IAAIC,MAAM,mBAAmBG,eAAe,MAAMJ,IAAIE,OAAO,EAAE;AAAA,EACvE;AAEA,MAAI,CAACT,kBAAkBa,QAAQ;AAC7B,UAAM,IAAIL,MAAM,mBAAmBG,eAAe,6BAA6B;AAGjF,QAAM;AAAA,IAAC1B;AAAAA,IAAMQ;AAAAA,IAASqB,eAAe,CAAA;AAAA,IAAIC,kBAAkB,CAAA;AAAA,EAAC,IAAKF;AACjE,SAAO;AAAA,IAAC5B;AAAAA,IAAMQ;AAAAA,IAASqB;AAAAA,IAAcC;AAAAA,EAAAA;AACvC;ACpDA,SAASC,yBAAyBC,SAAuBC,KAAa;AACpE,SAAOD,QAAQC,KAAK;AAAA,IAClBC,QAAQ;AAAA,IACRC,UAAU;AAAA,EAAA,CACX,EAAEC,KACAC,CAAAA,QAAQ;AAEP,QAAIA,IAAIC,MAAMD,IAAIE,SAAS,KAAK;AAC9B,YAAMC,WAAWH,IAAII,QAAQC,IAAI,oBAAoB;AACrD,UAAI,CAACF;AACH,cAAM,IAAIjB,MAAM,6DAA6DU,GAAG,EAAE;AAEpF,aAAOO;AAAAA,IACT;AACA,UAAM,IAAIjB,MAAM,6BAA6Bc,IAAIE,MAAM,IAAIF,IAAIM,UAAU,EAAE;AAAA,EAC7E,GACCrB,CAAAA,QAAQ;AACP,UAAM,IAAIC,MAAM,sCAAsCU,GAAG,KAAKX,IAAIE,OAAO,IAAI;AAAA,MAACoB,OAAOtB;AAAAA,IAAAA,CAAI;AAAA,EAC3F,CACF;AACF;AA4BA,eAAsBuB,0BACpBtD,UACAuD,SACA;AAAA,EAACd,UAAUe,WAAWC;AAA+C,IAAI,IAC9B;AAC3C,QAAMpB,WAAW,MAAMH,oBAAoBwB,cAAAA,QAAKnC,KAAKgC,SAAS,cAAc,CAAC,GACvEjB,eAAe;AAAA,IAAC,GAAGD,SAASC;AAAAA,IAAc,GAAGD,SAASE;AAAAA,EAAAA,GAEtDoB,qBAAuD,CAAA;AAE7D,aAAWtD,OAAOL,UAAU;AAC1B,UAAM4D,kBAAkB,MAAMpB,yBAAyBC,SAASjC,aAAaH,GAAG,CAAC,GAE3EwD,eAAeC,qBAAAA,QAAYC,OAAOR,SAASG,sBAAKnC,KAAKlB,IAAII,MAAM,cAAc,CAAC,GAE9EuD,kBAAkB1B,aAAajC,IAAII,IAAI,GAEvCwD,YAAYC,gBAAAA,QAAOC,OACvBN,eACIK,wBAAOrC,OAAO,MAAMK,oBAAoB2B,YAAY,GAAG5C,OAAO,IAC9DiD,wBAAOC,OAAOH,eAAe,CACnC;AAEA,QAAI,CAACC;AACH,YAAM,IAAIjC,MAAM,yCAAyC3B,GAAG,EAAE;AAG3D6D,oBAAAA,QAAOE,GAAGR,iBAAiBK,UAAUhD,OAAO,KAC/C0C,mBAAmBU,KAAK;AAAA,MACtBhE,KAAKA,IAAII;AAAAA,MACTwD,WAAWA,UAAUhD;AAAAA,MACrBqD,QAAQV;AAAAA,IAAAA,CACT;AAAA,EAEL;AAEA,SAAOD;AACT;AChFA,eAAsBY,kBAAkBC,KAAaC,YAA4C;AAC/F,QAAMZ,eAAeC,qBAAAA,QAAYC,OAAOS,KAAKd,cAAAA,QAAKnC,KAAKkD,YAAY,cAAc,CAAC;AAClF,SAAOZ,gBAAgB,MAAM3B,oBAAoB2B,YAAY,GAAG5C,UAAU;AAC5E;ACDO,SAASyD,iBAAiB;AAAA,EAACC;AAAAA,EAAOC;AAAAA,EAAWC;AAAyB,GAAY;AAEvF,MAAI,kBAAkBF,OAAO;AAC3B,QAAIE,QAAQ;AACV,YAAMC,WAAWH,MAAM,cAAc,IAAI,mBAAmB;AAC5DE,aAAOE,KACLC,eAAAA,QAAMC,OACJ,OAAOH,QAAQ,8IACjB,CACF;AAAA,IACF;AACA,WAAOI,CAAAA,CAAQP,MAAM,cAAc;AAAA,EACrC;AAEA,QAAMQ,sBAAsBP,aAAa,iBAAiBA,WACpDQ,sBACJR,aACA,gBAAgBA,aAChBA,UAAUS,cACV,iBAAiBT,UAAUS;AAE7B,MAAIF,uBAAuBC;AACzB,UAAM,IAAIpD,MACR,mJACF;AAEF,SAAImD,uBACFN,QAAQE,KACNC,eAAAA,QAAMC,OACJ;AAAA;AAAA,EAEND,eAAAA,QAAMM,IAAI,mBAAmBV,UAAUW,WAAW,GAAG,CAAC;AAAA,EACtDP,eAAAA,QAAMQ,MAAM,gCAAgCZ,UAAUW,WAAW,IAAI,CAAC;AAAA,CAElE,CACF,GAEKL,CAAAA,EAAQC,sBAAsBP,UAAUW,cAAcX,WAAWS,YAAYE;AACtF;ACrDO,MAAM1E,UACXvB,QAAQC,IAAIE,wBAAwB,YAAY,wBAAwB;ACOnE,SAASgG,sBAAsB;AAAA,EACpCC;AAAAA,EACAC;AAAAA,EACAd;AAAAA,EACAe;AAMF,GAAG;AACD,QAAMC,YAAY,GAAGhF,OAAO,UAAU8E,YAAY,YAAYA,SAAS,aAAa,EAAE,IAChFG,gBAAgBF,gBAAgBlC,cAAAA,QAAKqC,SAASH,aAAa,IAAI;AACrEf,SAAOmB,MACL,GAAGC,WAAAA,OAAO,OAAOjB,eAAAA,QAAMkB,KAAK,OAAO,CAAC,qBAAqBR,OAAO,4BAA4BV,eAAAA,QAAMQ,MAAMU,KAAK,QAAQ,CAAC,oEAAoElB,eAAAA,QAAMmB,KAAKN,SAAS,CAAC,6BAA6Bb,eAAAA,QAAMkB,KAAK,YAAY,CAAC,eAAelB,eAAAA,QAAMkB,KAAKJ,aAAa,CAAC;AAAA,SAE9S;AACF;;;;;;;;"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "sanity",
|
3
|
-
"version": "4.9.0-next.
|
3
|
+
"version": "4.9.0-next.19+b914c01309",
|
4
4
|
"description": "Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches",
|
5
5
|
"keywords": [
|
6
6
|
"sanity",
|
@@ -266,13 +266,13 @@
|
|
266
266
|
"which": "^5.0.0",
|
267
267
|
"xstate": "^5.21.0",
|
268
268
|
"yargs": "^17.7.2",
|
269
|
-
"@sanity/cli": "4.9.0-next.
|
270
|
-
"@sanity/
|
271
|
-
"@sanity/
|
272
|
-
"@sanity/schema": "4.9.0-next.
|
273
|
-
"@sanity/
|
274
|
-
"@sanity/util": "4.9.0-next.
|
275
|
-
"@sanity/
|
269
|
+
"@sanity/cli": "4.9.0-next.19+b914c01309",
|
270
|
+
"@sanity/diff": "4.9.0-next.19+b914c01309",
|
271
|
+
"@sanity/mutator": "4.9.0-next.19+b914c01309",
|
272
|
+
"@sanity/schema": "4.9.0-next.19+b914c01309",
|
273
|
+
"@sanity/types": "4.9.0-next.19+b914c01309",
|
274
|
+
"@sanity/util": "4.9.0-next.19+b914c01309",
|
275
|
+
"@sanity/migrate": "4.9.0-next.19+b914c01309"
|
276
276
|
},
|
277
277
|
"devDependencies": {
|
278
278
|
"@playwright/experimental-ct-react": "1.55.0",
|
@@ -315,12 +315,12 @@
|
|
315
315
|
"swr": "2.2.5",
|
316
316
|
"vitest": "^3.2.4",
|
317
317
|
"vitest-package-exports": "^0.1.1",
|
318
|
-
"@repo/dev-aliases": "4.9.0-next.
|
319
|
-
"@repo/
|
320
|
-
"@repo/package.
|
321
|
-
"@repo/
|
322
|
-
"@
|
323
|
-
"@
|
318
|
+
"@repo/dev-aliases": "4.9.0-next.19+b914c01309",
|
319
|
+
"@repo/eslint-config": "4.9.0-next.19+b914c01309",
|
320
|
+
"@repo/package.bundle": "4.9.0-next.19+b914c01309",
|
321
|
+
"@repo/test-config": "4.9.0-next.19+b914c01309",
|
322
|
+
"@sanity/codegen": "4.9.0-next.19+b914c01309",
|
323
|
+
"@repo/package.config": "4.9.0-next.19+b914c01309"
|
324
324
|
},
|
325
325
|
"peerDependencies": {
|
326
326
|
"react": "^18 || ^19",
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"shouldAutoUpdate.js","sources":["../../src/_internal/cli/util/getAutoUpdatesImportMap.ts","../../src/_internal/cli/util/readPackageManifest.ts","../../src/_internal/cli/util/compareDependencyVersions.ts","../../src/_internal/cli/util/readModuleVersion.ts","../../src/_internal/cli/util/shouldAutoUpdate.ts"],"sourcesContent":["const MODULES_HOST =\n process.env.SANITY_MODULES_HOST ||\n (process.env.SANITY_INTERNAL_ENV === 'staging'\n ? 'https://sanity-cdn.work'\n : 'https://sanity-cdn.com')\n\nfunction currentUnixTime(): number {\n return Math.floor(Date.now() / 1000)\n}\n\ntype Package = {version: string; name: string}\n/**\n * @internal\n */\nexport function getAutoUpdatesImportMap<const Pkg extends Package>(\n packages: Pkg[],\n options: {timestamp?: number; baseUrl?: string} = {},\n) {\n return Object.fromEntries(\n packages.flatMap((pkg) => getAppAutoUpdateImportMapForPackage(pkg, options)),\n ) as {[K in Pkg['name'] | `${Pkg['name']}/`]: string}\n}\n\nfunction getAppAutoUpdateImportMapForPackage<const Pkg extends Package>(\n pkg: Pkg,\n options: {timestamp?: number; baseUrl?: string} = {},\n): [[Pkg['name'], string], [`${Pkg['name']}/`, string]] {\n const moduleUrl = getModuleUrl(pkg, options)\n\n return [\n [pkg.name, moduleUrl],\n [`${pkg.name}/`, `${moduleUrl}/`],\n ]\n}\n\nexport function getModuleUrl(pkg: Package, options: {timestamp?: number; baseUrl?: string} = {}) {\n const {timestamp = currentUnixTime()} = options\n const encodedMinVer = encodeURIComponent(`^${pkg.version}`)\n return `${options.baseUrl || MODULES_HOST}/v1/modules/${rewriteScopedPackage(pkg.name)}/default/${encodedMinVer}/t${timestamp}`\n}\n\n/**\n * replaces '/' with '__' similar to how eg `@types/scope__pkg` are rewritten\n * scoped packages are stored this way both in the manifest and in the cloud storage bucket\n */\nfunction rewriteScopedPackage(pkgName: string) {\n if (!pkgName.includes('@')) {\n return pkgName\n }\n const [scope, ...pkg] = pkgName.split('/')\n return `${scope}__${pkg.join('')}`\n}\n","import {readFile} from 'node:fs/promises'\n\nimport {type PackageJson} from '@sanity/cli'\n\ninterface DependencyDeclarations {\n dependencies: Record<string, string | undefined>\n devDependencies: Record<string, string | undefined>\n}\n\ninterface PackageManifest extends DependencyDeclarations {\n name: string\n version: string\n}\n\nexport interface PartialPackageManifest extends Partial<DependencyDeclarations> {\n name: string\n version: string\n}\n\nfunction isPackageManifest(item: unknown): item is PartialPackageManifest {\n return typeof item === 'object' && item !== null && 'name' in item && 'version' in item\n}\n\n/**\n * Read the `package.json` file at the given path\n *\n * @param filePath - Path to package.json to read\n * @returns The parsed package.json\n */\nexport async function readPackageJson(filePath: string): Promise<PackageJson> {\n try {\n return JSON.parse(await readFile(filePath, 'utf8'))\n } catch (err) {\n throw new Error(`Failed to read \"${filePath}\": ${err.message}`)\n }\n}\n/**\n * Read the `package.json` file at the given path and return an object that guarantees\n * the presence of name, version, dependencies, dev dependencies and peer dependencies\n *\n * @param packageJsonPath - Path to package.json to read\n * @returns Reduced package.json with guarantees for name, version and dependency fields\n */\nexport async function readPackageManifest(\n packageJsonPath: string,\n defaults: Partial<PartialPackageManifest> = {},\n): Promise<PackageManifest> {\n let manifest: unknown\n try {\n manifest = {...defaults, ...(await readPackageJson(packageJsonPath))}\n } catch (err) {\n throw new Error(`Failed to read \"${packageJsonPath}\": ${err.message}`)\n }\n\n if (!isPackageManifest(manifest)) {\n throw new Error(`Failed to read \"${packageJsonPath}\": Invalid package manifest`)\n }\n\n const {name, version, dependencies = {}, devDependencies = {}} = manifest\n return {name, version, dependencies, devDependencies}\n}\n","import path from 'node:path'\n\nimport resolveFrom from 'resolve-from'\nimport semver from 'semver'\n\nimport {getModuleUrl} from './getAutoUpdatesImportMap'\nimport {readPackageManifest} from './readPackageManifest'\n\nfunction getRemoteResolvedVersion(fetchFn: typeof fetch, url: string) {\n return fetchFn(url, {\n method: 'HEAD',\n redirect: 'manual',\n }).then(\n (res) => {\n // 302 is expected, but lets also handle 2xx\n if (res.ok || res.status < 400) {\n const resolved = res.headers.get('x-resolved-version')\n if (!resolved) {\n throw new Error(`Missing 'x-resolved-version' header on response from HEAD ${url}`)\n }\n return resolved\n }\n throw new Error(`Unexpected HTTP response: ${res.status} ${res.statusText}`)\n },\n (err) => {\n throw new Error(`Failed to fetch remote version for ${url}: ${err.message}`, {cause: err})\n },\n )\n}\n\ninterface CompareDependencyVersions {\n pkg: string\n installed: string\n remote: string\n}\n\n/**\n * Compares the versions of dependencies in the studio or app with their remote versions.\n *\n * This function reads the package.json file in the provided working directory, and compares the versions of the dependencies\n * specified in the `autoUpdatesImports` parameter with their remote versions. If the versions do not match, the dependency is\n * added to a list of failed dependencies, which is returned by the function.\n *\n * The failed dependencies are anything that does not strictly match the remote version.\n * This means that if a version is lower or greater by even a patch it will be marked as failed.\n *\n * @param autoUpdatesImports - An object mapping package names to their remote import URLs.\n * @param workDir - The path to the working directory containing the package.json file.\n * @param fetchFn - Optional {@link https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API | Fetch}-compatible function to use for requesting the current remote version of a module\n *\n * @returns A promise that resolves to an array of objects, each containing\n * the name of a package whose local and remote versions do not match, along with the local and remote versions.\n *\n * @throws Throws an error if the remote version of a package cannot be fetched, or if the local version of a package\n * cannot be parsed.\n */\nexport async function compareDependencyVersions(\n packages: {version: string; name: string}[],\n workDir: string,\n {fetchFn = globalThis.fetch}: {appId?: string; fetchFn?: typeof fetch} = {},\n): Promise<Array<CompareDependencyVersions>> {\n const manifest = await readPackageManifest(path.join(workDir, 'package.json'))\n const dependencies = {...manifest.dependencies, ...manifest.devDependencies}\n\n const failedDependencies: Array<CompareDependencyVersions> = []\n\n for (const pkg of packages) {\n const resolvedVersion = await getRemoteResolvedVersion(fetchFn, getModuleUrl(pkg))\n\n const manifestPath = resolveFrom.silent(workDir, path.join(pkg.name, 'package.json'))\n\n const manifestVersion = dependencies[pkg.name]\n\n const installed = semver.coerce(\n manifestPath\n ? semver.parse((await readPackageManifest(manifestPath)).version)\n : semver.coerce(manifestVersion),\n )\n\n if (!installed) {\n throw new Error(`Failed to parse installed version for ${pkg}`)\n }\n\n if (!semver.eq(resolvedVersion, installed.version)) {\n failedDependencies.push({\n pkg: pkg.name,\n installed: installed.version,\n remote: resolvedVersion,\n })\n }\n }\n\n return failedDependencies\n}\n","import path from 'node:path'\n\nimport resolveFrom from 'resolve-from'\n\nimport {readPackageManifest} from './readPackageManifest'\n\n/**\n * Reads the version number of the _installed_ module, or returns `null` if not found\n *\n * @param dir - Path of the directory to read the module from\n * @param moduleName - Name of module to get installed version for\n * @returns Version number, of null\n */\nexport async function readModuleVersion(dir: string, moduleName: string): Promise<string | null> {\n const manifestPath = resolveFrom.silent(dir, path.join(moduleName, 'package.json'))\n return manifestPath ? (await readPackageManifest(manifestPath)).version : null\n}\n","import {type CliConfig} from '@sanity/cli'\nimport chalk from 'chalk'\n\ninterface AutoUpdateSources {\n flags: {['auto-updates']?: boolean}\n cliConfig?: CliConfig\n output?: {warn: (message: string) => void}\n}\n\n/**\n * Compares parameters from various sources to determine whether or not to auto-update\n * @param sources - The sources of the auto-update parameter, including CLI flags and the CLI config\n * @returns boolean\n * @internal\n */\nexport function shouldAutoUpdate({flags, cliConfig, output}: AutoUpdateSources): boolean {\n // cli flags (for example, '--no-auto-updates') should take precedence\n if ('auto-updates' in flags) {\n if (output) {\n const flagUsed = flags['auto-updates'] ? '--auto-updates' : '--no-auto-updates'\n output.warn(\n chalk.yellow(\n `The ${flagUsed} flag is deprecated for \\`deploy\\` and \\`build\\` commands. Set the \\`autoUpdates\\` option in \\`sanity.cli.ts\\` or \\`sanity.cli.js\\` instead.`,\n ),\n )\n }\n return Boolean(flags['auto-updates'])\n }\n\n if (cliConfig && 'autoUpdates' in cliConfig) {\n return Boolean(cliConfig.autoUpdates)\n }\n\n return false\n}\n"],"names":["MODULES_HOST","process","env","SANITY_MODULES_HOST","SANITY_INTERNAL_ENV","currentUnixTime","Math","floor","Date","now","getAutoUpdatesImportMap","packages","options","Object","fromEntries","flatMap","pkg","getAppAutoUpdateImportMapForPackage","moduleUrl","getModuleUrl","name","timestamp","encodedMinVer","encodeURIComponent","version","baseUrl","rewriteScopedPackage","pkgName","includes","scope","split","join","isPackageManifest","item","readPackageJson","filePath","JSON","parse","readFile","err","Error","message","readPackageManifest","packageJsonPath","defaults","manifest","dependencies","devDependencies","getRemoteResolvedVersion","fetchFn","url","method","redirect","then","res","ok","status","resolved","headers","get","statusText","cause","compareDependencyVersions","workDir","globalThis","fetch","path","failedDependencies","resolvedVersion","manifestPath","resolveFrom","silent","manifestVersion","installed","semver","coerce","eq","push","remote","readModuleVersion","dir","moduleName","shouldAutoUpdate","flags","cliConfig","output","flagUsed","warn","chalk","yellow","Boolean","autoUpdates"],"mappings":"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"}
|