mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-11-09 22:14:29 +09:00
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { nanoid } from "nanoid";
|
|
import type { CompactBuild } from "@webstudio-is/project-build";
|
|
import { executeBuilderRuntimeOperation } from "@webstudio-is/project-build/runtime/registry";
|
|
import { BuilderRuntimeError } from "@webstudio-is/project-build/runtime/errors";
|
|
import { type BuilderRuntimeMutation } from "@webstudio-is/project-build/runtime/mutation";
|
|
import type { BuilderState } from "@webstudio-is/project-build/state/builder-state";
|
|
import { createBuilderStateFromCompactBuild } from "@webstudio-is/project-build/state/adapters";
|
|
import { type Asset } from "@webstudio-is/sdk";
|
|
import { throwApiError } from "./api-errors.server";
|
|
|
|
const defaultBuilderRuntimeContext = {
|
|
createId: nanoid,
|
|
now: () => new Date(),
|
|
};
|
|
|
|
export const createBuilderRuntimeState = (
|
|
build: CompactBuild,
|
|
assets?: Asset[]
|
|
): BuilderState => createBuilderStateFromCompactBuild({ ...build, assets });
|
|
|
|
export const executeApiRuntimeOperation = <Result>({
|
|
id,
|
|
build,
|
|
assets,
|
|
input,
|
|
}: {
|
|
id: string;
|
|
build: CompactBuild;
|
|
assets?: Asset[];
|
|
input: unknown;
|
|
}): Result => {
|
|
try {
|
|
return executeBuilderRuntimeOperation<Result>({
|
|
id,
|
|
state: createBuilderRuntimeState(build, assets),
|
|
input,
|
|
context: defaultBuilderRuntimeContext,
|
|
});
|
|
} catch (error) {
|
|
if (error instanceof BuilderRuntimeError) {
|
|
return throwApiError(error.code, error.message);
|
|
}
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
export const executeApiRuntimeMutation = <
|
|
Result extends Record<string, unknown> = Record<string, unknown>,
|
|
>(args: {
|
|
id: string;
|
|
build: CompactBuild;
|
|
assets?: Asset[];
|
|
input: unknown;
|
|
}) => executeApiRuntimeOperation<BuilderRuntimeMutation<Result>>(args);
|