Amp-Thread-ID: https://ampcode.com/threads/T-019f9d91-77c1-7206-a60f-ed6554ce92ab Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
107 lines
4.0 KiB
TypeScript
107 lines
4.0 KiB
TypeScript
import { readFileSync, writeFileSync } from "node:fs";
|
|
import { APPLICATION_HEADLESS } from "../test/application.js";
|
|
import { APPLICATION_VERSION } from "../examples/blender/nodes/application.js";
|
|
|
|
const { materializeNode } = APPLICATION_HEADLESS;
|
|
const plain = (id: string, type: Parameters<typeof materializeNode>[1], x: number, y: number) => {
|
|
return materializeNode(id, type, { x, y });
|
|
};
|
|
const byId = <T extends { readonly id: string }>(items: readonly T[]): T[] =>
|
|
[...items].sort((left, right) => left.id.localeCompare(right.id));
|
|
const fixtures: Record<string, unknown> = {
|
|
"control-test": {
|
|
graphId: "control-test",
|
|
catalogVersion: APPLICATION_VERSION,
|
|
nodes: byId([
|
|
plain("value", "fxnode.shader.value", -500, 200),
|
|
plain("math", "fxnode.shader.math", -250, 200),
|
|
plain("vector", "fxnode.shader.vector-math", 20, 200),
|
|
plain("color", "fxnode.shader.color", 300, 200),
|
|
plain("group", "fxnode.common.group-input", -100, -100),
|
|
]),
|
|
links: [
|
|
{
|
|
id: "value-math",
|
|
fromNodeId: "value",
|
|
fromSocketId: "value:value",
|
|
toNodeId: "math",
|
|
toSocketId: "math:a",
|
|
muted: false,
|
|
extensions: {},
|
|
},
|
|
],
|
|
metadata: {},
|
|
},
|
|
"link-tools-test": (() => {
|
|
const nodes = [
|
|
plain("source-a", "fxnode.shader.value", -560, 240),
|
|
plain("math-a", "fxnode.shader.math", 180, 240),
|
|
plain("source-b", "fxnode.shader.value", -560, 120),
|
|
plain("math-b", "fxnode.shader.math", 180, 120),
|
|
plain("source-c", "fxnode.shader.value", -560, 0),
|
|
plain("math-c", "fxnode.shader.math", 180, 0),
|
|
plain("chain-source", "fxnode.shader.value", -560, -100),
|
|
plain("reroute", "fxnode.common.reroute", 0, -100),
|
|
plain("chain-math", "fxnode.shader.math", 260, -100),
|
|
plain("transform", "fxnode.geometry.transform-geometry", -300, -230),
|
|
plain("noise", "fxnode.shader.noise-texture", 180, -230),
|
|
];
|
|
const links = [
|
|
["parallel-a", "source-a", "source-a:value", "math-a", "math-a:a"],
|
|
["parallel-b", "source-b", "source-b:value", "math-b", "math-b:a"],
|
|
["parallel-c", "source-c", "source-c:value", "math-c", "math-c:a"],
|
|
["chain-in", "chain-source", "chain-source:value", "reroute", "reroute:input"],
|
|
["chain-out", "reroute", "reroute:output", "chain-math", "chain-math:a"],
|
|
] as const;
|
|
return {
|
|
graphId: "link-tools-test",
|
|
catalogVersion: APPLICATION_VERSION,
|
|
nodes: byId(nodes),
|
|
links: byId(
|
|
links.map(([id, fromNodeId, fromSocketId, toNodeId, toSocketId]) => ({
|
|
id,
|
|
fromNodeId,
|
|
fromSocketId,
|
|
toNodeId,
|
|
toSocketId,
|
|
muted: false,
|
|
extensions: {},
|
|
})),
|
|
),
|
|
metadata: {},
|
|
};
|
|
})(),
|
|
"ramp-test": (() => {
|
|
const frame = plain("frame", "fxnode.common.frame", -300, 250),
|
|
ramp = plain("ramp", "fxnode.shader.color-ramp", 40, -40),
|
|
value = {
|
|
colorMode: "rgb",
|
|
interpolation: "linear",
|
|
hueInterpolation: "near",
|
|
stops: [
|
|
{ id: "red", position: 0.1, color: [1, 0, 0, 1] },
|
|
{ id: "green", position: 0.35, color: [0, 1, 0, 0.8] },
|
|
{ id: "blue", position: 0.9, color: [0, 0, 1, 0.6] },
|
|
],
|
|
};
|
|
return {
|
|
graphId: "ramp-test",
|
|
catalogVersion: APPLICATION_VERSION,
|
|
nodes: [
|
|
{ ...frame, size: { x: 380, y: 310 } },
|
|
{ ...ramp, parentId: "frame", parameters: { ...ramp.parameters, ramp: { kind: "json", value } } },
|
|
],
|
|
links: [],
|
|
metadata: {},
|
|
};
|
|
})(),
|
|
};
|
|
for (const [name, fixture] of Object.entries(fixtures)) {
|
|
const url = new URL(`../examples/blender/${name}/initialLayout.json`, import.meta.url),
|
|
canonical = `${JSON.stringify(fixture, null, 2)}\n`;
|
|
if (process.argv.includes("--write")) writeFileSync(url, canonical);
|
|
else if (readFileSync(url, "utf8") !== canonical)
|
|
throw new Error(`${name} fixture is not canonical; run npm run generate:browser-fixtures`);
|
|
}
|
|
if (!process.argv.includes("--write")) console.log("browser fixtures verified");
|