@sanity/cli 8.9.1 → 8.11.0
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/README.md +2 -1
- package/dist/actions/auth/login/getProvider.js +10 -14
- package/dist/actions/auth/login/getProvider.js.map +1 -1
- package/dist/actions/auth/login/login.js +0 -1
- package/dist/actions/auth/login/login.js.map +1 -1
- package/dist/actions/init/initApp.js +5 -1
- package/dist/actions/init/initApp.js.map +1 -1
- package/dist/actions/init/initNextJs.js +63 -52
- package/dist/actions/init/initNextJs.js.map +1 -1
- package/dist/actions/init/initStudio.js +4 -2
- package/dist/actions/init/initStudio.js.map +1 -1
- package/dist/actions/init/scaffoldTemplate.js +10 -7
- package/dist/actions/init/scaffoldTemplate.js.map +1 -1
- package/dist/actions/init/types.js +1 -0
- package/dist/actions/init/types.js.map +1 -1
- package/dist/actions/scaffold/scaffoldProject.js +1 -0
- package/dist/actions/scaffold/scaffoldProject.js.map +1 -1
- package/dist/commands/init.js +8 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/generated/apiRoutes.js +2 -0
- package/dist/generated/apiRoutes.js.map +1 -1
- package/dist/util/packageManager/installPackages.js +24 -4
- package/dist/util/packageManager/installPackages.js.map +1 -1
- package/oclif.manifest.json +669 -660
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/init/scaffoldTemplate.ts"],"sourcesContent":["import {type Output, type TelemetryUserProperties} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\nimport {type TelemetryTrace} from '@sanity/telemetry'\n\nimport {promptForTypeScript} from '../../prompts/init/promptForTypescript.js'\nimport {type InitStepResult} from '../../telemetry/init.telemetry.js'\nimport {installDeclaredPackages} from '../../util/packageManager/installPackages.js'\nimport {type PackageManager} from '../../util/packageManager/packageManagerChoice.js'\nimport {bootstrapTemplate} from './bootstrapTemplate.js'\nimport {tryGitInit} from './git.js'\nimport {flagOrDefault, shouldPrompt, writeStagingEnvIfNeeded} from './initHelpers.js'\nimport {type RepoInfo} from './remoteTemplate.js'\nimport {resolvePackageManager} from './resolvePackageManager.js'\nimport templates from './templates/index.js'\nimport {type InitOptions, type ProjectTemplate} from './types.js'\n\ninterface SelectedTemplate {\n template: ProjectTemplate | undefined\n templateName: string\n useTypeScript: boolean\n}\n\ninterface TemplateChoice {\n name: string\n value: string\n}\n\nexport const templateChoices: TemplateChoice[] = [\n {name: 'Clean project with no predefined schema types', value: 'clean'},\n {name: 'Blog (schema)', value: 'blog'},\n {name: 'E-commerce (Shopify)', value: 'shopify'},\n {name: 'Movie project (schema + sample data)', value: 'moviedb'},\n {name: 'Page Builder (presets)', value: 'page-builder'},\n]\n\nasync function promptForTemplate(params: {\n template?: string\n unattended: boolean\n}): Promise<string> {\n const defaultTemplate = params.unattended || params.template ? params.template || 'clean' : null\n if (defaultTemplate) {\n return defaultTemplate\n }\n\n return select({\n choices: templateChoices,\n message: 'Select project template',\n })\n}\n\nexport async function selectTemplate({\n options,\n remoteTemplateInfo,\n trace,\n}: {\n options: InitOptions\n remoteTemplateInfo: RepoInfo | undefined\n trace: TelemetryTrace<TelemetryUserProperties, InitStepResult>\n}): Promise<SelectedTemplate> {\n const {template, typescript, unattended} = options\n const templateName = await promptForTemplate({template, unattended})\n trace.log({\n selectedOption: templateName,\n step: 'selectProjectTemplate',\n })\n\n const resolvedTemplate = templates[templateName]\n\n let useTypeScript = flagOrDefault(typescript, true)\n if (!remoteTemplateInfo && resolvedTemplate && resolvedTemplate.typescriptOnly === true) {\n useTypeScript = true\n } else if (shouldPrompt(unattended, typescript)) {\n useTypeScript = await promptForTypeScript()\n trace.log({\n selectedOption: useTypeScript ? 'yes' : 'no',\n step: 'useTypeScript',\n })\n }\n\n return {\n template: resolvedTemplate,\n templateName,\n useTypeScript,\n }\n}\n\nexport async function scaffoldAndInstall({\n datasetName,\n defaults,\n displayName,\n options,\n organizationId,\n output,\n outputPath,\n projectId,\n remoteTemplateInfo,\n sluggedName,\n templateName,\n trace,\n useTypeScript,\n workbench,\n workDir,\n}: {\n datasetName: string\n defaults: {projectName: string}\n displayName: string\n options: InitOptions\n organizationId: string | undefined\n output: Output\n outputPath: string\n projectId: string\n remoteTemplateInfo: RepoInfo | undefined\n sluggedName: string\n templateName: string\n trace: TelemetryTrace<TelemetryUserProperties, InitStepResult>\n useTypeScript: boolean\n workbench: boolean\n workDir: string\n}): Promise<{pkgManager: PackageManager}> {\n const {autoUpdates, git, overwriteFiles, packageManager, templateToken, unattended}
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/init/scaffoldTemplate.ts"],"sourcesContent":["import {type Output, type TelemetryUserProperties} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\nimport {type TelemetryTrace} from '@sanity/telemetry'\n\nimport {promptForTypeScript} from '../../prompts/init/promptForTypescript.js'\nimport {type InitStepResult} from '../../telemetry/init.telemetry.js'\nimport {\n getInstallCommand,\n installDeclaredPackages,\n} from '../../util/packageManager/installPackages.js'\nimport {type PackageManager} from '../../util/packageManager/packageManagerChoice.js'\nimport {bootstrapTemplate} from './bootstrapTemplate.js'\nimport {tryGitInit} from './git.js'\nimport {flagOrDefault, shouldPrompt, writeStagingEnvIfNeeded} from './initHelpers.js'\nimport {type RepoInfo} from './remoteTemplate.js'\nimport {resolvePackageManager} from './resolvePackageManager.js'\nimport templates from './templates/index.js'\nimport {type InitOptions, type ProjectTemplate} from './types.js'\n\ninterface SelectedTemplate {\n template: ProjectTemplate | undefined\n templateName: string\n useTypeScript: boolean\n}\n\ninterface TemplateChoice {\n name: string\n value: string\n}\n\nexport const templateChoices: TemplateChoice[] = [\n {name: 'Clean project with no predefined schema types', value: 'clean'},\n {name: 'Blog (schema)', value: 'blog'},\n {name: 'E-commerce (Shopify)', value: 'shopify'},\n {name: 'Movie project (schema + sample data)', value: 'moviedb'},\n {name: 'Page Builder (presets)', value: 'page-builder'},\n]\n\nasync function promptForTemplate(params: {\n template?: string\n unattended: boolean\n}): Promise<string> {\n const defaultTemplate = params.unattended || params.template ? params.template || 'clean' : null\n if (defaultTemplate) {\n return defaultTemplate\n }\n\n return select({\n choices: templateChoices,\n message: 'Select project template',\n })\n}\n\nexport async function selectTemplate({\n options,\n remoteTemplateInfo,\n trace,\n}: {\n options: InitOptions\n remoteTemplateInfo: RepoInfo | undefined\n trace: TelemetryTrace<TelemetryUserProperties, InitStepResult>\n}): Promise<SelectedTemplate> {\n const {template, typescript, unattended} = options\n const templateName = await promptForTemplate({template, unattended})\n trace.log({\n selectedOption: templateName,\n step: 'selectProjectTemplate',\n })\n\n const resolvedTemplate = templates[templateName]\n\n let useTypeScript = flagOrDefault(typescript, true)\n if (!remoteTemplateInfo && resolvedTemplate && resolvedTemplate.typescriptOnly === true) {\n useTypeScript = true\n } else if (shouldPrompt(unattended, typescript)) {\n useTypeScript = await promptForTypeScript()\n trace.log({\n selectedOption: useTypeScript ? 'yes' : 'no',\n step: 'useTypeScript',\n })\n }\n\n return {\n template: resolvedTemplate,\n templateName,\n useTypeScript,\n }\n}\n\nexport async function scaffoldAndInstall({\n datasetName,\n defaults,\n displayName,\n options,\n organizationId,\n output,\n outputPath,\n projectId,\n remoteTemplateInfo,\n sluggedName,\n templateName,\n trace,\n useTypeScript,\n workbench,\n workDir,\n}: {\n datasetName: string\n defaults: {projectName: string}\n displayName: string\n options: InitOptions\n organizationId: string | undefined\n output: Output\n outputPath: string\n projectId: string\n remoteTemplateInfo: RepoInfo | undefined\n sluggedName: string\n templateName: string\n trace: TelemetryTrace<TelemetryUserProperties, InitStepResult>\n useTypeScript: boolean\n workbench: boolean\n workDir: string\n}): Promise<{pkgManager: PackageManager}> {\n const {autoUpdates, git, install, overwriteFiles, packageManager, templateToken, unattended} =\n options\n const noGit = typeof git === 'boolean' && !git ? true : undefined\n\n await bootstrapTemplate({\n autoUpdates,\n bearerToken: templateToken,\n dataset: datasetName,\n organizationId,\n output,\n outputPath,\n overwriteFiles,\n packageName: sluggedName,\n projectId,\n projectName: displayName || defaults.projectName,\n remoteTemplateInfo,\n templateName,\n useTypeScript,\n workbench,\n })\n\n const pkgManager = await resolvePackageManager({\n interactive: !unattended,\n output,\n packageManager: packageManager as PackageManager,\n targetDir: outputPath,\n })\n\n trace.log({\n selectedOption: pkgManager,\n step: 'selectPackageManager',\n })\n\n if (install) {\n await installDeclaredPackages(outputPath, pkgManager, {\n output,\n workDir,\n })\n } else {\n output.log(`Skipped dependency install. Run ${getInstallCommand(pkgManager)} to install them.`)\n }\n\n const useGit = !noGit && (git === undefined || Boolean(git))\n const commitMessage = git\n await writeStagingEnvIfNeeded(output, outputPath)\n\n // Try initializing a git repository\n if (useGit) {\n tryGitInit(outputPath, typeof commitMessage === 'string' ? commitMessage : undefined)\n }\n\n return {pkgManager}\n}\n"],"names":["select","promptForTypeScript","getInstallCommand","installDeclaredPackages","bootstrapTemplate","tryGitInit","flagOrDefault","shouldPrompt","writeStagingEnvIfNeeded","resolvePackageManager","templates","templateChoices","name","value","promptForTemplate","params","defaultTemplate","unattended","template","choices","message","selectTemplate","options","remoteTemplateInfo","trace","typescript","templateName","log","selectedOption","step","resolvedTemplate","useTypeScript","typescriptOnly","scaffoldAndInstall","datasetName","defaults","displayName","organizationId","output","outputPath","projectId","sluggedName","workbench","workDir","autoUpdates","git","install","overwriteFiles","packageManager","templateToken","noGit","undefined","bearerToken","dataset","packageName","projectName","pkgManager","interactive","targetDir","useGit","Boolean","commitMessage"],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ export function flagsToInitOptions(flags, isUnattended, args, mcpMode, skillsMod
|
|
|
25
25
|
fromCreate: flags['from-create'],
|
|
26
26
|
git: flags['no-git'] ? false : flags.git,
|
|
27
27
|
importDataset: flags['import-dataset'],
|
|
28
|
+
install: flags.install,
|
|
28
29
|
mcpMode,
|
|
29
30
|
nextjsAddConfigFiles: flags['nextjs-add-config-files'],
|
|
30
31
|
nextjsAppendEnv: flags['nextjs-append-env'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/init/types.ts"],"sourcesContent":["import {type CLITelemetryStore, type Output} from '@sanity/cli-core'\nimport {type Framework} from '@vercel/frameworks'\n\nimport {type GenerateConfigOptions} from './createStudioConfig.js'\n\nexport type VersionedFramework = Framework & {\n detectedVersion?: string\n}\n\nexport interface ProjectTemplate {\n configTemplate?: ((variables: GenerateConfigOptions['variables']) => string) | string\n datasetUrl?: string\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n entry?: string\n importPrompt?: string\n scripts?: Record<string, string>\n type?: 'commonjs' | 'module'\n typescriptOnly?: boolean\n}\n\nexport interface InitOptions {\n autoUpdates: boolean\n bare: boolean\n datasetDefault: boolean\n fromCreate: boolean\n mcpMode: 'auto' | 'prompt' | 'skip'\n skillsMode: 'auto' | 'prompt' | 'skip'\n unattended: boolean\n\n argType?: string\n coupon?: string\n dataset?: string\n env?: string\n git?: boolean | string\n importDataset?: boolean\n nextjsAddConfigFiles?: boolean\n nextjsAppendEnv?: boolean\n nextjsEmbedStudio?: boolean\n organization?: string\n outputPath?: string\n overwriteFiles?: boolean\n packageManager?: 'npm' | 'pnpm' | 'yarn'\n project?: string\n projectName?: string\n projectPlan?: string\n provider?: string\n reconfigure?: boolean\n template?: string\n templateToken?: string\n typescript?: boolean\n unstableWorkbench?: boolean\n visibility?: 'private' | 'public'\n}\n\nexport interface InitContext {\n output: Output\n telemetry: CLITelemetryStore\n workDir: string\n}\n\ninterface InitCommandFlags {\n 'auto-updates': boolean\n bare: boolean\n 'dataset-default': boolean\n 'from-create': boolean\n mcp: boolean\n 'no-git': boolean\n skills: boolean\n\n coupon?: string\n 'create-project'?: string\n dataset?: string\n env?: string\n git?: string\n 'import-dataset'?: boolean\n 'nextjs-add-config-files'?: boolean\n 'nextjs-append-env'?: boolean\n 'nextjs-embed-studio'?: boolean\n organization?: string\n 'output-path'?: string\n 'overwrite-files'?: boolean\n 'package-manager'?: string\n project?: string\n 'project-name'?: string\n 'project-plan'?: string\n provider?: string\n reconfigure?: boolean\n template?: string\n 'template-token'?: string\n typescript?: boolean\n 'unstable--workbench'?: boolean\n visibility?: string\n}\n\ninterface InitCommandArgs {\n type?: string\n}\n\nconst VALID_PACKAGE_MANAGERS = new Set<string>(['npm', 'pnpm', 'yarn'])\nfunction narrowPackageManager(value: string | undefined): InitOptions['packageManager'] {\n return value !== undefined && VALID_PACKAGE_MANAGERS.has(value)\n ? (value as InitOptions['packageManager'])\n : undefined\n}\n\nconst VALID_VISIBILITIES = new Set<string>(['private', 'public'])\nfunction narrowVisibility(value: string | undefined): InitOptions['visibility'] {\n return value !== undefined && VALID_VISIBILITIES.has(value)\n ? (value as InitOptions['visibility'])\n : undefined\n}\n\nexport function flagsToInitOptions(\n flags: InitCommandFlags,\n isUnattended: boolean,\n args: InitCommandArgs | undefined,\n mcpMode: InitOptions['mcpMode'],\n skillsMode: InitOptions['skillsMode'],\n): InitOptions {\n return {\n argType: args?.type,\n autoUpdates: flags['auto-updates'],\n bare: flags.bare,\n coupon: flags.coupon,\n dataset: flags.dataset,\n datasetDefault: flags['dataset-default'],\n env: flags.env,\n fromCreate: flags['from-create'],\n git: flags['no-git'] ? false : flags.git,\n importDataset: flags['import-dataset'],\n mcpMode,\n nextjsAddConfigFiles: flags['nextjs-add-config-files'],\n nextjsAppendEnv: flags['nextjs-append-env'],\n nextjsEmbedStudio: flags['nextjs-embed-studio'],\n organization: flags.organization,\n outputPath: flags['output-path'],\n overwriteFiles: flags['overwrite-files'],\n packageManager: narrowPackageManager(flags['package-manager']),\n project: flags.project,\n projectName: flags['project-name'] ?? flags['create-project'],\n projectPlan: flags['project-plan'],\n provider: flags.provider,\n reconfigure: flags.reconfigure,\n skillsMode,\n template: flags.template,\n templateToken: flags['template-token'],\n typescript: flags.typescript,\n unattended: isUnattended,\n unstableWorkbench: flags['unstable--workbench'],\n visibility: narrowVisibility(flags.visibility),\n }\n}\n"],"names":["VALID_PACKAGE_MANAGERS","Set","narrowPackageManager","value","undefined","has","VALID_VISIBILITIES","narrowVisibility","flagsToInitOptions","flags","isUnattended","args","mcpMode","skillsMode","argType","type","autoUpdates","bare","coupon","dataset","datasetDefault","env","fromCreate","git","importDataset","nextjsAddConfigFiles","nextjsAppendEnv","nextjsEmbedStudio","organization","outputPath","overwriteFiles","packageManager","project","projectName","projectPlan","provider","reconfigure","template","templateToken","typescript","unattended","unstableWorkbench","visibility"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/init/types.ts"],"sourcesContent":["import {type CLITelemetryStore, type Output} from '@sanity/cli-core'\nimport {type Framework} from '@vercel/frameworks'\n\nimport {type GenerateConfigOptions} from './createStudioConfig.js'\n\nexport type VersionedFramework = Framework & {\n detectedVersion?: string\n}\n\nexport interface ProjectTemplate {\n configTemplate?: ((variables: GenerateConfigOptions['variables']) => string) | string\n datasetUrl?: string\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n entry?: string\n importPrompt?: string\n scripts?: Record<string, string>\n type?: 'commonjs' | 'module'\n typescriptOnly?: boolean\n}\n\nexport interface InitOptions {\n autoUpdates: boolean\n bare: boolean\n datasetDefault: boolean\n fromCreate: boolean\n install: boolean\n mcpMode: 'auto' | 'prompt' | 'skip'\n skillsMode: 'auto' | 'prompt' | 'skip'\n unattended: boolean\n\n argType?: string\n coupon?: string\n dataset?: string\n env?: string\n git?: boolean | string\n importDataset?: boolean\n nextjsAddConfigFiles?: boolean\n nextjsAppendEnv?: boolean\n nextjsEmbedStudio?: boolean\n organization?: string\n outputPath?: string\n overwriteFiles?: boolean\n packageManager?: 'npm' | 'pnpm' | 'yarn'\n project?: string\n projectName?: string\n projectPlan?: string\n provider?: string\n reconfigure?: boolean\n template?: string\n templateToken?: string\n typescript?: boolean\n unstableWorkbench?: boolean\n visibility?: 'private' | 'public'\n}\n\nexport interface InitContext {\n output: Output\n telemetry: CLITelemetryStore\n workDir: string\n}\n\ninterface InitCommandFlags {\n 'auto-updates': boolean\n bare: boolean\n 'dataset-default': boolean\n 'from-create': boolean\n install: boolean\n mcp: boolean\n 'no-git': boolean\n skills: boolean\n\n coupon?: string\n 'create-project'?: string\n dataset?: string\n env?: string\n git?: string\n 'import-dataset'?: boolean\n 'nextjs-add-config-files'?: boolean\n 'nextjs-append-env'?: boolean\n 'nextjs-embed-studio'?: boolean\n organization?: string\n 'output-path'?: string\n 'overwrite-files'?: boolean\n 'package-manager'?: string\n project?: string\n 'project-name'?: string\n 'project-plan'?: string\n provider?: string\n reconfigure?: boolean\n template?: string\n 'template-token'?: string\n typescript?: boolean\n 'unstable--workbench'?: boolean\n visibility?: string\n}\n\ninterface InitCommandArgs {\n type?: string\n}\n\nconst VALID_PACKAGE_MANAGERS = new Set<string>(['npm', 'pnpm', 'yarn'])\nfunction narrowPackageManager(value: string | undefined): InitOptions['packageManager'] {\n return value !== undefined && VALID_PACKAGE_MANAGERS.has(value)\n ? (value as InitOptions['packageManager'])\n : undefined\n}\n\nconst VALID_VISIBILITIES = new Set<string>(['private', 'public'])\nfunction narrowVisibility(value: string | undefined): InitOptions['visibility'] {\n return value !== undefined && VALID_VISIBILITIES.has(value)\n ? (value as InitOptions['visibility'])\n : undefined\n}\n\nexport function flagsToInitOptions(\n flags: InitCommandFlags,\n isUnattended: boolean,\n args: InitCommandArgs | undefined,\n mcpMode: InitOptions['mcpMode'],\n skillsMode: InitOptions['skillsMode'],\n): InitOptions {\n return {\n argType: args?.type,\n autoUpdates: flags['auto-updates'],\n bare: flags.bare,\n coupon: flags.coupon,\n dataset: flags.dataset,\n datasetDefault: flags['dataset-default'],\n env: flags.env,\n fromCreate: flags['from-create'],\n git: flags['no-git'] ? false : flags.git,\n importDataset: flags['import-dataset'],\n install: flags.install,\n mcpMode,\n nextjsAddConfigFiles: flags['nextjs-add-config-files'],\n nextjsAppendEnv: flags['nextjs-append-env'],\n nextjsEmbedStudio: flags['nextjs-embed-studio'],\n organization: flags.organization,\n outputPath: flags['output-path'],\n overwriteFiles: flags['overwrite-files'],\n packageManager: narrowPackageManager(flags['package-manager']),\n project: flags.project,\n projectName: flags['project-name'] ?? flags['create-project'],\n projectPlan: flags['project-plan'],\n provider: flags.provider,\n reconfigure: flags.reconfigure,\n skillsMode,\n template: flags.template,\n templateToken: flags['template-token'],\n typescript: flags.typescript,\n unattended: isUnattended,\n unstableWorkbench: flags['unstable--workbench'],\n visibility: narrowVisibility(flags.visibility),\n }\n}\n"],"names":["VALID_PACKAGE_MANAGERS","Set","narrowPackageManager","value","undefined","has","VALID_VISIBILITIES","narrowVisibility","flagsToInitOptions","flags","isUnattended","args","mcpMode","skillsMode","argType","type","autoUpdates","bare","coupon","dataset","datasetDefault","env","fromCreate","git","importDataset","install","nextjsAddConfigFiles","nextjsAppendEnv","nextjsEmbedStudio","organization","outputPath","overwriteFiles","packageManager","project","projectName","projectPlan","provider","reconfigure","template","templateToken","typescript","unattended","unstableWorkbench","visibility"],"mappings":"AAqGA,MAAMA,yBAAyB,IAAIC,IAAY;IAAC;IAAO;IAAQ;CAAO;AACtE,SAASC,qBAAqBC,KAAyB;IACrD,OAAOA,UAAUC,aAAaJ,uBAAuBK,GAAG,CAACF,SACpDA,QACDC;AACN;AAEA,MAAME,qBAAqB,IAAIL,IAAY;IAAC;IAAW;CAAS;AAChE,SAASM,iBAAiBJ,KAAyB;IACjD,OAAOA,UAAUC,aAAaE,mBAAmBD,GAAG,CAACF,SAChDA,QACDC;AACN;AAEA,OAAO,SAASI,mBACdC,KAAuB,EACvBC,YAAqB,EACrBC,IAAiC,EACjCC,OAA+B,EAC/BC,UAAqC;IAErC,OAAO;QACLC,SAASH,MAAMI;QACfC,aAAaP,KAAK,CAAC,eAAe;QAClCQ,MAAMR,MAAMQ,IAAI;QAChBC,QAAQT,MAAMS,MAAM;QACpBC,SAASV,MAAMU,OAAO;QACtBC,gBAAgBX,KAAK,CAAC,kBAAkB;QACxCY,KAAKZ,MAAMY,GAAG;QACdC,YAAYb,KAAK,CAAC,cAAc;QAChCc,KAAKd,KAAK,CAAC,SAAS,GAAG,QAAQA,MAAMc,GAAG;QACxCC,eAAef,KAAK,CAAC,iBAAiB;QACtCgB,SAAShB,MAAMgB,OAAO;QACtBb;QACAc,sBAAsBjB,KAAK,CAAC,0BAA0B;QACtDkB,iBAAiBlB,KAAK,CAAC,oBAAoB;QAC3CmB,mBAAmBnB,KAAK,CAAC,sBAAsB;QAC/CoB,cAAcpB,MAAMoB,YAAY;QAChCC,YAAYrB,KAAK,CAAC,cAAc;QAChCsB,gBAAgBtB,KAAK,CAAC,kBAAkB;QACxCuB,gBAAgB9B,qBAAqBO,KAAK,CAAC,kBAAkB;QAC7DwB,SAASxB,MAAMwB,OAAO;QACtBC,aAAazB,KAAK,CAAC,eAAe,IAAIA,KAAK,CAAC,iBAAiB;QAC7D0B,aAAa1B,KAAK,CAAC,eAAe;QAClC2B,UAAU3B,MAAM2B,QAAQ;QACxBC,aAAa5B,MAAM4B,WAAW;QAC9BxB;QACAyB,UAAU7B,MAAM6B,QAAQ;QACxBC,eAAe9B,KAAK,CAAC,iBAAiB;QACtC+B,YAAY/B,MAAM+B,UAAU;QAC5BC,YAAY/B;QACZgC,mBAAmBjC,KAAK,CAAC,sBAAsB;QAC/CkC,YAAYpC,iBAAiBE,MAAMkC,UAAU;IAC/C;AACF"}
|
|
@@ -94,6 +94,7 @@ export async function scaffoldProject({ cancelSignal, dataset, displayName, outp
|
|
|
94
94
|
datasetDefault: true,
|
|
95
95
|
fromCreate: false,
|
|
96
96
|
git: false,
|
|
97
|
+
install: true,
|
|
97
98
|
mcpMode: 'skip',
|
|
98
99
|
outputPath: studioPath,
|
|
99
100
|
packageManager: STUDIO_PACKAGE_MANAGERS.has(resolvedPackageManager) ? resolvedPackageManager : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/scaffold/scaffoldProject.ts"],"sourcesContent":["import {writeFileSync} from 'node:fs'\nimport {lstat} from 'node:fs/promises'\nimport path from 'node:path'\n\nimport {type CLITelemetryStore, type Output, subdebug} from '@sanity/cli-core'\nimport {getErrorMessage} from '@sanity/cli-core/errors'\nimport {type Framework, frameworks} from '@vercel/frameworks'\n\nimport {CLIInitStepCompleted} from '../../telemetry/init.telemetry.js'\nimport {detectFrameworkRecord} from '../../util/detectFramework.js'\nimport {dirIsEmptyOrNonExistent} from '../../util/dirIsEmptyOrNonExistent.js'\nimport {getProjectDefaults} from '../../util/getProjectDefaults.js'\nimport {type PackageManager} from '../../util/packageManager/packageManagerChoice.js'\nimport {initStudio} from '../init/initStudio.js'\nimport {resolvePackageManager} from '../init/resolvePackageManager.js'\nimport {type InitOptions} from '../init/types.js'\nimport {createFrontend, FrontendScaffoldError, installFrontendDeps} from './createFrontend.js'\n\nconst debug = subdebug('scaffold')\n\nexport const STUDIO_DIR = 'sanity'\nexport const FRONTEND_DIR = 'web'\nexport const STUDIO_ENV_FILE = `${STUDIO_DIR}/.env.local`\nexport const FRONTEND_ENV_FILE = `${FRONTEND_DIR}/.env.local`\n\nconst STUDIO_PACKAGE_NAME = 'sanity-studio'\nconst STUDIO_PACKAGE_MANAGERS = new Set<PackageManager>(['npm', 'pnpm', 'yarn'])\n\nexport async function isStudioScaffoldTargetAvailable(workDir: string): Promise<boolean> {\n return isScaffoldTargetAvailable(workDir, STUDIO_DIR)\n}\n\nasync function isScaffoldTargetAvailable(workDir: string, targetDir: string): Promise<boolean> {\n const targetPath = path.join(workDir, targetDir)\n try {\n if (!(await lstat(targetPath)).isDirectory()) {\n return false\n }\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw err\n }\n }\n\n return dirIsEmptyOrNonExistent(targetPath)\n}\n\nasync function inspectScaffoldTargets(workDir: string) {\n if (!(await isStudioScaffoldTargetAvailable(workDir))) {\n return {unavailableTarget: STUDIO_DIR}\n }\n\n const detectedFramework = await detectFrameworkRecord({\n frameworkList: frameworks as readonly Framework[],\n rootPath: workDir,\n })\n if (!detectedFramework && !(await isScaffoldTargetAvailable(workDir, FRONTEND_DIR))) {\n return {unavailableTarget: FRONTEND_DIR}\n }\n\n return {detectedFramework}\n}\n\nexport async function getUnavailableScaffoldTarget(workDir: string): Promise<string | undefined> {\n const {unavailableTarget} = await inspectScaffoldTargets(workDir)\n return unavailableTarget\n}\n\nexport interface ScaffoldResult {\n studioPath: string\n\n detectedFramework?: string\n frontendCreationError?: string\n frontendDependenciesInstalled?: boolean\n frontendDependencyError?: string\n frontendPackageManager?: PackageManager\n frontendPath?: string\n}\n\nfunction createStudioEnv(dataset: string, projectId: string, token: string) {\n return {\n SANITY_AUTH_TOKEN: token,\n SANITY_DATASET: dataset,\n SANITY_PROJECT_ID: projectId,\n }\n}\n\nfunction createFrontendEnv(dataset: string, projectId: string) {\n return {\n NEXT_PUBLIC_SANITY_DATASET: dataset,\n NEXT_PUBLIC_SANITY_PROJECT_ID: projectId,\n }\n}\n\nexport async function scaffoldProject({\n cancelSignal,\n dataset,\n displayName,\n output,\n packageManager,\n projectId,\n telemetry,\n token,\n workDir,\n}: {\n cancelSignal?: AbortSignal\n dataset: string\n displayName: string\n output: Output\n packageManager?: PackageManager\n projectId: string\n telemetry: CLITelemetryStore\n token: string\n workDir: string\n}): Promise<ScaffoldResult> {\n cancelSignal?.throwIfAborted()\n const {detectedFramework: detected, unavailableTarget} = await inspectScaffoldTargets(workDir)\n const studioPath = path.join(workDir, STUDIO_DIR)\n if (unavailableTarget) {\n throw new Error(`./${unavailableTarget} is not an empty directory`)\n }\n\n const resolvedPackageManager = await resolvePackageManager({\n interactive: false,\n output,\n packageManager: packageManager as PackageManager,\n targetDir: workDir,\n })\n\n const options: InitOptions = {\n autoUpdates: true,\n bare: false,\n dataset,\n datasetDefault: true,\n fromCreate: false,\n git: false,\n mcpMode: 'skip',\n outputPath: studioPath,\n packageManager: STUDIO_PACKAGE_MANAGERS.has(resolvedPackageManager)\n ? (resolvedPackageManager as InitOptions['packageManager'])\n : undefined,\n project: projectId,\n skillsMode: 'skip',\n template: 'clean',\n typescript: true,\n unattended: true,\n }\n\n const trace = telemetry.trace(CLIInitStepCompleted)\n trace.start()\n try {\n // To avoid changing Studio initialization internals, we're deferring passing `cancelSignal`\n // until post `sanity new` launch.\n await initStudio({\n datasetName: dataset,\n defaults: await getProjectDefaults({isPlugin: false, workDir}),\n displayName,\n isFirstProject: false,\n mcpConfigured: [],\n options,\n organizationId: undefined,\n output,\n outputPath: studioPath,\n preclaim: true,\n projectId,\n remoteTemplateInfo: undefined,\n sluggedName: STUDIO_PACKAGE_NAME,\n trace,\n workbench: false,\n workDir,\n })\n trace.complete()\n } catch (err) {\n trace.error(err instanceof Error ? err : new Error(String(err)))\n throw err\n }\n\n cancelSignal?.throwIfAborted()\n writeScaffoldEnv(\n path.join(studioPath, '.env.local'),\n createStudioEnv(dataset, projectId, token),\n `Studio scaffold completed, but writing ./${STUDIO_ENV_FILE} failed`,\n 'it holds a live project token',\n )\n\n if (detected) {\n debug('Detected %s in %s, leaving the frontend alone', detected.name, workDir)\n return {\n detectedFramework: detected.name,\n studioPath,\n }\n }\n\n try {\n await createFrontend({\n cancelSignal,\n dirName: FRONTEND_DIR,\n output,\n packageManager: resolvedPackageManager,\n workDir,\n })\n cancelSignal?.throwIfAborted()\n } catch (err) {\n if (err instanceof FrontendScaffoldError) {\n return {\n frontendCreationError: err.message,\n frontendPackageManager: resolvedPackageManager,\n studioPath,\n }\n }\n throw err\n }\n\n const frontendPath = path.join(workDir, FRONTEND_DIR)\n writeScaffoldEnv(\n path.join(frontendPath, '.env.local'),\n createFrontendEnv(dataset, projectId),\n `Website scaffold completed, but writing ./${FRONTEND_ENV_FILE} failed`,\n 'it holds the project ID and dataset',\n )\n\n let frontendDependenciesInstalled = resolvedPackageManager !== 'manual'\n let frontendDependencyError: string | undefined\n if (frontendDependenciesInstalled) {\n try {\n await installFrontendDeps({\n cancelSignal,\n dirName: FRONTEND_DIR,\n output,\n packageManager: resolvedPackageManager,\n workDir,\n })\n cancelSignal?.throwIfAborted()\n } catch (err) {\n if (!(err instanceof FrontendScaffoldError)) throw err\n frontendDependenciesInstalled = false\n frontendDependencyError = err.message\n }\n }\n\n return {\n frontendDependenciesInstalled,\n frontendDependencyError,\n frontendPackageManager: resolvedPackageManager,\n frontendPath,\n studioPath,\n }\n}\n\nfunction writeScaffoldEnv(\n envPath: string,\n values: Record<string, string>,\n errorContext: string,\n gitignoreReason: string,\n): void {\n const lines = [\n `# Added by \\`sanity new\\`. Keep this file out of git: ${gitignoreReason}.`,\n ...Object.entries(values).map(([key, value]) => `${key}=\"${value}\"`),\n ]\n try {\n writeFileSync(envPath, `${lines.join('\\n')}\\n`, 'utf8')\n } catch (err) {\n throw new Error(`${errorContext}: ${getErrorMessage(err)}`, {cause: err})\n }\n}\n"],"names":["writeFileSync","lstat","path","subdebug","getErrorMessage","frameworks","CLIInitStepCompleted","detectFrameworkRecord","dirIsEmptyOrNonExistent","getProjectDefaults","initStudio","resolvePackageManager","createFrontend","FrontendScaffoldError","installFrontendDeps","debug","STUDIO_DIR","FRONTEND_DIR","STUDIO_ENV_FILE","FRONTEND_ENV_FILE","STUDIO_PACKAGE_NAME","STUDIO_PACKAGE_MANAGERS","Set","isStudioScaffoldTargetAvailable","workDir","isScaffoldTargetAvailable","targetDir","targetPath","join","isDirectory","err","code","inspectScaffoldTargets","unavailableTarget","detectedFramework","frameworkList","rootPath","getUnavailableScaffoldTarget","createStudioEnv","dataset","projectId","token","SANITY_AUTH_TOKEN","SANITY_DATASET","SANITY_PROJECT_ID","createFrontendEnv","NEXT_PUBLIC_SANITY_DATASET","NEXT_PUBLIC_SANITY_PROJECT_ID","scaffoldProject","cancelSignal","displayName","output","packageManager","telemetry","throwIfAborted","detected","studioPath","Error","resolvedPackageManager","interactive","options","autoUpdates","bare","datasetDefault","fromCreate","git","mcpMode","outputPath","has","undefined","project","skillsMode","template","typescript","unattended","trace","start","datasetName","defaults","isPlugin","isFirstProject","mcpConfigured","organizationId","preclaim","remoteTemplateInfo","sluggedName","workbench","complete","error","String","writeScaffoldEnv","name","dirName","frontendCreationError","message","frontendPackageManager","frontendPath","frontendDependenciesInstalled","frontendDependencyError","envPath","values","errorContext","gitignoreReason","lines","Object","entries","map","key","value","cause"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/scaffold/scaffoldProject.ts"],"sourcesContent":["import {writeFileSync} from 'node:fs'\nimport {lstat} from 'node:fs/promises'\nimport path from 'node:path'\n\nimport {type CLITelemetryStore, type Output, subdebug} from '@sanity/cli-core'\nimport {getErrorMessage} from '@sanity/cli-core/errors'\nimport {type Framework, frameworks} from '@vercel/frameworks'\n\nimport {CLIInitStepCompleted} from '../../telemetry/init.telemetry.js'\nimport {detectFrameworkRecord} from '../../util/detectFramework.js'\nimport {dirIsEmptyOrNonExistent} from '../../util/dirIsEmptyOrNonExistent.js'\nimport {getProjectDefaults} from '../../util/getProjectDefaults.js'\nimport {type PackageManager} from '../../util/packageManager/packageManagerChoice.js'\nimport {initStudio} from '../init/initStudio.js'\nimport {resolvePackageManager} from '../init/resolvePackageManager.js'\nimport {type InitOptions} from '../init/types.js'\nimport {createFrontend, FrontendScaffoldError, installFrontendDeps} from './createFrontend.js'\n\nconst debug = subdebug('scaffold')\n\nexport const STUDIO_DIR = 'sanity'\nexport const FRONTEND_DIR = 'web'\nexport const STUDIO_ENV_FILE = `${STUDIO_DIR}/.env.local`\nexport const FRONTEND_ENV_FILE = `${FRONTEND_DIR}/.env.local`\n\nconst STUDIO_PACKAGE_NAME = 'sanity-studio'\nconst STUDIO_PACKAGE_MANAGERS = new Set<PackageManager>(['npm', 'pnpm', 'yarn'])\n\nexport async function isStudioScaffoldTargetAvailable(workDir: string): Promise<boolean> {\n return isScaffoldTargetAvailable(workDir, STUDIO_DIR)\n}\n\nasync function isScaffoldTargetAvailable(workDir: string, targetDir: string): Promise<boolean> {\n const targetPath = path.join(workDir, targetDir)\n try {\n if (!(await lstat(targetPath)).isDirectory()) {\n return false\n }\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw err\n }\n }\n\n return dirIsEmptyOrNonExistent(targetPath)\n}\n\nasync function inspectScaffoldTargets(workDir: string) {\n if (!(await isStudioScaffoldTargetAvailable(workDir))) {\n return {unavailableTarget: STUDIO_DIR}\n }\n\n const detectedFramework = await detectFrameworkRecord({\n frameworkList: frameworks as readonly Framework[],\n rootPath: workDir,\n })\n if (!detectedFramework && !(await isScaffoldTargetAvailable(workDir, FRONTEND_DIR))) {\n return {unavailableTarget: FRONTEND_DIR}\n }\n\n return {detectedFramework}\n}\n\nexport async function getUnavailableScaffoldTarget(workDir: string): Promise<string | undefined> {\n const {unavailableTarget} = await inspectScaffoldTargets(workDir)\n return unavailableTarget\n}\n\nexport interface ScaffoldResult {\n studioPath: string\n\n detectedFramework?: string\n frontendCreationError?: string\n frontendDependenciesInstalled?: boolean\n frontendDependencyError?: string\n frontendPackageManager?: PackageManager\n frontendPath?: string\n}\n\nfunction createStudioEnv(dataset: string, projectId: string, token: string) {\n return {\n SANITY_AUTH_TOKEN: token,\n SANITY_DATASET: dataset,\n SANITY_PROJECT_ID: projectId,\n }\n}\n\nfunction createFrontendEnv(dataset: string, projectId: string) {\n return {\n NEXT_PUBLIC_SANITY_DATASET: dataset,\n NEXT_PUBLIC_SANITY_PROJECT_ID: projectId,\n }\n}\n\nexport async function scaffoldProject({\n cancelSignal,\n dataset,\n displayName,\n output,\n packageManager,\n projectId,\n telemetry,\n token,\n workDir,\n}: {\n cancelSignal?: AbortSignal\n dataset: string\n displayName: string\n output: Output\n packageManager?: PackageManager\n projectId: string\n telemetry: CLITelemetryStore\n token: string\n workDir: string\n}): Promise<ScaffoldResult> {\n cancelSignal?.throwIfAborted()\n const {detectedFramework: detected, unavailableTarget} = await inspectScaffoldTargets(workDir)\n const studioPath = path.join(workDir, STUDIO_DIR)\n if (unavailableTarget) {\n throw new Error(`./${unavailableTarget} is not an empty directory`)\n }\n\n const resolvedPackageManager = await resolvePackageManager({\n interactive: false,\n output,\n packageManager: packageManager as PackageManager,\n targetDir: workDir,\n })\n\n const options: InitOptions = {\n autoUpdates: true,\n bare: false,\n dataset,\n datasetDefault: true,\n fromCreate: false,\n git: false,\n install: true,\n mcpMode: 'skip',\n outputPath: studioPath,\n packageManager: STUDIO_PACKAGE_MANAGERS.has(resolvedPackageManager)\n ? (resolvedPackageManager as InitOptions['packageManager'])\n : undefined,\n project: projectId,\n skillsMode: 'skip',\n template: 'clean',\n typescript: true,\n unattended: true,\n }\n\n const trace = telemetry.trace(CLIInitStepCompleted)\n trace.start()\n try {\n // To avoid changing Studio initialization internals, we're deferring passing `cancelSignal`\n // until post `sanity new` launch.\n await initStudio({\n datasetName: dataset,\n defaults: await getProjectDefaults({isPlugin: false, workDir}),\n displayName,\n isFirstProject: false,\n mcpConfigured: [],\n options,\n organizationId: undefined,\n output,\n outputPath: studioPath,\n preclaim: true,\n projectId,\n remoteTemplateInfo: undefined,\n sluggedName: STUDIO_PACKAGE_NAME,\n trace,\n workbench: false,\n workDir,\n })\n trace.complete()\n } catch (err) {\n trace.error(err instanceof Error ? err : new Error(String(err)))\n throw err\n }\n\n cancelSignal?.throwIfAborted()\n writeScaffoldEnv(\n path.join(studioPath, '.env.local'),\n createStudioEnv(dataset, projectId, token),\n `Studio scaffold completed, but writing ./${STUDIO_ENV_FILE} failed`,\n 'it holds a live project token',\n )\n\n if (detected) {\n debug('Detected %s in %s, leaving the frontend alone', detected.name, workDir)\n return {\n detectedFramework: detected.name,\n studioPath,\n }\n }\n\n try {\n await createFrontend({\n cancelSignal,\n dirName: FRONTEND_DIR,\n output,\n packageManager: resolvedPackageManager,\n workDir,\n })\n cancelSignal?.throwIfAborted()\n } catch (err) {\n if (err instanceof FrontendScaffoldError) {\n return {\n frontendCreationError: err.message,\n frontendPackageManager: resolvedPackageManager,\n studioPath,\n }\n }\n throw err\n }\n\n const frontendPath = path.join(workDir, FRONTEND_DIR)\n writeScaffoldEnv(\n path.join(frontendPath, '.env.local'),\n createFrontendEnv(dataset, projectId),\n `Website scaffold completed, but writing ./${FRONTEND_ENV_FILE} failed`,\n 'it holds the project ID and dataset',\n )\n\n let frontendDependenciesInstalled = resolvedPackageManager !== 'manual'\n let frontendDependencyError: string | undefined\n if (frontendDependenciesInstalled) {\n try {\n await installFrontendDeps({\n cancelSignal,\n dirName: FRONTEND_DIR,\n output,\n packageManager: resolvedPackageManager,\n workDir,\n })\n cancelSignal?.throwIfAborted()\n } catch (err) {\n if (!(err instanceof FrontendScaffoldError)) throw err\n frontendDependenciesInstalled = false\n frontendDependencyError = err.message\n }\n }\n\n return {\n frontendDependenciesInstalled,\n frontendDependencyError,\n frontendPackageManager: resolvedPackageManager,\n frontendPath,\n studioPath,\n }\n}\n\nfunction writeScaffoldEnv(\n envPath: string,\n values: Record<string, string>,\n errorContext: string,\n gitignoreReason: string,\n): void {\n const lines = [\n `# Added by \\`sanity new\\`. Keep this file out of git: ${gitignoreReason}.`,\n ...Object.entries(values).map(([key, value]) => `${key}=\"${value}\"`),\n ]\n try {\n writeFileSync(envPath, `${lines.join('\\n')}\\n`, 'utf8')\n } catch (err) {\n throw new Error(`${errorContext}: ${getErrorMessage(err)}`, {cause: err})\n }\n}\n"],"names":["writeFileSync","lstat","path","subdebug","getErrorMessage","frameworks","CLIInitStepCompleted","detectFrameworkRecord","dirIsEmptyOrNonExistent","getProjectDefaults","initStudio","resolvePackageManager","createFrontend","FrontendScaffoldError","installFrontendDeps","debug","STUDIO_DIR","FRONTEND_DIR","STUDIO_ENV_FILE","FRONTEND_ENV_FILE","STUDIO_PACKAGE_NAME","STUDIO_PACKAGE_MANAGERS","Set","isStudioScaffoldTargetAvailable","workDir","isScaffoldTargetAvailable","targetDir","targetPath","join","isDirectory","err","code","inspectScaffoldTargets","unavailableTarget","detectedFramework","frameworkList","rootPath","getUnavailableScaffoldTarget","createStudioEnv","dataset","projectId","token","SANITY_AUTH_TOKEN","SANITY_DATASET","SANITY_PROJECT_ID","createFrontendEnv","NEXT_PUBLIC_SANITY_DATASET","NEXT_PUBLIC_SANITY_PROJECT_ID","scaffoldProject","cancelSignal","displayName","output","packageManager","telemetry","throwIfAborted","detected","studioPath","Error","resolvedPackageManager","interactive","options","autoUpdates","bare","datasetDefault","fromCreate","git","install","mcpMode","outputPath","has","undefined","project","skillsMode","template","typescript","unattended","trace","start","datasetName","defaults","isPlugin","isFirstProject","mcpConfigured","organizationId","preclaim","remoteTemplateInfo","sluggedName","workbench","complete","error","String","writeScaffoldEnv","name","dirName","frontendCreationError","message","frontendPackageManager","frontendPath","frontendDependenciesInstalled","frontendDependencyError","envPath","values","errorContext","gitignoreReason","lines","Object","entries","map","key","value","cause"],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -100,6 +100,14 @@ export class InitCommand extends SanityCommand {
|
|
|
100
100
|
default: undefined,
|
|
101
101
|
description: 'Import template sample dataset'
|
|
102
102
|
}),
|
|
103
|
+
install: Flags.boolean({
|
|
104
|
+
allowNo: true,
|
|
105
|
+
default: true,
|
|
106
|
+
description: 'Install dependencies after scaffolding',
|
|
107
|
+
exclusive: [
|
|
108
|
+
'bare'
|
|
109
|
+
]
|
|
110
|
+
}),
|
|
103
111
|
mcp: Flags.boolean({
|
|
104
112
|
allowNo: true,
|
|
105
113
|
default: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/init.ts"],"sourcesContent":["import {Args, Command, Flags} from '@oclif/core'\nimport {CLIError} from '@oclif/core/errors'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {initAction} from '../actions/init/initAction.js'\nimport {InitError} from '../actions/init/initError.js'\nimport {flagsToInitOptions} from '../actions/init/types.js'\n\nexport class InitCommand extends SanityCommand<typeof InitCommand> {\n static override args = {type: Args.string({hidden: true})}\n static override description = 'Initialize a new Sanity Studio, project and/or app'\n static override enableJsonFlag = true\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n {\n command: '<%= config.bin %> <%= command.id %> --dataset-default',\n description: 'Initialize a new project with a public dataset named \"production\"',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --project abc123 --dataset production --output-path ~/myproj',\n description: 'Initialize a project with the given project ID and dataset to the given path',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --project abc123 --dataset staging --template moviedb --output-path .',\n description:\n 'Initialize a project with the given project ID and dataset using the moviedb template to the given path',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --project-name \"Movies Unlimited\" --dataset moviedb --visibility private --template moviedb --output-path /Users/espenh/movies-unlimited',\n description: 'Create a brand new project with name \"Movies Unlimited\"',\n },\n ] satisfies Array<Command.Example>\n\n static override flags = {\n 'auto-updates': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Enable auto updates of studio versions',\n exclusive: ['bare'],\n }),\n bare: Flags.boolean({\n description:\n 'Skip the Studio initialization and only print the selected project ID and dataset name to stdout',\n }),\n coupon: Flags.string({\n description:\n 'Optionally select a coupon for a new project (cannot be used with --project-plan)',\n exclusive: ['project-plan'],\n helpValue: '<code>',\n }),\n 'create-project': Flags.string({\n deprecated: {message: 'Use --project-name instead'},\n description: 'Create a new project with the given name',\n helpValue: '<name>',\n hidden: true,\n }),\n dataset: Flags.string({\n description: 'Dataset name for the studio',\n exclusive: ['dataset-default'],\n helpValue: '<name>',\n }),\n 'dataset-default': Flags.boolean({\n description: 'Set up a project with a public dataset named \"production\"',\n }),\n env: Flags.string({\n description: 'Write environment variables to file',\n exclusive: ['bare'],\n helpValue: '<filename>',\n parse: async (input) => {\n if (!input.startsWith('.env')) {\n throw new CLIError('Env filename (`--env`) must start with `.env`')\n }\n return input\n },\n }),\n 'from-create': Flags.boolean({\n description: 'Internal flag to indicate that the command is run from create-sanity',\n hidden: true,\n }),\n git: Flags.string({\n default: undefined,\n description: 'Specify a commit message for initial commit, or disable git init',\n exclusive: ['bare'],\n // oclif doesn't indent correctly with custom help labels, thus leading space :/\n helpLabel: ' --[no-]git',\n helpValue: '<message>',\n }),\n 'import-dataset': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Import template sample dataset',\n }),\n mcp: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Enable AI editor integration (MCP) setup',\n }),\n 'nextjs-add-config-files': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Add config files to Next.js project',\n helpGroup: 'Next.js',\n }),\n 'nextjs-append-env': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Append project ID and dataset to .env file',\n helpGroup: 'Next.js',\n }),\n 'nextjs-embed-studio': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Embed the Studio in Next.js application',\n helpGroup: 'Next.js',\n }),\n // oclif doesn't support a boolean/string flag combination, but listing both a\n // `--git` and a `--no-git` flag in help breaks conventions, so we hide this one,\n // but use it to \"combine\" the two in the actual logic.\n 'no-git': Flags.boolean({\n description: 'Disable git initialization',\n exclusive: ['git'],\n hidden: true,\n }),\n organization: Flags.string({\n description:\n 'Organization ID to use for the project (required for unattended project creation)',\n helpValue: '<id>',\n }),\n 'output-path': Flags.string({\n description: 'Path to write studio project to',\n exclusive: ['bare'],\n helpValue: '<path>',\n }),\n 'overwrite-files': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Overwrite existing files',\n }),\n 'package-manager': Flags.string({\n description: 'Specify which package manager to use [allowed: npm, yarn, pnpm]',\n exclusive: ['bare'],\n helpValue: '<manager>',\n options: ['npm', 'yarn', 'pnpm'],\n }),\n project: Flags.string({\n aliases: ['project-id'],\n description: 'Project ID to use for the studio',\n exclusive: ['create-project', 'project-name'],\n helpValue: '<id>',\n }),\n 'project-name': Flags.string({\n description: 'Create a new project with the given name',\n exclusive: ['project', 'create-project'],\n helpValue: '<name>',\n }),\n 'project-plan': Flags.string({\n description: 'Optionally select a plan for a new project',\n helpValue: '<name>',\n }),\n provider: Flags.string({\n description: 'Login provider to use',\n helpValue: '<provider>',\n }),\n quickstart: Flags.boolean({\n deprecated: true,\n description:\n 'Used for initializing a project from a server schema that is saved in the Journey API',\n hidden: true,\n }),\n reconfigure: Flags.boolean({\n deprecated: {\n message: 'This flag is no longer supported',\n version: '3.0.0',\n },\n description: 'Reconfigure an existing project',\n hidden: true,\n }),\n skills: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Install Sanity agent skills globally for detected AI editors',\n }),\n template: Flags.string({\n description: 'Project template to use [default: \"clean\"]',\n exclusive: ['bare'],\n helpValue: '<template>',\n }),\n // Porting over a beta flag\n // Oclif doesn't seem to support something in beta so hiding for now\n 'template-token': Flags.string({\n description: 'Used for accessing private GitHub repo templates',\n hidden: true,\n }),\n typescript: Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Enable TypeScript support',\n exclusive: ['bare'],\n }),\n 'unstable--workbench': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Opt into workbench: scaffolds the CLI config with defineApplication',\n // Internal-only while workbench is unstable — keep it out of help/docs\n hidden: true,\n }),\n visibility: Flags.string({\n description: 'Visibility mode for dataset',\n helpValue: '<mode>',\n options: ['public', 'private'],\n }),\n yes: Flags.boolean({\n char: 'y',\n default: false,\n description:\n 'Unattended mode, answers \"yes\" to any \"yes/no\" prompt and otherwise uses defaults',\n }),\n }\n\n public async run(): Promise<void> {\n let mcpMode: 'auto' | 'prompt' | 'skip' = 'prompt'\n if (!this.flags.mcp || !this.resolveIsInteractive()) {\n mcpMode = 'skip'\n } else if (this.isUnattended()) {\n // Any unattended run (e.g. --yes, --json) configures MCP with defaults rather than prompting\n mcpMode = 'auto'\n }\n\n // Mirror MCP's environment gating: skip install in test environments\n // ensure e2e / CI tests don't run the bundled skills CLI.\n let skillsMode: 'auto' | 'prompt' | 'skip' = 'auto'\n if (!this.flags.skills || !this.resolveIsInteractive()) {\n skillsMode = 'skip'\n }\n\n try {\n await initAction(\n flagsToInitOptions(this.flags, this.isUnattended(), this.args, mcpMode, skillsMode),\n {\n output: this.output,\n telemetry: this.telemetry,\n workDir: process.cwd(),\n },\n )\n } catch (error) {\n if (error instanceof InitError) {\n this.error(error.message, {exit: error.exitCode})\n }\n throw error\n }\n }\n}\n"],"names":["Args","Flags","CLIError","SanityCommand","initAction","InitError","flagsToInitOptions","InitCommand","args","type","string","hidden","description","enableJsonFlag","examples","command","flags","boolean","allowNo","default","exclusive","bare","coupon","helpValue","deprecated","message","dataset","env","parse","input","startsWith","git","undefined","helpLabel","mcp","helpGroup","organization","options","project","aliases","provider","quickstart","reconfigure","version","skills","template","typescript","visibility","yes","char","run","mcpMode","resolveIsInteractive","isUnattended","skillsMode","output","telemetry","workDir","process","cwd","error","exit","exitCode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/commands/init.ts"],"sourcesContent":["import {Args, Command, Flags} from '@oclif/core'\nimport {CLIError} from '@oclif/core/errors'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {initAction} from '../actions/init/initAction.js'\nimport {InitError} from '../actions/init/initError.js'\nimport {flagsToInitOptions} from '../actions/init/types.js'\n\nexport class InitCommand extends SanityCommand<typeof InitCommand> {\n static override args = {type: Args.string({hidden: true})}\n static override description = 'Initialize a new Sanity Studio, project and/or app'\n static override enableJsonFlag = true\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n {\n command: '<%= config.bin %> <%= command.id %> --dataset-default',\n description: 'Initialize a new project with a public dataset named \"production\"',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --project abc123 --dataset production --output-path ~/myproj',\n description: 'Initialize a project with the given project ID and dataset to the given path',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --project abc123 --dataset staging --template moviedb --output-path .',\n description:\n 'Initialize a project with the given project ID and dataset using the moviedb template to the given path',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --project-name \"Movies Unlimited\" --dataset moviedb --visibility private --template moviedb --output-path /Users/espenh/movies-unlimited',\n description: 'Create a brand new project with name \"Movies Unlimited\"',\n },\n ] satisfies Array<Command.Example>\n\n static override flags = {\n 'auto-updates': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Enable auto updates of studio versions',\n exclusive: ['bare'],\n }),\n bare: Flags.boolean({\n description:\n 'Skip the Studio initialization and only print the selected project ID and dataset name to stdout',\n }),\n coupon: Flags.string({\n description:\n 'Optionally select a coupon for a new project (cannot be used with --project-plan)',\n exclusive: ['project-plan'],\n helpValue: '<code>',\n }),\n 'create-project': Flags.string({\n deprecated: {message: 'Use --project-name instead'},\n description: 'Create a new project with the given name',\n helpValue: '<name>',\n hidden: true,\n }),\n dataset: Flags.string({\n description: 'Dataset name for the studio',\n exclusive: ['dataset-default'],\n helpValue: '<name>',\n }),\n 'dataset-default': Flags.boolean({\n description: 'Set up a project with a public dataset named \"production\"',\n }),\n env: Flags.string({\n description: 'Write environment variables to file',\n exclusive: ['bare'],\n helpValue: '<filename>',\n parse: async (input) => {\n if (!input.startsWith('.env')) {\n throw new CLIError('Env filename (`--env`) must start with `.env`')\n }\n return input\n },\n }),\n 'from-create': Flags.boolean({\n description: 'Internal flag to indicate that the command is run from create-sanity',\n hidden: true,\n }),\n git: Flags.string({\n default: undefined,\n description: 'Specify a commit message for initial commit, or disable git init',\n exclusive: ['bare'],\n // oclif doesn't indent correctly with custom help labels, thus leading space :/\n helpLabel: ' --[no-]git',\n helpValue: '<message>',\n }),\n 'import-dataset': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Import template sample dataset',\n }),\n install: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Install dependencies after scaffolding',\n exclusive: ['bare'],\n }),\n mcp: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Enable AI editor integration (MCP) setup',\n }),\n 'nextjs-add-config-files': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Add config files to Next.js project',\n helpGroup: 'Next.js',\n }),\n 'nextjs-append-env': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Append project ID and dataset to .env file',\n helpGroup: 'Next.js',\n }),\n 'nextjs-embed-studio': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Embed the Studio in Next.js application',\n helpGroup: 'Next.js',\n }),\n // oclif doesn't support a boolean/string flag combination, but listing both a\n // `--git` and a `--no-git` flag in help breaks conventions, so we hide this one,\n // but use it to \"combine\" the two in the actual logic.\n 'no-git': Flags.boolean({\n description: 'Disable git initialization',\n exclusive: ['git'],\n hidden: true,\n }),\n organization: Flags.string({\n description:\n 'Organization ID to use for the project (required for unattended project creation)',\n helpValue: '<id>',\n }),\n 'output-path': Flags.string({\n description: 'Path to write studio project to',\n exclusive: ['bare'],\n helpValue: '<path>',\n }),\n 'overwrite-files': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Overwrite existing files',\n }),\n 'package-manager': Flags.string({\n description: 'Specify which package manager to use [allowed: npm, yarn, pnpm]',\n exclusive: ['bare'],\n helpValue: '<manager>',\n options: ['npm', 'yarn', 'pnpm'],\n }),\n project: Flags.string({\n aliases: ['project-id'],\n description: 'Project ID to use for the studio',\n exclusive: ['create-project', 'project-name'],\n helpValue: '<id>',\n }),\n 'project-name': Flags.string({\n description: 'Create a new project with the given name',\n exclusive: ['project', 'create-project'],\n helpValue: '<name>',\n }),\n 'project-plan': Flags.string({\n description: 'Optionally select a plan for a new project',\n helpValue: '<name>',\n }),\n provider: Flags.string({\n description: 'Login provider to use',\n helpValue: '<provider>',\n }),\n quickstart: Flags.boolean({\n deprecated: true,\n description:\n 'Used for initializing a project from a server schema that is saved in the Journey API',\n hidden: true,\n }),\n reconfigure: Flags.boolean({\n deprecated: {\n message: 'This flag is no longer supported',\n version: '3.0.0',\n },\n description: 'Reconfigure an existing project',\n hidden: true,\n }),\n skills: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Install Sanity agent skills globally for detected AI editors',\n }),\n template: Flags.string({\n description: 'Project template to use [default: \"clean\"]',\n exclusive: ['bare'],\n helpValue: '<template>',\n }),\n // Porting over a beta flag\n // Oclif doesn't seem to support something in beta so hiding for now\n 'template-token': Flags.string({\n description: 'Used for accessing private GitHub repo templates',\n hidden: true,\n }),\n typescript: Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Enable TypeScript support',\n exclusive: ['bare'],\n }),\n 'unstable--workbench': Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Opt into workbench: scaffolds the CLI config with defineApplication',\n // Internal-only while workbench is unstable — keep it out of help/docs\n hidden: true,\n }),\n visibility: Flags.string({\n description: 'Visibility mode for dataset',\n helpValue: '<mode>',\n options: ['public', 'private'],\n }),\n yes: Flags.boolean({\n char: 'y',\n default: false,\n description:\n 'Unattended mode, answers \"yes\" to any \"yes/no\" prompt and otherwise uses defaults',\n }),\n }\n\n public async run(): Promise<void> {\n let mcpMode: 'auto' | 'prompt' | 'skip' = 'prompt'\n if (!this.flags.mcp || !this.resolveIsInteractive()) {\n mcpMode = 'skip'\n } else if (this.isUnattended()) {\n // Any unattended run (e.g. --yes, --json) configures MCP with defaults rather than prompting\n mcpMode = 'auto'\n }\n\n // Mirror MCP's environment gating: skip install in test environments\n // ensure e2e / CI tests don't run the bundled skills CLI.\n let skillsMode: 'auto' | 'prompt' | 'skip' = 'auto'\n if (!this.flags.skills || !this.resolveIsInteractive()) {\n skillsMode = 'skip'\n }\n\n try {\n await initAction(\n flagsToInitOptions(this.flags, this.isUnattended(), this.args, mcpMode, skillsMode),\n {\n output: this.output,\n telemetry: this.telemetry,\n workDir: process.cwd(),\n },\n )\n } catch (error) {\n if (error instanceof InitError) {\n this.error(error.message, {exit: error.exitCode})\n }\n throw error\n }\n }\n}\n"],"names":["Args","Flags","CLIError","SanityCommand","initAction","InitError","flagsToInitOptions","InitCommand","args","type","string","hidden","description","enableJsonFlag","examples","command","flags","boolean","allowNo","default","exclusive","bare","coupon","helpValue","deprecated","message","dataset","env","parse","input","startsWith","git","undefined","helpLabel","install","mcp","helpGroup","organization","options","project","aliases","provider","quickstart","reconfigure","version","skills","template","typescript","visibility","yes","char","run","mcpMode","resolveIsInteractive","isUnattended","skillsMode","output","telemetry","workDir","process","cwd","error","exit","exitCode"],"mappings":"AAAA,SAAQA,IAAI,EAAWC,KAAK,QAAO,cAAa;AAChD,SAAQC,QAAQ,QAAO,qBAAoB;AAC3C,SAAQC,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,UAAU,QAAO,gCAA+B;AACxD,SAAQC,SAAS,QAAO,+BAA8B;AACtD,SAAQC,kBAAkB,QAAO,2BAA0B;AAE3D,OAAO,MAAMC,oBAAoBJ;IAC/B,OAAgBK,OAAO;QAACC,MAAMT,KAAKU,MAAM,CAAC;YAACC,QAAQ;QAAI;IAAE,EAAC;IAC1D,OAAgBC,cAAc,qDAAoD;IAClF,OAAgBC,iBAAiB,KAAI;IAErC,OAAgBC,WAAW;QACzB;QACA;YACEC,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SACE;YACFH,aAAa;QACf;QACA;YACEG,SACE;YACFH,aACE;QACJ;QACA;YACEG,SACE;YACFH,aAAa;QACf;KACD,CAAiC;IAElC,OAAgBI,QAAQ;QACtB,gBAAgBf,MAAMgB,OAAO,CAAC;YAC5BC,SAAS;YACTC,SAAS;YACTP,aAAa;YACbQ,WAAW;gBAAC;aAAO;QACrB;QACAC,MAAMpB,MAAMgB,OAAO,CAAC;YAClBL,aACE;QACJ;QACAU,QAAQrB,MAAMS,MAAM,CAAC;YACnBE,aACE;YACFQ,WAAW;gBAAC;aAAe;YAC3BG,WAAW;QACb;QACA,kBAAkBtB,MAAMS,MAAM,CAAC;YAC7Bc,YAAY;gBAACC,SAAS;YAA4B;YAClDb,aAAa;YACbW,WAAW;YACXZ,QAAQ;QACV;QACAe,SAASzB,MAAMS,MAAM,CAAC;YACpBE,aAAa;YACbQ,WAAW;gBAAC;aAAkB;YAC9BG,WAAW;QACb;QACA,mBAAmBtB,MAAMgB,OAAO,CAAC;YAC/BL,aAAa;QACf;QACAe,KAAK1B,MAAMS,MAAM,CAAC;YAChBE,aAAa;YACbQ,WAAW;gBAAC;aAAO;YACnBG,WAAW;YACXK,OAAO,OAAOC;gBACZ,IAAI,CAACA,MAAMC,UAAU,CAAC,SAAS;oBAC7B,MAAM,IAAI5B,SAAS;gBACrB;gBACA,OAAO2B;YACT;QACF;QACA,eAAe5B,MAAMgB,OAAO,CAAC;YAC3BL,aAAa;YACbD,QAAQ;QACV;QACAoB,KAAK9B,MAAMS,MAAM,CAAC;YAChBS,SAASa;YACTpB,aAAa;YACbQ,WAAW;gBAAC;aAAO;YACnB,gFAAgF;YAChFa,WAAW;YACXV,WAAW;QACb;QACA,kBAAkBtB,MAAMgB,OAAO,CAAC;YAC9BC,SAAS;YACTC,SAASa;YACTpB,aAAa;QACf;QACAsB,SAASjC,MAAMgB,OAAO,CAAC;YACrBC,SAAS;YACTC,SAAS;YACTP,aAAa;YACbQ,WAAW;gBAAC;aAAO;QACrB;QACAe,KAAKlC,MAAMgB,OAAO,CAAC;YACjBC,SAAS;YACTC,SAAS;YACTP,aAAa;QACf;QACA,2BAA2BX,MAAMgB,OAAO,CAAC;YACvCC,SAAS;YACTC,SAASa;YACTpB,aAAa;YACbwB,WAAW;QACb;QACA,qBAAqBnC,MAAMgB,OAAO,CAAC;YACjCC,SAAS;YACTC,SAASa;YACTpB,aAAa;YACbwB,WAAW;QACb;QACA,uBAAuBnC,MAAMgB,OAAO,CAAC;YACnCC,SAAS;YACTC,SAASa;YACTpB,aAAa;YACbwB,WAAW;QACb;QACA,8EAA8E;QAC9E,iFAAiF;QACjF,uDAAuD;QACvD,UAAUnC,MAAMgB,OAAO,CAAC;YACtBL,aAAa;YACbQ,WAAW;gBAAC;aAAM;YAClBT,QAAQ;QACV;QACA0B,cAAcpC,MAAMS,MAAM,CAAC;YACzBE,aACE;YACFW,WAAW;QACb;QACA,eAAetB,MAAMS,MAAM,CAAC;YAC1BE,aAAa;YACbQ,WAAW;gBAAC;aAAO;YACnBG,WAAW;QACb;QACA,mBAAmBtB,MAAMgB,OAAO,CAAC;YAC/BC,SAAS;YACTC,SAASa;YACTpB,aAAa;QACf;QACA,mBAAmBX,MAAMS,MAAM,CAAC;YAC9BE,aAAa;YACbQ,WAAW;gBAAC;aAAO;YACnBG,WAAW;YACXe,SAAS;gBAAC;gBAAO;gBAAQ;aAAO;QAClC;QACAC,SAAStC,MAAMS,MAAM,CAAC;YACpB8B,SAAS;gBAAC;aAAa;YACvB5B,aAAa;YACbQ,WAAW;gBAAC;gBAAkB;aAAe;YAC7CG,WAAW;QACb;QACA,gBAAgBtB,MAAMS,MAAM,CAAC;YAC3BE,aAAa;YACbQ,WAAW;gBAAC;gBAAW;aAAiB;YACxCG,WAAW;QACb;QACA,gBAAgBtB,MAAMS,MAAM,CAAC;YAC3BE,aAAa;YACbW,WAAW;QACb;QACAkB,UAAUxC,MAAMS,MAAM,CAAC;YACrBE,aAAa;YACbW,WAAW;QACb;QACAmB,YAAYzC,MAAMgB,OAAO,CAAC;YACxBO,YAAY;YACZZ,aACE;YACFD,QAAQ;QACV;QACAgC,aAAa1C,MAAMgB,OAAO,CAAC;YACzBO,YAAY;gBACVC,SAAS;gBACTmB,SAAS;YACX;YACAhC,aAAa;YACbD,QAAQ;QACV;QACAkC,QAAQ5C,MAAMgB,OAAO,CAAC;YACpBC,SAAS;YACTC,SAAS;YACTP,aAAa;QACf;QACAkC,UAAU7C,MAAMS,MAAM,CAAC;YACrBE,aAAa;YACbQ,WAAW;gBAAC;aAAO;YACnBG,WAAW;QACb;QACA,2BAA2B;QAC3B,oEAAoE;QACpE,kBAAkBtB,MAAMS,MAAM,CAAC;YAC7BE,aAAa;YACbD,QAAQ;QACV;QACAoC,YAAY9C,MAAMgB,OAAO,CAAC;YACxBC,SAAS;YACTC,SAASa;YACTpB,aAAa;YACbQ,WAAW;gBAAC;aAAO;QACrB;QACA,uBAAuBnB,MAAMgB,OAAO,CAAC;YACnCC,SAAS;YACTC,SAASa;YACTpB,aAAa;YACb,uEAAuE;YACvED,QAAQ;QACV;QACAqC,YAAY/C,MAAMS,MAAM,CAAC;YACvBE,aAAa;YACbW,WAAW;YACXe,SAAS;gBAAC;gBAAU;aAAU;QAChC;QACAW,KAAKhD,MAAMgB,OAAO,CAAC;YACjBiC,MAAM;YACN/B,SAAS;YACTP,aACE;QACJ;IACF,EAAC;IAED,MAAauC,MAAqB;QAChC,IAAIC,UAAsC;QAC1C,IAAI,CAAC,IAAI,CAACpC,KAAK,CAACmB,GAAG,IAAI,CAAC,IAAI,CAACkB,oBAAoB,IAAI;YACnDD,UAAU;QACZ,OAAO,IAAI,IAAI,CAACE,YAAY,IAAI;YAC9B,6FAA6F;YAC7FF,UAAU;QACZ;QAEA,qEAAqE;QACrE,0DAA0D;QAC1D,IAAIG,aAAyC;QAC7C,IAAI,CAAC,IAAI,CAACvC,KAAK,CAAC6B,MAAM,IAAI,CAAC,IAAI,CAACQ,oBAAoB,IAAI;YACtDE,aAAa;QACf;QAEA,IAAI;YACF,MAAMnD,WACJE,mBAAmB,IAAI,CAACU,KAAK,EAAE,IAAI,CAACsC,YAAY,IAAI,IAAI,CAAC9C,IAAI,EAAE4C,SAASG,aACxE;gBACEC,QAAQ,IAAI,CAACA,MAAM;gBACnBC,WAAW,IAAI,CAACA,SAAS;gBACzBC,SAASC,QAAQC,GAAG;YACtB;QAEJ,EAAE,OAAOC,OAAO;YACd,IAAIA,iBAAiBxD,WAAW;gBAC9B,IAAI,CAACwD,KAAK,CAACA,MAAMpC,OAAO,EAAE;oBAACqC,MAAMD,MAAME,QAAQ;gBAAA;YACjD;YACA,MAAMF;QACR;IACF;AACF"}
|
|
@@ -278,6 +278,7 @@
|
|
|
278
278
|
defaultApiVersion: 'v2025-02-19',
|
|
279
279
|
host: 'global',
|
|
280
280
|
pathPatterns: [
|
|
281
|
+
'media-libraries/{libraryId}/from-url',
|
|
281
282
|
'media-libraries/{libraryId}/mutate',
|
|
282
283
|
'media-libraries/{libraryId}/query',
|
|
283
284
|
'media-libraries/{libraryId}/references/documents/{assetId}/to',
|
|
@@ -299,6 +300,7 @@
|
|
|
299
300
|
defaultApiVersion: 'v2025-02-19',
|
|
300
301
|
host: 'project',
|
|
301
302
|
pathPatterns: [
|
|
303
|
+
'media-libraries/{libraryId}/from-url',
|
|
302
304
|
'media-libraries/{libraryId}/mutate',
|
|
303
305
|
'media-libraries/{libraryId}/query',
|
|
304
306
|
'media-libraries/{libraryId}/references/documents/{assetId}/to',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/generated/apiRoutes.ts"],"sourcesContent":["/**\n * GENERATED FILE - DO NOT EDIT\n *\n * Routing manifest for `sanity api`, distilled from the published OpenAPI\n * specifications at https://www.sanity.io/docs/api/openapi\n *\n * Regenerate with: pnpm generate:api-routes\n */\nimport {type ApiRouteEntry} from '../actions/api/types.js'\n\nexport const apiRoutes: ApiRouteEntry[] = [\n {\n defaultApiVersion: 'v2025-07-11',\n host: 'global',\n pathPatterns: [\n 'access/invites/me',\n 'access/organization/{resourceId}/users/roles/default',\n 'access/requests/me',\n 'access/robots/me',\n 'access/robots/me/rotate',\n 'access/{resourceType}/{resourceId}/invites',\n 'access/{resourceType}/{resourceId}/invites/token/{inviteToken}',\n 'access/{resourceType}/{resourceId}/invites/token/{inviteToken}/accept',\n 'access/{resourceType}/{resourceId}/invites/token/{inviteToken}/eligibility',\n 'access/{resourceType}/{resourceId}/invites/{inviteId}',\n 'access/{resourceType}/{resourceId}/permissions',\n 'access/{resourceType}/{resourceId}/permissions/{permissionName}',\n 'access/{resourceType}/{resourceId}/requests',\n 'access/{resourceType}/{resourceId}/requests/state',\n 'access/{resourceType}/{resourceId}/requests/{requestId}/accept',\n 'access/{resourceType}/{resourceId}/requests/{requestId}/decline',\n 'access/{resourceType}/{resourceId}/robots',\n 'access/{resourceType}/{resourceId}/robots/{robotId}',\n 'access/{resourceType}/{resourceId}/roles',\n 'access/{resourceType}/{resourceId}/roles/{roleName}',\n 'access/{resourceType}/{resourceId}/user-permissions/me',\n 'access/{resourceType}/{resourceId}/user-permissions/me/check',\n 'access/{resourceType}/{resourceId}/users',\n 'access/{resourceType}/{resourceId}/users/me',\n 'access/{resourceType}/{resourceId}/users/{sanityUserId}',\n 'access/{resourceType}/{resourceId}/users/{sanityUserId}/roles',\n 'access/{resourceType}/{resourceId}/users/{sanityUserId}/roles/{roleName}'\n ],\n slug: 'access-api',\n title: 'Access API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/actions/{dataset}'\n ],\n slug: 'actions',\n title: 'Actions API reference'\n },\n {\n defaultApiVersion: 'v2021-02-01',\n host: 'global',\n pathPatterns: [\n 'activity',\n 'activity/export/csv'\n ],\n slug: 'activity-log',\n title: 'Activity Log API Reference'\n },\n {\n defaultApiVersion: 'vX',\n host: 'project',\n pathPatterns: [\n 'agent/action/generate/{dataset}',\n 'agent/action/patch/{dataset}',\n 'agent/action/prompt/{dataset}',\n 'agent/action/transform/{dataset}',\n 'agent/action/translate/{dataset}'\n ],\n slug: 'agent-actions',\n title: 'Agent Actions'\n },\n {\n host: 'global',\n pathPatterns: [\n 'applications',\n 'applications/{applicationId}',\n 'applications/{applicationId}/access',\n 'applications/{applicationId}/deployments',\n 'applications/{applicationId}/installations',\n 'applications/{applicationId}/interfaces',\n 'applications/{applicationId}/workspaces',\n 'deploy',\n 'deploy/quickstart',\n 'installations',\n 'installations/catalog',\n 'installations/defaults',\n 'installations/{installationId}',\n 'installations/{installationId}/access',\n 'installations/{installationId}/configs',\n 'installations/{installationId}/configs/{configId}',\n 'installations/{installationId}/interfaces',\n 'projects/{projectId}/user-applications',\n 'projects/{projectId}/user-applications/{userApplicationId}',\n 'projects/{projectId}/user-applications/{userApplicationId}/config/{configKey}',\n 'projects/{projectId}/user-applications/{userApplicationId}/deployments',\n 'studiohosts/{appHost}/availability',\n 'user-applications',\n 'user-applications/auto-update-version/{userApplicationId}',\n 'user-applications/resolve/application',\n 'user-applications/resolve/project',\n 'user-applications/workspaces',\n 'user-applications/{userApplicationId}',\n 'user-applications/{userApplicationId}/applicationData',\n 'user-applications/{userApplicationId}/config/{configKey}',\n 'user-applications/{userApplicationId}/deployments',\n 'user-applications/{userApplicationId}/workspaces'\n ],\n slug: 'applications-api',\n title: 'Applications API Reference'\n },\n {\n host: 'project',\n pathPatterns: [\n 'applications',\n 'applications/{applicationId}',\n 'applications/{applicationId}/access',\n 'applications/{applicationId}/deployments',\n 'applications/{applicationId}/installations',\n 'applications/{applicationId}/interfaces',\n 'applications/{applicationId}/workspaces',\n 'deploy',\n 'deploy/quickstart',\n 'installations',\n 'installations/catalog',\n 'installations/defaults',\n 'installations/{installationId}',\n 'installations/{installationId}/access',\n 'installations/{installationId}/configs',\n 'installations/{installationId}/configs/{configId}',\n 'installations/{installationId}/interfaces',\n 'projects/{projectId}/user-applications',\n 'projects/{projectId}/user-applications/{userApplicationId}',\n 'projects/{projectId}/user-applications/{userApplicationId}/config/{configKey}',\n 'projects/{projectId}/user-applications/{userApplicationId}/deployments',\n 'studiohosts/{appHost}/availability',\n 'user-applications',\n 'user-applications/auto-update-version/{userApplicationId}',\n 'user-applications/resolve/application',\n 'user-applications/resolve/project',\n 'user-applications/workspaces',\n 'user-applications/{userApplicationId}',\n 'user-applications/{userApplicationId}/applicationData',\n 'user-applications/{userApplicationId}/config/{configKey}',\n 'user-applications/{userApplicationId}/deployments',\n 'user-applications/{userApplicationId}/workspaces'\n ],\n slug: 'applications-api',\n title: 'Applications API Reference'\n },\n {\n defaultApiVersion: 'v2024-06-24',\n host: 'project',\n pathPatterns: [\n 'assets/files/{dataset}',\n 'assets/images/{dataset}',\n 'assets/media-library-link/{dataset}'\n ],\n slug: 'assets',\n title: 'Assets API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'global',\n pathPatterns: [\n 'projects/{projectId}/datasets/{datasetName}/backups',\n 'projects/{projectId}/datasets/{datasetName}/backups/{backupId}',\n 'projects/{projectId}/datasets/{datasetName}/settings/backups'\n ],\n slug: 'backups',\n title: 'Backups API reference'\n },\n {\n defaultApiVersion: 'vX',\n host: 'global',\n pathPatterns: [\n 'agent/prompt',\n 'agent/{organizationId}/threads/{threadId}'\n ],\n slug: 'content-agent',\n title: 'Content Agent API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'global',\n pathPatterns: [\n 'projects/{projectId}/datasets/{dataset}/copy'\n ],\n slug: 'copy',\n title: 'Copy API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/doc/{dataset}/{documentId}'\n ],\n slug: 'doc',\n title: 'Doc API reference'\n },\n {\n defaultApiVersion: 'vX',\n host: 'project',\n pathPatterns: [\n 'embeddings-index/query/{dataset}/{indexName}',\n 'embeddings-index/{dataset}',\n 'embeddings-index/{dataset}/{indexName}'\n ],\n slug: 'embeddings-index',\n title: 'Embeddings Index API reference (deprecated)'\n },\n {\n defaultApiVersion: 'v2021-03-25',\n host: 'project',\n pathPatterns: [\n 'data/export/{dataset}'\n ],\n slug: 'export',\n title: 'Export API reference'\n },\n {\n host: 'global',\n pathPatterns: [\n 'functions',\n 'functions/{functionId}',\n 'functions/{functionId}/envvars',\n 'functions/{functionId}/envvars/{envVarKey}',\n 'functions/{functionId}/invoke',\n 'functions/{functionId}/logs',\n 'functions/{functionId}/logs/stream'\n ],\n slug: 'functions-api',\n title: 'Functions API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/history/{dataset}/documents/{documentId}',\n 'data/history/{dataset}/transactions',\n 'data/history/{dataset}/transactions/{documentIds}'\n ],\n slug: 'history',\n title: 'History API reference'\n },\n {\n defaultApiVersion: 'v2021-06-07',\n host: 'global',\n pathPatterns: [\n 'jobs/{jobId}',\n 'jobs/{jobId}/listen'\n ],\n slug: 'jobs',\n title: 'Jobs API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/listen/{dataset}'\n ],\n slug: 'listen',\n title: 'Listen API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/live/events/{dataset}'\n ],\n slug: 'live',\n title: 'Live Content API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'global',\n pathPatterns: [\n 'media-libraries/{libraryId}/mutate',\n 'media-libraries/{libraryId}/query',\n 'media-libraries/{libraryId}/references/documents/{assetId}/to',\n 'media-libraries/{libraryId}/refsearch',\n 'media-libraries/{libraryId}/signing-keys',\n 'media-libraries/{libraryId}/signing-keys/{keyId}',\n 'media-libraries/{libraryId}/upload',\n 'media-libraries/{libraryId}/video/{videoId}/playback-info',\n 'media-libraries/{libraryId}/video/{videoId}/playback/{type}',\n 'media-libraries/{libraryId}/video/{videoId}/renditions/{name}',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles/upload',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles/{subtitleId}'\n ],\n slug: 'media-library',\n title: 'Media Library API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'media-libraries/{libraryId}/mutate',\n 'media-libraries/{libraryId}/query',\n 'media-libraries/{libraryId}/references/documents/{assetId}/to',\n 'media-libraries/{libraryId}/refsearch',\n 'media-libraries/{libraryId}/signing-keys',\n 'media-libraries/{libraryId}/signing-keys/{keyId}',\n 'media-libraries/{libraryId}/upload',\n 'media-libraries/{libraryId}/video/{videoId}/playback-info',\n 'media-libraries/{libraryId}/video/{videoId}/playback/{type}',\n 'media-libraries/{libraryId}/video/{videoId}/renditions/{name}',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles/upload',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles/{subtitleId}'\n ],\n slug: 'media-library',\n title: 'Media Library API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/mutate/{dataset}'\n ],\n slug: 'mutation',\n title: 'Mutation API reference'\n },\n {\n defaultApiVersion: 'v2021-06-07',\n host: 'global',\n pathPatterns: [\n 'projects',\n 'projects/{projectId}',\n 'projects/{projectId}/cors',\n 'projects/{projectId}/cors/{id}',\n 'projects/{projectId}/datasets',\n 'projects/{projectId}/datasets/{datasetName}/tags/{tagIdentifier}',\n 'projects/{projectId}/datasets/{name}',\n 'projects/{projectId}/datasets/{name}/copy',\n 'projects/{projectId}/datasets/{name}/settings/embeddings',\n 'projects/{projectId}/datasets/{name}/tags',\n 'projects/{projectId}/features',\n 'projects/{projectId}/permissions',\n 'projects/{projectId}/tags',\n 'projects/{projectId}/tags/{tagIdentifier}',\n 'projects/{projectId}/tokens',\n 'projects/{projectId}/tokens/{tokenId}',\n 'projects/{projectId}/users/{userId}'\n ],\n slug: 'projects-api',\n title: 'Projects API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/query/{dataset}'\n ],\n slug: 'query',\n title: 'Query API reference'\n },\n {\n defaultApiVersion: 'v2021-10-04',\n host: 'global',\n pathPatterns: [\n 'organizations/{organizationId}/acl',\n 'organizations/{organizationId}/acl/{sanityUserId}',\n 'organizations/{organizationId}/grants',\n 'organizations/{organizationId}/providers/{providerId}/projects/{projectId}/role-mappings',\n 'projects/{projectId}/acl',\n 'projects/{projectId}/acl/{userId}',\n 'projects/{projectId}/datasets/{datasetName}/acl',\n 'projects/{projectId}/datasets/{datasetName}/grants',\n 'projects/{projectId}/grants',\n 'projects/{projectId}/permissionResourceSchemas',\n 'projects/{projectId}/roles',\n 'projects/{projectId}/roles/{roleName}'\n ],\n slug: 'roles',\n title: 'Roles API reference'\n },\n {\n defaultApiVersion: 'v2022-04-01',\n host: 'project',\n pathPatterns: [\n 'publish/{projectId}/{dataset}',\n 'schedules/{projectId}/{dataset}',\n 'schedules/{projectId}/{dataset}/{scheduleId}',\n 'schedules/{projectId}/{dataset}/{scheduleId}/publish',\n 'unpublish/{projectId}/{dataset}'\n ],\n slug: 'scheduling',\n title: 'Scheduling API reference'\n },\n {\n defaultApiVersion: 'v2026-04-27',\n host: 'global',\n pathPatterns: [\n 'organizations/{organizationId}/attribute-definitions',\n 'organizations/{organizationId}/attribute-definitions/{key}',\n 'organizations/{organizationId}/users/me/attributes',\n 'organizations/{organizationId}/users/{sanityUserId}/attributes'\n ],\n slug: 'user-attributes',\n title: 'User attributes API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'hooks/projects/{projectId}',\n 'hooks/projects/{projectId}/{id}',\n 'hooks/projects/{projectId}/{id}/attempts',\n 'hooks/{id}/messages'\n ],\n slug: 'webhooks',\n title: 'Webhooks API reference'\n }\n]\n"],"names":["apiRoutes","defaultApiVersion","host","pathPatterns","slug","title"],"mappings":"AAAA;;;;;;;CAOC,GAGD,OAAO,MAAMA,YAA6B;IACxC;QACEC,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEH,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEH,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEH,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;CACD,CAAA"}
|
|
1
|
+
{"version":3,"sources":["../../src/generated/apiRoutes.ts"],"sourcesContent":["/**\n * GENERATED FILE - DO NOT EDIT\n *\n * Routing manifest for `sanity api`, distilled from the published OpenAPI\n * specifications at https://www.sanity.io/docs/api/openapi\n *\n * Regenerate with: pnpm generate:api-routes\n */\nimport {type ApiRouteEntry} from '../actions/api/types.js'\n\nexport const apiRoutes: ApiRouteEntry[] = [\n {\n defaultApiVersion: 'v2025-07-11',\n host: 'global',\n pathPatterns: [\n 'access/invites/me',\n 'access/organization/{resourceId}/users/roles/default',\n 'access/requests/me',\n 'access/robots/me',\n 'access/robots/me/rotate',\n 'access/{resourceType}/{resourceId}/invites',\n 'access/{resourceType}/{resourceId}/invites/token/{inviteToken}',\n 'access/{resourceType}/{resourceId}/invites/token/{inviteToken}/accept',\n 'access/{resourceType}/{resourceId}/invites/token/{inviteToken}/eligibility',\n 'access/{resourceType}/{resourceId}/invites/{inviteId}',\n 'access/{resourceType}/{resourceId}/permissions',\n 'access/{resourceType}/{resourceId}/permissions/{permissionName}',\n 'access/{resourceType}/{resourceId}/requests',\n 'access/{resourceType}/{resourceId}/requests/state',\n 'access/{resourceType}/{resourceId}/requests/{requestId}/accept',\n 'access/{resourceType}/{resourceId}/requests/{requestId}/decline',\n 'access/{resourceType}/{resourceId}/robots',\n 'access/{resourceType}/{resourceId}/robots/{robotId}',\n 'access/{resourceType}/{resourceId}/roles',\n 'access/{resourceType}/{resourceId}/roles/{roleName}',\n 'access/{resourceType}/{resourceId}/user-permissions/me',\n 'access/{resourceType}/{resourceId}/user-permissions/me/check',\n 'access/{resourceType}/{resourceId}/users',\n 'access/{resourceType}/{resourceId}/users/me',\n 'access/{resourceType}/{resourceId}/users/{sanityUserId}',\n 'access/{resourceType}/{resourceId}/users/{sanityUserId}/roles',\n 'access/{resourceType}/{resourceId}/users/{sanityUserId}/roles/{roleName}'\n ],\n slug: 'access-api',\n title: 'Access API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/actions/{dataset}'\n ],\n slug: 'actions',\n title: 'Actions API reference'\n },\n {\n defaultApiVersion: 'v2021-02-01',\n host: 'global',\n pathPatterns: [\n 'activity',\n 'activity/export/csv'\n ],\n slug: 'activity-log',\n title: 'Activity Log API Reference'\n },\n {\n defaultApiVersion: 'vX',\n host: 'project',\n pathPatterns: [\n 'agent/action/generate/{dataset}',\n 'agent/action/patch/{dataset}',\n 'agent/action/prompt/{dataset}',\n 'agent/action/transform/{dataset}',\n 'agent/action/translate/{dataset}'\n ],\n slug: 'agent-actions',\n title: 'Agent Actions'\n },\n {\n host: 'global',\n pathPatterns: [\n 'applications',\n 'applications/{applicationId}',\n 'applications/{applicationId}/access',\n 'applications/{applicationId}/deployments',\n 'applications/{applicationId}/installations',\n 'applications/{applicationId}/interfaces',\n 'applications/{applicationId}/workspaces',\n 'deploy',\n 'deploy/quickstart',\n 'installations',\n 'installations/catalog',\n 'installations/defaults',\n 'installations/{installationId}',\n 'installations/{installationId}/access',\n 'installations/{installationId}/configs',\n 'installations/{installationId}/configs/{configId}',\n 'installations/{installationId}/interfaces',\n 'projects/{projectId}/user-applications',\n 'projects/{projectId}/user-applications/{userApplicationId}',\n 'projects/{projectId}/user-applications/{userApplicationId}/config/{configKey}',\n 'projects/{projectId}/user-applications/{userApplicationId}/deployments',\n 'studiohosts/{appHost}/availability',\n 'user-applications',\n 'user-applications/auto-update-version/{userApplicationId}',\n 'user-applications/resolve/application',\n 'user-applications/resolve/project',\n 'user-applications/workspaces',\n 'user-applications/{userApplicationId}',\n 'user-applications/{userApplicationId}/applicationData',\n 'user-applications/{userApplicationId}/config/{configKey}',\n 'user-applications/{userApplicationId}/deployments',\n 'user-applications/{userApplicationId}/workspaces'\n ],\n slug: 'applications-api',\n title: 'Applications API Reference'\n },\n {\n host: 'project',\n pathPatterns: [\n 'applications',\n 'applications/{applicationId}',\n 'applications/{applicationId}/access',\n 'applications/{applicationId}/deployments',\n 'applications/{applicationId}/installations',\n 'applications/{applicationId}/interfaces',\n 'applications/{applicationId}/workspaces',\n 'deploy',\n 'deploy/quickstart',\n 'installations',\n 'installations/catalog',\n 'installations/defaults',\n 'installations/{installationId}',\n 'installations/{installationId}/access',\n 'installations/{installationId}/configs',\n 'installations/{installationId}/configs/{configId}',\n 'installations/{installationId}/interfaces',\n 'projects/{projectId}/user-applications',\n 'projects/{projectId}/user-applications/{userApplicationId}',\n 'projects/{projectId}/user-applications/{userApplicationId}/config/{configKey}',\n 'projects/{projectId}/user-applications/{userApplicationId}/deployments',\n 'studiohosts/{appHost}/availability',\n 'user-applications',\n 'user-applications/auto-update-version/{userApplicationId}',\n 'user-applications/resolve/application',\n 'user-applications/resolve/project',\n 'user-applications/workspaces',\n 'user-applications/{userApplicationId}',\n 'user-applications/{userApplicationId}/applicationData',\n 'user-applications/{userApplicationId}/config/{configKey}',\n 'user-applications/{userApplicationId}/deployments',\n 'user-applications/{userApplicationId}/workspaces'\n ],\n slug: 'applications-api',\n title: 'Applications API Reference'\n },\n {\n defaultApiVersion: 'v2024-06-24',\n host: 'project',\n pathPatterns: [\n 'assets/files/{dataset}',\n 'assets/images/{dataset}',\n 'assets/media-library-link/{dataset}'\n ],\n slug: 'assets',\n title: 'Assets API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'global',\n pathPatterns: [\n 'projects/{projectId}/datasets/{datasetName}/backups',\n 'projects/{projectId}/datasets/{datasetName}/backups/{backupId}',\n 'projects/{projectId}/datasets/{datasetName}/settings/backups'\n ],\n slug: 'backups',\n title: 'Backups API reference'\n },\n {\n defaultApiVersion: 'vX',\n host: 'global',\n pathPatterns: [\n 'agent/prompt',\n 'agent/{organizationId}/threads/{threadId}'\n ],\n slug: 'content-agent',\n title: 'Content Agent API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'global',\n pathPatterns: [\n 'projects/{projectId}/datasets/{dataset}/copy'\n ],\n slug: 'copy',\n title: 'Copy API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/doc/{dataset}/{documentId}'\n ],\n slug: 'doc',\n title: 'Doc API reference'\n },\n {\n defaultApiVersion: 'vX',\n host: 'project',\n pathPatterns: [\n 'embeddings-index/query/{dataset}/{indexName}',\n 'embeddings-index/{dataset}',\n 'embeddings-index/{dataset}/{indexName}'\n ],\n slug: 'embeddings-index',\n title: 'Embeddings Index API reference (deprecated)'\n },\n {\n defaultApiVersion: 'v2021-03-25',\n host: 'project',\n pathPatterns: [\n 'data/export/{dataset}'\n ],\n slug: 'export',\n title: 'Export API reference'\n },\n {\n host: 'global',\n pathPatterns: [\n 'functions',\n 'functions/{functionId}',\n 'functions/{functionId}/envvars',\n 'functions/{functionId}/envvars/{envVarKey}',\n 'functions/{functionId}/invoke',\n 'functions/{functionId}/logs',\n 'functions/{functionId}/logs/stream'\n ],\n slug: 'functions-api',\n title: 'Functions API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/history/{dataset}/documents/{documentId}',\n 'data/history/{dataset}/transactions',\n 'data/history/{dataset}/transactions/{documentIds}'\n ],\n slug: 'history',\n title: 'History API reference'\n },\n {\n defaultApiVersion: 'v2021-06-07',\n host: 'global',\n pathPatterns: [\n 'jobs/{jobId}',\n 'jobs/{jobId}/listen'\n ],\n slug: 'jobs',\n title: 'Jobs API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/listen/{dataset}'\n ],\n slug: 'listen',\n title: 'Listen API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/live/events/{dataset}'\n ],\n slug: 'live',\n title: 'Live Content API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'global',\n pathPatterns: [\n 'media-libraries/{libraryId}/from-url',\n 'media-libraries/{libraryId}/mutate',\n 'media-libraries/{libraryId}/query',\n 'media-libraries/{libraryId}/references/documents/{assetId}/to',\n 'media-libraries/{libraryId}/refsearch',\n 'media-libraries/{libraryId}/signing-keys',\n 'media-libraries/{libraryId}/signing-keys/{keyId}',\n 'media-libraries/{libraryId}/upload',\n 'media-libraries/{libraryId}/video/{videoId}/playback-info',\n 'media-libraries/{libraryId}/video/{videoId}/playback/{type}',\n 'media-libraries/{libraryId}/video/{videoId}/renditions/{name}',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles/upload',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles/{subtitleId}'\n ],\n slug: 'media-library',\n title: 'Media Library API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'media-libraries/{libraryId}/from-url',\n 'media-libraries/{libraryId}/mutate',\n 'media-libraries/{libraryId}/query',\n 'media-libraries/{libraryId}/references/documents/{assetId}/to',\n 'media-libraries/{libraryId}/refsearch',\n 'media-libraries/{libraryId}/signing-keys',\n 'media-libraries/{libraryId}/signing-keys/{keyId}',\n 'media-libraries/{libraryId}/upload',\n 'media-libraries/{libraryId}/video/{videoId}/playback-info',\n 'media-libraries/{libraryId}/video/{videoId}/playback/{type}',\n 'media-libraries/{libraryId}/video/{videoId}/renditions/{name}',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles/upload',\n 'media-libraries/{libraryId}/video/{videoId}/subtitles/{subtitleId}'\n ],\n slug: 'media-library',\n title: 'Media Library API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/mutate/{dataset}'\n ],\n slug: 'mutation',\n title: 'Mutation API reference'\n },\n {\n defaultApiVersion: 'v2021-06-07',\n host: 'global',\n pathPatterns: [\n 'projects',\n 'projects/{projectId}',\n 'projects/{projectId}/cors',\n 'projects/{projectId}/cors/{id}',\n 'projects/{projectId}/datasets',\n 'projects/{projectId}/datasets/{datasetName}/tags/{tagIdentifier}',\n 'projects/{projectId}/datasets/{name}',\n 'projects/{projectId}/datasets/{name}/copy',\n 'projects/{projectId}/datasets/{name}/settings/embeddings',\n 'projects/{projectId}/datasets/{name}/tags',\n 'projects/{projectId}/features',\n 'projects/{projectId}/permissions',\n 'projects/{projectId}/tags',\n 'projects/{projectId}/tags/{tagIdentifier}',\n 'projects/{projectId}/tokens',\n 'projects/{projectId}/tokens/{tokenId}',\n 'projects/{projectId}/users/{userId}'\n ],\n slug: 'projects-api',\n title: 'Projects API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'data/query/{dataset}'\n ],\n slug: 'query',\n title: 'Query API reference'\n },\n {\n defaultApiVersion: 'v2021-10-04',\n host: 'global',\n pathPatterns: [\n 'organizations/{organizationId}/acl',\n 'organizations/{organizationId}/acl/{sanityUserId}',\n 'organizations/{organizationId}/grants',\n 'organizations/{organizationId}/providers/{providerId}/projects/{projectId}/role-mappings',\n 'projects/{projectId}/acl',\n 'projects/{projectId}/acl/{userId}',\n 'projects/{projectId}/datasets/{datasetName}/acl',\n 'projects/{projectId}/datasets/{datasetName}/grants',\n 'projects/{projectId}/grants',\n 'projects/{projectId}/permissionResourceSchemas',\n 'projects/{projectId}/roles',\n 'projects/{projectId}/roles/{roleName}'\n ],\n slug: 'roles',\n title: 'Roles API reference'\n },\n {\n defaultApiVersion: 'v2022-04-01',\n host: 'project',\n pathPatterns: [\n 'publish/{projectId}/{dataset}',\n 'schedules/{projectId}/{dataset}',\n 'schedules/{projectId}/{dataset}/{scheduleId}',\n 'schedules/{projectId}/{dataset}/{scheduleId}/publish',\n 'unpublish/{projectId}/{dataset}'\n ],\n slug: 'scheduling',\n title: 'Scheduling API reference'\n },\n {\n defaultApiVersion: 'v2026-04-27',\n host: 'global',\n pathPatterns: [\n 'organizations/{organizationId}/attribute-definitions',\n 'organizations/{organizationId}/attribute-definitions/{key}',\n 'organizations/{organizationId}/users/me/attributes',\n 'organizations/{organizationId}/users/{sanityUserId}/attributes'\n ],\n slug: 'user-attributes',\n title: 'User attributes API reference'\n },\n {\n defaultApiVersion: 'v2025-02-19',\n host: 'project',\n pathPatterns: [\n 'hooks/projects/{projectId}',\n 'hooks/projects/{projectId}/{id}',\n 'hooks/projects/{projectId}/{id}/attempts',\n 'hooks/{id}/messages'\n ],\n slug: 'webhooks',\n title: 'Webhooks API reference'\n }\n]\n"],"names":["apiRoutes","defaultApiVersion","host","pathPatterns","slug","title"],"mappings":"AAAA;;;;;;;CAOC,GAGD,OAAO,MAAMA,YAA6B;IACxC;QACEC,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEH,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEH,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEH,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;IACA;QACEJ,mBAAmB;QACnBC,MAAM;QACNC,cAAc;YACZ;YACA;YACA;YACA;SACD;QACDC,MAAM;QACNC,OAAO;IACT;CACD,CAAA"}
|
|
@@ -39,6 +39,28 @@ const PACKAGE_MANAGER_COMMANDS = {
|
|
|
39
39
|
]
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
|
+
// `manual` has no command of its own, so commands shown to the user fall back to npm
|
|
43
|
+
function toLib(packageManager) {
|
|
44
|
+
return packageManager === 'manual' ? 'npm' : packageManager;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The command a user would run by hand to install a project's declared
|
|
48
|
+
* dependencies, eg `pnpm install`.
|
|
49
|
+
*
|
|
50
|
+
* @internal
|
|
51
|
+
*/ export function getInstallCommand(packageManager) {
|
|
52
|
+
const lib = toLib(packageManager);
|
|
53
|
+
return `${lib} ${PACKAGE_MANAGER_COMMANDS.install[lib].join(' ')}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The command a user would run by hand to add the given packages to a project,
|
|
57
|
+
* eg `pnpm add --save-prod sanity@5`.
|
|
58
|
+
*
|
|
59
|
+
* @internal
|
|
60
|
+
*/ export function getAddCommand(packageManager, packages) {
|
|
61
|
+
const lib = toLib(packageManager);
|
|
62
|
+
return `${lib} ${PACKAGE_MANAGER_COMMANDS.add[lib](packages).join(' ')}`;
|
|
63
|
+
}
|
|
42
64
|
const IGNORED_BUILDS_NOTICE = 'pnpm skipped build scripts for some dependencies. Run "pnpm approve-builds" in the project directory to pick which dependencies should be allowed to run scripts.';
|
|
43
65
|
// Matches pnpm's `ERR_PNPM_IGNORED_BUILDS` error against whitespace-normalized
|
|
44
66
|
// output (pnpm may wrap the message), capturing the list of skipped packages,
|
|
@@ -125,8 +147,7 @@ export async function installDeclaredPackages(cwd, packageManager, context) {
|
|
|
125
147
|
stdio: 'pipe'
|
|
126
148
|
};
|
|
127
149
|
if (packageManager === 'manual') {
|
|
128
|
-
|
|
129
|
-
output.log(`Manual installation selected — run 'npm ${npmCommand.join(' ')}' or equivalent`);
|
|
150
|
+
output.log(`Manual installation selected — run '${getInstallCommand('manual')}' or equivalent`);
|
|
130
151
|
} else {
|
|
131
152
|
const args = PACKAGE_MANAGER_COMMANDS.install[packageManager];
|
|
132
153
|
await executePackageManagerCommand(packageManager, args, execOptions, output, 'Dependency installation failed');
|
|
@@ -145,8 +166,7 @@ export async function installNewPackages(options, context) {
|
|
|
145
166
|
timeout
|
|
146
167
|
};
|
|
147
168
|
if (packageManager === 'manual') {
|
|
148
|
-
|
|
149
|
-
output.log(`Manual installation selected - run 'npm ${npmCommand.join(' ')}' or equivalent`);
|
|
169
|
+
output.log(`Manual installation selected - run '${getAddCommand('manual', packages)}' or equivalent`);
|
|
150
170
|
} else {
|
|
151
171
|
const args = PACKAGE_MANAGER_COMMANDS.add[packageManager](packages);
|
|
152
172
|
await executePackageManagerCommand(packageManager, args, execOptions, output, 'Package installation failed');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/util/packageManager/installPackages.ts"],"sourcesContent":["import {CLIError} from '@oclif/core/errors'\nimport {exitCodes, type Output} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\nimport {execa, type Options} from 'execa'\n\nimport {getPartialEnvWithNpmPath, type PackageManager} from './packageManagerChoice.js'\n\ntype PackageManagerLibs = Exclude<PackageManager, 'manual'>\n\n/**\n * @internal\n */\ninterface InstallOptions {\n packageManager: PackageManager\n packages: string[]\n}\n\ninterface PackageManagerCommands {\n add: {[key in PackageManagerLibs]: (packages: string[]) => string[]}\n install: {[key in PackageManagerLibs]: string[]}\n}\n\nconst PACKAGE_MANAGER_COMMANDS: PackageManagerCommands = {\n add: {\n bun: (packages) => ['add', ...packages],\n npm: (packages) => ['install', '--save', ...packages],\n pnpm: (packages) => ['add', '--save-prod', ...packages],\n yarn: (packages) => ['add', ...packages],\n },\n install: {\n bun: ['install'],\n npm: ['install'],\n pnpm: ['install'],\n yarn: ['install'],\n },\n}\n\nconst IGNORED_BUILDS_NOTICE =\n 'pnpm skipped build scripts for some dependencies. Run \"pnpm approve-builds\" in the project directory to pick which dependencies should be allowed to run scripts.'\n\n// Matches pnpm's `ERR_PNPM_IGNORED_BUILDS` error against whitespace-normalized\n// output (pnpm may wrap the message), capturing the list of skipped packages,\n// eg `esbuild@0.25.0, sharp@0.34.0.` - the `<pkg>@<version>` token sequence\n// ends the capture where the trailing `Run \"pnpm approve-builds\"…` hint starts\nconst IGNORED_BUILDS_PATTERN =\n /ERR_PNPM_IGNORED_BUILDS.*?Ignored build scripts: ?((?:[^\\s,]+@[^\\s,]+[, ]*)+)/\n\nfunction getIgnoredBuildScripts(commandOutput: string): string[] | undefined {\n const match = commandOutput.replaceAll(/\\s+/g, ' ').match(IGNORED_BUILDS_PATTERN)\n if (!match) {\n return undefined\n }\n\n // The capture allows both comma and whitespace separators (pnpm may print\n // either, and wrapping can drop the comma), so split on both.\n return match[1]\n .split(/[\\s,]+/)\n .map((entry) => entry.replace(/\\.$/, ''))\n .filter(Boolean)\n}\n\nfunction isEsbuild(ignoredEntry: string): boolean {\n // Entries are on the form `<pkg-name>@<version>` - strip the version,\n // keeping in mind that scoped package names also start with `@`\n return ignoredEntry.replace(/@[^@]+$/, '') === 'esbuild'\n}\n\nasync function executePackageManagerCommand(\n packageManager: PackageManagerLibs,\n args: string[],\n execOptions: Options,\n output: Output,\n errorMessage: string,\n): Promise<void> {\n const progress = spinner({\n discardStdin: !execOptions.cancelSignal,\n text: `Running ${packageManager} ${args.join(' ')}\\n`,\n }).start()\n let progressSettled = false\n const fail = () => {\n progressSettled = true\n progress.fail()\n }\n const succeed = () => {\n progressSettled = true\n progress.succeed()\n }\n\n try {\n const result = await execa(packageManager, args, execOptions)\n\n if (execOptions.cancelSignal?.aborted) {\n fail()\n execOptions.cancelSignal.throwIfAborted()\n }\n\n if (result?.exitCode || result?.failed) {\n // pnpm exits non-zero if dependency build scripts were skipped, even though\n // the install itself succeeded. Treat it as a success, but point to\n // `pnpm approve-builds` if anything other than esbuild was skipped\n // (esbuild works without its build script through a JS fallback).\n const commandOutput = [result.stdout, result.stderr]\n .filter((chunk): chunk is string => typeof chunk === 'string')\n .join('\\n')\n const ignoredBuilds =\n packageManager === 'pnpm' ? getIgnoredBuildScripts(commandOutput) : undefined\n\n if (ignoredBuilds) {\n succeed()\n if (ignoredBuilds.some((entry) => !isEsbuild(entry))) {\n output.warn(IGNORED_BUILDS_NOTICE)\n }\n return\n }\n\n fail()\n // Log both streams - package managers often print the actionable error\n // details to stderr, so logging stdout alone can hide the failure reason.\n output.log(commandOutput)\n throw new CLIError(errorMessage, {exit: exitCodes.RUNTIME_ERROR})\n } else {\n succeed()\n }\n } catch (err) {\n if (!progressSettled) {\n fail()\n }\n throw err\n } finally {\n progress.stop()\n }\n}\n\nexport async function installDeclaredPackages(\n cwd: string,\n packageManager: PackageManager,\n context: {output: Output; workDir: string},\n): Promise<void> {\n const {output} = context\n const execOptions: Options = {\n cwd,\n encoding: 'utf8',\n env: getPartialEnvWithNpmPath(cwd),\n reject: false,\n stdio: 'pipe',\n }\n\n if (packageManager === 'manual') {\n const npmCommand = PACKAGE_MANAGER_COMMANDS.install.npm\n output.log(`Manual installation selected — run 'npm ${npmCommand.join(' ')}' or equivalent`)\n } else {\n const args = PACKAGE_MANAGER_COMMANDS.install[packageManager]\n await executePackageManagerCommand(\n packageManager,\n args,\n execOptions,\n output,\n 'Dependency installation failed',\n )\n }\n}\n\nexport async function installNewPackages(\n options: InstallOptions,\n context: {cancelSignal?: AbortSignal; output: Output; timeout?: number; workDir: string},\n): Promise<void> {\n const {packageManager, packages} = options\n const {cancelSignal, output, timeout, workDir} = context\n const execOptions: Options = {\n cancelSignal,\n cwd: workDir,\n encoding: 'utf8',\n env: getPartialEnvWithNpmPath(workDir),\n reject: false,\n stdio: 'pipe',\n timeout,\n }\n\n if (packageManager === 'manual') {\n const npmCommand = PACKAGE_MANAGER_COMMANDS.add.npm(packages)\n output.log(`Manual installation selected - run 'npm ${npmCommand.join(' ')}' or equivalent`)\n } else {\n const args = PACKAGE_MANAGER_COMMANDS.add[packageManager](packages)\n await executePackageManagerCommand(\n packageManager,\n args,\n execOptions,\n output,\n 'Package installation failed',\n )\n }\n}\n"],"names":["CLIError","exitCodes","spinner","execa","getPartialEnvWithNpmPath","PACKAGE_MANAGER_COMMANDS","add","bun","packages","npm","pnpm","yarn","install","IGNORED_BUILDS_NOTICE","IGNORED_BUILDS_PATTERN","getIgnoredBuildScripts","commandOutput","match","replaceAll","undefined","split","map","entry","replace","filter","Boolean","isEsbuild","ignoredEntry","executePackageManagerCommand","packageManager","args","execOptions","output","errorMessage","progress","discardStdin","cancelSignal","text","join","start","progressSettled","fail","succeed","result","aborted","throwIfAborted","exitCode","failed","stdout","stderr","chunk","ignoredBuilds","some","warn","log","exit","RUNTIME_ERROR","err","stop","installDeclaredPackages","cwd","context","encoding","env","reject","stdio","npmCommand","installNewPackages","options","timeout","workDir"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/util/packageManager/installPackages.ts"],"sourcesContent":["import {CLIError} from '@oclif/core/errors'\nimport {exitCodes, type Output} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\nimport {execa, type Options} from 'execa'\n\nimport {getPartialEnvWithNpmPath, type PackageManager} from './packageManagerChoice.js'\n\ntype PackageManagerLibs = Exclude<PackageManager, 'manual'>\n\n/**\n * @internal\n */\ninterface InstallOptions {\n packageManager: PackageManager\n packages: string[]\n}\n\ninterface PackageManagerCommands {\n add: {[key in PackageManagerLibs]: (packages: string[]) => string[]}\n install: {[key in PackageManagerLibs]: string[]}\n}\n\nconst PACKAGE_MANAGER_COMMANDS: PackageManagerCommands = {\n add: {\n bun: (packages) => ['add', ...packages],\n npm: (packages) => ['install', '--save', ...packages],\n pnpm: (packages) => ['add', '--save-prod', ...packages],\n yarn: (packages) => ['add', ...packages],\n },\n install: {\n bun: ['install'],\n npm: ['install'],\n pnpm: ['install'],\n yarn: ['install'],\n },\n}\n\n// `manual` has no command of its own, so commands shown to the user fall back to npm\nfunction toLib(packageManager: PackageManager): PackageManagerLibs {\n return packageManager === 'manual' ? 'npm' : packageManager\n}\n\n/**\n * The command a user would run by hand to install a project's declared\n * dependencies, eg `pnpm install`.\n *\n * @internal\n */\nexport function getInstallCommand(packageManager: PackageManager): string {\n const lib = toLib(packageManager)\n return `${lib} ${PACKAGE_MANAGER_COMMANDS.install[lib].join(' ')}`\n}\n\n/**\n * The command a user would run by hand to add the given packages to a project,\n * eg `pnpm add --save-prod sanity@5`.\n *\n * @internal\n */\nexport function getAddCommand(packageManager: PackageManager, packages: string[]): string {\n const lib = toLib(packageManager)\n return `${lib} ${PACKAGE_MANAGER_COMMANDS.add[lib](packages).join(' ')}`\n}\n\nconst IGNORED_BUILDS_NOTICE =\n 'pnpm skipped build scripts for some dependencies. Run \"pnpm approve-builds\" in the project directory to pick which dependencies should be allowed to run scripts.'\n\n// Matches pnpm's `ERR_PNPM_IGNORED_BUILDS` error against whitespace-normalized\n// output (pnpm may wrap the message), capturing the list of skipped packages,\n// eg `esbuild@0.25.0, sharp@0.34.0.` - the `<pkg>@<version>` token sequence\n// ends the capture where the trailing `Run \"pnpm approve-builds\"…` hint starts\nconst IGNORED_BUILDS_PATTERN =\n /ERR_PNPM_IGNORED_BUILDS.*?Ignored build scripts: ?((?:[^\\s,]+@[^\\s,]+[, ]*)+)/\n\nfunction getIgnoredBuildScripts(commandOutput: string): string[] | undefined {\n const match = commandOutput.replaceAll(/\\s+/g, ' ').match(IGNORED_BUILDS_PATTERN)\n if (!match) {\n return undefined\n }\n\n // The capture allows both comma and whitespace separators (pnpm may print\n // either, and wrapping can drop the comma), so split on both.\n return match[1]\n .split(/[\\s,]+/)\n .map((entry) => entry.replace(/\\.$/, ''))\n .filter(Boolean)\n}\n\nfunction isEsbuild(ignoredEntry: string): boolean {\n // Entries are on the form `<pkg-name>@<version>` - strip the version,\n // keeping in mind that scoped package names also start with `@`\n return ignoredEntry.replace(/@[^@]+$/, '') === 'esbuild'\n}\n\nasync function executePackageManagerCommand(\n packageManager: PackageManagerLibs,\n args: string[],\n execOptions: Options,\n output: Output,\n errorMessage: string,\n): Promise<void> {\n const progress = spinner({\n discardStdin: !execOptions.cancelSignal,\n text: `Running ${packageManager} ${args.join(' ')}\\n`,\n }).start()\n let progressSettled = false\n const fail = () => {\n progressSettled = true\n progress.fail()\n }\n const succeed = () => {\n progressSettled = true\n progress.succeed()\n }\n\n try {\n const result = await execa(packageManager, args, execOptions)\n\n if (execOptions.cancelSignal?.aborted) {\n fail()\n execOptions.cancelSignal.throwIfAborted()\n }\n\n if (result?.exitCode || result?.failed) {\n // pnpm exits non-zero if dependency build scripts were skipped, even though\n // the install itself succeeded. Treat it as a success, but point to\n // `pnpm approve-builds` if anything other than esbuild was skipped\n // (esbuild works without its build script through a JS fallback).\n const commandOutput = [result.stdout, result.stderr]\n .filter((chunk): chunk is string => typeof chunk === 'string')\n .join('\\n')\n const ignoredBuilds =\n packageManager === 'pnpm' ? getIgnoredBuildScripts(commandOutput) : undefined\n\n if (ignoredBuilds) {\n succeed()\n if (ignoredBuilds.some((entry) => !isEsbuild(entry))) {\n output.warn(IGNORED_BUILDS_NOTICE)\n }\n return\n }\n\n fail()\n // Log both streams - package managers often print the actionable error\n // details to stderr, so logging stdout alone can hide the failure reason.\n output.log(commandOutput)\n throw new CLIError(errorMessage, {exit: exitCodes.RUNTIME_ERROR})\n } else {\n succeed()\n }\n } catch (err) {\n if (!progressSettled) {\n fail()\n }\n throw err\n } finally {\n progress.stop()\n }\n}\n\nexport async function installDeclaredPackages(\n cwd: string,\n packageManager: PackageManager,\n context: {output: Output; workDir: string},\n): Promise<void> {\n const {output} = context\n const execOptions: Options = {\n cwd,\n encoding: 'utf8',\n env: getPartialEnvWithNpmPath(cwd),\n reject: false,\n stdio: 'pipe',\n }\n\n if (packageManager === 'manual') {\n output.log(`Manual installation selected — run '${getInstallCommand('manual')}' or equivalent`)\n } else {\n const args = PACKAGE_MANAGER_COMMANDS.install[packageManager]\n await executePackageManagerCommand(\n packageManager,\n args,\n execOptions,\n output,\n 'Dependency installation failed',\n )\n }\n}\n\nexport async function installNewPackages(\n options: InstallOptions,\n context: {cancelSignal?: AbortSignal; output: Output; timeout?: number; workDir: string},\n): Promise<void> {\n const {packageManager, packages} = options\n const {cancelSignal, output, timeout, workDir} = context\n const execOptions: Options = {\n cancelSignal,\n cwd: workDir,\n encoding: 'utf8',\n env: getPartialEnvWithNpmPath(workDir),\n reject: false,\n stdio: 'pipe',\n timeout,\n }\n\n if (packageManager === 'manual') {\n output.log(\n `Manual installation selected - run '${getAddCommand('manual', packages)}' or equivalent`,\n )\n } else {\n const args = PACKAGE_MANAGER_COMMANDS.add[packageManager](packages)\n await executePackageManagerCommand(\n packageManager,\n args,\n execOptions,\n output,\n 'Package installation failed',\n )\n }\n}\n"],"names":["CLIError","exitCodes","spinner","execa","getPartialEnvWithNpmPath","PACKAGE_MANAGER_COMMANDS","add","bun","packages","npm","pnpm","yarn","install","toLib","packageManager","getInstallCommand","lib","join","getAddCommand","IGNORED_BUILDS_NOTICE","IGNORED_BUILDS_PATTERN","getIgnoredBuildScripts","commandOutput","match","replaceAll","undefined","split","map","entry","replace","filter","Boolean","isEsbuild","ignoredEntry","executePackageManagerCommand","args","execOptions","output","errorMessage","progress","discardStdin","cancelSignal","text","start","progressSettled","fail","succeed","result","aborted","throwIfAborted","exitCode","failed","stdout","stderr","chunk","ignoredBuilds","some","warn","log","exit","RUNTIME_ERROR","err","stop","installDeclaredPackages","cwd","context","encoding","env","reject","stdio","installNewPackages","options","timeout","workDir"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,qBAAoB;AAC3C,SAAQC,SAAS,QAAoB,mBAAkB;AACvD,SAAQC,OAAO,QAAO,sBAAqB;AAC3C,SAAQC,KAAK,QAAqB,QAAO;AAEzC,SAAQC,wBAAwB,QAA4B,4BAA2B;AAiBvF,MAAMC,2BAAmD;IACvDC,KAAK;QACHC,KAAK,CAACC,WAAa;gBAAC;mBAAUA;aAAS;QACvCC,KAAK,CAACD,WAAa;gBAAC;gBAAW;mBAAaA;aAAS;QACrDE,MAAM,CAACF,WAAa;gBAAC;gBAAO;mBAAkBA;aAAS;QACvDG,MAAM,CAACH,WAAa;gBAAC;mBAAUA;aAAS;IAC1C;IACAI,SAAS;QACPL,KAAK;YAAC;SAAU;QAChBE,KAAK;YAAC;SAAU;QAChBC,MAAM;YAAC;SAAU;QACjBC,MAAM;YAAC;SAAU;IACnB;AACF;AAEA,qFAAqF;AACrF,SAASE,MAAMC,cAA8B;IAC3C,OAAOA,mBAAmB,WAAW,QAAQA;AAC/C;AAEA;;;;;CAKC,GACD,OAAO,SAASC,kBAAkBD,cAA8B;IAC9D,MAAME,MAAMH,MAAMC;IAClB,OAAO,GAAGE,IAAI,CAAC,EAAEX,yBAAyBO,OAAO,CAACI,IAAI,CAACC,IAAI,CAAC,MAAM;AACpE;AAEA;;;;;CAKC,GACD,OAAO,SAASC,cAAcJ,cAA8B,EAAEN,QAAkB;IAC9E,MAAMQ,MAAMH,MAAMC;IAClB,OAAO,GAAGE,IAAI,CAAC,EAAEX,yBAAyBC,GAAG,CAACU,IAAI,CAACR,UAAUS,IAAI,CAAC,MAAM;AAC1E;AAEA,MAAME,wBACJ;AAEF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,+EAA+E;AAC/E,MAAMC,yBACJ;AAEF,SAASC,uBAAuBC,aAAqB;IACnD,MAAMC,QAAQD,cAAcE,UAAU,CAAC,QAAQ,KAAKD,KAAK,CAACH;IAC1D,IAAI,CAACG,OAAO;QACV,OAAOE;IACT;IAEA,0EAA0E;IAC1E,8DAA8D;IAC9D,OAAOF,KAAK,CAAC,EAAE,CACZG,KAAK,CAAC,UACNC,GAAG,CAAC,CAACC,QAAUA,MAAMC,OAAO,CAAC,OAAO,KACpCC,MAAM,CAACC;AACZ;AAEA,SAASC,UAAUC,YAAoB;IACrC,sEAAsE;IACtE,gEAAgE;IAChE,OAAOA,aAAaJ,OAAO,CAAC,WAAW,QAAQ;AACjD;AAEA,eAAeK,6BACbpB,cAAkC,EAClCqB,IAAc,EACdC,WAAoB,EACpBC,MAAc,EACdC,YAAoB;IAEpB,MAAMC,WAAWrC,QAAQ;QACvBsC,cAAc,CAACJ,YAAYK,YAAY;QACvCC,MAAM,CAAC,QAAQ,EAAE5B,eAAe,CAAC,EAAEqB,KAAKlB,IAAI,CAAC,KAAK,EAAE,CAAC;IACvD,GAAG0B,KAAK;IACR,IAAIC,kBAAkB;IACtB,MAAMC,OAAO;QACXD,kBAAkB;QAClBL,SAASM,IAAI;IACf;IACA,MAAMC,UAAU;QACdF,kBAAkB;QAClBL,SAASO,OAAO;IAClB;IAEA,IAAI;QACF,MAAMC,SAAS,MAAM5C,MAAMW,gBAAgBqB,MAAMC;QAEjD,IAAIA,YAAYK,YAAY,EAAEO,SAAS;YACrCH;YACAT,YAAYK,YAAY,CAACQ,cAAc;QACzC;QAEA,IAAIF,QAAQG,YAAYH,QAAQI,QAAQ;YACtC,4EAA4E;YAC5E,oEAAoE;YACpE,mEAAmE;YACnE,kEAAkE;YAClE,MAAM7B,gBAAgB;gBAACyB,OAAOK,MAAM;gBAAEL,OAAOM,MAAM;aAAC,CACjDvB,MAAM,CAAC,CAACwB,QAA2B,OAAOA,UAAU,UACpDrC,IAAI,CAAC;YACR,MAAMsC,gBACJzC,mBAAmB,SAASO,uBAAuBC,iBAAiBG;YAEtE,IAAI8B,eAAe;gBACjBT;gBACA,IAAIS,cAAcC,IAAI,CAAC,CAAC5B,QAAU,CAACI,UAAUJ,SAAS;oBACpDS,OAAOoB,IAAI,CAACtC;gBACd;gBACA;YACF;YAEA0B;YACA,uEAAuE;YACvE,0EAA0E;YAC1ER,OAAOqB,GAAG,CAACpC;YACX,MAAM,IAAItB,SAASsC,cAAc;gBAACqB,MAAM1D,UAAU2D,aAAa;YAAA;QACjE,OAAO;YACLd;QACF;IACF,EAAE,OAAOe,KAAK;QACZ,IAAI,CAACjB,iBAAiB;YACpBC;QACF;QACA,MAAMgB;IACR,SAAU;QACRtB,SAASuB,IAAI;IACf;AACF;AAEA,OAAO,eAAeC,wBACpBC,GAAW,EACXlD,cAA8B,EAC9BmD,OAA0C;IAE1C,MAAM,EAAC5B,MAAM,EAAC,GAAG4B;IACjB,MAAM7B,cAAuB;QAC3B4B;QACAE,UAAU;QACVC,KAAK/D,yBAAyB4D;QAC9BI,QAAQ;QACRC,OAAO;IACT;IAEA,IAAIvD,mBAAmB,UAAU;QAC/BuB,OAAOqB,GAAG,CAAC,CAAC,oCAAoC,EAAE3C,kBAAkB,UAAU,eAAe,CAAC;IAChG,OAAO;QACL,MAAMoB,OAAO9B,yBAAyBO,OAAO,CAACE,eAAe;QAC7D,MAAMoB,6BACJpB,gBACAqB,MACAC,aACAC,QACA;IAEJ;AACF;AAEA,OAAO,eAAeiC,mBACpBC,OAAuB,EACvBN,OAAwF;IAExF,MAAM,EAACnD,cAAc,EAAEN,QAAQ,EAAC,GAAG+D;IACnC,MAAM,EAAC9B,YAAY,EAAEJ,MAAM,EAAEmC,OAAO,EAAEC,OAAO,EAAC,GAAGR;IACjD,MAAM7B,cAAuB;QAC3BK;QACAuB,KAAKS;QACLP,UAAU;QACVC,KAAK/D,yBAAyBqE;QAC9BL,QAAQ;QACRC,OAAO;QACPG;IACF;IAEA,IAAI1D,mBAAmB,UAAU;QAC/BuB,OAAOqB,GAAG,CACR,CAAC,oCAAoC,EAAExC,cAAc,UAAUV,UAAU,eAAe,CAAC;IAE7F,OAAO;QACL,MAAM2B,OAAO9B,yBAAyBC,GAAG,CAACQ,eAAe,CAACN;QAC1D,MAAM0B,6BACJpB,gBACAqB,MACAC,aACAC,QACA;IAEJ;AACF"}
|