@sanity/cli 5.9.0-next.8 → 6.0.0-alpha.11

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 (919) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3212 -2
  3. package/bin/run.cmd +3 -0
  4. package/bin/run.js +33 -0
  5. package/codemods/deskRename.js +115 -96
  6. package/codemods/partsTypeDirective.js +7 -7
  7. package/codemods/reactIconsV3.js +78 -51
  8. package/dist/SanityHelp.js +43 -0
  9. package/dist/SanityHelp.js.map +1 -0
  10. package/dist/actions/auth/authServer.js +153 -0
  11. package/dist/actions/auth/authServer.js.map +1 -0
  12. package/dist/actions/auth/getProviderName.js +15 -0
  13. package/dist/actions/auth/getProviderName.js.map +1 -0
  14. package/dist/actions/auth/login/getProvider.js +54 -0
  15. package/dist/actions/auth/login/getProvider.js.map +1 -0
  16. package/dist/actions/auth/login/getSSOProvider.js +30 -0
  17. package/dist/actions/auth/login/getSSOProvider.js.map +1 -0
  18. package/dist/actions/auth/login/login.js +101 -0
  19. package/dist/actions/auth/login/login.js.map +1 -0
  20. package/dist/actions/auth/login/promptProviders.js +23 -0
  21. package/dist/actions/auth/login/promptProviders.js.map +1 -0
  22. package/dist/actions/auth/login/samlProviderToLoginProvider.js +15 -0
  23. package/dist/actions/auth/login/samlProviderToLoginProvider.js.map +1 -0
  24. package/dist/actions/auth/types.js +7 -0
  25. package/dist/actions/auth/types.js.map +1 -0
  26. package/dist/actions/backup/archiveDir.js +43 -0
  27. package/dist/actions/backup/archiveDir.js.map +1 -0
  28. package/dist/actions/backup/assertDatasetExist.js +16 -0
  29. package/dist/actions/backup/assertDatasetExist.js.map +1 -0
  30. package/dist/actions/backup/backupDownloadDebug.js +4 -0
  31. package/dist/actions/backup/backupDownloadDebug.js.map +1 -0
  32. package/dist/actions/backup/cleanupTmpDir.js +19 -0
  33. package/dist/actions/backup/cleanupTmpDir.js.map +1 -0
  34. package/dist/actions/backup/constants.js +3 -0
  35. package/dist/actions/backup/constants.js.map +1 -0
  36. package/dist/actions/backup/downloadAsset.js +54 -0
  37. package/dist/actions/backup/downloadAsset.js.map +1 -0
  38. package/dist/actions/backup/downloadDocument.js +32 -0
  39. package/dist/actions/backup/downloadDocument.js.map +1 -0
  40. package/dist/actions/backup/fetchNextBackupPage.js +48 -0
  41. package/dist/actions/backup/fetchNextBackupPage.js.map +1 -0
  42. package/dist/actions/backup/progressSpinner.js +40 -0
  43. package/dist/actions/backup/progressSpinner.js.map +1 -0
  44. package/dist/actions/build/buildApp.js +159 -0
  45. package/dist/actions/build/buildApp.js.map +1 -0
  46. package/dist/actions/build/buildDebug.js +4 -0
  47. package/dist/actions/build/buildDebug.js.map +1 -0
  48. package/dist/actions/build/buildStaticFiles.js +82 -0
  49. package/dist/actions/build/buildStaticFiles.js.map +1 -0
  50. package/dist/actions/build/buildStudio.js +202 -0
  51. package/dist/actions/build/buildStudio.js.map +1 -0
  52. package/dist/actions/build/buildVendorDependencies.js +179 -0
  53. package/dist/actions/build/buildVendorDependencies.js.map +1 -0
  54. package/dist/actions/build/checkRequiredDependencies.js +122 -0
  55. package/dist/actions/build/checkRequiredDependencies.js.map +1 -0
  56. package/dist/actions/build/checkStudioDependencyVersions.js +154 -0
  57. package/dist/actions/build/checkStudioDependencyVersions.js.map +1 -0
  58. package/dist/actions/build/createExternalFromImportMap.js +11 -0
  59. package/dist/actions/build/createExternalFromImportMap.js.map +1 -0
  60. package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.js +13 -0
  61. package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.js.map +1 -0
  62. package/dist/actions/build/decorateIndexWithBridgeScript.js +17 -0
  63. package/dist/actions/build/decorateIndexWithBridgeScript.js.map +1 -0
  64. package/dist/actions/build/determineBasePath.js +20 -0
  65. package/dist/actions/build/determineBasePath.js.map +1 -0
  66. package/dist/actions/build/generateWebManifest.js +27 -0
  67. package/dist/actions/build/generateWebManifest.js.map +1 -0
  68. package/dist/actions/build/getAppEnvVars.js +9 -0
  69. package/dist/actions/build/getAppEnvVars.js.map +1 -0
  70. package/dist/actions/build/getAutoUpdatesImportMap.js +57 -0
  71. package/dist/actions/build/getAutoUpdatesImportMap.js.map +1 -0
  72. package/dist/actions/build/getEntryModule.js +46 -0
  73. package/dist/actions/build/getEntryModule.js.map +1 -0
  74. package/dist/actions/build/getPossibleDocumentComponentLocations.js +11 -0
  75. package/dist/actions/build/getPossibleDocumentComponentLocations.js.map +1 -0
  76. package/dist/actions/build/getStudioEnvVars.js +9 -0
  77. package/dist/actions/build/getStudioEnvVars.js.map +1 -0
  78. package/dist/actions/build/getStudioEnvironmentVariables.js +58 -0
  79. package/dist/actions/build/getStudioEnvironmentVariables.js.map +1 -0
  80. package/dist/actions/build/getViteConfig.js +180 -0
  81. package/dist/actions/build/getViteConfig.js.map +1 -0
  82. package/dist/actions/build/normalizeBasePath.js +9 -0
  83. package/dist/actions/build/normalizeBasePath.js.map +1 -0
  84. package/dist/actions/build/renderDocument.js +54 -0
  85. package/dist/actions/build/renderDocument.js.map +1 -0
  86. package/dist/actions/build/renderDocument.worker.js +9 -0
  87. package/dist/actions/build/renderDocument.worker.js.map +1 -0
  88. package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.js +59 -0
  89. package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.js.map +1 -0
  90. package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js +61 -0
  91. package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js.map +1 -0
  92. package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js +165 -0
  93. package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js.map +1 -0
  94. package/dist/actions/build/renderDocumentWorker/components/Favicons.js +28 -0
  95. package/dist/actions/build/renderDocumentWorker/components/Favicons.js.map +1 -0
  96. package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js +177 -0
  97. package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js.map +1 -0
  98. package/dist/actions/build/renderDocumentWorker/components/NoJavascript.js +51 -0
  99. package/dist/actions/build/renderDocumentWorker/components/NoJavascript.js.map +1 -0
  100. package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js +41 -0
  101. package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js.map +1 -0
  102. package/dist/actions/build/renderDocumentWorker/getDocumentHtml.js +55 -0
  103. package/dist/actions/build/renderDocumentWorker/getDocumentHtml.js.map +1 -0
  104. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js +31 -0
  105. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js.map +1 -0
  106. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js +30 -0
  107. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js.map +1 -0
  108. package/dist/actions/build/renderDocumentWorker/types.js +5 -0
  109. package/dist/actions/build/renderDocumentWorker/types.js.map +1 -0
  110. package/dist/actions/build/shouldAutoUpdate.js +35 -0
  111. package/dist/actions/build/shouldAutoUpdate.js.map +1 -0
  112. package/dist/actions/build/types.js +3 -0
  113. package/dist/actions/build/types.js.map +1 -0
  114. package/dist/actions/build/writeFavicons.js +26 -0
  115. package/dist/actions/build/writeFavicons.js.map +1 -0
  116. package/dist/actions/build/writeSanityRuntime.js +61 -0
  117. package/dist/actions/build/writeSanityRuntime.js.map +1 -0
  118. package/dist/actions/build/writeWebManifest.js +12 -0
  119. package/dist/actions/build/writeWebManifest.js.map +1 -0
  120. package/dist/actions/codemods/deskRename.js +18 -0
  121. package/dist/actions/codemods/deskRename.js.map +1 -0
  122. package/dist/actions/codemods/index.js +10 -0
  123. package/dist/actions/codemods/index.js.map +1 -0
  124. package/dist/actions/codemods/partsTypeDirective.js +27 -0
  125. package/dist/actions/codemods/partsTypeDirective.js.map +1 -0
  126. package/dist/actions/codemods/reactIconsV3.js +30 -0
  127. package/dist/actions/codemods/reactIconsV3.js.map +1 -0
  128. package/dist/actions/codemods/types.js +3 -0
  129. package/dist/actions/codemods/types.js.map +1 -0
  130. package/dist/actions/cors/filterAndValidateOrigin.js +38 -0
  131. package/dist/actions/cors/filterAndValidateOrigin.js.map +1 -0
  132. package/dist/actions/dataset/create.js +46 -0
  133. package/dist/actions/dataset/create.js.map +1 -0
  134. package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
  135. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
  136. package/dist/actions/dataset/processAliasName.js +20 -0
  137. package/dist/actions/dataset/processAliasName.js.map +1 -0
  138. package/dist/actions/dataset/validateDatasetAliasName.js +28 -0
  139. package/dist/actions/dataset/validateDatasetAliasName.js.map +1 -0
  140. package/dist/actions/dataset/validateDatasetName.js +39 -0
  141. package/dist/actions/dataset/validateDatasetName.js.map +1 -0
  142. package/dist/actions/debug/gatherDebugInfo.js +104 -0
  143. package/dist/actions/debug/gatherDebugInfo.js.map +1 -0
  144. package/dist/actions/debug/getGlobalConfigLocation.js +7 -0
  145. package/dist/actions/debug/getGlobalConfigLocation.js.map +1 -0
  146. package/dist/actions/debug/types.js +3 -0
  147. package/dist/actions/debug/types.js.map +1 -0
  148. package/dist/actions/deploy/checkDir.js +31 -0
  149. package/dist/actions/deploy/checkDir.js.map +1 -0
  150. package/dist/actions/deploy/createStudioUserApplication.js +59 -0
  151. package/dist/actions/deploy/createStudioUserApplication.js.map +1 -0
  152. package/dist/actions/deploy/createUserApplicationForApp.js +56 -0
  153. package/dist/actions/deploy/createUserApplicationForApp.js.map +1 -0
  154. package/dist/actions/deploy/deployApp.js +162 -0
  155. package/dist/actions/deploy/deployApp.js.map +1 -0
  156. package/dist/actions/deploy/deployDebug.js +4 -0
  157. package/dist/actions/deploy/deployDebug.js.map +1 -0
  158. package/dist/actions/deploy/deployStudio.js +134 -0
  159. package/dist/actions/deploy/deployStudio.js.map +1 -0
  160. package/dist/actions/deploy/findUserApplicationForApp.js +110 -0
  161. package/dist/actions/deploy/findUserApplicationForApp.js.map +1 -0
  162. package/dist/actions/deploy/findUserApplicationForStudio.js +143 -0
  163. package/dist/actions/deploy/findUserApplicationForStudio.js.map +1 -0
  164. package/dist/actions/deploy/types.js +3 -0
  165. package/dist/actions/deploy/types.js.map +1 -0
  166. package/dist/actions/dev/devAction.js +7 -0
  167. package/dist/actions/dev/devAction.js.map +1 -0
  168. package/dist/actions/dev/devDebug.js +4 -0
  169. package/dist/actions/dev/devDebug.js.map +1 -0
  170. package/dist/actions/dev/getCoreAppUrl.js +10 -0
  171. package/dist/actions/dev/getCoreAppUrl.js.map +1 -0
  172. package/dist/actions/dev/getDevServerConfig.js +28 -0
  173. package/dist/actions/dev/getDevServerConfig.js.map +1 -0
  174. package/dist/actions/dev/startAppDevServer.js +57 -0
  175. package/dist/actions/dev/startAppDevServer.js.map +1 -0
  176. package/dist/actions/dev/startStudioDevServer.js +154 -0
  177. package/dist/actions/dev/startStudioDevServer.js.map +1 -0
  178. package/dist/actions/dev/types.js +3 -0
  179. package/dist/actions/dev/types.js.map +1 -0
  180. package/dist/actions/docs/normalizeDocsPath.js +15 -0
  181. package/dist/actions/docs/normalizeDocsPath.js.map +1 -0
  182. package/dist/actions/documents/constants.js +3 -0
  183. package/dist/actions/documents/constants.js.map +1 -0
  184. package/dist/actions/documents/editor.js +26 -0
  185. package/dist/actions/documents/editor.js.map +1 -0
  186. package/dist/actions/documents/types.js +3 -0
  187. package/dist/actions/documents/types.js.map +1 -0
  188. package/dist/actions/documents/validate.js +60 -0
  189. package/dist/actions/documents/validate.js.map +1 -0
  190. package/dist/actions/documents/validateDocuments.worker.js +251 -0
  191. package/dist/actions/documents/validateDocuments.worker.js.map +1 -0
  192. package/dist/actions/documents/validation/reporters/index.js +10 -0
  193. package/dist/actions/documents/validation/reporters/index.js.map +1 -0
  194. package/dist/actions/documents/validation/reporters/jsonReporter.js +25 -0
  195. package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -0
  196. package/dist/actions/documents/validation/reporters/ndjsonReporter.js +18 -0
  197. package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -0
  198. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js +62 -0
  199. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js.map +1 -0
  200. package/dist/actions/documents/validation/reporters/prettyReporter/index.js +3 -0
  201. package/dist/actions/documents/validation/reporters/prettyReporter/index.js.map +1 -0
  202. package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.js +92 -0
  203. package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.js.map +1 -0
  204. package/dist/actions/documents/validation/reporters/prettyReporter/util.js +45 -0
  205. package/dist/actions/documents/validation/reporters/prettyReporter/util.js.map +1 -0
  206. package/dist/actions/exec/configClient.worker.js +9 -0
  207. package/dist/actions/exec/configClient.worker.js.map +1 -0
  208. package/dist/actions/exec/execScript.js +77 -0
  209. package/dist/actions/exec/execScript.js.map +1 -0
  210. package/dist/actions/exec/registerBrowserEnv.worker.js +17 -0
  211. package/dist/actions/exec/registerBrowserEnv.worker.js.map +1 -0
  212. package/dist/actions/graphql/SchemaError.js +37 -0
  213. package/dist/actions/graphql/SchemaError.js.map +1 -0
  214. package/dist/actions/graphql/extractFromSanitySchema.js +659 -0
  215. package/dist/actions/graphql/extractFromSanitySchema.js.map +1 -0
  216. package/dist/actions/graphql/gen1/generateTypeFilters.js +226 -0
  217. package/dist/actions/graphql/gen1/generateTypeFilters.js.map +1 -0
  218. package/dist/actions/graphql/gen1/generateTypeQueries.js +85 -0
  219. package/dist/actions/graphql/gen1/generateTypeQueries.js.map +1 -0
  220. package/dist/actions/graphql/gen1/index.js +19 -0
  221. package/dist/actions/graphql/gen1/index.js.map +1 -0
  222. package/dist/actions/graphql/gen2/filters/booleanFilters.js +26 -0
  223. package/dist/actions/graphql/gen2/filters/booleanFilters.js.map +1 -0
  224. package/dist/actions/graphql/gen2/filters/dateFilters.js +46 -0
  225. package/dist/actions/graphql/gen2/filters/dateFilters.js.map +1 -0
  226. package/dist/actions/graphql/gen2/filters/dateTimeFilters.js +46 -0
  227. package/dist/actions/graphql/gen2/filters/dateTimeFilters.js.map +1 -0
  228. package/dist/actions/graphql/gen2/filters/documentFilters.js +21 -0
  229. package/dist/actions/graphql/gen2/filters/documentFilters.js.map +1 -0
  230. package/dist/actions/graphql/gen2/filters/floatFilters.js +46 -0
  231. package/dist/actions/graphql/gen2/filters/floatFilters.js.map +1 -0
  232. package/dist/actions/graphql/gen2/filters/idFilters.js +44 -0
  233. package/dist/actions/graphql/gen2/filters/idFilters.js.map +1 -0
  234. package/dist/actions/graphql/gen2/filters/integerFilters.js +46 -0
  235. package/dist/actions/graphql/gen2/filters/integerFilters.js.map +1 -0
  236. package/dist/actions/graphql/gen2/filters/stringFilters.js +49 -0
  237. package/dist/actions/graphql/gen2/filters/stringFilters.js.map +1 -0
  238. package/dist/actions/graphql/gen2/generateTypeFilters.js +85 -0
  239. package/dist/actions/graphql/gen2/generateTypeFilters.js.map +1 -0
  240. package/dist/actions/graphql/gen2/generateTypeQueries.js +107 -0
  241. package/dist/actions/graphql/gen2/generateTypeQueries.js.map +1 -0
  242. package/dist/actions/graphql/gen2/generateTypeSortings.js +70 -0
  243. package/dist/actions/graphql/gen2/generateTypeSortings.js.map +1 -0
  244. package/dist/actions/graphql/gen2/index.js +22 -0
  245. package/dist/actions/graphql/gen2/index.js.map +1 -0
  246. package/dist/actions/graphql/gen3/filters/documentFilters.js +21 -0
  247. package/dist/actions/graphql/gen3/filters/documentFilters.js.map +1 -0
  248. package/dist/actions/graphql/gen3/generateTypeFilters.js +101 -0
  249. package/dist/actions/graphql/gen3/generateTypeFilters.js.map +1 -0
  250. package/dist/actions/graphql/gen3/generateTypeQueries.js +104 -0
  251. package/dist/actions/graphql/gen3/generateTypeQueries.js.map +1 -0
  252. package/dist/actions/graphql/gen3/generateTypeSortings.js +70 -0
  253. package/dist/actions/graphql/gen3/generateTypeSortings.js.map +1 -0
  254. package/dist/actions/graphql/gen3/index.js +31 -0
  255. package/dist/actions/graphql/gen3/index.js.map +1 -0
  256. package/dist/actions/graphql/gen3/utils.js +12 -0
  257. package/dist/actions/graphql/gen3/utils.js.map +1 -0
  258. package/dist/actions/graphql/getGraphQLAPIs.js +65 -0
  259. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -0
  260. package/dist/actions/graphql/getGraphQLAPIs.worker.js +126 -0
  261. package/dist/actions/graphql/getGraphQLAPIs.worker.js.map +1 -0
  262. package/dist/actions/graphql/graphqlDebug.js +4 -0
  263. package/dist/actions/graphql/graphqlDebug.js.map +1 -0
  264. package/dist/actions/graphql/helpUrls.js +3 -0
  265. package/dist/actions/graphql/helpUrls.js.map +1 -0
  266. package/dist/actions/graphql/helpers.js +11 -0
  267. package/dist/actions/graphql/helpers.js.map +1 -0
  268. package/dist/actions/graphql/resolveApiGeneration.js +43 -0
  269. package/dist/actions/graphql/resolveApiGeneration.js.map +1 -0
  270. package/dist/actions/graphql/types.js +3 -0
  271. package/dist/actions/graphql/types.js.map +1 -0
  272. package/dist/actions/hook/constants.js +3 -0
  273. package/dist/actions/hook/constants.js.map +1 -0
  274. package/dist/actions/hook/formatFailure.js +29 -0
  275. package/dist/actions/hook/formatFailure.js.map +1 -0
  276. package/dist/actions/hook/types.js +3 -0
  277. package/dist/actions/hook/types.js.map +1 -0
  278. package/dist/actions/init/bootstrapLocalTemplate.js +137 -0
  279. package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -0
  280. package/dist/actions/init/bootstrapRemoteTemplate.js +109 -0
  281. package/dist/actions/init/bootstrapRemoteTemplate.js.map +1 -0
  282. package/dist/actions/init/bootstrapTemplate.js +32 -0
  283. package/dist/actions/init/bootstrapTemplate.js.map +1 -0
  284. package/dist/actions/init/checkNextJsReactCompatibility.js +21 -0
  285. package/dist/actions/init/checkNextJsReactCompatibility.js.map +1 -0
  286. package/dist/actions/init/constants.js +3 -0
  287. package/dist/actions/init/constants.js.map +1 -0
  288. package/dist/actions/init/countNestedFolders.js +6 -0
  289. package/dist/actions/init/countNestedFolders.js.map +1 -0
  290. package/dist/actions/init/createAppCliConfig.js +19 -0
  291. package/dist/actions/init/createAppCliConfig.js.map +1 -0
  292. package/dist/actions/init/createCliConfig.js +27 -0
  293. package/dist/actions/init/createCliConfig.js.map +1 -0
  294. package/dist/actions/init/createPackageManifest.js +86 -0
  295. package/dist/actions/init/createPackageManifest.js.map +1 -0
  296. package/dist/actions/init/createStudioConfig.js +41 -0
  297. package/dist/actions/init/createStudioConfig.js.map +1 -0
  298. package/dist/actions/init/determineAppTemplate.js +16 -0
  299. package/dist/actions/init/determineAppTemplate.js.map +1 -0
  300. package/dist/actions/init/env/createOrAppendEnvVars.js +25 -0
  301. package/dist/actions/init/env/createOrAppendEnvVars.js.map +1 -0
  302. package/dist/actions/init/env/parseAndUpdateEnvVars.js +42 -0
  303. package/dist/actions/init/env/parseAndUpdateEnvVars.js.map +1 -0
  304. package/dist/actions/init/env/writeEnvVarsToFile.js +49 -0
  305. package/dist/actions/init/env/writeEnvVarsToFile.js.map +1 -0
  306. package/dist/actions/init/fetchPostInitPrompt.js +30 -0
  307. package/dist/actions/init/fetchPostInitPrompt.js.map +1 -0
  308. package/dist/actions/init/git.js +65 -0
  309. package/dist/actions/init/git.js.map +1 -0
  310. package/dist/actions/init/processTemplate.js +56 -0
  311. package/dist/actions/init/processTemplate.js.map +1 -0
  312. package/dist/actions/init/remoteTemplate.js +211 -0
  313. package/dist/actions/init/remoteTemplate.js.map +1 -0
  314. package/dist/actions/init/resolvePackageManager.js +20 -0
  315. package/dist/actions/init/resolvePackageManager.js.map +1 -0
  316. package/dist/actions/init/templates/appQuickstart.js +28 -0
  317. package/dist/actions/init/templates/appQuickstart.js.map +1 -0
  318. package/dist/actions/init/templates/appSanityUi.js +30 -0
  319. package/dist/actions/init/templates/appSanityUi.js.map +1 -0
  320. package/dist/actions/init/templates/blog.js +4 -0
  321. package/dist/actions/init/templates/blog.js.map +1 -0
  322. package/dist/actions/init/templates/clean.js +4 -0
  323. package/dist/actions/init/templates/clean.js.map +1 -0
  324. package/dist/actions/init/templates/getStarted.js +35 -0
  325. package/dist/actions/init/templates/getStarted.js.map +1 -0
  326. package/dist/actions/init/templates/index.js +23 -0
  327. package/dist/actions/init/templates/index.js.map +1 -0
  328. package/dist/actions/init/templates/moviedb.js +34 -0
  329. package/dist/actions/init/templates/moviedb.js.map +1 -0
  330. package/dist/actions/init/templates/nextjs/index.js +213 -0
  331. package/dist/actions/init/templates/nextjs/index.js.map +1 -0
  332. package/dist/actions/init/templates/nextjs/schemaTypes/blog.js +247 -0
  333. package/dist/actions/init/templates/nextjs/schemaTypes/blog.js.map +1 -0
  334. package/dist/actions/init/templates/quickstart.js +4 -0
  335. package/dist/actions/init/templates/quickstart.js.map +1 -0
  336. package/dist/actions/init/templates/shopify.js +77 -0
  337. package/dist/actions/init/templates/shopify.js.map +1 -0
  338. package/dist/actions/init/templates/shopifyOnline.js +49 -0
  339. package/dist/actions/init/templates/shopifyOnline.js.map +1 -0
  340. package/dist/actions/init/types.js +3 -0
  341. package/dist/actions/init/types.js.map +1 -0
  342. package/dist/actions/init/updateInitialTemplateMetadata.js +17 -0
  343. package/dist/actions/init/updateInitialTemplateMetadata.js.map +1 -0
  344. package/dist/actions/manifest/SchemaIcon.js +21 -0
  345. package/dist/actions/manifest/SchemaIcon.js.map +1 -0
  346. package/dist/actions/manifest/extractAppManifest.js +51 -0
  347. package/dist/actions/manifest/extractAppManifest.js.map +1 -0
  348. package/dist/actions/manifest/extractManifest.js +93 -0
  349. package/dist/actions/manifest/extractManifest.js.map +1 -0
  350. package/dist/actions/manifest/extractWorkspaceManifest.js +406 -0
  351. package/dist/actions/manifest/extractWorkspaceManifest.js.map +1 -0
  352. package/dist/actions/manifest/purifyConfig.js +307 -0
  353. package/dist/actions/manifest/purifyConfig.js.map +1 -0
  354. package/dist/actions/manifest/schemaTypeHelpers.js +110 -0
  355. package/dist/actions/manifest/schemaTypeHelpers.js.map +1 -0
  356. package/dist/actions/manifest/types.js +5 -0
  357. package/dist/actions/manifest/types.js.map +1 -0
  358. package/dist/actions/mcp/detectAvailableEditors.js +75 -0
  359. package/dist/actions/mcp/detectAvailableEditors.js.map +1 -0
  360. package/dist/actions/mcp/editorConfigs.js +147 -0
  361. package/dist/actions/mcp/editorConfigs.js.map +1 -0
  362. package/dist/actions/mcp/promptForMCPSetup.js +24 -0
  363. package/dist/actions/mcp/promptForMCPSetup.js.map +1 -0
  364. package/dist/actions/mcp/setupMCP.js +88 -0
  365. package/dist/actions/mcp/setupMCP.js.map +1 -0
  366. package/dist/actions/mcp/types.js +3 -0
  367. package/dist/actions/mcp/types.js.map +1 -0
  368. package/dist/actions/mcp/writeMCPConfig.js +41 -0
  369. package/dist/actions/mcp/writeMCPConfig.js.map +1 -0
  370. package/dist/actions/media/__tests__/createMockClient.js +32 -0
  371. package/dist/actions/media/__tests__/createMockClient.js.map +1 -0
  372. package/dist/actions/media/getMediaLibraryConfig.js +5 -0
  373. package/dist/actions/media/getMediaLibraryConfig.js.map +1 -0
  374. package/dist/actions/media/importAspects.js +112 -0
  375. package/dist/actions/media/importAspects.js.map +1 -0
  376. package/dist/actions/media/importMedia.js +213 -0
  377. package/dist/actions/media/importMedia.js.map +1 -0
  378. package/dist/actions/media/importMediaDebug.js +4 -0
  379. package/dist/actions/media/importMediaDebug.js.map +1 -0
  380. package/dist/actions/organizations/getOrganization.js +67 -0
  381. package/dist/actions/organizations/getOrganization.js.map +1 -0
  382. package/dist/actions/organizations/getOrganizationChoices.js +23 -0
  383. package/dist/actions/organizations/getOrganizationChoices.js.map +1 -0
  384. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js +9 -0
  385. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js.map +1 -0
  386. package/dist/actions/organizations/hasProjectAttachGrant.js +24 -0
  387. package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -0
  388. package/dist/actions/organizations/validateOrganizationName.js +10 -0
  389. package/dist/actions/organizations/validateOrganizationName.js.map +1 -0
  390. package/dist/actions/preview/getPreviewServerConfig.js +16 -0
  391. package/dist/actions/preview/getPreviewServerConfig.js.map +1 -0
  392. package/dist/actions/preview/previewAction.js +20 -0
  393. package/dist/actions/preview/previewAction.js.map +1 -0
  394. package/dist/actions/preview/types.js +3 -0
  395. package/dist/actions/preview/types.js.map +1 -0
  396. package/dist/actions/projects/getManageUrl.js +7 -0
  397. package/dist/actions/projects/getManageUrl.js.map +1 -0
  398. package/dist/actions/projects/validateProjectName.js +11 -0
  399. package/dist/actions/projects/validateProjectName.js.map +1 -0
  400. package/dist/actions/schema/deleteSchemaAction.js +101 -0
  401. package/dist/actions/schema/deleteSchemaAction.js.map +1 -0
  402. package/dist/actions/schema/deploySchemas.js +98 -0
  403. package/dist/actions/schema/deploySchemas.js.map +1 -0
  404. package/dist/actions/schema/extractSanitySchema.worker.js +38 -0
  405. package/dist/actions/schema/extractSanitySchema.worker.js.map +1 -0
  406. package/dist/actions/schema/extractSchema.js +77 -0
  407. package/dist/actions/schema/extractSchema.js.map +1 -0
  408. package/dist/actions/schema/formatSchemaValidation.js +74 -0
  409. package/dist/actions/schema/formatSchemaValidation.js.map +1 -0
  410. package/dist/actions/schema/listSchemas.js +119 -0
  411. package/dist/actions/schema/listSchemas.js.map +1 -0
  412. package/dist/actions/schema/metafile.js +51 -0
  413. package/dist/actions/schema/metafile.js.map +1 -0
  414. package/dist/actions/schema/schemaStoreTypes.js +19 -0
  415. package/dist/actions/schema/schemaStoreTypes.js.map +1 -0
  416. package/dist/actions/schema/types.js +9 -0
  417. package/dist/actions/schema/types.js.map +1 -0
  418. package/dist/actions/schema/utils/debug.js +6 -0
  419. package/dist/actions/schema/utils/debug.js.map +1 -0
  420. package/dist/actions/schema/utils/extractValidationFromSchemaError.js +12 -0
  421. package/dist/actions/schema/utils/extractValidationFromSchemaError.js.map +1 -0
  422. package/dist/actions/schema/utils/manifestExtractor.js +33 -0
  423. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -0
  424. package/dist/actions/schema/utils/manifestReader.js +71 -0
  425. package/dist/actions/schema/utils/manifestReader.js.map +1 -0
  426. package/dist/actions/schema/utils/schemaStoreOutStrings.js +11 -0
  427. package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -0
  428. package/dist/actions/schema/utils/schemaStoreValidation.js +108 -0
  429. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -0
  430. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
  431. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
  432. package/dist/actions/schema/utils/workspaceSchemaId.js +23 -0
  433. package/dist/actions/schema/utils/workspaceSchemaId.js.map +1 -0
  434. package/dist/actions/schema/validateAction.js +71 -0
  435. package/dist/actions/schema/validateAction.js.map +1 -0
  436. package/dist/actions/schema/validateSchema.worker.js +124 -0
  437. package/dist/actions/schema/validateSchema.worker.js.map +1 -0
  438. package/dist/actions/telemetry/getLearnMoreMessage.js +15 -0
  439. package/dist/actions/telemetry/getLearnMoreMessage.js.map +1 -0
  440. package/dist/actions/telemetry/getStatusDisplay.js +26 -0
  441. package/dist/actions/telemetry/getStatusDisplay.js.map +1 -0
  442. package/dist/actions/telemetry/getStatusMessage.js +36 -0
  443. package/dist/actions/telemetry/getStatusMessage.js.map +1 -0
  444. package/dist/actions/telemetry/resolveConsent.js +48 -0
  445. package/dist/actions/telemetry/resolveConsent.js.map +1 -0
  446. package/dist/actions/telemetry/setConsent.js +83 -0
  447. package/dist/actions/telemetry/setConsent.js.map +1 -0
  448. package/dist/actions/telemetry/telemetryDebug.js +4 -0
  449. package/dist/actions/telemetry/telemetryDebug.js.map +1 -0
  450. package/dist/actions/telemetry/telemetryDisclosure.js +33 -0
  451. package/dist/actions/telemetry/telemetryDisclosure.js.map +1 -0
  452. package/dist/actions/telemetry/telemetryLearnMoreMessage.js +15 -0
  453. package/dist/actions/telemetry/telemetryLearnMoreMessage.js.map +1 -0
  454. package/dist/actions/tokens/constants.js +5 -0
  455. package/dist/actions/tokens/constants.js.map +1 -0
  456. package/dist/actions/tokens/types.js +3 -0
  457. package/dist/actions/tokens/types.js.map +1 -0
  458. package/dist/actions/tokens/validateRole.js +23 -0
  459. package/dist/actions/tokens/validateRole.js.map +1 -0
  460. package/dist/actions/undeploy/getStudioOrAppUserApplication.js +36 -0
  461. package/dist/actions/undeploy/getStudioOrAppUserApplication.js.map +1 -0
  462. package/dist/actions/users/getMembersForProject.js +47 -0
  463. package/dist/actions/users/getMembersForProject.js.map +1 -0
  464. package/dist/actions/users/getPendingInvitations.js +15 -0
  465. package/dist/actions/users/getPendingInvitations.js.map +1 -0
  466. package/dist/actions/users/types.js +3 -0
  467. package/dist/actions/users/types.js.map +1 -0
  468. package/dist/actions/users/usersDebug.js +4 -0
  469. package/dist/actions/users/usersDebug.js.map +1 -0
  470. package/dist/actions/users/validateEmail.js +14 -0
  471. package/dist/actions/users/validateEmail.js.map +1 -0
  472. package/dist/actions/versions/buildPackageArray.js +44 -0
  473. package/dist/actions/versions/buildPackageArray.js.map +1 -0
  474. package/dist/actions/versions/filterSanityModules.js +20 -0
  475. package/dist/actions/versions/filterSanityModules.js.map +1 -0
  476. package/dist/actions/versions/findSanityModulesVersions.js +47 -0
  477. package/dist/actions/versions/findSanityModulesVersions.js.map +1 -0
  478. package/dist/actions/versions/getFormatters.js +30 -0
  479. package/dist/actions/versions/getFormatters.js.map +1 -0
  480. package/dist/actions/versions/tryFindLatestVersion.js +21 -0
  481. package/dist/actions/versions/tryFindLatestVersion.js.map +1 -0
  482. package/dist/actions/versions/types.js +5 -0
  483. package/dist/actions/versions/types.js.map +1 -0
  484. package/dist/actions/versions/versionsDebug.js +4 -0
  485. package/dist/actions/versions/versionsDebug.js.map +1 -0
  486. package/dist/commands/backup/disable.js +94 -0
  487. package/dist/commands/backup/disable.js.map +1 -0
  488. package/dist/commands/backup/download.js +291 -0
  489. package/dist/commands/backup/download.js.map +1 -0
  490. package/dist/commands/backup/enable.js +99 -0
  491. package/dist/commands/backup/enable.js.map +1 -0
  492. package/dist/commands/backup/list.js +187 -0
  493. package/dist/commands/backup/list.js.map +1 -0
  494. package/dist/commands/build.js +82 -0
  495. package/dist/commands/build.js.map +1 -0
  496. package/dist/commands/codemod.js +141 -0
  497. package/dist/commands/codemod.js.map +1 -0
  498. package/dist/commands/cors/add.js +154 -0
  499. package/dist/commands/cors/add.js.map +1 -0
  500. package/dist/commands/cors/delete.js +90 -0
  501. package/dist/commands/cors/delete.js.map +1 -0
  502. package/dist/commands/cors/list.js +40 -0
  503. package/dist/commands/cors/list.js.map +1 -0
  504. package/dist/commands/dataset/alias/create.js +118 -0
  505. package/dist/commands/dataset/alias/create.js.map +1 -0
  506. package/dist/commands/dataset/alias/delete.js +88 -0
  507. package/dist/commands/dataset/alias/delete.js.map +1 -0
  508. package/dist/commands/dataset/alias/link.js +137 -0
  509. package/dist/commands/dataset/alias/link.js.map +1 -0
  510. package/dist/commands/dataset/alias/unlink.js +98 -0
  511. package/dist/commands/dataset/alias/unlink.js.map +1 -0
  512. package/dist/commands/dataset/copy.js +369 -0
  513. package/dist/commands/dataset/copy.js.map +1 -0
  514. package/dist/commands/dataset/create.js +106 -0
  515. package/dist/commands/dataset/create.js.map +1 -0
  516. package/dist/commands/dataset/delete.js +104 -0
  517. package/dist/commands/dataset/delete.js.map +1 -0
  518. package/dist/commands/dataset/export.js +271 -0
  519. package/dist/commands/dataset/export.js.map +1 -0
  520. package/dist/commands/dataset/import.js +3 -0
  521. package/dist/commands/dataset/import.js.map +1 -0
  522. package/dist/commands/dataset/list.js +50 -0
  523. package/dist/commands/dataset/list.js.map +1 -0
  524. package/dist/commands/dataset/visibility/get.js +55 -0
  525. package/dist/commands/dataset/visibility/get.js.map +1 -0
  526. package/dist/commands/dataset/visibility/set.js +88 -0
  527. package/dist/commands/dataset/visibility/set.js.map +1 -0
  528. package/dist/commands/debug.js +93 -0
  529. package/dist/commands/debug.js.map +1 -0
  530. package/dist/commands/deploy.js +115 -0
  531. package/dist/commands/deploy.js.map +1 -0
  532. package/dist/commands/dev.js +65 -0
  533. package/dist/commands/dev.js.map +1 -0
  534. package/dist/commands/docs/browse.js +15 -0
  535. package/dist/commands/docs/browse.js.map +1 -0
  536. package/dist/commands/docs/read.js +81 -0
  537. package/dist/commands/docs/read.js.map +1 -0
  538. package/dist/commands/docs/search.js +111 -0
  539. package/dist/commands/docs/search.js.map +1 -0
  540. package/dist/commands/documents/create.js +338 -0
  541. package/dist/commands/documents/create.js.map +1 -0
  542. package/dist/commands/documents/delete.js +104 -0
  543. package/dist/commands/documents/delete.js.map +1 -0
  544. package/dist/commands/documents/get.js +85 -0
  545. package/dist/commands/documents/get.js.map +1 -0
  546. package/dist/commands/documents/query.js +105 -0
  547. package/dist/commands/documents/query.js.map +1 -0
  548. package/dist/commands/documents/validate.js +142 -0
  549. package/dist/commands/documents/validate.js.map +1 -0
  550. package/dist/commands/exec.js +54 -0
  551. package/dist/commands/exec.js.map +1 -0
  552. package/dist/commands/graphql/deploy.js +429 -0
  553. package/dist/commands/graphql/deploy.js.map +1 -0
  554. package/dist/commands/graphql/list.js +53 -0
  555. package/dist/commands/graphql/list.js.map +1 -0
  556. package/dist/commands/graphql/undeploy.js +143 -0
  557. package/dist/commands/graphql/undeploy.js.map +1 -0
  558. package/dist/commands/hook/attempt.js +66 -0
  559. package/dist/commands/hook/attempt.js.map +1 -0
  560. package/dist/commands/hook/create.js +46 -0
  561. package/dist/commands/hook/create.js.map +1 -0
  562. package/dist/commands/hook/delete.js +86 -0
  563. package/dist/commands/hook/delete.js.map +1 -0
  564. package/dist/commands/hook/list.js +46 -0
  565. package/dist/commands/hook/list.js.map +1 -0
  566. package/dist/commands/hook/logs.js +184 -0
  567. package/dist/commands/hook/logs.js.map +1 -0
  568. package/dist/commands/init.js +1389 -0
  569. package/dist/commands/init.js.map +1 -0
  570. package/dist/commands/install.js +43 -0
  571. package/dist/commands/install.js.map +1 -0
  572. package/dist/commands/learn.js +15 -0
  573. package/dist/commands/learn.js.map +1 -0
  574. package/dist/commands/login.js +50 -0
  575. package/dist/commands/login.js.map +1 -0
  576. package/dist/commands/logout.js +37 -0
  577. package/dist/commands/logout.js.map +1 -0
  578. package/dist/commands/manage.js +29 -0
  579. package/dist/commands/manage.js.map +1 -0
  580. package/dist/commands/manifest/extract.js +43 -0
  581. package/dist/commands/manifest/extract.js.map +1 -0
  582. package/dist/commands/mcp/configure.js +28 -0
  583. package/dist/commands/mcp/configure.js.map +1 -0
  584. package/dist/commands/media/create-aspect.js +88 -0
  585. package/dist/commands/media/create-aspect.js.map +1 -0
  586. package/dist/commands/media/delete-aspect.js +85 -0
  587. package/dist/commands/media/delete-aspect.js.map +1 -0
  588. package/dist/commands/media/deploy-aspect.js +151 -0
  589. package/dist/commands/media/deploy-aspect.js.map +1 -0
  590. package/dist/commands/media/export.js +210 -0
  591. package/dist/commands/media/export.js.map +1 -0
  592. package/dist/commands/media/import.js +160 -0
  593. package/dist/commands/media/import.js.map +1 -0
  594. package/dist/commands/openapi/get.js +83 -0
  595. package/dist/commands/openapi/get.js.map +1 -0
  596. package/dist/commands/openapi/list.js +80 -0
  597. package/dist/commands/openapi/list.js.map +1 -0
  598. package/dist/commands/preview.js +60 -0
  599. package/dist/commands/preview.js.map +1 -0
  600. package/dist/commands/projects/create.js +181 -0
  601. package/dist/commands/projects/create.js.map +1 -0
  602. package/dist/commands/projects/list.js +76 -0
  603. package/dist/commands/projects/list.js.map +1 -0
  604. package/dist/commands/schema/delete.js +91 -0
  605. package/dist/commands/schema/delete.js.map +1 -0
  606. package/dist/commands/schema/deploy.js +98 -0
  607. package/dist/commands/schema/deploy.js.map +1 -0
  608. package/dist/commands/schema/extract.js +46 -0
  609. package/dist/commands/schema/extract.js.map +1 -0
  610. package/dist/commands/schema/list.js +104 -0
  611. package/dist/commands/schema/list.js.map +1 -0
  612. package/dist/commands/schema/validate.js +73 -0
  613. package/dist/commands/schema/validate.js.map +1 -0
  614. package/dist/commands/telemetry/disable.js +33 -0
  615. package/dist/commands/telemetry/disable.js.map +1 -0
  616. package/dist/commands/telemetry/enable.js +33 -0
  617. package/dist/commands/telemetry/enable.js.map +1 -0
  618. package/dist/commands/telemetry/status.js +25 -0
  619. package/dist/commands/telemetry/status.js.map +1 -0
  620. package/dist/commands/tokens/add.js +135 -0
  621. package/dist/commands/tokens/add.js.map +1 -0
  622. package/dist/commands/tokens/delete.js +107 -0
  623. package/dist/commands/tokens/delete.js.map +1 -0
  624. package/dist/commands/tokens/list.js +92 -0
  625. package/dist/commands/tokens/list.js.map +1 -0
  626. package/dist/commands/undeploy.js +93 -0
  627. package/dist/commands/undeploy.js.map +1 -0
  628. package/dist/commands/users/invite.js +100 -0
  629. package/dist/commands/users/invite.js.map +1 -0
  630. package/dist/commands/users/list.js +101 -0
  631. package/dist/commands/users/list.js.map +1 -0
  632. package/dist/commands/versions.js +27 -0
  633. package/dist/commands/versions.js.map +1 -0
  634. package/dist/config/createCliConfig.js +9 -0
  635. package/dist/config/createCliConfig.js.map +1 -0
  636. package/dist/config/defineCliConfig.js +5 -0
  637. package/dist/config/defineCliConfig.js.map +1 -0
  638. package/dist/hooks/prerun/flushTelemetry.worker.js +22 -0
  639. package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -0
  640. package/dist/hooks/prerun/injectEnvVariables.js +31 -0
  641. package/dist/hooks/prerun/injectEnvVariables.js.map +1 -0
  642. package/dist/hooks/prerun/setupTelemetry.js +72 -0
  643. package/dist/hooks/prerun/setupTelemetry.js.map +1 -0
  644. package/dist/hooks/prerun/warnings.js +6 -0
  645. package/dist/hooks/prerun/warnings.js.map +1 -0
  646. package/dist/index.d.ts +2326 -0
  647. package/dist/index.js +6 -0
  648. package/dist/index.js.map +1 -0
  649. package/dist/prompts/init/nextjs.js +56 -0
  650. package/dist/prompts/init/nextjs.js.map +1 -0
  651. package/dist/prompts/init/promptForTypescript.js +9 -0
  652. package/dist/prompts/init/promptForTypescript.js.map +1 -0
  653. package/dist/prompts/promptForDataset.js +32 -0
  654. package/dist/prompts/promptForDataset.js.map +1 -0
  655. package/dist/prompts/promptForDatasetAclMode.js +27 -0
  656. package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
  657. package/dist/prompts/promptForDatasetAliasName.js +17 -0
  658. package/dist/prompts/promptForDatasetAliasName.js.map +1 -0
  659. package/dist/prompts/promptForDatasetName.js +20 -0
  660. package/dist/prompts/promptForDatasetName.js.map +1 -0
  661. package/dist/prompts/promptForDefaultConfig.js +12 -0
  662. package/dist/prompts/promptForDefaultConfig.js.map +1 -0
  663. package/dist/prompts/promptForMediaLibrary.js +37 -0
  664. package/dist/prompts/promptForMediaLibrary.js.map +1 -0
  665. package/dist/prompts/promptForOrganizationName.js +11 -0
  666. package/dist/prompts/promptForOrganizationName.js.map +1 -0
  667. package/dist/prompts/promptForProjectName.js +11 -0
  668. package/dist/prompts/promptForProjectName.js.map +1 -0
  669. package/dist/prompts/selectDataset.js +12 -0
  670. package/dist/prompts/selectDataset.js.map +1 -0
  671. package/dist/prompts/selectMediaLibrary.js +34 -0
  672. package/dist/prompts/selectMediaLibrary.js.map +1 -0
  673. package/dist/server/devServer.js +53 -0
  674. package/dist/server/devServer.js.map +1 -0
  675. package/dist/server/gracefulServerDeath.js +12 -0
  676. package/dist/server/gracefulServerDeath.js.map +1 -0
  677. package/dist/server/previewServer.js +93 -0
  678. package/dist/server/previewServer.js.map +1 -0
  679. package/dist/server/serverDebug.js +4 -0
  680. package/dist/server/serverDebug.js.map +1 -0
  681. package/dist/server/vite/plugin-sanity-basepath-redirect.js +25 -0
  682. package/dist/server/vite/plugin-sanity-basepath-redirect.js.map +1 -0
  683. package/dist/server/vite/plugin-sanity-build-entries.js +65 -0
  684. package/dist/server/vite/plugin-sanity-build-entries.js.map +1 -0
  685. package/dist/server/vite/plugin-sanity-favicons.js +72 -0
  686. package/dist/server/vite/plugin-sanity-favicons.js.map +1 -0
  687. package/dist/server/vite/plugin-sanity-runtime-rewrite.js +18 -0
  688. package/dist/server/vite/plugin-sanity-runtime-rewrite.js.map +1 -0
  689. package/dist/services/auth.js +13 -0
  690. package/dist/services/auth.js.map +1 -0
  691. package/dist/services/backup.js +51 -0
  692. package/dist/services/backup.js.map +1 -0
  693. package/dist/services/cors.js +38 -0
  694. package/dist/services/cors.js.map +1 -0
  695. package/dist/services/datasetAliases.js +64 -0
  696. package/dist/services/datasetAliases.js.map +1 -0
  697. package/dist/services/datasets.js +153 -0
  698. package/dist/services/datasets.js.map +1 -0
  699. package/dist/services/docs.js +46 -0
  700. package/dist/services/docs.js.map +1 -0
  701. package/dist/services/documents.js +56 -0
  702. package/dist/services/documents.js.map +1 -0
  703. package/dist/services/getProjectFeatures.js +16 -0
  704. package/dist/services/getProjectFeatures.js.map +1 -0
  705. package/dist/services/getUrlHeaders.js +36 -0
  706. package/dist/services/getUrlHeaders.js.map +1 -0
  707. package/dist/services/graphql.js +96 -0
  708. package/dist/services/graphql.js.map +1 -0
  709. package/dist/services/hooks.js +59 -0
  710. package/dist/services/hooks.js.map +1 -0
  711. package/dist/services/mcp.js +50 -0
  712. package/dist/services/mcp.js.map +1 -0
  713. package/dist/services/mediaLibraries.js +74 -0
  714. package/dist/services/mediaLibraries.js.map +1 -0
  715. package/dist/services/organizations.js +42 -0
  716. package/dist/services/organizations.js.map +1 -0
  717. package/dist/services/plans.js +37 -0
  718. package/dist/services/plans.js.map +1 -0
  719. package/dist/services/projects.js +119 -0
  720. package/dist/services/projects.js.map +1 -0
  721. package/dist/services/schemas.js +40 -0
  722. package/dist/services/schemas.js.map +1 -0
  723. package/dist/services/telemetry.js +80 -0
  724. package/dist/services/telemetry.js.map +1 -0
  725. package/dist/services/tokens.js +72 -0
  726. package/dist/services/tokens.js.map +1 -0
  727. package/dist/services/user.js +35 -0
  728. package/dist/services/user.js.map +1 -0
  729. package/dist/services/userApplications.js +164 -0
  730. package/dist/services/userApplications.js.map +1 -0
  731. package/dist/studioDependencies.js +24 -0
  732. package/dist/studioDependencies.js.map +1 -0
  733. package/dist/telemetry/build.telemetry.js +13 -0
  734. package/dist/telemetry/build.telemetry.js.map +1 -0
  735. package/dist/telemetry/cli.telemetry.js +8 -0
  736. package/dist/telemetry/cli.telemetry.js.map +1 -0
  737. package/dist/telemetry/extractSchema.telemetry.js +8 -0
  738. package/dist/telemetry/extractSchema.telemetry.js.map +1 -0
  739. package/dist/telemetry/init.telemetry.js +8 -0
  740. package/dist/telemetry/init.telemetry.js.map +1 -0
  741. package/dist/telemetry/login.telemetry.js +8 -0
  742. package/dist/telemetry/login.telemetry.js.map +1 -0
  743. package/dist/telemetry/mcp.telemetry.js +8 -0
  744. package/dist/telemetry/mcp.telemetry.js.map +1 -0
  745. package/dist/types.js +5 -0
  746. package/dist/types.js.map +1 -0
  747. package/dist/typings/deepSortObject.d.js +2 -0
  748. package/dist/typings/deepSortObject.d.js.map +1 -0
  749. package/dist/util/absolutify.js +26 -0
  750. package/dist/util/absolutify.js.map +1 -0
  751. package/dist/util/appId.js +58 -0
  752. package/dist/util/appId.js.map +1 -0
  753. package/dist/util/canLaunchBrowser.js +14 -0
  754. package/dist/util/canLaunchBrowser.js.map +1 -0
  755. package/dist/util/cliClient.js +41 -0
  756. package/dist/util/cliClient.js.map +1 -0
  757. package/dist/util/compareDependencyVersions.js +73 -0
  758. package/dist/util/compareDependencyVersions.js.map +1 -0
  759. package/dist/util/copy.js +37 -0
  760. package/dist/util/copy.js.map +1 -0
  761. package/dist/util/copyDir.js +63 -0
  762. package/dist/util/copyDir.js.map +1 -0
  763. package/dist/util/detectRuntime.js +20 -0
  764. package/dist/util/detectRuntime.js.map +1 -0
  765. package/dist/util/determineIsApp.js +9 -0
  766. package/dist/util/determineIsApp.js.map +1 -0
  767. package/dist/util/dirIsEmptyOrNonExistent.js +18 -0
  768. package/dist/util/dirIsEmptyOrNonExistent.js.map +1 -0
  769. package/dist/util/ensureTrailingSlash.js +12 -0
  770. package/dist/util/ensureTrailingSlash.js.map +1 -0
  771. package/dist/util/errorMessages.js +6 -0
  772. package/dist/util/errorMessages.js.map +1 -0
  773. package/dist/util/extractDocumentsFromNdjsonOrTarball.js +88 -0
  774. package/dist/util/extractDocumentsFromNdjsonOrTarball.js.map +1 -0
  775. package/dist/util/findNdjsonEntry.js +21 -0
  776. package/dist/util/findNdjsonEntry.js.map +1 -0
  777. package/dist/util/formatSize.js +10 -0
  778. package/dist/util/formatSize.js.map +1 -0
  779. package/dist/util/frameworkPort.js +61 -0
  780. package/dist/util/frameworkPort.js.map +1 -0
  781. package/dist/util/fsUtils.js +34 -0
  782. package/dist/util/fsUtils.js.map +1 -0
  783. package/dist/util/getCliVersion.js +28 -0
  784. package/dist/util/getCliVersion.js.map +1 -0
  785. package/dist/util/getErrorMessage.js +19 -0
  786. package/dist/util/getErrorMessage.js.map +1 -0
  787. package/dist/util/getLocalPackageVersion.js +32 -0
  788. package/dist/util/getLocalPackageVersion.js.map +1 -0
  789. package/dist/util/getProjectDefaults.js +77 -0
  790. package/dist/util/getProjectDefaults.js.map +1 -0
  791. package/dist/util/getSanityEnv.js +3 -0
  792. package/dist/util/getSanityEnv.js.map +1 -0
  793. package/dist/util/getSharedServerConfig.js +31 -0
  794. package/dist/util/getSharedServerConfig.js.map +1 -0
  795. package/dist/util/getWorkspace.js +18 -0
  796. package/dist/util/getWorkspace.js.map +1 -0
  797. package/dist/util/humanFileSize.js +12 -0
  798. package/dist/util/humanFileSize.js.map +1 -0
  799. package/dist/util/importStudioConfig.js +40 -0
  800. package/dist/util/importStudioConfig.js.map +1 -0
  801. package/dist/util/isPathDirName.js +6 -0
  802. package/dist/util/isPathDirName.js.map +1 -0
  803. package/dist/util/isSanityDocumentish.js +20 -0
  804. package/dist/util/isSanityDocumentish.js.map +1 -0
  805. package/dist/util/loadEnv.js +3 -0
  806. package/dist/util/loadEnv.js.map +1 -0
  807. package/dist/util/moduleFormatUtils.js +18 -0
  808. package/dist/util/moduleFormatUtils.js.map +1 -0
  809. package/dist/util/packageManager/installPackages.js +87 -0
  810. package/dist/util/packageManager/installPackages.js.map +1 -0
  811. package/dist/util/packageManager/packageManagerChoice.js +181 -0
  812. package/dist/util/packageManager/packageManagerChoice.js.map +1 -0
  813. package/dist/util/packageManager/upgradePackages.js +69 -0
  814. package/dist/util/packageManager/upgradePackages.js.map +1 -0
  815. package/dist/util/parseArguments.js +42 -0
  816. package/dist/util/parseArguments.js.map +1 -0
  817. package/dist/util/pluralize.js +11 -0
  818. package/dist/util/pluralize.js.map +1 -0
  819. package/dist/util/readModuleVersion.js +15 -0
  820. package/dist/util/readModuleVersion.js.map +1 -0
  821. package/dist/util/readPackageJson.js +44 -0
  822. package/dist/util/readPackageJson.js.map +1 -0
  823. package/dist/util/readPackageManifest.js +46 -0
  824. package/dist/util/readPackageManifest.js.map +1 -0
  825. package/dist/util/readdirRecursive.js +24 -0
  826. package/dist/util/readdirRecursive.js.map +1 -0
  827. package/dist/util/resolveLatestVersions.js +21 -0
  828. package/dist/util/resolveLatestVersions.js.map +1 -0
  829. package/dist/util/toInt.js +9 -0
  830. package/dist/util/toInt.js.map +1 -0
  831. package/dist/util/trimHashFromVersion.js +8 -0
  832. package/dist/util/trimHashFromVersion.js.map +1 -0
  833. package/dist/util/uniqBy.js +14 -0
  834. package/dist/util/uniqBy.js.map +1 -0
  835. package/dist/util/validation/validateDocumentsUtils.js +33 -0
  836. package/dist/util/validation/validateDocumentsUtils.js.map +1 -0
  837. package/dist/util/warnAboutMissingAppId.js +15 -0
  838. package/dist/util/warnAboutMissingAppId.js.map +1 -0
  839. package/dist/util/warnOnNonProductionEnvironment.js +18 -0
  840. package/dist/util/warnOnNonProductionEnvironment.js.map +1 -0
  841. package/dist/util/workerChannels.js +172 -0
  842. package/dist/util/workerChannels.js.map +1 -0
  843. package/oclif.config.js +21 -0
  844. package/oclif.manifest.json +4154 -0
  845. package/package.json +138 -98
  846. package/templates/app-quickstart/src/App.css +3 -1
  847. package/templates/app-quickstart/src/App.tsx +1 -1
  848. package/templates/app-sanity-ui/src/App.tsx +2 -2
  849. package/templates/app-sanity-ui/src/ExampleComponent.tsx +2 -1
  850. package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +3 -3
  851. package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +2 -2
  852. package/templates/shopify/components/hotspots/ProductTooltip.tsx +1 -1
  853. package/templates/shopify/components/icons/Shopify.tsx +0 -2
  854. package/templates/shopify/components/inputs/CollectionHidden.tsx +0 -1
  855. package/templates/shopify/components/media/ColorTheme.tsx +1 -1
  856. package/templates/shopify/constants.ts +4 -4
  857. package/templates/shopify/plugins/customDocumentActions/index.ts +2 -2
  858. package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +1 -1
  859. package/templates/shopify/schemaTypes/documents/collection.tsx +1 -2
  860. package/templates/shopify/schemaTypes/documents/page.ts +1 -1
  861. package/templates/shopify/schemaTypes/documents/product.tsx +1 -1
  862. package/templates/shopify/schemaTypes/documents/productVariant.tsx +2 -3
  863. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +0 -1
  864. package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +1 -3
  865. package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +0 -1
  866. package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +2 -3
  867. package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +1 -1
  868. package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +1 -2
  869. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +1 -2
  870. package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +7 -7
  871. package/templates/shopify/schemaTypes/singletons/homeType.ts +8 -8
  872. package/templates/shopify/structure/collectionStructure.ts +4 -1
  873. package/templates/shopify/structure/colorThemeStructure.ts +1 -1
  874. package/templates/shopify/structure/homeStructure.ts +2 -2
  875. package/templates/shopify/structure/index.ts +1 -1
  876. package/templates/shopify/structure/pageStructure.ts +2 -2
  877. package/templates/shopify/structure/productStructure.ts +7 -7
  878. package/templates/shopify/structure/settingStructure.ts +1 -1
  879. package/templates/shopify/utils/defineStructure.ts +1 -1
  880. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +1 -1
  881. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +1 -1
  882. package/templates/shopify-online-storefront/structure/collectionStructure.ts +4 -1
  883. package/templates/shopify-online-storefront/structure/productStructure.ts +4 -4
  884. package/templates/shopify-online-storefront/utils/defineStructure.ts +1 -1
  885. package/bin/dev.js +0 -30
  886. package/bin/sanity +0 -14
  887. package/lib/_chunks-cjs/cli.js +0 -70870
  888. package/lib/_chunks-cjs/cli.js.map +0 -1
  889. package/lib/_chunks-cjs/cliWorker.js +0 -19
  890. package/lib/_chunks-cjs/cliWorker.js.map +0 -1
  891. package/lib/_chunks-cjs/generateAction.js +0 -128
  892. package/lib/_chunks-cjs/generateAction.js.map +0 -1
  893. package/lib/_chunks-cjs/getCliConfig.js +0 -89
  894. package/lib/_chunks-cjs/getCliConfig.js.map +0 -1
  895. package/lib/_chunks-cjs/index.js +0 -31
  896. package/lib/_chunks-cjs/index.js.map +0 -1
  897. package/lib/_chunks-cjs/journeyConfig.js +0 -113
  898. package/lib/_chunks-cjs/journeyConfig.js.map +0 -1
  899. package/lib/_chunks-cjs/loadEnv.js +0 -347
  900. package/lib/_chunks-cjs/loadEnv.js.map +0 -1
  901. package/lib/_chunks-dts/types.d.ts +0 -432
  902. package/lib/cli.d.ts +0 -7
  903. package/lib/cli.js +0 -10
  904. package/lib/cli.js.map +0 -1
  905. package/lib/index.d.ts +0 -44
  906. package/lib/index.js +0 -46
  907. package/lib/index.js.map +0 -1
  908. package/lib/run.d.ts +0 -1
  909. package/lib/run.js +0 -8
  910. package/lib/run.js.map +0 -1
  911. package/lib/workers/getAndWriteJourneySchema.d.ts +0 -1
  912. package/lib/workers/getAndWriteJourneySchema.js +0 -4
  913. package/lib/workers/getAndWriteJourneySchema.js.map +0 -1
  914. package/lib/workers/getCliConfig.d.ts +0 -1
  915. package/lib/workers/getCliConfig.js +0 -10
  916. package/lib/workers/getCliConfig.js.map +0 -1
  917. package/lib/workers/typegenGenerate.d.ts +0 -18
  918. package/lib/workers/typegenGenerate.js +0 -47
  919. package/lib/workers/typegenGenerate.js.map +0 -1
@@ -0,0 +1,213 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { createReadStream } from 'node:fs';
3
+ import fs, { mkdtemp } from 'node:fs/promises';
4
+ import { tmpdir } from 'node:os';
5
+ import path from 'node:path';
6
+ import { text } from 'node:stream/consumers';
7
+ import { pipeline } from 'node:stream/promises';
8
+ import { styleText } from 'node:util';
9
+ import gunzipMaybe from 'gunzip-maybe';
10
+ // @ts-expect-error `peek-stream` module currently untyped
11
+ import isTar from 'is-tar';
12
+ // @ts-expect-error `peek-stream` module currently untyped
13
+ import peek from 'peek-stream';
14
+ import { catchError, EMPTY, filter, from, map, mergeMap, mergeWith, of, switchMap, tap, zip } from 'rxjs';
15
+ import tar from 'tar-fs';
16
+ import { glob } from 'tinyglobby';
17
+ import { findNdjsonEntry } from '../../util/findNdjsonEntry.js';
18
+ import { importMediaDebug } from './importMediaDebug.js';
19
+ const DEFAULT_CONCURRENCY = 6;
20
+ export function importer(options) {
21
+ return resolveSource(options).pipe(mergeMap(({ aspectsNdjsonPath, files, images, workingPath })=>{
22
+ const fileCount = files.length + images.length;
23
+ if (fileCount === 0) {
24
+ throw new Error('No assets to import');
25
+ }
26
+ const context = {
27
+ ...options,
28
+ ndjson: ()=>createReadStream(aspectsNdjsonPath),
29
+ workingPath
30
+ };
31
+ return from(files).pipe(switchMap((file)=>zip(of('file'), of(file))), mergeWith(from(images).pipe(switchMap((file)=>zip(of('image'), of(file))))), fetchExistingAssets(context), uploadAsset(context), resolveAspectData(context), setAspects(context), map((asset)=>({
32
+ asset,
33
+ fileCount
34
+ })));
35
+ }));
36
+ }
37
+ /**
38
+ * @internal
39
+ */ export function resolveSource({ sourcePath }) {
40
+ return from(fs.stat(sourcePath)).pipe(switchMap((stats)=>{
41
+ return stats.isDirectory() ? of(sourcePath) : from(mkdtemp(path.join(tmpdir(), 'sanity-media-library-import'))).pipe(switchMap((tempPath)=>{
42
+ return from(pipeline(createReadStream(sourcePath), gunzipMaybe(), untarMaybe(tempPath))).pipe(map(()=>tempPath));
43
+ }));
44
+ }), switchMap((importSourcePath)=>{
45
+ return from(glob([
46
+ '**/data.ndjson'
47
+ ], {
48
+ absolute: true,
49
+ cwd: importSourcePath,
50
+ deep: 2
51
+ })).pipe(map(([aspectsNdjsonPath])=>({
52
+ aspectsNdjsonPath,
53
+ importSourcePath,
54
+ workingPath: aspectsNdjsonPath === undefined ? importSourcePath : path.dirname(aspectsNdjsonPath)
55
+ })));
56
+ }), tap(({ aspectsNdjsonPath, importSourcePath })=>{
57
+ if (aspectsNdjsonPath === undefined) {
58
+ throw new Error(`No ${styleText('bold', 'data.ndjson')} file found in import source ${styleText('bold', importSourcePath)}`);
59
+ }
60
+ importMediaDebug(`[Found NDJSON file] ${aspectsNdjsonPath}`);
61
+ }), switchMap(({ aspectsNdjsonPath, workingPath })=>{
62
+ return from(Promise.all([
63
+ glob([
64
+ 'files/*'
65
+ ], {
66
+ cwd: workingPath
67
+ }),
68
+ glob([
69
+ 'images/*'
70
+ ], {
71
+ cwd: workingPath
72
+ })
73
+ ])).pipe(map(([files, images])=>({
74
+ aspectsNdjsonPath,
75
+ files,
76
+ images,
77
+ workingPath
78
+ })));
79
+ }));
80
+ }
81
+ /**
82
+ * Untar the stream if its contents appear to be tarred.
83
+ *
84
+ * @internal
85
+ */ function untarMaybe(outputPath) {
86
+ // @ts-expect-error `peek-stream` module currently untyped
87
+ return peek({
88
+ maxBuffer: 300,
89
+ newline: false
90
+ }, (data, swap)=>{
91
+ if (isTar(data)) {
92
+ return swap(null, tar.extract(outputPath));
93
+ }
94
+ return swap(null);
95
+ });
96
+ }
97
+ /**
98
+ * Fetch the ids of all asset documents that reference the input asset.
99
+ * The input asset is identified by its SHA-1 hash.
100
+ *
101
+ * @internal
102
+ */ function fetchAssetsByHash({ client, type }) {
103
+ return switchMap((hash)=>client.observable.fetch(`*[
104
+ _type == "sanity.asset" &&
105
+ currentVersion._ref == *[
106
+ _type == $type &&
107
+ sha1hash == $hash
108
+ ][0]._id
109
+ ]._id`, {
110
+ hash,
111
+ type: [
112
+ 'sanity',
113
+ `${type}Asset`
114
+ ].join('.')
115
+ }, {
116
+ tag: 'asset.getId'
117
+ }).pipe(switchMap((assetIds)=>zip(of(hash), of(assetIds)))));
118
+ }
119
+ function fetchExistingAssets({ client, workingPath }) {
120
+ return mergeMap(([type, asset])=>{
121
+ const createSha1Hash = createHash('sha1');
122
+ const sha1hash = text(createReadStream(path.join(workingPath, asset)).pipe(createSha1Hash).setEncoding('hex'));
123
+ return from(sha1hash).pipe(tap((hash)=>importMediaDebug(`[Asset ${asset}] Checking for ${type} asset with hash ${hash}`)), fetchAssetsByHash({
124
+ client,
125
+ type
126
+ }), map(([hash, assetIds])=>{
127
+ if (assetIds.length === 0) {
128
+ return [
129
+ type,
130
+ asset,
131
+ hash
132
+ ];
133
+ }
134
+ return {
135
+ assetIds,
136
+ isExistingAsset: true,
137
+ originalFilename: asset,
138
+ sha1Hash: hash
139
+ };
140
+ }));
141
+ });
142
+ }
143
+ /**
144
+ * Find the first matching entry in the provided NDJSON stream and attach it to the asset object.
145
+ *
146
+ * @internal
147
+ */ function resolveAspectData({ ndjson }) {
148
+ return mergeMap((resolvedAsset)=>from(findNdjsonEntry(ndjson(), (line)=>typeof line === 'object' && line !== null && 'filename' in line && line.filename === resolvedAsset.originalFilename)).pipe(map((aspectsFromImport)=>({
149
+ ...resolvedAsset,
150
+ aspects: aspectsFromImport?.aspects
151
+ }))));
152
+ }
153
+ // TODO: Batch mutations to reduce HTTP request count.
154
+ export function setAspects({ client, replaceAspects }) {
155
+ return mergeMap((asset)=>{
156
+ const { aspects, assetIds, isExistingAsset } = asset;
157
+ if (isExistingAsset && !replaceAspects) {
158
+ importMediaDebug(`[Asset ${asset.originalFilename}] Skipping replacement of existing aspects`);
159
+ return of(asset);
160
+ }
161
+ if (aspects === undefined) {
162
+ importMediaDebug(`[Asset ${asset.originalFilename}] No aspects to import`);
163
+ return of(asset);
164
+ }
165
+ const transaction = client.observable.transaction();
166
+ for (const assetId of assetIds){
167
+ transaction.patch(assetId, {
168
+ set: {
169
+ aspects
170
+ }
171
+ });
172
+ }
173
+ importMediaDebug(`[Asset ${asset.originalFilename}] Setting aspects on asset documents ${JSON.stringify(assetIds)}`);
174
+ return transaction.commit({
175
+ tag: 'asset.setAspects',
176
+ visibility: 'async'
177
+ }).pipe(map(()=>asset));
178
+ }, DEFAULT_CONCURRENCY);
179
+ }
180
+ function uploadAsset({ client, workingPath }) {
181
+ return mergeMap((maybeResolvedAsset)=>{
182
+ if ('assetIds' in maybeResolvedAsset) {
183
+ importMediaDebug(`[Asset ${maybeResolvedAsset.originalFilename}] Skipping upload of existing asset with hash ${maybeResolvedAsset.sha1Hash}`);
184
+ return of(maybeResolvedAsset);
185
+ }
186
+ const [type, asset, hash] = maybeResolvedAsset;
187
+ importMediaDebug(`[Asset ${asset}] Uploading new asset`);
188
+ return client.observable.assets.upload(type, createReadStream(path.join(workingPath, asset)), {
189
+ tag: 'asset.upload'
190
+ }).pipe(catchError((error)=>{
191
+ // An asset matching the hash was not found during previous steps, but appears to exist upon upload.
192
+ //
193
+ // This may occur if:
194
+ // - The asset was uploaded by another client since the check was performed.
195
+ // - The asset instance document exists, but is not referenced by any asset document.
196
+ if (error.statusCode === 409) {
197
+ importMediaDebug(`[Asset ${asset}] Cannot overwrite existing ${type} asset with hash ${hash}`);
198
+ return EMPTY;
199
+ }
200
+ return EMPTY;
201
+ }), filter((response)=>response.type === 'response'), tap(()=>importMediaDebug(`[Asset ${asset}] Finished uploading new asset`)), // TODO: The `client.assets.upload` method should return `MediaLibraryUploadResponse` when operating on Media Library resources. When that occurs, this type assertion can be removed.
202
+ map((response)=>response.body), map((result)=>({
203
+ assetIds: [
204
+ result.asset._id
205
+ ],
206
+ isExistingAsset: false,
207
+ originalFilename: asset,
208
+ sha1Hash: hash
209
+ })));
210
+ }, DEFAULT_CONCURRENCY);
211
+ }
212
+
213
+ //# sourceMappingURL=importMedia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/media/importMedia.ts"],"sourcesContent":["import {createHash} from 'node:crypto'\nimport {createReadStream, type ReadStream} from 'node:fs'\nimport fs, {mkdtemp} from 'node:fs/promises'\nimport {tmpdir} from 'node:os'\nimport path from 'node:path'\nimport {text} from 'node:stream/consumers'\nimport {pipeline} from 'node:stream/promises'\nimport {styleText} from 'node:util'\n\nimport {spinner} from '@sanity/cli-core/ux'\nimport {type SanityClient} from '@sanity/client'\nimport {type FileAsset, type ImageAsset, type SanityDocument} from '@sanity/types'\nimport gunzipMaybe from 'gunzip-maybe'\n// @ts-expect-error `peek-stream` module currently untyped\nimport isTar from 'is-tar'\n// @ts-expect-error `peek-stream` module currently untyped\nimport peek from 'peek-stream'\nimport {\n catchError,\n EMPTY,\n filter,\n from,\n map,\n mergeMap,\n mergeWith,\n type Observable,\n of,\n type OperatorFunction,\n switchMap,\n tap,\n zip,\n} from 'rxjs'\nimport tar from 'tar-fs'\nimport {glob} from 'tinyglobby'\n\nimport {findNdjsonEntry} from '../../util/findNdjsonEntry.js'\nimport {importMediaDebug} from './importMediaDebug.js'\n\nconst DEFAULT_CONCURRENCY = 6\n\ninterface MediaLibraryUploadResult {\n asset: SanityDocument & {\n _type: 'sanity.asset'\n aspects: unknown\n assetType: FileAsset['_type'] | ImageAsset['_type']\n }\n assetInstance: FileAsset | ImageAsset\n}\n\ninterface MediaLibraryUploadResponse {\n body: MediaLibraryUploadResult\n type: 'response'\n}\n\nexport interface State {\n /**\n * The last asset processed.\n */\n asset: AssetWithAspects\n /**\n * The count of input files.\n */\n fileCount: number\n}\n\ninterface ResolvedAsset {\n /**\n * The ids of the `sanity.asset` documents that currently refer to the asset.\n *\n * These documents contain aspects, and reference an asset instance document.\n */\n assetIds: string[]\n isExistingAsset: boolean\n /**\n * The original filename of the asset as it appears in the import source.\n *\n * Note: Currently includes `images/` or `files/` prefix.\n */\n originalFilename: string\n sha1Hash: string\n}\n\nexport type AssetWithAspects<Asset extends ResolvedAsset = ResolvedAsset> = Asset & {\n aspects: unknown | undefined\n}\n\ninterface Options {\n client: SanityClient\n replaceAspects: boolean\n sourcePath: string\n spinner: ReturnType<typeof spinner>\n}\n\ninterface Context extends Options {\n ndjson: () => ReadStream\n workingPath: string\n}\n\nexport function importer(options: Options): Observable<State> {\n return resolveSource(options).pipe(\n mergeMap(({aspectsNdjsonPath, files, images, workingPath}) => {\n const fileCount = files.length + images.length\n\n if (fileCount === 0) {\n throw new Error('No assets to import')\n }\n\n const context: Context = {\n ...options,\n ndjson: () => createReadStream(aspectsNdjsonPath),\n workingPath,\n }\n\n return from(files).pipe(\n switchMap((file) => zip(of<'file'>('file'), of(file))),\n mergeWith(from(images).pipe(switchMap((file) => zip(of<'image'>('image'), of(file))))),\n fetchExistingAssets(context),\n uploadAsset(context),\n resolveAspectData(context),\n setAspects(context),\n map((asset) => ({\n asset,\n fileCount,\n })),\n )\n }),\n )\n}\n\n/**\n * @internal\n */\nexport function resolveSource({sourcePath}: Pick<Context, 'sourcePath'>): Observable<{\n aspectsNdjsonPath: string\n files: string[]\n images: string[]\n workingPath: string\n}> {\n return from(fs.stat(sourcePath)).pipe(\n switchMap((stats) => {\n return stats.isDirectory()\n ? of(sourcePath)\n : from(mkdtemp(path.join(tmpdir(), 'sanity-media-library-import'))).pipe(\n switchMap((tempPath) => {\n return from(\n pipeline(createReadStream(sourcePath), gunzipMaybe(), untarMaybe(tempPath)),\n ).pipe(map(() => tempPath))\n }),\n )\n }),\n switchMap((importSourcePath) => {\n return from(\n glob(['**/data.ndjson'], {\n absolute: true,\n cwd: importSourcePath,\n deep: 2,\n }),\n ).pipe(\n map(([aspectsNdjsonPath]) => ({\n aspectsNdjsonPath,\n importSourcePath,\n workingPath:\n aspectsNdjsonPath === undefined ? importSourcePath : path.dirname(aspectsNdjsonPath),\n })),\n )\n }),\n tap(({aspectsNdjsonPath, importSourcePath}) => {\n if (aspectsNdjsonPath === undefined) {\n throw new Error(\n `No ${styleText('bold', 'data.ndjson')} file found in import source ${styleText('bold', importSourcePath)}`,\n )\n }\n importMediaDebug(`[Found NDJSON file] ${aspectsNdjsonPath}`)\n }),\n switchMap(({aspectsNdjsonPath, workingPath}) => {\n return from(\n Promise.all([\n glob(['files/*'], {\n cwd: workingPath,\n }),\n glob(['images/*'], {\n cwd: workingPath,\n }),\n ]),\n ).pipe(\n map(([files, images]) => ({\n aspectsNdjsonPath,\n files,\n images,\n workingPath,\n })),\n )\n }),\n )\n}\n\n/**\n * Untar the stream if its contents appear to be tarred.\n *\n * @internal\n */\nfunction untarMaybe(outputPath: string) {\n // @ts-expect-error `peek-stream` module currently untyped\n return peek({maxBuffer: 300, newline: false}, (data, swap) => {\n if (isTar(data)) {\n return swap(null, tar.extract(outputPath))\n }\n\n return swap(null)\n })\n}\n\n/**\n * Fetch the ids of all asset documents that reference the input asset.\n * The input asset is identified by its SHA-1 hash.\n *\n * @internal\n */\nfunction fetchAssetsByHash({\n client,\n type,\n}: {\n client: SanityClient\n type: 'file' | 'image'\n}): OperatorFunction<string, [hash: string, assetIds: string[]]> {\n return switchMap((hash) =>\n client.observable\n .fetch<string[]>(\n `*[\n _type == \"sanity.asset\" &&\n currentVersion._ref == *[\n _type == $type &&\n sha1hash == $hash\n ][0]._id\n ]._id`,\n {\n hash,\n type: ['sanity', `${type}Asset`].join('.'),\n },\n {\n tag: 'asset.getId',\n },\n )\n .pipe(switchMap((assetIds) => zip(of(hash), of(assetIds)))),\n )\n}\n\nfunction fetchExistingAssets({\n client,\n workingPath,\n}: Context): OperatorFunction<\n [type: 'file' | 'image', asset: string],\n [type: 'file' | 'image', asset: string, hash: string] | ResolvedAsset\n> {\n return mergeMap(([type, asset]) => {\n const createSha1Hash = createHash('sha1')\n\n const sha1hash = text(\n createReadStream(path.join(workingPath, asset)).pipe(createSha1Hash).setEncoding('hex'),\n )\n\n return from(sha1hash).pipe(\n tap((hash) =>\n importMediaDebug(`[Asset ${asset}] Checking for ${type} asset with hash ${hash}`),\n ),\n fetchAssetsByHash({client, type}),\n map<\n [string, string[]],\n [type: 'file' | 'image', asset: string, hash: string] | ResolvedAsset\n >(([hash, assetIds]) => {\n if (assetIds.length === 0) {\n return [type, asset, hash]\n }\n\n return {\n assetIds,\n isExistingAsset: true,\n originalFilename: asset,\n sha1Hash: hash,\n }\n }),\n )\n })\n}\n\n/**\n * Find the first matching entry in the provided NDJSON stream and attach it to the asset object.\n *\n * @internal\n */\nfunction resolveAspectData({ndjson}: Context): OperatorFunction<ResolvedAsset, AssetWithAspects> {\n return mergeMap((resolvedAsset) =>\n from(\n findNdjsonEntry<{aspects: unknown}>(\n ndjson(),\n (line) =>\n typeof line === 'object' &&\n line !== null &&\n 'filename' in line &&\n line.filename === resolvedAsset.originalFilename,\n ),\n ).pipe(\n map((aspectsFromImport) => ({\n ...resolvedAsset,\n aspects: aspectsFromImport?.aspects,\n })),\n ),\n )\n}\n\n// TODO: Batch mutations to reduce HTTP request count.\nexport function setAspects({\n client,\n replaceAspects,\n}: Pick<Context, 'client' | 'replaceAspects'>): OperatorFunction<\n AssetWithAspects,\n AssetWithAspects\n> {\n return mergeMap((asset) => {\n const {aspects, assetIds, isExistingAsset} = asset\n\n if (isExistingAsset && !replaceAspects) {\n importMediaDebug(`[Asset ${asset.originalFilename}] Skipping replacement of existing aspects`)\n return of(asset)\n }\n\n if (aspects === undefined) {\n importMediaDebug(`[Asset ${asset.originalFilename}] No aspects to import`)\n return of(asset)\n }\n\n const transaction = client.observable.transaction()\n for (const assetId of assetIds) {\n transaction.patch(assetId, {set: {aspects}})\n }\n\n importMediaDebug(\n `[Asset ${asset.originalFilename}] Setting aspects on asset documents ${JSON.stringify(assetIds)}`,\n )\n\n return transaction\n .commit({\n tag: 'asset.setAspects',\n visibility: 'async',\n })\n .pipe(map(() => asset))\n }, DEFAULT_CONCURRENCY)\n}\n\nfunction uploadAsset({\n client,\n workingPath,\n}: Context): OperatorFunction<\n [type: 'file' | 'image', asset: string, hash: string] | ResolvedAsset,\n ResolvedAsset\n> {\n return mergeMap((maybeResolvedAsset) => {\n if ('assetIds' in maybeResolvedAsset) {\n importMediaDebug(\n `[Asset ${maybeResolvedAsset.originalFilename}] Skipping upload of existing asset with hash ${maybeResolvedAsset.sha1Hash}`,\n )\n return of(maybeResolvedAsset)\n }\n\n const [type, asset, hash] = maybeResolvedAsset\n importMediaDebug(`[Asset ${asset}] Uploading new asset`)\n\n return client.observable.assets\n .upload(type, createReadStream(path.join(workingPath, asset)), {\n tag: 'asset.upload',\n })\n .pipe(\n catchError((error) => {\n // An asset matching the hash was not found during previous steps, but appears to exist upon upload.\n //\n // This may occur if:\n // - The asset was uploaded by another client since the check was performed.\n // - The asset instance document exists, but is not referenced by any asset document.\n if (error.statusCode === 409) {\n importMediaDebug(\n `[Asset ${asset}] Cannot overwrite existing ${type} asset with hash ${hash}`,\n )\n return EMPTY\n }\n return EMPTY\n }),\n filter((response) => response.type === 'response'),\n tap(() => importMediaDebug(`[Asset ${asset}] Finished uploading new asset`)),\n // TODO: The `client.assets.upload` method should return `MediaLibraryUploadResponse` when operating on Media Library resources. When that occurs, this type assertion can be removed.\n map((response) => (response as unknown as MediaLibraryUploadResponse).body),\n map<MediaLibraryUploadResult, ResolvedAsset>((result) => ({\n assetIds: [result.asset._id],\n isExistingAsset: false,\n originalFilename: asset,\n sha1Hash: hash,\n })),\n )\n }, DEFAULT_CONCURRENCY)\n}\n"],"names":["createHash","createReadStream","fs","mkdtemp","tmpdir","path","text","pipeline","styleText","gunzipMaybe","isTar","peek","catchError","EMPTY","filter","from","map","mergeMap","mergeWith","of","switchMap","tap","zip","tar","glob","findNdjsonEntry","importMediaDebug","DEFAULT_CONCURRENCY","importer","options","resolveSource","pipe","aspectsNdjsonPath","files","images","workingPath","fileCount","length","Error","context","ndjson","file","fetchExistingAssets","uploadAsset","resolveAspectData","setAspects","asset","sourcePath","stat","stats","isDirectory","join","tempPath","untarMaybe","importSourcePath","absolute","cwd","deep","undefined","dirname","Promise","all","outputPath","maxBuffer","newline","data","swap","extract","fetchAssetsByHash","client","type","hash","observable","fetch","tag","assetIds","createSha1Hash","sha1hash","setEncoding","isExistingAsset","originalFilename","sha1Hash","resolvedAsset","line","filename","aspectsFromImport","aspects","replaceAspects","transaction","assetId","patch","set","JSON","stringify","commit","visibility","maybeResolvedAsset","assets","upload","error","statusCode","response","body","result","_id"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { subdebug } from '@sanity/cli-core';
2
+ export const importMediaDebug = subdebug('media:import');
3
+
4
+ //# sourceMappingURL=importMediaDebug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/media/importMediaDebug.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core'\n\nexport const importMediaDebug = subdebug('media:import')\n"],"names":["subdebug","importMediaDebug"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,mBAAkB;AAEzC,OAAO,MAAMC,mBAAmBD,SAAS,gBAAe"}
@@ -0,0 +1,67 @@
1
+ import { subdebug } from '@sanity/cli-core';
2
+ import { select, spinner } from '@sanity/cli-core/ux';
3
+ import { promptForOrganizationName } from '../../prompts/promptForOrganizationName.js';
4
+ import { createOrganization, listOrganizations } from '../../services/organizations.js';
5
+ import { getOrganizationChoices } from './getOrganizationChoices.js';
6
+ import { getOrganizationsWithAttachGrantInfo } from './getOrganizationsWithAttachGrantInfo.js';
7
+ const debug = subdebug('getOrganizationId');
8
+ const promptAndCreateNewOrganization = async (user)=>{
9
+ const organizationName = await promptForOrganizationName(user);
10
+ const spin = spinner('Creating organization').start();
11
+ const newOrganization = await createOrganization(organizationName);
12
+ spin.succeed();
13
+ return newOrganization;
14
+ };
15
+ export async function getOrganization({ isUnattended, output, requestedId, user }) {
16
+ // Get available organizations
17
+ const spin = spinner('Loading organizations').start();
18
+ let organizations;
19
+ try {
20
+ organizations = await listOrganizations();
21
+ spin.succeed();
22
+ } catch (error) {
23
+ spin.fail();
24
+ debug('Error retrieving organization list', error);
25
+ throw error;
26
+ }
27
+ // If organization is specified, validate it
28
+ if (requestedId) {
29
+ const org = organizations.find((o)=>o.id === requestedId || o.slug === requestedId);
30
+ if (org) return org;
31
+ throw new Error(`Organization "${requestedId}" not found or you don't have access to it`);
32
+ }
33
+ // If the user has no organizations, prompt them to create one with the same name as
34
+ // their user, but allow them to customize it if they want
35
+ if (organizations.length === 0) {
36
+ output.log('You need to create an organization to create projects.');
37
+ return promptAndCreateNewOrganization(user);
38
+ }
39
+ // If the user has organizations, let them choose from them, but also allow them to
40
+ // create a new one in case they do not have access to any of them, or they want to
41
+ // create a personal/other organization.
42
+ debug(`User has ${organizations.length} organization(s), checking attach access`);
43
+ const withGrantInfo = await getOrganizationsWithAttachGrantInfo(organizations);
44
+ const withAttach = withGrantInfo.filter(({ hasAttachGrant })=>hasAttachGrant);
45
+ debug('User has attach access to %d organizations.', withAttach.length);
46
+ const organizationChoices = getOrganizationChoices(withAttach);
47
+ // In unattended mode use defaults without prompting
48
+ if (isUnattended) {
49
+ // Use the first organization with attach permissions
50
+ return withAttach.length > 0 ? withAttach[0].organization : undefined;
51
+ }
52
+ // If the user only has a single organization (and they have attach access to it),
53
+ // we'll default to that one. Otherwise, we'll default to the organization with the
54
+ // same name as the user if it exists.
55
+ const defaultOrganizationId = withAttach.length === 1 ? withAttach[0].organization.id : organizations.find((org)=>org.name === user?.name)?.id;
56
+ const chosenOrg = await select({
57
+ choices: organizationChoices,
58
+ default: defaultOrganizationId || undefined,
59
+ message: 'Select organization:'
60
+ });
61
+ if (chosenOrg === '-new-') {
62
+ return promptAndCreateNewOrganization(user);
63
+ }
64
+ return organizations.find((org)=>org.id === chosenOrg);
65
+ }
66
+
67
+ //# sourceMappingURL=getOrganization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/organizations/getOrganization.ts"],"sourcesContent":["import {Output, type SanityOrgUser, subdebug} from '@sanity/cli-core'\nimport {select, spinner} from '@sanity/cli-core/ux'\n\nimport {promptForOrganizationName} from '../../prompts/promptForOrganizationName.js'\nimport {\n createOrganization,\n listOrganizations,\n type ProjectOrganization,\n} from '../../services/organizations.js'\nimport {getOrganizationChoices} from './getOrganizationChoices.js'\nimport {getOrganizationsWithAttachGrantInfo} from './getOrganizationsWithAttachGrantInfo.js'\n\nconst debug = subdebug('getOrganizationId')\n\ninterface GetOrganizationOptions {\n isUnattended: boolean\n output: Output\n requestedId: string | undefined\n user: SanityOrgUser\n}\n\nconst promptAndCreateNewOrganization = async (user: SanityOrgUser) => {\n const organizationName = await promptForOrganizationName(user)\n const spin = spinner('Creating organization').start()\n const newOrganization = await createOrganization(organizationName)\n spin.succeed()\n return newOrganization\n}\n\nexport async function getOrganization({\n isUnattended,\n output,\n requestedId,\n user,\n}: GetOrganizationOptions) {\n // Get available organizations\n const spin = spinner('Loading organizations').start()\n let organizations: ProjectOrganization[]\n try {\n organizations = await listOrganizations()\n spin.succeed()\n } catch (error) {\n spin.fail()\n debug('Error retrieving organization list', error)\n throw error\n }\n\n // If organization is specified, validate it\n if (requestedId) {\n const org = organizations.find((o) => o.id === requestedId || o.slug === requestedId)\n if (org) return org\n\n throw new Error(`Organization \"${requestedId}\" not found or you don't have access to it`)\n }\n\n // If the user has no organizations, prompt them to create one with the same name as\n // their user, but allow them to customize it if they want\n if (organizations.length === 0) {\n output.log('You need to create an organization to create projects.')\n return promptAndCreateNewOrganization(user)\n }\n\n // If the user has organizations, let them choose from them, but also allow them to\n // create a new one in case they do not have access to any of them, or they want to\n // create a personal/other organization.\n debug(`User has ${organizations.length} organization(s), checking attach access`)\n const withGrantInfo = await getOrganizationsWithAttachGrantInfo(organizations)\n const withAttach = withGrantInfo.filter(({hasAttachGrant}) => hasAttachGrant)\n\n debug('User has attach access to %d organizations.', withAttach.length)\n const organizationChoices = getOrganizationChoices(withAttach)\n\n // In unattended mode use defaults without prompting\n if (isUnattended) {\n // Use the first organization with attach permissions\n return withAttach.length > 0 ? withAttach[0].organization : undefined\n }\n\n // If the user only has a single organization (and they have attach access to it),\n // we'll default to that one. Otherwise, we'll default to the organization with the\n // same name as the user if it exists.\n const defaultOrganizationId =\n withAttach.length === 1\n ? withAttach[0].organization.id\n : organizations.find((org) => org.name === user?.name)?.id\n\n const chosenOrg = await select({\n choices: organizationChoices,\n default: defaultOrganizationId || undefined,\n message: 'Select organization:',\n })\n\n if (chosenOrg === '-new-') {\n return promptAndCreateNewOrganization(user)\n }\n\n return organizations.find((org) => org.id === chosenOrg)\n}\n"],"names":["subdebug","select","spinner","promptForOrganizationName","createOrganization","listOrganizations","getOrganizationChoices","getOrganizationsWithAttachGrantInfo","debug","promptAndCreateNewOrganization","user","organizationName","spin","start","newOrganization","succeed","getOrganization","isUnattended","output","requestedId","organizations","error","fail","org","find","o","id","slug","Error","length","log","withGrantInfo","withAttach","filter","hasAttachGrant","organizationChoices","organization","undefined","defaultOrganizationId","name","chosenOrg","choices","default","message"],"mappings":"AAAA,SAAoCA,QAAQ,QAAO,mBAAkB;AACrE,SAAQC,MAAM,EAAEC,OAAO,QAAO,sBAAqB;AAEnD,SAAQC,yBAAyB,QAAO,6CAA4C;AACpF,SACEC,kBAAkB,EAClBC,iBAAiB,QAEZ,kCAAiC;AACxC,SAAQC,sBAAsB,QAAO,8BAA6B;AAClE,SAAQC,mCAAmC,QAAO,2CAA0C;AAE5F,MAAMC,QAAQR,SAAS;AASvB,MAAMS,iCAAiC,OAAOC;IAC5C,MAAMC,mBAAmB,MAAMR,0BAA0BO;IACzD,MAAME,OAAOV,QAAQ,yBAAyBW,KAAK;IACnD,MAAMC,kBAAkB,MAAMV,mBAAmBO;IACjDC,KAAKG,OAAO;IACZ,OAAOD;AACT;AAEA,OAAO,eAAeE,gBAAgB,EACpCC,YAAY,EACZC,MAAM,EACNC,WAAW,EACXT,IAAI,EACmB;IACvB,8BAA8B;IAC9B,MAAME,OAAOV,QAAQ,yBAAyBW,KAAK;IACnD,IAAIO;IACJ,IAAI;QACFA,gBAAgB,MAAMf;QACtBO,KAAKG,OAAO;IACd,EAAE,OAAOM,OAAO;QACdT,KAAKU,IAAI;QACTd,MAAM,sCAAsCa;QAC5C,MAAMA;IACR;IAEA,4CAA4C;IAC5C,IAAIF,aAAa;QACf,MAAMI,MAAMH,cAAcI,IAAI,CAAC,CAACC,IAAMA,EAAEC,EAAE,KAAKP,eAAeM,EAAEE,IAAI,KAAKR;QACzE,IAAII,KAAK,OAAOA;QAEhB,MAAM,IAAIK,MAAM,CAAC,cAAc,EAAET,YAAY,0CAA0C,CAAC;IAC1F;IAEA,oFAAoF;IACpF,0DAA0D;IAC1D,IAAIC,cAAcS,MAAM,KAAK,GAAG;QAC9BX,OAAOY,GAAG,CAAC;QACX,OAAOrB,+BAA+BC;IACxC;IAEA,mFAAmF;IACnF,mFAAmF;IACnF,wCAAwC;IACxCF,MAAM,CAAC,SAAS,EAAEY,cAAcS,MAAM,CAAC,wCAAwC,CAAC;IAChF,MAAME,gBAAgB,MAAMxB,oCAAoCa;IAChE,MAAMY,aAAaD,cAAcE,MAAM,CAAC,CAAC,EAACC,cAAc,EAAC,GAAKA;IAE9D1B,MAAM,+CAA+CwB,WAAWH,MAAM;IACtE,MAAMM,sBAAsB7B,uBAAuB0B;IAEnD,qDAAqD;IACrD,IAAIf,cAAc;QAChB,qDAAqD;QACrD,OAAOe,WAAWH,MAAM,GAAG,IAAIG,UAAU,CAAC,EAAE,CAACI,YAAY,GAAGC;IAC9D;IAEA,kFAAkF;IAClF,mFAAmF;IACnF,sCAAsC;IACtC,MAAMC,wBACJN,WAAWH,MAAM,KAAK,IAClBG,UAAU,CAAC,EAAE,CAACI,YAAY,CAACV,EAAE,GAC7BN,cAAcI,IAAI,CAAC,CAACD,MAAQA,IAAIgB,IAAI,KAAK7B,MAAM6B,OAAOb;IAE5D,MAAMc,YAAY,MAAMvC,OAAO;QAC7BwC,SAASN;QACTO,SAASJ,yBAAyBD;QAClCM,SAAS;IACX;IAEA,IAAIH,cAAc,SAAS;QACzB,OAAO/B,+BAA+BC;IACxC;IAEA,OAAOU,cAAcI,IAAI,CAAC,CAACD,MAAQA,IAAIG,EAAE,KAAKc;AAChD"}
@@ -0,0 +1,23 @@
1
+ export function getOrganizationChoices(withGrantInfo) {
2
+ const choices = withGrantInfo.map(({ hasAttachGrant, organization })=>({
3
+ disabled: hasAttachGrant ? false : 'Insufficient permissions',
4
+ name: `${organization.name} [${organization.id}]`,
5
+ value: organization.id
6
+ }));
7
+ choices.push({
8
+ disabled: true,
9
+ name: '─────────',
10
+ value: '---separator---'
11
+ }, {
12
+ disabled: false,
13
+ name: 'Create new organization',
14
+ value: '-new-'
15
+ }, {
16
+ disabled: true,
17
+ name: '─────────',
18
+ value: '---separator2---'
19
+ });
20
+ return choices;
21
+ }
22
+
23
+ //# sourceMappingURL=getOrganizationChoices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/organizations/getOrganizationChoices.ts"],"sourcesContent":["import {type OrganizationWithGrant} from '../../services/organizations.js'\n\nexport function getOrganizationChoices(withGrantInfo: OrganizationWithGrant[]): Array<{\n disabled: boolean | string\n name: string\n value: string\n}> {\n const choices = withGrantInfo.map(({hasAttachGrant, organization}) => ({\n disabled: hasAttachGrant ? false : 'Insufficient permissions',\n name: `${organization.name} [${organization.id}]`,\n value: organization.id,\n }))\n\n choices.push(\n {disabled: true, name: '─────────', value: '---separator---'},\n {disabled: false, name: 'Create new organization', value: '-new-'},\n {disabled: true, name: '─────────', value: '---separator2---'},\n )\n\n return choices\n}\n"],"names":["getOrganizationChoices","withGrantInfo","choices","map","hasAttachGrant","organization","disabled","name","id","value","push"],"mappings":"AAEA,OAAO,SAASA,uBAAuBC,aAAsC;IAK3E,MAAMC,UAAUD,cAAcE,GAAG,CAAC,CAAC,EAACC,cAAc,EAAEC,YAAY,EAAC,GAAM,CAAA;YACrEC,UAAUF,iBAAiB,QAAQ;YACnCG,MAAM,GAAGF,aAAaE,IAAI,CAAC,EAAE,EAAEF,aAAaG,EAAE,CAAC,CAAC,CAAC;YACjDC,OAAOJ,aAAaG,EAAE;QACxB,CAAA;IAEAN,QAAQQ,IAAI,CACV;QAACJ,UAAU;QAAMC,MAAM;QAAaE,OAAO;IAAiB,GAC5D;QAACH,UAAU;QAAOC,MAAM;QAA2BE,OAAO;IAAO,GACjE;QAACH,UAAU;QAAMC,MAAM;QAAaE,OAAO;IAAkB;IAG/D,OAAOP;AACT"}
@@ -0,0 +1,9 @@
1
+ import { hasProjectAttachGrant } from './hasProjectAttachGrant.js';
2
+ export async function getOrganizationsWithAttachGrantInfo(organizations) {
3
+ return Promise.all(organizations.map(async (organization)=>({
4
+ hasAttachGrant: await hasProjectAttachGrant(organization.id),
5
+ organization
6
+ })));
7
+ }
8
+
9
+ //# sourceMappingURL=getOrganizationsWithAttachGrantInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/organizations/getOrganizationsWithAttachGrantInfo.ts"],"sourcesContent":["import {type OrganizationWithGrant, type ProjectOrganization} from '../../services/organizations.js'\nimport {hasProjectAttachGrant} from './hasProjectAttachGrant.js'\n\nexport async function getOrganizationsWithAttachGrantInfo(\n organizations: ProjectOrganization[],\n): Promise<OrganizationWithGrant[]> {\n return Promise.all(\n organizations.map(async (organization) => ({\n hasAttachGrant: await hasProjectAttachGrant(organization.id),\n organization,\n })),\n )\n}\n"],"names":["hasProjectAttachGrant","getOrganizationsWithAttachGrantInfo","organizations","Promise","all","map","organization","hasAttachGrant","id"],"mappings":"AACA,SAAQA,qBAAqB,QAAO,6BAA4B;AAEhE,OAAO,eAAeC,oCACpBC,aAAoC;IAEpC,OAAOC,QAAQC,GAAG,CAChBF,cAAcG,GAAG,CAAC,OAAOC,eAAkB,CAAA;YACzCC,gBAAgB,MAAMP,sBAAsBM,aAAaE,EAAE;YAC3DF;QACF,CAAA;AAEJ"}
@@ -0,0 +1,24 @@
1
+ import { subdebug } from '@sanity/cli-core';
2
+ import { getOrganizationGrants } from '../../services/organizations.js';
3
+ const debug = subdebug('organizations');
4
+ export async function hasProjectAttachGrant(orgId) {
5
+ const requiredGrantGroup = 'sanity.organization.projects';
6
+ const requiredGrant = 'attach';
7
+ try {
8
+ const grants = await getOrganizationGrants(orgId);
9
+ const group = grants[requiredGrantGroup] || [];
10
+ return group.some((resource)=>resource.grants && resource.grants.some((grant)=>grant.name === requiredGrant));
11
+ } catch (err) {
12
+ // If we get a 401, it means we don't have access to this organization
13
+ // probably because of implicit membership
14
+ if ('statusCode' in err && err.statusCode === 401) {
15
+ debug('No access to organization %s (401)', orgId);
16
+ return false;
17
+ }
18
+ // For other errors, log them but still return false
19
+ debug('Error checking grants for organization %s: %s', orgId, err.message);
20
+ return false;
21
+ }
22
+ }
23
+
24
+ //# sourceMappingURL=hasProjectAttachGrant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/organizations/hasProjectAttachGrant.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core'\n\nimport {getOrganizationGrants} from '../../services/organizations.js'\n\nconst debug = subdebug('organizations')\n\nexport async function hasProjectAttachGrant(orgId: string) {\n const requiredGrantGroup = 'sanity.organization.projects'\n const requiredGrant = 'attach'\n\n try {\n const grants = await getOrganizationGrants(orgId)\n const group: {grants: {name: string}[]}[] = grants[requiredGrantGroup] || []\n return group.some(\n (resource) =>\n resource.grants && resource.grants.some((grant) => grant.name === requiredGrant),\n )\n } catch (err) {\n // If we get a 401, it means we don't have access to this organization\n // probably because of implicit membership\n if ('statusCode' in err && err.statusCode === 401) {\n debug('No access to organization %s (401)', orgId)\n return false\n }\n // For other errors, log them but still return false\n debug('Error checking grants for organization %s: %s', orgId, err.message)\n return false\n }\n}\n"],"names":["subdebug","getOrganizationGrants","debug","hasProjectAttachGrant","orgId","requiredGrantGroup","requiredGrant","grants","group","some","resource","grant","name","err","statusCode","message"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,mBAAkB;AAEzC,SAAQC,qBAAqB,QAAO,kCAAiC;AAErE,MAAMC,QAAQF,SAAS;AAEvB,OAAO,eAAeG,sBAAsBC,KAAa;IACvD,MAAMC,qBAAqB;IAC3B,MAAMC,gBAAgB;IAEtB,IAAI;QACF,MAAMC,SAAS,MAAMN,sBAAsBG;QAC3C,MAAMI,QAAsCD,MAAM,CAACF,mBAAmB,IAAI,EAAE;QAC5E,OAAOG,MAAMC,IAAI,CACf,CAACC,WACCA,SAASH,MAAM,IAAIG,SAASH,MAAM,CAACE,IAAI,CAAC,CAACE,QAAUA,MAAMC,IAAI,KAAKN;IAExE,EAAE,OAAOO,KAAK;QACZ,sEAAsE;QACtE,0CAA0C;QAC1C,IAAI,gBAAgBA,OAAOA,IAAIC,UAAU,KAAK,KAAK;YACjDZ,MAAM,sCAAsCE;YAC5C,OAAO;QACT;QACA,oDAAoD;QACpDF,MAAM,iDAAiDE,OAAOS,IAAIE,OAAO;QACzE,OAAO;IACT;AACF"}
@@ -0,0 +1,10 @@
1
+ export function validateOrganizationName(input) {
2
+ if (!input || input.trim() === '') {
3
+ return 'Organization name cannot be empty';
4
+ } else if (input.length > 100) {
5
+ return 'Organization name cannot be longer than 100 characters';
6
+ }
7
+ return true;
8
+ }
9
+
10
+ //# sourceMappingURL=validateOrganizationName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/organizations/validateOrganizationName.ts"],"sourcesContent":["export function validateOrganizationName(input: string): string | true {\n if (!input || input.trim() === '') {\n return 'Organization name cannot be empty'\n } else if (input.length > 100) {\n return 'Organization name cannot be longer than 100 characters'\n }\n return true\n}\n"],"names":["validateOrganizationName","input","trim","length"],"mappings":"AAAA,OAAO,SAASA,yBAAyBC,KAAa;IACpD,IAAI,CAACA,SAASA,MAAMC,IAAI,OAAO,IAAI;QACjC,OAAO;IACT,OAAO,IAAID,MAAME,MAAM,GAAG,KAAK;QAC7B,OAAO;IACT;IACA,OAAO;AACT"}
@@ -0,0 +1,16 @@
1
+ import { getSharedServerConfig } from '../../util/getSharedServerConfig.js';
2
+ export function getPreviewServerConfig(options) {
3
+ const { cliConfig, flags, rootDir, workDir } = options;
4
+ const baseConfig = getSharedServerConfig({
5
+ cliConfig,
6
+ flags,
7
+ workDir
8
+ });
9
+ return {
10
+ ...baseConfig,
11
+ root: rootDir,
12
+ workDir
13
+ };
14
+ }
15
+
16
+ //# sourceMappingURL=getPreviewServerConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/preview/getPreviewServerConfig.ts"],"sourcesContent":["import {type CliConfig} from '@sanity/cli-core'\n\nimport {\n getSharedServerConfig,\n type GetSharedServerConfigResult,\n} from '../../util/getSharedServerConfig.js'\nimport {type PreviewFlags} from './types.js'\n\ninterface GetPreviewServerConfigOptions {\n flags: PreviewFlags\n rootDir: string\n workDir: string\n\n cliConfig?: CliConfig\n}\n\ninterface GetPreviewServerConfigResult extends GetSharedServerConfigResult {\n root: string\n workDir: string\n}\n\nexport function getPreviewServerConfig(\n options: GetPreviewServerConfigOptions,\n): GetPreviewServerConfigResult {\n const {cliConfig, flags, rootDir, workDir} = options\n const baseConfig = getSharedServerConfig({cliConfig, flags, workDir})\n\n return {\n ...baseConfig,\n root: rootDir,\n workDir,\n }\n}\n"],"names":["getSharedServerConfig","getPreviewServerConfig","options","cliConfig","flags","rootDir","workDir","baseConfig","root"],"mappings":"AAEA,SACEA,qBAAqB,QAEhB,sCAAqC;AAgB5C,OAAO,SAASC,uBACdC,OAAsC;IAEtC,MAAM,EAACC,SAAS,EAAEC,KAAK,EAAEC,OAAO,EAAEC,OAAO,EAAC,GAAGJ;IAC7C,MAAMK,aAAaP,sBAAsB;QAACG;QAAWC;QAAOE;IAAO;IAEnE,OAAO;QACL,GAAGC,UAAU;QACbC,MAAMH;QACNC;IACF;AACF"}
@@ -0,0 +1,20 @@
1
+ import { gracefulServerDeath } from '../../server/gracefulServerDeath.js';
2
+ import { startPreviewServer } from '../../server/previewServer.js';
3
+ import { getPreviewServerConfig } from './getPreviewServerConfig.js';
4
+ export async function previewAction(options) {
5
+ const { cliConfig, flags, outDir, workDir } = options;
6
+ const config = getPreviewServerConfig({
7
+ cliConfig,
8
+ flags,
9
+ rootDir: outDir,
10
+ workDir
11
+ });
12
+ try {
13
+ const server = await startPreviewServer(config);
14
+ return server;
15
+ } catch (err) {
16
+ throw gracefulServerDeath('preview', config.httpHost, config.httpPort, err);
17
+ }
18
+ }
19
+
20
+ //# sourceMappingURL=previewAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/preview/previewAction.ts"],"sourcesContent":["import {type CliConfig} from '@sanity/cli-core'\n\nimport {gracefulServerDeath} from '../../server/gracefulServerDeath.js'\nimport {startPreviewServer} from '../../server/previewServer.js'\nimport {getPreviewServerConfig} from './getPreviewServerConfig.js'\nimport {type PreviewFlags} from './types.js'\n\ninterface PreviewActionOptions {\n cliConfig: CliConfig\n flags: PreviewFlags\n outDir: string\n workDir: string\n}\n\nexport async function previewAction(options: PreviewActionOptions) {\n const {cliConfig, flags, outDir, workDir} = options\n\n const config = getPreviewServerConfig({cliConfig, flags, rootDir: outDir, workDir})\n\n try {\n const server = await startPreviewServer(config)\n return server\n } catch (err) {\n throw gracefulServerDeath('preview', config.httpHost, config.httpPort, err)\n }\n}\n"],"names":["gracefulServerDeath","startPreviewServer","getPreviewServerConfig","previewAction","options","cliConfig","flags","outDir","workDir","config","rootDir","server","err","httpHost","httpPort"],"mappings":"AAEA,SAAQA,mBAAmB,QAAO,sCAAqC;AACvE,SAAQC,kBAAkB,QAAO,gCAA+B;AAChE,SAAQC,sBAAsB,QAAO,8BAA6B;AAUlE,OAAO,eAAeC,cAAcC,OAA6B;IAC/D,MAAM,EAACC,SAAS,EAAEC,KAAK,EAAEC,MAAM,EAAEC,OAAO,EAAC,GAAGJ;IAE5C,MAAMK,SAASP,uBAAuB;QAACG;QAAWC;QAAOI,SAASH;QAAQC;IAAO;IAEjF,IAAI;QACF,MAAMG,SAAS,MAAMV,mBAAmBQ;QACxC,OAAOE;IACT,EAAE,OAAOC,KAAK;QACZ,MAAMZ,oBAAoB,WAAWS,OAAOI,QAAQ,EAAEJ,OAAOK,QAAQ,EAAEF;IACzE;AACF"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/preview/types.ts"],"sourcesContent":["import {type PreviewCommand} from '../../commands/preview.js'\n\nexport type PreviewFlags = PreviewCommand['flags']\n"],"names":[],"mappings":"AAEA,WAAkD"}
@@ -0,0 +1,7 @@
1
+ import { getSanityUrl } from '@sanity/cli-core';
2
+ export function getManageUrl(projectId) {
3
+ const sanityUrl = getSanityUrl();
4
+ return projectId ? `${sanityUrl}/manage/project/${projectId}` : `${sanityUrl}/manage/`;
5
+ }
6
+
7
+ //# sourceMappingURL=getManageUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/projects/getManageUrl.ts"],"sourcesContent":["import {getSanityUrl} from '@sanity/cli-core'\n\nexport function getManageUrl(projectId: string | undefined): string {\n const sanityUrl = getSanityUrl()\n return projectId ? `${sanityUrl}/manage/project/${projectId}` : `${sanityUrl}/manage/`\n}\n"],"names":["getSanityUrl","getManageUrl","projectId","sanityUrl"],"mappings":"AAAA,SAAQA,YAAY,QAAO,mBAAkB;AAE7C,OAAO,SAASC,aAAaC,SAA6B;IACxD,MAAMC,YAAYH;IAClB,OAAOE,YAAY,GAAGC,UAAU,gBAAgB,EAAED,WAAW,GAAG,GAAGC,UAAU,QAAQ,CAAC;AACxF"}
@@ -0,0 +1,11 @@
1
+ export function validateProjectName(input) {
2
+ if (!input || input.trim() === '') {
3
+ return 'Project name cannot be empty';
4
+ }
5
+ if (input.length > 80) {
6
+ return 'Project name cannot be longer than 80 characters';
7
+ }
8
+ return true;
9
+ }
10
+
11
+ //# sourceMappingURL=validateProjectName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/projects/validateProjectName.ts"],"sourcesContent":["export function validateProjectName(input: string): string | true {\n if (!input || input.trim() === '') {\n return 'Project name cannot be empty'\n }\n if (input.length > 80) {\n return 'Project name cannot be longer than 80 characters'\n }\n return true\n}\n"],"names":["validateProjectName","input","trim","length"],"mappings":"AAAA,OAAO,SAASA,oBAAoBC,KAAa;IAC/C,IAAI,CAACA,SAASA,MAAMC,IAAI,OAAO,IAAI;QACjC,OAAO;IACT;IACA,IAAID,MAAME,MAAM,GAAG,IAAI;QACrB,OAAO;IACT;IACA,OAAO;AACT"}
@@ -0,0 +1,101 @@
1
+ import { styleText } from 'node:util';
2
+ import { deleteSchema } from '../../services/schemas.js';
3
+ import { isDefined } from '../manifest/schemaTypeHelpers.js';
4
+ import { ensureManifestExtractSatisfied } from './utils/manifestExtractor.js';
5
+ import { createManifestReader } from './utils/manifestReader.js';
6
+ import { getDatasetsOutString, getStringList } from './utils/schemaStoreOutStrings.js';
7
+ import { filterLogReadProjectIdMismatch } from './utils/schemaStoreValidation.js';
8
+ // Native implementation instead of lodash/uniq
9
+ function uniq(array) {
10
+ return [
11
+ ...new Set(array)
12
+ ];
13
+ }
14
+ class DeleteIdError extends Error {
15
+ dataset;
16
+ id;
17
+ constructor(id, dataset, options){
18
+ super(options?.cause?.message, options);
19
+ this.name = 'DeleteIdError';
20
+ this.id = id;
21
+ this.dataset = dataset;
22
+ }
23
+ }
24
+ /**
25
+ * Deletes all stored schemas matching --ids in workspace datasets.
26
+ *
27
+ * Workspaces are determined by on-disk manifest file – not directly from sanity.config.
28
+ * All schema store actions require a manifest to exist, so we regenerate it by default.
29
+ * Manifest generation can be optionally disabled with --no-manifest-extract.
30
+ * In this case the command uses and existing file or throws when missing.
31
+ */ export async function deleteSchemaAction(options) {
32
+ const { dataset, extractManifest, ids, manifestDir, output, projectId, verbose, workDir } = options;
33
+ if (!await ensureManifestExtractSatisfied({
34
+ extractManifest,
35
+ manifestDir,
36
+ output,
37
+ schemaRequired: true,
38
+ workDir
39
+ })) {
40
+ return 'failure';
41
+ }
42
+ const manifest = await createManifestReader({
43
+ manifestDir,
44
+ output,
45
+ workDir
46
+ }).getManifest();
47
+ const workspaces = manifest.workspaces.filter((workspace)=>!dataset || workspace.dataset === dataset).filter((workspace)=>filterLogReadProjectIdMismatch(workspace, projectId, output));
48
+ const datasets = uniq(workspaces.map((w)=>w.dataset));
49
+ const results = await Promise.allSettled(datasets.flatMap((targetDataset)=>{
50
+ return ids.map(async ({ schemaId })=>{
51
+ try {
52
+ const deletedSchema = await deleteSchema(targetDataset, projectId, schemaId);
53
+ return {
54
+ dataset: targetDataset,
55
+ deleted: deletedSchema.deleted,
56
+ schemaId
57
+ };
58
+ } catch (err) {
59
+ throw new DeleteIdError(schemaId, targetDataset, {
60
+ cause: err
61
+ });
62
+ }
63
+ });
64
+ }));
65
+ const deletedIds = results.filter((r)=>r.status === 'fulfilled').filter((r)=>r.value.deleted).map((r)=>r.value);
66
+ const notFound = uniq(results.filter((r)=>r.status === 'fulfilled').filter((r)=>!r.value.deleted).filter((r)=>!deletedIds.map(({ schemaId })=>schemaId).includes(r.value.schemaId)).map((r)=>r.value.schemaId));
67
+ const deleteFailureIds = uniq(results.filter((r)=>r.status === 'rejected').map((result)=>{
68
+ const error = result.reason;
69
+ if (error instanceof DeleteIdError) {
70
+ output.warn(styleText('red', [
71
+ `Failed to delete schema "${error.id}" in dataset "${error.dataset}":`,
72
+ error.message
73
+ ].join('\n')));
74
+ if (verbose) output.warn(error);
75
+ return error.id;
76
+ }
77
+ //hubris inc: given the try-catch wrapping the full promise "this should never happen"
78
+ throw error;
79
+ }));
80
+ // Compare unique schema IDs deleted vs requested (not total deletions across datasets)
81
+ const uniqueDeletedSchemaIds = uniq(deletedIds.map(({ schemaId })=>schemaId));
82
+ const success = uniqueDeletedSchemaIds.length === ids.length;
83
+ if (success) {
84
+ output.log(`Successfully deleted ${uniqueDeletedSchemaIds.length}/${ids.length} schemas`);
85
+ } else {
86
+ output.error([
87
+ `Deleted ${uniqueDeletedSchemaIds.length}/${ids.length} schemas.`,
88
+ deletedIds.length > 0 ? `Successfully deleted ids:\n${deletedIds.map(({ dataset: targetDataset, schemaId })=>`- "${schemaId}" (in ${getDatasetsOutString([
89
+ targetDataset
90
+ ])})`).join('\n')}` : undefined,
91
+ notFound.length > 0 ? `Ids not found in ${getDatasetsOutString(datasets)}:\n${getStringList(notFound)}` : undefined,
92
+ ...deleteFailureIds.length > 0 ? [
93
+ `Failed to delete ids:\n${getStringList(deleteFailureIds)}`,
94
+ 'Check logs for errors.'
95
+ ] : []
96
+ ].filter((item)=>isDefined(item)).join('\n'));
97
+ }
98
+ return success ? 'success' : 'failure';
99
+ }
100
+
101
+ //# sourceMappingURL=deleteSchemaAction.js.map