@wix/cli
Version:
CLI tool for building Wix sites and applications
179 lines (175 loc) • 5.98 kB
JavaScript
import { createRequire as _createRequire } from 'node:module';
const require = _createRequire(import.meta.url);
import {
pKe
} from "./chunk-HVUWKADU.js";
import "./chunk-A4SLQB4K.js";
import {
getEditorReactComponentExtensionsDir
} from "./chunk-FLDCYVA4.js";
import "./chunk-TQF2C25T.js";
import {
assertBuildOutputExists,
readBuildMetadata
} from "./chunk-NPYBTUWU.js";
import {
useProjectModel
} from "./chunk-OQJA5FSX.js";
import "./chunk-KCDAY54L.js";
import {
require_kebabCase
} from "./chunk-7QTVQZAE.js";
import {
Alert,
Box_default,
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-4UTFAKA5.js";
import "./chunk-XZUGLEBK.js";
import {
outputFile
} from "./chunk-TLLAD5LU.js";
import "./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/GenerateManifestCommand/index.ts
init_esm_shims();
// ../cli-astro-commands/src/components/GenerateManifestCommand/GenerateManifestCommand.tsx
init_esm_shims();
var import_react2 = __toESM(require_react(), 1);
var import_variant = __toESM(require_lib(), 1);
import { join, dirname, relative } from "node:path";
var import_kebabCase = __toESM(require_kebabCase(), 1);
// ../../node_modules/@wix/zero-config-implementation/dist/index.js
init_esm_shims();
var import_react = __toESM(require_react(), 1);
// ../cli-astro-commands/src/components/GenerateManifestCommand/GenerateManifestCommand.tsx
async function generateManifestForExtension(ext, projectFolder) {
try {
const { srcPath, distPath } = ext.topology["resources.client.componentUrl"];
const folder = dirname(srcPath);
const route = relative(
getEditorReactComponentExtensionsDir(projectFolder),
folder
);
const generatedFileName = (0, import_kebabCase.default)(route);
const filePath = join(folder, `${generatedFileName}.generated.ts`);
const res = await pKe(srcPath, distPath);
const content = [
`/**`,
` * THIS FILE IS AUTO-GENERATED`,
` * Changes to this file will be overwritten during the next build/sync.`,
` * To make changes, update the source code or use the ${generatedFileName}.extension.ts file`,
` */`,
``,
`import type { EditorElement } from '@wix/react-component-schema';`,
``,
`export const editorElement = ${JSON.stringify(res.component.editorElement, null, 2)} as EditorElement;`,
``
].join("\n");
await outputFile(filePath, content);
return {
relativePath: relative(projectFolder, filePath),
errors: res.errors
};
} catch (cause) {
throw new CliError({
code: CliErrorCode.FailedToGenerateExtensionConfig({
extensionId: ext.id
}),
cause
});
}
}
function formatExtractionError(err) {
return `[${err.phase}] ${err.componentName}: ${err.error.message}`;
}
var ManifestTaskList = ({ extensions, projectFolder }) => {
const total = extensions.length;
const [tasks, setTasks] = (0, import_react2.useState)([]);
useAsync(async () => {
const completed = [];
for (const ext of extensions) {
setTasks([...completed, { status: "running", componentId: ext.id }]);
const { relativePath, errors } = await generateManifestForExtension(
ext,
projectFolder
);
completed.push(
errors.length === 0 ? { status: "success", relativePath } : { status: "warning", relativePath, errors }
);
}
setTasks(completed);
}, []);
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, tasks.map((task, i) => {
const stepper = `[${i + 1}/${total}]`;
switch (task.status) {
case "running":
return /* @__PURE__ */ import_react2.default.createElement(
Spinner,
{
key: i,
text: `${stepper} Generating config for component ${task.componentId}`
}
);
case "success":
return /* @__PURE__ */ import_react2.default.createElement(Alert, { key: i, type: "success" }, `${stepper} Generated ${task.relativePath}`);
case "warning":
return /* @__PURE__ */ import_react2.default.createElement(import_react2.Fragment, { key: i }, /* @__PURE__ */ import_react2.default.createElement(Alert, { type: "warning" }, `${stepper} Generated ${task.relativePath}`), task.errors.map((err, j) => /* @__PURE__ */ import_react2.default.createElement(
Box_default,
{
key: j,
paddingLeft: 2,
paddingBottom: 1,
flexDirection: "column"
},
/* @__PURE__ */ import_react2.default.createElement(Alert, { type: "insight" }, formatExtractionError(err))
)));
}
}));
};
var GenerateManifestCommand = () => {
const { model } = useProjectModel();
const { status } = useAsync(async () => {
await assertBuildOutputExists(model.projectFolder, model.config);
return readBuildMetadata(model.projectFolder, model.config);
}, []);
return (0, import_variant.match)(status, {
Error: () => null,
Loading: () => null,
Success: ({ result }) => {
const extensions = (result.extensionsTopology ?? []).filter(
(ext) => ext.type === "EDITOR_REACT_COMPONENT"
);
if (extensions.length === 0) {
return /* @__PURE__ */ import_react2.default.createElement(Text, null, "No extensions that can generate manifest for exist");
}
return /* @__PURE__ */ import_react2.default.createElement(
ManifestTaskList,
{
extensions,
projectFolder: model.projectFolder
}
);
}
});
};
export {
GenerateManifestCommand
};
//# sourceMappingURL=GenerateManifestCommand-NR4DWXYE.js.map