From ff45d2da90e456bba4d888bb7d6acbbde198a44e Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Wed, 9 Sep 2026 23:50:13 -0400 Subject: [PATCH 1/6] feat: clarify Draco export ownership Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- docs/usage.md | 10 +++--- src/block/connectionPointType.ts | 12 ++++--- src/blocks/dracoEncoderBlock.ts | 12 +++---- src/blocks/gltfOutputBlock.ts | 19 ++++------- src/index.ts | 1 + .../integration/compressedGlbPipeline.test.ts | 2 +- tests/integration/dracoCompression.test.ts | 33 ++++++++++++++----- 7 files changed, 52 insertions(+), 37 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 538a07a..ac7cfe7 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -36,9 +36,9 @@ Named by noun. - Behavior: Uses the Babylon scene loader to load an STL using NullEngine. - `DracoEncoderBlock` - Input: none - - Output: output (DracoEncoder) + - Output: output (GltfMeshCompressionOptions) - Resources: Babylon default DracoEncoder - - Behavior: Attaches to `GltfOutputBlock`'s geometryCompression port. When present, sets the glTF export's `meshCompressionMethod` option to "Draco". + - Behavior: Prepares Babylon's default Draco encoder and provides `{ meshCompressionMethod: "Draco" }` as the per-export glTF mesh compression options that enable it. Connect its output to `GltfOutputBlock`'s `geometryCompressionOptions` port. # Transforms @@ -55,10 +55,10 @@ Named by verb. Named by noun. - `GltfOutputBlock` - - Inputs: input (BabylonScene), geometryCompressor (DracoEncoder, optional) + - Inputs: input (BabylonScene), geometryCompressionOptions (GltfMeshCompressionOptions, optional) - Output: `File` which is a GLB - Resources: Babylon glTF exporter - - Behavior: Uses GLBExport to export scene to GLB. Grabs GLB file from return of the GLBExport function. If geometryCompressor is truthy, sets meshCompressionMethod export option to "Draco". + - Behavior: Uses GLBExport to export the scene to GLB and passes through any supplied mesh compression options. If `geometryCompressionOptions` is not connected, the export remains uncompressed. # Example: Hello, pipeline! @@ -90,7 +90,7 @@ const destination = new GltfOutputBlock(); source.output.connectTo(compressTextures.input); compressTextures.output.connectTo(destination.input); -dracoEncoder.output.connectTo(destination.geometryCompressor); +dracoEncoder.output.connectTo(destination.geometryCompressionOptions); const asset = new NodeAsset({ name: "gltf-roundtrip", diff --git a/src/block/connectionPointType.ts b/src/block/connectionPointType.ts index ffeef62..a68a586 100644 --- a/src/block/connectionPointType.ts +++ b/src/block/connectionPointType.ts @@ -1,5 +1,5 @@ -import type { DracoEncoder } from "@babylonjs/core/Meshes/Compression/dracoEncoder.js"; import type { Scene as BabylonScene } from "@babylonjs/core/scene.js"; +import type { IExportOptions } from "@babylonjs/serializers/glTF/2.0/glTFSerializer.js"; declare const connectionPointData: unique symbol; @@ -21,9 +21,13 @@ export const UrlType = /* @__PURE__ */ defineConnectionPointType("url", export const FileType = /* @__PURE__ */ defineConnectionPointType("file", (value): value is File => value instanceof File); -export const DracoEncoderType = /* @__PURE__ */ defineConnectionPointType( - "draco-encoder", - (value): value is DracoEncoder => typeof value === "object" && value !== null && "encodeMeshAsync" in value && typeof value.encodeMeshAsync === "function" +/** Per-export glTF mesh compression settings supplied by an opt-in compressor block. */ +export type GltfMeshCompressionOptions = Required>; + +export const GltfMeshCompressionOptionsType = /* @__PURE__ */ defineConnectionPointType( + "gltf-mesh-compression-options", + (value): value is GltfMeshCompressionOptions => + typeof value === "object" && value !== null && "meshCompressionMethod" in value && (value.meshCompressionMethod === "None" || value.meshCompressionMethod === "Draco") ); export const BabylonSceneType = /* @__PURE__ */ defineConnectionPointType( diff --git a/src/blocks/dracoEncoderBlock.ts b/src/blocks/dracoEncoderBlock.ts index d1e30dd..0eddf2e 100644 --- a/src/blocks/dracoEncoderBlock.ts +++ b/src/blocks/dracoEncoderBlock.ts @@ -1,25 +1,24 @@ import type { IDracoCodecConfiguration } from "@babylonjs/core/Meshes/Compression/dracoCodec.js"; -import type { DracoEncoder as BabylonDracoEncoder } from "@babylonjs/core/Meshes/Compression/dracoEncoder.js"; import { Block, type BlockOptions } from "../block/block"; import { defineSourceBlock } from "../block/blockDefinition"; -import { DracoEncoderType } from "../block/connectionPointType"; +import { GltfMeshCompressionOptionsType, type GltfMeshCompressionOptions } from "../block/connectionPointType"; const DracoEncoderBlockDefinition = /* @__PURE__ */ defineSourceBlock({ type: "input.draco-encoder", - output: DracoEncoderType, - runAsync: async () => { + output: GltfMeshCompressionOptionsType, + runAsync: async (): Promise => { const [{ DracoEncoder }, { RegisterKHR_draco_mesh_compression }] = await Promise.all([ import("@babylonjs/core/Meshes/Compression/dracoEncoder.js"), import("@babylonjs/serializers/glTF/2.0/Extensions/KHR_draco_mesh_compression.pure.js"), ]); await prepareDefaultEncoderForNodeAsync(DracoEncoder); RegisterKHR_draco_mesh_compression(); - return DracoEncoder.Default; + return { meshCompressionMethod: "Draco" }; }, }); -/** Provides Babylon.js's default Draco encoder for glTF geometry compression. */ +/** Prepares Babylon.js's default Draco encoder and provides glTF mesh compression options that enable it. */ export class DracoEncoderBlock extends Block { public constructor(options?: BlockOptions) { super(DracoEncoderBlockDefinition, options); @@ -28,7 +27,6 @@ export class DracoEncoderBlock extends Block interface DracoEncoderConstructor { DefaultConfiguration: IDracoCodecConfiguration; - readonly Default: BabylonDracoEncoder; ResetDefault(skipDispose?: boolean): void; } diff --git a/src/blocks/gltfOutputBlock.ts b/src/blocks/gltfOutputBlock.ts index 3089703..267f3c4 100644 --- a/src/blocks/gltfOutputBlock.ts +++ b/src/blocks/gltfOutputBlock.ts @@ -3,16 +3,16 @@ import type { Scene as BabylonScene } from "@babylonjs/core/scene.js"; import { Block, type BlockOptions, type InputPort } from "../block/block"; import { defineBlock } from "../block/blockDefinition"; -import { BabylonSceneType, DracoEncoderType, FileType } from "../block/connectionPointType"; +import { BabylonSceneType, FileType, GltfMeshCompressionOptionsType, type GltfMeshCompressionOptions } from "../block/connectionPointType"; const GltfOutputBlockDefinition = /* @__PURE__ */ defineBlock({ type: "output.gltf", input: BabylonSceneType, auxiliaryInputs: { - geometryCompressor: DracoEncoderType, + geometryCompressionOptions: GltfMeshCompressionOptionsType, }, output: FileType, - runAsync: (scene, _config, _resources, { geometryCompressor }) => serializeGlbAsync(scene, geometryCompressor === undefined ? undefined : "Draco"), + runAsync: (scene, _config, _resources, { geometryCompressionOptions }) => serializeGlbAsync(scene, geometryCompressionOptions), }); /** Options for naming the block or supplying its initial scene input. */ @@ -20,27 +20,22 @@ export type GltfOutputBlockOptions = BlockOptions { - public readonly geometryCompressor: InputPort; + public readonly geometryCompressionOptions: InputPort; public constructor(options?: GltfOutputBlockOptions) { super(GltfOutputBlockDefinition, options); - this.geometryCompressor = this.auxiliaryInputs.geometryCompressor; + this.geometryCompressionOptions = this.auxiliaryInputs.geometryCompressionOptions; } } -async function serializeGlbAsync(scene: BabylonScene, meshCompressionMethod: "Draco" | undefined): Promise { +async function serializeGlbAsync(scene: BabylonScene, geometryCompressionOptions: GltfMeshCompressionOptions | undefined): Promise { if (scene.textures.some(requiresTextureTransform)) { const { RegisterKHR_texture_transform } = await import("@babylonjs/serializers/glTF/2.0/Extensions/KHR_texture_transform.pure.js"); RegisterKHR_texture_transform(); } const { GLTF2Export } = await import("@babylonjs/serializers/glTF/2.0/glTFSerializer.js"); const fileName = "scene.glb"; - const result = - meshCompressionMethod === undefined - ? await GLTF2Export.GLBAsync(scene, fileName) - : await GLTF2Export.GLBAsync(scene, fileName, { - meshCompressionMethod, - }); + const result = await GLTF2Export.GLBAsync(scene, fileName, geometryCompressionOptions); const root = result.files[fileName]; if (!(root instanceof Blob)) { throw new Error(`The Babylon glTF serializer did not produce "${fileName}".`); diff --git a/src/index.ts b/src/index.ts index af1d651..0026289 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,5 +5,6 @@ export { GltfInputBlock } from "./blocks/gltfInputBlock"; export { GltfOutputBlock, type GltfOutputBlockOptions } from "./blocks/gltfOutputBlock"; export { ObjInputBlock } from "./blocks/objInputBlock"; export { StlInputBlock } from "./blocks/stlInputBlock"; +export type { GltfMeshCompressionOptions } from "./block/connectionPointType"; export { NodeAsset } from "./nodeAsset/nodeAsset"; export { NodeAssetContext } from "./nodeAsset/nodeAssetContext"; diff --git a/tests/integration/compressedGlbPipeline.test.ts b/tests/integration/compressedGlbPipeline.test.ts index 34c16f9..4c1ed8c 100644 --- a/tests/integration/compressedGlbPipeline.test.ts +++ b/tests/integration/compressedGlbPipeline.test.ts @@ -13,7 +13,7 @@ describe("compressed GLB pipeline", () => { source.output.connectTo(compressTextures.input); compressTextures.output.connectTo(destination.input); - dracoEncoder.output.connectTo(destination.geometryCompressor); + dracoEncoder.output.connectTo(destination.geometryCompressionOptions); const asset = new NodeAsset({ name: "gltf-roundtrip", outputBlock: destination }); const result = await asset.executeAsync(); diff --git a/tests/integration/dracoCompression.test.ts b/tests/integration/dracoCompression.test.ts index 57d64ef..eeeafc4 100644 --- a/tests/integration/dracoCompression.test.ts +++ b/tests/integration/dracoCompression.test.ts @@ -1,8 +1,6 @@ -import type { DracoEncoder as BabylonDracoEncoder } from "@babylonjs/core/Meshes/Compression/dracoEncoder.js"; - import { describe, expect, expectTypeOf, it } from "vitest"; -import { DracoEncoderBlock, GltfInputBlock, GltfOutputBlock, NodeAsset } from "../../src/index"; +import { DracoEncoderBlock, GltfInputBlock, GltfOutputBlock, NodeAsset, type GltfMeshCompressionOptions } from "../../src/index"; import { parseGlbAsync } from "../helpers/glb"; import { generateGltfDataUri } from "../helpers/gltf"; @@ -25,7 +23,7 @@ describe("Draco compression", () => { const encoder = new DracoEncoderBlock(); const destination = new GltfOutputBlock(); source.output.connectTo(destination.input); - encoder.output.connectTo(destination.geometryCompressor); + encoder.output.connectTo(destination.geometryCompressionOptions); return new NodeAsset({ name: `draco-compressed-${name}-glb`, outputBlock: destination }); }); @@ -37,12 +35,31 @@ describe("Draco compression", () => { } }); - it("provides Babylon's default Draco encoder", async () => { + it("provides per-export glTF mesh compression options", async () => { const encoderBlock = new DracoEncoderBlock(); const result = await new NodeAsset({ name: "draco-encoder", outputBlock: encoderBlock }).executeAsync(); - const { DracoEncoder } = await import("@babylonjs/core/Meshes/Compression/dracoEncoder.js"); - expectTypeOf(result).toEqualTypeOf(); - expect(result).toBe(DracoEncoder.Default); + expectTypeOf(result).toEqualTypeOf(); + expect(result).toEqual({ meshCompressionMethod: "Draco" }); + }); + + it("leaves a later unconnected glTF output uncompressed", async () => { + const compressedSource = new GltfInputBlock({ input: generateGltfDataUri() }); + const encoder = new DracoEncoderBlock(); + const compressedDestination = new GltfOutputBlock(); + compressedSource.output.connectTo(compressedDestination.input); + encoder.output.connectTo(compressedDestination.geometryCompressionOptions); + + await new NodeAsset({ name: "draco-compressed-glb", outputBlock: compressedDestination }).executeAsync(); + + const uncompressedSource = new GltfInputBlock({ input: generateGltfDataUri() }); + const uncompressedDestination = new GltfOutputBlock(); + uncompressedSource.output.connectTo(uncompressedDestination.input); + + const result = await new NodeAsset({ name: "uncompressed-glb", outputBlock: uncompressedDestination }).executeAsync(); + const { json } = await parseGlbAsync(result); + + expect(json.extensionsUsed ?? []).not.toContain("KHR_draco_mesh_compression"); + expect(json.meshes?.[0]?.primitives[0]?.extensions?.KHR_draco_mesh_compression).toBeUndefined(); }); }); From c60c9be1200f8ca85a86f659ef17390ec4fc6bf7 Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Thu, 10 Sep 2026 01:26:28 -0400 Subject: [PATCH 2/6] fix: keep Draco semantics behind encoder block Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/block/connectionPointType.ts | 9 +++++++-- src/blocks/dracoEncoderBlock.ts | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/block/connectionPointType.ts b/src/block/connectionPointType.ts index a68a586..2f6c5d9 100644 --- a/src/block/connectionPointType.ts +++ b/src/block/connectionPointType.ts @@ -24,10 +24,15 @@ export const FileType = /* @__PURE__ */ defineConnectionPointType("file", /** Per-export glTF mesh compression settings supplied by an opt-in compressor block. */ export type GltfMeshCompressionOptions = Required>; +const gltfMeshCompressionOptions = /* @__PURE__ */ Symbol("gltf-mesh-compression-options"); + +export function createGltfMeshCompressionOptions(options: GltfMeshCompressionOptions): GltfMeshCompressionOptions { + return Object.freeze(Object.defineProperty({ ...options }, gltfMeshCompressionOptions, { value: true })); +} + export const GltfMeshCompressionOptionsType = /* @__PURE__ */ defineConnectionPointType( "gltf-mesh-compression-options", - (value): value is GltfMeshCompressionOptions => - typeof value === "object" && value !== null && "meshCompressionMethod" in value && (value.meshCompressionMethod === "None" || value.meshCompressionMethod === "Draco") + (value): value is GltfMeshCompressionOptions => typeof value === "object" && value !== null && gltfMeshCompressionOptions in value ); export const BabylonSceneType = /* @__PURE__ */ defineConnectionPointType( diff --git a/src/blocks/dracoEncoderBlock.ts b/src/blocks/dracoEncoderBlock.ts index 0eddf2e..4476237 100644 --- a/src/blocks/dracoEncoderBlock.ts +++ b/src/blocks/dracoEncoderBlock.ts @@ -2,7 +2,7 @@ import type { IDracoCodecConfiguration } from "@babylonjs/core/Meshes/Compressio import { Block, type BlockOptions } from "../block/block"; import { defineSourceBlock } from "../block/blockDefinition"; -import { GltfMeshCompressionOptionsType, type GltfMeshCompressionOptions } from "../block/connectionPointType"; +import { createGltfMeshCompressionOptions, GltfMeshCompressionOptionsType, type GltfMeshCompressionOptions } from "../block/connectionPointType"; const DracoEncoderBlockDefinition = /* @__PURE__ */ defineSourceBlock({ type: "input.draco-encoder", @@ -14,7 +14,7 @@ const DracoEncoderBlockDefinition = /* @__PURE__ */ defineSourceBlock({ ]); await prepareDefaultEncoderForNodeAsync(DracoEncoder); RegisterKHR_draco_mesh_compression(); - return { meshCompressionMethod: "Draco" }; + return createGltfMeshCompressionOptions({ meshCompressionMethod: "Draco" }); }, }); From 030f994dd1749eb66e5fb08a58a920b4b5cbea48 Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Fri, 11 Sep 2026 22:48:33 -0400 Subject: [PATCH 3/6] style: remove compression type comment Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/block/connectionPointType.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/block/connectionPointType.ts b/src/block/connectionPointType.ts index 2f6c5d9..9d0e366 100644 --- a/src/block/connectionPointType.ts +++ b/src/block/connectionPointType.ts @@ -21,7 +21,6 @@ export const UrlType = /* @__PURE__ */ defineConnectionPointType("url", export const FileType = /* @__PURE__ */ defineConnectionPointType("file", (value): value is File => value instanceof File); -/** Per-export glTF mesh compression settings supplied by an opt-in compressor block. */ export type GltfMeshCompressionOptions = Required>; const gltfMeshCompressionOptions = /* @__PURE__ */ Symbol("gltf-mesh-compression-options"); From 3c0ca0f32db09a53f3d0c45c0d55140d4464413a Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Fri, 11 Sep 2026 22:56:07 -0400 Subject: [PATCH 4/6] refactor: split connection point types Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/block/block.ts | 2 +- src/block/blockDefinition.ts | 2 +- src/block/connectionPointType.ts | 41 ------------------- src/blocks/compressTexturesBlock.ts | 2 +- src/blocks/dracoEncoderBlock.ts | 2 +- src/blocks/fbxInputBlock.ts | 3 +- src/blocks/gltfInputBlock.ts | 3 +- src/blocks/gltfOutputBlock.ts | 4 +- src/blocks/objInputBlock.ts | 3 +- src/blocks/stlInputBlock.ts | 3 +- src/connectionPoints/babylonScene.ts | 9 ++++ src/connectionPoints/connectionPoint.ts | 13 ++++++ src/connectionPoints/file.ts | 3 ++ .../gltfMeshCompressionOptions.ts | 16 ++++++++ src/connectionPoints/url.ts | 3 ++ src/index.ts | 2 +- src/nodeAsset/nodeAsset.ts | 2 +- src/nodeAsset/nodeAssetContext.ts | 2 +- tests/helpers/numberBlocks.ts | 2 +- tests/integration/gltfOutput.test.ts | 2 +- 20 files changed, 64 insertions(+), 55 deletions(-) delete mode 100644 src/block/connectionPointType.ts create mode 100644 src/connectionPoints/babylonScene.ts create mode 100644 src/connectionPoints/connectionPoint.ts create mode 100644 src/connectionPoints/file.ts create mode 100644 src/connectionPoints/gltfMeshCompressionOptions.ts create mode 100644 src/connectionPoints/url.ts diff --git a/src/block/block.ts b/src/block/block.ts index 661e089..83b0e48 100644 --- a/src/block/block.ts +++ b/src/block/block.ts @@ -1,4 +1,4 @@ -import type { ConnectionPointType, ConnectionPointValue } from "./connectionPointType"; +import type { ConnectionPointType, ConnectionPointValue } from "../connectionPoints/connectionPoint"; import type { _AnyBlockDefinition, AuxiliaryInputDefinition, ConfigDefinition, ConfigValues } from "./blockDefinition"; /** @internal */ diff --git a/src/block/blockDefinition.ts b/src/block/blockDefinition.ts index 1650f3c..427123e 100644 --- a/src/block/blockDefinition.ts +++ b/src/block/blockDefinition.ts @@ -1,4 +1,4 @@ -import type { ConnectionPointType, ConnectionPointValue } from "./connectionPointType"; +import type { ConnectionPointType, ConnectionPointValue } from "../connectionPoints/connectionPoint"; import type { ResourceDependencies, ResourceValues } from "../resources/resource"; declare const configType: unique symbol; diff --git a/src/block/connectionPointType.ts b/src/block/connectionPointType.ts deleted file mode 100644 index 9d0e366..0000000 --- a/src/block/connectionPointType.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { Scene as BabylonScene } from "@babylonjs/core/scene.js"; -import type { IExportOptions } from "@babylonjs/serializers/glTF/2.0/glTFSerializer.js"; - -declare const connectionPointData: unique symbol; - -export interface ConnectionPointType { - readonly id: string; - readonly [connectionPointData]: Payload; - is(value: unknown): value is Payload; -} - -export type ConnectionPointValue> = C extends ConnectionPointType ? TData : never; - -export function defineConnectionPointType

(id: string, isData: (value: unknown) => value is P): ConnectionPointType

{ - return Object.freeze({ id, is: isData }) as ConnectionPointType

; -} - -// Definitions - -export const UrlType = /* @__PURE__ */ defineConnectionPointType("url", (value): value is string => typeof value === "string"); - -export const FileType = /* @__PURE__ */ defineConnectionPointType("file", (value): value is File => value instanceof File); - -export type GltfMeshCompressionOptions = Required>; - -const gltfMeshCompressionOptions = /* @__PURE__ */ Symbol("gltf-mesh-compression-options"); - -export function createGltfMeshCompressionOptions(options: GltfMeshCompressionOptions): GltfMeshCompressionOptions { - return Object.freeze(Object.defineProperty({ ...options }, gltfMeshCompressionOptions, { value: true })); -} - -export const GltfMeshCompressionOptionsType = /* @__PURE__ */ defineConnectionPointType( - "gltf-mesh-compression-options", - (value): value is GltfMeshCompressionOptions => typeof value === "object" && value !== null && gltfMeshCompressionOptions in value -); - -export const BabylonSceneType = /* @__PURE__ */ defineConnectionPointType( - "babylon-scene", - (value): value is BabylonScene => - typeof value === "object" && value !== null && "getEngine" in value && typeof value.getEngine === "function" && "dispose" in value && typeof value.dispose === "function" -); diff --git a/src/blocks/compressTexturesBlock.ts b/src/blocks/compressTexturesBlock.ts index 04aa5cb..14a3e4b 100644 --- a/src/blocks/compressTexturesBlock.ts +++ b/src/blocks/compressTexturesBlock.ts @@ -6,7 +6,7 @@ import type sharpFactory from "sharp"; import { Block } from "../block/block"; import { defineBlock } from "../block/blockDefinition"; -import { BabylonSceneType } from "../block/connectionPointType"; +import { BabylonSceneType } from "../connectionPoints/babylonScene"; type CompressTexturesBlockDefinition = ReturnType; diff --git a/src/blocks/dracoEncoderBlock.ts b/src/blocks/dracoEncoderBlock.ts index 4476237..fa2cf93 100644 --- a/src/blocks/dracoEncoderBlock.ts +++ b/src/blocks/dracoEncoderBlock.ts @@ -2,7 +2,7 @@ import type { IDracoCodecConfiguration } from "@babylonjs/core/Meshes/Compressio import { Block, type BlockOptions } from "../block/block"; import { defineSourceBlock } from "../block/blockDefinition"; -import { createGltfMeshCompressionOptions, GltfMeshCompressionOptionsType, type GltfMeshCompressionOptions } from "../block/connectionPointType"; +import { createGltfMeshCompressionOptions, GltfMeshCompressionOptionsType, type GltfMeshCompressionOptions } from "../connectionPoints/gltfMeshCompressionOptions"; const DracoEncoderBlockDefinition = /* @__PURE__ */ defineSourceBlock({ type: "input.draco-encoder", diff --git a/src/blocks/fbxInputBlock.ts b/src/blocks/fbxInputBlock.ts index d317634..a0ce574 100644 --- a/src/blocks/fbxInputBlock.ts +++ b/src/blocks/fbxInputBlock.ts @@ -1,6 +1,7 @@ import { Block, type BlockOptions } from "../block/block"; import { defineBlock } from "../block/blockDefinition"; -import { BabylonSceneType, UrlType } from "../block/connectionPointType"; +import { BabylonSceneType } from "../connectionPoints/babylonScene"; +import { UrlType } from "../connectionPoints/url"; import { NullEngineResource } from "../resources/nullEngineResource"; import { loadSingleFileSceneWithPluginAsync } from "../helpers/loadSceneWithPlugin"; diff --git a/src/blocks/gltfInputBlock.ts b/src/blocks/gltfInputBlock.ts index 41b5d9b..116bca2 100644 --- a/src/blocks/gltfInputBlock.ts +++ b/src/blocks/gltfInputBlock.ts @@ -1,6 +1,7 @@ import { Block, type BlockOptions } from "../block/block"; import { defineBlock } from "../block/blockDefinition"; -import { BabylonSceneType, UrlType } from "../block/connectionPointType"; +import { BabylonSceneType } from "../connectionPoints/babylonScene"; +import { UrlType } from "../connectionPoints/url"; import { NullEngineResource } from "../resources/nullEngineResource"; import { fetchAsDataUriAsync, loadSingleFileSceneWithPluginAsync } from "../helpers/loadSceneWithPlugin"; diff --git a/src/blocks/gltfOutputBlock.ts b/src/blocks/gltfOutputBlock.ts index 267f3c4..225a407 100644 --- a/src/blocks/gltfOutputBlock.ts +++ b/src/blocks/gltfOutputBlock.ts @@ -3,7 +3,9 @@ import type { Scene as BabylonScene } from "@babylonjs/core/scene.js"; import { Block, type BlockOptions, type InputPort } from "../block/block"; import { defineBlock } from "../block/blockDefinition"; -import { BabylonSceneType, FileType, GltfMeshCompressionOptionsType, type GltfMeshCompressionOptions } from "../block/connectionPointType"; +import { BabylonSceneType } from "../connectionPoints/babylonScene"; +import { FileType } from "../connectionPoints/file"; +import { GltfMeshCompressionOptionsType, type GltfMeshCompressionOptions } from "../connectionPoints/gltfMeshCompressionOptions"; const GltfOutputBlockDefinition = /* @__PURE__ */ defineBlock({ type: "output.gltf", diff --git a/src/blocks/objInputBlock.ts b/src/blocks/objInputBlock.ts index c46ac9e..f1bccde 100644 --- a/src/blocks/objInputBlock.ts +++ b/src/blocks/objInputBlock.ts @@ -3,7 +3,8 @@ import type { Scene as BabylonScene } from "@babylonjs/core/scene.js"; import { Block, type BlockOptions } from "../block/block"; import { defineBlock } from "../block/blockDefinition"; -import { BabylonSceneType, UrlType } from "../block/connectionPointType"; +import { BabylonSceneType } from "../connectionPoints/babylonScene"; +import { UrlType } from "../connectionPoints/url"; import { createDataUri, fetchOrThrowAsync, isHttpUrl, loadSceneWithPluginAsync } from "../helpers/loadSceneWithPlugin"; import { NullEngineResource } from "../resources/nullEngineResource"; diff --git a/src/blocks/stlInputBlock.ts b/src/blocks/stlInputBlock.ts index 845810b..e99a4dd 100644 --- a/src/blocks/stlInputBlock.ts +++ b/src/blocks/stlInputBlock.ts @@ -1,6 +1,7 @@ import { Block, type BlockOptions } from "../block/block"; import { defineBlock } from "../block/blockDefinition"; -import { BabylonSceneType, UrlType } from "../block/connectionPointType"; +import { BabylonSceneType } from "../connectionPoints/babylonScene"; +import { UrlType } from "../connectionPoints/url"; import { NullEngineResource } from "../resources/nullEngineResource"; import { loadSingleFileSceneWithPluginAsync } from "../helpers/loadSceneWithPlugin"; diff --git a/src/connectionPoints/babylonScene.ts b/src/connectionPoints/babylonScene.ts new file mode 100644 index 0000000..0a530b0 --- /dev/null +++ b/src/connectionPoints/babylonScene.ts @@ -0,0 +1,9 @@ +import type { Scene as BabylonScene } from "@babylonjs/core/scene.js"; + +import { defineConnectionPointType } from "./connectionPoint"; + +export const BabylonSceneType = /* @__PURE__ */ defineConnectionPointType( + "babylon-scene", + (value): value is BabylonScene => + typeof value === "object" && value !== null && "getEngine" in value && typeof value.getEngine === "function" && "dispose" in value && typeof value.dispose === "function" +); diff --git a/src/connectionPoints/connectionPoint.ts b/src/connectionPoints/connectionPoint.ts new file mode 100644 index 0000000..f028249 --- /dev/null +++ b/src/connectionPoints/connectionPoint.ts @@ -0,0 +1,13 @@ +declare const connectionPointData: unique symbol; + +export interface ConnectionPointType { + readonly id: string; + readonly [connectionPointData]: Payload; + is(value: unknown): value is Payload; +} + +export type ConnectionPointValue> = C extends ConnectionPointType ? TData : never; + +export function defineConnectionPointType

(id: string, isData: (value: unknown) => value is P): ConnectionPointType

{ + return Object.freeze({ id, is: isData }) as ConnectionPointType

; +} diff --git a/src/connectionPoints/file.ts b/src/connectionPoints/file.ts new file mode 100644 index 0000000..56d1743 --- /dev/null +++ b/src/connectionPoints/file.ts @@ -0,0 +1,3 @@ +import { defineConnectionPointType } from "./connectionPoint"; + +export const FileType = /* @__PURE__ */ defineConnectionPointType("file", (value): value is File => value instanceof File); diff --git a/src/connectionPoints/gltfMeshCompressionOptions.ts b/src/connectionPoints/gltfMeshCompressionOptions.ts new file mode 100644 index 0000000..d54f113 --- /dev/null +++ b/src/connectionPoints/gltfMeshCompressionOptions.ts @@ -0,0 +1,16 @@ +import type { IExportOptions } from "@babylonjs/serializers/glTF/2.0/glTFSerializer.js"; + +import { defineConnectionPointType } from "./connectionPoint"; + +export type GltfMeshCompressionOptions = Required>; + +const gltfMeshCompressionOptions = /* @__PURE__ */ Symbol("gltf-mesh-compression-options"); + +export function createGltfMeshCompressionOptions(options: GltfMeshCompressionOptions): GltfMeshCompressionOptions { + return Object.freeze(Object.defineProperty({ ...options }, gltfMeshCompressionOptions, { value: true })); +} + +export const GltfMeshCompressionOptionsType = /* @__PURE__ */ defineConnectionPointType( + "gltf-mesh-compression-options", + (value): value is GltfMeshCompressionOptions => typeof value === "object" && value !== null && gltfMeshCompressionOptions in value +); diff --git a/src/connectionPoints/url.ts b/src/connectionPoints/url.ts new file mode 100644 index 0000000..487c3e5 --- /dev/null +++ b/src/connectionPoints/url.ts @@ -0,0 +1,3 @@ +import { defineConnectionPointType } from "./connectionPoint"; + +export const UrlType = /* @__PURE__ */ defineConnectionPointType("url", (value): value is string => typeof value === "string"); diff --git a/src/index.ts b/src/index.ts index 0026289..da6630a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,6 @@ export { GltfInputBlock } from "./blocks/gltfInputBlock"; export { GltfOutputBlock, type GltfOutputBlockOptions } from "./blocks/gltfOutputBlock"; export { ObjInputBlock } from "./blocks/objInputBlock"; export { StlInputBlock } from "./blocks/stlInputBlock"; -export type { GltfMeshCompressionOptions } from "./block/connectionPointType"; +export type { GltfMeshCompressionOptions } from "./connectionPoints/gltfMeshCompressionOptions"; export { NodeAsset } from "./nodeAsset/nodeAsset"; export { NodeAssetContext } from "./nodeAsset/nodeAssetContext"; diff --git a/src/nodeAsset/nodeAsset.ts b/src/nodeAsset/nodeAsset.ts index 3318ff9..9056530 100644 --- a/src/nodeAsset/nodeAsset.ts +++ b/src/nodeAsset/nodeAsset.ts @@ -1,5 +1,5 @@ import type { _BlockRuntime } from "../block/block"; -import type { ConnectionPointValue } from "../block/connectionPointType"; +import type { ConnectionPointValue } from "../connectionPoints/connectionPoint"; import type { NodeAssetContext } from "./nodeAssetContext"; import { ResourceScope } from "../resources/resourceScope"; diff --git a/src/nodeAsset/nodeAssetContext.ts b/src/nodeAsset/nodeAssetContext.ts index 8918006..f0d52b4 100644 --- a/src/nodeAsset/nodeAssetContext.ts +++ b/src/nodeAsset/nodeAssetContext.ts @@ -1,6 +1,6 @@ import type { _BlockRuntime, Block } from "../block/block"; import type { _InputBlockDefinition } from "../block/blockDefinition"; -import type { ConnectionPointValue } from "../block/connectionPointType"; +import type { ConnectionPointValue } from "../connectionPoints/connectionPoint"; import type { NodeAsset } from "./nodeAsset"; type AnyBlock = _BlockRuntime; diff --git a/tests/helpers/numberBlocks.ts b/tests/helpers/numberBlocks.ts index 68d0af3..4f21786 100644 --- a/tests/helpers/numberBlocks.ts +++ b/tests/helpers/numberBlocks.ts @@ -1,5 +1,5 @@ import { defineBlock, enumValue } from "../../src/block/blockDefinition"; -import { defineConnectionPointType } from "../../src/block/connectionPointType"; +import { defineConnectionPointType } from "../../src/connectionPoints/connectionPoint"; export const NumberType = defineConnectionPointType("number", (value): value is number => typeof value === "number"); export const OtherNumberType = defineConnectionPointType("number", (value): value is number => typeof value === "number"); diff --git a/tests/integration/gltfOutput.test.ts b/tests/integration/gltfOutput.test.ts index 31e4a46..2c8ec8a 100644 --- a/tests/integration/gltfOutput.test.ts +++ b/tests/integration/gltfOutput.test.ts @@ -5,7 +5,7 @@ import { describe, expect, it } from "vitest"; import { Block } from "../../src/block/block"; import { defineBlock } from "../../src/block/blockDefinition"; -import { BabylonSceneType } from "../../src/block/connectionPointType"; +import { BabylonSceneType } from "../../src/connectionPoints/babylonScene"; import { GltfInputBlock, GltfOutputBlock, NodeAsset } from "../../src/index"; import { parseGlbAsync } from "../helpers/glb"; import { generateGltfDataUri, generateTexturedGltfDataUri } from "../helpers/gltf"; From 755e0b4b76986af6f25adafa0a05254829aff11a Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Fri, 11 Sep 2026 22:58:56 -0400 Subject: [PATCH 5/6] refactor: colocate block infrastructure Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/{block => blocks}/block.ts | 0 src/{block => blocks}/blockDefinition.ts | 0 src/blocks/compressTexturesBlock.ts | 4 ++-- src/blocks/dracoEncoderBlock.ts | 4 ++-- src/blocks/fbxInputBlock.ts | 4 ++-- src/blocks/gltfInputBlock.ts | 4 ++-- src/blocks/gltfOutputBlock.ts | 4 ++-- src/blocks/objInputBlock.ts | 4 ++-- src/blocks/stlInputBlock.ts | 4 ++-- src/nodeAsset/nodeAsset.ts | 2 +- src/nodeAsset/nodeAssetContext.ts | 4 ++-- tests/helpers/numberBlocks.ts | 2 +- tests/integration/gltfOutput.test.ts | 4 ++-- tests/unit/block.test.ts | 4 ++-- tests/unit/nodeAsset.test.ts | 4 ++-- 15 files changed, 24 insertions(+), 24 deletions(-) rename src/{block => blocks}/block.ts (100%) rename src/{block => blocks}/blockDefinition.ts (100%) diff --git a/src/block/block.ts b/src/blocks/block.ts similarity index 100% rename from src/block/block.ts rename to src/blocks/block.ts diff --git a/src/block/blockDefinition.ts b/src/blocks/blockDefinition.ts similarity index 100% rename from src/block/blockDefinition.ts rename to src/blocks/blockDefinition.ts diff --git a/src/blocks/compressTexturesBlock.ts b/src/blocks/compressTexturesBlock.ts index 14a3e4b..13a1a52 100644 --- a/src/blocks/compressTexturesBlock.ts +++ b/src/blocks/compressTexturesBlock.ts @@ -4,8 +4,8 @@ import type { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js"; import type { Scene as BabylonScene } from "@babylonjs/core/scene.js"; import type sharpFactory from "sharp"; -import { Block } from "../block/block"; -import { defineBlock } from "../block/blockDefinition"; +import { Block } from "./block"; +import { defineBlock } from "./blockDefinition"; import { BabylonSceneType } from "../connectionPoints/babylonScene"; type CompressTexturesBlockDefinition = ReturnType; diff --git a/src/blocks/dracoEncoderBlock.ts b/src/blocks/dracoEncoderBlock.ts index fa2cf93..cc69697 100644 --- a/src/blocks/dracoEncoderBlock.ts +++ b/src/blocks/dracoEncoderBlock.ts @@ -1,8 +1,8 @@ import type { IDracoCodecConfiguration } from "@babylonjs/core/Meshes/Compression/dracoCodec.js"; -import { Block, type BlockOptions } from "../block/block"; -import { defineSourceBlock } from "../block/blockDefinition"; import { createGltfMeshCompressionOptions, GltfMeshCompressionOptionsType, type GltfMeshCompressionOptions } from "../connectionPoints/gltfMeshCompressionOptions"; +import { Block, type BlockOptions } from "./block"; +import { defineSourceBlock } from "./blockDefinition"; const DracoEncoderBlockDefinition = /* @__PURE__ */ defineSourceBlock({ type: "input.draco-encoder", diff --git a/src/blocks/fbxInputBlock.ts b/src/blocks/fbxInputBlock.ts index a0ce574..6241444 100644 --- a/src/blocks/fbxInputBlock.ts +++ b/src/blocks/fbxInputBlock.ts @@ -1,8 +1,8 @@ -import { Block, type BlockOptions } from "../block/block"; -import { defineBlock } from "../block/blockDefinition"; import { BabylonSceneType } from "../connectionPoints/babylonScene"; import { UrlType } from "../connectionPoints/url"; import { NullEngineResource } from "../resources/nullEngineResource"; +import { Block, type BlockOptions } from "./block"; +import { defineBlock } from "./blockDefinition"; import { loadSingleFileSceneWithPluginAsync } from "../helpers/loadSceneWithPlugin"; const FbxInputBlockDefinition = /* @__PURE__ */ defineBlock({ diff --git a/src/blocks/gltfInputBlock.ts b/src/blocks/gltfInputBlock.ts index 116bca2..96a7e1b 100644 --- a/src/blocks/gltfInputBlock.ts +++ b/src/blocks/gltfInputBlock.ts @@ -1,8 +1,8 @@ -import { Block, type BlockOptions } from "../block/block"; -import { defineBlock } from "../block/blockDefinition"; import { BabylonSceneType } from "../connectionPoints/babylonScene"; import { UrlType } from "../connectionPoints/url"; import { NullEngineResource } from "../resources/nullEngineResource"; +import { Block, type BlockOptions } from "./block"; +import { defineBlock } from "./blockDefinition"; import { fetchAsDataUriAsync, loadSingleFileSceneWithPluginAsync } from "../helpers/loadSceneWithPlugin"; const GltfInputBlockDefinition = /* @__PURE__ */ defineBlock({ diff --git a/src/blocks/gltfOutputBlock.ts b/src/blocks/gltfOutputBlock.ts index 225a407..6a999be 100644 --- a/src/blocks/gltfOutputBlock.ts +++ b/src/blocks/gltfOutputBlock.ts @@ -1,11 +1,11 @@ import type { BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture.js"; import type { Scene as BabylonScene } from "@babylonjs/core/scene.js"; -import { Block, type BlockOptions, type InputPort } from "../block/block"; -import { defineBlock } from "../block/blockDefinition"; import { BabylonSceneType } from "../connectionPoints/babylonScene"; import { FileType } from "../connectionPoints/file"; import { GltfMeshCompressionOptionsType, type GltfMeshCompressionOptions } from "../connectionPoints/gltfMeshCompressionOptions"; +import { Block, type BlockOptions, type InputPort } from "./block"; +import { defineBlock } from "./blockDefinition"; const GltfOutputBlockDefinition = /* @__PURE__ */ defineBlock({ type: "output.gltf", diff --git a/src/blocks/objInputBlock.ts b/src/blocks/objInputBlock.ts index f1bccde..617542f 100644 --- a/src/blocks/objInputBlock.ts +++ b/src/blocks/objInputBlock.ts @@ -1,12 +1,12 @@ import type { BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture.js"; import type { Scene as BabylonScene } from "@babylonjs/core/scene.js"; -import { Block, type BlockOptions } from "../block/block"; -import { defineBlock } from "../block/blockDefinition"; import { BabylonSceneType } from "../connectionPoints/babylonScene"; import { UrlType } from "../connectionPoints/url"; import { createDataUri, fetchOrThrowAsync, isHttpUrl, loadSceneWithPluginAsync } from "../helpers/loadSceneWithPlugin"; import { NullEngineResource } from "../resources/nullEngineResource"; +import { Block, type BlockOptions } from "./block"; +import { defineBlock } from "./blockDefinition"; const MaximumConcurrentTextureFetches = 8; diff --git a/src/blocks/stlInputBlock.ts b/src/blocks/stlInputBlock.ts index e99a4dd..8c1c5f6 100644 --- a/src/blocks/stlInputBlock.ts +++ b/src/blocks/stlInputBlock.ts @@ -1,8 +1,8 @@ -import { Block, type BlockOptions } from "../block/block"; -import { defineBlock } from "../block/blockDefinition"; import { BabylonSceneType } from "../connectionPoints/babylonScene"; import { UrlType } from "../connectionPoints/url"; import { NullEngineResource } from "../resources/nullEngineResource"; +import { Block, type BlockOptions } from "./block"; +import { defineBlock } from "./blockDefinition"; import { loadSingleFileSceneWithPluginAsync } from "../helpers/loadSceneWithPlugin"; const StlInputBlockDefinition = /* @__PURE__ */ defineBlock({ diff --git a/src/nodeAsset/nodeAsset.ts b/src/nodeAsset/nodeAsset.ts index 9056530..094d034 100644 --- a/src/nodeAsset/nodeAsset.ts +++ b/src/nodeAsset/nodeAsset.ts @@ -1,4 +1,4 @@ -import type { _BlockRuntime } from "../block/block"; +import type { _BlockRuntime } from "../blocks/block"; import type { ConnectionPointValue } from "../connectionPoints/connectionPoint"; import type { NodeAssetContext } from "./nodeAssetContext"; import { ResourceScope } from "../resources/resourceScope"; diff --git a/src/nodeAsset/nodeAssetContext.ts b/src/nodeAsset/nodeAssetContext.ts index f0d52b4..4661c2f 100644 --- a/src/nodeAsset/nodeAssetContext.ts +++ b/src/nodeAsset/nodeAssetContext.ts @@ -1,5 +1,5 @@ -import type { _BlockRuntime, Block } from "../block/block"; -import type { _InputBlockDefinition } from "../block/blockDefinition"; +import type { _BlockRuntime, Block } from "../blocks/block"; +import type { _InputBlockDefinition } from "../blocks/blockDefinition"; import type { ConnectionPointValue } from "../connectionPoints/connectionPoint"; import type { NodeAsset } from "./nodeAsset"; diff --git a/tests/helpers/numberBlocks.ts b/tests/helpers/numberBlocks.ts index 4f21786..1240c68 100644 --- a/tests/helpers/numberBlocks.ts +++ b/tests/helpers/numberBlocks.ts @@ -1,4 +1,4 @@ -import { defineBlock, enumValue } from "../../src/block/blockDefinition"; +import { defineBlock, enumValue } from "../../src/blocks/blockDefinition"; import { defineConnectionPointType } from "../../src/connectionPoints/connectionPoint"; export const NumberType = defineConnectionPointType("number", (value): value is number => typeof value === "number"); diff --git a/tests/integration/gltfOutput.test.ts b/tests/integration/gltfOutput.test.ts index 2c8ec8a..7399bb9 100644 --- a/tests/integration/gltfOutput.test.ts +++ b/tests/integration/gltfOutput.test.ts @@ -3,8 +3,8 @@ import type { Texture } from "@babylonjs/core/Materials/Textures/texture.js"; import { describe, expect, it } from "vitest"; -import { Block } from "../../src/block/block"; -import { defineBlock } from "../../src/block/blockDefinition"; +import { Block } from "../../src/blocks/block"; +import { defineBlock } from "../../src/blocks/blockDefinition"; import { BabylonSceneType } from "../../src/connectionPoints/babylonScene"; import { GltfInputBlock, GltfOutputBlock, NodeAsset } from "../../src/index"; import { parseGlbAsync } from "../helpers/glb"; diff --git a/tests/unit/block.test.ts b/tests/unit/block.test.ts index 1cfcc90..14692b7 100644 --- a/tests/unit/block.test.ts +++ b/tests/unit/block.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import { Block } from "../../src/block/block"; -import { defineBlock, value } from "../../src/block/blockDefinition"; +import { Block } from "../../src/blocks/block"; +import { defineBlock, value } from "../../src/blocks/blockDefinition"; import { NodeAsset } from "../../src/nodeAsset/nodeAsset"; import { ScaleDefinition, NumberDefinition, OtherNumberDefinition, NumberType } from "../helpers/numberBlocks"; diff --git a/tests/unit/nodeAsset.test.ts b/tests/unit/nodeAsset.test.ts index 747a212..df03c48 100644 --- a/tests/unit/nodeAsset.test.ts +++ b/tests/unit/nodeAsset.test.ts @@ -1,7 +1,7 @@ import { describe, expect, expectTypeOf, it } from "vitest"; -import { Block } from "../../src/block/block"; -import { defineBlock, defineSourceBlock } from "../../src/block/blockDefinition"; +import { Block } from "../../src/blocks/block"; +import { defineBlock, defineSourceBlock } from "../../src/blocks/blockDefinition"; import { NodeAsset, NodeAssetContext } from "../../src/index"; import type { Resource } from "../../src/resources/resource"; import { ScaleDefinition, NumberDefinition } from "../helpers/numberBlocks"; From 2989324d7401ad989d5a8d933d300534d7eb500d Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Fri, 11 Sep 2026 23:01:26 -0400 Subject: [PATCH 6/6] refactor: flatten node asset modules Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/index.ts | 4 ++-- src/{nodeAsset => }/nodeAsset.ts | 6 +++--- src/{nodeAsset => }/nodeAssetContext.ts | 6 +++--- tests/unit/block.test.ts | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) rename src/{nodeAsset => }/nodeAsset.ts (97%) rename src/{nodeAsset => }/nodeAssetContext.ts (86%) diff --git a/src/index.ts b/src/index.ts index da6630a..370418c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,5 +6,5 @@ export { GltfOutputBlock, type GltfOutputBlockOptions } from "./blocks/gltfOutpu export { ObjInputBlock } from "./blocks/objInputBlock"; export { StlInputBlock } from "./blocks/stlInputBlock"; export type { GltfMeshCompressionOptions } from "./connectionPoints/gltfMeshCompressionOptions"; -export { NodeAsset } from "./nodeAsset/nodeAsset"; -export { NodeAssetContext } from "./nodeAsset/nodeAssetContext"; +export { NodeAsset } from "./nodeAsset"; +export { NodeAssetContext } from "./nodeAssetContext"; diff --git a/src/nodeAsset/nodeAsset.ts b/src/nodeAsset.ts similarity index 97% rename from src/nodeAsset/nodeAsset.ts rename to src/nodeAsset.ts index 094d034..a5305c0 100644 --- a/src/nodeAsset/nodeAsset.ts +++ b/src/nodeAsset.ts @@ -1,7 +1,7 @@ -import type { _BlockRuntime } from "../blocks/block"; -import type { ConnectionPointValue } from "../connectionPoints/connectionPoint"; +import type { _BlockRuntime } from "./blocks/block"; +import type { ConnectionPointValue } from "./connectionPoints/connectionPoint"; import type { NodeAssetContext } from "./nodeAssetContext"; -import { ResourceScope } from "../resources/resourceScope"; +import { ResourceScope } from "./resources/resourceScope"; type AnyBlock = _BlockRuntime; diff --git a/src/nodeAsset/nodeAssetContext.ts b/src/nodeAssetContext.ts similarity index 86% rename from src/nodeAsset/nodeAssetContext.ts rename to src/nodeAssetContext.ts index 4661c2f..ca6d054 100644 --- a/src/nodeAsset/nodeAssetContext.ts +++ b/src/nodeAssetContext.ts @@ -1,6 +1,6 @@ -import type { _BlockRuntime, Block } from "../blocks/block"; -import type { _InputBlockDefinition } from "../blocks/blockDefinition"; -import type { ConnectionPointValue } from "../connectionPoints/connectionPoint"; +import type { _BlockRuntime, Block } from "./blocks/block"; +import type { _InputBlockDefinition } from "./blocks/blockDefinition"; +import type { ConnectionPointValue } from "./connectionPoints/connectionPoint"; import type { NodeAsset } from "./nodeAsset"; type AnyBlock = _BlockRuntime; diff --git a/tests/unit/block.test.ts b/tests/unit/block.test.ts index 14692b7..c554b97 100644 --- a/tests/unit/block.test.ts +++ b/tests/unit/block.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from "vitest"; import { Block } from "../../src/blocks/block"; import { defineBlock, value } from "../../src/blocks/blockDefinition"; -import { NodeAsset } from "../../src/nodeAsset/nodeAsset"; +import { NodeAsset } from "../../src/nodeAsset"; import { ScaleDefinition, NumberDefinition, OtherNumberDefinition, NumberType } from "../helpers/numberBlocks"; describe("Block class", () => {