@wix/cli
Version:
CLI tool for building Wix sites and applications
1,091 lines (1,068 loc) • 36.2 kB
JavaScript
import { createRequire as _createRequire } from 'node:module';
const require = _createRequire(import.meta.url);
import {
useWixCliAppBi
} from "./chunk-CKNVM7JY.js";
import {
ActionStatus,
PreviewCommand,
useCreatePreview
} from "./chunk-FCDJ4VXU.js";
import {
useDevCenterOverridesClient,
useUpdateDeploymentTopologyForSite
} from "./chunk-EA4ZV7ZO.js";
import {
assertBuildOutputExists
} from "./chunk-NPYBTUWU.js";
import "./chunk-BUPV3T3K.js";
import "./chunk-ZJ4HTMFG.js";
import "./chunk-DGC6KEUB.js";
import "./chunk-QRGKMYDD.js";
import "./chunk-CKNI3TGO.js";
import "./chunk-YLCFL3QA.js";
import {
ComponentType
} from "./chunk-BHWSM372.js";
import {
useBackendAsAServiceClient
} from "./chunk-JQOAY3IH.js";
import "./chunk-7QJUAJW3.js";
import "./chunk-NMCF7XG5.js";
import "./chunk-MHV22UIU.js";
import {
useProjectModel,
useSiteConfig
} from "./chunk-OQJA5FSX.js";
import "./chunk-AAUVYJJT.js";
import "./chunk-K6JLY75P.js";
import "./chunk-KCDAY54L.js";
import {
useHttpClient
} from "./chunk-FYLO6WOU.js";
import {
usePanoramaMethodLogger
} from "./chunk-3B6VL2WO.js";
import {
require_isArray
} from "./chunk-7QTVQZAE.js";
import {
SiteAuthProvider,
isHttpError,
isHttpValidationError,
pRetry,
require_semver,
resolveUrl,
serializer
} from "./chunk-CCWE4DS6.js";
import "./chunk-U5H3SP3I.js";
import "./chunk-TIVTYCB2.js";
import "./chunk-RPTAJN5Y.js";
import {
Alert,
Box_default,
Cart,
ConfirmInput,
Link,
Notification,
SelectInput,
SelectOptionAvailability,
Spinner,
Statistics,
Text,
TextInput,
useAsync,
useAsyncCallback
} from "./chunk-UC5LTXTA.js";
import {
require_baseGetTag,
require_isObjectLike
} from "./chunk-5VIJC5EU.js";
import "./chunk-MZDJNQLB.js";
import {
require_react
} from "./chunk-QNHANFRW.js";
import "./chunk-AFPDHQYI.js";
import "./chunk-HYKBBZLS.js";
import "./chunk-C5RTKQVL.js";
import "./chunk-4EJ5VQTT.js";
import "./chunk-4UTFAKA5.js";
import "./chunk-LU3R3EBR.js";
import {
getTestOverrides
} from "./chunk-XZUGLEBK.js";
import "./chunk-TLLAD5LU.js";
import {
external_exports
} from "./chunk-SDLCFZRL.js";
import {
CliError,
CliErrorCode,
require_lib
} from "./chunk-CO5A7CZG.js";
import {
__commonJS,
__toESM,
init_esm_shims
} from "./chunk-EXLZF52D.js";
// ../../node_modules/lodash/isString.js
var require_isString = __commonJS({
"../../node_modules/lodash/isString.js"(exports, module) {
"use strict";
init_esm_shims();
var baseGetTag = require_baseGetTag();
var isArray = require_isArray();
var isObjectLike = require_isObjectLike();
var stringTag = "[object String]";
function isString2(value) {
return typeof value == "string" || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag;
}
module.exports = isString2;
}
});
// ../cli-astro-commands/src/components/ReleaseCommand/index.ts
init_esm_shims();
// ../cli-astro-commands/src/components/ReleaseCommand/ReleaseCommand.tsx
init_esm_shims();
var import_react10 = __toESM(require_react(), 1);
var import_variant4 = __toESM(require_lib(), 1);
// ../cli-astro-commands/src/components/ReleaseCommand/ReleaseSite.tsx
init_esm_shims();
var import_react2 = __toESM(require_react(), 1);
var import_variant2 = __toESM(require_lib(), 1);
// ../arm-client/src/index.ts
init_esm_shims();
// ../arm-client/src/client.ts
init_esm_shims();
// ../../node_modules/@wix/ambassador-ctp-gradual-rollout-v1-app-config/build/es/http.impl.js
init_esm_shims();
var _commitComponentOverrideRequest = {};
var _commitComponentOverrideResponse = {};
var _createAppReleaseRequest = {};
var _createAppReleaseResponse = {};
var _createComponentsRequest = {};
var _createComponentsResponse = {};
var _promoteAppVersionFromDraftToProductionRequest = {};
var _promoteAppVersionFromDraftToProductionResponse = {};
var _updateAppReleaseRequest = {};
var _updateAppReleaseResponse = {};
function resolveComWixCtpAppsReleaseManagerServiceUrl(opts) {
var domainToMappings = {
"api._api_base_domain_": [
{
srcPath: "/apps-release-manager-service-web",
destPath: ""
}
],
"bo._base_domain_": [
{
srcPath: "/apps-release-manager-service-web",
destPath: ""
}
],
"wixbo.ai": [
{
srcPath: "/apps-release-manager-service-web",
destPath: ""
}
],
"wix-bo.com": [
{
srcPath: "/apps-release-manager-service-web",
destPath: ""
}
],
"www._base_domain_": [
{
srcPath: "/apps-release-manager-service-web/artifacts-release-manager/app-releases",
destPath: "/artifacts-release-manager/app-releases"
},
{
srcPath: "/_api/apps-release-manager-service-web/artifacts-release-manager/app-releases",
destPath: "/artifacts-release-manager/app-releases"
},
{
srcPath: "/apps-release-manager-service-web/apps/create",
destPath: "/apps/create"
},
{
srcPath: "/apps-release-manager-service-web/apps/promote",
destPath: "/apps/promote"
},
{
srcPath: "/apps-release-manager-service-web/apps/tags",
destPath: "/apps/tags"
},
{
srcPath: "/apps-release-manager-service-web/apps/create-components",
destPath: "/apps/create-components"
},
{
srcPath: "/apps-release-manager-service-web/apps/commit",
destPath: "/apps/commit"
},
{
srcPath: "/apps-release-manager-service-web/apps/promote-app-version",
destPath: "/apps/promote-app-version"
}
],
"manage._base_domain_": [
{
srcPath: "/apps-release-manager-service-web/apps/promote",
destPath: "/apps/promote"
},
{
srcPath: "/apps-release-manager-service-web/apps/create",
destPath: "/apps/create"
},
{
srcPath: "/apps-release-manager-service-web/apps/tags",
destPath: "/apps/tags"
},
{
srcPath: "/apps-release-manager-service-web/apps/create-components",
destPath: "/apps/create-components"
},
{
srcPath: "/apps-release-manager-service-web/apps/commit",
destPath: "/apps/commit"
},
{
srcPath: "/apps-release-manager-service-web/apps/promote-app-version",
destPath: "/apps/promote-app-version"
},
{
srcPath: "/apps-release-manager-service-web/apps/release",
destPath: "/apps/release"
}
]
};
return resolveUrl(Object.assign(opts, { domainToMappings }));
}
function createAppRelease(payload) {
var _a = serializer(_createAppReleaseRequest, {}), toReq = _a.toJSON, fromReq = _a.fromJSON;
var fromRes = serializer(_createAppReleaseResponse, {}).fromJSON;
function __createAppRelease(_a2) {
var host = _a2.host;
var serializedData = toReq(payload);
var metadata = {
entityFqdn: "wix.ctp.gradual_rollout.v1.app_config",
method: "POST",
methodFqn: "com.wix.ctp.AppsReleaseManagerService.CreateAppRelease",
migrationOptions: {
optInTransformResponse: true
},
url: resolveComWixCtpAppsReleaseManagerServiceUrl({
protoPath: "/apps/create/{appId}",
data: serializedData,
host
}),
data: serializedData,
transformResponse: fromRes
};
return metadata;
}
__createAppRelease.fromReq = fromReq;
__createAppRelease.__isAmbassador = true;
return __createAppRelease;
}
function updateAppRelease(payload) {
var _a = serializer(_updateAppReleaseRequest, {}), toReq = _a.toJSON, fromReq = _a.fromJSON;
var fromRes = serializer(_updateAppReleaseResponse, {}).fromJSON;
function __updateAppRelease(_a2) {
var host = _a2.host;
var serializedData = toReq(payload);
var metadata = {
entityFqdn: "wix.ctp.gradual_rollout.v1.app_config",
method: "PUT",
methodFqn: "com.wix.ctp.AppsReleaseManagerService.UpdateAppRelease",
migrationOptions: {
optInTransformResponse: true
},
url: resolveComWixCtpAppsReleaseManagerServiceUrl({
protoPath: "/apps/tags/{tag}",
data: serializedData,
host
}),
data: serializedData,
transformResponse: fromRes
};
return metadata;
}
__updateAppRelease.fromReq = fromReq;
__updateAppRelease.__isAmbassador = true;
return __updateAppRelease;
}
function createComponents(payload) {
var _a = serializer(_createComponentsRequest, {}), toReq = _a.toJSON, fromReq = _a.fromJSON;
var fromRes = serializer(_createComponentsResponse, {}).fromJSON;
function __createComponents(_a2) {
var host = _a2.host;
var serializedData = toReq(payload);
var metadata = {
entityFqdn: "wix.ctp.gradual_rollout.v1.app_config",
method: "POST",
methodFqn: "com.wix.ctp.AppsReleaseManagerService.CreateComponents",
migrationOptions: {
optInTransformResponse: true
},
url: resolveComWixCtpAppsReleaseManagerServiceUrl({
protoPath: "/apps/create-components/{appId}",
data: serializedData,
host
}),
data: serializedData,
transformResponse: fromRes
};
return metadata;
}
__createComponents.fromReq = fromReq;
__createComponents.__isAmbassador = true;
return __createComponents;
}
function commitComponentOverride(payload) {
var _a = serializer(_commitComponentOverrideRequest, {}), toReq = _a.toJSON, fromReq = _a.fromJSON;
var fromRes = serializer(_commitComponentOverrideResponse, {}).fromJSON;
function __commitComponentOverride(_a2) {
var host = _a2.host;
var serializedData = toReq(payload);
var metadata = {
entityFqdn: "wix.ctp.gradual_rollout.v1.app_config",
method: "POST",
methodFqn: "com.wix.ctp.AppsReleaseManagerService.CommitComponentOverride",
migrationOptions: {
optInTransformResponse: true
},
url: resolveComWixCtpAppsReleaseManagerServiceUrl({
protoPath: "/apps/commit/{appId}/{componentOverrideId}",
data: serializedData,
host
}),
data: serializedData,
transformResponse: fromRes
};
return metadata;
}
__commitComponentOverride.fromReq = fromReq;
__commitComponentOverride.__isAmbassador = true;
return __commitComponentOverride;
}
function promoteAppVersionFromDraftToProduction(payload) {
var _a = serializer(_promoteAppVersionFromDraftToProductionRequest, {}), toReq = _a.toJSON, fromReq = _a.fromJSON;
var fromRes = serializer(_promoteAppVersionFromDraftToProductionResponse, {}).fromJSON;
function __promoteAppVersionFromDraftToProduction(_a2) {
var host = _a2.host;
var serializedData = toReq(payload);
var metadata = {
entityFqdn: "wix.ctp.gradual_rollout.v1.app_config",
method: "POST",
methodFqn: "com.wix.ctp.AppsReleaseManagerService.PromoteAppVersionFromDraftToProduction",
migrationOptions: {
optInTransformResponse: true
},
url: resolveComWixCtpAppsReleaseManagerServiceUrl({
protoPath: "/apps/promote-app-version/{appId}/{createNewMajor}/{latestMajor}",
data: serializedData,
host
}),
data: serializedData,
transformResponse: fromRes
};
return metadata;
}
__promoteAppVersionFromDraftToProduction.fromReq = fromReq;
__promoteAppVersionFromDraftToProduction.__isAmbassador = true;
return __promoteAppVersionFromDraftToProduction;
}
// ../../node_modules/@wix/ambassador-ctp-gradual-rollout-v1-baas-release/es/build/http.impl.js
init_esm_shims();
var _releaseRequest = {};
var _releaseResponse = {};
function resolveComWixCtpAppsReleaseManagerBassServiceUrl(opts) {
var domainToMappings = {
"api._api_base_domain_": [
{
srcPath: "/apps-release-manager-service-web",
destPath: ""
}
],
"bo._base_domain_": [
{
srcPath: "/apps-release-manager-service-web",
destPath: ""
}
],
"wixbo.ai": [
{
srcPath: "/apps-release-manager-service-web",
destPath: ""
}
],
"wix-bo.com": [
{
srcPath: "/apps-release-manager-service-web",
destPath: ""
}
],
"www._base_domain_": [
{
srcPath: "/apps-release-manager-service-web/artifacts-release-manager/app-releases",
destPath: "/artifacts-release-manager/app-releases"
},
{
srcPath: "/_api/apps-release-manager-service-web/artifacts-release-manager/app-releases",
destPath: "/artifacts-release-manager/app-releases"
},
{
srcPath: "/apps-release-manager-service-web/apps/create",
destPath: "/apps/create"
},
{
srcPath: "/apps-release-manager-service-web/apps/promote",
destPath: "/apps/promote"
},
{
srcPath: "/apps-release-manager-service-web/apps/tags",
destPath: "/apps/tags"
},
{
srcPath: "/apps-release-manager-service-web/apps/create-components",
destPath: "/apps/create-components"
},
{
srcPath: "/apps-release-manager-service-web/apps/commit",
destPath: "/apps/commit"
},
{
srcPath: "/apps-release-manager-service-web/apps/promote-app-version",
destPath: "/apps/promote-app-version"
}
],
"manage._base_domain_": [
{
srcPath: "/apps-release-manager-service-web/apps/promote",
destPath: "/apps/promote"
},
{
srcPath: "/apps-release-manager-service-web/apps/create",
destPath: "/apps/create"
},
{
srcPath: "/apps-release-manager-service-web/apps/tags",
destPath: "/apps/tags"
},
{
srcPath: "/apps-release-manager-service-web/apps/create-components",
destPath: "/apps/create-components"
},
{
srcPath: "/apps-release-manager-service-web/apps/commit",
destPath: "/apps/commit"
},
{
srcPath: "/apps-release-manager-service-web/apps/promote-app-version",
destPath: "/apps/promote-app-version"
},
{
srcPath: "/apps-release-manager-service-web/apps/release",
destPath: "/apps/release"
}
]
};
return resolveUrl(Object.assign(opts, { domainToMappings }));
}
function release(payload) {
var _a = serializer(_releaseRequest, {}), toReq = _a.toJSON, fromReq = _a.fromJSON;
var fromRes = serializer(_releaseResponse, {}).fromJSON;
function __release(_a2) {
var host = _a2.host;
var serializedData = toReq(payload);
var metadata = {
entityFqdn: "wix.ctp.gradual_rollout.v1.baas_release",
method: "POST",
methodFqn: "com.wix.ctp.AppsReleaseManagerBassService.Release",
migrationOptions: {
optInTransformResponse: true
},
url: resolveComWixCtpAppsReleaseManagerBassServiceUrl({
protoPath: "/apps/release/{appId}/{componentOverrideId}",
data: serializedData,
host
}),
data: serializedData,
transformResponse: fromRes
};
return metadata;
}
__release.fromReq = fromReq;
__release.__isAmbassador = true;
return __release;
}
// ../arm-client/src/client.ts
var import_variant = __toESM(require_lib(), 1);
// ../arm-client/src/isTrustedInternalErr.ts
init_esm_shims();
function isTrustedInternalErr(e) {
if (isHttpError(e)) {
const appError = e.response?.data?.details?.applicationError;
if (appError?.description) {
let errDescription;
try {
errDescription = JSON.parse(appError.description);
} catch {
}
return errDescription?.results?.some(
(result) => result.error?.startsWith("scriptAsset is not supported")
);
}
}
return false;
}
// ../arm-client/src/schemas.ts
init_esm_shims();
var promoteAppVersionFromDraftToProductionSchema = external_exports.object({
fullVersion: external_exports.string()
});
var commitComponentOverrideSchema = external_exports.object({
nextMajor: external_exports.string(),
nextMinor: external_exports.string().optional()
});
var createAppReleaseSchema = external_exports.object({
tag: external_exports.string()
});
var releaseSchema = external_exports.object({
releaseBaseUrl: external_exports.string()
});
// ../arm-client/src/client.ts
var { AppPermissionDenied } = CliErrorCode;
var UpdateAppReleaseData = (0, import_variant.variant)({
TagNotFound: (0, import_variant.fields)(),
TagUpdated: {}
});
var ARMClient = class {
constructor(httpClient) {
this.httpClient = httpClient;
const { minRetryTimeout, retries } = getTestOverrides();
this.retryOptions = {
maxTimeout: 3 * 1e3,
minTimeout: minRetryTimeout,
retries: retries ?? 3
};
}
retryOptions;
createComponents = async (appId, componentConfigs, projectId) => {
try {
await this.httpClient.request(
createComponents({ appId, componentConfigs, projectId })
);
} catch (e) {
if (isHttpError(e) && e.response?.status === 403) {
throw new CliError({
cause: e,
code: AppPermissionDenied({ appId })
});
}
throw new CliError({
cause: e,
code: CliErrorCode.FailedToCreateComponents()
});
}
};
createAppRelease = async (manifest, projectId) => {
try {
const { data } = await pRetry(
() => this.httpClient.request(
createAppRelease({
appId: manifest.appId,
componentConfigs: manifest.components,
projectId
})
),
this.retryOptions
);
return createAppReleaseSchema.parse(data).tag;
} catch (e) {
if (isHttpError(e)) {
if (e.response?.status === 403) {
throw new CliError({
cause: e,
code: AppPermissionDenied({ appId: manifest.appId })
});
}
if (e.response?.status === 400 && isHttpValidationError(e)) {
throw new CliError({
cause: e,
code: CliErrorCode.AppReleaseConfigViolations()
});
}
}
if (isTrustedInternalErr(e)) {
throw new CliError({
cause: e,
code: CliErrorCode.TrustedAppIsNotMarkedAsInternal()
});
}
throw new CliError({
cause: e,
code: CliErrorCode.FailedToCreateAppRelease()
});
}
};
updateAppRelease = async (manifest, tag) => {
try {
await pRetry(
() => this.httpClient.request(
updateAppRelease({
appId: manifest.appId,
componentConfigs: manifest.components,
tag
})
),
this.retryOptions
);
return UpdateAppReleaseData.TagUpdated();
} catch (e) {
if (isHttpError(e)) {
if (e.response?.status === 404) {
return UpdateAppReleaseData.TagNotFound({ cause: e });
}
if (e.response?.status === 403) {
throw new CliError({
cause: e,
code: AppPermissionDenied({ appId: manifest.appId })
});
}
if (e.response?.status === 400 && isHttpValidationError(e)) {
throw new CliError({
cause: e,
code: CliErrorCode.AppReleaseConfigViolations()
});
}
}
if (isTrustedInternalErr(e)) {
throw new CliError({
cause: e,
code: CliErrorCode.TrustedAppIsNotMarkedAsInternal()
});
}
throw new CliError({
cause: e,
code: CliErrorCode.FailedToUpdateAppRelease()
});
}
};
createDraftVersion = async (appId, tag) => {
try {
const { data } = await this.httpClient.request(
commitComponentOverride({
appId,
componentOverrideId: tag
})
);
return commitComponentOverrideSchema.parse(data);
} catch (cause) {
throw new CliError({
cause,
code: CliErrorCode.FailedToCreateDraftVersion()
});
}
};
releaseDraftVersion = async (appId, options) => {
try {
const { data } = await this.httpClient.request(
promoteAppVersionFromDraftToProduction({
appId,
createNewMajor: options.createNewMajor,
latestMajor: options.latestMajor,
notes: options.notes
})
);
const { fullVersion } = promoteAppVersionFromDraftToProductionSchema.parse(data);
return { releasedVersion: fullVersion };
} catch (cause) {
throw new CliError({
cause,
code: CliErrorCode.FailedToReleaseDraftVersion()
});
}
};
releaseHeadlessProject = async ({
appId,
comment,
componentOverrideId,
createMinorVersion
}) => {
try {
const { data } = await this.httpClient.request(
release({
appId,
componentOverrideId,
createMinorVersion,
notes: comment
})
);
return releaseSchema.parse(data).releaseBaseUrl;
} catch (e) {
throw new CliError({
cause: e,
code: CliErrorCode.FailedToReleaseHeadlessProject()
});
}
};
};
// ../arm-client/src/useARMClient.ts
init_esm_shims();
var import_react = __toESM(require_react(), 1);
function useARMClient() {
const httpClient = useHttpClient({ type: "backoffice" });
const client = (0, import_react.useMemo)(() => new ARMClient(httpClient), [httpClient]);
return usePanoramaMethodLogger(client);
}
// ../cli-astro-commands/src/components/ReleaseCommand/ReleaseSite.tsx
var ReleaseSite = ({
baseUrl,
label,
createMinorVersion,
comment
}) => {
const { appId, siteId } = useSiteConfig();
const { getAppProject } = useBackendAsAServiceClient();
const { releaseHeadlessProject } = useARMClient();
const updateDeploymentTopology = useUpdateDeploymentTopologyForSite(siteId);
const releaseAction = useAsyncCallback(
async (_, previewId, previewUrl) => {
const deploymentBaseUrl = await releaseHeadlessProject({
appId,
componentOverrideId: previewId,
createMinorVersion,
comment
});
await updateDeploymentTopology({
environment: "production",
siteUrl: previewUrl ?? "",
versionOverrideId: previewId
});
const appProject = await getAppProject(appId);
return { baseUrl: appProject?.customDomain?.domain ?? deploymentBaseUrl };
}
);
const { uploadStatus } = useCreatePreview({
baseUrl,
label,
onPreviewCreated: ({ previewId, previewUrl }) => {
void releaseAction.execute(previewId, previewUrl);
}
});
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(
ActionStatus,
{
status: uploadStatus,
loadingText: "Uploading your application files...",
successText: "Uploaded successfully!"
}
), (0, import_variant2.match)(releaseAction.status, {
NotRequested: () => null,
Error: () => null,
Loading: () => /* @__PURE__ */ import_react2.default.createElement(Spinner, { text: /* @__PURE__ */ import_react2.default.createElement(Text, null, "Releasing...") }),
Success: ({ result: { baseUrl: baseUrl2 } }) => /* @__PURE__ */ import_react2.default.createElement(Box_default, { flexDirection: "column", gap: 1 }, /* @__PURE__ */ import_react2.default.createElement(Alert, { type: "success" }, /* @__PURE__ */ import_react2.default.createElement(Text, { bold: true }, "Site published on ", baseUrl2)))
}));
};
// ../cli-astro-commands/src/components/ReleaseCommand/app-flow/ReleaseApp.tsx
init_esm_shims();
var import_react9 = __toESM(require_react(), 1);
var import_isString = __toESM(require_isString(), 1);
var import_semver = __toESM(require_semver(), 1);
var import_variant3 = __toESM(require_lib(), 1);
// ../cli-astro-commands/src/components/ReleaseCommand/Steps/CreatePreview.tsx
init_esm_shims();
var import_react3 = __toESM(require_react(), 1);
var CreatePreview = (props) => {
const { baseUrl, label, onCreated } = props;
return /* @__PURE__ */ import_react3.default.createElement(Box_default, { flexDirection: "column", gap: 1 }, /* @__PURE__ */ import_react3.default.createElement(Text, null, "Before creating a new version, let's create a preview of your app"), /* @__PURE__ */ import_react3.default.createElement(Box_default, { flexDirection: "column" }, /* @__PURE__ */ import_react3.default.createElement(
PreviewCommand,
{
baseUrl,
label,
onPreviewCreated: onCreated,
environment: "production"
}
)));
};
// ../cli-astro-commands/src/components/ReleaseCommand/app-flow/Warnings.tsx
init_esm_shims();
var import_react4 = __toESM(require_react(), 1);
var Warnings = ({
components
}) => {
if (components.filter((c) => c.compType === ComponentType.WEBHOOK).length === 0) {
return null;
}
return /* @__PURE__ */ import_react4.default.createElement(Box_default, { flexDirection: "column", paddingBottom: 1 }, /* @__PURE__ */ import_react4.default.createElement(Notification, null, /* @__PURE__ */ import_react4.default.createElement(Alert, { type: "warning" }, "Your project includes backend events. Once you continue, any changes to events will be immediately deployed to production and take effect automatically, even without a new version release.")));
};
// ../cli-astro-commands/src/components/ReleaseCommand/app-flow/ReleaseComment.tsx
init_esm_shims();
var import_react5 = __toESM(require_react(), 1);
var ReleaseComment = (props) => {
const { onEntered } = props;
const bi = useWixCliAppBi();
const validate = (0, import_react5.useCallback)((value) => {
if (value && value.length > 250) {
return "The comment is limited to a maximum of 250 characters";
}
return true;
}, []);
const question = "Enter a comment describing any changes made to this version. This won't be shown to users (optional)";
return /* @__PURE__ */ import_react5.default.createElement(
TextInput,
{
label: question,
onSubmit: (answer) => {
bi.cliFlowStepAnswered({
question,
questionKey: "release_command.enter_release_comment",
answer
});
onEntered(answer);
},
validate
}
);
};
// ../cli-astro-commands/src/components/ReleaseCommand/app-flow/ConfirmMinorVersion.tsx
init_esm_shims();
var import_react6 = __toESM(require_react(), 1);
var ConfirmMinorVersion = (props) => {
const { onConfirmed } = props;
const bi = useWixCliAppBi();
const question = "Changes will be visible to your app users immediately and can\u2019t be undone. Do you want to continue?";
return /* @__PURE__ */ import_react6.default.createElement(Box_default, { flexDirection: "column", paddingBottom: 1 }, /* @__PURE__ */ import_react6.default.createElement(
ConfirmInput,
{
label: question,
initialValue: true,
onSubmit: (confirm) => {
bi.cliFlowStepAnswered({
question,
questionKey: "release_command.confirm_version_creation",
answer: String(confirm)
});
if (confirm) {
onConfirmed();
}
}
}
));
};
// ../cli-astro-commands/src/components/ReleaseCommand/app-flow/ChooseVersion.tsx
init_esm_shims();
var import_react7 = __toESM(require_react(), 1);
var ChooseVersion = (props) => {
const { nextMinor, nextMajor, onChosen } = props;
const bi = useWixCliAppBi();
const options = [
{
title: nextMinor ? `Minor (${nextMinor})` : "Minor",
description: "update doesn\u2019t require Wix user consent",
value: "MINOR" /* MINOR */,
availability: nextMinor ? SelectOptionAvailability.Enabled() : SelectOptionAvailability.Disabled({
reason: /* @__PURE__ */ import_react7.default.createElement(Text, null, "Recent changes you made require this release to be a major release. ", /* @__PURE__ */ import_react7.default.createElement(Link, { url: "https://wix.to/ZR80Y7p" }, "Learn more"))
})
},
{
title: `Major (${nextMajor})`,
description: "update requires Wix user consent",
value: "MAJOR" /* MAJOR */
}
];
const question = "What type of version would you like to create?";
return /* @__PURE__ */ import_react7.default.createElement(
SelectInput,
{
label: question,
options,
initialIndex: nextMinor ? 0 : 1,
onSubmit: ({ value }) => {
bi.cliFlowStepAnswered({
question,
questionKey: "release_command.version_type_question",
answer: value
});
onChosen(value);
}
}
);
};
// ../cli-astro-commands/src/components/ReleaseCommand/app-flow/NextSteps.tsx
init_esm_shims();
var import_react8 = __toESM(require_react(), 1);
var NextSteps = () => {
const {
model: {
config: { appId }
}
} = useProjectModel();
const homeUrl = `https://dev.wix.com/apps/${appId}/home?referralInfo=wix-cli`;
const statisticsUrl = `https://dev.wix.com/apps/${appId}/statistics?referralInfo=wix-cli`;
return /* @__PURE__ */ import_react8.default.createElement(Box_default, { flexDirection: "column", gap: 1 }, /* @__PURE__ */ import_react8.default.createElement(Text, { bold: true }, "Next Steps:"), /* @__PURE__ */ import_react8.default.createElement(Text, null, /* @__PURE__ */ import_react8.default.createElement(Statistics, null), " View your app reviews and statistics in the", " ", /* @__PURE__ */ import_react8.default.createElement(Link, { url: statisticsUrl }, "app dashboard")), /* @__PURE__ */ import_react8.default.createElement(Text, null, /* @__PURE__ */ import_react8.default.createElement(Cart, null), " Select your distribution method from the", " ", /* @__PURE__ */ import_react8.default.createElement(Link, { url: homeUrl }, "app dashboard")));
};
// ../cli-astro-commands/src/components/ReleaseCommand/app-flow/ReleaseApp.tsx
var ReleaseApp = ({
baseUrl,
label,
preEnteredComment,
preSelectedVersionType
}) => {
const {
model: {
config: { appId }
}
} = useProjectModel();
const { createDraftVersion, releaseDraftVersion } = useDevCenterOverridesClient();
const [preview, setPreview] = (0, import_react9.useState)();
const [comment, setComment] = (0, import_react9.useState)();
const [versionType, setVersionType] = (0, import_react9.useState)();
const [userShouldSelectVersion, setUserShouldSelectVersion] = (0, import_react9.useState)(false);
const createDraftAction = useAsyncCallback(async (_, previewId) => {
const { nextMajor, nextMinor } = await createDraftVersion(appId, previewId);
const appWasNeverReleased = nextMajor === "1.0.0" && !nextMinor;
const parsedNextMajor = (0, import_semver.parse)(nextMajor);
if (parsedNextMajor == null) {
throw new CliError({
code: CliErrorCode.FailedToParseNextVersion({ version: nextMajor }),
cause: void 0
});
}
return {
nextMinor,
nextMajor,
appWasNeverReleased,
latestMajor: parsedNextMajor.major - 1
};
});
const releaseDraftAction = useAsyncCallback(
async (_, versionType2, comment2, latestMajor) => {
const result = await releaseDraftVersion(appId, {
createNewMajor: versionType2 === "MAJOR" /* MAJOR */,
notes: comment2,
latestMajor
});
return result;
}
);
async function onReleaseCommentEntered({
previewId,
comment: comment2
}) {
setComment(comment2);
const result = await createDraftAction.execute(previewId).catch(() => null);
if (!result) {
return;
}
const { appWasNeverReleased, nextMinor, latestMajor } = result;
const chosenVersion = appWasNeverReleased ? "MAJOR" /* MAJOR */ : preSelectedVersionType;
if (preSelectedVersionType === "MINOR" /* MINOR */ && (appWasNeverReleased || !nextMinor)) {
throw new CliError({
cause: null,
code: CliErrorCode.CannotReleaseMinorInNoninteractive()
});
}
if (chosenVersion) {
void releaseDraftAction.execute(chosenVersion, comment2, latestMajor);
} else {
setUserShouldSelectVersion(true);
}
}
return /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement(
CreatePreview,
{
baseUrl,
label,
onCreated: (result) => {
setPreview(result);
if ((0, import_isString.default)(preEnteredComment)) {
void onReleaseCommentEntered({
previewId: result.previewId,
comment: preEnteredComment
});
}
}
}
), preview && /* @__PURE__ */ import_react9.default.createElement(Warnings, { components: preview.appManifest.components }), preview && !(0, import_isString.default)(preEnteredComment) && /* @__PURE__ */ import_react9.default.createElement(
ReleaseComment,
{
onEntered: (comment2) => onReleaseCommentEntered({
previewId: preview.previewId,
comment: comment2
})
}
), (0, import_isString.default)(comment) && (0, import_variant3.match)(createDraftAction.status, {
NotRequested: () => null,
Error: () => null,
Loading: () => /* @__PURE__ */ import_react9.default.createElement(Spinner, { text: "Updating draft application version" }),
Success: ({ result: { nextMajor, nextMinor, latestMajor } }) => /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, userShouldSelectVersion && /* @__PURE__ */ import_react9.default.createElement(
ChooseVersion,
{
nextMinor,
nextMajor,
onChosen: (selectedVersionType) => {
setVersionType(selectedVersionType);
if (selectedVersionType === "MAJOR" /* MAJOR */) {
void releaseDraftAction.execute(
selectedVersionType,
comment,
latestMajor
);
}
}
}
), versionType === "MINOR" /* MINOR */ && /* @__PURE__ */ import_react9.default.createElement(
ConfirmMinorVersion,
{
onConfirmed: () => releaseDraftAction.execute(
versionType,
comment,
latestMajor
)
}
))
}), (0, import_variant3.match)(releaseDraftAction.status, {
NotRequested: () => null,
Error: () => null,
Loading: () => /* @__PURE__ */ import_react9.default.createElement(Spinner, { text: "Releasing..." }),
Success: ({ result: { releasedVersion } }) => /* @__PURE__ */ import_react9.default.createElement(Box_default, { flexDirection: "column", gap: 1 }, /* @__PURE__ */ import_react9.default.createElement(Alert, { type: "success" }, /* @__PURE__ */ import_react9.default.createElement(Text, { bold: true }, "Version ", releasedVersion, " was created")), /* @__PURE__ */ import_react9.default.createElement(NextSteps, null))
}));
};
// ../cli-astro-commands/src/components/ReleaseCommand/ReleaseCommand.tsx
var ReleaseCommand = (props) => {
const {
model: { projectFolder, config }
} = useProjectModel();
const { status } = useAsync(async () => {
await assertBuildOutputExists(projectFolder, config);
}, []);
return (0, import_variant4.match)(status, {
Error: () => null,
Loading: () => /* @__PURE__ */ import_react10.default.createElement(Spinner, { text: /* @__PURE__ */ import_react10.default.createElement(Text, null, "Loading application details...") }),
Success: () => {
return config.projectType === "Site" ? /* @__PURE__ */ import_react10.default.createElement(SiteAuthProvider, { siteId: config.siteId }, /* @__PURE__ */ import_react10.default.createElement(
ReleaseSite,
{
...props,
createMinorVersion: props.versionType === "MINOR" /* MINOR */
}
)) : /* @__PURE__ */ import_react10.default.createElement(
ReleaseApp,
{
baseUrl: props.baseUrl,
label: props.label,
preEnteredComment: props.comment,
preSelectedVersionType: props.versionType
}
);
}
});
};
export {
ReleaseCommand
};
//# sourceMappingURL=ReleaseCommand-B4LVYLQH.js.map