@wix/cli
Version:
CLI tool for building Wix sites and applications
451 lines (436 loc) • 15.5 kB
JavaScript
import { createRequire as _createRequire } from 'node:module';
const require = _createRequire(import.meta.url);
import {
PlatformLink
} from "./chunk-BUPV3T3K.js";
import {
useVeloClient
} from "./chunk-ZJ4HTMFG.js";
import "./chunk-DGC6KEUB.js";
import "./chunk-QRGKMYDD.js";
import "./chunk-CKNI3TGO.js";
import "./chunk-YLCFL3QA.js";
import {
ComponentType,
useDevCenterClient
} from "./chunk-BHWSM372.js";
import {
gitGetUserInfo,
gitPush,
gitSetRemoteUrl,
isInsideGitRepo
} from "./chunk-7QJUAJW3.js";
import "./chunk-NMCF7XG5.js";
import "./chunk-MHV22UIU.js";
import {
useProjectModel
} from "./chunk-OQJA5FSX.js";
import "./chunk-4CMTZJ25.js";
import "./chunk-KCDAY54L.js";
import {
useHttpClient
} from "./chunk-FYLO6WOU.js";
import {
usePanoramaMethodLogger
} from "./chunk-3B6VL2WO.js";
import "./chunk-7QTVQZAE.js";
import {
TimeoutError,
openBrowser,
pRetry,
pWaitFor,
resolveUrl,
serializer,
useErrorReporter,
writeCrashReport
} from "./chunk-CCWE4DS6.js";
import "./chunk-U5H3SP3I.js";
import "./chunk-TIVTYCB2.js";
import "./chunk-RPTAJN5Y.js";
import {
Alert,
Badge,
Box_default,
Link,
Spinner,
Text,
useAsync
} from "./chunk-UC5LTXTA.js";
import "./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 {
getDebugLogFilePath
} from "./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 {
__toESM,
init_esm_shims
} from "./chunk-EXLZF52D.js";
// ../cli-astro-commands/src/components/ConnectWixVibeCommand/index.ts
init_esm_shims();
// ../cli-astro-commands/src/components/ConnectWixVibeCommand/ConnectWixVibeCommand.tsx
init_esm_shims();
var import_react4 = __toESM(require_react(), 1);
var import_variant2 = __toESM(require_lib(), 1);
// ../create-new-packages/headless-command/src/index.tsx
init_esm_shims();
var import_react3 = __toESM(require_react(), 1);
// ../create-new-packages/headless-command/src/components/VibeRepositorySetupPolling.tsx
init_esm_shims();
var import_react2 = __toESM(require_react(), 1);
var import_variant = __toESM(require_lib(), 1);
// ../codestore-client/src/index.ts
init_esm_shims();
// ../codestore-client/src/useCodestoreClient.ts
init_esm_shims();
var import_react = __toESM(require_react(), 1);
// ../codestore-client/src/codestore-client.ts
init_esm_shims();
// ../../node_modules/@wix/ambassador-codestore-v1-project/build/es/http.impl.js
init_esm_shims();
var _createProjectRequest = {
project: "_project",
initialRevision: "_revision"
};
var _createProjectResponse = { project: "_project" };
var _project = {
createdDate: "google.protobuf.Timestamp",
updatedDate: "google.protobuf.Timestamp"
};
var _revision = { creationTime: "google.protobuf.Timestamp" };
function resolveWixCodestoreV1GitCodeStoreProjectsUrl(opts) {
var domainToMappings = {
"bo._base_domain_": [
{
srcPath: "/_api/git-code-store",
destPath: ""
}
],
"wixbo.ai": [
{
srcPath: "/_api/git-code-store",
destPath: ""
}
],
"wix-bo.com": [
{
srcPath: "/_api/git-code-store",
destPath: ""
}
],
"manage._base_domain_": [
{
srcPath: "/_api/git-code-store",
destPath: ""
}
]
};
return resolveUrl(Object.assign(opts, { domainToMappings }));
}
function createProject(payload) {
var _a = serializer(_createProjectRequest, { _project, _revision }), toReq = _a.toJSON, fromReq = _a.fromJSON;
var fromRes = serializer(_createProjectResponse, {
_project
}).fromJSON;
function __createProject(_a2) {
var host = _a2.host;
var serializedData = toReq(payload);
var metadata = {
entityFqdn: "wix.codestore.v1.project",
method: "POST",
methodFqn: "wix.codestore.v1.GitCodeStoreProjects.CreateProject",
migrationOptions: {
optInTransformResponse: true
},
url: resolveWixCodestoreV1GitCodeStoreProjectsUrl({
protoPath: "/v1/projects",
data: serializedData,
host
}),
data: serializedData,
transformResponse: fromRes
};
return metadata;
}
__createProject.fromReq = fromReq;
__createProject.__isAmbassador = true;
return __createProject;
}
// ../../node_modules/@wix/ambassador-codestore-v1-project/build/es/types.impl.js
init_esm_shims();
var GitRemoteType;
(function(GitRemoteType2) {
GitRemoteType2["UNKNOWN_GIT_REMOTE_TYPE"] = "UNKNOWN_GIT_REMOTE_TYPE";
GitRemoteType2["S3"] = "S3";
GitRemoteType2["GITHUB"] = "GITHUB";
})(GitRemoteType || (GitRemoteType = {}));
var WebhookIdentityType;
(function(WebhookIdentityType2) {
WebhookIdentityType2["UNKNOWN"] = "UNKNOWN";
WebhookIdentityType2["ANONYMOUS_VISITOR"] = "ANONYMOUS_VISITOR";
WebhookIdentityType2["MEMBER"] = "MEMBER";
WebhookIdentityType2["WIX_USER"] = "WIX_USER";
WebhookIdentityType2["APP"] = "APP";
})(WebhookIdentityType || (WebhookIdentityType = {}));
var SortOrder;
(function(SortOrder2) {
SortOrder2["ASC"] = "ASC";
SortOrder2["DESC"] = "DESC";
})(SortOrder || (SortOrder = {}));
// ../codestore-client/src/schemas.ts
init_esm_shims();
var ProjectSchema = external_exports.object({
id: external_exports.string()
}).passthrough();
var CreateProjectResponseSchema = external_exports.object({
project: ProjectSchema
});
// ../codestore-client/src/codestore-client.ts
var { minRetryTimeout } = getTestOverrides();
var CodestoreClient = class {
constructor(httpClient) {
this.httpClient = httpClient;
this.retryOptions = {
retries: 3,
minTimeout: minRetryTimeout,
maxTimeout: 3 * 1e3
};
}
retryOptions;
createProject = async (projectId, userInfo) => {
try {
const { data } = await pRetry(
() => this.httpClient.request(
createProject({
project: {
id: projectId,
gitRemoteType: GitRemoteType.S3,
githubOptions: {
appId: "b16d019c-d547-489b-a751-f277c1101847",
appInstallationId: "103037700"
}
},
initialRevision: {
id: "1",
description: "Initial revision",
creationTime: /* @__PURE__ */ new Date(),
author: {
name: userInfo.name,
email: userInfo.email
}
},
files: [
{
path: "README.md",
content: "Hello, Vibe!"
}
]
})
),
this.retryOptions
);
return CreateProjectResponseSchema.parse(data).project;
} catch (e) {
throw new CliError({
code: CliErrorCode.FailedToCreateCodestoreProject(),
cause: e
});
}
};
};
// ../codestore-client/src/useCodestoreClient.ts
function useCodestoreClient() {
const httpClient = useHttpClient({ type: "backoffice" });
const client = (0, import_react.useMemo)(() => new CodestoreClient(httpClient), [httpClient]);
return usePanoramaMethodLogger(client);
}
// ../create-new-packages/headless-command/src/components/VibeRepositorySetupPolling.tsx
var VibeSetupResult = (0, import_variant.variant)({
Success: (0, import_variant.fields)(),
Canceled: {},
Failed: {}
});
function isAbortError(error) {
return error && typeof error === "object" && "name" in error && error.name === "AbortError";
}
var VibeRepositorySetupPolling = ({
projectId,
projectFolder,
onSubmit
}) => {
const { getGitHubOnboardingStatus, initGitHubRepository } = useVeloClient();
const { reportError } = useErrorReporter();
const { createProject: createProject2 } = useCodestoreClient();
const { status } = useAsync(
async ({ signal }) => {
const { pollInterval } = getTestOverrides();
const vibeSetupUrl = `https://manage.wix.com/_api/wix-headless-cli-github-integration-serverless?projectId=${projectId}`;
await openBrowser(vibeSetupUrl);
try {
const repoInfo = await pWaitFor(
async () => {
const result = await getGitHubOnboardingStatus(projectId);
if (result) {
return pWaitFor.resolveWith(result);
}
return false;
},
{
interval: pollInterval ?? 1e3,
timeout: {
milliseconds: 60 * 1e3 * 5,
signal
}
}
);
const isGitRepo = await isInsideGitRepo(projectFolder);
if (isGitRepo) {
const currentUserInfo = await gitGetUserInfo(projectFolder);
await createProject2(projectId, currentUserInfo);
await initGitHubRepository(projectId);
await gitSetRemoteUrl(projectFolder, "origin", repoInfo.htmlUrl);
await gitPush(projectFolder, "origin", { force: true });
}
return VibeSetupResult.Success(repoInfo);
} catch (error) {
if (error instanceof TimeoutError) {
throw new CliError({
code: CliErrorCode.VibeRepositorySetupTimedout(),
cause: error
});
}
if (isAbortError(error)) {
return VibeSetupResult.Canceled();
}
throw error;
}
},
[projectFolder, projectId],
{
onSuccess: (result) => {
if ((0, import_variant.isType)(result, VibeSetupResult.Success)) {
onSubmit?.();
}
},
onError: (error) => {
reportError(error);
writeCrashReport(getDebugLogFilePath(projectFolder), error, /* @__PURE__ */ new Date());
return VibeSetupResult.Failed();
}
}
);
return (0, import_variant.match)(status, {
Error: () => /* @__PURE__ */ import_react2.default.createElement(Box_default, { flexDirection: "column", gap: 1 }, /* @__PURE__ */ import_react2.default.createElement(Text, { skin: "error" }, "Failed to connect to Wix Vibe")),
Loading: () => /* @__PURE__ */ import_react2.default.createElement(Box_default, { flexDirection: "column", gap: 1 }, /* @__PURE__ */ import_react2.default.createElement(Spinner, { text: "Opening browser for Wix Vibe setup..." }), /* @__PURE__ */ import_react2.default.createElement(Text, { skin: "secondary" }, "Complete the setup in your browser. Waiting for you to finish...")),
Success: ({ result }) => (0, import_variant.match)(result, {
Success: ({ repoName, htmlUrl }) => /* @__PURE__ */ import_react2.default.createElement(Box_default, { marginLeft: -2, marginBottom: 1 }, /* @__PURE__ */ import_react2.default.createElement(Alert, { type: "success" }, /* @__PURE__ */ import_react2.default.createElement(Badge, { skin: "success" }, "Success"), " ", /* @__PURE__ */ import_react2.default.createElement(Text, null, "GitHub repository '", repoName, "' created and Synced.", " ", /* @__PURE__ */ import_react2.default.createElement(Link, { url: htmlUrl }, "View Repository.")))),
Canceled: () => null
})
});
};
// ../cli-astro-commands/src/components/ConnectWixVibeCommand/schemas.ts
init_esm_shims();
var backendWorkerComponentSchema = external_exports.object({
compType: external_exports.literal(ComponentType.BACKEND_WORKER),
compData: external_exports.object({
backendWorker: external_exports.object({
deploymentUrl: external_exports.string().optional()
})
}).passthrough()
}).passthrough();
// ../cli-astro-commands/src/components/ConnectWixVibeCommand/ConnectWixVibeCommand.tsx
var ConnectWixVibeCommand = () => {
const {
model: { projectFolder, config }
} = useProjectModel();
const { getGitHubOnboardingStatus } = useVeloClient();
const { getAppByVersion } = useDevCenterClient();
const [isConnected, setIsConnected] = (0, import_react4.useState)(false);
const { status: connectionStatus } = useAsync(async () => {
if (config.projectType !== "Site") {
throw new CliError({
code: CliErrorCode.ConnectUnsupportedForProjectType(),
cause: null
});
}
return {
existingConnection: await getGitHubOnboardingStatus(config.appId),
siteId: config.siteId
};
}, []);
const getDeploymentUrl = (0, import_react4.useCallback)(async () => {
const { data } = await getAppByVersion({ appId: config.appId });
const backendWorkerComponent = data.components.find(
(component) => component.compType === ComponentType.BACKEND_WORKER
);
const parsedBackendWorkerComponent = backendWorkerComponentSchema.safeParse(
backendWorkerComponent
);
if (parsedBackendWorkerComponent.success) {
return parsedBackendWorkerComponent.data.compData.backendWorker.deploymentUrl;
}
}, [getAppByVersion, config.appId]);
const { status: deploymentUrlStatus } = useAsync(async () => {
if (!isConnected) {
return;
}
const deploymentUrl = await getDeploymentUrl();
return deploymentUrl;
}, [isConnected, config.appId]);
return (0, import_variant2.match)(connectionStatus, {
Error: () => null,
Loading: () => /* @__PURE__ */ import_react4.default.createElement(Spinner, { text: "Checking Wix Vibe connection status..." }),
Success: ({ result: { existingConnection, siteId } }) => {
if (existingConnection) {
return /* @__PURE__ */ import_react4.default.createElement(Box_default, { flexDirection: "column", gap: 1, marginTop: 1 }, /* @__PURE__ */ import_react4.default.createElement(Alert, { type: "insight" }, /* @__PURE__ */ import_react4.default.createElement(Text, null, "This project is already connected to Wix Vibe.", " ", /* @__PURE__ */ import_react4.default.createElement(Link, { url: existingConnection.htmlUrl }, "View Repository"), ".")));
}
return /* @__PURE__ */ import_react4.default.createElement(Box_default, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ import_react4.default.createElement(
VibeRepositorySetupPolling,
{
projectId: config.appId,
projectFolder,
onSubmit: () => setIsConnected(true)
}
), isConnected && /* @__PURE__ */ import_react4.default.createElement(Box_default, { gap: 1, flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ import_react4.default.createElement(Text, null, "You can edit your site in the Wix Vibe Editor now."), /* @__PURE__ */ import_react4.default.createElement(Box_default, { paddingLeft: 2, flexDirection: "column" }, /* @__PURE__ */ import_react4.default.createElement(
PlatformLink,
{
url: `https://vibe.wix.com/projects/${siteId}`,
platform: "editor"
}
), /* @__PURE__ */ import_react4.default.createElement(
PlatformLink,
{
url: `https://manage.wix.com/dashboard/${siteId}`,
platform: "dashboard"
}
), (0, import_variant2.match)(deploymentUrlStatus, {
Success: ({ result }) => result ? /* @__PURE__ */ import_react4.default.createElement(PlatformLink, { url: result, platform: "site" }) : null,
Loading: () => null,
Error: () => null
}))));
}
});
};
export {
ConnectWixVibeCommand
};
//# sourceMappingURL=ConnectWixVibeCommand-QE3SYEDU.js.map