@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,635 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import {
4
+ SiteContext,
5
+ SiteState,
6
+ resolveConfiguredSite,
7
+ useSiteListClient
8
+ } from "./chunk-3KMSVIRS.js";
9
+ import {
10
+ useDebugLog
11
+ } from "./chunk-TTW4MEC3.js";
12
+ import {
13
+ APP_CONFIG_PATH,
14
+ BiProvider,
15
+ TimeoutError,
16
+ openBrowser,
17
+ pWaitFor,
18
+ saveAppConfig,
19
+ useBiLogger,
20
+ useDevCenterClient,
21
+ useHttpClient,
22
+ useProjectModel,
23
+ wixCliAction,
24
+ wixCliAppFlowStepsAnswers
25
+ } from "./chunk-TSFNDZPX.js";
26
+ import {
27
+ Alert,
28
+ Badge,
29
+ CliError,
30
+ CliErrorCode,
31
+ I18nProvider,
32
+ Key,
33
+ SelectInput,
34
+ SelectOptionAvailability,
35
+ Spinner,
36
+ Text,
37
+ Trans,
38
+ getTestOverrides,
39
+ require_lib,
40
+ require_react,
41
+ useAsync,
42
+ useAsyncCallback,
43
+ useExit,
44
+ useTranslation,
45
+ use_input_default,
46
+ z
47
+ } from "./chunk-XU5JBKO6.js";
48
+ import {
49
+ __toESM,
50
+ init_esm_shims
51
+ } from "./chunk-PYIAC2GK.js";
52
+
53
+ // src/site/SiteProvider.tsx
54
+ init_esm_shims();
55
+ var import_react11 = __toESM(require_react(), 1);
56
+ var import_variant7 = __toESM(require_lib(), 1);
57
+
58
+ // src/site/ResolveSite.tsx
59
+ init_esm_shims();
60
+ var import_react10 = __toESM(require_react(), 1);
61
+ var import_variant6 = __toESM(require_lib(), 1);
62
+
63
+ // ../cli-site-selector/src/index.ts
64
+ init_esm_shims();
65
+
66
+ // ../cli-site-selector/src/SiteSelector.tsx
67
+ init_esm_shims();
68
+ var import_react9 = __toESM(require_react(), 1);
69
+ var import_variant5 = __toESM(require_lib(), 1);
70
+
71
+ // ../cli-site-selector/src/SiteTypeSelect.tsx
72
+ init_esm_shims();
73
+ var import_react2 = __toESM(require_react(), 1);
74
+ var import_variant = __toESM(require_lib(), 1);
75
+
76
+ // ../cli-site-selector/src/bi.ts
77
+ init_esm_shims();
78
+ var import_react = __toESM(require_react(), 1);
79
+ function siteSelectorBiEvents(biLogger) {
80
+ return {
81
+ cliAction: ({
82
+ question,
83
+ action,
84
+ key,
85
+ additionalInfo
86
+ }) => {
87
+ void biLogger.report(
88
+ wixCliAction({
89
+ question,
90
+ action,
91
+ key,
92
+ additionalInfo: JSON.stringify(additionalInfo)
93
+ })
94
+ );
95
+ },
96
+ cliFlowStepAnswered: ({
97
+ question,
98
+ answer,
99
+ additionalInfo
100
+ }) => {
101
+ void biLogger.report(
102
+ wixCliAppFlowStepsAnswers({
103
+ question,
104
+ answer,
105
+ additionalInfo: JSON.stringify(additionalInfo)
106
+ })
107
+ );
108
+ }
109
+ };
110
+ }
111
+ function useSiteSelectorBi() {
112
+ const biLogger = useBiLogger();
113
+ return (0, import_react.useMemo)(() => siteSelectorBiEvents(biLogger), [biLogger]);
114
+ }
115
+
116
+ // ../cli-site-selector/src/SiteTypeSelect.tsx
117
+ var SiteTypeSelect = ({ onSubmit, onError, sites }) => {
118
+ const bi = useSiteSelectorBi();
119
+ const { t } = useTranslation();
120
+ const { getDevSitesCount, getDevSitesLimit } = useDevCenterClient();
121
+ const { status } = useAsync(
122
+ () => Promise.all([getDevSitesCount(), getDevSitesLimit()]),
123
+ [],
124
+ { onError }
125
+ );
126
+ const handleSubmit = (option) => {
127
+ void bi.cliFlowStepAnswered({
128
+ question: t("site_type_select.label"),
129
+ answer: option.title
130
+ });
131
+ onSubmit(option.value);
132
+ };
133
+ return (0, import_variant.match)(status, {
134
+ Error: () => null,
135
+ Loading: () => /* @__PURE__ */ import_react2.default.createElement(Spinner, { text: t("general.loading") }),
136
+ Success: ({ result: [devSitesCount, devSitesLimit] }) => {
137
+ const isDevSitesLimitReached = devSitesCount >= devSitesLimit;
138
+ const userHasNoSites = sites.length === 0;
139
+ return /* @__PURE__ */ import_react2.default.createElement(
140
+ SelectInput,
141
+ {
142
+ label: t("site_type_select.label"),
143
+ options: [
144
+ {
145
+ availability: userHasNoSites ? SelectOptionAvailability.Disabled({
146
+ reason: t("site_type_select.no_sites")
147
+ }) : SelectOptionAvailability.Enabled(),
148
+ title: t("site_type_select.pick_existing_site"),
149
+ value: "select-existing-site"
150
+ },
151
+ {
152
+ title: t("site_type_select.create_new_dev_site"),
153
+ value: "create-dev-site",
154
+ availability: isDevSitesLimitReached ? SelectOptionAvailability.Disabled({
155
+ reason: t("site_type_select.create_new_dev_site.disabled", {
156
+ limit: devSitesLimit
157
+ })
158
+ }) : SelectOptionAvailability.Enabled()
159
+ }
160
+ ],
161
+ onSubmit: handleSubmit
162
+ }
163
+ );
164
+ }
165
+ });
166
+ };
167
+
168
+ // ../cli-site-selector/src/CreateDevSite.tsx
169
+ init_esm_shims();
170
+ var import_react6 = __toESM(require_react(), 1);
171
+ var import_variant3 = __toESM(require_lib(), 1);
172
+
173
+ // ../cli-site-selector/src/WaitForAppToBeInstalled.tsx
174
+ init_esm_shims();
175
+ var import_react5 = __toESM(require_react(), 1);
176
+
177
+ // ../metasite-manager-client/src/index.ts
178
+ init_esm_shims();
179
+
180
+ // ../metasite-manager-client/src/useMetasiteManagerClient.ts
181
+ init_esm_shims();
182
+ var import_react3 = __toESM(require_react(), 1);
183
+
184
+ // ../metasite-manager-client/src/metasite-manager-client.ts
185
+ init_esm_shims();
186
+
187
+ // ../metasite-manager-client/src/schemas.ts
188
+ init_esm_shims();
189
+ var clientSpecMapSchema = z.record(
190
+ z.object({
191
+ appDefinitionId: z.string().optional(),
192
+ permissions: z.object({ revoked: z.boolean() }).optional()
193
+ })
194
+ );
195
+
196
+ // ../metasite-manager-client/src/metasite-manager-client.ts
197
+ var MetasiteManagerClient = class {
198
+ constructor(httpClient) {
199
+ this.httpClient = httpClient;
200
+ }
201
+ getClientSpecMap = async (metaSiteId) => {
202
+ try {
203
+ const { data } = await this.httpClient.request({
204
+ url: `/_api/msm/v1/meta-site/editor-client-spec-map/${metaSiteId}`
205
+ });
206
+ return clientSpecMapSchema.parse(data);
207
+ } catch (e) {
208
+ throw new CliError({
209
+ code: CliErrorCode.FailedToGetClientSpecMap(),
210
+ cause: e
211
+ });
212
+ }
213
+ };
214
+ getSiteInstalledApps = async (metaSiteId) => {
215
+ try {
216
+ const clientSpecMap = await this.getClientSpecMap(metaSiteId);
217
+ return Object.values(clientSpecMap).filter((spec) => spec.appDefinitionId && !spec.permissions?.revoked).map((spec) => spec.appDefinitionId);
218
+ } catch (e) {
219
+ throw new CliError({
220
+ code: CliErrorCode.FailedToGetSiteInstalledApps(),
221
+ cause: e
222
+ });
223
+ }
224
+ };
225
+ isAppInstalled = async ({
226
+ metaSiteId,
227
+ appId
228
+ }) => {
229
+ try {
230
+ const clientSpecMap = await this.getClientSpecMap(metaSiteId);
231
+ const isInstalled = Object.values(clientSpecMap).some(
232
+ (spec) => spec.appDefinitionId === appId && !spec.permissions?.revoked
233
+ );
234
+ return isInstalled;
235
+ } catch (e) {
236
+ throw new CliError({
237
+ code: CliErrorCode.FailedToCheckIfAppInstalled(),
238
+ cause: e
239
+ });
240
+ }
241
+ };
242
+ };
243
+
244
+ // ../metasite-manager-client/src/useMetasiteManagerClient.ts
245
+ function useMetasiteManagerClient() {
246
+ const httpClient = useHttpClient({ type: "general" });
247
+ return (0, import_react3.useMemo)(() => new MetasiteManagerClient(httpClient), [httpClient]);
248
+ }
249
+
250
+ // ../cli-site-selector/src/WaitForAppToBeInstalled.tsx
251
+ var import_variant2 = __toESM(require_lib(), 1);
252
+
253
+ // ../cli-site-selector/src/OpenBrowser.tsx
254
+ init_esm_shims();
255
+ var import_react4 = __toESM(require_react(), 1);
256
+ var OpenBrowser = ({ siteId, appId }) => {
257
+ const { t } = useTranslation();
258
+ const bi = useSiteSelectorBi();
259
+ use_input_default(async (input, key) => {
260
+ if (key.return) {
261
+ bi.cliAction({
262
+ question: t("install_app_on_site.warning.instructions"),
263
+ key: "enter",
264
+ action: "install_app_on_site"
265
+ });
266
+ await openBrowser(
267
+ `https://manage.wix.com/installer/install?metaSiteId=${siteId}&appId=${appId}&platform=cli&version=latest`
268
+ );
269
+ }
270
+ });
271
+ return /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement(Trans, { i18nKey: "install_app_on_site.warning" }), /* @__PURE__ */ import_react4.default.createElement(
272
+ Trans,
273
+ {
274
+ i18nKey: "install_app_on_site.warning.instructions",
275
+ components: [/* @__PURE__ */ import_react4.default.createElement(Key, { value: "Enter" })]
276
+ }
277
+ ));
278
+ };
279
+
280
+ // ../cli-site-selector/src/WaitForAppToBeInstalled.tsx
281
+ var AppInstallData = (0, import_variant2.variant)({
282
+ Success: {},
283
+ Canceled: {}
284
+ });
285
+ function isAbortError(error) {
286
+ return error && typeof error === "object" && "name" in error && error.name === "AbortError";
287
+ }
288
+ var WaitForAppToBeInstalled = ({
289
+ appId,
290
+ site,
291
+ onSubmit,
292
+ onError
293
+ }) => {
294
+ const { isAppInstalled } = useMetasiteManagerClient();
295
+ const { status } = useAsync(
296
+ async ({ signal }) => {
297
+ const { appInstallationPollInterval } = getTestOverrides();
298
+ try {
299
+ await pWaitFor(() => isAppInstalled({ metaSiteId: site.id, appId }), {
300
+ interval: appInstallationPollInterval ?? 2e3,
301
+ timeout: {
302
+ milliseconds: 60 * 1e3 * 2,
303
+ signal
304
+ }
305
+ });
306
+ return AppInstallData.Success();
307
+ } catch (error) {
308
+ if (error instanceof TimeoutError) {
309
+ throw new CliError({
310
+ code: CliErrorCode.SiteSelectorTimedout(),
311
+ cause: error
312
+ });
313
+ }
314
+ if (isAbortError(error)) {
315
+ return AppInstallData.Canceled();
316
+ }
317
+ throw error;
318
+ }
319
+ },
320
+ [],
321
+ {
322
+ onError,
323
+ onSuccess: (result) => {
324
+ if ((0, import_variant2.isType)(result, AppInstallData.Success)) {
325
+ onSubmit();
326
+ }
327
+ }
328
+ }
329
+ );
330
+ return (0, import_variant2.match)(status, {
331
+ Error: () => null,
332
+ Loading: () => /* @__PURE__ */ import_react5.default.createElement(OpenBrowser, { siteId: site.id, appId }),
333
+ Success: () => /* @__PURE__ */ import_react5.default.createElement(Alert, { type: "success" }, /* @__PURE__ */ import_react5.default.createElement(Badge, { skin: "success" }, /* @__PURE__ */ import_react5.default.createElement(Trans, { i18nKey: "general.success" })), " ", /* @__PURE__ */ import_react5.default.createElement(Trans, { i18nKey: "install_app_on_site.finished_successfully" }))
334
+ });
335
+ };
336
+
337
+ // ../cli-site-selector/src/CreateDevSite.tsx
338
+ var CreateDevSite = ({
339
+ status,
340
+ appId,
341
+ onSubmit,
342
+ onError
343
+ }) => {
344
+ const { t } = useTranslation();
345
+ return (0, import_variant3.match)(status, {
346
+ NotRequested: () => null,
347
+ Error: () => null,
348
+ Loading: () => /* @__PURE__ */ import_react6.default.createElement(Spinner, { text: t("create_dev_site.loading") }),
349
+ Success: ({ result }) => /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement(
350
+ Trans,
351
+ {
352
+ i18nKey: "create_dev_site.success",
353
+ components: [/* @__PURE__ */ import_react6.default.createElement(Text, { skin: "success", bold: true })],
354
+ values: { name: result.displayName }
355
+ }
356
+ ), /* @__PURE__ */ import_react6.default.createElement(
357
+ WaitForAppToBeInstalled,
358
+ {
359
+ appId,
360
+ site: result,
361
+ onSubmit: () => onSubmit(result),
362
+ onError
363
+ }
364
+ ))
365
+ });
366
+ };
367
+
368
+ // ../cli-site-selector/src/messages.json
369
+ var messages_default = {
370
+ "general.loading": "Loading...",
371
+ "general.success": "Success",
372
+ "site_type_select.label": "Select Development Site",
373
+ "site_type_select.create_new_dev_site": "Create a new Development Site",
374
+ "site_type_select.create_new_dev_site.disabled": "You have reached the maximum number of {limit} Development Sites",
375
+ "site_type_select.pick_existing_site": "Pick an existing site",
376
+ "site_type_select.no_sites": "No sites found",
377
+ "create_dev_site.loading": "Creating your new Development Site...",
378
+ "create_dev_site.success": "Development Site <0>{name}</0> created successfully! \u{1F680}",
379
+ "site_list_select.label": "Select Site",
380
+ "install_app_on_site.warning": "Your new application needs to be installed on the selected Development Site",
381
+ "install_app_on_site.warning.instructions": "Press <0/> to install the application in your browser",
382
+ "install_app_on_site.finished_successfully": "App installed on Development Site."
383
+ };
384
+
385
+ // ../cli-site-selector/src/SelectExistingSite.tsx
386
+ init_esm_shims();
387
+ var import_react8 = __toESM(require_react(), 1);
388
+ var import_variant4 = __toESM(require_lib(), 1);
389
+
390
+ // ../cli-site-selector/src/SiteListSelect.tsx
391
+ init_esm_shims();
392
+ var import_react7 = __toESM(require_react(), 1);
393
+ var SiteListSelect = ({ onSubmit, sites }) => {
394
+ const { t } = useTranslation();
395
+ const bi = useSiteSelectorBi();
396
+ const handleSubmit = (0, import_react7.useCallback)(
397
+ (option) => {
398
+ bi.cliFlowStepAnswered({
399
+ question: t("site_list_select.label"),
400
+ answer: option.title
401
+ });
402
+ onSubmit(option.value);
403
+ },
404
+ [bi, onSubmit, t]
405
+ );
406
+ return /* @__PURE__ */ import_react7.default.createElement(
407
+ SelectInput,
408
+ {
409
+ label: t("site_list_select.label"),
410
+ options: sites.map((site) => ({
411
+ key: site.id,
412
+ title: site.displayName,
413
+ description: site.viewUrl,
414
+ value: site
415
+ })),
416
+ onSubmit: handleSubmit
417
+ }
418
+ );
419
+ };
420
+
421
+ // ../cli-site-selector/src/SelectExistingSite.tsx
422
+ var SelectExistingSite = ({
423
+ sites,
424
+ appId,
425
+ onSubmit,
426
+ onError
427
+ }) => {
428
+ const { t } = useTranslation();
429
+ const { isAppInstalled } = useMetasiteManagerClient();
430
+ const [siteToInstallAppOn, setSiteToInstallAppOn] = (0, import_react8.useState)(
431
+ null
432
+ );
433
+ const checkAppInstalled = useAsyncCallback(
434
+ (_, site) => isAppInstalled({ metaSiteId: site.id, appId }),
435
+ {
436
+ onError
437
+ }
438
+ );
439
+ async function handleSelectSite(site) {
440
+ const isInstalled = await checkAppInstalled.execute(site);
441
+ if (isInstalled) {
442
+ onSubmit(site);
443
+ } else {
444
+ setSiteToInstallAppOn(site);
445
+ }
446
+ }
447
+ return /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, /* @__PURE__ */ import_react8.default.createElement(SiteListSelect, { onSubmit: handleSelectSite, sites }), (0, import_variant4.isType)(checkAppInstalled.status, "Loading") && /* @__PURE__ */ import_react8.default.createElement(Spinner, { text: t("general.loading") }), siteToInstallAppOn && /* @__PURE__ */ import_react8.default.createElement(
448
+ WaitForAppToBeInstalled,
449
+ {
450
+ appId,
451
+ site: siteToInstallAppOn,
452
+ onSubmit: () => onSubmit(siteToInstallAppOn),
453
+ onError
454
+ }
455
+ ));
456
+ };
457
+
458
+ // ../cli-site-selector/src/SiteSelector.tsx
459
+ var SiteSelector = ({
460
+ appId,
461
+ biLogger,
462
+ onSubmit,
463
+ onError
464
+ }) => {
465
+ const [siteType, setSiteType] = (0, import_react9.useState)(null);
466
+ const { createDevSite } = useDevCenterClient();
467
+ const siteListClient = useSiteListClient();
468
+ const { status } = useAsync(
469
+ () => siteListClient.querySites({
470
+ query: {
471
+ cursorPaging: {
472
+ limit: 100
473
+ }
474
+ }
475
+ }),
476
+ [],
477
+ {
478
+ onError
479
+ }
480
+ );
481
+ const createSite = useAsyncCallback(() => createDevSite(), {
482
+ onError
483
+ });
484
+ function handleSelectSiteType(siteType2) {
485
+ setSiteType(siteType2);
486
+ if (siteType2 === "create-dev-site") {
487
+ void createSite.execute();
488
+ }
489
+ }
490
+ return /* @__PURE__ */ import_react9.default.createElement(BiProvider, { value: biLogger }, /* @__PURE__ */ import_react9.default.createElement(I18nProvider, { messages: messages_default }, (0, import_variant5.match)(status, {
491
+ Error: () => null,
492
+ Loading: () => /* @__PURE__ */ import_react9.default.createElement(Spinner, { text: /* @__PURE__ */ import_react9.default.createElement(Trans, { i18nKey: "general.loading" }) }),
493
+ Success: ({ result: sites }) => /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement(
494
+ SiteTypeSelect,
495
+ {
496
+ onSubmit: handleSelectSiteType,
497
+ onError,
498
+ sites
499
+ }
500
+ ), siteType === "create-dev-site" && /* @__PURE__ */ import_react9.default.createElement(
501
+ CreateDevSite,
502
+ {
503
+ status: createSite.status,
504
+ appId,
505
+ onSubmit,
506
+ onError
507
+ }
508
+ ), siteType === "select-existing-site" && /* @__PURE__ */ import_react9.default.createElement(
509
+ SelectExistingSite,
510
+ {
511
+ sites,
512
+ appId,
513
+ onSubmit,
514
+ onError
515
+ }
516
+ ))
517
+ })));
518
+ };
519
+
520
+ // src/site/ResolveSite.tsx
521
+ var ResolveSite = ({ state, onSubmit }) => {
522
+ const exit = useExit();
523
+ const { t } = useTranslation();
524
+ const { model } = useProjectModel();
525
+ const biLogger = useBiLogger();
526
+ return /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, (0, import_variant6.match)(state, {
527
+ NotConfigured: (0, import_variant6.constant)(
528
+ /* @__PURE__ */ import_react10.default.createElement(Alert, { type: "insight" }, t("general.no_site_id_configured"))
529
+ ),
530
+ NotFound: ({ id }) => /* @__PURE__ */ import_react10.default.createElement(Alert, { type: "error" }, t("general.site_id_not_found", { id }))
531
+ }), /* @__PURE__ */ import_react10.default.createElement(
532
+ SiteSelector,
533
+ {
534
+ appId: model.config.appId,
535
+ biLogger,
536
+ onSubmit,
537
+ onError: exit
538
+ }
539
+ ));
540
+ };
541
+
542
+ // src/site/SiteProvider.tsx
543
+ var SiteProvider = ({ children, siteId }) => {
544
+ const exit = useExit();
545
+ const {
546
+ model: { projectFolder }
547
+ } = useProjectModel();
548
+ const writeDebugLog = useDebugLog();
549
+ const siteListClient = useSiteListClient();
550
+ const { t } = useTranslation();
551
+ const { status, merge } = useAsync(
552
+ async () => resolveConfiguredSite({
553
+ projectFolder,
554
+ siteListClient,
555
+ siteId,
556
+ writeDebugLog
557
+ }),
558
+ []
559
+ );
560
+ const setSite = (0, import_react11.useCallback)(
561
+ async (site) => {
562
+ try {
563
+ await saveAppConfig(projectFolder, { siteId: site.id });
564
+ merge({ result: SiteState.Resolved({ site }) });
565
+ } catch (e) {
566
+ throw new CliError({
567
+ code: CliErrorCode.FailedToSaveDevelopmentSite({
568
+ path: APP_CONFIG_PATH
569
+ }),
570
+ cause: e
571
+ });
572
+ }
573
+ },
574
+ [merge, projectFolder]
575
+ );
576
+ const handleResolveSite = (0, import_react11.useCallback)(
577
+ (site) => setSite(site).catch(exit),
578
+ [exit, setSite]
579
+ );
580
+ return (0, import_variant7.match)(status, {
581
+ Error: () => null,
582
+ Loading: () => /* @__PURE__ */ import_react11.default.createElement(Spinner, { text: t("dev_command.site_provider.loading") }),
583
+ Success: ({ result: state }) => {
584
+ return (0, import_variant7.match)(state, {
585
+ NotConfigured: (variant2) => /* @__PURE__ */ import_react11.default.createElement(ResolveSite, { state: variant2, onSubmit: handleResolveSite }),
586
+ NotFound: (variant2) => /* @__PURE__ */ import_react11.default.createElement(ResolveSite, { state: variant2, onSubmit: handleResolveSite }),
587
+ Resolved: ({ site }) => /* @__PURE__ */ import_react11.default.createElement(
588
+ SiteContext.Provider,
589
+ {
590
+ value: {
591
+ site,
592
+ setSite
593
+ }
594
+ },
595
+ typeof children === "function" ? children(site) : children
596
+ )
597
+ });
598
+ }
599
+ });
600
+ };
601
+
602
+ // src/site/index.ts
603
+ init_esm_shims();
604
+
605
+ // src/components/Platform/usePlatform.tsx
606
+ init_esm_shims();
607
+ var import_react12 = __toESM(require_react(), 1);
608
+ var import_variant8 = __toESM(require_lib(), 1);
609
+ function usePlatform() {
610
+ const { model } = useProjectModel();
611
+ const isPlatformExists = (0, import_react12.useCallback)(
612
+ (platformType) => model.components.some(
613
+ (component) => component.platforms.some((0, import_variant8.isType)(platformType.type))
614
+ ),
615
+ [model.components]
616
+ );
617
+ const hasSinglePlatform = (0, import_react12.useCallback)(
618
+ (platformType) => model.components.every(
619
+ (component) => component.platforms.some((0, import_variant8.isType)(platformType.type)) || component.platforms.length === 0
620
+ ),
621
+ [model.components]
622
+ );
623
+ return {
624
+ isPlatformExists,
625
+ hasSinglePlatform
626
+ };
627
+ }
628
+
629
+ export {
630
+ useMetasiteManagerClient,
631
+ SiteSelector,
632
+ SiteProvider,
633
+ usePlatform
634
+ };
635
+ //# sourceMappingURL=chunk-NDFUPX6I.js.map