@wix/cli
Version:
CLI tool for building Wix sites and applications
708 lines (688 loc) • 27.9 kB
JavaScript
import { createRequire as _createRequire } from 'node:module';
const require = _createRequire(import.meta.url);
import {
DashboardMenuPluginAction,
EXTERNAL_PAGE_URL_ERROR,
ExtensionDataClient,
VALID_PATH_REGEX,
componentGenerator,
createCustomElementFolderValidation,
createDashboardMenuPluginValidation,
createDashboardPluginValidation,
createDashboardRouteValidation,
createEmbeddedScriptFolderValidation,
createReactComponentFolderValidation,
createServicePluginValidation,
generateCustomElement,
generateDashboardExternalPage,
generateDashboardMenuPlugin,
generateDashboardModal,
generateDashboardPage,
generateDashboardPlugin,
generateDataCollection,
generateEditorReactComponent,
generateEmbeddedScript,
generateEvent,
generateServicePlugin,
generateSitePlugin,
getBackendDataCollectionsExtensionsDir,
getBackendEventExtensionsDir,
getBackendPluginExtensionsDir,
getDashboardExternalPageExtensionsDir,
getDashboardMenuPluginExtensionsDir,
getDashboardModalExtensionsDir,
getDashboardPluginExtensionsDir,
getEcomRequiredApps,
getExtensionRelativePaths,
isValidExternalPageUrl,
modifyExtensionsEntry,
normalizeExternalPageUrl,
pathAvailableValidation,
require_camelCase
} from "./chunk-FQM6PYRS.js";
import {
getContextProviderExtensionPath,
getContextProviderExtensionsDir,
getEmbeddedScriptExtensionsDir,
getSitePluginExtensionsDir,
getSiteWidgetExtensionsDir
} from "./chunk-FLDCYVA4.js";
import {
ComponentType,
DevCenterClient
} from "./chunk-BHWSM372.js";
import {
external_exports
} from "./chunk-SDLCFZRL.js";
import {
__dirname,
__toESM,
init_esm_shims
} from "./chunk-EXLZF52D.js";
// ../cli-astro-commands/src/components/GenerateCommand/extensionHandlers.ts
init_esm_shims();
// ../cli-astro-commands/src/components/GenerateCommand/dashboard-page/extension.ts
init_esm_shims();
// ../cli-astro-commands/src/components/GenerateCommand/generate-schema/definitions.ts
init_esm_shims();
function defineField(field) {
return JSON.stringify(field);
}
// ../cli-astro-commands/src/components/GenerateCommand/dashboard-page/extension.ts
var schema = external_exports.object({
extensionType: external_exports.literal("DASHBOARD_PAGE"),
title: external_exports.string().describe(
defineField({ title: "Page title", description: "The Page Title" })
),
route: external_exports.string().regex(VALID_PATH_REGEX).describe(
defineField({
title: "Page route",
description: "Lowercase alphanumeric, hyphens, and slashes"
})
)
});
var dashboardPage = {
title: "Dashboard Page",
description: "A Dashboard page",
group: "Dashboard",
documentation: "https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-pages/add-dashboard-page-extensions",
zodSchema: schema,
validate: async (projectFolder, data) => {
const result = createDashboardRouteValidation(projectFolder)(data.route);
return result.valid ? null : result.reason;
},
generate: ({ projectFolder, data }) => generateDashboardPage(projectFolder, data.route, data.title)
};
// ../cli-astro-commands/src/components/GenerateCommand/dashboard-modal/extension.ts
init_esm_shims();
var schema2 = external_exports.object({
extensionType: external_exports.literal("DASHBOARD_MODAL"),
title: external_exports.string().describe(defineField({ title: "Modal title" })),
folder: external_exports.string().regex(VALID_PATH_REGEX).describe(
defineField({
title: "Modal folder",
description: "Lowercase alphanumeric and hyphens only."
})
)
});
var dashboardModal = {
title: "Dashboard Modal",
description: "A Dashboard modal dialog",
group: "Dashboard",
documentation: "https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-modals/add-dashboard-modal-extensions",
zodSchema: schema2,
validate: async (projectFolder, data) => {
const isAvailable = pathAvailableValidation(
getDashboardModalExtensionsDir(projectFolder)
)(data.folder);
return isAvailable ? null : "The modal folder must be unique, please choose a folder that has not been used yet in your application.";
},
generate: ({ projectFolder, data }) => generateDashboardModal(projectFolder, data.folder, data.title)
};
// ../cli-astro-commands/src/components/GenerateCommand/plugins/dashboard-plugin/extension.ts
init_esm_shims();
function buildSlotIdField(containers) {
if (containers.length === 0) {
return external_exports.string().describe(
defineField({
title: "Slot to extend",
description: "Component ID of the back-office extension container to extend. Obtain from the Dev Center."
})
);
}
const literals = containers.map(
(c) => external_exports.literal(c.component.componentId).describe(
defineField({
title: c.component.data.backOfficeExtensionContainer.slotData?.displayName ?? c.component.name
})
)
);
const field = literals.length === 1 ? literals[0] : external_exports.union(
literals
);
return field.describe(
defineField({
title: "Slot to extend",
description: "Component ID of the back-office extension container to extend."
})
);
}
var dashboardPlugin = {
title: "Dashboard Plugin",
description: "A plugin that extends a back-office page with a custom widget",
group: "Dashboard",
documentation: "https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-plugins/add-dashboard-plugin-extensions",
zodSchema: async (httpClient) => {
const client = new ExtensionDataClient(httpClient);
const containers = await client.getBackofficeExtensionWidgets();
return external_exports.object({
extensionType: external_exports.literal("DASHBOARD_PLUGIN"),
extendsSlotId: buildSlotIdField(containers),
title: external_exports.string().describe(defineField({ title: "Plugin title" })),
folder: external_exports.string().regex(VALID_PATH_REGEX).describe(
defineField({
title: "Plugin folder",
description: "Lowercase alphanumeric and hyphens only. Must be unique within src/dashboard/plugins/."
})
)
}).transform((data) => ({
...data,
slotsAppId: containers.find(
(c) => c.component.componentId === data.extendsSlotId
)?.appId
}));
},
validate: async (projectFolder, data) => {
const result = createDashboardPluginValidation(
getDashboardPluginExtensionsDir(projectFolder)
)(data.folder);
return result.valid ? null : result.reason;
},
generate: async ({ projectFolder, data, httpClient }) => {
const client = new ExtensionDataClient(httpClient);
const sdkSlotData = data.slotsAppId ? await client.getSdkSlotData({
slotId: data.extendsSlotId,
appId: data.slotsAppId
}).catch(() => {
}) : void 0;
return generateDashboardPlugin(
projectFolder,
data.extendsSlotId,
data.folder,
data.title,
sdkSlotData?.importData
);
}
};
// ../cli-astro-commands/src/components/GenerateCommand/plugins/dashboad-menu-plugin/extension.ts
init_esm_shims();
var actionSchema = external_exports.union([
external_exports.object({
pageId: external_exports.string().uuid().describe(defineField({ title: "Page ID" }))
}).describe(JSON.stringify({ title: "Navigate to a page" })),
external_exports.object({
modalId: external_exports.string().uuid().describe(defineField({ title: "Modal ID" }))
}).describe(JSON.stringify({ title: "Open a modal" }))
]).describe(
defineField({
title: "Action",
description: "The action performed when the menu item is clicked. Provide either pageId to navigate to a dashboard page or modalId to open a dashboard modal."
})
);
function buildSlotIdField2(containers) {
if (containers.length === 0) {
return external_exports.string().describe(
defineField({
title: "Slot to extend",
description: "Component ID of the back-office menu extension container to extend. Obtain from the Dev Center."
})
);
}
const literals = containers.map(
(c) => external_exports.literal(c.component.componentId).describe(
defineField({
title: c.component.data.backOfficeExtensionContainer.slotData?.displayName ?? c.component.name
})
)
);
const field = literals.length === 1 ? literals[0] : external_exports.union(
literals
);
return field.describe(
defineField({
title: "Slot to extend",
description: "Component ID of the back-office menu extension container to extend."
})
);
}
var dashboardMenuPlugin = {
title: "Dashboard Menu Plugin",
description: "A plugin that adds a menu item to a back-office page navigation",
group: "Dashboard",
documentation: "https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-menu-plugins/add-dashboard-menu-plugin-extensions",
zodSchema: async (httpClient) => {
const client = new ExtensionDataClient(httpClient);
const containers = await client.getBackofficeMenuItems();
return external_exports.object({
extensionType: external_exports.literal("DASHBOARD_MENU_PLUGIN"),
extendsSlotId: buildSlotIdField2(containers),
action: actionSchema,
title: external_exports.string().describe(defineField({ title: "Menu item title" })),
folder: external_exports.string().regex(VALID_PATH_REGEX).describe(
defineField({
title: "Plugin folder",
description: "Lowercase alphanumeric and hyphens only. Must be unique within src/dashboard/menu-plugins/."
})
)
});
},
validate: async (projectFolder, data) => {
const result = createDashboardMenuPluginValidation(
getDashboardMenuPluginExtensionsDir(projectFolder)
)(data.folder);
return result.valid ? null : result.reason;
},
generate: ({ projectFolder, data }) => {
const actionType = "pageId" in data.action ? DashboardMenuPluginAction.NavigateToPage() : DashboardMenuPluginAction.OpenModal();
const action = "pageId" in data.action ? { navigateToPage: { pageId: data.action.pageId } } : { openModal: { componentId: data.action.modalId } };
return generateDashboardMenuPlugin(
projectFolder,
data.extendsSlotId,
actionType,
action,
data.folder,
data.title
);
}
};
// ../cli-astro-commands/src/components/GenerateCommand/event/extension.ts
init_esm_shims();
var schema3 = external_exports.object({
extensionType: external_exports.literal("EVENT"),
folder: external_exports.string().regex(VALID_PATH_REGEX).describe(
defineField({
title: "Event folder",
description: "Lowercase alphanumeric and hyphens only"
})
)
});
var event = {
title: "Event",
description: "A backend event handler",
group: "Backend",
documentation: "https://dev.wix.com/docs/wix-cli/guides/extensions/backend-extensions/events/add-event-extensions",
zodSchema: schema3,
validate: async (projectFolder, data) => {
const isAvailable = pathAvailableValidation(
getBackendEventExtensionsDir(projectFolder)
)(data.folder);
return isAvailable ? null : "The event folder must be unique, please choose a folder that has not been used yet in your application.";
},
generate: ({ projectFolder, data }) => generateEvent(projectFolder, data.folder)
};
// ../cli-astro-commands/src/components/GenerateCommand/service-plugin/extension.ts
init_esm_shims();
var schema4 = external_exports.object({
extensionType: external_exports.literal("SERVICE_PLUGIN"),
pluginType: external_exports.union([
external_exports.literal(ComponentType.ECOM_ADDITIONAL_FEES).describe(defineField({ title: "Ecom Additional Fees" })),
external_exports.literal(ComponentType.ECOM_SHIPPING_RATES).describe(defineField({ title: "Ecom Shipping Rates" })),
external_exports.literal(ComponentType.ECOM_DISCOUNTS_TRIGGER).describe(defineField({ title: "Ecom Discount Triggers" })),
external_exports.literal(ComponentType.ECOM_VALIDATIONS).describe(defineField({ title: "Ecom Validations" })),
external_exports.literal(ComponentType.ECOM_PAYMENT_SETTINGS).describe(defineField({ title: "Ecom Payment Settings" })),
external_exports.literal(ComponentType.GIFT_CARDS_PROVIDER).describe(defineField({ title: "Ecom Gift Cards Provider" })),
external_exports.literal(ComponentType.STAFF_SORTING_PROVIDER).describe(defineField({ title: "Staff Sorting Provider" })),
external_exports.literal(ComponentType.BOOKING_POLICY_PROVIDER).describe(defineField({ title: "Booking Policy Provider" })),
external_exports.literal(ComponentType.AVAILABILITY_TIME_SLOTS_CONFIGURATION_PROVIDER).describe(
defineField({
title: "Availability Time Slots Configuration Provider"
})
),
external_exports.literal(ComponentType.BOOKINGS_VALIDATION_PROVIDER).describe(defineField({ title: "Bookings Validation Provider" })),
external_exports.literal(ComponentType.BOOKINGS_PRICING_PROVIDER).describe(defineField({ title: "Bookings Pricing Provider" })),
external_exports.literal(ComponentType.REALTIME_PERMISSIONS_PROVIDER).describe(defineField({ title: "Realtime Permissions Provider" }))
]).describe(defineField({ title: "Plugin type" })),
name: external_exports.string().regex(VALID_PATH_REGEX).max(19).describe(
defineField({
title: "Plugin name",
description: "Lowercase alphanumeric and hyphens only."
})
)
});
var servicePlugin = {
title: "Service Plugin",
description: "A backend service plugin that extends a Wix service",
group: "Backend",
documentation: "https://dev.wix.com/docs/wix-cli/guides/extensions/backend-extensions/service-plugins/add-service-plugin-extensions",
zodSchema: schema4,
validate: async (projectFolder, data) => {
const result = createServicePluginValidation(
getBackendPluginExtensionsDir(projectFolder)
)(data.name);
return result.valid ? null : result.reason;
},
generate: ({ projectFolder, data }) => generateServicePlugin(projectFolder, data.pluginType, data.name)
};
// ../cli-astro-commands/src/components/GenerateCommand/embedded-script/extension.ts
init_esm_shims();
var schema5 = external_exports.object({
extensionType: external_exports.literal("EMBEDDED_SCRIPT"),
name: external_exports.string().describe(defineField({ title: "Script name" })),
folder: external_exports.string().regex(VALID_PATH_REGEX).describe(
defineField({
title: "Script folder",
description: "Lowercase alphanumeric and hyphens only. Must be unique within src/site/embedded-scripts/."
})
),
scriptType: external_exports.union([
external_exports.literal("ESSENTIAL").describe(defineField({ title: "Essential" })),
external_exports.literal("FUNCTIONAL").describe(defineField({ title: "Functional" })),
external_exports.literal("ANALYTICS").describe(defineField({ title: "Analytics" })),
external_exports.literal("ADVERTISING").describe(defineField({ title: "Advertising" }))
]).describe(
defineField({
title: "Script type",
description: "Determines the consent category of the script."
})
),
placement: external_exports.union([
external_exports.literal("HEAD").describe(defineField({ title: "Head" })),
external_exports.literal("BODY_START").describe(defineField({ title: "Body Start" })),
external_exports.literal("BODY_END").describe(defineField({ title: "Body End" }))
]).describe(
defineField({
title: "Placement",
description: "Where in the page HTML the script is injected."
})
)
});
var embeddedScript = {
title: "Embedded Script",
description: "A script embedded into site pages",
group: "Site",
documentation: "https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/embedded-scripts/about-embedded-scripts",
zodSchema: schema5,
validate: async (projectFolder, data) => {
const result = createEmbeddedScriptFolderValidation(
getEmbeddedScriptExtensionsDir(projectFolder)
)(data.folder);
return result.valid ? null : result.reason;
},
// scriptType and placement are Zod string literals but generateEmbeddedScript expects TypeScript enums
generate: ({ projectFolder, data }) => generateEmbeddedScript(
projectFolder,
data.folder,
data.name,
data.scriptType,
data.placement
)
};
// ../cli-astro-commands/src/components/GenerateCommand/custom-element/extension.ts
init_esm_shims();
var schema6 = external_exports.object({
extensionType: external_exports.literal("CUSTOM_ELEMENT"),
name: external_exports.string().describe(defineField({ title: "Widget name" })),
folder: external_exports.string().regex(/^[a-z][a-z0-9]*(-[a-z0-9]+)+$/).describe(
defineField({
title: "Widget folder",
description: "Must be a valid custom element name: lowercase, starts with a letter, contains at least one hyphen."
})
)
});
var customElement = {
title: "Custom Element",
description: "A site widget built as a custom HTML element",
group: "Site",
documentation: "https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/site-widgets/add-a-site-widget-extension",
zodSchema: schema6,
validate: async (projectFolder, data) => {
const result = createCustomElementFolderValidation(
getSiteWidgetExtensionsDir(projectFolder)
)(data.folder);
return result.valid ? null : result.reason;
},
generate: ({ projectFolder, data }) => generateCustomElement(projectFolder, data.folder, data.name)
};
// ../cli-astro-commands/src/components/GenerateCommand/site-plugin/extension.ts
init_esm_shims();
function buildWidgetPluginSlots(plugins) {
const slotOptions = plugins.flatMap(
(wp) => wp.component.data.widgetPlugin.placements.map((p) => ({
value: `${wp.component.componentId}:${p.slotId}`,
title: `${wp.component.name} \u2014 ${p.slotId}`
}))
);
return slotOptions.map(
(opt) => external_exports.literal(opt.value).describe(defineField({ title: opt.title }))
);
}
function parseSitePluginSlotId(slotId) {
const colonIndex = slotId.indexOf(":");
return {
widgetId: slotId.substring(0, colonIndex),
slotId: slotId.substring(colonIndex + 1)
};
}
var sitePlugin = {
title: "Site Plugin",
description: "A plugin that extends a Wix app widget with a custom component",
group: "Site",
documentation: "https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/site-plugins/add-a-site-plugin-extension",
zodSchema: async (httpClient) => {
const client = new ExtensionDataClient(httpClient);
const plugins = await client.getWidgetPlugins();
const slotLiterals = buildWidgetPluginSlots(plugins);
return external_exports.object({
extensionType: external_exports.literal("SITE_PLUGIN"),
slotId: external_exports.union(slotLiterals).describe(
defineField({
title: "Slot",
description: "The widget slot to extend. Format: componentId:slotId."
})
),
name: external_exports.string().describe(defineField({ title: "Plugin name" })),
folder: external_exports.string().regex(/^[a-z][a-z0-9]*(-[a-z0-9]+)+$/).describe(
defineField({
title: "Plugin folder",
description: "Must be a valid custom element name: lowercase, starts with a letter, contains at least one hyphen."
})
)
});
},
validate: async (projectFolder, data) => {
const result = createCustomElementFolderValidation(
getSitePluginExtensionsDir(projectFolder)
)(data.folder);
return result.valid ? null : result.reason;
},
generate: async ({ projectFolder, appId, data, httpClient }) => {
const { widgetId, slotId } = parseSitePluginSlotId(data.slotId);
const plugins = await new ExtensionDataClient(
httpClient
).getWidgetPlugins();
const widgetPlugin = plugins.find(
(wp) => wp.component.componentId === widgetId
);
const ecomRequiredApps = await getEcomRequiredApps();
const requireAppId = ecomRequiredApps.appId === widgetPlugin?.appId ? ecomRequiredApps.requiredApps[0].appId : widgetPlugin?.appId;
const placement = plugins.find((wp) => wp.component.componentId === widgetId)?.component.data.widgetPlugin.placements.find((p) => p.slotId === slotId);
if (!placement) {
throw new Error(`Unknown slot: ${data.slotId}`);
}
if (requireAppId) {
await new DevCenterClient(httpClient).addRequiredApp({
appId,
appIdToRequire: requireAppId
});
}
return generateSitePlugin(projectFolder, data.folder, data.name, [
placement
]);
}
};
// ../cli-astro-commands/src/components/GenerateCommand/data-collections/extension.ts
init_esm_shims();
import { existsSync } from "node:fs";
import { join } from "node:path";
var schema7 = external_exports.object({
extensionType: external_exports.literal("DATA_COLLECTION"),
collectionName: external_exports.string().regex(/^[A-Za-z0-9_-]{1,36}$/).describe(
defineField({
title: "Collection name",
description: "1-36 characters, letters, numbers, underscores, and hyphens only."
})
)
});
var dataCollection = {
title: "Data Collection",
description: "A backend data collection",
group: "Backend",
documentation: "https://dev.wix.com/docs/api-reference/business-solutions/cms/collection-management/data-collections-extension/data-collections-extension-object",
zodSchema: schema7,
validate: async (projectFolder, data) => {
const dir = getBackendDataCollectionsExtensionsDir(projectFolder);
return existsSync(join(dir, `${data.collectionName}.ts`)) ? "Collection name must be unique, please choose a name that has not been used yet in your application." : null;
},
generate: ({ projectFolder, data }) => generateDataCollection(projectFolder, data.collectionName)
};
// ../cli-astro-commands/src/components/GenerateCommand/editor-react-component/extension.ts
init_esm_shims();
var schema8 = external_exports.object({
extensionType: external_exports.literal("EDITOR_REACT_COMPONENT"),
name: external_exports.string().max(30).describe(defineField({ title: "Component name" })),
folder: external_exports.string().regex(VALID_PATH_REGEX).describe(
defineField({
title: "Component folder",
description: "Lowercase alphanumeric and hyphens only."
})
),
description: external_exports.string().min(3).max(300).describe(defineField({ title: "Component description" }))
});
var editorReactComponent = {
title: "Editor React Component",
description: "A site widget built as a React component for the Wix editor",
group: "Site",
zodSchema: schema8,
validate: async (projectFolder, data) => {
const result = createReactComponentFolderValidation(
getSiteWidgetExtensionsDir(projectFolder)
)(data.folder);
return result.valid ? null : result.reason;
},
generate: ({ projectFolder, model, data }) => generateEditorReactComponent(
projectFolder,
data.folder,
data.name,
data.description,
model.config.projectType === "App" ? model.config.codeIdentifier : void 0
)
};
// ../cli-astro-commands/src/components/GenerateCommand/context-provider/extension.ts
init_esm_shims();
// ../cli-astro-commands/src/components/GenerateCommand/context-provider/generate.ts
init_esm_shims();
var import_camelCase = __toESM(require_camelCase(), 1);
import path from "node:path";
import { randomUUID } from "node:crypto";
var CONTEXT_PROVIDER_TEMPLATE = path.resolve(
__dirname,
"../templates/astro/context-provider"
);
var escapeTsString = (value) => value.replaceAll("\\", "\\\\").replaceAll("'", "\\'");
async function generateContextProvider(projectFolder, folder, name, type, codeIdentifier) {
const cwd = getContextProviderExtensionPath(projectFolder, folder);
const extensionFileName = path.basename(folder);
const { relativePathToCodeFile, relativePathToConfigFile } = getExtensionRelativePaths({
cwd,
projectFolder,
extensionFileName,
codeFileType: "tsx"
});
const config = {
id: randomUUID(),
name: escapeTsString(name),
type: escapeTsString(codeIdentifier ? `${codeIdentifier}.${type}` : type),
provider: relativePathToCodeFile
};
await modifyExtensionsEntry(
projectFolder,
(0, import_camelCase.default)(folder),
relativePathToConfigFile
);
return await componentGenerator({
template: CONTEXT_PROVIDER_TEMPLATE,
projectFolder,
cwd,
data: {
route: extensionFileName,
config
}
});
}
// ../cli-astro-commands/src/components/GenerateCommand/context-provider/extension.ts
var schema9 = external_exports.object({
extensionType: external_exports.literal("CONTEXT_PROVIDER"),
name: external_exports.string().describe(defineField({ title: "Provider name" })),
folder: external_exports.string().regex(VALID_PATH_REGEX).describe(
defineField({
title: "Provider folder",
description: "Lowercase alphanumeric, hyphens, and slashes"
})
),
type: external_exports.string().min(1).describe(
defineField({
title: "Provider type",
description: "The context provider type suffix. The project code identifier is prepended automatically."
})
)
});
var contextProvider = {
title: "Context Provider",
description: "An experimental React context provider",
group: "Site",
zodSchema: schema9,
validate: async (projectFolder, data) => {
const isAvailable = pathAvailableValidation(
getContextProviderExtensionsDir(projectFolder)
)(data.folder);
return isAvailable ? null : "The context provider folder must be unique, please choose a folder that has not been used yet in your application.";
},
generate: ({ projectFolder, model, data }) => generateContextProvider(
projectFolder,
data.folder,
data.name,
data.type,
model.config.projectType === "App" ? model.config.codeIdentifier : void 0
)
};
// ../cli-astro-commands/src/components/GenerateCommand/dashboard-external-page/extension.ts
init_esm_shims();
var schema10 = external_exports.object({
extensionType: external_exports.literal("DASHBOARD_EXTERNAL_PAGE"),
url: external_exports.string().refine(isValidExternalPageUrl, { message: EXTERNAL_PAGE_URL_ERROR }).transform(normalizeExternalPageUrl).describe(
defineField({
title: "External URL",
description: "The URL of the external page to load"
})
),
name: external_exports.string().regex(VALID_PATH_REGEX).describe(
defineField({
title: "Folder name",
description: "Lowercase alphanumeric and hyphens only."
})
)
});
var dashboardExternalPage = {
title: "Dashboard External Page",
description: "A Dashboard page that loads an external URL",
group: "Dashboard",
documentation: "https://dev.wix.com/docs/wix-cli",
zodSchema: schema10,
validate: async (projectFolder, data) => {
const isAvailable = pathAvailableValidation(
getDashboardExternalPageExtensionsDir(projectFolder)
)(data.name);
return isAvailable ? null : "The folder name must be unique, please choose a name that has not been used yet in your application.";
},
generate: ({ projectFolder, data }) => generateDashboardExternalPage(projectFolder, data.name, data.url)
};
// ../cli-astro-commands/src/components/GenerateCommand/extensionHandlers.ts
var extensionHandlers = {
DASHBOARD_PAGE: dashboardPage,
DASHBOARD_MODAL: dashboardModal,
DASHBOARD_PLUGIN: dashboardPlugin,
DASHBOARD_MENU_PLUGIN: dashboardMenuPlugin,
DASHBOARD_EXTERNAL_PAGE: dashboardExternalPage,
EVENT: event,
SERVICE_PLUGIN: servicePlugin,
EMBEDDED_SCRIPT: embeddedScript,
CUSTOM_ELEMENT: customElement,
SITE_PLUGIN: sitePlugin,
DATA_COLLECTION: dataCollection,
EDITOR_REACT_COMPONENT: editorReactComponent,
CONTEXT_PROVIDER: contextProvider
};
export {
extensionHandlers
};
//# sourceMappingURL=chunk-K37QBDZK.js.map