@machineblocks/render-target 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/blocks/com/machineblocks/bml/target/render/Library.bml +55 -0
  2. package/blocks/com/machineblocks/bml/target/render/README.bml +37 -0
  3. package/blocks/com/machineblocks/bml/target/render/documentation/AssemblyPatterns.bml +47 -0
  4. package/blocks/com/machineblocks/bml/target/render/documentation/CompositeRendering.bml +60 -0
  5. package/blocks/com/machineblocks/bml/target/render/documentation/Customizer.bml +62 -0
  6. package/blocks/com/machineblocks/bml/target/render/documentation/DomainBoundary.bml +43 -0
  7. package/blocks/com/machineblocks/bml/target/render/documentation/ExpressionRenderer.bml +58 -0
  8. package/blocks/com/machineblocks/bml/target/render/documentation/FileStructure.bml +42 -0
  9. package/blocks/com/machineblocks/bml/target/render/documentation/FqnNaming.bml +85 -0
  10. package/blocks/com/machineblocks/bml/target/render/documentation/HelperFunctions.bml +57 -0
  11. package/blocks/com/machineblocks/bml/target/render/documentation/Imports.bml +49 -0
  12. package/blocks/com/machineblocks/bml/target/render/documentation/Introduction.bml +43 -0
  13. package/blocks/com/machineblocks/bml/target/render/documentation/LeafOptimization.bml +44 -0
  14. package/blocks/com/machineblocks/bml/target/render/documentation/NativeMappings.bml +58 -0
  15. package/blocks/com/machineblocks/bml/target/render/documentation/Presets.bml +50 -0
  16. package/blocks/com/machineblocks/bml/target/render/documentation/PropertyRenderer.bml +50 -0
  17. package/blocks/com/machineblocks/bml/target/render/documentation/RendererPipeline.bml +51 -0
  18. package/blocks/com/machineblocks/bml/target/render/documentation/SerializationRules.bml +84 -0
  19. package/blocks/com/machineblocks/bml/target/render/documentation/SetRendering.bml +77 -0
  20. package/blocks/com/machineblocks/bml/target/render/documentation/SettingsFormat.bml +80 -0
  21. package/blocks/com/machineblocks/bml/target/render/documentation/SourceMaps.bml +33 -0
  22. package/blocks/com/machineblocks/bml/target/render/documentation/TargetRegistration.bml +61 -0
  23. package/blocks/com/machineblocks/bml/target/render/documentation/V1Scope.bml +44 -0
  24. package/dist/composite.d.ts +8 -0
  25. package/dist/composite.d.ts.map +1 -0
  26. package/dist/composite.js +232 -0
  27. package/dist/composite.js.map +1 -0
  28. package/dist/composition.d.ts +6 -0
  29. package/dist/composition.d.ts.map +1 -0
  30. package/dist/composition.js +40 -0
  31. package/dist/composition.js.map +1 -0
  32. package/dist/diagnostics.d.ts +22 -0
  33. package/dist/diagnostics.d.ts.map +1 -0
  34. package/dist/diagnostics.js +29 -0
  35. package/dist/diagnostics.js.map +1 -0
  36. package/dist/dispatch.d.ts +13 -0
  37. package/dist/dispatch.d.ts.map +1 -0
  38. package/dist/dispatch.js +46 -0
  39. package/dist/dispatch.js.map +1 -0
  40. package/dist/index.d.ts +10 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +8 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/leaf.d.ts +4 -0
  45. package/dist/leaf.d.ts.map +1 -0
  46. package/dist/leaf.js +92 -0
  47. package/dist/leaf.js.map +1 -0
  48. package/dist/machineblocks-render-target.d.ts +14 -0
  49. package/dist/machineblocks-render-target.d.ts.map +1 -0
  50. package/dist/machineblocks-render-target.js +63 -0
  51. package/dist/machineblocks-render-target.js.map +1 -0
  52. package/dist/naming.d.ts +29 -0
  53. package/dist/naming.d.ts.map +1 -0
  54. package/dist/naming.js +120 -0
  55. package/dist/naming.js.map +1 -0
  56. package/dist/options.d.ts +8 -0
  57. package/dist/options.d.ts.map +1 -0
  58. package/dist/options.js +26 -0
  59. package/dist/options.js.map +1 -0
  60. package/dist/paths.d.ts +6 -0
  61. package/dist/paths.d.ts.map +1 -0
  62. package/dist/paths.js +55 -0
  63. package/dist/paths.js.map +1 -0
  64. package/dist/presets.d.ts +6 -0
  65. package/dist/presets.d.ts.map +1 -0
  66. package/dist/presets.js +105 -0
  67. package/dist/presets.js.map +1 -0
  68. package/dist/processors.d.ts +24 -0
  69. package/dist/processors.d.ts.map +1 -0
  70. package/dist/processors.js +72 -0
  71. package/dist/processors.js.map +1 -0
  72. package/dist/serialize.d.ts +7 -0
  73. package/dist/serialize.d.ts.map +1 -0
  74. package/dist/serialize.js +42 -0
  75. package/dist/serialize.js.map +1 -0
  76. package/dist/set-file.d.ts +5 -0
  77. package/dist/set-file.d.ts.map +1 -0
  78. package/dist/set-file.js +199 -0
  79. package/dist/set-file.js.map +1 -0
  80. package/dist/source-map.d.ts +13 -0
  81. package/dist/source-map.d.ts.map +1 -0
  82. package/dist/source-map.js +41 -0
  83. package/dist/source-map.js.map +1 -0
  84. package/dist/version.d.ts +8 -0
  85. package/dist/version.d.ts.map +1 -0
  86. package/dist/version.js +8 -0
  87. package/dist/version.js.map +1 -0
  88. package/package.json +41 -4
  89. package/README.md +0 -3
@@ -0,0 +1,232 @@
1
+ import { compositionChildren } from "./composition.js";
2
+ import { LEAF_VALUE_UNSUPPORTED, errorOutput } from "./diagnostics.js";
3
+ import { dirnamePosix, joinPosix, relativePosix } from "./paths.js";
4
+ import { mapManifestation, moduleNameForManifestation } from "./naming.js";
5
+ import { isIdentifier, serializeLiteral } from "./serialize.js";
6
+ import { withSourceMap } from "./source-map.js";
7
+ import { NATIVE_BLOCK_FQN, RENDER_TARGET_VERSION } from "./version.js";
8
+ export function renderCompositeFile(block, outputRelativePath, outputBasePath, mbLibPath, registry, mapping) {
9
+ const source = block.source ?? { file: "", line: 1, column: 1 };
10
+ const children = compositionChildren(block, "parts").flatMap((child) => child.kind === "blockInstance" ? [child.instance] : []);
11
+ const nativeNames = nativePropertyNames(registry);
12
+ const properties = block.members.filter((member) => member.kind === "property");
13
+ const root = mapManifestation(block.type, mapping, "selected");
14
+ if (!root.ok) {
15
+ return errorOutput(root.code, root.message, source);
16
+ }
17
+ const moduleName = moduleNameForManifestation(root.fqn);
18
+ const filename = outputRelativePath.split("/").pop() ?? `${block.name}.scad`;
19
+ const outputDir = dirnamePosix(joinPosix(outputBasePath, outputRelativePath));
20
+ const blockImport = relativePosix(outputDir, joinPosix(mbLibPath, "lib/block.scad"));
21
+ const configImport = relativePosix(outputDir, joinPosix(mbLibPath, "config/mb_config.scad"));
22
+ const childBlocks = [];
23
+ const partRows = [];
24
+ let partsHaveSize = children.length > 0;
25
+ for (const child of children) {
26
+ const partId = literalText(child.id);
27
+ if (!partId || !isIdentifier(`part_${partId}`)) {
28
+ return errorOutput(LEAF_VALUE_UNSUPPORTED, "A composite child needs an identifier id.", child.source ?? source);
29
+ }
30
+ const settings = [
31
+ { parameter: "id", expression: `mb_block_id(blockId, part_${partId})` },
32
+ { parameter: "render", expression: `mb_group_render(renderGroups, group_${partId})` },
33
+ ];
34
+ for (const [parameter, member] of Object.entries(child.memberValues)) {
35
+ const expression = childExpression(block, partId, parameter, member, source);
36
+ if (typeof expression !== "string") {
37
+ return expression;
38
+ }
39
+ settings.push({ parameter, expression });
40
+ }
41
+ childBlocks.push(childRegion(partId, settings));
42
+ const sizeLiteral = child.memberValues.size;
43
+ if (sizeLiteral?.kind === "literal" && serializeLiteral(sizeLiteral)) {
44
+ const direction = literalText(child.memberValues.direction) ?? "west";
45
+ const offset = sizeLiteral && child.memberValues.offset?.kind === "literal"
46
+ ? serializeLiteral(child.memberValues.offset) ?? "[0, 0, 0]"
47
+ : "[0, 0, 0]";
48
+ partRows.push(` ["${partId}", ${serializeLiteral(sizeLiteral)}, "${direction}", ${offset}]`);
49
+ }
50
+ else {
51
+ partsHaveSize = false;
52
+ }
53
+ }
54
+ const declaresSize = properties.some((property) => property.name === "size");
55
+ const partsLine = !declaresSize && partsHaveSize
56
+ ? ` parts = [\n${partRows.join(",\n")}\n ];\n size = mb_parts_total_size(parts);\n`
57
+ : "";
58
+ const content = `${header(block, filename)}
59
+ /* Imports */
60
+ use <${blockImport}>;
61
+ include <${configImport}>;
62
+
63
+ /* Customization */
64
+ ${customizerLines(properties)}
65
+
66
+ /* Main Module Call */
67
+ ${moduleName}(
68
+ config = mb_config,
69
+ settings = [${settingsBody(properties.map((property) => ` ["${property.name}", ${property.name}]`))}]
70
+ );
71
+
72
+ /* Main Module Definition */
73
+ module ${moduleName}(config = undef, settings = undef) {
74
+ ${propertyGetters(properties, nativeNames)}
75
+ blockId = mb_param_id(config, settings, "${block.type}");
76
+ ${fixedGetters(properties)}
77
+ assembly = mb_assembly(config, settings, size, direction);
78
+ renderGroups = mb_param_renderGroups(config, settings);
79
+ ${partsLine} mb_block(
80
+ config = config,
81
+ settings = [
82
+ ["id", blockId],
83
+ ["base", false],
84
+ ["studs", false],
85
+ ["size", size],
86
+ ["align", align],
87
+ ["offset", offset],
88
+ ["direction", direction]
89
+ ]
90
+ ) {
91
+ ${childBlocks.join("\n")}
92
+ }
93
+ }
94
+
95
+ /* Optional Sub Modules */
96
+ /* Optional Helper Modules */
97
+ /* Optional Global Functions */
98
+ `;
99
+ return { files: [withSourceMap(block, { path: outputRelativePath, content })] };
100
+ }
101
+ function childExpression(block, partId, parameter, member, source) {
102
+ const group = `group_${partId}`;
103
+ const namespace = `ns_${partId}`;
104
+ if (member.kind === "expression") {
105
+ if (!isIdentifier(member.raw)) {
106
+ return errorOutput(LEAF_VALUE_UNSUPPORTED, `Parameter ${parameter} must be a property reference or a literal.`, member.source ?? source);
107
+ }
108
+ const variable = member.raw.trim();
109
+ if (parameter === "offset") {
110
+ return `mb_assembly_offset(${variable}, assembly, renderGroups, ${group})`;
111
+ }
112
+ if (parameter === "baseAdjustment") {
113
+ return `mb_params_filter(${variable}, ${namespace})`;
114
+ }
115
+ if (parameter === "baseCutoutType" && propertyDefaultText(block, variable) === "groove") {
116
+ return `mb_assembly_groove(assembly, renderGroups, ${group})`;
117
+ }
118
+ if (parameter === "tongue" && propertyDefaultText(block, variable) === "true") {
119
+ return `mb_assembly_tongue(assembly, renderGroups, ${group})`;
120
+ }
121
+ return variable;
122
+ }
123
+ if (member.kind !== "literal") {
124
+ return errorOutput(LEAF_VALUE_UNSUPPORTED, `Parameter ${parameter} is not a literal.`, source);
125
+ }
126
+ if (parameter === "baseCutoutType" && member.value === "groove") {
127
+ return `mb_assembly_groove(assembly, renderGroups, ${group})`;
128
+ }
129
+ if (parameter === "tongue" && member.value === true) {
130
+ return `mb_assembly_tongue(assembly, renderGroups, ${group})`;
131
+ }
132
+ if (parameter === "offset") {
133
+ const literal = serializeLiteral(member);
134
+ if (!literal) {
135
+ return errorOutput(LEAF_VALUE_UNSUPPORTED, "offset cannot be serialized.", source);
136
+ }
137
+ return `mb_assembly_offset(${literal}, assembly, renderGroups, ${group})`;
138
+ }
139
+ if (parameter === "baseAdjustment") {
140
+ const literal = serializeLiteral(member);
141
+ if (!literal) {
142
+ return errorOutput(LEAF_VALUE_UNSUPPORTED, "baseAdjustment cannot be serialized.", source);
143
+ }
144
+ return literal;
145
+ }
146
+ const literal = serializeLiteral(member);
147
+ if (!literal) {
148
+ return errorOutput(LEAF_VALUE_UNSUPPORTED, `Parameter ${parameter} cannot be serialized.`, source);
149
+ }
150
+ return literal;
151
+ }
152
+ function childRegion(partId, settings) {
153
+ const body = settings
154
+ .map((setting) => ` ["${setting.parameter}", ${setting.expression}]`)
155
+ .join(",\n");
156
+ return ` part_${partId} = "${partId}";
157
+ group_${partId} = part_${partId};
158
+ ns_${partId} = part_${partId};
159
+ mb_block(
160
+ config = config,
161
+ settings = [
162
+ ${body}
163
+ ]
164
+ );`;
165
+ }
166
+ function propertyGetters(properties, nativeNames) {
167
+ return properties
168
+ .map((property) => {
169
+ const fallback = property.value?.kind === "literal" ? serializeLiteral(property.value) : undefined;
170
+ const suffix = fallback === undefined ? "" : `, ${fallback}`;
171
+ if (nativeNames.has(property.name)) {
172
+ return ` ${property.name} = mb_param_${property.name}(config, settings${suffix});`;
173
+ }
174
+ return ` ${property.name} = mb_param(config, settings, "${property.name}"${suffix});`;
175
+ })
176
+ .join("\n");
177
+ }
178
+ function fixedGetters(properties) {
179
+ const declared = new Set(properties.map((property) => property.name));
180
+ return ["size", "align", "offset", "direction"]
181
+ .filter((name) => !declared.has(name))
182
+ .map((name) => ` ${name} = mb_param_${name}(config, settings);`)
183
+ .join("\n");
184
+ }
185
+ function customizerLines(properties) {
186
+ return properties
187
+ .map((property) => {
188
+ const value = property.value?.kind === "literal" ? serializeLiteral(property.value) : undefined;
189
+ return value === undefined ? undefined : `${property.name} = ${value};`;
190
+ })
191
+ .filter((line) => line !== undefined)
192
+ .join("\n");
193
+ }
194
+ function settingsBody(lines) {
195
+ if (lines.length === 0) {
196
+ return "";
197
+ }
198
+ return `\n${lines.join(",\n")}\n `;
199
+ }
200
+ function propertyDefaultText(block, name) {
201
+ const property = block.members.find((member) => member.kind === "property" && member.name === name);
202
+ if (!property?.value || property.value.kind !== "literal") {
203
+ return undefined;
204
+ }
205
+ return String(property.value.value);
206
+ }
207
+ function literalText(value) {
208
+ if (!value || value.kind !== "literal" || typeof value.value !== "string") {
209
+ return undefined;
210
+ }
211
+ return value.value;
212
+ }
213
+ export function nativePropertyNames(registry) {
214
+ const names = new Set();
215
+ for (const member of registry.get(NATIVE_BLOCK_FQN)?.block.members ?? []) {
216
+ if (member.kind === "property") {
217
+ names.add(member.name);
218
+ }
219
+ }
220
+ return names;
221
+ }
222
+ function header(block, filename) {
223
+ return `/**
224
+ * MachineBlocks.com Block File
225
+ *
226
+ * Name: ${block.name}
227
+ * Filename: ${filename}
228
+ * Package: ${block.type}
229
+ * Generated by: machineblocks-render-target (${RENDER_TARGET_VERSION})
230
+ */`;
231
+ }
232
+ //# sourceMappingURL=composite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composite.js","sourceRoot":"","sources":["../src/composite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { BlockDefinition, CompositionNode } from "@blockml/bom";
2
+ export declare function compositionChildren(block: BlockDefinition, aggregationName: string): CompositionNode[];
3
+ /** Preset-only blocks are JSON. Every other emitted block is SCAD. */
4
+ export declare function artifactExtension(block: BlockDefinition): "json" | "scad";
5
+ export declare function hasDirectives(block: BlockDefinition): boolean;
6
+ //# sourceMappingURL=composition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../src/composition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAErE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,GAAG,eAAe,EAAE,CAmBtG;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,CAIzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAY7D"}
@@ -0,0 +1,40 @@
1
+ export function compositionChildren(block, aggregationName) {
2
+ const children = [];
3
+ for (const composition of block.compositions) {
4
+ if (composition.aggregationName === aggregationName) {
5
+ children.push(...composition.children);
6
+ }
7
+ }
8
+ if (children.length > 0 || block.compositions.length > 0) {
9
+ return children;
10
+ }
11
+ if (aggregationName !== "parts") {
12
+ return children;
13
+ }
14
+ for (const member of block.members) {
15
+ if (member.kind === "aggregation" && member.name === aggregationName && member.composition) {
16
+ children.push(...member.composition.children);
17
+ }
18
+ }
19
+ return children;
20
+ }
21
+ /** Preset-only blocks are JSON. Every other emitted block is SCAD. */
22
+ export function artifactExtension(block) {
23
+ const presets = compositionChildren(block, "presets");
24
+ const parts = compositionChildren(block, "parts");
25
+ return presets.length > 0 && parts.length === 0 ? "json" : "scad";
26
+ }
27
+ export function hasDirectives(block) {
28
+ for (const composition of block.compositions) {
29
+ if (composition.directives && composition.directives.length > 0) {
30
+ return true;
31
+ }
32
+ for (const child of composition.children) {
33
+ if (child.directives && child.directives.length > 0) {
34
+ return true;
35
+ }
36
+ }
37
+ }
38
+ return false;
39
+ }
40
+ //# sourceMappingURL=composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.js","sourceRoot":"","sources":["../src/composition.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,KAAsB,EAAE,eAAuB;IACjF,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC7C,IAAI,WAAW,CAAC,eAAe,KAAK,eAAe,EAAE,CAAC;YACpD,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC3F,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,iBAAiB,CAAC,KAAsB;IACtD,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAsB;IAClD,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC7C,IAAI,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { SourceLocation } from "@blockml/bom";
2
+ import type { RenderOutput } from "@blockml/compiler";
3
+ export declare const NO_TARGET = "BML_NO_TARGET";
4
+ export declare const SETTINGS_FORMAT_UNSUPPORTED = "BML_SETTINGS_FORMAT_UNSUPPORTED";
5
+ export declare const MB_LIB_PATH_MISSING = "BML_MB_LIB_PATH_MISSING";
6
+ export declare const RENDER_DOCUMENT_NOT_FOUND = "BML_RENDER_DOCUMENT_NOT_FOUND";
7
+ export declare const LEAF_VALUE_UNSUPPORTED = "BML_LEAF_VALUE_UNSUPPORTED";
8
+ export declare const EMPTY_BLOCK = "MB_EMPTY_BLOCK";
9
+ export declare const DIRECTIVE_DEFERRED = "BML_DIRECTIVE_DEFERRED";
10
+ export declare const SET_PART_INCOMPLETE = "BML_SET_PART_INCOMPLETE";
11
+ export declare const PRESET_CYCLE = "BML_PRESET_CYCLE";
12
+ export declare const TARGET_PACKAGE_UNDETERMINED = "MB_TARGET_PACKAGE_UNDETERMINED";
13
+ export declare const TARGET_PACKAGE_AMBIGUOUS = "MB_TARGET_PACKAGE_AMBIGUOUS";
14
+ export declare const SOURCE_PACKAGE_ALONE = "MB_SOURCE_PACKAGE_ALONE";
15
+ export declare const SOURCE_PACKAGE_REQUIRED = "MB_SOURCE_PACKAGE_REQUIRED";
16
+ export declare const SOURCE_OUTSIDE_ROOT = "MB_SOURCE_OUTSIDE_ROOT";
17
+ export declare const TARGET_COLLISION = "MB_TARGET_COLLISION";
18
+ export declare const OUTPUT_ESCAPES_SRC = "MB_OUTPUT_ESCAPES_SRC";
19
+ export declare const OUTPUT_OVERWRITES_BML = "MB_OUTPUT_OVERWRITES_BML";
20
+ export declare const SELECTOR_EMPTY = "MB_SELECTOR_EMPTY";
21
+ export declare function errorOutput(code: string, message: string, source?: SourceLocation): RenderOutput;
22
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,SAAS,kBAAkB,CAAC;AACzC,eAAO,MAAM,2BAA2B,oCAAoC,CAAC;AAC7E,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAC7D,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AACzE,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AACnE,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAC5C,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAC7D,eAAO,MAAM,YAAY,qBAAqB,CAAC;AAC/C,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAC5E,eAAO,MAAM,wBAAwB,gCAAgC,CAAC;AACtE,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAC9D,eAAO,MAAM,uBAAuB,+BAA+B,CAAC;AACpE,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AACtD,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAC1D,eAAO,MAAM,qBAAqB,6BAA6B,CAAC;AAChE,eAAO,MAAM,cAAc,sBAAsB,CAAC;AAElD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,cAA6B,GACpC,YAAY,CAQd"}
@@ -0,0 +1,29 @@
1
+ const EMPTY_SOURCE = { file: "", line: 1, column: 1 };
2
+ export const NO_TARGET = "BML_NO_TARGET";
3
+ export const SETTINGS_FORMAT_UNSUPPORTED = "BML_SETTINGS_FORMAT_UNSUPPORTED";
4
+ export const MB_LIB_PATH_MISSING = "BML_MB_LIB_PATH_MISSING";
5
+ export const RENDER_DOCUMENT_NOT_FOUND = "BML_RENDER_DOCUMENT_NOT_FOUND";
6
+ export const LEAF_VALUE_UNSUPPORTED = "BML_LEAF_VALUE_UNSUPPORTED";
7
+ export const EMPTY_BLOCK = "MB_EMPTY_BLOCK";
8
+ export const DIRECTIVE_DEFERRED = "BML_DIRECTIVE_DEFERRED";
9
+ export const SET_PART_INCOMPLETE = "BML_SET_PART_INCOMPLETE";
10
+ export const PRESET_CYCLE = "BML_PRESET_CYCLE";
11
+ export const TARGET_PACKAGE_UNDETERMINED = "MB_TARGET_PACKAGE_UNDETERMINED";
12
+ export const TARGET_PACKAGE_AMBIGUOUS = "MB_TARGET_PACKAGE_AMBIGUOUS";
13
+ export const SOURCE_PACKAGE_ALONE = "MB_SOURCE_PACKAGE_ALONE";
14
+ export const SOURCE_PACKAGE_REQUIRED = "MB_SOURCE_PACKAGE_REQUIRED";
15
+ export const SOURCE_OUTSIDE_ROOT = "MB_SOURCE_OUTSIDE_ROOT";
16
+ export const TARGET_COLLISION = "MB_TARGET_COLLISION";
17
+ export const OUTPUT_ESCAPES_SRC = "MB_OUTPUT_ESCAPES_SRC";
18
+ export const OUTPUT_OVERWRITES_BML = "MB_OUTPUT_OVERWRITES_BML";
19
+ export const SELECTOR_EMPTY = "MB_SELECTOR_EMPTY";
20
+ export function errorOutput(code, message, source = EMPTY_SOURCE) {
21
+ const diagnostic = {
22
+ severity: "error",
23
+ code,
24
+ message,
25
+ source,
26
+ };
27
+ return { files: [], diagnostics: [diagnostic] };
28
+ }
29
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAEtE,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;AACzC,MAAM,CAAC,MAAM,2BAA2B,GAAG,iCAAiC,CAAC;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAC7D,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAC5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAC7D,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAC/C,MAAM,CAAC,MAAM,2BAA2B,GAAG,gCAAgC,CAAC;AAC5E,MAAM,CAAC,MAAM,wBAAwB,GAAG,6BAA6B,CAAC;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAC9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AACpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAC1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAElD,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,OAAe,EACf,SAAyB,YAAY;IAErC,MAAM,UAAU,GAAe;QAC7B,QAAQ,EAAE,OAAO;QACjB,IAAI;QACJ,OAAO;QACP,MAAM;KACP,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { BlockDefinition } from "@blockml/bom";
2
+ import type { RenderContext } from "@blockml/compiler";
3
+ import type { BlockProcessor } from "@blockml/block-render-engine";
4
+ export interface DispatchTarget {
5
+ processors: readonly BlockProcessor[];
6
+ delegates: readonly DispatchTarget[];
7
+ }
8
+ /** Authored baseType FQNs, then ancestors loaded in the registry. Nearest type first. */
9
+ export declare function baseTypeChain(block: BlockDefinition, registry: RenderContext["session"]["typeRegistry"]): string[];
10
+ export declare function isRenderBlock(block: BlockDefinition, registry: RenderContext["session"]["typeRegistry"]): boolean;
11
+ /** Exact FQN, then the nearest baseType. Delegates use the same two steps. */
12
+ export declare function selectProcessor(block: BlockDefinition, registry: RenderContext["session"]["typeRegistry"], target: DispatchTarget): BlockProcessor | undefined;
13
+ //# sourceMappingURL=dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGnE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;IACtC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;CACtC;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,GAAG,MAAM,EAAE,CAUlH;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,GACjD,OAAO,CAGT;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS,CAa9J"}
@@ -0,0 +1,46 @@
1
+ import { BLOCK_FQN, SET_FQN } from "./version.js";
2
+ /** Authored baseType FQNs, then ancestors loaded in the registry. Nearest type first. */
3
+ export function baseTypeChain(block, registry) {
4
+ const chain = [block.type];
5
+ const seen = new Set([block.type]);
6
+ let base = block.baseType;
7
+ while (base !== undefined && !seen.has(base)) {
8
+ chain.push(base);
9
+ seen.add(base);
10
+ base = registry.get(base)?.block.baseType;
11
+ }
12
+ return chain;
13
+ }
14
+ export function isRenderBlock(block, registry) {
15
+ const chain = baseTypeChain(block, registry);
16
+ return chain.includes(BLOCK_FQN) || chain.includes(SET_FQN);
17
+ }
18
+ /** Exact FQN, then the nearest baseType. Delegates use the same two steps. */
19
+ export function selectProcessor(block, registry, target) {
20
+ const chain = baseTypeChain(block, registry);
21
+ const own = mostSpecific(chain, target.processors);
22
+ if (own) {
23
+ return own;
24
+ }
25
+ for (const delegate of target.delegates) {
26
+ const found = selectProcessor(block, registry, delegate);
27
+ if (found) {
28
+ return found;
29
+ }
30
+ }
31
+ return undefined;
32
+ }
33
+ function mostSpecific(chain, processors) {
34
+ let best;
35
+ for (const processor of processors) {
36
+ const index = chain.indexOf(processor.baseType);
37
+ if (index === -1) {
38
+ continue;
39
+ }
40
+ if (!best || index < best.index) {
41
+ best = { processor, index };
42
+ }
43
+ }
44
+ return best?.processor;
45
+ }
46
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAOlD,yFAAyF;AACzF,MAAM,UAAU,aAAa,CAAC,KAAsB,EAAE,QAAkD;IACtG,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1B,OAAO,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAsB,EACtB,QAAkD;IAElD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,KAAsB,EAAE,QAAkD,EAAE,MAAsB;IAChI,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,KAAwB,EAAE,UAAqC;IACnF,IAAI,IAA8D,CAAC;IACnE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,EAAE,SAAS,CAAC;AACzB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { MachineBlocksRenderTarget } from "./machineblocks-render-target.js";
2
+ export type { MachineBlocksTargetOptions } from "./options.js";
3
+ export { artifactExtension } from "./composition.js";
4
+ export { isRenderBlock } from "./dispatch.js";
5
+ export { AUTOMATIC_MAPPING, isMappingFailure, jsonOutputPath, mapManifestation, mappingFromPackages, moduleNameForManifestation, pathForManifestation, scadModuleName, scadOutputPath, } from "./naming.js";
6
+ export type { ManifestationMapping, ManifestationResult } from "./naming.js";
7
+ export { OUTPUT_ESCAPES_SRC, OUTPUT_OVERWRITES_BML, SELECTOR_EMPTY, SOURCE_OUTSIDE_ROOT, SOURCE_PACKAGE_ALONE, SOURCE_PACKAGE_REQUIRED, TARGET_COLLISION, TARGET_PACKAGE_AMBIGUOUS, TARGET_PACKAGE_UNDETERMINED, } from "./diagnostics.js";
8
+ export { serializeLiteral } from "./serialize.js";
9
+ export { RENDER_TARGET_VERSION } from "./version.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,YAAY,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { MachineBlocksRenderTarget } from "./machineblocks-render-target.js";
2
+ export { artifactExtension } from "./composition.js";
3
+ export { isRenderBlock } from "./dispatch.js";
4
+ export { AUTOMATIC_MAPPING, isMappingFailure, jsonOutputPath, mapManifestation, mappingFromPackages, moduleNameForManifestation, pathForManifestation, scadModuleName, scadOutputPath, } from "./naming.js";
5
+ export { OUTPUT_ESCAPES_SRC, OUTPUT_OVERWRITES_BML, SELECTOR_EMPTY, SOURCE_OUTSIDE_ROOT, SOURCE_PACKAGE_ALONE, SOURCE_PACKAGE_REQUIRED, TARGET_COLLISION, TARGET_PACKAGE_AMBIGUOUS, TARGET_PACKAGE_UNDETERMINED, } from "./diagnostics.js";
6
+ export { serializeLiteral } from "./serialize.js";
7
+ export { RENDER_TARGET_VERSION } from "./version.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
package/dist/leaf.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { BlockDefinition } from "@blockml/bom";
2
+ import type { RenderOutput } from "@blockml/compiler";
3
+ export declare function renderLeafFile(block: BlockDefinition, outputRelativePath: string, outputBasePath: string, mbLibPath: string): RenderOutput;
4
+ //# sourceMappingURL=leaf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaf.d.ts","sourceRoot":"","sources":["../src/leaf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAqD,MAAM,cAAc,CAAC;AACvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AActD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,YAAY,CA4Bd"}
package/dist/leaf.js ADDED
@@ -0,0 +1,92 @@
1
+ import { compositionChildren } from "./composition.js";
2
+ import { LEAF_VALUE_UNSUPPORTED, errorOutput } from "./diagnostics.js";
3
+ import { joinPosix, relativePosix, dirnamePosix } from "./paths.js";
4
+ import { isIdentifier, serializeLiteral } from "./serialize.js";
5
+ import { withSourceMap } from "./source-map.js";
6
+ import { NATIVE_BLOCK_FQN, RENDER_TARGET_VERSION } from "./version.js";
7
+ export function renderLeafFile(block, outputRelativePath, outputBasePath, mbLibPath) {
8
+ const source = block.source ?? { file: "", line: 1, column: 1 };
9
+ const child = singleNativeBlock(block);
10
+ if (!child) {
11
+ return errorOutput(LEAF_VALUE_UNSUPPORTED, "A leaf block needs exactly one NativeBlock child.", source);
12
+ }
13
+ const bindings = [];
14
+ for (const [parameter, member] of Object.entries(child.memberValues)) {
15
+ const binding = bindingFor(block, parameter, member, source);
16
+ if (!isLeafBinding(binding)) {
17
+ return binding;
18
+ }
19
+ bindings.push(binding);
20
+ }
21
+ const outputDir = dirnamePosix(joinPosix(outputBasePath, outputRelativePath));
22
+ const blockImport = relativePosix(outputDir, joinPosix(mbLibPath, "lib/block.scad"));
23
+ const configImport = relativePosix(outputDir, joinPosix(mbLibPath, "config/mb_config.scad"));
24
+ const filename = outputRelativePath.split("/").pop() ?? `${block.name}.scad`;
25
+ return {
26
+ files: [withSourceMap(block, { path: outputRelativePath, content: fileText(block, filename, blockImport, configImport, bindings) })],
27
+ };
28
+ }
29
+ function singleNativeBlock(block) {
30
+ const children = compositionChildren(block, "parts");
31
+ const only = children.length === 1 ? children[0] : undefined;
32
+ if (!only || only.kind !== "blockInstance") {
33
+ return undefined;
34
+ }
35
+ if (only.instance.typeFqn !== NATIVE_BLOCK_FQN) {
36
+ return undefined;
37
+ }
38
+ return only.instance;
39
+ }
40
+ function isLeafBinding(value) {
41
+ return "parameter" in value;
42
+ }
43
+ function bindingFor(block, parameter, member, source) {
44
+ if (member.kind !== "expression" || !isIdentifier(member.raw)) {
45
+ return errorOutput(LEAF_VALUE_UNSUPPORTED, `NativeBlock parameter ${parameter} must be a \${ property } reference in this slice.`, member.kind === "expression" ? (member.source ?? source) : source);
46
+ }
47
+ const variable = member.raw.trim();
48
+ const property = block.members.find((entry) => entry.kind === "property" && entry.name === variable);
49
+ if (!property?.value || property.value.kind !== "literal") {
50
+ return errorOutput(LEAF_VALUE_UNSUPPORTED, `Property ${variable} has no literal default.`, source);
51
+ }
52
+ const customizer = serializeLiteral(property.value);
53
+ if (customizer === undefined) {
54
+ return errorOutput(LEAF_VALUE_UNSUPPORTED, `Property ${variable} cannot be serialized in this slice.`, source);
55
+ }
56
+ return { parameter, variable, customizer };
57
+ }
58
+ function fileText(block, filename, blockImport, configImport, bindings) {
59
+ const settings = bindings
60
+ .map((binding) => ` ["${binding.parameter}", ${binding.variable}]`)
61
+ .join(",\n");
62
+ const customizer = bindings.map((binding) => `${binding.variable} = ${binding.customizer};`).join("\n");
63
+ const settingsBody = bindings.length === 0 ? "" : `\n${settings}\n `;
64
+ return `/**
65
+ * MachineBlocks.com Block File
66
+ *
67
+ * Name: ${block.name}
68
+ * Filename: ${filename}
69
+ * Package: ${block.type}
70
+ * Generated by: machineblocks-render-target (${RENDER_TARGET_VERSION})
71
+ */
72
+
73
+ /* Imports */
74
+ use <${blockImport}>;
75
+ include <${configImport}>;
76
+
77
+ /* Customization */
78
+ ${customizer}
79
+
80
+ /* Main Module Call */
81
+ mb_block(
82
+ config = mb_config,
83
+ settings = [${settingsBody}]
84
+ );
85
+
86
+ /* Main Module Definition */
87
+ /* Optional Sub Modules */
88
+ /* Optional Helper Modules */
89
+ /* Optional Global Functions */
90
+ `;
91
+ }
92
+ //# sourceMappingURL=leaf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaf.js","sourceRoot":"","sources":["../src/leaf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { CompileRequest, CompileScopeKind, RenderContext, RenderOutput, RenderTarget } from "@blockml/compiler";
2
+ import type { BlockProcessor, RenderEngine } from "@blockml/block-render-engine";
3
+ import { type DispatchTarget } from "./dispatch.js";
4
+ export declare class MachineBlocksRenderTarget implements RenderTarget, DispatchTarget {
5
+ readonly name = "machineblocks-v3-scad";
6
+ readonly accepts: CompileScopeKind[];
7
+ readonly engine: RenderEngine;
8
+ readonly processors: BlockProcessor[];
9
+ readonly delegates: DispatchTarget[];
10
+ private readonly options;
11
+ constructor(engine: RenderEngine);
12
+ render(request: CompileRequest, ctx: RenderContext): RenderOutput;
13
+ }
14
+ //# sourceMappingURL=machineblocks-render-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machineblocks-render-target.d.ts","sourceRoot":"","sources":["../src/machineblocks-render-target.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAarE,qBAAa,yBAA0B,YAAW,YAAY,EAAE,cAAc;IAC5E,QAAQ,CAAC,IAAI,2BAAe;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAgB;IACpD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,cAAc,EAAE,CAAM;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+D;gBAE3E,MAAM,EAAE,YAAY;IAKhC,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,aAAa,GAAG,YAAY;CAoDlE"}