dineway 0.1.49 → 0.2.1
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/dist/activity-DUaz_w7p.mjs +79 -0
- package/dist/{activity-events-CwM7yxPW.mjs → activity-events-CJDvE2uc.mjs} +5 -113
- package/dist/actor-0QJ1Gbtf.mjs +37 -0
- package/dist/after-BfniwgIf.mjs +9 -0
- package/dist/{allowed-origins-CyGnbgBd.mjs → allowed-origins--OwHHiY8.mjs} +1 -1
- package/dist/api/route-utils.d.mts +9 -10
- package/dist/api/route-utils.mjs +16 -13
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -4
- package/dist/{api-BMIxRIEN.mjs → api-B4PHIF4V.mjs} +93 -41
- package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-tbK_sORH.mjs} +6 -2
- package/dist/{apply-D_RlTYtC.mjs → apply-DjTqq6Ae.mjs} +117 -77
- package/dist/astro/image-endpoint.d.mts +7 -0
- package/dist/astro/image-endpoint.mjs +54 -0
- package/dist/astro/index.d.mts +34 -11
- package/dist/astro/index.mjs +163 -24
- package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
- package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
- package/dist/astro/middleware/auth.d.mts +8 -18
- package/dist/astro/middleware/auth.mjs +42 -24
- package/dist/astro/middleware/redirect.mjs +13 -4
- package/dist/astro/middleware/request-context.mjs +8 -5
- package/dist/astro/middleware/seed.d.mts +1 -1
- package/dist/astro/middleware/seed.mjs +2 -2
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.mjs +389 -206
- package/dist/astro/routes/admin.astro +6 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
- package/dist/astro/routes/api/admin/briefing.mjs +21 -17
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +17 -14
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +17 -14
- package/dist/astro/routes/api/admin/bylines/index.mjs +17 -14
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +14 -12
- package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -5
- package/dist/astro/routes/api/admin/comments/bulk.mjs +11 -9
- package/dist/astro/routes/api/admin/comments/counts.mjs +6 -5
- package/dist/astro/routes/api/admin/comments/index.mjs +11 -9
- package/dist/astro/routes/api/admin/context/_id_/history.mjs +27 -24
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +27 -24
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +32 -28
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +32 -28
- package/dist/astro/routes/api/admin/context/diff.mjs +31 -27
- package/dist/astro/routes/api/admin/context/index.mjs +32 -28
- package/dist/astro/routes/api/admin/context/stale.mjs +31 -27
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +27 -24
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +31 -27
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +31 -27
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +28 -25
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -51
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -51
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -49
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -48
- package/dist/astro/routes/api/admin/plugins/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +46 -42
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +53 -48
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +46 -42
- package/dist/astro/routes/api/admin/plugins/updates.mjs +46 -42
- package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +5 -5
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +32 -63
- package/dist/astro/routes/api/admin/review-requests/index.d.mts +2 -1
- package/dist/astro/routes/api/admin/review-requests/index.mjs +58 -10
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +46 -42
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +46 -42
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
- package/dist/astro/routes/api/admin/users/index.mjs +7 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
- package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
- package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +9 -8
- package/dist/astro/routes/api/auth/mode.mjs +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
- package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
- package/dist/astro/routes/api/auth/setup-token/index.mjs +5 -5
- package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
- package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -13
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +49 -20
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +67 -32
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +16 -14
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -9
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +11 -9
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
- package/dist/astro/routes/api/dashboard.mjs +9 -8
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/health.mjs +1 -1
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +22 -10
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +18 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +85 -37
- package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -1
- package/dist/astro/routes/api/import/wordpress/media.mjs +20 -14
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +36 -32
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +17 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +121 -100
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +24 -12
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +55 -2
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +284 -55
- package/dist/astro/routes/api/manifest.mjs +14 -5
- package/dist/astro/routes/api/mcp.mjs +753 -170
- package/dist/astro/routes/api/media/_id_/confirm.mjs +38 -10
- package/dist/astro/routes/api/media/_id_.mjs +11 -7
- package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
- package/dist/astro/routes/api/media/providers/index.mjs +2 -2
- package/dist/astro/routes/api/media/upload-url.mjs +11 -10
- package/dist/astro/routes/api/media.mjs +28 -35
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +32 -28
- package/dist/astro/routes/api/menus/_name_/items.mjs +32 -28
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +32 -28
- package/dist/astro/routes/api/menus/_name_/translations.mjs +32 -28
- package/dist/astro/routes/api/menus/_name_.mjs +32 -28
- package/dist/astro/routes/api/menus/index.mjs +32 -28
- package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
- package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
- package/dist/astro/routes/api/oauth/register.mjs +4 -4
- package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
- package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
- package/dist/astro/routes/api/oauth/token.mjs +6 -6
- package/dist/astro/routes/api/openapi.json.mjs +4 -3
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +46 -31
- package/dist/astro/routes/api/redirects/404s/index.mjs +11 -10
- package/dist/astro/routes/api/redirects/404s/summary.mjs +11 -10
- package/dist/astro/routes/api/redirects/_id_.mjs +33 -29
- package/dist/astro/routes/api/redirects/index.mjs +33 -29
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +48 -43
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +48 -43
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +48 -43
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +48 -43
- package/dist/astro/routes/api/schema/collections/index.mjs +48 -43
- package/dist/astro/routes/api/schema/index.mjs +14 -15
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +46 -42
- package/dist/astro/routes/api/schema/orphans/index.mjs +46 -42
- package/dist/astro/routes/api/search/enable.mjs +11 -10
- package/dist/astro/routes/api/search/index.mjs +10 -9
- package/dist/astro/routes/api/search/rebuild.mjs +11 -10
- package/dist/astro/routes/api/search/stats.mjs +6 -6
- package/dist/astro/routes/api/search/suggest.mjs +10 -9
- package/dist/astro/routes/api/sections/_slug_.mjs +32 -28
- package/dist/astro/routes/api/sections/index.mjs +32 -28
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +32 -28
- package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
- package/dist/astro/routes/api/setup/admin.mjs +12 -11
- package/dist/astro/routes/api/setup/dev-bypass.mjs +31 -25
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +29 -25
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +8 -7
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +35 -31
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +35 -31
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +35 -31
- package/dist/astro/routes/api/taxonomies/index.mjs +35 -31
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +31 -27
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +32 -28
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +32 -28
- package/dist/astro/routes/api/widget-areas/_name_.mjs +29 -26
- package/dist/astro/routes/api/widget-areas/index.mjs +32 -28
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +8 -7
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +23 -14
- package/dist/astro/routes/sitemap.xml.mjs +9 -8
- package/dist/astro/session-driver.d.mts +1 -1
- package/dist/astro/session-driver.mjs +2 -2
- package/dist/astro/types.d.mts +22 -13
- package/dist/{audit-BeNsSyfU.mjs → audit-B2pRxZ20.mjs} +1 -1
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-D71jourk.mjs} +1 -1
- package/dist/{authorize-BLO0m7fW.mjs → authorize-ZXPGPwKn.mjs} +1 -1
- package/dist/{briefing-CkTee1ex.mjs → briefing-0rf-su3-.mjs} +90 -28
- package/dist/{briefing-DJX6irto.mjs → briefing-kRhegBoF.mjs} +2 -1
- package/dist/bundle-CEcdUa1s.mjs +602 -0
- package/dist/{byline-BVC1lV6G.mjs → byline-7xR185Ly.mjs} +30 -62
- package/dist/{byline-fields-Cj39WhXC.mjs → byline-fields-BKzA0fJU.mjs} +1 -1
- package/dist/{byline-fields-uJlygdzM.d.mts → byline-fields-Ckeqd1OY.d.mts} +88 -35
- package/dist/{byline-fields-cNrLJVRs.mjs → byline-fields-WN7RQT4q.mjs} +10 -4
- package/dist/{byline-registry-4v6tXMNX.mjs → byline-registry-Ba54M74c.mjs} +2 -2
- package/dist/{bylines-LN9XISRo.mjs → bylines-C-EL6dh3.mjs} +9 -3
- package/dist/{bylines-DwokOFj6.mjs → bylines-CmZFCMr0.mjs} +5 -5
- package/dist/{cache-Bac05gBd.mjs → cache-DkVCKGio.mjs} +2 -2
- package/dist/{chunks-CuUt7K50.mjs → chunks-ChGNDY8r.mjs} +1 -1
- package/dist/cli/index.d.mts +29 -1
- package/dist/cli/index.mjs +1466 -1763
- package/dist/cli/plugin-kit.d.mts +75 -0
- package/dist/cli/plugin-kit.mjs +4 -0
- package/dist/client/external-auth-headers.d.mts +1 -1
- package/dist/client/index.d.mts +27 -52
- package/dist/client/index.mjs +34 -6
- package/dist/client-factory-BDD9azPJ.mjs +233 -0
- package/dist/{comment-Beue8-15.mjs → comment-DFALgsJD.mjs} +13 -3
- package/dist/comment-reaction-C37bf99u.mjs +58 -0
- package/dist/{comments-DcjFIfqX.mjs → comments-B3NwDBxl.mjs} +1 -1
- package/dist/{content-CBxYGWfL.mjs → content-DJcAYFhz.mjs} +51 -34
- package/dist/content-refresh-B4ZCmxgd.mjs +1576 -0
- package/dist/{context-Df1xVYyr.mjs → context-DnpXcp6Y.mjs} +2 -2
- package/dist/{context-CQVNZaR8.mjs → context-fSCYLL3c.mjs} +125 -53
- package/dist/{context-route-helpers-B9wj8Rmh.mjs → context-route-helpers-CI8XzcsK.mjs} +2 -1
- package/dist/{cron-DxCAU_Sn.mjs → cron-B1SL_lsb.mjs} +7 -3
- package/dist/{dashboard-B7ZUNuyF.mjs → dashboard-D0nj5oWg.mjs} +4 -4
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{device-flow-BZVGftqi.mjs → device-flow-BJe6VEhP.mjs} +5 -5
- package/dist/{placeholder-d54Qr_7n.mjs → enrich-Ck9tfMqe.mjs} +36 -9
- package/dist/{error-DCSuUAZW.mjs → error-CSVaQNZy.mjs} +5 -0
- package/dist/{experimental-workflows-CSMffP6q.mjs → experimental-workflows-GVhUgzEs.mjs} +1 -1
- package/dist/field-defs-cache-DL-T2XVS.mjs +49 -0
- package/dist/forgeway-seo-client-G5ddhVHd.mjs +456 -0
- package/dist/{fts-manager-B5l_qwrA.mjs → fts-manager-ewTGohf4.mjs} +1 -1
- package/dist/{hitl-requests-7NlzVeUA.mjs → hitl-requests-DEFj8e6u.mjs} +2 -2
- package/dist/{hitl-route-helpers-k---_H3-.mjs → hitl-route-helpers-C23JHaWz.mjs} +5 -4
- package/dist/import-CXXL5pip.mjs +1354 -0
- package/dist/index-DcnOCD1e.d.mts +375 -0
- package/dist/index.d.mts +15 -16
- package/dist/index.mjs +85 -70
- package/dist/{jsonld-DZ67souc.d.mts → jsonld-DzKbhRZ4.d.mts} +8 -4
- package/dist/{load-D9OiGr2m.mjs → load-CFtJRT3c.mjs} +1 -1
- package/dist/{loader--GOYux8M.mjs → loader-aWkkc1_o.mjs} +117 -31
- package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-uA6pRFXi.mjs} +38 -1
- package/dist/mcp-reviewed-executor-Dn52L_yY.mjs +558 -0
- package/dist/media/image-endpoint.d.mts +32 -0
- package/dist/media/image-endpoint.mjs +111 -0
- package/dist/media/index.d.mts +27 -2
- package/dist/media/index.mjs +5 -3
- package/dist/media/local-runtime.d.mts +15 -11
- package/dist/media/local-runtime.mjs +9 -7
- package/dist/{media-CbKyYukG.mjs → media-CVMOoywq.mjs} +3 -1
- package/dist/{media-allowlist-BYxJIcTO.mjs → media-allowlist-zDNJmXCo.mjs} +1 -1
- package/dist/media-url-BdoLPvg8.mjs +20 -0
- package/dist/{menus-C7F0sCrC.mjs → menus-CCG2z5um.mjs} +80 -15
- package/dist/{menus-BZbXf-ej.mjs → menus-CmyIkRG5.mjs} +19 -5
- package/dist/{normalize-ByemhhfW.mjs → normalize-Cyt7JdF7.mjs} +8 -1
- package/dist/{oauth-authorization-DF-LCsIA.mjs → oauth-authorization-B9H7X85L.mjs} +5 -5
- package/dist/{oauth-clients-Du-V0fEm.mjs → oauth-clients-Dwl32-Uj.mjs} +2 -2
- package/dist/object-cache/memory.d.mts +14 -0
- package/dist/object-cache/memory.mjs +55 -0
- package/dist/object-cache-D51qOseS.mjs +419 -0
- package/dist/output-DhBe5_Pi.mjs +68 -0
- package/dist/page/index.d.mts +10 -3
- package/dist/page/index.mjs +2 -2
- package/dist/{parse-CneSgl7-.mjs → parse-i15EFSAE.mjs} +1 -1
- package/dist/{parser-DxfsARXL.mjs → parser-06LLLL4E.mjs} +151 -9
- package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-DkWkXfDI.d.mts} +12 -4
- package/dist/plugin-utils.d.mts +8 -9
- package/dist/plugins/adapt-sandbox-entry.d.mts +8 -9
- package/dist/plugins/adapt-sandbox-entry.mjs +13 -2
- package/dist/{plugins-DzfqRREq.mjs → plugins-CPA2PtfY.mjs} +919 -66
- package/dist/{transport-LSdZVXHF.mjs → portable-text-BASHceim.mjs} +1 -134
- package/dist/portable-text-E79LyjGo.d.mts +45 -0
- package/dist/{preview-C-3YTX2U.mjs → preview-BjedZm8G.mjs} +4 -3
- package/dist/process-cache-CCDgti7j.mjs +106 -0
- package/dist/project-env-DKibmuP8.mjs +95 -0
- package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-DC2JdWeO.d.mts} +1 -1
- package/dist/{public-url-B4xV4rGa.d.mts → public-url-DQJCnYi9.d.mts} +1 -1
- package/dist/publication-authorization-RKiHXKtq.mjs +985 -0
- package/dist/{query-CZ3TH_Uu.mjs → query-C2U5u5_p.mjs} +11 -6
- package/dist/{query-Ds0EnMFX.mjs → query-DEv5x6yB.mjs} +281 -76
- package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-DglsAJSw.mjs} +2 -2
- package/dist/{redirect-CEACczxo.mjs → redirect-ubhEqQCQ.mjs} +2 -2
- package/dist/{redirects-ocRJmQHP.mjs → redirects-Bhpm8bRe.mjs} +35 -19
- package/dist/{redirects-DYj1yPxs.mjs → redirects-xs2yahLq.mjs} +47 -24
- package/dist/{registry-D7HACema.mjs → registry-BYYyb2tF.mjs} +148 -81
- package/dist/request-context.d.mts +2 -0
- package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CFe1tW2M.mjs} +1 -1
- package/dist/review-payload-BysRWpxS.mjs +111 -0
- package/dist/{review-requests-BW2NxY-l.mjs → review-requests-CTWGnWUt.mjs} +1 -1
- package/dist/review-requests-D42VEP1l.mjs +142 -0
- package/dist/review-route-helpers-C31vO6SI.mjs +41 -0
- package/dist/runner-BgmttQmD.mjs +7444 -0
- package/dist/{runner-09sTqtv0.d.mts → runner-D6hzs8L9.d.mts} +1 -1
- package/dist/runtime.d.mts +9 -10
- package/dist/runtime.mjs +3 -3
- package/dist/schema-DUtnZxjZ.mjs +8 -0
- package/dist/{search-Gdrqj582.mjs → search-DUKgZUlm.mjs} +5 -3
- package/dist/{secrets-CeGpBFV2.mjs → secrets-ZV5rd8yV.mjs} +14 -11
- package/dist/{sections-BOjU13Y-.mjs → sections-DvFgsnda.mjs} +2 -2
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +21 -18
- package/dist/seo/index.d.mts +1 -1
- package/dist/seo/index.mjs +3 -12
- package/dist/{seo-5lJOtB5J.mjs → seo-BLszyJxd.mjs} +22 -4
- package/dist/{seo-CLj8lS7Q.mjs → seo-BU8MLCS9.mjs} +5 -2
- package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-GnCuL1ML.mjs} +11 -3
- package/dist/{service-jGlhrICs.mjs → service-FL3fB0Rx.mjs} +2 -2
- package/dist/session-user-Ct6GBLvn.mjs +22 -0
- package/dist/{settings-CUXOxzsT.mjs → settings-BECcAIRH.mjs} +28 -55
- package/dist/{settings-DlBsT2VS.mjs → settings-EzADu-dd.mjs} +2 -2
- package/dist/{setup-complete-BRrdPYjZ.mjs → setup-complete-Da0axZEE.mjs} +1 -1
- package/dist/{site-activity-DONFrMBJ.mjs → site-activity-h8smOlYI.mjs} +1 -1
- package/dist/{site-context-C8Az_P_I.mjs → site-context-B8T1kpUP.mjs} +337 -530
- package/dist/{site-url-DIMD68go.mjs → site-url-DJEid0ml.mjs} +1 -1
- package/dist/stable-hash-DshcXvRE.mjs +19 -0
- package/dist/status-NqWOSFAD.mjs +21 -0
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/{taxonomies-D9Sw4wWM.mjs → taxonomies-BiM9NtgW.mjs} +36 -29
- package/dist/taxonomies-DSnY5nOa.mjs +443 -0
- package/dist/{taxonomy-B169Nm6B.mjs → taxonomy-0k_vRVsD.mjs} +44 -9
- package/dist/transport-C46KHLMP.mjs +134 -0
- package/dist/types-A8fPOJnl.mjs +69 -0
- package/dist/types-BLQCz46p.d.mts +118 -0
- package/dist/{types-CwawBUTa.d.mts → types-B_FlxIIl.d.mts} +4 -1
- package/dist/{types-CSgR9nQB.mjs → types-ChxYDRvx.mjs} +1 -1
- package/dist/{types-GaCtZ1k9.d.mts → types-Cw0PeCT_.d.mts} +18 -0
- package/dist/types-DuQn1G7-.d.mts +2973 -0
- package/dist/{runtime-C4-2lSFg.d.mts → types-DwoUifGE.d.mts} +5668 -3000
- package/dist/{types-DRIKLmJI.d.mts → types-opjX_kz6.d.mts} +17 -2
- package/dist/ui/server-runtime.d.mts +13 -15
- package/dist/ui/server-runtime.mjs +24 -20
- package/dist/url-guoXQQcV.mjs +33 -0
- package/dist/{user-DTLoZs16.mjs → user-BH-n01y3.mjs} +2 -2
- package/dist/{utils-B8hBJ9Oz.mjs → utils-D1SrKGtP.mjs} +129 -7
- package/dist/{validate-DzjCdy6v.d.mts → validate-CbVFoJgc.d.mts} +65 -8
- package/dist/{validate-DWmPO6oj.mjs → validate-D1HL-oLR.mjs} +11 -6
- package/dist/version-C3iVRuaF.mjs +6 -0
- package/dist/{widgets-BpJ8EpPd.mjs → widgets-BZrLrNgS.mjs} +46 -43
- package/dist/{wordpress-slugs-DHNR9LpG.mjs → wordpress-slugs-C3PWcowq.mjs} +1 -1
- package/dist/{zod-generator-K91-g665.mjs → zod-generator-C7AsLpSB.mjs} +42 -14
- package/package.json +38 -8
- package/src/components/Block.astro +50 -0
- package/src/components/Comments.astro +143 -1
- package/src/components/DinewayHead.astro +19 -2
- package/src/components/DinewayImage.astro +66 -33
- package/src/components/DinewayMedia.astro +1 -2
- package/src/components/Image.astro +85 -40
- package/src/components/InlinePortableTextEditor.tsx +12 -2
- package/src/components/JsonLdScript.astro +9 -0
- package/src/components/LiveSearch.astro +40 -4
- package/src/components/index.ts +4 -0
- package/src/components/live-search-routing.ts +30 -0
- package/src/components/portable-text-text-align.ts +15 -0
- package/src/ui.ts +2 -0
- package/dist/entity-aliases-4y93Yjuc.mjs +0 -51
- package/dist/import-4YBXbDkI.mjs +0 -684
- package/dist/index-CZiWCQDp.d.mts +0 -227
- package/dist/review-requests-Qum4713s.mjs +0 -79
- package/dist/runner-DzIpHGND.mjs +0 -2836
- package/dist/schema-Bsi-VpYv.mjs +0 -8
- package/dist/taxonomies-CZ-_DitR.mjs +0 -327
- package/dist/types-CuJOqHfM.d.mts +0 -758
- package/dist/types-DSPGWjxO.d.mts +0 -1247
- package/dist/types-nP9vGUFq.d.mts +0 -56
- package/dist/version-C4gfn0PJ.mjs +0 -6
- /package/dist/{adapters-OQCImOL7.d.mts → adapters-BiRymx02.d.mts} +0 -0
- /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-Ypaly90d.mjs} +0 -0
- /package/dist/{challenge-store-DFxX0_15.mjs → challenge-store-D5pSY2S1.mjs} +0 -0
- /package/dist/{components--pg6zBvu.mjs → components-DImzlLhb.mjs} +0 -0
- /package/dist/{context-types-r8oFvyOq.mjs → context-types-eBuMDAg-.mjs} +0 -0
- /package/dist/{default-B6iaLvP7.mjs → default-D4Vygcy_.mjs} +0 -0
- /package/dist/{email-console-BOVqIYpB.mjs → email-console-Bp0r68iF.mjs} +0 -0
- /package/dist/{escape-BDgouFFY.mjs → escape-DN4Qmjsl.mjs} +0 -0
- /package/dist/{hash-BPmX6P8I.mjs → hash-mxxx2oPW.mjs} +0 -0
- /package/dist/{mime-CbKsKDCB.mjs → mime-C0vOHFm7.mjs} +0 -0
- /package/dist/{mode-CZqCF9dZ.mjs → mode-C8yZnIlR.mjs} +0 -0
- /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CndT35iw.mjs} +0 -0
- /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-CMehAaKs.mjs} +0 -0
- /package/dist/{options-LsPjZlqD.mjs → options-DQPTH5n0.mjs} +0 -0
- /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-NYukYGed.mjs} +0 -0
- /package/dist/{patterns-DKAX6oqN.mjs → patterns-CoqlXUvk.mjs} +0 -0
- /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-BtfrrzfD.mjs} +0 -0
- /package/dist/{public-url-B_m9IwdV.mjs → public-url-Cp6hyjVR.mjs} +0 -0
- /package/dist/{redirect-BjIBtDWY.mjs → redirect-DrbEmU9a.mjs} +0 -0
- /package/dist/{request-cache-ho99schz.mjs → request-cache-CBFjCwSt.mjs} +0 -0
- /package/dist/{resolve-DTuDyYKs.mjs → resolve-DE71WcL9.mjs} +0 -0
- /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-BtkKnvxQ.mjs} +0 -0
- /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-Ctzfyyp-.mjs} +0 -0
- /package/dist/{slugify-BqebcqBg.mjs → slugify-KSsVD_D3.mjs} +0 -0
- /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-FJqwQzj4.mjs} +0 -0
- /package/dist/{tokens-SLmgowfd.mjs → tokens-BDQU29Vd.mjs} +0 -0
- /package/dist/{transaction-CFLhEOuH.mjs → transaction-0LEAAy8R.mjs} +0 -0
- /package/dist/{transport-BnsNxh2l.d.mts → transport-D9pKAzFP.d.mts} +0 -0
- /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-Dm7Mxvt6.mjs} +0 -0
- /package/dist/{types-CJ8DkL0q.mjs → types-B7TDDFMG.mjs} +0 -0
- /package/dist/{types-Dryvv7LH.d.mts → types-g0zMtraY.d.mts} +0 -0
- /package/dist/{types-Cg276-3z.mjs → types-mVVgRPaU.mjs} +0 -0
- /package/dist/{types-DZpT-PnG.d.mts → types-wFu80FrO.d.mts} +0 -0
- /package/dist/{url-w7Mp5qAD.mjs → url-EMAguGVk.mjs} +0 -0
|
@@ -282,137 +282,4 @@ function convertDataForWrite(data, fields) {
|
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
//#endregion
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Transport layer for the Dineway client.
|
|
288
|
-
*
|
|
289
|
-
* Implements a composable interceptor pipeline that modifies requests
|
|
290
|
-
* and responses. The client calls `transport.fetch(request)` — everything
|
|
291
|
-
* else (auth, CSRF, retry) is handled by interceptors.
|
|
292
|
-
*/
|
|
293
|
-
const COOKIE_NAME_VALUE_PATTERN = /^([^;]+)/;
|
|
294
|
-
function baseFetch(request) {
|
|
295
|
-
return globalThis.fetch(request);
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Creates a fetch function that runs requests through an interceptor pipeline.
|
|
299
|
-
*/
|
|
300
|
-
function createTransport(options = {}) {
|
|
301
|
-
const interceptors = options.interceptors ?? [];
|
|
302
|
-
let chain = baseFetch;
|
|
303
|
-
for (let i = interceptors.length - 1; i >= 0; i--) {
|
|
304
|
-
const interceptor = interceptors[i];
|
|
305
|
-
const next = chain;
|
|
306
|
-
chain = (req) => interceptor(req, next);
|
|
307
|
-
}
|
|
308
|
-
return { fetch: chain };
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Adds X-Dineway-Request: 1 and Origin headers to mutation requests
|
|
312
|
-
* (POST, PUT, DELETE). The custom header satisfies Dineway's CSRF check;
|
|
313
|
-
* the Origin header satisfies Astro's built-in origin verification which
|
|
314
|
-
* rejects server-side POST requests that lack a matching Origin.
|
|
315
|
-
*/
|
|
316
|
-
function csrfInterceptor() {
|
|
317
|
-
const MUTATION_METHODS = new Set([
|
|
318
|
-
"POST",
|
|
319
|
-
"PUT",
|
|
320
|
-
"DELETE",
|
|
321
|
-
"PATCH"
|
|
322
|
-
]);
|
|
323
|
-
return (request, next) => {
|
|
324
|
-
if (MUTATION_METHODS.has(request.method)) {
|
|
325
|
-
const headers = new Headers(request.headers);
|
|
326
|
-
headers.set("X-Dineway-Request", "1");
|
|
327
|
-
if (!headers.has("Origin")) {
|
|
328
|
-
const url = new URL(request.url);
|
|
329
|
-
headers.set("Origin", url.origin);
|
|
330
|
-
}
|
|
331
|
-
return next(new Request(request, { headers }));
|
|
332
|
-
}
|
|
333
|
-
return next(request);
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Adds Authorization: Bearer header from a static token.
|
|
338
|
-
*/
|
|
339
|
-
function tokenInterceptor(token) {
|
|
340
|
-
return (request, next) => {
|
|
341
|
-
const headers = new Headers(request.headers);
|
|
342
|
-
headers.set("Authorization", `Bearer ${token}`);
|
|
343
|
-
return next(new Request(request, { headers }));
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Dev bypass interceptor. Calls the dev-bypass endpoint on first request
|
|
348
|
-
* to establish a session, then forwards the session cookie on subsequent
|
|
349
|
-
* requests.
|
|
350
|
-
*/
|
|
351
|
-
function devBypassInterceptor(baseUrl) {
|
|
352
|
-
let sessionCookie = null;
|
|
353
|
-
let initializing = null;
|
|
354
|
-
async function init() {
|
|
355
|
-
const bypassUrl = new URL("/_dineway/api/auth/dev-bypass", baseUrl);
|
|
356
|
-
const res = await globalThis.fetch(bypassUrl, { redirect: "manual" });
|
|
357
|
-
const setCookie = res.headers.get("set-cookie");
|
|
358
|
-
if (setCookie) {
|
|
359
|
-
const match = setCookie.match(COOKIE_NAME_VALUE_PATTERN);
|
|
360
|
-
if (match) sessionCookie = match[1];
|
|
361
|
-
}
|
|
362
|
-
if (res.body) await res.text().catch(() => {});
|
|
363
|
-
}
|
|
364
|
-
return async (request, next) => {
|
|
365
|
-
if (!sessionCookie) {
|
|
366
|
-
if (!initializing) initializing = init();
|
|
367
|
-
await initializing;
|
|
368
|
-
}
|
|
369
|
-
if (sessionCookie) {
|
|
370
|
-
const headers = new Headers(request.headers);
|
|
371
|
-
const existing = headers.get("cookie");
|
|
372
|
-
headers.set("cookie", existing ? `${existing}; ${sessionCookie}` : sessionCookie);
|
|
373
|
-
return next(new Request(request, { headers }));
|
|
374
|
-
}
|
|
375
|
-
return next(request);
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* Auto-refreshes expired OAuth tokens on 401 responses.
|
|
380
|
-
* Requires a refresh token and the token endpoint URL.
|
|
381
|
-
*/
|
|
382
|
-
function refreshInterceptor(options) {
|
|
383
|
-
let refreshing = null;
|
|
384
|
-
async function refresh() {
|
|
385
|
-
const res = await globalThis.fetch(options.tokenEndpoint, {
|
|
386
|
-
method: "POST",
|
|
387
|
-
headers: { "Content-Type": "application/json" },
|
|
388
|
-
body: JSON.stringify({
|
|
389
|
-
grant_type: "refresh_token",
|
|
390
|
-
refresh_token: options.refreshToken
|
|
391
|
-
})
|
|
392
|
-
});
|
|
393
|
-
if (!res.ok) return null;
|
|
394
|
-
const json = await res.json();
|
|
395
|
-
const tokenData = json.data && typeof json.data === "object" && "access_token" in json.data ? json.data : json;
|
|
396
|
-
const expiresAt = tokenData.expires_in ? new Date(Date.now() + tokenData.expires_in * 1e3).toISOString() : new Date(Date.now() + 36e5).toISOString();
|
|
397
|
-
if (options.onTokenRefreshed) options.onTokenRefreshed(tokenData.access_token, tokenData.refresh_token ?? options.refreshToken, expiresAt);
|
|
398
|
-
return tokenData.access_token;
|
|
399
|
-
}
|
|
400
|
-
return async (request, next) => {
|
|
401
|
-
const response = await next(request);
|
|
402
|
-
if (response.status === 401) {
|
|
403
|
-
if (!refreshing) refreshing = refresh().finally(() => {
|
|
404
|
-
refreshing = null;
|
|
405
|
-
});
|
|
406
|
-
const newToken = await refreshing;
|
|
407
|
-
if (newToken) {
|
|
408
|
-
const headers = new Headers(request.headers);
|
|
409
|
-
headers.set("Authorization", `Bearer ${newToken}`);
|
|
410
|
-
return next(new Request(request, { headers }));
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
return response;
|
|
414
|
-
};
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
//#endregion
|
|
418
|
-
export { tokenInterceptor as a, markdownToPortableText as c, refreshInterceptor as i, portableTextToMarkdown as l, csrfInterceptor as n, convertDataForRead as o, devBypassInterceptor as r, convertDataForWrite as s, createTransport as t };
|
|
285
|
+
export { portableTextToMarkdown as i, convertDataForWrite as n, markdownToPortableText as r, convertDataForRead as t };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//#region src/client/portable-text.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Portable Text <-> Markdown conversion layer.
|
|
4
|
+
*
|
|
5
|
+
* Three tiers of block handling:
|
|
6
|
+
* Tier 1: Standard PT blocks <-> standard Markdown (headings, paragraphs, lists, etc.)
|
|
7
|
+
* Tier 2: Dineway custom blocks <-> Markdown directives (future)
|
|
8
|
+
* Tier 3: Unknown blocks <-> opaque HTML comment fences (preserved, not editable)
|
|
9
|
+
*/
|
|
10
|
+
/** Minimal Portable Text block shape */
|
|
11
|
+
interface PortableTextBlock {
|
|
12
|
+
_type: string;
|
|
13
|
+
_key?: string;
|
|
14
|
+
style?: string;
|
|
15
|
+
level?: number;
|
|
16
|
+
listItem?: string;
|
|
17
|
+
markDefs?: MarkDef[];
|
|
18
|
+
children?: PortableTextSpan[];
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
interface PortableTextSpan {
|
|
22
|
+
_type: string;
|
|
23
|
+
_key?: string;
|
|
24
|
+
text?: string;
|
|
25
|
+
marks?: string[];
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
interface MarkDef {
|
|
29
|
+
_key: string;
|
|
30
|
+
_type: string;
|
|
31
|
+
href?: string;
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Convert Portable Text blocks to Markdown.
|
|
36
|
+
* Unknown block types are serialized as opaque fences.
|
|
37
|
+
*/
|
|
38
|
+
declare function portableTextToMarkdown(blocks: PortableTextBlock[]): string;
|
|
39
|
+
/**
|
|
40
|
+
* Convert Markdown to Portable Text blocks.
|
|
41
|
+
* Opaque fences (<!--ec:block ... -->) are deserialized and spliced back in.
|
|
42
|
+
*/
|
|
43
|
+
declare function markdownToPortableText(markdown: string): PortableTextBlock[];
|
|
44
|
+
//#endregion
|
|
45
|
+
export { markdownToPortableText as n, portableTextToMarkdown as r, PortableTextBlock as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as loadBetterSqlite3, t as createDatabase } from "./connection-CiJWiWya.mjs";
|
|
2
2
|
import { runWithContext } from "./request-context.mjs";
|
|
3
|
-
import { a as verifyPreviewSignature, t as buildPreviewSignatureHeader } from "./sidecar-client-
|
|
4
|
-
import { t as generatePreviewToken } from "./tokens-
|
|
3
|
+
import { a as verifyPreviewSignature, t as buildPreviewSignatureHeader } from "./sidecar-client-Ctzfyyp-.mjs";
|
|
4
|
+
import { t as generatePreviewToken } from "./tokens-BDQU29Vd.mjs";
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
import { sql } from "kysely";
|
|
7
7
|
import { ulid } from "ulidx";
|
|
@@ -667,7 +667,8 @@ function createFilePreviewMiddleware(config) {
|
|
|
667
667
|
try {
|
|
668
668
|
return await runWithContext({
|
|
669
669
|
editMode: false,
|
|
670
|
-
db: session.db
|
|
670
|
+
db: session.db,
|
|
671
|
+
dbIsIsolated: true
|
|
671
672
|
}, async () => {
|
|
672
673
|
return injectPreviewToolbar(await next(), {
|
|
673
674
|
generatedAt: snapshotGeneratedAt,
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
//#region src/utils/init-lock.ts
|
|
2
|
+
const DEFAULT_DEADLINE_MS = 15e3;
|
|
3
|
+
const DEFAULT_POLL_MS = 50;
|
|
4
|
+
const MAX_WAIT_HEADROOM_MS = 15e3;
|
|
5
|
+
function sleep(ms) {
|
|
6
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
+
}
|
|
8
|
+
function createInitLock() {
|
|
9
|
+
return {
|
|
10
|
+
ownerStartedAt: null,
|
|
11
|
+
generation: 0
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
async function initWithLock(lock, getCached, init, options) {
|
|
15
|
+
const deadlineMs = options?.deadlineMs ?? DEFAULT_DEADLINE_MS;
|
|
16
|
+
const pollMs = options?.pollMs ?? DEFAULT_POLL_MS;
|
|
17
|
+
const maxWaitMs = options?.maxWaitMs ?? deadlineMs + MAX_WAIT_HEADROOM_MS;
|
|
18
|
+
const waitStart = Date.now();
|
|
19
|
+
for (;;) {
|
|
20
|
+
const cached = getCached();
|
|
21
|
+
if (cached !== null && cached !== void 0) return cached;
|
|
22
|
+
const ownerStartedAt = lock.ownerStartedAt;
|
|
23
|
+
if (ownerStartedAt === null || Date.now() - ownerStartedAt > deadlineMs) {
|
|
24
|
+
lock.generation += 1;
|
|
25
|
+
const claim = lock.generation;
|
|
26
|
+
lock.ownerStartedAt = Date.now();
|
|
27
|
+
try {
|
|
28
|
+
const isCurrentClaim = () => lock.generation === claim;
|
|
29
|
+
const initPromise = Promise.resolve().then(() => init(isCurrentClaim));
|
|
30
|
+
options?.anchor?.(initPromise.then(() => void 0, () => void 0));
|
|
31
|
+
return await initPromise;
|
|
32
|
+
} finally {
|
|
33
|
+
if (lock.generation === claim) lock.ownerStartedAt = null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (Date.now() - waitStart > maxWaitMs) throw new Error(`initWithLock: timed out after ${maxWaitMs}ms waiting for initialization`);
|
|
37
|
+
await sleep(pollMs);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/utils/process-cache.ts
|
|
43
|
+
/**
|
|
44
|
+
* Process-lifetime async value cache with single-flight and stuck-owner recovery.
|
|
45
|
+
*
|
|
46
|
+
* Use this for "compute once per process, read on many requests" caches. It
|
|
47
|
+
* stores resolved values, never shared in-flight promises. One caller owns the
|
|
48
|
+
* fetch under `initWithLock`; other callers poll for the resolved value and can
|
|
49
|
+
* reclaim a stale owner after a deadline.
|
|
50
|
+
*/
|
|
51
|
+
const PROCESS_CACHE_EMPTY = Symbol("dineway.process-cache.empty");
|
|
52
|
+
const RECLAIM_HEADROOM_MS = 5e3;
|
|
53
|
+
function createProcessCache() {
|
|
54
|
+
return {
|
|
55
|
+
value: PROCESS_CACHE_EMPTY,
|
|
56
|
+
hasValue: false,
|
|
57
|
+
version: 0,
|
|
58
|
+
valueVersion: -1,
|
|
59
|
+
lock: createInitLock()
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function invalidateProcessCache(cache) {
|
|
63
|
+
cache.version++;
|
|
64
|
+
cache.hasValue = false;
|
|
65
|
+
cache.value = PROCESS_CACHE_EMPTY;
|
|
66
|
+
cache.valueVersion = -1;
|
|
67
|
+
cache.lock.ownerStartedAt = null;
|
|
68
|
+
}
|
|
69
|
+
function withTimeout(promise, ms) {
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
const timer = setTimeout(() => {
|
|
72
|
+
reject(/* @__PURE__ */ new Error(`processCachedAsync: owner fetch exceeded ${ms}ms`));
|
|
73
|
+
}, ms);
|
|
74
|
+
promise.then(resolve, reject).finally(() => {
|
|
75
|
+
clearTimeout(timer);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function processCachedAsync(cache, fetch, options = {}) {
|
|
80
|
+
const versionAtCall = cache.version;
|
|
81
|
+
const ownerTimeoutMs = options.ownerTimeoutMs !== void 0 && Number.isFinite(options.ownerTimeoutMs) && options.ownerTimeoutMs > 0 ? options.ownerTimeoutMs : void 0;
|
|
82
|
+
const deadlineMs = ownerTimeoutMs === void 0 ? options.deadlineMs : Math.max(options.deadlineMs ?? 0, ownerTimeoutMs + RECLAIM_HEADROOM_MS);
|
|
83
|
+
return initWithLock(cache.lock, () => {
|
|
84
|
+
const cachedValue = cache.value;
|
|
85
|
+
return cache.hasValue && cache.valueVersion === versionAtCall && cachedValue !== PROCESS_CACHE_EMPTY ? { value: cachedValue } : null;
|
|
86
|
+
}, (isCurrentClaim) => {
|
|
87
|
+
const real = (async () => {
|
|
88
|
+
const value = await fetch();
|
|
89
|
+
if (isCurrentClaim()) {
|
|
90
|
+
cache.value = value;
|
|
91
|
+
cache.hasValue = true;
|
|
92
|
+
cache.valueVersion = versionAtCall;
|
|
93
|
+
}
|
|
94
|
+
return { value };
|
|
95
|
+
})();
|
|
96
|
+
options.anchor?.(real.then(() => void 0, () => void 0));
|
|
97
|
+
return ownerTimeoutMs === void 0 ? real : withTimeout(real, ownerTimeoutMs);
|
|
98
|
+
}, {
|
|
99
|
+
deadlineMs,
|
|
100
|
+
pollMs: options.pollMs,
|
|
101
|
+
maxWaitMs: options.maxWaitMs
|
|
102
|
+
}).then((box) => box.value);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
//#endregion
|
|
106
|
+
export { initWithLock as a, createInitLock as i, invalidateProcessCache as n, processCachedAsync as r, createProcessCache as t };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
4
|
+
|
|
5
|
+
//#region src/cli/project-env.ts
|
|
6
|
+
const DEFAULT_DINEWAY_URL = "http://localhost:4321";
|
|
7
|
+
const ENV_KEY_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
8
|
+
const LINE_SPLIT_PATTERN = /\r?\n/;
|
|
9
|
+
const DINEWAY_LOCAL_STATE_GITIGNORE_COMMENT = "# Dineway local state";
|
|
10
|
+
const DINEWAY_LOCAL_STATE_GITIGNORE_ENTRIES = [
|
|
11
|
+
".dineway/deploy.json",
|
|
12
|
+
".dineway/forgeway.json",
|
|
13
|
+
".dineway/types.ts",
|
|
14
|
+
".dineway/schema.json",
|
|
15
|
+
".dineway/uploads/"
|
|
16
|
+
];
|
|
17
|
+
const NEWLINE_PATTERN = /\r?\n/g;
|
|
18
|
+
function parseDotenvValue(value) {
|
|
19
|
+
const trimmed = value.trim();
|
|
20
|
+
if (trimmed.startsWith("\"") && trimmed.endsWith("\"") || trimmed.startsWith("'") && trimmed.endsWith("'")) return trimmed.slice(1, -1);
|
|
21
|
+
return trimmed;
|
|
22
|
+
}
|
|
23
|
+
function parseDotenv(text) {
|
|
24
|
+
const env = {};
|
|
25
|
+
for (const line of text.split(LINE_SPLIT_PATTERN)) {
|
|
26
|
+
const trimmed = line.trim();
|
|
27
|
+
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
28
|
+
const normalized = trimmed.startsWith("export ") ? trimmed.slice(7).trim() : trimmed;
|
|
29
|
+
const equalsIndex = normalized.indexOf("=");
|
|
30
|
+
if (equalsIndex <= 0) continue;
|
|
31
|
+
const key = normalized.slice(0, equalsIndex).trim();
|
|
32
|
+
if (!ENV_KEY_PATTERN.test(key)) continue;
|
|
33
|
+
env[key] = parseDotenvValue(normalized.slice(equalsIndex + 1));
|
|
34
|
+
}
|
|
35
|
+
return env;
|
|
36
|
+
}
|
|
37
|
+
function readProjectEnv(cwd = process.cwd()) {
|
|
38
|
+
const envPath = join(cwd, ".env");
|
|
39
|
+
if (!existsSync(envPath)) return {};
|
|
40
|
+
return parseDotenv(readFileSync(envPath, "utf-8"));
|
|
41
|
+
}
|
|
42
|
+
function getProjectEnvValue(name, cwd = process.cwd()) {
|
|
43
|
+
return process.env[name] ?? readProjectEnv(cwd)[name];
|
|
44
|
+
}
|
|
45
|
+
function resolveDinewayBaseUrl(url, cwd = process.cwd()) {
|
|
46
|
+
if (url && url !== DEFAULT_DINEWAY_URL) return url;
|
|
47
|
+
const projectEnv = readProjectEnv(cwd);
|
|
48
|
+
return process.env["DINEWAY_URL"] ?? process.env["DINEWAY_SITE_URL"] ?? projectEnv["DINEWAY_SITE_URL"] ?? projectEnv["DINEWAY_URL"] ?? url ?? DEFAULT_DINEWAY_URL;
|
|
49
|
+
}
|
|
50
|
+
function resolveDinewayToken(token, cwd = process.cwd()) {
|
|
51
|
+
return token ?? getProjectEnvValue("DINEWAY_TOKEN", cwd);
|
|
52
|
+
}
|
|
53
|
+
function formatEnvValue(value) {
|
|
54
|
+
return value.replace(NEWLINE_PATTERN, "");
|
|
55
|
+
}
|
|
56
|
+
async function upsertProjectEnv(cwd, values) {
|
|
57
|
+
const envPath = join(cwd, ".env");
|
|
58
|
+
const existing = await readFile(envPath, "utf-8").catch(() => "");
|
|
59
|
+
const lines = existing ? existing.split(LINE_SPLIT_PATTERN) : [];
|
|
60
|
+
const seen = /* @__PURE__ */ new Set();
|
|
61
|
+
const nextLines = lines.map((line) => {
|
|
62
|
+
const trimmed = line.trim();
|
|
63
|
+
const normalized = trimmed.startsWith("export ") ? trimmed.slice(7).trim() : trimmed;
|
|
64
|
+
const equalsIndex = normalized.indexOf("=");
|
|
65
|
+
if (equalsIndex <= 0) return line;
|
|
66
|
+
const key = normalized.slice(0, equalsIndex).trim();
|
|
67
|
+
const value = values[key];
|
|
68
|
+
if (!(key in values) || value === void 0) return line;
|
|
69
|
+
seen.add(key);
|
|
70
|
+
return `${key}=${formatEnvValue(value)}`;
|
|
71
|
+
});
|
|
72
|
+
for (const [key, value] of Object.entries(values)) {
|
|
73
|
+
if (value === void 0 || seen.has(key)) continue;
|
|
74
|
+
nextLines.push(`${key}=${formatEnvValue(value)}`);
|
|
75
|
+
}
|
|
76
|
+
await writeFile(envPath, `${nextLines.filter((line, index) => line || index < nextLines.length - 1).join("\n")}\n`, "utf-8");
|
|
77
|
+
}
|
|
78
|
+
async function ensureProjectGitignoreEntry(cwd, entry) {
|
|
79
|
+
const gitignorePath = join(cwd, ".gitignore");
|
|
80
|
+
const existing = await readFile(gitignorePath, "utf-8").catch(() => "");
|
|
81
|
+
if (existing.split(LINE_SPLIT_PATTERN).map((line) => line.trim()).includes(entry)) return;
|
|
82
|
+
await writeFile(gitignorePath, `${existing}${existing && !existing.endsWith("\n") ? "\n" : ""}${entry}\n`, "utf-8");
|
|
83
|
+
}
|
|
84
|
+
async function ensureProjectGitignoreDinewayLocalState(cwd) {
|
|
85
|
+
const gitignorePath = join(cwd, ".gitignore");
|
|
86
|
+
const existing = await readFile(gitignorePath, "utf-8").catch(() => "");
|
|
87
|
+
const lines = new Set(existing.split(LINE_SPLIT_PATTERN).map((line) => line.trim()));
|
|
88
|
+
const missingEntries = DINEWAY_LOCAL_STATE_GITIGNORE_ENTRIES.filter((entry) => !lines.has(entry));
|
|
89
|
+
if (missingEntries.length === 0) return;
|
|
90
|
+
const block = [DINEWAY_LOCAL_STATE_GITIGNORE_COMMENT, ...missingEntries].join("\n");
|
|
91
|
+
await writeFile(gitignorePath, `${existing}${existing.trim() ? existing.endsWith("\n") ? "\n" : "\n\n" : ""}${block}\n`, "utf-8");
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
//#endregion
|
|
95
|
+
export { resolveDinewayBaseUrl as a, getProjectEnvValue as i, ensureProjectGitignoreDinewayLocalState as n, resolveDinewayToken as o, ensureProjectGitignoreEntry as r, upsertProjectEnv as s, DEFAULT_DINEWAY_URL as t };
|