@wix/cli-app 1.1.28 → 1.1.30

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 (120) hide show
  1. package/build/CreateVersionCommand-NFKBKYN5.js +4 -0
  2. package/build/CreateVersionCommand-NFKBKYN5.js.map +1 -0
  3. package/build/DevCommand-CSOEONPY.js +4 -0
  4. package/build/DevCommand-CSOEONPY.js.map +1 -0
  5. package/build/GenerateCommand-LHTPLGNF.js +99 -0
  6. package/build/GenerateCommand-LHTPLGNF.js.map +1 -0
  7. package/build/LogsCommand-GUWLKR7V.js +4 -0
  8. package/build/{LogsCommand-EQAEPQSZ.js.map → LogsCommand-GUWLKR7V.js.map} +1 -1
  9. package/build/PreviewCommand-QAYLTUIX.js +4 -0
  10. package/build/ServeCommand-PHOYGKPH.js +4 -0
  11. package/build/{ServeCommand-CERFKHB5.js.map → ServeCommand-PHOYGKPH.js.map} +1 -1
  12. package/build/build-N3GC2AJW.js +4 -0
  13. package/build/build-N3GC2AJW.js.map +1 -0
  14. package/build/chunk-25SA6SIS.js +4 -0
  15. package/build/chunk-25SA6SIS.js.map +1 -0
  16. package/build/chunk-2T5VKPKE.js +4 -0
  17. package/build/chunk-2T5VKPKE.js.map +1 -0
  18. package/build/chunk-5CHNGZ6H.js +87 -0
  19. package/build/chunk-5CHNGZ6H.js.map +1 -0
  20. package/build/{chunk-VZGLJSBQ.js → chunk-5QLZSP2U.js} +3 -3
  21. package/build/{chunk-VZGLJSBQ.js.map → chunk-5QLZSP2U.js.map} +1 -1
  22. package/build/chunk-AS45KVJN.js +4 -0
  23. package/build/chunk-AS45KVJN.js.map +1 -0
  24. package/build/chunk-BD6TU75M.js +11 -0
  25. package/build/{chunk-CU75PFHB.js.map → chunk-BD6TU75M.js.map} +1 -1
  26. package/build/chunk-C47JQ5AQ.js +4 -0
  27. package/build/{chunk-PDISMWAG.js.map → chunk-C47JQ5AQ.js.map} +1 -1
  28. package/build/{chunk-3ZWMQHFG.js → chunk-E74YEX6I.js} +2 -2
  29. package/build/chunk-E74YEX6I.js.map +1 -0
  30. package/build/chunk-EF6HOPCP.js +4 -0
  31. package/build/chunk-EF6HOPCP.js.map +1 -0
  32. package/build/chunk-GFH6QCDG.js +4 -0
  33. package/build/{chunk-EUCZHHS6.js.map → chunk-GFH6QCDG.js.map} +1 -1
  34. package/build/chunk-GRIMGGL3.js +4 -0
  35. package/build/chunk-H6SYLT4B.js +4 -0
  36. package/build/chunk-H6SYLT4B.js.map +1 -0
  37. package/build/chunk-JUS465G2.js +19 -0
  38. package/build/chunk-JUS465G2.js.map +1 -0
  39. package/build/chunk-L3HVHNTA.js +4 -0
  40. package/build/{chunk-VDBUFPPQ.js.map → chunk-L3HVHNTA.js.map} +1 -1
  41. package/build/chunk-OR2CAHGP.js +4 -0
  42. package/build/{chunk-ME4U7FVN.js.map → chunk-OR2CAHGP.js.map} +1 -1
  43. package/build/chunk-PEDWEHXR.js +99 -0
  44. package/build/chunk-PEDWEHXR.js.map +1 -0
  45. package/build/{chunk-4VHD7OBV.js → chunk-Q5WWBUFO.js} +2 -2
  46. package/build/{chunk-RXKVYQVC.js → chunk-SQZ5XNZ2.js} +2 -2
  47. package/build/chunk-SQZ5XNZ2.js.map +1 -0
  48. package/build/{chunk-FKNQBY7X.js → chunk-TTWJWXLR.js} +2 -2
  49. package/build/{chunk-YF675DKE.js → chunk-VH4K3U5M.js} +2 -2
  50. package/build/chunk-WZE4EKUX.js +4 -0
  51. package/build/{chunk-2V3FQGOH.js.map → chunk-WZE4EKUX.js.map} +1 -1
  52. package/build/chunk-XQLBMLA6.js +10 -0
  53. package/build/chunk-XQLBMLA6.js.map +1 -0
  54. package/build/chunk-YLBOH353.js +21 -0
  55. package/build/chunk-YLBOH353.js.map +1 -0
  56. package/build/chunk-ZFOHUOI6.js +4 -0
  57. package/build/{chunk-ZTBNOJP4.js.map → chunk-ZFOHUOI6.js.map} +1 -1
  58. package/build/index.js +12 -12
  59. package/build/index.js.map +1 -1
  60. package/build/preview-QZCCFP23.js +4 -0
  61. package/build/preview-QZCCFP23.js.map +1 -0
  62. package/build/render-command-AOEWP2JP.js +4 -0
  63. package/build/{render-command-QZNKMGV3.js.map → render-command-AOEWP2JP.js.map} +1 -1
  64. package/package.json +11 -10
  65. package/templates/custom-element/dependencies.json +1 -1
  66. package/templates/dashboard-modal/dependencies.json +2 -1
  67. package/templates/dashboard-modal/files/modal.tsx.ejs +4 -2
  68. package/templates/dashboard-page/dependencies.json +3 -1
  69. package/templates/dashboard-page/files/page.tsx.ejs +9 -3
  70. package/templates/dashboard-plugin/dependencies.json +2 -1
  71. package/templates/dashboard-plugin/files/plugin.tsx.ejs +5 -2
  72. package/build/CreateVersionCommand-HYIOMYPS.js +0 -4
  73. package/build/CreateVersionCommand-HYIOMYPS.js.map +0 -1
  74. package/build/DevCommand-NXVNR5O7.js +0 -4
  75. package/build/DevCommand-NXVNR5O7.js.map +0 -1
  76. package/build/GenerateCommand-QZE7QTNX.js +0 -99
  77. package/build/GenerateCommand-QZE7QTNX.js.map +0 -1
  78. package/build/LogsCommand-EQAEPQSZ.js +0 -4
  79. package/build/PreviewCommand-DCQC2ZG7.js +0 -4
  80. package/build/ServeCommand-CERFKHB5.js +0 -4
  81. package/build/build-NH7ZWZTO.js +0 -4
  82. package/build/build-NH7ZWZTO.js.map +0 -1
  83. package/build/chunk-2V3FQGOH.js +0 -4
  84. package/build/chunk-3ZWMQHFG.js.map +0 -1
  85. package/build/chunk-5IJKDSHA.js +0 -4
  86. package/build/chunk-AHUF5IOW.js +0 -4
  87. package/build/chunk-AHUF5IOW.js.map +0 -1
  88. package/build/chunk-BSR2JA4S.js +0 -4
  89. package/build/chunk-BSR2JA4S.js.map +0 -1
  90. package/build/chunk-CGSGJIBN.js +0 -10
  91. package/build/chunk-CGSGJIBN.js.map +0 -1
  92. package/build/chunk-CU75PFHB.js +0 -11
  93. package/build/chunk-EUCZHHS6.js +0 -4
  94. package/build/chunk-HAYBGBEA.js +0 -6
  95. package/build/chunk-HAYBGBEA.js.map +0 -1
  96. package/build/chunk-KSQU6TME.js +0 -4
  97. package/build/chunk-KSQU6TME.js.map +0 -1
  98. package/build/chunk-ME4U7FVN.js +0 -4
  99. package/build/chunk-PDISMWAG.js +0 -4
  100. package/build/chunk-QVFKOTXV.js +0 -87
  101. package/build/chunk-QVFKOTXV.js.map +0 -1
  102. package/build/chunk-RXKVYQVC.js.map +0 -1
  103. package/build/chunk-SEGEUJOD.js +0 -99
  104. package/build/chunk-SEGEUJOD.js.map +0 -1
  105. package/build/chunk-VDBUFPPQ.js +0 -4
  106. package/build/chunk-XKB57U76.js +0 -4
  107. package/build/chunk-XKB57U76.js.map +0 -1
  108. package/build/chunk-XT25CBJM.js +0 -21
  109. package/build/chunk-XT25CBJM.js.map +0 -1
  110. package/build/chunk-ZF4WFDE4.js +0 -4
  111. package/build/chunk-ZF4WFDE4.js.map +0 -1
  112. package/build/chunk-ZTBNOJP4.js +0 -4
  113. package/build/preview-EV2USTXM.js +0 -4
  114. package/build/preview-EV2USTXM.js.map +0 -1
  115. package/build/render-command-QZNKMGV3.js +0 -4
  116. /package/build/{PreviewCommand-DCQC2ZG7.js.map → PreviewCommand-QAYLTUIX.js.map} +0 -0
  117. /package/build/{chunk-5IJKDSHA.js.map → chunk-GRIMGGL3.js.map} +0 -0
  118. /package/build/{chunk-4VHD7OBV.js.map → chunk-Q5WWBUFO.js.map} +0 -0
  119. /package/build/{chunk-FKNQBY7X.js.map → chunk-TTWJWXLR.js.map} +0 -0
  120. /package/build/{chunk-YF675DKE.js.map → chunk-VH4K3U5M.js.map} +0 -0
@@ -0,0 +1,4 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import{a as Q}from"./chunk-XQLBMLA6.js";import{a as Y}from"./chunk-GFH6QCDG.js";import{a as X}from"./chunk-C47JQ5AQ.js";import"./chunk-YLBOH353.js";import{A as O,B as R,b as d,e as f,t as H,w as q}from"./chunk-5CHNGZ6H.js";import{Aa as K,Ta as $,ta as U,za as J}from"./chunk-PEDWEHXR.js";import{a as k,b as B,d as E,e as S,q as t}from"./chunk-JUS465G2.js";import{e as y,h as l}from"./chunk-V4TR6DCM.js";l();l();var L=y(k(),1);var v=y(B(),1);l();var o=y(k(),1),A=y(B(),1);l();var c=y(k(),1),b=y(B(),1);import{createServer as le}from"node:http";l();var x=y(B(),1),se=t.any(),ie=t.enum(["info","error","warn","debug","log"]),me=t.object({message:t.array(se),level:ie,timestamp:t.number()}),ae=t.object({stack:t.string(),name:t.string(),message:t.string(),timestamp:t.number()}),ge=t.object({_type:t.literal("log"),exceptions:t.array(ae),logs:t.array(me)}).passthrough(),pe=t.object({_type:t.literal("session-timeout")}).passthrough(),ce=t.discriminatedUnion("_type",[ge,pe]),W=(0,x.variant)({Log:(0,x.fields)(),Exception:(0,x.fields)()}),P="/logs",Z=(e,r)=>{let n,a;if(e.method==="POST"&&e.url===P){let m="";e.on("data",i=>{m+=i.toString()}),e.on("end",()=>{let i;try{i=ce.parse(JSON.parse(m))}catch(g){return a(S.FailedToParseLog(),g,{body:m}),r.statusCode=400,r.end()}let s=[];i._type==="log"&&(s.push(...i.exceptions.map(g=>W.Exception(g))),s.push(...i.logs.map(g=>W.Log(g)))),(0,x.match)(i._type,{log:()=>{n(s)},"session-timeout":()=>{a(S.LogsConnectionTimeout(),{},{body:m}),r.statusCode=200,r.end()}}),r.statusCode=200,r.end()})}else r.statusCode=404,r.end("Not Found");let u={onLog:m=>(n=m,u),onError:m=>(a=m,u)};return u};var F=(0,b.variant)({Success:{},Connecting:{},Failure:{}}),ue=/([0-9a-f-]{36})/,ee=({onLog:e,version:r,appId:n})=>{let[a,u]=(0,c.useState)(F.Connecting()),[m,i]=(0,c.useState)(),[s,g]=(0,c.useState)(),[T,D]=(0,c.useState)(),{getAppByVersion:j}=Y(),N=Q(),_=X({type:"backoffice"}),h=(0,c.useMemo)(()=>le((p,C)=>{Z(p,C).onLog(e).onError((I,V,ne)=>{throw h.close(),new E({code:I,cause:V,info:ne})})}),[e]);(0,c.useEffect)(()=>(h?.listen(0,async()=>{let p=h.address().port;i(p)}),()=>{h?.listening&&h.close()}),[h]),(0,c.useEffect)(()=>{m&&N(m).then(({url:p})=>{D(p)}).catch(p=>{throw u(F.Failure()),new E({code:S.FailedToConnectToLogsService(),cause:p})})},[N,m]);let{status:z}=q(async()=>{let{data:p}=await j({appId:n,version:r});return p},[]);return(0,c.useEffect)(()=>{(0,b.match)(z,{Success:({result:p})=>{let C=p.components.find(V=>V.compType===U.TOPOLOGY),I=ue.exec(C?.compData.topology.topology.backendApiUrl??"");if(I)g(I[1]);else throw new E({code:S.FailedToGetLogsTopology()})},Error:()=>null,Loading:()=>{}})},[z]),(0,c.useEffect)(()=>{if(T&&s){let p={appId:n,deploymentId:s,destinationUrl:T+P};_.request(J(p)).then(()=>{u(F.Success())}).catch(C=>{throw u(F.Failure()),new E({code:S.FailedToConnectToLogsService(),cause:C})})}},[n,T,s,_]),(0,c.useEffect)(()=>()=>{a.type==="Success"&&s&&_.request(K({appId:n,deploymentId:s}))},[a,s,n,_]),a};l();var oe=y(k(),1);var G=({message:e,level:r})=>{let n="unknown";return typeof e=="object"?n=JSON.stringify(e):n=String(e),oe.default.createElement(f,{skin:r==="error"?"error":"standard"},n)};var te=({version:e,appId:r})=>{let{t:n}=R(),[a,u]=(0,o.useState)([]),m=ee({appId:r,version:e,onLog:(0,o.useCallback)(i=>{u(s=>[...s,...i])},[u])});return(0,A.match)(m,{Success:()=>o.default.createElement(d,{marginTop:1,marginBottom:1,flexDirection:"column"},o.default.createElement(d,{marginBottom:1,flexDirection:"column"},o.default.createElement(f,null,o.default.createElement(O,{i18nKey:"logs_command.listening_to_logs"})),o.default.createElement(f,null,o.default.createElement(O,{i18nKey:"logs_command.prod_env_logs",values:{version:e}}))),a.map((i,s)=>o.default.createElement(d,{key:s,flexDirection:"column"},o.default.createElement(d,{columnGap:1},o.default.createElement(d,{flexShrink:0},o.default.createElement(f,{skin:"secondary"},new Date(i.timestamp).toLocaleTimeString())),o.default.createElement(d,{columnGap:1},(0,A.match)(i,{Log:({message:g,level:T})=>g.map((D,j)=>o.default.createElement(G,{key:`${s}-${j}`,message:D,level:T})),Exception:({message:g})=>o.default.createElement(G,{key:s,message:g,level:"error"})}))),(0,A.match)(i,{Log:()=>null,Exception:({stack:g})=>o.default.createElement(f,{skin:"error"},g)})))),Connecting:()=>o.default.createElement(H,{text:n("logs_command.connecting")}),Failure:()=>null})};var re=(0,v.variant)({Valid:(0,v.fields)(),Error:(0,v.fields)()}),de=({version:e})=>e?re.Valid({version:e}):re.Error({message:L.default.createElement(O,{i18nKey:"logs_command.logs_without_version"})}),fe=({version:e})=>{let{model:r}=$(),n=(0,L.useMemo)(()=>de({version:e}),[e]);return(0,v.match)(n,{Valid:({version:a})=>L.default.createElement(te,{version:a,appId:r.config.appId}),Error:({message:a})=>L.default.createElement(d,{rowGap:1,marginTop:1,marginBottom:1,flexDirection:"column"},L.default.createElement(d,{gap:1},L.default.createElement(f,{skin:"error"},a)))})};export{fe as LogsCommand};
4
+ //# sourceMappingURL=LogsCommand-GUWLKR7V.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/LogsCommand/index.ts","../src/components/LogsCommand/LogsCommand.tsx","../src/components/LogsCommand/DisplayServerLogs.tsx","../src/components/LogsCommand/useLogsServer.ts","../src/components/LogsCommand/logsReqHandler.ts","../src/components/LogsCommand/ServerLogMessage.tsx"],"sourcesContent":["export { LogsCommand } from './LogsCommand.js';\n","import type { FC } from 'react';\nimport React, { useMemo } from 'react';\nimport { Trans } from '@wix/cli-i18n';\nimport { Box, Text } from '@wix/cli-ui-kit';\nimport { fields, match, variant } from 'variant';\nimport { DisplayServerLogs } from './DisplayServerLogs.js';\nimport { useProjectModel } from '../../model.js';\n\nconst ValidationResult = variant({\n Valid: fields<{ version: string }>(),\n Error: fields<{ message: React.JSX.Element }>(),\n});\n\nconst validateInput = ({ version }: { version?: string }) => {\n if (!version) {\n return ValidationResult.Error({\n message: <Trans i18nKey=\"logs_command.logs_without_version\" />,\n });\n }\n return ValidationResult.Valid({ version });\n};\n\nexport const LogsCommand: FC<{\n version?: string;\n}> = ({ version }) => {\n const { model } = useProjectModel();\n\n const validationResult = useMemo(() => validateInput({ version }), [version]);\n\n return match(validationResult, {\n Valid: ({ version }) => (\n <DisplayServerLogs version={version} appId={model.config.appId} />\n ),\n Error: ({ message }) => (\n <Box rowGap={1} marginTop={1} marginBottom={1} flexDirection=\"column\">\n <Box gap={1}>\n <Text skin=\"error\">{message}</Text>\n </Box>\n </Box>\n ),\n });\n};\n","import type { FC } from 'react';\nimport React, { useState, useCallback } from 'react';\nimport { match } from 'variant';\nimport { Spinner, Box, Text } from '@wix/cli-ui-kit';\nimport { useTranslation, Trans } from '@wix/cli-i18n';\nimport { useLogsServer } from './useLogsServer.js';\nimport type { AggregatedLog } from './logsReqHandler.js';\nimport { ServerLogMessage } from './ServerLogMessage.js';\n\nexport const DisplayServerLogs: FC<{\n version: string;\n appId: string;\n}> = ({ version, appId }) => {\n const { t } = useTranslation();\n const [logs, setLogs] = useState<AggregatedLog[]>([]);\n const serverResult = useLogsServer({\n appId,\n version,\n onLog: useCallback(\n (serverLogs) => {\n setLogs((prevLogs) => {\n return [...prevLogs, ...serverLogs];\n });\n },\n [setLogs]\n ),\n });\n\n return match(serverResult, {\n Success: () => (\n <Box marginTop={1} marginBottom={1} flexDirection=\"column\">\n <Box marginBottom={1} flexDirection=\"column\">\n <Text>\n <Trans i18nKey=\"logs_command.listening_to_logs\" />\n </Text>\n <Text>\n <Trans i18nKey=\"logs_command.prod_env_logs\" values={{ version }} />\n </Text>\n </Box>\n\n {logs.map((log, logIdx) => (\n <Box key={logIdx} flexDirection=\"column\">\n <Box columnGap={1}>\n <Box flexShrink={0}>\n <Text skin=\"secondary\">\n {new Date(log.timestamp).toLocaleTimeString()}\n </Text>\n </Box>\n <Box columnGap={1}>\n {match(log, {\n Log: ({ message, level }) =>\n message.map((msgItem, idx) => (\n <ServerLogMessage\n key={`${logIdx}-${idx}`}\n message={msgItem}\n level={level}\n />\n )),\n Exception: ({ message }) => (\n <ServerLogMessage\n key={logIdx}\n message={message}\n level=\"error\"\n />\n ),\n })}\n </Box>\n </Box>\n {match(log, {\n Log: () => null,\n Exception: ({ stack }) => <Text skin=\"error\">{stack}</Text>,\n })}\n </Box>\n ))}\n </Box>\n ),\n Connecting: () => <Spinner text={t('logs_command.connecting')} />,\n Failure: () => null,\n });\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { createServer } from 'node:http';\nimport type { AddressInfo } from 'node:net';\nimport { variant, type VariantOf, match } from 'variant';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { useAsync } from '@wix/cli-ui-kit';\nimport { useHttpClient } from '@wix/cli-http-client-react';\nimport {\n attachLogger,\n deattachLogger,\n} from '@wix/ambassador-ctp-app-cloud-backend-service-v1-app-cloud-backend-deployment/http';\nimport { useTunnel } from '@wix/cli-tunnel';\nimport {\n useDevCenterClient,\n ComponentType,\n type TopologyComponent,\n} from '@wix/dev-center-client';\nimport type { OnLog } from './logsReqHandler.js';\nimport { LOGS_ENDPOINT, logsReqHandler } from './logsReqHandler.js';\n\nconst ServerResult = variant({\n Success: {},\n Connecting: {},\n Failure: {},\n});\n\nconst deploymentIdRegex = /([0-9a-f-]{36})/;\n\nexport const useLogsServer = ({\n onLog,\n version,\n appId,\n}: {\n onLog: OnLog;\n version: string;\n appId: string;\n}) => {\n const [result, setResult] = useState<VariantOf<typeof ServerResult>>(\n ServerResult.Connecting()\n );\n const [localServerPort, setLocalServerPort] = useState<number>();\n const [deploymentId, setDeploymentId] = useState<string>();\n const [tunnelUrl, setTunnelUrl] = useState<string>();\n const { getAppByVersion } = useDevCenterClient();\n const createTunnelClient = useTunnel();\n const httpClient = useHttpClient({ type: 'backoffice' });\n\n const server = useMemo(() => {\n return createServer((req, res) => {\n logsReqHandler(req, res)\n .onLog(onLog)\n .onError((code, err, info) => {\n server.close();\n throw new CliError({ code, cause: err, info });\n });\n });\n }, [onLog]);\n\n useEffect(() => {\n server?.listen(0, async () => {\n const port = (server.address() as AddressInfo).port;\n setLocalServerPort(port);\n });\n return () => {\n if (server?.listening) {\n server.close();\n }\n };\n }, [server]);\n\n useEffect(() => {\n if (localServerPort) {\n createTunnelClient(localServerPort)\n .then(({ url }) => {\n setTunnelUrl(url);\n })\n .catch((err) => {\n setResult(ServerResult.Failure());\n throw new CliError({\n code: CliErrorCode.FailedToConnectToLogsService(),\n cause: err,\n });\n });\n }\n }, [createTunnelClient, localServerPort]);\n\n const { status } = useAsync(async () => {\n const { data } = await getAppByVersion({ appId, version });\n return data;\n }, []);\n\n useEffect(() => {\n match(status, {\n Success: ({ result }) => {\n const topologyComponent = result.components.find(\n (component): component is TopologyComponent => {\n return component.compType === ComponentType.TOPOLOGY;\n }\n );\n const match = deploymentIdRegex.exec(\n topologyComponent?.compData.topology.topology.backendApiUrl ?? ''\n );\n if (match) {\n setDeploymentId(match[1]);\n } else {\n throw new CliError({\n code: CliErrorCode.FailedToGetLogsTopology(),\n });\n }\n },\n Error: () => null,\n Loading: () => {},\n });\n }, [status]);\n\n useEffect(() => {\n if (tunnelUrl && deploymentId) {\n const loggerReq = {\n appId,\n deploymentId,\n destinationUrl: tunnelUrl + LOGS_ENDPOINT,\n };\n httpClient\n .request(attachLogger(loggerReq))\n .then(() => {\n setResult(ServerResult.Success());\n })\n .catch((err) => {\n setResult(ServerResult.Failure());\n throw new CliError({\n code: CliErrorCode.FailedToConnectToLogsService(),\n cause: err,\n });\n });\n }\n }, [appId, tunnelUrl, deploymentId, httpClient]);\n\n useEffect(() => {\n return () => {\n // Detach the logger depending on the `result` state.\n // This is why I place it in a separate `useEffect` from the one that attaches the logger.\n // Otherwise, it will cause a circular dependency.\n if (result.type === 'Success' && deploymentId) {\n httpClient.request(\n deattachLogger({\n appId,\n deploymentId,\n })\n );\n }\n };\n }, [result, deploymentId, appId, httpClient]);\n\n return result;\n};\n","import type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { CliErrorCodeType } from '@wix/cli-error';\nimport { CliErrorCode } from '@wix/cli-error';\nimport { z } from 'zod';\nimport { variant, fields, match, type VariantOf } from 'variant';\n\nconst LogMessageSchema = z.any();\nexport type LogMessage = z.infer<typeof LogMessageSchema>;\n\nconst LogMessageLevelSchema = z.enum(['info', 'error', 'warn', 'debug', 'log']);\nexport type LogMessageLevel = z.infer<typeof LogMessageLevelSchema>;\n\nconst LogItemSchema = z.object({\n message: z.array(LogMessageSchema),\n level: LogMessageLevelSchema,\n timestamp: z.number(),\n});\n\ntype LogItem = z.infer<typeof LogItemSchema>;\n\nconst ExceptionItemSchema = z.object({\n stack: z.string(),\n name: z.string(),\n message: z.string(),\n timestamp: z.number(),\n});\n\ntype ExceptionItem = z.infer<typeof ExceptionItemSchema>;\n\nconst LogResponseSchema = z\n .object({\n _type: z.literal('log'),\n exceptions: z.array(ExceptionItemSchema),\n logs: z.array(LogItemSchema),\n })\n .passthrough();\n\nconst SessionTimeoutResponseSchema = z\n .object({\n _type: z.literal('session-timeout'),\n })\n .passthrough();\n\nconst ServerLogResponseSchema = z.discriminatedUnion('_type', [\n LogResponseSchema,\n SessionTimeoutResponseSchema,\n]);\n\ntype ServerLogResponse = z.infer<typeof ServerLogResponseSchema>;\n\nconst AggregatedLog = variant({\n Log: fields<LogItem>(),\n Exception: fields<ExceptionItem>(),\n});\nexport type AggregatedLog = VariantOf<typeof AggregatedLog>;\n\nexport type OnLog = (data: AggregatedLog[]) => void;\nexport type OnError = (\n errType: CliErrorCodeType,\n err: unknown,\n info?: Record<string, unknown>\n) => void;\n\nexport const LOGS_ENDPOINT = '/logs';\n\nexport const logsReqHandler = (req: IncomingMessage, res: ServerResponse) => {\n let onLog: OnLog;\n let onError: OnError;\n\n if (req.method === 'POST' && req.url === LOGS_ENDPOINT) {\n let body = '';\n\n req.on('data', (chunk) => {\n body += chunk.toString();\n });\n\n req.on('end', () => {\n let parsedBody: ServerLogResponse;\n try {\n parsedBody = ServerLogResponseSchema.parse(JSON.parse(body));\n } catch (err) {\n onError(CliErrorCode.FailedToParseLog(), err, { body });\n res.statusCode = 400;\n return res.end();\n }\n\n const resultLogs: AggregatedLog[] = [];\n\n if (parsedBody._type === 'log') {\n resultLogs.push(\n ...parsedBody.exceptions.map((exception) =>\n AggregatedLog.Exception(exception)\n )\n );\n resultLogs.push(\n ...parsedBody.logs.map((log) => AggregatedLog.Log(log))\n );\n }\n\n match(parsedBody._type, {\n log: () => {\n onLog(resultLogs);\n },\n 'session-timeout': () => {\n onError(CliErrorCode.LogsConnectionTimeout(), {}, { body });\n res.statusCode = 200;\n res.end();\n },\n });\n\n res.statusCode = 200;\n res.end();\n });\n } else {\n res.statusCode = 404;\n res.end('Not Found');\n }\n\n const api = {\n onLog: (callback: OnLog) => {\n onLog = callback;\n return api;\n },\n onError: (callback: OnError) => {\n onError = callback;\n return api;\n },\n };\n\n return api;\n};\n","import React, { type FC } from 'react';\nimport { Text } from '@wix/cli-ui-kit';\nimport type { LogMessage, LogMessageLevel } from './logsReqHandler.js';\n\nexport const ServerLogMessage: FC<{\n message: LogMessage;\n level: LogMessageLevel;\n}> = ({ message, level }) => {\n let content = 'unknown';\n\n if (typeof message === 'object') {\n content = JSON.stringify(message);\n } else {\n content = String(message);\n }\n\n return <Text skin={level === 'error' ? 'error' : 'standard'}>{content}</Text>;\n};\n"],"mappings":"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","names":["init_esm_shims","init_esm_shims","React","useMemo","import_variant","init_esm_shims","import_variant","React","useState","useCallback","init_esm_shims","import_variant","useEffect","useMemo","useState","createServer","init_esm_shims","import_variant","LogMessageSchema","z","LogMessageLevelSchema","LogItemSchema","ExceptionItemSchema","LogResponseSchema","SessionTimeoutResponseSchema","ServerLogResponseSchema","AggregatedLog","LOGS_ENDPOINT","logsReqHandler","req","res","onLog","onError","body","chunk","parsedBody","err","CliErrorCode","resultLogs","exception","log","api","callback","ServerResult","deploymentIdRegex","useLogsServer","onLog","version","appId","result","setResult","useState","localServerPort","setLocalServerPort","deploymentId","setDeploymentId","tunnelUrl","setTunnelUrl","getAppByVersion","useDevCenterClient","createTunnelClient","useTunnel","httpClient","useHttpClient","server","useMemo","createServer","req","res","logsReqHandler","code","err","info","CliError","useEffect","port","url","CliErrorCode","status","useAsync","data","topologyComponent","component","ComponentType","match","loggerReq","LOGS_ENDPOINT","attachLogger","deattachLogger","init_esm_shims","React","ServerLogMessage","message","level","content","React","Text","DisplayServerLogs","version","appId","t","useTranslation","logs","setLogs","useState","serverResult","useLogsServer","useCallback","serverLogs","prevLogs","React","Box_default","Text","Trans","log","logIdx","message","level","msgItem","idx","ServerLogMessage","stack","Spinner","ValidationResult","validateInput","version","React","Trans","LogsCommand","model","useProjectModel","validationResult","useMemo","DisplayServerLogs","message","Box_default","Text"]}
1
+ {"version":3,"sources":["../src/components/LogsCommand/index.ts","../src/components/LogsCommand/LogsCommand.tsx","../src/components/LogsCommand/DisplayServerLogs.tsx","../src/components/LogsCommand/useLogsServer.ts","../src/components/LogsCommand/logsReqHandler.ts","../src/components/LogsCommand/ServerLogMessage.tsx"],"sourcesContent":["export { LogsCommand } from './LogsCommand.js';\n","import type { FC } from 'react';\nimport React, { useMemo } from 'react';\nimport { Trans } from '@wix/cli-i18n';\nimport { Box, Text } from '@wix/cli-ui-kit';\nimport { fields, match, variant } from 'variant';\nimport { DisplayServerLogs } from './DisplayServerLogs.js';\nimport { useProjectModel } from '../../model.js';\n\nconst ValidationResult = variant({\n Valid: fields<{ version: string }>(),\n Error: fields<{ message: React.JSX.Element }>(),\n});\n\nconst validateInput = ({ version }: { version?: string }) => {\n if (!version) {\n return ValidationResult.Error({\n message: <Trans i18nKey=\"logs_command.logs_without_version\" />,\n });\n }\n return ValidationResult.Valid({ version });\n};\n\nexport const LogsCommand: FC<{\n version?: string;\n}> = ({ version }) => {\n const { model } = useProjectModel();\n\n const validationResult = useMemo(() => validateInput({ version }), [version]);\n\n return match(validationResult, {\n Valid: ({ version }) => (\n <DisplayServerLogs version={version} appId={model.config.appId} />\n ),\n Error: ({ message }) => (\n <Box rowGap={1} marginTop={1} marginBottom={1} flexDirection=\"column\">\n <Box gap={1}>\n <Text skin=\"error\">{message}</Text>\n </Box>\n </Box>\n ),\n });\n};\n","import type { FC } from 'react';\nimport React, { useState, useCallback } from 'react';\nimport { match } from 'variant';\nimport { Spinner, Box, Text } from '@wix/cli-ui-kit';\nimport { useTranslation, Trans } from '@wix/cli-i18n';\nimport { useLogsServer } from './useLogsServer.js';\nimport type { AggregatedLog } from './logsReqHandler.js';\nimport { ServerLogMessage } from './ServerLogMessage.js';\n\nexport const DisplayServerLogs: FC<{\n version: string;\n appId: string;\n}> = ({ version, appId }) => {\n const { t } = useTranslation();\n const [logs, setLogs] = useState<AggregatedLog[]>([]);\n const serverResult = useLogsServer({\n appId,\n version,\n onLog: useCallback(\n (serverLogs) => {\n setLogs((prevLogs) => {\n return [...prevLogs, ...serverLogs];\n });\n },\n [setLogs]\n ),\n });\n\n return match(serverResult, {\n Success: () => (\n <Box marginTop={1} marginBottom={1} flexDirection=\"column\">\n <Box marginBottom={1} flexDirection=\"column\">\n <Text>\n <Trans i18nKey=\"logs_command.listening_to_logs\" />\n </Text>\n <Text>\n <Trans i18nKey=\"logs_command.prod_env_logs\" values={{ version }} />\n </Text>\n </Box>\n\n {logs.map((log, logIdx) => (\n <Box key={logIdx} flexDirection=\"column\">\n <Box columnGap={1}>\n <Box flexShrink={0}>\n <Text skin=\"secondary\">\n {new Date(log.timestamp).toLocaleTimeString()}\n </Text>\n </Box>\n <Box columnGap={1}>\n {match(log, {\n Log: ({ message, level }) =>\n message.map((msgItem, idx) => (\n <ServerLogMessage\n key={`${logIdx}-${idx}`}\n message={msgItem}\n level={level}\n />\n )),\n Exception: ({ message }) => (\n <ServerLogMessage\n key={logIdx}\n message={message}\n level=\"error\"\n />\n ),\n })}\n </Box>\n </Box>\n {match(log, {\n Log: () => null,\n Exception: ({ stack }) => <Text skin=\"error\">{stack}</Text>,\n })}\n </Box>\n ))}\n </Box>\n ),\n Connecting: () => <Spinner text={t('logs_command.connecting')} />,\n Failure: () => null,\n });\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { createServer } from 'node:http';\nimport type { AddressInfo } from 'node:net';\nimport { variant, type VariantOf, match } from 'variant';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { useAsync } from '@wix/cli-ui-kit';\nimport { useHttpClient } from '@wix/cli-http-client-react';\nimport {\n attachLogger,\n deattachLogger,\n} from '@wix/ambassador-ctp-app-cloud-backend-service-v1-app-cloud-backend-deployment/http';\nimport { useTunnel } from '@wix/cli-tunnel';\nimport {\n useDevCenterClient,\n ComponentType,\n type TopologyComponent,\n} from '@wix/dev-center-client';\nimport type { OnLog } from './logsReqHandler.js';\nimport { LOGS_ENDPOINT, logsReqHandler } from './logsReqHandler.js';\n\nconst ServerResult = variant({\n Success: {},\n Connecting: {},\n Failure: {},\n});\n\nconst deploymentIdRegex = /([0-9a-f-]{36})/;\n\nexport const useLogsServer = ({\n onLog,\n version,\n appId,\n}: {\n onLog: OnLog;\n version: string;\n appId: string;\n}) => {\n const [result, setResult] = useState<VariantOf<typeof ServerResult>>(\n ServerResult.Connecting()\n );\n const [localServerPort, setLocalServerPort] = useState<number>();\n const [deploymentId, setDeploymentId] = useState<string>();\n const [tunnelUrl, setTunnelUrl] = useState<string>();\n const { getAppByVersion } = useDevCenterClient();\n const createTunnelClient = useTunnel();\n const httpClient = useHttpClient({ type: 'backoffice' });\n\n const server = useMemo(() => {\n return createServer((req, res) => {\n logsReqHandler(req, res)\n .onLog(onLog)\n .onError((code, err, info) => {\n server.close();\n throw new CliError({ code, cause: err, info });\n });\n });\n }, [onLog]);\n\n useEffect(() => {\n server?.listen(0, async () => {\n const port = (server.address() as AddressInfo).port;\n setLocalServerPort(port);\n });\n return () => {\n if (server?.listening) {\n server.close();\n }\n };\n }, [server]);\n\n useEffect(() => {\n if (localServerPort) {\n createTunnelClient(localServerPort)\n .then(({ url }) => {\n setTunnelUrl(url);\n })\n .catch((err) => {\n setResult(ServerResult.Failure());\n throw new CliError({\n code: CliErrorCode.FailedToConnectToLogsService(),\n cause: err,\n });\n });\n }\n }, [createTunnelClient, localServerPort]);\n\n const { status } = useAsync(async () => {\n const { data } = await getAppByVersion({ appId, version });\n return data;\n }, []);\n\n useEffect(() => {\n match(status, {\n Success: ({ result }) => {\n const topologyComponent = result.components.find(\n (component): component is TopologyComponent => {\n return component.compType === ComponentType.TOPOLOGY;\n }\n );\n const match = deploymentIdRegex.exec(\n topologyComponent?.compData.topology.topology.backendApiUrl ?? ''\n );\n if (match) {\n setDeploymentId(match[1]);\n } else {\n throw new CliError({\n code: CliErrorCode.FailedToGetLogsTopology(),\n });\n }\n },\n Error: () => null,\n Loading: () => {},\n });\n }, [status]);\n\n useEffect(() => {\n if (tunnelUrl && deploymentId) {\n const loggerReq = {\n appId,\n deploymentId,\n destinationUrl: tunnelUrl + LOGS_ENDPOINT,\n };\n httpClient\n .request(attachLogger(loggerReq))\n .then(() => {\n setResult(ServerResult.Success());\n })\n .catch((err) => {\n setResult(ServerResult.Failure());\n throw new CliError({\n code: CliErrorCode.FailedToConnectToLogsService(),\n cause: err,\n });\n });\n }\n }, [appId, tunnelUrl, deploymentId, httpClient]);\n\n useEffect(() => {\n return () => {\n // Detach the logger depending on the `result` state.\n // This is why I place it in a separate `useEffect` from the one that attaches the logger.\n // Otherwise, it will cause a circular dependency.\n if (result.type === 'Success' && deploymentId) {\n httpClient.request(\n deattachLogger({\n appId,\n deploymentId,\n })\n );\n }\n };\n }, [result, deploymentId, appId, httpClient]);\n\n return result;\n};\n","import type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { CliErrorCodeType } from '@wix/cli-error';\nimport { CliErrorCode } from '@wix/cli-error';\nimport { z } from 'zod';\nimport { variant, fields, match, type VariantOf } from 'variant';\n\nconst LogMessageSchema = z.any();\nexport type LogMessage = z.infer<typeof LogMessageSchema>;\n\nconst LogMessageLevelSchema = z.enum(['info', 'error', 'warn', 'debug', 'log']);\nexport type LogMessageLevel = z.infer<typeof LogMessageLevelSchema>;\n\nconst LogItemSchema = z.object({\n message: z.array(LogMessageSchema),\n level: LogMessageLevelSchema,\n timestamp: z.number(),\n});\n\ntype LogItem = z.infer<typeof LogItemSchema>;\n\nconst ExceptionItemSchema = z.object({\n stack: z.string(),\n name: z.string(),\n message: z.string(),\n timestamp: z.number(),\n});\n\ntype ExceptionItem = z.infer<typeof ExceptionItemSchema>;\n\nconst LogResponseSchema = z\n .object({\n _type: z.literal('log'),\n exceptions: z.array(ExceptionItemSchema),\n logs: z.array(LogItemSchema),\n })\n .passthrough();\n\nconst SessionTimeoutResponseSchema = z\n .object({\n _type: z.literal('session-timeout'),\n })\n .passthrough();\n\nconst ServerLogResponseSchema = z.discriminatedUnion('_type', [\n LogResponseSchema,\n SessionTimeoutResponseSchema,\n]);\n\ntype ServerLogResponse = z.infer<typeof ServerLogResponseSchema>;\n\nconst AggregatedLog = variant({\n Log: fields<LogItem>(),\n Exception: fields<ExceptionItem>(),\n});\nexport type AggregatedLog = VariantOf<typeof AggregatedLog>;\n\nexport type OnLog = (data: AggregatedLog[]) => void;\nexport type OnError = (\n errType: CliErrorCodeType,\n err: unknown,\n info?: Record<string, unknown>\n) => void;\n\nexport const LOGS_ENDPOINT = '/logs';\n\nexport const logsReqHandler = (req: IncomingMessage, res: ServerResponse) => {\n let onLog: OnLog;\n let onError: OnError;\n\n if (req.method === 'POST' && req.url === LOGS_ENDPOINT) {\n let body = '';\n\n req.on('data', (chunk) => {\n body += chunk.toString();\n });\n\n req.on('end', () => {\n let parsedBody: ServerLogResponse;\n try {\n parsedBody = ServerLogResponseSchema.parse(JSON.parse(body));\n } catch (err) {\n onError(CliErrorCode.FailedToParseLog(), err, { body });\n res.statusCode = 400;\n return res.end();\n }\n\n const resultLogs: AggregatedLog[] = [];\n\n if (parsedBody._type === 'log') {\n resultLogs.push(\n ...parsedBody.exceptions.map((exception) =>\n AggregatedLog.Exception(exception)\n )\n );\n resultLogs.push(\n ...parsedBody.logs.map((log) => AggregatedLog.Log(log))\n );\n }\n\n match(parsedBody._type, {\n log: () => {\n onLog(resultLogs);\n },\n 'session-timeout': () => {\n onError(CliErrorCode.LogsConnectionTimeout(), {}, { body });\n res.statusCode = 200;\n res.end();\n },\n });\n\n res.statusCode = 200;\n res.end();\n });\n } else {\n res.statusCode = 404;\n res.end('Not Found');\n }\n\n const api = {\n onLog: (callback: OnLog) => {\n onLog = callback;\n return api;\n },\n onError: (callback: OnError) => {\n onError = callback;\n return api;\n },\n };\n\n return api;\n};\n","import React, { type FC } from 'react';\nimport { Text } from '@wix/cli-ui-kit';\nimport type { LogMessage, LogMessageLevel } from './logsReqHandler.js';\n\nexport const ServerLogMessage: FC<{\n message: LogMessage;\n level: LogMessageLevel;\n}> = ({ message, level }) => {\n let content = 'unknown';\n\n if (typeof message === 'object') {\n content = JSON.stringify(message);\n } else {\n content = String(message);\n }\n\n return <Text skin={level === 'error' ? 'error' : 'standard'}>{content}</Text>;\n};\n"],"mappings":"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","names":["init_esm_shims","init_esm_shims","import_react","import_variant","init_esm_shims","import_react","import_variant","init_esm_shims","import_react","import_variant","createServer","init_esm_shims","import_variant","LogMessageSchema","z","LogMessageLevelSchema","LogItemSchema","ExceptionItemSchema","LogResponseSchema","SessionTimeoutResponseSchema","ServerLogResponseSchema","AggregatedLog","LOGS_ENDPOINT","logsReqHandler","req","res","onLog","onError","body","chunk","parsedBody","err","CliErrorCode","resultLogs","exception","log","api","callback","ServerResult","deploymentIdRegex","useLogsServer","onLog","version","appId","result","setResult","localServerPort","setLocalServerPort","deploymentId","setDeploymentId","tunnelUrl","setTunnelUrl","getAppByVersion","useDevCenterClient","createTunnelClient","useTunnel","httpClient","useHttpClient","server","createServer","req","res","logsReqHandler","code","err","info","CliError","port","url","CliErrorCode","status","useAsync","data","topologyComponent","component","ComponentType","match","loggerReq","LOGS_ENDPOINT","attachLogger","deattachLogger","init_esm_shims","import_react","ServerLogMessage","message","level","content","React","Text","DisplayServerLogs","version","appId","t","useTranslation","logs","setLogs","serverResult","useLogsServer","serverLogs","prevLogs","React","Box_default","Text","Trans","log","logIdx","message","level","msgItem","idx","ServerLogMessage","stack","Spinner","ValidationResult","validateInput","version","React","Trans","LogsCommand","model","useProjectModel","validationResult","DisplayServerLogs","message","Box_default","Text"]}
@@ -0,0 +1,4 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import{a}from"./chunk-AS45KVJN.js";import"./chunk-L3HVHNTA.js";import"./chunk-QZS4ARDD.js";import"./chunk-WZE4EKUX.js";import"./chunk-2T5VKPKE.js";import"./chunk-EF6HOPCP.js";import"./chunk-GFH6QCDG.js";import"./chunk-BD6TU75M.js";import"./chunk-TTWJWXLR.js";import"./chunk-VH4K3U5M.js";import"./chunk-ZFOHUOI6.js";import"./chunk-C47JQ5AQ.js";import"./chunk-YLBOH353.js";import"./chunk-5CHNGZ6H.js";import"./chunk-Q5WWBUFO.js";import"./chunk-PEDWEHXR.js";import"./chunk-JUS465G2.js";import"./chunk-V4TR6DCM.js";export{a as PreviewCommand};
4
+ //# sourceMappingURL=PreviewCommand-QAYLTUIX.js.map
@@ -0,0 +1,4 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import{a as I,b as A}from"./chunk-5QLZSP2U.js";import{a as k,b as K}from"./chunk-L3HVHNTA.js";import{b as M}from"./chunk-WZE4EKUX.js";import"./chunk-EF6HOPCP.js";import"./chunk-GFH6QCDG.js";import"./chunk-BD6TU75M.js";import{b as h}from"./chunk-VH4K3U5M.js";import{g as j,h as U,i as b}from"./chunk-ZFOHUOI6.js";import"./chunk-C47JQ5AQ.js";import"./chunk-YLBOH353.js";import{A as a,B as _,b as i,e as P,f as w,g as E,i as C,s as y,t as T,w as B}from"./chunk-5CHNGZ6H.js";import{b as F}from"./chunk-Q5WWBUFO.js";import{Ta as c}from"./chunk-PEDWEHXR.js";import{a as u,b as G}from"./chunk-JUS465G2.js";import{e as s,h as r}from"./chunk-V4TR6DCM.js";r();r();var l=s(u(),1);r();var t=s(u(),1),V=s(G(),1);r();var m=s(u(),1);import{preview as H}from"vite";function N(){let o=(0,m.useRef)(),{model:n}=c();return(0,m.useEffect)(()=>()=>{o.current?.httpServer.close()},[]),(0,m.useCallback)(async()=>{let v=await H(await A(n,{type:"build"}));return o.current=v,I(v)},[n])}var D=(0,t.createContext)(null),x=({children:o})=>{let{model:n}=c(),{t:v}=_(),O=j(),W=N(),{status:q}=B(async()=>{await k(n.projectFolder);let p=await W(),S=await h(n.projectFolder),z=F(S,p);return{armTag:await O.createAppRelease(z,n.config.projectId),serverUrl:p}},[]);return(0,V.match)(q,{Error:()=>null,Loading:()=>t.default.createElement(T,{text:v("serve_command.starting_serve_environment")}),Success:({result:{armTag:p,serverUrl:S}})=>t.default.createElement(D.Provider,{value:{serverUrl:S}},t.default.createElement(U,{armTag:p},o))})};function g(){let o=(0,t.useContext)(D);if(o===null)throw new Error("useServeEnvironment() cannot be used without an <ServeEnvironmentProvider>");return o}r();var e=s(u(),1);function L(){let{site:o}=b(),{serverUrl:n}=g();return e.default.createElement(i,{flexDirection:"column"},e.default.createElement(i,{gap:1},e.default.createElement(P,{skin:"success"},e.default.createElement(C,null)),e.default.createElement(a,{i18nKey:"serve_command.starting_serve_environment_success",components:[e.default.createElement(y,{url:n})]})),e.default.createElement(i,{gap:1},e.default.createElement(w,null),e.default.createElement(a,{i18nKey:"serve_command.production_build"})),e.default.createElement(i,{gap:1,paddingTop:1,paddingBottom:1},e.default.createElement(E,null),e.default.createElement(a,{i18nKey:"general.dev_site.current",values:{name:o.displayName}})),e.default.createElement(i,{paddingBottom:1,flexDirection:"column"},e.default.createElement(K,null)))}var J=()=>l.default.createElement(M,null,l.default.createElement(x,null,l.default.createElement(L,null)));export{J as ServeCommand,x as ServeEnvironmentProvider,g as useServeEnvironment};
4
+ //# sourceMappingURL=ServeCommand-PHOYGKPH.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ServeCommand/index.ts","../src/components/ServeCommand/ServeCommand.tsx","../src/components/ServeCommand/ServeEnvironment.tsx","../src/components/ServeCommand/hooks/usePreviewServer.ts","../src/components/ServeCommand/ServeCommandScreen.tsx"],"sourcesContent":["export { ServeCommand } from './ServeCommand.js';\nexport {\n ServeEnvironmentProvider,\n useServeEnvironment,\n} from './ServeEnvironment.js';\n","import React, { type FC } from 'react';\nimport { SiteIdProvider } from '../../site-id/SiteIdProvider.js';\nimport { ServeEnvironmentProvider } from './ServeEnvironment.js';\nimport { ServeCommandScreen } from './ServeCommandScreen.js';\n\nexport const ServeCommand: FC = () => {\n return (\n <SiteIdProvider>\n <ServeEnvironmentProvider>\n <ServeCommandScreen />\n </ServeEnvironmentProvider>\n </SiteIdProvider>\n );\n};\n","import React, {\n type FC,\n type ReactNode,\n createContext,\n useContext,\n} from 'react';\nimport { match } from 'variant';\nimport { updateAppManifestWithBaseUrl } from '@wix/cli-app-manifest';\nimport { useARMClient } from '@wix/arm-client';\nimport { Spinner, useAsync } from '@wix/cli-ui-kit';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { ArmTagProvider } from '../../context/armTag.js';\nimport { readAppManifestFile } from '../../app-manifest/file.js';\nimport { assertBuildOutputExists } from '../../files/assert-build-output-exists.js';\nimport { usePreviewServer } from './hooks/usePreviewServer.js';\nimport { useProjectModel } from '../../model.js';\n\ntype ServeEnvironment = {\n serverUrl: string;\n};\n\nconst ServeEnvironmentContext = createContext<ServeEnvironment | null>(null);\n\nexport const ServeEnvironmentProvider: FC<{\n children: ReactNode;\n}> = ({ children }) => {\n const { model } = useProjectModel();\n const { t } = useTranslation();\n const arm = useARMClient();\n const createPreviewServer = usePreviewServer();\n\n const { status } = useAsync(async () => {\n await assertBuildOutputExists(model.projectFolder);\n const serverUrl = await createPreviewServer();\n\n const manifest = await readAppManifestFile(model.projectFolder);\n const updatedManifest = updateAppManifestWithBaseUrl(manifest, serverUrl);\n\n const armTag = await arm.createAppRelease(\n updatedManifest,\n model.config.projectId\n );\n\n return { armTag, serverUrl };\n }, []);\n\n return match(status, {\n Error: () => null,\n Loading: () => (\n <Spinner text={t('serve_command.starting_serve_environment')}></Spinner>\n ),\n Success: ({ result: { armTag, serverUrl } }) => (\n <ServeEnvironmentContext.Provider value={{ serverUrl }}>\n <ArmTagProvider armTag={armTag}>{children}</ArmTagProvider>\n </ServeEnvironmentContext.Provider>\n ),\n });\n};\n\nexport function useServeEnvironment(): ServeEnvironment {\n const context = useContext(ServeEnvironmentContext);\n if (context === null) {\n throw new Error(\n 'useServeEnvironment() cannot be used without an <ServeEnvironmentProvider>'\n );\n }\n return context;\n}\n","import { preview, type PreviewServer } from 'vite';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { useProjectModel } from '../../../model.js';\nimport { getClientViteConfig } from '../../../vite/index.js';\nimport { getViteServerUrl } from '../../../vite/vite-server-url.js';\nimport { ConfigType } from '../../../vite/vite-config-options.js';\n\nexport function usePreviewServer() {\n const previewServerRef = useRef<PreviewServer>();\n const { model } = useProjectModel();\n\n useEffect(() => {\n return () => {\n previewServerRef.current?.httpServer.close();\n };\n }, []);\n\n return useCallback(async () => {\n const previewServer = await preview(\n await getClientViteConfig(model, { type: ConfigType.build })\n );\n\n previewServerRef.current = previewServer;\n\n return getViteServerUrl(previewServer);\n }, [model]);\n}\n","import {\n Box,\n InfoIcon,\n Link,\n PointerIcon,\n SuccessIcon,\n Text,\n} from '@wix/cli-ui-kit';\nimport React from 'react';\nimport { Trans } from '@wix/cli-i18n';\nimport { useSiteId } from '../../site-id/useSiteId.js';\nimport { useServeEnvironment } from './ServeEnvironment.js';\nimport { PlatformViewer } from '../Platform/PlatformViewer.js';\n\nexport function ServeCommandScreen() {\n const { site } = useSiteId();\n const { serverUrl } = useServeEnvironment();\n\n return (\n <Box flexDirection=\"column\">\n <Box gap={1}>\n <Text skin=\"success\">\n <SuccessIcon />\n </Text>\n <Trans\n i18nKey=\"serve_command.starting_serve_environment_success\"\n components={[<Link url={serverUrl} />]}\n />\n </Box>\n <Box gap={1}>\n <InfoIcon />\n <Trans i18nKey=\"serve_command.production_build\" />\n </Box>\n <Box gap={1} paddingTop={1} paddingBottom={1}>\n <PointerIcon />\n <Trans\n i18nKey=\"general.dev_site.current\"\n values={{ name: site.displayName }}\n />\n </Box>\n <Box paddingBottom={1} flexDirection=\"column\">\n <PlatformViewer />\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","names":["init_esm_shims","init_esm_shims","React","init_esm_shims","import_variant","React","createContext","useContext","init_esm_shims","preview","useCallback","useEffect","useRef","usePreviewServer","previewServerRef","useRef","model","useProjectModel","useEffect","useCallback","previewServer","preview","getViteConfig","getViteServerUrl","ServeEnvironmentContext","createContext","ServeEnvironmentProvider","children","model","useProjectModel","t","useTranslation","arm","useARMClient","createPreviewServer","usePreviewServer","status","useAsync","assertBuildOutputExists","serverUrl","manifest","readAppManifestFile","updatedManifest","updateAppManifestWithBaseUrl","React","Spinner","armTag","ArmTagProvider","useServeEnvironment","context","useContext","init_esm_shims","React","ServeCommandScreen","site","useSiteId","serverUrl","useServeEnvironment","React","Box_default","Text","SuccessIcon","Trans","Link","InfoIcon","PointerIcon","PlatformViewer","ServeCommand","React","SiteIdProvider","ServeEnvironmentProvider","ServeCommandScreen"]}
1
+ {"version":3,"sources":["../src/components/ServeCommand/index.ts","../src/components/ServeCommand/ServeCommand.tsx","../src/components/ServeCommand/ServeEnvironment.tsx","../src/components/ServeCommand/hooks/usePreviewServer.ts","../src/components/ServeCommand/ServeCommandScreen.tsx"],"sourcesContent":["export { ServeCommand } from './ServeCommand.js';\nexport {\n ServeEnvironmentProvider,\n useServeEnvironment,\n} from './ServeEnvironment.js';\n","import React, { type FC } from 'react';\nimport { SiteIdProvider } from '../../site-id/SiteIdProvider.js';\nimport { ServeEnvironmentProvider } from './ServeEnvironment.js';\nimport { ServeCommandScreen } from './ServeCommandScreen.js';\n\nexport const ServeCommand: FC = () => {\n return (\n <SiteIdProvider>\n <ServeEnvironmentProvider>\n <ServeCommandScreen />\n </ServeEnvironmentProvider>\n </SiteIdProvider>\n );\n};\n","import React, {\n type FC,\n type ReactNode,\n createContext,\n useContext,\n} from 'react';\nimport { match } from 'variant';\nimport { updateAppManifestWithBaseUrl } from '@wix/cli-app-manifest';\nimport { useARMClient } from '@wix/arm-client';\nimport { Spinner, useAsync } from '@wix/cli-ui-kit';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { ArmTagProvider } from '../../context/armTag.js';\nimport { readAppManifestFile } from '../../app-manifest/file.js';\nimport { assertBuildOutputExists } from '../../files/assert-build-output-exists.js';\nimport { usePreviewServer } from './hooks/usePreviewServer.js';\nimport { useProjectModel } from '../../model.js';\n\ntype ServeEnvironment = {\n serverUrl: string;\n};\n\nconst ServeEnvironmentContext = createContext<ServeEnvironment | null>(null);\n\nexport const ServeEnvironmentProvider: FC<{\n children: ReactNode;\n}> = ({ children }) => {\n const { model } = useProjectModel();\n const { t } = useTranslation();\n const arm = useARMClient();\n const createPreviewServer = usePreviewServer();\n\n const { status } = useAsync(async () => {\n await assertBuildOutputExists(model.projectFolder);\n const serverUrl = await createPreviewServer();\n\n const manifest = await readAppManifestFile(model.projectFolder);\n const updatedManifest = updateAppManifestWithBaseUrl(manifest, serverUrl);\n\n const armTag = await arm.createAppRelease(\n updatedManifest,\n model.config.projectId\n );\n\n return { armTag, serverUrl };\n }, []);\n\n return match(status, {\n Error: () => null,\n Loading: () => (\n <Spinner text={t('serve_command.starting_serve_environment')}></Spinner>\n ),\n Success: ({ result: { armTag, serverUrl } }) => (\n <ServeEnvironmentContext.Provider value={{ serverUrl }}>\n <ArmTagProvider armTag={armTag}>{children}</ArmTagProvider>\n </ServeEnvironmentContext.Provider>\n ),\n });\n};\n\nexport function useServeEnvironment(): ServeEnvironment {\n const context = useContext(ServeEnvironmentContext);\n if (context === null) {\n throw new Error(\n 'useServeEnvironment() cannot be used without an <ServeEnvironmentProvider>'\n );\n }\n return context;\n}\n","import { preview, type PreviewServer } from 'vite';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { useProjectModel } from '../../../model.js';\nimport { getClientViteConfig } from '../../../vite/index.js';\nimport { getViteServerUrl } from '../../../vite/vite-server-url.js';\nimport { ConfigType } from '../../../vite/vite-config-options.js';\n\nexport function usePreviewServer() {\n const previewServerRef = useRef<PreviewServer>();\n const { model } = useProjectModel();\n\n useEffect(() => {\n return () => {\n previewServerRef.current?.httpServer.close();\n };\n }, []);\n\n return useCallback(async () => {\n const previewServer = await preview(\n await getClientViteConfig(model, { type: ConfigType.build })\n );\n\n previewServerRef.current = previewServer;\n\n return getViteServerUrl(previewServer);\n }, [model]);\n}\n","import {\n Box,\n InfoIcon,\n Link,\n PointerIcon,\n SuccessIcon,\n Text,\n} from '@wix/cli-ui-kit';\nimport React from 'react';\nimport { Trans } from '@wix/cli-i18n';\nimport { useSiteId } from '../../site-id/useSiteId.js';\nimport { useServeEnvironment } from './ServeEnvironment.js';\nimport { PlatformViewer } from '../Platform/PlatformViewer.js';\n\nexport function ServeCommandScreen() {\n const { site } = useSiteId();\n const { serverUrl } = useServeEnvironment();\n\n return (\n <Box flexDirection=\"column\">\n <Box gap={1}>\n <Text skin=\"success\">\n <SuccessIcon />\n </Text>\n <Trans\n i18nKey=\"serve_command.starting_serve_environment_success\"\n components={[<Link url={serverUrl} />]}\n />\n </Box>\n <Box gap={1}>\n <InfoIcon />\n <Trans i18nKey=\"serve_command.production_build\" />\n </Box>\n <Box gap={1} paddingTop={1} paddingBottom={1}>\n <PointerIcon />\n <Trans\n i18nKey=\"general.dev_site.current\"\n values={{ name: site.displayName }}\n />\n </Box>\n <Box paddingBottom={1} flexDirection=\"column\">\n <PlatformViewer />\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","names":["init_esm_shims","init_esm_shims","import_react","init_esm_shims","import_react","import_variant","init_esm_shims","import_react","preview","usePreviewServer","previewServerRef","model","useProjectModel","previewServer","preview","getViteConfig","getViteServerUrl","ServeEnvironmentContext","ServeEnvironmentProvider","children","model","useProjectModel","t","useTranslation","arm","useARMClient","createPreviewServer","usePreviewServer","status","useAsync","assertBuildOutputExists","serverUrl","manifest","readAppManifestFile","updatedManifest","updateAppManifestWithBaseUrl","React","Spinner","armTag","ArmTagProvider","useServeEnvironment","context","init_esm_shims","import_react","ServeCommandScreen","site","useSiteId","serverUrl","useServeEnvironment","React","Box_default","Text","SuccessIcon","Trans","Link","InfoIcon","PointerIcon","PlatformViewer","ServeCommand","React","SiteIdProvider","ServeEnvironmentProvider","ServeCommandScreen"]}
@@ -0,0 +1,4 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import{a as s,c as u,d as f}from"./chunk-25SA6SIS.js";import{b as m,c as d}from"./chunk-5QLZSP2U.js";import{a as l}from"./chunk-VH4K3U5M.js";import"./chunk-Q5WWBUFO.js";import{Ca as c,Ra as a,aa as n}from"./chunk-PEDWEHXR.js";import{b as E,d as t,e as i}from"./chunk-JUS465G2.js";import{e as g,h as p}from"./chunk-V4TR6DCM.js";p();import{cwd as b}from"node:process";import{build as w}from"vite";var r=g(E(),1);async function M(){let o=await a(b());if(o.components.length===0)throw new t({code:i.NoExtensionsFound()});s(o.components);let C=o.components.filter(e=>(0,r.isType)(e,n.Api)||(0,r.isType)(e,n.Event)||(0,r.isType)(e,n.ServicePlugin)).length>0?await w(await d(o,{type:"build"},{appSecret:"__APP_SECRET__",webhooksPublicKey:"__WEBHOOKS_PUBLIC_KEY__"})).catch(e=>{throw new t({code:i.FailedToBuildApp({cause:e}),cause:e})}):void 0,_=await w(await m(o,{type:"build"},{baseBackendUrl:c})).catch(e=>{throw new t({code:i.FailedToBuildApp({cause:e}),cause:e})}),B=await u({appId:o.config.appId,components:o.components,sentryDSN:o.config.sentryDSN,componentSourceBuilder:f({model:o,clientBuildOutput:_,backendBuildOutput:C})});await l({projectFolder:o.projectFolder,manifest:B})}export{M as build};
4
+ //# sourceMappingURL=build-N3GC2AJW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/build.ts"],"sourcesContent":["import { cwd } from 'node:process';\nimport { build as viteBuild } from 'vite';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { isType } from 'variant';\nimport { loadProjectModel } from './model.js';\nimport { getBackendViteConfig, getClientViteConfig } from './vite/index.js';\nimport { writeAppManifestFile } from './app-manifest/file.js';\nimport { createAppManifest } from './app-manifest/create.js';\nimport { getComponentSourceBuilder } from './app-manifest/component-source.js';\nimport { ConfigType } from './vite/vite-config-options.js';\nimport { validateComponents } from './app-manifest/validate.js';\nimport { API_BASEURL_PLACEHOLDER } from './hosting/upload-application.js';\nimport { DevCenterComponent } from './dev-center/components/dev-center-component.js';\n\nexport async function build() {\n const projectModel = await loadProjectModel(cwd());\n\n // Validate before building the project, to fail fast in case of a validation issue\n if (projectModel.components.length === 0) {\n throw new CliError({\n code: CliErrorCode.NoExtensionsFound(),\n });\n }\n\n validateComponents(projectModel.components);\n\n const backendComponents = projectModel.components.filter(\n (component) =>\n isType(component, DevCenterComponent.Api) ||\n isType(component, DevCenterComponent.Event) ||\n isType(component, DevCenterComponent.ServicePlugin)\n );\n\n const backendBuildOutput =\n backendComponents.length > 0\n ? await viteBuild(\n await getBackendViteConfig(\n projectModel,\n { type: ConfigType.build },\n {\n appSecret: '__APP_SECRET__',\n webhooksPublicKey: '__WEBHOOKS_PUBLIC_KEY__',\n }\n )\n ).catch((e) => {\n throw new CliError({\n code: CliErrorCode.FailedToBuildApp({ cause: e }),\n cause: e,\n });\n })\n : undefined;\n\n const clientBuildOutput = await viteBuild(\n await getClientViteConfig(\n projectModel,\n {\n type: ConfigType.build,\n },\n {\n baseBackendUrl: API_BASEURL_PLACEHOLDER,\n }\n )\n ).catch((e) => {\n throw new CliError({\n code: CliErrorCode.FailedToBuildApp({ cause: e }),\n cause: e,\n });\n });\n\n const manifest = await createAppManifest({\n appId: projectModel.config.appId,\n components: projectModel.components,\n sentryDSN: projectModel.config.sentryDSN,\n componentSourceBuilder: getComponentSourceBuilder({\n model: projectModel,\n clientBuildOutput,\n backendBuildOutput,\n }),\n });\n\n await writeAppManifestFile({\n projectFolder: projectModel.projectFolder,\n manifest,\n });\n}\n"],"mappings":";;uUAAAA,IAAA,OAAS,OAAAC,MAAW,eACpB,OAAS,SAASC,MAAiB,OAEnC,IAAAC,EAAuB,SAWvB,eAAsBC,GAAQ,CAC5B,IAAMC,EAAe,MAAMC,EAAiBC,EAAI,CAAC,EAGjD,GAAIF,EAAa,WAAW,SAAW,EACrC,MAAM,IAAIG,EAAS,CACjB,KAAMC,EAAa,kBAAkB,CACvC,CAAC,EAGHC,EAAmBL,EAAa,UAAU,EAS1C,IAAMM,EAPoBN,EAAa,WAAW,OAC/CO,MACC,UAAOA,EAAWC,EAAmB,GAAG,MACxC,UAAOD,EAAWC,EAAmB,KAAK,MAC1C,UAAOD,EAAWC,EAAmB,aAAa,CACtD,EAGoB,OAAS,EACvB,MAAMC,EACJ,MAAMC,EACJV,EACA,CAAE,YAAuB,EACzB,CACE,UAAW,iBACX,kBAAmB,yBACrB,CACF,CACF,EAAE,MAAO,GAAM,CACb,MAAM,IAAIG,EAAS,CACjB,KAAMC,EAAa,iBAAiB,CAAE,MAAO,CAAE,CAAC,EAChD,MAAO,CACT,CAAC,CACH,CAAC,EACD,OAEAO,EAAoB,MAAMF,EAC9B,MAAMC,EACJV,EACA,CACE,YACF,EACA,CACE,eAAgBY,CAClB,CACF,CACF,EAAE,MAAO,GAAM,CACb,MAAM,IAAIT,EAAS,CACjB,KAAMC,EAAa,iBAAiB,CAAE,MAAO,CAAE,CAAC,EAChD,MAAO,CACT,CAAC,CACH,CAAC,EAEKS,EAAW,MAAMC,EAAkB,CACvC,MAAOd,EAAa,OAAO,MAC3B,WAAYA,EAAa,WACzB,UAAWA,EAAa,OAAO,UAC/B,uBAAwBe,EAA0B,CAChD,MAAOf,EACP,kBAAAW,EACA,mBAAAL,CACF,CAAC,CACH,CAAC,EAED,MAAMU,EAAqB,CACzB,cAAehB,EAAa,cAC5B,SAAAa,CACF,CAAC,CACH","names":["init_esm_shims","cwd","viteBuild","import_variant","build","projectModel","loadProjectModel","cwd","CliError","CliErrorCode","validateComponents","backendBuildOutput","component","DevCenterComponent","viteBuild","getViteConfig","clientBuildOutput","API_BASEURL_PLACEHOLDER","manifest","createAppManifest","getComponentSourceBuilder","writeAppManifestFile"]}
@@ -0,0 +1,4 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import{$ as N,B as g,C as A,D as I,E as w,Ha as O,Ja as U,T,aa as h,ba as f,da as x,fa as k,r as P,v as p,w as B,x as M}from"./chunk-PEDWEHXR.js";import{b as y,d as u,e as c}from"./chunk-JUS465G2.js";import{e as E,h as l}from"./chunk-V4TR6DCM.js";l();var C=E(y(),1);import{randomUUID as V}from"node:crypto";var _=t=>{let r=new Map;[...t.filter(i=>!(0,C.isType)(i,h.Api)&&!(0,C.isType)(i,h.Event)&&!(0,C.isType)(i,h.ServicePlugin))].sort((i,d)=>i.id.localeCompare(d.id)).forEach(i=>{let d=r.get(i.id)??[];d.push(i),r.set(i.id,d)});let e=new Map;if(r.forEach((i,d)=>{i.length>1&&e.set(d,i)}),e.size)throw new u({code:c.DuplicateComponentIdsError({issues:Array.from(e.entries()).map(([i,d])=>({id:i,components:d.map(n=>(0,C.match)(n,{DashboardPage:({title:s,relativePath:m})=>({name:s,type:"page",path:f(m,"json")}),DashboardPlugin:({title:s,relativePath:m})=>({name:s,type:"plugin",path:f(m,"json")}),DashboardMenuPlugin:({title:s,relativePath:m})=>({name:s,type:"menu-plugin",path:m}),DashboardModal:({title:s,relativePath:m})=>({name:s,type:"modal",path:f(m,"json")}),DashboardSidebarCategory:({label:s})=>({name:s,type:"sidebar-category",path:P}),EmbeddedScript:({relativePath:s})=>({name:s,type:"embedded-script",path:f(s,"json")}),CustomElement:({name:s,relativePath:m})=>({name:s,type:"custom-element",path:f(m,"json")}),Topology:({name:s})=>({name:s,type:"topology",path:""})})).sort((n,s)=>n.name.localeCompare(s.name)),suggestedId:V()}))})})};l();var R=E(y(),1);import{randomUUID as G}from"node:crypto";function L(t){return t!=null&&t!==!1}var H=(t,r)=>{if(t.experiments)return{appId:r,componentId:t.id,spec:t.experiments.enabledBy,variantValue:"true"}},K=t=>({compId:t.id,compType:p.CUSTOM_ELEMENT_WIDGET,compName:t.name,compData:{customElementWidget:{base:{name:t.name},widgetData:{tagName:t.tagName,scriptType:I.ES_MODULE,scriptUrl:"https://dummy.web.com"},size:{width:{defaultWidth:t.width.defaultWidth,allowStretch:t.width.allowStretch,stretchByDefault:t.width.stretchByDefault},height:{defaultHeight:t.height.defaultHeight,heightMode:w.FIXED}},installation:{base:{autoAdd:t.installation?.autoAddToSite,essential:t.installation?.essential,maxInstances:t.installation?.essential?1:0},widget:{region:B.BODY}},behaviors:{},dependencies:t.dependencies}}});async function pe({appId:t,components:r,sentryDSN:a,componentSourceBuilder:o}){return _(r),{appId:t,components:(await Promise.all(r.map((0,R.match)({DashboardPage:async e=>{let i=e.sentryDSN??a;return{compId:e.id,compType:p.BACK_OFFICE_PAGE,compData:{backOfficePage:{hostingPlatform:g.BUSINESS_MANAGER,fullPage:e.sidebar?.whenActive?.hideSidebar,hideInSidebar:e.sidebar?.disabled,priority:e.sidebar?.priority,routePath:e.route.slice(1),title:e.title,pageCategoryId:e.sidebar?.categoryId,activeSidebarPageId:e.sidebar?.whenActive?.selectedPageId,requiredPermission:e.requiredPermission,previousRoutePaths:e.additionalRoutes,...i?{errorReporting:{url:i}}:void 0,...await o(e)}},compName:e.title,experiment:H(e,t)}},DashboardPlugin:async e=>({compId:e.id,compType:p.BACK_OFFICE_EXTENSION_WIDGET,compData:{backOfficeExtensionWidget:{hostingPlatform:g.BUSINESS_MANAGER,extends:e.extends,title:e.title,requiredPermission:e.requiredPermission,width:e.width,height:e.height,...await o(e),...e.sentryDSN?{errorReporting:{url:e.sentryDSN}}:void 0}},compName:e.title}),DashboardMenuPlugin:async e=>({compId:e.id,compType:p.BACK_OFFICE_EXTENSION_MENU_ITEM,compData:{backOfficeExtensionMenuItem:{hostingPlatform:g.BUSINESS_MANAGER,id:e.id,title:e.title,subtitle:e.subtitle,iconKey:e.iconKey,extends:e.extends,action:e.action,requiredPermission:e.requiredPermission,...e.sentryDSN?{errorReporting:{url:e.sentryDSN}}:void 0}},compName:e.title}),DashboardModal:async e=>({compId:e.id,compType:p.BACK_OFFICE_MODAL,compData:{backOfficeModal:{hostingPlatform:g.BUSINESS_MANAGER,title:e.title,requiredPermission:e.requiredPermission,width:e.width,height:e.height,...await o(e),...e.sentryDSN?{errorReporting:{url:e.sentryDSN}}:void 0}},compName:e.title}),DashboardSidebarCategory:async e=>({compId:e.id,compType:p.BACK_OFFICE_SIDEBAR_CATEGORY,compData:{backOfficeSidebarCategory:{hostingPlatform:g.BUSINESS_MANAGER,title:e.label,priority:e.priority}},compName:e.label}),EmbeddedScript:async e=>({compId:e.id,compType:p.EMBEDDED_SCRIPT,compName:e.name,compData:{embeddedScriptComponentData:{name:e.name,pages:M.NONE_PAGES,placement:e.placement,connectArticleUrl:"",embedCategory:e.scriptType,dependencies:e.dependencies,loadOnce:!0,allowedForFreeSite:!0,...await o(e)}}}),CustomElement:async e=>{let{scriptUrl:i,settingsUrl:d}=await o(e),n=K(e);return{...n,compData:{customElementWidget:{...n.compData.customElementWidget,widgetData:{...n.compData.customElementWidget.widgetData,scriptUrl:i},behaviors:{...n.compData.customElementWidget.behaviors,...e.relativePanelPath?{settings:{settingsUrl:d}}:{}}}}}},Topology:async e=>({compId:e.id,compType:p.TOPOLOGY,compName:e.name,compData:{topology:{topology:{backendApiUrl:e.backendApiUrl}}}}),Api:()=>null,Event:async e=>(await o(e)).map(({webhookSlug:d})=>({compName:d,compId:G(),compType:p.WEBHOOK,compData:{webhook:{callbackUrl:"__WEBHOOKS_URL_PLACEHOLDER__",webhookSlug:d}}})),ServicePlugin:()=>null})))).filter(L).flat()}}l();var W=E(y(),1);import{join as q}from"node:path";l();function F(t){if(!("output"in t||Array.isArray(t)))throw new u({code:c.InvalidViteBuildOutput()});return Array.isArray(t)?t.flatMap(o=>o.output):t.output}function v(t,r){let o=F(t).find(e=>e.type==="chunk"&&e.facadeModuleId===r);if(!o)throw new u({code:c.ViteModuleBundleNotFound()});return o.fileName}function j(t,r){let o=F(t).find(e=>e.fileName===r);if(!o||!("source"in o))throw new u({code:c.ViteFileNotFoundInOutput({fileName:r})});return o.source.toString()}async function $(t,r){let a=new URL(t.relativePath,r).href;return await fetch(a).then(e=>e.text())}async function X(t,r){let a=new URL("__get-registered-events",r).href,o=await fetch(a);return o.ok?(await o.json())[`/${t.relativePath}`]:[]}async function Y(t,r){let a=T(r.projectFolder),o=q(a,"getRegisteredEvents.mjs"),{getRegisteredEvents:e}=await import(o);return(await e())[`/${t.relativePath}`]}var b=(t,r,a)=>{if(!r.config.trusted)return{iframeUrl:x(t.id)};let o=k(t.id),e=a?v(a,o):`/@id/${o}?import`;return{scriptAsset:{exportedName:t.id,containerId:r.config.appId,url:e,scriptType:A.MODULE}}},z=async(t,r,a)=>({template:r?j(r,t.relativePath):await $(t,a)}),J=async(t,r,a,o)=>{let e=a?await Y(t,r):await X(t,o);return(await Promise.all(e?.map(N))).map(d=>({webhookSlug:d}))},Q=(t,r)=>{let a=U(t.id);return{scriptUrl:r?v(r,a):`/@id/${a}?import`,settingsUrl:O(t.id)}};function ve({model:t,clientBuildOutput:r,backendBuildOutput:a,clientDevServerUrl:o,backendDevServerUrl:e}){return async i=>(0,W.match)(i,{EmbeddedScript:n=>z(n,r,o),DashboardSidebarCategory:()=>{},CustomElement:n=>Q(n,r),DashboardPage:n=>b(n,t,r),DashboardPlugin:n=>b(n,t,r),DashboardModal:n=>b(n,t,r),DashboardMenuPlugin:()=>{},Topology:()=>{},Api:()=>{},Event:n=>J(n,t,a,e),ServicePlugin:()=>{}})}export{_ as a,K as b,pe as c,ve as d};
4
+ //# sourceMappingURL=chunk-25SA6SIS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app-manifest/validate.ts","../src/app-manifest/create.ts","../src/app-manifest/component-source.ts","../src/app-manifest/build-output-data-extractor.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { isType, match } from 'variant';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { CONFIG_FILENAME } from '@wix/cli-core-definitions';\nimport { replaceExtension } from '../dev-center/components/path.js';\nimport type { BackendComponent } from '../dev-center/components/dev-center-component.js';\nimport { DevCenterComponent } from '../dev-center/components/dev-center-component.js';\n\ntype NonBackendComponent = Exclude<DevCenterComponent, BackendComponent>;\n\nexport const validateComponents = (components: DevCenterComponent[]) => {\n const devCenterComponentsToIdMap: Map<string, NonBackendComponent[]> =\n new Map();\n\n const componentsWithConfig = components.filter(\n (component): component is NonBackendComponent =>\n !isType(component, DevCenterComponent.Api) &&\n !isType(component, DevCenterComponent.Event) &&\n !isType(component, DevCenterComponent.ServicePlugin)\n );\n\n const sortedComponentsById = [...componentsWithConfig].sort((a, b) =>\n a.id.localeCompare(b.id)\n );\n sortedComponentsById.forEach((component) => {\n const componentList = devCenterComponentsToIdMap.get(component.id) ?? [];\n componentList.push(component);\n devCenterComponentsToIdMap.set(component.id, componentList);\n });\n\n const devCenterComponentsWithSameIDMap: Map<string, NonBackendComponent[]> =\n new Map();\n\n devCenterComponentsToIdMap.forEach((devCenterComponents, key) => {\n if (devCenterComponents.length > 1) {\n devCenterComponentsWithSameIDMap.set(key, devCenterComponents);\n }\n });\n\n if (devCenterComponentsWithSameIDMap.size) {\n throw new CliError({\n code: CliErrorCode.DuplicateComponentIdsError({\n issues: Array.from(devCenterComponentsWithSameIDMap.entries()).map(\n ([id, devCenterComponents]) => {\n return {\n id,\n components: devCenterComponents\n .map((component) =>\n match(component, {\n DashboardPage: ({ title, relativePath }) => ({\n name: title,\n type: 'page' as const,\n path: replaceExtension(relativePath, 'json'),\n }),\n DashboardPlugin: ({ title, relativePath }) => ({\n name: title,\n type: 'plugin' as const,\n path: replaceExtension(relativePath, 'json'),\n }),\n DashboardMenuPlugin: ({ title, relativePath }) => ({\n name: title,\n type: 'menu-plugin' as const,\n // We can use the relative path since the path already points to the menu config json\n path: relativePath,\n }),\n DashboardModal: ({ title, relativePath }) => ({\n name: title,\n type: 'modal' as const,\n path: replaceExtension(relativePath, 'json'),\n }),\n DashboardSidebarCategory: ({ label }) => ({\n name: label,\n type: 'sidebar-category' as const,\n path: CONFIG_FILENAME,\n }),\n EmbeddedScript: ({ relativePath }) => ({\n name: relativePath,\n type: 'embedded-script' as const,\n path: replaceExtension(relativePath, 'json'),\n }),\n CustomElement: ({ name, relativePath }) => ({\n name,\n type: 'custom-element' as const,\n path: replaceExtension(relativePath, 'json'),\n }),\n Topology: ({ name }) => ({\n name,\n type: 'topology' as const,\n // Topology component doesn't have a config file\n path: '',\n }),\n })\n )\n .sort((a, b) => a.name.localeCompare(b.name)),\n suggestedId: randomUUID(),\n };\n }\n ),\n }),\n });\n }\n};\n","import {\n ComponentType,\n BackOfficeHostingPlatforms,\n EmbeddedScriptPages,\n HeightMode,\n RegionType,\n CustomElementScriptType,\n} from '@wix/ambassador-devcenter-components-v1-component/types';\nimport { match } from 'variant';\nimport { randomUUID } from 'node:crypto';\nimport type {\n AppManifest,\n ComponentExperiment,\n BackofficePage,\n BackofficeExtensionWidget,\n BackofficeExtensionMenuItem,\n BackofficeSideCategory,\n BackofficeModal,\n EmbeddedScript,\n CustomElement,\n Webhook,\n Topology,\n} from '@wix/cli-app-manifest';\nimport { validateComponents } from './validate.js';\nimport type { DevCenterComponent } from '../dev-center/components/dev-center-component.js';\nimport type { ComponentSourceBuilder } from './component-source.js';\n\ntype CreateAppManifestParams = {\n appId: string;\n backendServerUrl?: string;\n components: DevCenterComponent[];\n sentryDSN?: string;\n componentSourceBuilder: ComponentSourceBuilder;\n};\n\nfunction isTruthy<T>(x: T | undefined | null | false): x is T {\n return x !== undefined && x !== null && x !== false;\n}\n\nconst getExperiment = (\n component: DevCenterComponent<'DashboardPage'>,\n appId: string\n): ComponentExperiment => {\n if (component.experiments) {\n return {\n appId,\n componentId: component.id,\n spec: component.experiments.enabledBy,\n variantValue: 'true',\n };\n }\n return undefined;\n};\n\nexport const createCustomElementConfig = (\n component: DevCenterComponent<'CustomElement'>\n): CustomElement => {\n return {\n compId: component.id,\n compType: ComponentType.CUSTOM_ELEMENT_WIDGET as const,\n compName: component.name,\n compData: {\n customElementWidget: {\n base: {\n name: component.name,\n },\n widgetData: {\n tagName: component.tagName,\n scriptType: CustomElementScriptType.ES_MODULE,\n scriptUrl: 'https://dummy.web.com',\n },\n size: {\n width: {\n defaultWidth: component.width.defaultWidth,\n allowStretch: component.width.allowStretch,\n stretchByDefault: component.width.stretchByDefault,\n },\n height: {\n defaultHeight: component.height.defaultHeight,\n heightMode: HeightMode.FIXED,\n },\n },\n installation: {\n base: {\n autoAdd: component.installation?.autoAddToSite,\n essential: component.installation?.essential,\n maxInstances: component.installation?.essential ? 1 : 0,\n },\n widget: { region: RegionType.BODY },\n },\n behaviors: {},\n dependencies: component.dependencies,\n },\n },\n };\n};\n\nexport async function createAppManifest({\n appId,\n components,\n sentryDSN,\n componentSourceBuilder,\n}: CreateAppManifestParams): Promise<AppManifest> {\n validateComponents(components);\n\n return {\n appId,\n components: (\n await Promise.all(\n components.map(\n match({\n DashboardPage: async (component): Promise<BackofficePage> => {\n const componentSentryDSN = component.sentryDSN ?? sentryDSN;\n return {\n compId: component.id,\n compType: ComponentType.BACK_OFFICE_PAGE as const,\n compData: {\n backOfficePage: {\n hostingPlatform:\n BackOfficeHostingPlatforms.BUSINESS_MANAGER,\n fullPage: component.sidebar?.whenActive?.hideSidebar,\n hideInSidebar: component.sidebar?.disabled,\n priority: component.sidebar?.priority,\n routePath: component.route.slice(1),\n title: component.title,\n pageCategoryId: component.sidebar?.categoryId,\n activeSidebarPageId:\n component.sidebar?.whenActive?.selectedPageId,\n requiredPermission: component.requiredPermission,\n previousRoutePaths: component.additionalRoutes,\n ...(componentSentryDSN\n ? { errorReporting: { url: componentSentryDSN } }\n : undefined),\n ...(await componentSourceBuilder(component)),\n },\n },\n compName: component.title,\n experiment: getExperiment(component, appId),\n };\n },\n DashboardPlugin: async (\n component\n ): Promise<BackofficeExtensionWidget> => ({\n compId: component.id,\n compType: ComponentType.BACK_OFFICE_EXTENSION_WIDGET as const,\n compData: {\n backOfficeExtensionWidget: {\n hostingPlatform: BackOfficeHostingPlatforms.BUSINESS_MANAGER,\n extends: component.extends,\n title: component.title,\n requiredPermission: component.requiredPermission,\n width: component.width,\n height: component.height,\n ...(await componentSourceBuilder(component)),\n ...(component.sentryDSN\n ? { errorReporting: { url: component.sentryDSN } }\n : undefined),\n },\n },\n compName: component.title,\n }),\n DashboardMenuPlugin: async (\n component\n ): Promise<BackofficeExtensionMenuItem> => ({\n compId: component.id,\n compType: ComponentType.BACK_OFFICE_EXTENSION_MENU_ITEM as const,\n compData: {\n backOfficeExtensionMenuItem: {\n hostingPlatform: BackOfficeHostingPlatforms.BUSINESS_MANAGER,\n id: component.id,\n title: component.title,\n subtitle: component.subtitle,\n iconKey: component.iconKey,\n extends: component.extends,\n action: component.action,\n requiredPermission: component.requiredPermission,\n ...(component.sentryDSN\n ? { errorReporting: { url: component.sentryDSN } }\n : undefined),\n },\n },\n compName: component.title,\n }),\n DashboardModal: async (component): Promise<BackofficeModal> => ({\n compId: component.id,\n compType: ComponentType.BACK_OFFICE_MODAL as const,\n compData: {\n backOfficeModal: {\n hostingPlatform: BackOfficeHostingPlatforms.BUSINESS_MANAGER,\n title: component.title,\n requiredPermission: component.requiredPermission,\n width: component.width,\n height: component.height,\n ...(await componentSourceBuilder(component)),\n ...(component.sentryDSN\n ? { errorReporting: { url: component.sentryDSN } }\n : undefined),\n },\n },\n compName: component.title,\n }),\n DashboardSidebarCategory: async (\n component\n ): Promise<BackofficeSideCategory> => ({\n compId: component.id,\n compType: ComponentType.BACK_OFFICE_SIDEBAR_CATEGORY as const,\n compData: {\n backOfficeSidebarCategory: {\n hostingPlatform: BackOfficeHostingPlatforms.BUSINESS_MANAGER,\n title: component.label,\n priority: component.priority,\n },\n },\n compName: component.label,\n }),\n EmbeddedScript: async (component): Promise<EmbeddedScript> => ({\n compId: component.id,\n compType: ComponentType.EMBEDDED_SCRIPT as const,\n compName: component.name,\n compData: {\n embeddedScriptComponentData: {\n name: component.name,\n pages: EmbeddedScriptPages.NONE_PAGES,\n placement: component.placement,\n connectArticleUrl: '',\n embedCategory: component.scriptType,\n dependencies: component.dependencies,\n loadOnce: true,\n allowedForFreeSite: true,\n ...(await componentSourceBuilder(component)),\n },\n },\n }),\n CustomElement: async (component): Promise<CustomElement> => {\n const { scriptUrl, settingsUrl } = await componentSourceBuilder(\n component\n );\n\n const basicConfig = createCustomElementConfig(component);\n\n return {\n ...basicConfig,\n compData: {\n customElementWidget: {\n ...basicConfig.compData.customElementWidget,\n widgetData: {\n ...basicConfig.compData.customElementWidget.widgetData,\n scriptUrl,\n },\n behaviors: {\n ...basicConfig.compData.customElementWidget.behaviors,\n ...(component.relativePanelPath\n ? { settings: { settingsUrl } }\n : {}),\n },\n },\n },\n };\n },\n Topology: async (component): Promise<Topology> => {\n return {\n compId: component.id,\n compType: ComponentType.TOPOLOGY as const,\n compName: component.name,\n compData: {\n topology: {\n topology: {\n backendApiUrl: component.backendApiUrl,\n },\n },\n },\n };\n },\n Api: () => null,\n Event: async (component): Promise<Array<Webhook>> => {\n const webhookSlugs = await componentSourceBuilder(component);\n\n return webhookSlugs.map(({ webhookSlug }) => ({\n compName: webhookSlug,\n compId: randomUUID(),\n compType: ComponentType.WEBHOOK,\n compData: {\n webhook: {\n callbackUrl: '__WEBHOOKS_URL_PLACEHOLDER__',\n webhookSlug,\n },\n },\n }));\n },\n ServicePlugin: () => null,\n })\n )\n )\n )\n .filter(isTruthy)\n .flat(),\n };\n}\n","import { BackOfficeScriptAssetType } from '@wix/ambassador-devcenter-components-v1-component/types';\nimport type { ComponentSource } from '@wix/cli-app-manifest';\nimport { match } from 'variant';\nimport { join } from 'node:path';\nimport { getAppBackendBuildFolder } from '@wix/cli-app-definitions';\nimport type * as GetRegisteredEvents from '@wix/cli-cloudflare-runtime/getRegisteredEvents';\nimport { getBackendEventSlug } from '@wix/extensions-data-client';\nimport {\n virtualModuleIdForScriptAsset,\n virtualPathForHTMLAsset,\n} from '../dev-center/components/dashboard/config.js';\nimport {\n virtualModuleIdForCustomElementScriptAsset,\n virtualPathForCustomElementPanelHTMLAsset,\n} from '../dev-center/components/site/config.js';\nimport type { ProjectModel } from '../model.js';\nimport type { ViteBuildOutput } from './build-output-data-extractor.js';\nimport {\n extractModuleBundleContent,\n extractModuleBundleName,\n} from './build-output-data-extractor.js';\nimport type { DevCenterComponent } from '../dev-center/components/dev-center-component.js';\n\ntype DashboardSource =\n | {\n iframeUrl: string;\n scriptAsset?: never;\n }\n | {\n scriptAsset: ComponentSource['scriptAsset'];\n iframeUrl?: never;\n };\n\ntype EmbeddedScriptSource = {\n template: string;\n};\n\ntype CustomElementSource = { scriptUrl: string; settingsUrl: string };\n\ntype EventSource = {\n webhookSlug: string;\n};\n\nexport type ComponentSourceBuilder = <T extends DevCenterComponent>(\n component: T\n) => Promise<\n T extends DevCenterComponent<'EmbeddedScript'>\n ? EmbeddedScriptSource\n : T extends DevCenterComponent<'CustomElement'>\n ? CustomElementSource\n : T extends DevCenterComponent<'DashboardPage'>\n ? DashboardSource\n : T extends DevCenterComponent<'DashboardPlugin'>\n ? DashboardSource\n : T extends DevCenterComponent<'DashboardModal'>\n ? DashboardSource\n : T extends DevCenterComponent<'Event'>\n ? Array<EventSource>\n : undefined\n>;\n\nasync function getEmbeddedScriptDevTemplate(\n component: DevCenterComponent<'EmbeddedScript'>,\n backendDevServerUrl?: string\n) {\n const url = new URL(component.relativePath, backendDevServerUrl).href;\n const devTemplate = await fetch(url).then((res) => res.text());\n\n return devTemplate;\n}\n\nasync function getEventDevSlugs(\n component: DevCenterComponent<'Event'>,\n backendDevServerUrl?: string\n) {\n const url = new URL(`__get-registered-events`, backendDevServerUrl).href;\n const response = await fetch(url);\n\n if (!response.ok) {\n return [];\n }\n\n const eventTypes = await response.json();\n const devSlugs = eventTypes[`/${component.relativePath}`];\n\n return devSlugs as Array<string>;\n}\n\nasync function getEventProdSlugs(\n component: DevCenterComponent<'Event'>,\n model: ProjectModel\n) {\n const backendBuildFolder = getAppBackendBuildFolder(model.projectFolder);\n const outputFilepath = join(backendBuildFolder, 'getRegisteredEvents.mjs');\n\n const { getRegisteredEvents } = await (import(outputFilepath) as Promise<\n typeof GetRegisteredEvents\n >);\n\n const eventsMap = await getRegisteredEvents();\n\n return eventsMap[`/${component.relativePath}`];\n}\n\nconst dashboardSourceBuilder = (\n component:\n | DevCenterComponent<'DashboardPage'>\n | DevCenterComponent<'DashboardPlugin'>\n | DevCenterComponent<'DashboardModal'>,\n model: ProjectModel,\n clientBuildOutput?: ViteBuildOutput\n): DashboardSource => {\n if (!model.config.trusted) {\n return {\n iframeUrl: virtualPathForHTMLAsset(component.id),\n };\n }\n const moduleId = virtualModuleIdForScriptAsset(component.id);\n const componentUrl = clientBuildOutput\n ? extractModuleBundleName(clientBuildOutput, moduleId)\n : `/@id/${moduleId}?import`;\n\n return {\n scriptAsset: {\n exportedName: component.id,\n containerId: model.config.appId,\n url: componentUrl,\n scriptType: BackOfficeScriptAssetType.MODULE,\n },\n };\n};\n\nconst embeddedScriptBuilder = async (\n component: DevCenterComponent<'EmbeddedScript'>,\n clientBuildOutput?: ViteBuildOutput,\n devServerUrl?: string\n): Promise<EmbeddedScriptSource> => {\n return {\n template: clientBuildOutput\n ? extractModuleBundleContent(clientBuildOutput, component.relativePath)\n : await getEmbeddedScriptDevTemplate(component, devServerUrl),\n };\n};\n\nconst eventSourceBuilder = async (\n component: DevCenterComponent<'Event'>,\n model: ProjectModel,\n backendBuildOutput?: ViteBuildOutput,\n backendDevServerUrl?: string\n): Promise<Array<EventSource>> => {\n const fullSlugNames = backendBuildOutput\n ? await getEventProdSlugs(component, model)\n : await getEventDevSlugs(component, backendDevServerUrl);\n\n const webhookSlugs = await Promise.all(\n fullSlugNames?.map(getBackendEventSlug)\n );\n\n return webhookSlugs.map((webhookSlug) => ({\n webhookSlug,\n }));\n};\n\nconst customElementBuilder = (\n component: DevCenterComponent<'CustomElement'>,\n clientBuildOutput?: ViteBuildOutput\n): CustomElementSource => {\n const moduleId = virtualModuleIdForCustomElementScriptAsset(component.id);\n const componentUrl = clientBuildOutput\n ? extractModuleBundleName(clientBuildOutput, moduleId)\n : `/@id/${moduleId}?import`;\n\n return {\n scriptUrl: componentUrl,\n settingsUrl: virtualPathForCustomElementPanelHTMLAsset(component.id),\n };\n};\n\nexport function getComponentSourceBuilder({\n model,\n clientBuildOutput,\n backendBuildOutput,\n clientDevServerUrl,\n backendDevServerUrl,\n}: {\n model: ProjectModel;\n clientBuildOutput?: ViteBuildOutput;\n backendBuildOutput?: ViteBuildOutput;\n clientDevServerUrl?: string;\n backendDevServerUrl?: string;\n}) {\n return (async (component: DevCenterComponent) => {\n const source = match(component, {\n EmbeddedScript: (embeddedScriptComponent) =>\n embeddedScriptBuilder(\n embeddedScriptComponent,\n clientBuildOutput,\n clientDevServerUrl\n ),\n DashboardSidebarCategory: () => {},\n CustomElement: (customElementComponent) =>\n customElementBuilder(customElementComponent, clientBuildOutput),\n DashboardPage: (dashboardPageComponent) =>\n dashboardSourceBuilder(\n dashboardPageComponent,\n model,\n clientBuildOutput\n ),\n DashboardPlugin: (dashboardPluginComponent) =>\n dashboardSourceBuilder(\n dashboardPluginComponent,\n model,\n clientBuildOutput\n ),\n DashboardModal: (dashboardModalComponent) =>\n dashboardSourceBuilder(\n dashboardModalComponent,\n model,\n clientBuildOutput\n ),\n DashboardMenuPlugin: () => {},\n Topology: () => {},\n Api: () => {},\n Event: (component) =>\n eventSourceBuilder(\n component,\n model,\n backendBuildOutput,\n backendDevServerUrl\n ),\n ServicePlugin: () => {},\n });\n\n return source;\n }) as ComponentSourceBuilder;\n}\n","import { CliError, CliErrorCode } from '@wix/cli-error';\nimport type { build } from 'vite';\n\nexport type ViteBuildOutput = Awaited<ReturnType<typeof build>>;\n\nfunction extractBuildOutputs(buildOutput: ViteBuildOutput) {\n const isValidRollupOutput =\n 'output' in buildOutput || Array.isArray(buildOutput);\n\n if (!isValidRollupOutput) {\n throw new CliError({ code: CliErrorCode.InvalidViteBuildOutput() });\n }\n\n const outputs = Array.isArray(buildOutput)\n ? buildOutput.flatMap((output) => output.output)\n : buildOutput.output;\n\n return outputs;\n}\n\nexport function extractModuleBundleName(\n buildOutput: ViteBuildOutput,\n moduleId: string\n) {\n const outputs = extractBuildOutputs(buildOutput);\n\n const output = outputs.find(\n (output) => output.type === 'chunk' && output.facadeModuleId === moduleId\n );\n\n if (!output) {\n throw new CliError({ code: CliErrorCode.ViteModuleBundleNotFound() });\n }\n\n return output.fileName;\n}\n\nexport function extractModuleBundleContent(\n buildOutput: ViteBuildOutput,\n fileName: string\n) {\n const outputs = extractBuildOutputs(buildOutput);\n\n const output = outputs.find((output) => output.fileName === fileName);\n\n if (!output || !('source' in output)) {\n throw new CliError({\n code: CliErrorCode.ViteFileNotFoundInOutput({ fileName }),\n });\n }\n\n return output.source.toString();\n}\n"],"mappings":"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","names":["init_esm_shims","import_variant","randomUUID","validateComponents","components","devCenterComponentsToIdMap","component","DevCenterComponent","a","b","componentList","devCenterComponentsWithSameIDMap","devCenterComponents","key","CliError","CliErrorCode","id","title","relativePath","replaceExtension","label","CONFIG_FILENAME","name","randomUUID","init_esm_shims","import_variant","randomUUID","isTruthy","x","getExperiment","component","appId","createCustomElementConfig","ComponentType","CustomElementScriptType","HeightMode","RegionType","createAppManifest","components","sentryDSN","componentSourceBuilder","validateComponents","componentSentryDSN","BackOfficeHostingPlatforms","EmbeddedScriptPages","scriptUrl","settingsUrl","basicConfig","webhookSlug","randomUUID","init_esm_shims","import_variant","join","init_esm_shims","extractBuildOutputs","buildOutput","CliError","CliErrorCode","output","extractModuleBundleName","moduleId","extractModuleBundleContent","fileName","getEmbeddedScriptDevTemplate","component","backendDevServerUrl","url","res","getEventDevSlugs","response","getEventProdSlugs","model","backendBuildFolder","getAppBackendBuildFolder","outputFilepath","join","getRegisteredEvents","dashboardSourceBuilder","clientBuildOutput","virtualPathForHTMLAsset","moduleId","virtualModuleIdForScriptAsset","componentUrl","extractModuleBundleName","BackOfficeScriptAssetType","embeddedScriptBuilder","devServerUrl","extractModuleBundleContent","eventSourceBuilder","backendBuildOutput","fullSlugNames","getBackendEventSlug","webhookSlug","customElementBuilder","virtualModuleIdForCustomElementScriptAsset","virtualPathForCustomElementPanelHTMLAsset","getComponentSourceBuilder","clientDevServerUrl","embeddedScriptComponent","customElementComponent","dashboardPageComponent","dashboardPluginComponent","dashboardModalComponent"]}
@@ -0,0 +1,4 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import{Ta as i,aa as r}from"./chunk-PEDWEHXR.js";import{a as f,b as C}from"./chunk-JUS465G2.js";import{e as p,h as c}from"./chunk-V4TR6DCM.js";c();var s=p(f(),1),m=p(C(),1);function k(){let{model:t}=i(),n=(0,s.useMemo)(()=>{let l=t.components.filter((0,m.isType)(r.Api)).sort((e,o)=>e.title.localeCompare(o.title)),a=t.components.filter((0,m.isType)(r.Event)).sort((e,o)=>e.title.localeCompare(o.title)),u=t.components.filter((0,m.isType)(r.ServicePlugin)).sort((e,o)=>e.componentName.localeCompare(o.componentName));return{Api:l,Event:a,ServicePlugin:u}},[t.components]);return{backendComponents:[...n.Api,...n.Event,...n.ServicePlugin],backendComponentsByType:n}}export{k as a};
4
+ //# sourceMappingURL=chunk-2T5VKPKE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/backend/useBackendComponents.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { isType } from 'variant';\nimport { useProjectModel } from '../model.js';\nimport { DevCenterComponent } from '../dev-center/components/dev-center-component.js';\n\nexport function useBackendComponents() {\n const { model } = useProjectModel();\n\n const backendComponentsByType = useMemo(() => {\n const Api = model.components\n .filter(isType(DevCenterComponent.Api))\n .sort((a, b) => a.title.localeCompare(b.title));\n\n const Event = model.components\n .filter(isType(DevCenterComponent.Event))\n .sort((a, b) => a.title.localeCompare(b.title));\n\n const ServicePlugin = model.components\n .filter(isType(DevCenterComponent.ServicePlugin))\n .sort((a, b) => a.componentName.localeCompare(b.componentName));\n\n return {\n Api,\n Event,\n ServicePlugin,\n };\n }, [model.components]);\n\n return {\n backendComponents: [\n ...backendComponentsByType.Api,\n ...backendComponentsByType.Event,\n ...backendComponentsByType.ServicePlugin,\n ],\n backendComponentsByType,\n };\n}\n"],"mappings":";;+IAAAA,IAAA,IAAAC,EAAwB,SACxBC,EAAuB,SAIhB,SAASC,GAAuB,CACrC,GAAM,CAAE,MAAAC,CAAM,EAAIC,EAAgB,EAE5BC,KAA0B,WAAQ,IAAM,CAC5C,IAAMC,EAAMH,EAAM,WACf,UAAO,UAAOI,EAAmB,GAAG,CAAC,EACrC,KAAK,CAACC,EAAGC,IAAMD,EAAE,MAAM,cAAcC,EAAE,KAAK,CAAC,EAE1CC,EAAQP,EAAM,WACjB,UAAO,UAAOI,EAAmB,KAAK,CAAC,EACvC,KAAK,CAACC,EAAGC,IAAMD,EAAE,MAAM,cAAcC,EAAE,KAAK,CAAC,EAE1CE,EAAgBR,EAAM,WACzB,UAAO,UAAOI,EAAmB,aAAa,CAAC,EAC/C,KAAK,CAACC,EAAGC,IAAMD,EAAE,cAAc,cAAcC,EAAE,aAAa,CAAC,EAEhE,MAAO,CACL,IAAAH,EACA,MAAAI,EACA,cAAAC,CACF,CACF,EAAG,CAACR,EAAM,UAAU,CAAC,EAErB,MAAO,CACL,kBAAmB,CACjB,GAAGE,EAAwB,IAC3B,GAAGA,EAAwB,MAC3B,GAAGA,EAAwB,aAC7B,EACA,wBAAAA,CACF,CACF","names":["init_esm_shims","import_react","import_variant","useBackendComponents","model","useProjectModel","backendComponentsByType","Api","DevCenterComponent","a","b","Event","ServicePlugin"]}