@nocobase/app 2.1.0-beta.44 → 2.1.0-beta.46
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/client/public/browser-checker.js +32 -11
- package/client/rsbuild.config.ts +8 -1
- package/client-v2/public/browser-checker.js +32 -11
- package/client-v2/rsbuild.config.ts +36 -5
- package/client-v2/src/main.tsx +39 -5
- package/dist/client/assets/{index-2bb32c00.js → index-7e66c702.js} +385 -288
- package/dist/client/assets/{vendor-misc-0f74f11a.js → vendor-misc-b5370062.js} +2 -2
- package/dist/client/browser-checker.js +32 -11
- package/dist/client/index.html +1 -1
- package/dist/client/index.html.tpl +1 -1
- package/dist/client/{v2/assets/index-496065db.js → v/assets/index-653a2984.js} +213 -135
- package/dist/client/{v2/assets/runtime-afd2b4ee.js → v/assets/runtime-72080663.js} +1 -1
- package/dist/client/{v2 → v}/browser-checker.js +32 -11
- package/dist/client/v/index.html +21 -0
- package/package.json +7 -7
- package/dist/client/v2/index.html +0 -20
- /package/dist/client/assets/{index-2bb32c00.js.LICENSE.txt → index-7e66c702.js.LICENSE.txt} +0 -0
- /package/dist/client/assets/{vendor-misc-0f74f11a.js.LICENSE.txt → vendor-misc-b5370062.js.LICENSE.txt} +0 -0
- /package/dist/client/{v2 → v}/assets/1052-2ed99808.js +0 -0
- /package/dist/client/{v2 → v}/assets/108-76a3fdea.js +0 -0
- /package/dist/client/{v2 → v}/assets/108-76a3fdea.js.LICENSE.txt +0 -0
- /package/dist/client/{v2 → v}/assets/1101-53bb815a.js +0 -0
- /package/dist/client/{v2 → v}/assets/1179-1ec4826c.js +0 -0
- /package/dist/client/{v2 → v}/assets/1310-c0031389.js +0 -0
- /package/dist/client/{v2 → v}/assets/1329-0e47aabd.js +0 -0
- /package/dist/client/{v2 → v}/assets/1425-69534606.js +0 -0
- /package/dist/client/{v2 → v}/assets/1434-d603f255.js +0 -0
- /package/dist/client/{v2 → v}/assets/1463-11b9abe3.js +0 -0
- /package/dist/client/{v2 → v}/assets/1469-477cfa59.js +0 -0
- /package/dist/client/{v2 → v}/assets/1481-59e4188c.js +0 -0
- /package/dist/client/{v2 → v}/assets/1507-9a211af0.js +0 -0
- /package/dist/client/{v2 → v}/assets/158-5273dfbb.js +0 -0
- /package/dist/client/{v2 → v}/assets/1586-73831f88.js +0 -0
- /package/dist/client/{v2 → v}/assets/1667-88ad86eb.js +0 -0
- /package/dist/client/{v2 → v}/assets/1675-3cbafc50.js +0 -0
- /package/dist/client/{v2 → v}/assets/1676-5db7433e.js +0 -0
- /package/dist/client/{v2 → v}/assets/1725-d9ce2582.js +0 -0
- /package/dist/client/{v2 → v}/assets/1786-e6c321bb.js +0 -0
- /package/dist/client/{v2 → v}/assets/183-963396ee.js +0 -0
- /package/dist/client/{v2 → v}/assets/1846-0deb6fc0.js +0 -0
- /package/dist/client/{v2 → v}/assets/1848-0ef98f01.js +0 -0
- /package/dist/client/{v2 → v}/assets/1863-9160dd98.js +0 -0
- /package/dist/client/{v2 → v}/assets/1887-bf619cb3.js +0 -0
- /package/dist/client/{v2 → v}/assets/192-c347bb96.js +0 -0
- /package/dist/client/{v2 → v}/assets/1951-84be8ebc.js +0 -0
- /package/dist/client/{v2 → v}/assets/1979-a893b852.js +0 -0
- /package/dist/client/{v2 → v}/assets/1986-01c03982.js +0 -0
- /package/dist/client/{v2 → v}/assets/2017-29a9879a.js +0 -0
- /package/dist/client/{v2 → v}/assets/2110-961b6f8e.js +0 -0
- /package/dist/client/{v2 → v}/assets/212-0f8a26a2.js +0 -0
- /package/dist/client/{v2 → v}/assets/2203-9aa79271.js +0 -0
- /package/dist/client/{v2 → v}/assets/2258-f667d700.js +0 -0
- /package/dist/client/{v2 → v}/assets/2270-ff70d8cb.js +0 -0
- /package/dist/client/{v2 → v}/assets/2301-2db05359.js +0 -0
- /package/dist/client/{v2 → v}/assets/2322-b9f077c3.js +0 -0
- /package/dist/client/{v2 → v}/assets/2335-669f21bd.js +0 -0
- /package/dist/client/{v2 → v}/assets/242-c3e15c94.js +0 -0
- /package/dist/client/{v2 → v}/assets/2446-ac5fccd3.js +0 -0
- /package/dist/client/{v2 → v}/assets/2512-82c2f81f.js +0 -0
- /package/dist/client/{v2 → v}/assets/2512-82c2f81f.js.LICENSE.txt +0 -0
- /package/dist/client/{v2 → v}/assets/2555-4ca49e21.js +0 -0
- /package/dist/client/{v2 → v}/assets/2565-ad63e92f.js +0 -0
- /package/dist/client/{v2 → v}/assets/2606-c4dcd1e1.js +0 -0
- /package/dist/client/{v2 → v}/assets/2613-98648bd2.js +0 -0
- /package/dist/client/{v2 → v}/assets/2622-3389992f.js +0 -0
- /package/dist/client/{v2 → v}/assets/2702-5ce93acd.js +0 -0
- /package/dist/client/{v2 → v}/assets/2710-e7286996.js +0 -0
- /package/dist/client/{v2 → v}/assets/2726-4d19faa1.js +0 -0
- /package/dist/client/{v2 → v}/assets/2861-48106fd8.js +0 -0
- /package/dist/client/{v2 → v}/assets/2898-7656f7f9.js +0 -0
- /package/dist/client/{v2 → v}/assets/2913-6b4e6c17.js +0 -0
- /package/dist/client/{v2 → v}/assets/2958-93de29a6.js +0 -0
- /package/dist/client/{v2 → v}/assets/300-ca09229f.js +0 -0
- /package/dist/client/{v2 → v}/assets/3005-1449fc4e.js +0 -0
- /package/dist/client/{v2 → v}/assets/3018-fc630932.js +0 -0
- /package/dist/client/{v2 → v}/assets/3028-efe6f61f.js +0 -0
- /package/dist/client/{v2 → v}/assets/3039-7f273921.js +0 -0
- /package/dist/client/{v2 → v}/assets/3102-b985963e.js +0 -0
- /package/dist/client/{v2 → v}/assets/3117-cc936eae.js +0 -0
- /package/dist/client/{v2 → v}/assets/32-88d3c82f.js +0 -0
- /package/dist/client/{v2 → v}/assets/32-88d3c82f.js.LICENSE.txt +0 -0
- /package/dist/client/{v2 → v}/assets/3260-3b3c7cd3.js +0 -0
- /package/dist/client/{v2 → v}/assets/3279-8d73fd19.js +0 -0
- /package/dist/client/{v2 → v}/assets/3283-654f42f7.js +0 -0
- /package/dist/client/{v2 → v}/assets/3309-172e3f79.js +0 -0
- /package/dist/client/{v2 → v}/assets/335-da9c4d81.js +0 -0
- /package/dist/client/{v2 → v}/assets/338-2f192edd.js +0 -0
- /package/dist/client/{v2 → v}/assets/3396-4422ee26.js +0 -0
- /package/dist/client/{v2 → v}/assets/3458-2958f051.js +0 -0
- /package/dist/client/{v2 → v}/assets/3475-be655098.js +0 -0
- /package/dist/client/{v2 → v}/assets/3523-5313a211.js +0 -0
- /package/dist/client/{v2 → v}/assets/3526-17f4e8e7.js +0 -0
- /package/dist/client/{v2 → v}/assets/3641-c2439c22.js +0 -0
- /package/dist/client/{v2 → v}/assets/3646-aa6a2478.js +0 -0
- /package/dist/client/{v2 → v}/assets/3660-280439df.js +0 -0
- /package/dist/client/{v2 → v}/assets/3662-8dff1ffe.js +0 -0
- /package/dist/client/{v2 → v}/assets/3690-4a8bdf43.js +0 -0
- /package/dist/client/{v2 → v}/assets/3727-1cfef422.js +0 -0
- /package/dist/client/{v2 → v}/assets/3859-fa4f6d5d.js +0 -0
- /package/dist/client/{v2 → v}/assets/3898-6236af03.js +0 -0
- /package/dist/client/{v2 → v}/assets/3916-3b34f216.js +0 -0
- /package/dist/client/{v2 → v}/assets/3937-af967d62.js +0 -0
- /package/dist/client/{v2 → v}/assets/3977-3feadc2c.js +0 -0
- /package/dist/client/{v2 → v}/assets/3978-29c2602c.js +0 -0
- /package/dist/client/{v2 → v}/assets/3989-c8fcfd6c.js +0 -0
- /package/dist/client/{v2 → v}/assets/406-497829bb.js +0 -0
- /package/dist/client/{v2 → v}/assets/4076-f68c25bd.js +0 -0
- /package/dist/client/{v2 → v}/assets/4096-0050f491.js +0 -0
- /package/dist/client/{v2 → v}/assets/4171-0710965d.js +0 -0
- /package/dist/client/{v2 → v}/assets/4171-0710965d.js.LICENSE.txt +0 -0
- /package/dist/client/{v2 → v}/assets/4195-2a00794d.js +0 -0
- /package/dist/client/{v2 → v}/assets/4222-29a8147d.js +0 -0
- /package/dist/client/{v2 → v}/assets/4223-3821a30e.js +0 -0
- /package/dist/client/{v2 → v}/assets/4313-ab774fd9.js +0 -0
- /package/dist/client/{v2 → v}/assets/4358-0a504478.js +0 -0
- /package/dist/client/{v2 → v}/assets/4419-3ab9c709.js +0 -0
- /package/dist/client/{v2 → v}/assets/4456-49679669.js +0 -0
- /package/dist/client/{v2 → v}/assets/448-57d6a00d.js +0 -0
- /package/dist/client/{v2 → v}/assets/4594-4e72041f.js +0 -0
- /package/dist/client/{v2 → v}/assets/4672-573e9a61.js +0 -0
- /package/dist/client/{v2 → v}/assets/4686-afbf676f.js +0 -0
- /package/dist/client/{v2 → v}/assets/474-ce4285d1.js +0 -0
- /package/dist/client/{v2 → v}/assets/4767-8f9d30dc.js +0 -0
- /package/dist/client/{v2 → v}/assets/4784-c69aaa68.js +0 -0
- /package/dist/client/{v2 → v}/assets/4801-06781ed7.js +0 -0
- /package/dist/client/{v2 → v}/assets/492-937af2ba.js +0 -0
- /package/dist/client/{v2 → v}/assets/4930-41adc6b7.js +0 -0
- /package/dist/client/{v2 → v}/assets/5064-93d8e29e.js +0 -0
- /package/dist/client/{v2 → v}/assets/5087-c505a60e.js +0 -0
- /package/dist/client/{v2 → v}/assets/5108-a028f8af.js +0 -0
- /package/dist/client/{v2 → v}/assets/5122-649463de.js +0 -0
- /package/dist/client/{v2 → v}/assets/5123-0bd0a6f2.js +0 -0
- /package/dist/client/{v2 → v}/assets/5139-3039fde4.js +0 -0
- /package/dist/client/{v2 → v}/assets/5459-c1f208e3.js +0 -0
- /package/dist/client/{v2 → v}/assets/5501-387a31be.js +0 -0
- /package/dist/client/{v2 → v}/assets/5506-a1f27be3.js +0 -0
- /package/dist/client/{v2 → v}/assets/553-1c3126df.js +0 -0
- /package/dist/client/{v2 → v}/assets/557-950114e1.js +0 -0
- /package/dist/client/{v2 → v}/assets/5640-f846c2a0.js +0 -0
- /package/dist/client/{v2 → v}/assets/5642-5c0bab20.js +0 -0
- /package/dist/client/{v2 → v}/assets/5674-e33e384f.js +0 -0
- /package/dist/client/{v2 → v}/assets/5701-8fe417d1.js +0 -0
- /package/dist/client/{v2 → v}/assets/5721-af25e047.js +0 -0
- /package/dist/client/{v2 → v}/assets/5757-81a89522.js +0 -0
- /package/dist/client/{v2 → v}/assets/5759-2b3bdcc6.js +0 -0
- /package/dist/client/{v2 → v}/assets/5761-857b6bbb.js +0 -0
- /package/dist/client/{v2 → v}/assets/5791-7c59ba08.js +0 -0
- /package/dist/client/{v2 → v}/assets/58-77bfd6c9.js +0 -0
- /package/dist/client/{v2 → v}/assets/5815-04fc432a.js +0 -0
- /package/dist/client/{v2 → v}/assets/5819-225de680.js +0 -0
- /package/dist/client/{v2 → v}/assets/5861-ac056534.js +0 -0
- /package/dist/client/{v2 → v}/assets/5870-0c3ecc40.js +0 -0
- /package/dist/client/{v2 → v}/assets/5881-b4c942f1.js +0 -0
- /package/dist/client/{v2 → v}/assets/5905-a5c3fce6.js +0 -0
- /package/dist/client/{v2 → v}/assets/5933-fbe50cd6.js +0 -0
- /package/dist/client/{v2 → v}/assets/6062-0e469079.js +0 -0
- /package/dist/client/{v2 → v}/assets/6093-641fcafc.js +0 -0
- /package/dist/client/{v2 → v}/assets/6157-8e763248.js +0 -0
- /package/dist/client/{v2 → v}/assets/6241-55a319df.js +0 -0
- /package/dist/client/{v2 → v}/assets/6269-a8a1ea3f.js +0 -0
- /package/dist/client/{v2 → v}/assets/630-110e12f4.js +0 -0
- /package/dist/client/{v2 → v}/assets/6345-187e76cf.js +0 -0
- /package/dist/client/{v2 → v}/assets/6346-94bdf034.js +0 -0
- /package/dist/client/{v2 → v}/assets/6373-9d047c6b.js +0 -0
- /package/dist/client/{v2 → v}/assets/6437-3865fd7e.js +0 -0
- /package/dist/client/{v2 → v}/assets/6581-51c928bf.js +0 -0
- /package/dist/client/{v2 → v}/assets/6660-54e08a8d.js +0 -0
- /package/dist/client/{v2 → v}/assets/6738-c6598897.js +0 -0
- /package/dist/client/{v2 → v}/assets/6870-6a6dba63.js +0 -0
- /package/dist/client/{v2 → v}/assets/6914-00d913e7.js +0 -0
- /package/dist/client/{v2 → v}/assets/70-f4dc53ad.js +0 -0
- /package/dist/client/{v2 → v}/assets/700-e75b7faa.js +0 -0
- /package/dist/client/{v2 → v}/assets/7021-4975d54d.js +0 -0
- /package/dist/client/{v2 → v}/assets/7095-4f425b85.js +0 -0
- /package/dist/client/{v2 → v}/assets/7141-b8e2a787.js +0 -0
- /package/dist/client/{v2 → v}/assets/7201-5b49ce84.js +0 -0
- /package/dist/client/{v2 → v}/assets/7211-b8c71ed2.js +0 -0
- /package/dist/client/{v2 → v}/assets/7318-6e1c7877.js +0 -0
- /package/dist/client/{v2 → v}/assets/7386-2f5752d4.js +0 -0
- /package/dist/client/{v2 → v}/assets/7413-241d463c.js +0 -0
- /package/dist/client/{v2 → v}/assets/7492-5c593f52.js +0 -0
- /package/dist/client/{v2 → v}/assets/7507-a015d8cf.js +0 -0
- /package/dist/client/{v2 → v}/assets/754-41b763b9.js +0 -0
- /package/dist/client/{v2 → v}/assets/7555-f42cdb72.js +0 -0
- /package/dist/client/{v2 → v}/assets/7608-2b3f2db0.js +0 -0
- /package/dist/client/{v2 → v}/assets/7669-8bd94b73.js +0 -0
- /package/dist/client/{v2 → v}/assets/7761-637067c6.js +0 -0
- /package/dist/client/{v2 → v}/assets/7765-5c7b4a6f.css +0 -0
- /package/dist/client/{v2 → v}/assets/7765-abeeeaed.js +0 -0
- /package/dist/client/{v2 → v}/assets/7765-abeeeaed.js.LICENSE.txt +0 -0
- /package/dist/client/{v2 → v}/assets/7876-673cbc3c.js +0 -0
- /package/dist/client/{v2 → v}/assets/791-9cfa98c8.js +0 -0
- /package/dist/client/{v2 → v}/assets/7946-09b77e08.js +0 -0
- /package/dist/client/{v2 → v}/assets/7959-f7ef21c6.js +0 -0
- /package/dist/client/{v2 → v}/assets/8053-fa93540e.js +0 -0
- /package/dist/client/{v2 → v}/assets/8087-90829087.js +0 -0
- /package/dist/client/{v2 → v}/assets/8138-e90c290e.js +0 -0
- /package/dist/client/{v2 → v}/assets/8217-de1369d7.js +0 -0
- /package/dist/client/{v2 → v}/assets/8242-3f880357.js +0 -0
- /package/dist/client/{v2 → v}/assets/8252-1153ffdd.js +0 -0
- /package/dist/client/{v2 → v}/assets/8262-7a324b59.js +0 -0
- /package/dist/client/{v2 → v}/assets/8269-52ea88cd.js +0 -0
- /package/dist/client/{v2 → v}/assets/8276-b3dfc452.js +0 -0
- /package/dist/client/{v2 → v}/assets/828-55028e33.js +0 -0
- /package/dist/client/{v2 → v}/assets/8294-9c81768d.js +0 -0
- /package/dist/client/{v2 → v}/assets/8295-447d3bb3.js +0 -0
- /package/dist/client/{v2 → v}/assets/8349-82eb3ecd.js +0 -0
- /package/dist/client/{v2 → v}/assets/8434-9140d106.js +0 -0
- /package/dist/client/{v2 → v}/assets/8438-d2ff6bc1.js +0 -0
- /package/dist/client/{v2 → v}/assets/8473-b1118703.js +0 -0
- /package/dist/client/{v2 → v}/assets/8480-c16f7ee4.js +0 -0
- /package/dist/client/{v2 → v}/assets/8562-ffa35312.js +0 -0
- /package/dist/client/{v2 → v}/assets/8624-847569d9.js +0 -0
- /package/dist/client/{v2 → v}/assets/8631-b2fd9aac.js +0 -0
- /package/dist/client/{v2 → v}/assets/8635-27980c94.js +0 -0
- /package/dist/client/{v2 → v}/assets/8676-987fe455.js +0 -0
- /package/dist/client/{v2 → v}/assets/8729-9adea5fe.js +0 -0
- /package/dist/client/{v2 → v}/assets/8759-4d7f7a69.js +0 -0
- /package/dist/client/{v2 → v}/assets/896-d07bab4d.js +0 -0
- /package/dist/client/{v2 → v}/assets/9021-ec1b8442.js +0 -0
- /package/dist/client/{v2 → v}/assets/9065-5df7b63d.js +0 -0
- /package/dist/client/{v2 → v}/assets/9170-efbfcc1e.js +0 -0
- /package/dist/client/{v2 → v}/assets/9204-6cb7a01b.js +0 -0
- /package/dist/client/{v2 → v}/assets/9217-f27c2dcb.js +0 -0
- /package/dist/client/{v2 → v}/assets/9248-ff8e06d0.js +0 -0
- /package/dist/client/{v2 → v}/assets/9274-83aa1da2.js +0 -0
- /package/dist/client/{v2 → v}/assets/929-a37c623d.js +0 -0
- /package/dist/client/{v2 → v}/assets/93-dc732e8a.js +0 -0
- /package/dist/client/{v2 → v}/assets/9518-4c8b8805.js +0 -0
- /package/dist/client/{v2 → v}/assets/9550-2daf603c.js +0 -0
- /package/dist/client/{v2 → v}/assets/9565-2158d75f.js +0 -0
- /package/dist/client/{v2 → v}/assets/9578-f64d8970.js +0 -0
- /package/dist/client/{v2 → v}/assets/9584-969e1d2b.js +0 -0
- /package/dist/client/{v2 → v}/assets/9592-523a3fa6.js +0 -0
- /package/dist/client/{v2 → v}/assets/9827-d1f02095.js +0 -0
- /package/dist/client/{v2 → v}/assets/9836-fcbb81f6.js +0 -0
- /package/dist/client/{v2 → v}/assets/9847-bc9f1ba4.js +0 -0
- /package/dist/client/{v2 → v}/assets/9953-407a1cde.js +0 -0
- /package/dist/client/{v2/assets/index-496065db.js.LICENSE.txt → v/assets/index-653a2984.js.LICENSE.txt} +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-antd-debce1bd.css +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-antd-ecosystem-de737eca.js +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-antd-ecosystem-de737eca.js.LICENSE.txt +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-antd-f8c3ace1.js +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-antd-icons-63769f51.js +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-antd-icons-63769f51.js.LICENSE.txt +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-lodash-905dd3b8.js +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-lodash-905dd3b8.js.LICENSE.txt +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-moment-84b317dc.js +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-moment-84b317dc.js.LICENSE.txt +0 -0
- /package/dist/client/{v2 → v}/assets/vendor-ses-b7bccbcd.js +0 -0
- /package/dist/client/{v2 → v}/favicon/favicon.ico +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/ai-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/audio-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/docx-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/eps-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/gif-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/jpeg-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/pdf-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/png-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/pptx-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/psd-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/svg-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/unknown-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/video-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/xlsx-200-200.png +0 -0
- /package/dist/client/{v2 → v}/file-placeholder/zip-200-200.png +0 -0
- /package/dist/client/{v2 → v}/global.css +0 -0
- /package/dist/client/{v2 → v}/nocobase.png +0 -0
- /package/dist/client/{v2 → v}/robots.txt +0 -0
|
@@ -1,14 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
function ensureLeadingSlash(value) {
|
|
2
|
+
if (!value) {
|
|
3
|
+
return '/';
|
|
4
|
+
}
|
|
5
|
+
return value.startsWith('/') ? value : `/${value}`;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function ensureTrailingSlash(value) {
|
|
9
|
+
if (!value) {
|
|
10
|
+
return '/';
|
|
11
|
+
}
|
|
12
|
+
return value.endsWith('/') ? value : `${value}/`;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function normalizePublicPath(value) {
|
|
16
|
+
const normalized = ensureLeadingSlash(String(value || '/').trim() || '/').replace(/\/{2,}/g, '/');
|
|
17
|
+
return ensureTrailingSlash(normalized);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const basename = normalizePublicPath(window['__nocobase_public_path__'] || '/');
|
|
21
|
+
const currentPath = ensureLeadingSlash(String(window.location.pathname || '/').trim() || '/').replace(/\/{2,}/g, '/');
|
|
22
|
+
const basenameWithoutTrailingSlash = basename === '/' ? '/' : basename.replace(/\/+$/, '');
|
|
23
|
+
|
|
24
|
+
if (basename !== '/' && currentPath === basenameWithoutTrailingSlash) {
|
|
4
25
|
const newUrl = `${window.location.origin}${basename}${window.location.search}${window.location.hash}`;
|
|
5
26
|
window.location.replace(newUrl);
|
|
6
|
-
} else if (!currentPath.startsWith(basename)) {
|
|
7
|
-
|
|
27
|
+
} else if (basename !== '/' && !currentPath.startsWith(basename)) {
|
|
28
|
+
const newPath = currentPath === '/' ? basename : `${basenameWithoutTrailingSlash}${currentPath}`;
|
|
8
29
|
let newUrl = window.location.origin + newPath + window.location.search + window.location.hash;
|
|
9
30
|
window.location.replace(newUrl);
|
|
10
31
|
}
|
|
11
|
-
showLog = true;
|
|
32
|
+
let showLog = true;
|
|
12
33
|
function log(m) {
|
|
13
34
|
if (window.console && showLog) {
|
|
14
35
|
console.log(m);
|
|
@@ -46,7 +67,7 @@ function css_browser_selector(u) {
|
|
|
46
67
|
dv = 'device_',
|
|
47
68
|
html = document.documentElement,
|
|
48
69
|
b = [
|
|
49
|
-
(!/opera|webtv/i.test(ua) && /msie\s(\d+)/.test(ua)) || /trident\/.*rv:([0-9]{1,}[
|
|
70
|
+
(!/opera|webtv/i.test(ua) && /msie\s(\d+)/.test(ua)) || /trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.test(ua)
|
|
50
71
|
? 'ie ie' + (/trident\/4\.0/.test(ua) ? '8' : RegExp.$1 == '11.0' ? '11' : RegExp.$1)
|
|
51
72
|
: is('firefox/')
|
|
52
73
|
? g +
|
|
@@ -70,7 +91,7 @@ function css_browser_selector(u) {
|
|
|
70
91
|
? bb +
|
|
71
92
|
(/Version\/(\d+)(\.(\d+)+)/i.test(ua)
|
|
72
93
|
? ' ' + bb + RegExp.$1 + ' ' + bb + RegExp.$1 + RegExp.$2.replace('.', '_')
|
|
73
|
-
: /Blackberry ?(([0-9]+)([a-z]?))[
|
|
94
|
+
: /Blackberry ?(([0-9]+)([a-z]?))[/|;]/gi.test(ua)
|
|
74
95
|
? ' ' + bb + RegExp.$2 + (RegExp.$3 ? ' ' + bb + RegExp.$2 + RegExp.$3 : '')
|
|
75
96
|
: '')
|
|
76
97
|
: is('android')
|
|
@@ -112,7 +133,7 @@ function css_browser_selector(u) {
|
|
|
112
133
|
is('j2me')
|
|
113
134
|
? 'j2me'
|
|
114
135
|
: is('ipad|ipod|iphone')
|
|
115
|
-
? (/CPU( iPhone)? OS (\d+[_
|
|
136
|
+
? (/CPU( iPhone)? OS (\d+[_.]\d+([_.]\d+)*)/i.test(ua) ? 'ios' + version('ios', RegExp.$2) : '') +
|
|
116
137
|
' ' +
|
|
117
138
|
(/(ip(ad|od|hone))/gi.test(ua) ? RegExp.$1 : '')
|
|
118
139
|
: is('playbook')
|
|
@@ -144,7 +165,7 @@ function css_browser_selector(u) {
|
|
|
144
165
|
: is('x11|linux')
|
|
145
166
|
? 'linux'
|
|
146
167
|
: '',
|
|
147
|
-
/[; |\[
|
|
168
|
+
/(?:[; |]|\[)(([a-z]{2})(-[a-z]{2})?)(?:\)|;|\||])/i.test(ua)
|
|
148
169
|
? (lang + RegExp.$2).replace('-', '_') + (RegExp.$3 != '' ? (' ' + lang + RegExp.$1).replace('-', '_') : '')
|
|
149
170
|
: '',
|
|
150
171
|
is('ipad|iphone|ipod') && !is('safari') ? 'ipad_app' : '',
|
|
@@ -161,7 +182,7 @@ function css_browser_selector(u) {
|
|
|
161
182
|
break;
|
|
162
183
|
}
|
|
163
184
|
}
|
|
164
|
-
widthClasses = '';
|
|
185
|
+
let widthClasses = '';
|
|
165
186
|
for (var info in uaInfo) {
|
|
166
187
|
widthClasses += ' ' + info + '_' + uaInfo[info];
|
|
167
188
|
}
|
package/client/rsbuild.config.ts
CHANGED
|
@@ -99,7 +99,14 @@ export default defineConfig(({ command }) => {
|
|
|
99
99
|
const localStorageBasePath = ensurePublicPath(`${resolvedAppPublicPath}storage/uploads/`, '/storage/uploads/');
|
|
100
100
|
const staticBasePath = ensurePublicPath(`${resolvedAppPublicPath}static/`, '/static/');
|
|
101
101
|
const wsBasePath = ensurePublicPath(process.env.WS_PATH, '/ws/');
|
|
102
|
-
const
|
|
102
|
+
const modernClientPrefix =
|
|
103
|
+
String(process.env.APP_MODERN_CLIENT_PREFIX || 'v')
|
|
104
|
+
.trim()
|
|
105
|
+
.replace(/^\/+|\/+$/g, '') || 'v';
|
|
106
|
+
const v2BasePath = ensurePublicPath(
|
|
107
|
+
`${resolvedAppPublicPath.replace(/\/$/, '')}/${modernClientPrefix}/`,
|
|
108
|
+
`/${modernClientPrefix}/`,
|
|
109
|
+
);
|
|
103
110
|
const clientPort = toNumber(process.env.APP_PORT, 13001);
|
|
104
111
|
const v2Port = toNumber(process.env.APP_V2_PORT, clientPort + 2);
|
|
105
112
|
const hmrPath = `${resolvedAppPublicPath.replace(/\/$/, '')}/__rspack_hmr`;
|
|
@@ -1,14 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
function ensureLeadingSlash(value) {
|
|
2
|
+
if (!value) {
|
|
3
|
+
return '/';
|
|
4
|
+
}
|
|
5
|
+
return value.startsWith('/') ? value : `/${value}`;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function ensureTrailingSlash(value) {
|
|
9
|
+
if (!value) {
|
|
10
|
+
return '/';
|
|
11
|
+
}
|
|
12
|
+
return value.endsWith('/') ? value : `${value}/`;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function normalizePublicPath(value) {
|
|
16
|
+
const normalized = ensureLeadingSlash(String(value || '/').trim() || '/').replace(/\/{2,}/g, '/');
|
|
17
|
+
return ensureTrailingSlash(normalized);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const basename = normalizePublicPath(window['__nocobase_public_path__'] || '/');
|
|
21
|
+
const currentPath = ensureLeadingSlash(String(window.location.pathname || '/').trim() || '/').replace(/\/{2,}/g, '/');
|
|
22
|
+
const basenameWithoutTrailingSlash = basename === '/' ? '/' : basename.replace(/\/+$/, '');
|
|
23
|
+
|
|
24
|
+
if (basename !== '/' && currentPath === basenameWithoutTrailingSlash) {
|
|
4
25
|
const newUrl = `${window.location.origin}${basename}${window.location.search}${window.location.hash}`;
|
|
5
26
|
window.location.replace(newUrl);
|
|
6
|
-
} else if (!currentPath.startsWith(basename)) {
|
|
7
|
-
|
|
27
|
+
} else if (basename !== '/' && !currentPath.startsWith(basename)) {
|
|
28
|
+
const newPath = currentPath === '/' ? basename : `${basenameWithoutTrailingSlash}${currentPath}`;
|
|
8
29
|
let newUrl = window.location.origin + newPath + window.location.search + window.location.hash;
|
|
9
30
|
window.location.replace(newUrl);
|
|
10
31
|
}
|
|
11
|
-
showLog = true;
|
|
32
|
+
let showLog = true;
|
|
12
33
|
function log(m) {
|
|
13
34
|
if (window.console && showLog) {
|
|
14
35
|
console.log(m);
|
|
@@ -46,7 +67,7 @@ function css_browser_selector(u) {
|
|
|
46
67
|
dv = 'device_',
|
|
47
68
|
html = document.documentElement,
|
|
48
69
|
b = [
|
|
49
|
-
(!/opera|webtv/i.test(ua) && /msie\s(\d+)/.test(ua)) || /trident\/.*rv:([0-9]{1,}[
|
|
70
|
+
(!/opera|webtv/i.test(ua) && /msie\s(\d+)/.test(ua)) || /trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.test(ua)
|
|
50
71
|
? 'ie ie' + (/trident\/4\.0/.test(ua) ? '8' : RegExp.$1 == '11.0' ? '11' : RegExp.$1)
|
|
51
72
|
: is('firefox/')
|
|
52
73
|
? g +
|
|
@@ -70,7 +91,7 @@ function css_browser_selector(u) {
|
|
|
70
91
|
? bb +
|
|
71
92
|
(/Version\/(\d+)(\.(\d+)+)/i.test(ua)
|
|
72
93
|
? ' ' + bb + RegExp.$1 + ' ' + bb + RegExp.$1 + RegExp.$2.replace('.', '_')
|
|
73
|
-
: /Blackberry ?(([0-9]+)([a-z]?))[
|
|
94
|
+
: /Blackberry ?(([0-9]+)([a-z]?))[/|;]/gi.test(ua)
|
|
74
95
|
? ' ' + bb + RegExp.$2 + (RegExp.$3 ? ' ' + bb + RegExp.$2 + RegExp.$3 : '')
|
|
75
96
|
: '')
|
|
76
97
|
: is('android')
|
|
@@ -112,7 +133,7 @@ function css_browser_selector(u) {
|
|
|
112
133
|
is('j2me')
|
|
113
134
|
? 'j2me'
|
|
114
135
|
: is('ipad|ipod|iphone')
|
|
115
|
-
? (/CPU( iPhone)? OS (\d+[_
|
|
136
|
+
? (/CPU( iPhone)? OS (\d+[_.]\d+([_.]\d+)*)/i.test(ua) ? 'ios' + version('ios', RegExp.$2) : '') +
|
|
116
137
|
' ' +
|
|
117
138
|
(/(ip(ad|od|hone))/gi.test(ua) ? RegExp.$1 : '')
|
|
118
139
|
: is('playbook')
|
|
@@ -144,7 +165,7 @@ function css_browser_selector(u) {
|
|
|
144
165
|
: is('x11|linux')
|
|
145
166
|
? 'linux'
|
|
146
167
|
: '',
|
|
147
|
-
/[; |\[
|
|
168
|
+
/(?:[; |]|\[)(([a-z]{2})(-[a-z]{2})?)(?:\)|;|\||])/i.test(ua)
|
|
148
169
|
? (lang + RegExp.$2).replace('-', '_') + (RegExp.$3 != '' ? (' ' + lang + RegExp.$1).replace('-', '_') : '')
|
|
149
170
|
: '',
|
|
150
171
|
is('ipad|iphone|ipod') && !is('safari') ? 'ipad_app' : '',
|
|
@@ -161,7 +182,7 @@ function css_browser_selector(u) {
|
|
|
161
182
|
break;
|
|
162
183
|
}
|
|
163
184
|
}
|
|
164
|
-
widthClasses = '';
|
|
185
|
+
let widthClasses = '';
|
|
165
186
|
for (var info in uaInfo) {
|
|
166
187
|
widthClasses += ' ' + info + '_' + uaInfo[info];
|
|
167
188
|
}
|
|
@@ -21,8 +21,23 @@ const __dirname = path.dirname(__filename);
|
|
|
21
21
|
|
|
22
22
|
generateV2Plugins();
|
|
23
23
|
|
|
24
|
+
// Fixed on-disk build-output directory name for the modern (v2) client. A
|
|
25
|
+
// sibling copy of this default lives in packages/core/cli-v1/src/util.js
|
|
26
|
+
// (DEFAULT_MODERN_CLIENT_PREFIX) and packages/core/server/src/gateway (utils.ts
|
|
27
|
+
// MODERN_CLIENT_DIST_DIR). Keep them in sync. See docs/adr/0001-modern-client-prefix.md.
|
|
28
|
+
const MODERN_CLIENT_DIST_DIR = 'v';
|
|
29
|
+
|
|
30
|
+
// Normalize APP_MODERN_CLIENT_PREFIX (accepts `v`, `/v`, `/v/`)
|
|
31
|
+
// to a bare segment, falling back to the fixed dist dir name.
|
|
32
|
+
function normalizeModernClientPrefix(value: string | undefined) {
|
|
33
|
+
const segment = String(value || '')
|
|
34
|
+
.trim()
|
|
35
|
+
.replace(/^\/+|\/+$/g, '');
|
|
36
|
+
return segment || MODERN_CLIENT_DIST_DIR;
|
|
37
|
+
}
|
|
38
|
+
|
|
24
39
|
function ensurePublicPath(value: string) {
|
|
25
|
-
let normalized = value ||
|
|
40
|
+
let normalized = value || `/${MODERN_CLIENT_DIST_DIR}/`;
|
|
26
41
|
if (!normalized.startsWith('/')) {
|
|
27
42
|
normalized = `/${normalized}`;
|
|
28
43
|
}
|
|
@@ -37,10 +52,13 @@ function toNumber(value: string | undefined, fallback: number) {
|
|
|
37
52
|
return Number.isFinite(parsed) ? parsed : fallback;
|
|
38
53
|
}
|
|
39
54
|
|
|
40
|
-
function createRuntimeHeadScript(v2PublicPath: string, isBuild: boolean) {
|
|
55
|
+
function createRuntimeHeadScript(v2PublicPath: string, isBuild: boolean, modernClientPrefix: string) {
|
|
41
56
|
if (!isBuild) {
|
|
42
57
|
return [
|
|
43
58
|
`window['__nocobase_public_path__'] = window['__nocobase_public_path__'] || ${JSON.stringify(v2PublicPath)};`,
|
|
59
|
+
`window['__nocobase_modern_client_prefix__'] = window['__nocobase_modern_client_prefix__'] || ${JSON.stringify(
|
|
60
|
+
modernClientPrefix,
|
|
61
|
+
)};`,
|
|
44
62
|
`window['__nocobase_app_dev__'] = window['__nocobase_app_dev__'] || ${JSON.stringify(
|
|
45
63
|
process.env.NOCOBASE_APP_DEV === 'true',
|
|
46
64
|
)};`,
|
|
@@ -55,6 +73,9 @@ function createRuntimeHeadScript(v2PublicPath: string, isBuild: boolean) {
|
|
|
55
73
|
|
|
56
74
|
return [
|
|
57
75
|
`window['__nocobase_public_path__'] = window['__nocobase_public_path__'] || ${JSON.stringify(v2PublicPath)};`,
|
|
76
|
+
`window['__nocobase_modern_client_prefix__'] = window['__nocobase_modern_client_prefix__'] || ${JSON.stringify(
|
|
77
|
+
modernClientPrefix,
|
|
78
|
+
)};`,
|
|
58
79
|
`window['__nocobase_api_base_url__'] = window['__nocobase_api_base_url__'] || ${JSON.stringify(
|
|
59
80
|
process.env.API_BASE_URL || process.env.API_BASE_PATH || '',
|
|
60
81
|
)};`,
|
|
@@ -104,7 +125,13 @@ export default defineConfig(({ command }) => {
|
|
|
104
125
|
const apiBasePath = ensurePublicPath(process.env.API_BASE_PATH || '/api/');
|
|
105
126
|
const localStorageBasePath = ensurePublicPath(`${appPublicPath.replace(/\/$/, '')}/storage/uploads/`);
|
|
106
127
|
const staticBasePath = ensurePublicPath(`${appPublicPath.replace(/\/$/, '')}/static/`);
|
|
107
|
-
const
|
|
128
|
+
const modernClientPrefix = normalizeModernClientPrefix(process.env.APP_MODERN_CLIENT_PREFIX);
|
|
129
|
+
// Build bakes the FIXED dist-dir segment (`/v/`) as a sentinel that the
|
|
130
|
+
// server rewrites to the runtime prefix per request. Dev serves under the
|
|
131
|
+
// actual runtime prefix so URLs line up with the v1 dev proxy.
|
|
132
|
+
const modernClientDistPath = ensurePublicPath(`${appPublicPath.replace(/\/$/, '')}/${MODERN_CLIENT_DIST_DIR}/`);
|
|
133
|
+
const modernClientPublicPath = ensurePublicPath(`${appPublicPath.replace(/\/$/, '')}/${modernClientPrefix}/`);
|
|
134
|
+
const v2PublicPath = isBuild ? modernClientDistPath : modernClientPublicPath;
|
|
108
135
|
const wsBasePath = ensurePublicPath(process.env.WS_PATH || '/ws/');
|
|
109
136
|
const hmrPath = `${v2PublicPath.replace(/\/$/, '')}/__rspack_hmr`;
|
|
110
137
|
const v2Port = toNumber(process.env.APP_V2_PORT, 13002);
|
|
@@ -151,7 +178,11 @@ export default defineConfig(({ command }) => {
|
|
|
151
178
|
},
|
|
152
179
|
{
|
|
153
180
|
tag: 'script',
|
|
154
|
-
children: createRuntimeHeadScript(
|
|
181
|
+
children: createRuntimeHeadScript(
|
|
182
|
+
v2PublicPath,
|
|
183
|
+
isBuild,
|
|
184
|
+
isBuild ? MODERN_CLIENT_DIST_DIR : modernClientPrefix,
|
|
185
|
+
),
|
|
155
186
|
head: true,
|
|
156
187
|
append: false,
|
|
157
188
|
},
|
|
@@ -169,7 +200,7 @@ export default defineConfig(({ command }) => {
|
|
|
169
200
|
output: {
|
|
170
201
|
target: 'web',
|
|
171
202
|
distPath: {
|
|
172
|
-
root: path.resolve(__dirname,
|
|
203
|
+
root: path.resolve(__dirname, `../dist/client/${MODERN_CLIENT_DIST_DIR}`),
|
|
173
204
|
js: 'assets',
|
|
174
205
|
jsAsync: 'assets',
|
|
175
206
|
css: 'assets',
|
package/client-v2/src/main.tsx
CHANGED
|
@@ -7,13 +7,15 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import { Application } from '@nocobase/client-v2';
|
|
10
|
+
import { Application, getModernClientPrefix } from '@nocobase/client-v2';
|
|
11
11
|
import devDynamicImport from './.plugins';
|
|
12
12
|
import { NocoBaseClientPresetPluginV2 } from '@nocobase/preset-nocobase/client-v2';
|
|
13
13
|
|
|
14
14
|
declare global {
|
|
15
15
|
interface Window {
|
|
16
16
|
__nocobase_public_path__?: string;
|
|
17
|
+
__nocobase_modern_client_prefix__?: string;
|
|
18
|
+
__webpack_public_path__?: string;
|
|
17
19
|
__nocobase_api_base_url__?: string;
|
|
18
20
|
__nocobase_api_client_storage_prefix__?: string;
|
|
19
21
|
__nocobase_api_client_storage_type__?: string;
|
|
@@ -38,8 +40,20 @@ function ensureSlash(pathname: string, fallback: string) {
|
|
|
38
40
|
return normalized;
|
|
39
41
|
}
|
|
40
42
|
|
|
43
|
+
function getModernPrefixSuffix() {
|
|
44
|
+
return `/${getModernClientPrefix()}/`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function stripPrefixSuffix(value: string) {
|
|
48
|
+
const suffix = getModernPrefixSuffix();
|
|
49
|
+
if (value.endsWith(suffix)) {
|
|
50
|
+
return ensureSlash(value.slice(0, value.length - suffix.length), '/');
|
|
51
|
+
}
|
|
52
|
+
return ensureSlash(value, '/');
|
|
53
|
+
}
|
|
54
|
+
|
|
41
55
|
function inferRootPublicPathFromLocation() {
|
|
42
|
-
const marker =
|
|
56
|
+
const marker = getModernPrefixSuffix();
|
|
43
57
|
const pathname = window.location.pathname;
|
|
44
58
|
const index = pathname.indexOf(marker);
|
|
45
59
|
if (index >= 0) {
|
|
@@ -51,17 +65,18 @@ function inferRootPublicPathFromLocation() {
|
|
|
51
65
|
function getRootPublicPath() {
|
|
52
66
|
const fromWindow = window.__nocobase_public_path__;
|
|
53
67
|
if (fromWindow) {
|
|
54
|
-
return ensureSlash(fromWindow
|
|
68
|
+
return stripPrefixSuffix(ensureSlash(fromWindow, '/'));
|
|
55
69
|
}
|
|
56
70
|
const fromBase = import.meta.env.BASE_URL;
|
|
57
71
|
if (fromBase) {
|
|
58
|
-
return ensureSlash(fromBase
|
|
72
|
+
return stripPrefixSuffix(ensureSlash(fromBase, '/'));
|
|
59
73
|
}
|
|
60
74
|
return inferRootPublicPathFromLocation();
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
function getV2PublicPath() {
|
|
64
|
-
|
|
78
|
+
const suffix = getModernPrefixSuffix();
|
|
79
|
+
return ensureSlash(`${getRootPublicPath().replace(/\/$/, '')}${suffix}`, suffix);
|
|
65
80
|
}
|
|
66
81
|
|
|
67
82
|
function parseShareToken(value: boolean | string | undefined) {
|
|
@@ -83,6 +98,25 @@ function parseStorageType(value: string | undefined): ClientStorageType {
|
|
|
83
98
|
const rootPublicPath = getRootPublicPath();
|
|
84
99
|
const v2PublicPath = getV2PublicPath();
|
|
85
100
|
|
|
101
|
+
// The fixed build-output directory segment baked into asset paths at build time
|
|
102
|
+
// (e.g. `v`), derived from the baked BASE_URL. Distinct from the runtime
|
|
103
|
+
// modern-client prefix, which may be overridden per-deployment.
|
|
104
|
+
function getBuildAssetDir() {
|
|
105
|
+
const base = (import.meta.env.BASE_URL || '/v/').replace(/\/+$/, '');
|
|
106
|
+
return base.split('/').pop() || 'v';
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Point dynamically-imported chunks of the main bundle at the runtime modern
|
|
110
|
+
// client asset path, so a runtime prefix override / sub-path deployment / CDN
|
|
111
|
+
// works without rebuilding (mirrors AutoInjectPublicPathPlugin used for plugins).
|
|
112
|
+
// `__webpack_public_path__` is a webpack magic global that must be assigned.
|
|
113
|
+
declare let __webpack_public_path__: string;
|
|
114
|
+
const cdnBase = window.__webpack_public_path__;
|
|
115
|
+
// eslint-disable-next-line prefer-const
|
|
116
|
+
__webpack_public_path__ = cdnBase
|
|
117
|
+
? ensureSlash(`${cdnBase.replace(/\/$/, '')}/${getBuildAssetDir()}/`, '/')
|
|
118
|
+
: v2PublicPath;
|
|
119
|
+
|
|
86
120
|
const app = new Application({
|
|
87
121
|
publicPath: v2PublicPath,
|
|
88
122
|
apiClient: {
|