@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,81 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { SanityCommand } from '@sanity/cli-core';
3
+ import open from 'open';
4
+ import { normalizeDocsPath } from '../../actions/docs/normalizeDocsPath.js';
5
+ import { readDoc } from '../../services/docs.js';
6
+ export class DocsReadCommand extends SanityCommand {
7
+ static args = {
8
+ path: Args.string({
9
+ description: 'Path or URL to article, found in search results and docs content as links',
10
+ required: true
11
+ })
12
+ };
13
+ static description = 'Read an article in terminal';
14
+ static examples = [
15
+ {
16
+ command: '<%= config.bin %> <%= command.id %> /docs/studio/installation',
17
+ description: 'Read as markdown in terminal'
18
+ },
19
+ {
20
+ command: '<%= config.bin %> <%= command.id %> https://www.sanity.io/docs/studio/installation',
21
+ description: 'Read using full URL'
22
+ },
23
+ {
24
+ command: '<%= config.bin %> <%= command.id %> /docs/studio/installation --web',
25
+ description: 'Open in web browser'
26
+ },
27
+ {
28
+ command: '<%= config.bin %> <%= command.id %> https://www.sanity.io/docs/studio/installation -w',
29
+ description: 'Open using full URL in web browser'
30
+ }
31
+ ];
32
+ static flags = {
33
+ web: Flags.boolean({
34
+ aliases: [
35
+ 'w'
36
+ ],
37
+ description: 'Open in a web browser'
38
+ })
39
+ };
40
+ async run() {
41
+ const { args, flags } = await this.parse(DocsReadCommand);
42
+ const { path: input } = args;
43
+ const { web } = flags;
44
+ // Normalize URL to path
45
+ const path = normalizeDocsPath(input);
46
+ // Validate the normalized path
47
+ if (!path.startsWith('/')) {
48
+ this.error('Invalid path or URL. Expected a Sanity docs path or URL.\nExamples:\n /docs/studio/installation\n https://www.sanity.io/docs/studio/installation', {
49
+ exit: 1
50
+ });
51
+ }
52
+ // Enhanced validation for security and correctness
53
+ if (path.includes('..') || !path.startsWith('/docs/')) {
54
+ this.error('Invalid path. Must be a valid Sanity docs path starting with /docs/\nExample: /docs/studio/installation', {
55
+ exit: 1
56
+ });
57
+ }
58
+ // Open in web browser if --web or -w flag is provided
59
+ if (web) {
60
+ const url = `https://www.sanity.io${path}`;
61
+ this.log(`Opening ${url}`);
62
+ await open(url);
63
+ return;
64
+ }
65
+ // Default behavior: read as markdown in terminal
66
+ this.log(`Reading article: ${path}`);
67
+ try {
68
+ const content = await readDoc({
69
+ path
70
+ });
71
+ this.log('\n---\n');
72
+ this.log(content);
73
+ } catch (error) {
74
+ this.error(error instanceof Error ? error.message : 'Failed to read article', {
75
+ exit: 1
76
+ });
77
+ }
78
+ }
79
+ }
80
+
81
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/commands/docs/read.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\nimport open from 'open'\n\nimport {normalizeDocsPath} from '../../actions/docs/normalizeDocsPath.js'\nimport {readDoc} from '../../services/docs.js'\n\nexport class DocsReadCommand extends SanityCommand<typeof DocsReadCommand> {\n static override args = {\n path: Args.string({\n description: 'Path or URL to article, found in search results and docs content as links',\n required: true,\n }),\n }\n\n static override description = 'Read an article in terminal'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> /docs/studio/installation',\n description: 'Read as markdown in terminal',\n },\n {\n command: '<%= config.bin %> <%= command.id %> https://www.sanity.io/docs/studio/installation',\n description: 'Read using full URL',\n },\n {\n command: '<%= config.bin %> <%= command.id %> /docs/studio/installation --web',\n description: 'Open in web browser',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> https://www.sanity.io/docs/studio/installation -w',\n description: 'Open using full URL in web browser',\n },\n ]\n\n static override flags = {\n web: Flags.boolean({\n aliases: ['w'],\n description: 'Open in a web browser',\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(DocsReadCommand)\n const {path: input} = args\n const {web} = flags\n\n // Normalize URL to path\n const path = normalizeDocsPath(input)\n\n // Validate the normalized path\n if (!path.startsWith('/')) {\n this.error(\n 'Invalid path or URL. Expected a Sanity docs path or URL.\\nExamples:\\n /docs/studio/installation\\n https://www.sanity.io/docs/studio/installation',\n {\n exit: 1,\n },\n )\n }\n\n // Enhanced validation for security and correctness\n if (path.includes('..') || !path.startsWith('/docs/')) {\n this.error(\n 'Invalid path. Must be a valid Sanity docs path starting with /docs/\\nExample: /docs/studio/installation',\n {\n exit: 1,\n },\n )\n }\n\n // Open in web browser if --web or -w flag is provided\n if (web) {\n const url = `https://www.sanity.io${path}`\n this.log(`Opening ${url}`)\n await open(url)\n return\n }\n\n // Default behavior: read as markdown in terminal\n this.log(`Reading article: ${path}`)\n\n try {\n const content = await readDoc({path})\n this.log('\\n---\\n')\n this.log(content)\n } catch (error) {\n this.error(error instanceof Error ? error.message : 'Failed to read article', {\n exit: 1,\n })\n }\n }\n}\n"],"names":["Args","Flags","SanityCommand","open","normalizeDocsPath","readDoc","DocsReadCommand","args","path","string","description","required","examples","command","flags","web","boolean","aliases","run","parse","input","startsWith","error","exit","includes","url","log","content","Error","message"],"mappings":"AAAA,SAAQA,IAAI,EAAEC,KAAK,QAAO,cAAa;AACvC,SAAQC,aAAa,QAAO,mBAAkB;AAC9C,OAAOC,UAAU,OAAM;AAEvB,SAAQC,iBAAiB,QAAO,0CAAyC;AACzE,SAAQC,OAAO,QAAO,yBAAwB;AAE9C,OAAO,MAAMC,wBAAwBJ;IACnC,OAAgBK,OAAO;QACrBC,MAAMR,KAAKS,MAAM,CAAC;YAChBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,8BAA6B;IAE3D,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SACE;YACFH,aAAa;QACf;KACD,CAAA;IAED,OAAgBI,QAAQ;QACtBC,KAAKd,MAAMe,OAAO,CAAC;YACjBC,SAAS;gBAAC;aAAI;YACdP,aAAa;QACf;IACF,EAAC;IAED,MAAaQ,MAAqB;QAChC,MAAM,EAACX,IAAI,EAAEO,KAAK,EAAC,GAAG,MAAM,IAAI,CAACK,KAAK,CAACb;QACvC,MAAM,EAACE,MAAMY,KAAK,EAAC,GAAGb;QACtB,MAAM,EAACQ,GAAG,EAAC,GAAGD;QAEd,wBAAwB;QACxB,MAAMN,OAAOJ,kBAAkBgB;QAE/B,+BAA+B;QAC/B,IAAI,CAACZ,KAAKa,UAAU,CAAC,MAAM;YACzB,IAAI,CAACC,KAAK,CACR,sJACA;gBACEC,MAAM;YACR;QAEJ;QAEA,mDAAmD;QACnD,IAAIf,KAAKgB,QAAQ,CAAC,SAAS,CAAChB,KAAKa,UAAU,CAAC,WAAW;YACrD,IAAI,CAACC,KAAK,CACR,2GACA;gBACEC,MAAM;YACR;QAEJ;QAEA,sDAAsD;QACtD,IAAIR,KAAK;YACP,MAAMU,MAAM,CAAC,qBAAqB,EAAEjB,MAAM;YAC1C,IAAI,CAACkB,GAAG,CAAC,CAAC,QAAQ,EAAED,KAAK;YACzB,MAAMtB,KAAKsB;YACX;QACF;QAEA,iDAAiD;QACjD,IAAI,CAACC,GAAG,CAAC,CAAC,iBAAiB,EAAElB,MAAM;QAEnC,IAAI;YACF,MAAMmB,UAAU,MAAMtB,QAAQ;gBAACG;YAAI;YACnC,IAAI,CAACkB,GAAG,CAAC;YACT,IAAI,CAACA,GAAG,CAACC;QACX,EAAE,OAAOL,OAAO;YACd,IAAI,CAACA,KAAK,CAACA,iBAAiBM,QAAQN,MAAMO,OAAO,GAAG,0BAA0B;gBAC5EN,MAAM;YACR;QACF;IACF;AACF"}
@@ -0,0 +1,111 @@
1
+ import { styleText } from 'node:util';
2
+ import { Args, Flags } from '@oclif/core';
3
+ import { isInteractive, SanityCommand, subdebug } from '@sanity/cli-core';
4
+ import { select } from '@sanity/cli-core/ux';
5
+ import { readDoc, searchDocs } from '../../services/docs.js';
6
+ const searchDebug = subdebug('docs:search');
7
+ export class DocsSearchCommand extends SanityCommand {
8
+ static args = {
9
+ query: Args.string({
10
+ description: 'Search query for documentation',
11
+ required: true
12
+ })
13
+ };
14
+ static description = 'Search Sanity docs';
15
+ static examples = [
16
+ {
17
+ command: '<%= config.bin %> <%= command.id %> schema',
18
+ description: 'Search for documentation about schemas'
19
+ },
20
+ {
21
+ command: '<%= config.bin %> <%= command.id %> "groq functions"',
22
+ description: 'Search with phrase'
23
+ },
24
+ {
25
+ command: '<%= config.bin %> <%= command.id %> "deployment" --limit=5',
26
+ description: 'Limit search results'
27
+ }
28
+ ];
29
+ static flags = {
30
+ limit: Flags.integer({
31
+ default: 10,
32
+ description: 'Maximum number of results to return',
33
+ min: 1
34
+ })
35
+ };
36
+ async run() {
37
+ const { args, flags } = await this.parse(DocsSearchCommand);
38
+ const { query } = args;
39
+ const { limit } = flags;
40
+ this.log(`Searching documentation for: "${query}"`);
41
+ let results;
42
+ try {
43
+ results = await searchDocs({
44
+ limit,
45
+ query
46
+ });
47
+ if (results.length === 0) {
48
+ this.log('No results found. Try a different search term.');
49
+ return;
50
+ }
51
+ } catch (error) {
52
+ searchDebug('error fetching results', error);
53
+ const message = error instanceof Error ? error.message : 'The documentation search API is currently unavailable. Please try again later.';
54
+ this.error(message, {
55
+ exit: 1
56
+ });
57
+ }
58
+ this.log(`\nFound ${results.length} result(s):\n`);
59
+ for (const [index, result] of results.entries()){
60
+ this.log(`${index + 1}. ${result.title}`);
61
+ this.log(` ${styleText('cyan', `URL: https://www.sanity.io${result.path}`)}`);
62
+ if (result.description) {
63
+ this.log(` ${result.description}`);
64
+ }
65
+ this.log('');
66
+ }
67
+ // Show usage hint in non-interactive mode
68
+ if (!isInteractive()) {
69
+ this.log('Use `sanity docs read <url>` to read an article in terminal.');
70
+ this.log('Use `sanity docs read <path>` to follow links found within articles.');
71
+ this.log('');
72
+ return;
73
+ }
74
+ // Interactive selection (only in interactive environments)
75
+ if (results.length > 0) {
76
+ const choices = results.map((result, index)=>({
77
+ description: result.description,
78
+ name: `${index + 1}. ${result.title} (${result.path})`,
79
+ value: index
80
+ }));
81
+ const selectedIndex = await select({
82
+ choices: [
83
+ ...choices,
84
+ {
85
+ description: 'Exit without reading',
86
+ name: 'Exit',
87
+ value: -1
88
+ }
89
+ ],
90
+ message: 'Select an article to read in terminal:'
91
+ });
92
+ if (typeof selectedIndex === 'number' && selectedIndex >= 0) {
93
+ const selected = results[selectedIndex];
94
+ try {
95
+ // Read and display the article
96
+ const content = await readDoc({
97
+ path: selected.path
98
+ });
99
+ this.log('\n---\n');
100
+ this.log(content);
101
+ } catch (error) {
102
+ this.error(`Failed to read article: ${error instanceof Error ? error.message : 'Unknown error'}`, {
103
+ exit: 1
104
+ });
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+
111
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/commands/docs/search.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Args, Flags} from '@oclif/core'\nimport {isInteractive, SanityCommand, subdebug} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\n\nimport {readDoc, searchDocs, type SearchResult} from '../../services/docs.js'\n\nconst searchDebug = subdebug('docs:search')\n\nexport class DocsSearchCommand extends SanityCommand<typeof DocsSearchCommand> {\n static override args = {\n query: Args.string({\n description: 'Search query for documentation',\n required: true,\n }),\n }\n\n static override description = 'Search Sanity docs'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> schema',\n description: 'Search for documentation about schemas',\n },\n {\n command: '<%= config.bin %> <%= command.id %> \"groq functions\"',\n description: 'Search with phrase',\n },\n {\n command: '<%= config.bin %> <%= command.id %> \"deployment\" --limit=5',\n description: 'Limit search results',\n },\n ]\n\n static override flags = {\n limit: Flags.integer({\n default: 10,\n description: 'Maximum number of results to return',\n min: 1,\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(DocsSearchCommand)\n const {query} = args\n const {limit} = flags\n\n this.log(`Searching documentation for: \"${query}\"`)\n\n let results: SearchResult[]\n try {\n results = await searchDocs({\n limit,\n query,\n })\n\n if (results.length === 0) {\n this.log('No results found. Try a different search term.')\n return\n }\n } catch (error) {\n searchDebug('error fetching results', error)\n const message =\n error instanceof Error\n ? error.message\n : 'The documentation search API is currently unavailable. Please try again later.'\n this.error(message, {\n exit: 1,\n })\n }\n\n this.log(`\\nFound ${results.length} result(s):\\n`)\n\n for (const [index, result] of results.entries()) {\n this.log(`${index + 1}. ${result.title}`)\n this.log(` ${styleText('cyan', `URL: https://www.sanity.io${result.path}`)}`)\n if (result.description) {\n this.log(` ${result.description}`)\n }\n this.log('')\n }\n\n // Show usage hint in non-interactive mode\n if (!isInteractive()) {\n this.log('Use `sanity docs read <url>` to read an article in terminal.')\n this.log('Use `sanity docs read <path>` to follow links found within articles.')\n this.log('')\n return\n }\n\n // Interactive selection (only in interactive environments)\n if (results.length > 0) {\n const choices = results.map((result, index) => ({\n description: result.description,\n name: `${index + 1}. ${result.title} (${result.path})`,\n value: index,\n }))\n\n const selectedIndex = await select({\n choices: [...choices, {description: 'Exit without reading', name: 'Exit', value: -1}],\n message: 'Select an article to read in terminal:',\n })\n\n if (typeof selectedIndex === 'number' && selectedIndex >= 0) {\n const selected = results[selectedIndex]\n\n try {\n // Read and display the article\n const content = await readDoc({path: selected.path})\n this.log('\\n---\\n')\n this.log(content)\n } catch (error) {\n this.error(\n `Failed to read article: ${error instanceof Error ? error.message : 'Unknown error'}`,\n {\n exit: 1,\n },\n )\n }\n }\n }\n }\n}\n"],"names":["styleText","Args","Flags","isInteractive","SanityCommand","subdebug","select","readDoc","searchDocs","searchDebug","DocsSearchCommand","args","query","string","description","required","examples","command","flags","limit","integer","default","min","run","parse","log","results","length","error","message","Error","exit","index","result","entries","title","path","choices","map","name","value","selectedIndex","selected","content"],"mappings":"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"}
@@ -0,0 +1,338 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import fs from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { Args, Flags } from '@oclif/core';
6
+ import { getProjectCliClient, SanityCommand, subdebug } from '@sanity/cli-core';
7
+ import { watch as chokidarWatch } from 'chokidar';
8
+ import { execa, execaSync } from 'execa';
9
+ import json5 from 'json5';
10
+ import { isEqual, isPlainObject } from 'lodash-es';
11
+ import { DOCUMENTS_API_VERSION } from '../../actions/documents/constants.js';
12
+ import { getEditor, registerUnlinkOnSigInt } from '../../actions/documents/editor.js';
13
+ import { NO_PROJECT_ID } from '../../util/errorMessages.js';
14
+ import { isIdentifiedSanityDocument, isSanityDocumentish } from '../../util/isSanityDocumentish.js';
15
+ const createDocumentDebug = subdebug('documents:create');
16
+ export class CreateDocumentCommand extends SanityCommand {
17
+ static args = {
18
+ file: Args.string({
19
+ description: 'JSON file to create document(s) from',
20
+ required: false
21
+ })
22
+ };
23
+ static description = 'Create one or more documents';
24
+ static examples = [
25
+ {
26
+ command: '<%= config.bin %> <%= command.id %> myDocument.json',
27
+ description: 'Create the document specified in "myDocument.json"'
28
+ },
29
+ {
30
+ command: '<%= config.bin %> <%= command.id %>',
31
+ description: 'Open configured $EDITOR and create the specified document(s)'
32
+ },
33
+ {
34
+ command: '<%= config.bin %> <%= command.id %> --id myDocId --replace',
35
+ description: 'Fetch document with the ID "myDocId" and open configured $EDITOR with the current document content (if any). Replace document with the edited version when the editor closes'
36
+ },
37
+ {
38
+ command: '<%= config.bin %> <%= command.id %> --id myDocId --watch --replace --json5',
39
+ description: 'Open configured $EDITOR and replace the document with the given content on each save. Use JSON5 file extension and parser for simplified syntax.'
40
+ }
41
+ ];
42
+ static flags = {
43
+ dataset: Flags.string({
44
+ char: 'd',
45
+ description: 'Dataset to create document(s) in (overrides config)'
46
+ }),
47
+ id: Flags.string({
48
+ description: 'Specify a document ID to use. Will fetch remote document ID and populate editor.'
49
+ }),
50
+ json5: Flags.boolean({
51
+ description: 'Use JSON5 file type to allow a "simplified" version of JSON'
52
+ }),
53
+ missing: Flags.boolean({
54
+ description: "On duplicate document IDs, don't modify the target document(s)"
55
+ }),
56
+ replace: Flags.boolean({
57
+ description: 'On duplicate document IDs, replace existing document with specified document(s)'
58
+ }),
59
+ watch: Flags.boolean({
60
+ description: 'Write the documents whenever the target file or buffer changes'
61
+ })
62
+ };
63
+ client;
64
+ async run() {
65
+ const { args, flags } = await this.parse(CreateDocumentCommand);
66
+ const { file } = args;
67
+ const { dataset, id, json5: useJson5, missing, replace, watch } = flags;
68
+ const cliConfig = await this.getCliConfig();
69
+ const projectId = await this.getProjectId();
70
+ if (!projectId) {
71
+ this.error(NO_PROJECT_ID, {
72
+ exit: 1
73
+ });
74
+ }
75
+ if (!cliConfig.api?.dataset && !dataset) {
76
+ this.error('No dataset specified. Either configure a dataset in sanity.cli.ts or use the --dataset flag', {
77
+ exit: 1
78
+ });
79
+ }
80
+ const targetDataset = dataset || cliConfig.api?.dataset;
81
+ this.client = await getProjectCliClient({
82
+ apiVersion: DOCUMENTS_API_VERSION,
83
+ dataset: targetDataset,
84
+ projectId,
85
+ requireUser: true
86
+ });
87
+ if (replace && missing) {
88
+ this.error('Cannot use both --replace and --missing', {
89
+ exit: 1
90
+ });
91
+ }
92
+ if (id && file) {
93
+ this.error('Cannot use --id when specifying a file path', {
94
+ exit: 1
95
+ });
96
+ }
97
+ let operation = 'create';
98
+ if (replace || missing) {
99
+ operation = replace ? 'createOrReplace' : 'createIfNotExists';
100
+ }
101
+ if (file) {
102
+ try {
103
+ const contentPath = path.resolve(process.cwd(), file);
104
+ const content = json5.parse(await fs.readFile(contentPath, 'utf8'));
105
+ const result = await this.writeDocuments(content, operation);
106
+ this.log(this.getResultMessage(result, operation));
107
+ return;
108
+ } catch (error) {
109
+ const err = error;
110
+ createDocumentDebug(`Error creating documents from file ${file}`, err);
111
+ this.error(`Failed to create documents: ${err.message}`, {
112
+ exit: 1
113
+ });
114
+ }
115
+ }
116
+ try {
117
+ // Create a temporary file and use that as source, opening an editor on it
118
+ const docId = id || randomUUID();
119
+ const ext = useJson5 ? 'json5' : 'json';
120
+ // Add UUID prefix to prevent predictable file names and potential conflicts
121
+ const tmpFile = path.join(os.tmpdir(), 'sanity-cli', `${randomUUID()}-${docId}.${ext}`);
122
+ const stringify = useJson5 ? json5.stringify : JSON.stringify;
123
+ const defaultValue = id && await this.client.getDocument(id) || {
124
+ _id: docId,
125
+ _type: 'specify-me'
126
+ };
127
+ // Create temp directory with restricted permissions (owner only)
128
+ const tempDir = path.join(os.tmpdir(), 'sanity-cli');
129
+ await fs.mkdir(tempDir, {
130
+ mode: 0o700,
131
+ recursive: true
132
+ });
133
+ // Write file with restricted permissions (owner read/write only)
134
+ await fs.writeFile(tmpFile, stringify(defaultValue, null, 2), {
135
+ encoding: 'utf8',
136
+ mode: 0o600
137
+ });
138
+ const editor = getEditor();
139
+ const readAndPerformCreatesFromFile = this.readAndPerformCreatesFromFile.bind(this, operation);
140
+ if (watch) {
141
+ // If we're in watch mode, we want to run the creation on each change (if it validates)
142
+ registerUnlinkOnSigInt(tmpFile);
143
+ this.log(`Watch mode: ${tmpFile}`);
144
+ this.log('Watch mode: Will write documents on each save.');
145
+ this.log('Watch mode: Press Ctrl + C to cancel watch mode.');
146
+ // Add race condition protection
147
+ let isProcessing = false;
148
+ chokidarWatch(tmpFile).on('change', async ()=>{
149
+ if (isProcessing) {
150
+ return; // Skip if already processing
151
+ }
152
+ isProcessing = true;
153
+ this.log('');
154
+ try {
155
+ await readAndPerformCreatesFromFile(tmpFile, defaultValue);
156
+ } finally{
157
+ isProcessing = false;
158
+ }
159
+ });
160
+ execa(editor.bin, [
161
+ ...editor.args,
162
+ tmpFile
163
+ ], {
164
+ stdio: 'inherit'
165
+ });
166
+ } else {
167
+ // While in normal mode, we just want to wait for the editor to close and run the thing once
168
+ execaSync(editor.bin, [
169
+ ...editor.args,
170
+ tmpFile
171
+ ], {
172
+ stdio: 'inherit'
173
+ });
174
+ await readAndPerformCreatesFromFile(tmpFile, defaultValue);
175
+ await fs.unlink(tmpFile).catch(()=>{});
176
+ }
177
+ } catch (error) {
178
+ const err = error;
179
+ createDocumentDebug('Error in editor workflow', err);
180
+ this.error(`Failed to create documents: ${err.message}`, {
181
+ exit: 1
182
+ });
183
+ }
184
+ }
185
+ getErrorMessage(message, index, isSingle) {
186
+ return isSingle ? `Document ${message}` : `Document at index ${index} ${message}`;
187
+ }
188
+ /**
189
+ * Formats the result message for document operations
190
+ */ getResultMessage(result, operation) {
191
+ const joiner = '\n - ';
192
+ if (operation === 'createOrReplace') {
193
+ return `Upserted:\n - ${result.results.map((res)=>res.id).join(joiner)}`;
194
+ }
195
+ if (operation === 'create') {
196
+ return `Created:\n - ${result.results.map((res)=>res.id).join(joiner)}`;
197
+ }
198
+ // "Missing" (createIfNotExists)
199
+ const created = [];
200
+ const skipped = [];
201
+ for (const res of result.results){
202
+ if (res.operation === 'update') {
203
+ skipped.push(res.id);
204
+ } else {
205
+ created.push(res.id);
206
+ }
207
+ }
208
+ if (created.length > 0 && skipped.length > 0) {
209
+ return [
210
+ `Created:\n - ${created.join(joiner)}`,
211
+ `Skipped (already exists):${joiner}${skipped.join(joiner)}`
212
+ ].join('\n\n');
213
+ } else if (created.length > 0) {
214
+ return `Created:\n - ${created.join(joiner)}`;
215
+ }
216
+ return `Skipped (already exists):\n - ${skipped.join(joiner)}`;
217
+ }
218
+ /**
219
+ * Reads and processes documents from a file for creation
220
+ */ async readAndPerformCreatesFromFile(operation, filePath, defaultValue) {
221
+ let content;
222
+ try {
223
+ content = json5.parse(await fs.readFile(filePath, 'utf8'));
224
+ } catch (err) {
225
+ const error = err;
226
+ createDocumentDebug(`Failed to read input file ${filePath}`, error);
227
+ this.log(`Failed to read input: ${error.message}`);
228
+ return;
229
+ }
230
+ if (isEqual(content, defaultValue)) {
231
+ this.log('Value not modified, doing nothing.');
232
+ this.log('Modify document to trigger creation.');
233
+ return;
234
+ }
235
+ try {
236
+ const writeResult = await this.writeDocuments(content, operation);
237
+ this.log(this.getResultMessage(writeResult, operation));
238
+ } catch (err) {
239
+ const error = err;
240
+ createDocumentDebug(`Failed to write documents`, error);
241
+ let errorMessage = `Failed to write documents: ${error.message}`;
242
+ if (error.message.includes('already exists')) {
243
+ errorMessage += '\nPerhaps you want to use `--replace` or `--missing`?';
244
+ }
245
+ this.error(errorMessage, {
246
+ exit: 1
247
+ });
248
+ }
249
+ }
250
+ /**
251
+ * Validates a document for Sanity requirements
252
+ */ validateDocument(doc, index, arr) {
253
+ const isSingle = arr.length === 1;
254
+ if (!isPlainObject(doc)) {
255
+ throw new Error(this.getErrorMessage('must be an object', index, isSingle));
256
+ }
257
+ if (!isSanityDocumentish(doc)) {
258
+ throw new Error(this.getErrorMessage('must have a `_type` property of type string', index, isSingle));
259
+ }
260
+ // Enhanced validations for Sanity document constraints
261
+ const docObj = doc;
262
+ // Validate _type is non-empty
263
+ const typeValue = docObj._type?.toString().trim();
264
+ if (!typeValue) {
265
+ throw new Error(this.getErrorMessage('_type cannot be empty', index, isSingle));
266
+ }
267
+ // Validate _type format (alphanumeric, underscore, hyphen, dot)
268
+ if (!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(typeValue)) {
269
+ throw new Error(this.getErrorMessage('_type must start with a letter and contain only alphanumeric characters, underscores, hyphens, and dots', index, isSingle));
270
+ }
271
+ // Validate _id format if present
272
+ if (docObj._id && typeof docObj._id === 'string') {
273
+ const idValue = docObj._id.trim();
274
+ if (!idValue) {
275
+ throw new Error(this.getErrorMessage('_id cannot be empty', index, isSingle));
276
+ }
277
+ // Sanity document IDs can contain alphanumeric chars, hyphens, underscores, and dots
278
+ if (!/^[a-zA-Z0-9_.-]+$/.test(idValue)) {
279
+ throw new Error(this.getErrorMessage('_id can only contain alphanumeric characters, underscores, hyphens, and dots', index, isSingle));
280
+ }
281
+ // Check length constraints (Sanity has reasonable limits)
282
+ if (idValue.length > 200) {
283
+ throw new Error(this.getErrorMessage('_id cannot be longer than 200 characters', index, isSingle));
284
+ }
285
+ }
286
+ // Warn about reserved fields (these are managed by Sanity)
287
+ const reservedFields = [
288
+ '_rev',
289
+ '_updatedAt',
290
+ '_createdAt'
291
+ ];
292
+ for (const field of reservedFields){
293
+ if (field in docObj) {
294
+ // Note: We don't throw an error here as these might be present in fetched documents
295
+ // that are being re-uploaded, but we could add a debug warning
296
+ createDocumentDebug(`Warning: Document ${index} contains reserved field '${field}' which will be ignored by Sanity`);
297
+ }
298
+ }
299
+ }
300
+ /**
301
+ * Writes documents to Sanity using the specified operation
302
+ */ async writeDocuments(documents, operation) {
303
+ const docs = Array.isArray(documents) ? documents : [
304
+ documents
305
+ ];
306
+ if (docs.length === 0) {
307
+ throw new Error('No documents provided');
308
+ }
309
+ const mutations = docs.map((doc, index)=>{
310
+ this.validateDocument(doc, index, docs);
311
+ if (operation === 'create') {
312
+ return {
313
+ create: doc
314
+ };
315
+ }
316
+ if (operation === 'createIfNotExists') {
317
+ if (isIdentifiedSanityDocument(doc)) {
318
+ return {
319
+ createIfNotExists: doc
320
+ };
321
+ }
322
+ throw new Error(`Missing required _id attribute for ${operation}`);
323
+ }
324
+ if (operation === 'createOrReplace') {
325
+ if (isIdentifiedSanityDocument(doc)) {
326
+ return {
327
+ createOrReplace: doc
328
+ };
329
+ }
330
+ throw new Error(`Missing required _id attribute for ${operation}`);
331
+ }
332
+ throw new Error(`Unsupported operation ${operation}`);
333
+ });
334
+ return this.client.transaction(mutations).commit();
335
+ }
336
+ }
337
+
338
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/commands/documents/create.ts"],"sourcesContent":["import {randomUUID} from 'node:crypto'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport {Args, Flags} from '@oclif/core'\nimport {getProjectCliClient, SanityCommand, subdebug} from '@sanity/cli-core'\nimport {type MultipleMutationResult, type Mutation} from '@sanity/client'\nimport {watch as chokidarWatch} from 'chokidar'\nimport {execa, execaSync} from 'execa'\nimport json5 from 'json5'\nimport {isEqual, isPlainObject} from 'lodash-es'\n\nimport {DOCUMENTS_API_VERSION} from '../../actions/documents/constants.js'\nimport {getEditor, registerUnlinkOnSigInt} from '../../actions/documents/editor.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\nimport {isIdentifiedSanityDocument, isSanityDocumentish} from '../../util/isSanityDocumentish.js'\n\nexport type MutationOperationName = 'create' | 'createIfNotExists' | 'createOrReplace'\n\nconst createDocumentDebug = subdebug('documents:create')\n\nexport class CreateDocumentCommand extends SanityCommand<typeof CreateDocumentCommand> {\n static override args = {\n file: Args.string({\n description: 'JSON file to create document(s) from',\n required: false,\n }),\n }\n\n static override description = 'Create one or more documents'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> myDocument.json',\n description: 'Create the document specified in \"myDocument.json\"',\n },\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Open configured $EDITOR and create the specified document(s)',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --id myDocId --replace',\n description:\n 'Fetch document with the ID \"myDocId\" and open configured $EDITOR with the current document content (if any). Replace document with the edited version when the editor closes',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --id myDocId --watch --replace --json5',\n description:\n 'Open configured $EDITOR and replace the document with the given content on each save. Use JSON5 file extension and parser for simplified syntax.',\n },\n ]\n\n static override flags = {\n dataset: Flags.string({\n char: 'd',\n description: 'Dataset to create document(s) in (overrides config)',\n }),\n id: Flags.string({\n description:\n 'Specify a document ID to use. Will fetch remote document ID and populate editor.',\n }),\n json5: Flags.boolean({\n description: 'Use JSON5 file type to allow a \"simplified\" version of JSON',\n }),\n missing: Flags.boolean({\n description: \"On duplicate document IDs, don't modify the target document(s)\",\n }),\n replace: Flags.boolean({\n description:\n 'On duplicate document IDs, replace existing document with specified document(s)',\n }),\n watch: Flags.boolean({\n description: 'Write the documents whenever the target file or buffer changes',\n }),\n }\n\n private client!: Awaited<ReturnType<typeof getProjectCliClient>>\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(CreateDocumentCommand)\n const {file} = args\n const {dataset, id, json5: useJson5, missing, replace, watch} = flags\n const cliConfig = await this.getCliConfig()\n const projectId = await this.getProjectId()\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n if (!cliConfig.api?.dataset && !dataset) {\n this.error(\n 'No dataset specified. Either configure a dataset in sanity.cli.ts or use the --dataset flag',\n {exit: 1},\n )\n }\n\n const targetDataset = dataset || cliConfig.api?.dataset\n\n this.client = await getProjectCliClient({\n apiVersion: DOCUMENTS_API_VERSION,\n dataset: targetDataset,\n projectId,\n requireUser: true,\n })\n\n if (replace && missing) {\n this.error('Cannot use both --replace and --missing', {exit: 1})\n }\n\n if (id && file) {\n this.error('Cannot use --id when specifying a file path', {exit: 1})\n }\n\n let operation: MutationOperationName = 'create'\n if (replace || missing) {\n operation = replace ? 'createOrReplace' : 'createIfNotExists'\n }\n\n if (file) {\n try {\n const contentPath = path.resolve(process.cwd(), file)\n const content = json5.parse(await fs.readFile(contentPath, 'utf8'))\n const result = await this.writeDocuments(content, operation)\n this.log(this.getResultMessage(result, operation))\n return\n } catch (error) {\n const err = error as Error\n createDocumentDebug(`Error creating documents from file ${file}`, err)\n this.error(`Failed to create documents: ${err.message}`, {exit: 1})\n }\n }\n\n try {\n // Create a temporary file and use that as source, opening an editor on it\n const docId = id || randomUUID()\n const ext = useJson5 ? 'json5' : 'json'\n // Add UUID prefix to prevent predictable file names and potential conflicts\n const tmpFile = path.join(os.tmpdir(), 'sanity-cli', `${randomUUID()}-${docId}.${ext}`)\n const stringify = useJson5 ? json5.stringify : JSON.stringify\n const defaultValue = (id && (await this.client.getDocument(id))) || {\n _id: docId,\n _type: 'specify-me',\n }\n\n // Create temp directory with restricted permissions (owner only)\n const tempDir = path.join(os.tmpdir(), 'sanity-cli')\n await fs.mkdir(tempDir, {\n mode: 0o700, // rwx------ (owner read/write/execute only)\n recursive: true,\n })\n\n // Write file with restricted permissions (owner read/write only)\n await fs.writeFile(tmpFile, stringify(defaultValue, null, 2), {\n encoding: 'utf8',\n mode: 0o600, // rw------- (owner read/write only)\n })\n\n const editor = getEditor()\n const readAndPerformCreatesFromFile = this.readAndPerformCreatesFromFile.bind(this, operation)\n\n if (watch) {\n // If we're in watch mode, we want to run the creation on each change (if it validates)\n registerUnlinkOnSigInt(tmpFile)\n this.log(`Watch mode: ${tmpFile}`)\n this.log('Watch mode: Will write documents on each save.')\n this.log('Watch mode: Press Ctrl + C to cancel watch mode.')\n\n // Add race condition protection\n let isProcessing = false\n chokidarWatch(tmpFile).on('change', async () => {\n if (isProcessing) {\n return // Skip if already processing\n }\n isProcessing = true\n\n this.log('')\n try {\n await readAndPerformCreatesFromFile(tmpFile, defaultValue)\n } finally {\n isProcessing = false\n }\n })\n execa(editor.bin, [...editor.args, tmpFile], {stdio: 'inherit'})\n } else {\n // While in normal mode, we just want to wait for the editor to close and run the thing once\n execaSync(editor.bin, [...editor.args, tmpFile], {stdio: 'inherit'})\n await readAndPerformCreatesFromFile(tmpFile, defaultValue)\n await fs.unlink(tmpFile).catch(() => {})\n }\n } catch (error) {\n const err = error as Error\n createDocumentDebug('Error in editor workflow', err)\n this.error(`Failed to create documents: ${err.message}`, {exit: 1})\n }\n }\n\n private getErrorMessage(message: string, index: number, isSingle: boolean): string {\n return isSingle ? `Document ${message}` : `Document at index ${index} ${message}`\n }\n\n /**\n * Formats the result message for document operations\n */\n private getResultMessage(\n result: MultipleMutationResult,\n operation: MutationOperationName,\n ): string {\n const joiner = '\\n - '\n if (operation === 'createOrReplace') {\n return `Upserted:\\n - ${result.results.map((res) => res.id).join(joiner)}`\n }\n\n if (operation === 'create') {\n return `Created:\\n - ${result.results.map((res) => res.id).join(joiner)}`\n }\n\n // \"Missing\" (createIfNotExists)\n const created: string[] = []\n const skipped: string[] = []\n for (const res of result.results) {\n if (res.operation === 'update') {\n skipped.push(res.id)\n } else {\n created.push(res.id)\n }\n }\n\n if (created.length > 0 && skipped.length > 0) {\n return [\n `Created:\\n - ${created.join(joiner)}`,\n `Skipped (already exists):${joiner}${skipped.join(joiner)}`,\n ].join('\\n\\n')\n } else if (created.length > 0) {\n return `Created:\\n - ${created.join(joiner)}`\n }\n\n return `Skipped (already exists):\\n - ${skipped.join(joiner)}`\n }\n\n /**\n * Reads and processes documents from a file for creation\n */\n private async readAndPerformCreatesFromFile(\n operation: MutationOperationName,\n filePath: string,\n defaultValue: unknown,\n ): Promise<void> {\n let content\n try {\n content = json5.parse(await fs.readFile(filePath, 'utf8'))\n } catch (err) {\n const error = err as Error\n createDocumentDebug(`Failed to read input file ${filePath}`, error)\n this.log(`Failed to read input: ${error.message}`)\n return\n }\n\n if (isEqual(content, defaultValue)) {\n this.log('Value not modified, doing nothing.')\n this.log('Modify document to trigger creation.')\n return\n }\n\n try {\n const writeResult = await this.writeDocuments(content, operation)\n this.log(this.getResultMessage(writeResult, operation))\n } catch (err) {\n const error = err as Error\n createDocumentDebug(`Failed to write documents`, error)\n let errorMessage = `Failed to write documents: ${error.message}`\n if (error.message.includes('already exists')) {\n errorMessage += '\\nPerhaps you want to use `--replace` or `--missing`?'\n }\n this.error(errorMessage, {exit: 1})\n }\n }\n\n /**\n * Validates a document for Sanity requirements\n */\n private validateDocument(doc: unknown, index: number, arr: unknown[]): void {\n const isSingle = arr.length === 1\n\n if (!isPlainObject(doc)) {\n throw new Error(this.getErrorMessage('must be an object', index, isSingle))\n }\n\n if (!isSanityDocumentish(doc)) {\n throw new Error(\n this.getErrorMessage('must have a `_type` property of type string', index, isSingle),\n )\n }\n\n // Enhanced validations for Sanity document constraints\n const docObj = doc as Record<string, unknown>\n\n // Validate _type is non-empty\n const typeValue = docObj._type?.toString().trim()\n if (!typeValue) {\n throw new Error(this.getErrorMessage('_type cannot be empty', index, isSingle))\n }\n\n // Validate _type format (alphanumeric, underscore, hyphen, dot)\n if (!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(typeValue)) {\n throw new Error(\n this.getErrorMessage(\n '_type must start with a letter and contain only alphanumeric characters, underscores, hyphens, and dots',\n index,\n isSingle,\n ),\n )\n }\n\n // Validate _id format if present\n if (docObj._id && typeof docObj._id === 'string') {\n const idValue = docObj._id.trim()\n if (!idValue) {\n throw new Error(this.getErrorMessage('_id cannot be empty', index, isSingle))\n }\n\n // Sanity document IDs can contain alphanumeric chars, hyphens, underscores, and dots\n if (!/^[a-zA-Z0-9_.-]+$/.test(idValue)) {\n throw new Error(\n this.getErrorMessage(\n '_id can only contain alphanumeric characters, underscores, hyphens, and dots',\n index,\n isSingle,\n ),\n )\n }\n\n // Check length constraints (Sanity has reasonable limits)\n if (idValue.length > 200) {\n throw new Error(\n this.getErrorMessage('_id cannot be longer than 200 characters', index, isSingle),\n )\n }\n }\n\n // Warn about reserved fields (these are managed by Sanity)\n const reservedFields = ['_rev', '_updatedAt', '_createdAt']\n for (const field of reservedFields) {\n if (field in docObj) {\n // Note: We don't throw an error here as these might be present in fetched documents\n // that are being re-uploaded, but we could add a debug warning\n createDocumentDebug(\n `Warning: Document ${index} contains reserved field '${field}' which will be ignored by Sanity`,\n )\n }\n }\n }\n\n /**\n * Writes documents to Sanity using the specified operation\n */\n private async writeDocuments(\n documents: {_id?: string; _type: string} | {_id?: string; _type: string}[],\n operation: MutationOperationName,\n ): Promise<MultipleMutationResult> {\n const docs = Array.isArray(documents) ? documents : [documents]\n if (docs.length === 0) {\n throw new Error('No documents provided')\n }\n\n const mutations = docs.map((doc, index): Mutation => {\n this.validateDocument(doc, index, docs)\n if (operation === 'create') {\n return {create: doc}\n }\n\n if (operation === 'createIfNotExists') {\n if (isIdentifiedSanityDocument(doc)) {\n return {createIfNotExists: doc}\n }\n\n throw new Error(`Missing required _id attribute for ${operation}`)\n }\n\n if (operation === 'createOrReplace') {\n if (isIdentifiedSanityDocument(doc)) {\n return {createOrReplace: doc}\n }\n\n throw new Error(`Missing required _id attribute for ${operation}`)\n }\n\n throw new Error(`Unsupported operation ${operation}`)\n })\n\n return this.client.transaction(mutations).commit()\n }\n}\n"],"names":["randomUUID","fs","os","path","Args","Flags","getProjectCliClient","SanityCommand","subdebug","watch","chokidarWatch","execa","execaSync","json5","isEqual","isPlainObject","DOCUMENTS_API_VERSION","getEditor","registerUnlinkOnSigInt","NO_PROJECT_ID","isIdentifiedSanityDocument","isSanityDocumentish","createDocumentDebug","CreateDocumentCommand","args","file","string","description","required","examples","command","flags","dataset","char","id","boolean","missing","replace","client","run","parse","useJson5","cliConfig","getCliConfig","projectId","getProjectId","error","exit","api","targetDataset","apiVersion","requireUser","operation","contentPath","resolve","process","cwd","content","readFile","result","writeDocuments","log","getResultMessage","err","message","docId","ext","tmpFile","join","tmpdir","stringify","JSON","defaultValue","getDocument","_id","_type","tempDir","mkdir","mode","recursive","writeFile","encoding","editor","readAndPerformCreatesFromFile","bind","isProcessing","on","bin","stdio","unlink","catch","getErrorMessage","index","isSingle","joiner","results","map","res","created","skipped","push","length","filePath","writeResult","errorMessage","includes","validateDocument","doc","arr","Error","docObj","typeValue","toString","trim","test","idValue","reservedFields","field","documents","docs","Array","isArray","mutations","create","createIfNotExists","createOrReplace","transaction","commit"],"mappings":"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"}