@strapi/admin 4.15.1 → 4.15.2
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/_chunks/{AuthenticatedApp-092ef2be.js → AuthenticatedApp-d1e28164.js} +30 -30
- package/dist/_chunks/{AuthenticatedApp-092ef2be.js.map → AuthenticatedApp-d1e28164.js.map} +1 -1
- package/dist/_chunks/{AuthenticatedApp-b0ada7e9.mjs → AuthenticatedApp-fd7e406d.mjs} +30 -30
- package/dist/_chunks/{AuthenticatedApp-b0ada7e9.mjs.map → AuthenticatedApp-fd7e406d.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-5798ba6f.mjs → HomePage-2a7f678a.mjs} +7 -8
- package/dist/_chunks/{HomePage-5798ba6f.mjs.map → HomePage-2a7f678a.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-5ae473e6.js → HomePage-2ac5c213.js} +7 -8
- package/dist/_chunks/{HomePage-5ae473e6.js.map → HomePage-2ac5c213.js.map} +1 -1
- package/dist/_chunks/{HomePage-bdcb51be.js → HomePage-616a2985.js} +12 -13
- package/dist/_chunks/HomePage-616a2985.js.map +1 -0
- package/dist/_chunks/{HomePage-a3cc32d2.mjs → HomePage-ded37c60.mjs} +12 -13
- package/dist/_chunks/HomePage-ded37c60.mjs.map +1 -0
- package/dist/_chunks/{InstalledPluginsPage-cc2d6a36.js → InstalledPluginsPage-189010c1.js} +10 -12
- package/dist/_chunks/{InstalledPluginsPage-cc2d6a36.js.map → InstalledPluginsPage-189010c1.js.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-6284aaff.mjs → InstalledPluginsPage-afa9edc3.mjs} +10 -12
- package/dist/_chunks/{InstalledPluginsPage-6284aaff.mjs.map → InstalledPluginsPage-afa9edc3.mjs.map} +1 -1
- package/dist/_chunks/{index-305a03f4.mjs → Login-02ddabf7.mjs} +25 -29
- package/dist/_chunks/Login-02ddabf7.mjs.map +1 -0
- package/dist/_chunks/{index-137490ba.js → Login-28127829.js} +25 -30
- package/dist/_chunks/Login-28127829.js.map +1 -0
- package/dist/_chunks/{MarketplacePage-7dee72f5.mjs → MarketplacePage-40f76f3d.mjs} +6 -8
- package/dist/_chunks/{MarketplacePage-7dee72f5.mjs.map → MarketplacePage-40f76f3d.mjs.map} +1 -1
- package/dist/_chunks/{MarketplacePage-209ec658.js → MarketplacePage-946134e6.js} +6 -8
- package/dist/_chunks/{MarketplacePage-209ec658.js.map → MarketplacePage-946134e6.js.map} +1 -1
- package/dist/_chunks/{ProfilePage-26c14ba4.mjs → ProfilePage-4c94e332.mjs} +7 -9
- package/dist/_chunks/{ProfilePage-26c14ba4.mjs.map → ProfilePage-4c94e332.mjs.map} +1 -1
- package/dist/_chunks/{ProfilePage-4f8c127b.js → ProfilePage-6506e401.js} +7 -9
- package/dist/_chunks/{ProfilePage-4f8c127b.js.map → ProfilePage-6506e401.js.map} +1 -1
- package/dist/_chunks/{SSOProviders-1d062c95.mjs → SSOProviders-62bfad92.mjs} +29 -61
- package/dist/_chunks/SSOProviders-62bfad92.mjs.map +1 -0
- package/dist/_chunks/{SSOProviders-1ef0a89e.js → SSOProviders-b395a4e6.js} +28 -80
- package/dist/_chunks/SSOProviders-b395a4e6.js.map +1 -0
- package/dist/_chunks/{build-f36bfc97.js → build-55ba3e68.js} +4 -2
- package/dist/_chunks/{build-f36bfc97.js.map → build-55ba3e68.js.map} +1 -1
- package/dist/_chunks/{build-e1ca35da.mjs → build-b67ecc59.mjs} +4 -2
- package/dist/_chunks/{build-e1ca35da.mjs.map → build-b67ecc59.mjs.map} +1 -1
- package/dist/_chunks/{constants-70e05152.js → constants-42f4f7b3.js} +6 -6
- package/dist/_chunks/{constants-70e05152.js.map → constants-42f4f7b3.js.map} +1 -1
- package/dist/_chunks/{constants-921eda17.mjs → constants-6ecddc43.mjs} +43 -15
- package/dist/_chunks/constants-6ecddc43.mjs.map +1 -0
- package/dist/_chunks/{constants-727a113c.js → constants-733b0568.js} +26 -26
- package/dist/_chunks/constants-733b0568.js.map +1 -0
- package/dist/_chunks/{constants-86aa3e70.js → constants-7596f6f3.js} +60 -13
- package/dist/_chunks/constants-7596f6f3.js.map +1 -0
- package/dist/_chunks/{constants-32975b2e.js → constants-82e97fee.js} +11 -12
- package/dist/_chunks/{constants-32975b2e.js.map → constants-82e97fee.js.map} +1 -1
- package/dist/_chunks/{constants-90c20a6f.mjs → constants-952c50be.mjs} +11 -12
- package/dist/_chunks/{constants-90c20a6f.mjs.map → constants-952c50be.mjs.map} +1 -1
- package/dist/_chunks/{constants-9de7641c.mjs → constants-c0280aed.mjs} +28 -28
- package/dist/_chunks/constants-c0280aed.mjs.map +1 -0
- package/dist/_chunks/{constants-a773ff9b.js → constants-c9fce26f.js} +13 -12
- package/dist/_chunks/{constants-a773ff9b.js.map → constants-c9fce26f.js.map} +1 -1
- package/dist/_chunks/{constants-6157f648.mjs → constants-cbadfd36.mjs} +6 -6
- package/dist/_chunks/{constants-6157f648.mjs.map → constants-cbadfd36.mjs.map} +1 -1
- package/dist/_chunks/{constants-27319180.mjs → constants-cd1acf1b.mjs} +13 -12
- package/dist/_chunks/{constants-27319180.mjs.map → constants-cd1acf1b.mjs.map} +1 -1
- package/dist/_chunks/{develop-513c9644.js → develop-69e28e61.js} +4 -2
- package/dist/_chunks/{develop-513c9644.js.map → develop-69e28e61.js.map} +1 -1
- package/dist/_chunks/{develop-e45b460e.mjs → develop-d97e7494.mjs} +4 -2
- package/dist/_chunks/{develop-e45b460e.mjs.map → develop-d97e7494.mjs.map} +1 -1
- package/dist/_chunks/formatAPIErrors-b599cf27.js +20 -0
- package/dist/_chunks/formatAPIErrors-b599cf27.js.map +1 -0
- package/dist/_chunks/formatAPIErrors-db6ed675.mjs +21 -0
- package/dist/_chunks/formatAPIErrors-db6ed675.mjs.map +1 -0
- package/dist/_chunks/{index-af69bc98.mjs → index-01dfec54.mjs} +11 -11
- package/dist/_chunks/{index-af69bc98.mjs.map → index-01dfec54.mjs.map} +1 -1
- package/dist/_chunks/{index-fcd5bc14.mjs → index-0ed0c104.mjs} +14 -13
- package/dist/_chunks/{index-fcd5bc14.mjs.map → index-0ed0c104.mjs.map} +1 -1
- package/dist/_chunks/{index-1f1e2465.js → index-13a78498.js} +9 -11
- package/dist/_chunks/{index-1f1e2465.js.map → index-13a78498.js.map} +1 -1
- package/dist/_chunks/{index-6b9e3d60.js → index-150ec200.js} +9 -10
- package/dist/_chunks/{index-6b9e3d60.js.map → index-150ec200.js.map} +1 -1
- package/dist/_chunks/{index-b2257157.js → index-17acbe23.js} +49 -12
- package/dist/_chunks/index-17acbe23.js.map +1 -0
- package/dist/_chunks/{index-f5342ea5.js → index-17fbff58.js} +14 -13
- package/dist/_chunks/{index-f5342ea5.js.map → index-17fbff58.js.map} +1 -1
- package/dist/_chunks/{index-bb8093ea.mjs → index-18155022.mjs} +12 -12
- package/dist/_chunks/{index-bb8093ea.mjs.map → index-18155022.mjs.map} +1 -1
- package/dist/_chunks/{index-e22d1a84.mjs → index-22993544.mjs} +14 -13
- package/dist/_chunks/{index-e22d1a84.mjs.map → index-22993544.mjs.map} +1 -1
- package/dist/_chunks/{index-16030b74.js → index-2f4b78ee.js} +3 -3
- package/dist/_chunks/index-2f4b78ee.js.map +1 -0
- package/dist/_chunks/{index-35e4bad6.mjs → index-30933e3e.mjs} +8 -9
- package/dist/_chunks/{index-35e4bad6.mjs.map → index-30933e3e.mjs.map} +1 -1
- package/dist/_chunks/{index-928b18d2.mjs → index-31227291.mjs} +3 -3
- package/dist/_chunks/{index-928b18d2.mjs.map → index-31227291.mjs.map} +1 -1
- package/dist/_chunks/{index-24189ec9.js → index-3b888524.js} +6 -6
- package/dist/_chunks/{index-24189ec9.js.map → index-3b888524.js.map} +1 -1
- package/dist/_chunks/{index-5752584c.mjs → index-44360544.mjs} +182 -76
- package/dist/_chunks/index-44360544.mjs.map +1 -0
- package/dist/_chunks/{index-be2ca313.mjs → index-45ae7be1.mjs} +13 -13
- package/dist/_chunks/{index-be2ca313.mjs.map → index-45ae7be1.mjs.map} +1 -1
- package/dist/_chunks/{index-62b4b3fc.js → index-470a72bf.js} +11 -11
- package/dist/_chunks/{index-62b4b3fc.js.map → index-470a72bf.js.map} +1 -1
- package/dist/_chunks/{index-00202c8a.mjs → index-4a46c368.mjs} +13 -12
- package/dist/_chunks/{index-00202c8a.mjs.map → index-4a46c368.mjs.map} +1 -1
- package/dist/_chunks/{index-332f319e.mjs → index-52b70b56.mjs} +8 -10
- package/dist/_chunks/{index-332f319e.mjs.map → index-52b70b56.mjs.map} +1 -1
- package/dist/_chunks/{index-5ad8482b.mjs → index-55f9b6b3.mjs} +7 -7
- package/dist/_chunks/{index-5ad8482b.mjs.map → index-55f9b6b3.mjs.map} +1 -1
- package/dist/_chunks/{index-6cc54f3b.mjs → index-59e31a9f.mjs} +8 -9
- package/dist/_chunks/{index-6cc54f3b.mjs.map → index-59e31a9f.mjs.map} +1 -1
- package/dist/_chunks/{index-1e973c03.mjs → index-5df8a59e.mjs} +14 -13
- package/dist/_chunks/{index-1e973c03.mjs.map → index-5df8a59e.mjs.map} +1 -1
- package/dist/_chunks/{index-34de382e.mjs → index-60a57d31.mjs} +688 -824
- package/dist/_chunks/index-60a57d31.mjs.map +1 -0
- package/dist/_chunks/{index-77e0e5d7.js → index-62264743.js} +8 -7
- package/dist/_chunks/{index-77e0e5d7.js.map → index-62264743.js.map} +1 -1
- package/dist/_chunks/{index-4565fcbd.js → index-6931e33c.js} +3 -3
- package/dist/_chunks/{index-4565fcbd.js.map → index-6931e33c.js.map} +1 -1
- package/dist/_chunks/{index-3c58de6f.js → index-748f8264.js} +14 -13
- package/dist/_chunks/{index-3c58de6f.js.map → index-748f8264.js.map} +1 -1
- package/dist/_chunks/{index-bdfc1149.mjs → index-768b7de9.mjs} +49 -12
- package/dist/_chunks/index-768b7de9.mjs.map +1 -0
- package/dist/_chunks/{index-1763a04f.js → index-7739ddf5.js} +8 -9
- package/dist/_chunks/{index-1763a04f.js.map → index-7739ddf5.js.map} +1 -1
- package/dist/_chunks/{index-89d27faa.js → index-794eb0b6.js} +14 -13
- package/dist/_chunks/{index-89d27faa.js.map → index-794eb0b6.js.map} +1 -1
- package/dist/_chunks/{index-f448aed2.js → index-7e9cd960.js} +13 -12
- package/dist/_chunks/{index-f448aed2.js.map → index-7e9cd960.js.map} +1 -1
- package/dist/_chunks/{index-0af587c3.js → index-7f642760.js} +78 -147
- package/dist/_chunks/index-7f642760.js.map +1 -0
- package/dist/_chunks/{index-56ced4ab.mjs → index-853bd239.mjs} +8 -7
- package/dist/_chunks/{index-56ced4ab.mjs.map → index-853bd239.mjs.map} +1 -1
- package/dist/_chunks/{index-b98ea3ce.mjs → index-8a4d0275.mjs} +13 -14
- package/dist/_chunks/{index-b98ea3ce.mjs.map → index-8a4d0275.mjs.map} +1 -1
- package/dist/_chunks/{index-6dbc94a9.mjs → index-9c45bda7.mjs} +6 -6
- package/dist/_chunks/{index-6dbc94a9.mjs.map → index-9c45bda7.mjs.map} +1 -1
- package/dist/_chunks/{index-4c5acc70.js → index-9eb160a3.js} +9 -10
- package/dist/_chunks/{index-4c5acc70.js.map → index-9eb160a3.js.map} +1 -1
- package/dist/_chunks/{index-51a15b27.js → index-9f155b14.js} +4 -4
- package/dist/_chunks/{index-51a15b27.js.map → index-9f155b14.js.map} +1 -1
- package/dist/_chunks/{index-066ee02e.js → index-9f50c8b0.js} +8 -10
- package/dist/_chunks/{index-066ee02e.js.map → index-9f50c8b0.js.map} +1 -1
- package/dist/_chunks/{index-284c5926.js → index-9f900c47.js} +33 -47
- package/dist/_chunks/index-9f900c47.js.map +1 -0
- package/dist/_chunks/{index-5d8d89a7.js → index-a163001f.js} +13 -13
- package/dist/_chunks/{index-5d8d89a7.js.map → index-a163001f.js.map} +1 -1
- package/dist/_chunks/{index-34a2909e.mjs → index-a3176d19.mjs} +12 -12
- package/dist/_chunks/{index-34a2909e.mjs.map → index-a3176d19.mjs.map} +1 -1
- package/dist/_chunks/{index-ea23ee9f.mjs → index-a7d28c42.mjs} +9 -11
- package/dist/_chunks/{index-ea23ee9f.mjs.map → index-a7d28c42.mjs.map} +1 -1
- package/dist/_chunks/{index-a4348f3b.js → index-a8358156.js} +12 -12
- package/dist/_chunks/index-a8358156.js.map +1 -0
- package/dist/_chunks/{index-58db145d.mjs → index-a8d13f01.mjs} +3 -3
- package/dist/_chunks/{index-58db145d.mjs.map → index-a8d13f01.mjs.map} +1 -1
- package/dist/_chunks/{index-59d22949.mjs → index-b4cc14ad.mjs} +8 -9
- package/dist/_chunks/{index-59d22949.mjs.map → index-b4cc14ad.mjs.map} +1 -1
- package/dist/_chunks/{index-6a512cec.js → index-bad666f0.js} +8 -9
- package/dist/_chunks/{index-6a512cec.js.map → index-bad666f0.js.map} +1 -1
- package/dist/_chunks/{index-53ba81f9.mjs → index-bf788868.mjs} +9 -10
- package/dist/_chunks/{index-53ba81f9.mjs.map → index-bf788868.mjs.map} +1 -1
- package/dist/_chunks/{index-da04b144.js → index-bfb5b3ab.js} +14 -13
- package/dist/_chunks/{index-da04b144.js.map → index-bfb5b3ab.js.map} +1 -1
- package/dist/_chunks/{index-cadd3ee0.js → index-c0603138.js} +4 -4
- package/dist/_chunks/{index-cadd3ee0.js.map → index-c0603138.js.map} +1 -1
- package/dist/_chunks/{index-c604806d.js → index-c3761887.js} +12 -12
- package/dist/_chunks/{index-c604806d.js.map → index-c3761887.js.map} +1 -1
- package/dist/_chunks/{index-1da8c640.mjs → index-c4d3a07b.mjs} +9 -10
- package/dist/_chunks/{index-1da8c640.mjs.map → index-c4d3a07b.mjs.map} +1 -1
- package/dist/_chunks/{index-36e0d449.mjs → index-c7386be1.mjs} +32 -45
- package/dist/_chunks/index-c7386be1.mjs.map +1 -0
- package/dist/_chunks/{index-8d4d361d.mjs → index-cc7bedec.mjs} +13 -13
- package/dist/_chunks/{index-8d4d361d.mjs.map → index-cc7bedec.mjs.map} +1 -1
- package/dist/_chunks/{index-86dfbe3a.js → index-cce8ecb6.js} +178 -72
- package/dist/_chunks/index-cce8ecb6.js.map +1 -0
- package/dist/_chunks/{index-acd6d64f.js → index-cdadc366.js} +8 -7
- package/dist/_chunks/{index-acd6d64f.js.map → index-cdadc366.js.map} +1 -1
- package/dist/_chunks/{index-48322669.mjs → index-d81f74c4.mjs} +3 -3
- package/dist/_chunks/index-d81f74c4.mjs.map +1 -0
- package/dist/_chunks/{index-b81f7273.mjs → index-d93367d2.mjs} +78 -147
- package/dist/_chunks/index-d93367d2.mjs.map +1 -0
- package/dist/_chunks/{index-85069cac.mjs → index-dace55d9.mjs} +9 -10
- package/dist/_chunks/{index-85069cac.mjs.map → index-dace55d9.mjs.map} +1 -1
- package/dist/_chunks/{index-f179c7ea.js → index-db37fbe6.js} +13 -13
- package/dist/_chunks/{index-f179c7ea.js.map → index-db37fbe6.js.map} +1 -1
- package/dist/_chunks/{index-d1620260.js → index-dcb2c919.js} +13 -14
- package/dist/_chunks/{index-d1620260.js.map → index-dcb2c919.js.map} +1 -1
- package/dist/_chunks/{index-52b5db8a.js → index-dd3259f3.js} +8 -9
- package/dist/_chunks/{index-52b5db8a.js.map → index-dd3259f3.js.map} +1 -1
- package/dist/_chunks/{index-7d40adea.mjs → index-df42dfec.mjs} +8 -7
- package/dist/_chunks/{index-7d40adea.mjs.map → index-df42dfec.mjs.map} +1 -1
- package/dist/_chunks/{index-edc9bb0b.js → index-e2663a88.js} +673 -811
- package/dist/_chunks/index-e2663a88.js.map +1 -0
- package/dist/_chunks/{index-7aed99db.js → index-e2c5346d.js} +12 -12
- package/dist/_chunks/{index-7aed99db.js.map → index-e2c5346d.js.map} +1 -1
- package/dist/_chunks/{index-e414353b.js → index-e7381e58.js} +8 -8
- package/dist/_chunks/{index-e414353b.js.map → index-e7381e58.js.map} +1 -1
- package/dist/_chunks/{index-73ba6bdd.mjs → index-e8eff6c5.mjs} +3 -3
- package/dist/_chunks/{index-73ba6bdd.mjs.map → index-e8eff6c5.mjs.map} +1 -1
- package/dist/_chunks/{index-370a4ee8.mjs → index-f69d3930.mjs} +12 -12
- package/dist/_chunks/index-f69d3930.mjs.map +1 -0
- package/dist/_chunks/{index-8ea5a488.js → index-f9e95b10.js} +9 -10
- package/dist/_chunks/{index-8ea5a488.js.map → index-f9e95b10.js.map} +1 -1
- package/dist/_chunks/{index-1b7e986c.mjs → index-fe29b1fd.mjs} +14 -13
- package/dist/_chunks/{index-1b7e986c.mjs.map → index-fe29b1fd.mjs.map} +1 -1
- package/dist/_chunks/{schema-f49c76d7.js → schema-8eebfdf9.js} +2 -2
- package/dist/_chunks/{schema-f49c76d7.js.map → schema-8eebfdf9.js.map} +1 -1
- package/dist/_chunks/{schema-a95f2514.mjs → schema-ac25a47b.mjs} +2 -2
- package/dist/_chunks/{schema-a95f2514.mjs.map → schema-ac25a47b.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-d051b610.mjs → validateWorkflow-2511dc85.mjs} +3 -3
- package/dist/_chunks/{validateWorkflow-d051b610.mjs.map → validateWorkflow-2511dc85.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-e66d7d2e.js → validateWorkflow-c0f3148d.js} +3 -3
- package/dist/_chunks/{validateWorkflow-e66d7d2e.js.map → validateWorkflow-c0f3148d.js.map} +1 -1
- package/dist/admin/index.js +9 -10
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +9 -10
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/constants.d.ts +10 -0
- package/dist/admin/src/contexts/admin.d.ts +2 -2
- package/dist/admin/src/hooks/__mocks__/useSettingsMenu.d.ts +2 -0
- package/dist/admin/src/hooks/useEnterprise.d.ts +6 -4
- package/dist/admin/src/hooks/useSettingsMenu.d.ts +24 -0
- package/dist/admin/src/pages/Auth/AuthPage.d.ts +6 -0
- package/dist/admin/src/pages/Auth/components/FieldActionWrapper.d.ts +3 -0
- package/dist/admin/src/pages/Auth/components/ForgotPassword.d.ts +3 -0
- package/dist/admin/src/pages/Auth/components/ForgotPasswordSuccess.d.ts +2 -0
- package/dist/admin/src/pages/Auth/components/Login.d.ts +8 -0
- package/dist/admin/src/pages/Auth/components/Oops.d.ts +2 -0
- package/dist/admin/src/pages/Auth/components/Register.d.ts +7 -0
- package/dist/admin/src/pages/Auth/components/ResetPassword.d.ts +3 -0
- package/dist/admin/src/pages/Auth/constants.d.ts +14 -0
- package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
- package/dist/admin/src/types/permissions.d.ts +10 -0
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +3 -1
- package/dist/cli.mjs.map +1 -1
- package/dist/ee/admin/src/constants.d.ts +3 -1
- package/dist/ee/admin/src/pages/AuthPage/components/Login.d.ts +3 -0
- package/dist/ee/admin/src/pages/AuthPage/components/Providers.d.ts +2 -0
- package/dist/ee/admin/src/pages/AuthPage/components/SSOProviders.d.ts +8 -0
- package/dist/ee/admin/src/pages/AuthPage/constants.d.ts +3 -0
- package/dist/ee/admin/src/pages/AuthResponse.d.ts +2 -0
- package/dist/ee/admin/src/pages/HomePage.d.ts +1 -1
- package/dist/shared/contracts/authentication.d.ts +126 -0
- package/dist/shared/contracts/providers.d.ts +18 -0
- package/package.json +21 -21
- package/dist/_chunks/HomePage-a3cc32d2.mjs.map +0 -1
- package/dist/_chunks/HomePage-bdcb51be.js.map +0 -1
- package/dist/_chunks/SSOProviders-1d062c95.mjs.map +0 -1
- package/dist/_chunks/SSOProviders-1ef0a89e.js.map +0 -1
- package/dist/_chunks/constants-12dfb222.mjs +0 -34
- package/dist/_chunks/constants-12dfb222.mjs.map +0 -1
- package/dist/_chunks/constants-1aea1185.js +0 -34
- package/dist/_chunks/constants-1aea1185.js.map +0 -1
- package/dist/_chunks/constants-727a113c.js.map +0 -1
- package/dist/_chunks/constants-86aa3e70.js.map +0 -1
- package/dist/_chunks/constants-921eda17.mjs.map +0 -1
- package/dist/_chunks/constants-9de7641c.mjs.map +0 -1
- package/dist/_chunks/index-0af587c3.js.map +0 -1
- package/dist/_chunks/index-137490ba.js.map +0 -1
- package/dist/_chunks/index-16030b74.js.map +0 -1
- package/dist/_chunks/index-284c5926.js.map +0 -1
- package/dist/_chunks/index-305a03f4.mjs.map +0 -1
- package/dist/_chunks/index-34de382e.mjs.map +0 -1
- package/dist/_chunks/index-36e0d449.mjs.map +0 -1
- package/dist/_chunks/index-370a4ee8.mjs.map +0 -1
- package/dist/_chunks/index-48322669.mjs.map +0 -1
- package/dist/_chunks/index-5752584c.mjs.map +0 -1
- package/dist/_chunks/index-86dfbe3a.js.map +0 -1
- package/dist/_chunks/index-a4348f3b.js.map +0 -1
- package/dist/_chunks/index-b2257157.js.map +0 -1
- package/dist/_chunks/index-b81f7273.mjs.map +0 -1
- package/dist/_chunks/index-bdfc1149.mjs.map +0 -1
- package/dist/_chunks/index-edc9bb0b.js.map +0 -1
|
@@ -11,6 +11,7 @@ import outdent from "outdent";
|
|
|
11
11
|
import { format } from "prettier";
|
|
12
12
|
import { createElement } from "react";
|
|
13
13
|
import { renderToStaticMarkup } from "react-dom/server";
|
|
14
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
15
|
import webpack, { HotModuleReplacementPlugin, DefinePlugin, webpack as webpack$1 } from "webpack";
|
|
15
16
|
import browserslistToEsbuild from "browserslist-to-esbuild";
|
|
16
17
|
import { ESBuildMinifyPlugin } from "esbuild-loader";
|
|
@@ -29,29 +30,30 @@ import syncFs from "node:fs";
|
|
|
29
30
|
import camelCase from "lodash/camelCase";
|
|
30
31
|
import browserslist from "browserslist";
|
|
31
32
|
import strapiFactory from "@strapi/strapi";
|
|
32
|
-
import { getConfigUrls, joinBy } from "@strapi/utils";
|
|
33
|
+
import { env, getConfigUrls, joinBy } from "@strapi/utils";
|
|
33
34
|
import dotenv from "dotenv";
|
|
34
35
|
import EE from "@strapi/strapi/dist/utils/ee";
|
|
35
36
|
import { performance } from "perf_hooks";
|
|
36
37
|
import chokidar from "chokidar";
|
|
37
38
|
import cluster from "node:cluster";
|
|
39
|
+
import { promisify } from "node:util";
|
|
38
40
|
import webpackDevMiddleware from "webpack-dev-middleware";
|
|
39
41
|
import webpackHotMiddleware from "webpack-hot-middleware";
|
|
40
42
|
const build$2 = ({ command, ctx }) => {
|
|
41
|
-
command.command("build").option("-d, --debug", "Enable debugging mode with verbose logs", false).option("--minify", "Minify the output", true).option("--no-optimization", "[deprecated]: use minify instead").option("--silent", "Don't log anything", false).option("--sourcemap", "Produce sourcemaps", false).option("--stats", "Print build statistics to the console", false).description("Build the strapi admin app").action(async (options) => {
|
|
42
|
-
const { build: build2 } = await import("./build-
|
|
43
|
+
command.command("build").option("-d, --debug", "Enable debugging mode with verbose logs", false).option("--ignore-prompts", "Ignore all prompts", false).option("--minify", "Minify the output", true).option("--no-optimization", "[deprecated]: use minify instead").option("--silent", "Don't log anything", false).option("--sourcemap", "Produce sourcemaps", false).option("--stats", "Print build statistics to the console", false).description("Build the strapi admin app").action(async (options) => {
|
|
44
|
+
const { build: build2 } = await import("./build-b67ecc59.mjs");
|
|
43
45
|
return build2({ ...options, ...ctx });
|
|
44
46
|
});
|
|
45
47
|
};
|
|
46
48
|
const develop$1 = ({ command, ctx }) => {
|
|
47
|
-
command.command("develop").alias("dev").option("-d, --debug", "Enable debugging mode with verbose logs", false).option("--silent", "Don't log anything", false).option("--polling", "Watch for file changes in network directories", false).option(
|
|
49
|
+
command.command("develop").alias("dev").option("-d, --debug", "Enable debugging mode with verbose logs", false).option("--silent", "Don't log anything", false).option("--ignore-prompts", "Ignore all prompts", false).option("--polling", "Watch for file changes in network directories", false).option("--watch-admin", "Watch the admin panel for hot changes", false).option(
|
|
48
50
|
"--no-build",
|
|
49
51
|
"[deprecated]: there is middleware for the server, it is no longer a separate process"
|
|
50
52
|
).option(
|
|
51
53
|
"--watch-admin",
|
|
52
54
|
"[deprecated]: there is now middleware for watching, it is no longer a separate process"
|
|
53
55
|
).option("--browser <name>", "[deprecated]: use open instead").option("--open", "Open the admin in your browser", true).description("Start your Strapi application in development mode").action(async (options) => {
|
|
54
|
-
const { develop: develop2 } = await import("./develop-
|
|
56
|
+
const { develop: develop2 } = await import("./develop-d97e7494.mjs");
|
|
55
57
|
return develop2({ ...options, ...ctx });
|
|
56
58
|
});
|
|
57
59
|
};
|
|
@@ -76,12 +78,13 @@ const getPackageManager = () => {
|
|
|
76
78
|
const PEER_DEPS = {
|
|
77
79
|
react: "^18.0.0",
|
|
78
80
|
"react-dom": "^18.0.0",
|
|
79
|
-
"react-router-dom": "^5.
|
|
80
|
-
"styled-components": "^5.
|
|
81
|
+
"react-router-dom": "^5.2.0",
|
|
82
|
+
"styled-components": "^5.2.1"
|
|
81
83
|
};
|
|
82
84
|
const checkRequiredDependencies = async ({
|
|
83
85
|
cwd,
|
|
84
|
-
logger
|
|
86
|
+
logger,
|
|
87
|
+
ignorePrompts
|
|
85
88
|
}) => {
|
|
86
89
|
const pkg = await readPkgUp({ cwd });
|
|
87
90
|
if (!pkg) {
|
|
@@ -119,7 +122,7 @@ const checkRequiredDependencies = async ({
|
|
|
119
122
|
os.EOL,
|
|
120
123
|
install.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)
|
|
121
124
|
);
|
|
122
|
-
if (process.env.NODE_ENV !== "development") {
|
|
125
|
+
if (process.env.NODE_ENV !== "development" || ignorePrompts) {
|
|
123
126
|
return { didInstall: false };
|
|
124
127
|
}
|
|
125
128
|
const { install: installAns } = await inquirer.prompt({
|
|
@@ -224,6 +227,63 @@ const installDependencies = async (install, { cwd, logger }) => {
|
|
|
224
227
|
throw new Error("Package installation failed");
|
|
225
228
|
}
|
|
226
229
|
};
|
|
230
|
+
const styles = `
|
|
231
|
+
.strapi--root {
|
|
232
|
+
position: absolute;
|
|
233
|
+
top: 0;
|
|
234
|
+
right: 0;
|
|
235
|
+
left: 0;
|
|
236
|
+
bottom: 0;
|
|
237
|
+
background: #fff;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.strapi--no-js {
|
|
241
|
+
position: absolute;
|
|
242
|
+
top: 50%;
|
|
243
|
+
left: 50%;
|
|
244
|
+
transform: translate(-50%, -50%);
|
|
245
|
+
text-align: center;
|
|
246
|
+
font-family: helvetica, arial, sans-serif;
|
|
247
|
+
}
|
|
248
|
+
`;
|
|
249
|
+
const NoJavascript = () => {
|
|
250
|
+
return /* @__PURE__ */ jsx("noscript", { children: /* @__PURE__ */ jsx("div", { className: "strapi--root", children: /* @__PURE__ */ jsxs("div", { className: "strapi--no-js", children: [
|
|
251
|
+
/* @__PURE__ */ jsx("style", { type: "text/css", children: styles }),
|
|
252
|
+
/* @__PURE__ */ jsx("h1", { children: "JavaScript disabled" }),
|
|
253
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
254
|
+
"Please ",
|
|
255
|
+
/* @__PURE__ */ jsx("a", { href: "https://www.enable-javascript.com/", children: "enable JavaScript" }),
|
|
256
|
+
" in your browser and reload the page to proceed."
|
|
257
|
+
] })
|
|
258
|
+
] }) }) });
|
|
259
|
+
};
|
|
260
|
+
const globalStyles = `
|
|
261
|
+
html,
|
|
262
|
+
body,
|
|
263
|
+
#strapi {
|
|
264
|
+
height: 100%;
|
|
265
|
+
}
|
|
266
|
+
body {
|
|
267
|
+
margin: 0;
|
|
268
|
+
-webkit-font-smoothing: antialiased;
|
|
269
|
+
}
|
|
270
|
+
`;
|
|
271
|
+
const DefaultDocument = () => {
|
|
272
|
+
return /* @__PURE__ */ jsxs("html", { lang: "en", children: [
|
|
273
|
+
/* @__PURE__ */ jsxs("head", { children: [
|
|
274
|
+
/* @__PURE__ */ jsx("meta", { charSet: "utf-8" }),
|
|
275
|
+
/* @__PURE__ */ jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1, viewport-fit=cover" }),
|
|
276
|
+
/* @__PURE__ */ jsx("meta", { name: "robots", content: "noindex" }),
|
|
277
|
+
/* @__PURE__ */ jsx("meta", { name: "referrer", content: "same-origin" }),
|
|
278
|
+
/* @__PURE__ */ jsx("title", { children: "Strapi Admin" }),
|
|
279
|
+
/* @__PURE__ */ jsx("style", { children: globalStyles })
|
|
280
|
+
] }),
|
|
281
|
+
/* @__PURE__ */ jsxs("body", { children: [
|
|
282
|
+
/* @__PURE__ */ jsx("div", { id: "strapi" }),
|
|
283
|
+
/* @__PURE__ */ jsx(NoJavascript, {})
|
|
284
|
+
] })
|
|
285
|
+
] });
|
|
286
|
+
};
|
|
227
287
|
const getEntryModule = ({ plugins }) => {
|
|
228
288
|
const pluginsObject = plugins.map(({ name, importName }) => `'${name}': ${importName}`).join(",\n");
|
|
229
289
|
const pluginsImport = plugins.map(({ importName, path: path2 }) => `import ${importName} from '${path2}';`).join("\n");
|
|
@@ -233,7 +293,7 @@ const getEntryModule = ({ plugins }) => {
|
|
|
233
293
|
* Any modifications made will be discarded.
|
|
234
294
|
*/
|
|
235
295
|
${pluginsImport}
|
|
236
|
-
import { renderAdmin } from "@strapi/
|
|
296
|
+
import { renderAdmin } from "@strapi/strapi/admin"
|
|
237
297
|
|
|
238
298
|
renderAdmin(
|
|
239
299
|
document.getElementById("strapi"),
|
|
@@ -244,14 +304,8 @@ const getEntryModule = ({ plugins }) => {
|
|
|
244
304
|
})
|
|
245
305
|
`;
|
|
246
306
|
};
|
|
247
|
-
const
|
|
248
|
-
const
|
|
249
|
-
return DefaultDocument;
|
|
250
|
-
};
|
|
251
|
-
const getDocumentHTML = ({ logger }) => {
|
|
252
|
-
const Document = getDefaultDocumentComponent();
|
|
253
|
-
logger.debug("Got the default document");
|
|
254
|
-
const result = renderToStaticMarkup(createElement(Document));
|
|
307
|
+
const getDocumentHTML = async ({ logger }) => {
|
|
308
|
+
const result = renderToStaticMarkup(createElement(DefaultDocument));
|
|
255
309
|
logger.debug("Rendered the HTML");
|
|
256
310
|
return outdent`<!DOCTYPE html>${result}`;
|
|
257
311
|
};
|
|
@@ -267,7 +321,9 @@ ${AUTO_GENERATED_WARNING}
|
|
|
267
321
|
const writeStaticClientFiles = async (ctx) => {
|
|
268
322
|
await fs.mkdir(ctx.runtimeDir, { recursive: true });
|
|
269
323
|
ctx.logger.debug("Created the runtime directory");
|
|
270
|
-
const indexHtml = decorateHTMLWithAutoGeneratedWarning(
|
|
324
|
+
const indexHtml = decorateHTMLWithAutoGeneratedWarning(
|
|
325
|
+
await getDocumentHTML({ logger: ctx.logger })
|
|
326
|
+
);
|
|
271
327
|
await fs.writeFile(
|
|
272
328
|
path.join(ctx.runtimeDir, "index.html"),
|
|
273
329
|
format(indexHtml, {
|
|
@@ -392,12 +448,23 @@ const resolveBaseConfig = async (ctx) => {
|
|
|
392
448
|
module: {
|
|
393
449
|
rules: [
|
|
394
450
|
{
|
|
395
|
-
test: /\.(
|
|
451
|
+
test: /\.(ts|tsx)$/,
|
|
396
452
|
loader: require.resolve("esbuild-loader"),
|
|
397
453
|
options: {
|
|
398
454
|
loader: "tsx",
|
|
399
|
-
|
|
400
|
-
|
|
455
|
+
target,
|
|
456
|
+
jsx: "automatic"
|
|
457
|
+
}
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
test: /\.(js|jsx|mjs)$/,
|
|
461
|
+
use: {
|
|
462
|
+
loader: require.resolve("esbuild-loader"),
|
|
463
|
+
options: {
|
|
464
|
+
loader: "jsx",
|
|
465
|
+
target,
|
|
466
|
+
jsx: "automatic"
|
|
467
|
+
}
|
|
401
468
|
}
|
|
402
469
|
},
|
|
403
470
|
{
|
|
@@ -618,12 +685,6 @@ const getStrapiAdminEnvVars = (defaultEnv) => {
|
|
|
618
685
|
return acc;
|
|
619
686
|
}, defaultEnv);
|
|
620
687
|
};
|
|
621
|
-
const CORE_PLUGINS = [
|
|
622
|
-
"@strapi/plugin-content-manager",
|
|
623
|
-
"@strapi/plugin-content-type-builder",
|
|
624
|
-
"@strapi/plugin-email",
|
|
625
|
-
"@strapi/plugin-upload"
|
|
626
|
-
];
|
|
627
688
|
const validatePackageHasStrapi = (pkg) => "strapi" in pkg && typeof pkg.strapi === "object" && !Array.isArray(pkg.strapi) && pkg.strapi !== null;
|
|
628
689
|
const validatePackageIsPlugin = (pkg) => validatePackageHasStrapi(pkg) && pkg.strapi.kind === "plugin";
|
|
629
690
|
const getEnabledPlugins = async ({
|
|
@@ -632,17 +693,6 @@ const getEnabledPlugins = async ({
|
|
|
632
693
|
logger
|
|
633
694
|
}) => {
|
|
634
695
|
const plugins = {};
|
|
635
|
-
logger.debug("Core plugins", os.EOL, CORE_PLUGINS);
|
|
636
|
-
for (const plugin of CORE_PLUGINS) {
|
|
637
|
-
const pkg = await getModule(plugin, cwd);
|
|
638
|
-
if (pkg && validatePackageIsPlugin(pkg)) {
|
|
639
|
-
const name = pkg.strapi.name || pkg.name;
|
|
640
|
-
plugins[name] = {
|
|
641
|
-
name,
|
|
642
|
-
pathToPlugin: plugin
|
|
643
|
-
};
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
696
|
const deps = strapi.config.get("info.dependencies", {});
|
|
647
697
|
logger.debug("Dependencies from user's project", os.EOL, deps);
|
|
648
698
|
for (const dep of Object.keys(deps)) {
|
|
@@ -683,7 +733,7 @@ const loadUserPluginsFile = async (root) => {
|
|
|
683
733
|
const filePath = path.join(root, file);
|
|
684
734
|
const configFile = await loadFile(filePath);
|
|
685
735
|
if (configFile) {
|
|
686
|
-
return typeof configFile === "function" ? configFile() : configFile;
|
|
736
|
+
return typeof configFile === "function" ? configFile({ env }) : configFile;
|
|
687
737
|
}
|
|
688
738
|
}
|
|
689
739
|
return {};
|
|
@@ -698,9 +748,10 @@ const createBuildContext = async ({
|
|
|
698
748
|
cwd,
|
|
699
749
|
logger,
|
|
700
750
|
tsconfig,
|
|
751
|
+
strapi,
|
|
701
752
|
options = {}
|
|
702
753
|
}) => {
|
|
703
|
-
const strapiInstance = strapiFactory({
|
|
754
|
+
const strapiInstance = strapi ?? strapiFactory({
|
|
704
755
|
// Directories
|
|
705
756
|
appDir: cwd,
|
|
706
757
|
distDir: tsconfig?.config.options.outDir ?? "",
|
|
@@ -710,12 +761,12 @@ const createBuildContext = async ({
|
|
|
710
761
|
});
|
|
711
762
|
const { serverUrl, adminPath } = getConfigUrls(strapiInstance.config, true);
|
|
712
763
|
await loadEnv(cwd);
|
|
713
|
-
const
|
|
764
|
+
const env2 = getStrapiAdminEnvVars({
|
|
714
765
|
ADMIN_PATH: adminPath,
|
|
715
766
|
STRAPI_ADMIN_BACKEND_URL: serverUrl,
|
|
716
767
|
STRAPI_TELEMETRY_DISABLED: String(strapiInstance.telemetry.isDisabled)
|
|
717
768
|
});
|
|
718
|
-
const envKeys = Object.keys(
|
|
769
|
+
const envKeys = Object.keys(env2);
|
|
719
770
|
if (envKeys.length > 0) {
|
|
720
771
|
logger.info(
|
|
721
772
|
[
|
|
@@ -751,7 +802,7 @@ const createBuildContext = async ({
|
|
|
751
802
|
distDir,
|
|
752
803
|
distPath,
|
|
753
804
|
entry,
|
|
754
|
-
env,
|
|
805
|
+
env: env2,
|
|
755
806
|
logger,
|
|
756
807
|
options,
|
|
757
808
|
plugins: pluginsWithFront,
|
|
@@ -805,12 +856,14 @@ function getTimer() {
|
|
|
805
856
|
}
|
|
806
857
|
return { start, end, getTimings: () => timings };
|
|
807
858
|
}
|
|
808
|
-
const build = async ({ logger, cwd, tsconfig, ...options }) => {
|
|
859
|
+
const build = async ({ logger, cwd, tsconfig, ignorePrompts, ...options }) => {
|
|
809
860
|
const timer = getTimer();
|
|
810
|
-
const { didInstall } = await checkRequiredDependencies({ cwd, logger }).catch(
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
861
|
+
const { didInstall } = await checkRequiredDependencies({ cwd, logger, ignorePrompts }).catch(
|
|
862
|
+
(err) => {
|
|
863
|
+
logger.error(err.message);
|
|
864
|
+
process.exit(1);
|
|
865
|
+
}
|
|
866
|
+
);
|
|
814
867
|
if (didInstall) {
|
|
815
868
|
return;
|
|
816
869
|
}
|
|
@@ -918,20 +971,60 @@ const watch = async (ctx) => {
|
|
|
918
971
|
}
|
|
919
972
|
]);
|
|
920
973
|
devMiddleware.waitUntilValid(() => {
|
|
921
|
-
res(
|
|
974
|
+
res({
|
|
975
|
+
async close() {
|
|
976
|
+
await Promise.all([
|
|
977
|
+
promisify(devMiddleware.close.bind(devMiddleware))(),
|
|
978
|
+
hotMiddleware.close(),
|
|
979
|
+
promisify(compiler.close.bind(compiler))()
|
|
980
|
+
]);
|
|
981
|
+
}
|
|
982
|
+
});
|
|
922
983
|
});
|
|
923
984
|
});
|
|
924
985
|
};
|
|
925
|
-
const develop = async ({
|
|
986
|
+
const develop = async ({
|
|
987
|
+
cwd,
|
|
988
|
+
polling,
|
|
989
|
+
logger,
|
|
990
|
+
tsconfig,
|
|
991
|
+
ignorePrompts,
|
|
992
|
+
watchAdmin,
|
|
993
|
+
...options
|
|
994
|
+
}) => {
|
|
926
995
|
const timer = getTimer();
|
|
927
996
|
if (cluster.isPrimary) {
|
|
928
|
-
const { didInstall } = await checkRequiredDependencies({ cwd, logger }).catch(
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
997
|
+
const { didInstall } = await checkRequiredDependencies({ cwd, logger, ignorePrompts }).catch(
|
|
998
|
+
(err) => {
|
|
999
|
+
logger.error(err.message);
|
|
1000
|
+
process.exit(1);
|
|
1001
|
+
}
|
|
1002
|
+
);
|
|
932
1003
|
if (didInstall) {
|
|
933
1004
|
return;
|
|
934
1005
|
}
|
|
1006
|
+
if (!watchAdmin) {
|
|
1007
|
+
timer.start("createBuildContext");
|
|
1008
|
+
const contextSpinner = logger.spinner(`Building build context`).start();
|
|
1009
|
+
console.log("");
|
|
1010
|
+
const ctx = await createBuildContext({
|
|
1011
|
+
cwd,
|
|
1012
|
+
logger,
|
|
1013
|
+
tsconfig,
|
|
1014
|
+
options
|
|
1015
|
+
});
|
|
1016
|
+
const contextDuration = timer.end("createBuildContext");
|
|
1017
|
+
contextSpinner.text = `Building build context (${contextDuration}ms)`;
|
|
1018
|
+
contextSpinner.succeed();
|
|
1019
|
+
timer.start("creatingAdmin");
|
|
1020
|
+
const adminSpinner = logger.spinner(`Creating admin`).start();
|
|
1021
|
+
EE.init(cwd);
|
|
1022
|
+
await writeStaticClientFiles(ctx);
|
|
1023
|
+
await build$1(ctx);
|
|
1024
|
+
const adminDuration = timer.end("creatingAdmin");
|
|
1025
|
+
adminSpinner.text = `Creating admin (${adminDuration}ms)`;
|
|
1026
|
+
adminSpinner.succeed();
|
|
1027
|
+
}
|
|
935
1028
|
cluster.on("message", async (worker, message) => {
|
|
936
1029
|
switch (message) {
|
|
937
1030
|
case "reload": {
|
|
@@ -961,27 +1054,37 @@ const develop = async ({ cwd, polling, logger, tsconfig, ...options }) => {
|
|
|
961
1054
|
compilingTsSpinner.text = `Compiling TS (${compilingDuration}ms)`;
|
|
962
1055
|
compilingTsSpinner.succeed();
|
|
963
1056
|
}
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
logger,
|
|
970
|
-
tsconfig,
|
|
971
|
-
options
|
|
1057
|
+
const strapi = strapiFactory({
|
|
1058
|
+
appDir: cwd,
|
|
1059
|
+
distDir: tsconfig?.config.options.outDir ?? "",
|
|
1060
|
+
autoReload: true,
|
|
1061
|
+
serveAdminPanel: !watchAdmin
|
|
972
1062
|
});
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
1063
|
+
let webpackWatcher;
|
|
1064
|
+
if (watchAdmin) {
|
|
1065
|
+
timer.start("createBuildContext");
|
|
1066
|
+
const contextSpinner = logger.spinner(`Building build context`).start();
|
|
1067
|
+
console.log("");
|
|
1068
|
+
const ctx = await createBuildContext({
|
|
1069
|
+
cwd,
|
|
1070
|
+
logger,
|
|
1071
|
+
strapi,
|
|
1072
|
+
tsconfig,
|
|
1073
|
+
options
|
|
1074
|
+
});
|
|
1075
|
+
const contextDuration = timer.end("createBuildContext");
|
|
1076
|
+
contextSpinner.text = `Building build context (${contextDuration}ms)`;
|
|
1077
|
+
contextSpinner.succeed();
|
|
1078
|
+
timer.start("creatingAdmin");
|
|
1079
|
+
const adminSpinner = logger.spinner(`Creating admin`).start();
|
|
1080
|
+
EE.init(cwd);
|
|
1081
|
+
await writeStaticClientFiles(ctx);
|
|
1082
|
+
webpackWatcher = await watch(ctx);
|
|
1083
|
+
const adminDuration = timer.end("creatingAdmin");
|
|
1084
|
+
adminSpinner.text = `Creating admin (${adminDuration}ms)`;
|
|
1085
|
+
adminSpinner.succeed();
|
|
1086
|
+
}
|
|
1087
|
+
const strapiInstance = await strapi.load();
|
|
985
1088
|
timer.start("generatingTS");
|
|
986
1089
|
const generatingTsSpinner = logger.spinner(`Generating types`).start();
|
|
987
1090
|
await tsUtils.generators.generate({
|
|
@@ -1046,6 +1149,9 @@ const develop = async ({ cwd, polling, logger, tsconfig, ...options }) => {
|
|
|
1046
1149
|
);
|
|
1047
1150
|
await watcher.close();
|
|
1048
1151
|
await strapiInstance.destroy();
|
|
1152
|
+
if (webpackWatcher) {
|
|
1153
|
+
webpackWatcher.close();
|
|
1154
|
+
}
|
|
1049
1155
|
process.send?.("killed");
|
|
1050
1156
|
break;
|
|
1051
1157
|
}
|
|
@@ -1060,4 +1166,4 @@ export {
|
|
|
1060
1166
|
handleUnexpectedError as h,
|
|
1061
1167
|
index as i
|
|
1062
1168
|
};
|
|
1063
|
-
//# sourceMappingURL=index-
|
|
1169
|
+
//# sourceMappingURL=index-44360544.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-44360544.mjs","sources":["../../_internal/cli/index.ts","../../_internal/node/core/managers.ts","../../_internal/node/core/dependencies.ts","../../admin/src/components/NoJavascript.tsx","../../admin/src/components/DefaultDocument.tsx","../../_internal/node/staticFiles.ts","../../_internal/node/webpack/aliases.ts","../../_internal/node/core/monorepo.ts","../../_internal/node/core/files.ts","../../_internal/node/webpack/config.ts","../../_internal/node/core/errors.ts","../../_internal/node/webpack/build.ts","../../_internal/node/core/env.ts","../../_internal/node/core/plugins.ts","../../_internal/node/createBuildContext.ts","../../_internal/node/core/timer.ts","../../_internal/node/build.ts","../../_internal/node/webpack/watch.ts","../../_internal/node/develop.ts"],"sourcesContent":["import type { StrapiCommand } from '@strapi/strapi';\nimport type { BuildCLIOptions } from './commands/build';\nimport type { DevelopCLIOptions } from './commands/develop';\n\n/**\n * `$ strapi build`\n */\nconst build: StrapiCommand = ({ command, ctx }) => {\n command\n .command('build')\n .option('-d, --debug', 'Enable debugging mode with verbose logs', false)\n .option('--ignore-prompts', 'Ignore all prompts', false)\n .option('--minify', 'Minify the output', true)\n .option('--no-optimization', '[deprecated]: use minify instead')\n .option('--silent', \"Don't log anything\", false)\n .option('--sourcemap', 'Produce sourcemaps', false)\n .option('--stats', 'Print build statistics to the console', false)\n .description('Build the strapi admin app')\n .action(async (options: BuildCLIOptions) => {\n const { build } = await import('./commands/build');\n\n return build({ ...options, ...ctx });\n });\n};\n\n/**\n * `$ strapi develop`\n */\nconst develop: StrapiCommand = ({ command, ctx }) => {\n command\n .command('develop')\n .alias('dev')\n .option('-d, --debug', 'Enable debugging mode with verbose logs', false)\n .option('--silent', \"Don't log anything\", false)\n .option('--ignore-prompts', 'Ignore all prompts', false)\n .option('--polling', 'Watch for file changes in network directories', false)\n .option('--watch-admin', 'Watch the admin panel for hot changes', false)\n .option(\n '--no-build',\n '[deprecated]: there is middleware for the server, it is no longer a separate process'\n )\n .option(\n '--watch-admin',\n '[deprecated]: there is now middleware for watching, it is no longer a separate process'\n )\n .option('--browser <name>', '[deprecated]: use open instead')\n .option('--open', 'Open the admin in your browser', true)\n .description('Start your Strapi application in development mode')\n .action(async (options: DevelopCLIOptions) => {\n const { develop } = await import('./commands/develop');\n\n return develop({ ...options, ...ctx });\n });\n};\n\nexport { build, develop };\n","/**\n * @description Supports the following managers:\n * – npm\n * – yarn\n * – pnpm\n */\nconst getPackageManager = () => {\n // Yes, the env var is lowercase - it is set by the package managers themselves\n const agent = process.env.npm_config_user_agent || '';\n\n if (agent.includes('yarn')) {\n return 'yarn';\n }\n\n if (agent.includes('pnpm')) {\n return 'pnpm';\n }\n\n // Both yarn and pnpm does a `npm/?` thing, thus the slightly different match here\n // Theoretically not needed since we check for yarn/pnpm above, but in case other\n // package managers do the same thing, we'll (hopefully) catch them here.\n if (/^npm\\/\\d/.test(agent)) {\n return 'npm';\n }\n\n return undefined;\n};\n\nexport { getPackageManager };\n","import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport inquirer from 'inquirer';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\nimport type { BuildOptions } from '../build';\nimport { getPackageManager } from './managers';\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^5.2.0',\n 'styled-components': '^5.2.1',\n};\n\ninterface CheckRequiredDependenciesResult {\n didInstall: boolean;\n}\n\ninterface DepToInstall {\n name: string;\n wantedVersion: string;\n declaredVersion?: never;\n}\n\n/**\n * Checks the user's project that it has declared and installed the required dependencies\n * needed by the Strapi admin project. Whilst generally speaking most modules will be\n * declared by the actual packages there are some packages where you only really want one of\n * and thus they are declared as peer dependencies – react / styled-components / etc.\n *\n * If these deps are not installed or declared, then we prompt the user to correct this. In\n * V4 this is not a hard requirement, but in V5 it will be. Might as well get people started now.\n */\nconst checkRequiredDependencies = async ({\n cwd,\n logger,\n ignorePrompts,\n}: Pick<\n BuildOptions,\n 'cwd' | 'logger' | 'ignorePrompts'\n>): Promise<CheckRequiredDependenciesResult> => {\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n interface DepToReview {\n name: string;\n wantedVersion: string;\n declaredVersion: string;\n }\n\n /**\n * Run through each of the peer deps and figure out if they need to be\n * installed or they need their version checked against.\n */\n const { install, review } = Object.entries(PEER_DEPS).reduce<{\n install: DepToInstall[];\n review: DepToReview[];\n }>(\n (acc, [name, version]) => {\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n const declaredVersion = pkg.packageJson.dependencies[name];\n\n if (!declaredVersion) {\n acc.install.push({\n name,\n wantedVersion: version,\n });\n } else {\n acc.review.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return acc;\n },\n {\n install: [],\n review: [],\n }\n );\n\n if (install.length > 0) {\n logger.info(\n 'The Strapi admin needs to install the following dependencies:',\n os.EOL,\n install.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n\n /**\n * temporary until V5 when we _will_ be enforcing these dependencies as required.\n */\n if (process.env.NODE_ENV !== 'development' || ignorePrompts) {\n return { didInstall: false };\n }\n\n /**\n * This prompt can be removed in V5 & therefore the code underneath can be refactored to\n * only install the deps and return that we installed deps.\n */\n const { install: installAns } = await inquirer.prompt({\n type: 'confirm',\n name: 'install',\n default: true,\n message:\n 'Would you like to install these dependencies now? These are not required but are recommended, from V5 these will be required.',\n });\n\n if (installAns) {\n await installDependencies(install, {\n cwd,\n logger,\n });\n\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n return { didInstall: true };\n } else {\n return { didInstall: false };\n }\n }\n\n if (review.length) {\n const errors: string[] = [];\n\n for (const dep of review) {\n // The version specified in package.json could be incorrect, eg `foo`\n let minDeclaredVersion: SemVer | null = null;\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n /**\n * The delcared version should be semver compatible with our required version\n * of the dependency. If it's not, we should advise the user to change it.\n */\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n /**\n * TODO: when we know the packageManager we can advise the actual install command.\n */\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n }\n\n return { didInstall: false };\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nconst installDependencies = async (\n install: DepToInstall[],\n { cwd, logger }: Pick<BuildOptions, 'cwd' | 'logger'>\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = install.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--legacy-peer-deps', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nexport { checkRequiredDependencies, getModule };\nexport type { CheckRequiredDependenciesResult, PackageJson };\n","const styles = `\n.strapi--root {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: #fff;\n}\n\n.strapi--no-js {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n font-family: helvetica, arial, sans-serif;\n}\n`;\n\n/**\n * @internal\n *\n * @description this belongs to our default document that we render.\n */\nconst NoJavascript = () => {\n return (\n <noscript>\n <div className=\"strapi--root\">\n <div className=\"strapi--no-js\">\n <style type=\"text/css\">{styles}</style>\n <h1>JavaScript disabled</h1>\n <p>\n Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n browser and reload the page to proceed.\n </p>\n </div>\n </div>\n </noscript>\n );\n};\n\nexport { NoJavascript };\n","import { NoJavascript } from './NoJavascript';\n\n/**\n * TODO: add favicons.........\n */\n\nconst globalStyles = `\n html,\n body,\n #strapi {\n height: 100%;\n }\n body {\n margin: 0;\n -webkit-font-smoothing: antialiased;\n }\n`;\n\n/**\n * @internal\n */\nconst DefaultDocument = () => {\n return (\n <html lang=\"en\">\n <head>\n <meta charSet=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" />\n <meta name=\"robots\" content=\"noindex\" />\n <meta name=\"referrer\" content=\"same-origin\" />\n\n <title>Strapi Admin</title>\n <style>{globalStyles}</style>\n </head>\n <body>\n <div id=\"strapi\" />\n <NoJavascript />\n </body>\n </html>\n );\n};\n\nexport { DefaultDocument };\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport outdent from 'outdent';\nimport { format } from 'prettier';\nimport { createElement } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { DefaultDocument as Document } from '../../admin/src/components/DefaultDocument';\n\nimport type { BuildContext } from './createBuildContext';\n\ninterface EntryModuleArgs {\n plugins: BuildContext['plugins'];\n}\n\nconst getEntryModule = ({ plugins }: EntryModuleArgs): string => {\n const pluginsObject = plugins\n .map(({ name, importName }) => `'${name}': ${importName}`)\n .join(',\\n');\n\n const pluginsImport = plugins\n .map(({ importName, path }) => `import ${importName} from '${path}';`)\n .join('\\n');\n\n return outdent`\n /**\n * This file was automatically generated by Strapi.\n * Any modifications made will be discarded.\n */\n ${pluginsImport}\n import { renderAdmin } from \"@strapi/strapi/admin\"\n \n renderAdmin(\n document.getElementById(\"strapi\"),\n {\n plugins: {\n ${pluginsObject}\n }\n })\n `;\n};\n\n/**\n * TODO: Here in the future we could add the ability\n * to load a user's Document component?\n */\nconst getDocumentHTML = async ({ logger }: Pick<BuildContext, 'logger'>) => {\n const result = renderToStaticMarkup(createElement(Document));\n logger.debug('Rendered the HTML');\n\n return outdent`<!DOCTYPE html>${result}`;\n};\n\nconst AUTO_GENERATED_WARNING = `\nThis file was automatically generated by Strapi.\nAny modifications made will be discarded.\n`.trim();\n\n/**\n * Because we now auto-generate the index.html file,\n * we should be clear that people _should not_ modify it.\n *\n * @internal\n */\nconst decorateHTMLWithAutoGeneratedWarning = (htmlTemplate: string): string =>\n htmlTemplate.replace(/<head/, `\\n<!--\\n${AUTO_GENERATED_WARNING}\\n-->\\n<head`);\n\nconst writeStaticClientFiles = async (ctx: BuildContext) => {\n /**\n * For everything to work effectively we create a client folder in `.strapi` at the cwd level.\n * We then use the function we need to \"createAdmin\" as well as generate the Document index.html as well.\n *\n * All this links together an imaginary \"src/index\" that then allows vite to correctly build the admin panel.\n */\n\n await fs.mkdir(ctx.runtimeDir, { recursive: true });\n ctx.logger.debug('Created the runtime directory');\n\n const indexHtml = decorateHTMLWithAutoGeneratedWarning(\n await getDocumentHTML({ logger: ctx.logger })\n );\n\n await fs.writeFile(\n path.join(ctx.runtimeDir, 'index.html'),\n format(indexHtml, {\n parser: 'html',\n })\n );\n ctx.logger.debug('Wrote the index.html file');\n await fs.writeFile(\n path.join(ctx.runtimeDir, 'app.js'),\n format(getEntryModule({ plugins: ctx.plugins }), {\n parser: 'babel',\n })\n );\n ctx.logger.debug('Wrote the app.js file');\n};\n\nexport { writeStaticClientFiles };\n","import path from 'path';\nimport findRoot from 'find-root';\nimport type { StrapiMonorepo } from '../core/monorepo';\n\n/**\n * @deprecated we will not support aliasing dependencies from V5.\n */\nconst adminPackageAliases = [\n '@strapi/design-system',\n '@strapi/helper-plugin',\n '@strapi/icons',\n 'date-fns',\n 'formik',\n 'history',\n 'immer',\n 'qs',\n 'lodash',\n 'react',\n 'react-dnd',\n 'react-dnd-html5-backend',\n 'react-dom',\n 'react-error-boundary',\n 'react-helmet',\n 'react-is',\n 'react-intl',\n 'react-query',\n 'react-redux',\n 'react-router-dom',\n 'react-window',\n 'react-select',\n 'redux',\n 'reselect',\n 'styled-components',\n 'yup',\n] as const;\n\n/**\n * @deprecated we will not support aliasing dependencies from V5.\n */\nconst getAdminDependencyAliases = (monorepo?: StrapiMonorepo) =>\n adminPackageAliases\n .filter(\n (moduleName) => !monorepo?.path || (monorepo.path && moduleName !== '@strapi/helper-plugin')\n )\n .reduce((acc, moduleName) => {\n /**\n * We use `findRoot` instead of `resolveFrom` here because we don't want to\n * choose a particular file e.g. the CJS version over the ESM because the\n * bundler should decide this, so insted find-root is more appropriate.\n *\n * When we remove these aliases in V5 we can also remove the `find-root` package.\n */\n acc[`${moduleName}$`] = findRoot(require.resolve(moduleName));\n return acc;\n }, {} as Record<string, string>);\n\n/**\n * The path mappings/aliases used by various tools in the monorepo to map imported modules to\n * source files in order to speed up rebuilding and avoid having a separate watcher process to build\n * from `src` to `lib`.\n *\n * This file is currently read by:\n * - Webpack when running the dev server (only when running in this monorepo)\n */\nconst devAliases: Record<string, string> = {\n '@strapi/admin/strapi-admin': './packages/core/admin/admin/src',\n '@strapi/content-type-builder/strapi-admin': './packages/core/content-type-builder/admin/src',\n '@strapi/email/strapi-admin': './packages/core/email/admin/src',\n '@strapi/upload/strapi-admin': './packages/core/upload/admin/src',\n '@strapi/plugin-color-picker/strapi-admin': './packages/plugins/color-picker/admin/src',\n '@strapi/plugin-documentation/strapi-admin': './packages/plugins/documentation/admin/src',\n '@strapi/plugin-graphql/strapi-admin': './packages/plugins/graphql/admin/src',\n '@strapi/plugin-i18n/strapi-admin': './packages/plugins/i18n/admin/src',\n '@strapi/plugin-sentry/strapi-admin': './packages/plugins/sentry/admin/src',\n '@strapi/plugin-users-permissions/strapi-admin': './packages/plugins/users-permissions/admin/src',\n '@strapi/helper-plugin': './packages/core/helper-plugin/src',\n};\n\nconst getAliases = (cwd: string, monorepo?: StrapiMonorepo) => {\n const adminAliases = getAdminDependencyAliases(monorepo);\n const monorepoAliases = monorepo\n ? Object.fromEntries(\n Object.entries(devAliases).map(([key, modulePath]) => {\n return [key, path.join(monorepo.path, modulePath)];\n })\n )\n : {};\n\n return {\n ...adminAliases,\n ...monorepoAliases,\n };\n};\n\nexport { getAliases };\n","import path from 'path';\nimport readPkgUp from 'read-pkg-up';\n\ninterface StrapiMonorepo {\n path: string;\n}\n\n/**\n * Load information about the strapi CMS monorepo (if applicable)\n *\n * @internal\n */\nasync function loadStrapiMonorepo(cwd: string): Promise<StrapiMonorepo | undefined> {\n let p = cwd;\n\n while (p !== '/') {\n const readResult = await readPkgUp({ cwd: p });\n\n if (!readResult) {\n return undefined;\n }\n\n if (readResult.packageJson.isStrapiMonorepo) {\n return { path: path.dirname(readResult.path) };\n }\n\n p = path.dirname(path.dirname(readResult.path));\n }\n\n return undefined;\n}\n\nexport { loadStrapiMonorepo };\nexport type { StrapiMonorepo };\n","import { access } from 'node:fs/promises';\nimport { register } from 'esbuild-register/dist/node';\n\n/**\n * @internal\n */\nconst pathExists = async (path: string) => {\n try {\n await access(path);\n return true;\n } catch (error) {\n return false;\n }\n};\n\n/**\n * @internal\n */\nconst loadFile = async (path: string): Promise<undefined | any> => {\n if (await pathExists(path)) {\n const esbuildOptions = { extensions: ['.js', '.mjs', '.ts'] };\n\n const { unregister } = register(esbuildOptions);\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const mod = require(path);\n\n unregister();\n\n /**\n * handles esm or cjs exporting.\n */\n const file = mod?.default || mod || undefined;\n\n return file;\n }\n\n return undefined;\n};\n\nexport { pathExists, loadFile };\n","import browserslistToEsbuild from 'browserslist-to-esbuild';\nimport { ESBuildMinifyPlugin } from 'esbuild-loader';\nimport HtmlWebpackPlugin from 'html-webpack-plugin';\nimport MiniCssExtractPlugin from 'mini-css-extract-plugin';\nimport ForkTsCheckerPlugin from 'fork-ts-checker-webpack-plugin';\nimport { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';\nimport crypto from 'node:crypto';\nimport path from 'node:path';\nimport { Configuration, DefinePlugin, HotModuleReplacementPlugin } from 'webpack';\nimport ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';\n\nimport { getAliases } from './aliases';\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport type { BuildContext } from '../createBuildContext';\nimport { loadFile } from '../core/files';\n\nconst resolveBaseConfig = async (ctx: BuildContext) => {\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n\n const target = browserslistToEsbuild(ctx.target);\n\n return {\n experiments: {\n topLevelAwait: true,\n },\n entry: {\n main: [`./${ctx.entry}`],\n },\n resolve: {\n alias: getAliases(ctx.cwd, monorepo),\n extensions: ['.js', '.jsx', '.react.js', '.ts', '.tsx'],\n },\n module: {\n rules: [\n {\n test: /\\.(ts|tsx)$/,\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'tsx',\n target,\n jsx: 'automatic',\n },\n },\n {\n test: /\\.(js|jsx|mjs)$/,\n use: {\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'jsx',\n target,\n jsx: 'automatic',\n },\n },\n },\n {\n test: /\\.m?js/,\n resolve: {\n fullySpecified: false,\n },\n },\n {\n test: /\\.css$/i,\n use: [require.resolve('style-loader'), require.resolve('css-loader')],\n },\n {\n test: /\\.(svg|eot|otf|ttf|woff|woff2)$/,\n type: 'asset/resource',\n },\n {\n test: [/\\.bmp$/, /\\.gif$/, /\\.jpe?g$/, /\\.png$/, /\\.ico$/],\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 1000,\n },\n },\n },\n {\n test: /\\.(mp4|webm)$/,\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 10000,\n },\n },\n },\n ],\n },\n plugins: [\n new HtmlWebpackPlugin({\n inject: true,\n template: path.resolve(ctx.runtimeDir, 'index.html'),\n }),\n new DefinePlugin(\n Object.entries(ctx.env).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`process.env.${key}`] = JSON.stringify(value);\n return acc;\n }, {})\n ),\n ctx.tsconfig &&\n new ForkTsCheckerPlugin({\n typescript: {\n configFile: ctx.tsconfig.path,\n configOverwrite: {\n compilerOptions: {\n sourceMap: ctx.options.sourcemaps,\n },\n },\n },\n }),\n ].filter(Boolean),\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n cache: {\n type: 'filesystem',\n // version cache when there are changes to aliases\n buildDependencies: {\n config: [__filename],\n },\n version: crypto\n .createHash('md5')\n .update(Object.entries(baseConfig.resolve.alias).join())\n .digest('hex'),\n },\n entry: {\n ...baseConfig.entry,\n main: [\n `${require.resolve('webpack-hot-middleware/client')}?path=/__webpack_hmr`,\n ...baseConfig.entry.main,\n ],\n },\n stats: 'errors-warnings',\n mode: 'development',\n devtool: 'inline-source-map',\n output: {\n filename: '[name].js',\n path: ctx.distPath,\n publicPath: ctx.basePath,\n },\n infrastructureLogging: {\n level: 'error',\n },\n plugins: [\n ...baseConfig.plugins,\n new HotModuleReplacementPlugin(),\n new ReactRefreshWebpackPlugin(),\n ],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const target = browserslistToEsbuild(ctx.target);\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n stats: 'errors-only',\n mode: 'production',\n bail: true,\n devtool: ctx.options.sourcemaps ? 'source-map' : false,\n output: {\n path: ctx.distPath,\n publicPath: ctx.basePath,\n // Utilize long-term caching by adding content hashes (not compilation hashes)\n // to compiled assets for production\n filename: '[name].[contenthash:8].js',\n chunkFilename: '[name].[contenthash:8].chunk.js',\n },\n optimization: {\n minimize: ctx.options.minify,\n minimizer: [\n new ESBuildMinifyPlugin({\n target,\n css: true, // Apply minification to CSS assets\n }),\n ],\n moduleIds: 'deterministic',\n runtimeChunk: true,\n },\n // @ts-expect-error\n plugins: [\n ...baseConfig.plugins,\n new MiniCssExtractPlugin({\n filename: '[name].[chunkhash].css',\n chunkFilename: '[name].[chunkhash].chunkhash.css',\n ignoreOrder: true,\n }),\n ctx.options.stats && new BundleAnalyzerPlugin(),\n ].filter(Boolean),\n };\n};\n\nconst USER_CONFIGS = ['webpack.config.js', 'webpack.config.mjs', 'webpack.config.ts'];\n\ntype UserWebpackConfig = (config: Configuration, webpack: unknown) => Configuration;\n\nconst getUserConfig = async (ctx: BuildContext): Promise<UserWebpackConfig | undefined> => {\n for (const file of USER_CONFIGS) {\n const filePath = path.join(ctx.appDir, 'src', 'admin', file);\n const configFile = await loadFile(filePath);\n\n if (configFile) {\n return configFile;\n }\n }\n\n return undefined;\n};\n\nconst mergeConfigWithUserConfig = async (config: Configuration, ctx: BuildContext) => {\n const userConfig = await getUserConfig(ctx);\n\n if (userConfig) {\n const webpack = await import('webpack');\n return userConfig(config, webpack);\n }\n\n return config;\n};\n\nexport { resolveProductionConfig, resolveDevelopmentConfig, mergeConfigWithUserConfig };\n","import boxen from 'boxen';\nimport chalk from 'chalk';\nimport os from 'node:os';\n\nconst isError = (err: unknown): err is Error => err instanceof Error;\n\n/**\n * @description Handle unexpected errors. No, but really, your CLI should anticipate error cases.\n * If a user hits an error we don't expect, then we need to flag to them that this is not normal\n * and they should use the `--debug` flag to get more information (assuming you've implemented this\n * in your action).\n */\nconst handleUnexpectedError = (err: unknown) => {\n console.error(\n chalk.red(\n `[ERROR] `,\n 'There seems to be an unexpected error, try again with --debug for more information',\n os.EOL\n )\n );\n\n if (isError(err) && err.stack) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n process.exit(1);\n};\n\nexport { handleUnexpectedError, isError };\n","import webpack from 'webpack';\n\nimport { mergeConfigWithUserConfig, resolveProductionConfig } from './config';\nimport { isError } from '../core/errors';\n\nimport type { BuildContext } from '../createBuildContext';\n\nconst build = async (ctx: BuildContext) =>\n new Promise(async (resolve, reject) => {\n const config = await resolveProductionConfig(ctx);\n const finalConfig = await mergeConfigWithUserConfig(config, ctx);\n\n ctx.logger.debug('Webpack config', finalConfig);\n\n webpack(finalConfig, (err, stats) => {\n if (stats) {\n if (stats.hasErrors()) {\n ctx.logger.error(\n stats.toString({\n chunks: false,\n colors: true,\n })\n );\n\n reject(false);\n } else if (ctx.options.stats) {\n ctx.logger.info(\n stats.toString({\n chunks: false,\n colors: true,\n })\n );\n }\n\n resolve(true);\n }\n\n if (err && isError(err)) {\n ctx.logger.error(err.message);\n reject(false);\n }\n });\n });\n\nexport { build };\n","import path from 'node:path';\nimport dotenv from 'dotenv';\nimport { pathExists } from './files';\n\n/**\n * This is the base of _any_ env set for a strapi project,\n * to build a strapi admin panel we require these env variables.\n */\ninterface DefaultEnv {\n ADMIN_PATH: string;\n STRAPI_ADMIN_BACKEND_URL: string;\n STRAPI_TELEMETRY_DISABLED: string;\n}\n\n/**\n * @internal\n *\n * @description Load the .env file if it exists\n */\nconst loadEnv = async (cwd: string) => {\n const pathToEnv = path.resolve(cwd, '.env');\n\n if (await pathExists(pathToEnv)) {\n dotenv.config({ path: pathToEnv });\n }\n};\n\n/**\n * @internal\n *\n * @description Get all the environment variables that start with `STRAPI_ADMIN_`\n */\nconst getStrapiAdminEnvVars = (defaultEnv: DefaultEnv): Record<string, string> => {\n return Object.keys(process.env)\n .filter((key) => key.toUpperCase().startsWith('STRAPI_ADMIN_'))\n .reduce((acc, key) => {\n acc[key] = process.env[key] as string;\n\n return acc;\n }, defaultEnv as unknown as Record<string, string>);\n};\n\nexport { getStrapiAdminEnvVars, loadEnv };\n","import os from 'node:os';\nimport path from 'node:path';\nimport { env } from '@strapi/utils';\nimport { getModule, PackageJson } from './dependencies';\nimport { loadFile } from './files';\nimport { BuildContext, CreateBuildContextArgs } from '../createBuildContext';\n\ninterface PluginMeta {\n name: string;\n pathToPlugin: string;\n isLocal?: boolean;\n}\n\ninterface StrapiPlugin extends PackageJson {\n strapi: {\n description?: string;\n displayName?: string;\n kind: 'plugin';\n name?: string;\n required?: boolean;\n };\n}\n\nconst validatePackageHasStrapi = (\n pkg: PackageJson\n): pkg is PackageJson & { strapi: Record<string, unknown> } =>\n 'strapi' in pkg &&\n typeof pkg.strapi === 'object' &&\n !Array.isArray(pkg.strapi) &&\n pkg.strapi !== null;\n\nconst validatePackageIsPlugin = (pkg: PackageJson): pkg is StrapiPlugin =>\n validatePackageHasStrapi(pkg) && pkg.strapi.kind === 'plugin';\n\nexport const getEnabledPlugins = async ({\n strapi,\n cwd,\n logger,\n}: Pick<BuildContext, 'cwd' | 'logger' | 'strapi'>) => {\n const plugins: Record<string, PluginMeta> = {};\n\n /**\n * This is the list of dependencies that are installed in the user's project.\n * It will include libraries like \"react\", so we need to collect the ones that\n * are plugins.\n */\n const deps = strapi.config.get('info.dependencies', {});\n\n logger.debug(\"Dependencies from user's project\", os.EOL, deps);\n\n for (const dep of Object.keys(deps)) {\n const pkg = await getModule(dep, cwd);\n\n if (pkg && validatePackageIsPlugin(pkg)) {\n const name = pkg.strapi.name || pkg.name;\n\n if (!name) {\n /**\n * Unlikely to happen, but you never know.\n */\n throw Error(\n \"You're trying to import a plugin that doesn't have a name – check the package.json of that plugin!\"\n );\n }\n\n plugins[name] = {\n name,\n pathToPlugin: dep,\n };\n }\n }\n\n const userPluginsFile = await loadUserPluginsFile(strapi.dirs.app.config);\n\n logger.debug(\"User's plugins file\", os.EOL, userPluginsFile);\n\n for (const [userPluginName, userPluginConfig] of Object.entries(userPluginsFile)) {\n if (userPluginConfig.enabled && userPluginConfig.resolve) {\n plugins[userPluginName] = {\n name: userPluginName,\n isLocal: true,\n /**\n * User plugin paths are resolved from the entry point\n * of the app, because that's how you import them.\n */\n pathToPlugin: userPluginConfig.resolve,\n };\n }\n }\n\n return plugins;\n};\n\nconst PLUGIN_CONFIGS = ['plugins.js', 'plugins.mjs', 'plugins.ts'];\n\ntype UserPluginConfigFile = Record<string, { enabled: boolean; resolve: string }>;\n\nconst loadUserPluginsFile = async (root: string): Promise<UserPluginConfigFile> => {\n for (const file of PLUGIN_CONFIGS) {\n const filePath = path.join(root, file);\n const configFile = await loadFile(filePath);\n\n if (configFile) {\n /**\n * Configs can be a function or they can be just an object!\n */\n return typeof configFile === 'function' ? configFile({ env }) : configFile;\n }\n }\n\n return {};\n};\n","import os from 'node:os';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport syncFs from 'node:fs';\nimport camelCase from 'lodash/camelCase';\nimport browserslist from 'browserslist';\nimport strapiFactory, { CLIContext } from '@strapi/strapi';\nimport { getConfigUrls } from '@strapi/utils';\n\nimport { getStrapiAdminEnvVars, loadEnv } from './core/env';\nimport { isError } from './core/errors';\n\nimport type { BuildOptions } from './build';\nimport { DevelopOptions } from './develop';\nimport { getEnabledPlugins } from './core/plugins';\nimport { Strapi } from '@strapi/types';\n\ninterface BuildContext {\n /**\n * The absolute path to the app directory defined by the Strapi instance\n */\n appDir: string;\n /**\n * If a user is deploying the project under a nested public path, we use\n * this path so all asset paths will be rewritten accordingly\n */\n basePath: string;\n /**\n * The current working directory\n */\n cwd: string;\n /**\n * The absolute path to the dist directory\n */\n distPath: string;\n /**\n * The relative path to the dist directory\n */\n distDir: string;\n /**\n * The absolute path to the entry file\n */\n entry: string;\n /**\n * The environment variables to be included in the JS bundle\n */\n env: Record<string, string>;\n logger: CLIContext['logger'];\n /**\n * The build options\n */\n options: Pick<BuildOptions, 'minify' | 'sourcemaps' | 'stats'> & Pick<DevelopOptions, 'open'>;\n /**\n * The plugins to be included in the JS bundle\n * incl. internal plugins, third party plugins & local plugins\n */\n plugins: Array<{\n path: string;\n name: string;\n importName: string;\n }>;\n /**\n * The absolute path to the runtime directory\n */\n runtimeDir: string;\n /**\n * The Strapi instance\n */\n strapi: Strapi;\n /**\n * The browserslist target either loaded from the user's workspace or falling back to the default\n */\n target: string[];\n tsconfig?: CLIContext['tsconfig'];\n}\n\ninterface CreateBuildContextArgs extends CLIContext {\n strapi?: Strapi;\n options?: BuildContext['options'];\n}\n\nconst DEFAULT_BROWSERSLIST = [\n 'last 3 major versions',\n 'Firefox ESR',\n 'last 2 Opera versions',\n 'not dead',\n];\n\nconst createBuildContext = async ({\n cwd,\n logger,\n tsconfig,\n strapi,\n options = {},\n}: CreateBuildContextArgs) => {\n /**\n * If you make a new strapi instance when one already exists,\n * you will overwrite the global and the app will _most likely_\n * crash and die.\n */\n const strapiInstance =\n strapi ??\n strapiFactory({\n // Directories\n appDir: cwd,\n distDir: tsconfig?.config.options.outDir ?? '',\n // Options\n autoReload: true,\n serveAdminPanel: false,\n });\n\n const { serverUrl, adminPath } = getConfigUrls(strapiInstance.config, true);\n\n await loadEnv(cwd);\n\n const env = getStrapiAdminEnvVars({\n ADMIN_PATH: adminPath,\n STRAPI_ADMIN_BACKEND_URL: serverUrl,\n STRAPI_TELEMETRY_DISABLED: String(strapiInstance.telemetry.isDisabled),\n });\n\n const envKeys = Object.keys(env);\n\n if (envKeys.length > 0) {\n logger.info(\n [\n 'Including the following ENV variables as part of the JS bundle:',\n ...envKeys.map((key) => ` - ${key}`),\n ].join(os.EOL)\n );\n }\n\n const distPath = path.join(strapiInstance.dirs.dist.root, 'build');\n const distDir = path.relative(cwd, distPath);\n\n /**\n * If the distPath already exists, clean it\n */\n try {\n logger.debug(`Cleaning dist folder: ${distPath}`);\n await fs.rm(distPath, { recursive: true, force: true });\n logger.debug('Cleaned dist folder');\n } catch {\n // do nothing, it will fail if the folder does not exist\n logger.debug('There was no dist folder to clean');\n }\n\n const runtimeDir = path.join(cwd, '.strapi', 'client');\n const entry = path.relative(cwd, path.join(runtimeDir, 'app.js'));\n\n const plugins = await getEnabledPlugins({ cwd, logger, strapi: strapiInstance });\n\n logger.debug('Enabled plugins', os.EOL, plugins);\n\n const pluginsWithFront = Object.values(plugins)\n .filter(filterPluginsByAdminEntry)\n .map((plugin) => ({\n path: !plugin.isLocal\n ? `${plugin.pathToPlugin}/strapi-admin`\n : `${path.relative(runtimeDir, plugin.pathToPlugin)}/strapi-admin`,\n name: plugin.name,\n importName: camelCase(plugin.name),\n }));\n\n logger.debug('Enabled plugins with FE', os.EOL, plugins);\n\n const target = browserslist.loadConfig({ path: cwd }) ?? DEFAULT_BROWSERSLIST;\n\n const buildContext = {\n appDir: strapiInstance.dirs.app.root,\n basePath: `${adminPath}/`,\n cwd,\n distDir,\n distPath,\n entry,\n env,\n logger,\n options,\n plugins: pluginsWithFront,\n runtimeDir,\n strapi: strapiInstance,\n target,\n tsconfig,\n } satisfies BuildContext;\n\n return buildContext;\n};\n\ninterface Plugin extends Required<{}> {\n name: string;\n}\n\nconst filterPluginsByAdminEntry = (plugin: Plugin) => {\n if (!plugin) {\n return false;\n }\n\n /**\n * There are two ways a plugin should be imported, either it's local to the strapi app,\n * or it's an actual npm module that's installed and resolved via node_modules.\n *\n * We first check if the plugin is local to the strapi app, using a regular `resolve` because\n * the pathToPlugin will be relative i.e. `/Users/my-name/strapi-app/src/plugins/my-plugin`.\n *\n * If the file doesn't exist well then it's probably a node_module, so instead we use `require.resolve`\n * which will resolve the path to the module in node_modules. If it fails with the specific code `MODULE_NOT_FOUND`\n * then it doesn't have an admin part to the package.\n */\n try {\n const isLocalPluginWithLegacyAdminFile = syncFs.existsSync(\n //@ts-ignore\n path.resolve(`${plugin.pathToPlugin}/strapi-admin.js`)\n );\n\n if (!isLocalPluginWithLegacyAdminFile) {\n //@ts-ignore\n let pathToPlugin = plugin.pathToPlugin;\n\n if (process.platform === 'win32') {\n pathToPlugin = pathToPlugin.split(path.sep).join(path.posix.sep);\n }\n\n const isModuleWithFE = require.resolve(`${pathToPlugin}/strapi-admin`);\n\n return isModuleWithFE;\n }\n\n return isLocalPluginWithLegacyAdminFile;\n } catch (err) {\n if (isError(err) && 'code' in err && err.code === 'MODULE_NOT_FOUND') {\n /**\n * the plugin does not contain FE code, so we\n * don't want to import it anyway\n */\n return false;\n }\n\n throw err;\n }\n};\n\nexport { createBuildContext };\nexport type { BuildContext, CreateBuildContextArgs };\n","import { performance } from 'perf_hooks';\n\nexport interface TimeMeasurer {\n start: (name: string) => void;\n end: (name: string) => number;\n getTimings: () => Record<string, number>;\n}\n\nexport function getTimer(): TimeMeasurer {\n const timings: Record<string, number> = {};\n const startTimes: Record<string, number> = {};\n\n function start(name: string): void {\n if (typeof startTimes[name] !== 'undefined') {\n throw new Error(`Timer \"${name}\" already started, cannot overwrite`);\n }\n\n startTimes[name] = performance.now();\n }\n\n function end(name: string): number {\n if (typeof startTimes[name] === 'undefined') {\n throw new Error(`Timer \"${name}\" never started, cannot end`);\n }\n\n timings[name] = performance.now() - startTimes[name];\n return timings[name];\n }\n\n return { start, end, getTimings: () => timings };\n}\n","import * as tsUtils from '@strapi/typescript-utils';\nimport { checkRequiredDependencies } from './core/dependencies';\nimport { writeStaticClientFiles } from './staticFiles';\nimport { build as buildWebpack } from './webpack/build';\nimport { createBuildContext } from './createBuildContext';\n\nimport EE from '@strapi/strapi/dist/utils/ee';\nimport { getTimer } from './core/timer';\n\nimport type { CLIContext } from '@strapi/strapi';\n\ninterface BuildOptions extends CLIContext {\n /**\n * @default false\n */\n ignorePrompts?: boolean;\n /**\n * Minify the output\n *\n * @default true\n */\n minify?: boolean;\n /**\n * Generate sourcemaps – useful for debugging bugs in the admin panel UI.\n */\n sourcemaps?: boolean;\n /**\n * Print stats for build\n */\n stats?: boolean;\n}\n\n/**\n * @example `$ strapi build`\n *\n * @description Builds the admin panel of the strapi application.\n */\nconst build = async ({ logger, cwd, tsconfig, ignorePrompts, ...options }: BuildOptions) => {\n const timer = getTimer();\n\n const { didInstall } = await checkRequiredDependencies({ cwd, logger, ignorePrompts }).catch(\n (err) => {\n logger.error(err.message);\n process.exit(1);\n }\n );\n\n if (didInstall) {\n return;\n }\n\n if (tsconfig?.config) {\n timer.start('compilingTS');\n const compilingTsSpinner = logger.spinner(`Compiling TS`).start();\n\n tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: false } });\n\n const compilingDuration = timer.end('compilingTS');\n compilingTsSpinner.text = `Compiling TS (${compilingDuration}ms)`;\n compilingTsSpinner.succeed();\n }\n\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${contextDuration}ms)`;\n contextSpinner.succeed();\n\n timer.start('buildAdmin');\n const buildingSpinner = logger.spinner(`Building admin panel`).start();\n console.log('');\n\n try {\n EE.init(cwd);\n\n await writeStaticClientFiles(ctx);\n await buildWebpack(ctx);\n\n const buildDuration = timer.end('buildAdmin');\n buildingSpinner.text = `Building admin panel (${buildDuration}ms)`;\n buildingSpinner.succeed();\n } catch (err) {\n buildingSpinner.fail();\n throw err;\n }\n};\n\nexport { build };\nexport type { BuildOptions };\n","import os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport webpackDevMiddleware from 'webpack-dev-middleware';\nimport webpackHotMiddleware from 'webpack-hot-middleware';\nimport { webpack } from 'webpack';\nimport type { BuildContext } from '../createBuildContext';\nimport { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';\nimport { Common, Strapi } from '@strapi/types';\n\ninterface WebpackWatcher {\n close(): Promise<void>;\n}\n\nconst watch = async (ctx: BuildContext): Promise<WebpackWatcher> => {\n const config = await resolveDevelopmentConfig(ctx);\n const finalConfig = await mergeConfigWithUserConfig(config, ctx);\n\n ctx.logger.debug('Final webpack config:', os.EOL, finalConfig);\n\n return new Promise<WebpackWatcher>((res) => {\n const compiler = webpack(finalConfig);\n\n const devMiddleware = webpackDevMiddleware(compiler);\n\n // @ts-ignore\n const hotMiddleware = webpackHotMiddleware(compiler, {\n log: false,\n path: '/__webpack_hmr',\n });\n\n ctx.strapi.server.app.use((ctx, next) => {\n return new Promise((resolve, reject) => {\n hotMiddleware(ctx.req, ctx.res, (err) => {\n if (err) reject(err);\n else resolve(next());\n });\n });\n });\n\n ctx.strapi.server.app.use((context, next) => {\n // wait for webpack-dev-middleware to signal that the build is ready\n const ready = new Promise((resolve, reject) => {\n devMiddleware.waitUntilValid(() => {\n resolve(true);\n });\n });\n // tell webpack-dev-middleware to handle the request\n const init = new Promise((resolve) => {\n devMiddleware(\n context.req,\n {\n // @ts-expect-error\n end: (content) => {\n // eslint-disable-next-line no-param-reassign\n context.body = content;\n resolve(true);\n },\n getHeader: context.get.bind(context),\n // @ts-expect-error\n setHeader: context.set.bind(context),\n locals: context.state,\n },\n () => resolve(next())\n );\n });\n\n return Promise.all([ready, init]);\n });\n\n const serveAdmin: Common.MiddlewareHandler = async (ctx, next) => {\n await next();\n\n if (devMiddleware.context.outputFileSystem.createReadStream) {\n if (ctx.method !== 'HEAD' && ctx.method !== 'GET') {\n return;\n }\n\n if (ctx.body != null || ctx.status !== 404) {\n return;\n }\n\n const filename = path.resolve(finalConfig.output?.path!, 'index.html');\n ctx.type = 'html';\n ctx.body = devMiddleware.context.outputFileSystem.createReadStream(filename);\n }\n };\n\n ctx.strapi.server.routes([\n {\n method: 'GET',\n path: `${ctx.basePath}:path*`,\n handler: serveAdmin,\n config: { auth: false },\n },\n ]);\n\n devMiddleware.waitUntilValid(() => {\n res({\n async close() {\n await Promise.all([\n promisify(devMiddleware.close.bind(devMiddleware))(),\n hotMiddleware.close(),\n promisify(compiler.close.bind(compiler))(),\n ]);\n },\n });\n });\n });\n};\n\nexport { watch };\nexport type { WebpackWatcher };\n","import type { CLIContext } from '@strapi/strapi';\nimport * as tsUtils from '@strapi/typescript-utils';\nimport { joinBy } from '@strapi/utils';\nimport chokidar from 'chokidar';\nimport cluster from 'node:cluster';\n\nimport { getTimer } from './core/timer';\nimport { checkRequiredDependencies } from './core/dependencies';\nimport { createBuildContext } from './createBuildContext';\nimport { WebpackWatcher, watch as watchWebpack } from './webpack/watch';\nimport { build as buildWebpack } from './webpack/build';\n\nimport EE from '@strapi/strapi/dist/utils/ee';\nimport { writeStaticClientFiles } from './staticFiles';\nimport strapiFactory from '@strapi/strapi';\n\ninterface DevelopOptions extends CLIContext {\n /**\n * @default false\n */\n ignorePrompts?: boolean;\n polling?: boolean;\n open?: boolean;\n watchAdmin?: boolean;\n}\n\nconst develop = async ({\n cwd,\n polling,\n logger,\n tsconfig,\n ignorePrompts,\n watchAdmin,\n ...options\n}: DevelopOptions) => {\n const timer = getTimer();\n\n if (cluster.isPrimary) {\n const { didInstall } = await checkRequiredDependencies({ cwd, logger, ignorePrompts }).catch(\n (err) => {\n logger.error(err.message);\n process.exit(1);\n }\n );\n\n if (didInstall) {\n return;\n }\n\n /**\n * IF we're not watching the admin we're going to build it, this makes\n * sure that at least the admin is built for users & they can interact\n * with the application.\n */\n if (!watchAdmin) {\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${contextDuration}ms)`;\n contextSpinner.succeed();\n\n timer.start('creatingAdmin');\n const adminSpinner = logger.spinner(`Creating admin`).start();\n\n EE.init(cwd);\n await writeStaticClientFiles(ctx);\n await buildWebpack(ctx);\n\n const adminDuration = timer.end('creatingAdmin');\n adminSpinner.text = `Creating admin (${adminDuration}ms)`;\n adminSpinner.succeed();\n }\n\n cluster.on('message', async (worker, message) => {\n switch (message) {\n case 'reload': {\n logger.debug('cluster has the reload message, sending the worker kill message');\n worker.send('kill');\n break;\n }\n case 'killed': {\n logger.debug('cluster has the killed message, forking the cluster');\n cluster.fork();\n break;\n }\n case 'stop': {\n process.exit(1);\n break;\n }\n default:\n break;\n }\n });\n\n cluster.fork();\n }\n\n if (cluster.isWorker) {\n if (tsconfig?.config) {\n timer.start('compilingTS');\n const compilingTsSpinner = logger.spinner(`Compiling TS`).start();\n\n tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: false } });\n\n const compilingDuration = timer.end('compilingTS');\n compilingTsSpinner.text = `Compiling TS (${compilingDuration}ms)`;\n compilingTsSpinner.succeed();\n }\n\n const strapi = strapiFactory({\n appDir: cwd,\n distDir: tsconfig?.config.options.outDir ?? '',\n autoReload: true,\n serveAdminPanel: !watchAdmin,\n });\n\n let webpackWatcher: WebpackWatcher | undefined;\n\n /**\n * If we're watching the admin panel then we're going to attach the watcher\n * as a strapi middleware.\n */\n if (watchAdmin) {\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n strapi,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${contextDuration}ms)`;\n contextSpinner.succeed();\n\n timer.start('creatingAdmin');\n const adminSpinner = logger.spinner(`Creating admin`).start();\n\n EE.init(cwd);\n await writeStaticClientFiles(ctx);\n webpackWatcher = await watchWebpack(ctx);\n\n const adminDuration = timer.end('creatingAdmin');\n adminSpinner.text = `Creating admin (${adminDuration}ms)`;\n adminSpinner.succeed();\n }\n\n const strapiInstance = await strapi.load();\n\n timer.start('generatingTS');\n const generatingTsSpinner = logger.spinner(`Generating types`).start();\n\n await tsUtils.generators.generate({\n strapi: strapiInstance,\n pwd: cwd,\n rootDir: undefined,\n logger: { silent: true, debug: false },\n artifacts: { contentTypes: true, components: true },\n });\n\n const generatingDuration = timer.end('generatingTS');\n generatingTsSpinner.text = `Generating types (${generatingDuration}ms)`;\n generatingTsSpinner.succeed();\n\n const restart = async () => {\n if (strapiInstance.reload.isWatching && !strapiInstance.reload.isReloading) {\n strapiInstance.reload.isReloading = true;\n strapiInstance.reload();\n }\n };\n\n const watcher = chokidar\n .watch(cwd, {\n ignoreInitial: true,\n usePolling: polling,\n ignored: [\n /(^|[/\\\\])\\../, // dot files\n /tmp/,\n '**/src/admin/**',\n '**/src/plugins/**/admin/**',\n '**/dist/src/plugins/test/admin/**',\n '**/documentation',\n '**/documentation/**',\n '**/node_modules',\n '**/node_modules/**',\n '**/plugins.json',\n '**/build',\n '**/build/**',\n '**/index.html',\n '**/public',\n '**/public/**',\n strapiInstance.dirs.static.public,\n joinBy('/', strapiInstance.dirs.static.public, '**'),\n '**/*.db*',\n '**/exports/**',\n '**/dist/**',\n '**/*.d.ts',\n ...strapiInstance.config.get('admin.watchIgnoreFiles', []),\n ],\n })\n .on('add', (path) => {\n strapiInstance.log.info(`File created: ${path}`);\n restart();\n })\n .on('change', (path) => {\n strapiInstance.log.info(`File changed: ${path}`);\n restart();\n })\n .on('unlink', (path) => {\n strapiInstance.log.info(`File deleted: ${path}`);\n restart();\n });\n\n process.on('message', async (message) => {\n switch (message) {\n case 'kill': {\n logger.debug(\n 'child process has the kill message, destroying the strapi instance and sending the killed process message'\n );\n await watcher.close();\n\n await strapiInstance.destroy();\n\n if (webpackWatcher) {\n webpackWatcher.close();\n }\n process.send?.('killed');\n break;\n }\n default:\n break;\n }\n });\n\n strapiInstance.start();\n }\n};\n\nexport { develop };\nexport type { DevelopOptions };\n"],"names":["build","develop","path","Document","webpack","env","buildWebpack","ctx","watchWebpack"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAMA,UAAuB,CAAC,EAAE,SAAS,UAAU;AACjD,UACG,QAAQ,OAAO,EACf,OAAO,eAAe,2CAA2C,KAAK,EACtE,OAAO,oBAAoB,sBAAsB,KAAK,EACtD,OAAO,YAAY,qBAAqB,IAAI,EAC5C,OAAO,qBAAqB,kCAAkC,EAC9D,OAAO,YAAY,sBAAsB,KAAK,EAC9C,OAAO,eAAe,sBAAsB,KAAK,EACjD,OAAO,WAAW,yCAAyC,KAAK,EAChE,YAAY,4BAA4B,EACxC,OAAO,OAAO,YAA6B;AAC1C,UAAM,EAAE,OAAAA,OAAU,IAAA,MAAM,OAAO,sBAAkB;AAEjD,WAAOA,OAAM,EAAE,GAAG,SAAS,GAAG,IAAK,CAAA;AAAA,EAAA,CACpC;AACL;AAKA,MAAMC,YAAyB,CAAC,EAAE,SAAS,UAAU;AACnD,UACG,QAAQ,SAAS,EACjB,MAAM,KAAK,EACX,OAAO,eAAe,2CAA2C,KAAK,EACtE,OAAO,YAAY,sBAAsB,KAAK,EAC9C,OAAO,oBAAoB,sBAAsB,KAAK,EACtD,OAAO,aAAa,iDAAiD,KAAK,EAC1E,OAAO,iBAAiB,yCAAyC,KAAK,EACtE;AAAA,IACC;AAAA,IACA;AAAA,EAAA,EAED;AAAA,IACC;AAAA,IACA;AAAA,EAED,EAAA,OAAO,oBAAoB,gCAAgC,EAC3D,OAAO,UAAU,kCAAkC,IAAI,EACvD,YAAY,mDAAmD,EAC/D,OAAO,OAAO,YAA+B;AAC5C,UAAM,EAAE,SAAAA,SAAY,IAAA,MAAM,OAAO,wBAAoB;AAErD,WAAOA,SAAQ,EAAE,GAAG,SAAS,GAAG,IAAK,CAAA;AAAA,EAAA,CACtC;AACL;;;;;;AC/CA,MAAM,oBAAoB,MAAM;AAExB,QAAA,QAAQ,QAAQ,IAAI,yBAAyB;AAE/C,MAAA,MAAM,SAAS,MAAM,GAAG;AACnB,WAAA;AAAA,EACT;AAEI,MAAA,MAAM,SAAS,MAAM,GAAG;AACnB,WAAA;AAAA,EACT;AAKI,MAAA,WAAW,KAAK,KAAK,GAAG;AACnB,WAAA;AAAA,EACT;AAEO,SAAA;AACT;ACZA,MAAM,YAAY;AAAA,EAChB,OAAO;AAAA,EACP,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,qBAAqB;AACvB;AAqBA,MAAM,4BAA4B,OAAO;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,MAGgD;AAC9C,QAAM,MAAM,MAAM,UAAU,EAAE,IAAK,CAAA;AAEnC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,wCAAwC,GAAG,EAAE;AAAA,EAC/D;AAEA,SAAO,MAAM,wBAAwB,GAAG,KAAK,IAAI,WAAW;AAY5D,QAAM,EAAE,SAAS,WAAW,OAAO,QAAQ,SAAS,EAAE;AAAA,IAIpD,CAAC,KAAK,CAAC,MAAM,OAAO,MAAM;AACpB,UAAA,CAAC,IAAI,YAAY,cAAc;AACjC,cAAM,IAAI,MAAM,wDAAwD,GAAG,EAAE;AAAA,MAC/E;AAEA,YAAM,kBAAkB,IAAI,YAAY,aAAa,IAAI;AAEzD,UAAI,CAAC,iBAAiB;AACpB,YAAI,QAAQ,KAAK;AAAA,UACf;AAAA,UACA,eAAe;AAAA,QAAA,CAChB;AAAA,MAAA,OACI;AACL,YAAI,OAAO,KAAK;AAAA,UACd;AAAA,UACA,eAAe;AAAA,UACf;AAAA,QAAA,CACD;AAAA,MACH;AAEO,aAAA;AAAA,IACT;AAAA,IACA;AAAA,MACE,SAAS,CAAC;AAAA,MACV,QAAQ,CAAC;AAAA,IACX;AAAA,EAAA;AAGE,MAAA,QAAQ,SAAS,GAAG;AACf,WAAA;AAAA,MACL;AAAA,MACA,GAAG;AAAA,MACH,QAAQ,IAAI,CAAC,EAAE,MAAM,cAAc,MAAM,OAAO,IAAI,IAAI,aAAa,EAAE,EAAE,KAAK,GAAG,GAAG;AAAA,IAAA;AAMtF,QAAI,QAAQ,IAAI,aAAa,iBAAiB,eAAe;AACpD,aAAA,EAAE,YAAY;IACvB;AAMA,UAAM,EAAE,SAAS,WAAe,IAAA,MAAM,SAAS,OAAO;AAAA,MACpD,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SACE;AAAA,IAAA,CACH;AAED,QAAI,YAAY;AACd,YAAM,oBAAoB,SAAS;AAAA,QACjC;AAAA,QACA;AAAA,MAAA,CACD;AAED,YAAM,CAAC,MAAM,GAAG,IAAI,IAAI,QAAQ;AAMhC,YAAM,MAAM,MAAM,MAAM,EAAE,KAAK,OAAO,WAAW;AAC1C,aAAA,EAAE,YAAY;IAAK,OACrB;AACE,aAAA,EAAE,YAAY;IACvB;AAAA,EACF;AAEA,MAAI,OAAO,QAAQ;AACjB,UAAM,SAAmB,CAAA;AAEzB,eAAW,OAAO,QAAQ;AAExB,UAAI,qBAAoC;AACpC,UAAA;AACmB,6BAAA,OAAO,WAAW,IAAI,eAAe;AAAA,eACnD,KAAK;AAAA,MAEd;AAEA,UAAI,CAAC,oBAAoB;AAChB,eAAA;AAAA,UACL,4BAA4B,IAAI,IAAI,4CAA4C,IAAI,eAAe;AAAA,QAAA;AAAA,MACrG,WACS,CAAC,OAAO,UAAU,oBAAoB,IAAI,aAAa,GAAG;AAK5D,eAAA;AAAA,UACL;AAAA,YACE,uBAAuB,IAAI,IAAI,KAAK,kBAAkB,4DAA4D,IAAI,aAAa;AAAA,YACnI;AAAA,UAAA,EACA,KAAK,GAAG,GAAG;AAAA,QAAA;AAAA,MAEjB;AAEA,YAAM,mBAAmB,MAAM,iBAAiB,IAAI,MAAM,GAAG;AAE7D,UAAI,CAAC,kBAAkB;AAId,eAAA;AAAA,UACL,4BAA4B,IAAI,IAAI;AAAA,QAAA;AAAA,MACtC,WACS,CAAC,OAAO,UAAU,kBAAkB,IAAI,aAAa,GAAG;AAC1D,eAAA;AAAA,UACL;AAAA,YACE,uBAAuB,IAAI,IAAI,KAAK,gBAAgB,4DAA4D,IAAI,aAAa;AAAA,YACjI;AAAA,UAAA,EACA,KAAK,GAAG,GAAG;AAAA,QAAA;AAAA,MAEjB;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,aAAa,eAAe;AAC/D,YAAM,IAAI,MAAM,GAAG,GAAG,GAAG,KAAK,OAAO,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;AAAA,IAC5D;AAAA,EACF;AAEO,SAAA,EAAE,YAAY;AACvB;AAEA,MAAM,YAAY,OAAO,MAAc,QAA6C;AAC5E,QAAA,oBAAoB,YAAY,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AACjF,MAAI,CAAC,mBAAmB;AACf,WAAA;AAAA,EACT;AACA,QAAM,OAAO,MAAM,GAAG,SAAS,mBAAmB,MAAM,EAAE,KAAK,CAAC,QAAQ,KAAK,MAAM,GAAG,CAAC;AAEhF,SAAA;AACT;AAEA,MAAM,mBAAmB,OAAO,MAAc,QAAwC;AACpF,QAAM,MAAM,MAAM,UAAU,MAAM,GAAG;AAErC,SAAO,KAAK,WAAW;AACzB;AAEA,MAAM,sBAAsB,OAC1B,SACA,EAAE,KAAK,aACJ;AACH,QAAM,iBAAiB;AAEvB,MAAI,CAAC,gBAAgB;AACZ,WAAA;AAAA,MACL;AAAA,IAAA;AAEF,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,cAAqC;AAAA,IACzC,UAAU;AAAA,IACV;AAAA,IACA,OAAO;AAAA,EAAA;AAGT,QAAM,WAAW,QAAQ,IAAI,CAAC,EAAE,MAAM,oBAAoB,GAAG,IAAI,IAAI,aAAa,EAAE;AAEhF,MAAA;AAEJ,MAAI,mBAAmB,OAAO;AAC5B,UAAM,UAAU,CAAC,WAAW,sBAAsB,UAAU,GAAG,QAAQ;AACvE,WAAO,KAAK,gBAAgB,QAAQ,KAAK,GAAG,CAAC,GAAG;AAChD,aAAS,MAAM,MAAM,OAAO,SAAS,WAAW;AAAA,EAAA,WACvC,mBAAmB,QAAQ;AACpC,UAAM,WAAW,CAAC,OAAO,GAAG,QAAQ;AACpC,WAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,CAAC,GAAG;AAClD,aAAS,MAAM,MAAM,QAAQ,UAAU,WAAW;AAAA,EAAA,WACzC,mBAAmB,QAAQ;AACpC,UAAM,WAAW,CAAC,OAAO,eAAe,GAAG,QAAQ;AACnD,WAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,CAAC,GAAG;AAClD,aAAS,MAAM,MAAM,QAAQ,UAAU,WAAW;AAAA,EACpD;AAEI,MAAA,QAAQ,YAAY,QAAQ,QAAQ;AAChC,UAAA,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACF;AC/PA,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBf,MAAM,eAAe,MAAM;AAEvB,SAAA,oBAAC,cACC,UAAC,oBAAA,OAAA,EAAI,WAAU,gBACb,UAAA,qBAAC,OAAI,EAAA,WAAU,iBACb,UAAA;AAAA,IAAC,oBAAA,SAAA,EAAM,MAAK,YAAY,UAAO,QAAA;AAAA,IAC/B,oBAAC,QAAG,UAAmB,sBAAA,CAAA;AAAA,yBACtB,KAAE,EAAA,UAAA;AAAA,MAAA;AAAA,MACO,oBAAA,KAAA,EAAE,MAAK,sCAAqC,UAAiB,qBAAA;AAAA,MAAI;AAAA,IAAA,GAE3E;AAAA,EAAA,GACF,GACF,EACF,CAAA;AAEJ;AClCA,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAerB,MAAM,kBAAkB,MAAM;AAE1B,SAAA,qBAAC,QAAK,EAAA,MAAK,MACT,UAAA;AAAA,IAAA,qBAAC,QACC,EAAA,UAAA;AAAA,MAAC,oBAAA,QAAA,EAAK,SAAQ,QAAQ,CAAA;AAAA,MACrB,oBAAA,QAAA,EAAK,MAAK,YAAW,SAAQ,2DAA0D;AAAA,MACvF,oBAAA,QAAA,EAAK,MAAK,UAAS,SAAQ,WAAU;AAAA,MACrC,oBAAA,QAAA,EAAK,MAAK,YAAW,SAAQ,eAAc;AAAA,MAE5C,oBAAC,WAAM,UAAY,eAAA,CAAA;AAAA,MACnB,oBAAC,WAAO,UAAa,aAAA,CAAA;AAAA,IAAA,GACvB;AAAA,yBACC,QACC,EAAA,UAAA;AAAA,MAAC,oBAAA,OAAA,EAAI,IAAG,SAAS,CAAA;AAAA,0BAChB,cAAa,EAAA;AAAA,IAAA,GAChB;AAAA,EACF,EAAA,CAAA;AAEJ;ACzBA,MAAM,iBAAiB,CAAC,EAAE,cAAuC;AAC/D,QAAM,gBAAgB,QACnB,IAAI,CAAC,EAAE,MAAM,iBAAiB,IAAI,IAAI,MAAM,UAAU,EAAE,EACxD,KAAK,KAAK;AAEb,QAAM,gBAAgB,QACnB,IAAI,CAAC,EAAE,YAAY,MAAAC,MAAW,MAAA,UAAU,UAAU,UAAUA,KAAI,IAAI,EACpE,KAAK,IAAI;AAEL,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAKC,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAOb,aAAa;AAAA;AAAA;AAAA;AAIvB;AAMA,MAAM,kBAAkB,OAAO,EAAE,aAA2C;AAC1E,QAAM,SAAS,qBAAqB,cAAcC,eAAQ,CAAC;AAC3D,SAAO,MAAM,mBAAmB;AAEhC,SAAO,yBAAyB,MAAM;AACxC;AAEA,MAAM,yBAAyB;AAAA;AAAA;AAAA,EAG7B,KAAK;AAQP,MAAM,uCAAuC,CAAC,iBAC5C,aAAa,QAAQ,SAAS;AAAA;AAAA,EAAW,sBAAsB;AAAA;AAAA,MAAc;AAE/E,MAAM,yBAAyB,OAAO,QAAsB;AAQ1D,QAAM,GAAG,MAAM,IAAI,YAAY,EAAE,WAAW,MAAM;AAC9C,MAAA,OAAO,MAAM,+BAA+B;AAEhD,QAAM,YAAY;AAAA,IAChB,MAAM,gBAAgB,EAAE,QAAQ,IAAI,QAAQ;AAAA,EAAA;AAG9C,QAAM,GAAG;AAAA,IACP,KAAK,KAAK,IAAI,YAAY,YAAY;AAAA,IACtC,OAAO,WAAW;AAAA,MAChB,QAAQ;AAAA,IAAA,CACT;AAAA,EAAA;AAEC,MAAA,OAAO,MAAM,2BAA2B;AAC5C,QAAM,GAAG;AAAA,IACP,KAAK,KAAK,IAAI,YAAY,QAAQ;AAAA,IAClC,OAAO,eAAe,EAAE,SAAS,IAAI,QAAS,CAAA,GAAG;AAAA,MAC/C,QAAQ;AAAA,IAAA,CACT;AAAA,EAAA;AAEC,MAAA,OAAO,MAAM,uBAAuB;AAC1C;ACxFA,MAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKA,MAAM,4BAA4B,CAAC,aACjC,oBACG;AAAA,EACC,CAAC,eAAe,CAAC,UAAU,QAAS,SAAS,QAAQ,eAAe;AACtE,EACC,OAAO,CAAC,KAAK,eAAe;AAQvB,MAAA,GAAG,UAAU,GAAG,IAAI,SAAS,QAAQ,QAAQ,UAAU,CAAC;AACrD,SAAA;AACT,GAAG,CAA4B,CAAA;AAUnC,MAAM,aAAqC;AAAA,EACzC,8BAA8B;AAAA,EAC9B,6CAA6C;AAAA,EAC7C,8BAA8B;AAAA,EAC9B,+BAA+B;AAAA,EAC/B,4CAA4C;AAAA,EAC5C,6CAA6C;AAAA,EAC7C,uCAAuC;AAAA,EACvC,oCAAoC;AAAA,EACpC,sCAAsC;AAAA,EACtC,iDAAiD;AAAA,EACjD,yBAAyB;AAC3B;AAEA,MAAM,aAAa,CAAC,KAAa,aAA8B;AACvD,QAAA,eAAe,0BAA0B,QAAQ;AACjD,QAAA,kBAAkB,WACpB,OAAO;AAAA,IACL,OAAO,QAAQ,UAAU,EAAE,IAAI,CAAC,CAAC,KAAK,UAAU,MAAM;AACpD,aAAO,CAAC,KAAKD,OAAK,KAAK,SAAS,MAAM,UAAU,CAAC;AAAA,IAAA,CAClD;AAAA,MAEH;AAEG,SAAA;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EAAA;AAEP;AChFA,eAAe,mBAAmB,KAAkD;AAClF,MAAI,IAAI;AAER,SAAO,MAAM,KAAK;AAChB,UAAM,aAAa,MAAM,UAAU,EAAE,KAAK,EAAG,CAAA;AAE7C,QAAI,CAAC,YAAY;AACR,aAAA;AAAA,IACT;AAEI,QAAA,WAAW,YAAY,kBAAkB;AAC3C,aAAO,EAAE,MAAMA,OAAK,QAAQ,WAAW,IAAI;IAC7C;AAEA,QAAIA,OAAK,QAAQA,OAAK,QAAQ,WAAW,IAAI,CAAC;AAAA,EAChD;AAEO,SAAA;AACT;ACxBA,MAAM,aAAa,OAAOA,UAAiB;AACrC,MAAA;AACF,UAAM,OAAOA,KAAI;AACV,WAAA;AAAA,WACA,OAAO;AACP,WAAA;AAAA,EACT;AACF;AAKA,MAAM,WAAW,OAAOA,UAA2C;AAC7D,MAAA,MAAM,WAAWA,KAAI,GAAG;AAC1B,UAAM,iBAAiB,EAAE,YAAY,CAAC,OAAO,QAAQ,KAAK;AAE1D,UAAM,EAAE,WAAA,IAAe,SAAS,cAAc;AAGxC,UAAA,MAAM,QAAQA,KAAI;AAEb;AAKL,UAAA,OAAO,KAAK,WAAW,OAAO;AAE7B,WAAA;AAAA,EACT;AAEO,SAAA;AACT;ACtBA,MAAM,oBAAoB,OAAO,QAAsB;AACrD,QAAM,WAAW,MAAM,mBAAmB,IAAI,GAAG;AAE3C,QAAA,SAAS,sBAAsB,IAAI,MAAM;AAExC,SAAA;AAAA,IACL,aAAa;AAAA,MACX,eAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAM,CAAC,KAAK,IAAI,KAAK,EAAE;AAAA,IACzB;AAAA,IACA,SAAS;AAAA,MACP,OAAO,WAAW,IAAI,KAAK,QAAQ;AAAA,MACnC,YAAY,CAAC,OAAO,QAAQ,aAAa,OAAO,MAAM;AAAA,IACxD;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,QAAQ,gBAAgB,gBAAgB;AAAA,UACxC,SAAS;AAAA,YACP,QAAQ;AAAA,YACR;AAAA,YACA,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,KAAK;AAAA,YACH,QAAQ,gBAAgB,gBAAgB;AAAA,YACxC,SAAS;AAAA,cACP,QAAQ;AAAA,cACR;AAAA,cACA,KAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,SAAS;AAAA,YACP,gBAAgB;AAAA,UAClB;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,KAAK,CAAC,gBAAgB,cAAc,GAAG,gBAAgB,YAAY,CAAC;AAAA,QACtE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,MAAM,CAAC,UAAU,UAAU,YAAY,UAAU,QAAQ;AAAA,UACzD,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,kBAAkB;AAAA,cAChB,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,kBAAkB;AAAA,cAChB,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,IAAI,kBAAkB;AAAA,QACpB,QAAQ;AAAA,QACR,UAAU,KAAK,QAAQ,IAAI,YAAY,YAAY;AAAA,MAAA,CACpD;AAAA,MACD,IAAI;AAAA,QACF,OAAO,QAAQ,IAAI,GAAG,EAAE,OAA+B,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AAC5E,cAAI,eAAe,GAAG,EAAE,IAAI,KAAK,UAAU,KAAK;AACzC,iBAAA;AAAA,QACT,GAAG,EAAE;AAAA,MACP;AAAA,MACA,IAAI,YACF,IAAI,oBAAoB;AAAA,QACtB,YAAY;AAAA,UACV,YAAY,IAAI,SAAS;AAAA,UACzB,iBAAiB;AAAA,YACf,iBAAiB;AAAA,cACf,WAAW,IAAI,QAAQ;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IAAA,EACH,OAAO,OAAO;AAAA,EAAA;AAEpB;AAEA,MAAM,2BAA2B,OAAO,QAA8C;AAC9E,QAAA,aAAa,MAAM,kBAAkB,GAAG;AAEvC,SAAA;AAAA,IACL,GAAG;AAAA,IACH,OAAO;AAAA,MACL,MAAM;AAAA;AAAA,MAEN,mBAAmB;AAAA,QACjB,QAAQ,CAAC,UAAU;AAAA,MACrB;AAAA,MACA,SAAS,OACN,WAAW,KAAK,EAChB,OAAO,OAAO,QAAQ,WAAW,QAAQ,KAAK,EAAE,KAAA,CAAM,EACtD,OAAO,KAAK;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,GAAG,WAAW;AAAA,MACd,MAAM;AAAA,QACJ,GAAG,gBAAgB,+BAA+B,CAAC;AAAA,QACnD,GAAG,WAAW,MAAM;AAAA,MACtB;AAAA,IACF;AAAA,IACA,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,MAAM,IAAI;AAAA,MACV,YAAY,IAAI;AAAA,IAClB;AAAA,IACA,uBAAuB;AAAA,MACrB,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,GAAG,WAAW;AAAA,MACd,IAAI,2BAA2B;AAAA,MAC/B,IAAI,0BAA0B;AAAA,IAChC;AAAA,EAAA;AAEJ;AAEA,MAAM,0BAA0B,OAAO,QAA8C;AAC7E,QAAA,SAAS,sBAAsB,IAAI,MAAM;AAEzC,QAAA,aAAa,MAAM,kBAAkB,GAAG;AAEvC,SAAA;AAAA,IACL,GAAG;AAAA,IACH,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS,IAAI,QAAQ,aAAa,eAAe;AAAA,IACjD,QAAQ;AAAA,MACN,MAAM,IAAI;AAAA,MACV,YAAY,IAAI;AAAA;AAAA;AAAA,MAGhB,UAAU;AAAA,MACV,eAAe;AAAA,IACjB;AAAA,IACA,cAAc;AAAA,MACZ,UAAU,IAAI,QAAQ;AAAA,MACtB,WAAW;AAAA,QACT,IAAI,oBAAoB;AAAA,UACtB;AAAA,UACA,KAAK;AAAA;AAAA,QAAA,CACN;AAAA,MACH;AAAA,MACA,WAAW;AAAA,MACX,cAAc;AAAA,IAChB;AAAA;AAAA,IAEA,SAAS;AAAA,MACP,GAAG,WAAW;AAAA,MACd,IAAI,qBAAqB;AAAA,QACvB,UAAU;AAAA,QACV,eAAe;AAAA,QACf,aAAa;AAAA,MAAA,CACd;AAAA,MACD,IAAI,QAAQ,SAAS,IAAI,qBAAqB;AAAA,IAAA,EAC9C,OAAO,OAAO;AAAA,EAAA;AAEpB;AAEA,MAAM,eAAe,CAAC,qBAAqB,sBAAsB,mBAAmB;AAIpF,MAAM,gBAAgB,OAAO,QAA8D;AACzF,aAAW,QAAQ,cAAc;AAC/B,UAAM,WAAW,KAAK,KAAK,IAAI,QAAQ,OAAO,SAAS,IAAI;AACrD,UAAA,aAAa,MAAM,SAAS,QAAQ;AAE1C,QAAI,YAAY;AACP,aAAA;AAAA,IACT;AAAA,EACF;AAEO,SAAA;AACT;AAEA,MAAM,4BAA4B,OAAO,QAAuB,QAAsB;AAC9E,QAAA,aAAa,MAAM,cAAc,GAAG;AAE1C,MAAI,YAAY;AACR,UAAAE,WAAU,MAAM,OAAO,SAAS;AAC/B,WAAA,WAAW,QAAQA,QAAO;AAAA,EACnC;AAEO,SAAA;AACT;AC7NA,MAAM,UAAU,CAAC,QAA+B,eAAe;AAQzD,MAAA,wBAAwB,CAAC,QAAiB;AACtC,UAAA;AAAA,IACN,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EAAA;AAGF,MAAI,QAAQ,GAAG,KAAK,IAAI,OAAO;AAErB,YAAA;AAAA,MACN,MAAM;AAAA,QACJ,MAAM,IAAI,OAAO;AAAA,UACf,SAAS;AAAA,UACT,OAAO;AAAA,QAAA,CACR;AAAA,MACH;AAAA,IAAA;AAAA,EAEJ;AAEA,UAAQ,KAAK,CAAC;AAChB;AC3BA,MAAMJ,UAAQ,OAAO,QACnB,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC/B,QAAA,SAAS,MAAM,wBAAwB,GAAG;AAChD,QAAM,cAAc,MAAM,0BAA0B,QAAQ,GAAG;AAE3D,MAAA,OAAO,MAAM,kBAAkB,WAAW;AAEtC,UAAA,aAAa,CAAC,KAAK,UAAU;AACnC,QAAI,OAAO;AACL,UAAA,MAAM,aAAa;AACrB,YAAI,OAAO;AAAA,UACT,MAAM,SAAS;AAAA,YACb,QAAQ;AAAA,YACR,QAAQ;AAAA,UAAA,CACT;AAAA,QAAA;AAGH,eAAO,KAAK;AAAA,MAAA,WACH,IAAI,QAAQ,OAAO;AAC5B,YAAI,OAAO;AAAA,UACT,MAAM,SAAS;AAAA,YACb,QAAQ;AAAA,YACR,QAAQ;AAAA,UAAA,CACT;AAAA,QAAA;AAAA,MAEL;AAEA,cAAQ,IAAI;AAAA,IACd;AAEI,QAAA,OAAO,QAAQ,GAAG,GAAG;AACnB,UAAA,OAAO,MAAM,IAAI,OAAO;AAC5B,aAAO,KAAK;AAAA,IACd;AAAA,EAAA,CACD;AACH,CAAC;ACvBH,MAAM,UAAU,OAAO,QAAgB;AACrC,QAAM,YAAY,KAAK,QAAQ,KAAK,MAAM;AAEtC,MAAA,MAAM,WAAW,SAAS,GAAG;AAC/B,WAAO,OAAO,EAAE,MAAM,UAAW,CAAA;AAAA,EACnC;AACF;AAOA,MAAM,wBAAwB,CAAC,eAAmD;AAChF,SAAO,OAAO,KAAK,QAAQ,GAAG,EAC3B,OAAO,CAAC,QAAQ,IAAI,YAAY,EAAE,WAAW,eAAe,CAAC,EAC7D,OAAO,CAAC,KAAK,QAAQ;AACpB,QAAI,GAAG,IAAI,QAAQ,IAAI,GAAG;AAEnB,WAAA;AAAA,KACN,UAA+C;AACtD;ACjBA,MAAM,2BAA2B,CAC/B,QAEA,YAAY,OACZ,OAAO,IAAI,WAAW,YACtB,CAAC,MAAM,QAAQ,IAAI,MAAM,KACzB,IAAI,WAAW;AAEjB,MAAM,0BAA0B,CAAC,QAC/B,yBAAyB,GAAG,KAAK,IAAI,OAAO,SAAS;AAEhD,MAAM,oBAAoB,OAAO;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,MAAuD;AACrD,QAAM,UAAsC,CAAA;AAO5C,QAAM,OAAO,OAAO,OAAO,IAAI,qBAAqB,CAAA,CAAE;AAEtD,SAAO,MAAM,oCAAoC,GAAG,KAAK,IAAI;AAE7D,aAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACnC,UAAM,MAAM,MAAM,UAAU,KAAK,GAAG;AAEhC,QAAA,OAAO,wBAAwB,GAAG,GAAG;AACvC,YAAM,OAAO,IAAI,OAAO,QAAQ,IAAI;AAEpC,UAAI,CAAC,MAAM;AAIH,cAAA;AAAA,UACJ;AAAA,QAAA;AAAA,MAEJ;AAEA,cAAQ,IAAI,IAAI;AAAA,QACd;AAAA,QACA,cAAc;AAAA,MAAA;AAAA,IAElB;AAAA,EACF;AAEA,QAAM,kBAAkB,MAAM,oBAAoB,OAAO,KAAK,IAAI,MAAM;AAExE,SAAO,MAAM,uBAAuB,GAAG,KAAK,eAAe;AAE3D,aAAW,CAAC,gBAAgB,gBAAgB,KAAK,OAAO,QAAQ,eAAe,GAAG;AAC5E,QAAA,iBAAiB,WAAW,iBAAiB,SAAS;AACxD,cAAQ,cAAc,IAAI;AAAA,QACxB,MAAM;AAAA,QACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,QAKT,cAAc,iBAAiB;AAAA,MAAA;AAAA,IAEnC;AAAA,EACF;AAEO,SAAA;AACT;AAEA,MAAM,iBAAiB,CAAC,cAAc,eAAe,YAAY;AAIjE,MAAM,sBAAsB,OAAO,SAAgD;AACjF,aAAW,QAAQ,gBAAgB;AACjC,UAAM,WAAW,KAAK,KAAK,MAAM,IAAI;AAC/B,UAAA,aAAa,MAAM,SAAS,QAAQ;AAE1C,QAAI,YAAY;AAId,aAAO,OAAO,eAAe,aAAa,WAAW,EAAE,IAAA,CAAK,IAAI;AAAA,IAClE;AAAA,EACF;AAEA,SAAO;AACT;AC9BA,MAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,qBAAqB,OAAO;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU,CAAC;AACb,MAA8B;AAMtB,QAAA,iBACJ,UACA,cAAc;AAAA;AAAA,IAEZ,QAAQ;AAAA,IACR,SAAS,UAAU,OAAO,QAAQ,UAAU;AAAA;AAAA,IAE5C,YAAY;AAAA,IACZ,iBAAiB;AAAA,EAAA,CAClB;AAEH,QAAM,EAAE,WAAW,cAAc,cAAc,eAAe,QAAQ,IAAI;AAE1E,QAAM,QAAQ,GAAG;AAEjB,QAAMK,OAAM,sBAAsB;AAAA,IAChC,YAAY;AAAA,IACZ,0BAA0B;AAAA,IAC1B,2BAA2B,OAAO,eAAe,UAAU,UAAU;AAAA,EAAA,CACtE;AAEK,QAAA,UAAU,OAAO,KAAKA,IAAG;AAE3B,MAAA,QAAQ,SAAS,GAAG;AACf,WAAA;AAAA,MACL;AAAA,QACE;AAAA,QACA,GAAG,QAAQ,IAAI,CAAC,QAAQ,SAAS,GAAG,EAAE;AAAA,MAAA,EACtC,KAAK,GAAG,GAAG;AAAA,IAAA;AAAA,EAEjB;AAEA,QAAM,WAAW,KAAK,KAAK,eAAe,KAAK,KAAK,MAAM,OAAO;AACjE,QAAM,UAAU,KAAK,SAAS,KAAK,QAAQ;AAKvC,MAAA;AACK,WAAA,MAAM,yBAAyB,QAAQ,EAAE;AAC1C,UAAA,GAAG,GAAG,UAAU,EAAE,WAAW,MAAM,OAAO,MAAM;AACtD,WAAO,MAAM,qBAAqB;AAAA,EAAA,QAC5B;AAEN,WAAO,MAAM,mCAAmC;AAAA,EAClD;AAEA,QAAM,aAAa,KAAK,KAAK,KAAK,WAAW,QAAQ;AAC/C,QAAA,QAAQ,KAAK,SAAS,KAAK,KAAK,KAAK,YAAY,QAAQ,CAAC;AAE1D,QAAA,UAAU,MAAM,kBAAkB,EAAE,KAAK,QAAQ,QAAQ,gBAAgB;AAE/E,SAAO,MAAM,mBAAmB,GAAG,KAAK,OAAO;AAEzC,QAAA,mBAAmB,OAAO,OAAO,OAAO,EAC3C,OAAO,yBAAyB,EAChC,IAAI,CAAC,YAAY;AAAA,IAChB,MAAM,CAAC,OAAO,UACV,GAAG,OAAO,YAAY,kBACtB,GAAG,KAAK,SAAS,YAAY,OAAO,YAAY,CAAC;AAAA,IACrD,MAAM,OAAO;AAAA,IACb,YAAY,UAAU,OAAO,IAAI;AAAA,EACjC,EAAA;AAEJ,SAAO,MAAM,2BAA2B,GAAG,KAAK,OAAO;AAEvD,QAAM,SAAS,aAAa,WAAW,EAAE,MAAM,IAAA,CAAK,KAAK;AAEzD,QAAM,eAAe;AAAA,IACnB,QAAQ,eAAe,KAAK,IAAI;AAAA,IAChC,UAAU,GAAG,SAAS;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EAAA;AAGK,SAAA;AACT;AAMA,MAAM,4BAA4B,CAAC,WAAmB;AACpD,MAAI,CAAC,QAAQ;AACJ,WAAA;AAAA,EACT;AAaI,MAAA;AACF,UAAM,mCAAmC,OAAO;AAAA;AAAA,MAE9C,KAAK,QAAQ,GAAG,OAAO,YAAY,kBAAkB;AAAA,IAAA;AAGvD,QAAI,CAAC,kCAAkC;AAErC,UAAI,eAAe,OAAO;AAEtB,UAAA,QAAQ,aAAa,SAAS;AACjB,uBAAA,aAAa,MAAM,KAAK,GAAG,EAAE,KAAK,KAAK,MAAM,GAAG;AAAA,MACjE;AAEA,YAAM,iBAAiB,QAAQ,QAAQ,GAAG,YAAY,eAAe;AAE9D,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,WACA,KAAK;AACZ,QAAI,QAAQ,GAAG,KAAK,UAAU,OAAO,IAAI,SAAS,oBAAoB;AAK7D,aAAA;AAAA,IACT;AAEM,UAAA;AAAA,EACR;AACF;ACvOO,SAAS,WAAyB;AACvC,QAAM,UAAkC,CAAA;AACxC,QAAM,aAAqC,CAAA;AAE3C,WAAS,MAAM,MAAoB;AACjC,QAAI,OAAO,WAAW,IAAI,MAAM,aAAa;AAC3C,YAAM,IAAI,MAAM,UAAU,IAAI,qCAAqC;AAAA,IACrE;AAEW,eAAA,IAAI,IAAI,YAAY,IAAI;AAAA,EACrC;AAEA,WAAS,IAAI,MAAsB;AACjC,QAAI,OAAO,WAAW,IAAI,MAAM,aAAa;AAC3C,YAAM,IAAI,MAAM,UAAU,IAAI,6BAA6B;AAAA,IAC7D;AAEA,YAAQ,IAAI,IAAI,YAAY,IAAI,IAAI,WAAW,IAAI;AACnD,WAAO,QAAQ,IAAI;AAAA,EACrB;AAEA,SAAO,EAAE,OAAO,KAAK,YAAY,MAAM,QAAQ;AACjD;ACOM,MAAA,QAAQ,OAAO,EAAE,QAAQ,KAAK,UAAU,eAAe,GAAG,cAA4B;AAC1F,QAAM,QAAQ;AAER,QAAA,EAAE,WAAW,IAAI,MAAM,0BAA0B,EAAE,KAAK,QAAQ,cAAe,CAAA,EAAE;AAAA,IACrF,CAAC,QAAQ;AACA,aAAA,MAAM,IAAI,OAAO;AACxB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EAAA;AAGF,MAAI,YAAY;AACd;AAAA,EACF;AAEA,MAAI,UAAU,QAAQ;AACpB,UAAM,MAAM,aAAa;AACzB,UAAM,qBAAqB,OAAO,QAAQ,cAAc,EAAE;AAElD,YAAA,QAAQ,KAAK,EAAE,eAAe,EAAE,mBAAmB,SAAS;AAE9D,UAAA,oBAAoB,MAAM,IAAI,aAAa;AAC9B,uBAAA,OAAO,iBAAiB,iBAAiB;AAC5D,uBAAmB,QAAQ;AAAA,EAC7B;AAEA,QAAM,MAAM,oBAAoB;AAChC,QAAM,iBAAiB,OAAO,QAAQ,wBAAwB,EAAE;AAChE,UAAQ,IAAI,EAAE;AAER,QAAA,MAAM,MAAM,mBAAmB;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACK,QAAA,kBAAkB,MAAM,IAAI,oBAAoB;AACvC,iBAAA,OAAO,2BAA2B,eAAe;AAChE,iBAAe,QAAQ;AAEvB,QAAM,MAAM,YAAY;AACxB,QAAM,kBAAkB,OAAO,QAAQ,sBAAsB,EAAE;AAC/D,UAAQ,IAAI,EAAE;AAEV,MAAA;AACF,OAAG,KAAK,GAAG;AAEX,UAAM,uBAAuB,GAAG;AAChC,UAAMC,QAAa,GAAG;AAEhB,UAAA,gBAAgB,MAAM,IAAI,YAAY;AAC5B,oBAAA,OAAO,yBAAyB,aAAa;AAC7D,oBAAgB,QAAQ;AAAA,WACjB,KAAK;AACZ,oBAAgB,KAAK;AACf,UAAA;AAAA,EACR;AACF;AC/EA,MAAM,QAAQ,OAAO,QAA+C;AAC5D,QAAA,SAAS,MAAM,yBAAyB,GAAG;AACjD,QAAM,cAAc,MAAM,0BAA0B,QAAQ,GAAG;AAE/D,MAAI,OAAO,MAAM,yBAAyB,GAAG,KAAK,WAAW;AAEtD,SAAA,IAAI,QAAwB,CAAC,QAAQ;AACpC,UAAA,WAAWF,UAAQ,WAAW;AAE9B,UAAA,gBAAgB,qBAAqB,QAAQ;AAG7C,UAAA,gBAAgB,qBAAqB,UAAU;AAAA,MACnD,KAAK;AAAA,MACL,MAAM;AAAA,IAAA,CACP;AAED,QAAI,OAAO,OAAO,IAAI,IAAI,CAACG,MAAK,SAAS;AACvC,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,sBAAcA,KAAI,KAAKA,KAAI,KAAK,CAAC,QAAQ;AACnC,cAAA;AAAK,mBAAO,GAAG;AAAA;AACd,oBAAQ,MAAM;AAAA,QAAA,CACpB;AAAA,MAAA,CACF;AAAA,IAAA,CACF;AAED,QAAI,OAAO,OAAO,IAAI,IAAI,CAAC,SAAS,SAAS;AAE3C,YAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,sBAAc,eAAe,MAAM;AACjC,kBAAQ,IAAI;AAAA,QAAA,CACb;AAAA,MAAA,CACF;AAED,YAAM,OAAO,IAAI,QAAQ,CAAC,YAAY;AACpC;AAAA,UACE,QAAQ;AAAA,UACR;AAAA;AAAA,YAEE,KAAK,CAAC,YAAY;AAEhB,sBAAQ,OAAO;AACf,sBAAQ,IAAI;AAAA,YACd;AAAA,YACA,WAAW,QAAQ,IAAI,KAAK,OAAO;AAAA;AAAA,YAEnC,WAAW,QAAQ,IAAI,KAAK,OAAO;AAAA,YACnC,QAAQ,QAAQ;AAAA,UAClB;AAAA,UACA,MAAM,QAAQ,MAAM;AAAA,QAAA;AAAA,MACtB,CACD;AAED,aAAO,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC;AAAA,IAAA,CACjC;AAEK,UAAA,aAAuC,OAAOA,MAAK,SAAS;AAChE,YAAM,KAAK;AAEP,UAAA,cAAc,QAAQ,iBAAiB,kBAAkB;AAC3D,YAAIA,KAAI,WAAW,UAAUA,KAAI,WAAW,OAAO;AACjD;AAAA,QACF;AAEA,YAAIA,KAAI,QAAQ,QAAQA,KAAI,WAAW,KAAK;AAC1C;AAAA,QACF;AAEA,cAAM,WAAW,KAAK,QAAQ,YAAY,QAAQ,MAAO,YAAY;AACrEA,aAAI,OAAO;AACXA,aAAI,OAAO,cAAc,QAAQ,iBAAiB,iBAAiB,QAAQ;AAAA,MAC7E;AAAA,IAAA;AAGE,QAAA,OAAO,OAAO,OAAO;AAAA,MACvB;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,GAAG,IAAI,QAAQ;AAAA,QACrB,SAAS;AAAA,QACT,QAAQ,EAAE,MAAM,MAAM;AAAA,MACxB;AAAA,IAAA,CACD;AAED,kBAAc,eAAe,MAAM;AAC7B,UAAA;AAAA,QACF,MAAM,QAAQ;AACZ,gBAAM,QAAQ,IAAI;AAAA,YAChB,UAAU,cAAc,MAAM,KAAK,aAAa,CAAC,EAAE;AAAA,YACnD,cAAc,MAAM;AAAA,YACpB,UAAU,SAAS,MAAM,KAAK,QAAQ,CAAC,EAAE;AAAA,UAAA,CAC1C;AAAA,QACH;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EAAA,CACF;AACH;ACnFA,MAAM,UAAU,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAsB;AACpB,QAAM,QAAQ;AAEd,MAAI,QAAQ,WAAW;AACf,UAAA,EAAE,WAAW,IAAI,MAAM,0BAA0B,EAAE,KAAK,QAAQ,cAAe,CAAA,EAAE;AAAA,MACrF,CAAC,QAAQ;AACA,eAAA,MAAM,IAAI,OAAO;AACxB,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IAAA;AAGF,QAAI,YAAY;AACd;AAAA,IACF;AAOA,QAAI,CAAC,YAAY;AACf,YAAM,MAAM,oBAAoB;AAChC,YAAM,iBAAiB,OAAO,QAAQ,wBAAwB,EAAE;AAChE,cAAQ,IAAI,EAAE;AAER,YAAA,MAAM,MAAM,mBAAmB;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AACK,YAAA,kBAAkB,MAAM,IAAI,oBAAoB;AACvC,qBAAA,OAAO,2BAA2B,eAAe;AAChE,qBAAe,QAAQ;AAEvB,YAAM,MAAM,eAAe;AAC3B,YAAM,eAAe,OAAO,QAAQ,gBAAgB,EAAE;AAEtD,SAAG,KAAK,GAAG;AACX,YAAM,uBAAuB,GAAG;AAChC,YAAMD,QAAa,GAAG;AAEhB,YAAA,gBAAgB,MAAM,IAAI,eAAe;AAClC,mBAAA,OAAO,mBAAmB,aAAa;AACpD,mBAAa,QAAQ;AAAA,IACvB;AAEA,YAAQ,GAAG,WAAW,OAAO,QAAQ,YAAY;AAC/C,cAAQ,SAAS;AAAA,QACf,KAAK,UAAU;AACb,iBAAO,MAAM,iEAAiE;AAC9E,iBAAO,KAAK,MAAM;AAClB;AAAA,QACF;AAAA,QACA,KAAK,UAAU;AACb,iBAAO,MAAM,qDAAqD;AAClE,kBAAQ,KAAK;AACb;AAAA,QACF;AAAA,QACA,KAAK,QAAQ;AACX,kBAAQ,KAAK,CAAC;AACd;AAAA,QACF;AAAA,MAGF;AAAA,IAAA,CACD;AAED,YAAQ,KAAK;AAAA,EACf;AAEA,MAAI,QAAQ,UAAU;AACpB,QAAI,UAAU,QAAQ;AACpB,YAAM,MAAM,aAAa;AACzB,YAAM,qBAAqB,OAAO,QAAQ,cAAc,EAAE;AAElD,cAAA,QAAQ,KAAK,EAAE,eAAe,EAAE,mBAAmB,SAAS;AAE9D,YAAA,oBAAoB,MAAM,IAAI,aAAa;AAC9B,yBAAA,OAAO,iBAAiB,iBAAiB;AAC5D,yBAAmB,QAAQ;AAAA,IAC7B;AAEA,UAAM,SAAS,cAAc;AAAA,MAC3B,QAAQ;AAAA,MACR,SAAS,UAAU,OAAO,QAAQ,UAAU;AAAA,MAC5C,YAAY;AAAA,MACZ,iBAAiB,CAAC;AAAA,IAAA,CACnB;AAEG,QAAA;AAMJ,QAAI,YAAY;AACd,YAAM,MAAM,oBAAoB;AAChC,YAAM,iBAAiB,OAAO,QAAQ,wBAAwB,EAAE;AAChE,cAAQ,IAAI,EAAE;AAER,YAAA,MAAM,MAAM,mBAAmB;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AACK,YAAA,kBAAkB,MAAM,IAAI,oBAAoB;AACvC,qBAAA,OAAO,2BAA2B,eAAe;AAChE,qBAAe,QAAQ;AAEvB,YAAM,MAAM,eAAe;AAC3B,YAAM,eAAe,OAAO,QAAQ,gBAAgB,EAAE;AAEtD,SAAG,KAAK,GAAG;AACX,YAAM,uBAAuB,GAAG;AACf,uBAAA,MAAME,MAAa,GAAG;AAEjC,YAAA,gBAAgB,MAAM,IAAI,eAAe;AAClC,mBAAA,OAAO,mBAAmB,aAAa;AACpD,mBAAa,QAAQ;AAAA,IACvB;AAEM,UAAA,iBAAiB,MAAM,OAAO;AAEpC,UAAM,MAAM,cAAc;AAC1B,UAAM,sBAAsB,OAAO,QAAQ,kBAAkB,EAAE;AAEzD,UAAA,QAAQ,WAAW,SAAS;AAAA,MAChC,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,SAAS;AAAA,MACT,QAAQ,EAAE,QAAQ,MAAM,OAAO,MAAM;AAAA,MACrC,WAAW,EAAE,cAAc,MAAM,YAAY,KAAK;AAAA,IAAA,CACnD;AAEK,UAAA,qBAAqB,MAAM,IAAI,cAAc;AAC/B,wBAAA,OAAO,qBAAqB,kBAAkB;AAClE,wBAAoB,QAAQ;AAE5B,UAAM,UAAU,YAAY;AAC1B,UAAI,eAAe,OAAO,cAAc,CAAC,eAAe,OAAO,aAAa;AAC1E,uBAAe,OAAO,cAAc;AACpC,uBAAe,OAAO;AAAA,MACxB;AAAA,IAAA;AAGI,UAAA,UAAU,SACb,MAAM,KAAK;AAAA,MACV,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,SAAS;AAAA,QACP;AAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe,KAAK,OAAO;AAAA,QAC3B,OAAO,KAAK,eAAe,KAAK,OAAO,QAAQ,IAAI;AAAA,QACnD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG,eAAe,OAAO,IAAI,0BAA0B,CAAA,CAAE;AAAA,MAC3D;AAAA,IACD,CAAA,EACA,GAAG,OAAO,CAACN,UAAS;AACnB,qBAAe,IAAI,KAAK,iBAAiBA,KAAI,EAAE;AACvC;IACT,CAAA,EACA,GAAG,UAAU,CAACA,UAAS;AACtB,qBAAe,IAAI,KAAK,iBAAiBA,KAAI,EAAE;AACvC;IACT,CAAA,EACA,GAAG,UAAU,CAACA,UAAS;AACtB,qBAAe,IAAI,KAAK,iBAAiBA,KAAI,EAAE;AACvC;IAAA,CACT;AAEK,YAAA,GAAG,WAAW,OAAO,YAAY;AACvC,cAAQ,SAAS;AAAA,QACf,KAAK,QAAQ;AACJ,iBAAA;AAAA,YACL;AAAA,UAAA;AAEF,gBAAM,QAAQ;AAEd,gBAAM,eAAe;AAErB,cAAI,gBAAgB;AAClB,2BAAe,MAAM;AAAA,UACvB;AACA,kBAAQ,OAAO,QAAQ;AACvB;AAAA,QACF;AAAA,MAGF;AAAA,IAAA,CACD;AAED,mBAAe,MAAM;AAAA,EACvB;AACF;"}
|