@wix/cli-app 1.1.53 → 1.1.56

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 (140) hide show
  1. package/README.md +45 -0
  2. package/build/CreateVersionCommand-LU6LUBNT.js +269 -0
  3. package/build/{CreateVersionCommand-2W37YQW4.js.map → CreateVersionCommand-LU6LUBNT.js.map} +1 -1
  4. package/build/DevCommand-G2BIT4FY.js +1168 -0
  5. package/build/DevCommand-G2BIT4FY.js.map +1 -0
  6. package/build/GenerateCommand-XKWJ2FEG.js +12392 -0
  7. package/build/GenerateCommand-XKWJ2FEG.js.map +1 -0
  8. package/build/LogsCommand-HYGDI5KW.js +284 -0
  9. package/build/LogsCommand-HYGDI5KW.js.map +1 -0
  10. package/build/PreviewCommand-6EMIKGQN.js +23 -0
  11. package/build/ServeCommand-YJ5RHQZ4.js +165 -0
  12. package/build/ServeCommand-YJ5RHQZ4.js.map +1 -0
  13. package/build/build-EC7LZLAY.js +3596 -0
  14. package/build/{build-D3GVJS75.js.map → build-EC7LZLAY.js.map} +1 -1
  15. package/build/build-Q5P6MZLW.js +97 -0
  16. package/build/build-Q5P6MZLW.js.map +1 -0
  17. package/build/chunk-3KMSVIRS.js +1323 -0
  18. package/build/chunk-3KMSVIRS.js.map +1 -0
  19. package/build/chunk-FH6U3Y37.js +19 -0
  20. package/build/chunk-FH6U3Y37.js.map +1 -0
  21. package/build/chunk-GIUEJUXG.js +151 -0
  22. package/build/{chunk-PSQ4AQFG.js.map → chunk-GIUEJUXG.js.map} +1 -1
  23. package/build/chunk-IJVKSYIY.js +222 -0
  24. package/build/chunk-IJVKSYIY.js.map +1 -0
  25. package/build/chunk-IMNXLCE5.js +51 -0
  26. package/build/{chunk-SZ5JWJ4Q.js.map → chunk-IMNXLCE5.js.map} +1 -1
  27. package/build/chunk-IWDISZ2R.js +96 -0
  28. package/build/chunk-IWDISZ2R.js.map +1 -0
  29. package/build/chunk-JKI4MP27.js +32 -0
  30. package/build/{chunk-AXAJ7DJ4.js.map → chunk-JKI4MP27.js.map} +1 -1
  31. package/build/chunk-JOVPQ7BW.js +183 -0
  32. package/build/chunk-JOVPQ7BW.js.map +1 -0
  33. package/build/chunk-KCMEJP7H.js +897 -0
  34. package/build/{chunk-QXIKCJLU.js.map → chunk-KCMEJP7H.js.map} +1 -1
  35. package/build/chunk-NDFUPX6I.js +635 -0
  36. package/build/chunk-NDFUPX6I.js.map +1 -0
  37. package/build/chunk-NUUM6HPA.js +195 -0
  38. package/build/{chunk-DLQYJEV6.js.map → chunk-NUUM6HPA.js.map} +1 -1
  39. package/build/chunk-PYIAC2GK.js +66 -0
  40. package/build/{chunk-V4TR6DCM.js.map → chunk-PYIAC2GK.js.map} +1 -1
  41. package/build/chunk-QICLTOEP.js +46 -0
  42. package/build/{chunk-TSAKYUDG.js.map → chunk-QICLTOEP.js.map} +1 -1
  43. package/build/chunk-QLZPVGJV.js +29 -0
  44. package/build/{chunk-C3O7WWDR.js.map → chunk-QLZPVGJV.js.map} +1 -1
  45. package/build/chunk-QZOQAFHK.js +2197 -0
  46. package/build/chunk-QZOQAFHK.js.map +1 -0
  47. package/build/chunk-SP37PQ3I.js +38035 -0
  48. package/build/chunk-SP37PQ3I.js.map +1 -0
  49. package/build/chunk-TSFNDZPX.js +39101 -0
  50. package/build/chunk-TSFNDZPX.js.map +1 -0
  51. package/build/chunk-TTW4MEC3.js +104 -0
  52. package/build/chunk-TTW4MEC3.js.map +1 -0
  53. package/build/chunk-U4QPSXJP.js +45 -0
  54. package/build/{chunk-WXOIL7LC.js.map → chunk-U4QPSXJP.js.map} +1 -1
  55. package/build/chunk-WG365AHZ.js +23 -0
  56. package/build/{chunk-FVG3T57Z.js.map → chunk-WG365AHZ.js.map} +1 -1
  57. package/build/chunk-XU5JBKO6.js +29230 -0
  58. package/build/chunk-XU5JBKO6.js.map +1 -0
  59. package/build/cloudflare-runtime/entry.js +299 -47
  60. package/build/cloudflare-runtime/getRegisteredExtensions.js +298 -46
  61. package/build/devtools-YPSDP32D.js +3702 -0
  62. package/build/{devtools-4JFNYU2B.js.map → devtools-YPSDP32D.js.map} +1 -1
  63. package/build/esm-YQVNLOAI.js +22083 -0
  64. package/build/{esm-HBMYQBEO.js.map → esm-YQVNLOAI.js.map} +1 -1
  65. package/build/index.js +3252 -21
  66. package/build/index.js.map +1 -1
  67. package/build/platform-sdk/chunk-TN6HYRXL.js +2 -0
  68. package/build/platform-sdk/chunk-TN6HYRXL.js.map +1 -0
  69. package/build/platform-sdk/dashboard.js +1 -1
  70. package/build/platform-sdk/dashboard.js.map +1 -1
  71. package/build/platform-sdk/editor.js +5 -5
  72. package/build/platform-sdk/editor.js.map +1 -1
  73. package/build/platform-sdk/site.js +1 -1
  74. package/build/platform-sdk/site.js.map +1 -1
  75. package/build/preview-HPJCC5SU.js +138 -0
  76. package/build/preview-HPJCC5SU.js.map +1 -0
  77. package/build/render-command-BJTVLIM5.js +117 -0
  78. package/build/render-command-BJTVLIM5.js.map +1 -0
  79. package/build/types.impl-CD4WWRUK.js +10 -0
  80. package/package.json +15 -9
  81. package/templates/custom-element/dependencies.json +1 -1
  82. package/templates/dashboard-modal/dependencies.json +1 -1
  83. package/templates/dashboard-plugin/files/plugin.tsx.ejs +8 -18
  84. package/templates/site-plugin/dependencies.json +1 -1
  85. package/build/CreateVersionCommand-2W37YQW4.js +0 -4
  86. package/build/DevCommand-JDHE7RQB.js +0 -4
  87. package/build/DevCommand-JDHE7RQB.js.map +0 -1
  88. package/build/GenerateCommand-3PPXF4B6.js +0 -128
  89. package/build/GenerateCommand-3PPXF4B6.js.map +0 -1
  90. package/build/LogsCommand-LQKTBY6D.js +0 -4
  91. package/build/LogsCommand-LQKTBY6D.js.map +0 -1
  92. package/build/PreviewCommand-H3HVD7DH.js +0 -4
  93. package/build/ServeCommand-RHONEHTF.js +0 -4
  94. package/build/ServeCommand-RHONEHTF.js.map +0 -1
  95. package/build/build-D3GVJS75.js +0 -5
  96. package/build/build-QN6TGE3Q.js +0 -4
  97. package/build/build-QN6TGE3Q.js.map +0 -1
  98. package/build/chunk-2W2YJZP5.js +0 -100
  99. package/build/chunk-2W2YJZP5.js.map +0 -1
  100. package/build/chunk-4CCKO52Z.js +0 -11
  101. package/build/chunk-4CCKO52Z.js.map +0 -1
  102. package/build/chunk-5OZZ7R6I.js +0 -11
  103. package/build/chunk-5OZZ7R6I.js.map +0 -1
  104. package/build/chunk-AXAJ7DJ4.js +0 -4
  105. package/build/chunk-B5P4JHUW.js +0 -278
  106. package/build/chunk-B5P4JHUW.js.map +0 -1
  107. package/build/chunk-C3O7WWDR.js +0 -4
  108. package/build/chunk-DLQYJEV6.js +0 -4
  109. package/build/chunk-F6MVNSX2.js +0 -4
  110. package/build/chunk-F6MVNSX2.js.map +0 -1
  111. package/build/chunk-FVG3T57Z.js +0 -4
  112. package/build/chunk-HILXNAWZ.js +0 -4
  113. package/build/chunk-HILXNAWZ.js.map +0 -1
  114. package/build/chunk-LDGXTJLC.js +0 -4
  115. package/build/chunk-LDGXTJLC.js.map +0 -1
  116. package/build/chunk-PCBMS46R.js +0 -4
  117. package/build/chunk-PCBMS46R.js.map +0 -1
  118. package/build/chunk-PSQ4AQFG.js +0 -4
  119. package/build/chunk-QXIKCJLU.js +0 -5
  120. package/build/chunk-SZ5JWJ4Q.js +0 -4
  121. package/build/chunk-TSAKYUDG.js +0 -4
  122. package/build/chunk-V4TR6DCM.js +0 -4
  123. package/build/chunk-WJTPY35F.js +0 -9
  124. package/build/chunk-WJTPY35F.js.map +0 -1
  125. package/build/chunk-WXOIL7LC.js +0 -4
  126. package/build/chunk-YIGHU6O6.js +0 -4
  127. package/build/chunk-YIGHU6O6.js.map +0 -1
  128. package/build/chunk-YMRYABCG.js +0 -115
  129. package/build/chunk-YMRYABCG.js.map +0 -1
  130. package/build/devtools-4JFNYU2B.js +0 -10
  131. package/build/esm-HBMYQBEO.js +0 -466
  132. package/build/platform-sdk/chunk-32RIHE6N.js +0 -2
  133. package/build/platform-sdk/chunk-32RIHE6N.js.map +0 -1
  134. package/build/preview-457BTAHF.js +0 -4
  135. package/build/preview-457BTAHF.js.map +0 -1
  136. package/build/render-command-W6CY3R4Q.js +0 -4
  137. package/build/render-command-W6CY3R4Q.js.map +0 -1
  138. package/build/types.impl-L2DPGJ77.js +0 -4
  139. /package/build/{PreviewCommand-H3HVD7DH.js.map → PreviewCommand-6EMIKGQN.js.map} +0 -0
  140. /package/build/{types.impl-L2DPGJ77.js.map → types.impl-CD4WWRUK.js.map} +0 -0
@@ -0,0 +1,284 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import {
4
+ useTunnel
5
+ } from "./chunk-KCMEJP7H.js";
6
+ import "./chunk-QZOQAFHK.js";
7
+ import {
8
+ ComponentType2 as ComponentType,
9
+ attachLogger,
10
+ deattachLogger,
11
+ useDevCenterClient,
12
+ useErrorReporter,
13
+ useHttpClient,
14
+ useProjectModel
15
+ } from "./chunk-TSFNDZPX.js";
16
+ import {
17
+ Box_default,
18
+ CliError,
19
+ CliErrorCode,
20
+ Spinner,
21
+ Text,
22
+ Trans,
23
+ require_lib,
24
+ require_react,
25
+ useAsync,
26
+ useTranslation,
27
+ z
28
+ } from "./chunk-XU5JBKO6.js";
29
+ import {
30
+ __toESM,
31
+ init_esm_shims
32
+ } from "./chunk-PYIAC2GK.js";
33
+
34
+ // src/components/LogsCommand/index.ts
35
+ init_esm_shims();
36
+
37
+ // src/components/LogsCommand/LogsCommand.tsx
38
+ init_esm_shims();
39
+ var import_react3 = __toESM(require_react(), 1);
40
+ var import_variant3 = __toESM(require_lib(), 1);
41
+
42
+ // src/components/LogsCommand/useLogsServer.ts
43
+ init_esm_shims();
44
+ var import_react = __toESM(require_react(), 1);
45
+ import { createServer } from "node:http";
46
+ var import_variant2 = __toESM(require_lib(), 1);
47
+
48
+ // src/components/LogsCommand/logsReqHandler.ts
49
+ init_esm_shims();
50
+ var import_variant = __toESM(require_lib(), 1);
51
+ var LogMessageSchema = z.any();
52
+ var LogMessageLevelSchema = z.enum(["info", "error", "warn", "debug", "log"]);
53
+ var LogItemSchema = z.object({
54
+ message: z.array(LogMessageSchema),
55
+ level: LogMessageLevelSchema,
56
+ timestamp: z.number()
57
+ });
58
+ var ExceptionItemSchema = z.object({
59
+ stack: z.string(),
60
+ name: z.string(),
61
+ message: z.string(),
62
+ timestamp: z.number()
63
+ });
64
+ var LogResponseSchema = z.object({
65
+ _type: z.literal("log"),
66
+ exceptions: z.array(ExceptionItemSchema),
67
+ logs: z.array(LogItemSchema)
68
+ }).passthrough();
69
+ var SessionTimeoutResponseSchema = z.object({
70
+ _type: z.literal("session-timeout")
71
+ }).passthrough();
72
+ var ServerLogResponseSchema = z.discriminatedUnion("_type", [
73
+ LogResponseSchema,
74
+ SessionTimeoutResponseSchema
75
+ ]);
76
+ var AggregatedLog = (0, import_variant.variant)({
77
+ Log: (0, import_variant.fields)(),
78
+ Exception: (0, import_variant.fields)()
79
+ });
80
+ var LOGS_ENDPOINT = "/logs";
81
+ var logsReqHandler = (req, res) => {
82
+ let onLog;
83
+ let onError;
84
+ if (req.method === "POST" && req.url === LOGS_ENDPOINT) {
85
+ let body = "";
86
+ req.on("data", (chunk) => {
87
+ body += chunk.toString();
88
+ });
89
+ req.on("end", () => {
90
+ let parsedBody;
91
+ try {
92
+ parsedBody = ServerLogResponseSchema.parse(JSON.parse(body));
93
+ } catch (err) {
94
+ onError(CliErrorCode.FailedToParseLog(), err, { body });
95
+ res.statusCode = 400;
96
+ return res.end();
97
+ }
98
+ const resultLogs = [];
99
+ if (parsedBody._type === "log") {
100
+ resultLogs.push(
101
+ ...parsedBody.exceptions.map(
102
+ (exception) => AggregatedLog.Exception(exception)
103
+ )
104
+ );
105
+ resultLogs.push(
106
+ ...parsedBody.logs.map((log) => AggregatedLog.Log(log))
107
+ );
108
+ }
109
+ (0, import_variant.match)(parsedBody._type, {
110
+ log: () => {
111
+ onLog(resultLogs);
112
+ },
113
+ "session-timeout": () => {
114
+ res.statusCode = 200;
115
+ res.end();
116
+ onError(CliErrorCode.LogsConnectionTimeout(), {}, { body });
117
+ }
118
+ });
119
+ res.statusCode = 200;
120
+ res.end();
121
+ });
122
+ } else {
123
+ res.statusCode = 404;
124
+ res.end("Not Found");
125
+ }
126
+ const api = {
127
+ onLog: (callback) => {
128
+ onLog = callback;
129
+ return api;
130
+ },
131
+ onError: (callback) => {
132
+ onError = callback;
133
+ return api;
134
+ }
135
+ };
136
+ return api;
137
+ };
138
+
139
+ // src/components/LogsCommand/useLogsServer.ts
140
+ var deploymentIdRegex = /([0-9a-f-]{36})/;
141
+ var useLogsServer = ({
142
+ onLog,
143
+ version,
144
+ appId
145
+ }) => {
146
+ const { reportError } = useErrorReporter();
147
+ const { getAppByVersion } = useDevCenterClient();
148
+ const createTunnelClient = useTunnel();
149
+ const httpClient = useHttpClient({ type: "backoffice" });
150
+ const localServerPortResolverRef = (0, import_react.useRef)();
151
+ const server = (0, import_react.useMemo)(() => {
152
+ return createServer((req, res) => {
153
+ logsReqHandler(req, res).onLog(onLog).onError((code, err, info) => {
154
+ server.close();
155
+ throw new CliError({ code, cause: err, info });
156
+ });
157
+ });
158
+ }, [onLog]);
159
+ const localServerPortPromise = (0, import_react.useMemo)(() => {
160
+ return new Promise((resolve) => {
161
+ localServerPortResolverRef.current = resolve;
162
+ });
163
+ }, []);
164
+ (0, import_react.useEffect)(() => {
165
+ server.listen(0, async () => {
166
+ const port = server.address().port;
167
+ localServerPortResolverRef.current?.(port);
168
+ });
169
+ return () => {
170
+ if (server.listening) {
171
+ server.close();
172
+ }
173
+ };
174
+ }, [server]);
175
+ const { status } = useAsync(async () => {
176
+ const localServerPort = await localServerPortPromise;
177
+ const { url: tunnelUrl } = await createTunnelClient(localServerPort);
178
+ const { data } = await getAppByVersion({ appId, version });
179
+ const topologyComponent = data.components.find(
180
+ (component) => {
181
+ return component.compType === ComponentType.TOPOLOGY;
182
+ }
183
+ );
184
+ const match3 = deploymentIdRegex.exec(
185
+ topologyComponent?.compData.topology.topology.backendApiUrl ?? ""
186
+ );
187
+ if (!match3?.[1]) {
188
+ throw new CliError({
189
+ code: CliErrorCode.FailedToGetLogsTopology(),
190
+ cause: null
191
+ });
192
+ }
193
+ const deploymentId = match3[1];
194
+ const loggerReq = {
195
+ appId,
196
+ deploymentId,
197
+ destinationUrl: new URL(LOGS_ENDPOINT, tunnelUrl).href
198
+ };
199
+ try {
200
+ await httpClient.request(attachLogger(loggerReq));
201
+ } catch (error) {
202
+ server.close();
203
+ throw new CliError({
204
+ code: CliErrorCode.FailedToConnectToLogsService(),
205
+ cause: error
206
+ });
207
+ }
208
+ return deploymentId;
209
+ }, []);
210
+ (0, import_react.useEffect)(() => {
211
+ return () => {
212
+ if ((0, import_variant2.isType)(status, "Success")) {
213
+ httpClient.request(
214
+ deattachLogger({
215
+ appId,
216
+ deploymentId: status.result
217
+ })
218
+ ).catch(reportError);
219
+ }
220
+ };
221
+ }, []);
222
+ return status;
223
+ };
224
+
225
+ // src/components/LogsCommand/ServerLogMessage.tsx
226
+ init_esm_shims();
227
+ var import_react2 = __toESM(require_react(), 1);
228
+ var ServerLogMessage = ({ message, level }) => {
229
+ let content = "unknown";
230
+ if (typeof message === "object") {
231
+ content = JSON.stringify(message);
232
+ } else {
233
+ content = String(message);
234
+ }
235
+ return /* @__PURE__ */ import_react2.default.createElement(Text, { skin: level === "error" ? "error" : "standard" }, content);
236
+ };
237
+
238
+ // src/components/LogsCommand/LogsCommand.tsx
239
+ var LogsCommand = ({ version }) => {
240
+ const { model } = useProjectModel();
241
+ const { t } = useTranslation();
242
+ const [logs, setLogs] = (0, import_react3.useState)([]);
243
+ const serverResult = useLogsServer({
244
+ appId: model.config.appId,
245
+ version,
246
+ onLog: (0, import_react3.useCallback)(
247
+ (serverLogs) => {
248
+ setLogs((prevLogs) => {
249
+ return [...prevLogs, ...serverLogs];
250
+ });
251
+ },
252
+ [setLogs]
253
+ )
254
+ });
255
+ return (0, import_variant3.match)(serverResult, {
256
+ Success: () => /* @__PURE__ */ import_react3.default.createElement(Box_default, { marginTop: 1, marginBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react3.default.createElement(Box_default, { marginBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react3.default.createElement(Text, null, /* @__PURE__ */ import_react3.default.createElement(Trans, { i18nKey: "logs_command.listening_to_logs" })), /* @__PURE__ */ import_react3.default.createElement(Text, null, /* @__PURE__ */ import_react3.default.createElement(Trans, { i18nKey: "logs_command.prod_env_logs", values: { version } }))), logs.map((log, logIdx) => /* @__PURE__ */ import_react3.default.createElement(Box_default, { key: logIdx, flexDirection: "column" }, /* @__PURE__ */ import_react3.default.createElement(Box_default, { columnGap: 1 }, /* @__PURE__ */ import_react3.default.createElement(Box_default, { flexShrink: 0 }, /* @__PURE__ */ import_react3.default.createElement(Text, { skin: "secondary" }, new Date(log.timestamp).toLocaleTimeString())), /* @__PURE__ */ import_react3.default.createElement(Box_default, { columnGap: 1 }, (0, import_variant3.match)(log, {
257
+ Log: ({ message, level }) => message.map((msgItem, idx) => /* @__PURE__ */ import_react3.default.createElement(
258
+ ServerLogMessage,
259
+ {
260
+ key: `${logIdx}-${idx}`,
261
+ message: msgItem,
262
+ level
263
+ }
264
+ )),
265
+ Exception: ({ message }) => /* @__PURE__ */ import_react3.default.createElement(
266
+ ServerLogMessage,
267
+ {
268
+ key: logIdx,
269
+ message,
270
+ level: "error"
271
+ }
272
+ )
273
+ }))), (0, import_variant3.match)(log, {
274
+ Log: () => null,
275
+ Exception: ({ stack }) => /* @__PURE__ */ import_react3.default.createElement(Text, { skin: "error" }, stack)
276
+ })))),
277
+ Loading: () => /* @__PURE__ */ import_react3.default.createElement(Spinner, { text: t("logs_command.connecting") }),
278
+ Error: () => null
279
+ });
280
+ };
281
+ export {
282
+ LogsCommand
283
+ };
284
+ //# sourceMappingURL=LogsCommand-HYGDI5KW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/LogsCommand/index.ts","../src/components/LogsCommand/LogsCommand.tsx","../src/components/LogsCommand/useLogsServer.ts","../src/components/LogsCommand/logsReqHandler.ts","../src/components/LogsCommand/ServerLogMessage.tsx"],"sourcesContent":["export { LogsCommand } from './LogsCommand.js';\n","import type { FC } from 'react';\nimport React, { useState, useCallback } from 'react';\nimport { match } from 'variant';\nimport { Spinner, Box, Text } from '@wix/cli-ui-kit';\nimport { useTranslation, Trans } from '@wix/cli-i18n';\nimport { useLogsServer } from './useLogsServer.js';\nimport type { AggregatedLog } from './logsReqHandler.js';\nimport { ServerLogMessage } from './ServerLogMessage.js';\nimport { useProjectModel } from '../../model.js';\n\nexport const LogsCommand: FC<{\n version: string;\n}> = ({ version }) => {\n const { model } = useProjectModel();\n const { t } = useTranslation();\n const [logs, setLogs] = useState<AggregatedLog[]>([]);\n const serverResult = useLogsServer({\n appId: model.config.appId,\n version,\n onLog: useCallback(\n (serverLogs) => {\n setLogs((prevLogs) => {\n return [...prevLogs, ...serverLogs];\n });\n },\n [setLogs]\n ),\n });\n\n return match(serverResult, {\n Success: () => (\n <Box marginTop={1} marginBottom={1} flexDirection=\"column\">\n <Box marginBottom={1} flexDirection=\"column\">\n <Text>\n <Trans i18nKey=\"logs_command.listening_to_logs\" />\n </Text>\n <Text>\n <Trans i18nKey=\"logs_command.prod_env_logs\" values={{ version }} />\n </Text>\n </Box>\n\n {logs.map((log, logIdx) => (\n <Box key={logIdx} flexDirection=\"column\">\n <Box columnGap={1}>\n <Box flexShrink={0}>\n <Text skin=\"secondary\">\n {new Date(log.timestamp).toLocaleTimeString()}\n </Text>\n </Box>\n <Box columnGap={1}>\n {match(log, {\n Log: ({ message, level }) =>\n message.map((msgItem, idx) => (\n <ServerLogMessage\n key={`${logIdx}-${idx}`}\n message={msgItem}\n level={level}\n />\n )),\n Exception: ({ message }) => (\n <ServerLogMessage\n key={logIdx}\n message={message}\n level=\"error\"\n />\n ),\n })}\n </Box>\n </Box>\n {match(log, {\n Log: () => null,\n Exception: ({ stack }) => <Text skin=\"error\">{stack}</Text>,\n })}\n </Box>\n ))}\n </Box>\n ),\n Loading: () => <Spinner text={t('logs_command.connecting')} />,\n Error: () => null,\n });\n};\n","import { useEffect, useMemo, useRef } from 'react';\nimport { createServer } from 'node:http';\nimport type { AddressInfo } from 'node:net';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { useAsync } from '@wix/cli-ui-kit';\nimport { useErrorReporter } from '@wix/cli-error-reporting';\nimport { useHttpClient } from '@wix/cli-http-client-react';\nimport {\n attachLogger,\n deattachLogger,\n} from '@wix/ambassador-ctp-app-cloud-backend-service-v1-app-cloud-backend-deployment/http';\nimport { useTunnel } from '@wix/cli-tunnel';\nimport { useDevCenterClient, ComponentType } from '@wix/dev-center-client';\nimport type { TopologyComponent } from '@wix/dev-center-client';\nimport { isType } from 'variant';\nimport type { OnLog } from './logsReqHandler.js';\nimport { LOGS_ENDPOINT, logsReqHandler } from './logsReqHandler.js';\n\nconst deploymentIdRegex = /([0-9a-f-]{36})/;\n\nexport const useLogsServer = ({\n onLog,\n version,\n appId,\n}: {\n onLog: OnLog;\n version: string;\n appId: string;\n}) => {\n const { reportError } = useErrorReporter();\n const { getAppByVersion } = useDevCenterClient();\n const createTunnelClient = useTunnel();\n const httpClient = useHttpClient({ type: 'backoffice' });\n const localServerPortResolverRef = useRef<(port: number) => void>();\n\n const server = useMemo(() => {\n return createServer((req, res) => {\n logsReqHandler(req, res)\n .onLog(onLog)\n .onError((code, err, info) => {\n server.close();\n throw new CliError({ code, cause: err, info });\n });\n });\n }, [onLog]);\n\n const localServerPortPromise = useMemo(() => {\n return new Promise<number>((resolve) => {\n localServerPortResolverRef.current = resolve;\n });\n }, []);\n\n useEffect(() => {\n server.listen(0, async () => {\n const port = (server.address() as AddressInfo).port;\n localServerPortResolverRef.current?.(port);\n });\n return () => {\n if (server.listening) {\n server.close();\n }\n };\n }, [server]);\n\n const { status } = useAsync(async () => {\n const localServerPort = await localServerPortPromise;\n const { url: tunnelUrl } = await createTunnelClient(localServerPort);\n const { data } = await getAppByVersion({ appId, version });\n\n const topologyComponent = data.components.find(\n (component): component is TopologyComponent => {\n return component.compType === ComponentType.TOPOLOGY;\n }\n );\n const match = deploymentIdRegex.exec(\n topologyComponent?.compData.topology.topology.backendApiUrl ?? ''\n );\n\n if (!match?.[1]) {\n throw new CliError({\n code: CliErrorCode.FailedToGetLogsTopology(),\n cause: null,\n });\n }\n const deploymentId = match[1];\n\n const loggerReq = {\n appId,\n deploymentId,\n destinationUrl: new URL(LOGS_ENDPOINT, tunnelUrl).href,\n };\n\n try {\n await httpClient.request(attachLogger(loggerReq));\n } catch (error) {\n server.close();\n throw new CliError({\n code: CliErrorCode.FailedToConnectToLogsService(),\n cause: error,\n });\n }\n\n return deploymentId;\n }, []);\n\n useEffect(() => {\n // Logs should be deattached only on unmount.\n // This is why this `useEffect` has only `return` statement.\n return () => {\n if (isType(status, 'Success')) {\n httpClient\n .request(\n deattachLogger({\n appId,\n deploymentId: status.result,\n })\n )\n .catch(reportError);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return status;\n};\n","import type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { CliErrorCodeType } from '@wix/cli-error';\nimport { CliErrorCode } from '@wix/cli-error';\nimport { z } from 'zod';\nimport { variant, fields, match } from 'variant';\nimport type { VariantOf } from 'variant';\n\nconst LogMessageSchema = z.any();\nexport type LogMessage = z.infer<typeof LogMessageSchema>;\n\nconst LogMessageLevelSchema = z.enum(['info', 'error', 'warn', 'debug', 'log']);\nexport type LogMessageLevel = z.infer<typeof LogMessageLevelSchema>;\n\nconst LogItemSchema = z.object({\n message: z.array(LogMessageSchema),\n level: LogMessageLevelSchema,\n timestamp: z.number(),\n});\n\ntype LogItem = z.infer<typeof LogItemSchema>;\n\nconst ExceptionItemSchema = z.object({\n stack: z.string(),\n name: z.string(),\n message: z.string(),\n timestamp: z.number(),\n});\n\ntype ExceptionItem = z.infer<typeof ExceptionItemSchema>;\n\nconst LogResponseSchema = z\n .object({\n _type: z.literal('log'),\n exceptions: z.array(ExceptionItemSchema),\n logs: z.array(LogItemSchema),\n })\n .passthrough();\n\nconst SessionTimeoutResponseSchema = z\n .object({\n _type: z.literal('session-timeout'),\n })\n .passthrough();\n\nconst ServerLogResponseSchema = z.discriminatedUnion('_type', [\n LogResponseSchema,\n SessionTimeoutResponseSchema,\n]);\n\ntype ServerLogResponse = z.infer<typeof ServerLogResponseSchema>;\n\nconst AggregatedLog = variant({\n Log: fields<LogItem>(),\n Exception: fields<ExceptionItem>(),\n});\nexport type AggregatedLog = VariantOf<typeof AggregatedLog>;\n\nexport type OnLog = (data: AggregatedLog[]) => void;\ntype OnError = (\n errType: CliErrorCodeType,\n err: unknown,\n info?: Record<string, unknown>\n) => void;\n\nexport const LOGS_ENDPOINT = '/logs';\n\nexport const logsReqHandler = (req: IncomingMessage, res: ServerResponse) => {\n let onLog: OnLog;\n let onError: OnError;\n\n if (req.method === 'POST' && req.url === LOGS_ENDPOINT) {\n let body = '';\n\n req.on('data', (chunk) => {\n body += chunk.toString();\n });\n\n req.on('end', () => {\n let parsedBody: ServerLogResponse;\n try {\n parsedBody = ServerLogResponseSchema.parse(JSON.parse(body));\n } catch (err) {\n onError(CliErrorCode.FailedToParseLog(), err, { body });\n res.statusCode = 400;\n return res.end();\n }\n\n const resultLogs: AggregatedLog[] = [];\n\n if (parsedBody._type === 'log') {\n resultLogs.push(\n ...parsedBody.exceptions.map((exception) =>\n AggregatedLog.Exception(exception)\n )\n );\n resultLogs.push(\n ...parsedBody.logs.map((log) => AggregatedLog.Log(log))\n );\n }\n\n match(parsedBody._type, {\n log: () => {\n onLog(resultLogs);\n },\n 'session-timeout': () => {\n res.statusCode = 200;\n res.end();\n\n onError(CliErrorCode.LogsConnectionTimeout(), {}, { body });\n },\n });\n\n res.statusCode = 200;\n res.end();\n });\n } else {\n res.statusCode = 404;\n res.end('Not Found');\n }\n\n const api = {\n onLog: (callback: OnLog) => {\n onLog = callback;\n return api;\n },\n onError: (callback: OnError) => {\n onError = callback;\n return api;\n },\n };\n\n return api;\n};\n","import React from 'react';\nimport type { FC } from 'react';\nimport { Text } from '@wix/cli-ui-kit';\nimport type { LogMessage, LogMessageLevel } from './logsReqHandler.js';\n\nexport const ServerLogMessage: FC<{\n message: LogMessage;\n level: LogMessageLevel;\n}> = ({ message, level }) => {\n let content = 'unknown';\n\n if (typeof message === 'object') {\n content = JSON.stringify(message);\n } else {\n content = String(message);\n }\n\n return <Text skin={level === 'error' ? 'error' : 'standard'}>{content}</Text>;\n};\n"],"mappings":"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","names":["import_react","import_variant","import_variant","match","import_react","React","React"]}
@@ -0,0 +1,23 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import {
4
+ PreviewCommand
5
+ } from "./chunk-JOVPQ7BW.js";
6
+ import "./chunk-IWDISZ2R.js";
7
+ import "./chunk-NDFUPX6I.js";
8
+ import "./chunk-QICLTOEP.js";
9
+ import "./chunk-JKI4MP27.js";
10
+ import "./chunk-3KMSVIRS.js";
11
+ import "./chunk-U4QPSXJP.js";
12
+ import "./chunk-KCMEJP7H.js";
13
+ import "./chunk-QZOQAFHK.js";
14
+ import "./chunk-TTW4MEC3.js";
15
+ import "./chunk-SP37PQ3I.js";
16
+ import "./chunk-NUUM6HPA.js";
17
+ import "./chunk-TSFNDZPX.js";
18
+ import "./chunk-XU5JBKO6.js";
19
+ import "./chunk-PYIAC2GK.js";
20
+ export {
21
+ PreviewCommand
22
+ };
23
+ //# sourceMappingURL=PreviewCommand-6EMIKGQN.js.map
@@ -0,0 +1,165 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import {
4
+ PlatformViewer,
5
+ assertBuildOutputExists
6
+ } from "./chunk-IWDISZ2R.js";
7
+ import {
8
+ SiteProvider
9
+ } from "./chunk-NDFUPX6I.js";
10
+ import {
11
+ createLogger
12
+ } from "./chunk-IMNXLCE5.js";
13
+ import {
14
+ readAppManifestFile
15
+ } from "./chunk-JKI4MP27.js";
16
+ import {
17
+ ArmTagProvider,
18
+ SiteOverrideProvider,
19
+ createSiteOverrides,
20
+ useARMClient,
21
+ useSite,
22
+ useSiteOverrideClient
23
+ } from "./chunk-3KMSVIRS.js";
24
+ import "./chunk-U4QPSXJP.js";
25
+ import "./chunk-KCMEJP7H.js";
26
+ import "./chunk-QZOQAFHK.js";
27
+ import "./chunk-TTW4MEC3.js";
28
+ import {
29
+ getViteConfig,
30
+ getViteServerUrl,
31
+ updateAppManifestWithBaseUrl
32
+ } from "./chunk-SP37PQ3I.js";
33
+ import "./chunk-NUUM6HPA.js";
34
+ import {
35
+ useProjectModel
36
+ } from "./chunk-TSFNDZPX.js";
37
+ import {
38
+ Box_default,
39
+ InfoIcon,
40
+ Link,
41
+ PointerIcon,
42
+ Spinner,
43
+ SuccessIcon,
44
+ Text,
45
+ Trans,
46
+ require_lib,
47
+ require_react,
48
+ useAsync,
49
+ useTranslation
50
+ } from "./chunk-XU5JBKO6.js";
51
+ import {
52
+ __toESM,
53
+ init_esm_shims
54
+ } from "./chunk-PYIAC2GK.js";
55
+
56
+ // src/components/ServeCommand/index.ts
57
+ init_esm_shims();
58
+
59
+ // src/components/ServeCommand/ServeCommand.tsx
60
+ init_esm_shims();
61
+ var import_react4 = __toESM(require_react(), 1);
62
+
63
+ // src/components/ServeCommand/ServeEnvironment.tsx
64
+ init_esm_shims();
65
+ var import_react2 = __toESM(require_react(), 1);
66
+ var import_variant = __toESM(require_lib(), 1);
67
+
68
+ // src/components/ServeCommand/hooks/usePreviewServer.ts
69
+ init_esm_shims();
70
+ var import_react = __toESM(require_react(), 1);
71
+ import { preview } from "vite";
72
+ function usePreviewServer() {
73
+ const previewServerRef = (0, import_react.useRef)();
74
+ const { model } = useProjectModel();
75
+ (0, import_react.useEffect)(() => {
76
+ return () => {
77
+ previewServerRef.current?.httpServer.close();
78
+ };
79
+ }, []);
80
+ const logger = (0, import_react.useMemo)(() => createLogger({ timestamp: true }), []);
81
+ return (0, import_react.useCallback)(async () => {
82
+ const previewServer = await preview(
83
+ await getViteConfig(model, {
84
+ type: "build" /* build */,
85
+ customLogger: logger
86
+ })
87
+ );
88
+ previewServerRef.current = previewServer;
89
+ return getViteServerUrl(previewServer);
90
+ }, [model, logger]);
91
+ }
92
+
93
+ // src/components/ServeCommand/ServeEnvironment.tsx
94
+ var ServeEnvironmentContext = (0, import_react2.createContext)(null);
95
+ var ServeEnvironmentProvider = ({ children }) => {
96
+ const { model } = useProjectModel();
97
+ const { t } = useTranslation();
98
+ const { site } = useSite();
99
+ const arm = useARMClient();
100
+ const { createOverride } = useSiteOverrideClient();
101
+ const createPreviewServer = usePreviewServer();
102
+ const { status } = useAsync(async () => {
103
+ await assertBuildOutputExists(model.projectFolder);
104
+ const serverUrl = await createPreviewServer();
105
+ const manifest = await readAppManifestFile(model.projectFolder);
106
+ const updatedManifest = updateAppManifestWithBaseUrl(manifest, serverUrl);
107
+ const armTag = await arm.createAppRelease(
108
+ updatedManifest,
109
+ model.config.projectId
110
+ );
111
+ const overrides = createSiteOverrides(model);
112
+ const { id: siteOverrideId } = overrides ? await createOverride({
113
+ appId: model.config.appId,
114
+ siteId: site.id,
115
+ overrides
116
+ }) : await Promise.resolve({ id: void 0 });
117
+ return { armTag, serverUrl, siteOverrideId };
118
+ }, []);
119
+ return (0, import_variant.match)(status, {
120
+ Error: () => null,
121
+ Loading: () => /* @__PURE__ */ import_react2.default.createElement(Spinner, { text: t("serve_command.starting_serve_environment") }),
122
+ Success: ({ result: { armTag, serverUrl, siteOverrideId } }) => /* @__PURE__ */ import_react2.default.createElement(ServeEnvironmentContext.Provider, { value: { serverUrl } }, /* @__PURE__ */ import_react2.default.createElement(SiteOverrideProvider, { siteOverrideId }, /* @__PURE__ */ import_react2.default.createElement(ArmTagProvider, { armTag }, children)))
123
+ });
124
+ };
125
+ function useServeEnvironment() {
126
+ const context = (0, import_react2.useContext)(ServeEnvironmentContext);
127
+ if (context == null) {
128
+ throw new Error(
129
+ "useServeEnvironment() cannot be used without an <ServeEnvironmentProvider>"
130
+ );
131
+ }
132
+ return context;
133
+ }
134
+
135
+ // src/components/ServeCommand/ServeCommandScreen.tsx
136
+ init_esm_shims();
137
+ var import_react3 = __toESM(require_react(), 1);
138
+ function ServeCommandScreen() {
139
+ const { site } = useSite();
140
+ const { serverUrl } = useServeEnvironment();
141
+ return /* @__PURE__ */ import_react3.default.createElement(Box_default, { flexDirection: "column" }, /* @__PURE__ */ import_react3.default.createElement(Box_default, { gap: 1 }, /* @__PURE__ */ import_react3.default.createElement(Text, { skin: "success" }, /* @__PURE__ */ import_react3.default.createElement(SuccessIcon, null)), /* @__PURE__ */ import_react3.default.createElement(
142
+ Trans,
143
+ {
144
+ i18nKey: "serve_command.starting_serve_environment_success",
145
+ components: [/* @__PURE__ */ import_react3.default.createElement(Link, { url: serverUrl })]
146
+ }
147
+ )), /* @__PURE__ */ import_react3.default.createElement(Box_default, { gap: 1 }, /* @__PURE__ */ import_react3.default.createElement(InfoIcon, null), /* @__PURE__ */ import_react3.default.createElement(Trans, { i18nKey: "serve_command.production_build" })), /* @__PURE__ */ import_react3.default.createElement(Box_default, { gap: 1, paddingTop: 1, paddingBottom: 1 }, /* @__PURE__ */ import_react3.default.createElement(PointerIcon, null), /* @__PURE__ */ import_react3.default.createElement(
148
+ Trans,
149
+ {
150
+ i18nKey: "general.dev_site.current",
151
+ values: { name: site.displayName }
152
+ }
153
+ )), /* @__PURE__ */ import_react3.default.createElement(Box_default, { paddingBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react3.default.createElement(PlatformViewer, null)));
154
+ }
155
+
156
+ // src/components/ServeCommand/ServeCommand.tsx
157
+ var ServeCommand = () => {
158
+ return /* @__PURE__ */ import_react4.default.createElement(SiteProvider, null, /* @__PURE__ */ import_react4.default.createElement(ServeEnvironmentProvider, null, /* @__PURE__ */ import_react4.default.createElement(ServeCommandScreen, null)));
159
+ };
160
+ export {
161
+ ServeCommand,
162
+ ServeEnvironmentProvider,
163
+ useServeEnvironment
164
+ };
165
+ //# sourceMappingURL=ServeCommand-YJ5RHQZ4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ServeCommand/index.ts","../src/components/ServeCommand/ServeCommand.tsx","../src/components/ServeCommand/ServeEnvironment.tsx","../src/components/ServeCommand/hooks/usePreviewServer.ts","../src/components/ServeCommand/ServeCommandScreen.tsx"],"sourcesContent":["export { ServeCommand } from './ServeCommand.js';\nexport {\n ServeEnvironmentProvider,\n useServeEnvironment,\n} from './ServeEnvironment.js';\n","import React from 'react';\nimport type { FC } from 'react';\nimport { SiteProvider } from '../../site/SiteProvider.js';\nimport { ServeEnvironmentProvider } from './ServeEnvironment.js';\nimport { ServeCommandScreen } from './ServeCommandScreen.js';\n\nexport const ServeCommand: FC = () => {\n return (\n <SiteProvider>\n <ServeEnvironmentProvider>\n <ServeCommandScreen />\n </ServeEnvironmentProvider>\n </SiteProvider>\n );\n};\n","import React, { createContext, useContext } from 'react';\nimport type { FC, ReactNode } from 'react';\nimport { match } from 'variant';\nimport { updateAppManifestWithBaseUrl } from '@wix/cli-app-manifest';\nimport { useARMClient } from '@wix/arm-client';\nimport { Spinner, useAsync } from '@wix/cli-ui-kit';\nimport { useTranslation } from '@wix/cli-i18n';\nimport { useSiteOverrideClient } from '@wix/site-override-client';\nimport { ArmTagProvider } from '../../context/armTag.js';\nimport { readAppManifestFile } from '../../app-manifest/file.js';\nimport { assertBuildOutputExists } from '../../files/assert-build-output-exists.js';\nimport { usePreviewServer } from './hooks/usePreviewServer.js';\nimport { useProjectModel } from '../../model.js';\nimport { useSite } from '../../site/index.js';\nimport { createSiteOverrides } from '../../site-override/createSiteOverrides.js';\nimport { SiteOverrideProvider } from '../../context/siteOverride.js';\n\ninterface ServeEnvironment {\n serverUrl: string;\n}\n\nconst ServeEnvironmentContext = createContext<ServeEnvironment | null>(null);\n\nexport const ServeEnvironmentProvider: FC<{\n children: ReactNode;\n}> = ({ children }) => {\n const { model } = useProjectModel();\n const { t } = useTranslation();\n const { site } = useSite();\n const arm = useARMClient();\n const { createOverride } = useSiteOverrideClient();\n const createPreviewServer = usePreviewServer();\n\n const { status } = useAsync(async () => {\n await assertBuildOutputExists(model.projectFolder);\n const serverUrl = await createPreviewServer();\n\n const manifest = await readAppManifestFile(model.projectFolder);\n const updatedManifest = updateAppManifestWithBaseUrl(manifest, serverUrl);\n\n const armTag = await arm.createAppRelease(\n updatedManifest,\n model.config.projectId\n );\n\n const overrides = createSiteOverrides(model);\n const { id: siteOverrideId } = overrides\n ? await createOverride({\n appId: model.config.appId,\n siteId: site.id,\n overrides,\n })\n : await Promise.resolve({ id: undefined });\n\n return { armTag, serverUrl, siteOverrideId };\n }, []);\n\n return match(status, {\n Error: () => null,\n Loading: () => (\n <Spinner text={t('serve_command.starting_serve_environment')}></Spinner>\n ),\n Success: ({ result: { armTag, serverUrl, siteOverrideId } }) => (\n <ServeEnvironmentContext.Provider value={{ serverUrl }}>\n <SiteOverrideProvider siteOverrideId={siteOverrideId}>\n <ArmTagProvider armTag={armTag}>{children}</ArmTagProvider>\n </SiteOverrideProvider>\n </ServeEnvironmentContext.Provider>\n ),\n });\n};\n\nexport function useServeEnvironment(): ServeEnvironment {\n const context = useContext(ServeEnvironmentContext);\n if (context == null) {\n throw new Error(\n 'useServeEnvironment() cannot be used without an <ServeEnvironmentProvider>'\n );\n }\n return context;\n}\n","import { preview } from 'vite';\nimport type { PreviewServer } from 'vite';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useProjectModel } from '../../../model.js';\nimport { getClientViteConfig } from '../../../vite/index.js';\nimport { getViteServerUrl } from '../../../vite/vite-server-url.js';\nimport { ConfigType } from '../../../vite/vite-config-options.js';\nimport { createLogger } from '../../../vite/logger.js';\n\nexport function usePreviewServer() {\n const previewServerRef = useRef<PreviewServer>();\n const { model } = useProjectModel();\n\n useEffect(() => {\n return () => {\n previewServerRef.current?.httpServer.close();\n };\n }, []);\n\n const logger = useMemo(() => createLogger({ timestamp: true }), []);\n\n return useCallback(async () => {\n const previewServer = await preview(\n await getClientViteConfig(model, {\n type: ConfigType.build,\n customLogger: logger,\n })\n );\n\n previewServerRef.current = previewServer;\n\n return getViteServerUrl(previewServer);\n }, [model, logger]);\n}\n","import {\n Box,\n InfoIcon,\n Link,\n PointerIcon,\n SuccessIcon,\n Text,\n} from '@wix/cli-ui-kit';\nimport React from 'react';\nimport { Trans } from '@wix/cli-i18n';\nimport { useSite } from '../../site/useSite.js';\nimport { useServeEnvironment } from './ServeEnvironment.js';\nimport { PlatformViewer } from '../Platform/PlatformViewer.js';\n\nexport function ServeCommandScreen() {\n const { site } = useSite();\n const { serverUrl } = useServeEnvironment();\n\n return (\n <Box flexDirection=\"column\">\n <Box gap={1}>\n <Text skin=\"success\">\n <SuccessIcon />\n </Text>\n <Trans\n i18nKey=\"serve_command.starting_serve_environment_success\"\n components={[<Link url={serverUrl} />]}\n />\n </Box>\n <Box gap={1}>\n <InfoIcon />\n <Trans i18nKey=\"serve_command.production_build\" />\n </Box>\n <Box gap={1} paddingTop={1} paddingBottom={1}>\n <PointerIcon />\n <Trans\n i18nKey=\"general.dev_site.current\"\n values={{ name: site.displayName }}\n />\n </Box>\n <Box paddingBottom={1} flexDirection=\"column\">\n <PlatformViewer />\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","names":["import_react","import_react","React","import_react","React","React"]}