@openneuro/app 4.20.4 → 4.20.6-alpha.2

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 (358) hide show
  1. package/__mocks__/fileMock.js +1 -1
  2. package/package.json +5 -5
  3. package/pluralize-esm.js +204 -211
  4. package/src/@types/custom.d.ts +3 -3
  5. package/src/@types/react.d.ts +3 -4
  6. package/src/client.jsx +17 -16
  7. package/src/scripts/__mocks__/config.ts +6 -6
  8. package/src/scripts/__utils__/mock-app-shell.tsx +9 -8
  9. package/src/scripts/apm.js +6 -6
  10. package/src/scripts/app.tsx +7 -7
  11. package/src/scripts/authentication/__tests__/profile.spec.js +10 -10
  12. package/src/scripts/authentication/admin-user.jsx +2 -2
  13. package/src/scripts/authentication/logged-in.jsx +2 -2
  14. package/src/scripts/authentication/logged-out.jsx +2 -2
  15. package/src/scripts/authentication/loginCheck.js +2 -2
  16. package/src/scripts/authentication/loginUrls.ts +1 -1
  17. package/src/scripts/authentication/profile.ts +7 -7
  18. package/src/scripts/authentication/regular-user.tsx +3 -3
  19. package/src/scripts/authentication/signOut.ts +2 -2
  20. package/src/scripts/authentication/withProfile.jsx +6 -6
  21. package/src/scripts/common/block-navigation.jsx +3 -4
  22. package/src/scripts/common/containers/__tests__/header.spec.tsx +16 -16
  23. package/src/scripts/common/containers/footer.tsx +3 -3
  24. package/src/scripts/common/containers/header.tsx +30 -30
  25. package/src/scripts/common/forms/__tests__/warn-button.spec.jsx +6 -6
  26. package/src/scripts/common/forms/warn-button.jsx +21 -17
  27. package/src/scripts/common/partials/block-navigation.jsx +3 -4
  28. package/src/scripts/common/partials/freshdesk-widget.jsx +17 -20
  29. package/src/scripts/common/partials/toast-content.jsx +2 -2
  30. package/src/scripts/components/__tests__/data-table.spec.tsx +7 -7
  31. package/src/scripts/components/data-table.tsx +23 -22
  32. package/src/scripts/config.ts +2 -2
  33. package/src/scripts/datalad/dataset/comments-fragments.js +1 -1
  34. package/src/scripts/datalad/dataset/dataset-context.js +1 -1
  35. package/src/scripts/datalad/dataset/dataset-query-context.js +1 -1
  36. package/src/scripts/datalad/dataset/dataset-query-fragments.js +1 -1
  37. package/src/scripts/datalad/mutations/cache-clear.jsx +7 -6
  38. package/src/scripts/datalad/mutations/cache-id.js +2 -2
  39. package/src/scripts/datalad/mutations/delete-comment.jsx +13 -11
  40. package/src/scripts/datalad/mutations/delete.jsx +10 -9
  41. package/src/scripts/datalad/mutations/follow.jsx +12 -11
  42. package/src/scripts/datalad/mutations/publish.jsx +13 -12
  43. package/src/scripts/datalad/mutations/remove-permissions.jsx +8 -8
  44. package/src/scripts/datalad/mutations/revalidate.jsx +7 -6
  45. package/src/scripts/datalad/mutations/snapshot.tsx +7 -7
  46. package/src/scripts/datalad/mutations/star.jsx +12 -11
  47. package/src/scripts/datalad/mutations/submit-metadata.jsx +14 -12
  48. package/src/scripts/datalad/mutations/update-permissions.jsx +14 -13
  49. package/src/scripts/datalad/mutations/update-ref.jsx +7 -6
  50. package/src/scripts/datalad/routes/dataset-redirect.tsx +49 -49
  51. package/src/scripts/datalad/subscriptions/__tests__/files-subscription.spec.jsx +32 -32
  52. package/src/scripts/datalad/subscriptions/files-subscription.jsx +16 -16
  53. package/src/scripts/datalad/subscriptions/useDatasetDeletedSubscription.jsx +4 -4
  54. package/src/scripts/datalad/subscriptions/useDraftSubscription.js +4 -4
  55. package/src/scripts/datalad/subscriptions/usePermissionsSubscription.js +4 -4
  56. package/src/scripts/datalad/subscriptions/useSnapshotsUpdatedSubscriptions.js +3 -3
  57. package/src/scripts/dataset/__tests__/__snapshots__/snapshot-container.spec.tsx.snap +2 -2
  58. package/src/scripts/dataset/__tests__/snapshot-container.spec.tsx +12 -12
  59. package/src/scripts/dataset/comments/__tests__/comment.spec.jsx +21 -21
  60. package/src/scripts/dataset/comments/__tests__/comments.spec.jsx +10 -10
  61. package/src/scripts/dataset/comments/block-style-controls.jsx +15 -15
  62. package/src/scripts/dataset/comments/comment-editor.jsx +31 -31
  63. package/src/scripts/dataset/comments/comment.jsx +50 -50
  64. package/src/scripts/dataset/comments/comments.jsx +24 -22
  65. package/src/scripts/dataset/comments/inline-style-controls.jsx +9 -9
  66. package/src/scripts/dataset/comments/style-button.jsx +8 -9
  67. package/src/scripts/dataset/common/follow-toggles.tsx +3 -3
  68. package/src/scripts/dataset/dataset-query-context.js +1 -1
  69. package/src/scripts/dataset/dataset-query.jsx +34 -31
  70. package/src/scripts/dataset/dataset-routes.jsx +5 -5
  71. package/src/scripts/dataset/download/__tests__/download-command-line.spec.jsx +13 -13
  72. package/src/scripts/dataset/download/__tests__/download-link.spec.jsx +10 -10
  73. package/src/scripts/dataset/download/__tests__/download-native.spec.js +7 -7
  74. package/src/scripts/dataset/download/__tests__/shell-example.spec.jsx +5 -5
  75. package/src/scripts/dataset/download/download-command-line.jsx +9 -7
  76. package/src/scripts/dataset/download/download-datalad.jsx +22 -20
  77. package/src/scripts/dataset/download/download-derivative-datalad.tsx +2 -2
  78. package/src/scripts/dataset/download/download-derivative-s3.tsx +2 -2
  79. package/src/scripts/dataset/download/download-link.jsx +6 -6
  80. package/src/scripts/dataset/download/download-native.js +20 -19
  81. package/src/scripts/dataset/download/download-query.js +2 -3
  82. package/src/scripts/dataset/download/download-s3.jsx +8 -8
  83. package/src/scripts/dataset/download/download-script.tsx +23 -20
  84. package/src/scripts/dataset/download/native-file-toast.jsx +13 -11
  85. package/src/scripts/dataset/download/shell-example.jsx +1 -1
  86. package/src/scripts/dataset/download/track-download.js +5 -5
  87. package/src/scripts/dataset/draft-container.tsx +104 -102
  88. package/src/scripts/dataset/draft-snapshot-routes.tsx +3 -3
  89. package/src/scripts/dataset/files/__tests__/file-tree-unloaded-directory.spec.jsx +23 -23
  90. package/src/scripts/dataset/files/__tests__/file-tree.spec.jsx +57 -58
  91. package/src/scripts/dataset/files/__tests__/file-viewer-type.spec.jsx +6 -6
  92. package/src/scripts/dataset/files/__tests__/file.spec.jsx +15 -15
  93. package/src/scripts/dataset/files/file-display.jsx +11 -11
  94. package/src/scripts/dataset/files/file-tree-unloaded-directory.jsx +10 -10
  95. package/src/scripts/dataset/files/file-tree.tsx +27 -27
  96. package/src/scripts/dataset/files/file-view.jsx +4 -4
  97. package/src/scripts/dataset/files/file-viewer-type.jsx +21 -21
  98. package/src/scripts/dataset/files/file.tsx +85 -80
  99. package/src/scripts/dataset/files/files.tsx +41 -40
  100. package/src/scripts/dataset/files/index.tsx +2 -2
  101. package/src/scripts/dataset/files/viewers/__tests__/__snapshots__/file-viewer-json.spec.jsx.snap +0 -24
  102. package/src/scripts/dataset/files/viewers/__tests__/file-viewer-json.spec.jsx +9 -9
  103. package/src/scripts/dataset/files/viewers/__tests__/parse-tabular.spec.js +8 -8
  104. package/src/scripts/dataset/files/viewers/file-viewer-csv.jsx +5 -5
  105. package/src/scripts/dataset/files/viewers/file-viewer-html.jsx +3 -3
  106. package/src/scripts/dataset/files/viewers/file-viewer-json.jsx +4 -4
  107. package/src/scripts/dataset/files/viewers/file-viewer-nifti.tsx +4 -4
  108. package/src/scripts/dataset/files/viewers/file-viewer-table.tsx +3 -3
  109. package/src/scripts/dataset/files/viewers/file-viewer-text.jsx +3 -3
  110. package/src/scripts/dataset/files/viewers/file-viewer-tsv.jsx +5 -5
  111. package/src/scripts/dataset/files/viewers/parse-tabular.js +4 -4
  112. package/src/scripts/dataset/fragments/__tests__/cancel-button.spec.tsx +5 -5
  113. package/src/scripts/dataset/fragments/__tests__/dataset-alert-draft.spec.tsx +9 -9
  114. package/src/scripts/dataset/fragments/__tests__/dataset-citation.spec.jsx +10 -10
  115. package/src/scripts/dataset/fragments/__tests__/doi-link.spec.tsx +29 -29
  116. package/src/scripts/dataset/fragments/__tests__/edit-button.spec.tsx +5 -5
  117. package/src/scripts/dataset/fragments/__tests__/edit-list.spec.jsx +13 -13
  118. package/src/scripts/dataset/fragments/__tests__/save-button.spec.tsx +5 -5
  119. package/src/scripts/dataset/fragments/__tests__/select-input.spec.tsx +26 -26
  120. package/src/scripts/dataset/fragments/cancel-button.tsx +2 -2
  121. package/src/scripts/dataset/fragments/comments-fragments.js +1 -1
  122. package/src/scripts/dataset/fragments/copyable-tooltip.jsx +14 -13
  123. package/src/scripts/dataset/fragments/dataset-alert-draft.tsx +17 -13
  124. package/src/scripts/dataset/fragments/dataset-alert-version.tsx +5 -4
  125. package/src/scripts/dataset/fragments/dataset-citation.jsx +23 -21
  126. package/src/scripts/dataset/fragments/dataset-history.jsx +12 -12
  127. package/src/scripts/dataset/fragments/dataset-reviewers.ts +1 -1
  128. package/src/scripts/dataset/fragments/doi-link.tsx +6 -6
  129. package/src/scripts/dataset/fragments/edit-button.tsx +2 -2
  130. package/src/scripts/dataset/fragments/edit-description-field.jsx +23 -21
  131. package/src/scripts/dataset/fragments/edit-description-list.jsx +8 -8
  132. package/src/scripts/dataset/fragments/edit-list.jsx +8 -8
  133. package/src/scripts/dataset/fragments/number-input.tsx +36 -35
  134. package/src/scripts/dataset/fragments/save-button.tsx +2 -2
  135. package/src/scripts/dataset/fragments/select-input.tsx +87 -86
  136. package/src/scripts/dataset/fragments/text-array-input.tsx +38 -37
  137. package/src/scripts/dataset/fragments/text-input.tsx +79 -78
  138. package/src/scripts/dataset/mutations/__tests__/cache-id.spec.js +5 -5
  139. package/src/scripts/dataset/mutations/__tests__/delete-file.spec.jsx +85 -83
  140. package/src/scripts/dataset/mutations/__tests__/delete.spec.jsx +8 -8
  141. package/src/scripts/dataset/mutations/__tests__/deprecate-snapshot.spec.tsx +17 -17
  142. package/src/scripts/dataset/mutations/__tests__/deprecate-version.spec.tsx +19 -19
  143. package/src/scripts/dataset/mutations/__tests__/description.spec.jsx +51 -51
  144. package/src/scripts/dataset/mutations/__tests__/remove-permissions.spec.tsx +9 -9
  145. package/src/scripts/dataset/mutations/__tests__/update-permissions.spec.jsx +7 -7
  146. package/src/scripts/dataset/mutations/admin-exports.jsx +13 -12
  147. package/src/scripts/dataset/mutations/cache-clear.jsx +6 -6
  148. package/src/scripts/dataset/mutations/cache-id.js +2 -2
  149. package/src/scripts/dataset/mutations/comment.jsx +25 -23
  150. package/src/scripts/dataset/mutations/create-anonymous-reviewer.tsx +36 -30
  151. package/src/scripts/dataset/mutations/dataset-relations.tsx +28 -29
  152. package/src/scripts/dataset/mutations/delete-anonymous-reviewer.tsx +7 -8
  153. package/src/scripts/dataset/mutations/delete-comment.jsx +14 -12
  154. package/src/scripts/dataset/mutations/delete-dataset-form.jsx +20 -22
  155. package/src/scripts/dataset/mutations/delete-file.jsx +8 -8
  156. package/src/scripts/dataset/mutations/delete.jsx +10 -9
  157. package/src/scripts/dataset/mutations/deprecate-version.tsx +5 -6
  158. package/src/scripts/dataset/mutations/description.jsx +21 -20
  159. package/src/scripts/dataset/mutations/flag-annex-object.jsx +10 -9
  160. package/src/scripts/dataset/mutations/follow.tsx +15 -14
  161. package/src/scripts/dataset/mutations/import-dataset.tsx +5 -5
  162. package/src/scripts/dataset/mutations/metadata-form.jsx +94 -97
  163. package/src/scripts/dataset/mutations/publish.jsx +13 -13
  164. package/src/scripts/dataset/mutations/readme.jsx +12 -11
  165. package/src/scripts/dataset/mutations/remove-annex-object.jsx +10 -9
  166. package/src/scripts/dataset/mutations/remove-permissions.tsx +5 -6
  167. package/src/scripts/dataset/mutations/revalidate.jsx +7 -7
  168. package/src/scripts/dataset/mutations/snapshot.tsx +8 -8
  169. package/src/scripts/dataset/mutations/star.tsx +14 -13
  170. package/src/scripts/dataset/mutations/submit-metadata.jsx +12 -11
  171. package/src/scripts/dataset/mutations/undo-deprecate-version.tsx +5 -6
  172. package/src/scripts/dataset/mutations/update-file.jsx +6 -6
  173. package/src/scripts/dataset/mutations/update-permissions.tsx +9 -9
  174. package/src/scripts/dataset/mutations/update-ref.jsx +7 -7
  175. package/src/scripts/dataset/routes/__tests__/deprecate-snapshot-page.spec.tsx +5 -5
  176. package/src/scripts/dataset/routes/add-metadata.jsx +19 -20
  177. package/src/scripts/dataset/routes/admin-datalad.jsx +7 -7
  178. package/src/scripts/dataset/routes/dataset-default.tsx +12 -10
  179. package/src/scripts/dataset/routes/delete-page.tsx +12 -12
  180. package/src/scripts/dataset/routes/deprecate-snapshot-page.tsx +8 -8
  181. package/src/scripts/dataset/routes/derivatives.tsx +10 -10
  182. package/src/scripts/dataset/routes/download-dataset.tsx +20 -20
  183. package/src/scripts/dataset/routes/manage-anonymous-reviewers.tsx +37 -35
  184. package/src/scripts/dataset/routes/manage-permissions.jsx +22 -22
  185. package/src/scripts/dataset/routes/publish.jsx +32 -30
  186. package/src/scripts/dataset/routes/snapshot-default.tsx +7 -7
  187. package/src/scripts/dataset/routes/snapshot.tsx +44 -43
  188. package/src/scripts/dataset/routes/styles/dataset-page-border.tsx +3 -3
  189. package/src/scripts/dataset/routes/styles/dataset-page-tab-container.tsx +3 -3
  190. package/src/scripts/dataset/routes/styles/header-row.tsx +3 -3
  191. package/src/scripts/dataset/routes/tab-routes-draft.tsx +12 -12
  192. package/src/scripts/dataset/routes/tab-routes-snapshot.tsx +8 -8
  193. package/src/scripts/dataset/snapshot-container.tsx +78 -86
  194. package/src/scripts/errors/403page.tsx +11 -11
  195. package/src/scripts/errors/404page.tsx +12 -12
  196. package/src/scripts/errors/errorBoundary.jsx +13 -12
  197. package/src/scripts/errors/errorRoute.jsx +6 -6
  198. package/src/scripts/errors/freshdesk-widget.jsx +17 -20
  199. package/src/scripts/errors/freshdeskInterface.jsx +9 -9
  200. package/src/scripts/errors/orcid/email.jsx +3 -3
  201. package/src/scripts/errors/orcid/family.jsx +4 -4
  202. package/src/scripts/errors/orcid/general.jsx +1 -1
  203. package/src/scripts/errors/orcid/given.jsx +4 -4
  204. package/src/scripts/fixtures/dataset-query.ts +119 -119
  205. package/src/scripts/fixtures/mock-app-wrapper.tsx +4 -4
  206. package/src/scripts/index.tsx +9 -9
  207. package/src/scripts/pages/admin/admin.jsx +5 -5
  208. package/src/scripts/pages/admin/flagged-files.jsx +33 -31
  209. package/src/scripts/pages/admin/user-fragment.ts +1 -1
  210. package/src/scripts/pages/admin/user-tools.tsx +13 -11
  211. package/src/scripts/pages/admin/users.jsx +38 -39
  212. package/src/scripts/pages/api.jsx +20 -19
  213. package/src/scripts/pages/citation-page.tsx +4 -4
  214. package/src/scripts/pages/faq/faq.tsx +2 -2
  215. package/src/scripts/pages/front-page/aggregate-queries/aggregate-counts-container.tsx +6 -5
  216. package/src/scripts/pages/front-page/aggregate-queries/use-participant-count.ts +2 -2
  217. package/src/scripts/pages/front-page/aggregate-queries/use-publicDatasets-count.ts +2 -2
  218. package/src/scripts/pages/front-page/front-page-content.ts +42 -42
  219. package/src/scripts/pages/front-page/front-page.tsx +18 -14
  220. package/src/scripts/pages/front-page-comp.tsx +3 -3
  221. package/src/scripts/pages/import-dataset.tsx +10 -10
  222. package/src/scripts/pages/metadata/dataset-metadata.tsx +15 -14
  223. package/src/scripts/pages/pet-redirect.tsx +2 -2
  224. package/src/scripts/queries/dataset.ts +3 -3
  225. package/src/scripts/resources/__tests__/kibana.spec.js +9 -9
  226. package/src/scripts/resources/kibana.js +3 -3
  227. package/src/scripts/resources/strings.js +2 -2
  228. package/src/scripts/routes.tsx +14 -14
  229. package/src/scripts/search/__helpers__/search-render.tsx +3 -3
  230. package/src/scripts/search/__tests__/search-container.spec.tsx +22 -22
  231. package/src/scripts/search/__tests__/search-params-ctx.spec.tsx +20 -20
  232. package/src/scripts/search/es-query-builders.ts +21 -5
  233. package/src/scripts/search/filters-block-container.tsx +14 -16
  234. package/src/scripts/search/initial-search-params.tsx +45 -45
  235. package/src/scripts/search/inputs/__tests__/sort-by-select.spec.tsx +23 -23
  236. package/src/scripts/search/inputs/admin-allDatasets-toggle.tsx +12 -12
  237. package/src/scripts/search/inputs/age-range-input.tsx +9 -8
  238. package/src/scripts/search/inputs/author-input.tsx +14 -11
  239. package/src/scripts/search/inputs/date-radios.tsx +8 -7
  240. package/src/scripts/search/inputs/diagnosis-select.tsx +6 -6
  241. package/src/scripts/search/inputs/index.ts +33 -33
  242. package/src/scripts/search/inputs/keyword-input.tsx +13 -13
  243. package/src/scripts/search/inputs/modality-select.tsx +33 -30
  244. package/src/scripts/search/inputs/pet/bodyParts_input.tsx +18 -16
  245. package/src/scripts/search/inputs/pet/scannerManufacturersModelNames_input.tsx +18 -16
  246. package/src/scripts/search/inputs/pet/scannerManufacturers_input.tsx +18 -16
  247. package/src/scripts/search/inputs/pet/tracerNames_input.tsx +16 -15
  248. package/src/scripts/search/inputs/pet/tracerRadionuclides_input.tsx +18 -16
  249. package/src/scripts/search/inputs/section-select.tsx +6 -6
  250. package/src/scripts/search/inputs/sex-radios.tsx +6 -6
  251. package/src/scripts/search/inputs/show-datasets-radios.tsx +31 -29
  252. package/src/scripts/search/inputs/sort-by-select.tsx +10 -11
  253. package/src/scripts/search/inputs/species-select.tsx +6 -6
  254. package/src/scripts/search/inputs/study-domain-input.tsx +18 -16
  255. package/src/scripts/search/inputs/subject-count-range-input.tsx +8 -7
  256. package/src/scripts/search/inputs/task-input.tsx +18 -16
  257. package/src/scripts/search/search-container.tsx +83 -85
  258. package/src/scripts/search/search-params-ctx.tsx +40 -38
  259. package/src/scripts/search/search-routes.tsx +4 -4
  260. package/src/scripts/search/use-search-results.tsx +125 -99
  261. package/src/scripts/styles/media.tsx +3 -3
  262. package/src/scripts/styles/support-modal.jsx +2 -2
  263. package/src/scripts/sw.ts +12 -11
  264. package/src/scripts/test-utils.js +4 -4
  265. package/src/scripts/uploader/add-path-to-files.js +7 -7
  266. package/src/scripts/uploader/file-select.tsx +3 -3
  267. package/src/scripts/uploader/file-upload.js +13 -12
  268. package/src/scripts/uploader/input.jsx +8 -7
  269. package/src/scripts/uploader/upload-button.jsx +3 -3
  270. package/src/scripts/uploader/upload-disclaimer-input.tsx +66 -66
  271. package/src/scripts/uploader/upload-disclaimer.jsx +6 -5
  272. package/src/scripts/uploader/upload-file-status.jsx +4 -4
  273. package/src/scripts/uploader/upload-issues.jsx +32 -29
  274. package/src/scripts/uploader/upload-metadata.jsx +18 -17
  275. package/src/scripts/uploader/upload-mutation.js +17 -20
  276. package/src/scripts/uploader/upload-progress-button.jsx +5 -4
  277. package/src/scripts/uploader/upload-progress.jsx +3 -3
  278. package/src/scripts/uploader/upload-rename.jsx +6 -5
  279. package/src/scripts/uploader/upload-resume.jsx +26 -24
  280. package/src/scripts/uploader/upload-select.jsx +10 -9
  281. package/src/scripts/uploader/upload-status.jsx +5 -5
  282. package/src/scripts/uploader/upload-step.jsx +9 -9
  283. package/src/scripts/uploader/uploader-context.js +1 -1
  284. package/src/scripts/uploader/uploader-location.js +1 -1
  285. package/src/scripts/uploader/uploader-modal.jsx +8 -7
  286. package/src/scripts/uploader/uploader-setup-routes.jsx +10 -10
  287. package/src/scripts/uploader/uploader-status-routes.jsx +6 -6
  288. package/src/scripts/uploader/uploader-view.jsx +4 -4
  289. package/src/scripts/uploader/uploader.jsx +50 -48
  290. package/src/scripts/users/username.tsx +3 -3
  291. package/src/scripts/utils/__tests__/csv.spec.ts +16 -16
  292. package/src/scripts/utils/__tests__/date.spec.js +4 -4
  293. package/src/scripts/utils/__tests__/json-ld.spec.js +12 -12
  294. package/src/scripts/utils/__tests__/newid.spec.js +9 -9
  295. package/src/scripts/utils/__tests__/userNotify.spec.js +10 -10
  296. package/src/scripts/utils/analytics.tsx +3 -3
  297. package/src/scripts/utils/cookies.js +1 -1
  298. package/src/scripts/utils/csv.ts +13 -15
  299. package/src/scripts/utils/datalad.js +1 -1
  300. package/src/scripts/utils/dataset-url.js +2 -2
  301. package/src/scripts/utils/date.js +2 -2
  302. package/src/scripts/utils/global-polyfill.ts +2 -2
  303. package/src/scripts/utils/gtag.js +6 -6
  304. package/src/scripts/utils/json-ld.js +13 -13
  305. package/src/scripts/utils/newid.js +1 -1
  306. package/src/scripts/utils/user-login-modal-ctx.tsx +4 -4
  307. package/src/scripts/utils/userNotify.js +2 -2
  308. package/src/scripts/validation/validation-panel.jsx +3 -3
  309. package/src/scripts/validation/validation-results.issues.issue.jsx +9 -9
  310. package/src/scripts/validation/validation-results.issues.jsx +19 -17
  311. package/src/scripts/validation/validation-results.jsx +10 -10
  312. package/src/scripts/validation/validation-status.jsx +19 -17
  313. package/src/scripts/validation/validation.jsx +5 -5
  314. package/src/scripts/workers/schema.ts +2 -2
  315. package/src/scripts/workers/schema.worker.ts +4 -4
  316. package/src/scripts/workers/validate.ts +2 -2
  317. package/src/scripts/workers/validate.worker.ts +7 -5
  318. package/vite.config.js +17 -17
  319. package/src/dist/assets/activity-icon.9ab0c828.png +0 -0
  320. package/src/dist/assets/bids.da8810b3.jpg +0 -0
  321. package/src/dist/assets/brand_mark.28e7645d.png +0 -0
  322. package/src/dist/assets/close-button.21e700a6.png +0 -0
  323. package/src/dist/assets/cube-get.39ed5636.png +0 -0
  324. package/src/dist/assets/cube-share.9b558c29.png +0 -0
  325. package/src/dist/assets/cube-use.ccf2ddc5.png +0 -0
  326. package/src/dist/assets/datalad.a35b15b8.jpg +0 -0
  327. package/src/dist/assets/eeg.1dc1dc54.jpg +0 -0
  328. package/src/dist/assets/email-header.1cb8bf76.png +0 -0
  329. package/src/dist/assets/ieeg.f91deb0a.jpg +0 -0
  330. package/src/dist/assets/index.3db805fb.js +0 -23127
  331. package/src/dist/assets/index.3db805fb.js.map +0 -1
  332. package/src/dist/assets/index.5eb79d2c.css +0 -1
  333. package/src/dist/assets/ljaf.567e9566.png +0 -0
  334. package/src/dist/assets/logo_app.8c986cf9.png +0 -0
  335. package/src/dist/assets/logo_cube.5224b745.png +0 -0
  336. package/src/dist/assets/logo_data.3e1d5743.png +0 -0
  337. package/src/dist/assets/logo_users.a84a265a.png +0 -0
  338. package/src/dist/assets/meg.1e1928f8.jpg +0 -0
  339. package/src/dist/assets/mri.b01e4f42.jpg +0 -0
  340. package/src/dist/assets/nih-bi-logo.80d76e1d.png +0 -0
  341. package/src/dist/assets/nih-stanford.2a7c496e.jpg +0 -0
  342. package/src/dist/assets/nih.78a64d38.png +0 -0
  343. package/src/dist/assets/nimh.0ec775d8.png +0 -0
  344. package/src/dist/assets/nru-logo.f3097dc5.png +0 -0
  345. package/src/dist/assets/nsf.eee1d3f7.png +0 -0
  346. package/src/dist/assets/nsf.f87e96e7.png +0 -0
  347. package/src/dist/assets/on-dark-horz.e1f213d0.svg +0 -1
  348. package/src/dist/assets/on-dark.12f4e2ce.svg +0 -1
  349. package/src/dist/assets/on-light-horz.23ff22c3.svg +0 -1
  350. package/src/dist/assets/on-light.50592f7f.svg +0 -1
  351. package/src/dist/assets/pet-scan.21d98a3d.jpg +0 -0
  352. package/src/dist/assets/revicons.4ca02b8a.ttf +0 -0
  353. package/src/dist/assets/revicons.9e4d4c68.eot +0 -0
  354. package/src/dist/assets/revicons.f7b9c306.woff +0 -0
  355. package/src/dist/assets/sqm-logo.9cd0cca5.png +0 -0
  356. package/src/dist/assets/squishymedia.fa3c5919.png +0 -0
  357. package/src/dist/assets/stanford.5f245936.png +0 -0
  358. package/src/dist/index.html +0 -25
@@ -1,18 +1,18 @@
1
- import React from 'react'
2
- import { render } from '@testing-library/react'
3
- import DownloadLink from '../download-link.jsx'
4
- import { MockedProvider } from '@apollo/client/testing'
5
- import { vi } from 'vitest'
1
+ import React from "react"
2
+ import { render } from "@testing-library/react"
3
+ import DownloadLink from "../download-link.jsx"
4
+ import { MockedProvider } from "@apollo/client/testing"
5
+ import { vi } from "vitest"
6
6
 
7
- vi.mock('../../../config.ts')
7
+ vi.mock("../../../config.ts")
8
8
 
9
9
  const defProps = {
10
- datasetId: 'ds000001',
11
- snapshotTag: '1.0.0',
10
+ datasetId: "ds000001",
11
+ snapshotTag: "1.0.0",
12
12
  }
13
13
 
14
- describe('dataset/download/DownloadLink', () => {
15
- it('renders successfully', () => {
14
+ describe("dataset/download/DownloadLink", () => {
15
+ it("renders successfully", () => {
16
16
  const { asFragment } = render(
17
17
  <MockedProvider>
18
18
  <DownloadLink {...defProps} />
@@ -1,16 +1,16 @@
1
- import { openFileTree } from '../download-native.js'
1
+ import { openFileTree } from "../download-native.js"
2
2
 
3
- vi.mock('../../../config.ts')
3
+ vi.mock("../../../config.ts")
4
4
 
5
- describe('dataset/download - native file API method', () => {
6
- describe('openFileTree', () => {
7
- it('iterates over directory to correct depth', async () => {
5
+ describe("dataset/download - native file API method", () => {
6
+ describe("openFileTree", () => {
7
+ it("iterates over directory to correct depth", async () => {
8
8
  const mockDirectoryHandle = {}
9
- const mockFile = Symbol('mockFile')
9
+ const mockFile = Symbol("mockFile")
10
10
  mockDirectoryHandle.getDirectoryHandle = vi.fn(() => mockDirectoryHandle)
11
11
  mockDirectoryHandle.getFileHandle = vi.fn(() => mockFile)
12
12
  expect(
13
- await openFileTree(mockDirectoryHandle, 'sub-01/anat/something.nii.gz'),
13
+ await openFileTree(mockDirectoryHandle, "sub-01/anat/something.nii.gz"),
14
14
  ).toBe(mockFile)
15
15
  expect(mockDirectoryHandle.getDirectoryHandle).toHaveBeenCalledTimes(2)
16
16
  })
@@ -1,9 +1,9 @@
1
- import React from 'react'
2
- import { render } from '@testing-library/react'
3
- import ShellExample from '../shell-example.jsx'
1
+ import React from "react"
2
+ import { render } from "@testing-library/react"
3
+ import ShellExample from "../shell-example.jsx"
4
4
 
5
- describe('dataset/download/ShellExample', () => {
6
- it('renders successfully', () => {
5
+ describe("dataset/download/ShellExample", () => {
6
+ it("renders successfully", () => {
7
7
  const { asFragment } = render(<ShellExample />)
8
8
  expect(asFragment()).toMatchSnapshot()
9
9
  })
@@ -1,10 +1,11 @@
1
- import React from 'react'
2
- import PropTypes from 'prop-types'
3
- import ShellExample from './shell-example.jsx'
1
+ import React from "react"
2
+ import PropTypes from "prop-types"
3
+ import ShellExample from "./shell-example.jsx"
4
4
 
5
5
  export const DownloadSampleCommand = ({ datasetId, snapshotTag }) => (
6
6
  <ShellExample role="figure">
7
- openneuro download {snapshotTag ? `--snapshot ${snapshotTag}` : '--draft'}{' '}
7
+ openneuro download {snapshotTag ? `--snapshot ${snapshotTag}` : "--draft"}
8
+ {" "}
8
9
  {datasetId} {datasetId}
9
10
  -download/
10
11
  </ShellExample>
@@ -19,9 +20,10 @@ const DownloadCommandLine = ({ datasetId, snapshotTag }) => (
19
20
  <div>
20
21
  <h4>Download with Node.js</h4>
21
22
  <p>
22
- Using{' '}
23
- <a href="https://www.npmjs.com/package/@openneuro/cli">@openneuro/cli</a>{' '}
24
- you can download this dataset from the command line using{' '}
23
+ Using{" "}
24
+ <a href="https://www.npmjs.com/package/@openneuro/cli">@openneuro/cli</a>
25
+ {" "}
26
+ you can download this dataset from the command line using{" "}
25
27
  <a href="https://nodejs.org/en/download/">Node.js</a>. This method is good
26
28
  for larger datasets or unstable connections, but has known issues on
27
29
  Windows.
@@ -1,12 +1,12 @@
1
- import React from 'react'
2
- import PropTypes from 'prop-types'
3
- import { getConfig, config } from '../../config'
4
- import ShellExample from './shell-example.jsx'
1
+ import React from "react"
2
+ import PropTypes from "prop-types"
3
+ import { config, getConfig } from "../../config"
4
+ import ShellExample from "./shell-example.jsx"
5
5
  import {
6
6
  getUnexpiredProfile,
7
7
  hasEditPermissions,
8
- } from '../../authentication/profile'
9
- import { useCookies } from 'react-cookie'
8
+ } from "../../authentication/profile"
9
+ import { useCookies } from "react-cookie"
10
10
 
11
11
  const DownloadDataladExample = ({
12
12
  datasetId,
@@ -17,8 +17,8 @@ const DownloadDataladExample = ({
17
17
  const [cookies] = useCookies()
18
18
  const profile = getUnexpiredProfile(cookies)
19
19
  const isAdmin = profile?.admin
20
- const hasEdit =
21
- hasEditPermissions(datasetPermissions, profile?.sub) || isAdmin
20
+ const hasEdit = hasEditPermissions(datasetPermissions, profile?.sub) ||
21
+ isAdmin
22
22
  return (
23
23
  <>
24
24
  <ShellExample>
@@ -51,9 +51,9 @@ const DownloadDataladInstructions = ({
51
51
  <div>
52
52
  <h4>Download with DataLad</h4>
53
53
  <p>
54
- Public datasets can be downloaded with{' '}
55
- <a href="https://www.datalad.org">DataLad</a> or{' '}
56
- <a href="https://git-annex.branchable.com/">Git Annex</a> from{' '}
54
+ Public datasets can be downloaded with{" "}
55
+ <a href="https://www.datalad.org">DataLad</a> or{" "}
56
+ <a href="https://git-annex.branchable.com/">Git Annex</a> from{" "}
57
57
  <a href={`https://github.com/${githubOrganization}/${datasetId}`}>
58
58
  GitHub.
59
59
  </a>
@@ -65,10 +65,10 @@ const DownloadDataladInstructions = ({
65
65
  datasetPermissions={datasetPermissions}
66
66
  />
67
67
  <p>
68
- Check out{' '}
68
+ Check out{" "}
69
69
  <a href="https://handbook.datalad.org/en/latest/usecases/openneuro.html">
70
70
  getting started with DataLad
71
- </a>{' '}
71
+ </a>{" "}
72
72
  for more on how to use this download method.
73
73
  </p>
74
74
  </div>
@@ -81,13 +81,15 @@ DownloadDataladInstructions.propTypes = {
81
81
  datasetPermissions: PropTypes.object,
82
82
  }
83
83
 
84
- const DownloadDatalad = props =>
84
+ const DownloadDatalad = (props) =>
85
85
  // TODO - don't depend on async config
86
- getConfig().hasOwnProperty('github') ? (
87
- <DownloadDataladInstructions
88
- {...props}
89
- githubOrganization={getConfig().github}
90
- />
91
- ) : null
86
+ getConfig().hasOwnProperty("github")
87
+ ? (
88
+ <DownloadDataladInstructions
89
+ {...props}
90
+ githubOrganization={getConfig().github}
91
+ />
92
+ )
93
+ : null
92
94
 
93
95
  export default DownloadDatalad
@@ -1,5 +1,5 @@
1
- import React from 'react'
2
- import ShellExample from './shell-example.jsx'
1
+ import React from "react"
2
+ import ShellExample from "./shell-example.jsx"
3
3
 
4
4
  interface DownloadDataLadDerivativesProps {
5
5
  url: string
@@ -1,5 +1,5 @@
1
- import React from 'react'
2
- import ShellExample from './shell-example.jsx'
1
+ import React from "react"
2
+ import ShellExample from "./shell-example.jsx"
3
3
 
4
4
  interface DownloadS3DerivativesProps {
5
5
  name: string
@@ -1,9 +1,9 @@
1
- import React from 'react'
2
- import PropTypes from 'prop-types'
3
- import { downloadNative } from './download-native.js'
4
- import { useApolloClient } from '@apollo/client'
5
- import { Button } from '@openneuro/components/button'
6
- import { Link } from 'react-router-dom'
1
+ import React from "react"
2
+ import PropTypes from "prop-types"
3
+ import { downloadNative } from "./download-native.js"
4
+ import { useApolloClient } from "@apollo/client"
5
+ import { Button } from "@openneuro/components/button"
6
+ import { Link } from "react-router-dom"
7
7
 
8
8
  const DownloadLink = ({ datasetId, snapshotTag }) => {
9
9
  const client = useApolloClient()
@@ -1,16 +1,16 @@
1
- import { trackDownload } from './track-download.js'
1
+ import { trackDownload } from "./track-download.js"
2
2
  import {
3
+ downloadAbortToast,
4
+ downloadCompleteToast,
3
5
  downloadToast,
4
- downloadToastUpdate,
5
6
  downloadToastDone,
6
- downloadAbortToast,
7
+ downloadToastUpdate,
7
8
  nativeErrorToast,
8
9
  permissionsToast,
9
- downloadCompleteToast,
10
10
  requestFailureToast,
11
- } from './native-file-toast.jsx'
12
- import { apm } from '../../apm.js'
13
- import { downloadDataset } from './download-query'
11
+ } from "./native-file-toast.jsx"
12
+ import { apm } from "../../apm.js"
13
+ import { downloadDataset } from "./download-query"
14
14
 
15
15
  /**
16
16
  * Given a file, create any missing parent directories, obtain directory handle, and return the file handle within that
@@ -20,7 +20,7 @@ import { downloadDataset } from './download-query'
20
20
  export const openFileTree = async (initialDirectoryHandle, path) => {
21
21
  let directoryHandle = initialDirectoryHandle
22
22
  // Get list of any parent directories
23
- const pathTokens = path.split('/')
23
+ const pathTokens = path.split("/")
24
24
  const dirTokens = pathTokens.slice(0, -1)
25
25
  const filename = pathTokens.slice(-1)
26
26
  if (dirTokens.length > 0) {
@@ -36,7 +36,7 @@ export const openFileTree = async (initialDirectoryHandle, path) => {
36
36
  class DownloadAbortError extends Error {
37
37
  constructor(message) {
38
38
  super(message)
39
- this.name = 'DownloadAbortError'
39
+ this.name = "DownloadAbortError"
40
40
  }
41
41
  }
42
42
 
@@ -47,7 +47,7 @@ let downloadCanceled
47
47
  */
48
48
  const downloadTree = async (
49
49
  { datasetId, snapshotTag, client, apmTransaction, dirHandle, toastId },
50
- path = '',
50
+ path = "",
51
51
  tree = null,
52
52
  ) => {
53
53
  const filesToDownload = await downloadDataset(client)({
@@ -74,7 +74,7 @@ const downloadTree = async (
74
74
  } else {
75
75
  // Regular file
76
76
  if (downloadCanceled) {
77
- throw new DownloadAbortError('Download canceled by user request')
77
+ throw new DownloadAbortError("Download canceled by user request")
78
78
  }
79
79
  const fileHandle = await openFileTree(
80
80
  dirHandle,
@@ -119,15 +119,16 @@ export const downloadNative = (datasetId, snapshotTag, client) => async () => {
119
119
  } catch (err) {
120
120
  apm.captureError(err)
121
121
  }
122
- const apmTransaction =
123
- apm && apm.startTransaction(`download:${datasetId}`, 'download')
124
- if (apmTransaction)
122
+ const apmTransaction = apm &&
123
+ apm.startTransaction(`download:${datasetId}`, "download")
124
+ if (apmTransaction) {
125
125
  apmTransaction.addLabels({ datasetId, snapshot: snapshotTag })
126
+ }
126
127
  downloadCanceled = false
127
128
  let toastId
128
129
  try {
129
- const apmSelect =
130
- apmTransaction && apmTransaction.startSpan('showDirectoryPicker')
130
+ const apmSelect = apmTransaction &&
131
+ apmTransaction.startSpan("showDirectoryPicker")
131
132
  // Open user selected directory
132
133
  const dirHandle = await window.showDirectoryPicker()
133
134
  toastId = downloadToast(
@@ -147,11 +148,11 @@ export const downloadNative = (datasetId, snapshotTag, client) => async () => {
147
148
  })
148
149
  downloadCompleteToast(dirHandle.name)
149
150
  } catch (err) {
150
- if (err.name === 'AbortError') {
151
+ if (err.name === "AbortError") {
151
152
  return
152
- } else if (err.name === 'DownloadAbortError') {
153
+ } else if (err.name === "DownloadAbortError") {
153
154
  downloadAbortToast()
154
- } else if (err.name === 'NotAllowedError') {
155
+ } else if (err.name === "NotAllowedError") {
155
156
  permissionsToast()
156
157
  } else {
157
158
  // Some unknown issue occurred (out of disk space, disk caught fire, etc...)
@@ -1,8 +1,7 @@
1
- import { datasets } from '@openneuro/client'
1
+ import { datasets } from "@openneuro/client"
2
2
 
3
3
  export const downloadDataset =
4
- client =>
5
- async ({ datasetId, snapshotTag, tree = null }) => {
4
+ (client) => async ({ datasetId, snapshotTag, tree = null }) => {
6
5
  if (snapshotTag) {
7
6
  const { data } = await client.query({
8
7
  query: datasets.downloadSnapshot,
@@ -1,7 +1,7 @@
1
- import React from 'react'
2
- import PropTypes from 'prop-types'
3
- import ShellExample from './shell-example.jsx'
4
- import { getConfig } from '../../config'
1
+ import React from "react"
2
+ import PropTypes from "prop-types"
3
+ import ShellExample from "./shell-example.jsx"
4
+ import { getConfig } from "../../config"
5
5
 
6
6
  export const DownloadSampleS3 = ({ datasetId, s3Bucket }) => (
7
7
  <ShellExample>
@@ -37,10 +37,10 @@ DownloadS3Instructions.propTypes = {
37
37
  s3Bucket: PropTypes.string,
38
38
  }
39
39
 
40
- const DownloadS3 = props =>
40
+ const DownloadS3 = (props) =>
41
41
  // TODO - don't depend on async config
42
- getConfig().hasOwnProperty('publicBucket') ? (
43
- <DownloadS3Instructions {...props} s3Bucket={getConfig().publicBucket} />
44
- ) : null
42
+ getConfig().hasOwnProperty("publicBucket")
43
+ ? <DownloadS3Instructions {...props} s3Bucket={getConfig().publicBucket} />
44
+ : null
45
45
 
46
46
  export default DownloadS3
@@ -1,18 +1,18 @@
1
1
  /**
2
2
  * Generate a download script for this dataset
3
3
  */
4
- import React from 'react'
5
- import { useLazyQuery, gql } from '@apollo/client'
4
+ import React from "react"
5
+ import { gql, useLazyQuery } from "@apollo/client"
6
6
 
7
7
  function inlineDownload(filename, data): void {
8
- const element = document.createElement('a')
8
+ const element = document.createElement("a")
9
9
  element.setAttribute(
10
- 'href',
11
- 'data:text/x-shellscript;charset=utf-8,' + encodeURIComponent(data),
10
+ "href",
11
+ "data:text/x-shellscript;charset=utf-8," + encodeURIComponent(data),
12
12
  )
13
- element.setAttribute('download', filename)
13
+ element.setAttribute("download", filename)
14
14
 
15
- element.style.display = 'none'
15
+ element.style.display = "none"
16
16
  document.body.appendChild(element)
17
17
 
18
18
  element.click()
@@ -21,7 +21,7 @@ function inlineDownload(filename, data): void {
21
21
  }
22
22
 
23
23
  function generateDownloadScript(data): string {
24
- let script = '#!/bin/sh\n'
24
+ let script = "#!/bin/sh\n"
25
25
  for (const f of data.snapshot.downloadFiles) {
26
26
  script += `curl --create-dirs ${f.urls[0]} -o ${f.filename}\n`
27
27
  }
@@ -57,7 +57,7 @@ export const DownloadScript = ({
57
57
  datasetId: datasetId,
58
58
  tag: snapshotTag,
59
59
  },
60
- errorPolicy: 'all',
60
+ errorPolicy: "all",
61
61
  })
62
62
  if (data) {
63
63
  const script = generateDownloadScript(data)
@@ -74,17 +74,20 @@ export const DownloadScript = ({
74
74
  Node.js.
75
75
  </p>
76
76
  <p>
77
- {loading ? (
78
- 'Loading...'
79
- ) : (
80
- <a
81
- href="#"
82
- onClick={(): void => {
83
- void getDownload()
84
- }}>
85
- Download shell script
86
- </a>
87
- )}
77
+ {loading
78
+ ? (
79
+ "Loading..."
80
+ )
81
+ : (
82
+ <a
83
+ href="#"
84
+ onClick={(): void => {
85
+ void getDownload()
86
+ }}
87
+ >
88
+ Download shell script
89
+ </a>
90
+ )}
88
91
  </p>
89
92
  </div>
90
93
  )
@@ -1,6 +1,6 @@
1
- import React from 'react'
2
- import { toast } from 'react-toastify'
3
- import ToastContent from '../../common/partials/toast-content.jsx'
1
+ import React from "react"
2
+ import { toast } from "react-toastify"
3
+ import ToastContent from "../../common/partials/toast-content.jsx"
4
4
 
5
5
  /**
6
6
  * Write failures due to permissions (most likely)
@@ -41,12 +41,12 @@ export const nativeErrorToast = () => {
41
41
  )
42
42
  }
43
43
 
44
- export const requestFailureToast = filename => {
44
+ export const requestFailureToast = (filename) => {
45
45
  toast.error(
46
46
  <ToastContent title="Download Error" body="A file failed to download">
47
47
  <p>
48
- {filename} failed. Retry your download to reattempt downloading this
49
- file.
48
+ {filename}{" "}
49
+ failed. Retry your download to reattempt downloading this file.
50
50
  </p>
51
51
  </ToastContent>,
52
52
  )
@@ -56,11 +56,13 @@ export const requestFailureToast = filename => {
56
56
  * Let the user know their download is done
57
57
  * @param {string} dirName
58
58
  */
59
- export const downloadCompleteToast = dirName => {
59
+ export const downloadCompleteToast = (dirName) => {
60
60
  toast.success(
61
61
  <ToastContent
62
62
  title="Download Complete"
63
- body={`See "${dirName}" directory for downloaded files`}></ToastContent>,
63
+ body={`See "${dirName}" directory for downloaded files`}
64
+ >
65
+ </ToastContent>,
64
66
  { autoClose: false },
65
67
  )
66
68
  }
@@ -76,7 +78,7 @@ export const downloadToast = (dirName, datasetId, snapshotId, onClose) => {
76
78
  ? `${datasetId} snapshot ${snapshotId} to local folder ${dirName}`
77
79
  : `${datasetId} to local folder ${dirName}`
78
80
  return toast(
79
- <ToastContent title={'Downloading'} body={downloadMessage}></ToastContent>,
81
+ <ToastContent title={"Downloading"} body={downloadMessage}></ToastContent>,
80
82
  {
81
83
  progress: 0,
82
84
  hideProgressBar: false,
@@ -97,7 +99,7 @@ export const downloadToastUpdate = (
97
99
  : `${datasetId} to local folder ${dirName}`
98
100
  toast.update(toastId, {
99
101
  render: (
100
- <ToastContent title={'Downloading'} body={downloadMessage}>
102
+ <ToastContent title={"Downloading"} body={downloadMessage}>
101
103
  {downloadPath}
102
104
  </ToastContent>
103
105
  ),
@@ -105,4 +107,4 @@ export const downloadToastUpdate = (
105
107
  })
106
108
  }
107
109
 
108
- export const downloadToastDone = toastId => toast.done(toastId)
110
+ export const downloadToastDone = (toastId) => toast.done(toastId)
@@ -1,4 +1,4 @@
1
- import styled from '@emotion/styled'
1
+ import styled from "@emotion/styled"
2
2
 
3
3
  const ShellExample = styled.pre`
4
4
  max-width: 80em;
@@ -1,15 +1,15 @@
1
- import { event } from '../../utils/gtag'
2
- import { trackAnalytics } from '../../utils/datalad'
1
+ import { event } from "../../utils/gtag"
2
+ import { trackAnalytics } from "../../utils/datalad"
3
3
 
4
4
  export const trackDownload = (client, datasetId, snapshotTag) => {
5
5
  event({
6
- category: 'Download',
7
- action: 'Started web download',
6
+ category: "Download",
7
+ action: "Started web download",
8
8
  label: snapshotTag ? `${datasetId}:${snapshotTag}` : datasetId,
9
9
  })
10
10
  trackAnalytics(client, datasetId, {
11
11
  snapshot: true,
12
12
  tag: snapshotTag,
13
- type: 'downloads',
13
+ type: "downloads",
14
14
  })
15
15
  }