@wix/cli-app 1.1.70 → 1.1.71

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.
Files changed (59) hide show
  1. package/build/{CreateVersionCommand-SP5IPVGU.js → CreateVersionCommand-NCNK3B4H.js} +14 -14
  2. package/build/{DevCommand-TCV5QWXG.js → DevCommand-YDLV2KJM.js} +12 -12
  3. package/build/{GenerateCommand-54ISTYYO.js → GenerateCommand-MHQOLSPN.js} +77 -17
  4. package/build/GenerateCommand-MHQOLSPN.js.map +1 -0
  5. package/build/{LogsCommand-H7TEJMU7.js → LogsCommand-727BQUJX.js} +4 -4
  6. package/build/PreviewCommand-RZYVEWL4.js +23 -0
  7. package/build/{ReleaseCommand-6TNACMTW.js → ReleaseCommand-VU6V7GEV.js} +15 -15
  8. package/build/{ServeCommand-R7DZRKEJ.js → ServeCommand-KBS3RLPD.js} +13 -13
  9. package/build/{build-GAYTNX3U.js → build-E34NPSSH.js} +7 -7
  10. package/build/{chunk-BCLAONW5.js → chunk-4R3KUQGQ.js} +3 -3
  11. package/build/{chunk-G6UZ5AZ6.js → chunk-75XWKPKF.js} +3 -3
  12. package/build/{chunk-UY2MROJE.js → chunk-A6GRJNEC.js} +3 -3
  13. package/build/{chunk-JTGROBAJ.js → chunk-DQXLAGEX.js} +2 -2
  14. package/build/{chunk-DHGAE3R5.js → chunk-EAPMWJ4C.js} +7 -7
  15. package/build/{chunk-WSC7O536.js → chunk-FG4PQXAC.js} +3 -3
  16. package/build/{chunk-GZNYJNVI.js → chunk-G3X4DX2P.js} +4 -4
  17. package/build/{chunk-ZEKT3LRI.js → chunk-GTZDYTFO.js} +3 -3
  18. package/build/{chunk-MMYH4YFU.js → chunk-IE6RONCN.js} +5 -5
  19. package/build/{chunk-RTHHQIW6.js → chunk-JXZFXR5O.js} +3 -3
  20. package/build/{chunk-MX6MY676.js → chunk-MRMIQOH4.js} +3 -3
  21. package/build/{chunk-7V3AXMMP.js → chunk-N4ETYB2B.js} +5 -5
  22. package/build/{chunk-ZWTX6NE6.js → chunk-P7PN4CHV.js} +2 -2
  23. package/build/{chunk-KG6JXI3B.js → chunk-PH2UYNX4.js} +8 -8
  24. package/build/{chunk-H27IPZI4.js → chunk-PZFZCK52.js} +20 -9
  25. package/build/{chunk-H27IPZI4.js.map → chunk-PZFZCK52.js.map} +1 -1
  26. package/build/{chunk-TFBVDCPM.js → chunk-Q2DE27PN.js} +3 -3
  27. package/build/{chunk-OHC3CHII.js → chunk-VVLESE4P.js} +5 -3
  28. package/build/chunk-VVLESE4P.js.map +1 -0
  29. package/build/index.js +19 -19
  30. package/build/{preview-MYNAHHYE.js → preview-NOGUOO4T.js} +12 -12
  31. package/build/{render-command-NFMTZDGL.js → render-command-WBYARJYH.js} +5 -5
  32. package/package.json +3 -3
  33. package/build/GenerateCommand-54ISTYYO.js.map +0 -1
  34. package/build/PreviewCommand-CTYKGXWG.js +0 -23
  35. package/build/chunk-OHC3CHII.js.map +0 -1
  36. /package/build/{CreateVersionCommand-SP5IPVGU.js.map → CreateVersionCommand-NCNK3B4H.js.map} +0 -0
  37. /package/build/{DevCommand-TCV5QWXG.js.map → DevCommand-YDLV2KJM.js.map} +0 -0
  38. /package/build/{LogsCommand-H7TEJMU7.js.map → LogsCommand-727BQUJX.js.map} +0 -0
  39. /package/build/{PreviewCommand-CTYKGXWG.js.map → PreviewCommand-RZYVEWL4.js.map} +0 -0
  40. /package/build/{ReleaseCommand-6TNACMTW.js.map → ReleaseCommand-VU6V7GEV.js.map} +0 -0
  41. /package/build/{ServeCommand-R7DZRKEJ.js.map → ServeCommand-KBS3RLPD.js.map} +0 -0
  42. /package/build/{build-GAYTNX3U.js.map → build-E34NPSSH.js.map} +0 -0
  43. /package/build/{chunk-BCLAONW5.js.map → chunk-4R3KUQGQ.js.map} +0 -0
  44. /package/build/{chunk-G6UZ5AZ6.js.map → chunk-75XWKPKF.js.map} +0 -0
  45. /package/build/{chunk-UY2MROJE.js.map → chunk-A6GRJNEC.js.map} +0 -0
  46. /package/build/{chunk-JTGROBAJ.js.map → chunk-DQXLAGEX.js.map} +0 -0
  47. /package/build/{chunk-DHGAE3R5.js.map → chunk-EAPMWJ4C.js.map} +0 -0
  48. /package/build/{chunk-WSC7O536.js.map → chunk-FG4PQXAC.js.map} +0 -0
  49. /package/build/{chunk-GZNYJNVI.js.map → chunk-G3X4DX2P.js.map} +0 -0
  50. /package/build/{chunk-ZEKT3LRI.js.map → chunk-GTZDYTFO.js.map} +0 -0
  51. /package/build/{chunk-MMYH4YFU.js.map → chunk-IE6RONCN.js.map} +0 -0
  52. /package/build/{chunk-RTHHQIW6.js.map → chunk-JXZFXR5O.js.map} +0 -0
  53. /package/build/{chunk-MX6MY676.js.map → chunk-MRMIQOH4.js.map} +0 -0
  54. /package/build/{chunk-7V3AXMMP.js.map → chunk-N4ETYB2B.js.map} +0 -0
  55. /package/build/{chunk-ZWTX6NE6.js.map → chunk-P7PN4CHV.js.map} +0 -0
  56. /package/build/{chunk-KG6JXI3B.js.map → chunk-PH2UYNX4.js.map} +0 -0
  57. /package/build/{chunk-TFBVDCPM.js.map → chunk-Q2DE27PN.js.map} +0 -0
  58. /package/build/{preview-MYNAHHYE.js.map → preview-NOGUOO4T.js.map} +0 -0
  59. /package/build/{render-command-NFMTZDGL.js.map → render-command-WBYARJYH.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/lodash/uniqBy.js","../src/components/GenerateCommand/index.ts","../src/components/GenerateCommand/GenerateCommand.tsx","../src/components/GenerateCommand/dashboad-page/DashboardPage.tsx","../src/dev-center/components/validations/dashboard-plugin.ts","../src/dev-center/components/validations/dashboard-menu-plugin.ts","../src/dev-center/components/validations/service-plugin.ts","../src/components/GenerateCommand/dashboad-page/generate.ts","../src/components/GenerateCommand/hooks/use-generation-task.ts","../src/components/GenerateCommand/InstallDependencies.tsx","../../package-manager/src/index.ts","../../package-manager/src/package-manager.ts","../../package-manager/src/adapters/npm.ts","../../package-manager/src/shell/index.ts","../../package-manager/src/shell/shell-client.ts","../../package-manager/src/repo-type.ts","../../package-manager/src/git-service.ts","../../package-manager/src/adapters/yarn.ts","../src/components/GenerateCommand/embedded-script/EmbeddedScript.tsx","../src/components/GenerateCommand/embedded-script/const.ts","../src/components/GenerateCommand/embedded-script/generate.ts","../src/components/GenerateCommand/sidebar-category/SidebarCategory.tsx","../src/components/GenerateCommand/sidebar-category/generate.ts","../src/components/GenerateCommand/custom-element/CustomElement.tsx","../src/components/GenerateCommand/custom-element/generate.ts","../src/components/GenerateCommand/dashboard-modal/DashboardModal.tsx","../src/components/GenerateCommand/dashboard-modal/generate.ts","../src/components/GenerateCommand/service-plugin/index.ts","../src/components/GenerateCommand/service-plugin/ServicePlugin.tsx","../src/components/GenerateCommand/service-plugin/generate.ts","../src/components/GenerateCommand/dashboard-plugin/DashboardPlugin.tsx","../src/components/GenerateCommand/dashboard-plugin/DashboardPluginWizard.tsx","../src/components/GenerateCommand/dashboard-plugin/generate.ts","../src/components/GenerateCommand/AppRequirement.tsx","../src/components/GenerateCommand/MultipleAppRequirement.tsx","../src/components/GenerateCommand/dashboard-plugin/DashboardPluginGeneratedNote.tsx","../src/components/GenerateCommand/dashboad-menu-plugin/DashboardMenuPlugin.tsx","../src/components/GenerateCommand/dashboad-menu-plugin/DashboardMenuPluginWizard.tsx","../src/components/GenerateCommand/dashboad-menu-plugin/generate.ts","../src/components/GenerateCommand/dashboad-menu-plugin/NavigateToPage.tsx","../src/components/GenerateCommand/dashboad-menu-plugin/OpenModal.tsx","../src/components/GenerateCommand/dashboad-menu-plugin/DashboardMenuPluginGeneratedNote.tsx","../src/components/GenerateCommand/site-plugin/SitePlugin.tsx","../../site-plugin-client/src/index.ts","../../site-plugin-client/src/site-plugin-client.ts","../../site-plugin-client/src/schemas.ts","../../site-plugin-client/src/data/widget-docs.json","../../site-plugin-client/src/useSitePluginClient.ts","../src/components/GenerateCommand/site-plugin/SitePluginWizard.tsx","../src/components/GenerateCommand/site-plugin/generate.tsx","../src/components/GenerateCommand/api/Api.tsx","../src/components/GenerateCommand/api/generate.ts","../src/components/GenerateCommand/event/Event.tsx","../src/components/GenerateCommand/event/generate.ts","../src/components/GenerateCommand/web-method-module/WebMethod.tsx","../src/components/GenerateCommand/web-method-module/generate.ts"],"sourcesContent":["var baseIteratee = require('./_baseIteratee'),\n baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nmodule.exports = uniqBy;\n","export * from './GenerateCommand.js';\n","import React, { useState, useMemo, useCallback } from 'react';\nimport type { FC } from 'react';\nimport { match, partial, types, variant } from 'variant';\nimport type { VariantOf } from 'variant';\nimport { Box, SelectGroupsInput } from '@wix/cli-ui-kit';\nimport type { SelectOption, SelectGroup } from '@wix/cli-ui-kit';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { useWixCliAppBi } from '../../bi/index.js';\nimport { DevCenterComponent } from '../../dev-center/components/dev-center-component.js';\nimport { GenerateDashboardPage } from './dashboad-page/index.js';\nimport { GenerateEmbeddedScript } from './embedded-script/index.js';\nimport { GenerateSidebarCategory } from './sidebar-category/index.js';\nimport { GenerateCustomElement } from './custom-element/index.js';\nimport { GenerateDashboardModal } from './dashboard-modal/DashboardModal.js';\nimport { GenerateServicePlugin } from './service-plugin/index.js';\nimport { DashboardPlugin } from './dashboard-plugin/index.js';\nimport { DashboardMenuPlugin } from './dashboad-menu-plugin/index.js';\nimport { GenerateSitePlugin } from './site-plugin/index.js';\nimport { GenerateApi } from './api/index.js';\nimport { GenerateEvent } from './event/index.js';\nimport { GenerateWebMethod } from './web-method-module/index.js';\n\nconst DevCenterGenerateFlow = variant(types(DevCenterComponent));\n\ntype GenerateFlow = VariantOf<typeof DevCenterGenerateFlow>;\n\nexport const GenerateCommand: FC = () => {\n const { t } = useTranslation();\n const bi = useWixCliAppBi();\n const [generateFlow, setGenerateFlow] = useState<GenerateFlow>();\n\n const generateFlows: Array<SelectGroup<GenerateFlow>> = useMemo(\n () => [\n {\n title: t('generate_command.flow.dashboard_category'),\n items: [\n // Uncomment after SidebarCategory is open to public\n // {\n // key: 'sidebar-category',\n // title: t('generate_command.flow.sidebar_category'),\n // value: DevCenterGenerateFlow.DashboardSidebarCategory(),\n // },\n {\n key: 'dashboard-page',\n title: t('generate_command.flow.dashboard_page'),\n value: DevCenterGenerateFlow.DashboardPage(),\n },\n {\n key: 'dashboard-modal',\n title: t('generate_command.flow.dashboard_modal'),\n value: DevCenterGenerateFlow.DashboardModal(),\n },\n {\n key: 'dashboard-plugin',\n title: t('generate_command.flow.dashboard_plugin'),\n value: DevCenterGenerateFlow.DashboardPlugin(),\n },\n {\n key: 'dashboard-menu-plugin',\n title: t('generate_command.flow.dashboard_menu_plugin'),\n value: DevCenterGenerateFlow.DashboardMenuPlugin(),\n },\n ],\n },\n {\n title: t('generate_command.flow.site_category'),\n items: [\n {\n key: 'custom-element',\n title: t('generate_command.flow.custom_element'),\n value: DevCenterGenerateFlow.CustomElement(),\n },\n {\n key: 'embedded-script',\n title: t('generate_command.flow.embedded_script'),\n value: DevCenterGenerateFlow.EmbeddedScript(),\n },\n {\n key: 'site-plugin',\n title: t('generate_command.flow.site_plugin'),\n value: DevCenterGenerateFlow.SitePlugin(),\n },\n ],\n },\n {\n title: t('generate_command.flow.backend_category'),\n items: [\n {\n key: 'api',\n title: t('generate_command.flow.api.title'),\n value: DevCenterGenerateFlow.Api(),\n },\n {\n key: 'web-method-module',\n title: t('generate_command.flow.web_method.title'),\n value: DevCenterGenerateFlow.WebMethod(),\n },\n {\n key: 'event',\n title: t('generate_command.flow.event'),\n value: DevCenterGenerateFlow.Event(),\n },\n {\n key: 'service-plugin',\n title: t('generate_command.flow.service_plugin'),\n value: DevCenterGenerateFlow.ServicePlugin(),\n },\n ],\n },\n ],\n [t]\n );\n\n const selectFlow = useCallback(\n (selectedType: SelectOption<GenerateFlow>) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.flow.choose_flow'),\n questionKey: 'generate_command.flow.choose_flow',\n answer: selectedType.title,\n });\n setGenerateFlow(selectedType.value);\n },\n [bi, t]\n );\n\n return (\n <Box flexDirection=\"column\" paddingTop={1}>\n <SelectGroupsInput<GenerateFlow>\n label={t('generate_command.flow.choose_flow')}\n groups={generateFlows}\n onSubmit={selectFlow}\n maxHeight={14}\n />\n {generateFlow &&\n match(\n generateFlow,\n partial({\n DashboardPage: () => <GenerateDashboardPage />,\n DashboardSidebarCategory: () => <GenerateSidebarCategory />,\n EmbeddedScript: () => <GenerateEmbeddedScript />,\n CustomElement: () => <GenerateCustomElement />,\n SitePlugin: () => <GenerateSitePlugin />,\n DashboardModal: () => <GenerateDashboardModal />,\n DashboardPlugin: () => <DashboardPlugin />,\n DashboardMenuPlugin: () => <DashboardMenuPlugin />,\n ServicePlugin: () => <GenerateServicePlugin />,\n Api: () => <GenerateApi />,\n WebMethod: () => <GenerateWebMethod />,\n Event: () => <GenerateEvent />,\n default: () => null,\n })\n )}\n </Box>\n );\n};\n","import React, { useState, useMemo } from 'react';\nimport type { FC } from 'react';\nimport { match } from 'variant';\nimport { kebabCase } from 'lodash';\nimport {\n ConfirmInput,\n Learn,\n Link,\n SelectInput,\n Spinner,\n Text,\n TextInput,\n} from '@wix/cli-ui-kit';\nimport type { SelectOption } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport { useProjectModel } from '../../../model.js';\nimport { generateDashboardPage } from './generate.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport {\n createDashboardRouteValidation,\n useValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { useExtensions } from '../../extensions/useExtensions.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\n\nexport const GenerateDashboardPage: FC = () => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const { getExtensions } = useExtensions();\n const extensionType = t('generate_command.flow.dashboard_page').toLowerCase();\n\n const dashboardPages = getExtensions('DashboardPage');\n\n const categories = model.config.dashboard?.sidebar?.categories ?? [];\n const categoriesOptions: Array<SelectOption<string>> = categories.map(\n ({ id, label }) => ({\n title: label,\n value: id,\n })\n );\n const categoriesExist = Boolean(categories.length);\n\n const [pageRoute, setPageRoute] = useState<string>();\n const [pageTitle, setPageTitle] = useState<string>();\n const [addToCategory, setAddToCategory] = useState<boolean>();\n const [sidebarCategory, setSidebarCategory] = useState<string>();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const defaultPageRoute = kebabCase(pageTitle);\n\n const validateDashboardRoute = useValidation(\n createDashboardRouteValidation(dashboardPages)\n );\n\n const pageQuestionsAnswered = pageRoute && pageTitle;\n const addingSidebarCategory =\n categoriesExist && addToCategory && sidebarCategory;\n const notAddingSidebarCategory = !categoriesExist || addToCategory === false;\n\n const generationTask = useGenerationTask(async () => {\n if (!pageQuestionsAnswered) {\n return;\n }\n\n if (addingSidebarCategory) {\n return generateDashboardPage(\n model.projectFolder,\n pageRoute,\n pageTitle,\n sidebarCategory\n );\n }\n\n return generateDashboardPage(model.projectFolder, pageRoute, pageTitle);\n }, [\n pageQuestionsAnswered,\n notAddingSidebarCategory || addingSidebarCategory,\n ]);\n\n return (\n <>\n <TextInput\n label={t('generate_command.dashboard_page.choose_title')}\n placeholder={t('generate_command.dashboard_page.title_placeholder')}\n onSubmit={(pageTitle) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.dashboard_page.choose_title'),\n questionKey: 'generate_command.dashboard_page.choose_title',\n answer: pageTitle,\n additionalInfo: { extensionType },\n });\n setPageTitle(pageTitle);\n }}\n />\n {pageTitle && (\n <TextInput\n label={t('generate_command.dashboard_page.choose_route')}\n placeholder={defaultPageRoute}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.dashboard_page.choose_route'),\n questionKey: 'generate_command.dashboard_page.choose_route',\n answer: value,\n additionalInfo: { extensionType },\n });\n setPageRoute(value);\n }}\n validate={validateDashboardRoute}\n />\n )}\n {pageQuestionsAnswered && categoriesExist && (\n <ConfirmInput\n label={t('generate_command.dashboard_page.add_to_category')}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.dashboard_page.add_to_category'),\n questionKey: 'generate_command.dashboard_page.add_to_category',\n answer: String(value),\n additionalInfo: { extensionType },\n });\n setAddToCategory(value);\n }}\n />\n )}\n {pageQuestionsAnswered && categoriesExist && addToCategory && (\n <SelectInput<string>\n label={t('generate_command.dashboard_page.choose_category')}\n options={categoriesOptions}\n onSubmit={(option) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.dashboard_page.choose_category'),\n questionKey: 'generate_command.dashboard_page.choose_category',\n answer: option.title,\n additionalInfo: { extensionType },\n });\n setSidebarCategory(option.value);\n }}\n />\n )}\n\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Error: () => null,\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: `${extensionType} ${pageRoute}`,\n })}\n />\n ),\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, t, extensionType, pageRoute]\n )}\n\n {finishedInstallation && (\n <>\n <Text>\n {t('generate_command.generation.done', {\n extensionType,\n })}\n </Text>\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n components={[<Learn />, <Link url=\"https://wix.to/7W3nYUg\" />]}\n />\n </>\n )}\n </>\n );\n};\n","import path from 'node:path';\nimport { DASHBOARD_PLUGINS_DIR } from '@wix/cli-app-definitions';\nimport type { DevCenterComponent } from '../dev-center-component.js';\nimport { composeValidations, pathValidation } from './common.js';\n\nfunction dashboardPluginExistsValidation(\n existingDashboardPlugins: Array<DevCenterComponent<'DashboardPlugin'>>\n) {\n return (folder: string) =>\n existingDashboardPlugins.every((dashboardPlugin) => {\n const pluginRelativePath = path.relative(\n DASHBOARD_PLUGINS_DIR,\n dashboardPlugin.relativePath\n );\n\n const pluginName = path.dirname(pluginRelativePath);\n\n return folder !== pluginName;\n });\n}\n\nexport function createDashboardPluginValidation(\n dashboardPlugins: Array<DevCenterComponent<'DashboardPlugin'>>\n) {\n return composeValidations([\n [\n dashboardPluginExistsValidation(dashboardPlugins),\n 'The plugin folder must be unique, please choose a name that has not been used yet in your application.',\n ],\n [\n pathValidation,\n 'The plugin folder must be a valid path ([a-z0-9-/]+) and must not start with a dot.',\n ],\n ]);\n}\n","import { DASHBOARD_MENU_PLUGINS_DIR } from '@wix/cli-app-definitions';\nimport type { DevCenterComponent } from '../dev-center-component.js';\nimport { composeValidations, pathValidation } from './common.js';\n\nfunction dashboardMenuPluginExistsValidation(\n existingDashboardMenuPlugins: Array<DevCenterComponent<'DashboardMenuPlugin'>>\n) {\n return (folder: string) =>\n existingDashboardMenuPlugins.every(\n (dashboardMenuPlgin) =>\n folder !==\n dashboardMenuPlgin.relativePath\n .replace(`${DASHBOARD_MENU_PLUGINS_DIR}/`, '')\n .replace('/plugin.json', '')\n );\n}\n\nexport function createDashboardMenuPluginValidation(\n dashboardMenuPlugins: Array<DevCenterComponent<'DashboardMenuPlugin'>>\n) {\n return composeValidations([\n [\n dashboardMenuPluginExistsValidation(dashboardMenuPlugins),\n 'The menu plugin folder must be unique, please choose a name that has not been used yet in your application.',\n ],\n [\n pathValidation,\n 'The menu plugin folder must be a valid path ([a-z0-9-/]+) and must not start with a dot.',\n ],\n ]);\n}\n","import path from 'node:path';\nimport type { SupportedServicePlugin } from '@wix/cli-app-definitions';\nimport { SERVICE_PLUGINS_DIR } from '@wix/cli-app-definitions';\nimport type { DevCenterComponent } from '../dev-center-component.js';\nimport { composeValidations, pathValidation } from './common.js';\nimport { ServicePluginTypeToFolderName } from '../backend/config.js';\n\nfunction servicePluginExistsValidation(\n existingServicePlugins: Array<DevCenterComponent<'ServicePlugin'>>,\n servicePluginType?: SupportedServicePlugin\n) {\n return (folder: string) => {\n return existingServicePlugins.every((servicePlugin) => {\n const servicePluginRelativePath = path.relative(\n SERVICE_PLUGINS_DIR,\n servicePlugin.relativePath\n );\n\n const pluginName = path.dirname(servicePluginRelativePath);\n\n return (\n servicePluginType &&\n path.join(ServicePluginTypeToFolderName(servicePluginType), folder) !==\n pluginName\n );\n });\n };\n}\n\nexport function createServicePluginValidation(\n servicePlugins: Array<DevCenterComponent<'ServicePlugin'>>,\n servicePluginType?: SupportedServicePlugin\n) {\n return composeValidations([\n [\n servicePluginExistsValidation(servicePlugins, servicePluginType),\n 'Plugin name must be unique',\n ],\n [\n (path: string) => path.length < 20,\n 'Plugin name must be shorter than 20 characters',\n ],\n [\n pathValidation,\n 'The plugin folder must be a valid path ([a-z0-9-/]+) and must not start with a dot.',\n ],\n ]);\n}\n","import path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { toJsonString } from '@wix/cli-fs';\nimport { componentGenerator } from '@wix/gena';\nimport {\n getDashboardPagesDir,\n DASHBOARD_PAGES_DIR,\n} from '@wix/cli-app-definitions';\nimport type { DashboardPageConfig } from '@wix/cli-app-definitions';\n\n// NOTE: path is relative to the build folder\nconst DASHBOARD_PAGE_TEMPLATE = path.resolve(\n __dirname,\n '../templates/dashboard-page'\n);\n\nexport async function generateDashboardPage(\n projectFolder: string,\n route: string,\n title: string,\n categoryId?: string\n) {\n const cwd = path.join(getDashboardPagesDir(projectFolder), route);\n\n const sidebarConfig: DashboardPageConfig['sidebar'] = categoryId\n ? { categoryId }\n : undefined;\n\n const pageConfig: DashboardPageConfig = {\n $schema: 'https://dev.wix.com/wix-cli/schemas/dashboard-page.json',\n id: randomUUID(),\n title,\n sidebar: sidebarConfig,\n };\n const pageConfigJSON = toJsonString(pageConfig, { spaces: 2 });\n const relativeRoutePath = path.join(DASHBOARD_PAGES_DIR, route, 'page.tsx');\n\n return await componentGenerator({\n template: DASHBOARD_PAGE_TEMPLATE,\n projectFolder,\n cwd,\n data: {\n route,\n title,\n relativeRoutePath,\n pageConfigJSON,\n },\n });\n}\n","import { useCallback, useEffect } from 'react';\nimport type { VariantOf } from 'variant';\nimport { fields, isType, match, variant } from 'variant';\nimport _memoize from 'lodash/memoize.js';\nimport type { ComponentGenerationResult } from '@wix/gena';\nimport { AsyncCallbackStatus, useAsyncCallback } from '@wix/cli-ui-kit';\n\nconst GenerationTaskResultVariant = variant({\n Success: fields<{ hasUpdatedDependencies: boolean }>(),\n Error: {},\n Loading: {},\n NotRequested: {},\n});\n\ntype GenerationTaskResult = VariantOf<typeof GenerationTaskResultVariant>;\n\nexport const useGenerationTask = (\n fn: () => Promise<ComponentGenerationResult | void>,\n predicates: unknown[]\n): GenerationTaskResult => {\n const generationTask = useAsyncCallback(fn);\n\n useEffect(() => {\n if (\n predicates.every(Boolean) &&\n isType(generationTask.status, AsyncCallbackStatus.NotRequested)\n ) {\n void generationTask.execute();\n }\n }, [generationTask, predicates]);\n\n // `exhaustive-deps` doesn't know how to parse function wrapped in `memoize`\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const successResult = useCallback(\n _memoize((hasUpdatedDependencies: boolean) => {\n return GenerationTaskResultVariant.Success({\n hasUpdatedDependencies,\n });\n }),\n []\n );\n\n return match(generationTask.status, {\n Success: ({ result }) => {\n return successResult((result?.newDependencies.length ?? 0) > 0);\n },\n Error: () => GenerationTaskResultVariant.Error(),\n Loading: () => GenerationTaskResultVariant.Loading(),\n NotRequested: () => GenerationTaskResultVariant.NotRequested(),\n });\n};\n","import React, { useState } from 'react';\nimport { variant, match, fields } from 'variant';\nimport type { VariantOf } from 'variant';\nimport { getRepoType, createPackageManager } from '@wix/package-manager';\nimport { Box, ConfirmInput, Spinner, Text } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport { useProjectModel } from '../../model.js';\n\ninterface Props {\n onFinish: () => void;\n}\n\nconst InstallationStateVariant = variant({\n NotStarted: {},\n Skipped: fields<{ pkgManagerName: string }>(),\n Installing: {},\n Failure: {},\n Success: {},\n});\n\ntype InstallationState = VariantOf<typeof InstallationStateVariant>;\n\nexport const InstallDependencies: React.FC<Props> = ({ onFinish }) => {\n const { model } = useProjectModel();\n const { t } = useTranslation();\n\n const [instalState, setInstalState] = useState<InstallationState>(\n InstallationStateVariant.NotStarted()\n );\n\n return (\n <>\n <Box marginBottom={1}>\n <ConfirmInput\n label={t('generate_command.generation.install_dependencies_question')}\n initialValue={true}\n onSubmit={async (confirmed) => {\n const { projectFolder } = model;\n const repoType = await getRepoType(projectFolder);\n const pkgManager = await createPackageManager(repoType);\n\n if (confirmed) {\n setInstalState(InstallationStateVariant.Installing());\n try {\n await pkgManager.runInstall(projectFolder);\n } catch (e) {\n setInstalState(InstallationStateVariant.Failure());\n throw e;\n }\n setInstalState(InstallationStateVariant.Success());\n onFinish();\n } else {\n setInstalState(\n InstallationStateVariant.Skipped({\n pkgManagerName: pkgManager.name,\n })\n );\n onFinish();\n }\n }}\n />\n </Box>\n {match(instalState, {\n NotStarted: () => null,\n Failure: () => null,\n Skipped: ({ pkgManagerName }) => (\n <Box flexDirection=\"column\">\n <Text skin=\"warning\">\n <Trans\n i18nKey=\"generate_command.generation.new_dependencies\"\n values={{ pkgManagerName }}\n components={[<Text skin=\"code\" />]}\n />\n </Text>\n </Box>\n ),\n Installing: () => <Spinner text={t('general.loading')} />,\n Success: () => (\n <Box flexDirection=\"column\">\n <Trans i18nKey=\"generate_command.generation.dependencies_installed\" />\n </Box>\n ),\n })}\n </>\n );\n};\n","export { createPackageManager } from './package-manager.js';\nexport { NPM } from './adapters/npm.js';\nexport { Yarn } from './adapters/yarn.js';\nexport type { IPackageManager } from './types.js';\nexport { getRepoType, RepoType } from './repo-type.js';\nexport { gitClone, gitCommit, gitInit } from './git-service.js';\n","import { env } from 'node:process';\nimport { pathExists } from '@wix/cli-fs';\nimport { join } from 'node:path';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { matcher } from 'variant';\nimport { NPM } from './adapters/npm.js';\nimport { Yarn, resolveYarnVersion } from './adapters/yarn.js';\nimport type { IPackageManager, PackageManagerName } from './types.js';\nimport { RepoType } from './repo-type.js';\n\nexport async function createPackageManager(\n repoType: RepoType\n): Promise<IPackageManager> {\n const packageManagerName = await getPackageManagerName(repoType);\n\n switch (packageManagerName) {\n case 'yarn-berry':\n return new Yarn(repoType, 'yarn-berry');\n case 'yarn':\n return new Yarn(repoType, 'yarn');\n case 'npm':\n return new NPM(repoType);\n }\n}\n\nasync function getPackageManagerName(\n repoType: RepoType\n): Promise<PackageManagerName> {\n // In case of an existing repo we first check for relevant package manager files.\n // this is an extra layer of identification that should prevent errors when the\n // user runs create-app using a package manager other than the one used in the project\n\n const getByEnv = (): PackageManagerName => {\n if (env.npm_config_user_agent?.startsWith('yarn/1')) {\n return 'yarn';\n }\n\n // yarn v2+\n if (env.npm_config_user_agent?.startsWith('yarn')) {\n return 'yarn-berry';\n }\n\n if (env.npm_config_user_agent?.startsWith('npm')) {\n return 'npm';\n }\n\n throw new CliError({\n code: CliErrorCode.UnsupportedPackageManager({\n packageManagerName: env.npm_config_user_agent,\n }),\n cause: null,\n });\n };\n\n return matcher(repoType)\n .when(RepoType.None, getByEnv)\n .when(\n [RepoType.Polyrepo, RepoType.Monorepo],\n async ({ rootDir }): Promise<PackageManagerName> => {\n const [hasYarnRc, hasYarnLock, hasPackageLock] = await Promise.all([\n pathExists(join(rootDir, '.yarnrc.yml')),\n pathExists(join(rootDir, 'yarn.lock')),\n pathExists(join(rootDir, 'package-lock.json')),\n ]);\n\n if (hasYarnRc || hasYarnLock) {\n const yarnVersion = await resolveYarnVersion(rootDir);\n return yarnVersion.startsWith('1') ? 'yarn' : 'yarn-berry';\n }\n\n if (hasPackageLock) {\n return 'npm';\n }\n\n return getByEnv();\n }\n )\n .complete();\n}\n","import { CliError, CliErrorCode } from '@wix/cli-error';\nimport { isType } from 'variant';\nimport { runCommand } from '../shell/index.js';\nimport type { IPackageManager } from '../types.js';\nimport { RepoType } from '../repo-type.js';\n\nexport class NPM implements IPackageManager {\n readonly name = 'npm';\n\n constructor(private readonly repoType: RepoType) {}\n\n getUsage(name: string): string {\n return `npm init ${name.replace('create-', '')}`;\n }\n\n getInstallCmd(): string {\n return 'npm install';\n }\n\n getRunCmd(): string {\n return 'npm run';\n }\n\n async setup(_cwd: string): Promise<void> {\n if (isType(this.repoType, RepoType.Monorepo)) {\n throw new CliError({\n code: CliErrorCode.UnsupportedPackageManagerWorkspaces({\n packageManagerName: this.name,\n }),\n cause: null,\n });\n }\n }\n\n async runInstall(cwd: string): Promise<void> {\n try {\n await runCommand(this.getInstallCmd(), { cwd });\n } catch (e) {\n throw new CliError({\n code: CliErrorCode.FailedToInstallPackages(),\n info: { packageManager: this.name },\n cause: e,\n });\n }\n }\n\n async runInstallPackage(cwd: string, packageName: string): Promise<void> {\n try {\n await runCommand(`npm install ${packageName}`, { cwd });\n } catch (e) {\n throw new CliError({\n code: CliErrorCode.FailedToInstallPackage({ packageName }),\n info: { packageManager: this.name },\n cause: e,\n });\n }\n }\n\n async runUninstallPackage(cwd: string, packageName: string): Promise<void> {\n try {\n await runCommand(`npm uninstall ${packageName}`, { cwd });\n } catch (e) {\n throw new CliError({\n code: CliErrorCode.FailedToUninstallPackage({ packageName }),\n info: { packageManager: this.name },\n cause: e,\n });\n }\n }\n}\n","export { runCommand } from './shell-client.js';\n","import { execaCommand } from 'execa';\nimport type { Options } from './types.js';\n\nexport async function runCommand(command: string, opts?: Options) {\n const commandProcess = execaCommand(command, {\n /**\n * DO NOT USE `shell: true`!\n * It's a security risk that leads to injections and should be avoided.\n * ref: https://github.com/sindresorhus/execa/tree/main#shell\n */\n shell: false,\n cwd: opts?.cwd,\n env: opts?.env,\n });\n\n if (opts?.output) {\n commandProcess.stdout?.pipe(opts.output);\n }\n\n const { stdout } = await commandProcess;\n\n return stdout;\n}\n","import { readJson } from '@wix/cli-fs';\nimport { join } from 'node:path';\nimport { variant, fields } from 'variant';\nimport type { VariantOf } from 'variant';\nimport type { PackageJson } from 'type-fest';\nimport { getGitRoot, isInsideGitRepo } from './git-service.js';\n\nexport const RepoType = variant({\n None: {},\n Polyrepo: fields<{ rootDir: string }>(),\n Monorepo: fields<{ rootDir: string }>(),\n});\n\nexport type RepoType = VariantOf<typeof RepoType>;\n\nexport async function getRepoType(\n targetParentFolder: string\n): Promise<RepoType> {\n if (!(await isInsideGitRepo(targetParentFolder))) {\n return RepoType.None();\n }\n\n const rootDir = await getGitRoot(targetParentFolder);\n\n if (await isUsingWorkspaces(rootDir)) {\n return RepoType.Monorepo({\n rootDir,\n });\n }\n\n return RepoType.Polyrepo({\n rootDir,\n });\n}\n\nasync function isUsingWorkspaces(rootDir: string) {\n return readJson(join(rootDir, 'package.json'))\n .then((pkgJson) => Boolean((pkgJson as PackageJson).workspaces))\n .catch(() => false);\n}\n","import { runCommand } from './shell/index.js';\n\nexport function isInsideGitRepo(cwd: string) {\n return runCommand('git rev-parse --is-inside-work-tree', { cwd })\n .then(() => true)\n .catch(() => false);\n}\n\nexport async function getGitRoot(cwd: string) {\n return runCommand('git rev-parse --show-toplevel', { cwd });\n}\n\nexport async function gitInit(cwd: string) {\n await runCommand('git init', { cwd });\n}\n\nexport async function gitCommit(cwd: string) {\n await runCommand('git add -A', { cwd });\n await runCommand(\n `git commit -m Initial\\\\ commit\\\\ from\\\\ Create\\\\ Wix\\\\ App --no-verify`,\n { cwd }\n );\n}\n\nexport async function gitClone(url: string, path: string) {\n await runCommand(`git clone --depth 1 ${url} ${path}`, {\n env: {\n /*\n * This is to prevent git from prompting for credentials.\n * `git clone` uses a subprocess for the authentication, so we can't attach the main process to its stdio.\n * This leads to:\n * - the spinners \"swallow\" its output.\n * - after answering with the username and pressing \"Enter\", the first line of the output is being duplicated.\n * That's why we're disabling the prompt, so user should be pre-authenticated.\n */\n GIT_TERMINAL_PROMPT: '0',\n },\n });\n}\n","import { CliError, CliErrorCode } from '@wix/cli-error';\nimport { readJson, writeJson } from '@wix/cli-fs';\nimport { join, relative } from 'node:path';\nimport { matcher } from 'variant';\nimport { EOL } from 'node:os';\nimport { z } from 'zod';\nimport { writeFile } from 'node:fs/promises';\nimport type { PackageJson } from 'type-fest';\nimport { runCommand } from '../shell/index.js';\nimport type { IPackageManager } from '../types.js';\nimport type { RepoType } from '../repo-type.js';\n\ntype YarnVersion = 'yarn' | 'yarn-berry';\n\nexport async function resolveYarnVersion(cwd: string) {\n const stdout = await runCommand('yarn --version', { cwd });\n return stdout.trim();\n}\n\nexport class Yarn implements IPackageManager {\n constructor(\n private readonly repoType: RepoType,\n readonly name: YarnVersion\n ) {}\n\n getUsage(name: string): string {\n return `yarn create ${name.replace('create-', '')}`;\n }\n\n getInstallCmd(): string {\n return 'yarn install';\n }\n\n getRunCmd(): string {\n return 'yarn';\n }\n\n async setup(packageFolder: string): Promise<void> {\n return matcher(this.repoType)\n .when(['None', 'Polyrepo'], async () => {\n if (this.name === 'yarn-berry') {\n // if yarn berry encounters a package.json in a parent folder, it\n // complains that our project needs to be part of that parent project.\n // An official way to tell yarn that this is a standalone project is\n // to create an empty lockfile.\n // A similar thing was done in create-astro: https://github.com/withastro/astro/pull/8028\n await writeFile(join(packageFolder, 'yarn.lock'), '');\n }\n })\n .when('Monorepo', async ({ rootDir }) => {\n try {\n await addPackageToWorkspaces({\n rootDir,\n packageFolder,\n yarnVersion: this.name,\n });\n } catch (error) {\n throw new CliError({\n code: CliErrorCode.FailedAddingPackageToWorkspace(),\n cause: error,\n });\n }\n })\n .complete();\n }\n\n async runInstall(cwd: string): Promise<void> {\n try {\n await runCommand(this.getInstallCmd(), { cwd });\n } catch (e) {\n throw new CliError({\n code: CliErrorCode.FailedToInstallPackages(),\n info: { packageManager: this.name },\n cause: e,\n });\n }\n }\n\n async runInstallPackage(cwd: string, packageName: string): Promise<void> {\n try {\n await runCommand(`yarn add ${packageName}`, { cwd });\n } catch (e) {\n throw new CliError({\n code: CliErrorCode.FailedToInstallPackage({ packageName }),\n info: { packageManager: this.name },\n cause: e,\n });\n }\n }\n\n async runUninstallPackage(cwd: string, packageName: string): Promise<void> {\n try {\n await runCommand(`yarn remove ${packageName}`, { cwd });\n } catch (e) {\n throw new CliError({\n code: CliErrorCode.FailedToUninstallPackage({ packageName }),\n info: { packageManager: this.name },\n cause: e,\n });\n }\n }\n}\n\nasync function getPackagesRelativePaths(\n rootDir: string,\n yarnVersion: YarnVersion\n): Promise<string[]> {\n const workspacesSchema = z.array(\n z.object({\n location: z.string(),\n })\n );\n\n if (yarnVersion === 'yarn-berry') {\n const packages = await runCommand('yarn workspaces list --json', {\n cwd: rootDir,\n });\n\n const parsedPackages = workspacesSchema.parse(\n packages\n .split(EOL)\n .filter(Boolean)\n .map((pkg) => JSON.parse(pkg))\n );\n\n return parsedPackages.map((pkg) => pkg.location);\n }\n\n const packages = await runCommand('yarn --json workspaces info', {\n cwd: rootDir,\n });\n\n const parsedPackages = workspacesSchema.parse(\n Object.values(JSON.parse(JSON.parse(packages).data))\n );\n return parsedPackages.map((pkg) => pkg.location);\n}\n\nasync function addPackageToWorkspaces({\n rootDir,\n packageFolder,\n yarnVersion,\n}: {\n rootDir: string;\n packageFolder: string;\n yarnVersion: YarnVersion;\n}) {\n const relativePackagePath = relative(rootDir, packageFolder);\n const packages = await getPackagesRelativePaths(rootDir, yarnVersion);\n\n if (packages.includes(relativePackagePath)) {\n return;\n }\n\n const packageJson = (await readJson(\n join(rootDir, 'package.json')\n )) as PackageJson;\n\n if (Array.isArray(packageJson.workspaces)) {\n packageJson.workspaces.push(relativePackagePath);\n } else if (typeof packageJson.workspaces === 'object') {\n packageJson.workspaces = {\n ...packageJson.workspaces,\n packages: [\n ...(packageJson.workspaces.packages ?? []),\n relativePackagePath,\n ],\n };\n } else {\n throw new Error(\n `Failed to read workspaces structure. Expected an array or object but got ${JSON.stringify(\n packageJson.workspaces\n )}`\n );\n }\n\n await writeJson(join(rootDir, 'package.json'), packageJson, { spaces: 2 });\n}\n","import React, { useMemo, useState } from 'react';\nimport { match } from 'variant';\nimport { kebabCase } from 'lodash';\nimport {\n Text,\n TextInput,\n SelectInput,\n Box,\n Link,\n Spinner,\n Learn,\n} from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport {\n createEmbeddedScriptFolderValidation,\n useValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport type { ValidScriptPlacements, ValidScriptTypes } from './const.js';\nimport { SCRIPT_TYPES, SCRIPT_PLACEMENTS } from './const.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport { generateEmbeddedScript } from './generate.js';\nimport { useProjectModel } from '../../../model.js';\nimport { useExtensions } from '../../extensions/useExtensions.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\n\nexport const GenerateEmbeddedScript: React.FC = () => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const { getExtensions } = useExtensions();\n const extensionType = t(\n 'generate_command.flow.embedded_script'\n ).toLowerCase();\n\n const embeddedScripts = getExtensions('EmbeddedScript');\n\n const [scriptFolder, setScriptFolder] = useState<string>();\n const [scriptName, setScriptName] = useState<string>();\n const [scriptType, setScriptType] = useState<ValidScriptTypes>();\n const [scriptPlacement, setScriptPlacement] =\n useState<ValidScriptPlacements>();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const defaultScriptFolder = kebabCase(scriptName);\n\n const validateEmbeddedScriptFolder = useValidation(\n createEmbeddedScriptFolderValidation(embeddedScripts)\n );\n\n const generationTask = useGenerationTask(async () => {\n if (scriptFolder && scriptName && scriptType && scriptPlacement) {\n return generateEmbeddedScript(\n model.projectFolder,\n scriptFolder,\n scriptName,\n scriptType,\n scriptPlacement\n );\n }\n }, [scriptFolder, scriptName, scriptType, scriptPlacement]);\n\n return (\n <>\n <TextInput\n label={t('generate_command.embedded_script.choose_name')}\n placeholder={t('generate_command.embedded_script.name_placeholder')}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.embedded_script.choose_name'),\n questionKey: 'generate_command.embedded_script.choose_name',\n answer: value,\n additionalInfo: { extensionType },\n });\n setScriptName(value);\n }}\n />\n {scriptName && (\n <TextInput\n label={t('generate_command.embedded_script.choose_folder')}\n placeholder={defaultScriptFolder}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.embedded_script.choose_folder'),\n questionKey: 'generate_command.embedded_script.choose_folder',\n answer: value,\n additionalInfo: { extensionType },\n });\n setScriptFolder(value);\n }}\n validate={validateEmbeddedScriptFolder}\n />\n )}\n {scriptFolder && scriptName && (\n <SelectInput<ValidScriptTypes>\n label={t('generate_command.embedded_script.choose_type')}\n info={\n <Trans\n i18nKey=\"generate_command.embedded_script.type_info\"\n components={[\n <Link url=\"https://dev.wix.com/docs/build-apps/develop-your-app/frameworks/wix-cli/supported-extensions/site-extensions/embedded-scripts/embedded-script-extension-files-and-code\" />,\n ]}\n />\n }\n options={SCRIPT_TYPES}\n onSubmit={(option) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.embedded_script.choose_type'),\n questionKey: 'generate_command.embedded_script.choose_type',\n answer: option.title,\n additionalInfo: { extensionType },\n });\n setScriptType(option.value);\n }}\n />\n )}\n {scriptFolder && scriptName && scriptType && (\n <SelectInput<ValidScriptPlacements>\n label={t('generate_command.embedded_script.choose_placement')}\n info={t('generate_command.embedded_script.placement_info')}\n options={SCRIPT_PLACEMENTS}\n onSubmit={(option) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.embedded_script.choose_placement'),\n questionKey: 'generate_command.embedded_script.choose_placement',\n answer: option.title,\n additionalInfo: { extensionType },\n });\n setScriptPlacement(option.value);\n }}\n />\n )}\n\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: extensionType,\n })}\n />\n ),\n Error: () => null,\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, extensionType, t]\n )}\n\n {finishedInstallation && (\n <Box flexDirection=\"column\">\n <Text>\n {t('generate_command.generation.done', {\n extensionType,\n })}\n </Text>\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n // Original URL: https://dev.wix.com/docs/build-apps/develop-your-app/frameworks/wix-cli/supported-extensions/site-extensions/embedded-scripts/about-embedded-scripts-and-the-cli\n components={[<Learn />, <Link url=\"https://wix.to/CDGhNZG\" />]}\n />\n </Box>\n )}\n </>\n );\n};\n","import type { SelectOption } from '@wix/cli-ui-kit';\nimport {\n EmbedCategory,\n EmbeddedScriptPlacement,\n} from '@wix/ambassador-devcenter-components-v1-component/types';\nimport { createI18nT } from '../../../i18n.js';\n\nconst t = createI18nT();\n\nexport type ValidScriptTypes =\n | EmbedCategory.ESSENTIAL\n | EmbedCategory.FUNCTIONAL\n | EmbedCategory.ANALYTICS\n | EmbedCategory.ADVERTISING;\n\nexport type ValidScriptPlacements =\n | EmbeddedScriptPlacement.HEAD\n | EmbeddedScriptPlacement.BODY_START\n | EmbeddedScriptPlacement.BODY_END;\n\nexport const SCRIPT_TYPES: Array<SelectOption<ValidScriptTypes>> = [\n {\n title: t('embedded_script.type.essential'),\n description: t('embedded_script.type.essential.description'),\n value: EmbedCategory.ESSENTIAL,\n },\n {\n title: t('embedded_script.type.functional'),\n description: t('embedded_script.type.functional.description'),\n value: EmbedCategory.FUNCTIONAL,\n },\n {\n title: t('embedded_script.type.analytics'),\n description: t('embedded_script.type.analytics.description'),\n value: EmbedCategory.ANALYTICS,\n },\n {\n title: t('embedded_script.type.advertising'),\n description: t('embedded_script.type.advertising.description'),\n value: EmbedCategory.ADVERTISING,\n },\n];\n\nexport const SCRIPT_PLACEMENTS: Array<SelectOption<ValidScriptPlacements>> = [\n {\n title: t('embedded_script.placement.head'),\n description: t('embedded_script.placement.head.description'),\n value: EmbeddedScriptPlacement.HEAD,\n },\n {\n title: t('embedded_script.placement.body_start'),\n description: t('embedded_script.placement.body_start.description'),\n value: EmbeddedScriptPlacement.BODY_START,\n },\n {\n title: t('embedded_script.placement.body_end'),\n description: t('embedded_script.placement.body_end.description'),\n value: EmbeddedScriptPlacement.BODY_END,\n },\n];\n","import path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport type {\n EmbedCategory,\n EmbeddedScriptPlacement,\n} from '@wix/ambassador-devcenter-components-v1-component/types';\nimport { componentGenerator } from '@wix/gena';\nimport { toJsonString } from '@wix/cli-fs';\nimport { getEmbeddedScriptsDir } from '@wix/cli-app-definitions';\nimport type { EmbeddedScriptConfig } from '@wix/cli-app-definitions';\n\nconst EMBEDDED_SCRIPT_TEMPLATE = path.resolve(\n __dirname,\n '../templates/embedded-script'\n);\n\nexport async function generateEmbeddedScript(\n projectFolder: string,\n folder: string,\n name: string,\n scriptType:\n | EmbedCategory.ESSENTIAL\n | EmbedCategory.FUNCTIONAL\n | EmbedCategory.ANALYTICS\n | EmbedCategory.ADVERTISING,\n placement:\n | EmbeddedScriptPlacement.HEAD\n | EmbeddedScriptPlacement.BODY_START\n | EmbeddedScriptPlacement.BODY_END\n) {\n const cwd = path.join(getEmbeddedScriptsDir(projectFolder), folder);\n\n const embeddedScriptConfig: EmbeddedScriptConfig = {\n $schema: 'https://dev.wix.com/wix-cli/schemas/embedded-script.json',\n id: randomUUID(),\n name,\n scriptType,\n placement,\n };\n const embeddedScriptConfigJSON = toJsonString(embeddedScriptConfig, {\n spaces: 2,\n });\n\n await componentGenerator({\n template: EMBEDDED_SCRIPT_TEMPLATE,\n projectFolder,\n cwd,\n data: {\n embeddedScriptConfigJSON,\n name,\n scriptType,\n placement,\n },\n });\n}\n","import React, { useMemo, useState } from 'react';\nimport type { FC } from 'react';\nimport { match } from 'variant';\nimport { Box, Learn, Link, Spinner, Text, TextInput } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport { useProjectModel } from '../../../model.js';\nimport { generateSidebarCategory } from './generate.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\n\nexport const GenerateSidebarCategory: FC = () => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const {\n model: { projectFolder, config },\n } = useProjectModel();\n const extensionType = t(\n 'generate_command.flow.sidebar_category'\n ).toLowerCase();\n\n const [categoryLabel, setCategoryLabel] = useState<string>();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const generationTask = useGenerationTask(async () => {\n if (categoryLabel) {\n return generateSidebarCategory(projectFolder, config, categoryLabel);\n }\n }, [categoryLabel]);\n\n return (\n <>\n <TextInput\n label={t('generate_command.sidebar_category.choose_label')}\n placeholder={t('generate_command.sidebar_category.label_placeholder')}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.sidebar_category.choose_label'),\n questionKey: 'generate_command.sidebar_category.choose_label',\n answer: value,\n additionalInfo: { extensionType },\n });\n setCategoryLabel(value);\n }}\n />\n\n {useMemo(\n () =>\n match(generationTask, {\n Error: () => null,\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: extensionType,\n })}\n />\n ),\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, t, extensionType]\n )}\n\n {finishedInstallation && (\n <Box flexDirection=\"column\">\n <Text>\n {t('generate_command.generation.done', {\n extensionType,\n })}\n </Text>\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n components={[<Learn />, <Link url=\"https://wix.to/7W3nYUg\" />]}\n />\n </Box>\n )}\n </>\n );\n};\n","import { randomUUID } from 'node:crypto';\nimport type { WixConfig } from '@wix/cli-app-definitions';\nimport { saveWixConfig } from '../../../files/wix.config.js';\n\nexport async function generateSidebarCategory(\n projectFolder: string,\n config: WixConfig,\n categoryLabel: string\n) {\n const initialCategories = config.dashboard?.sidebar?.categories ?? [];\n\n return saveWixConfig(projectFolder, {\n ...config,\n dashboard: {\n ...config.dashboard,\n sidebar: {\n ...config.dashboard?.sidebar,\n categories: initialCategories.concat({\n id: randomUUID(),\n label: categoryLabel,\n }),\n },\n },\n });\n}\n","import React, { useMemo, useState } from 'react';\nimport { match } from 'variant';\nimport { kebabCase } from 'lodash';\nimport type { SelectOption } from '@wix/cli-ui-kit';\nimport {\n Text,\n TextInput,\n Link,\n Spinner,\n ConfirmInput,\n SelectInput,\n Learn,\n} from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport {\n useCustomElementDirectoryValidation,\n useCustomElementNameValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport { generateCustomElement } from './generate.js';\nimport { useProjectModel } from '../../../model.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\nimport { useExtensions } from '../../extensions/useExtensions.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\n\nexport const GenerateCustomElement: React.FC = () => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const [elementName, setElementName] = useState<string>();\n const [elementFolder, setElementFolder] = useState<string>();\n const [linkDashboardPage, setLinkDashboardPage] = useState<boolean>();\n const [generationData, setGenerationData] = useState<{\n name: string;\n folder: string;\n dashboardPageId?: string;\n }>();\n const validateFolderName = useCustomElementDirectoryValidation('Site widget');\n const validateName = useCustomElementNameValidation();\n const { getExtensions } = useExtensions();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const defaultElementFolder = kebabCase(elementName);\n\n const dashboardPages = getExtensions('DashboardPage');\n const dashboardPagesOptions: Array<SelectOption<string>> = dashboardPages.map(\n ({ id, title }) => ({\n value: id,\n title,\n })\n );\n const dashboardPagesExist = Boolean(dashboardPages.length);\n\n const extensionType = t('generate_command.flow.custom_element').toLowerCase();\n\n const generationTask = useGenerationTask(async () => {\n if (generationData) {\n return generateCustomElement(\n model.projectFolder,\n generationData.folder,\n generationData.name,\n generationData.dashboardPageId\n );\n }\n }, [generationData]);\n\n return (\n <>\n <TextInput\n label={t('generate_command.custom_element.choose_name')}\n placeholder={t('generate_command.custom_element.name_placeholder')}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.custom_element.choose_name'),\n questionKey: 'generate_command.custom_element.choose_name',\n answer: value,\n additionalInfo: {\n extensionType,\n },\n });\n setElementName(value);\n }}\n validate={validateName}\n />\n {elementName && (\n <TextInput\n label={t('generate_command.custom_element.choose_folder')}\n placeholder={defaultElementFolder}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.custom_element.choose_folder'),\n questionKey: 'generate_command.custom_element.choose_folder',\n answer: value,\n additionalInfo: {\n extensionType,\n },\n });\n setElementFolder(value);\n\n if (!dashboardPagesExist) {\n setGenerationData({\n name: elementName,\n folder: value,\n });\n }\n }}\n validate={validateFolderName}\n />\n )}\n {elementName && elementFolder && dashboardPagesExist && (\n <ConfirmInput\n label={t('generate_command.custom_element.link_dashboard_page')}\n onSubmit={(shouldLinkDashboardPage) => {\n bi.cliFlowStepAnswered({\n question: t(\n 'generate_command.custom_element.link_dashboard_page'\n ),\n questionKey:\n 'generate_command.custom_element.link_dashboard_page',\n answer: String(shouldLinkDashboardPage),\n additionalInfo: { extensionType },\n });\n setLinkDashboardPage(shouldLinkDashboardPage);\n\n if (!shouldLinkDashboardPage) {\n setGenerationData({\n name: elementName,\n folder: elementFolder,\n });\n }\n }}\n />\n )}\n {elementName &&\n elementFolder &&\n dashboardPagesExist &&\n linkDashboardPage && (\n <SelectInput<string>\n label={t('generate_command.custom_element.choose_dashboard_page')}\n options={dashboardPagesOptions}\n onSubmit={(option) => {\n bi.cliFlowStepAnswered({\n question: t(\n 'generate_command.custom_element.choose_dashboard_page'\n ),\n questionKey:\n 'generate_command.custom_element.choose_dashboard_page',\n answer: option.title,\n additionalInfo: { extensionType },\n });\n setGenerationData({\n name: elementName,\n folder: elementFolder,\n dashboardPageId: option.value,\n });\n }}\n />\n )}\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: extensionType,\n })}\n />\n ),\n NotRequested: () => null,\n Error: () => null,\n }),\n [generationTask, setFinishedInstallation, t, extensionType]\n )}\n\n {finishedInstallation && (\n <>\n <Text>\n {t('generate_command.generation.done', {\n extensionType,\n })}\n </Text>\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n // https://dev.wix.com/docs/build-apps/develop-your-app/frameworks/wix-cli/supported-extensions/site-extensions/site-widgets/site-widget-extension-files-and-code\n components={[<Learn />, <Link url=\"https://wix.to/rEfCfbY\" />]}\n />\n </>\n )}\n </>\n );\n};\n","import path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { componentGenerator } from '@wix/gena';\nimport { toJsonString } from '@wix/cli-fs';\nimport { getSiteWidgetsDir, SITE_WIDGETS_DIR } from '@wix/cli-app-definitions';\nimport type { CustomElementConfig } from '@wix/cli-app-definitions';\n\nconst CUSTOM_ELEMENT_TEMPLATE = path.resolve(\n __dirname,\n '../templates/custom-element'\n);\n\nexport async function generateCustomElement(\n projectFolder: string,\n folder: string,\n name: string,\n dashboardPageId?: string\n) {\n const readablePath = path.join(SITE_WIDGETS_DIR, folder);\n const cwd = path.join(getSiteWidgetsDir(projectFolder), folder);\n\n const behaviorsConfig: CustomElementConfig['behaviors'] = dashboardPageId\n ? {\n dashboard: {\n dashboardPageComponentId: dashboardPageId,\n },\n }\n : undefined;\n const defaultThumbnailPath = path.join(\n projectFolder,\n 'src/assets',\n folder,\n 'thumbnail.png'\n );\n\n const customElementConfig: CustomElementConfig = {\n $schema: 'https://dev.wix.com/wix-cli/schemas/custom-element.json',\n id: randomUUID(),\n name,\n width: {\n defaultWidth: 450,\n allowStretch: true,\n },\n height: {\n defaultHeight: 250,\n },\n installation: {\n autoAddToSite: true,\n },\n behaviors: behaviorsConfig,\n presets: [\n {\n id: randomUUID(),\n thumbnailUrl: path.relative(cwd, defaultThumbnailPath),\n },\n ],\n };\n const customElementConfigJSON = toJsonString(customElementConfig, {\n spaces: 2,\n });\n\n return await componentGenerator({\n template: CUSTOM_ELEMENT_TEMPLATE,\n projectFolder,\n cwd,\n assetsOutputPath: folder,\n data: {\n customElementConfigJSON,\n readablePath,\n name,\n },\n });\n}\n","import React, { useMemo, useState } from 'react';\nimport type { FC } from 'react';\nimport { match } from 'variant';\nimport { kebabCase } from 'lodash';\nimport { Learn, Link, Spinner, Text, TextInput } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport { relativeFolderName } from '@wix/cli-fs';\nimport { getDashboardModalsDir } from '@wix/cli-app-definitions';\nimport { useProjectModel } from '../../../model.js';\nimport { generateDashboardModal } from './generate.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport {\n composeValidations,\n pathValidation,\n useValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { useExtensions } from '../../extensions/useExtensions.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\n\nexport const GenerateDashboardModal: FC = () => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const { getExtensions } = useExtensions();\n const extensionType = t(\n 'generate_command.flow.dashboard_modal'\n ).toLowerCase();\n\n const dashboardModals = getExtensions('DashboardModal');\n\n const [modalFolder, setModalFolder] = useState<string>();\n const [modalTitle, setModalTitle] = useState<string>();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const defaultModalFolder = kebabCase(modalTitle);\n\n const modalQuestionsAnswered = modalFolder && modalTitle;\n\n const validateDashboardFolder = useValidation(\n composeValidations([\n [\n (folder: string) => {\n return dashboardModals.every(\n (modal) =>\n relativeFolderName(\n getDashboardModalsDir(model.projectFolder),\n modal.relativePath\n ) !== folder\n );\n },\n t('generate_command.dashboard_modal.validation.folder_exists'),\n ],\n [\n pathValidation,\n t('generate_command.dashboard_modal.validation.folder_invalid'),\n ],\n ])\n );\n\n const generationTask = useGenerationTask(async () => {\n if (!modalQuestionsAnswered) {\n return;\n }\n\n return generateDashboardModal(model.projectFolder, modalFolder, modalTitle);\n }, [modalQuestionsAnswered]);\n\n return (\n <>\n <TextInput\n label={t('generate_command.dashboard_modal.choose_title')}\n placeholder={t('generate_command.dashboard_modal.title_placeholder')}\n onSubmit={(modalTitle) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.dashboard_modal.choose_title'),\n questionKey: 'generate_command.dashboard_modal.choose_title',\n answer: modalTitle,\n additionalInfo: { extensionType },\n });\n setModalTitle(modalTitle);\n }}\n />\n {modalTitle && (\n <TextInput\n label={t('generate_command.dashboard_modal.choose_folder')}\n placeholder={defaultModalFolder}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.dashboard_modal.choose_folder'),\n questionKey: 'generate_command.dashboard_modal.choose_folder',\n answer: value,\n additionalInfo: { extensionType },\n });\n setModalFolder(value);\n }}\n validate={validateDashboardFolder}\n />\n )}\n\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: `${extensionType} ${modalFolder}`,\n })}\n />\n ),\n Error: () => null,\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, t, extensionType, modalFolder]\n )}\n\n {finishedInstallation && (\n <>\n <Text>\n {t('generate_command.generation.done', {\n extensionType,\n })}\n </Text>\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n // https://dev.wix.com/docs/build-apps/developer-tools/cli/wix-cli-for-apps/extensions/dashboard-modal-extensions-files-and-code\n components={[<Learn />, <Link url=\"https://wix.to/zh5ZfMK\" />]}\n />\n </>\n )}\n </>\n );\n};\n","import path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { toJsonString } from '@wix/cli-fs';\nimport { componentGenerator } from '@wix/gena';\nimport { getDashboardModalsDir } from '@wix/cli-app-definitions';\nimport type { DashboardModalConfig } from '@wix/cli-app-definitions';\n\n// NOTE: path is relative to the build folder\nconst DASHBOARD_MODAL_TEMPLATE = path.resolve(\n __dirname,\n '../templates/dashboard-modal'\n);\n\nexport async function generateDashboardModal(\n projectFolder: string,\n route: string,\n title: string\n) {\n const cwd = path.join(getDashboardModalsDir(projectFolder), route);\n const modalConfig: DashboardModalConfig = {\n $schema: 'https://dev.wix.com/wix-cli/schemas/dashboard-modal.json',\n id: randomUUID(),\n title,\n width: 550,\n height: 600,\n };\n\n const modalConfigJSON = toJsonString(modalConfig, { spaces: 2 });\n\n return await componentGenerator({\n template: DASHBOARD_MODAL_TEMPLATE,\n projectFolder,\n cwd,\n data: {\n modalId: modalConfig.id,\n route,\n title,\n modalConfigJSON,\n },\n });\n}\n","export { GenerateServicePlugin } from './ServicePlugin.js';\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { match } from 'variant';\nimport type { SelectGroup, SelectOption } from '@wix/cli-ui-kit';\nimport { ComponentType } from '@wix/ambassador-devcenter-components-v1-component/types';\nimport {\n TextInput,\n Link,\n Spinner,\n SelectGroupsInput,\n Text,\n Learn,\n} from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport type { SupportedServicePlugin } from '@wix/cli-app-definitions';\nimport {\n createServicePluginValidation,\n useValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport { useProjectModel } from '../../../model.js';\nimport { useExtensions } from '../../extensions/useExtensions.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\nimport { generateServicePlugin } from './generate.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\n\nexport const GenerateServicePlugin: React.FC = () => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const { getExtensions } = useExtensions();\n const [type, setType] = useState<SupportedServicePlugin>();\n const [name, setName] = useState<string>();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const generateServicePluginOptions: Array<\n SelectGroup<SupportedServicePlugin>\n > = useMemo(\n () => [\n {\n title: t('generate_command.service_plugin.groups.stores'),\n items: [\n {\n title: t('generate_command.service_plugin.ecom_additional_fees'),\n value: ComponentType.ECOM_ADDITIONAL_FEES,\n },\n {\n title: t('generate_command.service_plugin.ecom_shipping_rates'),\n value: ComponentType.ECOM_SHIPPING_RATES,\n },\n {\n title: t('generate_command.service_plugin.ecom_discount_triggers'),\n value: ComponentType.ECOM_DISCOUNTS_TRIGGER,\n },\n {\n title: t('generate_command.service_plugin.ecom_validations'),\n value: ComponentType.ECOM_VALIDATIONS,\n },\n {\n title: t('generate_command.service_plugin.ecom_payment_settings'),\n value: ComponentType.ECOM_PAYMENT_SETTINGS,\n },\n {\n title: t(\n 'generate_command.service_plugin.ecom_gift_cards_provider'\n ),\n value: ComponentType.GIFT_CARDS_PROVIDER,\n },\n ],\n },\n ],\n [t]\n );\n\n const extensionType = t('generate_command.flow.service_plugin').toLowerCase();\n\n const selectSupportedServicePlugin = useCallback(\n (supportedServicePlugin: SelectOption<SupportedServicePlugin>) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.service_plugin.choose_type'),\n questionKey: 'generate_command.service_plugin.choose_type',\n answer: supportedServicePlugin.title,\n });\n setType(supportedServicePlugin.value);\n },\n [bi, t]\n );\n\n const validateServicePluginFolder = useValidation(\n createServicePluginValidation(getExtensions('ServicePlugin'), type)\n );\n\n const generationTask = useGenerationTask(async () => {\n if (name && type) {\n const result = await generateServicePlugin(\n model.projectFolder,\n type,\n name\n );\n\n return result;\n }\n }, [name, type]);\n\n return (\n <>\n <SelectGroupsInput<SupportedServicePlugin>\n label={t('generate_command.service_plugin.choose_type')}\n groups={generateServicePluginOptions}\n onSubmit={selectSupportedServicePlugin}\n maxHeight={14}\n />\n {type && (\n <TextInput\n label={t('generate_command.service_plugin.choose_name')}\n placeholder={t('generate_command.service_plugin.name_placeholder')}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.service_plugin.choose_name'),\n questionKey: 'generate_command.service_plugin.choose_name',\n answer: value,\n additionalInfo: { servicePluginType: type },\n });\n setName(value);\n }}\n validate={validateServicePluginFolder}\n />\n )}\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: extensionType,\n })}\n />\n ),\n Error: () => null,\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, extensionType, t]\n )}\n\n {finishedInstallation && (\n <>\n <Text>\n {t('generate_command.generation.done', {\n extensionType,\n })}\n </Text>\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n // Original URL: https://dev.wix.com/docs/build-apps/develop-your-app/frameworks/wix-cli/supported-extensions/backend-extensions/service-plugins/add-service-plugin-extensions-with-the-cli\n components={[<Learn />, <Link url=\"https://wix.to/YWyluDf\" />]}\n />\n </>\n )}\n </>\n );\n};\n","import path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { toJsonString } from '@wix/cli-fs';\nimport { componentGenerator } from '@wix/gena';\nimport type { SupportedServicePlugin } from '@wix/cli-app-definitions';\nimport { getServicePluginsFolder } from '@wix/cli-app-definitions';\nimport { match } from 'variant';\nimport { ServicePluginTypeToFolderName } from '../../../dev-center/components/backend/config.js';\n\n// NOTE: path is relative to the build folder\nconst SERVICE_PLUGIN_TEMPLATE = path.resolve(\n __dirname,\n '../templates/service-plugin'\n);\n\nexport async function generateServicePlugin(\n projectFolder: string,\n servicePluginType: SupportedServicePlugin,\n name: string\n) {\n const servicePluginTypeLower =\n ServicePluginTypeToFolderName(servicePluginType);\n\n const cwd = path.join(\n getServicePluginsFolder(projectFolder),\n servicePluginTypeLower,\n name\n );\n\n const servicePluginConfigBase = {\n $schema: `https://dev.wix.com/wix-cli/schemas/${servicePluginTypeLower}.json`,\n id: randomUUID(),\n name,\n };\n\n const servicePluginConfig = match(servicePluginType, {\n ECOM_ADDITIONAL_FEES: () => ({}),\n ECOM_SHIPPING_RATES: () => ({\n name: 'Shipping Rates Provider',\n description: 'Short description about this shipping provider',\n fallbackDefinitionMandatory: false,\n }),\n ECOM_DISCOUNTS_TRIGGER: () => ({}),\n ECOM_VALIDATIONS: () => ({\n validateInCart: false,\n }),\n ECOM_PAYMENT_SETTINGS: () => ({\n fallbackValueForRequires3dSecure: false,\n }),\n GIFT_CARDS_PROVIDER: () => ({}),\n });\n\n const servicePluginConfigJSON = toJsonString(\n { ...servicePluginConfigBase, ...servicePluginConfig },\n {\n spaces: 2,\n }\n );\n\n return await componentGenerator({\n template: path.join(SERVICE_PLUGIN_TEMPLATE, servicePluginTypeLower),\n projectFolder,\n cwd,\n data: {\n servicePluginConfigJSON,\n },\n });\n}\n","import React from 'react';\nimport type { FC } from 'react';\nimport { match } from 'variant';\nimport { Spinner, useAsync } from '@wix/cli-ui-kit';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { getBackofficeExtensionWidgets } from '@wix/extensions-data-client';\nimport { DashboardPluginWizard } from './DashboardPluginWizard.js';\n\nexport const DashboardPlugin: FC = () => {\n const { t } = useTranslation();\n const { status } = useAsync(getBackofficeExtensionWidgets, []);\n\n return match(status, {\n Error: () => null,\n Loading: () => <Spinner text={t('general.loading')} />,\n Success: ({ result: backofficeExtensionWidgets }) => (\n <DashboardPluginWizard\n backofficeExtensionWidgets={backofficeExtensionWidgets}\n />\n ),\n });\n};\n","import React, { useState, useMemo } from 'react';\nimport type { FC } from 'react';\nimport { match } from 'variant';\nimport { kebabCase } from 'lodash';\nimport { Link, SelectGroupsInput, Spinner, TextInput } from '@wix/cli-ui-kit';\nimport type { SelectGroup } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport type { BackofficeExtensionWidget } from '@wix/extensions-data-client';\nimport { useDevCenterClient } from '@wix/dev-center-client';\nimport {\n useValidation,\n createDashboardPluginValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { generateDashboardPlugin } from './generate.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport { useProjectModel } from '../../../model.js';\nimport { AppRequirement } from '../AppRequirement.js';\nimport { useExtensions } from '../../extensions/useExtensions.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\nimport { MultipleAppRequirement } from '../MultipleAppRequirement.js';\nimport { DashboardPluginGeneratedNote } from './DashboardPluginGeneratedNote.js';\n\nexport const DashboardPluginWizard: FC<{\n backofficeExtensionWidgets: BackofficeExtensionWidget[];\n}> = ({ backofficeExtensionWidgets }) => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const [backofficeExtensionWidget, setBackofficeExtensionWidget] =\n useState<BackofficeExtensionWidget>();\n\n const { addRequiredApp } = useDevCenterClient();\n\n const { model } = useProjectModel();\n\n const { getExtensions } = useExtensions();\n\n const extensionType = t(\n 'generate_command.flow.dashboard_plugin'\n ).toLowerCase();\n\n const dashboardPlugins = getExtensions('DashboardPlugin');\n\n const [folder, setFolder] = useState<string>();\n const [title, setTitle] = useState<string>();\n const [requireAppsIds, setRequireAppsIds] = useState<string[]>();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const defaultFolderName = kebabCase(title);\n\n const validatePluginFolder = useValidation(\n createDashboardPluginValidation(dashboardPlugins)\n );\n\n const generationTask = useGenerationTask(async () => {\n if (backofficeExtensionWidget && folder && title && requireAppsIds) {\n const requireAppId = requireAppsIds.at(0);\n if (requireAppId) {\n await addRequiredApp({\n appId: model.config.appId,\n appIdToRequire: requireAppId,\n });\n }\n return generateDashboardPlugin(\n model.projectFolder,\n backofficeExtensionWidget.id,\n folder,\n title,\n backofficeExtensionWidget.params\n );\n }\n }, [backofficeExtensionWidget?.id, folder, title, requireAppsIds]);\n\n const extensionGroups = useMemo(\n () =>\n Object.values(\n backofficeExtensionWidgets.reduce<\n Record<string, SelectGroup<BackofficeExtensionWidget>>\n >((extensionsByApps, extension) => {\n const [requiredApp] = extension.requiredApps;\n const groupBy = extension.category;\n\n extensionsByApps[groupBy] ??= { title: groupBy, items: [] };\n\n extensionsByApps[groupBy].items.push({\n title: extension.name,\n key: extension.id,\n description: (\n <Trans\n i18nKey=\"generate_command.dashboard_plugin.what_to_extend.item_description\"\n components={[<Link url={requiredApp.docsUrl} />]}\n />\n ),\n value: extension,\n });\n\n return extensionsByApps;\n }, {})\n ),\n\n [backofficeExtensionWidgets]\n );\n\n return (\n <>\n <SelectGroupsInput<BackofficeExtensionWidget>\n label={t('generate_command.dashboard_plugin.what_to_extend')}\n info={\n <Trans\n i18nKey=\"generate_command.dashboard_plugin.what_to_extend.description\"\n // https://dev.wix.com/docs/build-apps/developer-tools/extensions/dashboard-extensions/dashboard-plugins/about-dashboard-plugin-extensions\n components={[<Link url=\"https://wix.to/ZeCt07g\" />]}\n />\n }\n hideScroll\n groups={extensionGroups}\n onSubmit={(option) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.dashboard_plugin.what_to_extend'),\n questionKey: 'generate_command.dashboard_plugin.what_to_extend',\n answer: option.title,\n additionalInfo: { extensionType },\n });\n setBackofficeExtensionWidget(option.value);\n }}\n />\n {backofficeExtensionWidget &&\n (backofficeExtensionWidget.requiredApps.length === 1 ? (\n <AppRequirement\n appId={model.config.appId}\n requiredApps={[\n {\n id: backofficeExtensionWidget.requiredApps[0].appId,\n name: backofficeExtensionWidget.requiredApps[0].appName,\n },\n ]}\n onSubmit={setRequireAppsIds}\n />\n ) : (\n <MultipleAppRequirement\n appId={model.config.appId}\n requiredApps={backofficeExtensionWidget.requiredApps.map(\n (requiredApp) => ({\n id: requiredApp.appId,\n name: requiredApp.appName,\n })\n )}\n onSubmit={setRequireAppsIds}\n />\n ))}\n {requireAppsIds && (\n <TextInput\n label={t('generate_command.dashboard_plugin.choose_title')}\n placeholder={t('generate_command.dashboard_plugin.title_placeholder')}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.dashboard_plugin.choose_title'),\n questionKey: 'generate_command.dashboard_plugin.choose_title',\n answer: value,\n additionalInfo: { extensionType },\n });\n setTitle(value);\n }}\n />\n )}\n\n {title && (\n <TextInput\n label={t('generate_command.dashboard_plugin.choose_folder')}\n placeholder={defaultFolderName}\n onSubmit={(folder) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.dashboard_plugin.choose_folder'),\n questionKey: 'generate_command.dashboard_plugin.choose_folder',\n answer: folder,\n additionalInfo: { extensionType },\n });\n setFolder(folder);\n }}\n validate={validatePluginFolder}\n />\n )}\n\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: extensionType,\n })}\n />\n ),\n Error: () => null,\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, t, extensionType]\n )}\n\n {finishedInstallation && backofficeExtensionWidget ? (\n <DashboardPluginGeneratedNote\n backofficeExtensionWidget={backofficeExtensionWidget}\n />\n ) : null}\n </>\n );\n};\n","import path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { toJsonString } from '@wix/cli-fs';\nimport { componentGenerator } from '@wix/gena';\nimport type { DashboardPluginConfig } from '@wix/cli-app-definitions';\nimport { getDashboardPluginsDir } from '@wix/cli-app-definitions';\n\n// NOTE: path is relative to the build folder\nconst DASHBOARD_PLUGIN_TEMPLATE = path.resolve(\n __dirname,\n '../templates/dashboard-plugin'\n);\n\nexport async function generateDashboardPlugin(\n projectFolder: string,\n extended: string,\n folder: string,\n title: string,\n params: Record<string, string>\n) {\n const cwd = path.join(getDashboardPluginsDir(projectFolder), folder);\n const pluginConfig: DashboardPluginConfig = {\n $schema: 'https://dev.wix.com/wix-cli/schemas/dashboard-plugin.json',\n id: randomUUID(),\n title,\n extends: extended,\n };\n const pluginConfigJSON = toJsonString(pluginConfig, { spaces: 2 });\n\n return await componentGenerator({\n template: DASHBOARD_PLUGIN_TEMPLATE,\n projectFolder,\n cwd,\n data: {\n pluginConfigJSON,\n params,\n },\n });\n}\n","import React, { useCallback } from 'react';\nimport type { FC } from 'react';\nimport { isType, match } from 'variant';\nimport { ConfirmInput, Link, Spinner, useAsync, Box } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport { useDevCenterClient } from '@wix/dev-center-client';\nimport { useErrorReporter } from '@wix/cli-error-reporting';\nimport { useWixCliAppBi } from '../../bi/index.js';\n\ninterface RequiredApp {\n id: string;\n name: string;\n}\n\ninterface AppRequirementProps {\n appId: string;\n requiredApps: RequiredApp[];\n onSubmit: (requiredApps: string[]) => void;\n}\n\nexport const AppRequirement: FC<AppRequirementProps> = ({\n appId,\n requiredApps,\n onSubmit,\n}) => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const { getRequiredApps } = useDevCenterClient();\n const { reportError } = useErrorReporter();\n\n const { status } = useAsync(async () => {\n const existingRequiredApps = await getRequiredApps(appId).catch(\n (err: unknown) => {\n reportError(err);\n return requiredApps;\n }\n );\n\n const appsToRequire = requiredApps.filter((requiredApp) =>\n existingRequiredApps.every(\n (existingRequiredApp) => existingRequiredApp.id !== requiredApp.id\n )\n );\n\n if (appsToRequire.length === 0) {\n onSubmit([]);\n }\n\n return appsToRequire;\n }, []);\n\n const handleSubmit: (res: boolean) => void = useCallback(\n (shouldRequire) => {\n if (isType(status, 'Success')) {\n bi.cliFlowStepAnswered({\n question: t('generate_command.required_app', {\n appsNames: status.result\n .map((requiredApp) => requiredApp.name)\n .join(', '),\n }),\n questionKey: 'generate_command.required_app',\n answer: String(shouldRequire),\n additionalInfo: {\n requiredAppsIds: status.result.map((app) => app.id),\n },\n });\n\n if (!shouldRequire) {\n onSubmit([]);\n } else {\n onSubmit(status.result.map((app) => app.id));\n }\n }\n },\n [bi, onSubmit, t, status]\n );\n\n return (\n <>\n {match(status, {\n Success: ({ result: appsToRequire }) =>\n appsToRequire.length > 0 && (\n <Box marginBottom={1}>\n <ConfirmInput\n label={t('generate_command.required_app', {\n appsNames: appsToRequire\n .map((requiredApp) => requiredApp.name)\n .join(', '),\n })}\n info={\n <Trans\n i18nKey=\"generate_command.required_app.description\"\n values={{\n appsNames: appsToRequire\n .map((requiredApp) => requiredApp.name)\n .join(', '),\n }}\n // https://dev.wix.com/docs/build-apps/launch-your-app/market-listing/add-your-app-audience-info\n components={[<Link url=\"https://wix.to/YAydHiJ\" />]}\n />\n }\n onSubmit={handleSubmit}\n />\n </Box>\n ),\n Loading: () => <Spinner />,\n Error: () => null,\n })}\n </>\n );\n};\n","import React, { useCallback } from 'react';\nimport type { FC } from 'react';\nimport { fields, isType, match, variant } from 'variant';\nimport type { SelectOption } from '@wix/cli-ui-kit';\nimport {\n Spinner,\n useAsync,\n SelectOptionAvailability,\n SelectInput,\n Box,\n Link,\n InputLabel,\n ErrorDetails,\n} from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport { useDevCenterClient } from '@wix/dev-center-client';\nimport { useErrorReporter } from '@wix/cli-error-reporting';\nimport { useWixCliAppBi } from '../../bi/index.js';\n\nconst RequiredAppOptions = variant({\n Available: fields<{\n options: Array<SelectOption<string>>;\n initialIndex: number;\n }>(),\n FailedToGetRequiredApps: {},\n});\n\ninterface RequiredApp {\n id: string;\n name: string;\n}\n\ninterface MultipleAppRequirementProps {\n appId: string;\n requiredApps: RequiredApp[];\n onSubmit: (requiredApps: string[]) => void;\n}\n\nexport const MultipleAppRequirement: FC<MultipleAppRequirementProps> = ({\n appId,\n requiredApps,\n onSubmit,\n}) => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const { getRequiredApps } = useDevCenterClient();\n const { reportError } = useErrorReporter();\n\n const handleSubmit = useCallback(\n (option?: SelectOption<string>) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.required_business_solution'),\n questionKey: 'generate_command.required_business_solution',\n answer: option?.value ?? '',\n });\n\n onSubmit(option?.value ? [option.value] : []);\n },\n [bi, t, onSubmit]\n );\n\n const { status } = useAsync(async () => {\n let existingRequiredApps: RequiredApp[];\n\n try {\n existingRequiredApps = await getRequiredApps(appId);\n } catch (error: unknown) {\n reportError(error);\n handleSubmit();\n\n return RequiredAppOptions.FailedToGetRequiredApps();\n }\n\n const options: Array<SelectOption<string>> = requiredApps.map((app) => ({\n title: app.name,\n value: app.id,\n availability: existingRequiredApps.some(({ id }) => id === app.id)\n ? SelectOptionAvailability.Disabled({\n reason: t(\n 'generate_command.required_business_solution.already_required'\n ),\n })\n : SelectOptionAvailability.Enabled(),\n }));\n\n options.push({\n title: t('generate_command.required_business_solution.none'),\n value: '',\n });\n\n const initialIndex = options.findIndex(\n (_) => !isType(_.availability, SelectOptionAvailability.Disabled)\n );\n\n return RequiredAppOptions.Available({ options, initialIndex });\n }, [getRequiredApps, appId]);\n\n return (\n <>\n {match(status, {\n Loading: () => (\n <Spinner\n text={t('generate_command.required_business_solution.loading')}\n />\n ),\n Error: () => null,\n Success: ({ result }) => {\n return match(result, {\n Available: ({ options, initialIndex }) => (\n <SelectInput<string>\n label={t('generate_command.required_business_solution')}\n info={t(\n 'generate_command.required_business_solution.description'\n )}\n options={options}\n initialIndex={initialIndex}\n onSubmit={handleSubmit}\n />\n ),\n FailedToGetRequiredApps: () => (\n <Box marginBottom={1} gap={1} flexDirection=\"column\">\n <InputLabel>\n {t('generate_command.required_business_solution')}\n </InputLabel>\n <ErrorDetails\n message={t(\n 'generate_command.required_business_solution.error'\n )}\n hint={\n <Trans\n i18nKey=\"generate_command.required_business_solution.error.hint\"\n components={[\n <Link\n url={`https://manage.wix.com/apps/${appId}/dev-center-giza-market-listing/app-audience?referralInfo=wix-cli`}\n />,\n ]}\n />\n }\n />\n </Box>\n ),\n });\n },\n })}\n </>\n );\n};\n","import React from 'react';\nimport type { FC } from 'react';\nimport { Learn, Link, Text } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport type { BackofficeExtensionWidget } from '@wix/extensions-data-client';\n\nconst customGroupMessages = new Map([\n ['Wix eCommerce', 'generate_command.generation.ecommerce_notification'],\n]);\n\nexport const DashboardPluginGeneratedNote: FC<{\n backofficeExtensionWidget: BackofficeExtensionWidget;\n}> = ({ backofficeExtensionWidget }) => {\n const { t } = useTranslation();\n\n const extensionType = t(\n 'generate_command.flow.dashboard_plugin'\n ).toLowerCase();\n\n const customKey = customGroupMessages.get(backofficeExtensionWidget.category);\n\n return (\n <>\n <Text>{t('generate_command.generation.done', { extensionType })}</Text>\n {customKey ? <Text>{t(customKey)}</Text> : null}\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n // https://dev.wix.com/docs/build-apps/developer-tools/cli/wix-cli-for-apps/extensions/dashboard-plugin-extension-files-and-code\n components={[<Learn />, <Link url=\"https://wix.to/dFFuEki\" />]}\n />\n </>\n );\n};\n","import React from 'react';\nimport type { FC } from 'react';\nimport { match } from 'variant';\nimport { Spinner, useAsync } from '@wix/cli-ui-kit';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { getBackofficeMenuItems } from '@wix/extensions-data-client';\nimport { DashboardMenuPluginWizard } from './DashboardMenuPluginWizard.js';\n\nexport const DashboardMenuPlugin: FC = () => {\n const { t } = useTranslation();\n const { status } = useAsync(getBackofficeMenuItems, []);\n\n return match(status, {\n Error: () => null,\n Loading: () => <Spinner text={t('general.loading')} />,\n Success: ({ result: backofficeMenuItems }) => (\n <DashboardMenuPluginWizard backofficeMenuItems={backofficeMenuItems} />\n ),\n });\n};\n","import React, { useState, useCallback, useMemo } from 'react';\nimport type { FC } from 'react';\nimport type { VariantOf } from 'variant';\nimport { match, variant } from 'variant';\nimport { kebabCase } from 'lodash';\nimport {\n Link,\n SelectGroupsInput,\n SelectInput,\n Spinner,\n TextInput,\n} from '@wix/cli-ui-kit';\nimport type { SelectGroup } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport type { BackofficeMenuItem } from '@wix/extensions-data-client';\nimport type { ActionSchema } from '@wix/cli-app-definitions';\nimport { useDevCenterClient } from '@wix/dev-center-client';\nimport {\n useValidation,\n createDashboardMenuPluginValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { generateDashboardMenuPlugin } from './generate.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport { useProjectModel } from '../../../model.js';\nimport { NavigateToPage } from './NavigateToPage.js';\nimport { OpenModal } from './OpenModal.js';\nimport { AppRequirement } from '../AppRequirement.js';\nimport { useExtensions } from '../../extensions/useExtensions.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\nimport { MultipleAppRequirement } from '../MultipleAppRequirement.js';\nimport { DashboardMenuPluginGeneratedNote } from './DashboardMenuPluginGeneratedNote.js';\n\nconst DashboardMenuPluginAction = variant({\n NavigateToPage: {},\n OpenModal: {},\n});\n\ntype DashboardMenuPluginAction = VariantOf<typeof DashboardMenuPluginAction>;\n\nexport const DashboardMenuPluginWizard: FC<{\n backofficeMenuItems: BackofficeMenuItem[];\n}> = ({ backofficeMenuItems }) => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const { addRequiredApp } = useDevCenterClient();\n const { getExtensions } = useExtensions();\n const extensionType = t(\n 'generate_command.flow.dashboard_menu_plugin'\n ).toLowerCase();\n\n const dashboardMenuPlugins = getExtensions('DashboardMenuPlugin');\n\n const [backofficeMenuItem, setBackofficeMenuItem] =\n useState<BackofficeMenuItem>();\n const [actionType, setActionType] = useState<DashboardMenuPluginAction>();\n const [requireAppsIds, setRequireAppsIds] = useState<string[]>();\n const [action, setAction] = useState<ActionSchema>();\n const [folder, setFolder] = useState<string>();\n const [title, setTitle] = useState<string>();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const defaultFolderName = kebabCase(title);\n\n const [additionalInfo, setAdditionalInfo] =\n useState<Record<string, unknown>>();\n\n const validateMenuPluginFolder = useValidation(\n createDashboardMenuPluginValidation(dashboardMenuPlugins)\n );\n\n const generationTask = useGenerationTask(async () => {\n if (backofficeMenuItem && action && folder && title && requireAppsIds) {\n const requireAppId = requireAppsIds.at(0);\n if (requireAppId) {\n await addRequiredApp({\n appId: model.config.appId,\n appIdToRequire: requireAppId,\n });\n }\n return generateDashboardMenuPlugin(\n model.projectFolder,\n backofficeMenuItem.id,\n action,\n folder,\n title\n );\n }\n }, [backofficeMenuItem, action, folder, title]);\n\n const handleActionSelected = useCallback(\n (action: ActionSchema) => setAction(action),\n []\n );\n\n const menuItemsGroups = useMemo(\n () =>\n Object.values(\n backofficeMenuItems.reduce<\n Record<string, SelectGroup<BackofficeMenuItem>>\n >((menuItemsByApps, menuItem) => {\n const [requiredApp] = menuItem.requiredApps;\n const groupBy = menuItem.category;\n\n menuItemsByApps[groupBy] ??= { title: groupBy, items: [] };\n\n menuItemsByApps[groupBy].items.push({\n title: menuItem.name,\n key: menuItem.id,\n description: (\n <Trans\n i18nKey=\"generate_command.dashboard_menu_plugin.what_to_extend.item_description\"\n components={[<Link url={requiredApp.docsUrl} />]}\n />\n ),\n value: menuItem,\n });\n return menuItemsByApps;\n }, {})\n ),\n\n [backofficeMenuItems]\n );\n\n return (\n <>\n <SelectGroupsInput<BackofficeMenuItem>\n label={t('generate_command.dashboard_menu_plugin.what_to_extend')}\n hideScroll\n info={\n <Trans\n i18nKey=\"generate_command.dashboard_menu_plugin.what_to_extend.description\"\n // https://dev.wix.com/docs/build-apps/developer-tools/extensions/dashboard-extensions/dashboard-plugins/about-dashboard-menu-plugin-extensions\n components={[<Link url=\"https://wix.to/h8AJ7f5\" />]}\n />\n }\n groups={menuItemsGroups}\n onSubmit={(item) => {\n const additionalInfoOfSelectedItem = {\n category: item.value.category,\n extensionName: item.value.name,\n extensionType,\n };\n\n bi.cliFlowStepAnswered({\n question: t(\n 'generate_command.dashboard_menu_plugin.what_to_extend'\n ),\n questionKey:\n 'generate_command.dashboard_menu_plugin.what_to_extend',\n answer: item.title,\n additionalInfo: additionalInfoOfSelectedItem,\n });\n\n setAdditionalInfo(additionalInfoOfSelectedItem);\n setBackofficeMenuItem(item.value);\n }}\n />\n {backofficeMenuItem &&\n (backofficeMenuItem.requiredApps.length === 1 ? (\n <AppRequirement\n appId={model.config.appId}\n requiredApps={[\n {\n id: backofficeMenuItem.requiredApps[0].appId,\n name: backofficeMenuItem.requiredApps[0].appName,\n },\n ]}\n onSubmit={setRequireAppsIds}\n />\n ) : (\n <MultipleAppRequirement\n appId={model.config.appId}\n requiredApps={backofficeMenuItem.requiredApps.map(\n (requiredApp) => ({\n id: requiredApp.appId,\n name: requiredApp.appName,\n })\n )}\n onSubmit={setRequireAppsIds}\n />\n ))}\n {requireAppsIds && (\n <SelectInput<DashboardMenuPluginAction>\n label={t('generate_command.dashboard_menu_plugin.what_to_do')}\n options={[\n {\n key: 'navigate-to-page',\n title: t(\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page'\n ),\n value: DashboardMenuPluginAction.NavigateToPage(),\n },\n {\n key: 'open-modal',\n title: t(\n 'generate_command.dashboard_menu_plugin.what_to_do.open_modal'\n ),\n value: DashboardMenuPluginAction.OpenModal(),\n },\n ]}\n onSubmit={(action) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.dashboard_menu_plugin.what_to_do'),\n questionKey: 'generate_command.dashboard_menu_plugin.what_to_do',\n answer: action.title,\n additionalInfo,\n });\n setActionType(action.value);\n }}\n />\n )}\n\n {actionType &&\n match(actionType, {\n NavigateToPage: () => (\n <NavigateToPage onActionSelected={handleActionSelected} />\n ),\n OpenModal: () => (\n <OpenModal onActionSelected={handleActionSelected} />\n ),\n })}\n\n {action && (\n <TextInput\n label={t('generate_command.dashboard_menu_plugin.choose_title')}\n placeholder={t(\n 'generate_command.dashboard_menu_plugin.title_placeholder'\n )}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t(\n 'generate_command.dashboard_menu_plugin.choose_title'\n ),\n questionKey:\n 'generate_command.dashboard_menu_plugin.choose_title',\n answer: value,\n additionalInfo,\n });\n setTitle(value);\n }}\n />\n )}\n\n {title && (\n <TextInput\n label={t('generate_command.dashboard_menu_plugin.choose_folder')}\n placeholder={defaultFolderName}\n onSubmit={(folder) => {\n bi.cliFlowStepAnswered({\n question: t(\n 'generate_command.dashboard_menu_plugin.choose_folder'\n ),\n questionKey:\n 'generate_command.dashboard_menu_plugin.choose_folder',\n answer: folder,\n additionalInfo,\n });\n setFolder(folder);\n }}\n validate={validateMenuPluginFolder}\n />\n )}\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: extensionType,\n })}\n />\n ),\n Error: () => null,\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, t, extensionType]\n )}\n\n {finishedInstallation && backofficeMenuItem ? (\n <DashboardMenuPluginGeneratedNote\n backofficeMenuItem={backofficeMenuItem}\n />\n ) : null}\n </>\n );\n};\n","import path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { toJsonString } from '@wix/cli-fs';\nimport { componentGenerator } from '@wix/gena';\nimport type {\n ActionSchema,\n DashboardMenuPluginConfig,\n} from '@wix/cli-app-definitions';\nimport { getDashboardMenuPluginsDir } from '@wix/cli-app-definitions';\n\n// NOTE: path is relative to the build folder\nconst DASHBOARD_MENU_PLUGIN_TEMPLATE = path.resolve(\n __dirname,\n '../templates/dashboard-menu-plugin'\n);\n\nexport async function generateDashboardMenuPlugin(\n projectFolder: string,\n extended: string,\n action: ActionSchema,\n folder: string,\n title: string\n) {\n const cwd = path.join(getDashboardMenuPluginsDir(projectFolder), folder);\n const menuPluginConfig: DashboardMenuPluginConfig = {\n $schema: 'https://dev.wix.com/wix-cli/schemas/dashboard-menu-plugin.json',\n id: randomUUID(),\n title,\n iconKey: 'Sparkles',\n extends: extended,\n action,\n };\n const menuPluginConfigJSON = toJsonString(menuPluginConfig, { spaces: 2 });\n\n await componentGenerator({\n template: DASHBOARD_MENU_PLUGIN_TEMPLATE,\n projectFolder,\n cwd,\n data: {\n menuPluginConfigJSON,\n },\n });\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport type { FC } from 'react';\nimport { SelectInput, TextInput } from '@wix/cli-ui-kit';\nimport type { VariantOf } from 'variant';\nimport { fields, isType, match, variant } from 'variant';\nimport { useTranslation } from '@wix/cli-i18n';\nimport type { ActionSchema } from '@wix/cli-app-definitions';\nimport { useProjectModel } from '../../../model.js';\nimport { DevCenterComponent } from '../../../dev-center/components/dev-center-component.js';\nimport {\n composeValidations,\n useValidation,\n uuidValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\n\nconst NavigateToPageOption = variant({\n Page: fields<{ pageId: string }>(),\n Other: {},\n});\n\ntype NavigateToPageOption = VariantOf<typeof NavigateToPageOption>;\n\nexport const NavigateToPage: FC<{\n onActionSelected: (action: ActionSchema) => void;\n}> = ({ onActionSelected }) => {\n const bi = useWixCliAppBi();\n const { model } = useProjectModel();\n const { t } = useTranslation();\n const [pageId, setPageId] = useState<string>();\n const [shouldUseCustomPageId, setShouldUseCustomPageId] =\n useState<boolean>(false);\n\n const dashboardPages = useMemo(\n () => model.components.filter(isType(DevCenterComponent.DashboardPage)),\n [model.components]\n );\n\n const validatePageId = useValidation(\n composeValidations([\n [\n uuidValidation,\n t(\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page.other.page_id_invalid'\n ),\n ],\n ])\n );\n\n useEffect(() => {\n if (pageId) {\n onActionSelected({\n navigateToPage: {\n pageId,\n },\n });\n }\n }, [pageId, onActionSelected]);\n\n return (\n <>\n <SelectInput<NavigateToPageOption>\n label={t(\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page'\n )}\n info={t(\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page.info'\n )}\n options={[\n ...dashboardPages.map(({ id, title }) => ({\n key: id,\n title,\n value: NavigateToPageOption.Page({ pageId: id }),\n })),\n {\n key: 'other',\n title: t(\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page.other'\n ),\n value: NavigateToPageOption.Other(),\n },\n ]}\n onSubmit={(option) => {\n bi.cliFlowStepAnswered({\n question: t(\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page'\n ),\n questionKey:\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page',\n answer: option.title,\n });\n return match(option.value, {\n Page: ({ pageId }) => setPageId(pageId),\n Other: () => setShouldUseCustomPageId(true),\n });\n }}\n />\n {shouldUseCustomPageId && (\n <TextInput\n label={t(\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page.other.choose_page_id'\n )}\n onSubmit={(pageId) => {\n bi.cliFlowStepAnswered({\n question: t(\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page.other.choose_page_id'\n ),\n questionKey:\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page.other.choose_page_id',\n answer: pageId,\n });\n setPageId(pageId);\n }}\n validate={validatePageId}\n />\n )}\n </>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport type { FC } from 'react';\nimport { SelectInput, TextInput } from '@wix/cli-ui-kit';\nimport type { VariantOf } from 'variant';\nimport { fields, isType, match, variant } from 'variant';\nimport { useTranslation } from '@wix/cli-i18n';\nimport type { ActionSchema } from '@wix/cli-app-definitions';\nimport { useProjectModel } from '../../../model.js';\nimport { DevCenterComponent } from '../../../dev-center/components/dev-center-component.js';\nimport {\n composeValidations,\n useValidation,\n uuidValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\n\nconst OpenModalOption = variant({\n Component: fields<{ componentId: string }>(),\n Other: {},\n});\n\ntype OpenModalOption = VariantOf<typeof OpenModalOption>;\n\nexport const OpenModal: FC<{\n onActionSelected: (action: ActionSchema) => void;\n}> = ({ onActionSelected }) => {\n const bi = useWixCliAppBi();\n const { model } = useProjectModel();\n const { t } = useTranslation();\n const [componentId, setComponentId] = useState<string>();\n const [shouldUseCustomComponentId, setShouldUseCustomComponentId] =\n useState<boolean>(false);\n\n const dashboardModals = useMemo(\n () => model.components.filter(isType(DevCenterComponent.DashboardModal)),\n [model.components]\n );\n\n const validateComponentId = useValidation(\n composeValidations([\n [\n uuidValidation,\n t(\n 'generate_command.dashboard_menu_plugin.what_to_do.open_modal.choose_component.other.component_id_invalid'\n ),\n ],\n ])\n );\n\n useEffect(() => {\n if (componentId) {\n onActionSelected({\n openModal: {\n componentId,\n },\n });\n }\n }, [componentId, onActionSelected]);\n\n return (\n <>\n <SelectInput<OpenModalOption>\n label={t(\n 'generate_command.dashboard_menu_plugin.what_to_do.open_modal.choose_component'\n )}\n info={t(\n 'generate_command.dashboard_menu_plugin.what_to_do.open_modal.choose_component.info'\n )}\n options={[\n ...dashboardModals.map(({ id, title }) => ({\n key: id,\n title,\n value: OpenModalOption.Component({ componentId: id }),\n })),\n {\n key: 'other',\n title: t(\n 'generate_command.dashboard_menu_plugin.what_to_do.open_modal.choose_component.other'\n ),\n value: OpenModalOption.Other(),\n },\n ]}\n onSubmit={(option) => {\n bi.cliFlowStepAnswered({\n question:\n 'generate_command.dashboard_menu_plugin.what_to_do.open_modal.choose_component',\n questionKey:\n 'generate_command.dashboard_menu_plugin.what_to_do.open_modal.choose_component',\n answer: option.title,\n });\n return match(option.value, {\n Component: ({ componentId }) => setComponentId(componentId),\n Other: () => setShouldUseCustomComponentId(true),\n });\n }}\n />\n {shouldUseCustomComponentId && (\n <TextInput\n label={t(\n 'generate_command.dashboard_menu_plugin.what_to_do.open_modal.choose_component.other.choose_component_id'\n )}\n onSubmit={(componentId) => {\n bi.cliFlowStepAnswered({\n question: t(\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page.other.choose_page_id'\n ),\n questionKey:\n 'generate_command.dashboard_menu_plugin.what_to_do.navigate_to_page.choose_page.other.choose_page_id',\n answer: componentId,\n });\n setComponentId(componentId);\n }}\n validate={validateComponentId}\n />\n )}\n </>\n );\n};\n","import React from 'react';\nimport type { FC } from 'react';\nimport { Box, Learn, Link, Text } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport type { BackofficeMenuItem } from '@wix/extensions-data-client';\n\nconst customGroupMessages = new Map([\n ['Wix eCommerce', 'generate_command.generation.ecommerce_notification'],\n]);\n\nexport const DashboardMenuPluginGeneratedNote: FC<{\n backofficeMenuItem: BackofficeMenuItem;\n}> = ({ backofficeMenuItem }) => {\n const { t } = useTranslation();\n\n const extensionType = t(\n 'generate_command.flow.dashboard_menu_plugin'\n ).toLowerCase();\n\n const customKey = customGroupMessages.get(backofficeMenuItem.category);\n\n return (\n <Box flexDirection=\"column\">\n <Text>{t('generate_command.generation.done', { extensionType })}</Text>\n {customKey ? <Text>{t(customKey)}</Text> : null}\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n // https://dev.wix.com/docs/build-apps/developer-tools/cli/wix-cli-for-apps/extensions/dashboard-menu-plugin-extension-files-and-code\n components={[<Learn />, <Link url=\"https://wix.to/YwaogfU\" />]}\n />\n </Box>\n );\n};\n","import React from 'react';\nimport { match } from 'variant';\nimport { Spinner, useAsync } from '@wix/cli-ui-kit';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { useSitePluginClient } from '@wix/site-plugin-client';\nimport { SitePluginWizard } from './SitePluginWizard.js';\n\nexport const GenerateSitePlugin: React.FC = () => {\n const { t } = useTranslation();\n const { getPlacements } = useSitePluginClient();\n\n const { status } = useAsync(getPlacements, []);\n\n return match(status, {\n Error: () => null,\n Loading: () => <Spinner text={t('general.loading')} />,\n Success: ({ result }) => (\n <SitePluginWizard placements={result.placements} />\n ),\n });\n};\n","export { SitePluginClient } from './site-plugin-client.js';\nexport type { Placements, Placement } from './schemas.js';\nexport { useSitePluginClient } from './useSitePluginClient.js';\n","import { getTestOverrides } from '@wix/cli-test-overrides';\nimport pRetry from 'p-retry';\nimport type { Options } from 'p-retry';\nimport type { HttpClient } from '@wix/cli-http-client';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { placementsSchema } from './schemas.js';\nimport widgetDocs from './data/widget-docs.json';\n\nexport class SitePluginClient {\n private readonly retryOptions: Options;\n\n constructor(private readonly httpClient: HttpClient) {\n const { minRetryTimeout } = getTestOverrides();\n\n this.retryOptions = {\n retries: 3,\n minTimeout: minRetryTimeout,\n maxTimeout: 3 * 1000,\n };\n }\n\n getPlacements = async () => {\n try {\n const { data } = await pRetry(\n () =>\n this.httpClient.get(\n '/_serverless/editor-platform-widget-plugins/placements'\n ),\n this.retryOptions\n );\n\n return placementsSchema.parse(data);\n } catch (e) {\n throw new CliError({\n code: CliErrorCode.FailedToGetPlacements(),\n cause: e,\n });\n }\n };\n\n getWidgetDocsUrl = (widgetId: string) => {\n return (widgetDocs as Record<string, string>)[widgetId];\n };\n}\n","import { z } from 'zod';\n\nconst placementSchema = z\n .object({\n appDefinitionId: z.string(),\n widgetId: z.string(),\n slotId: z.string(),\n appName: z.string(),\n widgetName: z.string(),\n dependencyAppDefinitionId: z.string(),\n })\n .strict();\n\nexport type Placement = z.TypeOf<typeof placementSchema>;\n\nexport const placementsSchema = z\n .object({\n placements: z.array(placementSchema),\n })\n .strict();\n\nexport type Placements = z.TypeOf<typeof placementsSchema>;\n","{\n \"13afb094-84f9-739f-44fd-78d036adb028\": \"https://wix.to/jPWO9GZ\",\n \"bda15dc1-816d-4ff3-8dcb-1172d5343cce\": \"https://wix.to/sfoURR8\",\n \"14fd5970-8072-c276-1246-058b79e70c1a\": \"https://wix.to/FPbvzSu\",\n \"6a25b678-53ec-4b37-a190-65fcd1ca1a63\": \"https://wix.to/VBf3XkQ\",\n \"13a94f09-2766-3c40-4a32-8edb5acdd8bc\": \"https://wix.to/awqi86g\",\n \"a91a0543-d4bd-4e6b-b315-9410aa27bcde\": \"https://wix.to/BaNrGoT\",\n \"14d2abc2-5350-6322-487d-8c16ff833c8a\": \"https://wix.to/GHJRTYr\"\n}\n","import { useMemo } from 'react';\nimport { useHttpClient } from '@wix/cli-http-client-react';\nimport { SitePluginClient } from './site-plugin-client.js';\n\nexport function useSitePluginClient(): SitePluginClient {\n const httpClient = useHttpClient({ type: 'general' });\n return useMemo(() => new SitePluginClient(httpClient), [httpClient]);\n}\n","import React, { useMemo, useState } from 'react';\nimport { match } from 'variant';\nimport { kebabCase } from 'lodash';\nimport type { SelectGroup } from '@wix/cli-ui-kit';\nimport {\n Text,\n TextInput,\n SelectInput,\n SelectGroupsInput,\n Spinner,\n Link,\n Learn,\n} from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport { useDevCenterClient } from '@wix/dev-center-client';\nimport type { Placements, Placement } from '@wix/site-plugin-client';\nimport uniqBy from 'lodash/uniqBy.js';\nimport { useSitePluginClient } from '@wix/site-plugin-client';\nimport {\n useCustomElementDirectoryValidation,\n useCustomElementNameValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport { generateSitePlugin } from './generate.js';\nimport { useProjectModel } from '../../../model.js';\nimport { useWixCliAppBi } from '../../../bi/index.js';\nimport { AppRequirement } from '../AppRequirement.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\n\nexport const SitePluginWizard: React.FC<Placements> = ({ placements }) => {\n const bi = useWixCliAppBi();\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const { addRequiredApp } = useDevCenterClient();\n const { getWidgetDocsUrl } = useSitePluginClient();\n\n const pluginApplications = useMemo(\n () =>\n uniqBy(placements, 'appName').map((pluginPlacement) => ({\n value: pluginPlacement.appName,\n title: pluginPlacement.appName,\n })),\n [placements]\n );\n\n const extensionType = t('generate_command.flow.site_plugin').toLowerCase();\n\n const validateFolderName = useCustomElementDirectoryValidation('Site plugin');\n const validateName = useCustomElementNameValidation();\n\n const [appsToRequire, setAppsToRequire] = useState<string[]>();\n const [placement, setPlacement] = useState<Placement>();\n const [placementApp, setPlacementApp] = useState<string>();\n const [pluginFolder, setPluginFolder] = useState<string>();\n const [pluginName, setPluginName] = useState<string>();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const defaultPluginFolder = kebabCase(pluginName);\n\n const widgetSlots = useMemo(\n () =>\n placementApp\n ? Object.values(\n placements\n .filter((placement) => placement.appName === placementApp)\n .reduce<Record<string, SelectGroup<Placement>>>(\n (_widgetSlots, placement) => {\n const widgetDocsUrl = getWidgetDocsUrl(placement.widgetId);\n const description = widgetDocsUrl && (\n <Text skin=\"secondary\">\n <Trans\n i18nKey=\"generate_command.site_plugin.widget_docs\"\n components={[<Link url={widgetDocsUrl} />]}\n />\n </Text>\n );\n\n _widgetSlots[placement.widgetId] ??= {\n title: placement.widgetName,\n description,\n items: [],\n };\n\n _widgetSlots[placement.widgetId]?.items.push({\n key: placement.slotId,\n title: placement.slotId,\n value: placement,\n });\n\n return _widgetSlots;\n },\n {}\n )\n )\n : [],\n [placements, placementApp, getWidgetDocsUrl]\n );\n\n const generationTask = useGenerationTask(async () => {\n if (pluginFolder && pluginName && placement && appsToRequire) {\n const appToRequire = appsToRequire.at(0);\n if (appToRequire) {\n await addRequiredApp({\n appId: model.config.appId,\n appIdToRequire: appToRequire,\n });\n }\n const { appDefinitionId, widgetId, slotId } = placement;\n return generateSitePlugin(\n model.projectFolder,\n [{ appDefinitionId, widgetId, slotId }],\n pluginFolder,\n pluginName,\n placement.widgetName,\n getWidgetDocsUrl(placement.widgetId)!\n );\n }\n }, [pluginFolder, pluginName, placement, appsToRequire]);\n\n return (\n <>\n <SelectInput<string>\n label={t('generate_command.site_plugin.plugin_app')}\n info={\n <Trans\n i18nKey=\"generate_command.site_plugin.plugin_app.description\"\n components={[<Link url=\"https://wix.to/Onfe4XJ\" />]}\n />\n }\n options={pluginApplications}\n onSubmit={(option) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.site_plugin.plugin_app'),\n questionKey: 'generate_command.site_plugin.plugin_app',\n answer: option.title,\n additionalInfo: { ...option },\n });\n setPlacementApp(option.value);\n }}\n />\n {placementApp && (\n <SelectGroupsInput<Placement>\n label={t('generate_command.site_plugin.choose_placement')}\n groups={widgetSlots}\n onSubmit={(option) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.site_plugin.choose_placement'),\n questionKey: 'generate_command.site_plugin.choose_placement',\n answer: option.title,\n additionalInfo: option.value,\n });\n setPlacement(option.value);\n }}\n />\n )}\n {placement && (\n <AppRequirement\n appId={model.config.appId}\n requiredApps={[\n {\n id: placement.dependencyAppDefinitionId,\n name: placement.appName,\n },\n ]}\n onSubmit={setAppsToRequire}\n />\n )}\n {appsToRequire && (\n <TextInput\n label={t('generate_command.site_plugin.choose_name')}\n placeholder={t('generate_command.site_plugin.name_placeholder')}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.site_plugin.choose_name'),\n questionKey: 'generate_command.site_plugin.choose_name',\n answer: value,\n additionalInfo: {\n extensionType,\n },\n });\n setPluginName(value);\n }}\n validate={validateName}\n />\n )}\n {pluginName && (\n <TextInput\n label={t('generate_command.site_plugin.choose_folder')}\n placeholder={defaultPluginFolder}\n onSubmit={(value) => {\n bi.cliFlowStepAnswered({\n question: t('generate_command.site_plugin.choose_folder'),\n questionKey: 'generate_command.site_plugin.choose_folder',\n answer: value,\n additionalInfo: {\n extensionType,\n },\n });\n setPluginFolder(value);\n }}\n validate={validateFolderName}\n />\n )}\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: extensionType,\n })}\n />\n ),\n Error: () => null,\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, t, extensionType]\n )}\n {finishedInstallation && (\n <>\n <Text>\n {t('generate_command.generation.done', {\n extensionType,\n })}\n </Text>\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n // https://dev.wix.com/docs/build-apps/develop-your-app/frameworks/wix-cli/supported-extensions/site-extensions/site-plugins/add-a-site-plugin-extension-in-the-cli\n components={[<Learn />, <Link url=\"https://wix.to/rEfCfbY\" />]}\n />\n </>\n )}\n </>\n );\n};\n","import path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { componentGenerator } from '@wix/gena';\nimport { toJsonString } from '@wix/cli-fs';\nimport { getSitePluginsDir, SITE_PLUGINS_DIR } from '@wix/cli-app-definitions';\nimport type {\n SitePluginConfig,\n SitePluginPlacementConfig,\n} from '@wix/cli-app-definitions';\n\nconst SITE_PLUGIN_TEMPLATE = path.resolve(\n __dirname,\n '../templates/site-plugin'\n);\n\nexport async function generateSitePlugin(\n projectFolder: string,\n placements: SitePluginPlacementConfig[],\n folder: string,\n name: string,\n widgetName: string,\n widgetDocsLink: string\n) {\n const readablePath = path.join(SITE_PLUGINS_DIR, folder);\n const cwd = path.join(getSitePluginsDir(projectFolder), folder);\n const defaultLogoPath = path.join(\n projectFolder,\n 'src/assets',\n folder,\n 'logo.svg'\n );\n const sitePluginConfig: SitePluginConfig = {\n $schema: 'https://dev.wix.com/wix-cli/schemas/site-plugin.json',\n id: randomUUID(),\n referenceComponentId: randomUUID(),\n marketData: {\n name,\n logoUrl: path.relative(cwd, defaultLogoPath),\n },\n placements,\n installation: {\n autoAddToSite: true,\n },\n };\n\n const sitePluginConfigJSON = toJsonString(sitePluginConfig, {\n spaces: 2,\n });\n\n return await componentGenerator({\n template: SITE_PLUGIN_TEMPLATE,\n projectFolder,\n cwd,\n assetsOutputPath: folder,\n data: {\n sitePluginConfigJSON,\n readablePath,\n name,\n widgetName,\n widgetDocsLink,\n },\n });\n}\n","import React, { useMemo, useState } from 'react';\nimport { match } from 'variant';\nimport { Text, TextInput, Box, Link, Spinner, Learn } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport {\n composeValidations,\n pathValidation,\n useValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport { useProjectModel } from '../../../model.js';\nimport { useBackendComponents } from '../../../backend/useBackendComponents.js';\nimport { generateApi } from './generate.js';\nimport { useWixCliAppBi } from '../../../bi/useWixCliAppBi.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\n\nexport const GenerateApi: React.FC = () => {\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const { cliFlowStepAnswered } = useWixCliAppBi();\n const [apiFolder, setApiFolder] = useState<string>();\n const { backendComponentsByType } = useBackendComponents();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const apis = backendComponentsByType.Api;\n const extensionType = t('generate_command.flow.api.title').toLowerCase();\n\n const validateApiFolder = useValidation(\n composeValidations([\n [\n (folderName: string) =>\n apis.every((api) => api.title !== folderName) &&\n pathValidation(folderName),\n t('generate_command.api.choose_api_name.error'),\n ],\n ])\n );\n\n const generationTask = useGenerationTask(async () => {\n if (apiFolder) {\n return generateApi(model.projectFolder, apiFolder);\n }\n }, [model.projectFolder, apiFolder]);\n\n return (\n <>\n <TextInput\n label={t('generate_command.api.choose_api_name')}\n placeholder={t('generate_command.api.api_placeholder')}\n onSubmit={(value) => {\n cliFlowStepAnswered({\n question: t('generate_command.api.choose_api_name'),\n questionKey: 'generate_command.api.choose_api_name',\n answer: value,\n });\n setApiFolder(value);\n }}\n validate={validateApiFolder}\n />\n\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: extensionType,\n })}\n />\n ),\n Error: () => null,\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, t, extensionType]\n )}\n\n {finishedInstallation && (\n <Box flexDirection=\"column\">\n <Text>\n {t('generate_command.generation.done', {\n extensionType,\n })}\n </Text>\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n components={[<Learn />, <Link url=\"https://wix.to/BEkD5a1\" />]}\n />\n </Box>\n )}\n </>\n );\n};\n","import path from 'node:path';\nimport { componentGenerator } from '@wix/gena';\nimport { getApiFolder } from '@wix/cli-app-definitions';\n\nconst API_TEMPLATE = path.resolve(__dirname, '../templates/api');\n\nexport async function generateApi(\n projectFolder: string,\n folderName: string\n): Promise<void> {\n const cwd = path.join(getApiFolder(projectFolder), folderName);\n\n await componentGenerator({\n template: API_TEMPLATE,\n cwd,\n projectFolder,\n data: {\n folderName,\n },\n });\n}\n","import React, { useMemo, useState } from 'react';\nimport type { FC } from 'react';\nimport { match } from 'variant';\nimport { Text, TextInput, Link, Spinner, Learn } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport {\n composeValidations,\n pathValidation,\n useValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport { useProjectModel } from '../../../model.js';\nimport { useBackendComponents } from '../../../backend/useBackendComponents.js';\nimport { generateEvent } from './generate.js';\nimport { useWixCliAppBi } from '../../../bi/useWixCliAppBi.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\n\nexport const GenerateEvent: FC = () => {\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const { backendComponentsByType } = useBackendComponents();\n const { cliFlowStepAnswered } = useWixCliAppBi();\n\n const [eventFolder, setEventFolder] = useState<string>();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const events = backendComponentsByType.Event;\n const extensionType = t('generate_command.flow.event').toLowerCase();\n\n const validateEventFolder = useValidation(\n composeValidations([\n [\n (folderName: string) =>\n events.every((event) => event.title !== folderName) &&\n pathValidation(folderName),\n t('generate_command.event.choose_folder.error'),\n ],\n ])\n );\n\n const generationTask = useGenerationTask(async () => {\n if (eventFolder) {\n return generateEvent(model.projectFolder, eventFolder);\n }\n }, [model.projectFolder, eventFolder]);\n\n return (\n <>\n <TextInput\n label={t('generate_command.event.choose_folder')}\n placeholder={t('generate_command.event.folder_placeholder')}\n onSubmit={(value) => {\n cliFlowStepAnswered({\n question: t('generate_command.event.choose_folder'),\n questionKey: 'generate_command.event.choose_folder',\n answer: value,\n });\n setEventFolder(value);\n }}\n validate={validateEventFolder}\n />\n\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: extensionType,\n })}\n />\n ),\n Error: () => null,\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, t, extensionType]\n )}\n\n {finishedInstallation && (\n <>\n <Text>\n {t('generate_command.generation.done', {\n extensionType,\n })}\n </Text>\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n // https://dev.wix.com/docs/build-apps/develop-your-app/extensions/backend-extensions/about-backend-extensions\n components={[<Learn />, <Link url=\"https://wix.to/BEkD5a1\" />]}\n />\n </>\n )}\n </>\n );\n};\n","import path from 'node:path';\nimport { componentGenerator } from '@wix/gena';\nimport { getEventsFolder } from '@wix/cli-app-definitions';\n\nconst EVENT_TEMPLATE = path.resolve(__dirname, '../templates/event');\n\nexport async function generateEvent(projectFolder: string, folderName: string) {\n const cwd = path.join(getEventsFolder(projectFolder), folderName);\n\n return await componentGenerator({\n template: EVENT_TEMPLATE,\n cwd,\n projectFolder,\n });\n}\n","import React, { useMemo, useState } from 'react';\nimport { match } from 'variant';\nimport { Text, TextInput, Box, Link, Spinner, Learn } from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport { WEB_METHOD_DIR } from '@wix/cli-app-definitions';\nimport { join } from 'node:path';\nimport {\n composeValidations,\n pathValidation,\n useValidation,\n} from '../../../dev-center/components/validations/index.js';\nimport { useGenerationTask } from '../hooks/use-generation-task.js';\nimport { useProjectModel } from '../../../model.js';\nimport { useBackendComponents } from '../../../backend/useBackendComponents.js';\nimport { generateWebMethod } from './generate.js';\nimport { useWixCliAppBi } from '../../../bi/useWixCliAppBi.js';\nimport { InstallDependencies } from '../InstallDependencies.js';\n\nexport const GenerateWebMethod: React.FC = () => {\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const { cliFlowStepAnswered } = useWixCliAppBi();\n const [webMethodFolder, setWebMethodFolder] = useState<string>();\n const { backendComponentsByType } = useBackendComponents();\n const [finishedInstallation, setFinishedInstallation] =\n useState<boolean>(false);\n\n const webMethods = backendComponentsByType.WebMethod;\n const extensionType = t(\n 'generate_command.flow.web_method.title'\n ).toLowerCase();\n\n const validateWebMethodFolder = useValidation(\n composeValidations([\n [\n (filePath: string) => {\n const resolvedFolderPath = `${join(WEB_METHOD_DIR, filePath)}.web.ts`;\n\n return (\n pathValidation(filePath) &&\n webMethods.every(\n (webMethod) => webMethod.relativePath !== resolvedFolderPath\n )\n );\n },\n t('generate_command.web_method.choose_filename.error'),\n ],\n ])\n );\n\n const generationTask = useGenerationTask(async () => {\n if (webMethodFolder) {\n return generateWebMethod(model.projectFolder, webMethodFolder);\n }\n }, [model.projectFolder, webMethodFolder]);\n\n return (\n <>\n <TextInput\n label={t('generate_command.web_method.choose_filename')}\n placeholder={t(\n 'generate_command.web_method.choose_filename.placeholder'\n )}\n onSubmit={(folderPath) => {\n cliFlowStepAnswered({\n question: t('generate_command.web_method.choose_filename'),\n questionKey: 'generate_command.web_method.choose_filename',\n answer: folderPath,\n });\n setWebMethodFolder(folderPath);\n }}\n validate={validateWebMethodFolder}\n />\n\n {useMemo(\n () =>\n match(generationTask, {\n Success: ({ hasUpdatedDependencies }) => {\n if (hasUpdatedDependencies) {\n return (\n <InstallDependencies\n onFinish={() => setFinishedInstallation(true)}\n />\n );\n }\n setFinishedInstallation(true);\n return null;\n },\n Loading: () => (\n <Spinner\n text={t('generate_command.generation.loading', {\n subject: extensionType,\n })}\n />\n ),\n Error: () => null,\n NotRequested: () => null,\n }),\n [generationTask, setFinishedInstallation, t, extensionType]\n )}\n\n {finishedInstallation && (\n <Box flexDirection=\"column\">\n <Text>\n {t('generate_command.generation.done', {\n extensionType,\n })}\n </Text>\n <Trans\n i18nKey=\"generate_command.generation.learn_more\"\n values={{ extensionType }}\n components={[<Learn />, <Link url=\"https://wix.to/BEkD5a1\" />]}\n />\n </Box>\n )}\n </>\n );\n};\n","import path, { join } from 'node:path';\nimport { componentGenerator } from '@wix/gena';\nimport { WEB_METHOD_DIR } from '@wix/cli-app-definitions';\n\nconst WEB_METHOD_TEMPLATE = path.resolve(__dirname, '../templates/web-method');\n\nexport async function generateWebMethod(\n projectFolder: string,\n folderPath: string\n): Promise<void> {\n const filePath = join(WEB_METHOD_DIR, folderPath);\n\n await componentGenerator({\n template: WEB_METHOD_TEMPLATE,\n cwd: projectFolder,\n projectFolder,\n data: {\n filePath,\n fileName: path.basename(filePath),\n },\n });\n}\n"],"mappings":"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","names":["uniqBy","import_react","import_variant","import_react","import_variant","path","path","path","path","_memoize","import_react","import_variant","join","import_variant","import_variant","import_variant","import_variant","join","join","packages","parsedPackages","join","t","React","t","React","pageTitle","import_react","import_variant","import_lodash","path","randomUUID","path","randomUUID","t","React","import_react","import_variant","randomUUID","randomUUID","t","React","import_react","import_variant","import_lodash","path","randomUUID","path","randomUUID","t","React","import_react","import_variant","import_lodash","path","randomUUID","path","randomUUID","t","React","modalTitle","import_react","import_variant","path","randomUUID","import_variant","path","randomUUID","t","React","import_react","import_variant","import_react","import_variant","import_lodash","path","randomUUID","path","randomUUID","import_react","import_variant","t","React","import_react","import_variant","t","React","import_react","t","React","t","React","folder","t","React","import_react","import_variant","import_react","import_variant","import_lodash","path","randomUUID","path","randomUUID","import_react","import_variant","t","React","pageId","import_react","import_variant","t","React","componentId","import_react","customGroupMessages","t","React","t","action","React","folder","t","React","import_react","import_variant","import_react","import_react","import_variant","import_lodash","path","randomUUID","path","randomUUID","t","uniqBy","placement","React","t","React","import_react","import_variant","path","path","t","React","import_react","import_variant","path","path","t","React","import_react","import_variant","join","path","join","path","join","t","join","React","t","React"]}
@@ -2,7 +2,7 @@ import { createRequire as _createRequire } from 'node:module';
2
2
  const require = _createRequire(import.meta.url);
3
3
  import {
4
4
  useTunnel
5
- } from "./chunk-TFBVDCPM.js";
5
+ } from "./chunk-Q2DE27PN.js";
6
6
  import "./chunk-ZR3N5INU.js";
7
7
  import {
8
8
  ComponentType2 as ComponentType,
@@ -12,7 +12,7 @@ import {
12
12
  useErrorReporter,
13
13
  useHttpClient,
14
14
  useProjectModel
15
- } from "./chunk-H27IPZI4.js";
15
+ } from "./chunk-PZFZCK52.js";
16
16
  import {
17
17
  Box_default,
18
18
  CliError,
@@ -25,7 +25,7 @@ import {
25
25
  useAsync,
26
26
  useTranslation,
27
27
  z
28
- } from "./chunk-OHC3CHII.js";
28
+ } from "./chunk-VVLESE4P.js";
29
29
  import {
30
30
  __toESM,
31
31
  init_esm_shims
@@ -281,4 +281,4 @@ var LogsCommand = ({ version }) => {
281
281
  export {
282
282
  LogsCommand
283
283
  };
284
- //# sourceMappingURL=LogsCommand-H7TEJMU7.js.map
284
+ //# sourceMappingURL=LogsCommand-727BQUJX.js.map
@@ -0,0 +1,23 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import {
4
+ PreviewCommand
5
+ } from "./chunk-PH2UYNX4.js";
6
+ import "./chunk-N4ETYB2B.js";
7
+ import "./chunk-IE6RONCN.js";
8
+ import "./chunk-A6GRJNEC.js";
9
+ import "./chunk-75XWKPKF.js";
10
+ import "./chunk-EAPMWJ4C.js";
11
+ import "./chunk-MRMIQOH4.js";
12
+ import "./chunk-Q2DE27PN.js";
13
+ import "./chunk-ZR3N5INU.js";
14
+ import "./chunk-4R3KUQGQ.js";
15
+ import "./chunk-G3X4DX2P.js";
16
+ import "./chunk-DQXLAGEX.js";
17
+ import "./chunk-PZFZCK52.js";
18
+ import "./chunk-VVLESE4P.js";
19
+ import "./chunk-PYIAC2GK.js";
20
+ export {
21
+ PreviewCommand
22
+ };
23
+ //# sourceMappingURL=PreviewCommand-RZYVEWL4.js.map