ghost 6.60.0 → 6.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
- package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
- package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
- package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
- package/core/boot.js +13 -4
- package/core/built/admin/assets/{Combination-gnJO3vIw.js → Combination-5fYEzgbs.js} +1 -1
- package/core/built/admin/assets/{PolarAngleAxis-C4qtHy1B.js → PolarAngleAxis-pkMyqz8g.js} +1 -1
- package/core/built/admin/assets/{RadialBarChart-Bh09Stsj.js → RadialBarChart-JAKoS4KT.js} +1 -1
- package/core/built/admin/assets/{about-BgpmhCuM.js → about-Bve7IJS2.js} +1 -1
- package/core/built/admin/assets/{account-migration-8qTEI1i1.js → account-migration-DRhAehfw.js} +1 -1
- package/core/built/admin/assets/{action-list-lGzZLHc8.js → action-list-C4v0-du8.js} +1 -1
- package/core/built/admin/assets/activitypub/{account-migration-DMHuPnJn.js → account-migration-C-aej4x_.js} +7 -7
- package/core/built/admin/assets/activitypub/activitypub.js +3 -4
- package/core/built/admin/assets/activitypub/{avatar-DhTo5D1B.js → avatar-DLPL3Abs.js} +59 -68
- package/core/built/admin/assets/activitypub/{avatar-flipboard-DnVgbEfa.js → avatar-flipboard-C9iDY-QV.js} +2 -2
- package/core/built/admin/assets/activitypub/{bluesky-sharing-BT4zAlW7.js → bluesky-sharing-BXkA5mqV.js} +8 -8
- package/core/built/admin/assets/activitypub/{content-formatters-BeDZ-DIa.js → content-formatters-CHcyMFk4.js} +17 -17
- package/core/built/admin/assets/activitypub/{copy-8sqxUuNd.js → copy-DIAOQoCZ.js} +2 -2
- package/core/built/admin/assets/activitypub/{domain-xQDDu1CS.js → domain-B3ihkPde.js} +8 -8
- package/core/built/admin/assets/activitypub/{edit-profile-BXdF_r2G.js → edit-profile-DsZM3rTX.js} +5 -5
- package/core/built/admin/assets/activitypub/{explore-CMt7gKlL.js → explore-BodNrZgR.js} +8 -8
- package/core/built/admin/assets/activitypub/{feed-Bwqdddp_.js → feed-PwH1iJ84.js} +9 -9
- package/core/built/admin/assets/activitypub/{field-4co_8FVg.js → field-D06-kmOJ.js} +3 -3
- package/core/built/admin/assets/activitypub/{hash-DwakMs4X.js → hash-Bm3WxYN4.js} +2 -2
- package/core/built/admin/assets/activitypub/{inbox-DQ5CwLma.js → inbox-BluD2ucT.js} +16 -16
- package/core/built/admin/assets/activitypub/{inbox-ckD4wo_r.js → inbox-d8oJRTf4.js} +2 -2
- package/core/built/admin/assets/activitypub/{label-B72sfvEU.js → label-FHSh6ZAw.js} +3 -3
- package/core/built/admin/assets/activitypub/layout-Cq4NG0Xr.js +1 -0
- package/core/built/admin/assets/activitypub/{moderation-KCCO7L2J.js → moderation-D1Yapsod.js} +9 -9
- package/core/built/admin/assets/activitypub/{note-BX_Bz5A0.js → note-C5zjqq5C.js} +8 -8
- package/core/built/admin/assets/activitypub/{notifications-BQOYGvRv.js → notifications-B9p8eCHD.js} +9 -9
- package/core/built/admin/assets/activitypub/{preferences-6h43G9_q.js → preferences-BCqUdC3v.js} +9 -9
- package/core/built/admin/assets/activitypub/{profile-BMN9VVZ2.js → profile-BRCWoFem.js} +178 -178
- package/core/built/admin/assets/activitypub/{reply-ZNo04xsO.js → reply-DYK5vVqb.js} +2 -2
- package/core/built/admin/assets/activitypub/{routes-3B9mUQ7i.js → routes-BSXT992i.js} +81 -84
- package/core/built/admin/assets/activitypub/{separator-D9taVCCa.js → separator-BbQqTm-p.js} +3 -3
- package/core/built/admin/assets/activitypub/{settings-71gCm3SO.js → settings-DQDkr06X.js} +6 -6
- package/core/built/admin/assets/activitypub/{step-1-BsGGnBuT.js → step-1-B-YfsVeO.js} +5 -5
- package/core/built/admin/assets/activitypub/{step-2-teosIS0k.js → step-2-DtPQzlTH.js} +6 -6
- package/core/built/admin/assets/activitypub/{step-3-BjD5TokC.js → step-3-D6BFMXL_.js} +10 -10
- package/core/built/admin/assets/activitypub/{tabs-Cvwl1wXU.js → tabs-GpNecvfB.js} +6 -6
- package/core/built/admin/assets/activitypub/{topic-filter-C3LZJc2X.js → topic-filter-BPDeQQys.js} +3 -3
- package/core/built/admin/assets/activitypub/{use-activity-pub-queries-Dp9f0gov.js → use-activity-pub-queries-BoVOxXkV.js} +2 -2
- package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-C4RI0sa9.js → use-navigate-with-base-path-Bmk5h4lW.js} +220 -220
- package/core/built/admin/assets/activitypub/{use-reply-chain-data-C2oNDMUH.js → use-reply-chain-data-wVBX7swM.js} +5 -5
- package/core/built/admin/assets/activitypub/{x-Dxm6pV9X.js → x-DbQZOLiI.js} +2 -2
- package/core/built/admin/assets/{add-integration-modal--YpTq3c0.js → add-integration-modal-BC0jExDZ.js} +1 -1
- package/core/built/admin/assets/{add-newsletter-modal-C8Ix2hol.js → add-newsletter-modal-DchTkA7l.js} +1 -1
- package/core/built/admin/assets/{add-recommendation-modal-CScuNFz4.js → add-recommendation-modal-DMvaJZKp.js} +1 -1
- package/core/built/admin/assets/alert-dialog-QhXzdHfc.js +1 -0
- package/core/built/admin/assets/{analytics-Cnji45H5.js → analytics-No1DDY3A.js} +1 -1
- package/core/built/admin/assets/{announcement-bar-modal-BTHiy1ZO.js → announcement-bar-modal-DM3cYOpo.js} +1 -1
- package/core/built/admin/assets/{api-keys-Boy5pLbD.js → api-keys-BLm2NDBh.js} +1 -1
- package/core/built/admin/assets/audience-9mwU5TW6.js +1 -0
- package/core/built/admin/assets/{automations-BWpRCZ_f.js → automations-DpUNUdcZ.js} +1 -1
- package/core/built/admin/assets/{bluesky-sharing-DHOpQxff.js → bluesky-sharing-Cjrv_f62.js} +1 -1
- package/core/built/admin/assets/{box-By_EgGtm.js → box-CdfQAP_F.js} +1 -1
- package/core/built/admin/assets/{brand-icon-09YqFZjV.js → brand-icon-CrIGOA3Z.js} +1 -1
- package/core/built/admin/assets/{breadcrumb-CcFr_ltt.js → breadcrumb-DLiqCyFc.js} +1 -1
- package/core/built/admin/assets/{button-BshWPHvn.js → button-B2jcu6bk.js} +1 -1
- package/core/built/admin/assets/{card-CiiE7QfM.js → card--VNbfgo3.js} +1 -1
- package/core/built/admin/assets/{chart-BnXyfH11.js → chart-BrhA41Zi.js} +1 -1
- package/core/built/admin/assets/chart-helpers-Fo3bUL3K.js +1 -0
- package/core/built/admin/assets/{checkbox-Dwwr_3Py.js → checkbox-BfKktMph.js} +1 -1
- package/core/built/admin/assets/{chunk.524.91ecb33e6afc3bd8949b.js → chunk.524.60ca4692d91c6022042f.js} +4 -4
- package/core/built/admin/assets/{chunk.582.512549909741883f960c.js → chunk.582.525c7617c2d9e94c940a.js} +6 -6
- package/core/built/admin/assets/{chunk.16.f76a6314082d813d67e0.js → chunk.896.435fe0637944d4a69810.js} +3 -3
- package/core/built/admin/assets/{code-editor-view-BwIdPy_k.js → code-editor-view-CYVu4EW6.js} +1 -1
- package/core/built/admin/assets/{code-editor-view-CtkF82Fv.js → code-editor-view-DCQJxsfU.js} +1 -1
- package/core/built/admin/assets/{color-picker-Bmo1r9Fc.js → color-picker-BTY_NdEm.js} +1 -1
- package/core/built/admin/assets/{color-picker-field-DywowPhF.js → color-picker-field-CPlkzOH0.js} +1 -1
- package/core/built/admin/assets/{combobox-C4QCh6Yw.js → combobox-DrMtv_4P.js} +1 -1
- package/core/built/admin/assets/command-ZdgYJpoI.js +1 -0
- package/core/built/admin/assets/comments-kidj60-h.js +1 -0
- package/core/built/admin/assets/{confirmation-context-CLFHhyyH.js → confirmation-context-BhbmQQEl.js} +1 -1
- package/core/built/admin/assets/{container-LiZf3XdY.js → container-BuQG1wuP.js} +1 -1
- package/core/built/admin/assets/{content-api-modal-BtpNI92-.js → content-api-modal-CyQEC3fr.js} +1 -1
- package/core/built/admin/assets/{copy-field-CglgRZyG.js → copy-field-B3M1s78L.js} +1 -1
- package/core/built/admin/assets/{custom-field-type-option-D0PXoSnP.js → custom-field-type-option-CsGIZk1J.js} +1 -1
- package/core/built/admin/assets/{custom-integration-modal-DCIHKN33.js → custom-integration-modal-BY37O_9X.js} +1 -1
- package/core/built/admin/assets/{data-list-CupF7bjM.js → data-list-CA2jYGPq.js} +1 -1
- package/core/built/admin/assets/{date-range-select-JPwM0yUj.js → date-range-select-DD2RKkgB.js} +1 -1
- package/core/built/admin/assets/design-and-theme-modal-DUSKM4uC.js +22 -0
- package/core/built/admin/assets/{detail-page-D8lx2SdP.js → detail-page-Dnv-CdR1.js} +1 -1
- package/core/built/admin/assets/dialog-B44iRwlc.js +1 -0
- package/core/built/admin/assets/{dirty-confirm-dialog-CmARpZQS.js → dirty-confirm-dialog-BxgQgQ6H.js} +1 -1
- package/core/built/admin/assets/{disabled-sources-indicator-BTJ2ClQu.js → disabled-sources-indicator-Cvy47bE2.js} +1 -1
- package/core/built/admin/assets/{dist-DzcfoDJ3.js → dist-8YJUlf3B.js} +1 -1
- package/core/built/admin/assets/{dist-Cb5RSHSg.js → dist-B3keLvjj.js} +1 -1
- package/core/built/admin/assets/{dist-QLZuGq7o2.js → dist-Cy8tfrp_.js} +1 -1
- package/core/built/admin/assets/{dist-BT_Z-eCn.js → dist-Dgt2cr6a.js} +1 -1
- package/core/built/admin/assets/{domain-D0SAtc-T.js → domain-Ca6KhoQt.js} +1 -1
- package/core/built/admin/assets/{dropzone-CaPOeDRZ.js → dropzone-Bb-5zQTk.js} +1 -1
- package/core/built/admin/assets/edit-profile-BdupLlus.js +1 -0
- package/core/built/admin/assets/{editor-COXn4Atu.js → editor-BP883Lpn.js} +3 -3
- package/core/built/admin/assets/{embed-signup-form-modal-BFTPf04i.js → embed-signup-form-modal-DeBMLxlL.js} +1 -1
- package/core/built/admin/assets/{empty-indicator-WB1WgT9h.js → empty-indicator-D9QdpuNX.js} +1 -1
- package/core/built/admin/assets/{explore-BsNYrubV.js → explore-FB-CimXw.js} +1 -1
- package/core/built/admin/assets/{feed-8RR1O1bK.js → feed-C1GxsmI2.js} +1 -1
- package/core/built/admin/assets/{field-LmNk7wZh.js → field-Cj8lmDOo.js} +1 -1
- package/core/built/admin/assets/{filter-sources-4C0kF1NU.js → filter-sources-D5n5bFA2.js} +1 -1
- package/core/built/admin/assets/{filters-CV5jCb9n.js → filters-DJEzkMUK.js} +1 -1
- package/core/built/admin/assets/{filters-Dmr0PoqU.js → filters-MZXvdH5D.js} +1 -1
- package/core/built/admin/assets/{first-promoter-modal-OCzSaL3B.js → first-promoter-modal-CGTGLCr5.js} +1 -1
- package/core/built/admin/assets/{ghost-403cb39badad3df411fc0ba27d220047.js → ghost-3894eedcc6968f658578c0abfe942aab.js} +2 -2
- package/core/built/admin/assets/{gift-link-modal-0mzjn5oF.js → gift-link-modal-B6v0tnRN.js} +1 -1
- package/core/built/admin/assets/{grid-CUciBfjf.js → grid-Dj29PY05.js} +1 -1
- package/core/built/admin/assets/growth-BGAJD1rs.js +3 -0
- package/core/built/admin/assets/growth-D6mhcx3q.js +1 -0
- package/core/built/admin/assets/{heading-CRZZ2FUe.js → heading-Dh5SFVjL.js} +1 -1
- package/core/built/admin/assets/history-modal-iKwUY3XR.js +1 -0
- package/core/built/admin/assets/html-field-C8qVGGC1.js +1 -0
- package/core/built/admin/assets/{images-C0XvUYMb.js → images-h8VZEQ9k.js} +1 -1
- package/core/built/admin/assets/{inbox-DZXDUt4s.js → inbox-BYd1M06Q.js} +13 -13
- package/core/built/admin/assets/index-DjQe-e5s.js +4 -0
- package/core/built/admin/assets/{index.es-BMUCj9TR.js → index.es-VihPwfeH.js} +1 -1
- package/core/built/admin/assets/{inline-Cw-gigDW.js → inline-BWSs_VzR.js} +1 -1
- package/core/built/admin/assets/{input-UHrKuvBT.js → input--W-rCTrX.js} +1 -1
- package/core/built/admin/assets/{input-group-BPAxETpQ.js → input-group-D8sCXRF5.js} +1 -1
- package/core/built/admin/assets/{input-surface-BdOe4KzO.js → input-surface-BsrIZeSF.js} +1 -1
- package/core/built/admin/assets/{integration-header-B4DyXV06.js → integration-header-Bm6IDb1A.js} +1 -1
- package/core/built/admin/assets/{invite-user-modal-BrAkxEO3.js → invite-user-modal-MdImLCaJ.js} +1 -1
- package/core/built/admin/assets/{koenig-lexical-60O_8aiO.js → koenig-lexical-_-IsVI7E.js} +1 -1
- package/core/built/admin/assets/koenig-loader-DYZpm6El.js +2 -0
- package/core/built/admin/assets/{kpi-card-fUHZlzBX.js → kpi-card-DW_2y3ug.js} +1 -1
- package/core/built/admin/assets/kpi-card-DZQk_0W8.js +1 -0
- package/core/built/admin/assets/kpi-helpers-PueTKuA6.js +1 -0
- package/core/built/admin/assets/kpi-tabs-CojDs-Qz.js +1 -0
- package/core/built/admin/assets/{label-VIG969IC.js → label-DjbT91GM.js} +1 -1
- package/core/built/admin/assets/{label-picker-BBWykUeA.js → label-picker-cB51xl1r.js} +1 -1
- package/core/built/admin/assets/layout-c_B_1hax.js +1 -0
- package/core/built/admin/assets/{link-helpers-Dtq9fxQg.js → link-helpers-MVDdnFCY.js} +1 -1
- package/core/built/admin/assets/{list-page-CdsnQR9N.js → list-page-BucXJ0hi.js} +1 -1
- package/core/built/admin/assets/{loading-indicator-SFTqyYVE.js → loading-indicator-BpFWTVgh.js} +1 -1
- package/core/built/admin/assets/{member-custom-fields-gOv6Hoh3.js → member-custom-fields-qs0dIkxM.js} +1 -1
- package/core/built/admin/assets/member-detail-B6uec2a6.js +1 -0
- package/core/built/admin/assets/members-BQF3CqhI.js +2 -0
- package/core/built/admin/assets/{modal-page-BMTzFHVO.js → modal-page-xCivTMvI.js} +1 -1
- package/core/built/admin/assets/{moderation-DzzPLDyl.js → moderation-DY4wF1Q3.js} +1 -1
- package/core/built/admin/assets/{multi-select-combobox-CGohnsxJ.js → multi-select-combobox-B6LiRzDO.js} +1 -1
- package/core/built/admin/assets/navigation-modal-DX-gNF3X.js +1 -0
- package/core/built/admin/assets/newsletter-CyQA7m3m.js +1 -0
- package/core/built/admin/assets/{newsletter-detail-modal-DQU3r4g2.js → newsletter-detail-modal-BDrptuxn.js} +1 -1
- package/core/built/admin/assets/{newsletter-emails-D5ql1rud.js → newsletter-emails-CFeLlt4z.js} +1 -1
- package/core/built/admin/assets/newsletters-DXuNmC42.js +1 -0
- package/core/built/admin/assets/{note-i8k6pjaw.js → note-Cgo2LCJ6.js} +1 -1
- package/core/built/admin/assets/notifications-BC50AMku.js +1 -0
- package/core/built/admin/assets/{offers-container-modal-BWfjSdyg.js → offers-container-modal-DWycIMzT.js} +1 -1
- package/core/built/admin/assets/{onboarding-route-Cu_ROWPn.js → onboarding-route-Dmc4IPm3.js} +1 -1
- package/core/built/admin/assets/overview-CVbFtn-k.js +1 -0
- package/core/built/admin/assets/overview-YKj7SZaK.js +1 -0
- package/core/built/admin/assets/{page-header-Cfds8pCg.js → page-header-BR_nbIPp.js} +1 -1
- package/core/built/admin/assets/{pintura-modal-TDTrJ89x.js → pintura-modal-BR9hEvS8.js} +1 -1
- package/core/built/admin/assets/popover-CCy0h5rq.js +1 -0
- package/core/built/admin/assets/{portal-frame-DjBF-uy2.js → portal-frame-dc4XKr0e.js} +1 -1
- package/core/built/admin/assets/portal-modal-BvvdF_B9.js +1 -0
- package/core/built/admin/assets/{post-analytics-Buz1COoY.js → post-analytics-DX470WRG.js} +1 -1
- package/core/built/admin/assets/{post-analytics-header-B-P0eFnT.js → post-analytics-header-CXpJmdDv.js} +1 -1
- package/core/built/admin/assets/{post-analytics-provider-Cu3jNeFh.js → post-analytics-provider-CLfKGWZy.js} +1 -1
- package/core/built/admin/assets/{post-share-modal-P1_M6o-H.js → post-share-modal-Cl0NXRJr.js} +1 -1
- package/core/built/admin/assets/{preferences-Cq1aOiLy.js → preferences-DO0UUWFp.js} +2 -2
- package/core/built/admin/assets/{preview-chrome-BOVO6_PE.js → preview-chrome-BljUBlOk.js} +1 -1
- package/core/built/admin/assets/{preview-modal-MlTjP8UU.js → preview-modal-C-BL-F9k.js} +1 -1
- package/core/built/admin/assets/profile-CxT-0l4d.js +1 -0
- package/core/built/admin/assets/radio-group-Bgz60i81.js +1 -0
- package/core/built/admin/assets/{router-provider-CJC58zTy.js → router-provider-B0gZyiGJ.js} +1 -1
- package/core/built/admin/assets/{schemas-CRsC53ls.js → schemas-4UPic-oD.js} +2 -2
- package/core/built/admin/assets/select-DuDUFdPq.js +1 -0
- package/core/built/admin/assets/{settings-B5hJKZ5C.js → settings-BjCii7BM.js} +1 -1
- package/core/built/admin/assets/settings-b8kNzZSQ.js +4 -0
- package/core/built/admin/assets/{settings-breadcrumbs-sLDNedBW.js → settings-breadcrumbs-CyP_9zTo.js} +1 -1
- package/core/built/admin/assets/{shade-app-F7WxOyfk-nufqw1hd.js → shade-app-CcS3f8MZ-vwURazk8.js} +2 -2
- package/core/built/admin/assets/{share-modal-CLBfj377.js → share-modal-BV70mr9k.js} +1 -1
- package/core/built/admin/assets/{skeleton-D7hwjdry.js → skeleton-Ce9GgUpf.js} +1 -1
- package/core/built/admin/assets/{slack-modal-Bt9I_tEo.js → slack-modal-Be2_KK-z.js} +1 -1
- package/core/built/admin/assets/sort-button-Cc-Z96sA.js +1 -0
- package/core/built/admin/assets/{source-icon-BPsD5ees.js → source-icon-v6PUnmyM.js} +1 -1
- package/core/built/admin/assets/{stack-CIfOAAVf.js → stack-B2eszIiq.js} +1 -1
- package/core/built/admin/assets/{stats-B_YkF7bp.js → stats-C4reGh9O.js} +1 -1
- package/core/built/admin/assets/{stats-view-BOCp9RG8.js → stats-view-DP9pQ62k.js} +1 -1
- package/core/built/admin/assets/{step-1-CMta6YFO.js → step-1-DSRp2vBj.js} +1 -1
- package/core/built/admin/assets/{step-2-BG04nh5q.js → step-2-COqv2g0u.js} +1 -1
- package/core/built/admin/assets/{step-3-ZnMaVIPj.js → step-3-6W1NMVQc.js} +2 -2
- package/core/built/admin/assets/{stripe-button-DDoUKN5a.js → stripe-button-D2K42Uty.js} +1 -1
- package/core/built/admin/assets/{stripe-connect-modal-BeSukI8q.js → stripe-connect-modal-Z-UT_BGc.js} +1 -1
- package/core/built/admin/assets/{switch-C9djUIMO.js → switch-CI4gLWqb.js} +1 -1
- package/core/built/admin/assets/{table-CrqQtkR2.js → table-B2pIKjVh.js} +1 -1
- package/core/built/admin/assets/{tabs-CGisSbWq.js → tabs-SaW_UT-Q.js} +1 -1
- package/core/built/admin/assets/tag-detail-Dc0nTOtU.js +2 -0
- package/core/built/admin/assets/tags-BLaXBwnb.js +1 -0
- package/core/built/admin/assets/testimonials-modal-sFwRnNLh.js +1 -0
- package/core/built/admin/assets/{text-DU9Hv33_.js → text-BQDSDsKs.js} +1 -1
- package/core/built/admin/assets/{textarea-d9qEkMOP.js → textarea-DJ1Q5V39.js} +1 -1
- package/core/built/admin/assets/{tier-detail-modal-CxRwgTPR.js → tier-detail-modal-BCFpWwUS.js} +1 -1
- package/core/built/admin/assets/{toggle-group-CtKZURJd.js → toggle-group-EM9WpESu.js} +1 -1
- package/core/built/admin/assets/{topic-filter-D8JT8Tq1.js → topic-filter-DY4gNHn2.js} +1 -1
- package/core/built/admin/assets/{transistor-modal-6PUf0idx.js → transistor-modal-CpyPG-MH.js} +1 -1
- package/core/built/admin/assets/trend-badge-ByMkuAuH.js +1 -0
- package/core/built/admin/assets/{unsplash-modal-BPuDBPja.js → unsplash-modal-Cv2Q6GtY.js} +1 -1
- package/core/built/admin/assets/{use-analytics-data--opuzwcz.js → use-analytics-data-CHvjMYuT.js} +1 -1
- package/core/built/admin/assets/use-check-theme-limit-error-Qv4SVXqw.js +2 -0
- package/core/built/admin/assets/use-filter-params-CAvfDvf1.js +1 -0
- package/core/built/admin/assets/use-growth-stats-D6mZXGhK.js +1 -0
- package/core/built/admin/assets/{use-limiter-TDSNiHPB.js → use-limiter-cwJvsNBo.js} +1 -1
- package/core/built/admin/assets/{use-navigate-with-base-path-CK989MlC.js → use-navigate-with-base-path-BHPA228f.js} +1 -1
- package/core/built/admin/assets/{use-pintura-config-CnCGrDFk.js → use-pintura-config-CzTfnufz.js} +1 -1
- package/core/built/admin/assets/{use-pintura-editor-ntphvtUd.js → use-pintura-editor-BDBXWUYq.js} +1 -1
- package/core/built/admin/assets/{use-post-referrers-CbXLFIex.js → use-post-referrers-DbY-mzci.js} +1 -1
- package/core/built/admin/assets/{use-reply-chain-data-JYFKSO83.js → use-reply-chain-data-BeQwz8oF.js} +1 -1
- package/core/built/admin/assets/{use-router-history-entry-BwfQS2mq.js → use-router-history-entry-Bg6BhBQQ.js} +1 -1
- package/core/built/admin/assets/{use-setting-group-DQxV42-O.js → use-setting-group-VM7FQwMY.js} +1 -1
- package/core/built/admin/assets/{use-settings-navigation-BBzro2-V.js → use-settings-navigation-BbrSUVcf.js} +1 -1
- package/core/built/admin/assets/{use-simple-pagination-B2TdNX67.js → use-simple-pagination-Dum6Irbs.js} +1 -1
- package/core/built/admin/assets/{use-staff-users-QrR9voeC.js → use-staff-users-cZg4ugOF.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-query-D2Aeoty5.js → use-tinybird-query-B1IMyAcv.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-token-DBuwMmln.js → use-tinybird-token-Bow0Zwn8.js} +1 -1
- package/core/built/admin/assets/{use-unsaved-changes-guard-DpYJcj1d.js → use-unsaved-changes-guard-BAy0RANR.js} +1 -1
- package/core/built/admin/assets/{use-url-input-WnIqckzS.js → use-url-input-Df5QzNa7.js} +1 -1
- package/core/built/admin/assets/user-detail-modal-yipSoQfv.js +1 -0
- package/core/built/admin/assets/{virtual-list-D3MfPNOh.js → virtual-list-DEx8WgiO.js} +1 -1
- package/core/built/admin/assets/web-CKcXAu86.js +1 -0
- package/core/built/admin/assets/web-DR4TqM3E.js +2 -0
- package/core/built/admin/assets/{zapier-modal-BO6PS_Vd.js → zapier-modal-Cw3BTBUu.js} +1 -1
- package/core/built/admin/index.html +24 -25
- package/core/frontend/services/rendering/renderer.js +15 -0
- package/core/server/adapters/storage/LocalStorageBase.js +8 -5
- package/core/server/api/endpoints/db.js +19 -5
- package/core/server/api/endpoints/index.js +4 -0
- package/core/server/api/endpoints/member-custom-fields.js +4 -14
- package/core/server/api/endpoints/posts.js +1 -0
- package/core/server/api/endpoints/tiers-checkout-config.js +59 -0
- package/core/server/api/endpoints/utils/serializers/output/config.js +1 -0
- package/core/server/api/endpoints/utils/serializers/output/index.js +4 -0
- package/core/server/api/endpoints/utils/serializers/output/tiers-checkout-config.js +12 -0
- package/core/server/data/exporter/table-lists.js +3 -0
- package/core/server/data/importer/content-files.js +57 -0
- package/core/server/data/importer/handlers/image.js +2 -2
- package/core/server/data/importer/import-archive.js +131 -0
- package/core/server/data/importer/import-manager.js +18 -180
- package/core/server/data/importer/importers/content-file-importer.js +66 -4
- package/core/server/data/migrations/versions/6.61/2026-08-19-14-30-20-add-written-by-to-members-custom-field-values.js +42 -0
- package/core/server/data/migrations/versions/6.61/2026-08-19-14-38-53-add-members-custom-field-bindings-table.js +26 -0
- package/core/server/data/migrations/versions/6.61/2026-08-19-14-48-06-add-tier-checkout-field-tables.js +35 -0
- package/core/server/data/schema/schema.js +90 -0
- package/core/server/data/seeders/importers/automation-action-revisions-importer.js +3 -3
- package/core/server/data/seeders/importers/automation-actions-importer.js +3 -3
- package/core/server/data/seeders/importers/automation-run-steps-importer.js +3 -3
- package/core/server/data/seeders/importers/automation-runs-importer.js +5 -5
- package/core/server/data/seeders/importers/automations-importer.js +3 -3
- package/core/server/data/seeders/importers/comment-reports-importer.js +1 -1
- package/core/server/data/seeders/importers/comments-importer.js +1 -1
- package/core/server/data/seeders/importers/email-batches-importer.js +1 -1
- package/core/server/data/seeders/importers/email-recipients-importer.js +1 -1
- package/core/server/data/seeders/importers/emails-importer.js +1 -1
- package/core/server/data/seeders/importers/labels-importer.js +1 -1
- package/core/server/data/seeders/importers/members-click-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-created-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-feedback-importer.js +1 -1
- package/core/server/data/seeders/importers/members-importer.js +1 -1
- package/core/server/data/seeders/importers/members-login-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-products-importer.js +1 -1
- package/core/server/data/seeders/importers/members-status-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-stripe-customers-importer.js +1 -1
- package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +1 -1
- package/core/server/data/seeders/importers/members-subscribe-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +1 -1
- package/core/server/data/seeders/importers/offer-redemptions-importer.js +1 -1
- package/core/server/data/seeders/importers/offers-importer.js +1 -1
- package/core/server/data/seeders/importers/posts-importer.js +1 -1
- package/core/server/data/seeders/importers/table-importer.js +2 -2
- package/core/server/data/seeders/importers/tags-importer.js +1 -1
- package/core/server/data/seeders/importers/users-importer.js +1 -1
- package/core/server/data/seeders/importers/web-mentions-importer.js +1 -1
- package/core/server/data/seeders/utils/random.js +3 -3
- package/core/server/ghost-server.js +3 -2
- package/core/server/lib/db-types/boolean.js +18 -0
- package/core/server/lib/promise-pool.js +31 -0
- package/core/server/services/automations/database-automations-repository.js +26 -26
- package/core/server/services/automations/poll.js +1 -0
- package/core/server/services/content-import/import/assets.js +74 -0
- package/core/server/services/content-import/import/importer.js +57 -14
- package/core/server/services/content-import/import/post-data.js +1 -0
- package/core/server/services/content-import/import/post-repository.js +78 -0
- package/core/server/services/content-import/import/relations.js +149 -0
- package/core/server/services/content-import/import/row.js +11 -0
- package/core/server/services/content-import/import/schema.js +29 -0
- package/core/server/services/content-import/import/source.js +125 -0
- package/core/server/services/content-import/index.js +6 -28
- package/core/server/services/email-analytics/email-analytics-service.js +8 -1
- package/core/server/services/email-analytics/lib/queries.js +7 -1
- package/core/server/services/gift-links/schema.js +3 -3
- package/core/server/services/gifts/CONTEXT.md +1 -1
- package/core/server/services/gifts/constants.js +1 -1
- package/core/server/services/gifts/gift-bookshelf-repository.js +2 -2
- package/core/server/services/gifts/gift-delivery-bookshelf-repository.js +18 -9
- package/core/server/services/gifts/gift-delivery-schema.js +5 -5
- package/core/server/services/gifts/gift-delivery-service.js +4 -0
- package/core/server/services/gifts/gift-schema.js +10 -10
- package/core/server/services/gifts/gift-service.js +4 -2
- package/core/server/services/jobs-service/register-job-handlers.js +5 -5
- package/core/server/services/lib/mailgun-client.js +44 -8
- package/core/server/services/media-inliner/external-media-inliner-job.js +12 -0
- package/core/server/services/media-inliner/external-media-inliner.js +103 -29
- package/core/server/services/media-inliner/service.js +13 -41
- package/core/server/services/media-inliner/types.js +2 -0
- package/core/server/services/members/import-export/export/exporter.js +4 -6
- package/core/server/services/members/import-export/import/importer.js +21 -5
- package/core/server/services/members/import-export/import/stripe-utils.js +6 -1
- package/core/server/services/members/import-export/index.js +6 -1
- package/core/server/services/members/members-api/members-api.js +5 -0
- package/core/server/services/members/members-api/services/member-bread-service.js +19 -1
- package/core/server/services/members/members-api/services/payments-service.js +47 -1
- package/core/server/services/members-custom-fields/actions.js +27 -1
- package/core/server/services/members-custom-fields/bindings-service.js +119 -0
- package/core/server/services/members-custom-fields/definitions-service.js +104 -13
- package/core/server/services/members-custom-fields/index.js +11 -4
- package/core/server/services/members-custom-fields/queries.js +5 -0
- package/core/server/services/members-custom-fields/schema.js +37 -6
- package/core/server/services/members-custom-fields/values-service.js +15 -3
- package/core/server/services/public-config/config.js +7 -0
- package/core/server/services/stripe/services/checkout/allowed-countries.js +267 -0
- package/core/server/services/stripe/services/checkout/completed-session.js +68 -0
- package/core/server/services/stripe/services/checkout/field-ports.js +34 -0
- package/core/server/services/stripe/services/checkout/session-options.js +97 -0
- package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +49 -0
- package/core/server/services/stripe/stripe-api.js +29 -0
- package/core/server/services/stripe/stripe-service.js +7 -0
- package/core/server/services/tier-checkout-config/codec.js +95 -0
- package/core/server/services/tier-checkout-config/destinations.js +17 -0
- package/core/server/services/tier-checkout-config/index.js +26 -0
- package/core/server/services/tier-checkout-config/models.js +57 -0
- package/core/server/services/tier-checkout-config/queries.js +80 -0
- package/core/server/services/tier-checkout-config/schema.js +33 -0
- package/core/server/services/tier-checkout-config/serializers.js +122 -0
- package/core/server/services/tier-checkout-config/service.js +303 -0
- package/core/server/services/tiers/service.js +21 -0
- package/core/server/web/api/endpoints/admin/routes.js +24 -13
- package/core/server/web/api/middleware/upload.js +2 -2
- package/core/server/web/parent/app.js +5 -0
- package/core/server/web/parent/middleware/filter-query-parameters.js +94 -0
- package/core/server/web/parent/middleware/index.js +1 -0
- package/core/server/web/query-parameter-policy/index.js +9 -0
- package/core/server/web/query-parameter-policy/policy.json +58 -0
- package/core/server/web/query-parameter-policy/schema.js +38 -0
- package/core/shared/config/defaults.json +3 -0
- package/core/shared/config/env/config.testing-mysql.json +3 -0
- package/core/shared/config/env/config.testing.json +3 -0
- package/core/shared/config/overrides.json +4 -2
- package/core/shared/labs.js +5 -14
- package/package.json +12 -13
- package/pnpm-lock.yaml +44 -46
- package/pnpm-workspace.yaml +6 -6
- package/tsconfig.json +2 -3
- package/core/built/admin/assets/activitypub/layout-CXajhRsL.js +0 -1
- package/core/built/admin/assets/alert-dialog-wEbVxANM.js +0 -1
- package/core/built/admin/assets/app-utils-D2Wp7ZSS.js +0 -1
- package/core/built/admin/assets/audience-DTLMXAFH.js +0 -1
- package/core/built/admin/assets/chart-helpers-B3OqQ6Ez.js +0 -1
- package/core/built/admin/assets/command-DcLbSifC.js +0 -1
- package/core/built/admin/assets/comments-Bxy_3WyE.js +0 -1
- package/core/built/admin/assets/design-and-theme-modal-CZ-PkW7o.js +0 -23
- package/core/built/admin/assets/dialog-Db7c164G.js +0 -1
- package/core/built/admin/assets/edit-profile-By7v5XW5.js +0 -1
- package/core/built/admin/assets/growth-55vWlGT_.js +0 -1
- package/core/built/admin/assets/growth-DA5AluYw.js +0 -3
- package/core/built/admin/assets/history-modal-G1s5hHz7.js +0 -1
- package/core/built/admin/assets/html-field-BegxsWpw.js +0 -1
- package/core/built/admin/assets/index-CDP9tIOk.js +0 -4
- package/core/built/admin/assets/koenig-loader-DwVY_V-H.js +0 -1
- package/core/built/admin/assets/kpi-card-LERqWBoY.js +0 -1
- package/core/built/admin/assets/kpi-helpers-DB3ouhYF.js +0 -1
- package/core/built/admin/assets/kpi-tabs-BGvtMD8S.js +0 -1
- package/core/built/admin/assets/layout-Di5K7doM.js +0 -1
- package/core/built/admin/assets/member-detail-D7mZDDp3.js +0 -1
- package/core/built/admin/assets/member-route-0Aa52Ntz.js +0 -1
- package/core/built/admin/assets/members-DvZG9t69.js +0 -2
- package/core/built/admin/assets/navigation-modal-CI8Bx5vn.js +0 -1
- package/core/built/admin/assets/newsletter-Bg3cq5U-.js +0 -1
- package/core/built/admin/assets/newsletters-DMDfZbMS.js +0 -1
- package/core/built/admin/assets/notifications-psA_2Ph4.js +0 -1
- package/core/built/admin/assets/overview-C-6xOLaf.js +0 -1
- package/core/built/admin/assets/overview-DaLhpRrC.js +0 -1
- package/core/built/admin/assets/popover-CFgqFDvC.js +0 -1
- package/core/built/admin/assets/portal-modal-Cf0pBAk8.js +0 -1
- package/core/built/admin/assets/profile-D6dHYf2o.js +0 -1
- package/core/built/admin/assets/radio-group-CjtmsCPl.js +0 -1
- package/core/built/admin/assets/select-D_RQaXgt.js +0 -1
- package/core/built/admin/assets/settings-DIo_F-MF.js +0 -4
- package/core/built/admin/assets/sort-button-DMBXF7tP.js +0 -1
- package/core/built/admin/assets/tag-detail-2a3BfzTW.js +0 -2
- package/core/built/admin/assets/tags-Dp2_8UzL.js +0 -1
- package/core/built/admin/assets/testimonials-modal-C9nrypNo.js +0 -1
- package/core/built/admin/assets/use-check-theme-limit-error-C9-QhGdV.js +0 -1
- package/core/built/admin/assets/use-filter-params-CSpAvgD2.js +0 -1
- package/core/built/admin/assets/use-growth-stats-BOmoPDHJ.js +0 -1
- package/core/built/admin/assets/user-detail-modal-59mBJqxN.js +0 -1
- package/core/built/admin/assets/web-DUuX7nE2.js +0 -2
- package/core/built/admin/assets/web-N8ucs2aG.js +0 -1
- /package/core/server/lib/{db-date.js → db-types/date.js} +0 -0
|
@@ -1064,6 +1064,79 @@ module.exports = {
|
|
|
1064
1064
|
created_at: { type: 'dateTime', nullable: false },
|
|
1065
1065
|
updated_at: { type: 'dateTime', nullable: true },
|
|
1066
1066
|
},
|
|
1067
|
+
// Where a source sends what it collected. The source is who collects, the port is that
|
|
1068
|
+
// source's own name for the thing, and the destination is the publisher's field, which
|
|
1069
|
+
// they can repoint without the source knowing. The row is the collecting: there is one
|
|
1070
|
+
// and the source writes through it, or there is none and it does not.
|
|
1071
|
+
//
|
|
1072
|
+
// A second kind of source becomes a `source_type` beside a widened id. What it must not
|
|
1073
|
+
// become is a second table holding destinations.
|
|
1074
|
+
members_custom_field_bindings: {
|
|
1075
|
+
id: { type: 'string', maxlength: 24, nullable: false, primary: true },
|
|
1076
|
+
product_id: {
|
|
1077
|
+
type: 'string',
|
|
1078
|
+
maxlength: 24,
|
|
1079
|
+
nullable: false,
|
|
1080
|
+
references: 'products.id',
|
|
1081
|
+
cascadeDelete: true,
|
|
1082
|
+
},
|
|
1083
|
+
port: { type: 'string', maxlength: 191, nullable: false },
|
|
1084
|
+
// Indexed rather than unique: several sources landing in one field is expected.
|
|
1085
|
+
custom_field_key: {
|
|
1086
|
+
type: 'string',
|
|
1087
|
+
maxlength: 191,
|
|
1088
|
+
nullable: false,
|
|
1089
|
+
references: 'members_custom_fields.key',
|
|
1090
|
+
cascadeDelete: true,
|
|
1091
|
+
},
|
|
1092
|
+
created_at: { type: 'dateTime', nullable: false },
|
|
1093
|
+
updated_at: { type: 'dateTime', nullable: true },
|
|
1094
|
+
'@@UNIQUE_CONSTRAINTS@@': [
|
|
1095
|
+
{ columns: ['product_id', 'port'], indexName: 'members_custom_field_bindings_unique' },
|
|
1096
|
+
],
|
|
1097
|
+
'@@INDEXES@@': [['custom_field_key']],
|
|
1098
|
+
},
|
|
1099
|
+
// How a tier's checkout question is asked. Where the answer lands is the binding it
|
|
1100
|
+
// hangs off.
|
|
1101
|
+
products_checkout_fields: {
|
|
1102
|
+
id: { type: 'string', maxlength: 24, nullable: false, primary: true },
|
|
1103
|
+
binding_id: {
|
|
1104
|
+
type: 'string',
|
|
1105
|
+
maxlength: 24,
|
|
1106
|
+
nullable: false,
|
|
1107
|
+
unique: true,
|
|
1108
|
+
references: 'members_custom_field_bindings.id',
|
|
1109
|
+
cascadeDelete: true,
|
|
1110
|
+
},
|
|
1111
|
+
sort_order: { type: 'integer', nullable: false, unsigned: true, defaultTo: 0 },
|
|
1112
|
+
// Processors cap a label far shorter than a field name may be. Null asks under the
|
|
1113
|
+
// field's own name.
|
|
1114
|
+
label: { type: 'string', maxlength: 191, nullable: true },
|
|
1115
|
+
optional: { type: 'boolean', nullable: false, defaultTo: true },
|
|
1116
|
+
created_at: { type: 'dateTime', nullable: false },
|
|
1117
|
+
updated_at: { type: 'dateTime', nullable: true },
|
|
1118
|
+
},
|
|
1119
|
+
// The options a tier's collection needs, and the one thing it collects without keeping.
|
|
1120
|
+
// Whether it collects anything it *does* keep is the binding above.
|
|
1121
|
+
products_checkout_config: {
|
|
1122
|
+
id: { type: 'string', maxlength: 24, nullable: false, primary: true },
|
|
1123
|
+
product_id: {
|
|
1124
|
+
type: 'string',
|
|
1125
|
+
maxlength: 24,
|
|
1126
|
+
nullable: false,
|
|
1127
|
+
unique: true,
|
|
1128
|
+
references: 'products.id',
|
|
1129
|
+
cascadeDelete: true,
|
|
1130
|
+
},
|
|
1131
|
+
// ISO 3166-1 alpha-2, comma-joined. A processor will not render an address form
|
|
1132
|
+
// without them, and a wrong code fails the session create.
|
|
1133
|
+
shipping_allowed_countries: { type: 'string', maxlength: 2000, nullable: true },
|
|
1134
|
+
// Stripe keeps a tax number against the customer it invoices, so there is no
|
|
1135
|
+
// destination to bind and nothing to record but whether to ask.
|
|
1136
|
+
tax_number_collect: { type: 'boolean', nullable: false, defaultTo: false },
|
|
1137
|
+
created_at: { type: 'dateTime', nullable: false },
|
|
1138
|
+
updated_at: { type: 'dateTime', nullable: true },
|
|
1139
|
+
},
|
|
1067
1140
|
members_custom_field_values: {
|
|
1068
1141
|
id: { type: 'string', maxlength: 24, nullable: false, primary: true },
|
|
1069
1142
|
// The field's stable key, not its id: a value is addressed by key everywhere it
|
|
@@ -1096,6 +1169,23 @@ module.exports = {
|
|
|
1096
1169
|
// column a fresh install bounds at 65,535 bytes. The bound matching long_text's
|
|
1097
1170
|
// exactly is worth more than the schema restating what the write path enforces.
|
|
1098
1171
|
value_text: { type: 'text', maxlength: 65535, nullable: true },
|
|
1172
|
+
// Who wrote the value that is here now.
|
|
1173
|
+
//
|
|
1174
|
+
// Shaped like `actions`: a type and an id, no foreign key. A type because not every
|
|
1175
|
+
// write comes through a binding — a person edits a member's fields, an import reads a
|
|
1176
|
+
// file — and an id so the writer can be resolved back rather than merely named. A
|
|
1177
|
+
// binding id resolves to the tier, the port and the field it routed into, which is
|
|
1178
|
+
// everything worth knowing about how a value got here.
|
|
1179
|
+
//
|
|
1180
|
+
// No foreign key, because provenance has to outlive its cause: that a value arrived
|
|
1181
|
+
// through a tier's shipping port stays true after someone deletes that binding, even
|
|
1182
|
+
// though it stops being joinable.
|
|
1183
|
+
//
|
|
1184
|
+
// The type is the namespace the id resolves in, so every row carries one. The id is
|
|
1185
|
+
// nullable for the one writer that resolves in no table: an import has none to give
|
|
1186
|
+
// until runs are tracked.
|
|
1187
|
+
written_by_type: { type: 'string', maxlength: 50, nullable: false },
|
|
1188
|
+
written_by_id: { type: 'string', maxlength: 24, nullable: true },
|
|
1099
1189
|
created_at: { type: 'dateTime', nullable: false },
|
|
1100
1190
|
updated_at: { type: 'dateTime', nullable: true },
|
|
1101
1191
|
// Named, because the name knex derives from the table and all three columns
|
|
@@ -7,7 +7,7 @@ exports.AutomationActionRevisionsImporter = void 0;
|
|
|
7
7
|
const faker_1 = require("@faker-js/faker");
|
|
8
8
|
const errors_1 = __importDefault(require("@tryghost/errors"));
|
|
9
9
|
const table_importer_1 = require("./table-importer");
|
|
10
|
-
const
|
|
10
|
+
const date_1 = require("../../../lib/db-types/date");
|
|
11
11
|
const constants_1 = require("../../../services/member-welcome-emails/constants");
|
|
12
12
|
class AutomationActionRevisionsImporter extends table_importer_1.TableImporter {
|
|
13
13
|
static table = 'automation_action_revisions';
|
|
@@ -48,12 +48,12 @@ class AutomationActionRevisionsImporter extends table_importer_1.TableImporter {
|
|
|
48
48
|
message: 'Cannot generate automation action revision without an action',
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
-
const createdAt = (0,
|
|
51
|
+
const createdAt = (0, date_1.fromDatabaseDate)(this.#action.created_at);
|
|
52
52
|
createdAt.setSeconds(createdAt.getSeconds() + this.#revisionIndex);
|
|
53
53
|
this.#revisionIndex += 1;
|
|
54
54
|
const common = {
|
|
55
55
|
id: this.fastFakeObjectId(),
|
|
56
|
-
created_at: (0,
|
|
56
|
+
created_at: (0, date_1.toDatabaseDate)(createdAt),
|
|
57
57
|
action_id: this.#action.id,
|
|
58
58
|
email_sent_count: null,
|
|
59
59
|
email_opened_count: null,
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.AutomationActionsImporter = void 0;
|
|
7
7
|
const errors_1 = __importDefault(require("@tryghost/errors"));
|
|
8
8
|
const table_importer_1 = require("./table-importer");
|
|
9
|
-
const
|
|
9
|
+
const date_1 = require("../../../lib/db-types/date");
|
|
10
10
|
const random_1 = require("../utils/random");
|
|
11
11
|
class AutomationActionsImporter extends table_importer_1.TableImporter {
|
|
12
12
|
static table = 'automation_actions';
|
|
@@ -41,8 +41,8 @@ class AutomationActionsImporter extends table_importer_1.TableImporter {
|
|
|
41
41
|
this.#actionIndex += 1;
|
|
42
42
|
return {
|
|
43
43
|
id: this.fastFakeObjectId(),
|
|
44
|
-
created_at: (0,
|
|
45
|
-
updated_at: (0,
|
|
44
|
+
created_at: (0, date_1.toDatabaseDate)(createdAt),
|
|
45
|
+
updated_at: (0, date_1.toDatabaseDate)(createdAt),
|
|
46
46
|
deleted_at: null,
|
|
47
47
|
automation_id: this.#automation.id,
|
|
48
48
|
type,
|
|
@@ -8,7 +8,7 @@ const faker_1 = require("@faker-js/faker");
|
|
|
8
8
|
const errors_1 = __importDefault(require("@tryghost/errors"));
|
|
9
9
|
const lodash_1 = require("lodash");
|
|
10
10
|
const table_importer_1 = require("./table-importer");
|
|
11
|
-
const
|
|
11
|
+
const date_1 = require("../../../lib/db-types/date");
|
|
12
12
|
class AutomationRunStepsImporter extends table_importer_1.TableImporter {
|
|
13
13
|
static table = 'automation_run_steps';
|
|
14
14
|
static dependencies = [
|
|
@@ -86,12 +86,12 @@ class AutomationRunStepsImporter extends table_importer_1.TableImporter {
|
|
|
86
86
|
? requestedStepCount
|
|
87
87
|
: actionCount;
|
|
88
88
|
fullPathGeneratedForAutomation.add(run.automation_id);
|
|
89
|
-
const runCreatedAt = (0,
|
|
89
|
+
const runCreatedAt = (0, date_1.fromDatabaseDate)(run.created_at);
|
|
90
90
|
const lastStepStatus = faker_1.faker.helpers.arrayElement(['pending', 'finished', 'failed']);
|
|
91
91
|
for (let index = 0; index < runStepCount; index += 1) {
|
|
92
92
|
const createdAt = new Date(runCreatedAt);
|
|
93
93
|
createdAt.setHours(createdAt.getHours() + index);
|
|
94
|
-
const createdAtString = (0,
|
|
94
|
+
const createdAtString = (0, date_1.toDatabaseDate)(createdAt);
|
|
95
95
|
const status = index === runStepCount - 1 ? lastStepStatus : 'finished';
|
|
96
96
|
const isTerminal = status !== 'pending';
|
|
97
97
|
steps.push({
|
|
@@ -9,7 +9,7 @@ const errors_1 = __importDefault(require("@tryghost/errors"));
|
|
|
9
9
|
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
10
10
|
const table_importer_1 = require("./table-importer");
|
|
11
11
|
const parse_email_address_1 = require("@tryghost/parse-email-address");
|
|
12
|
-
const
|
|
12
|
+
const date_1 = require("../../../lib/db-types/date");
|
|
13
13
|
const random_1 = require("../utils/random");
|
|
14
14
|
const assertExampleEmailDomain = (email) => {
|
|
15
15
|
const { domain } = (0, parse_email_address_1.parseEmailAddress)(email) ?? {};
|
|
@@ -51,14 +51,14 @@ class AutomationRunsImporter extends table_importer_1.TableImporter {
|
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
const member = faker_1.faker.helpers.arrayElement(this.#members);
|
|
54
|
-
const automationCreatedAt = (0,
|
|
55
|
-
const memberCreatedAt = (0,
|
|
54
|
+
const automationCreatedAt = (0, date_1.fromDatabaseDate)(this.#automation.created_at);
|
|
55
|
+
const memberCreatedAt = (0, date_1.fromDatabaseDate)(member.created_at);
|
|
56
56
|
const createdAt = (0, random_1.randomDateBetween)(new Date(Math.max(automationCreatedAt.valueOf(), memberCreatedAt.valueOf())), new Date());
|
|
57
57
|
assertExampleEmailDomain(member.email);
|
|
58
58
|
return {
|
|
59
59
|
id: this.fastFakeObjectId(),
|
|
60
|
-
created_at: (0,
|
|
61
|
-
updated_at: (0,
|
|
60
|
+
created_at: (0, date_1.toDatabaseDate)(createdAt),
|
|
61
|
+
updated_at: (0, date_1.toDatabaseDate)(createdAt),
|
|
62
62
|
automation_id: this.#automation.id,
|
|
63
63
|
member_id: member.id,
|
|
64
64
|
member_email: member.email,
|
|
@@ -7,7 +7,7 @@ const string_1 = require("@tryghost/string");
|
|
|
7
7
|
const table_importer_1 = require("./table-importer");
|
|
8
8
|
// @ts-expect-error This module currently lacks type definitions.
|
|
9
9
|
const blog_info_1 = require("../utils/blog-info");
|
|
10
|
-
const
|
|
10
|
+
const date_1 = require("../../../lib/db-types/date");
|
|
11
11
|
const constants_1 = require("../../../services/member-welcome-emails/constants");
|
|
12
12
|
const defaultAutomations = [
|
|
13
13
|
{
|
|
@@ -40,8 +40,8 @@ class AutomationsImporter extends table_importer_1.TableImporter {
|
|
|
40
40
|
status: faker_1.faker.helpers.arrayElement(['active', 'inactive']),
|
|
41
41
|
name,
|
|
42
42
|
slug,
|
|
43
|
-
created_at: (0,
|
|
44
|
-
updated_at: (0,
|
|
43
|
+
created_at: (0, date_1.toDatabaseDate)(createdAt),
|
|
44
|
+
updated_at: (0, date_1.toDatabaseDate)(createdAt),
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { faker } = require('@faker-js/faker');
|
|
3
3
|
const { luck, randomDateBetween } = require('../utils/random');
|
|
4
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
4
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
5
5
|
|
|
6
6
|
class CommentReportsImporter extends TableImporter {
|
|
7
7
|
static table = 'comment_reports';
|
|
@@ -2,7 +2,7 @@ const { faker } = require('@faker-js/faker');
|
|
|
2
2
|
const { TableImporter } = require('./table-importer');
|
|
3
3
|
const { luck } = require('../utils/random');
|
|
4
4
|
const generateEvents = require('../utils/event-generator');
|
|
5
|
-
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
|
|
5
|
+
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
|
|
6
6
|
|
|
7
7
|
class CommentsImporter extends TableImporter {
|
|
8
8
|
static table = 'comments';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { faker } = require('@faker-js/faker');
|
|
3
3
|
const { randomDateBetween } = require('../utils/random');
|
|
4
|
-
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
|
|
4
|
+
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
|
|
5
5
|
|
|
6
6
|
class EmailBatchesImporter extends TableImporter {
|
|
7
7
|
static table = 'email_batches';
|
|
@@ -2,7 +2,7 @@ const { TableImporter } = require('./table-importer');
|
|
|
2
2
|
const { faker } = require('@faker-js/faker');
|
|
3
3
|
const generateEvents = require('../utils/event-generator');
|
|
4
4
|
const { randomDateBetween } = require('../utils/random');
|
|
5
|
-
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
|
|
5
|
+
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
|
|
6
6
|
const debug = require('@tryghost/debug')('EmailRecipientsImporter');
|
|
7
7
|
|
|
8
8
|
const emailStatus = {
|
|
@@ -2,7 +2,7 @@ const { TableImporter } = require('./table-importer');
|
|
|
2
2
|
const { faker } = require('@faker-js/faker');
|
|
3
3
|
const generateEvents = require('../utils/event-generator');
|
|
4
4
|
const { luck } = require('../utils/random');
|
|
5
|
-
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
|
|
5
|
+
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
|
|
6
6
|
|
|
7
7
|
class EmailsImporter extends TableImporter {
|
|
8
8
|
static table = 'emails';
|
|
@@ -2,7 +2,7 @@ const { TableImporter } = require('./table-importer');
|
|
|
2
2
|
const { faker } = require('@faker-js/faker');
|
|
3
3
|
const { slugify } = require('@tryghost/string');
|
|
4
4
|
const { blogStartDate } = require('../utils/blog-info');
|
|
5
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
5
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
6
6
|
|
|
7
7
|
class LabelsImporter extends TableImporter {
|
|
8
8
|
static table = 'labels';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { faker } = require('@faker-js/faker');
|
|
3
3
|
const { luck, randomDateBetween } = require('../utils/random');
|
|
4
|
-
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
|
|
4
|
+
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
|
|
5
5
|
|
|
6
6
|
class MembersClickEventsImporter extends TableImporter {
|
|
7
7
|
static table = 'members_click_events';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { faker } = require('@faker-js/faker');
|
|
3
3
|
const { luck } = require('../utils/random');
|
|
4
|
-
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
|
|
4
|
+
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
|
|
5
5
|
|
|
6
6
|
class MembersCreatedEventsImporter extends TableImporter {
|
|
7
7
|
static table = 'members_created_events';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { luck, randomDateBetween } = require('../utils/random');
|
|
3
|
-
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
|
|
3
|
+
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
|
|
4
4
|
|
|
5
5
|
class MembersFeedbackImporter extends TableImporter {
|
|
6
6
|
static table = 'members_feedback';
|
|
@@ -4,7 +4,7 @@ const { faker: americanFaker } = require('@faker-js/faker/locale/en_US');
|
|
|
4
4
|
const { blogStartDate: startTime } = require('../utils/blog-info');
|
|
5
5
|
const generateEvents = require('../utils/event-generator');
|
|
6
6
|
const { luck } = require('../utils/random');
|
|
7
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
7
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
8
8
|
const debug = require('@tryghost/debug')('MembersImporter');
|
|
9
9
|
|
|
10
10
|
class MembersImporter extends TableImporter {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { luck } = require('../utils/random');
|
|
3
3
|
const generateEvents = require('../utils/event-generator');
|
|
4
|
-
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
|
|
4
|
+
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
|
|
5
5
|
|
|
6
6
|
class MembersLoginEventsImporter extends TableImporter {
|
|
7
7
|
static table = 'members_login_events';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { faker } = require('@faker-js/faker');
|
|
2
2
|
const { TableImporter } = require('./table-importer');
|
|
3
3
|
const { luck } = require('../utils/random');
|
|
4
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
4
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
5
5
|
|
|
6
6
|
class MembersProductsImporter extends TableImporter {
|
|
7
7
|
static table = 'members_products';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { randomDateBetween } = require('../utils/random');
|
|
3
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
3
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
4
4
|
|
|
5
5
|
class MembersStatusEventsImporter extends TableImporter {
|
|
6
6
|
static table = 'members_status_events';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const { faker } = require('@faker-js/faker');
|
|
2
2
|
const { TableImporter } = require('./table-importer');
|
|
3
|
-
const { fromDatabaseDate } = require('../../../lib/db-date');
|
|
3
|
+
const { fromDatabaseDate } = require('../../../lib/db-types/date');
|
|
4
4
|
|
|
5
5
|
class MembersStripeCustomersImporter extends TableImporter {
|
|
6
6
|
static table = 'members_stripe_customers';
|
package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js
CHANGED
|
@@ -2,7 +2,7 @@ const { faker } = require('@faker-js/faker');
|
|
|
2
2
|
const { TableImporter } = require('./table-importer');
|
|
3
3
|
const generateEvents = require('../utils/event-generator');
|
|
4
4
|
const { luck } = require('../utils/random');
|
|
5
|
-
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
|
|
5
|
+
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
|
|
6
6
|
|
|
7
7
|
class MembersStripeCustomersSubscriptionsImporter extends TableImporter {
|
|
8
8
|
static table = 'members_stripe_customers_subscriptions';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { luck, randomDateBetween } = require('../utils/random');
|
|
3
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
3
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
4
4
|
|
|
5
5
|
class MembersSubscribeEventsImporter extends TableImporter {
|
|
6
6
|
static table = 'members_subscribe_events';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { faker } = require('@faker-js/faker');
|
|
3
3
|
const { luck } = require('../utils/random');
|
|
4
|
-
const { fromDatabaseDate } = require('../../../lib/db-date');
|
|
4
|
+
const { fromDatabaseDate } = require('../../../lib/db-types/date');
|
|
5
5
|
|
|
6
6
|
class MembersSubscriptionCreatedEventsImporter extends TableImporter {
|
|
7
7
|
static table = 'members_subscription_created_events';
|
|
@@ -2,7 +2,7 @@ const { faker } = require('@faker-js/faker');
|
|
|
2
2
|
const errors = require('@tryghost/errors');
|
|
3
3
|
const { TableImporter } = require('./table-importer');
|
|
4
4
|
const { randomDateBetween } = require('../utils/random');
|
|
5
|
-
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
|
|
5
|
+
const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
|
|
6
6
|
|
|
7
7
|
class OfferRedemptionsImporter extends TableImporter {
|
|
8
8
|
static table = 'offer_redemptions';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { slugify } = require('@tryghost/string');
|
|
3
3
|
const { blogStartDate } = require('../utils/blog-info');
|
|
4
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
4
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
5
5
|
|
|
6
6
|
const offerTemplates = [
|
|
7
7
|
{
|
|
@@ -2,7 +2,7 @@ const { faker } = require('@faker-js/faker');
|
|
|
2
2
|
const { slugify } = require('@tryghost/string');
|
|
3
3
|
const { luck } = require('../utils/random');
|
|
4
4
|
const { TableImporter } = require('./table-importer');
|
|
5
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
5
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
6
6
|
|
|
7
7
|
class PostsImporter extends TableImporter {
|
|
8
8
|
static table = 'posts';
|
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.TableImporter = void 0;
|
|
7
7
|
const debug_1 = __importDefault(require("@tryghost/debug"));
|
|
8
|
-
const
|
|
8
|
+
const date_1 = require("../../../lib/db-types/date");
|
|
9
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
10
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
11
11
|
const papaparse_1 = __importDefault(require("papaparse"));
|
|
@@ -101,7 +101,7 @@ class TableImporter {
|
|
|
101
101
|
mutableObj[key] = value ? 1 : 0;
|
|
102
102
|
}
|
|
103
103
|
else if (value instanceof Date) {
|
|
104
|
-
mutableObj[key] = (0,
|
|
104
|
+
mutableObj[key] = (0, date_1.toDatabaseDate)(value);
|
|
105
105
|
}
|
|
106
106
|
else if (value === null) {
|
|
107
107
|
mutableObj[key] = '\\N';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { faker } = require('@faker-js/faker');
|
|
2
2
|
const { slugify } = require('@tryghost/string');
|
|
3
3
|
const { TableImporter } = require('./table-importer');
|
|
4
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
4
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
5
5
|
|
|
6
6
|
class TagsImporter extends TableImporter {
|
|
7
7
|
static table = 'tags';
|
|
@@ -2,7 +2,7 @@ const { TableImporter } = require('./table-importer');
|
|
|
2
2
|
const { faker } = require('@faker-js/faker');
|
|
3
3
|
const { slugify } = require('@tryghost/string');
|
|
4
4
|
const security = require('@tryghost/security');
|
|
5
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
5
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
6
6
|
|
|
7
7
|
class UsersImporter extends TableImporter {
|
|
8
8
|
static table = 'users';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const { TableImporter } = require('./table-importer');
|
|
2
2
|
const { faker } = require('@faker-js/faker');
|
|
3
|
-
const { toDatabaseDate } = require('../../../lib/db-date');
|
|
3
|
+
const { toDatabaseDate } = require('../../../lib/db-types/date');
|
|
4
4
|
|
|
5
5
|
class WebMentionsImporter extends TableImporter {
|
|
6
6
|
static table = 'mentions';
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.luck = void 0;
|
|
4
4
|
exports.randomDateBetween = randomDateBetween;
|
|
5
5
|
const faker_1 = require("@faker-js/faker");
|
|
6
|
-
const
|
|
6
|
+
const date_1 = require("../../../lib/db-types/date");
|
|
7
7
|
/**
|
|
8
8
|
* Adds another degree of randomness into some decisions
|
|
9
9
|
* @param lowerThan Only this % of people will achieve this luck
|
|
@@ -15,7 +15,7 @@ const luck = (lowerThan) => faker_1.faker.number.int({
|
|
|
15
15
|
}) <= lowerThan;
|
|
16
16
|
exports.luck = luck;
|
|
17
17
|
function randomDateBetween(start, end) {
|
|
18
|
-
const earliest = (0,
|
|
19
|
-
const latest = (0,
|
|
18
|
+
const earliest = (0, date_1.fromDatabaseDate)(start);
|
|
19
|
+
const latest = (0, date_1.fromDatabaseDate)(end);
|
|
20
20
|
return latest > earliest ? faker_1.faker.date.between({ from: earliest, to: latest }) : earliest;
|
|
21
21
|
}
|
|
@@ -18,6 +18,7 @@ const flush_logs_1 = require("../shared/flush-logs");
|
|
|
18
18
|
const moment_1 = __importDefault(require("moment"));
|
|
19
19
|
const stoppable_1 = __importDefault(require("stoppable"));
|
|
20
20
|
const node_util_1 = require("node:util");
|
|
21
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
21
22
|
const debug = (0, debug_1.default)('server');
|
|
22
23
|
const messages = {
|
|
23
24
|
cantTouchThis: "Can't touch this",
|
|
@@ -216,7 +217,7 @@ class GhostServer {
|
|
|
216
217
|
*/
|
|
217
218
|
async _stopServer() {
|
|
218
219
|
const { httpServer } = this;
|
|
219
|
-
|
|
220
|
+
(0, node_assert_1.default)(httpServer, 'httpServer must be set before stopping server');
|
|
220
221
|
const startTime = Date.now();
|
|
221
222
|
try {
|
|
222
223
|
return await (0, node_util_1.promisify)(httpServer.stop.bind(httpServer))();
|
|
@@ -280,7 +281,7 @@ class GhostServer {
|
|
|
280
281
|
const connectionInterval = setInterval(() => this.httpServer?.getConnections((_err, connections) => logging_1.default.warn(`${connections} connections currently open`)), 5000);
|
|
281
282
|
// Output a notice when the server closes
|
|
282
283
|
const { httpServer } = this;
|
|
283
|
-
|
|
284
|
+
(0, node_assert_1.default)(httpServer, 'httpServer must be set before starting test mode');
|
|
284
285
|
httpServer.on('close', function () {
|
|
285
286
|
clearInterval(connectionInterval);
|
|
286
287
|
logging_1.default.warn('Server has fully closed');
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DbBoolean = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/**
|
|
6
|
+
* A boolean column, whichever engine handed it back.
|
|
7
|
+
*
|
|
8
|
+
* SQLite has no boolean type and answers with 0 or 1; MySQL answers with a boolean. Every
|
|
9
|
+
* read normalises so nothing downstream has to know which database it is talking to, and
|
|
10
|
+
* so a falsy check never has to reason about the number zero.
|
|
11
|
+
*
|
|
12
|
+
* Encoding leaves the value alone: a boolean column takes a boolean, and takes the 0 or 1
|
|
13
|
+
* it gave us just as happily.
|
|
14
|
+
*/
|
|
15
|
+
exports.DbBoolean = zod_1.z.codec(zod_1.z.union([zod_1.z.boolean(), zod_1.z.number()]), zod_1.z.boolean(), {
|
|
16
|
+
decode: (stored) => Boolean(stored),
|
|
17
|
+
encode: (value) => value,
|
|
18
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.promisePool = void 0;
|
|
7
|
+
const errors_1 = __importDefault(require("@tryghost/errors"));
|
|
8
|
+
const validateMaxConcurrency = (maxConcurrency) => {
|
|
9
|
+
if (maxConcurrency < 1 || !Number.isSafeInteger(maxConcurrency)) {
|
|
10
|
+
throw new errors_1.default.IncorrectUsageError({
|
|
11
|
+
message: 'Concurrency must be a positive integer',
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Run promise-returning tasks with a bounded level of concurrency.
|
|
17
|
+
*/
|
|
18
|
+
const promisePool = async (tasks, maxConcurrency) => {
|
|
19
|
+
validateMaxConcurrency(maxConcurrency);
|
|
20
|
+
const taskIterator = tasks.values();
|
|
21
|
+
const concurrency = Math.min(maxConcurrency, tasks.length);
|
|
22
|
+
const workers = Array(concurrency)
|
|
23
|
+
.fill(taskIterator)
|
|
24
|
+
.map(async (workerIterator) => {
|
|
25
|
+
for (const task of workerIterator) {
|
|
26
|
+
await task();
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
await Promise.all(workers);
|
|
30
|
+
};
|
|
31
|
+
exports.promisePool = promisePool;
|