@sanity/cli 6.0.0-alpha.3 → 6.0.0-alpha.5

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 (376) hide show
  1. package/dist/actions/auth/login/{index.js → login.js} +1 -1
  2. package/dist/actions/auth/login/{index.js.map → login.js.map} +1 -1
  3. package/dist/actions/dev/startStudioDevServer.js +3 -8
  4. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  5. package/dist/actions/dev/types.d.ts +1 -3
  6. package/dist/actions/dev/types.js.map +1 -1
  7. package/dist/actions/documents/validate.d.ts +0 -2
  8. package/dist/actions/documents/validate.js +21 -1
  9. package/dist/actions/documents/validate.js.map +1 -1
  10. package/dist/actions/exec/execScript.js +1 -1
  11. package/dist/actions/exec/execScript.js.map +1 -1
  12. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +1 -1
  13. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +1 -1
  14. package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
  15. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
  16. package/dist/actions/manifest/extractManifest.js +1 -4
  17. package/dist/actions/manifest/extractManifest.js.map +1 -1
  18. package/dist/actions/organizations/getOrganizationChoices.d.ts +6 -0
  19. package/dist/actions/organizations/getOrganizationChoices.js +23 -0
  20. package/dist/actions/organizations/getOrganizationChoices.js.map +1 -0
  21. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +2 -0
  22. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js +9 -0
  23. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js.map +1 -0
  24. package/dist/actions/organizations/hasProjectAttachGrant.d.ts +1 -0
  25. package/dist/actions/organizations/hasProjectAttachGrant.js +24 -0
  26. package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -0
  27. package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
  28. package/dist/actions/schema/deleteSchemaAction.js +12 -17
  29. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  30. package/dist/actions/schema/deploySchemas.d.ts +15 -0
  31. package/dist/actions/schema/deploySchemas.js +98 -0
  32. package/dist/actions/schema/deploySchemas.js.map +1 -0
  33. package/dist/actions/schema/listSchemas.d.ts +12 -0
  34. package/dist/actions/schema/listSchemas.js +119 -0
  35. package/dist/actions/schema/listSchemas.js.map +1 -0
  36. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
  37. package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
  38. package/dist/actions/schema/utils/debug.d.ts +2 -0
  39. package/dist/actions/schema/utils/debug.js +5 -0
  40. package/dist/actions/schema/utils/debug.js.map +1 -0
  41. package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
  42. package/dist/actions/schema/utils/manifestExtractor.js +12 -17
  43. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  44. package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
  45. package/dist/actions/schema/utils/manifestReader.js +6 -12
  46. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  47. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
  48. package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
  49. package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
  50. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
  51. package/dist/actions/schema/utils/schemaStoreValidation.js +40 -127
  52. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
  53. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
  54. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
  55. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
  56. package/dist/actions/users/getMembersForProject.d.ts +1 -3
  57. package/dist/actions/users/getMembersForProject.js +6 -17
  58. package/dist/actions/users/getMembersForProject.js.map +1 -1
  59. package/dist/actions/users/types.d.ts +0 -11
  60. package/dist/actions/users/types.js.map +1 -1
  61. package/dist/commands/__tests__/debug.test.js +113 -220
  62. package/dist/commands/__tests__/debug.test.js.map +1 -1
  63. package/dist/commands/__tests__/deploy.test.js +325 -293
  64. package/dist/commands/__tests__/deploy.test.js.map +1 -1
  65. package/dist/commands/__tests__/dev.test.js +62 -19
  66. package/dist/commands/__tests__/dev.test.js.map +1 -1
  67. package/dist/commands/__tests__/init/init.authentication.test.js +73 -0
  68. package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -0
  69. package/dist/commands/__tests__/init/init.create-new-project.test.js +195 -0
  70. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -0
  71. package/dist/commands/__tests__/init/init.plan.test.js +279 -0
  72. package/dist/commands/__tests__/init/init.plan.test.js.map +1 -0
  73. package/dist/commands/__tests__/init/init.setup.test.js +335 -0
  74. package/dist/commands/__tests__/init/init.setup.test.js.map +1 -0
  75. package/dist/commands/__tests__/install.test.js +46 -22
  76. package/dist/commands/__tests__/install.test.js.map +1 -1
  77. package/dist/commands/__tests__/logout.test.js +8 -5
  78. package/dist/commands/__tests__/logout.test.js.map +1 -1
  79. package/dist/commands/__tests__/manage.test.js +29 -24
  80. package/dist/commands/__tests__/manage.test.js.map +1 -1
  81. package/dist/commands/__tests__/migration.test.js +119 -0
  82. package/dist/commands/__tests__/migration.test.js.map +1 -0
  83. package/dist/commands/__tests__/versions.test.js +22 -14
  84. package/dist/commands/__tests__/versions.test.js.map +1 -1
  85. package/dist/commands/backup/__tests__/disable.test.js +72 -75
  86. package/dist/commands/backup/__tests__/disable.test.js.map +1 -1
  87. package/dist/commands/backup/__tests__/download.test.js +169 -80
  88. package/dist/commands/backup/__tests__/download.test.js.map +1 -1
  89. package/dist/commands/backup/__tests__/enable.test.js +109 -140
  90. package/dist/commands/backup/__tests__/enable.test.js.map +1 -1
  91. package/dist/commands/backup/__tests__/list.test.js +84 -75
  92. package/dist/commands/backup/__tests__/list.test.js.map +1 -1
  93. package/dist/commands/backup/disable.js +5 -11
  94. package/dist/commands/backup/disable.js.map +1 -1
  95. package/dist/commands/backup/enable.js +5 -11
  96. package/dist/commands/backup/enable.js.map +1 -1
  97. package/dist/commands/backup/list.js +7 -8
  98. package/dist/commands/backup/list.js.map +1 -1
  99. package/dist/commands/cors/__tests__/add.test.js +68 -38
  100. package/dist/commands/cors/__tests__/add.test.js.map +1 -1
  101. package/dist/commands/cors/__tests__/delete.test.js +52 -37
  102. package/dist/commands/cors/__tests__/delete.test.js.map +1 -1
  103. package/dist/commands/cors/__tests__/list.test.js +80 -57
  104. package/dist/commands/cors/__tests__/list.test.js.map +1 -1
  105. package/dist/commands/cors/add.js +5 -13
  106. package/dist/commands/cors/add.js.map +1 -1
  107. package/dist/commands/cors/delete.js +7 -15
  108. package/dist/commands/cors/delete.js.map +1 -1
  109. package/dist/commands/cors/list.js +2 -10
  110. package/dist/commands/cors/list.js.map +1 -1
  111. package/dist/commands/dataset/__tests__/copy.test.js +197 -89
  112. package/dist/commands/dataset/__tests__/copy.test.js.map +1 -1
  113. package/dist/commands/dataset/__tests__/create.test.js +147 -117
  114. package/dist/commands/dataset/__tests__/create.test.js.map +1 -1
  115. package/dist/commands/dataset/__tests__/delete.test.js +75 -68
  116. package/dist/commands/dataset/__tests__/delete.test.js.map +1 -1
  117. package/dist/commands/dataset/__tests__/export.test.js +123 -83
  118. package/dist/commands/dataset/__tests__/export.test.js.map +1 -1
  119. package/dist/commands/dataset/__tests__/import.test.js +2 -2
  120. package/dist/commands/dataset/__tests__/import.test.js.map +1 -1
  121. package/dist/commands/dataset/__tests__/list.test.js +107 -65
  122. package/dist/commands/dataset/__tests__/list.test.js.map +1 -1
  123. package/dist/commands/dataset/alias/__tests__/create.test.js +114 -74
  124. package/dist/commands/dataset/alias/__tests__/create.test.js.map +1 -1
  125. package/dist/commands/dataset/alias/__tests__/delete.test.js +40 -29
  126. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +1 -1
  127. package/dist/commands/dataset/alias/__tests__/link.test.js +114 -74
  128. package/dist/commands/dataset/alias/__tests__/link.test.js.map +1 -1
  129. package/dist/commands/dataset/alias/__tests__/unlink.test.js +44 -29
  130. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +1 -1
  131. package/dist/commands/dataset/export.js +4 -4
  132. package/dist/commands/dataset/export.js.map +1 -1
  133. package/dist/commands/dataset/visibility/__tests__/get.test.js +48 -67
  134. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +1 -1
  135. package/dist/commands/dataset/visibility/__tests__/set.test.js +76 -123
  136. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +1 -1
  137. package/dist/commands/dev.js +0 -1
  138. package/dist/commands/dev.js.map +1 -1
  139. package/dist/commands/docs/__tests__/search.test.js +8 -7
  140. package/dist/commands/docs/__tests__/search.test.js.map +1 -1
  141. package/dist/commands/documents/__tests__/create.test.js +328 -265
  142. package/dist/commands/documents/__tests__/create.test.js.map +1 -1
  143. package/dist/commands/documents/__tests__/delete.test.js +119 -87
  144. package/dist/commands/documents/__tests__/delete.test.js.map +1 -1
  145. package/dist/commands/documents/__tests__/get.test.js +68 -95
  146. package/dist/commands/documents/__tests__/get.test.js.map +1 -1
  147. package/dist/commands/documents/__tests__/query.test.js +87 -192
  148. package/dist/commands/documents/__tests__/query.test.js.map +1 -1
  149. package/dist/commands/documents/__tests__/validate.test.js +52 -29
  150. package/dist/commands/documents/__tests__/validate.test.js.map +1 -1
  151. package/dist/commands/documents/create.d.ts +1 -0
  152. package/dist/commands/documents/create.js +10 -9
  153. package/dist/commands/documents/create.js.map +1 -1
  154. package/dist/commands/documents/delete.js +2 -3
  155. package/dist/commands/documents/delete.js.map +1 -1
  156. package/dist/commands/documents/get.js +2 -3
  157. package/dist/commands/documents/get.js.map +1 -1
  158. package/dist/commands/documents/query.js +2 -3
  159. package/dist/commands/documents/query.js.map +1 -1
  160. package/dist/commands/documents/validate.js +0 -20
  161. package/dist/commands/documents/validate.js.map +1 -1
  162. package/dist/commands/graphql/__tests__/list.test.js +57 -45
  163. package/dist/commands/graphql/__tests__/list.test.js.map +1 -1
  164. package/dist/commands/graphql/__tests__/undeploy.test.js +85 -59
  165. package/dist/commands/graphql/__tests__/undeploy.test.js.map +1 -1
  166. package/dist/commands/graphql/list.js +2 -2
  167. package/dist/commands/graphql/list.js.map +1 -1
  168. package/dist/commands/graphql/undeploy.js +4 -9
  169. package/dist/commands/graphql/undeploy.js.map +1 -1
  170. package/dist/commands/hook/__tests__/attempt.test.js +48 -33
  171. package/dist/commands/hook/__tests__/attempt.test.js.map +1 -1
  172. package/dist/commands/hook/__tests__/create.test.js +49 -51
  173. package/dist/commands/hook/__tests__/create.test.js.map +1 -1
  174. package/dist/commands/hook/__tests__/delete.test.js +43 -30
  175. package/dist/commands/hook/__tests__/delete.test.js.map +1 -1
  176. package/dist/commands/hook/__tests__/list.test.js +38 -31
  177. package/dist/commands/hook/__tests__/list.test.js.map +1 -1
  178. package/dist/commands/hook/__tests__/logs.test.js +68 -40
  179. package/dist/commands/hook/__tests__/logs.test.js.map +1 -1
  180. package/dist/commands/hook/create.js +2 -6
  181. package/dist/commands/hook/create.js.map +1 -1
  182. package/dist/commands/hook/delete.js +5 -17
  183. package/dist/commands/hook/delete.js.map +1 -1
  184. package/dist/commands/hook/list.js +2 -8
  185. package/dist/commands/hook/list.js.map +1 -1
  186. package/dist/commands/init.d.ts +4 -0
  187. package/dist/commands/init.js +151 -18
  188. package/dist/commands/init.js.map +1 -1
  189. package/dist/commands/login.js +1 -1
  190. package/dist/commands/login.js.map +1 -1
  191. package/dist/commands/manifest/__tests__/extract.test.js +22 -13
  192. package/dist/commands/manifest/__tests__/extract.test.js.map +1 -1
  193. package/dist/commands/media/__tests__/create-aspect.test.js +41 -28
  194. package/dist/commands/media/__tests__/create-aspect.test.js.map +1 -1
  195. package/dist/commands/media/__tests__/delete-aspect.test.js +44 -35
  196. package/dist/commands/media/__tests__/delete-aspect.test.js.map +1 -1
  197. package/dist/commands/media/__tests__/deploy-aspect.test.js +67 -80
  198. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +1 -1
  199. package/dist/commands/media/__tests__/export.test.js +365 -66
  200. package/dist/commands/media/__tests__/export.test.js.map +1 -1
  201. package/dist/commands/media/__tests__/import.test.js +171 -105
  202. package/dist/commands/media/__tests__/import.test.js.map +1 -1
  203. package/dist/commands/media/export.js +2 -2
  204. package/dist/commands/media/export.js.map +1 -1
  205. package/dist/commands/media/import.js +2 -2
  206. package/dist/commands/media/import.js.map +1 -1
  207. package/dist/commands/projects/__tests__/list.test.js +5 -4
  208. package/dist/commands/projects/__tests__/list.test.js.map +1 -1
  209. package/dist/commands/projects/list.js +2 -6
  210. package/dist/commands/projects/list.js.map +1 -1
  211. package/dist/commands/schema/__tests__/delete.test.js +396 -151
  212. package/dist/commands/schema/__tests__/delete.test.js.map +1 -1
  213. package/dist/commands/schema/__tests__/deploy.test.js +348 -0
  214. package/dist/commands/schema/__tests__/deploy.test.js.map +1 -0
  215. package/dist/commands/schema/__tests__/extract.test.js +19 -11
  216. package/dist/commands/schema/__tests__/extract.test.js.map +1 -1
  217. package/dist/commands/schema/__tests__/list.test.js +399 -0
  218. package/dist/commands/schema/__tests__/list.test.js.map +1 -0
  219. package/dist/commands/schema/__tests__/validate.test.js +27 -10
  220. package/dist/commands/schema/__tests__/validate.test.js.map +1 -1
  221. package/dist/commands/schema/delete.d.ts +1 -1
  222. package/dist/commands/schema/delete.js +20 -23
  223. package/dist/commands/schema/delete.js.map +1 -1
  224. package/dist/commands/schema/deploy.d.ts +16 -0
  225. package/dist/commands/schema/deploy.js +98 -0
  226. package/dist/commands/schema/deploy.js.map +1 -0
  227. package/dist/commands/schema/list.d.ts +15 -0
  228. package/dist/commands/schema/list.js +104 -0
  229. package/dist/commands/schema/list.js.map +1 -0
  230. package/dist/commands/telemetry/__tests__/disable.test.js +7 -5
  231. package/dist/commands/telemetry/__tests__/disable.test.js.map +1 -1
  232. package/dist/commands/telemetry/__tests__/enable.test.js +7 -5
  233. package/dist/commands/telemetry/__tests__/enable.test.js.map +1 -1
  234. package/dist/commands/telemetry/__tests__/status.test.js +7 -5
  235. package/dist/commands/telemetry/__tests__/status.test.js.map +1 -1
  236. package/dist/commands/tokens/__tests__/add.test.js +55 -40
  237. package/dist/commands/tokens/__tests__/add.test.js.map +1 -1
  238. package/dist/commands/tokens/__tests__/delete.test.js +72 -42
  239. package/dist/commands/tokens/__tests__/delete.test.js.map +1 -1
  240. package/dist/commands/tokens/__tests__/list.test.js +87 -60
  241. package/dist/commands/tokens/__tests__/list.test.js.map +1 -1
  242. package/dist/commands/tokens/add.js +3 -5
  243. package/dist/commands/tokens/add.js.map +1 -1
  244. package/dist/commands/users/__tests__/invite.test.js +100 -79
  245. package/dist/commands/users/__tests__/invite.test.js.map +1 -1
  246. package/dist/commands/users/__tests__/list.test.js +186 -180
  247. package/dist/commands/users/__tests__/list.test.js.map +1 -1
  248. package/dist/commands/users/invite.js +6 -17
  249. package/dist/commands/users/invite.js.map +1 -1
  250. package/dist/commands/users/list.js +4 -7
  251. package/dist/commands/users/list.js.map +1 -1
  252. package/dist/config/createCliConfig.d.ts +4 -4
  253. package/dist/services/backup.d.ts +8 -0
  254. package/dist/services/backup.js +19 -0
  255. package/dist/services/backup.js.map +1 -1
  256. package/dist/services/cors.d.ts +23 -0
  257. package/dist/services/cors.js +38 -0
  258. package/dist/services/cors.js.map +1 -0
  259. package/dist/services/graphql.d.ts +7 -0
  260. package/dist/services/graphql.js +11 -0
  261. package/dist/services/graphql.js.map +1 -1
  262. package/dist/services/hooks.d.ts +2 -0
  263. package/dist/services/hooks.js +19 -0
  264. package/dist/services/hooks.js.map +1 -1
  265. package/dist/services/organizations.d.ts +40 -0
  266. package/dist/services/organizations.js +41 -0
  267. package/dist/services/organizations.js.map +1 -0
  268. package/dist/services/projects.d.ts +31 -0
  269. package/dist/services/projects.js +71 -1
  270. package/dist/services/projects.js.map +1 -1
  271. package/dist/services/schemas.d.ts +4 -0
  272. package/dist/services/schemas.js +40 -0
  273. package/dist/services/schemas.js.map +1 -0
  274. package/dist/services/user.d.ts +10 -0
  275. package/dist/services/user.js +24 -0
  276. package/dist/services/user.js.map +1 -0
  277. package/dist/util/__tests__/getCliVersion.test.js +2 -2
  278. package/dist/util/__tests__/getCliVersion.test.js.map +1 -1
  279. package/dist/util/errorMessages.d.ts +1 -0
  280. package/dist/util/errorMessages.js +1 -0
  281. package/dist/util/errorMessages.js.map +1 -1
  282. package/dist/util/getCliVersion.js +1 -1
  283. package/dist/util/getCliVersion.js.map +1 -1
  284. package/dist/util/readPackageJson.d.ts +1 -15
  285. package/dist/util/readPackageJson.js +1 -1
  286. package/dist/util/readPackageJson.js.map +1 -1
  287. package/dist/util/uniqBy.d.ts +1 -0
  288. package/dist/util/uniqBy.js +14 -0
  289. package/dist/util/uniqBy.js.map +1 -0
  290. package/oclif.config.js +6 -1
  291. package/oclif.manifest.json +152 -158
  292. package/package.json +30 -31
  293. package/dist/actions/cors/constants.d.ts +0 -1
  294. package/dist/actions/cors/constants.js +0 -3
  295. package/dist/actions/cors/constants.js.map +0 -1
  296. package/dist/actions/cors/types.d.ts +0 -9
  297. package/dist/actions/cors/types.js +0 -3
  298. package/dist/actions/cors/types.js.map +0 -1
  299. package/dist/actions/migration/getMigrationRootDirectory.d.ts +0 -2
  300. package/dist/actions/migration/getMigrationRootDirectory.js +0 -14
  301. package/dist/actions/migration/getMigrationRootDirectory.js.map +0 -1
  302. package/dist/actions/migration/resolveMigrations.d.ts +0 -19
  303. package/dist/actions/migration/resolveMigrations.js +0 -43
  304. package/dist/actions/migration/resolveMigrations.js.map +0 -1
  305. package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js +0 -65
  306. package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js.map +0 -1
  307. package/dist/actions/migration/templates/__tests__/minimalSimple.test.js +0 -145
  308. package/dist/actions/migration/templates/__tests__/minimalSimple.test.js.map +0 -1
  309. package/dist/actions/migration/templates/__tests__/renameField.test.js +0 -63
  310. package/dist/actions/migration/templates/__tests__/renameField.test.js.map +0 -1
  311. package/dist/actions/migration/templates/__tests__/renameType.test.js +0 -61
  312. package/dist/actions/migration/templates/__tests__/renameType.test.js.map +0 -1
  313. package/dist/actions/migration/templates/__tests__/stringToPTE.test.js +0 -87
  314. package/dist/actions/migration/templates/__tests__/stringToPTE.test.js.map +0 -1
  315. package/dist/actions/migration/templates/index.d.ts +0 -5
  316. package/dist/actions/migration/templates/index.js +0 -7
  317. package/dist/actions/migration/templates/index.js.map +0 -1
  318. package/dist/actions/migration/templates/minimalAdvanced.d.ts +0 -4
  319. package/dist/actions/migration/templates/minimalAdvanced.js +0 -21
  320. package/dist/actions/migration/templates/minimalAdvanced.js.map +0 -1
  321. package/dist/actions/migration/templates/minimalSimple.d.ts +0 -4
  322. package/dist/actions/migration/templates/minimalSimple.js +0 -61
  323. package/dist/actions/migration/templates/minimalSimple.js.map +0 -1
  324. package/dist/actions/migration/templates/renameField.d.ts +0 -4
  325. package/dist/actions/migration/templates/renameField.js +0 -20
  326. package/dist/actions/migration/templates/renameField.js.map +0 -1
  327. package/dist/actions/migration/templates/renameType.d.ts +0 -4
  328. package/dist/actions/migration/templates/renameType.js +0 -19
  329. package/dist/actions/migration/templates/renameType.js.map +0 -1
  330. package/dist/actions/migration/templates/stringToPTE.d.ts +0 -4
  331. package/dist/actions/migration/templates/stringToPTE.js +0 -32
  332. package/dist/actions/migration/templates/stringToPTE.js.map +0 -1
  333. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
  334. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
  335. package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
  336. package/dist/actions/schema/schemaStoreConstants.js +0 -4
  337. package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
  338. package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
  339. package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
  340. package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
  341. package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
  342. package/dist/actions/schema/utils/schemaApiClient.js +0 -17
  343. package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
  344. package/dist/actions/users/apiVersion.d.ts +0 -6
  345. package/dist/actions/users/apiVersion.js +0 -7
  346. package/dist/actions/users/apiVersion.js.map +0 -1
  347. package/dist/commands/__tests__/init.test.js +0 -411
  348. package/dist/commands/__tests__/init.test.js.map +0 -1
  349. package/dist/commands/migration/__tests__/create.test.js +0 -296
  350. package/dist/commands/migration/__tests__/create.test.js.map +0 -1
  351. package/dist/commands/migration/__tests__/list.test.js +0 -166
  352. package/dist/commands/migration/__tests__/list.test.js.map +0 -1
  353. package/dist/commands/migration/__tests__/run.test.js +0 -481
  354. package/dist/commands/migration/__tests__/run.test.js.map +0 -1
  355. package/dist/commands/migration/create.d.ts +0 -17
  356. package/dist/commands/migration/create.js +0 -143
  357. package/dist/commands/migration/create.js.map +0 -1
  358. package/dist/commands/migration/list.d.ts +0 -9
  359. package/dist/commands/migration/list.js +0 -61
  360. package/dist/commands/migration/list.js.map +0 -1
  361. package/dist/commands/migration/run.d.ts +0 -26
  362. package/dist/commands/migration/run.js +0 -271
  363. package/dist/commands/migration/run.js.map +0 -1
  364. package/dist/util/migration/constants.d.ts +0 -3
  365. package/dist/util/migration/constants.js +0 -10
  366. package/dist/util/migration/constants.js.map +0 -1
  367. package/dist/util/migration/ensureApiVersionFormat.d.ts +0 -9
  368. package/dist/util/migration/ensureApiVersionFormat.js +0 -16
  369. package/dist/util/migration/ensureApiVersionFormat.js.map +0 -1
  370. package/dist/util/migration/prettyMutationFormatter.d.ts +0 -8
  371. package/dist/util/migration/prettyMutationFormatter.js +0 -141
  372. package/dist/util/migration/prettyMutationFormatter.js.map +0 -1
  373. package/dist/utils/migration/resolveMigrationScript.d.ts +0 -44
  374. package/dist/utils/migration/resolveMigrationScript.js +0 -74
  375. package/dist/utils/migration/resolveMigrationScript.js.map +0 -1
  376. /package/dist/actions/auth/login/{index.d.ts → login.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/actions/schema/utils/manifestReader.ts"],"sourcesContent":["import {type Stats} from 'node:fs'\nimport {readFile, stat} from 'node:fs/promises'\nimport path, {join, resolve} from 'node:path'\n\nimport {type Output} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {MANIFEST_FILENAME} from '../../manifest/extractManifest.js'\nimport {type CreateManifest, type ManifestSchemaType} from '../../manifest/types.js'\nimport {type DeploySchemasFlags} from './schemaStoreValidation.js'\n\nexport type ManifestJsonReader = <T>(\n filePath: string,\n) => Promise<JsonFileParseSuccess<T> | undefined>\n\nexport type CreateManifestReaderFactory = (args: {\n jsonReader?: <T>(filePath: string) => Promise<JsonFileParseSuccess<T> | undefined>\n manifestDir: string\n output: Output\n}) => CreateManifestReader\n\nexport interface CreateManifestReader {\n getManifest: () => Promise<CreateManifest>\n getWorkspaceSchema: (workspaceName: string) => Promise<ManifestSchemaType[]>\n}\n\ninterface JsonFileParseSuccess<T> {\n lastModified: string\n parsedJson: T\n path: string\n}\n\n/**\n * The manifest reader will try to read manifest and workspace schema files _once_ and cache a successful result.\n * If you need to re-read the manifest from disk, create a new instance.\n */\nexport const createManifestReader: CreateManifestReaderFactory = ({\n jsonReader = parseJsonFile,\n manifestDir,\n output,\n}) => {\n let parsedManifest: JsonFileParseSuccess<CreateManifest>\n const parsedWorkspaces: Record<string, JsonFileParseSuccess<ManifestSchemaType[]> | undefined> =\n {}\n\n const getManifest: CreateManifestReader['getManifest'] = async () => {\n if (parsedManifest) {\n return parsedManifest?.parsedJson\n }\n\n const manifestFile = path.join(manifestDir, MANIFEST_FILENAME)\n\n const result = await jsonReader<CreateManifest>(manifestFile)\n if (!result) {\n throw new Error(\n `Manifest does not exist at ${manifestFile}. To create the manifest file, omit --no-${'extract-manifest' satisfies keyof DeploySchemasFlags} or run \"sanity manifest extract\" first.`,\n )\n }\n\n output.log(\n chalk.gray(`↳ Read manifest from ${manifestFile} (last modified: ${result.lastModified})`),\n )\n\n parsedManifest = result\n return result.parsedJson\n }\n\n const getWorkspaceSchema: CreateManifestReader['getWorkspaceSchema'] = async (workspaceName) => {\n if (parsedWorkspaces[workspaceName]) {\n return parsedWorkspaces[workspaceName]?.parsedJson\n }\n const manifest = await getManifest()\n if (!manifest) {\n throw new Error('Manifest is required to read workspace schema.')\n }\n\n const workspaceManifest = manifest.workspaces.find(\n (workspace) => workspace.name === workspaceName,\n )\n\n if (!workspaceManifest) {\n throw new Error(`No workspace named \"${workspaceName}\" found in manifest.`)\n }\n\n const workspaceSchemaFile = path.join(manifestDir, workspaceManifest.schema)\n const result = await jsonReader<ManifestSchemaType[]>(workspaceSchemaFile)\n if (!result) {\n throw new Error(`Workspace schema file at \"${workspaceSchemaFile}\" does not exist.`)\n }\n parsedWorkspaces[workspaceName] = result\n return result.parsedJson\n }\n return {\n getManifest,\n getWorkspaceSchema,\n }\n}\n\nexport function resolveManifestDirectory(workDir: string, customPath?: string): string {\n const defaultOutputDir = resolve(join(workDir, 'dist'))\n\n const outputDir = resolve(defaultOutputDir)\n const defaultStaticPath = join(outputDir, 'static')\n\n const staticPath = customPath ?? defaultStaticPath\n return path.resolve(process.cwd(), staticPath)\n}\n\nasync function parseJsonFile<T>(filePath: string): Promise<JsonFileParseSuccess<T> | undefined> {\n let stats: Stats\n try {\n stats = await stat(filePath)\n } catch {\n // file does not exist\n return undefined\n }\n const content = await readFile(filePath, 'utf8')\n const lastModified = stats.mtime.toISOString()\n const json = JSON.parse(content) as T\n if (!json) {\n throw new Error(`JSON file \"${filePath}\" was empty.`)\n }\n return {\n lastModified,\n parsedJson: json,\n path: filePath,\n }\n}\n"],"names":["readFile","stat","path","join","resolve","chalk","MANIFEST_FILENAME","createManifestReader","jsonReader","parseJsonFile","manifestDir","output","parsedManifest","parsedWorkspaces","getManifest","parsedJson","manifestFile","result","Error","log","gray","lastModified","getWorkspaceSchema","workspaceName","manifest","workspaceManifest","workspaces","find","workspace","name","workspaceSchemaFile","schema","resolveManifestDirectory","workDir","customPath","defaultOutputDir","outputDir","defaultStaticPath","staticPath","process","cwd","filePath","stats","undefined","content","mtime","toISOString","json","JSON","parse"],"mappings":"AACA,SAAQA,QAAQ,EAAEC,IAAI,QAAO,mBAAkB;AAC/C,OAAOC,QAAOC,IAAI,EAAEC,OAAO,QAAO,YAAW;AAG7C,SAAQC,KAAK,QAAO,sBAAqB;AAEzC,SAAQC,iBAAiB,QAAO,oCAAmC;AAyBnE;;;CAGC,GACD,OAAO,MAAMC,uBAAoD,CAAC,EAChEC,aAAaC,aAAa,EAC1BC,WAAW,EACXC,MAAM,EACP;IACC,IAAIC;IACJ,MAAMC,mBACJ,CAAC;IAEH,MAAMC,cAAmD;QACvD,IAAIF,gBAAgB;YAClB,OAAOA,gBAAgBG;QACzB;QAEA,MAAMC,eAAed,KAAKC,IAAI,CAACO,aAAaJ;QAE5C,MAAMW,SAAS,MAAMT,WAA2BQ;QAChD,IAAI,CAACC,QAAQ;YACX,MAAM,IAAIC,MACR,CAAC,2BAA2B,EAAEF,aAAa,yCAAyC,EAAE,mBAAsD,wCAAwC,CAAC;QAEzL;QAEAL,OAAOQ,GAAG,CACRd,MAAMe,IAAI,CAAC,CAAC,qBAAqB,EAAEJ,aAAa,iBAAiB,EAAEC,OAAOI,YAAY,CAAC,CAAC,CAAC;QAG3FT,iBAAiBK;QACjB,OAAOA,OAAOF,UAAU;IAC1B;IAEA,MAAMO,qBAAiE,OAAOC;QAC5E,IAAIV,gBAAgB,CAACU,cAAc,EAAE;YACnC,OAAOV,gBAAgB,CAACU,cAAc,EAAER;QAC1C;QACA,MAAMS,WAAW,MAAMV;QACvB,IAAI,CAACU,UAAU;YACb,MAAM,IAAIN,MAAM;QAClB;QAEA,MAAMO,oBAAoBD,SAASE,UAAU,CAACC,IAAI,CAChD,CAACC,YAAcA,UAAUC,IAAI,KAAKN;QAGpC,IAAI,CAACE,mBAAmB;YACtB,MAAM,IAAIP,MAAM,CAAC,oBAAoB,EAAEK,cAAc,oBAAoB,CAAC;QAC5E;QAEA,MAAMO,sBAAsB5B,KAAKC,IAAI,CAACO,aAAae,kBAAkBM,MAAM;QAC3E,MAAMd,SAAS,MAAMT,WAAiCsB;QACtD,IAAI,CAACb,QAAQ;YACX,MAAM,IAAIC,MAAM,CAAC,0BAA0B,EAAEY,oBAAoB,iBAAiB,CAAC;QACrF;QACAjB,gBAAgB,CAACU,cAAc,GAAGN;QAClC,OAAOA,OAAOF,UAAU;IAC1B;IACA,OAAO;QACLD;QACAQ;IACF;AACF,EAAC;AAED,OAAO,SAASU,yBAAyBC,OAAe,EAAEC,UAAmB;IAC3E,MAAMC,mBAAmB/B,QAAQD,KAAK8B,SAAS;IAE/C,MAAMG,YAAYhC,QAAQ+B;IAC1B,MAAME,oBAAoBlC,KAAKiC,WAAW;IAE1C,MAAME,aAAaJ,cAAcG;IACjC,OAAOnC,KAAKE,OAAO,CAACmC,QAAQC,GAAG,IAAIF;AACrC;AAEA,eAAe7B,cAAiBgC,QAAgB;IAC9C,IAAIC;IACJ,IAAI;QACFA,QAAQ,MAAMzC,KAAKwC;IACrB,EAAE,OAAM;QACN,sBAAsB;QACtB,OAAOE;IACT;IACA,MAAMC,UAAU,MAAM5C,SAASyC,UAAU;IACzC,MAAMpB,eAAeqB,MAAMG,KAAK,CAACC,WAAW;IAC5C,MAAMC,OAAOC,KAAKC,KAAK,CAACL;IACxB,IAAI,CAACG,MAAM;QACT,MAAM,IAAI7B,MAAM,CAAC,WAAW,EAAEuB,SAAS,YAAY,CAAC;IACtD;IACA,OAAO;QACLpB;QACAN,YAAYgC;QACZ7C,MAAMuC;IACR;AACF"}
1
+ {"version":3,"sources":["../../../../src/actions/schema/utils/manifestReader.ts"],"sourcesContent":["import {type Stats} from 'node:fs'\nimport {readFile, stat} from 'node:fs/promises'\nimport path, {join, resolve} from 'node:path'\n\nimport {type Output} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {MANIFEST_FILENAME} from '../../manifest/extractManifest.js'\nimport {type CreateManifest, type ManifestSchemaType} from '../../manifest/types.js'\n\ntype CreateManifestReaderFactory = (args: {\n manifestDir: string\n output: Output\n workDir: string\n}) => CreateManifestReader\n\nexport interface CreateManifestReader {\n getManifest: () => Promise<CreateManifest>\n getWorkspaceSchema: (workspaceName: string) => Promise<ManifestSchemaType[]>\n}\n\ninterface JsonFileParseSuccess<T> {\n lastModified: string\n parsedJson: T\n path: string\n}\n\n/**\n * The manifest reader will try to read manifest and workspace schema files _once_ and cache a successful result.\n * If you need to re-read the manifest from disk, create a new instance.\n */\nexport const createManifestReader: CreateManifestReaderFactory = ({\n manifestDir,\n output,\n workDir,\n}) => {\n let parsedManifest: JsonFileParseSuccess<CreateManifest>\n const parsedWorkspaces: Record<string, JsonFileParseSuccess<ManifestSchemaType[]> | undefined> =\n {}\n\n const getManifest: CreateManifestReader['getManifest'] = async () => {\n if (parsedManifest) {\n return parsedManifest?.parsedJson\n }\n\n const staticPath = resolve(join(workDir, manifestDir))\n const manifestFile = path.join(staticPath, MANIFEST_FILENAME)\n\n const result = await parseJsonFile<CreateManifest>(manifestFile)\n if (!result) {\n throw new Error(\n `Manifest does not exist at ${manifestFile}. To create the manifest file, omit --no-extract-manifest or run \"sanity manifest extract\" first.`,\n )\n }\n\n output.log(\n chalk.gray(`↳ Read manifest from ${manifestFile} (last modified: ${result.lastModified})`),\n )\n\n parsedManifest = result\n return result.parsedJson\n }\n\n const getWorkspaceSchema: CreateManifestReader['getWorkspaceSchema'] = async (workspaceName) => {\n if (parsedWorkspaces[workspaceName]) {\n return parsedWorkspaces[workspaceName]?.parsedJson\n }\n const manifest = await getManifest()\n if (!manifest) {\n throw new Error('Manifest is required to read workspace schema.')\n }\n\n const workspaceManifest = manifest.workspaces.find(\n (workspace) => workspace.name === workspaceName,\n )\n\n if (!workspaceManifest) {\n throw new Error(`No workspace named \"${workspaceName}\" found in manifest.`)\n }\n\n const workspaceSchemaFile = path.join(manifestDir, workspaceManifest.schema)\n const result = await parseJsonFile<ManifestSchemaType[]>(workspaceSchemaFile)\n if (!result) {\n throw new Error(`Workspace schema file at \"${workspaceSchemaFile}\" does not exist.`)\n }\n parsedWorkspaces[workspaceName] = result\n return result.parsedJson\n }\n return {\n getManifest,\n getWorkspaceSchema,\n }\n}\n\nasync function parseJsonFile<T>(filePath: string): Promise<JsonFileParseSuccess<T> | undefined> {\n let stats: Stats\n try {\n stats = await stat(filePath)\n } catch {\n // file does not exist\n return undefined\n }\n const content = await readFile(filePath, 'utf8')\n const lastModified = stats.mtime.toISOString()\n const json = JSON.parse(content) as T\n if (!json) {\n throw new Error(`JSON file \"${filePath}\" was empty.`)\n }\n return {\n lastModified,\n parsedJson: json,\n path: filePath,\n }\n}\n"],"names":["readFile","stat","path","join","resolve","chalk","MANIFEST_FILENAME","createManifestReader","manifestDir","output","workDir","parsedManifest","parsedWorkspaces","getManifest","parsedJson","staticPath","manifestFile","result","parseJsonFile","Error","log","gray","lastModified","getWorkspaceSchema","workspaceName","manifest","workspaceManifest","workspaces","find","workspace","name","workspaceSchemaFile","schema","filePath","stats","undefined","content","mtime","toISOString","json","JSON","parse"],"mappings":"AACA,SAAQA,QAAQ,EAAEC,IAAI,QAAO,mBAAkB;AAC/C,OAAOC,QAAOC,IAAI,EAAEC,OAAO,QAAO,YAAW;AAG7C,SAAQC,KAAK,QAAO,sBAAqB;AAEzC,SAAQC,iBAAiB,QAAO,oCAAmC;AAoBnE;;;CAGC,GACD,OAAO,MAAMC,uBAAoD,CAAC,EAChEC,WAAW,EACXC,MAAM,EACNC,OAAO,EACR;IACC,IAAIC;IACJ,MAAMC,mBACJ,CAAC;IAEH,MAAMC,cAAmD;QACvD,IAAIF,gBAAgB;YAClB,OAAOA,gBAAgBG;QACzB;QAEA,MAAMC,aAAaX,QAAQD,KAAKO,SAASF;QACzC,MAAMQ,eAAed,KAAKC,IAAI,CAACY,YAAYT;QAE3C,MAAMW,SAAS,MAAMC,cAA8BF;QACnD,IAAI,CAACC,QAAQ;YACX,MAAM,IAAIE,MACR,CAAC,2BAA2B,EAAEH,aAAa,iGAAiG,CAAC;QAEjJ;QAEAP,OAAOW,GAAG,CACRf,MAAMgB,IAAI,CAAC,CAAC,qBAAqB,EAAEL,aAAa,iBAAiB,EAAEC,OAAOK,YAAY,CAAC,CAAC,CAAC;QAG3FX,iBAAiBM;QACjB,OAAOA,OAAOH,UAAU;IAC1B;IAEA,MAAMS,qBAAiE,OAAOC;QAC5E,IAAIZ,gBAAgB,CAACY,cAAc,EAAE;YACnC,OAAOZ,gBAAgB,CAACY,cAAc,EAAEV;QAC1C;QACA,MAAMW,WAAW,MAAMZ;QACvB,IAAI,CAACY,UAAU;YACb,MAAM,IAAIN,MAAM;QAClB;QAEA,MAAMO,oBAAoBD,SAASE,UAAU,CAACC,IAAI,CAChD,CAACC,YAAcA,UAAUC,IAAI,KAAKN;QAGpC,IAAI,CAACE,mBAAmB;YACtB,MAAM,IAAIP,MAAM,CAAC,oBAAoB,EAAEK,cAAc,oBAAoB,CAAC;QAC5E;QAEA,MAAMO,sBAAsB7B,KAAKC,IAAI,CAACK,aAAakB,kBAAkBM,MAAM;QAC3E,MAAMf,SAAS,MAAMC,cAAoCa;QACzD,IAAI,CAACd,QAAQ;YACX,MAAM,IAAIE,MAAM,CAAC,0BAA0B,EAAEY,oBAAoB,iBAAiB,CAAC;QACrF;QACAnB,gBAAgB,CAACY,cAAc,GAAGP;QAClC,OAAOA,OAAOH,UAAU;IAC1B;IACA,OAAO;QACLD;QACAU;IACF;AACF,EAAC;AAED,eAAeL,cAAiBe,QAAgB;IAC9C,IAAIC;IACJ,IAAI;QACFA,QAAQ,MAAMjC,KAAKgC;IACrB,EAAE,OAAM;QACN,sBAAsB;QACtB,OAAOE;IACT;IACA,MAAMC,UAAU,MAAMpC,SAASiC,UAAU;IACzC,MAAMX,eAAeY,MAAMG,KAAK,CAACC,WAAW;IAC5C,MAAMC,OAAOC,KAAKC,KAAK,CAACL;IACxB,IAAI,CAACG,MAAM;QACT,MAAM,IAAIpB,MAAM,CAAC,WAAW,EAAEc,SAAS,YAAY,CAAC;IACtD;IACA,OAAO;QACLX;QACAR,YAAYyB;QACZrC,MAAM+B;IACR;AACF"}
@@ -1,3 +1,2 @@
1
1
  export declare function getDatasetsOutString(datasets: string[]): string;
2
- export declare function getStringArrayOutString(array: string[]): string;
3
2
  export declare function getStringList(array: string[]): string;
@@ -1,7 +1,7 @@
1
1
  export function getDatasetsOutString(datasets) {
2
2
  return datasets.length === 1 ? `dataset "${datasets[0]}"` : `datasets ${getStringArrayOutString(datasets)}`;
3
3
  }
4
- export function getStringArrayOutString(array) {
4
+ function getStringArrayOutString(array) {
5
5
  return `[${array.map((d)=>`"${d}"`).join(',')}]`;
6
6
  }
7
7
  export function getStringList(array) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/actions/schema/utils/schemaStoreOutStrings.ts"],"sourcesContent":["export function getDatasetsOutString(datasets: string[]) {\n return datasets.length === 1\n ? `dataset \"${datasets[0]}\"`\n : `datasets ${getStringArrayOutString(datasets)}`\n}\n\nexport function getStringArrayOutString(array: string[]) {\n return `[${array.map((d) => `\"${d}\"`).join(',')}]`\n}\n\nexport function getStringList(array: string[]) {\n return array.map((s) => `- \"${s}\"`).join('\\n')\n}\n"],"names":["getDatasetsOutString","datasets","length","getStringArrayOutString","array","map","d","join","getStringList","s"],"mappings":"AAAA,OAAO,SAASA,qBAAqBC,QAAkB;IACrD,OAAOA,SAASC,MAAM,KAAK,IACvB,CAAC,SAAS,EAAED,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,GAC1B,CAAC,SAAS,EAAEE,wBAAwBF,WAAW;AACrD;AAEA,OAAO,SAASE,wBAAwBC,KAAe;IACrD,OAAO,CAAC,CAAC,EAAEA,MAAMC,GAAG,CAAC,CAACC,IAAM,CAAC,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAEC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpD;AAEA,OAAO,SAASC,cAAcJ,KAAe;IAC3C,OAAOA,MAAMC,GAAG,CAAC,CAACI,IAAM,CAAC,GAAG,EAAEA,EAAE,CAAC,CAAC,EAAEF,IAAI,CAAC;AAC3C"}
1
+ {"version":3,"sources":["../../../../src/actions/schema/utils/schemaStoreOutStrings.ts"],"sourcesContent":["export function getDatasetsOutString(datasets: string[]) {\n return datasets.length === 1\n ? `dataset \"${datasets[0]}\"`\n : `datasets ${getStringArrayOutString(datasets)}`\n}\n\nfunction getStringArrayOutString(array: string[]) {\n return `[${array.map((d) => `\"${d}\"`).join(',')}]`\n}\n\nexport function getStringList(array: string[]) {\n return array.map((s) => `- \"${s}\"`).join('\\n')\n}\n"],"names":["getDatasetsOutString","datasets","length","getStringArrayOutString","array","map","d","join","getStringList","s"],"mappings":"AAAA,OAAO,SAASA,qBAAqBC,QAAkB;IACrD,OAAOA,SAASC,MAAM,KAAK,IACvB,CAAC,SAAS,EAAED,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,GAC1B,CAAC,SAAS,EAAEE,wBAAwBF,WAAW;AACrD;AAEA,SAASE,wBAAwBC,KAAe;IAC9C,OAAO,CAAC,CAAC,EAAEA,MAAMC,GAAG,CAAC,CAACC,IAAM,CAAC,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAEC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpD;AAEA,OAAO,SAASC,cAAcJ,KAAe;IAC3C,OAAOA,MAAMC,GAAG,CAAC,CAACI,IAAM,CAAC,GAAG,EAAEA,EAAE,CAAC,CAAC,EAAEF,IAAI,CAAC;AAC3C"}
@@ -1,81 +1,29 @@
1
1
  import { type Output } from '@sanity/cli-core';
2
- import { type DeleteSchemaFlags } from '../deleteSchemaAction.js';
3
- export interface DeploySchemasFlags extends SchemaStoreCommonFlags {
4
- 'schema-required'?: boolean;
5
- tag?: string;
6
- workspace?: string;
7
- }
8
- export interface SchemaListFlags extends SchemaStoreCommonFlags {
9
- id?: string;
10
- json?: boolean;
11
- }
12
- export declare const validForIdChars = "a-zA-Z0-9._-";
13
- export declare const validForIdPattern: RegExp;
14
2
  export declare const validForNamesChars = "a-zA-Z0-9_-";
15
3
  export declare const validForNamesPattern: RegExp;
16
4
  export declare class FlagValidationError extends Error {
17
5
  constructor(message: string);
18
6
  }
19
- interface WorkspaceSchemaId {
7
+ export interface WorkspaceSchemaId {
20
8
  schemaId: string;
21
9
  workspace: string;
22
10
  }
23
- export interface SchemaStoreCommonFlags {
24
- 'extract-manifest'?: boolean;
25
- 'manifest-dir'?: string;
26
- verbose?: boolean;
27
- }
28
- export declare function parseDeploySchemasConfig(flags: DeploySchemasFlags, context: {
29
- workDir: string;
30
- }): {
31
- schemaRequired: boolean;
32
- tag: string | undefined;
33
- workspaceName: string | undefined;
34
- extractManifest: boolean;
35
- manifestDir: string;
36
- verbose: boolean;
37
- };
38
- export declare function parseListSchemasConfig(flags: SchemaListFlags, context: {
39
- workDir: string;
40
- }): {
41
- id: string | undefined;
42
- json: boolean;
43
- extractManifest: boolean;
44
- manifestDir: string;
45
- verbose: boolean;
46
- };
47
- export declare function parseDeleteSchemasConfig(flags: DeleteSchemaFlags, context: {
48
- workDir: string;
49
- }): {
50
- dataset: string | undefined;
51
- ids: WorkspaceSchemaId[];
52
- extractManifest: boolean;
53
- manifestDir: string;
54
- verbose: boolean;
55
- };
56
- export declare function parseIds(flags: {
57
- ids?: unknown;
58
- }, errors: string[]): WorkspaceSchemaId[];
59
- export declare function parseId(flags: {
60
- id?: unknown;
61
- }, errors: string[]): string | undefined;
62
- export declare function parseWorkspaceSchemaId(id: string, errors: string[]): {
11
+ export declare function parseIds(ids?: string): WorkspaceSchemaId[];
12
+ export declare function parseWorkspaceSchemaId(errors: string[], id?: string): {
63
13
  schemaId: string;
64
14
  workspace: string;
65
15
  } | undefined;
66
- export declare function parseTag(flags: {
67
- tag?: unknown;
68
- }, errors: string[]): string | undefined;
69
16
  /**
70
- * At the moment schema store commands does not support studios where workspaces have multiple projects
17
+ *
18
+ * @param tag - The tag to parse
19
+ * Throws an error if the tag is empty
20
+ * Throws an error if the tag contains a period
21
+ * Throws an error if the tag starts with a dash
22
+ * Returns the parsed tag
71
23
  */
72
- export declare function throwWriteProjectIdMismatch(workspace: {
73
- name: string;
74
- projectId: string;
75
- }, projectId: string): void;
24
+ export declare function parseTag(tag?: string): Promise<string | undefined>;
76
25
  export declare function filterLogReadProjectIdMismatch(workspace: {
77
26
  name: string;
78
27
  projectId: string;
79
28
  }, projectId: string, output: Output): boolean;
80
29
  export declare const SCHEMA_PERMISSION_HELP_TEXT = "For multi-project workspaces, set SANITY_AUTH_TOKEN environment variable to a token with access to the workspace projects.";
81
- export {};
@@ -1,111 +1,48 @@
1
+ import { CLIError } from '@oclif/core/errors';
2
+ import { uniqBy } from '../../../util/uniqBy.js';
1
3
  import { isDefined } from '../../manifest/schemaTypeHelpers.js';
2
4
  import { SANITY_WORKSPACE_SCHEMA_ID_PREFIX } from '../../manifest/types.js';
3
- import { resolveManifestDirectory } from './manifestReader.js';
4
- // Native implementation instead of lodash/uniqBy
5
- function uniqBy(array, key) {
6
- const seen = new Set();
7
- return array.filter((item)=>{
8
- const value = item[key];
9
- if (seen.has(value)) {
10
- return false;
11
- }
12
- seen.add(value);
13
- return true;
14
- });
15
- }
16
- export const validForIdChars = 'a-zA-Z0-9._-';
17
- export const validForIdPattern = new RegExp(`^[${validForIdChars}]+$`);
5
+ const validForIdChars = 'a-zA-Z0-9._-';
6
+ const validForIdPattern = new RegExp(`^[${validForIdChars}]+$`);
18
7
  //no periods allowed in workspaceName or tag in ids
19
8
  export const validForNamesChars = 'a-zA-Z0-9_-';
20
9
  export const validForNamesPattern = new RegExp(`^[${validForNamesChars}]+$`);
21
10
  const requiredInId = SANITY_WORKSPACE_SCHEMA_ID_PREFIX.replaceAll(/[.]/g, String.raw`\.`);
22
- const idIdPatternString = `^${requiredInId}\\.([${validForNamesChars}]+)`;
11
+ const idIdPatternString = String.raw`^${requiredInId}\.([${validForNamesChars}]+)`;
23
12
  const baseIdPattern = new RegExp(`${idIdPatternString}$`);
24
- const taggedIdIdPattern = new RegExp(`${idIdPatternString}\\.tag\\.([${validForNamesChars}]+)$`);
13
+ const taggedIdIdPattern = new RegExp(String.raw`${idIdPatternString}\.tag\.([${validForNamesChars}]+)$`);
25
14
  export class FlagValidationError extends Error {
26
15
  constructor(message){
27
16
  super(message);
28
17
  this.name = 'FlagValidationError';
29
18
  }
30
19
  }
31
- function parseCommonFlags(flags, context, errors) {
32
- const manifestDir = parseManifestDir(flags, errors);
33
- const verbose = !!flags.verbose;
34
- // extract manifest by default: our CLI layer handles both --extract-manifest (true) and --no-extract-manifest (false)
35
- const extractManifest = flags['extract-manifest'] ?? true;
36
- const fullManifestDir = resolveManifestDirectory(context.workDir, manifestDir);
37
- return {
38
- extractManifest,
39
- manifestDir: fullManifestDir,
40
- verbose
41
- };
42
- }
43
- export function parseDeploySchemasConfig(flags, context) {
44
- const errors = [];
45
- const commonFlags = parseCommonFlags(flags, context, errors);
46
- const workspaceName = parseWorkspace(flags, errors);
47
- const tag = parseTag(flags, errors);
48
- const schemaRequired = !!flags['schema-required'];
49
- assertNoErrors(errors);
50
- return {
51
- ...commonFlags,
52
- schemaRequired,
53
- tag,
54
- workspaceName
55
- };
56
- }
57
- export function parseListSchemasConfig(flags, context) {
58
- const errors = [];
59
- const commonFlags = parseCommonFlags(flags, context, errors);
60
- const id = parseId(flags, errors);
61
- const json = !!flags.json;
62
- assertNoErrors(errors);
63
- return {
64
- ...commonFlags,
65
- id,
66
- json
67
- };
68
- }
69
- export function parseDeleteSchemasConfig(flags, context) {
70
- const errors = [];
71
- const commonFlags = parseCommonFlags(flags, context, errors);
72
- const ids = parseIds(flags, errors);
73
- const dataset = parseDataset(flags, errors);
74
- assertNoErrors(errors);
75
- return {
76
- ...commonFlags,
77
- dataset,
78
- ids
79
- };
80
- }
81
- function assertNoErrors(errors) {
82
- if (errors.length > 0) {
83
- throw new FlagValidationError(`Invalid arguments:\n${errors.map((error)=>` - ${error}`).join('\n')}`);
20
+ export function parseIds(ids) {
21
+ if (!ids) {
22
+ throw new CLIError('ids argument is empty');
84
23
  }
85
- }
86
- export function parseIds(flags, errors) {
87
- const parsedIds = parseNonEmptyString(flags, 'ids', errors);
24
+ const errors = [];
25
+ const parsedIds = ids.split(',').map((id)=>id.trim()).filter((id)=>!!id).map((id)=>parseWorkspaceSchemaId(errors, id)).filter((item)=>isDefined(item));
88
26
  if (errors.length > 0) {
89
- return [];
27
+ throw new CLIError(`Invalid arguments:\n${errors.map((error)=>` - ${error}`).join('\n')}`);
90
28
  }
91
- const ids = parsedIds.split(',').map((id)=>id.trim()).filter((id)=>!!id).map((id)=>parseWorkspaceSchemaId(id, errors)).filter((item)=>isDefined(item));
92
- const uniqueIds = uniqBy(ids, 'schemaId');
93
- if (uniqueIds.length < ids.length) {
94
- errors.push(`ids contains duplicates`);
29
+ if (parsedIds.length === 0) {
30
+ throw new CLIError(`ids contains no valid id strings`);
95
31
  }
96
- if (errors.length === 0 && uniqueIds.length === 0) {
97
- errors.push(`ids contains no valid id strings`);
32
+ const uniqueIds = uniqBy(parsedIds, 'schemaId');
33
+ if (uniqueIds.length < parsedIds.length) {
34
+ throw new CLIError(`ids contains duplicates`);
98
35
  }
99
36
  return uniqueIds;
100
37
  }
101
- export function parseId(flags, errors) {
102
- const id = flags.id === undefined ? undefined : parseNonEmptyString(flags, 'id', errors);
103
- if (id) {
104
- return parseWorkspaceSchemaId(id, errors)?.schemaId;
38
+ export function parseWorkspaceSchemaId(errors, id) {
39
+ if (id === undefined) {
40
+ return;
41
+ }
42
+ if (!id) {
43
+ errors.push('id argument is empty');
44
+ return;
105
45
  }
106
- return;
107
- }
108
- export function parseWorkspaceSchemaId(id, errors) {
109
46
  const trimmedId = id.trim();
110
47
  if (!validForIdPattern.test(trimmedId)) {
111
48
  errors.push(`id can only contain characters in [${validForIdChars}] but found: "${trimmedId}"`);
@@ -133,58 +70,34 @@ export function parseWorkspaceSchemaId(id, errors) {
133
70
  workspace
134
71
  };
135
72
  }
136
- function parseDataset(flags, errors) {
137
- return flags.dataset === undefined ? undefined : parseNonEmptyString(flags, 'dataset', errors);
138
- }
139
- function parseWorkspace(flags, errors) {
140
- return flags.workspace === undefined ? undefined : parseNonEmptyString(flags, 'workspace', errors);
141
- }
142
- function parseManifestDir(flags, errors) {
143
- return flags['manifest-dir'] === undefined ? undefined : parseNonEmptyString(flags, 'manifest-dir', errors);
144
- }
145
- export function parseTag(flags, errors) {
146
- if (flags.tag === undefined) {
147
- return;
148
- }
149
- const tag = parseNonEmptyString(flags, 'tag', errors);
150
- if (errors.length > 0) {
151
- return;
73
+ /**
74
+ *
75
+ * @param tag - The tag to parse
76
+ * Throws an error if the tag is empty
77
+ * Throws an error if the tag contains a period
78
+ * Throws an error if the tag starts with a dash
79
+ * Returns the parsed tag
80
+ */ export async function parseTag(tag) {
81
+ if (tag === undefined) {
82
+ return tag;
83
+ }
84
+ if (!tag) {
85
+ throw new CLIError('tag argument is empty');
152
86
  }
153
87
  if (tag.includes('.')) {
154
- errors.push(`tag cannot contain . (period), but was: "${tag}"`);
155
- return;
88
+ throw new CLIError(`tag cannot contain . (period), but was: "${tag}"`);
156
89
  }
157
90
  if (!validForNamesPattern.test(tag)) {
158
- errors.push(`tag can only contain characters in [${validForNamesChars}], but was: "${tag}"`);
159
- return;
91
+ throw new CLIError(`tag can only contain characters in [${validForNamesChars}], but was: "${tag}"`);
160
92
  }
161
93
  if (tag.startsWith('-')) {
162
- errors.push(`tag cannot start with - (dash) but was: "${tag}"`);
163
- return;
94
+ throw new CLIError(`tag cannot start with - (dash) but was: "${tag}"`);
164
95
  }
165
96
  return tag;
166
97
  }
167
- function parseNonEmptyString(flags, flagName, errors) {
168
- const flag = flags[flagName];
169
- if (!isString(flag) || !flag) {
170
- errors.push(`${flagName} argument is empty`);
171
- return '';
172
- }
173
- return flag;
174
- }
175
- function isString(flag) {
176
- return typeof flag === 'string';
177
- }
178
98
  function getProjectIdMismatchMessage(workspace, operation) {
179
99
  return `No permissions to ${operation} schema for workspace "${workspace.name}" with projectId "${workspace.projectId}"`;
180
100
  }
181
- /**
182
- * At the moment schema store commands does not support studios where workspaces have multiple projects
183
- */ export function throwWriteProjectIdMismatch(workspace, projectId) {
184
- if (workspace.projectId !== projectId) {
185
- throw new Error(getProjectIdMismatchMessage(workspace, 'write'));
186
- }
187
- }
188
101
  export function filterLogReadProjectIdMismatch(workspace, projectId, output) {
189
102
  const canRead = workspace.projectId === projectId;
190
103
  if (!canRead) output.warn(`${getProjectIdMismatchMessage(workspace, 'read')} – ignoring it.`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/actions/schema/utils/schemaStoreValidation.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\n\nimport {isDefined} from '../../manifest/schemaTypeHelpers.js'\nimport {SANITY_WORKSPACE_SCHEMA_ID_PREFIX} from '../../manifest/types.js'\nimport {type DeleteSchemaFlags} from '../deleteSchemaAction.js'\nimport {resolveManifestDirectory} from './manifestReader.js'\n\n// TODO: These types will be imported from their respective files when migrated\nexport interface DeploySchemasFlags extends SchemaStoreCommonFlags {\n 'schema-required'?: boolean\n tag?: string\n workspace?: string\n}\n\nexport interface SchemaListFlags extends SchemaStoreCommonFlags {\n id?: string\n json?: boolean\n}\n\n// Native implementation instead of lodash/uniqBy\nfunction uniqBy<T>(array: T[], key: keyof T): T[] {\n const seen = new Set()\n return array.filter((item) => {\n const value = item[key]\n if (seen.has(value)) {\n return false\n }\n seen.add(value)\n return true\n })\n}\n\nexport const validForIdChars = 'a-zA-Z0-9._-'\nexport const validForIdPattern = new RegExp(`^[${validForIdChars}]+$`)\n\n//no periods allowed in workspaceName or tag in ids\nexport const validForNamesChars = 'a-zA-Z0-9_-'\nexport const validForNamesPattern = new RegExp(`^[${validForNamesChars}]+$`)\n\nconst requiredInId = SANITY_WORKSPACE_SCHEMA_ID_PREFIX.replaceAll(/[.]/g, String.raw`\\.`)\n\nconst idIdPatternString = `^${requiredInId}\\\\.([${validForNamesChars}]+)`\nconst baseIdPattern = new RegExp(`${idIdPatternString}$`)\nconst taggedIdIdPattern = new RegExp(`${idIdPatternString}\\\\.tag\\\\.([${validForNamesChars}]+)$`)\n\nexport class FlagValidationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'FlagValidationError'\n }\n}\n\ninterface WorkspaceSchemaId {\n schemaId: string\n workspace: string\n}\n\nexport interface SchemaStoreCommonFlags {\n 'extract-manifest'?: boolean\n 'manifest-dir'?: string\n verbose?: boolean\n}\n\nfunction parseCommonFlags(\n flags: SchemaStoreCommonFlags,\n context: {workDir: string},\n errors: string[],\n) {\n const manifestDir = parseManifestDir(flags, errors)\n const verbose = !!flags.verbose\n // extract manifest by default: our CLI layer handles both --extract-manifest (true) and --no-extract-manifest (false)\n const extractManifest = flags['extract-manifest'] ?? true\n\n const fullManifestDir = resolveManifestDirectory(context.workDir, manifestDir)\n return {\n extractManifest,\n manifestDir: fullManifestDir,\n verbose,\n }\n}\n\nexport function parseDeploySchemasConfig(flags: DeploySchemasFlags, context: {workDir: string}) {\n const errors: string[] = []\n\n const commonFlags = parseCommonFlags(flags, context, errors)\n const workspaceName = parseWorkspace(flags, errors)\n const tag = parseTag(flags, errors)\n const schemaRequired = !!flags['schema-required']\n\n assertNoErrors(errors)\n return {...commonFlags, schemaRequired, tag, workspaceName}\n}\n\nexport function parseListSchemasConfig(flags: SchemaListFlags, context: {workDir: string}) {\n const errors: string[] = []\n\n const commonFlags = parseCommonFlags(flags, context, errors)\n const id = parseId(flags, errors)\n const json = !!flags.json\n\n assertNoErrors(errors)\n return {...commonFlags, id, json}\n}\n\nexport function parseDeleteSchemasConfig(flags: DeleteSchemaFlags, context: {workDir: string}) {\n const errors: string[] = []\n\n const commonFlags = parseCommonFlags(flags, context, errors)\n const ids = parseIds(flags, errors)\n const dataset = parseDataset(flags, errors)\n\n assertNoErrors(errors)\n return {...commonFlags, dataset, ids}\n}\n\nfunction assertNoErrors(errors: string[]) {\n if (errors.length > 0) {\n throw new FlagValidationError(\n `Invalid arguments:\\n${errors.map((error) => ` - ${error}`).join('\\n')}`,\n )\n }\n}\n\nexport function parseIds(flags: {ids?: unknown}, errors: string[]): WorkspaceSchemaId[] {\n const parsedIds = parseNonEmptyString(flags, 'ids', errors)\n if (errors.length > 0) {\n return []\n }\n\n const ids = parsedIds\n .split(',')\n .map((id) => id.trim())\n .filter((id) => !!id)\n .map((id) => parseWorkspaceSchemaId(id, errors))\n .filter((item) => isDefined(item))\n\n const uniqueIds = uniqBy(ids, 'schemaId' satisfies keyof (typeof ids)[number])\n if (uniqueIds.length < ids.length) {\n errors.push(`ids contains duplicates`)\n }\n if (errors.length === 0 && uniqueIds.length === 0) {\n errors.push(`ids contains no valid id strings`)\n }\n return uniqueIds\n}\n\nexport function parseId(flags: {id?: unknown}, errors: string[]) {\n const id = flags.id === undefined ? undefined : parseNonEmptyString(flags, 'id', errors)\n if (id) {\n return parseWorkspaceSchemaId(id, errors)?.schemaId\n }\n return\n}\n\nexport function parseWorkspaceSchemaId(id: string, errors: string[]) {\n const trimmedId = id.trim()\n\n if (!validForIdPattern.test(trimmedId)) {\n errors.push(`id can only contain characters in [${validForIdChars}] but found: \"${trimmedId}\"`)\n return\n }\n\n if (trimmedId.startsWith('-')) {\n errors.push(`id cannot start with - (dash) but found: \"${trimmedId}\"`)\n return\n }\n\n if (/\\.\\./g.test(trimmedId)) {\n errors.push(`id cannot have consecutive . (period) characters, but found: \"${trimmedId}\"`)\n return\n }\n\n const [, workspace] = trimmedId.match(taggedIdIdPattern) ?? trimmedId.match(baseIdPattern) ?? []\n if (!workspace) {\n errors.push(\n [\n `id must either match ${SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.<workspaceName> `,\n `or ${SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.<workspaceName>.tag.<tag> but found: \"${trimmedId}\". `,\n `Note that workspace name characters not in [${validForNamesChars}] has to be replaced with _ for schema id.`,\n ].join(''),\n )\n return\n }\n return {\n schemaId: trimmedId,\n workspace,\n }\n}\n\nfunction parseDataset(flags: {dataset?: unknown}, errors: string[]) {\n return flags.dataset === undefined ? undefined : parseNonEmptyString(flags, 'dataset', errors)\n}\n\nfunction parseWorkspace(flags: {workspace?: unknown}, errors: string[]) {\n return flags.workspace === undefined ? undefined : parseNonEmptyString(flags, 'workspace', errors)\n}\n\nfunction parseManifestDir(flags: {'manifest-dir'?: unknown}, errors: string[]) {\n return flags['manifest-dir'] === undefined\n ? undefined\n : parseNonEmptyString(flags, 'manifest-dir', errors)\n}\n\nexport function parseTag(flags: {tag?: unknown}, errors: string[]) {\n if (flags.tag === undefined) {\n return\n }\n\n const tag = parseNonEmptyString(flags, 'tag', errors)\n if (errors.length > 0) {\n return\n }\n\n if (tag.includes('.')) {\n errors.push(`tag cannot contain . (period), but was: \"${tag}\"`)\n return\n }\n\n if (!validForNamesPattern.test(tag)) {\n errors.push(`tag can only contain characters in [${validForNamesChars}], but was: \"${tag}\"`)\n return\n }\n\n if (tag.startsWith('-')) {\n errors.push(`tag cannot start with - (dash) but was: \"${tag}\"`)\n return\n }\n\n return tag\n}\n\nfunction parseNonEmptyString<\n Flag extends string,\n Flags extends Partial<Record<Flag, unknown | undefined>>,\n>(flags: Flags, flagName: Flag, errors: string[]): string {\n const flag = flags[flagName]\n if (!isString(flag) || !flag) {\n errors.push(`${flagName} argument is empty`)\n return ''\n }\n return flag\n}\n\nfunction isString(flag: unknown): flag is string {\n return typeof flag === 'string'\n}\n\nfunction getProjectIdMismatchMessage(\n workspace: {name: string; projectId: string},\n operation: 'read' | 'write',\n) {\n return `No permissions to ${operation} schema for workspace \"${workspace.name}\" with projectId \"${workspace.projectId}\"`\n}\n\n/**\n * At the moment schema store commands does not support studios where workspaces have multiple projects\n */\nexport function throwWriteProjectIdMismatch(\n workspace: {name: string; projectId: string},\n projectId: string,\n): void {\n if (workspace.projectId !== projectId) {\n throw new Error(getProjectIdMismatchMessage(workspace, 'write'))\n }\n}\n\nexport function filterLogReadProjectIdMismatch(\n workspace: {name: string; projectId: string},\n projectId: string,\n output: Output,\n) {\n const canRead = workspace.projectId === projectId\n if (!canRead) output.warn(`${getProjectIdMismatchMessage(workspace, 'read')} – ignoring it.`)\n return canRead\n}\n\nexport const SCHEMA_PERMISSION_HELP_TEXT =\n 'For multi-project workspaces, set SANITY_AUTH_TOKEN environment variable to a token with access to the workspace projects.'\n"],"names":["isDefined","SANITY_WORKSPACE_SCHEMA_ID_PREFIX","resolveManifestDirectory","uniqBy","array","key","seen","Set","filter","item","value","has","add","validForIdChars","validForIdPattern","RegExp","validForNamesChars","validForNamesPattern","requiredInId","replaceAll","String","raw","idIdPatternString","baseIdPattern","taggedIdIdPattern","FlagValidationError","Error","message","name","parseCommonFlags","flags","context","errors","manifestDir","parseManifestDir","verbose","extractManifest","fullManifestDir","workDir","parseDeploySchemasConfig","commonFlags","workspaceName","parseWorkspace","tag","parseTag","schemaRequired","assertNoErrors","parseListSchemasConfig","id","parseId","json","parseDeleteSchemasConfig","ids","parseIds","dataset","parseDataset","length","map","error","join","parsedIds","parseNonEmptyString","split","trim","parseWorkspaceSchemaId","uniqueIds","push","undefined","schemaId","trimmedId","test","startsWith","workspace","match","includes","flagName","flag","isString","getProjectIdMismatchMessage","operation","projectId","throwWriteProjectIdMismatch","filterLogReadProjectIdMismatch","output","canRead","warn","SCHEMA_PERMISSION_HELP_TEXT"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/actions/schema/utils/schemaStoreValidation.ts"],"sourcesContent":["import {CLIError} from '@oclif/core/errors'\nimport {type Output} from '@sanity/cli-core'\n\nimport {uniqBy} from '../../../util/uniqBy.js'\nimport {isDefined} from '../../manifest/schemaTypeHelpers.js'\nimport {SANITY_WORKSPACE_SCHEMA_ID_PREFIX} from '../../manifest/types.js'\n\nconst validForIdChars = 'a-zA-Z0-9._-'\nconst validForIdPattern = new RegExp(`^[${validForIdChars}]+$`)\n\n//no periods allowed in workspaceName or tag in ids\nexport const validForNamesChars = 'a-zA-Z0-9_-'\nexport const validForNamesPattern = new RegExp(`^[${validForNamesChars}]+$`)\n\nconst requiredInId = SANITY_WORKSPACE_SCHEMA_ID_PREFIX.replaceAll(/[.]/g, String.raw`\\.`)\n\nconst idIdPatternString = String.raw`^${requiredInId}\\.([${validForNamesChars}]+)`\nconst baseIdPattern = new RegExp(`${idIdPatternString}$`)\nconst taggedIdIdPattern = new RegExp(\n String.raw`${idIdPatternString}\\.tag\\.([${validForNamesChars}]+)$`,\n)\n\nexport class FlagValidationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'FlagValidationError'\n }\n}\n\nexport interface WorkspaceSchemaId {\n schemaId: string\n workspace: string\n}\n\nexport function parseIds(ids?: string): WorkspaceSchemaId[] {\n if (!ids) {\n throw new CLIError('ids argument is empty')\n }\n\n const errors: string[] = []\n\n const parsedIds = ids\n .split(',')\n .map((id) => id.trim())\n .filter((id) => !!id)\n .map((id) => parseWorkspaceSchemaId(errors, id))\n .filter((item) => isDefined(item))\n\n if (errors.length > 0) {\n throw new CLIError(`Invalid arguments:\\n${errors.map((error) => ` - ${error}`).join('\\n')}`)\n }\n\n if (parsedIds.length === 0) {\n throw new CLIError(`ids contains no valid id strings`)\n }\n\n const uniqueIds = uniqBy(parsedIds, 'schemaId' satisfies keyof (typeof parsedIds)[number])\n if (uniqueIds.length < parsedIds.length) {\n throw new CLIError(`ids contains duplicates`)\n }\n\n return uniqueIds\n}\n\nexport function parseWorkspaceSchemaId(errors: string[], id?: string) {\n if (id === undefined) {\n return\n }\n\n if (!id) {\n errors.push('id argument is empty')\n return\n }\n\n const trimmedId = id.trim()\n\n if (!validForIdPattern.test(trimmedId)) {\n errors.push(`id can only contain characters in [${validForIdChars}] but found: \"${trimmedId}\"`)\n return\n }\n\n if (trimmedId.startsWith('-')) {\n errors.push(`id cannot start with - (dash) but found: \"${trimmedId}\"`)\n return\n }\n\n if (/\\.\\./g.test(trimmedId)) {\n errors.push(`id cannot have consecutive . (period) characters, but found: \"${trimmedId}\"`)\n return\n }\n\n const [, workspace] = trimmedId.match(taggedIdIdPattern) ?? trimmedId.match(baseIdPattern) ?? []\n if (!workspace) {\n errors.push(\n [\n `id must either match ${SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.<workspaceName> `,\n `or ${SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.<workspaceName>.tag.<tag> but found: \"${trimmedId}\". `,\n `Note that workspace name characters not in [${validForNamesChars}] has to be replaced with _ for schema id.`,\n ].join(''),\n )\n return\n }\n return {\n schemaId: trimmedId,\n workspace,\n }\n}\n\n/**\n *\n * @param tag - The tag to parse\n * Throws an error if the tag is empty\n * Throws an error if the tag contains a period\n * Throws an error if the tag starts with a dash\n * Returns the parsed tag\n */\nexport async function parseTag(tag?: string) {\n if (tag === undefined) {\n return tag\n }\n\n if (!tag) {\n throw new CLIError('tag argument is empty')\n }\n\n if (tag.includes('.')) {\n throw new CLIError(`tag cannot contain . (period), but was: \"${tag}\"`)\n }\n\n if (!validForNamesPattern.test(tag)) {\n throw new CLIError(\n `tag can only contain characters in [${validForNamesChars}], but was: \"${tag}\"`,\n )\n }\n\n if (tag.startsWith('-')) {\n throw new CLIError(`tag cannot start with - (dash) but was: \"${tag}\"`)\n }\n\n return tag\n}\n\nfunction getProjectIdMismatchMessage(\n workspace: {name: string; projectId: string},\n operation: 'read' | 'write',\n) {\n return `No permissions to ${operation} schema for workspace \"${workspace.name}\" with projectId \"${workspace.projectId}\"`\n}\n\nexport function filterLogReadProjectIdMismatch(\n workspace: {name: string; projectId: string},\n projectId: string,\n output: Output,\n) {\n const canRead = workspace.projectId === projectId\n if (!canRead) output.warn(`${getProjectIdMismatchMessage(workspace, 'read')} – ignoring it.`)\n return canRead\n}\n\nexport const SCHEMA_PERMISSION_HELP_TEXT =\n 'For multi-project workspaces, set SANITY_AUTH_TOKEN environment variable to a token with access to the workspace projects.'\n"],"names":["CLIError","uniqBy","isDefined","SANITY_WORKSPACE_SCHEMA_ID_PREFIX","validForIdChars","validForIdPattern","RegExp","validForNamesChars","validForNamesPattern","requiredInId","replaceAll","String","raw","idIdPatternString","baseIdPattern","taggedIdIdPattern","FlagValidationError","Error","message","name","parseIds","ids","errors","parsedIds","split","map","id","trim","filter","parseWorkspaceSchemaId","item","length","error","join","uniqueIds","undefined","push","trimmedId","test","startsWith","workspace","match","schemaId","parseTag","tag","includes","getProjectIdMismatchMessage","operation","projectId","filterLogReadProjectIdMismatch","output","canRead","warn","SCHEMA_PERMISSION_HELP_TEXT"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type ManifestWorkspaceFile } from '../../manifest/types';
2
+ export declare function uniqByProjectIdDataset(workspaces: ManifestWorkspaceFile[]): {
3
+ key: string;
4
+ schema: string;
5
+ tools: string;
6
+ name: string;
7
+ title?: string | undefined;
8
+ mediaLibrary?: import("sanity").MediaLibraryConfig | undefined;
9
+ dataset: string;
10
+ projectId: string;
11
+ basePath: string;
12
+ icon: string | null;
13
+ subtitle?: string | undefined;
14
+ }[];
@@ -0,0 +1,9 @@
1
+ import { uniqBy } from '../../../util/uniqBy.js';
2
+ export function uniqByProjectIdDataset(workspaces) {
3
+ return uniqBy(workspaces.map((w)=>({
4
+ ...w,
5
+ key: `${w.projectId}-${w.dataset}`
6
+ })), 'key');
7
+ }
8
+
9
+ //# sourceMappingURL=uniqByProjectIdDataset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/actions/schema/utils/uniqByProjectIdDataset.ts"],"sourcesContent":["import {uniqBy} from '../../../util/uniqBy.js'\nimport {type ManifestWorkspaceFile} from '../../manifest/types'\n\nexport function uniqByProjectIdDataset(workspaces: ManifestWorkspaceFile[]) {\n return uniqBy(\n workspaces.map((w) => ({\n ...w,\n key: `${w.projectId}-${w.dataset}`,\n })),\n 'key',\n )\n}\n"],"names":["uniqBy","uniqByProjectIdDataset","workspaces","map","w","key","projectId","dataset"],"mappings":"AAAA,SAAQA,MAAM,QAAO,0BAAyB;AAG9C,OAAO,SAASC,uBAAuBC,UAAmC;IACxE,OAAOF,OACLE,WAAWC,GAAG,CAAC,CAACC,IAAO,CAAA;YACrB,GAAGA,CAAC;YACJC,KAAK,GAAGD,EAAEE,SAAS,CAAC,CAAC,EAAEF,EAAEG,OAAO,EAAE;QACpC,CAAA,IACA;AAEJ"}
@@ -1,6 +1,4 @@
1
- import { type SanityClient } from '@sanity/client';
2
1
  interface GetMembersForProjectOptions {
3
- client: SanityClient;
4
2
  projectId: string;
5
3
  /**
6
4
  * Whether to include pending invitations in the response
@@ -22,5 +20,5 @@ interface MemberList {
22
20
  *
23
21
  * @returns A list of all members for a project
24
22
  */
25
- export declare function getMembersForProject({ client, includeInvitations, includeRobots, projectId, }: GetMembersForProjectOptions): Promise<MemberList[]>;
23
+ export declare function getMembersForProject({ includeInvitations, includeRobots, projectId, }: GetMembersForProjectOptions): Promise<MemberList[]>;
26
24
  export {};
@@ -1,3 +1,5 @@
1
+ import { getProjectById, getProjectInvites } from '../../services/projects.js';
2
+ import { getMembers } from '../../services/user.js';
1
3
  import { getPendingInvitations } from './getPendingInvitations.js';
2
4
  import { usersDebug } from './usersDebug.js';
3
5
  function getUserProps(user) {
@@ -11,28 +13,15 @@ function getUserProps(user) {
11
13
  * Get all members for a project
12
14
  *
13
15
  * @returns A list of all members for a project
14
- */ export async function getMembersForProject({ client, includeInvitations, includeRobots, projectId }) {
16
+ */ export async function getMembersForProject({ includeInvitations, includeRobots, projectId }) {
15
17
  try {
16
- const useGlobalApi = true;
17
18
  const [pendingInvitations, project] = await Promise.all([
18
- includeInvitations ? client.request({
19
- uri: `/invitations/project/${projectId}`,
20
- useGlobalApi
21
- }).then(getPendingInvitations) : [],
22
- client.request({
23
- query: {
24
- includeFeatures: 'false'
25
- },
26
- uri: `/projects/${projectId}`,
27
- useGlobalApi
28
- })
19
+ includeInvitations ? getProjectInvites(projectId).then(getPendingInvitations) : [],
20
+ getProjectById(projectId)
29
21
  ]);
30
22
  const memberIds = project.members// Filter all the robot users if the robots flag is not set
31
23
  .filter((member)=>!member.isRobot || includeRobots).map((member)=>member.id);
32
- const users = await client.request({
33
- uri: `/users/${memberIds.join(',')}`,
34
- useGlobalApi
35
- }).then((user)=>Array.isArray(user) ? user : [
24
+ const users = await getMembers(memberIds).then((user)=>Array.isArray(user) ? user : [
36
25
  user
37
26
  ]);
38
27
  const projectMembers = project.members.map((member)=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/users/getMembersForProject.ts"],"sourcesContent":["import {type SanityClient} from '@sanity/client'\n\nimport {getPendingInvitations} from './getPendingInvitations.js'\nimport {type Invite, type PartialProjectResponse, type User} from './types.js'\nimport {usersDebug} from './usersDebug.js'\n\ninterface GetMembersForProjectOptions {\n client: SanityClient\n projectId: string\n\n /**\n * Whether to include pending invitations in the response\n */\n includeInvitations?: boolean\n\n /**\n * Whether to include robots in the response\n */\n includeRobots?: boolean\n}\n\nfunction getUserProps(user: User | undefined) {\n const {createdAt: date, displayName: name} = user || {}\n return {date: date || '', name: name || ''}\n}\n\ninterface MemberList {\n date: string\n id: string\n name: string\n role: string\n}\n\n/**\n * Get all members for a project\n *\n * @returns A list of all members for a project\n */\nexport async function getMembersForProject({\n client,\n includeInvitations,\n includeRobots,\n projectId,\n}: GetMembersForProjectOptions): Promise<MemberList[]> {\n try {\n const useGlobalApi = true\n const [pendingInvitations, project] = await Promise.all([\n includeInvitations\n ? client\n .request<Invite[]>({uri: `/invitations/project/${projectId}`, useGlobalApi})\n .then(getPendingInvitations)\n : [],\n client.request<PartialProjectResponse>({\n query: {\n includeFeatures: 'false',\n },\n uri: `/projects/${projectId}`,\n useGlobalApi,\n }),\n ])\n\n const memberIds = project.members\n // Filter all the robot users if the robots flag is not set\n .filter((member) => !member.isRobot || includeRobots)\n .map((member) => member.id)\n\n const users = await client\n .request<User | User[]>({uri: `/users/${memberIds.join(',')}`, useGlobalApi})\n .then((user) => (Array.isArray(user) ? user : [user]))\n\n const projectMembers = project.members\n .map((member) => {\n return {\n ...member,\n ...getUserProps(users.find((candidate) => candidate.id === member.id)),\n }\n })\n .filter((member) => !member.isRobot || includeRobots)\n\n const members = [...projectMembers, ...pendingInvitations]\n\n usersDebug(`Found ${projectMembers.length} project members for ${projectId}`)\n usersDebug(`Found ${pendingInvitations.length} pending invitations for ${projectId}`)\n return members\n } catch (error) {\n throw new Error(`Error fetching members for ${projectId}`, {cause: error})\n }\n}\n"],"names":["getPendingInvitations","usersDebug","getUserProps","user","createdAt","date","displayName","name","getMembersForProject","client","includeInvitations","includeRobots","projectId","useGlobalApi","pendingInvitations","project","Promise","all","request","uri","then","query","includeFeatures","memberIds","members","filter","member","isRobot","map","id","users","join","Array","isArray","projectMembers","find","candidate","length","error","Error","cause"],"mappings":"AAEA,SAAQA,qBAAqB,QAAO,6BAA4B;AAEhE,SAAQC,UAAU,QAAO,kBAAiB;AAiB1C,SAASC,aAAaC,IAAsB;IAC1C,MAAM,EAACC,WAAWC,IAAI,EAAEC,aAAaC,IAAI,EAAC,GAAGJ,QAAQ,CAAC;IACtD,OAAO;QAACE,MAAMA,QAAQ;QAAIE,MAAMA,QAAQ;IAAE;AAC5C;AASA;;;;CAIC,GACD,OAAO,eAAeC,qBAAqB,EACzCC,MAAM,EACNC,kBAAkB,EAClBC,aAAa,EACbC,SAAS,EACmB;IAC5B,IAAI;QACF,MAAMC,eAAe;QACrB,MAAM,CAACC,oBAAoBC,QAAQ,GAAG,MAAMC,QAAQC,GAAG,CAAC;YACtDP,qBACID,OACGS,OAAO,CAAW;gBAACC,KAAK,CAAC,qBAAqB,EAAEP,WAAW;gBAAEC;YAAY,GACzEO,IAAI,CAACpB,yBACR,EAAE;YACNS,OAAOS,OAAO,CAAyB;gBACrCG,OAAO;oBACLC,iBAAiB;gBACnB;gBACAH,KAAK,CAAC,UAAU,EAAEP,WAAW;gBAC7BC;YACF;SACD;QAED,MAAMU,YAAYR,QAAQS,OAAO,AAC/B,2DAA2D;SAC1DC,MAAM,CAAC,CAACC,SAAW,CAACA,OAAOC,OAAO,IAAIhB,eACtCiB,GAAG,CAAC,CAACF,SAAWA,OAAOG,EAAE;QAE5B,MAAMC,QAAQ,MAAMrB,OACjBS,OAAO,CAAgB;YAACC,KAAK,CAAC,OAAO,EAAEI,UAAUQ,IAAI,CAAC,MAAM;YAAElB;QAAY,GAC1EO,IAAI,CAAC,CAACjB,OAAU6B,MAAMC,OAAO,CAAC9B,QAAQA,OAAO;gBAACA;aAAK;QAEtD,MAAM+B,iBAAiBnB,QAAQS,OAAO,CACnCI,GAAG,CAAC,CAACF;YACJ,OAAO;gBACL,GAAGA,MAAM;gBACT,GAAGxB,aAAa4B,MAAMK,IAAI,CAAC,CAACC,YAAcA,UAAUP,EAAE,KAAKH,OAAOG,EAAE,EAAE;YACxE;QACF,GACCJ,MAAM,CAAC,CAACC,SAAW,CAACA,OAAOC,OAAO,IAAIhB;QAEzC,MAAMa,UAAU;eAAIU;eAAmBpB;SAAmB;QAE1Db,WAAW,CAAC,MAAM,EAAEiC,eAAeG,MAAM,CAAC,qBAAqB,EAAEzB,WAAW;QAC5EX,WAAW,CAAC,MAAM,EAAEa,mBAAmBuB,MAAM,CAAC,yBAAyB,EAAEzB,WAAW;QACpF,OAAOY;IACT,EAAE,OAAOc,OAAO;QACd,MAAM,IAAIC,MAAM,CAAC,2BAA2B,EAAE3B,WAAW,EAAE;YAAC4B,OAAOF;QAAK;IAC1E;AACF"}
1
+ {"version":3,"sources":["../../../src/actions/users/getMembersForProject.ts"],"sourcesContent":["import {getProjectById, getProjectInvites} from '../../services/projects.js'\nimport {getMembers} from '../../services/user.js'\nimport {getPendingInvitations} from './getPendingInvitations.js'\nimport {type User} from './types.js'\nimport {usersDebug} from './usersDebug.js'\n\ninterface GetMembersForProjectOptions {\n projectId: string\n\n /**\n * Whether to include pending invitations in the response\n */\n includeInvitations?: boolean\n\n /**\n * Whether to include robots in the response\n */\n includeRobots?: boolean\n}\n\nfunction getUserProps(user: User | undefined) {\n const {createdAt: date, displayName: name} = user || {}\n return {date: date || '', name: name || ''}\n}\n\ninterface MemberList {\n date: string\n id: string\n name: string\n role: string\n}\n\n/**\n * Get all members for a project\n *\n * @returns A list of all members for a project\n */\nexport async function getMembersForProject({\n includeInvitations,\n includeRobots,\n projectId,\n}: GetMembersForProjectOptions): Promise<MemberList[]> {\n try {\n const [pendingInvitations, project] = await Promise.all([\n includeInvitations ? getProjectInvites(projectId).then(getPendingInvitations) : [],\n getProjectById(projectId),\n ])\n\n const memberIds = project.members\n // Filter all the robot users if the robots flag is not set\n .filter((member) => !member.isRobot || includeRobots)\n .map((member) => member.id)\n\n const users = await getMembers(memberIds).then((user) => (Array.isArray(user) ? user : [user]))\n\n const projectMembers = project.members\n .map((member) => {\n return {\n ...member,\n ...getUserProps(users.find((candidate) => candidate.id === member.id)),\n }\n })\n .filter((member) => !member.isRobot || includeRobots)\n\n const members = [...projectMembers, ...pendingInvitations]\n\n usersDebug(`Found ${projectMembers.length} project members for ${projectId}`)\n usersDebug(`Found ${pendingInvitations.length} pending invitations for ${projectId}`)\n return members\n } catch (error) {\n throw new Error(`Error fetching members for ${projectId}`, {cause: error})\n }\n}\n"],"names":["getProjectById","getProjectInvites","getMembers","getPendingInvitations","usersDebug","getUserProps","user","createdAt","date","displayName","name","getMembersForProject","includeInvitations","includeRobots","projectId","pendingInvitations","project","Promise","all","then","memberIds","members","filter","member","isRobot","map","id","users","Array","isArray","projectMembers","find","candidate","length","error","Error","cause"],"mappings":"AAAA,SAAQA,cAAc,EAAEC,iBAAiB,QAAO,6BAA4B;AAC5E,SAAQC,UAAU,QAAO,yBAAwB;AACjD,SAAQC,qBAAqB,QAAO,6BAA4B;AAEhE,SAAQC,UAAU,QAAO,kBAAiB;AAgB1C,SAASC,aAAaC,IAAsB;IAC1C,MAAM,EAACC,WAAWC,IAAI,EAAEC,aAAaC,IAAI,EAAC,GAAGJ,QAAQ,CAAC;IACtD,OAAO;QAACE,MAAMA,QAAQ;QAAIE,MAAMA,QAAQ;IAAE;AAC5C;AASA;;;;CAIC,GACD,OAAO,eAAeC,qBAAqB,EACzCC,kBAAkB,EAClBC,aAAa,EACbC,SAAS,EACmB;IAC5B,IAAI;QACF,MAAM,CAACC,oBAAoBC,QAAQ,GAAG,MAAMC,QAAQC,GAAG,CAAC;YACtDN,qBAAqBX,kBAAkBa,WAAWK,IAAI,CAAChB,yBAAyB,EAAE;YAClFH,eAAec;SAChB;QAED,MAAMM,YAAYJ,QAAQK,OAAO,AAC/B,2DAA2D;SAC1DC,MAAM,CAAC,CAACC,SAAW,CAACA,OAAOC,OAAO,IAAIX,eACtCY,GAAG,CAAC,CAACF,SAAWA,OAAOG,EAAE;QAE5B,MAAMC,QAAQ,MAAMzB,WAAWkB,WAAWD,IAAI,CAAC,CAACb,OAAUsB,MAAMC,OAAO,CAACvB,QAAQA,OAAO;gBAACA;aAAK;QAE7F,MAAMwB,iBAAiBd,QAAQK,OAAO,CACnCI,GAAG,CAAC,CAACF;YACJ,OAAO;gBACL,GAAGA,MAAM;gBACT,GAAGlB,aAAasB,MAAMI,IAAI,CAAC,CAACC,YAAcA,UAAUN,EAAE,KAAKH,OAAOG,EAAE,EAAE;YACxE;QACF,GACCJ,MAAM,CAAC,CAACC,SAAW,CAACA,OAAOC,OAAO,IAAIX;QAEzC,MAAMQ,UAAU;eAAIS;eAAmBf;SAAmB;QAE1DX,WAAW,CAAC,MAAM,EAAE0B,eAAeG,MAAM,CAAC,qBAAqB,EAAEnB,WAAW;QAC5EV,WAAW,CAAC,MAAM,EAAEW,mBAAmBkB,MAAM,CAAC,yBAAyB,EAAEnB,WAAW;QACpF,OAAOO;IACT,EAAE,OAAOa,OAAO;QACd,MAAM,IAAIC,MAAM,CAAC,2BAA2B,EAAErB,WAAW,EAAE;YAACsB,OAAOF;QAAK;IAC1E;AACF"}
@@ -1,11 +1,3 @@
1
- interface Member {
2
- createdAt: string;
3
- id: string;
4
- isCurrentUser: boolean;
5
- isRobot: boolean;
6
- role: string;
7
- updatedAt: string | null;
8
- }
9
1
  export interface Invite {
10
2
  acceptedByUserId: string | null;
11
3
  createdAt: string;
@@ -26,9 +18,6 @@ export interface User {
26
18
  provider: string;
27
19
  updatedAt: string | null;
28
20
  }
29
- export interface PartialProjectResponse {
30
- members: Member[];
31
- }
32
21
  export interface Role {
33
22
  appliesToRobots: boolean;
34
23
  appliesToUsers: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/users/types.ts"],"sourcesContent":["interface Member {\n createdAt: string\n id: string\n isCurrentUser: boolean\n isRobot: boolean\n role: string\n updatedAt: string | null\n}\n\nexport interface Invite {\n acceptedByUserId: string | null\n createdAt: string\n email: string\n isAccepted: boolean\n isRevoked: boolean\n role: string\n}\n\nexport interface User {\n createdAt: string\n displayName: string\n familyName: string | null\n\n givenName: string | null\n id: string\n imageUrl: string | null\n middleName: string | null\n\n projectId: string\n\n provider: string\n updatedAt: string | null\n}\n\nexport interface PartialProjectResponse {\n members: Member[]\n}\n\nexport interface Role {\n appliesToRobots: boolean\n appliesToUsers: boolean\n grants: Record<string, Grant[] | undefined>\n isCustom: boolean\n name: string\n projectId: string\n title: string\n\n description?: string\n}\n\ninterface Grant {\n grants: unknown[]\n id: string\n isCustom: boolean\n name: string\n title: string\n\n description?: string\n}\n"],"names":[],"mappings":"AAsCA,WAUC"}
1
+ {"version":3,"sources":["../../../src/actions/users/types.ts"],"sourcesContent":["export interface Invite {\n acceptedByUserId: string | null\n createdAt: string\n email: string\n isAccepted: boolean\n isRevoked: boolean\n role: string\n}\n\nexport interface User {\n createdAt: string\n displayName: string\n familyName: string | null\n\n givenName: string | null\n id: string\n imageUrl: string | null\n middleName: string | null\n\n projectId: string\n\n provider: string\n updatedAt: string | null\n}\n\nexport interface Role {\n appliesToRobots: boolean\n appliesToUsers: boolean\n grants: Record<string, Grant[] | undefined>\n isCustom: boolean\n name: string\n projectId: string\n title: string\n\n description?: string\n}\n\ninterface Grant {\n grants: unknown[]\n id: string\n isCustom: boolean\n name: string\n title: string\n\n description?: string\n}\n"],"names":[],"mappings":"AAyBA,WAUC"}