docs-i18n 0.11.1 → 0.12.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/admin/app/lib/auth-client.ts +1 -1
- package/admin/app/lib/auth.server.ts +51 -1
- package/admin/app/server.ts +4 -1
- package/admin/dist/client/assets/{auth-client-DqJZaFZR.js → auth-client-ChAoRxRf.js} +1 -1
- package/admin/dist/client/assets/{login-CQjkiBAF.js → login-DpI70f1L.js} +1 -1
- package/admin/dist/client/assets/{main-bc5tcdGg.js → main-HccfHTVt.js} +2 -2
- package/admin/dist/client/assets/{routes-CTPOG_v1.js → routes-D1wZzUqP.js} +1 -1
- package/admin/dist/server/assets/Match-jV7Q5nbh.js +3236 -0
- package/admin/dist/server/assets/{__tanstack-start-server-fn-resolver-N1N5mZVv.js → __tanstack-start-server-fn-resolver-BDlz7b4M.js} +18 -18
- package/admin/dist/server/assets/{_tanstack-start-manifest_v-BgMVPPt2.js → _tanstack-start-manifest_v-CZNmyv5h.js} +4 -4
- package/admin/dist/server/assets/{adapter-DjXlUL1J.js → adapter-Btzrjxp2.js} +1 -1
- package/admin/dist/server/assets/auth-Hlc_ErDZ.js +40 -0
- package/admin/dist/server/assets/{auth-client-CoUpyQIM.js → auth-client-DZADgYlJ.js} +3 -3
- package/admin/dist/server/assets/auth.server-C-Ece-zJ.js +2 -0
- package/admin/dist/server/assets/{auth.server-BLVDnTCZ.js → auth.server-C5kH0jex.js} +53 -12
- package/admin/dist/server/assets/{bun-sqlite-dialect-C8OaCWSL-BNNY-FoT.js → bun-sqlite-dialect-C8OaCWSL-kcfNhLVL.js} +2 -2
- package/admin/dist/server/assets/{compiled-query-CnFG_BVV.js → compiled-query-BniCsfyw.js} +1 -1
- package/admin/dist/server/assets/createServerFn-CAF9Kl7K.js +370 -0
- package/admin/dist/server/assets/{createServerRpc-Cyyxq9HQ.js → createServerRpc-D1Slsi4e.js} +1 -1
- package/admin/dist/server/assets/{d1-sqlite-dialect-sYHNqBte-Bjz-cybU.js → d1-sqlite-dialect-sYHNqBte-DH7CDIkk.js} +2 -2
- package/admin/dist/server/assets/{dist-DBv71kqn.js → dist-3sjmTS6w.js} +8321 -106
- package/admin/dist/server/assets/{dist-CUzFWZag.js → dist-B_54zSkq.js} +8 -8
- package/admin/dist/server/assets/dist-CaR9v9w1.js +2 -0
- package/admin/dist/server/assets/{dist-C3-e8E2B.js → dist-D3NMliQC.js} +2 -2
- package/admin/dist/server/assets/{error-codes-BhMTGvV6.js → error-codes-Dw4P_cJu.js} +1 -1
- package/admin/dist/server/assets/init-CSXxGq7r.js +2 -0
- package/admin/dist/server/assets/{init-CJJUsPDL.js → init-QOUAlWr8.js} +3 -3
- package/admin/dist/server/assets/{jobs-DrEe9YOj.js → jobs-CcwecqaK.js} +5 -5
- package/admin/dist/server/assets/{kysely-adapter-YC8RFPyc.js → kysely-adapter-DZDLFHLq.js} +1 -1
- package/admin/dist/server/assets/{login-SqzTMYOZ.js → login-BMn8hY2z.js} +2 -2
- package/admin/dist/server/assets/{misc-BSoYldBT.js → misc-leinq0id.js} +5 -5
- package/admin/dist/server/assets/{models-CoviNHUP.js → models-DTJbdHu7.js} +2 -2
- package/admin/dist/server/assets/{node-sqlite-dialect-BJIaP6lL.js → node-sqlite-dialect-CTaKW6AP.js} +2 -2
- package/admin/dist/server/assets/request-response-Bj40K48O.js +589 -0
- package/admin/dist/server/assets/{router-Cxm33tn3.js → router-DWZHm_v_.js} +4 -4
- package/admin/dist/server/assets/{routes-DtWFPDUc.js → routes-CUOd2KKc.js} +4 -8
- package/admin/dist/server/assets/{routes-CxGhew8Z.js → routes-DMh4pkeO.js} +4 -4
- package/admin/dist/server/assets/{sqlite-adapter-CL2EidjD.js → sqlite-adapter-C24CHMIE.js} +1 -1
- package/admin/dist/server/assets/{status-B1AGLvHn.js → status-Bdrqzx_H.js} +2 -2
- package/admin/dist/server/assets/status-C_h82YTJ.js +2 -0
- package/admin/dist/server/assets/{status-D7PU72hm.js → status-VBCTGlIL.js} +4 -4
- package/admin/dist/server/server.js +77 -4233
- package/admin/server/functions/auth.ts +0 -48
- package/admin/vite.config.ts +9 -5
- package/dist/chunk-BHYFOPS6.js +111 -0
- package/dist/cli.js +44 -5
- package/dist/index.d.ts +108 -1
- package/dist/index.js +224 -1
- package/dist/pipeline-3XGFR4QL.js +104 -0
- package/dist/{rescan-HXMWFAOC.js → rescan-7XDHUNH5.js} +33 -2
- package/dist/runner-KUGSO4CL.js +10 -0
- package/package.json +2 -1
- package/template/dist/client/assets/{Doc-CbmLeLjl.js → Doc-BKO69_nz.js} +1 -1
- package/template/dist/client/assets/{DocsLayout-ERG7nrAc.js → DocsLayout-BGugXxEQ.js} +1 -1
- package/template/dist/client/assets/{FileTabs-CCynw0nL.js → FileTabs-4fZriOj4.js} +1 -1
- package/template/dist/client/assets/{Footer-l6Y8-ltB.js → Footer-DYh1AfWA.js} +1 -1
- package/template/dist/client/assets/{FrameworkContent-pNf68F7f.js → FrameworkContent-rVvjxASn.js} +1 -1
- package/template/dist/client/assets/{MarkdownHeadingContext-6I862CKH.js → MarkdownHeadingContext-CdvUDZFU.js} +4 -4
- package/template/dist/client/assets/{PostNotFound-ScC0039d.js → PostNotFound-WoSYGsGu.js} +1 -1
- package/template/dist/client/assets/{_basePickBy-B-GcvGxW.js → _basePickBy-Dd7GuR7A.js} +1 -1
- package/template/dist/client/assets/{_baseUniq-C1WySGZQ.js → _baseUniq-DMxQLGFI.js} +1 -1
- package/template/dist/client/assets/_lang-3AqGszEy.js +1 -0
- package/template/dist/client/assets/_lang._project-COkrIqzH.js +1 -0
- package/template/dist/client/assets/_lang._project._version-B8vRZczu.js +1 -0
- package/template/dist/client/assets/{_lang._project._version.docs-aw08dKvN.js → _lang._project._version.docs-DokNGgvU.js} +1 -1
- package/template/dist/client/assets/{_lang._project._version.docs._-B4Vb_S0V.js → _lang._project._version.docs._-CXCNZzOb.js} +1 -1
- package/template/dist/client/assets/_lang._project._version.docs._-DR0WSQEb.js +1 -0
- package/template/dist/client/assets/_lang._project._version.docs.framework._framework._-C_Grro8r.js +1 -0
- package/template/dist/client/assets/{_lang._project._version.docs.framework._framework.index-DInYPTXM.js → _lang._project._version.docs.framework._framework.index-DsYjXRdj.js} +1 -1
- package/template/dist/client/assets/{_lang._project._version.docs.framework.index-B7EvJmBI.js → _lang._project._version.docs.framework.index-DQX1lBi3.js} +1 -1
- package/template/dist/client/assets/{_lang._project.docs-4oX3ADgu.js → _lang._project.docs-DsYQj9jI.js} +1 -1
- package/template/dist/client/assets/_lang._project.docs._-DlM_D6DD.js +1 -0
- package/template/dist/client/assets/{_lang._project.docs._-emq0IsQw.js → _lang._project.docs._-l2tTjx80.js} +1 -1
- package/template/dist/client/assets/_lang.blog-CEwEtalL.js +1 -0
- package/template/dist/client/assets/_lang.blog-D6YGC3tK.js +1 -0
- package/template/dist/client/assets/_lang.blog._-DgHu4oLy.js +1 -0
- package/template/dist/client/assets/{_lang.blog._-DErizs7q.js → _lang.blog._-Umz18sQE.js} +1 -1
- package/template/dist/client/assets/_lang.blog.index-C8LKUFtD.js +1 -0
- package/template/dist/client/assets/{_lang.blog.index-DZDuDkQr.js → _lang.blog.index-DzUqpOBE.js} +1 -1
- package/template/dist/client/assets/{_lang.docs-CQK0rfqt.js → _lang.docs-CUh3R7DD.js} +1 -1
- package/template/dist/client/assets/{_lang.docs._-BiCvgeV1.js → _lang.docs._-DlgTPy3s.js} +1 -1
- package/template/dist/client/assets/_lang.docs._-DmaQE7lx.js +1 -0
- package/template/dist/client/assets/_lang.docs.framework._framework._-B4C4uDFp.js +1 -0
- package/template/dist/client/assets/{_lang.docs.framework._framework.index-Bu5p5Q_r.js → _lang.docs.framework._framework.index-DTg6Xd3p.js} +1 -1
- package/template/dist/client/assets/{_lang.docs.framework.index-uTDFLagP.js → _lang.docs.framework.index-BQ2enasl.js} +1 -1
- package/template/dist/client/assets/{arc-C16C7aa3.js → arc-DGPgC_QF.js} +1 -1
- package/template/dist/client/assets/{architectureDiagram-2XIMDMQ5-DgSSDH9Z.js → architectureDiagram-2XIMDMQ5-yI53_GAi.js} +1 -1
- package/template/dist/client/assets/{blockDiagram-WCTKOSBZ-Bs8e58Or.js → blockDiagram-WCTKOSBZ-C3tr24zy.js} +1 -1
- package/template/dist/client/assets/{c4Diagram-IC4MRINW-DsGaAPtm.js → c4Diagram-IC4MRINW-DOA-mowm.js} +1 -1
- package/template/dist/client/assets/channel-DzZD7dUQ.js +1 -0
- package/template/dist/client/assets/{chunk-4BX2VUAB-BQdq93Vq.js → chunk-4BX2VUAB-B6NSnNJJ.js} +1 -1
- package/template/dist/client/assets/{chunk-55IACEB6-zjp4uUiZ.js → chunk-55IACEB6-CWYwArBH.js} +1 -1
- package/template/dist/client/assets/{chunk-FMBD7UC4-CEdYlBOF.js → chunk-FMBD7UC4-DSyn2wIW.js} +1 -1
- package/template/dist/client/assets/{chunk-JSJVCQXG-CVkDw9ls.js → chunk-JSJVCQXG-D83nm5W0.js} +1 -1
- package/template/dist/client/assets/{chunk-KX2RTZJC--1vKv-mr.js → chunk-KX2RTZJC-DD7fN9e9.js} +1 -1
- package/template/dist/client/assets/{chunk-NQ4KR5QH-Cpo-W18l.js → chunk-NQ4KR5QH-C3YlYiU5.js} +1 -1
- package/template/dist/client/assets/{chunk-QZHKN3VN-BizWJuB4.js → chunk-QZHKN3VN-B7wBEuCG.js} +1 -1
- package/template/dist/client/assets/{chunk-WL4C6EOR-6lLYa9R1.js → chunk-WL4C6EOR-ByA1FloT.js} +1 -1
- package/template/dist/client/assets/classDiagram-VBA2DB6C-CRozKaUD.js +1 -0
- package/template/dist/client/assets/classDiagram-v2-RAHNMMFH-CRozKaUD.js +1 -0
- package/template/dist/client/assets/clone-CGnOEl4E.js +1 -0
- package/template/dist/client/assets/{cose-bilkent-S5V4N54A-CaD0EGPJ.js → cose-bilkent-S5V4N54A-nt_sXfWc.js} +1 -1
- package/template/dist/client/assets/{dagre-KLK3FWXG-h4F9WtDQ.js → dagre-KLK3FWXG-DUsyMTPd.js} +1 -1
- package/template/dist/client/assets/{diagram-E7M64L7V-CBUSWzH5.js → diagram-E7M64L7V-D5SAypX0.js} +1 -1
- package/template/dist/client/assets/{diagram-IFDJBPK2-C5oMubv0.js → diagram-IFDJBPK2-WhP5c8Vz.js} +1 -1
- package/template/dist/client/assets/{diagram-P4PSJMXO-DdPwwhHR.js → diagram-P4PSJMXO-AMrwIlhf.js} +1 -1
- package/template/dist/client/assets/{erDiagram-INFDFZHY-0U5A-RF0.js → erDiagram-INFDFZHY-BxifSpCV.js} +1 -1
- package/template/dist/client/assets/{flowDiagram-PKNHOUZH-CXN3pvSW.js → flowDiagram-PKNHOUZH-BMAowE9I.js} +1 -1
- package/template/dist/client/assets/{ganttDiagram-A5KZAMGK-DlovlSO7.js → ganttDiagram-A5KZAMGK-Bay-0iRq.js} +1 -1
- package/template/dist/client/assets/{gitGraphDiagram-K3NZZRJ6-Bo-Jjy7v.js → gitGraphDiagram-K3NZZRJ6-Va91W3gw.js} +1 -1
- package/template/dist/client/assets/{graph-C0TauvuO.js → graph-CbBYObK_.js} +1 -1
- package/template/dist/client/assets/{index-iATq4LEm.js → index-CF6qz2tX.js} +1 -1
- package/template/dist/client/assets/{infoDiagram-LFFYTUFH-BbvPzztn.js → infoDiagram-LFFYTUFH-Byd5C-4U.js} +1 -1
- package/template/dist/client/assets/{ishikawaDiagram-PHBUUO56-DKCMONMO.js → ishikawaDiagram-PHBUUO56-DxOKnE1v.js} +1 -1
- package/template/dist/client/assets/{journeyDiagram-4ABVD52K-D9NP_vvu.js → journeyDiagram-4ABVD52K-IRmt7RI4.js} +1 -1
- package/template/dist/client/assets/{kanban-definition-K7BYSVSG-X-u_nWxK.js → kanban-definition-K7BYSVSG-BjTVXn-R.js} +1 -1
- package/template/dist/client/assets/{layout-IeRzBrUX.js → layout-Bbx6A0bC.js} +1 -1
- package/template/dist/client/assets/{linear-DEzVUeiK.js → linear-Df2eAW4A.js} +1 -1
- package/template/dist/client/assets/{main-Csj9i19C.js → main-DqZtiCro.js} +2 -2
- package/template/dist/client/assets/{mermaid.core-CCnh2DG0.js → mermaid.core-BIoiBcAA.js} +4 -4
- package/template/dist/client/assets/{mindmap-definition-YRQLILUH-DgyN4Ft-.js → mindmap-definition-YRQLILUH-Btzz0iIP.js} +1 -1
- package/template/dist/client/assets/ordinal-Cboi1Yqb.js +1 -0
- package/template/dist/client/assets/{pieDiagram-SKSYHLDU-DDVqU_2Q.js → pieDiagram-SKSYHLDU-C2amrGtU.js} +1 -1
- package/template/dist/client/assets/{quadrantDiagram-337W2JSQ-BeUxMqle.js → quadrantDiagram-337W2JSQ-EVgH9VuN.js} +1 -1
- package/template/dist/client/assets/{react-os8EX6z1.js → react-qvbbiZob.js} +1 -1
- package/template/dist/client/assets/{requirementDiagram-Z7DCOOCP-CpzdlyEd.js → requirementDiagram-Z7DCOOCP-BkYPbRis.js} +1 -1
- package/template/dist/client/assets/{sankeyDiagram-WA2Y5GQK-CmSWF6XU.js → sankeyDiagram-WA2Y5GQK-B5EIaP-h.js} +1 -1
- package/template/dist/client/assets/{sequenceDiagram-2WXFIKYE-DarofLka.js → sequenceDiagram-2WXFIKYE-BC33VGOc.js} +1 -1
- package/template/dist/client/assets/{stateDiagram-RAJIS63D-CEio2h-7.js → stateDiagram-RAJIS63D-DiKvWUYb.js} +1 -1
- package/template/dist/client/assets/stateDiagram-v2-FVOUBMTO-DjKMPYGe.js +1 -0
- package/template/dist/client/assets/{timeline-definition-YZTLITO2-By_Wk6uc.js → timeline-definition-YZTLITO2-QiFlgbRA.js} +1 -1
- package/template/dist/client/assets/{treemap-KZPCXAKY-mKcaMbv9.js → treemap-KZPCXAKY-BOYbyS9G.js} +1 -1
- package/template/dist/client/assets/{vennDiagram-LZ73GAT5-Dx_Fh7nH.js → vennDiagram-LZ73GAT5-CqmW7j4r.js} +1 -1
- package/template/dist/client/assets/{xychartDiagram-JWTSCODW-DSAwWbBw.js → xychartDiagram-JWTSCODW-gj6oWX8l.js} +1 -1
- package/template/dist/server/assets/{Doc-B8TJBEmx.js → Doc-9tJiX5y6.js} +3 -3
- package/template/dist/server/assets/{DocsLayout-CnWgvk8u.js → DocsLayout-BTjhU_W5.js} +2 -2
- package/template/dist/server/assets/{Footer-WapWK45U.js → Footer-CefTi2yh.js} +1 -1
- package/template/dist/server/assets/{FrameworkContent-gzqT-Q1n.js → FrameworkContent-BkJvuP04.js} +2 -2
- package/template/dist/server/assets/{MarkdownHeadingContext-Iyk66Y4x.js → MarkdownHeadingContext-37oQpb36.js} +3 -3
- package/template/dist/server/assets/{PostNotFound-GKdNuzsX.js → PostNotFound-BqBZf83v.js} +1 -1
- package/template/dist/server/assets/{_basePickBy-DJ9gzwF8.js → _basePickBy-DZ3TPUta.js} +2 -2
- package/template/dist/server/assets/{_baseUniq-CezmbvU2.js → _baseUniq-DKicWTQT.js} +1 -1
- package/template/dist/server/assets/{_lang._project._version.docs-BOZ34yW7.js → _lang._project._version.docs-U-t4mk5_.js} +3 -3
- package/template/dist/server/assets/{_lang._project._version.docs._-5W2jN7Re.js → _lang._project._version.docs._-DMgnElWM.js} +5 -5
- package/template/dist/server/assets/{_lang._project._version.docs.framework._framework._-DeN_oA8l.js → _lang._project._version.docs.framework._framework._-kBw_9L-F.js} +5 -5
- package/template/dist/server/assets/{_lang._project._version.docs.framework._framework.index-jWKDCQSE.js → _lang._project._version.docs.framework._framework.index-Bsyj0DD5.js} +1 -1
- package/template/dist/server/assets/{_lang._project._version.docs.framework.index-DOT4MtjZ.js → _lang._project._version.docs.framework.index-CmLAP_Io.js} +1 -1
- package/template/dist/server/assets/{_lang._project.docs-r4V9TXuu.js → _lang._project.docs-Bb4ZZ_jr.js} +3 -3
- package/template/dist/server/assets/{_lang._project.docs._-Bge7JaYE.js → _lang._project.docs._-ChrpJ61j.js} +5 -5
- package/template/dist/server/assets/{_lang.blog-DJOfiyA8.js → _lang.blog-8j6IvzvQ.js} +2 -2
- package/template/dist/server/assets/{_lang.blog._-yJSqbX08.js → _lang.blog._-BPzP97Ac.js} +2 -2
- package/template/dist/server/assets/{_lang.blog._-C7iqMj9O.js → _lang.blog._-DNX8UglA.js} +2 -2
- package/template/dist/server/assets/{_lang.blog.index-Df_6_IKx.js → _lang.blog.index-CeZnMJBi.js} +1 -1
- package/template/dist/server/assets/{_lang.blog.index-CrdyROhK.js → _lang.blog.index-DzVKqoC4.js} +2 -2
- package/template/dist/server/assets/{_lang.docs-Jwt4deTW.js → _lang.docs-B4StnHMb.js} +3 -3
- package/template/dist/server/assets/{_lang.docs._-D_DdKLAV.js → _lang.docs._--c0In1AT.js} +5 -5
- package/template/dist/server/assets/{_lang.docs.framework._framework._-BkQaZ_1f.js → _lang.docs.framework._framework._-Be0U7cDg.js} +5 -5
- package/template/dist/server/assets/{_lang.docs.framework._framework.index-BLx8p8IS.js → _lang.docs.framework._framework.index-BZ512aSk.js} +1 -1
- package/template/dist/server/assets/{_lang.docs.framework.index-BytQ_q8T.js → _lang.docs.framework.index-U8z3j4kz.js} +1 -1
- package/template/dist/server/assets/{_tanstack-start-manifest_v-RX6ItZ5S.js → _tanstack-start-manifest_v-DXpQ8503.js} +1 -1
- package/template/dist/server/assets/{arc-BwftnT5H.js → arc-B4h6h_n6.js} +1 -1
- package/template/dist/server/assets/{architecture-PBZL5I3N-KbDVC6gM.js → architecture-PBZL5I3N-CUwqLXkR.js} +6 -6
- package/template/dist/server/assets/{architectureDiagram-2XIMDMQ5-BoLvWxb3.js → architectureDiagram-2XIMDMQ5-CuCoxdBe.js} +6 -6
- package/template/dist/server/assets/{blockDiagram-WCTKOSBZ-GPFcXs-f.js → blockDiagram-WCTKOSBZ-D5PsUOim.js} +6 -6
- package/template/dist/server/assets/{c4Diagram-IC4MRINW-EQwQCspo.js → c4Diagram-IC4MRINW-CXy5xO3o.js} +2 -2
- package/template/dist/server/assets/{channel-CxvwuPH7.js → channel-D0l-mWaF.js} +1 -1
- package/template/dist/server/assets/{chunk-4BX2VUAB-DUgcw5ei.js → chunk-4BX2VUAB-M7FVHMss.js} +1 -1
- package/template/dist/server/assets/{chunk-55IACEB6-Cn15uD91.js → chunk-55IACEB6-D_gDAje5.js} +1 -1
- package/template/dist/server/assets/{chunk-FMBD7UC4-Ck3iyLPu.js → chunk-FMBD7UC4-B5Bebx-Y.js} +1 -1
- package/template/dist/server/assets/{chunk-JSJVCQXG-VAT8yncE.js → chunk-JSJVCQXG-DxBkq-uB.js} +1 -1
- package/template/dist/server/assets/{chunk-KX2RTZJC-B1bd2VmA.js → chunk-KX2RTZJC-BMHm1EGi.js} +1 -1
- package/template/dist/server/assets/{chunk-NQ4KR5QH-CR67GG9C.js → chunk-NQ4KR5QH-Cp28pTwT.js} +3 -3
- package/template/dist/server/assets/{chunk-QZHKN3VN-B9SSazM4.js → chunk-QZHKN3VN-Bq5GZqaR.js} +1 -1
- package/template/dist/server/assets/{chunk-WL4C6EOR-DZ4Pjuao.js → chunk-WL4C6EOR-C9Nj5GdW.js} +5 -5
- package/template/dist/server/assets/{classDiagram-VBA2DB6C-CA6_4Wb2.js → classDiagram-VBA2DB6C-CUchv9T5.js} +6 -6
- package/template/dist/server/assets/{classDiagram-v2-RAHNMMFH-CA6_4Wb2.js → classDiagram-v2-RAHNMMFH-CUchv9T5.js} +6 -6
- package/template/dist/server/assets/{clone-DJHP_iVy.js → clone-CJcTi58S.js} +1 -1
- package/template/dist/server/assets/{cose-bilkent-S5V4N54A-DtU-cN6W.js → cose-bilkent-S5V4N54A-CxvCMhN_.js} +1 -1
- package/template/dist/server/assets/{dagre-KLK3FWXG-yZYrVU4p.js → dagre-KLK3FWXG-B5bQP7FL.js} +6 -6
- package/template/dist/server/assets/{diagram-E7M64L7V-8Yyz0aw0.js → diagram-E7M64L7V-NjHca90S.js} +8 -8
- package/template/dist/server/assets/{diagram-IFDJBPK2-DcxFYI3M.js → diagram-IFDJBPK2-CoTCfBKd.js} +6 -6
- package/template/dist/server/assets/{diagram-P4PSJMXO-CehxUcI0.js → diagram-P4PSJMXO-DHvGgYjH.js} +6 -6
- package/template/dist/server/assets/{erDiagram-INFDFZHY-Bu2p1_Pj.js → erDiagram-INFDFZHY-01crajKr.js} +4 -4
- package/template/dist/server/assets/{flowDiagram-PKNHOUZH-B_eKR7I0.js → flowDiagram-PKNHOUZH-BkUQ_vxg.js} +6 -6
- package/template/dist/server/assets/{ganttDiagram-A5KZAMGK-DP6YEZof.js → ganttDiagram-A5KZAMGK-DvrO-w2P.js} +2 -2
- package/template/dist/server/assets/{gitGraph-HDMCJU4V-Bt0qhVL4.js → gitGraph-HDMCJU4V-h9JNaxB7.js} +6 -6
- package/template/dist/server/assets/{gitGraphDiagram-K3NZZRJ6-DwvkdYrg.js → gitGraphDiagram-K3NZZRJ6-BoKm6Fm-.js} +7 -7
- package/template/dist/server/assets/{graph-BVFNe_k5.js → graph-BoxbfI7Z.js} +2 -2
- package/template/dist/server/assets/{index-DvBGSZeA.js → index-Jfzi6SZW.js} +2 -2
- package/template/dist/server/assets/{info-3K5VOQVL-CFejRnvB.js → info-3K5VOQVL-DgaSHqkS.js} +6 -6
- package/template/dist/server/assets/{infoDiagram-LFFYTUFH-D0v9uyXI.js → infoDiagram-LFFYTUFH-DgV5W8-I.js} +5 -5
- package/template/dist/server/assets/{ishikawaDiagram-PHBUUO56-DZumspL4.js → ishikawaDiagram-PHBUUO56-CqlMQ0Fq.js} +1 -1
- package/template/dist/server/assets/{journeyDiagram-4ABVD52K-nRp_-qZp.js → journeyDiagram-4ABVD52K-D6ySTub8.js} +4 -4
- package/template/dist/server/assets/{kanban-definition-K7BYSVSG-BMKyyzjt.js → kanban-definition-K7BYSVSG-BT8m7Cwk.js} +2 -2
- package/template/dist/server/assets/{layout-mpiN5R-5.js → layout-CkYcErfn.js} +4 -4
- package/template/dist/server/assets/{linear-CqNYgjEx.js → linear-F_0dWGZL.js} +1 -1
- package/template/dist/server/assets/{mermaid-parser.core-B8Uu3QZY.js → mermaid-parser.core-q5MdUJuo.js} +11 -11
- package/template/dist/server/assets/{mermaid.core-BI3nMhNO.js → mermaid.core-DOWTODR1.js} +31 -31
- package/template/dist/server/assets/{mindmap-definition-YRQLILUH-DCoFqLPh.js → mindmap-definition-YRQLILUH-BQxlQqn-.js} +3 -3
- package/template/dist/server/assets/{ordinal-Bcam90FY.js → ordinal-CxptdPJm.js} +1 -1
- package/template/dist/server/assets/{packet-RMMSAZCW-djgonfKN.js → packet-RMMSAZCW-D8FkLZuP.js} +6 -6
- package/template/dist/server/assets/{pie-UPGHQEXC-Dug2t-PE.js → pie-UPGHQEXC-Diw2fHLk.js} +6 -6
- package/template/dist/server/assets/{pieDiagram-SKSYHLDU-CS0_hW4w.js → pieDiagram-SKSYHLDU-B1J4UJZ7.js} +8 -8
- package/template/dist/server/assets/{quadrantDiagram-337W2JSQ-BpQNM0zu.js → quadrantDiagram-337W2JSQ-BvjKLapg.js} +2 -2
- package/template/dist/server/assets/{radar-KQ55EAFF-3ir2W9Wi.js → radar-KQ55EAFF-CcBdPU3n.js} +6 -6
- package/template/dist/server/assets/{requirementDiagram-Z7DCOOCP-D92RyjV4.js → requirementDiagram-Z7DCOOCP-Bgr_wnAs.js} +3 -3
- package/template/dist/server/assets/{router-DPPgDicW.js → router-DxwPl-Dc.js} +18 -18
- package/template/dist/server/assets/{sankeyDiagram-WA2Y5GQK-DCPRB-xO.js → sankeyDiagram-WA2Y5GQK-B0UwtyW3.js} +2 -2
- package/template/dist/server/assets/{sequenceDiagram-2WXFIKYE-C1ab2VvU.js → sequenceDiagram-2WXFIKYE-BbxQJHjO.js} +3 -3
- package/template/dist/server/assets/{stateDiagram-RAJIS63D-GhG1G3ff.js → stateDiagram-RAJIS63D-Cg-uJ_UO.js} +8 -8
- package/template/dist/server/assets/{stateDiagram-v2-FVOUBMTO-C-KtMadV.js → stateDiagram-v2-FVOUBMTO-BWVPrqfa.js} +4 -4
- package/template/dist/server/assets/{timeline-definition-YZTLITO2-DyfAQCd4.js → timeline-definition-YZTLITO2-DCSJT2WT.js} +2 -2
- package/template/dist/server/assets/{treemap-KZPCXAKY-Cn0Cw4Cl.js → treemap-KZPCXAKY-a0nhlKgx.js} +6 -6
- package/template/dist/server/assets/{vennDiagram-LZ73GAT5-D2Ak5JUa.js → vennDiagram-LZ73GAT5-Bk2HQEQq.js} +1 -1
- package/template/dist/server/assets/{xychartDiagram-JWTSCODW-DqoBOs1L.js → xychartDiagram-JWTSCODW-C4svHkt_.js} +3 -3
- package/template/dist/server/server.js +7 -6
- package/admin/dist/server/assets/auth-dSAIPjBw.js +0 -72
- package/template/dist/client/assets/_lang-B3tRf7os.js +0 -1
- package/template/dist/client/assets/_lang._project-CH0inpmY.js +0 -1
- package/template/dist/client/assets/_lang._project._version-CESvrqds.js +0 -1
- package/template/dist/client/assets/_lang._project._version.docs._-BexMyJr9.js +0 -1
- package/template/dist/client/assets/_lang._project._version.docs.framework._framework._-BbQgUWTH.js +0 -1
- package/template/dist/client/assets/_lang._project.docs._-R9bOn492.js +0 -1
- package/template/dist/client/assets/_lang.blog-BViCs72M.js +0 -1
- package/template/dist/client/assets/_lang.blog-DhVkwYEk.js +0 -1
- package/template/dist/client/assets/_lang.blog._-BHdaHDBU.js +0 -1
- package/template/dist/client/assets/_lang.blog.index-CELEUrkj.js +0 -1
- package/template/dist/client/assets/_lang.docs._-axvS_dfl.js +0 -1
- package/template/dist/client/assets/_lang.docs.framework._framework._-D2FAQ0gW.js +0 -1
- package/template/dist/client/assets/channel-Clrp6Lr4.js +0 -1
- package/template/dist/client/assets/classDiagram-VBA2DB6C-Beq6_jEy.js +0 -1
- package/template/dist/client/assets/classDiagram-v2-RAHNMMFH-Beq6_jEy.js +0 -1
- package/template/dist/client/assets/clone-BbBu6MzK.js +0 -1
- package/template/dist/client/assets/ordinal-BENe2yWM.js +0 -1
- package/template/dist/client/assets/stateDiagram-v2-FVOUBMTO-CbfK0_BD.js +0 -1
- package/admin/dist/server/assets/{error-CASJ5tIm.js → error-CxLURp5B.js} +0 -0
- package/admin/dist/server/assets/{job-manager-D9Ab9hgu.js → job-manager-3L0YHdRR.js} +0 -0
- package/admin/dist/server/assets/{migrator-ZpVZslbq.js → migrator-6o36lk3A.js} +0 -0
- package/admin/dist/server/assets/{start-BiybVoR2.js → start-BYRsG6Vf.js} +0 -0
- package/admin/dist/server/assets/{string-B4XlckmJ.js → string-Dgr41sRK.js} +0 -0
- package/admin/dist/server/assets/{useNavigate-0H08s_Q2.js → useNavigate-CDLfQmZd.js} +0 -0
- package/dist/{assemble-CP2BRYQJ.js → assemble-S3MWVLBI.js} +1 -1
- package/dist/{status-AGZDXOTZ.js → status-NX47XZIU.js} +1 -1
- package/dist/{translate-A5X6MX4Y.js → translate-AGUNMZMQ.js} +1 -1
|
@@ -37,53 +37,5 @@ export const getSession = createServerFn({ method: 'GET' }).handler(async () =>
|
|
|
37
37
|
headers: request.headers,
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
// Seed admin user on first access if no users exist
|
|
41
|
-
await seedAdminIfNeeded(auth);
|
|
42
|
-
|
|
43
40
|
return session;
|
|
44
41
|
});
|
|
45
|
-
|
|
46
|
-
let _seeded = false;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Seed a default admin user if none exists.
|
|
50
|
-
* Only runs once per server lifetime.
|
|
51
|
-
*/
|
|
52
|
-
async function seedAdminIfNeeded(auth: any) {
|
|
53
|
-
if (_seeded) return;
|
|
54
|
-
_seeded = true;
|
|
55
|
-
|
|
56
|
-
try {
|
|
57
|
-
const existing = await auth.api.listUsers({
|
|
58
|
-
query: { limit: 1 },
|
|
59
|
-
headers: new Headers(),
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
if (existing?.users && existing.users.length > 0) {
|
|
63
|
-
return; // Users exist, skip seeding
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Create the default admin user
|
|
67
|
-
const result = await auth.api.signUpEmail({
|
|
68
|
-
body: {
|
|
69
|
-
email: 'admin@docs-i18n.local',
|
|
70
|
-
password: 'admin',
|
|
71
|
-
name: 'Admin',
|
|
72
|
-
username: 'admin',
|
|
73
|
-
},
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
if (result?.user?.id) {
|
|
77
|
-
await auth.api.setRole({
|
|
78
|
-
body: {
|
|
79
|
-
userId: result.user.id,
|
|
80
|
-
role: 'admin',
|
|
81
|
-
},
|
|
82
|
-
});
|
|
83
|
-
console.log('[auth] Default admin user created (username: admin, password: admin)');
|
|
84
|
-
}
|
|
85
|
-
} catch (err) {
|
|
86
|
-
// Swallow errors — seeding is best-effort
|
|
87
|
-
console.warn('[auth] Admin seed skipped:', err instanceof Error ? err.message : err);
|
|
88
|
-
}
|
|
89
|
-
}
|
package/admin/vite.config.ts
CHANGED
|
@@ -19,7 +19,7 @@ if (isCfBuild) {
|
|
|
19
19
|
plugins.unshift(cloudflare({ viteEnvironment: { name: 'ssr' } }));
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export default defineConfig({
|
|
22
|
+
export default defineConfig(({ command }) => ({
|
|
23
23
|
plugins,
|
|
24
24
|
// Bundle all deps into server build so it can run without node_modules
|
|
25
25
|
// (Only for non-CF builds; CF plugin manages its own SSR environment)
|
|
@@ -31,10 +31,14 @@ export default defineConfig({
|
|
|
31
31
|
external: [/^node:/, 'better-sqlite3'],
|
|
32
32
|
},
|
|
33
33
|
},
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
// Only bundle all deps for production builds — during dev,
|
|
35
|
+
// Node.js resolves deps natively (avoids CJS/ESM issues in Vite's module runner)
|
|
36
|
+
...(command === 'build' && {
|
|
37
|
+
resolve: {
|
|
38
|
+
noExternal: true,
|
|
39
|
+
},
|
|
40
|
+
}),
|
|
37
41
|
},
|
|
38
42
|
},
|
|
39
43
|
}),
|
|
40
|
-
});
|
|
44
|
+
}));
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import {
|
|
2
|
+
flattenSources
|
|
3
|
+
} from "./chunk-TRURQFP4.js";
|
|
4
|
+
|
|
5
|
+
// src/plugins/runner.ts
|
|
6
|
+
import { existsSync, readFileSync, readdirSync, writeFileSync } from "fs";
|
|
7
|
+
import { join, resolve } from "path";
|
|
8
|
+
import matter from "gray-matter";
|
|
9
|
+
function walkFiles(dir, extensions) {
|
|
10
|
+
const results = [];
|
|
11
|
+
if (!existsSync(dir)) return results;
|
|
12
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
13
|
+
const fullPath = join(dir, entry.name);
|
|
14
|
+
if (entry.isDirectory()) {
|
|
15
|
+
results.push(...walkFiles(fullPath, extensions));
|
|
16
|
+
} else if (extensions.some((ext) => entry.name.endsWith(ext))) {
|
|
17
|
+
results.push(fullPath);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return results;
|
|
21
|
+
}
|
|
22
|
+
function runBeforeScan(plugins, config, opts) {
|
|
23
|
+
const beforeScanPlugins = plugins.filter((p) => p.beforeScan);
|
|
24
|
+
if (beforeScanPlugins.length === 0) return 0;
|
|
25
|
+
const sources = flattenSources(config);
|
|
26
|
+
const extensions = (config.include ?? ["**/*.mdx", "**/*.md"]).map(
|
|
27
|
+
(p) => p.replace("**/*", "")
|
|
28
|
+
);
|
|
29
|
+
let modifiedCount = 0;
|
|
30
|
+
for (const source of sources) {
|
|
31
|
+
if (opts?.project && source.project !== opts.project) continue;
|
|
32
|
+
if (opts?.version && source.version !== opts.version) continue;
|
|
33
|
+
const enDir = resolve(source.sourcePath);
|
|
34
|
+
if (!existsSync(enDir)) {
|
|
35
|
+
console.log(` [SKIP] ${source.versionKey}: source dir not found`);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const files = walkFiles(enDir, extensions);
|
|
39
|
+
for (const filePath of files) {
|
|
40
|
+
const content = readFileSync(filePath, "utf-8");
|
|
41
|
+
let parsed;
|
|
42
|
+
try {
|
|
43
|
+
parsed = matter(content);
|
|
44
|
+
} catch {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const readFile = (refPath) => {
|
|
48
|
+
const fromDir = filePath.substring(0, filePath.lastIndexOf("/"));
|
|
49
|
+
const candidates = [
|
|
50
|
+
resolve(fromDir, refPath),
|
|
51
|
+
resolve(enDir, refPath),
|
|
52
|
+
resolve(process.cwd(), refPath)
|
|
53
|
+
];
|
|
54
|
+
for (const candidate of candidates) {
|
|
55
|
+
if (existsSync(candidate)) {
|
|
56
|
+
return readFileSync(candidate, "utf-8");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
};
|
|
61
|
+
let modified = content;
|
|
62
|
+
let wasModified = false;
|
|
63
|
+
for (const plugin of beforeScanPlugins) {
|
|
64
|
+
const result = plugin.beforeScan({
|
|
65
|
+
filePath,
|
|
66
|
+
content: modified,
|
|
67
|
+
frontmatter: parsed.data,
|
|
68
|
+
readFile,
|
|
69
|
+
project: source.project,
|
|
70
|
+
version: source.version
|
|
71
|
+
});
|
|
72
|
+
if (typeof result === "string") {
|
|
73
|
+
modified = result;
|
|
74
|
+
wasModified = true;
|
|
75
|
+
try {
|
|
76
|
+
parsed = matter(modified);
|
|
77
|
+
} catch {
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (wasModified) {
|
|
82
|
+
const relPath = filePath.slice(enDir.length + 1);
|
|
83
|
+
if (opts?.dryRun) {
|
|
84
|
+
console.log(` [DRY-RUN] ${source.versionKey}/${relPath}`);
|
|
85
|
+
} else {
|
|
86
|
+
writeFileSync(filePath, modified, "utf-8");
|
|
87
|
+
console.log(` [RESOLVED] ${source.versionKey}/${relPath}`);
|
|
88
|
+
}
|
|
89
|
+
modifiedCount++;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return modifiedCount;
|
|
94
|
+
}
|
|
95
|
+
function createShouldScanBody(plugins) {
|
|
96
|
+
const hooks = plugins.filter((p) => p.shouldScanBody);
|
|
97
|
+
if (hooks.length === 0) return void 0;
|
|
98
|
+
return (ctx) => {
|
|
99
|
+
for (const plugin of hooks) {
|
|
100
|
+
if (plugin.shouldScanBody(ctx) === false) {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return true;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export {
|
|
109
|
+
runBeforeScan,
|
|
110
|
+
createShouldScanBody
|
|
111
|
+
};
|
package/dist/cli.js
CHANGED
|
@@ -144,6 +144,8 @@ Commands:
|
|
|
144
144
|
translate Translate content to target language(s)
|
|
145
145
|
assemble Assemble translated files from EN + cache
|
|
146
146
|
rescan Rescan source files and clean orphans
|
|
147
|
+
resolve Run beforeScan plugins (e.g., resolve ref directives)
|
|
148
|
+
pipeline Run full pipeline: sync \u2192 resolve \u2192 rescan \u2192 translate \u2192 upload \u2192 status
|
|
147
149
|
status Show translation coverage
|
|
148
150
|
admin Start admin dashboard
|
|
149
151
|
site Manage documentation site (dev, build, upload, deploy) [--custom]
|
|
@@ -159,6 +161,9 @@ Options:
|
|
|
159
161
|
--max-tokens <n> Max output tokens (default: 16384)
|
|
160
162
|
--context-length <n> Model context window (default: 32768)
|
|
161
163
|
--dry-run Preview without making changes
|
|
164
|
+
--skip-sync Pipeline: skip sync step
|
|
165
|
+
--skip-translate Pipeline: skip translate step
|
|
166
|
+
--skip-upload Pipeline: skip upload step
|
|
162
167
|
--port <n> Admin dashboard port (default: 3456) / Site dev port (default: 3000)
|
|
163
168
|
`);
|
|
164
169
|
return;
|
|
@@ -176,7 +181,7 @@ Options:
|
|
|
176
181
|
console.error("Error: --lang is required");
|
|
177
182
|
process.exit(1);
|
|
178
183
|
}
|
|
179
|
-
const { translate } = await import("./translate-
|
|
184
|
+
const { translate } = await import("./translate-AGUNMZMQ.js");
|
|
180
185
|
await translate(config, {
|
|
181
186
|
lang,
|
|
182
187
|
project: getOpt("project") || void 0,
|
|
@@ -193,7 +198,7 @@ Options:
|
|
|
193
198
|
break;
|
|
194
199
|
}
|
|
195
200
|
case "assemble": {
|
|
196
|
-
const { assembleAll } = await import("./assemble-
|
|
201
|
+
const { assembleAll } = await import("./assemble-S3MWVLBI.js");
|
|
197
202
|
await assembleAll(config, {
|
|
198
203
|
project: getOpt("project") || void 0,
|
|
199
204
|
version: getOpt("version") || void 0,
|
|
@@ -202,15 +207,49 @@ Options:
|
|
|
202
207
|
break;
|
|
203
208
|
}
|
|
204
209
|
case "rescan": {
|
|
205
|
-
const { rescan } = await import("./rescan-
|
|
210
|
+
const { rescan } = await import("./rescan-7XDHUNH5.js");
|
|
211
|
+
const plugins = config.plugins ?? [];
|
|
212
|
+
const shouldScanBody = plugins.length > 0 ? (await import("./runner-KUGSO4CL.js")).createShouldScanBody(plugins) : void 0;
|
|
206
213
|
await rescan(config, {
|
|
207
214
|
project: getOpt("project") || void 0,
|
|
208
|
-
version: getOpt("version") || void 0
|
|
215
|
+
version: getOpt("version") || void 0,
|
|
216
|
+
shouldScanBody
|
|
217
|
+
});
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
case "resolve": {
|
|
221
|
+
const resolvePlugins = config.plugins ?? [];
|
|
222
|
+
if (resolvePlugins.length === 0) {
|
|
223
|
+
console.log("No plugins configured. Nothing to resolve.");
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
const { runBeforeScan } = await import("./runner-KUGSO4CL.js");
|
|
227
|
+
const modified = runBeforeScan(resolvePlugins, config, {
|
|
228
|
+
project: getOpt("project") || void 0,
|
|
229
|
+
version: getOpt("version") || void 0,
|
|
230
|
+
dryRun: hasFlag("dry-run")
|
|
231
|
+
});
|
|
232
|
+
console.log(`
|
|
233
|
+
${modified} file(s) resolved`);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case "pipeline": {
|
|
237
|
+
const { pipeline } = await import("./pipeline-3XGFR4QL.js");
|
|
238
|
+
await pipeline(config, {
|
|
239
|
+
skipSync: hasFlag("skip-sync"),
|
|
240
|
+
skipTranslate: hasFlag("skip-translate"),
|
|
241
|
+
skipUpload: hasFlag("skip-upload"),
|
|
242
|
+
dryRun: hasFlag("dry-run"),
|
|
243
|
+
project: getOpt("project") || void 0,
|
|
244
|
+
version: getOpt("version") || void 0,
|
|
245
|
+
lang: getOpt("lang") || void 0,
|
|
246
|
+
max: getOpt("max") ? Number(getOpt("max")) : void 0,
|
|
247
|
+
concurrency: getOpt("concurrency") ? Number(getOpt("concurrency")) : void 0
|
|
209
248
|
});
|
|
210
249
|
break;
|
|
211
250
|
}
|
|
212
251
|
case "status": {
|
|
213
|
-
const { status } = await import("./status-
|
|
252
|
+
const { status } = await import("./status-NX47XZIU.js");
|
|
214
253
|
await status(config, { lang: getOpt("lang") || void 0 });
|
|
215
254
|
break;
|
|
216
255
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,10 +2,44 @@ import * as unified from 'unified';
|
|
|
2
2
|
import * as mdast from 'mdast';
|
|
3
3
|
import { Root } from 'hast';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Plugin interface for docs-i18n.
|
|
7
|
+
*
|
|
8
|
+
* Plugins can hook into the scan pipeline to transform source files
|
|
9
|
+
* before they are parsed and to control which parts of a file are scanned.
|
|
10
|
+
*/
|
|
11
|
+
interface DocsI18nPlugin {
|
|
12
|
+
name: string;
|
|
13
|
+
/**
|
|
14
|
+
* Called before scanning a source file.
|
|
15
|
+
* Receives the file content and frontmatter, and can return modified content.
|
|
16
|
+
* If the plugin returns a string, the file content is replaced with that string.
|
|
17
|
+
* If undefined/void is returned, the file is left unchanged.
|
|
18
|
+
*/
|
|
19
|
+
beforeScan?: (ctx: {
|
|
20
|
+
filePath: string;
|
|
21
|
+
content: string;
|
|
22
|
+
frontmatter: Record<string, any>;
|
|
23
|
+
readFile: (refPath: string) => string | null;
|
|
24
|
+
project: string;
|
|
25
|
+
version: string;
|
|
26
|
+
}) => string | undefined | void;
|
|
27
|
+
/**
|
|
28
|
+
* Called to determine whether a file's body should be scanned for translation nodes.
|
|
29
|
+
* If any plugin returns false, only frontmatter fields will be scanned.
|
|
30
|
+
* If all plugins return true (or don't implement this hook), the full body is scanned.
|
|
31
|
+
*/
|
|
32
|
+
shouldScanBody?: (ctx: {
|
|
33
|
+
filePath: string;
|
|
34
|
+
frontmatter: Record<string, any>;
|
|
35
|
+
}) => boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
5
38
|
/**
|
|
6
39
|
* docs-i18n configuration schema.
|
|
7
40
|
* Each project provides a `docs-i18n.config.ts` file.
|
|
8
41
|
*/
|
|
42
|
+
|
|
9
43
|
interface ProjectConfig {
|
|
10
44
|
/** Map of version → source directory (relative to project root) */
|
|
11
45
|
sources: Record<string, string>;
|
|
@@ -37,6 +71,15 @@ interface DocsI18nConfig {
|
|
|
37
71
|
version: string;
|
|
38
72
|
lang: string;
|
|
39
73
|
}) => Promise<void>;
|
|
74
|
+
/** Shell command to run before pipeline (e.g., sync upstream content) */
|
|
75
|
+
syncScript?: string;
|
|
76
|
+
/** Plugins for the scan pipeline */
|
|
77
|
+
plugins?: DocsI18nPlugin[];
|
|
78
|
+
/** Cloudflare D1 database configuration for remote upload */
|
|
79
|
+
d1?: {
|
|
80
|
+
database: string;
|
|
81
|
+
accountId?: string;
|
|
82
|
+
};
|
|
40
83
|
}
|
|
41
84
|
declare function defineConfig(config: DocsI18nConfig): DocsI18nConfig;
|
|
42
85
|
/** Load config from file */
|
|
@@ -296,4 +339,68 @@ declare function normalize(content: string): string;
|
|
|
296
339
|
*/
|
|
297
340
|
declare function getPackageVersion(): string;
|
|
298
341
|
|
|
299
|
-
|
|
342
|
+
/**
|
|
343
|
+
* Plugin execution engine.
|
|
344
|
+
*
|
|
345
|
+
* Provides functions to run plugin hooks across source files.
|
|
346
|
+
*/
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Run beforeScan hooks for all plugins on all source files.
|
|
350
|
+
*
|
|
351
|
+
* Walks every source directory, reads each file, runs every plugin's
|
|
352
|
+
* beforeScan hook, and writes back modified content.
|
|
353
|
+
*
|
|
354
|
+
* Returns the number of files that were modified.
|
|
355
|
+
*/
|
|
356
|
+
declare function runBeforeScan(plugins: DocsI18nPlugin[], config: DocsI18nConfig, opts?: {
|
|
357
|
+
project?: string;
|
|
358
|
+
version?: string;
|
|
359
|
+
dryRun?: boolean;
|
|
360
|
+
}): number;
|
|
361
|
+
/**
|
|
362
|
+
* Create a shouldScanBody function that checks all plugins.
|
|
363
|
+
*
|
|
364
|
+
* Returns a function that takes a file path and frontmatter and returns
|
|
365
|
+
* false if any plugin says the body should not be scanned.
|
|
366
|
+
*/
|
|
367
|
+
declare function createShouldScanBody(plugins: DocsI18nPlugin[]): ((ctx: {
|
|
368
|
+
filePath: string;
|
|
369
|
+
frontmatter: Record<string, any>;
|
|
370
|
+
}) => boolean) | undefined;
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* TanStack ref resolver plugin.
|
|
374
|
+
*
|
|
375
|
+
* Resolves `ref` frontmatter directives in markdown files, following ref chains
|
|
376
|
+
* up to a maximum depth. Applies `replace{}` text substitutions and section
|
|
377
|
+
* replacements from the origin file's frontmatter.
|
|
378
|
+
*
|
|
379
|
+
* Ported from tanstack-i18n-docs/scripts/resolve-refs.ts
|
|
380
|
+
*/
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Create the TanStack ref resolver plugin.
|
|
384
|
+
*
|
|
385
|
+
* This plugin resolves `ref` frontmatter directives by following ref chains
|
|
386
|
+
* and applying replace/section substitutions.
|
|
387
|
+
*/
|
|
388
|
+
declare function tanstackRefPlugin(): DocsI18nPlugin;
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Next.js source filter plugin.
|
|
392
|
+
*
|
|
393
|
+
* Files with a `source:` field in frontmatter reference external content
|
|
394
|
+
* that will be fetched at build time. Their body should not be scanned
|
|
395
|
+
* for translation since it's just a placeholder / empty.
|
|
396
|
+
*/
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Create the Next.js source filter plugin.
|
|
400
|
+
*
|
|
401
|
+
* When a file has `source:` in its frontmatter, shouldScanBody returns false
|
|
402
|
+
* so only translatable frontmatter fields (title, description, etc.) are scanned.
|
|
403
|
+
*/
|
|
404
|
+
declare function nextjsSourcePlugin(): DocsI18nPlugin;
|
|
405
|
+
|
|
406
|
+
export { type DocsI18nConfig, type DocsI18nPlugin, type Heading, type ProjectConfig, type RenderedMarkdown, TranslationCache, assemble, createShouldScanBody, defineConfig, extractHeadings, extractTranslatableFields, flattenSources, getPackageVersion, loadConfig, nextjsSourcePlugin, normalize, parseMdx, processor, reconstructFrontmatter, renderMarkdown, runBeforeScan, tanstackRefPlugin };
|
package/dist/index.js
CHANGED
|
@@ -617,18 +617,241 @@ function getPackageVersion() {
|
|
|
617
617
|
}
|
|
618
618
|
return "unknown";
|
|
619
619
|
}
|
|
620
|
+
|
|
621
|
+
// src/plugins/runner.ts
|
|
622
|
+
import { existsSync, readFileSync as readFileSync2, readdirSync, writeFileSync } from "fs";
|
|
623
|
+
import { join, resolve as resolve2 } from "path";
|
|
624
|
+
import matter from "gray-matter";
|
|
625
|
+
function walkFiles(dir, extensions) {
|
|
626
|
+
const results = [];
|
|
627
|
+
if (!existsSync(dir)) return results;
|
|
628
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
629
|
+
const fullPath = join(dir, entry.name);
|
|
630
|
+
if (entry.isDirectory()) {
|
|
631
|
+
results.push(...walkFiles(fullPath, extensions));
|
|
632
|
+
} else if (extensions.some((ext) => entry.name.endsWith(ext))) {
|
|
633
|
+
results.push(fullPath);
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
return results;
|
|
637
|
+
}
|
|
638
|
+
function runBeforeScan(plugins, config, opts) {
|
|
639
|
+
const beforeScanPlugins = plugins.filter((p) => p.beforeScan);
|
|
640
|
+
if (beforeScanPlugins.length === 0) return 0;
|
|
641
|
+
const sources = flattenSources(config);
|
|
642
|
+
const extensions = (config.include ?? ["**/*.mdx", "**/*.md"]).map(
|
|
643
|
+
(p) => p.replace("**/*", "")
|
|
644
|
+
);
|
|
645
|
+
let modifiedCount = 0;
|
|
646
|
+
for (const source of sources) {
|
|
647
|
+
if (opts?.project && source.project !== opts.project) continue;
|
|
648
|
+
if (opts?.version && source.version !== opts.version) continue;
|
|
649
|
+
const enDir = resolve2(source.sourcePath);
|
|
650
|
+
if (!existsSync(enDir)) {
|
|
651
|
+
console.log(` [SKIP] ${source.versionKey}: source dir not found`);
|
|
652
|
+
continue;
|
|
653
|
+
}
|
|
654
|
+
const files = walkFiles(enDir, extensions);
|
|
655
|
+
for (const filePath of files) {
|
|
656
|
+
const content = readFileSync2(filePath, "utf-8");
|
|
657
|
+
let parsed;
|
|
658
|
+
try {
|
|
659
|
+
parsed = matter(content);
|
|
660
|
+
} catch {
|
|
661
|
+
continue;
|
|
662
|
+
}
|
|
663
|
+
const readFile = (refPath) => {
|
|
664
|
+
const fromDir = filePath.substring(0, filePath.lastIndexOf("/"));
|
|
665
|
+
const candidates = [
|
|
666
|
+
resolve2(fromDir, refPath),
|
|
667
|
+
resolve2(enDir, refPath),
|
|
668
|
+
resolve2(process.cwd(), refPath)
|
|
669
|
+
];
|
|
670
|
+
for (const candidate of candidates) {
|
|
671
|
+
if (existsSync(candidate)) {
|
|
672
|
+
return readFileSync2(candidate, "utf-8");
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
return null;
|
|
676
|
+
};
|
|
677
|
+
let modified = content;
|
|
678
|
+
let wasModified = false;
|
|
679
|
+
for (const plugin of beforeScanPlugins) {
|
|
680
|
+
const result = plugin.beforeScan({
|
|
681
|
+
filePath,
|
|
682
|
+
content: modified,
|
|
683
|
+
frontmatter: parsed.data,
|
|
684
|
+
readFile,
|
|
685
|
+
project: source.project,
|
|
686
|
+
version: source.version
|
|
687
|
+
});
|
|
688
|
+
if (typeof result === "string") {
|
|
689
|
+
modified = result;
|
|
690
|
+
wasModified = true;
|
|
691
|
+
try {
|
|
692
|
+
parsed = matter(modified);
|
|
693
|
+
} catch {
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
if (wasModified) {
|
|
698
|
+
const relPath = filePath.slice(enDir.length + 1);
|
|
699
|
+
if (opts?.dryRun) {
|
|
700
|
+
console.log(` [DRY-RUN] ${source.versionKey}/${relPath}`);
|
|
701
|
+
} else {
|
|
702
|
+
writeFileSync(filePath, modified, "utf-8");
|
|
703
|
+
console.log(` [RESOLVED] ${source.versionKey}/${relPath}`);
|
|
704
|
+
}
|
|
705
|
+
modifiedCount++;
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
return modifiedCount;
|
|
710
|
+
}
|
|
711
|
+
function createShouldScanBody(plugins) {
|
|
712
|
+
const hooks = plugins.filter((p) => p.shouldScanBody);
|
|
713
|
+
if (hooks.length === 0) return void 0;
|
|
714
|
+
return (ctx) => {
|
|
715
|
+
for (const plugin of hooks) {
|
|
716
|
+
if (plugin.shouldScanBody(ctx) === false) {
|
|
717
|
+
return false;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
return true;
|
|
721
|
+
};
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
// src/plugins/presets/tanstack-ref.ts
|
|
725
|
+
import matter2 from "gray-matter";
|
|
726
|
+
var MAX_REF_DEPTH = 4;
|
|
727
|
+
function replaceContent(text, originFrontmatter) {
|
|
728
|
+
let result = text;
|
|
729
|
+
const replace = originFrontmatter.data.replace;
|
|
730
|
+
if (replace) {
|
|
731
|
+
for (const [key, value] of Object.entries(replace)) {
|
|
732
|
+
result = result.replace(new RegExp(key, "g"), value);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
return result;
|
|
736
|
+
}
|
|
737
|
+
function replaceSections(text, originFrontmatter) {
|
|
738
|
+
let result = text;
|
|
739
|
+
const sectionMarkerRegex = /\[\/\/\]: # '([a-zA-Z\d]*)'/g;
|
|
740
|
+
const sectionRegex = /\[\/\/\]: # '([a-zA-Z\d]*)'[\S\s]*?\[\/\/\]: # '([a-zA-Z\d]*)'/g;
|
|
741
|
+
const substitutes = /* @__PURE__ */ new Map();
|
|
742
|
+
for (const match of originFrontmatter.content.matchAll(sectionRegex)) {
|
|
743
|
+
if (match[1] !== match[2]) {
|
|
744
|
+
console.error(
|
|
745
|
+
`Origin section '${match[1]}' does not have matching closing token (found '${match[2]}'). Please make sure that each section has corresponding closing token and that sections are not nested.`
|
|
746
|
+
);
|
|
747
|
+
}
|
|
748
|
+
substitutes.set(match[1], match);
|
|
749
|
+
}
|
|
750
|
+
const sections = /* @__PURE__ */ new Map();
|
|
751
|
+
for (const match of result.matchAll(sectionRegex)) {
|
|
752
|
+
if (match[1] !== match[2]) {
|
|
753
|
+
console.error(
|
|
754
|
+
`Target section '${match[1]}' does not have matching closing token (found '${match[2]}'). Please make sure that each section has corresponding closing token and that sections are not nested.`
|
|
755
|
+
);
|
|
756
|
+
}
|
|
757
|
+
sections.set(match[1], match);
|
|
758
|
+
}
|
|
759
|
+
Array.from(substitutes.entries()).reverse().forEach(([key, value]) => {
|
|
760
|
+
const sectionMatch = sections.get(key);
|
|
761
|
+
if (sectionMatch) {
|
|
762
|
+
result = result.slice(0, sectionMatch.index) + value[0] + result.slice(sectionMatch.index + sectionMatch[0].length, result.length);
|
|
763
|
+
}
|
|
764
|
+
});
|
|
765
|
+
result = result.replaceAll(sectionMarkerRegex, "");
|
|
766
|
+
return result;
|
|
767
|
+
}
|
|
768
|
+
function normalizeRefPath(ref) {
|
|
769
|
+
if (ref.startsWith("docs/")) {
|
|
770
|
+
return ref.slice(5);
|
|
771
|
+
}
|
|
772
|
+
return ref;
|
|
773
|
+
}
|
|
774
|
+
function tryReadRef(refPath, readFile) {
|
|
775
|
+
let content = readFile(refPath);
|
|
776
|
+
if (content) return content;
|
|
777
|
+
const normalized = normalizeRefPath(refPath);
|
|
778
|
+
if (normalized !== refPath) {
|
|
779
|
+
content = readFile(normalized);
|
|
780
|
+
if (content) return content;
|
|
781
|
+
}
|
|
782
|
+
return null;
|
|
783
|
+
}
|
|
784
|
+
function tanstackRefPlugin() {
|
|
785
|
+
return {
|
|
786
|
+
name: "tanstack-ref",
|
|
787
|
+
beforeScan(ctx) {
|
|
788
|
+
const { filePath, content, frontmatter, readFile } = ctx;
|
|
789
|
+
if (!frontmatter.ref) {
|
|
790
|
+
return void 0;
|
|
791
|
+
}
|
|
792
|
+
const originParsed = matter2(content);
|
|
793
|
+
let refPath = frontmatter.ref;
|
|
794
|
+
let currentDepth = 1;
|
|
795
|
+
while (currentDepth <= MAX_REF_DEPTH) {
|
|
796
|
+
const refContent = tryReadRef(refPath, readFile);
|
|
797
|
+
if (!refContent) {
|
|
798
|
+
console.warn(` [tanstack-ref] ${filePath}: ref target not found: ${refPath}`);
|
|
799
|
+
return void 0;
|
|
800
|
+
}
|
|
801
|
+
const refParsed = matter2(refContent);
|
|
802
|
+
if (!refParsed.data.ref) {
|
|
803
|
+
return resolveWithContent(refContent, originParsed);
|
|
804
|
+
}
|
|
805
|
+
refPath = refParsed.data.ref;
|
|
806
|
+
currentDepth++;
|
|
807
|
+
}
|
|
808
|
+
console.warn(` [tanstack-ref] ${filePath}: ref chain exceeded max depth of ${MAX_REF_DEPTH}`);
|
|
809
|
+
return void 0;
|
|
810
|
+
}
|
|
811
|
+
};
|
|
812
|
+
}
|
|
813
|
+
function resolveWithContent(targetRaw, originParsed) {
|
|
814
|
+
let content = targetRaw;
|
|
815
|
+
content = replaceContent(content, originParsed);
|
|
816
|
+
content = replaceSections(content, originParsed);
|
|
817
|
+
const newData = { ...originParsed.data };
|
|
818
|
+
delete newData.ref;
|
|
819
|
+
delete newData.replace;
|
|
820
|
+
const targetParsed = matter2(content);
|
|
821
|
+
const mergedData = { ...targetParsed.data, ...newData };
|
|
822
|
+
delete mergedData.ref;
|
|
823
|
+
delete mergedData.replace;
|
|
824
|
+
return matter2.stringify(targetParsed.content, mergedData);
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
// src/plugins/presets/nextjs-source.ts
|
|
828
|
+
function nextjsSourcePlugin() {
|
|
829
|
+
return {
|
|
830
|
+
name: "nextjs-source",
|
|
831
|
+
shouldScanBody(ctx) {
|
|
832
|
+
if (ctx.frontmatter.source) {
|
|
833
|
+
return false;
|
|
834
|
+
}
|
|
835
|
+
return true;
|
|
836
|
+
}
|
|
837
|
+
};
|
|
838
|
+
}
|
|
620
839
|
export {
|
|
621
840
|
TranslationCache,
|
|
622
841
|
assemble,
|
|
842
|
+
createShouldScanBody,
|
|
623
843
|
defineConfig,
|
|
624
844
|
extractHeadings,
|
|
625
845
|
extractTranslatableFields,
|
|
626
846
|
flattenSources,
|
|
627
847
|
getPackageVersion,
|
|
628
848
|
loadConfig,
|
|
849
|
+
nextjsSourcePlugin,
|
|
629
850
|
normalize,
|
|
630
851
|
parseMdx,
|
|
631
852
|
processor,
|
|
632
853
|
reconstructFrontmatter,
|
|
633
|
-
renderMarkdown
|
|
854
|
+
renderMarkdown,
|
|
855
|
+
runBeforeScan,
|
|
856
|
+
tanstackRefPlugin
|
|
634
857
|
};
|