dineway 0.1.14 → 0.1.16
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-events-B4wp7CrU.mjs → activity-events-DbqJBNaY.mjs} +1 -1
- package/dist/{allowed-origins-C1AKK9AT.mjs → allowed-origins-D85wzUp6.mjs} +1 -1
- package/dist/api/route-utils.d.mts +10 -10
- package/dist/api/route-utils.mjs +15 -15
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +4 -4
- package/dist/{api-BTbpzvBq.mjs → api-B5xMY72-.mjs} +96 -17
- package/dist/{api-tokens-D7UjLbdt.mjs → api-tokens-CMmUPFae.mjs} +1 -1
- package/dist/{apply-Bm5QgdrE.mjs → apply-CGVHi2r7.mjs} +165 -85
- package/dist/astro/index.d.mts +11 -11
- package/dist/astro/index.mjs +3 -3
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +5 -5
- package/dist/astro/middleware/redirect.mjs +6 -6
- package/dist/astro/middleware/request-context.mjs +4 -4
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.mjs +119 -77
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +5 -5
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +5 -5
- 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 +19 -19
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +12 -12
- package/dist/astro/routes/api/admin/bylines/index.mjs +12 -12
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +13 -13
- package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/bulk.mjs +10 -10
- package/dist/astro/routes/api/admin/comments/counts.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/index.mjs +10 -10
- package/dist/astro/routes/api/admin/context/_id_/history.mjs +26 -26
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +26 -26
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +30 -30
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +30 -30
- package/dist/astro/routes/api/admin/context/diff.mjs +29 -29
- package/dist/astro/routes/api/admin/context/index.mjs +30 -30
- package/dist/astro/routes/api/admin/context/stale.mjs +29 -29
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +26 -26
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +29 -29
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +29 -29
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +27 -27
- 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 +47 -47
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +47 -47
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +40 -40
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +46 -46
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +46 -46
- package/dist/astro/routes/api/admin/plugins/index.mjs +40 -40
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +40 -40
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +46 -46
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +40 -40
- package/dist/astro/routes/api/admin/plugins/updates.mjs +40 -40
- package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +6 -6
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +29 -29
- package/dist/astro/routes/api/admin/review-requests/index.mjs +10 -10
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +40 -40
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +40 -40
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +6 -6
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
- package/dist/astro/routes/api/admin/users/index.mjs +5 -5
- package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
- package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
- package/dist/astro/routes/api/auth/invite/complete.mjs +10 -10
- package/dist/astro/routes/api/auth/invite/index.mjs +7 -7
- package/dist/astro/routes/api/auth/invite/register-options.mjs +9 -9
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +9 -9
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/me.mjs +5 -5
- package/dist/astro/routes/api/auth/mode.mjs +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +2 -2
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +5 -5
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +11 -11
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +9 -9
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +10 -10
- package/dist/astro/routes/api/auth/passkey/verify.mjs +10 -10
- package/dist/astro/routes/api/auth/signup/complete.mjs +10 -10
- package/dist/astro/routes/api/auth/signup/request.mjs +9 -9
- package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -14
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +12 -12
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +28 -28
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +10 -10
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +10 -10
- package/dist/astro/routes/api/content/_collection_/index.mjs +10 -10
- package/dist/astro/routes/api/content/_collection_/trash.mjs +6 -6
- package/dist/astro/routes/api/dashboard.mjs +9 -9
- 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 +10 -10
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
- package/dist/astro/routes/api/import/wordpress/execute.mjs +29 -29
- package/dist/astro/routes/api/import/wordpress/media.mjs +7 -7
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +33 -33
- package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts +48 -0
- package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs +124 -0
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +32 -145
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +10 -10
- package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +33 -33
- package/dist/astro/routes/api/manifest.mjs +4 -4
- package/dist/astro/routes/api/mcp.mjs +277 -91
- package/dist/astro/routes/api/media/_id_/confirm.mjs +6 -6
- package/dist/astro/routes/api/media/_id_.mjs +6 -6
- 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 -13
- package/dist/astro/routes/api/media.mjs +18 -18
- package/dist/astro/routes/api/menus/_name_/items.mjs +45 -36
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +34 -31
- package/dist/astro/routes/api/menus/_name_/translations.d.mts +8 -0
- package/dist/astro/routes/api/menus/_name_/translations.mjs +111 -0
- package/dist/astro/routes/api/menus/_name_.mjs +47 -36
- package/dist/astro/routes/api/menus/index.mjs +34 -32
- 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 +3 -3
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +3 -3
- package/dist/astro/routes/api/redirects/404s/index.mjs +12 -12
- package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -12
- package/dist/astro/routes/api/redirects/_id_.mjs +31 -31
- package/dist/astro/routes/api/redirects/index.mjs +31 -31
- 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 +41 -41
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +41 -41
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +41 -41
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +41 -41
- package/dist/astro/routes/api/schema/collections/index.mjs +41 -41
- package/dist/astro/routes/api/schema/index.mjs +6 -6
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +40 -40
- package/dist/astro/routes/api/schema/orphans/index.mjs +40 -40
- package/dist/astro/routes/api/search/enable.mjs +12 -12
- package/dist/astro/routes/api/search/index.mjs +11 -11
- package/dist/astro/routes/api/search/rebuild.mjs +12 -12
- package/dist/astro/routes/api/search/stats.mjs +8 -8
- package/dist/astro/routes/api/search/suggest.mjs +11 -11
- package/dist/astro/routes/api/sections/_slug_.mjs +30 -30
- package/dist/astro/routes/api/sections/index.mjs +30 -30
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +30 -30
- package/dist/astro/routes/api/setup/admin-verify.mjs +12 -12
- package/dist/astro/routes/api/setup/admin.mjs +10 -10
- package/dist/astro/routes/api/setup/dev-bypass.mjs +25 -25
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +26 -26
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +7 -7
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts +8 -0
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +131 -0
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +49 -41
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +36 -34
- package/dist/astro/routes/api/taxonomies/index.mjs +36 -34
- package/dist/astro/routes/api/themes/preview.mjs +6 -6
- 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 +29 -29
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +30 -30
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +30 -30
- package/dist/astro/routes/api/widget-areas/_name_.mjs +28 -28
- package/dist/astro/routes/api/widget-areas/index.mjs +30 -30
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +9 -9
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
- package/dist/astro/routes/sitemap.xml.mjs +10 -10
- package/dist/astro/types.d.mts +16 -14
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/{auth-control-guard-DOZ3UCsP.mjs → auth-control-guard--r6LlNkX.mjs} +1 -1
- package/dist/{authorize-BAdbMCwC.mjs → authorize-wQDmXQJ1.mjs} +1 -1
- package/dist/{briefing-MVYe_Uyf.mjs → briefing-4k6R0KAr.mjs} +7 -7
- package/dist/{briefing-rty4O-wa.mjs → briefing-DM7e2yd3.mjs} +1 -1
- package/dist/{byline-naZxOPSa.mjs → byline-BxAf79s1.mjs} +4 -4
- package/dist/{bylines-DxXzWML_.d.mts → bylines-DE9bfDur.d.mts} +75 -13
- package/dist/{bylines-C4LIBOOO.mjs → bylines-DhCnhR70.mjs} +3 -3
- package/dist/{cache-DEbQ13c9.mjs → cache-inQvbrP5.mjs} +1 -1
- package/dist/{chunks-D_jVet6z.mjs → chunks-vkrCT4Ta.mjs} +7 -1
- package/dist/cli/index.mjs +357 -104
- package/dist/client/external-auth-headers.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.mjs +1 -1
- package/dist/{comment-DFO-gWDH.mjs → comment-BmJXz3lc.mjs} +1 -1
- package/dist/{comments--BsZ9pqA.mjs → comments-BW1qFiTa.mjs} +1 -1
- package/dist/{content-CyLkb-qH.mjs → content-DvpMad_N.mjs} +4 -3
- package/dist/{context-DNfcm853.mjs → context-CGbVhAmd.mjs} +2 -2
- package/dist/{context-CNIkMzot.mjs → context-CT44ux1O.mjs} +10 -10
- package/dist/{context-route-helpers-MurhoxWF.mjs → context-route-helpers-CcvSXJtQ.mjs} +1 -1
- package/dist/{dashboard-DqnYU8EU.mjs → dashboard-6gH7SlPM.mjs} +9 -18
- package/dist/database/instrumentation.d.mts +1 -1
- package/dist/database/instrumentation.mjs +14 -4
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +2 -2
- 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-BGEH5jfn.mjs → device-flow-DaTBhALC.mjs} +5 -5
- package/dist/{dialect-helpers-DhTzaUxP.mjs → dialect-helpers-TkdbkFad.mjs} +7 -1
- package/dist/{fts-manager-B1pTNEG_.mjs → fts-manager-D7KVeBmg.mjs} +1 -1
- package/dist/{hitl-requests-ChT32Ilo.mjs → hitl-requests-CUnch_4e.mjs} +2 -2
- package/dist/{hitl-route-helpers-CSit54Ru.mjs → hitl-route-helpers-DcUCm57p.mjs} +4 -4
- package/dist/{import-BHRLhXAn.mjs → import-BVqG28WP.mjs} +3 -3
- package/dist/{import-CNcKWTbp.mjs → import-DE2ziezs.mjs} +2 -2
- package/dist/{index-CYfhYgXd.d.mts → index-DpMWSamU.d.mts} +2 -2
- package/dist/{index-EUAWaIxW.d.mts → index-JzJUzE4o.d.mts} +47 -47
- package/dist/index.d.mts +16 -16
- package/dist/index.mjs +65 -65
- package/dist/{jsonld-D2gUY4kA.d.mts → jsonld-BjsoTL5m.d.mts} +2 -2
- package/dist/{loader-PZnPxFLc.mjs → loader-CQFxFOt1.mjs} +2 -2
- package/dist/media/index.d.mts +2 -2
- package/dist/media/index.mjs +2 -2
- package/dist/media/local-runtime.d.mts +12 -12
- package/dist/media/local-runtime.mjs +3 -3
- package/dist/{media-_7Fxdu45.mjs → media-Cg4zc9fq.mjs} +12 -9
- package/dist/media-allowlist-eS3AZ2L_.mjs +26 -0
- package/dist/{menus-DYW_UHjv.mjs → menus-BDW1yIdj.mjs} +80 -87
- package/dist/menus-CwI7DQJ5.mjs +569 -0
- package/dist/mime-DJOFDGux.mjs +35 -0
- package/dist/{oauth-authorization-DxGjiWKL.mjs → oauth-authorization-DcYRiDfi.mjs} +5 -5
- package/dist/{oauth-clients-DxO_NO7k.mjs → oauth-clients-CgKFA-VH.mjs} +2 -2
- package/dist/page/index.d.mts +2 -2
- package/dist/page/index.mjs +1 -1
- package/dist/{parse-C9106ehs.mjs → parse-BBfZRZYb.mjs} +1 -1
- package/dist/{placeholder-Bh1dfUOd.d.mts → placeholder-DKMMLt42.d.mts} +1 -1
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.mjs +1 -1
- package/dist/{plugins-D7-ILNib.mjs → plugins-DKceDtUM.mjs} +9 -7
- package/dist/{preview-DvYRU-Oy.mjs → preview-CIDYFBzd.mjs} +2 -2
- package/dist/{provider-loader-BiQ6lNmf.d.mts → provider-loader-D0F6E2qv.d.mts} +1 -1
- package/dist/{query-CsbOywSY.mjs → query-BtuwuZRd.mjs} +3 -3
- package/dist/{query-B9BO5goQ.mjs → query-CWPxZjGM.mjs} +11 -11
- package/dist/{rate-limit-DmVTHI5v.mjs → rate-limit-GN64_Jaw.mjs} +5 -5
- package/dist/{redirect-CGl64yOX.mjs → redirect-BHo9--Jz.mjs} +3 -3
- package/dist/{redirects-Cgi_cZfN.mjs → redirects-Bc40BgxA.mjs} +4 -4
- package/dist/{redirects-lrlmYXVE.mjs → redirects-xVDvj_yQ.mjs} +68 -15
- package/dist/{registry-C-_hxLqa.mjs → registry-DumDzFDn.mjs} +5 -5
- package/dist/{request-cache-DHMRr2Lf.mjs → request-cache-DmVyQUBh.mjs} +5 -1
- package/dist/request-context.d.mts +19 -1
- package/dist/request-context.mjs +15 -3
- package/dist/{request-meta-DixlNKKa.mjs → request-meta-BVx9KkL-.mjs} +1 -1
- package/dist/{review-requests-C2DIHwlJ.mjs → review-requests-BYuoyse0.mjs} +1 -1
- package/dist/{review-requests-DIyjw-K_.mjs → review-requests-vCw7_3DS.mjs} +1 -1
- package/dist/{runner-BU6Lo1ZS.d.mts → runner-CHR_W79l.d.mts} +1 -1
- package/dist/{runner-DWZm2KQm.mjs → runner-lqEiJbO-.mjs} +496 -181
- package/dist/{runtime-QuuFSlc6.d.mts → runtime-DY_XmE9Y.d.mts} +15 -14
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +5 -5
- package/dist/{schema-BECjUhP8.mjs → schema-D1z41cq_.mjs} +1 -1
- package/dist/{search-DqTHQqtV.mjs → search-CPcQGTHW.mjs} +2 -2
- package/dist/{secrets-CkoJ9zN0.mjs → secrets-AFKoqUXj.mjs} +2 -2
- package/dist/{sections-B61OxnfB.mjs → sections-B9RYyf3I.mjs} +2 -2
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +19 -19
- package/dist/seo/index.d.mts +1 -1
- package/dist/{seo-CUQctrog.mjs → seo-BPz1KkCq.mjs} +1 -1
- package/dist/{service-CyOsm0R6.mjs → service-DgiH1Yud.mjs} +2 -2
- package/dist/{settings-Dzgswvg4.mjs → settings-BGCo_c2y.mjs} +1 -1
- package/dist/{settings-DGtLLSaz.mjs → settings-qPzY2KIF.mjs} +4 -4
- package/dist/{setup-complete-BlcGZRYm.mjs → setup-complete-4EiBS1E5.mjs} +1 -1
- package/dist/{site-activity-B8FjLIVh.mjs → site-activity-lsCX_cqp.mjs} +1 -1
- package/dist/{site-context-WBxoD99D.mjs → site-context-DHRIU6x9.mjs} +58 -34
- package/dist/{site-url-BP7k7OCe.mjs → site-url-oyqzZtoL.mjs} +1 -1
- 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-BWmxbumf.mjs +350 -0
- package/dist/taxonomies-aQXvYVPm.mjs +507 -0
- package/dist/taxonomy-DI-0HgKe.mjs +217 -0
- package/dist/{tokens-BOJw-D9F.mjs → tokens-DB4dASZl.mjs} +1 -1
- package/dist/{types-DZPw8Rru.d.mts → types-CYBaBvtm.d.mts} +9 -0
- package/dist/{types-C0mmVRJN.d.mts → types-CsnHvu4J.d.mts} +1 -0
- package/dist/{types-Bs6lTBBW.mjs → types-D1DjBFA9.mjs} +8 -2
- package/dist/{types-Q616b2Hn.d.mts → types-DS5PYew4.d.mts} +1 -1
- package/dist/ui/server-runtime.d.mts +7 -7
- package/dist/ui/server-runtime.mjs +19 -19
- package/dist/{user-CcXq-zoL.mjs → user-2aI21yV1.mjs} +1 -1
- package/dist/{utils-C0ONdBul.mjs → utils-BJF19gfk.mjs} +1 -1
- package/dist/{validate-C7TzfamJ.mjs → validate-B8ZvLeOE.mjs} +12 -8
- package/dist/{validate-BwmQEbu8.d.mts → validate-BQ24E8rK.d.mts} +21 -4
- package/dist/version-HdNieFOD.mjs +6 -0
- package/dist/{widgets-B7DRpZvy.mjs → widgets-Cce2-2fM.mjs} +2 -2
- package/dist/{wordpress-slugs-CnporCYH.mjs → wordpress-slugs-C4EhE6fo.mjs} +1 -1
- package/dist/{zod-generator-DBVP8D0P.mjs → zod-generator-BKhtHT3e.mjs} +3 -3
- package/package.json +5 -5
- package/dist/menus-DS3_5nWY.mjs +0 -312
- package/dist/taxonomies-D2aZGuns.mjs +0 -270
- package/dist/taxonomies-z6Lz91BC.mjs +0 -355
- package/dist/taxonomy-D5cbhc8u.mjs +0 -165
- package/dist/version-B3z9Tv-J.mjs +0 -6
- /package/dist/{adapters-DuLQZhRY.d.mts → adapters-BPzUiHHm.d.mts} +0 -0
- /package/dist/{api-tokens-CPjC3zf8.mjs → api-tokens-B7fvbHM2.mjs} +0 -0
- /package/dist/{base64-Cz-aU0X1.mjs → base64-C1Q9yr0B.mjs} +0 -0
- /package/dist/{challenge-store-DDTbisbf.mjs → challenge-store-anhwVER0.mjs} +0 -0
- /package/dist/{components-BPknylYg.mjs → components-BQiBW_Ji.mjs} +0 -0
- /package/dist/{config-CAMFxGaV.mjs → config-XW5tMrH8.mjs} +0 -0
- /package/dist/{context-types-C-LwdAxx.mjs → context-types-DuiyY6xF.mjs} +0 -0
- /package/dist/{cron-CKxvBrRT.mjs → cron-fV9baRVc.mjs} +0 -0
- /package/dist/{db-errors-DyZkswzF.mjs → db-errors-BnUbfGsK.mjs} +0 -0
- /package/dist/{default-D4ngTpW8.mjs → default-2JDm1rj_.mjs} +0 -0
- /package/dist/{email-console-CuefUXfX.mjs → email-console-_pTim1bU.mjs} +0 -0
- /package/dist/{entity-aliases-C0v-yNET.mjs → entity-aliases-PJV8IxDq.mjs} +0 -0
- /package/dist/{error-BMUPwxgx.mjs → error-Dyf9fGZE.mjs} +0 -0
- /package/dist/{escape-BRVaw1Ai.mjs → escape-Bn168-uP.mjs} +0 -0
- /package/dist/{experimental-workflows-C9X7yblQ.mjs → experimental-workflows-CSRjuEwS.mjs} +0 -0
- /package/dist/{hash-CDX7M0ze.mjs → hash-V8oZo1W2.mjs} +0 -0
- /package/dist/{load-B2XtDw__.mjs → load-BvyvS_76.mjs} +0 -0
- /package/dist/{manifest-schema-CgFJAp0H.mjs → manifest-schema-CU0XL_ZK.mjs} +0 -0
- /package/dist/{mode-DUhxwUhv.mjs → mode-DWw2di1I.mjs} +0 -0
- /package/dist/{normalize-C49G_o1k.mjs → normalize-9GU-bv_T.mjs} +0 -0
- /package/dist/{oauth-state-store-C5UFhzwD.mjs → oauth-state-store-DhifLitQ.mjs} +0 -0
- /package/dist/{oauth-user-lookup-Bi0ek9eM.mjs → oauth-user-lookup-nyXQ2_6Q.mjs} +0 -0
- /package/dist/{options-z8VVg1Ll.mjs → options-BF11H_FD.mjs} +0 -0
- /package/dist/{passkey-config-BRSZx4pW.mjs → passkey-config-DZOjt0Hd.mjs} +0 -0
- /package/dist/{patterns-K0DLqWir.mjs → patterns-CW4n2PQs.mjs} +0 -0
- /package/dist/{placeholder-C2P5fKa4.mjs → placeholder-BJPmhjHP.mjs} +0 -0
- /package/dist/{provider-loader-C21b9OpH.mjs → provider-loader-Decn0Ktc.mjs} +0 -0
- /package/dist/{public-url-Cun8N3NU.mjs → public-url-5fFLJhjh.mjs} +0 -0
- /package/dist/{redirect-COZy-3iY.mjs → redirect-C077gVTf.mjs} +0 -0
- /package/dist/{seo-C007Luwn.mjs → seo-DJoop90w.mjs} +0 -0
- /package/dist/{seo-contributions-B1fWCnqY.mjs → seo-contributions-CQzUjJKY.mjs} +0 -0
- /package/dist/{setup-nonce-BpmLXAuu.mjs → setup-nonce-DN6BHIlP.mjs} +0 -0
- /package/dist/{sidecar-client-B1C6Cf80.mjs → sidecar-client-Dta0AELf.mjs} +0 -0
- /package/dist/{slugify-PDTDtMXp.mjs → slugify-BzGxlOFx.mjs} +0 -0
- /package/dist/{ssrf-DDwRxF6B.mjs → ssrf-BOSGjXxb.mjs} +0 -0
- /package/dist/{transaction-x2tJQ-A1.mjs → transaction-qfqpPVpu.mjs} +0 -0
- /package/dist/{transport-CSyZ02_i.mjs → transport-B3jxvfio.mjs} +0 -0
- /package/dist/{transport-BXe1AM79.d.mts → transport-CyOHECBA.d.mts} +0 -0
- /package/dist/{trusted-proxy-BbaZfkT9.mjs → trusted-proxy-8N8sX1D1.mjs} +0 -0
- /package/dist/{types-DJlpx5Ay.d.mts → types-6N-00csp.d.mts} +0 -0
- /package/dist/{types-BFmjniC2.d.mts → types-B45uSz1j.d.mts} +0 -0
- /package/dist/{types-B7kpsMJ3.d.mts → types-BDm7Ipoq.d.mts} +0 -0
- /package/dist/{types-0Vr68fc2.d.mts → types-BeYn-Yf0.d.mts} +0 -0
- /package/dist/{types-OPs5Q_sX.d.mts → types-D_wGrwiY.d.mts} +0 -0
- /package/dist/{types-DL7Y8D_t.mjs → types-Dz2EKzsX.mjs} +0 -0
- /package/dist/{types-fAInWQDO.mjs → types-iNqHe2-V.mjs} +0 -0
- /package/dist/{url-DNjT2abR.mjs → url-DOS4RGym.mjs} +0 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
|
|
2
|
+
import { ulid } from "ulidx";
|
|
3
|
+
|
|
4
|
+
//#region src/database/repositories/taxonomy.ts
|
|
5
|
+
var taxonomy_exports = /* @__PURE__ */ __exportAll({ TaxonomyRepository: () => TaxonomyRepository });
|
|
6
|
+
/**
|
|
7
|
+
* Taxonomy repository for categories, tags, and other classification.
|
|
8
|
+
*
|
|
9
|
+
* Terms are per-locale. Translations of the same term share a `translation_group`
|
|
10
|
+
* ULID. `content_taxonomies.taxonomy_id` stores the translation_group so a single
|
|
11
|
+
* association spans every locale of a post.
|
|
12
|
+
*
|
|
13
|
+
* The repository does not resolve locale fallbacks on its own — callers supply
|
|
14
|
+
* the locale they want. Runtime helpers and handlers use `getFallbackChain()`
|
|
15
|
+
* from `i18n/config` when they need fallback behaviour.
|
|
16
|
+
*/
|
|
17
|
+
var TaxonomyRepository = class {
|
|
18
|
+
constructor(db) {
|
|
19
|
+
this.db = db;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a new taxonomy term. When `translationOf` is set the new row joins
|
|
23
|
+
* the source term's translation_group; otherwise a fresh group is minted
|
|
24
|
+
* (matching the migration backfill pattern `translation_group = id`).
|
|
25
|
+
*/
|
|
26
|
+
async create(input) {
|
|
27
|
+
const id = ulid();
|
|
28
|
+
const parentId = input.parentId === void 0 || input.parentId === "" ? null : input.parentId;
|
|
29
|
+
let translationGroup = id;
|
|
30
|
+
if (input.translationOf) {
|
|
31
|
+
const source = await this.findById(input.translationOf);
|
|
32
|
+
if (source?.translationGroup) translationGroup = source.translationGroup;
|
|
33
|
+
}
|
|
34
|
+
await this.db.insertInto("taxonomies").values({
|
|
35
|
+
id,
|
|
36
|
+
name: input.name,
|
|
37
|
+
slug: input.slug,
|
|
38
|
+
label: input.label,
|
|
39
|
+
parent_id: parentId,
|
|
40
|
+
data: input.data ? JSON.stringify(input.data) : null,
|
|
41
|
+
...input.locale !== void 0 ? { locale: input.locale } : {},
|
|
42
|
+
translation_group: translationGroup
|
|
43
|
+
}).execute();
|
|
44
|
+
const taxonomy = await this.findById(id);
|
|
45
|
+
if (!taxonomy) throw new Error("Failed to create taxonomy");
|
|
46
|
+
return taxonomy;
|
|
47
|
+
}
|
|
48
|
+
async findById(id) {
|
|
49
|
+
const row = await this.db.selectFrom("taxonomies").selectAll().where("id", "=", id).executeTakeFirst();
|
|
50
|
+
return row ? this.rowToTaxonomy(row) : null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Find a term by (name, slug). When `locale` is provided, filter by it.
|
|
54
|
+
* When omitted, returns the lowest-locale-code match (deterministic across
|
|
55
|
+
* calls). Mirrors `ContentRepository.findBySlug`.
|
|
56
|
+
*/
|
|
57
|
+
async findBySlug(name, slug, locale) {
|
|
58
|
+
let query = this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).where("slug", "=", slug);
|
|
59
|
+
if (locale !== void 0) query = query.where("locale", "=", locale);
|
|
60
|
+
const row = await query.orderBy("locale", "asc").executeTakeFirst();
|
|
61
|
+
return row ? this.rowToTaxonomy(row) : null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get all terms for a taxonomy (e.g., all categories).
|
|
65
|
+
*
|
|
66
|
+
* `id asc` is a stable tiebreaker for terms that share a label. Without it
|
|
67
|
+
* the SQL ordering is implementation-defined when labels match, which
|
|
68
|
+
* breaks keyset pagination over `(label, id)`.
|
|
69
|
+
*/
|
|
70
|
+
async findByName(name, options = {}) {
|
|
71
|
+
let query = this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).orderBy("label", "asc").orderBy("id", "asc");
|
|
72
|
+
if (options.locale !== void 0) query = query.where("locale", "=", options.locale);
|
|
73
|
+
if (options.parentId !== void 0) if (options.parentId === null) query = query.where("parent_id", "is", null);
|
|
74
|
+
else query = query.where("parent_id", "=", options.parentId);
|
|
75
|
+
return (await query.execute()).map((row) => this.rowToTaxonomy(row));
|
|
76
|
+
}
|
|
77
|
+
async findChildren(parentId) {
|
|
78
|
+
return (await this.db.selectFrom("taxonomies").selectAll().where("parent_id", "=", parentId).orderBy("label", "asc").orderBy("id", "asc").execute()).map((row) => this.rowToTaxonomy(row));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Every translation sibling of a term (including itself), identified by
|
|
82
|
+
* their shared `translation_group`.
|
|
83
|
+
*/
|
|
84
|
+
async findTranslations(translationGroup) {
|
|
85
|
+
return (await this.db.selectFrom("taxonomies").selectAll().where("translation_group", "=", translationGroup).orderBy("locale", "asc").execute()).map((row) => this.rowToTaxonomy(row));
|
|
86
|
+
}
|
|
87
|
+
async update(id, input) {
|
|
88
|
+
if (!await this.findById(id)) return null;
|
|
89
|
+
const updates = {};
|
|
90
|
+
if (input.slug !== void 0) updates.slug = input.slug;
|
|
91
|
+
if (input.label !== void 0) updates.label = input.label;
|
|
92
|
+
if (input.parentId !== void 0) updates.parent_id = input.parentId === "" ? null : input.parentId;
|
|
93
|
+
if (input.data !== void 0) updates.data = JSON.stringify(input.data);
|
|
94
|
+
if (Object.keys(updates).length > 0) await this.db.updateTable("taxonomies").set(updates).where("id", "=", id).execute();
|
|
95
|
+
return this.findById(id);
|
|
96
|
+
}
|
|
97
|
+
async delete(id) {
|
|
98
|
+
const term = await this.findById(id);
|
|
99
|
+
if (!term) return false;
|
|
100
|
+
if (term.translationGroup) {
|
|
101
|
+
if ((await this.db.selectFrom("taxonomies").select("id").where("translation_group", "=", term.translationGroup).where("id", "!=", id).execute()).length === 0) await this.db.deleteFrom("content_taxonomies").where("taxonomy_id", "=", term.translationGroup).execute();
|
|
102
|
+
}
|
|
103
|
+
return ((await this.db.deleteFrom("taxonomies").where("id", "=", id).executeTakeFirst()).numDeletedRows ?? 0n) > 0n;
|
|
104
|
+
}
|
|
105
|
+
async attachToEntry(collection, entryId, taxonomyId) {
|
|
106
|
+
const group = await this.resolveTranslationGroup(taxonomyId);
|
|
107
|
+
if (!group) return;
|
|
108
|
+
const row = {
|
|
109
|
+
collection,
|
|
110
|
+
entry_id: entryId,
|
|
111
|
+
taxonomy_id: group
|
|
112
|
+
};
|
|
113
|
+
await this.db.insertInto("content_taxonomies").values(row).onConflict((oc) => oc.doNothing()).execute();
|
|
114
|
+
}
|
|
115
|
+
async detachFromEntry(collection, entryId, taxonomyId) {
|
|
116
|
+
const group = await this.resolveTranslationGroup(taxonomyId);
|
|
117
|
+
if (!group) return;
|
|
118
|
+
await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "=", group).execute();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Taxonomy terms assigned to a content entry, resolved into a specific locale.
|
|
122
|
+
* Terms whose translation_group lacks a row in the requested locale are
|
|
123
|
+
* omitted — callers wanting fallback behaviour apply it themselves.
|
|
124
|
+
*/
|
|
125
|
+
async getTermsForEntry(collection, entryId, taxonomyName, locale) {
|
|
126
|
+
let query = this.db.selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.translation_group", "content_taxonomies.taxonomy_id").selectAll("taxonomies").where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "=", entryId);
|
|
127
|
+
if (taxonomyName) query = query.where("taxonomies.name", "=", taxonomyName);
|
|
128
|
+
if (locale !== void 0) query = query.where("taxonomies.locale", "=", locale);
|
|
129
|
+
return (await query.orderBy("taxonomies.locale", "asc").execute()).map((row) => this.rowToTaxonomy(row));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Replace all assignments of a given taxonomy for one content entry.
|
|
133
|
+
* Term ids OR translation_groups are accepted and normalised to groups.
|
|
134
|
+
*/
|
|
135
|
+
async setTermsForEntry(collection, entryId, taxonomyName, termIds) {
|
|
136
|
+
const groups = [];
|
|
137
|
+
for (const id of termIds) {
|
|
138
|
+
const group = await this.resolveTranslationGroup(id);
|
|
139
|
+
if (group) groups.push(group);
|
|
140
|
+
}
|
|
141
|
+
const newGroups = new Set(groups);
|
|
142
|
+
const current = await this.db.selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.translation_group", "content_taxonomies.taxonomy_id").select(["content_taxonomies.taxonomy_id as group"]).distinct().where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "=", entryId).where("taxonomies.name", "=", taxonomyName).execute();
|
|
143
|
+
const currentGroups = new Set(current.map((r) => r.group));
|
|
144
|
+
const toRemove = [...currentGroups].filter((g) => !newGroups.has(g));
|
|
145
|
+
if (toRemove.length > 0) await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "in", toRemove).execute();
|
|
146
|
+
const toAdd = [...newGroups].filter((g) => !currentGroups.has(g));
|
|
147
|
+
if (toAdd.length > 0) await this.db.insertInto("content_taxonomies").values(toAdd.map((taxonomy_id) => ({
|
|
148
|
+
collection,
|
|
149
|
+
entry_id: entryId,
|
|
150
|
+
taxonomy_id
|
|
151
|
+
}))).onConflict((oc) => oc.doNothing()).execute();
|
|
152
|
+
}
|
|
153
|
+
async clearEntryTerms(collection, entryId) {
|
|
154
|
+
const result = await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).executeTakeFirst();
|
|
155
|
+
return Number(result.numDeletedRows ?? 0);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Copy every term assignment from one content entry to another. Used when
|
|
159
|
+
* creating a translation of a post so the new translation inherits the
|
|
160
|
+
* source's term assignments. Safe to call when the source has no terms.
|
|
161
|
+
*/
|
|
162
|
+
async copyEntryTerms(collection, sourceEntryId, targetEntryId) {
|
|
163
|
+
const rows = await this.db.selectFrom("content_taxonomies").select(["taxonomy_id"]).where("collection", "=", collection).where("entry_id", "=", sourceEntryId).execute();
|
|
164
|
+
if (rows.length === 0) return;
|
|
165
|
+
await this.db.insertInto("content_taxonomies").values(rows.map((r) => ({
|
|
166
|
+
collection,
|
|
167
|
+
entry_id: targetEntryId,
|
|
168
|
+
taxonomy_id: r.taxonomy_id
|
|
169
|
+
}))).onConflict((oc) => oc.doNothing()).execute();
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Count content entries that use any translation of this term. Accepts
|
|
173
|
+
* either a term id or a translation_group — we normalise to the group.
|
|
174
|
+
*/
|
|
175
|
+
async countEntriesWithTerm(termIdOrGroup) {
|
|
176
|
+
const group = await this.resolveTranslationGroup(termIdOrGroup);
|
|
177
|
+
if (!group) return 0;
|
|
178
|
+
const result = await this.db.selectFrom("content_taxonomies").select((eb) => eb.fn.count("entry_id").as("count")).where("taxonomy_id", "=", group).executeTakeFirst();
|
|
179
|
+
return Number(result?.count ?? 0);
|
|
180
|
+
}
|
|
181
|
+
async resolveTranslationGroup(idOrGroup) {
|
|
182
|
+
return (await this.db.selectFrom("taxonomies").select(["translation_group"]).where((eb) => eb.or([eb("id", "=", idOrGroup), eb("translation_group", "=", idOrGroup)])).executeTakeFirst())?.translation_group ?? null;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Batch count entries for multiple taxonomy translation_groups.
|
|
186
|
+
* Chunks the query at SQL_BATCH_SIZE to stay below D1's bind-parameter limit.
|
|
187
|
+
* Returns a Map from translation_group to count.
|
|
188
|
+
*
|
|
189
|
+
* Pass translation_groups (not term ids) — `content_taxonomies.taxonomy_id`
|
|
190
|
+
* stores the translation_group so a single assignment spans every locale.
|
|
191
|
+
*/
|
|
192
|
+
async countEntriesForTerms(translationGroups) {
|
|
193
|
+
if (translationGroups.length === 0) return /* @__PURE__ */ new Map();
|
|
194
|
+
const { chunks, SQL_BATCH_SIZE } = await import("./chunks-vkrCT4Ta.mjs").then((n) => n.r);
|
|
195
|
+
const counts = /* @__PURE__ */ new Map();
|
|
196
|
+
for (const chunk of chunks(translationGroups, SQL_BATCH_SIZE)) {
|
|
197
|
+
const rows = await this.db.selectFrom("content_taxonomies").select(["taxonomy_id", (eb) => eb.fn.count("entry_id").as("count")]).where("taxonomy_id", "in", chunk).groupBy("taxonomy_id").execute();
|
|
198
|
+
for (const row of rows) counts.set(row.taxonomy_id, Number(row.count || 0));
|
|
199
|
+
}
|
|
200
|
+
return counts;
|
|
201
|
+
}
|
|
202
|
+
rowToTaxonomy(row) {
|
|
203
|
+
return {
|
|
204
|
+
id: row.id,
|
|
205
|
+
name: row.name,
|
|
206
|
+
slug: row.slug,
|
|
207
|
+
label: row.label,
|
|
208
|
+
parentId: row.parent_id,
|
|
209
|
+
data: row.data ? JSON.parse(row.data) : null,
|
|
210
|
+
locale: row.locale,
|
|
211
|
+
translationGroup: row.translation_group
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
//#endregion
|
|
217
|
+
export { taxonomy_exports as n, TaxonomyRepository as t };
|
|
@@ -16,6 +16,8 @@ interface TaxonomyTable {
|
|
|
16
16
|
label: string;
|
|
17
17
|
parent_id: string | null;
|
|
18
18
|
data: string | null;
|
|
19
|
+
locale: Generated<string>;
|
|
20
|
+
translation_group: Generated<string | null>;
|
|
19
21
|
}
|
|
20
22
|
interface ContentTaxonomyTable {
|
|
21
23
|
collection: string;
|
|
@@ -30,6 +32,8 @@ interface TaxonomyDefTable {
|
|
|
30
32
|
hierarchical: number;
|
|
31
33
|
collections: string | null;
|
|
32
34
|
created_at: Generated<string>;
|
|
35
|
+
locale: Generated<string>;
|
|
36
|
+
translation_group: Generated<string | null>;
|
|
33
37
|
}
|
|
34
38
|
interface MediaTable {
|
|
35
39
|
id: string;
|
|
@@ -64,6 +68,7 @@ interface CredentialTable {
|
|
|
64
68
|
id: string;
|
|
65
69
|
user_id: string;
|
|
66
70
|
public_key: Uint8Array;
|
|
71
|
+
algorithm: number;
|
|
67
72
|
counter: number;
|
|
68
73
|
device_type: string;
|
|
69
74
|
backed_up: number;
|
|
@@ -405,6 +410,8 @@ interface MenuTable {
|
|
|
405
410
|
label: string;
|
|
406
411
|
created_at: Generated<string>;
|
|
407
412
|
updated_at: Generated<string>;
|
|
413
|
+
locale: Generated<string>;
|
|
414
|
+
translation_group: Generated<string | null>;
|
|
408
415
|
}
|
|
409
416
|
interface MenuItemTable {
|
|
410
417
|
id: string;
|
|
@@ -420,6 +427,8 @@ interface MenuItemTable {
|
|
|
420
427
|
target: string | null;
|
|
421
428
|
css_classes: string | null;
|
|
422
429
|
created_at: Generated<string>;
|
|
430
|
+
locale: Generated<string>;
|
|
431
|
+
translation_group: Generated<string | null>;
|
|
423
432
|
}
|
|
424
433
|
interface WidgetAreaTable {
|
|
425
434
|
id: string;
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
|
|
2
|
+
import { r as encodeBase64, t as decodeBase64 } from "./base64-C1Q9yr0B.mjs";
|
|
2
3
|
|
|
3
4
|
//#region src/database/repositories/types.ts
|
|
5
|
+
var types_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
+
DinewayValidationError: () => DinewayValidationError,
|
|
7
|
+
decodeCursor: () => decodeCursor,
|
|
8
|
+
encodeCursor: () => encodeCursor
|
|
9
|
+
});
|
|
4
10
|
/** Encode a cursor from order value + id */
|
|
5
11
|
function encodeCursor(orderValue, id) {
|
|
6
12
|
return encodeBase64(JSON.stringify({
|
|
@@ -27,4 +33,4 @@ var DinewayValidationError = class extends Error {
|
|
|
27
33
|
};
|
|
28
34
|
|
|
29
35
|
//#endregion
|
|
30
|
-
export { decodeCursor as n, encodeCursor as r, DinewayValidationError as t };
|
|
36
|
+
export { types_exports as i, decodeCursor as n, encodeCursor as r, DinewayValidationError as t };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import "../types-
|
|
2
|
-
import { A as PageMetadataContribution, q as PublicPageContext } from "../types-
|
|
3
|
-
import { t as MediaReference } from "../types-
|
|
4
|
-
import { a as EmbedResult, i as EmbedOptions, m as MediaValue, o as ImageEmbed } from "../types-
|
|
5
|
-
import { H as getSiteSettings, R as getComments, St as PublicComment, T as getMenu, _ as getTaxonomyTerms, ft as sanitizeHref, l as Widget, pt as getCollectionInfo, rt as getEditMeta, t as getWidgetArea, tt as getDinewayCollection } from "../index-
|
|
6
|
-
import { a as generateSiteSeoContributions, d as resolvePageMetadata, i as generateBaseSeoContributions, o as renderFragments, u as renderPageMetadata } from "../jsonld-
|
|
1
|
+
import "../types-CYBaBvtm.mjs";
|
|
2
|
+
import { A as PageMetadataContribution, q as PublicPageContext } from "../types-DS5PYew4.mjs";
|
|
3
|
+
import { t as MediaReference } from "../types-CsnHvu4J.mjs";
|
|
4
|
+
import { a as EmbedResult, i as EmbedOptions, m as MediaValue, o as ImageEmbed } from "../types-D_wGrwiY.mjs";
|
|
5
|
+
import { H as getSiteSettings, R as getComments, St as PublicComment, T as getMenu, _ as getTaxonomyTerms, ft as sanitizeHref, l as Widget, pt as getCollectionInfo, rt as getEditMeta, t as getWidgetArea, tt as getDinewayCollection } from "../index-JzJUzE4o.mjs";
|
|
6
|
+
import { a as generateSiteSeoContributions, d as resolvePageMetadata, i as generateBaseSeoContributions, o as renderFragments, u as renderPageMetadata } from "../jsonld-BjsoTL5m.mjs";
|
|
7
7
|
import { getPageRuntime } from "../page/index.mjs";
|
|
8
|
-
import { t as getMediaProvider } from "../provider-loader-
|
|
8
|
+
import { t as getMediaProvider } from "../provider-loader-D0F6E2qv.mjs";
|
|
9
9
|
|
|
10
10
|
//#region src/utils/sanitize.d.ts
|
|
11
11
|
/**
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import "../dialect-helpers-
|
|
2
|
-
import "../base64-
|
|
3
|
-
import "../types-
|
|
4
|
-
import "../media-
|
|
5
|
-
import "../comment-
|
|
6
|
-
import "../options-
|
|
7
|
-
import "../
|
|
8
|
-
import "../
|
|
9
|
-
import "../
|
|
10
|
-
import
|
|
11
|
-
import "../
|
|
12
|
-
import { t as getCollectionInfo } from "../query-
|
|
13
|
-
import { a as getTaxonomyTerms } from "../taxonomies-
|
|
14
|
-
import { n as sanitizeHref } from "../url-
|
|
15
|
-
import { r as getEditMeta, t as getDinewayCollection } from "../query-
|
|
16
|
-
import { i as getComments, t as getMenu } from "../menus-
|
|
17
|
-
import { t as getWidgetArea } from "../widgets-
|
|
18
|
-
import { t as getMediaProvider } from "../provider-loader-
|
|
19
|
-
import { c as escapeHtmlAttr, l as renderPageMetadata, n as generateSiteSeoContributions, o as renderFragments, t as generateBaseSeoContributions, u as resolvePageMetadata } from "../seo-contributions-
|
|
1
|
+
import "../dialect-helpers-TkdbkFad.mjs";
|
|
2
|
+
import "../base64-C1Q9yr0B.mjs";
|
|
3
|
+
import "../types-D1DjBFA9.mjs";
|
|
4
|
+
import "../media-Cg4zc9fq.mjs";
|
|
5
|
+
import "../comment-BmJXz3lc.mjs";
|
|
6
|
+
import "../options-BF11H_FD.mjs";
|
|
7
|
+
import "../request-cache-DmVyQUBh.mjs";
|
|
8
|
+
import "../fts-manager-D7KVeBmg.mjs";
|
|
9
|
+
import "../registry-DumDzFDn.mjs";
|
|
10
|
+
import "../loader-CQFxFOt1.mjs";
|
|
11
|
+
import { i as getSiteSettings, s as buildRenderMediaUrl } from "../settings-qPzY2KIF.mjs";
|
|
12
|
+
import { t as getCollectionInfo } from "../query-BtuwuZRd.mjs";
|
|
13
|
+
import { a as getTaxonomyTerms } from "../taxonomies-BWmxbumf.mjs";
|
|
14
|
+
import { n as sanitizeHref } from "../url-DOS4RGym.mjs";
|
|
15
|
+
import { r as getEditMeta, t as getDinewayCollection } from "../query-CWPxZjGM.mjs";
|
|
16
|
+
import { i as getComments, t as getMenu } from "../menus-BDW1yIdj.mjs";
|
|
17
|
+
import { t as getWidgetArea } from "../widgets-Cce2-2fM.mjs";
|
|
18
|
+
import { t as getMediaProvider } from "../provider-loader-Decn0Ktc.mjs";
|
|
19
|
+
import { c as escapeHtmlAttr, l as renderPageMetadata, n as generateSiteSeoContributions, o as renderFragments, t as generateBaseSeoContributions, u as resolvePageMetadata } from "../seo-contributions-CQzUjJKY.mjs";
|
|
20
20
|
import { getPageRuntime } from "../page/index.mjs";
|
|
21
21
|
import sanitizeHtml from "sanitize-html";
|
|
22
22
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
|
|
2
|
-
import { t as FIELD_TYPES } from "./types-
|
|
2
|
+
import { t as FIELD_TYPES } from "./types-Dz2EKzsX.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/seed/validate.ts
|
|
5
5
|
/**
|
|
@@ -87,8 +87,9 @@ function validateSeed(data) {
|
|
|
87
87
|
const prefix = `taxonomies[${i}]`;
|
|
88
88
|
if (!taxonomy.name) errors.push(`${prefix}: name is required`);
|
|
89
89
|
else {
|
|
90
|
-
|
|
91
|
-
taxonomyNames.
|
|
90
|
+
const key = `${taxonomy.name}::${taxonomy.locale ?? ""}`;
|
|
91
|
+
if (taxonomyNames.has(key)) errors.push(taxonomy.locale ? `${prefix}.name: duplicate taxonomy "${taxonomy.name}" in locale "${taxonomy.locale}"` : `${prefix}.name: duplicate taxonomy name "${taxonomy.name}"`);
|
|
92
|
+
taxonomyNames.add(key);
|
|
92
93
|
}
|
|
93
94
|
if (!taxonomy.label) errors.push(`${prefix}: label is required`);
|
|
94
95
|
if (taxonomy.hierarchical === void 0) errors.push(`${prefix}: hierarchical is required`);
|
|
@@ -102,15 +103,17 @@ function validateSeed(data) {
|
|
|
102
103
|
const termPrefix = `${prefix}.terms[${j}]`;
|
|
103
104
|
if (!term.slug) errors.push(`${termPrefix}: slug is required`);
|
|
104
105
|
else {
|
|
105
|
-
|
|
106
|
-
termSlugs.
|
|
106
|
+
const key = `${term.slug}::${term.locale ?? taxonomy.locale ?? ""}`;
|
|
107
|
+
if (termSlugs.has(key)) errors.push(`${termPrefix}.slug: duplicate term slug "${term.slug}" in taxonomy "${taxonomy.name}"`);
|
|
108
|
+
termSlugs.add(key);
|
|
107
109
|
}
|
|
108
110
|
if (!term.label) errors.push(`${termPrefix}: label is required`);
|
|
109
111
|
if (term.parent && taxonomy.hierarchical) {} else if (term.parent && !taxonomy.hierarchical) warnings.push(`${termPrefix}.parent: taxonomy "${taxonomy.name}" is not hierarchical, parent will be ignored`);
|
|
110
112
|
}
|
|
111
113
|
if (taxonomy.hierarchical && taxonomy.terms) for (let j = 0; j < taxonomy.terms.length; j++) {
|
|
112
114
|
const term = taxonomy.terms[j];
|
|
113
|
-
|
|
115
|
+
const termLocale = term.locale ?? taxonomy.locale ?? "";
|
|
116
|
+
if (term.parent && !termSlugs.has(`${term.parent}::${termLocale}`)) errors.push(`${prefix}.terms[${j}].parent: parent term "${term.parent}" not found in taxonomy`);
|
|
114
117
|
if (term.parent === term.slug) errors.push(`${prefix}.terms[${j}].parent: term cannot be its own parent`);
|
|
115
118
|
}
|
|
116
119
|
}
|
|
@@ -124,8 +127,9 @@ function validateSeed(data) {
|
|
|
124
127
|
const prefix = `menus[${i}]`;
|
|
125
128
|
if (!menu.name) errors.push(`${prefix}: name is required`);
|
|
126
129
|
else {
|
|
127
|
-
|
|
128
|
-
menuNames.
|
|
130
|
+
const key = `${menu.name}::${menu.locale ?? ""}`;
|
|
131
|
+
if (menuNames.has(key)) errors.push(menu.locale ? `${prefix}.name: duplicate menu "${menu.name}" in locale "${menu.locale}"` : `${prefix}.name: duplicate menu name "${menu.name}"`);
|
|
132
|
+
menuNames.add(key);
|
|
129
133
|
}
|
|
130
134
|
if (!menu.label) errors.push(`${prefix}: label is required`);
|
|
131
135
|
if (!Array.isArray(menu.items)) errors.push(`${prefix}.items: must be an array`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as Database } from "./types-
|
|
2
|
-
import { i as SiteSettings, m as FieldType } from "./types-
|
|
3
|
-
import { d as Storage } from "./types-
|
|
1
|
+
import { t as Database } from "./types-CYBaBvtm.mjs";
|
|
2
|
+
import { i as SiteSettings, m as FieldType } from "./types-CsnHvu4J.mjs";
|
|
3
|
+
import { d as Storage } from "./types-BDm7Ipoq.mjs";
|
|
4
4
|
import { Kysely } from "kysely";
|
|
5
5
|
|
|
6
6
|
//#region src/seed/types.d.ts
|
|
@@ -68,37 +68,52 @@ interface SeedField {
|
|
|
68
68
|
options?: Record<string, unknown>;
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
|
-
* Taxonomy definition in seed
|
|
71
|
+
* Taxonomy definition in seed. For multi-locale exports each locale variant is
|
|
72
|
+
* its own entry, linked via `translationOf`.
|
|
72
73
|
*/
|
|
73
74
|
interface SeedTaxonomy {
|
|
75
|
+
/** Optional seed-local id, e.g. "tax:category:en". Target of `translationOf`. */
|
|
76
|
+
id?: string;
|
|
74
77
|
name: string;
|
|
75
78
|
label: string;
|
|
76
79
|
labelSingular?: string;
|
|
77
80
|
hierarchical: boolean;
|
|
78
81
|
collections: string[];
|
|
82
|
+
locale?: string;
|
|
83
|
+
translationOf?: string;
|
|
79
84
|
terms?: SeedTaxonomyTerm[];
|
|
80
85
|
}
|
|
81
86
|
/**
|
|
82
87
|
* Taxonomy term in seed
|
|
83
88
|
*/
|
|
84
89
|
interface SeedTaxonomyTerm {
|
|
90
|
+
/** Optional seed-local id, e.g. "term:category:breakfast:en". */
|
|
91
|
+
id?: string;
|
|
85
92
|
slug: string;
|
|
86
93
|
label: string;
|
|
87
94
|
description?: string;
|
|
88
95
|
parent?: string;
|
|
96
|
+
locale?: string;
|
|
97
|
+
translationOf?: string;
|
|
89
98
|
}
|
|
90
99
|
/**
|
|
91
100
|
* Menu definition in seed
|
|
92
101
|
*/
|
|
93
102
|
interface SeedMenu {
|
|
103
|
+
/** Optional seed-local id, e.g. "menu:primary:en". */
|
|
104
|
+
id?: string;
|
|
94
105
|
name: string;
|
|
95
106
|
label: string;
|
|
107
|
+
locale?: string;
|
|
108
|
+
translationOf?: string;
|
|
96
109
|
items: SeedMenuItem[];
|
|
97
110
|
}
|
|
98
111
|
/**
|
|
99
112
|
* Menu item in seed
|
|
100
113
|
*/
|
|
101
114
|
interface SeedMenuItem {
|
|
115
|
+
/** Optional seed-local id, e.g. "item:primary:home:en". */
|
|
116
|
+
id?: string;
|
|
102
117
|
type: string;
|
|
103
118
|
label?: string;
|
|
104
119
|
url?: string;
|
|
@@ -107,6 +122,8 @@ interface SeedMenuItem {
|
|
|
107
122
|
target?: "_blank" | "_self";
|
|
108
123
|
titleAttr?: string;
|
|
109
124
|
cssClasses?: string;
|
|
125
|
+
locale?: string;
|
|
126
|
+
translationOf?: string;
|
|
110
127
|
children?: SeedMenuItem[];
|
|
111
128
|
}
|
|
112
129
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as getDb } from "./loader-
|
|
2
|
-
import { t as getWidgetComponents$1 } from "./components-
|
|
1
|
+
import { r as getDb } from "./loader-CQFxFOt1.mjs";
|
|
2
|
+
import { t as getWidgetComponents$1 } from "./components-BQiBW_Ji.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/widgets/index.ts
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
|
|
2
|
-
import { n as hashString } from "./hash-
|
|
2
|
+
import { n as hashString } from "./hash-V8oZo1W2.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
5
5
|
//#region src/schema/zod-generator.ts
|
|
@@ -99,8 +99,8 @@ function fieldTypeToTypeScript(field) {
|
|
|
99
99
|
if (multiOptions && multiOptions.length > 0) return `(${multiOptions.map((o) => `"${o}"`).join(" | ")})[]`;
|
|
100
100
|
return "string[]";
|
|
101
101
|
case "portableText": return "PortableTextBlock[]";
|
|
102
|
-
case "image": return "{ id: string; src?: string; alt?: string; width?: number; height?: number }";
|
|
103
|
-
case "file": return "{ id: string; src?: string; filename?: string; mimeType?: string; size?: number }";
|
|
102
|
+
case "image": return "{ id: string; src?: string; alt?: string; width?: number; height?: number; provider?: string; previewUrl?: string; meta?: Record<string, unknown> }";
|
|
103
|
+
case "file": return "{ id: string; src?: string; filename?: string; mimeType?: string; size?: number; provider?: string; meta?: Record<string, unknown> }";
|
|
104
104
|
case "reference": return "string";
|
|
105
105
|
case "json": return "unknown";
|
|
106
106
|
default: return "unknown";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dineway",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"description": "Agentic Website builder for restaurants — structured content meets AI via the Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -341,9 +341,9 @@
|
|
|
341
341
|
"ulidx": "^2.4.1",
|
|
342
342
|
"upng-js": "^2.1.0",
|
|
343
343
|
"zod": "^4.3.5",
|
|
344
|
-
"@dineway-ai/admin": "^0.1.
|
|
345
|
-
"@dineway-ai/
|
|
346
|
-
"@dineway-ai/
|
|
344
|
+
"@dineway-ai/admin": "^0.1.11",
|
|
345
|
+
"@dineway-ai/gutenberg-to-portable-text": "^0.1.11",
|
|
346
|
+
"@dineway-ai/auth": "^0.1.12"
|
|
347
347
|
},
|
|
348
348
|
"optionalDependencies": {
|
|
349
349
|
"@libsql/kysely-libsql": "^0.4.0",
|
|
@@ -372,7 +372,7 @@
|
|
|
372
372
|
"vite": "^6.0.0",
|
|
373
373
|
"vitest": "^4.0.18",
|
|
374
374
|
"zod-openapi": "^5.4.6",
|
|
375
|
-
"@dineway-ai/blocks": "^0.1.
|
|
375
|
+
"@dineway-ai/blocks": "^0.1.11"
|
|
376
376
|
},
|
|
377
377
|
"keywords": [
|
|
378
378
|
"astro",
|