@wix/cli
Version:
CLI tool for building Wix sites and applications
448 lines (440 loc) • 14.1 kB
JavaScript
import { createRequire as _createRequire } from 'node:module';
const require = _createRequire(import.meta.url);
import {
listFiles,
updateFiles
} from "./chunk-DGC6KEUB.js";
import {
GridAppLayout
} from "./chunk-QRGKMYDD.js";
import {
AppType,
DeploymentOperation,
RcLabel,
createApp,
deployApp
} from "./chunk-CKNI3TGO.js";
import {
getResolveNpmDependenciesResult,
resolveNpmDependencies
} from "./chunk-YLCFL3QA.js";
import {
useHttpClient
} from "./chunk-FYLO6WOU.js";
import {
usePanoramaMethodLogger
} from "./chunk-3B6VL2WO.js";
import {
createHttpClient,
isHttpApplicationError,
isHttpError,
pRetry,
pWaitFor
} from "./chunk-CCWE4DS6.js";
import {
require_react
} from "./chunk-QNHANFRW.js";
import {
getTestOverrides
} from "./chunk-XZUGLEBK.js";
import {
external_exports
} from "./chunk-SDLCFZRL.js";
import {
CliError,
CliErrorCode
} from "./chunk-CO5A7CZG.js";
import {
__toESM,
init_esm_shims
} from "./chunk-EXLZF52D.js";
// ../velo-client/src/useVeloClient.ts
init_esm_shims();
var import_react = __toESM(require_react(), 1);
// ../velo-client/src/velo-client.ts
init_esm_shims();
// ../../node_modules/@wix/ambassador-velo-github-v1-github-onboarding-status/build/es/types.impl.js
init_esm_shims();
var RepositoryOwnerType;
(function(RepositoryOwnerType2) {
RepositoryOwnerType2["USER"] = "USER";
RepositoryOwnerType2["ORGANIZATION"] = "ORGANIZATION";
})(RepositoryOwnerType || (RepositoryOwnerType = {}));
var Label;
(function(Label2) {
Label2["UNKNOWN"] = "UNKNOWN";
Label2["WIX_VIBE"] = "WIX_VIBE";
Label2["DEVIBE"] = "DEVIBE";
})(Label || (Label = {}));
var OnboardingState;
(function(OnboardingState2) {
OnboardingState2["GITHUB_DISABLED"] = "GITHUB_DISABLED";
OnboardingState2["GITHUB_REPOSITORY_CREATED"] = "GITHUB_REPOSITORY_CREATED";
OnboardingState2["GITHUB_ENABLED"] = "GITHUB_ENABLED";
})(OnboardingState || (OnboardingState = {}));
var State;
(function(State2) {
State2["UNKNOWN"] = "UNKNOWN";
State2["ENABLED"] = "ENABLED";
State2["DISABLED"] = "DISABLED";
State2["PENDING"] = "PENDING";
State2["DEMO"] = "DEMO";
})(State || (State = {}));
var SiteCreatedContext;
(function(SiteCreatedContext2) {
SiteCreatedContext2["OTHER"] = "OTHER";
SiteCreatedContext2["FROM_TEMPLATE"] = "FROM_TEMPLATE";
SiteCreatedContext2["DUPLICATE_BY_SITE_TRANSFER"] = "DUPLICATE_BY_SITE_TRANSFER";
SiteCreatedContext2["DUPLICATE"] = "DUPLICATE";
SiteCreatedContext2["OLD_SITE_TRANSFER"] = "OLD_SITE_TRANSFER";
SiteCreatedContext2["FLASH"] = "FLASH";
})(SiteCreatedContext || (SiteCreatedContext = {}));
var Namespace;
(function(Namespace2) {
Namespace2["UNKNOWN_NAMESPACE"] = "UNKNOWN_NAMESPACE";
Namespace2["WIX"] = "WIX";
Namespace2["SHOUT_OUT"] = "SHOUT_OUT";
Namespace2["ALBUMS"] = "ALBUMS";
Namespace2["WIX_STORES_TEST_DRIVE"] = "WIX_STORES_TEST_DRIVE";
Namespace2["HOTELS"] = "HOTELS";
Namespace2["CLUBS"] = "CLUBS";
Namespace2["ONBOARDING_DRAFT"] = "ONBOARDING_DRAFT";
Namespace2["DEV_SITE"] = "DEV_SITE";
Namespace2["LOGOS"] = "LOGOS";
Namespace2["VIDEO_MAKER"] = "VIDEO_MAKER";
Namespace2["PARTNER_DASHBOARD"] = "PARTNER_DASHBOARD";
Namespace2["DEV_CENTER_COMPANY"] = "DEV_CENTER_COMPANY";
Namespace2["HTML_DRAFT"] = "HTML_DRAFT";
Namespace2["SITELESS_BUSINESS"] = "SITELESS_BUSINESS";
Namespace2["CREATOR_ECONOMY"] = "CREATOR_ECONOMY";
Namespace2["DASHBOARD_FIRST"] = "DASHBOARD_FIRST";
Namespace2["ANYWHERE"] = "ANYWHERE";
Namespace2["HEADLESS"] = "HEADLESS";
Namespace2["ACCOUNT_MASTER_CMS"] = "ACCOUNT_MASTER_CMS";
Namespace2["RISE"] = "RISE";
Namespace2["BRANDED_FIRST"] = "BRANDED_FIRST";
Namespace2["NOWNIA"] = "NOWNIA";
Namespace2["UGC_TEMPLATE"] = "UGC_TEMPLATE";
Namespace2["CODUX"] = "CODUX";
Namespace2["MEDIA_DESIGN_CREATOR"] = "MEDIA_DESIGN_CREATOR";
Namespace2["SHARED_BLOG_ENTERPRISE"] = "SHARED_BLOG_ENTERPRISE";
Namespace2["STANDALONE_FORMS"] = "STANDALONE_FORMS";
Namespace2["STANDALONE_EVENTS"] = "STANDALONE_EVENTS";
Namespace2["MIMIR"] = "MIMIR";
Namespace2["TWINS"] = "TWINS";
Namespace2["NANO"] = "NANO";
Namespace2["BASE44"] = "BASE44";
})(Namespace || (Namespace = {}));
var DeleteStatus;
(function(DeleteStatus2) {
DeleteStatus2["UNKNOWN"] = "UNKNOWN";
DeleteStatus2["TRASH"] = "TRASH";
DeleteStatus2["DELETED"] = "DELETED";
DeleteStatus2["PENDING_PURGE"] = "PENDING_PURGE";
DeleteStatus2["PURGED_EXTERNALLY"] = "PURGED_EXTERNALLY";
})(DeleteStatus || (DeleteStatus = {}));
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 = {}));
// ../velo-client/src/schemas.ts
init_esm_shims();
var createAppSchema = external_exports.object({
app: external_exports.object({ id: external_exports.string() })
});
var GitHubRepositorySchema = external_exports.object({
id: external_exports.string(),
repositoryName: external_exports.string(),
htmlUrl: external_exports.string(),
cloneUrl: external_exports.string()
}).passthrough();
var gitHubDisabledSchema = external_exports.object({
onboardingState: external_exports.literal(OnboardingState.GITHUB_DISABLED)
}).passthrough();
var gitHubRepositoryCreatedSchema = external_exports.object({
onboardingState: external_exports.literal(OnboardingState.GITHUB_REPOSITORY_CREATED),
gitHubRepositoryCreated: external_exports.object({
repository: GitHubRepositorySchema
}).passthrough()
}).passthrough();
var gitHubEnabledSchema = external_exports.object({
onboardingState: external_exports.literal(OnboardingState.GITHUB_ENABLED),
gitHubEnabled: external_exports.object({
repository: GitHubRepositorySchema
}).passthrough()
}).passthrough();
var gitHubOnboardingStatusSchema = external_exports.discriminatedUnion("onboardingState", [
gitHubDisabledSchema,
gitHubRepositoryCreatedSchema,
gitHubEnabledSchema
]);
var gitHubOnboardingStatusResponseSchema = external_exports.object({
gitHubOnboardingStatus: gitHubOnboardingStatusSchema
}).passthrough();
var listFilesSchema = external_exports.object({
files: external_exports.array(
external_exports.object({
path: external_exports.string(),
content: external_exports.string()
})
),
directories: external_exports.array(
external_exports.object({
path: external_exports.string()
})
)
});
var deployAppSchema = external_exports.object({
deploymentInfo: external_exports.object({
deploymentId: external_exports.string().uuid(),
deploymentUrl: external_exports.string().url(),
deploymentShortUrl: external_exports.string().url().optional(),
isPublishPipelineDeployment: external_exports.boolean()
})
});
var resolveNpmDependenciesSchema = external_exports.object({
jobId: external_exports.string()
});
var getResolveNpmDependenciesResultSchema = external_exports.object({
result: external_exports.object({
npmDependenciesLockFile: external_exports.string().url()
})
});
var getWixLockFileSchema = external_exports.string();
// ../velo-client/src/velo-client.ts
var { minRetryTimeout, pollInterval, pollTimeout } = getTestOverrides();
var VeloClient = class {
constructor(httpClient) {
this.httpClient = httpClient;
this.retryOptions = {
retries: 3,
minTimeout: minRetryTimeout,
maxTimeout: 3 * 1e3
};
}
retryOptions;
createMutableApp = async (content) => {
try {
const { data } = await pRetry(
() => this.httpClient.request(
createApp({
app: { mutable: true, appType: AppType.VELO_ISOLATED },
content
})
),
this.retryOptions
);
return createAppSchema.parse(data).app;
} catch (e) {
throw new CliError({
code: CliErrorCode.FailedToCreateVeloApp(),
cause: e
});
}
};
listAppFiles = async (appId) => {
try {
const { data } = await pRetry(
() => this.httpClient.request(
listFiles({
gridAppId: appId,
layout: GridAppLayout.GITHUB,
hideDeletedPages: true,
includeNewPages: false
})
),
this.retryOptions
);
return listFilesSchema.parse(data);
} catch (e) {
throw new CliError({
code: CliErrorCode.FailedToGetFilesFromVelo(),
cause: e
});
}
};
updateAppFiles = async (appId, content) => {
try {
await pRetry(
() => this.httpClient.request(
updateFiles({
...content,
gridAppId: appId
})
),
this.retryOptions
);
} catch (e) {
throw new CliError({
code: CliErrorCode.FailedToUpdateVeloAppFiles(),
cause: e
});
}
};
deploySitePreview = async (deploymentSourceData) => {
try {
const { data } = await this.httpClient.request(
deployApp({
...deploymentSourceData,
deploymentOperation: DeploymentOperation.RC,
appType: AppType.VELO,
rcDeploymentParams: {
rcLabel: RcLabel.WIX_CLI
}
})
);
return deployAppSchema.parse(data).deploymentInfo;
} catch (e) {
throw new CliError({
code: CliErrorCode.FailedToDeploySitePreview(),
cause: e
});
}
};
generateWixLockFile = async (deps) => {
const jobId = await this.resolveNpmDependencies(deps);
const wixLockFileUrl = await this.getResolveNpmDependenciesResult(jobId);
return this.getWixLockFile(wixLockFileUrl);
};
resolveNpmDependencies = async (npmPackageInfos) => {
try {
const { data } = await pRetry(
() => this.httpClient.request(resolveNpmDependencies({ npmPackageInfos })),
this.retryOptions
);
const { jobId } = resolveNpmDependenciesSchema.parse(data);
return jobId;
} catch (e) {
throw new CliError({
code: CliErrorCode.FailedToResolveNpmDependencies(),
cause: e
});
}
};
getResolveNpmDependenciesResult = async (jobId) => {
try {
return await pWaitFor(
async () => {
try {
const { data } = await pRetry(
() => this.httpClient.request(
getResolveNpmDependenciesResult({ jobId })
),
this.retryOptions
);
const { result } = getResolveNpmDependenciesResultSchema.parse(data);
return pWaitFor.resolveWith(result.npmDependenciesLockFile);
} catch (e) {
if (isHttpError(e) && e.response?.status === 428) {
return false;
}
throw e;
}
},
{
// Poll each 2 seconds
interval: pollInterval ?? 2 * 1e3,
// Fail if 5 minutes passed
timeout: pollTimeout ?? 5 * 60 * 1e3
}
);
} catch (e) {
throw new CliError({
code: CliErrorCode.FailedToGetResolveNpmDependenciesResult(),
cause: e,
info: { jobId }
});
}
};
getWixLockFile = async (url) => {
try {
const standaloneHttpClient = createHttpClient({ type: "standalone" });
const { data } = await pRetry(
() => standaloneHttpClient.get(url),
this.retryOptions
);
return getWixLockFileSchema.parse(data);
} catch (e) {
throw new CliError({
code: CliErrorCode.FailedToFetchWixLockFile(),
cause: e
});
}
};
getGitHubOnboardingStatus = async (projectId) => {
try {
const { data } = await this.httpClient.request({
method: "GET",
url: `https://manage.wix.com/_api/wix-code-github-onboarding/v1/onboarding-status?projectId=${projectId}`
}).catch((error) => {
if (isHttpError(error) && isHttpApplicationError(error)) {
return { data: null };
}
throw error;
});
if (!data) {
return null;
}
const parsed = gitHubOnboardingStatusResponseSchema.parse(data);
const { gitHubOnboardingStatus } = parsed;
if (gitHubOnboardingStatus.onboardingState === OnboardingState.GITHUB_REPOSITORY_CREATED) {
const { repository } = gitHubOnboardingStatus.gitHubRepositoryCreated;
return {
status: OnboardingState.GITHUB_REPOSITORY_CREATED,
repoName: repository.repositoryName,
cloneUrl: repository.cloneUrl,
htmlUrl: repository.htmlUrl
};
}
if (gitHubOnboardingStatus.onboardingState === OnboardingState.GITHUB_ENABLED) {
const { repository } = gitHubOnboardingStatus.gitHubEnabled;
return {
status: OnboardingState.GITHUB_ENABLED,
repoName: repository.repositoryName,
cloneUrl: repository.cloneUrl,
htmlUrl: repository.htmlUrl
};
}
return null;
} catch (e) {
throw new CliError({
code: CliErrorCode.FailedToGetGitHubOnboardingStatus({ projectId }),
cause: e
});
}
};
initGitHubRepository = async (projectId) => {
try {
await this.httpClient.request({
method: "POST",
url: `https://manage.wix.com/_api/wix-code-github-onboarding/v1/github-repositories/init-velo`,
data: {
label: Label.WIX_VIBE,
projectId
}
});
} catch (e) {
throw new CliError({
code: CliErrorCode.FailedToInitGitHubRepository({ projectId }),
cause: e
});
}
};
};
// ../velo-client/src/useVeloClient.ts
function useVeloClient() {
const httpClient = useHttpClient({ type: "code" });
const client = (0, import_react.useMemo)(() => new VeloClient(httpClient), [httpClient]);
return usePanoramaMethodLogger(client);
}
// ../velo-client/src/index.ts
init_esm_shims();
export {
OnboardingState,
useVeloClient
};
//# sourceMappingURL=chunk-ZJ4HTMFG.js.map