@sanity/cli 7.2.2 → 7.3.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.
Files changed (160) hide show
  1. package/bin/run.js +3 -12
  2. package/dist/actions/auth/authServer.js +37 -20
  3. package/dist/actions/auth/authServer.js.map +1 -1
  4. package/dist/actions/backup/assertDatasetExist.js +3 -3
  5. package/dist/actions/backup/assertDatasetExist.js.map +1 -1
  6. package/dist/actions/build/buildApp.js +15 -5
  7. package/dist/actions/build/buildApp.js.map +1 -1
  8. package/dist/actions/build/buildStaticFiles.js +57 -5
  9. package/dist/actions/build/buildStaticFiles.js.map +1 -1
  10. package/dist/actions/build/buildStudio.js +13 -5
  11. package/dist/actions/build/buildStudio.js.map +1 -1
  12. package/dist/actions/build/handlePrereleaseVersions.js +2 -2
  13. package/dist/actions/build/handlePrereleaseVersions.js.map +1 -1
  14. package/dist/actions/dataset/resolveDataset.js +2 -2
  15. package/dist/actions/dataset/resolveDataset.js.map +1 -1
  16. package/dist/actions/deploy/deployApp.js +43 -5
  17. package/dist/actions/deploy/deployApp.js.map +1 -1
  18. package/dist/actions/deploy/deployStudio.js +14 -2
  19. package/dist/actions/deploy/deployStudio.js.map +1 -1
  20. package/dist/actions/deploy/viewDeployment.js +32 -0
  21. package/dist/actions/deploy/viewDeployment.js.map +1 -0
  22. package/dist/actions/dev/devAction.js +219 -4
  23. package/dist/actions/dev/devAction.js.map +1 -1
  24. package/dist/actions/dev/registration/deriveInterfaces.js +46 -0
  25. package/dist/actions/dev/registration/deriveInterfaces.js.map +1 -0
  26. package/dist/actions/dev/registration/extractDevServerManifest.js +30 -0
  27. package/dist/actions/dev/registration/extractDevServerManifest.js.map +1 -0
  28. package/dist/actions/dev/registration/interfaceSetId.js +41 -0
  29. package/dist/actions/dev/registration/interfaceSetId.js.map +1 -0
  30. package/dist/actions/dev/registration/startDevManifestWatcher.js +104 -0
  31. package/dist/actions/dev/registration/startDevManifestWatcher.js.map +1 -0
  32. package/dist/actions/dev/registration/startDevServerRegistration.js +121 -0
  33. package/dist/actions/dev/registration/startDevServerRegistration.js.map +1 -0
  34. package/dist/actions/dev/servers/getDashboardAppUrl.js.map +1 -0
  35. package/dist/actions/dev/servers/getDevServerConfig.js +45 -0
  36. package/dist/actions/dev/servers/getDevServerConfig.js.map +1 -0
  37. package/dist/actions/dev/servers/startAppDevServer.js +78 -0
  38. package/dist/actions/dev/servers/startAppDevServer.js.map +1 -0
  39. package/dist/actions/dev/{startStudioDevServer.js → servers/startStudioDevServer.js} +20 -16
  40. package/dist/actions/dev/servers/startStudioDevServer.js.map +1 -0
  41. package/dist/actions/dev/types.js +7 -1
  42. package/dist/actions/dev/types.js.map +1 -1
  43. package/dist/actions/dev/workbench/startWorkbenchDevServer.js +276 -0
  44. package/dist/actions/dev/workbench/startWorkbenchDevServer.js.map +1 -0
  45. package/dist/actions/dev/workbench/writeWorkbenchRuntime.js +66 -0
  46. package/dist/actions/dev/workbench/writeWorkbenchRuntime.js.map +1 -0
  47. package/dist/actions/init/bootstrapLocalTemplate.js +15 -3
  48. package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -1
  49. package/dist/actions/init/bootstrapTemplate.js +3 -2
  50. package/dist/actions/init/bootstrapTemplate.js.map +1 -1
  51. package/dist/actions/init/createAppCliConfig.js +5 -2
  52. package/dist/actions/init/createAppCliConfig.js.map +1 -1
  53. package/dist/actions/init/createCliConfig.js +5 -3
  54. package/dist/actions/init/createCliConfig.js.map +1 -1
  55. package/dist/actions/init/createStudioConfig.js.map +1 -1
  56. package/dist/actions/init/initAction.js +11 -4
  57. package/dist/actions/init/initAction.js.map +1 -1
  58. package/dist/actions/init/initApp.js +2 -1
  59. package/dist/actions/init/initApp.js.map +1 -1
  60. package/dist/actions/init/initStudio.js +2 -1
  61. package/dist/actions/init/initStudio.js.map +1 -1
  62. package/dist/actions/init/scaffoldTemplate.js +3 -2
  63. package/dist/actions/init/scaffoldTemplate.js.map +1 -1
  64. package/dist/actions/init/templates/pageBuilder.js +1 -1
  65. package/dist/actions/init/templates/pageBuilder.js.map +1 -1
  66. package/dist/actions/init/types.js +1 -0
  67. package/dist/actions/init/types.js.map +1 -1
  68. package/dist/actions/manifest/{extractAppManifest.js → extractCoreAppManifest.js} +30 -11
  69. package/dist/actions/manifest/extractCoreAppManifest.js.map +1 -0
  70. package/dist/actions/manifest/extractManifest.js +7 -7
  71. package/dist/actions/manifest/extractManifest.js.map +1 -1
  72. package/dist/actions/manifest/iconResolver.js +2 -3
  73. package/dist/actions/manifest/iconResolver.js.map +1 -1
  74. package/dist/actions/manifest/sanitizeIcon.js +13 -0
  75. package/dist/actions/manifest/sanitizeIcon.js.map +1 -0
  76. package/dist/actions/manifest/types.js +4 -9
  77. package/dist/actions/manifest/types.js.map +1 -1
  78. package/dist/actions/manifest/writeManifestFile.js +1 -1
  79. package/dist/actions/manifest/writeManifestFile.js.map +1 -1
  80. package/dist/actions/mcp/editorConfigs.js +26 -2
  81. package/dist/actions/mcp/editorConfigs.js.map +1 -1
  82. package/dist/actions/mcp/setupMCP.js +24 -25
  83. package/dist/actions/mcp/setupMCP.js.map +1 -1
  84. package/dist/actions/mcp/types.js.map +1 -1
  85. package/dist/actions/skills/configureSkills.js +49 -0
  86. package/dist/actions/skills/configureSkills.js.map +1 -0
  87. package/dist/actions/skills/readSkillState.js +40 -5
  88. package/dist/actions/skills/readSkillState.js.map +1 -1
  89. package/dist/actions/skills/setupSkills.js +47 -6
  90. package/dist/actions/skills/setupSkills.js.map +1 -1
  91. package/dist/actions/skills/skillCandidates.js +40 -0
  92. package/dist/actions/skills/skillCandidates.js.map +1 -0
  93. package/dist/actions/telemetry/telemetryDisclosure.js +2 -3
  94. package/dist/actions/telemetry/telemetryDisclosure.js.map +1 -1
  95. package/dist/actions/tokens/validateRole.js +3 -3
  96. package/dist/actions/tokens/validateRole.js.map +1 -1
  97. package/dist/commands/backups/disable.js +1 -1
  98. package/dist/commands/backups/disable.js.map +1 -1
  99. package/dist/commands/backups/download.js +1 -1
  100. package/dist/commands/backups/download.js.map +1 -1
  101. package/dist/commands/backups/enable.js +1 -1
  102. package/dist/commands/backups/enable.js.map +1 -1
  103. package/dist/commands/backups/list.js +1 -1
  104. package/dist/commands/backups/list.js.map +1 -1
  105. package/dist/commands/datasets/embeddings/disable.js +1 -0
  106. package/dist/commands/datasets/embeddings/disable.js.map +1 -1
  107. package/dist/commands/datasets/embeddings/enable.js +1 -0
  108. package/dist/commands/datasets/embeddings/enable.js.map +1 -1
  109. package/dist/commands/datasets/embeddings/status.js +1 -0
  110. package/dist/commands/datasets/embeddings/status.js.map +1 -1
  111. package/dist/commands/dev.js +11 -1
  112. package/dist/commands/dev.js.map +1 -1
  113. package/dist/commands/init.js +7 -0
  114. package/dist/commands/init.js.map +1 -1
  115. package/dist/commands/manifest/extract.js +7 -2
  116. package/dist/commands/manifest/extract.js.map +1 -1
  117. package/dist/commands/mcp/configure.js +1 -0
  118. package/dist/commands/mcp/configure.js.map +1 -1
  119. package/dist/commands/skills/install.js +40 -0
  120. package/dist/commands/skills/install.js.map +1 -0
  121. package/dist/commands/tokens/add.js +1 -1
  122. package/dist/commands/tokens/add.js.map +1 -1
  123. package/dist/exports/index.d.ts +6 -0
  124. package/dist/exports/index.js +8 -0
  125. package/dist/exports/index.js.map +1 -1
  126. package/dist/exports/runtime.d.ts +41 -0
  127. package/dist/exports/runtime.js +13 -0
  128. package/dist/exports/runtime.js.map +1 -0
  129. package/dist/hooks/prerun/setupTelemetry.js +3 -1
  130. package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
  131. package/dist/server/devServer.js +8 -3
  132. package/dist/server/devServer.js.map +1 -1
  133. package/dist/services/documents.js +0 -1
  134. package/dist/services/documents.js.map +1 -1
  135. package/dist/telemetry/skills.telemetry.js +8 -0
  136. package/dist/telemetry/skills.telemetry.js.map +1 -0
  137. package/dist/util/compareDependencyVersions.js +1 -1
  138. package/dist/util/compareDependencyVersions.js.map +1 -1
  139. package/dist/util/determineIsApp.js +12 -1
  140. package/dist/util/determineIsApp.js.map +1 -1
  141. package/dist/util/getSharedServerConfig.js +2 -1
  142. package/dist/util/getSharedServerConfig.js.map +1 -1
  143. package/dist/util/resolveReactStrictMode.js +11 -0
  144. package/dist/util/resolveReactStrictMode.js.map +1 -0
  145. package/oclif.config.js +2 -1
  146. package/oclif.manifest.json +119 -86
  147. package/package.json +27 -18
  148. package/templates/page-builder/schemaTypes/index.js +1 -1
  149. package/dist/actions/build/checkRequiredDependencies.js +0 -124
  150. package/dist/actions/build/checkRequiredDependencies.js.map +0 -1
  151. package/dist/actions/build/getAutoUpdatesImportMap.js +0 -66
  152. package/dist/actions/build/getAutoUpdatesImportMap.js.map +0 -1
  153. package/dist/actions/dev/getDashboardAppUrl.js.map +0 -1
  154. package/dist/actions/dev/getDevServerConfig.js +0 -32
  155. package/dist/actions/dev/getDevServerConfig.js.map +0 -1
  156. package/dist/actions/dev/startAppDevServer.js +0 -59
  157. package/dist/actions/dev/startAppDevServer.js.map +0 -1
  158. package/dist/actions/dev/startStudioDevServer.js.map +0 -1
  159. package/dist/actions/manifest/extractAppManifest.js.map +0 -1
  160. /package/dist/actions/dev/{getDashboardAppUrl.js → servers/getDashboardAppUrl.js} +0 -0
@@ -1,66 +0,0 @@
1
- const MODULES_HOST = process.env.SANITY_MODULES_HOST || (process.env.SANITY_INTERNAL_ENV === 'staging' ? 'https://sanity-cdn.work' : 'https://sanity-cdn.com');
2
- function currentUnixTime() {
3
- return Math.floor(Date.now() / 1000);
4
- }
5
- /**
6
- * @internal
7
- */ export function getAutoUpdatesImportMap(packages, options = {}) {
8
- return Object.fromEntries(packages.flatMap((pkg)=>getAppAutoUpdateImportMapForPackage(pkg, options)));
9
- }
10
- /**
11
- * @internal
12
- */ function getAppAutoUpdateImportMapForPackage(pkg, options = {}) {
13
- const moduleUrl = getModuleUrl(pkg, options);
14
- return [
15
- [
16
- pkg.name,
17
- moduleUrl
18
- ],
19
- [
20
- `${pkg.name}/`,
21
- `${moduleUrl}/`
22
- ]
23
- ];
24
- }
25
- /**
26
- * @internal
27
- */ export function getModuleUrl(pkg, options = {}) {
28
- const { timestamp = currentUnixTime() } = options;
29
- return options.appId ? getByAppModuleUrl(pkg, {
30
- appId: options.appId,
31
- baseUrl: options.baseUrl,
32
- timestamp
33
- }) : getLegacyModuleUrl(pkg, {
34
- baseUrl: options.baseUrl,
35
- timestamp
36
- });
37
- }
38
- function getLegacyModuleUrl(pkg, options) {
39
- const encodedMinVer = encodeURIComponent(`^${pkg.version}`);
40
- return `${options.baseUrl || MODULES_HOST}/v1/modules/${rewriteScopedPackage(pkg.name)}/default/${encodedMinVer}/t${options.timestamp}`;
41
- }
42
- function getByAppModuleUrl(pkg, options) {
43
- const encodedMinVer = encodeURIComponent(`^${pkg.version}`);
44
- return `${options.baseUrl || MODULES_HOST}/v1/modules/by-app/${options.appId}/t${options.timestamp}/${encodedMinVer}/${rewriteScopedPackage(pkg.name)}`;
45
- }
46
- /**
47
- * replaces '/' with '__' similar to how eg `@types/scope__pkg` are rewritten
48
- * scoped packages are stored this way both in the manifest and in the cloud storage bucket
49
- */ function rewriteScopedPackage(pkgName) {
50
- if (!pkgName.includes('@')) {
51
- return pkgName;
52
- }
53
- const [scope, ...pkg] = pkgName.split('/');
54
- return `${scope}__${pkg.join('')}`;
55
- }
56
- /**
57
- * Generate CDN CSS URLs for auto-updated packages.
58
- * Uses the same URL pattern as JS module URLs so the module server
59
- * resolves CSS and JS to the same version.
60
- *
61
- * @internal
62
- */ export function getAutoUpdatesCssUrls(packages, options = {}) {
63
- return packages.filter((pkg)=>Boolean(pkg.cssFile)).map((pkg)=>`${getModuleUrl(pkg, options)}/${pkg.cssFile}`);
64
- }
65
-
66
- //# sourceMappingURL=getAutoUpdatesImportMap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/actions/build/getAutoUpdatesImportMap.ts"],"sourcesContent":["const MODULES_HOST =\n process.env.SANITY_MODULES_HOST ||\n (process.env.SANITY_INTERNAL_ENV === 'staging'\n ? 'https://sanity-cdn.work'\n : 'https://sanity-cdn.com')\n\nfunction currentUnixTime(): number {\n return Math.floor(Date.now() / 1000)\n}\n\ntype Package = {name: string; version: string}\n/**\n * @internal\n */\nexport function getAutoUpdatesImportMap<const Pkg extends Package>(\n packages: Pkg[],\n options: {appId?: string; baseUrl?: string; timestamp?: number} = {},\n) {\n return Object.fromEntries(\n packages.flatMap((pkg) => getAppAutoUpdateImportMapForPackage(pkg, options)),\n ) as {[K in `${Pkg['name']}/` | Pkg['name']]: string}\n}\n\n/**\n * @internal\n */\nfunction getAppAutoUpdateImportMapForPackage<const Pkg extends Package>(\n pkg: Pkg,\n options: {appId?: string; baseUrl?: string; timestamp?: number} = {},\n): [[Pkg['name'], string], [`${Pkg['name']}/`, string]] {\n const moduleUrl = getModuleUrl(pkg, options)\n\n return [\n [pkg.name, moduleUrl],\n [`${pkg.name}/`, `${moduleUrl}/`],\n ]\n}\n\n/**\n * @internal\n */\nexport function getModuleUrl(\n pkg: Package,\n options: {appId?: string; baseUrl?: string; timestamp?: number} = {},\n) {\n const {timestamp = currentUnixTime()} = options\n return options.appId\n ? getByAppModuleUrl(pkg, {appId: options.appId, baseUrl: options.baseUrl, timestamp})\n : getLegacyModuleUrl(pkg, {baseUrl: options.baseUrl, timestamp})\n}\n\nfunction getLegacyModuleUrl(pkg: Package, options: {baseUrl?: string; timestamp: number}) {\n const encodedMinVer = encodeURIComponent(`^${pkg.version}`)\n return `${options.baseUrl || MODULES_HOST}/v1/modules/${rewriteScopedPackage(pkg.name)}/default/${encodedMinVer}/t${options.timestamp}`\n}\n\nfunction getByAppModuleUrl(\n pkg: Package,\n options: {appId: string; baseUrl?: string; timestamp: number},\n) {\n const encodedMinVer = encodeURIComponent(`^${pkg.version}`)\n return `${options.baseUrl || MODULES_HOST}/v1/modules/by-app/${options.appId}/t${options.timestamp}/${encodedMinVer}/${rewriteScopedPackage(pkg.name)}`\n}\n\n/**\n * replaces '/' with '__' similar to how eg `@types/scope__pkg` are rewritten\n * scoped packages are stored this way both in the manifest and in the cloud storage bucket\n */\nfunction rewriteScopedPackage(pkgName: string) {\n if (!pkgName.includes('@')) {\n return pkgName\n }\n const [scope, ...pkg] = pkgName.split('/')\n return `${scope}__${pkg.join('')}`\n}\n\ntype PackageWithCss = Package & {cssFile?: string}\n\n/**\n * Generate CDN CSS URLs for auto-updated packages.\n * Uses the same URL pattern as JS module URLs so the module server\n * resolves CSS and JS to the same version.\n *\n * @internal\n */\nexport function getAutoUpdatesCssUrls<const Pkg extends PackageWithCss>(\n packages: Pkg[],\n options: {appId?: string; baseUrl?: string; timestamp?: number} = {},\n): string[] {\n return packages\n .filter((pkg) => Boolean(pkg.cssFile))\n .map((pkg) => `${getModuleUrl(pkg, options)}/${pkg.cssFile}`)\n}\n"],"names":["MODULES_HOST","process","env","SANITY_MODULES_HOST","SANITY_INTERNAL_ENV","currentUnixTime","Math","floor","Date","now","getAutoUpdatesImportMap","packages","options","Object","fromEntries","flatMap","pkg","getAppAutoUpdateImportMapForPackage","moduleUrl","getModuleUrl","name","timestamp","appId","getByAppModuleUrl","baseUrl","getLegacyModuleUrl","encodedMinVer","encodeURIComponent","version","rewriteScopedPackage","pkgName","includes","scope","split","join","getAutoUpdatesCssUrls","filter","Boolean","cssFile","map"],"mappings":"AAAA,MAAMA,eACJC,QAAQC,GAAG,CAACC,mBAAmB,IAC9BF,CAAAA,QAAQC,GAAG,CAACE,mBAAmB,KAAK,YACjC,4BACA,wBAAuB;AAE7B,SAASC;IACP,OAAOC,KAAKC,KAAK,CAACC,KAAKC,GAAG,KAAK;AACjC;AAGA;;CAEC,GACD,OAAO,SAASC,wBACdC,QAAe,EACfC,UAAkE,CAAC,CAAC;IAEpE,OAAOC,OAAOC,WAAW,CACvBH,SAASI,OAAO,CAAC,CAACC,MAAQC,oCAAoCD,KAAKJ;AAEvE;AAEA;;CAEC,GACD,SAASK,oCACPD,GAAQ,EACRJ,UAAkE,CAAC,CAAC;IAEpE,MAAMM,YAAYC,aAAaH,KAAKJ;IAEpC,OAAO;QACL;YAACI,IAAII,IAAI;YAAEF;SAAU;QACrB;YAAC,GAAGF,IAAII,IAAI,CAAC,CAAC,CAAC;YAAE,GAAGF,UAAU,CAAC,CAAC;SAAC;KAClC;AACH;AAEA;;CAEC,GACD,OAAO,SAASC,aACdH,GAAY,EACZJ,UAAkE,CAAC,CAAC;IAEpE,MAAM,EAACS,YAAYhB,iBAAiB,EAAC,GAAGO;IACxC,OAAOA,QAAQU,KAAK,GAChBC,kBAAkBP,KAAK;QAACM,OAAOV,QAAQU,KAAK;QAAEE,SAASZ,QAAQY,OAAO;QAAEH;IAAS,KACjFI,mBAAmBT,KAAK;QAACQ,SAASZ,QAAQY,OAAO;QAAEH;IAAS;AAClE;AAEA,SAASI,mBAAmBT,GAAY,EAAEJ,OAA8C;IACtF,MAAMc,gBAAgBC,mBAAmB,CAAC,CAAC,EAAEX,IAAIY,OAAO,EAAE;IAC1D,OAAO,GAAGhB,QAAQY,OAAO,IAAIxB,aAAa,YAAY,EAAE6B,qBAAqBb,IAAII,IAAI,EAAE,SAAS,EAAEM,cAAc,EAAE,EAAEd,QAAQS,SAAS,EAAE;AACzI;AAEA,SAASE,kBACPP,GAAY,EACZJ,OAA6D;IAE7D,MAAMc,gBAAgBC,mBAAmB,CAAC,CAAC,EAAEX,IAAIY,OAAO,EAAE;IAC1D,OAAO,GAAGhB,QAAQY,OAAO,IAAIxB,aAAa,mBAAmB,EAAEY,QAAQU,KAAK,CAAC,EAAE,EAAEV,QAAQS,SAAS,CAAC,CAAC,EAAEK,cAAc,CAAC,EAAEG,qBAAqBb,IAAII,IAAI,GAAG;AACzJ;AAEA;;;CAGC,GACD,SAASS,qBAAqBC,OAAe;IAC3C,IAAI,CAACA,QAAQC,QAAQ,CAAC,MAAM;QAC1B,OAAOD;IACT;IACA,MAAM,CAACE,OAAO,GAAGhB,IAAI,GAAGc,QAAQG,KAAK,CAAC;IACtC,OAAO,GAAGD,MAAM,EAAE,EAAEhB,IAAIkB,IAAI,CAAC,KAAK;AACpC;AAIA;;;;;;CAMC,GACD,OAAO,SAASC,sBACdxB,QAAe,EACfC,UAAkE,CAAC,CAAC;IAEpE,OAAOD,SACJyB,MAAM,CAAC,CAACpB,MAAQqB,QAAQrB,IAAIsB,OAAO,GACnCC,GAAG,CAAC,CAACvB,MAAQ,GAAGG,aAAaH,KAAKJ,SAAS,CAAC,EAAEI,IAAIsB,OAAO,EAAE;AAChE"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/actions/dev/getDashboardAppUrl.ts"],"sourcesContent":["import {getSanityUrl, subdebug} from '@sanity/cli-core'\n\nconst debug = subdebug('dev:getDashboardAppURL')\n\nconst DEFAULT_TIMEOUT = 5000\n\nconst getDefaultDashboardURL = ({\n organizationId,\n url,\n}: {\n organizationId: string\n url: string\n}): string => {\n return getSanityUrl(\n `/@${organizationId}?${new URLSearchParams({\n dev: url,\n }).toString()}`,\n )\n}\n\n/**\n * Gets the dashboard URL from API or uses the default dashboard URL\n */\nexport const getDashboardAppURL = async ({\n httpHost = 'localhost',\n httpPort = 3333,\n organizationId,\n}: {\n httpHost?: string\n httpPort?: number\n organizationId: string\n}): Promise<string> => {\n const url = `http://${httpHost}:${httpPort}`\n\n const abortController = new AbortController()\n // Wait for 5 seconds before aborting the request\n const timer = setTimeout(() => abortController.abort(), DEFAULT_TIMEOUT)\n try {\n const queryParams = new URLSearchParams({\n organizationId,\n url,\n })\n\n const res = await globalThis.fetch(\n getSanityUrl(`/api/dashboard/mode/development/resolve-url?${queryParams.toString()}`),\n {\n signal: abortController.signal,\n },\n )\n\n if (!res.ok) {\n debug(`Failed to fetch dashboard URL: ${res.statusText}`)\n return getDefaultDashboardURL({organizationId, url})\n }\n\n const body = await res.json()\n // <dashboard-app-url>/<orgniazationId>?dev=<dev-server-url>\n return body?.url ?? getDefaultDashboardURL({organizationId, url})\n } catch (err) {\n debug(`Failed to fetch dashboard URL: ${err instanceof Error ? err.message : String(err)}`)\n return getDefaultDashboardURL({organizationId, url})\n } finally {\n clearTimeout(timer)\n }\n}\n"],"names":["getSanityUrl","subdebug","debug","DEFAULT_TIMEOUT","getDefaultDashboardURL","organizationId","url","URLSearchParams","dev","toString","getDashboardAppURL","httpHost","httpPort","abortController","AbortController","timer","setTimeout","abort","queryParams","res","globalThis","fetch","signal","ok","statusText","body","json","err","Error","message","String","clearTimeout"],"mappings":"AAAA,SAAQA,YAAY,EAAEC,QAAQ,QAAO,mBAAkB;AAEvD,MAAMC,QAAQD,SAAS;AAEvB,MAAME,kBAAkB;AAExB,MAAMC,yBAAyB,CAAC,EAC9BC,cAAc,EACdC,GAAG,EAIJ;IACC,OAAON,aACL,CAAC,EAAE,EAAEK,eAAe,CAAC,EAAE,IAAIE,gBAAgB;QACzCC,KAAKF;IACP,GAAGG,QAAQ,IAAI;AAEnB;AAEA;;CAEC,GACD,OAAO,MAAMC,qBAAqB,OAAO,EACvCC,WAAW,WAAW,EACtBC,WAAW,IAAI,EACfP,cAAc,EAKf;IACC,MAAMC,MAAM,CAAC,OAAO,EAAEK,SAAS,CAAC,EAAEC,UAAU;IAE5C,MAAMC,kBAAkB,IAAIC;IAC5B,iDAAiD;IACjD,MAAMC,QAAQC,WAAW,IAAMH,gBAAgBI,KAAK,IAAId;IACxD,IAAI;QACF,MAAMe,cAAc,IAAIX,gBAAgB;YACtCF;YACAC;QACF;QAEA,MAAMa,MAAM,MAAMC,WAAWC,KAAK,CAChCrB,aAAa,CAAC,4CAA4C,EAAEkB,YAAYT,QAAQ,IAAI,GACpF;YACEa,QAAQT,gBAAgBS,MAAM;QAChC;QAGF,IAAI,CAACH,IAAII,EAAE,EAAE;YACXrB,MAAM,CAAC,+BAA+B,EAAEiB,IAAIK,UAAU,EAAE;YACxD,OAAOpB,uBAAuB;gBAACC;gBAAgBC;YAAG;QACpD;QAEA,MAAMmB,OAAO,MAAMN,IAAIO,IAAI;QAC3B,4DAA4D;QAC5D,OAAOD,MAAMnB,OAAOF,uBAAuB;YAACC;YAAgBC;QAAG;IACjE,EAAE,OAAOqB,KAAK;QACZzB,MAAM,CAAC,+BAA+B,EAAEyB,eAAeC,QAAQD,IAAIE,OAAO,GAAGC,OAAOH,MAAM;QAC1F,OAAOvB,uBAAuB;YAACC;YAAgBC;QAAG;IACpD,SAAU;QACRyB,aAAahB;IACf;AACF,EAAC"}
@@ -1,32 +0,0 @@
1
- import path from 'node:path';
2
- import { getSanityEnvVar } from '@sanity/cli-core';
3
- import { spinner } from '@sanity/cli-core/ux';
4
- import { getSharedServerConfig } from '../../util/getSharedServerConfig.js';
5
- export function getDevServerConfig({ cliConfig, flags, output, workDir }) {
6
- const configSpinner = spinner('Checking configuration files...');
7
- const baseConfig = getSharedServerConfig({
8
- cliConfig,
9
- flags: {
10
- host: flags.host,
11
- port: flags.port
12
- },
13
- workDir
14
- });
15
- configSpinner.succeed();
16
- const isApp = cliConfig && 'app' in cliConfig;
17
- const env = process.env;
18
- const reactStrictMode = env.SANITY_STUDIO_REACT_STRICT_MODE ? env.SANITY_STUDIO_REACT_STRICT_MODE === 'true' : cliConfig?.reactStrictMode;
19
- const envBasePath = getSanityEnvVar('BASEPATH', isApp ?? false);
20
- if (envBasePath && cliConfig?.project?.basePath) {
21
- output.warn(`Overriding configured base path (${cliConfig.project.basePath}) with value from environment variable (${envBasePath})`);
22
- }
23
- return {
24
- ...baseConfig,
25
- reactCompiler: cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,
26
- reactStrictMode,
27
- staticPath: path.join(workDir, 'static'),
28
- typegen: cliConfig?.typegen
29
- };
30
- }
31
-
32
- //# sourceMappingURL=getDevServerConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/actions/dev/getDevServerConfig.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {type CliConfig, getSanityEnvVar, type Output} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\n\nimport {type DevServerOptions} from '../../server/devServer.js'\nimport {getSharedServerConfig} from '../../util/getSharedServerConfig.js'\nimport {type DevFlags} from './types.js'\n\nexport function getDevServerConfig({\n cliConfig,\n flags,\n output,\n workDir,\n}: {\n cliConfig?: CliConfig\n flags: DevFlags\n output: Output\n workDir: string\n}): Omit<DevServerOptions, 'spinner'> {\n const configSpinner = spinner('Checking configuration files...')\n\n const baseConfig = getSharedServerConfig({\n cliConfig,\n flags: {\n host: flags.host,\n port: flags.port,\n },\n workDir,\n })\n\n configSpinner.succeed()\n\n const isApp = cliConfig && 'app' in cliConfig\n const env = process.env\n const reactStrictMode = env.SANITY_STUDIO_REACT_STRICT_MODE\n ? env.SANITY_STUDIO_REACT_STRICT_MODE === 'true'\n : cliConfig?.reactStrictMode\n\n const envBasePath = getSanityEnvVar('BASEPATH', isApp ?? false)\n if (envBasePath && cliConfig?.project?.basePath) {\n output.warn(\n `Overriding configured base path (${cliConfig.project.basePath}) with value from environment variable (${envBasePath})`,\n )\n }\n\n return {\n ...baseConfig,\n reactCompiler: cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,\n reactStrictMode,\n staticPath: path.join(workDir, 'static'),\n typegen: cliConfig?.typegen,\n }\n}\n"],"names":["path","getSanityEnvVar","spinner","getSharedServerConfig","getDevServerConfig","cliConfig","flags","output","workDir","configSpinner","baseConfig","host","port","succeed","isApp","env","process","reactStrictMode","SANITY_STUDIO_REACT_STRICT_MODE","envBasePath","project","basePath","warn","reactCompiler","undefined","staticPath","join","typegen"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAE5B,SAAwBC,eAAe,QAAoB,mBAAkB;AAC7E,SAAQC,OAAO,QAAO,sBAAqB;AAG3C,SAAQC,qBAAqB,QAAO,sCAAqC;AAGzE,OAAO,SAASC,mBAAmB,EACjCC,SAAS,EACTC,KAAK,EACLC,MAAM,EACNC,OAAO,EAMR;IACC,MAAMC,gBAAgBP,QAAQ;IAE9B,MAAMQ,aAAaP,sBAAsB;QACvCE;QACAC,OAAO;YACLK,MAAML,MAAMK,IAAI;YAChBC,MAAMN,MAAMM,IAAI;QAClB;QACAJ;IACF;IAEAC,cAAcI,OAAO;IAErB,MAAMC,QAAQT,aAAa,SAASA;IACpC,MAAMU,MAAMC,QAAQD,GAAG;IACvB,MAAME,kBAAkBF,IAAIG,+BAA+B,GACvDH,IAAIG,+BAA+B,KAAK,SACxCb,WAAWY;IAEf,MAAME,cAAclB,gBAAgB,YAAYa,SAAS;IACzD,IAAIK,eAAed,WAAWe,SAASC,UAAU;QAC/Cd,OAAOe,IAAI,CACT,CAAC,iCAAiC,EAAEjB,UAAUe,OAAO,CAACC,QAAQ,CAAC,wCAAwC,EAAEF,YAAY,CAAC,CAAC;IAE3H;IAEA,OAAO;QACL,GAAGT,UAAU;QACba,eAAelB,aAAa,mBAAmBA,YAAYA,UAAUkB,aAAa,GAAGC;QACrFP;QACAQ,YAAYzB,KAAK0B,IAAI,CAAClB,SAAS;QAC/BmB,SAAStB,WAAWsB;IACtB;AACF"}
@@ -1,59 +0,0 @@
1
- import { styleText } from 'node:util';
2
- import { startDevServer } from '../../server/devServer.js';
3
- import { gracefulServerDeath } from '../../server/gracefulServerDeath.js';
4
- import { devDebug } from './devDebug.js';
5
- import { getDashboardAppURL } from './getDashboardAppUrl.js';
6
- import { getDevServerConfig } from './getDevServerConfig.js';
7
- export async function startAppDevServer(options) {
8
- const { cliConfig, flags, output, workDir } = options;
9
- if (!flags['load-in-dashboard']) {
10
- output.warn(`Apps cannot run without the Sanity dashboard`);
11
- output.warn(`Starting dev server with the --load-in-dashboard flag set to true`);
12
- }
13
- let organizationId;
14
- if (cliConfig && 'app' in cliConfig && cliConfig.app?.organizationId) {
15
- organizationId = cliConfig.app.organizationId;
16
- }
17
- if (!organizationId) {
18
- output.error(`Apps require an organization ID (orgId) specified in your sanity.cli.ts file`, {
19
- exit: 1
20
- });
21
- return {};
22
- }
23
- const config = getDevServerConfig({
24
- cliConfig,
25
- flags,
26
- output,
27
- workDir
28
- });
29
- try {
30
- output.log('Starting dev server');
31
- const appTitle = cliConfig && 'app' in cliConfig ? cliConfig.app?.title : undefined;
32
- const { close, server } = await startDevServer({
33
- ...config,
34
- appTitle,
35
- isApp: true
36
- });
37
- const { port } = server.config.server;
38
- const httpHost = config.httpHost || 'localhost';
39
- const dashboardAppUrl = await getDashboardAppURL({
40
- httpHost,
41
- httpPort: port,
42
- organizationId
43
- });
44
- output.log(`Dev server started on port ${port}`);
45
- output.log(`View your app in the Sanity dashboard here:`);
46
- output.log(styleText([
47
- 'blue',
48
- 'underline'
49
- ], dashboardAppUrl));
50
- return {
51
- close
52
- };
53
- } catch (err) {
54
- devDebug('Error starting app dev server', err);
55
- throw gracefulServerDeath('dev', config.httpHost, config.httpPort, err);
56
- }
57
- }
58
-
59
- //# sourceMappingURL=startAppDevServer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/actions/dev/startAppDevServer.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {startDevServer} from '../../server/devServer.js'\nimport {gracefulServerDeath} from '../../server/gracefulServerDeath.js'\nimport {devDebug} from './devDebug.js'\nimport {getDashboardAppURL} from './getDashboardAppUrl.js'\nimport {getDevServerConfig} from './getDevServerConfig.js'\nimport {type DevActionOptions} from './types.js'\n\nexport async function startAppDevServer(\n options: DevActionOptions,\n): Promise<{close?: () => Promise<void>}> {\n const {cliConfig, flags, output, workDir} = options\n\n if (!flags['load-in-dashboard']) {\n output.warn(`Apps cannot run without the Sanity dashboard`)\n output.warn(`Starting dev server with the --load-in-dashboard flag set to true`)\n }\n\n let organizationId: string | undefined\n if (cliConfig && 'app' in cliConfig && cliConfig.app?.organizationId) {\n organizationId = cliConfig.app.organizationId\n }\n\n if (!organizationId) {\n output.error(`Apps require an organization ID (orgId) specified in your sanity.cli.ts file`, {\n exit: 1,\n })\n return {}\n }\n\n const config = getDevServerConfig({cliConfig, flags, output, workDir})\n\n try {\n output.log('Starting dev server')\n\n const appTitle = cliConfig && 'app' in cliConfig ? cliConfig.app?.title : undefined\n const {close, server} = await startDevServer({...config, appTitle, isApp: true})\n\n const {port} = server.config.server\n const httpHost = config.httpHost || 'localhost'\n\n const dashboardAppUrl = await getDashboardAppURL({\n httpHost,\n httpPort: port,\n organizationId,\n })\n output.log(`Dev server started on port ${port}`)\n output.log(`View your app in the Sanity dashboard here:`)\n output.log(styleText(['blue', 'underline'], dashboardAppUrl))\n\n return {close}\n } catch (err) {\n devDebug('Error starting app dev server', err)\n throw gracefulServerDeath('dev', config.httpHost, config.httpPort, err)\n }\n}\n"],"names":["styleText","startDevServer","gracefulServerDeath","devDebug","getDashboardAppURL","getDevServerConfig","startAppDevServer","options","cliConfig","flags","output","workDir","warn","organizationId","app","error","exit","config","log","appTitle","title","undefined","close","server","isApp","port","httpHost","dashboardAppUrl","httpPort","err"],"mappings":"AAAA,SAAQA,SAAS,QAAO,YAAW;AAEnC,SAAQC,cAAc,QAAO,4BAA2B;AACxD,SAAQC,mBAAmB,QAAO,sCAAqC;AACvE,SAAQC,QAAQ,QAAO,gBAAe;AACtC,SAAQC,kBAAkB,QAAO,0BAAyB;AAC1D,SAAQC,kBAAkB,QAAO,0BAAyB;AAG1D,OAAO,eAAeC,kBACpBC,OAAyB;IAEzB,MAAM,EAACC,SAAS,EAAEC,KAAK,EAAEC,MAAM,EAAEC,OAAO,EAAC,GAAGJ;IAE5C,IAAI,CAACE,KAAK,CAAC,oBAAoB,EAAE;QAC/BC,OAAOE,IAAI,CAAC,CAAC,4CAA4C,CAAC;QAC1DF,OAAOE,IAAI,CAAC,CAAC,iEAAiE,CAAC;IACjF;IAEA,IAAIC;IACJ,IAAIL,aAAa,SAASA,aAAaA,UAAUM,GAAG,EAAED,gBAAgB;QACpEA,iBAAiBL,UAAUM,GAAG,CAACD,cAAc;IAC/C;IAEA,IAAI,CAACA,gBAAgB;QACnBH,OAAOK,KAAK,CAAC,CAAC,4EAA4E,CAAC,EAAE;YAC3FC,MAAM;QACR;QACA,OAAO,CAAC;IACV;IAEA,MAAMC,SAASZ,mBAAmB;QAACG;QAAWC;QAAOC;QAAQC;IAAO;IAEpE,IAAI;QACFD,OAAOQ,GAAG,CAAC;QAEX,MAAMC,WAAWX,aAAa,SAASA,YAAYA,UAAUM,GAAG,EAAEM,QAAQC;QAC1E,MAAM,EAACC,KAAK,EAAEC,MAAM,EAAC,GAAG,MAAMtB,eAAe;YAAC,GAAGgB,MAAM;YAAEE;YAAUK,OAAO;QAAI;QAE9E,MAAM,EAACC,IAAI,EAAC,GAAGF,OAAON,MAAM,CAACM,MAAM;QACnC,MAAMG,WAAWT,OAAOS,QAAQ,IAAI;QAEpC,MAAMC,kBAAkB,MAAMvB,mBAAmB;YAC/CsB;YACAE,UAAUH;YACVZ;QACF;QACAH,OAAOQ,GAAG,CAAC,CAAC,2BAA2B,EAAEO,MAAM;QAC/Cf,OAAOQ,GAAG,CAAC,CAAC,2CAA2C,CAAC;QACxDR,OAAOQ,GAAG,CAAClB,UAAU;YAAC;YAAQ;SAAY,EAAE2B;QAE5C,OAAO;YAACL;QAAK;IACf,EAAE,OAAOO,KAAK;QACZ1B,SAAS,iCAAiC0B;QAC1C,MAAM3B,oBAAoB,OAAOe,OAAOS,QAAQ,EAAET,OAAOW,QAAQ,EAAEC;IACrE;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/actions/dev/startStudioDevServer.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {checkStudioDependencyVersions} from '@sanity/cli-build/_internal/build'\nimport {getLocalPackageVersion, isInteractive} from '@sanity/cli-core'\nimport {confirm, logSymbols, spinner} from '@sanity/cli-core/ux'\nimport {parse as semverParse} from 'semver'\n\nimport {startDevServer} from '../../server/devServer.js'\nimport {gracefulServerDeath} from '../../server/gracefulServerDeath.js'\nimport {getProjectById} from '../../services/projects.js'\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.js'\nimport {getPackageManagerChoice} from '../../util/packageManager/packageManagerChoice.js'\nimport {upgradePackages} from '../../util/packageManager/upgradePackages.js'\nimport {checkRequiredDependencies} from '../build/checkRequiredDependencies.js'\nimport {shouldAutoUpdate} from '../build/shouldAutoUpdate.js'\nimport {devDebug} from './devDebug.js'\nimport {getDashboardAppURL} from './getDashboardAppUrl.js'\nimport {getDevServerConfig} from './getDevServerConfig.js'\nimport {type DevActionOptions} from './types.js'\n\nexport async function startStudioDevServer(\n options: DevActionOptions,\n): Promise<{close?: () => Promise<void>}> {\n const {cliConfig, flags, output, workDir} = options\n const projectId = cliConfig?.api?.projectId\n let organizationId: string | undefined\n\n const loadInDashboard = flags['load-in-dashboard']\n\n // Check studio dependency versions\n await checkStudioDependencyVersions(workDir, output)\n\n const {installedSanityVersion} = await checkRequiredDependencies(options)\n\n // Check if auto-updates are enabled\n const autoUpdatesEnabled = shouldAutoUpdate({cliConfig, flags, output})\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSanityVersion = semverParse(installedSanityVersion)?.version\n if (!cleanSanityVersion) {\n throw new Error(`Failed to parse installed Sanity version: ${installedSanityVersion}`)\n }\n\n const sanityDependencies = [\n {name: 'sanity', version: cleanSanityVersion},\n {name: '@sanity/vision', version: cleanSanityVersion},\n ]\n\n output.log(`${logSymbols.info} Running with auto-updates enabled`)\n\n // Check local versions against deployed versions\n let result: Awaited<ReturnType<typeof compareDependencyVersions>> | undefined\n\n const appId = getAppId(cliConfig)\n\n try {\n result = await compareDependencyVersions(sanityDependencies, workDir, {appId})\n } catch (err) {\n output.warn(`Failed to compare local versions against auto-updating versions: ${err}`)\n }\n\n if (result?.unresolvedPrerelease.length) {\n for (const mod of result.unresolvedPrerelease) {\n output.warn(\n `Your local version of ${mod.pkg} (${mod.version}) is a prerelease not available on the auto-updates CDN. The locally installed version will be used.`,\n )\n }\n }\n\n // mismatch between local and auto-updating dependencies\n if (result?.mismatched.length) {\n const message =\n `The following local package versions are different from the versions currently served at runtime.\\n` +\n `When using auto updates, we recommend that you run with the same versions locally as will be used when deploying.\\n\\n` +\n `${result.mismatched.map((mod) => ` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\\n')}\\n\\n`\n\n if (isInteractive()) {\n const shouldUpgrade = await confirm({\n default: true,\n message: styleText('yellow', `${message}Do you want to upgrade local versions?`),\n })\n if (shouldUpgrade) {\n await upgradePackages(\n {\n packageManager: (await getPackageManagerChoice(workDir, {interactive: false})).chosen,\n packages: result.mismatched.map((res) => [res.pkg, res.remote]),\n },\n {output, workDir},\n )\n }\n } else {\n // In this case we warn the user but we don't ask them if they want to upgrade because it's not interactive.\n output.log(styleText('yellow', message))\n }\n }\n }\n\n if (cliConfig?.schemaExtraction?.enabled) {\n output.log(`${logSymbols.info} Running dev server with schema extraction enabled`)\n }\n\n const config = getDevServerConfig({cliConfig, flags, output, workDir})\n\n if (loadInDashboard) {\n if (!projectId) {\n output.error('Project Id is required to load in dashboard', {exit: 1})\n }\n\n try {\n const project = await getProjectById(projectId!)\n organizationId = project.organizationId!\n } catch (error) {\n devDebug('Error getting organization id from project id', error)\n output.error('Failed to get organization id from project id', {exit: 1})\n }\n }\n\n try {\n const startTime = Date.now()\n const spin = spinner('Starting dev server').start()\n const {close, server} = await startDevServer(config)\n\n const {info: loggerInfo} = server.config.logger\n const {port} = server.config.server\n const httpHost = config.httpHost || 'localhost'\n\n if (loadInDashboard) {\n spin.succeed()\n\n output.log(`Dev server started on port ${port}`)\n output.log(`View your studio in the Sanity dashboard here:`)\n output.log(\n styleText(\n ['blue', 'underline'],\n await getDashboardAppURL({\n httpHost,\n httpPort: port,\n organizationId: organizationId!,\n }),\n ),\n )\n } else {\n const startupDuration = Date.now() - startTime\n const url = `http://${httpHost || 'localhost'}:${port}${config.basePath}`\n const appType = 'Sanity Studio'\n\n const viteVersion = await getLocalPackageVersion('vite', import.meta.url)\n spin.succeed()\n\n loggerInfo(\n `${appType} ` +\n `using ${styleText('cyan', `vite@${viteVersion}`)} ` +\n `ready in ${styleText('cyan', `${Math.ceil(startupDuration)}ms`)} ` +\n `and running at ${styleText('cyan', url)}`,\n )\n }\n\n return {close}\n } catch (err) {\n devDebug('Error starting studio dev server', err)\n throw gracefulServerDeath('dev', config.httpHost, config.httpPort, err)\n }\n}\n"],"names":["styleText","checkStudioDependencyVersions","getLocalPackageVersion","isInteractive","confirm","logSymbols","spinner","parse","semverParse","startDevServer","gracefulServerDeath","getProjectById","getAppId","compareDependencyVersions","getPackageManagerChoice","upgradePackages","checkRequiredDependencies","shouldAutoUpdate","devDebug","getDashboardAppURL","getDevServerConfig","startStudioDevServer","options","cliConfig","flags","output","workDir","projectId","api","organizationId","loadInDashboard","installedSanityVersion","autoUpdatesEnabled","cleanSanityVersion","version","Error","sanityDependencies","name","log","info","result","appId","err","warn","unresolvedPrerelease","length","mod","pkg","mismatched","message","map","installed","remote","join","shouldUpgrade","default","packageManager","interactive","chosen","packages","res","schemaExtraction","enabled","config","error","exit","project","startTime","Date","now","spin","start","close","server","loggerInfo","logger","port","httpHost","succeed","httpPort","startupDuration","url","basePath","appType","viteVersion","Math","ceil"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/actions/manifest/extractAppManifest.ts"],"sourcesContent":["import {readFile} from 'node:fs/promises'\nimport {relative, resolve} from 'node:path'\n\nimport {getCliConfig} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\n\nimport {getErrorMessage} from '../../util/getErrorMessage.js'\nimport {type CoreAppManifest, coreAppManifestSchema} from './types.js'\n\ninterface ExtractAppManifestOptions {\n workDir: string\n}\n\n/**\n * Resolves app.icon from config (a file path) to an SVG string for the manifest.\n * The manifest expects the SVG string inline, not a path.\n * Brett sanitizes SVGs so it's skipped here.\n */\nasync function readIconFromPath(workDir: string, iconPath: string): Promise<string> {\n const resolvedPath = resolve(workDir, iconPath)\n const pathRelativeToWorkDir = relative(workDir, resolvedPath)\n if (pathRelativeToWorkDir.startsWith('..')) {\n throw new Error(\n `Icon path \"${iconPath}\" resolves outside the project directory and is not allowed.`,\n )\n }\n\n let content: string\n try {\n content = await readFile(resolvedPath, 'utf8')\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n throw new Error(\n `Could not read icon file at \"${iconPath}\" (resolved: ${resolvedPath}): ${message}`,\n {cause: err},\n )\n }\n\n const trimmed = content.trim()\n if (!/<svg[\\s>]/i.test(trimmed)) {\n throw new Error(\n `Icon file at \"${iconPath}\" does not contain an SVG element. App manifest icons must be SVG files.`,\n )\n }\n\n return trimmed\n}\n\n/**\n *\n * This functions slightly differently from the studio manifest extraction function.\n * We don't need to parse very complicated information like schemas and tools.\n * The app icon in config is a file path (e.g. relative to project root); its content is read and inlined in the manifest.\n */\nexport async function extractAppManifest(\n options: ExtractAppManifestOptions,\n): Promise<CoreAppManifest | undefined> {\n const {workDir} = options\n const {app} = await getCliConfig(workDir)\n if (!app) {\n return undefined\n }\n\n const spin = spinner('Extracting manifest').start()\n\n try {\n let icon: string | undefined\n if (app.icon) {\n icon = await readIconFromPath(workDir, app.icon)\n }\n\n if (!icon && !app.title) {\n spin.succeed('Manifest creation skipped: no icon or title found in app configuration')\n return undefined\n }\n\n const manifest: CoreAppManifest = coreAppManifestSchema.parse({\n version: '1',\n ...(icon ? {icon} : {}),\n ...(app.title ? {title: app.title} : {}),\n })\n\n spin.succeed(`Extracted manifest`)\n\n return manifest\n } catch (err) {\n const message = getErrorMessage(err)\n spin.fail(message)\n throw err\n }\n}\n"],"names":["readFile","relative","resolve","getCliConfig","spinner","getErrorMessage","coreAppManifestSchema","readIconFromPath","workDir","iconPath","resolvedPath","pathRelativeToWorkDir","startsWith","Error","content","err","message","String","cause","trimmed","trim","test","extractAppManifest","options","app","undefined","spin","start","icon","title","succeed","manifest","parse","version","fail"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,mBAAkB;AACzC,SAAQC,QAAQ,EAAEC,OAAO,QAAO,YAAW;AAE3C,SAAQC,YAAY,QAAO,mBAAkB;AAC7C,SAAQC,OAAO,QAAO,sBAAqB;AAE3C,SAAQC,eAAe,QAAO,gCAA+B;AAC7D,SAA8BC,qBAAqB,QAAO,aAAY;AAMtE;;;;CAIC,GACD,eAAeC,iBAAiBC,OAAe,EAAEC,QAAgB;IAC/D,MAAMC,eAAeR,QAAQM,SAASC;IACtC,MAAME,wBAAwBV,SAASO,SAASE;IAChD,IAAIC,sBAAsBC,UAAU,CAAC,OAAO;QAC1C,MAAM,IAAIC,MACR,CAAC,WAAW,EAAEJ,SAAS,4DAA4D,CAAC;IAExF;IAEA,IAAIK;IACJ,IAAI;QACFA,UAAU,MAAMd,SAASU,cAAc;IACzC,EAAE,OAAOK,KAAK;QACZ,MAAMC,UAAUD,eAAeF,QAAQE,IAAIC,OAAO,GAAGC,OAAOF;QAC5D,MAAM,IAAIF,MACR,CAAC,6BAA6B,EAAEJ,SAAS,aAAa,EAAEC,aAAa,GAAG,EAAEM,SAAS,EACnF;YAACE,OAAOH;QAAG;IAEf;IAEA,MAAMI,UAAUL,QAAQM,IAAI;IAC5B,IAAI,CAAC,aAAaC,IAAI,CAACF,UAAU;QAC/B,MAAM,IAAIN,MACR,CAAC,cAAc,EAAEJ,SAAS,wEAAwE,CAAC;IAEvG;IAEA,OAAOU;AACT;AAEA;;;;;CAKC,GACD,OAAO,eAAeG,mBACpBC,OAAkC;IAElC,MAAM,EAACf,OAAO,EAAC,GAAGe;IAClB,MAAM,EAACC,GAAG,EAAC,GAAG,MAAMrB,aAAaK;IACjC,IAAI,CAACgB,KAAK;QACR,OAAOC;IACT;IAEA,MAAMC,OAAOtB,QAAQ,uBAAuBuB,KAAK;IAEjD,IAAI;QACF,IAAIC;QACJ,IAAIJ,IAAII,IAAI,EAAE;YACZA,OAAO,MAAMrB,iBAAiBC,SAASgB,IAAII,IAAI;QACjD;QAEA,IAAI,CAACA,QAAQ,CAACJ,IAAIK,KAAK,EAAE;YACvBH,KAAKI,OAAO,CAAC;YACb,OAAOL;QACT;QAEA,MAAMM,WAA4BzB,sBAAsB0B,KAAK,CAAC;YAC5DC,SAAS;YACT,GAAIL,OAAO;gBAACA;YAAI,IAAI,CAAC,CAAC;YACtB,GAAIJ,IAAIK,KAAK,GAAG;gBAACA,OAAOL,IAAIK,KAAK;YAAA,IAAI,CAAC,CAAC;QACzC;QAEAH,KAAKI,OAAO,CAAC,CAAC,kBAAkB,CAAC;QAEjC,OAAOC;IACT,EAAE,OAAOhB,KAAK;QACZ,MAAMC,UAAUX,gBAAgBU;QAChCW,KAAKQ,IAAI,CAAClB;QACV,MAAMD;IACR;AACF"}