@wix/cli-app 1.1.17 → 1.1.19

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-3UL6NYDF.js +4 -0
  2. package/build/{CreateVersionCommand-F7A6HDJI.js.map → CreateVersionCommand-3UL6NYDF.js.map} +1 -1
  3. package/build/DevCommand-GD7XT72H.js +4 -0
  4. package/build/DevCommand-GD7XT72H.js.map +1 -0
  5. package/build/GenerateCommand-YW37BTUB.js +99 -0
  6. package/build/GenerateCommand-YW37BTUB.js.map +1 -0
  7. package/build/PreviewCommand-HDEZ6LT3.js +4 -0
  8. package/build/{ServeCommand-Z5NQEEE5.js → ServeCommand-YRMZVHZN.js} +2 -2
  9. package/build/ServeCommand-YRMZVHZN.js.map +1 -0
  10. package/build/build-FJMITZHU.js +4 -0
  11. package/build/build-FJMITZHU.js.map +1 -0
  12. package/build/chunk-4VOJ4MBF.js +4 -0
  13. package/build/chunk-4VOJ4MBF.js.map +1 -0
  14. package/build/{chunk-QW5H4VGJ.js → chunk-56GO226U.js} +2 -2
  15. package/build/chunk-56GO226U.js.map +1 -0
  16. package/build/chunk-6U7WFIFR.js +87 -0
  17. package/build/chunk-6U7WFIFR.js.map +1 -0
  18. package/build/chunk-CXTD4ANR.js +4 -0
  19. package/build/{chunk-S7NF452E.js → chunk-EL4LLNE3.js} +2 -2
  20. package/build/chunk-EVTSTCPY.js +4 -0
  21. package/build/chunk-EVTSTCPY.js.map +1 -0
  22. package/build/chunk-FMEEFVFZ.js +4 -0
  23. package/build/chunk-FMEEFVFZ.js.map +1 -0
  24. package/build/chunk-I4ARVL5S.js +6 -0
  25. package/build/chunk-I4ARVL5S.js.map +1 -0
  26. package/build/chunk-KF76KJSL.js +4 -0
  27. package/build/chunk-KF76KJSL.js.map +1 -0
  28. package/build/chunk-L47BPWKS.js +23 -0
  29. package/build/chunk-L47BPWKS.js.map +1 -0
  30. package/build/chunk-LINHFSVS.js +4 -0
  31. package/build/{chunk-G7NSXRI7.js.map → chunk-LINHFSVS.js.map} +1 -1
  32. package/build/chunk-LKXDY7ME.js +27 -0
  33. package/build/chunk-LKXDY7ME.js.map +1 -0
  34. package/build/chunk-MNS7PUKJ.js +11 -0
  35. package/build/chunk-MNS7PUKJ.js.map +1 -0
  36. package/build/{chunk-7TOOBLT6.js → chunk-POJEX3XJ.js} +12 -12
  37. package/build/chunk-POJEX3XJ.js.map +1 -0
  38. package/build/chunk-PWKG7UKK.js +4 -0
  39. package/build/{chunk-ZIVYB6TM.js.map → chunk-PWKG7UKK.js.map} +1 -1
  40. package/build/{chunk-RYS7G2PY.js → chunk-QLWXUOAT.js} +2 -2
  41. package/build/{chunk-3EQ4ZYU2.js → chunk-QOQRQIMF.js} +2 -2
  42. package/build/chunk-QZS4ARDD.js +4 -0
  43. package/build/chunk-QZS4ARDD.js.map +1 -0
  44. package/build/chunk-RJKCVYVO.js +73 -0
  45. package/build/chunk-RJKCVYVO.js.map +1 -0
  46. package/build/{chunk-JIUANWPO.js → chunk-TPV6MPZ4.js} +2 -2
  47. package/build/{chunk-PSXIV7FJ.js → chunk-V35F6N6Y.js} +2 -2
  48. package/build/{chunk-HFDLXX7R.js → chunk-V4TR6DCM.js} +1 -1
  49. package/build/{chunk-GHVN7KTY.js → chunk-YE7MFP76.js} +2 -2
  50. package/build/chunk-YE7MFP76.js.map +1 -0
  51. package/build/{devtools-WFBFD7GB.js → devtools-WDPQJNQZ.js} +2 -2
  52. package/build/{devtools-WFBFD7GB.js.map → devtools-WDPQJNQZ.js.map} +1 -1
  53. package/build/{esm-CECOC7V2.js → esm-MUZJUC5Q.js} +4 -4
  54. package/build/esm-MUZJUC5Q.js.map +1 -0
  55. package/build/index.js +14 -14
  56. package/build/index.js.map +1 -1
  57. package/build/preview-3ZAXKZ4E.js +4 -0
  58. package/build/preview-3ZAXKZ4E.js.map +1 -0
  59. package/build/{render-command-JEBHYUZV.js → render-command-SBXRR4MG.js} +2 -2
  60. package/build/{types.impl-HD4UTKFC.js → types.impl-V4PI7Z6L.js} +2 -2
  61. package/build/types.impl-V4PI7Z6L.js.map +1 -0
  62. package/package.json +8 -7
  63. package/schemas/custom-element.json +1 -1
  64. package/schemas/dashboard-menu-plugin.json +1 -1
  65. package/schemas/dashboard-modal.json +1 -1
  66. package/schemas/dashboard-page.json +1 -1
  67. package/schemas/dashboard-plugin.json +1 -1
  68. package/schemas/embedded-script.json +1 -1
  69. package/schemas/wix-config.json +1 -1
  70. package/templates/custom-element/element.tsx.ejs +27 -4
  71. package/templates/custom-element/panel.tsx.ejs +45 -6
  72. package/build/CreateVersionCommand-F7A6HDJI.js +0 -4
  73. package/build/DevCommand-KHV22E2S.js +0 -4
  74. package/build/DevCommand-KHV22E2S.js.map +0 -1
  75. package/build/GenerateCommand-46EMTVWN.js +0 -99
  76. package/build/GenerateCommand-46EMTVWN.js.map +0 -1
  77. package/build/PreviewCommand-XX7TWOJR.js +0 -4
  78. package/build/PreviewCommand-XX7TWOJR.js.map +0 -1
  79. package/build/ServeCommand-Z5NQEEE5.js.map +0 -1
  80. package/build/build-WOV3ZNZF.js +0 -4
  81. package/build/build-WOV3ZNZF.js.map +0 -1
  82. package/build/chunk-4NIGEF2O.js +0 -87
  83. package/build/chunk-4NIGEF2O.js.map +0 -1
  84. package/build/chunk-62RRZRN6.js +0 -6
  85. package/build/chunk-62RRZRN6.js.map +0 -1
  86. package/build/chunk-7IB3ZF3I.js +0 -4
  87. package/build/chunk-7IB3ZF3I.js.map +0 -1
  88. package/build/chunk-7TOOBLT6.js.map +0 -1
  89. package/build/chunk-CUWQRNQL.js +0 -4
  90. package/build/chunk-EH27FYQH.js +0 -4
  91. package/build/chunk-EH27FYQH.js.map +0 -1
  92. package/build/chunk-G7NSXRI7.js +0 -4
  93. package/build/chunk-GHVN7KTY.js.map +0 -1
  94. package/build/chunk-KK4X6NH5.js +0 -4
  95. package/build/chunk-KK4X6NH5.js.map +0 -1
  96. package/build/chunk-LT3WXWI5.js +0 -23
  97. package/build/chunk-LT3WXWI5.js.map +0 -1
  98. package/build/chunk-LW6PZKOJ.js +0 -27
  99. package/build/chunk-LW6PZKOJ.js.map +0 -1
  100. package/build/chunk-LZ4SXWLW.js +0 -11
  101. package/build/chunk-LZ4SXWLW.js.map +0 -1
  102. package/build/chunk-QW5H4VGJ.js.map +0 -1
  103. package/build/chunk-RWN7XXN6.js +0 -4
  104. package/build/chunk-RWN7XXN6.js.map +0 -1
  105. package/build/chunk-YWJFUO7I.js +0 -73
  106. package/build/chunk-YWJFUO7I.js.map +0 -1
  107. package/build/chunk-ZIVYB6TM.js +0 -4
  108. package/build/esm-CECOC7V2.js.map +0 -1
  109. package/build/preview-FV7ZP3YC.js +0 -4
  110. package/build/preview-FV7ZP3YC.js.map +0 -1
  111. package/schemas/dashboard-sidebar-category.json +0 -1
  112. /package/build/{types.impl-HD4UTKFC.js.map → PreviewCommand-HDEZ6LT3.js.map} +0 -0
  113. /package/build/{chunk-CUWQRNQL.js.map → chunk-CXTD4ANR.js.map} +0 -0
  114. /package/build/{chunk-S7NF452E.js.map → chunk-EL4LLNE3.js.map} +0 -0
  115. /package/build/{chunk-RYS7G2PY.js.map → chunk-QLWXUOAT.js.map} +0 -0
  116. /package/build/{chunk-3EQ4ZYU2.js.map → chunk-QOQRQIMF.js.map} +0 -0
  117. /package/build/{chunk-JIUANWPO.js.map → chunk-TPV6MPZ4.js.map} +0 -0
  118. /package/build/{chunk-PSXIV7FJ.js.map → chunk-V35F6N6Y.js.map} +0 -0
  119. /package/build/{chunk-HFDLXX7R.js.map → chunk-V4TR6DCM.js.map} +0 -0
  120. /package/build/{render-command-JEBHYUZV.js.map → render-command-SBXRR4MG.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{b as xo,c as bo}from"./chunk-LINHFSVS.js";import{a as So,b as Co}from"./chunk-POJEX3XJ.js";import"./chunk-QZS4ARDD.js";import{a as Do,b as Eo,c as Ce}from"./chunk-FMEEFVFZ.js";import{b as K}from"./chunk-KF76KJSL.js";import{b as le}from"./chunk-TPV6MPZ4.js";import{c as he,d as Se,i as _o,j as wo,k as J,l as z,m as ko,n as Y,o as q}from"./chunk-56GO226U.js";import{a as Po}from"./chunk-QLWXUOAT.js";import{a as Ye,b as $e,d as Le,f as Qe,r as lo,s as ue,u as fe}from"./chunk-LKXDY7ME.js";import{A as co,B as y,C as k,d as c,f as L,g,h as to,i as no,j as me,k as io,m as so,o as pe,r as G,s as V,t as ce,u as ao,v as mo,x as po,y as de}from"./chunk-6U7WFIFR.js";import{b as yo}from"./chunk-PWKG7UKK.js";import{J as vo,M as U,Q as go,a as Re,d as eo,e as oo,f as ro,j as uo,k as fo,oa as ge,pa as ho,sa as b,x as ve}from"./chunk-RJKCVYVO.js";import{a as _,c as ie,d as se,h as ae,i as Ze}from"./chunk-I4ARVL5S.js";import{e as E,h as i}from"./chunk-V4TR6DCM.js";i();i();import Ge from"react";i();var je=E(_(),1);import De,{createContext as Mr,useContext as Nr}from"react";i();var Bo=E(_(),1);import{useCallback as lr}from"react";var To=async(e,o)=>{let r=await xo({appId:e.config.appId,components:e.components,componentSourceBuilder:bo({model:e,devServerUrl:o})});return yo(r,o)};function Oo(){let{model:e}=b(),o=le(),{createAppRelease:r,updateAppRelease:n}=_o();return lr(async({devServerUrl:t,projectModelWatcher:s,onChange:m,onError:p})=>{let{projectId:d}=e.config,a=await To(e,t),v=await he(e.projectFolder,o),S=await(async C=>{if(C){let w=await n(a,C);return(0,Bo.match)(w,{TagUpdated:()=>C,TagNotFound:({cause:h})=>(o(h),r(a,d))})}return r(a,d)})(v?.devArmTag);return S!==v?.devArmTag&&await Se(e.projectFolder,{devArmTag:S}).catch(C=>o(C)),s.onChange(async(C,w)=>{try{if(w==="model-updated"){if(C.components.length===0)return;let h=await To(C,t);ge(a,h)||await n(h,S)}m(w)}catch(h){p(h)}}).onError(p),S},[r,e,n,o])}i();import{useRef as ur,useCallback as fr,useEffect as vr}from"react";import{createServer as gr}from"vite";i();function Mo({onLog:e}){let o=new WeakSet,r=new Set,n={hasWarned:!1,info(t){e("info",t)},warn(t){n.hasWarned=!0,e("warning",t)},warnOnce(t){r.has(t)||(n.hasWarned=!0,e("warning",t),r.add(t))},error(t,s){n.hasWarned=!0,e("error",t),s?.error&&o.add(s.error)},clearScreen(){},hasErrorLogged(t){return o.has(t)}};return n}function No({https:e}){let o=ur(),{model:r}=b();return vr(()=>()=>{o.current?.close()},[]),fr(async({projectModelWatcher:n,onLog:t})=>{let s=await gr(await Co(r,{type:"dev",https:e,projectModelWatcher:n,customLogger:Mo({onLog:t})}));return o.current=s,await s.listen(),{devServerUrl:So(s),devServer:s}},[r,e])}i();import j,{useCallback as Io,useEffect as Cr,useState as yr,useMemo as xr}from"react";i();import{EOL as hr}from"node:os";import{createWriteStream as Sr}from"node:fs";var ye=class{constructor(o,r){this.opts=r;this.stream=Sr(vo(o),{flags:"w"}),this.stream.on("error",this.opts.onError)}drain=!1;stream;write=o=>{if(this.drain){this.stream.once("drain",()=>{this.drain=!1,this.write(o)});return}this.stream.write(o.concat(hr),n=>{n&&this.opts.onError(n)})||(this.drain=!0,this.stream.once("drain",()=>{this.drain=!1}))};close=()=>{this.stream.close()}};i();import W from"react";var xe=({type:e,msg:o,error:r,prefix:n="app",timestamp:t})=>W.createElement(c,{columnGap:1},W.createElement(c,{flexShrink:0},W.createElement(g,{skin:"secondary"},t.toLocaleTimeString())),W.createElement(c,{flexShrink:0},W.createElement(g,{skin:e,bold:!0},"[",n,"]")),W.createElement(c,null,e==="error"&&r?W.createElement(ue,{error:r}):typeof o=="string"?W.createElement(g,null,o):o));var br=()=>j.createElement(c,{flexDirection:"column"},j.createElement(G,{type:"error"},j.createElement(y,{i18nKey:"general.write_dev_log_failure.message",components:[j.createElement(g,{bold:!0})],values:{path:ve}})),j.createElement(c,{paddingTop:1},j.createElement(G,{type:"insight"},j.createElement(y,{i18nKey:"general.write_dev_log_failure.hint"})))),Pr=5;function Dr(e){return!!/Port \d{1,5} is in use, trying another one/.test(e)}function Lo(){let{model:e}=b(),[o,r]=yr([]),n=Io(p=>{let d={...p,timestamp:new Date};return r(a=>{let v=[...a,d];return v.length>Pr&&v.shift(),v}),d},[]),{renderer:t,stream:s}=xr(()=>({renderer:co(),stream:new ye(e.projectFolder,{onError(){n({type:"error",msg:j.createElement(br,null)})}})}),[n,e.projectFolder]),m=Io(p=>{if(p.msg&&Dr(p.msg.toString()))return;let d=n(p),a=t.render(j.createElement(xe,{...d}));s.write(a)},[n,t,s]);return Cr(()=>()=>{t.unmount(),s.close()},[t,s]),{logs:o,writeLog:m}}i();import{useCallback as Tr}from"react";i();i();i();var Er={},_r={};function wr(e){var o={"cronulla-jobs._base_domain_":[{srcPath:"/serverless/site-override",destPath:""}],"bo._base_domain_":[{srcPath:"/_serverless/site-override",destPath:""}],"wixbo.ai":[{srcPath:"/_serverless/site-override",destPath:""}],"manage._base_domain_":[{srcPath:"/_serverless/site-override",destPath:""}]};return $e(Object.assign(e,{domainToMappings:o}))}function Ao(e){var o=Le(Er,{}),r=o.toJSON,n=o.fromJSON,t=Le(_r,{}).fromJSON;function s(m){var p=m.host,d=r(e),a={entityFqdn:"wix.cli.site_override_service.v1.site_override",method:"POST",methodFqn:"wix.cli.v1.SiteOverrideService.CreateOverride",url:wr({protoPath:"/v1/site-overrides",data:d,host:p}),data:d,transformResponse:t};return a}return s.fromReq=n,s.__isAmbassador=!0,s}i();var Fo=ae.object({siteOverride:ae.object({id:ae.string()})});var be=class{constructor(o){this.httpClient=o;let{minRetryTimeout:r}=Ze();this.retryOptions={retries:3,minTimeout:r,maxTimeout:3*1e3}}retryOptions;createOverride=async({appId:o,siteId:r,overrides:n,siteOverrideId:t})=>{try{let{data:s}=await Ye(()=>this.httpClient.request(Ao({siteOverride:{id:t,appId:o,siteId:r,overrides:n}})),this.retryOptions);return Fo.parse(s).siteOverride}catch(s){throw Qe(s)&&s.response?.status===403?s.response.data?.details?.applicationError?.code==="PERMISSION_DENIED_FOR_SITE"?new ie({code:se.SitePermissionDenied({siteId:r}),cause:s}):new ie({code:se.AppPermissionDenied({appId:o}),cause:s}):new ie({code:se.FailedToCreateSiteOverride(),cause:s})}}};i();import{useMemo as kr}from"react";function Ae(){let e=Po({type:"backoffice"});return kr(()=>new be(e),[e])}i();var Vo=E(_(),1);i();var Pe;(function(e){e.UNKNOWN_TYPE="UNKNOWN_TYPE",e.EMBEDDED_SCRIPT="EMBEDDED_SCRIPT"})(Pe||(Pe={}));function Fe(e){let o=e.components.filter((0,Vo.isType)(go.EmbeddedScript));return o.length===0?null:o.reduce((r,n)=>{let t=n.paramsOverride||{};return{...r,[n.id]:{type:Pe.EMBEDDED_SCRIPT,componentId:n.id,embeddedScriptOptions:{parameters:t}}}},{})}function jo(){let{model:e}=b(),{site:o}=J(),r=le(),{createOverride:n}=Ae();return Tr(async({projectModelWatcher:t})=>{let{appId:s}=e.config,m=await he(e.projectFolder,r),p=Fe(e)??{},{id:d}=await n({appId:s,siteId:o.id,overrides:p,siteOverrideId:m?.devSiteOverrideId});return t.onChange(async(a,v)=>{if(v==="model-updated"){let x=Fe(a)??{};ge(p,x)||(await n({appId:s,siteId:o.id,overrides:x,siteOverrideId:d}),p=x)}}),d!==m?.devSiteOverrideId&&await Se(e.projectFolder,{devSiteOverrideId:d}).catch(a=>r(a)),d},[n,e,o.id,r])}i();import re,{useState as Or}from"react";i();import{join as Br}from"node:path";function Uo(){return Br(Re(),uo)}async function Ve(){let e=Uo(),r=await ro(e)?await oo(e):{};return fo.parse(r)}async function Ko(e){let r={...await Ve(),...e},n=Uo();await eo(n,r)}var Wo=E(_(),1);var Ho=({onError:e,onSuccess:o})=>{let{t:r}=k(),{model:n}=b(),[t,s]=Or(),m=de(Ve),{status:p}=po(async()=>n.backendComponents.length>0?m.execute():{tunneling:!0},[],{onSuccess:({tunneling:d})=>{d&&o()}});return re.createElement(re.Fragment,null,(0,Wo.match)(p,{Success:()=>re.createElement(so,{label:r("dev_command.tunneling.confirm"),initialValue:!1,onSubmit:d=>{Ko({tunneling:d}),s(d),d?o():e()}}),Error:()=>null,Loading:()=>null,NotRequested:()=>null}),t===!1&&re.createElement(g,{skin:"error"},re.createElement(y,{i18nKey:"dev_command.tunneling.abort_dev"})))};var Go=Mr(null),Ue=({https:e,children:o})=>{let{t:r}=k(),{reportError:n}=fe(),t=mo(),s=No({https:e}),m=Oo(),p=jo(),{logs:d,writeLog:a}=Lo(),{watcher:v}=b(),x=de(async()=>{let{devServerUrl:S,devServer:C}=await s({projectModelWatcher:v,onLog(B,N){a({type:B,msg:N,prefix:"vite"})}}),w=await m({devServerUrl:S,projectModelWatcher:v,onChange(B){(0,je.match)(B,{"change-received":()=>{a({type:"info",msg:r("dev_command.config_change")})},"model-did-not-change":()=>{a({type:"info",msg:r("dev_command.config_didnt_update")})},"model-updated":()=>{C.ws.send({type:"full-reload"}),a({type:"info",msg:r("dev_command.config_update")})}})},onError(B){n(B),a({type:"error",error:B}),a({type:"info",msg:r("dev_command.config_didnt_update")})}}),h=await p({projectModelWatcher:v});return{clientDevServerUrl:S,armTag:w,siteOverrideId:h,https:e}});return(0,je.match)(x.status,{Loading:()=>De.createElement(ao,{text:r("dev_command.dev_environment.loading")}),Success:({result:{clientDevServerUrl:S,https:C,armTag:w,siteOverrideId:h}})=>De.createElement(Go.Provider,{value:{clientDevServerUrl:S,https:C,logs:d,writeLog:a,siteOverrideId:h}},De.createElement(wo,{armTag:w},o)),Error:()=>null,NotRequested:()=>De.createElement(Ho,{onError:t,onSuccess:x.execute})})};function A(){let e=Nr(Go);if(e===null)throw new Error("useDevEnvironment() cannot be used without an <DevEnvironmentProvider>");return e}i();var cr=E(_(),1);import Ne,{useState as Qr}from"react";i();import l from"react";var or=E(_(),1);i();var te=E(_(),1),T=(0,te.variant)({Home:{},SiteSelector:{},DashboardScreen:(0,te.fields)(),BackendScreen:(0,te.fields)()});i();import X from"react";var qo=()=>{let{t:e}=k(),{logs:o}=A(),r=!o.length;return X.createElement(X.Fragment,null,X.createElement(c,{gap:1},X.createElement(y,{i18nKey:"dev_command.dev_env_logs.title",components:[X.createElement(g,{skin:r?"secondary":"standard"})],values:{path:ve}})),r&&X.createElement(g,{skin:"secondary"},e("dev_command.dev_env_logs.empty")),o.map(n=>X.createElement(xe,{key:n.timestamp.getTime(),...n})))};i();import D,{useCallback as Lr,useMemo as Ar}from"react";i();var Jo=E(_(),1);import{useCallback as Xo,useMemo as Ir}from"react";var li=(0,Jo.typeCatalog)(ho);function $(){let{model:e}=b(),o=Ir(()=>{let t=e.backendComponents.reduce((s,m)=>(s[m.type].push(m),s),{Api:[],Event:[],ServicePlugin:[]});return t.Api=t.Api.sort((s,m)=>s.title.localeCompare(m.title)),t.Event=t.Event.sort((s,m)=>s.title.localeCompare(m.title)),t.ServicePlugin=t.ServicePlugin.sort((s,m)=>s.componentName.localeCompare(m.componentName)),t},[e.backendComponents]),r=Xo(t=>t?o[t].length>0:e.backendComponents.length>0,[o,e.backendComponents]),n=Xo(t=>o[t],[o]);return{backendComponentsByType:o,getBackendComponent:n,hasComponentByType:r}}var Ee=({label:e,inputKey:o,suffix:r,disabled:n})=>{let t=()=>n?"secondary":"standard";return D.createElement(c,null,D.createElement(c,{marginRight:1},D.createElement(c,{marginRight:1},D.createElement(g,{skin:t()},D.createElement(me,null)," ",D.createElement(V,{value:o})," -")),D.createElement(c,{gap:1},D.createElement(g,{skin:t()},e))),D.createElement(g,{skin:t()},r))},zo=({onMultipleDashboardExtensionSelection:e,onMultipleBackendComponentSelection:o})=>{let{t:r}=k(),{writeLog:n,siteOverrideId:t}=A(),{model:s}=b(),{isPlatformExists:m}=Ce(),{dashboardExtensions:p}=K(),{hasComponentByType:d}=$(),a=z(),v=Lr(S=>{q({title:S.type,url:ko({envConfig:a,platformType:S,siteOverrideId:t})},n)},[a,n,t]);L(S=>{S==="d"&&(p.length===1?q({title:"Dashboard",url:Y({envConfig:a,extension:p[0]})},n):e()),S==="e"&&v(U.Editor()),S==="s"&&a.site.viewUrl&&v(U.Site()),S==="b"&&s.backendComponents.length>0&&o()});let x=Ar(()=>p.length===0?null:p.length===1?D.createElement(g,{skin:"secondary"}," - ",p[0].route):D.createElement(g,null,String.fromCodePoint(9660)),[p]);return D.createElement(c,{paddingLeft:2,flexDirection:"column"},m(U.Site())&&D.createElement(Ee,{inputKey:"S",label:a.site.viewUrl?r("general.platform.site"):r("general.platform.unpublished_site"),disabled:!a.site.viewUrl}),m(U.Editor())&&D.createElement(Ee,{inputKey:"E",label:r("general.platform.editor")}),m(U.Dashboard())&&D.createElement(Ee,{inputKey:"D",label:r("general.platform.dashboard"),suffix:x}),(d("Event")||d("ServicePlugin"))&&D.createElement(Ee,{inputKey:"B",label:r("general.platform.backend"),suffix:D.createElement(g,null,String.fromCodePoint(9660))}))};i();import ne,{useMemo as Ur,useCallback as Kr}from"react";var er=E(_(),1);i();import Ke from"react";var I=({onClose:e})=>(L((o,r)=>{r.escape&&e()}),Ke.createElement(g,{skin:"secondary"},Ke.createElement(y,{i18nKey:"general.close_screen",components:[Ke.createElement(V,{value:"esc"})]})));i();var Q=E(_(),1);import we,{useState as Vr}from"react";i();import _e,{useCallback as Fr}from"react";var Yo=E(_(),1);var $o=({dashboardExtension:e,onClose:o,onSelect:r})=>{let{t:n}=k(),{writeLog:t}=A(),{getExtensions:s}=K(),m=z(),p=Fr(a=>{let v=Y({envConfig:m,extension:a});q({url:v,title:a.title},t),r?.(a)},[r,t,m]);return _e.createElement(c,{flexDirection:"column",gap:1},_e.createElement(c,{flexDirection:"column"},_e.createElement(pe,{label:n((0,Yo.match)(e,{DashboardPlugin:()=>"dev_command.dashboard_page_plugin_screen.select_label",DashboardMenuPlugin:()=>"dev_command.dashboard_menu_plugin_screen.select_label",DashboardPage:()=>"dev_command.dashboard_pages_screen.select_label",DashboardModal:()=>"dev_command.dashboard_modal_screen.select_label"})),options:s(e).map(a=>({key:a.id,title:a.title,description:a.route,value:a})),onSubmit:({value:a})=>p(a)})),_e.createElement(I,{onClose:o}))};var We=(0,Q.variant)({Arrow:(0,Q.fields)(),Numeric:{}}),Qo=({onClose:e,onSelect:o,initialSelectorType:r=We.Numeric()})=>{let[n,t]=Vr(r);return we.createElement(we.Fragment,null,(0,Q.match)(n,{Arrow:({dashboardExtension:s})=>we.createElement($o,{dashboardExtension:s,onSelect:o,onClose:e}),Numeric:()=>we.createElement(ke,{onViewMore:t,onSelect:o,onClose:e})}))};i();i();import O from"react";var F=E(_(),1),jr=({itemNumber:e,children:o})=>{let r=`${e}`;return O.createElement(c,{flexDirection:"row",gap:1},O.createElement(g,null,O.createElement(me,null)," ",O.createElement(V,{value:r})," -"),o)},M=(0,F.variant)((0,F.onTerms)(({I:e,V:o})=>({Item:(0,F.fields)(),ViewMore:(0,F.payload)(o)})));function H({startIndex:e,titleKey:o,items:r}){return O.createElement(c,{flexDirection:"column"},O.createElement(y,{i18nKey:o}),O.createElement(c,{paddingLeft:2,flexDirection:"column"},r.map((n,t)=>O.createElement(jr,{key:e+t+1,itemNumber:e+t+1},(0,F.match)(n,{Item:({title:s,description:m})=>O.createElement(c,{flexDirection:"row",gap:1},O.createElement(g,null,s),m&&O.createElement(g,{skin:"secondary"},"(",m,")")),ViewMore:()=>O.createElement(y,{i18nKey:"general.numeric_viewer.show_more"})})))))}var Zo=9,Ro=3,Wr=3,Hr=3,ke=({onViewMore:e,onSelect:o,onClose:r})=>{let{getExtensions:n}=K(),{writeLog:t}=A(),s=z(),m=Ur(()=>({dashboardPages:n("DashboardPage"),dashboardMenuPlugins:n("DashboardMenuPlugin"),dashboardPlugins:n("DashboardPlugin")}),[n]),p=m.dashboardPages.slice(0,m.dashboardPages.length>Ro?Ro-1:m.dashboardPages.length),d=m.dashboardPages.length>p.length?p.length+1:void 0,a=Math.max(p.length,d||0),v=Math.min(Hr,Math.floor((Zo-a)/2)),x=m.dashboardMenuPlugins.slice(0,m.dashboardMenuPlugins.length>v?v-1:m.dashboardMenuPlugins.length),S=m.dashboardMenuPlugins.length>x.length?x.length+a+1:void 0,C=Math.max(x.length+a,S||0),w=Math.min(Wr,Zo-C),h=m.dashboardPlugins.slice(0,m.dashboardPlugins.length>w?w-1:m.dashboardPlugins.length),B=m.dashboardPlugins.length>h.length?h.length+C+1:void 0,N=[...p.map(P=>M.Item({title:P.title,description:P.route,value:P})),...d?[M.ViewMore("DashboardPage")]:[],...x.map(P=>M.Item({title:P.title,description:P.route,value:P})),...S?[M.ViewMore("DashboardMenuPlugin")]:[],...h.map(P=>M.Item({title:P.title,description:P.route,value:P})),...B?[M.ViewMore("DashboardPlugin")]:[]];L(P=>{let oe=Number(P);if(oe>0&&oe<=N.length){let ze=N.at(oe-1);ze&&(0,er.match)(ze,{Item:Ie=>ee(Ie.value),ViewMore:Ie=>e(We.Arrow({dashboardExtension:Ie.payload}))})}});let ee=Kr(async P=>{let oe=Y({envConfig:s,extension:P});await q({url:oe,title:P.title},t),o?.(P)},[o,t,s]),qe=N.slice(0,a),Xe=N.slice(a,C),Je=N.slice(C,N.length);return ne.createElement(c,{flexDirection:"column",gap:1},qe.length>0&&ne.createElement(H,{startIndex:0,titleKey:"general.dashboard_pages_viewer.title",items:qe}),Xe.length>0&&ne.createElement(H,{startIndex:a,titleKey:"general.dashboard_menu_plugins_viewer.title",items:Xe}),Je.length>0&&ne.createElement(H,{startIndex:C,titleKey:"general.dashboard_plugins_viewer.title",items:Je}),r&&ne.createElement(I,{onClose:r}))};var rr=({onScreenChange:e})=>{let{site:o}=J(),{clientDevServerUrl:r,https:n,writeLog:t}=A(),{hasSinglePlatform:s}=Ce(),{hasExtensions:m,dashboardExtensions:p}=K(),{model:d}=b(),a=async()=>{try{await lo(r)}catch{t({type:"error",prefix:"app",msg:l.createElement(G,{type:"error"},l.createElement(y,{i18nKey:"dev_command.dev_environment.https_url.failed_to_open",components:[l.createElement(ce,{url:r})]}))})}};return L(async v=>{v==="c"&&e(T.SiteSelector()),v==="a"&&n&&await a()}),l.createElement(l.Fragment,null,l.createElement(c,{gap:1},l.createElement(g,{skin:"success"},l.createElement(io,null)),l.createElement(y,{i18nKey:"dev_command.dev_environment.started"})),l.createElement(c,{gap:1},l.createElement(to,null),l.createElement(y,{i18nKey:"dev_command.dev_environment.url",components:[l.createElement(ce,{url:r})]})),n&&l.createElement(c,{paddingLeft:2},l.createElement(g,{skin:"secondary"},l.createElement(y,{components:[l.createElement(V,{value:"A"})],i18nKey:"dev_command.dev_environment.https_url.open_info"}))),l.createElement(c,{gap:1},l.createElement(no,null),l.createElement(y,{i18nKey:"general.dev_site.current",values:{name:o.displayName}})),l.createElement(c,{paddingLeft:2},l.createElement(g,{skin:"secondary"},l.createElement(y,{i18nKey:"dev_command.dev_site.change",components:[l.createElement(V,{value:"C"})]}))),l.createElement(c,{paddingTop:1,paddingBottom:1,flexDirection:"column"},m()?l.createElement(l.Fragment,null,s(U.Dashboard())&&d.backendComponents.length===0&&p.some(v=>!(0,or.isType)(v,"DashboardModal"))?l.createElement(ke,{onViewMore:v=>e(T.DashboardScreen({selectorType:v}))}):l.createElement(l.Fragment,null,l.createElement(y,{i18nKey:"general.view_changes",components:[l.createElement(g,{skin:"secondary"})]}),l.createElement(zo,{onMultipleDashboardExtensionSelection:()=>e(T.DashboardScreen()),onMultipleBackendComponentSelection:()=>e(T.BackendScreen())}))):l.createElement(y,{i18nKey:"general.platform.none",components:[l.createElement(ce,{url:"https://wix.to/b7o4Ml0"})]})),l.createElement(qo,null))};i();import Z,{useState as Gr,useCallback as tr}from"react";i();var nr=({onScreenChange:e})=>{let{t:o}=k(),{model:r}=b(),{setSite:n}=J(),{reportError:t}=fe(),[s,m]=Gr(null),p=tr(a=>{t(a),m(a)},[t,m]),d=tr(async a=>{try{await n(a),e(T.Home())}catch(v){p(v)}},[n,e,p]);return Z.createElement(c,{flexDirection:"column",gap:1},Z.createElement(c,{flexDirection:"column"},Z.createElement(Do,{appId:r.config.appId,onSubmit:d,onError:p}),s?Z.createElement(ue,{error:s,systemErrorOverride:Z.createElement(G,{type:"error"},o("dev_command.site_selector.error"))}):null),Z.createElement(I,{onClose:()=>e(T.Home())}))};i();var R=E(_(),1);import Me,{useState as $r}from"react";i();import Te,{useMemo as qr,useCallback as Xr}from"react";var sr=E(_(),1);var Jr=9,ir=4,zr=5,ar=({onViewMore:e,onSelect:o,onClose:r})=>{let{getBackendComponent:n}=$(),t=qr(()=>({apis:n("Api"),events:n("Event"),servicePlugins:n("ServicePlugin")}),[n]),s=t.servicePlugins.slice(0,t.servicePlugins.length>ir?ir-1:t.servicePlugins.length),m=t.servicePlugins.length>s.length?s.length+1:void 0,p=Math.max(s.length,m??0),d=Math.min(zr,Jr-p),a=t.events.slice(0,t.events.length>d?d-1:t.events.length),v=t.events.length>a.length?a.length+p+1:void 0,x=[...s.map(h=>M.Item({title:h.componentName,value:h})),...m?[M.ViewMore("ServicePlugin")]:[],...a.map(h=>M.Item({title:h.title,value:h})),...v?[M.ViewMore("Event")]:[]];L(h=>{let B=Number(h);if(B>0&&B<=x.length){let N=x.at(B-1);N&&(0,sr.match)(N,{Item:ee=>S(ee.value),ViewMore:ee=>e(He.Arrow({backendComponentName:ee.payload}))})}});let S=Xr(async h=>{o?.(h)},[o]),C=x.slice(0,p),w=x.slice(p,x.length);return Te.createElement(c,{flexDirection:"column",gap:1},C.length>0&&Te.createElement(H,{startIndex:0,titleKey:"general.backend_plugin_viewer.title",items:C}),w.length>0&&Te.createElement(H,{startIndex:p,titleKey:"general.backend_events_viewer.title",items:w}),r&&Te.createElement(I,{onClose:r}))};i();import Be,{useCallback as Yr}from"react";var Oe=E(_(),1);var mr=({backendComponentName:e,onClose:o,onSelect:r})=>{let{t:n}=k(),{getBackendComponent:t}=$(),s=Yr(p=>{r?.(p)},[r]);return Be.createElement(c,{flexDirection:"column",gap:1},Be.createElement(c,{flexDirection:"column"},Be.createElement(pe,{label:n((0,Oe.match)(e,{Api:()=>"dev_command.backend_apis_screen.select_label",Event:()=>"dev_command.backend_events_screen.select_label",ServicePlugin:()=>"dev_command.backend_plugins_screen.select_label"})),options:t(e).map((p,d)=>({key:d.toString(),title:(0,Oe.isType)(p,"ServicePlugin")?p.componentName:p.title,value:p})),onSubmit:({value:p})=>s(p)})),Be.createElement(I,{onClose:o}))};var He=(0,R.variant)({Arrow:(0,R.fields)(),Numeric:{}}),pr=({onClose:e,onSelect:o,initialSelectorType:r=He.Numeric()})=>{let[n,t]=$r(r);return Me.createElement(Me.Fragment,null,(0,R.match)(n,{Arrow:({backendComponentName:s})=>Me.createElement(mr,{backendComponentName:s,onSelect:o,onClose:e}),Numeric:()=>Me.createElement(ar,{onViewMore:t,onClose:e})}))};var dr=()=>{let[e,o]=Qr(T.Home());return(0,cr.match)(e,{Home:()=>Ne.createElement(rr,{onScreenChange:o}),SiteSelector:()=>Ne.createElement(nr,{onScreenChange:o}),DashboardScreen:({selectorType:r})=>Ne.createElement(Qo,{initialSelectorType:r,onSelect:()=>o(T.Home()),onClose:()=>o(T.Home())}),BackendScreen:({selectorType:r})=>Ne.createElement(pr,{initialSelectorType:r,onSelect:()=>o(T.Home()),onClose:()=>o(T.Home())})})};var Zr=({https:e})=>Ge.createElement(Eo,null,Ge.createElement(Ue,{https:e},Ge.createElement(dr,null)));export{Zr as DevCommand,Ue as DevEnvironmentProvider};
4
+ //# sourceMappingURL=DevCommand-GD7XT72H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/DevCommand/index.ts","../src/components/DevCommand/DevCommand.tsx","../src/components/DevCommand/DevEnvironment.tsx","../src/components/DevCommand/useArmUpdater.ts","../src/components/DevCommand/useDevServer.ts","../src/vite/custom-logger.ts","../src/components/DevCommand/devEnvLogs/useDevEnvLogs.tsx","../src/files/dev.log.ts","../src/components/DevCommand/devEnvLogs/DevEnvLogLine.tsx","../src/components/DevCommand/useSiteOverrideUpdater.ts","../../site-override-client/src/index.ts","../../site-override-client/src/client.ts","../../../node_modules/@wix/ambassador-cli-site-override-service-v1-site-override/http.impl.ts","../../site-override-client/src/schemas.ts","../../site-override-client/src/useSiteOverrideClient.ts","../src/site-override/createSiteOverrides.ts","../../../node_modules/@wix/ambassador-cli-site-override-service-v1-site-override/types.impl.ts","../src/components/DevCommand/TunnelingConsent.tsx","../../cli-user-config/src/user-config.ts","../src/components/DevCommand/DevCommandScreens.tsx","../src/components/DevCommand/HomeScreen.tsx","../src/components/DevCommand/screen-state.ts","../src/components/DevCommand/DevEnvLogsViewer.tsx","../src/components/Platform/PlatformSelector.tsx","../src/backend/useBackendComponents.ts","../src/components/DevCommand/DashboardNumericViewer.tsx","../src/components/CloseScreen/CloseScreen.tsx","../src/components/DevCommand/DashboardScreen.tsx","../src/components/DevCommand/DashboardArrowViewer.tsx","../src/components/NumericViewer/index.ts","../src/components/NumericViewer/NumericViewer.tsx","../src/components/DevCommand/SiteSelectorScreen.tsx","../src/components/CloseScreen/index.tsx","../src/components/DevCommand/BackendScreen.tsx","../src/components/DevCommand/BackendNumericViewer.tsx","../src/components/DevCommand/BackendArrowViewer.tsx"],"sourcesContent":["export { DevCommand } from './DevCommand.js';\nexport { DevEnvironmentProvider } from './DevEnvironment.js';\n","import React, { type FC } from 'react';\nimport { SiteIdProvider } from '../../site-id/SiteIdProvider.js';\nimport { DevEnvironmentProvider } from './DevEnvironment.js';\nimport { DevCommandScreens } from './DevCommandScreens.js';\n\nexport const DevCommand: FC<{ https: boolean }> = ({ https }) => {\n return (\n <SiteIdProvider>\n <DevEnvironmentProvider https={https}>\n <DevCommandScreens />\n </DevEnvironmentProvider>\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 { useTranslation } from '@wix/cli-i18n';\nimport { Spinner, useAsyncCallback, useExit } from '@wix/cli-ui-kit';\nimport { useErrorReporter } from '@wix/cli-error-reporting';\nimport { useProjectModel } from '../../model.js';\nimport { useArmUpdater } from './useArmUpdater.js';\nimport { useClientDevServer } from './useDevServer.js';\nimport {\n useDevEnvLogs,\n type DevEnvLog,\n type WriteLogFn,\n} from './devEnvLogs/useDevEnvLogs.js';\nimport { ArmTagProvider } from '../../context/armTag.js';\nimport { useSiteOverrideUpdater } from './useSiteOverrideUpdater.js';\nimport { TunnelingConsent } from './TunnelingConsent.js';\n\ntype DevEnvironment = {\n siteOverrideId: string;\n https: boolean;\n clientDevServerUrl: string;\n logs: DevEnvLog[];\n writeLog: WriteLogFn;\n};\n\nconst DevEnvironmentContext = createContext<DevEnvironment | null>(null);\n\nexport const DevEnvironmentProvider: FC<{\n https: boolean;\n children: ReactNode;\n}> = ({ https, children }) => {\n const { t } = useTranslation();\n const { reportError } = useErrorReporter();\n const exit = useExit();\n const createClientDevServer = useClientDevServer({ https });\n const createArmUpdater = useArmUpdater();\n const createSiteOverrideUpdater = useSiteOverrideUpdater();\n const { logs, writeLog } = useDevEnvLogs();\n const { watcher: projectModelWatcher } = useProjectModel();\n\n const startDevEnvAction = useAsyncCallback(async () => {\n const { devServerUrl: clientDevServerUrl, devServer: clientDevServer } =\n await createClientDevServer({\n projectModelWatcher,\n onLog(type, msg) {\n writeLog({ type, msg, prefix: 'vite' });\n },\n });\n\n const armTag = await createArmUpdater({\n devServerUrl: clientDevServerUrl,\n projectModelWatcher,\n onChange(changeType) {\n match(changeType, {\n 'change-received': () => {\n writeLog({ type: 'info', msg: t('dev_command.config_change') });\n },\n 'model-did-not-change': () => {\n writeLog({\n type: 'info',\n msg: t('dev_command.config_didnt_update'),\n });\n },\n 'model-updated': () => {\n clientDevServer.ws.send({ type: 'full-reload' });\n writeLog({ type: 'info', msg: t('dev_command.config_update') });\n },\n });\n },\n onError(error) {\n reportError(error);\n writeLog({ type: 'error', error });\n writeLog({ type: 'info', msg: t('dev_command.config_didnt_update') });\n },\n });\n\n const siteOverrideId = await createSiteOverrideUpdater({\n projectModelWatcher,\n });\n\n return { clientDevServerUrl, armTag, siteOverrideId, https };\n });\n\n return match(startDevEnvAction.status, {\n Loading: () => <Spinner text={t('dev_command.dev_environment.loading')} />,\n Success: ({\n result: { clientDevServerUrl, https, armTag, siteOverrideId },\n }) => (\n <DevEnvironmentContext.Provider\n value={{\n clientDevServerUrl,\n https,\n logs,\n writeLog,\n siteOverrideId,\n }}\n >\n <ArmTagProvider armTag={armTag}>{children}</ArmTagProvider>\n </DevEnvironmentContext.Provider>\n ),\n Error: () => null,\n NotRequested: () => (\n <TunnelingConsent onError={exit} onSuccess={startDevEnvAction.execute} />\n ),\n });\n};\n\nexport function useDevEnvironment(): DevEnvironment {\n const context = useContext(DevEnvironmentContext);\n if (context === null) {\n throw new Error(\n 'useDevEnvironment() cannot be used without an <DevEnvironmentProvider>'\n );\n }\n return context;\n}\n","import { useCallback } from 'react';\nimport { match } from 'variant';\nimport { deepEqual } from 'fast-equals';\nimport { updateAppManifestWithBaseUrl } from '@wix/cli-app-manifest';\nimport { useARMClient } from '@wix/arm-client';\nimport { useDebugLog } from '@wix/cli-debug-log';\nimport { createAppManifest } from '../../app-manifest/create.js';\nimport { getComponentSourceBuilder } from '../../app-manifest/component-source.js';\nimport type {\n ChangeType,\n ProjectModelWatcher,\n} from '../../app-manifest/project-model-watcher.js';\nimport { readAppConfig, saveAppConfig } from '../../files/app.config.js';\nimport { useProjectModel, type ProjectModel } from '../../model.js';\n\nconst createAppManifestWithBaseUrl = async (\n model: ProjectModel,\n devServerUrl: string\n) => {\n const manifest = await createAppManifest({\n appId: model.config.appId,\n components: model.components,\n componentSourceBuilder: getComponentSourceBuilder({\n model,\n devServerUrl,\n }),\n });\n\n return updateAppManifestWithBaseUrl(manifest, devServerUrl);\n};\n\ninterface CreateOptions {\n devServerUrl: string;\n projectModelWatcher: ProjectModelWatcher;\n onChange: (changeType: ChangeType) => void;\n onError: (e: unknown) => void;\n}\n\nexport function useArmUpdater() {\n const { model } = useProjectModel();\n const writeDebugLog = useDebugLog();\n const { createAppRelease, updateAppRelease } = useARMClient();\n\n return useCallback(\n async ({\n devServerUrl,\n projectModelWatcher,\n onChange,\n onError,\n }: CreateOptions) => {\n const { projectId } = model.config;\n const appManifest = await createAppManifestWithBaseUrl(\n model,\n devServerUrl\n );\n const appConfig = await readAppConfig(model.projectFolder, writeDebugLog);\n\n const createOrUpdateAppRelease = async (tag?: string) => {\n if (tag) {\n const updateState = await updateAppRelease(appManifest, tag);\n return match(updateState, {\n TagUpdated: () => tag,\n TagNotFound: ({ cause }) => {\n writeDebugLog(cause);\n return createAppRelease(appManifest, projectId);\n },\n });\n }\n return createAppRelease(appManifest, projectId);\n };\n\n const armTag = await createOrUpdateAppRelease(appConfig?.devArmTag);\n\n if (armTag !== appConfig?.devArmTag) {\n await saveAppConfig(model.projectFolder, { devArmTag: armTag }).catch(\n (error) => writeDebugLog(error)\n );\n }\n\n projectModelWatcher\n .onChange(async (newModel, changeType) => {\n try {\n if (changeType === 'model-updated') {\n if (newModel.components.length === 0) {\n return;\n }\n\n const updatedAppManifest = await createAppManifestWithBaseUrl(\n newModel,\n devServerUrl\n );\n\n if (!deepEqual(appManifest, updatedAppManifest)) {\n await updateAppRelease(updatedAppManifest, armTag);\n }\n }\n onChange(changeType);\n } catch (e) {\n onError(e);\n }\n })\n .onError(onError);\n\n return armTag;\n },\n [createAppRelease, model, updateAppRelease, writeDebugLog]\n );\n}\n","import { useRef, useCallback, useEffect } from 'react';\nimport { createServer, type ViteDevServer } from 'vite';\nimport { getClientViteConfig } from '../../vite/index.js';\nimport { getViteServerUrl } from '../../vite/vite-server-url.js';\nimport {\n createCustomLogger,\n type CustomLoggerOptions,\n} from '../../vite/custom-logger.js';\nimport type { ProjectModelWatcher } from '../../app-manifest/project-model-watcher.js';\nimport { useProjectModel } from '../../model.js';\nimport { ConfigType } from '../../vite/vite-config-options.js';\n\ninterface Options {\n projectModelWatcher: ProjectModelWatcher;\n onLog: CustomLoggerOptions['onLog'];\n}\n\nexport function useClientDevServer({ https }: { https: boolean }) {\n const devServerRef = useRef<ViteDevServer>();\n const { model } = useProjectModel();\n\n useEffect(() => {\n return () => {\n devServerRef.current?.close();\n };\n }, []);\n\n return useCallback(\n async ({ projectModelWatcher, onLog }: Options) => {\n const devServer = await createServer(\n await getClientViteConfig(model, {\n type: ConfigType.dev,\n https,\n projectModelWatcher,\n customLogger: createCustomLogger({ onLog }),\n })\n );\n devServerRef.current = devServer;\n\n await devServer.listen();\n\n return { devServerUrl: getViteServerUrl(devServer), devServer };\n },\n [model, https]\n );\n}\n","import type { Logger, Rollup } from 'vite';\n\nexport type LogType = 'error' | 'warning' | 'info';\n\nexport interface CustomLoggerOptions {\n onLog: (type: LogType, msg: string) => void;\n}\n\nexport function createCustomLogger({ onLog }: CustomLoggerOptions): Logger {\n const loggedErrors = new WeakSet<Error | Rollup.RollupError>();\n const warnedMessages = new Set<string>();\n\n const logger: Logger = {\n hasWarned: false,\n info(msg) {\n onLog('info', msg);\n },\n warn(msg) {\n logger.hasWarned = true;\n onLog('warning', msg);\n },\n warnOnce(msg) {\n if (warnedMessages.has(msg)) return;\n logger.hasWarned = true;\n onLog('warning', msg);\n warnedMessages.add(msg);\n },\n error(msg, opts) {\n logger.hasWarned = true;\n onLog('error', msg);\n if (opts?.error) {\n loggedErrors.add(opts.error);\n }\n },\n clearScreen() {},\n hasErrorLogged(error) {\n return loggedErrors.has(error);\n },\n };\n\n return logger;\n}\n","import React, {\n useCallback,\n useEffect,\n useState,\n useMemo,\n type ReactNode,\n type FC,\n} from 'react';\nimport { DEV_LOG_PATH } from '@wix/cli-app-definitions';\nimport { Trans } from '@wix/cli-i18n';\nimport { createRendererToString, Alert, Box, Text } from '@wix/cli-ui-kit';\nimport { DevLogStream } from '../../../files/dev.log.js';\nimport { useProjectModel } from '../../../model.js';\nimport type { LogType } from '../../../vite/custom-logger.js';\nimport { DevEnvLogLine } from './DevEnvLogLine.js';\n\ntype GenericLog = (\n | {\n type: LogType;\n msg: ReactNode;\n error?: never;\n }\n | {\n type: 'error';\n msg?: never;\n error: unknown;\n }\n) & { prefix?: LogPrefix };\n\ntype LogPrefix = 'app' | 'vite';\n\nexport type WriteLogFn = (log: GenericLog) => void;\n\nexport type DevEnvLog = GenericLog & {\n timestamp: Date;\n};\n\nconst ErrorMsg: FC = () => (\n <Box flexDirection=\"column\">\n <Alert type=\"error\">\n <Trans\n i18nKey=\"general.write_dev_log_failure.message\"\n components={[<Text bold />]}\n values={{ path: DEV_LOG_PATH }}\n />\n </Alert>\n <Box paddingTop={1}>\n <Alert type=\"insight\">\n <Trans i18nKey=\"general.write_dev_log_failure.hint\" />\n </Alert>\n </Box>\n </Box>\n);\n\nconst MAX_LOGS_TO_SHOW = 5;\n\nfunction isMessageFiltered(message: string) {\n if (/Port \\d{1,5} is in use, trying another one/.test(message)) {\n return true;\n }\n\n return false;\n}\n\nexport function useDevEnvLogs() {\n const { model } = useProjectModel();\n const [logs, setLogs] = useState<DevEnvLog[]>([]);\n\n const insertLog = useCallback((genericLog: GenericLog) => {\n const log = { ...genericLog, timestamp: new Date() };\n setLogs((logs) => {\n const newLogs = [...logs, log];\n if (newLogs.length > MAX_LOGS_TO_SHOW) {\n newLogs.shift();\n }\n return newLogs;\n });\n return log;\n }, []);\n\n const { renderer, stream } = useMemo(() => {\n return {\n renderer: createRendererToString(),\n stream: new DevLogStream(model.projectFolder, {\n onError() {\n insertLog({ type: 'error', msg: <ErrorMsg /> });\n },\n }),\n };\n }, [insertLog, model.projectFolder]);\n\n const writeLog = useCallback<WriteLogFn>(\n (genericLog) => {\n if (genericLog.msg && isMessageFiltered(genericLog.msg.toString())) {\n return;\n }\n\n const log = insertLog(genericLog);\n const content = renderer.render(<DevEnvLogLine {...log} />);\n\n stream.write(content);\n },\n [insertLog, renderer, stream]\n );\n\n useEffect(() => {\n return () => {\n renderer.unmount();\n stream.close();\n };\n }, [renderer, stream]);\n\n return { logs, writeLog };\n}\n","import { EOL } from 'node:os';\nimport { createWriteStream, type WriteStream } from 'node:fs';\nimport { getDevLogPath } from '@wix/cli-app-definitions';\n\nexport class DevLogStream {\n private drain = false;\n private readonly stream: WriteStream;\n\n constructor(\n projectFolder: string,\n private readonly opts: { onError: (err: Error) => void }\n ) {\n this.stream = createWriteStream(getDevLogPath(projectFolder), {\n flags: 'w',\n });\n\n this.stream.on('error', this.opts.onError);\n }\n\n write = (content: string) => {\n if (this.drain) {\n this.stream.once('drain', () => {\n this.drain = false;\n this.write(content);\n });\n return;\n }\n\n const written = this.stream.write(content.concat(EOL), (err) => {\n if (err) {\n this.opts.onError(err);\n }\n });\n if (!written) {\n this.drain = true;\n this.stream.once('drain', () => {\n this.drain = false;\n });\n }\n };\n\n close = () => {\n this.stream.close();\n };\n}\n","import React, { type FC } from 'react';\nimport { Box, Text } from '@wix/cli-ui-kit';\nimport { ErrorViewer } from '@wix/cli-error-reporting';\nimport type { DevEnvLog } from './useDevEnvLogs.js';\n\nexport const DevEnvLogLine: FC<DevEnvLog> = ({\n type,\n msg,\n error,\n prefix = 'app',\n timestamp,\n}) => {\n return (\n <Box columnGap={1}>\n <Box flexShrink={0}>\n <Text skin=\"secondary\">{timestamp.toLocaleTimeString()}</Text>\n </Box>\n <Box flexShrink={0}>\n <Text skin={type} bold>\n [{prefix}]\n </Text>\n </Box>\n <Box>\n {type === 'error' && error ? (\n <ErrorViewer error={error} />\n ) : typeof msg === 'string' ? (\n <Text>{msg}</Text>\n ) : (\n msg\n )}\n </Box>\n </Box>\n );\n};\n","import { useCallback } from 'react';\nimport { deepEqual } from 'fast-equals';\nimport { useSiteOverrideClient } from '@wix/site-override-client';\nimport { useDebugLog } from '@wix/cli-debug-log';\nimport type { ProjectModelWatcher } from '../../app-manifest/project-model-watcher.js';\nimport { useProjectModel } from '../../model.js';\nimport { createSiteOverrides } from '../../site-override/createSiteOverrides.js';\nimport { useSiteId } from '../../site-id/useSiteId.js';\nimport { readAppConfig, saveAppConfig } from '../../files/app.config.js';\n\nexport function useSiteOverrideUpdater() {\n const { model } = useProjectModel();\n const { site } = useSiteId();\n const writeDebugLog = useDebugLog();\n const { createOverride } = useSiteOverrideClient();\n\n return useCallback(\n async ({\n projectModelWatcher,\n }: {\n projectModelWatcher: ProjectModelWatcher;\n }) => {\n const { appId } = model.config;\n const appConfig = await readAppConfig(model.projectFolder, writeDebugLog);\n let overrides = createSiteOverrides(model) ?? {};\n\n const { id: siteOverrideId } = await createOverride({\n appId,\n siteId: site.id,\n overrides,\n siteOverrideId: appConfig?.devSiteOverrideId,\n });\n\n projectModelWatcher.onChange(async (newModel, changeType) => {\n if (changeType === 'model-updated') {\n const updatedOverrides = createSiteOverrides(newModel) ?? {};\n\n if (!deepEqual(overrides, updatedOverrides)) {\n await createOverride({\n appId,\n siteId: site.id,\n overrides: updatedOverrides,\n siteOverrideId,\n });\n overrides = updatedOverrides;\n }\n }\n });\n\n if (siteOverrideId !== appConfig?.devSiteOverrideId) {\n await saveAppConfig(model.projectFolder, {\n devSiteOverrideId: siteOverrideId,\n }).catch((error) => writeDebugLog(error));\n }\n\n return siteOverrideId;\n },\n [createOverride, model, site.id, writeDebugLog]\n );\n}\n","export { SiteOverrideClient } from './client.js';\nexport { useSiteOverrideClient } from './useSiteOverrideClient.js';\n","import type { HttpClient } from '@wix/cli-http-client';\nimport type { Options } from 'p-retry';\nimport pRetry from 'p-retry';\nimport { createOverride } from '@wix/ambassador-cli-site-override-service-v1-site-override/http';\nimport { isHttpError } from '@wix/cli-http-client';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { getTestOverrides } from '@wix/cli-test-overrides';\nimport type { ComponentOverride } from '@wix/ambassador-cli-site-override-service-v1-site-override/types';\nimport { createOverrideSchema } from './schemas.js';\n\nexport class SiteOverrideClient {\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 public createOverride = async ({\n appId,\n siteId,\n overrides,\n siteOverrideId,\n }: {\n appId: string;\n siteId: string;\n overrides: Record<string, ComponentOverride>;\n siteOverrideId?: string;\n }) => {\n try {\n const { data } = await pRetry(\n () =>\n this.httpClient.request(\n createOverride({\n siteOverride: {\n id: siteOverrideId,\n appId,\n siteId,\n overrides,\n },\n })\n ),\n this.retryOptions\n );\n\n return createOverrideSchema.parse(data).siteOverride;\n } catch (error) {\n if (isHttpError(error) && error.response?.status === 403) {\n if (\n error.response.data?.details?.applicationError?.code ===\n 'PERMISSION_DENIED_FOR_SITE'\n ) {\n throw new CliError({\n code: CliErrorCode.SitePermissionDenied({ siteId }),\n cause: error,\n });\n }\n\n throw new CliError({\n code: CliErrorCode.AppPermissionDenied({ appId }),\n cause: error,\n });\n }\n\n throw new CliError({\n code: CliErrorCode.FailedToCreateSiteOverride(),\n cause: error,\n });\n }\n };\n}\n",null,"import { z } from 'zod';\n\nexport const createOverrideSchema = z.object({\n siteOverride: z.object({\n id: z.string(),\n }),\n});\n","import { useMemo } from 'react';\nimport { useHttpClient } from '@wix/cli-http-client-react';\nimport { SiteOverrideClient } from './client.js';\n\nexport function useSiteOverrideClient() {\n const httpClient = useHttpClient({ type: 'backoffice' });\n return useMemo(() => new SiteOverrideClient(httpClient), [httpClient]);\n}\n","import { isType } from 'variant';\nimport {\n Type,\n type ComponentOverride,\n} from '@wix/ambassador-cli-site-override-service-v1-site-override/types';\nimport type { ProjectModel } from '../model.js';\nimport { DevCenterComponent } from '../dev-center/components/dev-center-component.js';\n\nexport function createSiteOverrides(model: ProjectModel) {\n const componentsToOverride = model.components.filter(\n isType(DevCenterComponent.EmbeddedScript)\n );\n\n if (componentsToOverride.length === 0) {\n return null;\n }\n\n return componentsToOverride.reduce<Record<string, ComponentOverride>>(\n (acc, component) => {\n const paramsOverride = component.paramsOverride || {};\n\n return {\n ...acc,\n [component.id]: {\n type: Type.EMBEDDED_SCRIPT,\n componentId: component.id,\n embeddedScriptOptions: { parameters: paramsOverride },\n },\n };\n },\n {}\n );\n}\n",null,"import React, { useState, type FC } from 'react';\nimport {\n ConfirmInput,\n Text,\n useAsync,\n useAsyncCallback,\n} from '@wix/cli-ui-kit';\nimport { Trans, useTranslation } from '@wix/cli-i18n';\nimport { readUserConfig, updateUserConfig } from '@wix/cli-user-config';\nimport { match } from 'variant';\nimport { useProjectModel } from '../../model.js';\n\ninterface Props {\n onError: () => void;\n onSuccess: () => void;\n}\n\nexport const TunnelingConsent: FC<Props> = ({ onError, onSuccess }) => {\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const [approved, setApproved] = useState<boolean>();\n\n const readUserConfigAction = useAsyncCallback(readUserConfig);\n\n const { status } = useAsync(\n async () => {\n if (model.backendComponents.length > 0) {\n return readUserConfigAction.execute();\n }\n return { tunneling: true };\n },\n [],\n {\n onSuccess: ({ tunneling }) => {\n if (tunneling) {\n onSuccess();\n }\n },\n }\n );\n\n return (\n <>\n {match(status, {\n Success: () => (\n <ConfirmInput\n label={t('dev_command.tunneling.confirm')}\n initialValue={false}\n onSubmit={(approved) => {\n updateUserConfig({ tunneling: approved });\n setApproved(approved);\n approved ? onSuccess() : onError();\n }}\n />\n ),\n Error: () => null,\n Loading: () => null,\n NotRequested: () => null,\n })}\n {approved === false && (\n <Text skin=\"error\">\n <Trans i18nKey=\"dev_command.tunneling.abort_dev\" />\n </Text>\n )}\n </>\n );\n};\n","import { join } from 'node:path';\nimport { getDataDirPath } from '@wix/cli-data-dir';\nimport { pathExists, readJson, writeJson } from '@wix/cli-fs';\nimport {\n userConfigSchema,\n CONFIG_FILE_NAME,\n type UserConfig,\n} from '@wix/cli-core-definitions';\n\nfunction getUserConfigPath() {\n return join(getDataDirPath(), CONFIG_FILE_NAME);\n}\n\nexport async function readUserConfig() {\n const configPath = getUserConfigPath();\n const isConfigExist = await pathExists(configPath);\n const json = isConfigExist ? await readJson(configPath) : {};\n return userConfigSchema.parse(json);\n}\n\nexport async function updateUserConfig(config: Partial<UserConfig>) {\n const currentConfig = await readUserConfig();\n const newConfig = {\n ...currentConfig,\n ...config,\n };\n\n const configPath = getUserConfigPath();\n await writeJson(configPath, newConfig);\n}\n","import React, { type FC, useState } from 'react';\nimport { match } from 'variant';\nimport { HomeScreen } from './HomeScreen.js';\nimport { SiteSelectorScreen } from './SiteSelectorScreen.js';\nimport { ScreenState } from './screen-state.js';\nimport { DashboardScreen } from './DashboardScreen.js';\nimport { BackendScreen } from './BackendScreen.js';\n\nexport const DevCommandScreens: FC = () => {\n const [screen, setScreen] = useState<ScreenState>(ScreenState.Home());\n\n return match(screen, {\n Home: () => <HomeScreen onScreenChange={setScreen} />,\n SiteSelector: () => <SiteSelectorScreen onScreenChange={setScreen} />,\n DashboardScreen: ({ selectorType }) => (\n <DashboardScreen\n initialSelectorType={selectorType}\n onSelect={() => setScreen(ScreenState.Home())}\n onClose={() => setScreen(ScreenState.Home())}\n />\n ),\n BackendScreen: ({ selectorType }) => (\n <BackendScreen\n initialSelectorType={selectorType}\n onSelect={() => setScreen(ScreenState.Home())}\n onClose={() => setScreen(ScreenState.Home())}\n />\n ),\n });\n};\n","import React, { type FC } from 'react';\nimport {\n Key,\n Box,\n Text,\n SuccessIcon,\n InfoIcon,\n PointerIcon,\n Link,\n useInput,\n Alert,\n} from '@wix/cli-ui-kit';\nimport { Trans } from '@wix/cli-i18n';\nimport { openBrowser } from '@wix/user-browser';\nimport { PlatformType } from '@wix/cli-app-definitions';\nimport { isType } from 'variant';\nimport { useSiteId } from '../../site-id/index.js';\nimport { ScreenState } from './screen-state.js';\nimport { useDevEnvironment } from './DevEnvironment.js';\nimport { DevEnvLogsViewer } from './DevEnvLogsViewer.js';\nimport { PlatformSelector } from '../Platform/PlatformSelector.js';\nimport { useExtensions } from '../extensions/useExtensions.js';\nimport { DashboardNumericViewer } from './DashboardNumericViewer.js';\nimport { usePlatform } from '../Platform/usePlatform.js';\nimport { useProjectModel } from '../../model.js';\n\ninterface Props {\n onScreenChange: (screen: ScreenState) => void;\n}\n\nexport const HomeScreen: FC<Props> = ({ onScreenChange }) => {\n const { site } = useSiteId();\n const { clientDevServerUrl, https, writeLog } = useDevEnvironment();\n const { hasSinglePlatform } = usePlatform();\n const { hasExtensions, dashboardExtensions } = useExtensions();\n const { model } = useProjectModel();\n\n const openDevServerInBrowser = async () => {\n try {\n await openBrowser(clientDevServerUrl);\n } catch (error) {\n writeLog({\n type: 'error',\n prefix: 'app',\n msg: (\n <Alert type=\"error\">\n <Trans\n i18nKey=\"dev_command.dev_environment.https_url.failed_to_open\"\n components={[<Link url={clientDevServerUrl} />]}\n />\n </Alert>\n ),\n });\n }\n };\n\n useInput(async (input) => {\n if (input === 'c') {\n onScreenChange(ScreenState.SiteSelector());\n }\n if (input === 'a' && https) {\n await openDevServerInBrowser();\n }\n });\n\n return (\n <>\n <Box gap={1}>\n <Text skin=\"success\">\n <SuccessIcon />\n </Text>\n <Trans i18nKey=\"dev_command.dev_environment.started\" />\n </Box>\n <Box gap={1}>\n <InfoIcon />\n <Trans\n i18nKey=\"dev_command.dev_environment.url\"\n components={[<Link url={clientDevServerUrl} />]}\n />\n </Box>\n {https && (\n <Box paddingLeft={2}>\n <Text skin=\"secondary\">\n <Trans\n components={[<Key value=\"A\" />]}\n i18nKey=\"dev_command.dev_environment.https_url.open_info\"\n />\n </Text>\n </Box>\n )}\n <Box gap={1}>\n <PointerIcon />\n <Trans\n i18nKey=\"general.dev_site.current\"\n values={{ name: site.displayName }}\n />\n </Box>\n <Box paddingLeft={2}>\n <Text skin=\"secondary\">\n <Trans\n i18nKey=\"dev_command.dev_site.change\"\n components={[<Key value=\"C\" />]}\n />\n </Text>\n </Box>\n <Box paddingTop={1} paddingBottom={1} flexDirection=\"column\">\n {!hasExtensions() ? (\n <Trans\n i18nKey=\"general.platform.none\"\n // Original link is:\n // https://dev.wix.com/docs/build-apps/developer-tools/cli/get-started/about-the-wix-cli-for-apps\n components={[<Link url=\"https://wix.to/b7o4Ml0\" />]}\n />\n ) : (\n <>\n {hasSinglePlatform(PlatformType.Dashboard()) &&\n model.backendComponents.length === 0 &&\n dashboardExtensions.some(\n (dashboardExtension) =>\n !isType(dashboardExtension, 'DashboardModal')\n ) ? (\n <DashboardNumericViewer\n onViewMore={(selectorType) =>\n onScreenChange(\n ScreenState.DashboardScreen({\n selectorType,\n })\n )\n }\n />\n ) : (\n <>\n <Trans\n i18nKey=\"general.view_changes\"\n components={[<Text skin=\"secondary\" />]}\n />\n <PlatformSelector\n onMultipleDashboardExtensionSelection={() =>\n onScreenChange(ScreenState.DashboardScreen())\n }\n onMultipleBackendComponentSelection={() =>\n onScreenChange(ScreenState.BackendScreen())\n }\n />\n </>\n )}\n </>\n )}\n </Box>\n <DevEnvLogsViewer />\n </>\n );\n};\n","import { fields, variant, type VariantOf } from 'variant';\nimport type { DashboardScreenSelector } from './DashboardScreen.js';\nimport type { BackendScreenSelector } from './BackendScreen.js';\n\nexport const ScreenState = variant({\n Home: {},\n SiteSelector: {},\n DashboardScreen: fields<{ selectorType?: DashboardScreenSelector }>(),\n BackendScreen: fields<{ selectorType?: BackendScreenSelector }>(),\n});\n\nexport type ScreenState = VariantOf<typeof ScreenState>;\n","import React, { type FC } from 'react';\nimport { Text, Box } from '@wix/cli-ui-kit';\nimport { useTranslation, Trans } from '@wix/cli-i18n';\nimport { DEV_LOG_PATH } from '@wix/cli-app-definitions';\nimport { useDevEnvironment } from './DevEnvironment.js';\nimport { DevEnvLogLine } from './devEnvLogs/DevEnvLogLine.js';\n\nexport const DevEnvLogsViewer: FC = () => {\n const { t } = useTranslation();\n const { logs } = useDevEnvironment();\n const isEmpty = !logs.length;\n\n return (\n <>\n <Box gap={1}>\n <Trans\n i18nKey=\"dev_command.dev_env_logs.title\"\n components={[<Text skin={isEmpty ? 'secondary' : 'standard'} />]}\n values={{ path: DEV_LOG_PATH }}\n />\n </Box>\n {isEmpty && (\n <Text skin=\"secondary\">{t('dev_command.dev_env_logs.empty')}</Text>\n )}\n {logs.map((log) => {\n return <DevEnvLogLine key={log.timestamp.getTime()} {...log} />;\n })}\n </>\n );\n};\n","import React, { useCallback, type FC, useMemo } from 'react';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { PointerSmallIcon, Key, useInput, Text, Box } from '@wix/cli-ui-kit';\nimport { PlatformType } from '@wix/cli-app-definitions';\nimport { useExtensions } from '../extensions/useExtensions.js';\nimport {\n openPage,\n resolveDashboardExtensionUrl,\n resolvePlatformUrl,\n useEnvConfig,\n} from '../extensions/utils.js';\nimport { useDevEnvironment } from '../DevCommand/DevEnvironment.js';\nimport { useProjectModel } from '../../model.js';\nimport { usePlatform } from './usePlatform.js';\nimport { useBackendComponents } from '../../backend/useBackendComponents.js';\n\ntype PlatformOptionProps = {\n inputKey: string;\n label: string;\n suffix?: React.ReactNode;\n disabled?: boolean;\n};\n\nconst PlatformOption: FC<PlatformOptionProps> = ({\n label,\n inputKey,\n suffix,\n disabled,\n}) => {\n const getTextSkin = () => (disabled ? 'secondary' : 'standard');\n\n return (\n <Box>\n <Box marginRight={1}>\n <Box marginRight={1}>\n <Text skin={getTextSkin()}>\n <PointerSmallIcon /> <Key value={inputKey} /> -\n </Text>\n </Box>\n <Box gap={1}>\n <Text skin={getTextSkin()}>{label}</Text>\n </Box>\n </Box>\n <Text skin={getTextSkin()}>{suffix}</Text>\n </Box>\n );\n};\n\ninterface PlatformSelector {\n onMultipleDashboardExtensionSelection: () => void;\n onMultipleBackendComponentSelection: () => void;\n}\n\nexport const PlatformSelector: FC<PlatformSelector> = ({\n onMultipleDashboardExtensionSelection,\n onMultipleBackendComponentSelection,\n}) => {\n const { t } = useTranslation();\n const { writeLog, siteOverrideId } = useDevEnvironment();\n const { model } = useProjectModel();\n const { isPlatformExists } = usePlatform();\n const { dashboardExtensions } = useExtensions();\n const { hasComponentByType } = useBackendComponents();\n const envConfig = useEnvConfig();\n\n const openPlatform = useCallback(\n (platformType: PlatformType) => {\n openPage(\n {\n title: platformType.type,\n url: resolvePlatformUrl({\n envConfig,\n platformType,\n siteOverrideId,\n }),\n },\n writeLog\n );\n },\n [envConfig, writeLog, siteOverrideId]\n );\n\n useInput((input) => {\n if (input === 'd') {\n if (dashboardExtensions.length === 1) {\n openPage(\n {\n title: 'Dashboard',\n url: resolveDashboardExtensionUrl({\n envConfig,\n extension: dashboardExtensions[0],\n }),\n },\n writeLog\n );\n } else {\n onMultipleDashboardExtensionSelection();\n }\n }\n if (input === 'e') {\n openPlatform(PlatformType.Editor());\n }\n if (input === 's' && envConfig.site.viewUrl) {\n openPlatform(PlatformType.Site());\n }\n if (input === 'b' && model.backendComponents.length > 0) {\n onMultipleBackendComponentSelection();\n }\n });\n\n const dashboardOptionSuffix = useMemo(() => {\n if (dashboardExtensions.length === 0) {\n return null;\n }\n if (dashboardExtensions.length === 1) {\n return <Text skin=\"secondary\"> - {dashboardExtensions[0].route}</Text>;\n }\n return <Text>{String.fromCodePoint(0x25bc)}</Text>; // ▼\n }, [dashboardExtensions]);\n\n return (\n <Box paddingLeft={2} flexDirection=\"column\">\n {isPlatformExists(PlatformType.Site()) && (\n <PlatformOption\n inputKey=\"S\"\n label={\n envConfig.site.viewUrl\n ? t('general.platform.site')\n : t('general.platform.unpublished_site')\n }\n disabled={!envConfig.site.viewUrl}\n />\n )}\n {isPlatformExists(PlatformType.Editor()) && (\n <PlatformOption inputKey=\"E\" label={t('general.platform.editor')} />\n )}\n {isPlatformExists(PlatformType.Dashboard()) && (\n <PlatformOption\n inputKey=\"D\"\n label={t('general.platform.dashboard')}\n suffix={dashboardOptionSuffix}\n />\n )}\n {(hasComponentByType('Event') || hasComponentByType('ServicePlugin')) && (\n <PlatformOption\n inputKey=\"B\"\n label={t('general.platform.backend')}\n suffix={<Text>{String.fromCodePoint(0x25bc)}</Text>} // ▼\n />\n )}\n </Box>\n );\n};\n","import { useCallback, useMemo } from 'react';\nimport { typeCatalog } from 'variant';\nimport { BackendComponent } from './definitions.js';\nimport { useProjectModel } from '../model.js';\n\nconst BackendComponentsTypes = typeCatalog(BackendComponent);\nexport type BackendComponentType = keyof typeof BackendComponentsTypes;\ntype BackendComponentMap = {\n [T in BackendComponentType]: BackendComponent<T>[];\n};\n\nexport function useBackendComponents() {\n const { model } = useProjectModel();\n\n const backendComponentsByType = useMemo(() => {\n const backendComponentsMap =\n model.backendComponents.reduce<BackendComponentMap>(\n (acc, backendComponent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n acc[backendComponent.type].push(backendComponent as any);\n return acc;\n },\n {\n Api: [],\n Event: [],\n ServicePlugin: [],\n }\n );\n backendComponentsMap.Api = backendComponentsMap.Api.sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n backendComponentsMap.Event = backendComponentsMap.Event.sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n backendComponentsMap.ServicePlugin =\n backendComponentsMap.ServicePlugin.sort((a, b) =>\n a.componentName.localeCompare(b.componentName)\n );\n return backendComponentsMap;\n }, [model.backendComponents]);\n\n const hasComponentByType = useCallback(\n (componentType?: BackendComponentType) =>\n componentType\n ? backendComponentsByType[componentType].length > 0\n : model.backendComponents.length > 0,\n [backendComponentsByType, model.backendComponents]\n );\n\n const getBackendComponent = useCallback(\n <T extends BackendComponentType>(componentType: T) =>\n backendComponentsByType[componentType],\n [backendComponentsByType]\n );\n\n return {\n backendComponentsByType,\n getBackendComponent,\n hasComponentByType,\n };\n}\n","import React, { type FC, useMemo, useCallback } from 'react';\nimport { Box, useInput } from '@wix/cli-ui-kit';\nimport { match } from 'variant';\nimport {\n openPage,\n resolveDashboardExtensionUrl,\n useEnvConfig,\n} from '../extensions/utils.js';\nimport { useDevEnvironment } from './DevEnvironment.js';\nimport type { DevCenterComponent } from '../../dev-center/components/dev-center-component.js';\nimport { CloseScreen } from '../CloseScreen/CloseScreen.js';\nimport { DashboardScreenSelector } from './DashboardScreen.js';\nimport type { DashboardExtension } from '../extensions/useExtensions.js';\nimport { useExtensions } from '../extensions/useExtensions.js';\nimport { NumericViewer } from '../NumericViewer/index.js';\nimport { NumericOption } from '../NumericViewer/NumericViewer.js';\n\nconst MAX_EXTENSIONS = 9;\nconst MAX_DASHBOARD_PAGES = 3;\nconst MAX_PAGE_PLUGINS = 3;\nconst MAX_MENU_PLUGINS = 3;\n\ninterface Props {\n onViewMore: (dashboardScreenSelector: DashboardScreenSelector) => void;\n onSelect?: (page: DevCenterComponent<DashboardExtension>) => void;\n onClose?: () => void;\n}\n\nexport const DashboardNumericViewer: FC<Props> = ({\n onViewMore,\n onSelect,\n onClose,\n}) => {\n const { getExtensions } = useExtensions();\n const { writeLog } = useDevEnvironment();\n const envConfig = useEnvConfig();\n\n const dashboardExtensions = useMemo(\n () => ({\n dashboardPages: getExtensions('DashboardPage'),\n dashboardMenuPlugins: getExtensions('DashboardMenuPlugin'),\n dashboardPlugins: getExtensions('DashboardPlugin'),\n }),\n [getExtensions]\n );\n\n const dashboardPagesData = dashboardExtensions.dashboardPages.slice(\n 0,\n dashboardExtensions.dashboardPages.length > MAX_DASHBOARD_PAGES\n ? MAX_DASHBOARD_PAGES - 1\n : dashboardExtensions.dashboardPages.length\n );\n\n const dashboardPagesShowMoreIndex =\n dashboardExtensions.dashboardPages.length > dashboardPagesData.length\n ? dashboardPagesData.length + 1\n : undefined;\n\n const dashboardPagesCount = Math.max(\n dashboardPagesData.length,\n dashboardPagesShowMoreIndex || 0\n );\n\n const maxMenuPlugins = Math.min(\n MAX_MENU_PLUGINS,\n Math.floor((MAX_EXTENSIONS - dashboardPagesCount) / 2)\n );\n\n const dashboardMenuPluginsData =\n dashboardExtensions.dashboardMenuPlugins.slice(\n 0,\n dashboardExtensions.dashboardMenuPlugins.length > maxMenuPlugins\n ? maxMenuPlugins - 1\n : dashboardExtensions.dashboardMenuPlugins.length\n );\n\n const dashboardMenuPluginsShowMoreIndex =\n dashboardExtensions.dashboardMenuPlugins.length >\n dashboardMenuPluginsData.length\n ? dashboardMenuPluginsData.length + dashboardPagesCount + 1\n : undefined;\n\n const dashboardMenuPluginsCount = Math.max(\n dashboardMenuPluginsData.length + dashboardPagesCount,\n dashboardMenuPluginsShowMoreIndex || 0\n );\n\n const maxPagePlugins = Math.min(\n MAX_PAGE_PLUGINS,\n MAX_EXTENSIONS - dashboardMenuPluginsCount\n );\n\n const dashboardPluginsData = dashboardExtensions.dashboardPlugins.slice(\n 0,\n dashboardExtensions.dashboardPlugins.length > maxPagePlugins\n ? maxPagePlugins - 1\n : dashboardExtensions.dashboardPlugins.length\n );\n\n const dashboardPluginsShowMoreIndex =\n dashboardExtensions.dashboardPlugins.length > dashboardPluginsData.length\n ? dashboardPluginsData.length + dashboardMenuPluginsCount + 1\n : undefined;\n\n const visibleItems: NumericOption<\n DevCenterComponent<DashboardExtension>,\n DashboardExtension\n >[] = [\n ...dashboardPagesData.map((page) =>\n NumericOption.Item({\n title: page.title,\n description: page.route,\n value: page,\n })\n ),\n ...(dashboardPagesShowMoreIndex\n ? [NumericOption.ViewMore('DashboardPage' as DashboardExtension)]\n : []),\n ...dashboardMenuPluginsData.map((menuPlugin) =>\n NumericOption.Item({\n title: menuPlugin.title,\n description: menuPlugin.route,\n value: menuPlugin,\n })\n ),\n ...(dashboardMenuPluginsShowMoreIndex\n ? [NumericOption.ViewMore('DashboardMenuPlugin' as DashboardExtension)]\n : []),\n ...dashboardPluginsData.map((pagePlugin) =>\n NumericOption.Item({\n title: pagePlugin.title,\n description: pagePlugin.route,\n value: pagePlugin,\n })\n ),\n ...(dashboardPluginsShowMoreIndex\n ? [NumericOption.ViewMore('DashboardPlugin' as DashboardExtension)]\n : []),\n ];\n\n useInput((input) => {\n const inputNumber = Number(input);\n if (inputNumber > 0 && inputNumber <= visibleItems.length) {\n const item = visibleItems.at(inputNumber - 1);\n if (item) {\n match(item, {\n Item: (item) => handleSelect(item.value),\n ViewMore: (viewMore) =>\n onViewMore(\n DashboardScreenSelector.Arrow({\n dashboardExtension: viewMore.payload,\n })\n ),\n });\n }\n }\n });\n\n const handleSelect = useCallback(\n async (dashboardExtension: DevCenterComponent<DashboardExtension>) => {\n const url = resolveDashboardExtensionUrl({\n envConfig,\n extension: dashboardExtension,\n });\n await openPage({ url, title: dashboardExtension.title }, writeLog);\n onSelect?.(dashboardExtension);\n },\n [onSelect, writeLog, envConfig]\n );\n\n const dashboardPages = visibleItems.slice(0, dashboardPagesCount);\n const dashboardMenuPlugins = visibleItems.slice(\n dashboardPagesCount,\n dashboardMenuPluginsCount\n );\n const dashboardPlugins = visibleItems.slice(\n dashboardMenuPluginsCount,\n visibleItems.length\n );\n\n return (\n <Box flexDirection=\"column\" gap={1}>\n {dashboardPages.length > 0 && (\n <NumericViewer\n startIndex={0}\n titleKey=\"general.dashboard_pages_viewer.title\"\n items={dashboardPages}\n />\n )}\n {dashboardMenuPlugins.length > 0 && (\n <NumericViewer\n startIndex={dashboardPagesCount}\n titleKey=\"general.dashboard_menu_plugins_viewer.title\"\n items={dashboardMenuPlugins}\n />\n )}\n {dashboardPlugins.length > 0 && (\n <NumericViewer\n startIndex={dashboardMenuPluginsCount}\n titleKey=\"general.dashboard_plugins_viewer.title\"\n items={dashboardPlugins}\n />\n )}\n {onClose && <CloseScreen onClose={onClose} />}\n </Box>\n );\n};\n","import React, { type FC } from 'react';\nimport { Key, Text, useInput } from '@wix/cli-ui-kit';\nimport { Trans } from '@wix/cli-i18n';\n\ninterface Props {\n onClose: () => void;\n}\n\nexport const CloseScreen: FC<Props> = ({ onClose }) => {\n useInput((_, key) => {\n if (key.escape) {\n onClose();\n }\n });\n\n return (\n <Text skin=\"secondary\">\n <Trans\n i18nKey=\"general.close_screen\"\n components={[<Key value=\"esc\" />]}\n />\n </Text>\n );\n};\n","import React, { useState, type FC } from 'react';\nimport { fields, match, variant, type VariantOf } from 'variant';\nimport { DashboardArrowViewer } from './DashboardArrowViewer.js';\nimport { DashboardNumericViewer } from './DashboardNumericViewer.js';\nimport type { DevCenterComponent } from '../../dev-center/components/dev-center-component.js';\nimport type { DashboardExtension } from '../extensions/useExtensions.js';\n\nexport const DashboardScreenSelector = variant({\n Arrow: fields<{\n dashboardExtension: DashboardExtension;\n }>(),\n Numeric: {},\n});\n\nexport type DashboardScreenSelector = VariantOf<typeof DashboardScreenSelector>;\n\ninterface Props {\n onClose: () => void;\n onSelect?: (page: DevCenterComponent<DashboardExtension>) => void;\n initialSelectorType?: DashboardScreenSelector;\n}\n\nexport const DashboardScreen: FC<Props> = ({\n onClose,\n onSelect,\n initialSelectorType = DashboardScreenSelector.Numeric(),\n}) => {\n const [selectorType, setSelectorType] =\n useState<DashboardScreenSelector>(initialSelectorType);\n\n return (\n <>\n {match(selectorType, {\n Arrow: ({ dashboardExtension }) => (\n <DashboardArrowViewer\n dashboardExtension={dashboardExtension}\n onSelect={onSelect}\n onClose={onClose}\n />\n ),\n Numeric: () => (\n <DashboardNumericViewer\n onViewMore={setSelectorType}\n onSelect={onSelect}\n onClose={onClose}\n />\n ),\n })}\n </>\n );\n};\n","import React, { useCallback, type FC } from 'react';\nimport { Box, SelectInput } from '@wix/cli-ui-kit';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { match } from 'variant';\nimport { CloseScreen } from '../CloseScreen/CloseScreen.js';\nimport type { DevCenterComponent } from '../../dev-center/components/dev-center-component.js';\nimport {\n openPage,\n resolveDashboardExtensionUrl,\n useEnvConfig,\n} from '../extensions/utils.js';\nimport { useDevEnvironment } from './DevEnvironment.js';\nimport {\n useExtensions,\n type DashboardExtension,\n} from '../extensions/useExtensions.js';\n\ninterface Props {\n dashboardExtension: DashboardExtension;\n onSelect?: (page: DevCenterComponent<DashboardExtension>) => void;\n onClose: () => void;\n}\n\nexport const DashboardArrowViewer: FC<Props> = ({\n dashboardExtension,\n onClose,\n onSelect,\n}) => {\n const { t } = useTranslation();\n const { writeLog } = useDevEnvironment();\n const { getExtensions } = useExtensions();\n const envConfig = useEnvConfig();\n\n const handleSubmit = useCallback(\n (dashboardExtension: DevCenterComponent<DashboardExtension>) => {\n const url = resolveDashboardExtensionUrl({\n envConfig,\n extension: dashboardExtension,\n });\n openPage({ url, title: dashboardExtension.title }, writeLog);\n onSelect?.(dashboardExtension);\n },\n [onSelect, writeLog, envConfig]\n );\n\n const getLabelKey = () =>\n match(dashboardExtension, {\n DashboardPlugin: () =>\n 'dev_command.dashboard_page_plugin_screen.select_label',\n DashboardMenuPlugin: () =>\n 'dev_command.dashboard_menu_plugin_screen.select_label',\n DashboardPage: () => 'dev_command.dashboard_pages_screen.select_label',\n DashboardModal: () => 'dev_command.dashboard_modal_screen.select_label',\n });\n\n return (\n <Box flexDirection=\"column\" gap={1}>\n <Box flexDirection=\"column\">\n <SelectInput<DevCenterComponent<DashboardExtension>>\n label={t(getLabelKey())}\n options={getExtensions(dashboardExtension).map(\n (dashboardExtensionInstance) => ({\n key: dashboardExtensionInstance.id,\n title: dashboardExtensionInstance.title,\n description: dashboardExtensionInstance.route,\n value: dashboardExtensionInstance,\n })\n )}\n onSubmit={({ value: dashboardExtensionInstance }) =>\n handleSubmit(dashboardExtensionInstance)\n }\n />\n </Box>\n <CloseScreen onClose={onClose} />\n </Box>\n );\n};\n","export { NumericViewer, type NumericOption } from './NumericViewer.js';\n","import React, { type FC, type ReactNode } from 'react';\nimport { Box, Text, Key, PointerSmallIcon } from '@wix/cli-ui-kit';\nimport { Trans } from '@wix/cli-i18n';\nimport { variant, onTerms, fields, match, payload } from 'variant';\nimport type { TypeNames, GVariantOf } from 'variant';\n\nconst ListItem: FC<{\n itemNumber: number;\n children: ReactNode;\n}> = ({ itemNumber, children }) => {\n const keyValue = `${itemNumber}`;\n return (\n <Box flexDirection=\"row\" gap={1}>\n <Text>\n <PointerSmallIcon /> <Key value={keyValue} /> -\n </Text>\n {children}\n </Box>\n );\n};\n\nexport const NumericOption = variant(\n onTerms(({ I, V }) => ({\n Item: fields<{ title: string; description?: string; value: typeof I }>(),\n ViewMore: payload(V),\n }))\n);\n\nexport type NumericOption<\n I,\n V,\n TType extends TypeNames<typeof NumericOption> = undefined\n> = GVariantOf<typeof NumericOption, TType, { I: I; V: V }>;\n\ninterface Props<I, V> {\n startIndex: number;\n titleKey: string;\n items: NumericOption<I, V>[];\n}\n\nexport function NumericViewer<I, V>({\n startIndex,\n titleKey,\n items,\n}: Props<I, V>) {\n return (\n <Box flexDirection=\"column\">\n <Trans i18nKey={titleKey} />\n <Box paddingLeft={2} flexDirection=\"column\">\n {items.map((item, index) => (\n <ListItem\n key={startIndex + index + 1}\n itemNumber={startIndex + index + 1}\n >\n {match(item, {\n Item: ({ title, description }) => (\n <Box flexDirection=\"row\" gap={1}>\n <Text>{title}</Text>\n {description && <Text skin=\"secondary\">({description})</Text>}\n </Box>\n ),\n ViewMore: () => (\n <Trans i18nKey=\"general.numeric_viewer.show_more\" />\n ),\n })}\n </ListItem>\n ))}\n </Box>\n </Box>\n );\n}\n","import React, { type FC, useState, useCallback } from 'react';\nimport { Alert, Box } from '@wix/cli-ui-kit';\nimport { ErrorViewer, useErrorReporter } from '@wix/cli-error-reporting';\nimport type { Site } from '@wix/site-list-client';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { SiteSelector } from '@wix/cli-site-selector';\nimport { useProjectModel } from '../../model.js';\nimport { useSiteId } from '../../site-id/index.js';\nimport { CloseScreen } from '../CloseScreen';\nimport { ScreenState } from './screen-state.js';\n\ninterface Props {\n onScreenChange: (screen: ScreenState) => void;\n}\n\nexport const SiteSelectorScreen: FC<Props> = ({ onScreenChange }) => {\n const { t } = useTranslation();\n const { model } = useProjectModel();\n const { setSite } = useSiteId();\n const { reportError } = useErrorReporter();\n const [error, setError] = useState<unknown>(null);\n\n const handleError = useCallback(\n (error: unknown) => {\n reportError(error);\n setError(error);\n },\n [reportError, setError]\n );\n\n const handleSubmit = useCallback(\n async (site: Site) => {\n try {\n await setSite(site);\n onScreenChange(ScreenState.Home());\n } catch (e) {\n handleError(e);\n }\n },\n [setSite, onScreenChange, handleError]\n );\n\n return (\n <Box flexDirection=\"column\" gap={1}>\n <Box flexDirection=\"column\">\n <SiteSelector\n appId={model.config.appId}\n onSubmit={handleSubmit}\n onError={handleError}\n />\n {error ? (\n <ErrorViewer\n error={error}\n systemErrorOverride={\n <Alert type=\"error\">{t('dev_command.site_selector.error')}</Alert>\n }\n />\n ) : null}\n </Box>\n <CloseScreen onClose={() => onScreenChange(ScreenState.Home())} />\n </Box>\n );\n};\n","export { CloseScreen } from './CloseScreen.js';\n","import React, { useState, type FC } from 'react';\nimport { fields, match, variant, type VariantOf } from 'variant';\nimport type {\n BackendComponent,\n BackendComponentNames,\n} from '../../backend/definitions.js';\nimport { BackendNumericViewer } from './BackendNumericViewer.js';\nimport { BackendArrowViewer } from './BackendArrowViewer.js';\n\nexport const BackendScreenSelector = variant({\n Arrow: fields<{\n backendComponentName: BackendComponentNames;\n }>(),\n Numeric: {},\n});\n\nexport type BackendScreenSelector = VariantOf<typeof BackendScreenSelector>;\n\ninterface Props {\n onClose: () => void;\n onSelect?: (backendComponent: BackendComponent) => void;\n initialSelectorType?: BackendScreenSelector;\n}\n\nexport const BackendScreen: FC<Props> = ({\n onClose,\n onSelect,\n initialSelectorType = BackendScreenSelector.Numeric(),\n}) => {\n const [selectorType, setSelectorType] =\n useState<BackendScreenSelector>(initialSelectorType);\n\n return (\n <>\n {match(selectorType, {\n Arrow: ({ backendComponentName }) => (\n <BackendArrowViewer\n backendComponentName={backendComponentName}\n onSelect={onSelect}\n onClose={onClose}\n />\n ),\n Numeric: () => (\n <BackendNumericViewer\n onViewMore={setSelectorType}\n onClose={onClose}\n />\n ),\n })}\n </>\n );\n};\n","import React, { type FC, useMemo, useCallback } from 'react';\nimport { Box, useInput } from '@wix/cli-ui-kit';\nimport { match } from 'variant';\nimport { CloseScreen } from '../CloseScreen/CloseScreen.js';\nimport { useBackendComponents } from '../../backend/useBackendComponents.js';\nimport {\n NumericOption,\n NumericViewer,\n} from '../NumericViewer/NumericViewer.js';\nimport { BackendScreenSelector } from './BackendScreen.js';\nimport type {\n BackendComponent,\n BackendComponentNames,\n} from '../../backend/definitions.js';\n\nconst MAX_BACKEND_COMPONENT = 9;\nconst MAX_SERVICE_PLUGINS = 4;\nconst MAX_EVENTS = 5;\n\ninterface Props {\n onViewMore: (backendScreen: BackendScreenSelector) => void;\n onSelect?: (backendComponent: BackendComponent) => void;\n onClose?: () => void;\n}\n\nexport const BackendNumericViewer: FC<Props> = ({\n onViewMore,\n onSelect,\n onClose,\n}) => {\n const { getBackendComponent } = useBackendComponents();\n\n const backendComponents = useMemo(\n () => ({\n apis: getBackendComponent('Api'),\n events: getBackendComponent('Event'),\n servicePlugins: getBackendComponent('ServicePlugin'),\n }),\n [getBackendComponent]\n );\n\n const servicePluginsData = backendComponents.servicePlugins.slice(\n 0,\n backendComponents.servicePlugins.length > MAX_SERVICE_PLUGINS\n ? MAX_SERVICE_PLUGINS - 1\n : backendComponents.servicePlugins.length\n );\n\n const servicePluginsShowMoreIndex =\n backendComponents.servicePlugins.length > servicePluginsData.length\n ? servicePluginsData.length + 1\n : undefined;\n\n const servicePluginsCount = Math.max(\n servicePluginsData.length,\n servicePluginsShowMoreIndex ?? 0\n );\n\n const maxBackendEvents = Math.min(\n MAX_EVENTS,\n MAX_BACKEND_COMPONENT - servicePluginsCount\n );\n\n const backendEventsData = backendComponents.events.slice(\n 0,\n backendComponents.events.length > maxBackendEvents\n ? maxBackendEvents - 1\n : backendComponents.events.length\n );\n\n const backendEventsShowMoreIndex =\n backendComponents.events.length > backendEventsData.length\n ? backendEventsData.length + servicePluginsCount + 1\n : undefined;\n\n const visibleItems: NumericOption<BackendComponent, BackendComponentNames>[] =\n [\n ...servicePluginsData.map(\n (servicePlugin: BackendComponent<'ServicePlugin'>) =>\n NumericOption.Item({\n title: servicePlugin.componentName,\n value: servicePlugin,\n })\n ),\n ...(servicePluginsShowMoreIndex\n ? [NumericOption.ViewMore('ServicePlugin' as BackendComponentNames)]\n : []),\n ...backendEventsData.map((event: BackendComponent<'Event'>) =>\n NumericOption.Item({\n title: event.title,\n value: event,\n })\n ),\n ...(backendEventsShowMoreIndex\n ? [NumericOption.ViewMore('Event' as BackendComponentNames)]\n : []),\n ];\n\n useInput((input) => {\n const inputNumber = Number(input);\n if (inputNumber > 0 && inputNumber <= visibleItems.length) {\n const item = visibleItems.at(inputNumber - 1);\n if (item) {\n match(item, {\n Item: (item) => handleSelect(item.value),\n ViewMore: (viewMore) =>\n onViewMore(\n BackendScreenSelector.Arrow({\n backendComponentName: viewMore.payload,\n })\n ),\n });\n }\n }\n });\n\n const handleSelect = useCallback(\n async (backendComponent: BackendComponent) => {\n onSelect?.(backendComponent);\n },\n [onSelect]\n );\n\n const backendPlugins = visibleItems.slice(0, servicePluginsCount);\n const backendEvents = visibleItems.slice(\n servicePluginsCount,\n visibleItems.length\n );\n\n return (\n <Box flexDirection=\"column\" gap={1}>\n {backendPlugins.length > 0 && (\n <NumericViewer\n startIndex={0}\n titleKey=\"general.backend_plugin_viewer.title\"\n items={backendPlugins}\n />\n )}\n {backendEvents.length > 0 && (\n <NumericViewer\n startIndex={servicePluginsCount}\n titleKey=\"general.backend_events_viewer.title\"\n items={backendEvents}\n />\n )}\n {onClose && <CloseScreen onClose={onClose} />}\n </Box>\n );\n};\n","import React, { useCallback, type FC } from 'react';\nimport { Box, SelectInput } from '@wix/cli-ui-kit';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { isType, match } from 'variant';\nimport { CloseScreen } from '../CloseScreen/CloseScreen.js';\nimport type {\n BackendComponent,\n BackendComponentNames,\n} from '../../backend/definitions.js';\nimport { useBackendComponents } from '../../backend/useBackendComponents.js';\n\ninterface Props {\n backendComponentName: BackendComponentNames;\n onSelect?: (backendComponent: BackendComponent) => void;\n onClose: () => void;\n}\n\nexport const BackendArrowViewer: FC<Props> = ({\n backendComponentName,\n onClose,\n onSelect,\n}) => {\n const { t } = useTranslation();\n const { getBackendComponent } = useBackendComponents();\n\n const handleSubmit = useCallback(\n (backendComponent: BackendComponent) => {\n onSelect?.(backendComponent);\n },\n [onSelect]\n );\n\n const getLabelKey = () =>\n match(backendComponentName, {\n Api: () => 'dev_command.backend_apis_screen.select_label',\n Event: () => 'dev_command.backend_events_screen.select_label',\n ServicePlugin: () => 'dev_command.backend_plugins_screen.select_label',\n });\n\n return (\n <Box flexDirection=\"column\" gap={1}>\n <Box flexDirection=\"column\">\n <SelectInput<BackendComponent>\n label={t(getLabelKey())}\n options={getBackendComponent(backendComponentName).map(\n (backendComponent, index) => ({\n key: index.toString(),\n title: isType(backendComponent, 'ServicePlugin')\n ? backendComponent.componentName\n : backendComponent.title,\n value: backendComponent,\n })\n )}\n onSubmit={({ value: backendComponent }) =>\n handleSubmit(backendComponent)\n }\n />\n </Box>\n <CloseScreen onClose={onClose} />\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","import_variant","useCallback","createAppManifestWithBaseUrl","model","devServerUrl","manifest","createAppManifest","getComponentSourceBuilder","updateAppManifestWithBaseUrl","useArmUpdater","useProjectModel","writeDebugLog","useDebugLog","createAppRelease","updateAppRelease","useARMClient","useCallback","projectModelWatcher","onChange","onError","projectId","appManifest","appConfig","readAppConfig","armTag","tag","updateState","cause","saveAppConfig","error","newModel","changeType","updatedAppManifest","deepEqual","e","init_esm_shims","useRef","useCallback","useEffect","createServer","init_esm_shims","createCustomLogger","onLog","loggedErrors","warnedMessages","logger","msg","opts","error","useClientDevServer","https","devServerRef","useRef","model","useProjectModel","useEffect","useCallback","projectModelWatcher","onLog","devServer","createServer","getViteConfig","createCustomLogger","getViteServerUrl","init_esm_shims","React","useCallback","useEffect","useState","useMemo","init_esm_shims","EOL","createWriteStream","DevLogStream","projectFolder","opts","createWriteStream","getDevLogPath","content","EOL","err","init_esm_shims","React","DevEnvLogLine","type","msg","error","prefix","timestamp","React","Box_default","Text","ErrorViewer","ErrorMsg","React","Box_default","Alert","Trans","Text","DEV_LOG_PATH","MAX_LOGS_TO_SHOW","isMessageFiltered","message","useDevEnvLogs","model","useProjectModel","logs","setLogs","useState","insertLog","useCallback","genericLog","log","newLogs","renderer","stream","useMemo","createRendererToString","DevLogStream","writeLog","content","DevEnvLogLine","useEffect","init_esm_shims","useCallback","init_esm_shims","init_esm_shims","init_esm_shims","_createOverrideRequest","_createOverrideResponse","resolveWixCliV1SiteOverrideServiceUrl","opts","domainToMappings","resolveUrl","createOverride","payload","_a","serializer","_createOverrideRequest","toReq","fromReq","fromRes","_createOverrideResponse","__createOverride","host","serializedData","metadata","resolveWixCliV1SiteOverrideServiceUrl","init_esm_shims","createOverrideSchema","z","SiteOverrideClient","httpClient","minRetryTimeout","getTestOverrides","appId","siteId","overrides","siteOverrideId","data","pRetry","createOverride","createOverrideSchema","error","isHttpError","CliError","CliErrorCode","init_esm_shims","useMemo","useSiteOverrideClient","httpClient","useHttpClient","useMemo","SiteOverrideClient","init_esm_shims","import_variant","init_esm_shims","Type","createSiteOverrides","model","componentsToOverride","DevCenterComponent","acc","component","paramsOverride","Type","useSiteOverrideUpdater","model","useProjectModel","site","useSiteId","writeDebugLog","useDebugLog","createOverride","useSiteOverrideClient","useCallback","projectModelWatcher","appId","appConfig","readAppConfig","overrides","createSiteOverrides","siteOverrideId","newModel","changeType","updatedOverrides","deepEqual","saveAppConfig","error","init_esm_shims","React","useState","init_esm_shims","join","getUserConfigPath","join","getDataDirPath","CONFIG_FILE_NAME","readUserConfig","configPath","json","pathExists","readJson","userConfigSchema","updateUserConfig","config","newConfig","writeJson","import_variant","TunnelingConsent","onError","onSuccess","t","useTranslation","model","useProjectModel","approved","setApproved","useState","readUserConfigAction","useAsyncCallback","readUserConfig","status","useAsync","tunneling","React","ConfirmInput","updateUserConfig","Text","Trans","DevEnvironmentContext","createContext","DevEnvironmentProvider","https","children","t","useTranslation","reportError","useErrorReporter","exit","useExit","createClientDevServer","useClientDevServer","createArmUpdater","useArmUpdater","createSiteOverrideUpdater","useSiteOverrideUpdater","logs","writeLog","useDevEnvLogs","projectModelWatcher","useProjectModel","startDevEnvAction","useAsyncCallback","clientDevServerUrl","clientDevServer","type","msg","armTag","changeType","error","siteOverrideId","React","Spinner","ArmTagProvider","TunnelingConsent","useDevEnvironment","context","useContext","init_esm_shims","import_variant","React","useState","init_esm_shims","React","import_variant","init_esm_shims","import_variant","ScreenState","init_esm_shims","React","DevEnvLogsViewer","t","useTranslation","logs","useDevEnvironment","isEmpty","React","Box_default","Trans","Text","DEV_LOG_PATH","log","DevEnvLogLine","init_esm_shims","React","useCallback","useMemo","init_esm_shims","import_variant","useCallback","useMemo","BackendComponentsTypes","BackendComponent","useBackendComponents","model","useProjectModel","backendComponentsByType","useMemo","backendComponentsMap","acc","backendComponent","a","b","hasComponentByType","useCallback","componentType","getBackendComponent","PlatformOption","label","inputKey","suffix","disabled","getTextSkin","React","Box_default","Text","PointerSmallIcon","Key","PlatformSelector","onMultipleDashboardExtensionSelection","onMultipleBackendComponentSelection","t","useTranslation","writeLog","siteOverrideId","useDevEnvironment","model","useProjectModel","isPlatformExists","usePlatform","dashboardExtensions","useExtensions","hasComponentByType","useBackendComponents","envConfig","useEnvConfig","openPlatform","useCallback","platformType","openPage","resolvePlatformUrl","use_input_default","input","resolveDashboardExtensionUrl","PlatformType","dashboardOptionSuffix","useMemo","init_esm_shims","React","useMemo","useCallback","import_variant","init_esm_shims","React","CloseScreen","onClose","use_input_default","_","key","React","Text","Trans","Key","init_esm_shims","import_variant","React","useState","init_esm_shims","React","useCallback","import_variant","DashboardArrowViewer","dashboardExtension","onClose","onSelect","t","useTranslation","writeLog","useDevEnvironment","getExtensions","useExtensions","envConfig","useEnvConfig","handleSubmit","useCallback","url","resolveDashboardExtensionUrl","openPage","React","Box_default","SelectInput","dashboardExtensionInstance","CloseScreen","DashboardScreenSelector","DashboardScreen","onClose","onSelect","initialSelectorType","selectorType","setSelectorType","useState","React","dashboardExtension","DashboardArrowViewer","DashboardNumericViewer","init_esm_shims","init_esm_shims","React","import_variant","ListItem","itemNumber","children","keyValue","React","Box_default","Text","PointerSmallIcon","Key","NumericOption","I","V","NumericViewer","startIndex","titleKey","items","Trans","item","index","title","description","MAX_EXTENSIONS","MAX_DASHBOARD_PAGES","MAX_PAGE_PLUGINS","MAX_MENU_PLUGINS","DashboardNumericViewer","onViewMore","onSelect","onClose","getExtensions","useExtensions","writeLog","useDevEnvironment","envConfig","useEnvConfig","dashboardExtensions","useMemo","dashboardPagesData","dashboardPagesShowMoreIndex","dashboardPagesCount","maxMenuPlugins","dashboardMenuPluginsData","dashboardMenuPluginsShowMoreIndex","dashboardMenuPluginsCount","maxPagePlugins","dashboardPluginsData","dashboardPluginsShowMoreIndex","visibleItems","page","NumericOption","menuPlugin","pagePlugin","use_input_default","input","inputNumber","item","handleSelect","viewMore","DashboardScreenSelector","useCallback","dashboardExtension","url","resolveDashboardExtensionUrl","openPage","dashboardPages","dashboardMenuPlugins","dashboardPlugins","React","Box_default","NumericViewer","CloseScreen","HomeScreen","onScreenChange","site","useSiteId","clientDevServerUrl","https","writeLog","useDevEnvironment","hasSinglePlatform","usePlatform","hasExtensions","dashboardExtensions","useExtensions","model","useProjectModel","openDevServerInBrowser","openBrowser","React","Alert","Trans","Link","use_input_default","input","ScreenState","Box_default","Text","SuccessIcon","InfoIcon","Key","PointerIcon","PlatformType","dashboardExtension","DashboardNumericViewer","selectorType","PlatformSelector","DevEnvLogsViewer","init_esm_shims","React","useState","useCallback","init_esm_shims","SiteSelectorScreen","onScreenChange","t","useTranslation","model","useProjectModel","setSite","useSiteId","reportError","useErrorReporter","error","setError","useState","handleError","useCallback","handleSubmit","site","ScreenState","e","React","Box_default","SiteSelector","ErrorViewer","Alert","CloseScreen","init_esm_shims","import_variant","React","useState","init_esm_shims","React","useMemo","useCallback","import_variant","MAX_BACKEND_COMPONENT","MAX_SERVICE_PLUGINS","MAX_EVENTS","BackendNumericViewer","onViewMore","onSelect","onClose","getBackendComponent","useBackendComponents","backendComponents","useMemo","servicePluginsData","servicePluginsShowMoreIndex","servicePluginsCount","maxBackendEvents","backendEventsData","backendEventsShowMoreIndex","visibleItems","servicePlugin","NumericOption","event","use_input_default","input","inputNumber","item","handleSelect","viewMore","BackendScreenSelector","useCallback","backendComponent","backendPlugins","backendEvents","React","Box_default","NumericViewer","CloseScreen","init_esm_shims","React","useCallback","import_variant","BackendArrowViewer","backendComponentName","onClose","onSelect","t","useTranslation","getBackendComponent","useBackendComponents","handleSubmit","useCallback","backendComponent","React","Box_default","SelectInput","index","CloseScreen","BackendScreenSelector","BackendScreen","onClose","onSelect","initialSelectorType","selectorType","setSelectorType","useState","React","backendComponentName","BackendArrowViewer","BackendNumericViewer","DevCommandScreens","screen","setScreen","useState","ScreenState","React","HomeScreen","SiteSelectorScreen","selectorType","DashboardScreen","BackendScreen","DevCommand","https","React","SiteIdProvider","DevEnvironmentProvider","DevCommandScreens"]}