@machineblocks/render-target 0.0.0-stage → 0.1.1
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.
- package/blocks/com/machineblocks/bml/target/render/Library.bml +55 -0
- package/blocks/com/machineblocks/bml/target/render/README.bml +37 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/AssemblyPatterns.bml +47 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/CompositeRendering.bml +60 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/Customizer.bml +62 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/DomainBoundary.bml +43 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/ExpressionRenderer.bml +58 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/FileStructure.bml +42 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/FqnNaming.bml +85 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/HelperFunctions.bml +57 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/Imports.bml +49 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/Introduction.bml +43 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/LeafOptimization.bml +44 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/NativeMappings.bml +58 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/Presets.bml +50 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/PropertyRenderer.bml +50 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/RendererPipeline.bml +51 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/SerializationRules.bml +84 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/SetRendering.bml +77 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/SettingsFormat.bml +80 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/SourceMaps.bml +33 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/TargetRegistration.bml +61 -0
- package/blocks/com/machineblocks/bml/target/render/documentation/V1Scope.bml +44 -0
- package/dist/composite.d.ts +8 -0
- package/dist/composite.d.ts.map +1 -0
- package/dist/composite.js +232 -0
- package/dist/composite.js.map +1 -0
- package/dist/composition.d.ts +6 -0
- package/dist/composition.d.ts.map +1 -0
- package/dist/composition.js +40 -0
- package/dist/composition.js.map +1 -0
- package/dist/diagnostics.d.ts +22 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +29 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/dispatch.d.ts +13 -0
- package/dist/dispatch.d.ts.map +1 -0
- package/dist/dispatch.js +46 -0
- package/dist/dispatch.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/leaf.d.ts +4 -0
- package/dist/leaf.d.ts.map +1 -0
- package/dist/leaf.js +92 -0
- package/dist/leaf.js.map +1 -0
- package/dist/machineblocks-render-target.d.ts +14 -0
- package/dist/machineblocks-render-target.d.ts.map +1 -0
- package/dist/machineblocks-render-target.js +63 -0
- package/dist/machineblocks-render-target.js.map +1 -0
- package/dist/naming.d.ts +29 -0
- package/dist/naming.d.ts.map +1 -0
- package/dist/naming.js +120 -0
- package/dist/naming.js.map +1 -0
- package/dist/options.d.ts +8 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +26 -0
- package/dist/options.js.map +1 -0
- package/dist/paths.d.ts +6 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +55 -0
- package/dist/paths.js.map +1 -0
- package/dist/presets.d.ts +6 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +105 -0
- package/dist/presets.js.map +1 -0
- package/dist/processors.d.ts +24 -0
- package/dist/processors.d.ts.map +1 -0
- package/dist/processors.js +72 -0
- package/dist/processors.js.map +1 -0
- package/dist/serialize.d.ts +7 -0
- package/dist/serialize.d.ts.map +1 -0
- package/dist/serialize.js +42 -0
- package/dist/serialize.js.map +1 -0
- package/dist/set-file.d.ts +5 -0
- package/dist/set-file.d.ts.map +1 -0
- package/dist/set-file.js +199 -0
- package/dist/set-file.js.map +1 -0
- package/dist/source-map.d.ts +13 -0
- package/dist/source-map.d.ts.map +1 -0
- package/dist/source-map.js +41 -0
- package/dist/source-map.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +41 -4
- package/README.md +0 -3
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { selectProcessor } from "./dispatch.js";
|
|
2
|
+
import { MB_LIB_PATH_MISSING, NO_TARGET, RENDER_DOCUMENT_NOT_FOUND, SETTINGS_FORMAT_UNSUPPORTED, errorOutput, } from "./diagnostics.js";
|
|
3
|
+
import { isMappingFailure, mapManifestation, mappingFromPackages, pathForManifestation } from "./naming.js";
|
|
4
|
+
import { readTargetOptions } from "./options.js";
|
|
5
|
+
import { ScadBlockProcessor, ScadSetProcessor } from "./processors.js";
|
|
6
|
+
import { TARGET_NAME } from "./version.js";
|
|
7
|
+
export class MachineBlocksRenderTarget {
|
|
8
|
+
name = TARGET_NAME;
|
|
9
|
+
accepts = ["document"];
|
|
10
|
+
engine;
|
|
11
|
+
processors;
|
|
12
|
+
delegates = [];
|
|
13
|
+
options = { current: {}, mapping: { kind: "automatic" } };
|
|
14
|
+
constructor(engine) {
|
|
15
|
+
this.engine = engine;
|
|
16
|
+
this.processors = [new ScadSetProcessor(this.options), new ScadBlockProcessor(this.options)];
|
|
17
|
+
}
|
|
18
|
+
render(request, ctx) {
|
|
19
|
+
const options = readTargetOptions(request.targetOptions);
|
|
20
|
+
if (options.settingsFormat !== undefined && options.settingsFormat !== "pseudo-map") {
|
|
21
|
+
return errorOutput(SETTINGS_FORMAT_UNSUPPORTED, `settingsFormat ${options.settingsFormat} is not emitted in this slice.`, sourceOf(ctx));
|
|
22
|
+
}
|
|
23
|
+
if (!options.mbLibPath) {
|
|
24
|
+
return errorOutput(MB_LIB_PATH_MISSING, "targetOptions.machineblocks-v3-scad.mbLibPath is required.", sourceOf(ctx));
|
|
25
|
+
}
|
|
26
|
+
const document = findDocument(ctx.session.typeRegistry, ctx.session.sourceFilePath);
|
|
27
|
+
if (!document) {
|
|
28
|
+
return errorOutput(RENDER_DOCUMENT_NOT_FOUND, `No document for ${ctx.session.sourceFilePath}.`, sourceOf(ctx));
|
|
29
|
+
}
|
|
30
|
+
const processor = selectProcessor(document.block, ctx.session.typeRegistry, this);
|
|
31
|
+
if (!processor) {
|
|
32
|
+
return errorOutput(NO_TARGET, `No processor for ${document.block.type}.`, document.block.source ?? sourceOf(ctx));
|
|
33
|
+
}
|
|
34
|
+
const mapping = mappingFromPackages(options.sourcePackage, options.targetPackage);
|
|
35
|
+
if (isMappingFailure(mapping)) {
|
|
36
|
+
return errorOutput(mapping.code, mapping.message, document.block.source ?? sourceOf(ctx));
|
|
37
|
+
}
|
|
38
|
+
const manifested = mapManifestation(document.block.type, mapping, "selected");
|
|
39
|
+
if (!manifested.ok) {
|
|
40
|
+
return errorOutput(manifested.code, manifested.message, document.block.source ?? sourceOf(ctx));
|
|
41
|
+
}
|
|
42
|
+
this.options.current = options;
|
|
43
|
+
this.options.mapping = mapping;
|
|
44
|
+
const blockContext = ctx.child({
|
|
45
|
+
blockFqn: document.block.type,
|
|
46
|
+
outputRelativePath: pathForManifestation(manifested.fqn, "scad"),
|
|
47
|
+
});
|
|
48
|
+
return processor.process(document.block, this.engine, blockContext);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function findDocument(registry, sourceFilePath) {
|
|
52
|
+
for (const fqn of registry.keys()) {
|
|
53
|
+
const document = registry.get(fqn);
|
|
54
|
+
if (document?.source.filePath === sourceFilePath) {
|
|
55
|
+
return document;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
function sourceOf(ctx) {
|
|
61
|
+
return { file: ctx.session.sourceFilePath, line: 1, column: 1 };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=machineblocks-render-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machineblocks-render-target.js","sourceRoot":"","sources":["../src/machineblocks-render-target.ts"],"names":[],"mappings":"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"}
|
package/dist/naming.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type ManifestationRole = "selected" | "reference";
|
|
2
|
+
export type ManifestationMapping = {
|
|
3
|
+
kind: "automatic";
|
|
4
|
+
} | {
|
|
5
|
+
kind: "explicit";
|
|
6
|
+
sourcePackage: string;
|
|
7
|
+
targetPackage: string;
|
|
8
|
+
};
|
|
9
|
+
export type ManifestationSuccess = {
|
|
10
|
+
ok: true;
|
|
11
|
+
fqn: string;
|
|
12
|
+
};
|
|
13
|
+
export type ManifestationFailure = {
|
|
14
|
+
ok: false;
|
|
15
|
+
code: string;
|
|
16
|
+
message: string;
|
|
17
|
+
};
|
|
18
|
+
export type ManifestationResult = ManifestationSuccess | ManifestationFailure;
|
|
19
|
+
export declare const AUTOMATIC_MAPPING: ManifestationMapping;
|
|
20
|
+
export declare function mappingFromPackages(sourcePackage: string | undefined, targetPackage: string | undefined): ManifestationMapping | ManifestationFailure;
|
|
21
|
+
export declare function isMappingFailure(value: ManifestationMapping | ManifestationFailure): value is ManifestationFailure;
|
|
22
|
+
export declare function mapManifestation(definitionFqn: string, mapping?: ManifestationMapping, role?: ManifestationRole): ManifestationResult;
|
|
23
|
+
export declare function moduleNameForManifestation(manifestationFqn: string): string;
|
|
24
|
+
export declare function pathForManifestation(manifestationFqn: string, extension: "scad" | "json"): string;
|
|
25
|
+
export declare function scadModuleName(definitionFqn: string, mapping?: ManifestationMapping): string;
|
|
26
|
+
/** Path relative to srcDir. The class name is the file, not an extra directory. */
|
|
27
|
+
export declare function scadOutputPath(definitionFqn: string, mapping?: ManifestationMapping): string;
|
|
28
|
+
export declare function jsonOutputPath(definitionFqn: string, mapping?: ManifestationMapping): string;
|
|
29
|
+
//# sourceMappingURL=naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzD,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAE9E,eAAO,MAAM,iBAAiB,EAAE,oBAA4C,CAAC;AAE7E,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,oBAAoB,GAAG,oBAAoB,CAmB7C;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,GACjD,KAAK,IAAI,oBAAoB,CAE/B;AAED,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,oBAAwC,EACjD,IAAI,GAAE,iBAA8B,GACnC,mBAAmB,CAgBrB;AAED,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,wBAAgB,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEjG;AAED,wBAAgB,cAAc,CAC5B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,oBAAwC,GAChD,MAAM,CAER;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAC5B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,oBAAwC,GAChD,MAAM,CAER;AAED,wBAAgB,cAAc,CAC5B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,oBAAwC,GAChD,MAAM,CAER"}
|
package/dist/naming.js
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { SOURCE_OUTSIDE_ROOT, SOURCE_PACKAGE_ALONE, SOURCE_PACKAGE_REQUIRED, TARGET_PACKAGE_AMBIGUOUS, TARGET_PACKAGE_UNDETERMINED, } from "./diagnostics.js";
|
|
2
|
+
export const AUTOMATIC_MAPPING = { kind: "automatic" };
|
|
3
|
+
export function mappingFromPackages(sourcePackage, targetPackage) {
|
|
4
|
+
if (sourcePackage !== undefined && targetPackage !== undefined) {
|
|
5
|
+
return { kind: "explicit", sourcePackage, targetPackage };
|
|
6
|
+
}
|
|
7
|
+
if (sourcePackage !== undefined) {
|
|
8
|
+
return {
|
|
9
|
+
ok: false,
|
|
10
|
+
code: SOURCE_PACKAGE_ALONE,
|
|
11
|
+
message: "--source-package requires --target-package.",
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
if (targetPackage !== undefined) {
|
|
15
|
+
return {
|
|
16
|
+
ok: false,
|
|
17
|
+
code: SOURCE_PACKAGE_REQUIRED,
|
|
18
|
+
message: "--target-package needs --source-package. The source root is not determined.",
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return AUTOMATIC_MAPPING;
|
|
22
|
+
}
|
|
23
|
+
export function isMappingFailure(value) {
|
|
24
|
+
return "ok" in value;
|
|
25
|
+
}
|
|
26
|
+
export function mapManifestation(definitionFqn, mapping = AUTOMATIC_MAPPING, role = "selected") {
|
|
27
|
+
if (mapping.kind === "explicit") {
|
|
28
|
+
const relative = relativeToPackage(definitionFqn, mapping.sourcePackage);
|
|
29
|
+
if (relative !== undefined) {
|
|
30
|
+
const fqn = relative.length === 0 ? mapping.targetPackage : `${mapping.targetPackage}.${relative}`;
|
|
31
|
+
return { ok: true, fqn };
|
|
32
|
+
}
|
|
33
|
+
if (role === "selected") {
|
|
34
|
+
return {
|
|
35
|
+
ok: false,
|
|
36
|
+
code: SOURCE_OUTSIDE_ROOT,
|
|
37
|
+
message: `${definitionFqn} is outside source package ${mapping.sourcePackage}.`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return mapAutomatic(definitionFqn);
|
|
42
|
+
}
|
|
43
|
+
export function moduleNameForManifestation(manifestationFqn) {
|
|
44
|
+
return `mb__${manifestationFqn.split(".").join("__")}`;
|
|
45
|
+
}
|
|
46
|
+
export function pathForManifestation(manifestationFqn, extension) {
|
|
47
|
+
return `${manifestationFqn.split(".").join("/")}.${extension}`;
|
|
48
|
+
}
|
|
49
|
+
export function scadModuleName(definitionFqn, mapping = AUTOMATIC_MAPPING) {
|
|
50
|
+
return moduleNameForManifestation(requireManifestation(definitionFqn, mapping));
|
|
51
|
+
}
|
|
52
|
+
/** Path relative to srcDir. The class name is the file, not an extra directory. */
|
|
53
|
+
export function scadOutputPath(definitionFqn, mapping = AUTOMATIC_MAPPING) {
|
|
54
|
+
return pathForManifestation(requireManifestation(definitionFqn, mapping), "scad");
|
|
55
|
+
}
|
|
56
|
+
export function jsonOutputPath(definitionFqn, mapping = AUTOMATIC_MAPPING) {
|
|
57
|
+
return pathForManifestation(requireManifestation(definitionFqn, mapping), "json");
|
|
58
|
+
}
|
|
59
|
+
function requireManifestation(definitionFqn, mapping) {
|
|
60
|
+
const mapped = mapManifestation(definitionFqn, mapping, "selected");
|
|
61
|
+
if (!mapped.ok) {
|
|
62
|
+
throw new Error(`${mapped.code}: ${mapped.message}`);
|
|
63
|
+
}
|
|
64
|
+
return mapped.fqn;
|
|
65
|
+
}
|
|
66
|
+
function mapAutomatic(definitionFqn) {
|
|
67
|
+
const parts = definitionFqn.split(".");
|
|
68
|
+
const indexes = parts.flatMap((part, index) => (part === "bml" ? [index] : []));
|
|
69
|
+
if (indexes.length === 0) {
|
|
70
|
+
return {
|
|
71
|
+
ok: false,
|
|
72
|
+
code: TARGET_PACKAGE_UNDETERMINED,
|
|
73
|
+
message: [
|
|
74
|
+
"Cannot determine target package for:",
|
|
75
|
+
definitionFqn,
|
|
76
|
+
"",
|
|
77
|
+
"No 'bml' package segment was found.",
|
|
78
|
+
"",
|
|
79
|
+
"Specify --target-package and, if necessary,",
|
|
80
|
+
"--source-package.",
|
|
81
|
+
].join("\n"),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
if (indexes.length > 1) {
|
|
85
|
+
return {
|
|
86
|
+
ok: false,
|
|
87
|
+
code: TARGET_PACKAGE_AMBIGUOUS,
|
|
88
|
+
message: [
|
|
89
|
+
"Cannot determine target package for:",
|
|
90
|
+
definitionFqn,
|
|
91
|
+
"",
|
|
92
|
+
"The package contains more than one 'bml' segment.",
|
|
93
|
+
"",
|
|
94
|
+
"Specify --source-package and --target-package.",
|
|
95
|
+
].join("\n"),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const index = indexes[0];
|
|
99
|
+
if (index === undefined) {
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
code: TARGET_PACKAGE_UNDETERMINED,
|
|
103
|
+
message: `Cannot determine target package for:\n${definitionFqn}`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const mapped = [...parts];
|
|
107
|
+
mapped[index] = "scad";
|
|
108
|
+
return { ok: true, fqn: mapped.join(".") };
|
|
109
|
+
}
|
|
110
|
+
function relativeToPackage(fqn, sourcePackage) {
|
|
111
|
+
if (fqn === sourcePackage) {
|
|
112
|
+
return "";
|
|
113
|
+
}
|
|
114
|
+
const prefix = `${sourcePackage}.`;
|
|
115
|
+
if (fqn.startsWith(prefix)) {
|
|
116
|
+
return fqn.slice(prefix.length);
|
|
117
|
+
}
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface MachineBlocksTargetOptions {
|
|
2
|
+
mbLibPath?: string;
|
|
3
|
+
settingsFormat?: string;
|
|
4
|
+
sourcePackage?: string;
|
|
5
|
+
targetPackage?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function readTargetOptions(targetOptions: unknown): MachineBlocksTargetOptions;
|
|
8
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,OAAO,GAAG,0BAA0B,CAuBpF"}
|
package/dist/options.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { TARGET_NAME } from "./version.js";
|
|
2
|
+
export function readTargetOptions(targetOptions) {
|
|
3
|
+
if (targetOptions === null || typeof targetOptions !== "object") {
|
|
4
|
+
return {};
|
|
5
|
+
}
|
|
6
|
+
const nested = targetOptions[TARGET_NAME];
|
|
7
|
+
if (nested === null || typeof nested !== "object") {
|
|
8
|
+
return {};
|
|
9
|
+
}
|
|
10
|
+
const record = nested;
|
|
11
|
+
const options = {};
|
|
12
|
+
if (typeof record.mbLibPath === "string") {
|
|
13
|
+
options.mbLibPath = record.mbLibPath;
|
|
14
|
+
}
|
|
15
|
+
if (typeof record.settingsFormat === "string") {
|
|
16
|
+
options.settingsFormat = record.settingsFormat;
|
|
17
|
+
}
|
|
18
|
+
if (typeof record.sourcePackage === "string" && record.sourcePackage.length > 0) {
|
|
19
|
+
options.sourcePackage = record.sourcePackage;
|
|
20
|
+
}
|
|
21
|
+
if (typeof record.targetPackage === "string" && record.targetPackage.length > 0) {
|
|
22
|
+
options.targetPackage = record.targetPackage;
|
|
23
|
+
}
|
|
24
|
+
return options;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAS3C,MAAM,UAAU,iBAAiB,CAAC,aAAsB;IACtD,IAAI,aAAa,KAAK,IAAI,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAI,aAAyC,CAAC,WAAW,CAAC,CAAC;IACvE,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChF,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChF,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function joinPosix(base: string, relative: string): string;
|
|
2
|
+
/** Directory of a posix path. Absolute paths stay absolute. */
|
|
3
|
+
export declare function dirnamePosix(path: string): string;
|
|
4
|
+
/** Relative posix path from `fromDir` to `toPath`. Both must be absolute or both relative. */
|
|
5
|
+
export declare function relativePosix(fromDir: string, toPath: string): string;
|
|
6
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AA0BA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAerE"}
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
function splitPath(path) {
|
|
2
|
+
const absolute = path.startsWith("/");
|
|
3
|
+
const parts = [];
|
|
4
|
+
for (const part of path.split("/")) {
|
|
5
|
+
if (part === "" || part === ".") {
|
|
6
|
+
continue;
|
|
7
|
+
}
|
|
8
|
+
if (part === "..") {
|
|
9
|
+
const previous = parts[parts.length - 1];
|
|
10
|
+
if (previous !== undefined && previous !== "..") {
|
|
11
|
+
parts.pop();
|
|
12
|
+
}
|
|
13
|
+
else if (!absolute) {
|
|
14
|
+
parts.push("..");
|
|
15
|
+
}
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
parts.push(part);
|
|
19
|
+
}
|
|
20
|
+
return { absolute, parts };
|
|
21
|
+
}
|
|
22
|
+
export function joinPosix(base, relative) {
|
|
23
|
+
if (relative.startsWith("/")) {
|
|
24
|
+
return relative;
|
|
25
|
+
}
|
|
26
|
+
if (base === "" || base === ".") {
|
|
27
|
+
return relative;
|
|
28
|
+
}
|
|
29
|
+
return `${base.replace(/\/+$/, "")}/${relative.replace(/^\/+/, "")}`;
|
|
30
|
+
}
|
|
31
|
+
/** Directory of a posix path. Absolute paths stay absolute. */
|
|
32
|
+
export function dirnamePosix(path) {
|
|
33
|
+
const { absolute, parts } = splitPath(path);
|
|
34
|
+
const parent = parts.slice(0, -1);
|
|
35
|
+
if (absolute) {
|
|
36
|
+
return `/${parent.join("/")}`;
|
|
37
|
+
}
|
|
38
|
+
return parent.join("/") || ".";
|
|
39
|
+
}
|
|
40
|
+
/** Relative posix path from `fromDir` to `toPath`. Both must be absolute or both relative. */
|
|
41
|
+
export function relativePosix(fromDir, toPath) {
|
|
42
|
+
const from = splitPath(fromDir);
|
|
43
|
+
const to = splitPath(toPath);
|
|
44
|
+
let shared = 0;
|
|
45
|
+
while (shared < from.parts.length &&
|
|
46
|
+
shared < to.parts.length &&
|
|
47
|
+
from.parts[shared] === to.parts[shared]) {
|
|
48
|
+
shared += 1;
|
|
49
|
+
}
|
|
50
|
+
const ups = from.parts.length - shared;
|
|
51
|
+
const rest = to.parts.slice(shared);
|
|
52
|
+
const parts = [...Array(ups).fill(".."), ...rest];
|
|
53
|
+
return parts.join("/") || ".";
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BlockDefinition } from "@blockml/bom";
|
|
2
|
+
import type { RenderContext, RenderOutput } from "@blockml/compiler";
|
|
3
|
+
type Registry = RenderContext["session"]["typeRegistry"];
|
|
4
|
+
export declare function renderPresetFile(block: BlockDefinition, registry: Registry, outputRelativePath: string): RenderOutput;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKrE,KAAK,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC;AAEzD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,GAAG,YAAY,CAmCrH"}
|
package/dist/presets.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { compositionChildren } from "./composition.js";
|
|
2
|
+
import { PRESET_CYCLE, errorOutput } from "./diagnostics.js";
|
|
3
|
+
import { presetParameterValue } from "./serialize.js";
|
|
4
|
+
export function renderPresetFile(block, registry, outputRelativePath) {
|
|
5
|
+
const instances = compositionChildren(block, "presets").flatMap((child) => child.kind === "blockInstance" ? [child.instance] : []);
|
|
6
|
+
const byId = new Map();
|
|
7
|
+
for (const instance of instances) {
|
|
8
|
+
const id = literalString(instance.id);
|
|
9
|
+
if (id) {
|
|
10
|
+
byId.set(id, instance);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const parameterSets = {};
|
|
14
|
+
for (const instance of instances) {
|
|
15
|
+
const merged = mergePreset(instance, byId, []);
|
|
16
|
+
if (isFailure(merged)) {
|
|
17
|
+
return merged;
|
|
18
|
+
}
|
|
19
|
+
const name = literalString(instance.memberValues.name) ?? literalString(instance.id) ?? "preset";
|
|
20
|
+
const defaults = defaultsFor(instance.typeFqn, registry);
|
|
21
|
+
const values = {};
|
|
22
|
+
for (const [key, value] of Object.entries(merged)) {
|
|
23
|
+
if (key === "name" || key === "basePresets") {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (defaults.get(key) === value) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
values[key] = value;
|
|
30
|
+
}
|
|
31
|
+
parameterSets[name] = values;
|
|
32
|
+
}
|
|
33
|
+
const content = `${JSON.stringify({ fileFormatVersion: "1", parameterSets }, null, 2)}\n`;
|
|
34
|
+
return {
|
|
35
|
+
files: [{ path: outputRelativePath.replace(/\.scad$/, ".json"), content }],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function mergePreset(instance, byId, stack) {
|
|
39
|
+
const id = literalString(instance.id) ?? "";
|
|
40
|
+
if (id && stack.includes(id)) {
|
|
41
|
+
return errorOutput(PRESET_CYCLE, `Preset cycle at ${id}.`, instance.source ?? { file: "", line: 1, column: 1 });
|
|
42
|
+
}
|
|
43
|
+
const nextStack = id ? [...stack, id] : stack;
|
|
44
|
+
const merged = {};
|
|
45
|
+
for (const baseId of presetIds(instance.memberValues.basePresets)) {
|
|
46
|
+
const base = byId.get(baseId);
|
|
47
|
+
if (!base) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const resolved = mergePreset(base, byId, nextStack);
|
|
51
|
+
if (isFailure(resolved)) {
|
|
52
|
+
return resolved;
|
|
53
|
+
}
|
|
54
|
+
Object.assign(merged, resolved);
|
|
55
|
+
}
|
|
56
|
+
for (const [key, member] of Object.entries(instance.memberValues)) {
|
|
57
|
+
if (key === "basePresets" || member.kind !== "literal") {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const text = presetParameterValue(member);
|
|
61
|
+
if (text !== undefined) {
|
|
62
|
+
merged[key] = text;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return merged;
|
|
66
|
+
}
|
|
67
|
+
function defaultsFor(typeFqn, registry) {
|
|
68
|
+
const defaults = new Map();
|
|
69
|
+
const definition = registry.get(typeFqn)?.block;
|
|
70
|
+
if (!definition) {
|
|
71
|
+
return defaults;
|
|
72
|
+
}
|
|
73
|
+
for (const member of definition.members) {
|
|
74
|
+
if (member.kind !== "property" || !member.value || member.value.kind !== "literal") {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const text = presetParameterValue(member.value);
|
|
78
|
+
if (text !== undefined) {
|
|
79
|
+
defaults.set(member.name, text);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return defaults;
|
|
83
|
+
}
|
|
84
|
+
function presetIds(value) {
|
|
85
|
+
if (!value || value.kind !== "literal") {
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
if (typeof value.value === "string") {
|
|
89
|
+
return [value.value];
|
|
90
|
+
}
|
|
91
|
+
if (Array.isArray(value.value) && value.value.every((item) => typeof item === "string")) {
|
|
92
|
+
return value.value;
|
|
93
|
+
}
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
function literalString(value) {
|
|
97
|
+
if (!value || value.kind !== "literal" || typeof value.value !== "string") {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
return value.value;
|
|
101
|
+
}
|
|
102
|
+
function isFailure(value) {
|
|
103
|
+
return "files" in value;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { RenderContext, RenderOutput } from "@blockml/compiler";
|
|
2
|
+
import type { BlockProcessor, CompileBlock, RenderEngine } from "@blockml/block-render-engine";
|
|
3
|
+
import type { ManifestationMapping } from "./naming.js";
|
|
4
|
+
import type { MachineBlocksTargetOptions } from "./options.js";
|
|
5
|
+
/** Reads options captured for the current render call. */
|
|
6
|
+
export interface OptionSlot {
|
|
7
|
+
current: MachineBlocksTargetOptions;
|
|
8
|
+
mapping: ManifestationMapping;
|
|
9
|
+
}
|
|
10
|
+
export declare class ScadSetProcessor implements BlockProcessor {
|
|
11
|
+
private readonly options;
|
|
12
|
+
readonly baseType = "com.machineblocks.bml.core.Set";
|
|
13
|
+
constructor(options: OptionSlot);
|
|
14
|
+
process(block: CompileBlock, engine: RenderEngine, context: RenderContext): RenderOutput;
|
|
15
|
+
compile(block: CompileBlock, context: RenderContext): RenderOutput;
|
|
16
|
+
}
|
|
17
|
+
export declare class ScadBlockProcessor implements BlockProcessor {
|
|
18
|
+
private readonly options;
|
|
19
|
+
readonly baseType = "com.machineblocks.bml.core.Block";
|
|
20
|
+
constructor(options: OptionSlot);
|
|
21
|
+
process(block: CompileBlock, engine: RenderEngine, context: RenderContext): RenderOutput;
|
|
22
|
+
compile(block: CompileBlock, context: RenderContext): RenderOutput;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=processors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processors.d.ts","sourceRoot":"","sources":["../src/processors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAW/F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAK/D,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,0BAA0B,CAAC;IACpC,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED,qBAAa,gBAAiB,YAAW,cAAc;IAGzC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,QAAQ,oCAAW;gBAEC,OAAO,EAAE,UAAU;IAEhD,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY;IAIxF,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY;CAmBnE;AAED,qBAAa,kBAAmB,YAAW,cAAc;IAG3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,QAAQ,sCAAa;gBAED,OAAO,EAAE,UAAU;IAEhD,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY;IAIxF,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY;CAgCnE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { compositionChildren, hasDirectives } from "./composition.js";
|
|
2
|
+
import { renderCompositeFile } from "./composite.js";
|
|
3
|
+
import { DIRECTIVE_DEFERRED, EMPTY_BLOCK, LEAF_VALUE_UNSUPPORTED, MB_LIB_PATH_MISSING, errorOutput, } from "./diagnostics.js";
|
|
4
|
+
import { renderLeafFile } from "./leaf.js";
|
|
5
|
+
import { renderPresetFile } from "./presets.js";
|
|
6
|
+
import { renderSetFile } from "./set-file.js";
|
|
7
|
+
import { BLOCK_FQN, NATIVE_BLOCK_FQN, SET_FQN } from "./version.js";
|
|
8
|
+
export class ScadSetProcessor {
|
|
9
|
+
options;
|
|
10
|
+
baseType = SET_FQN;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.options = options;
|
|
13
|
+
}
|
|
14
|
+
process(block, engine, context) {
|
|
15
|
+
return engine.compile(block, this, context);
|
|
16
|
+
}
|
|
17
|
+
compile(block, context) {
|
|
18
|
+
if (!isDefinition(block)) {
|
|
19
|
+
return errorOutput(LEAF_VALUE_UNSUPPORTED, "ScadSetProcessor compiles a block definition.", blockSource(block));
|
|
20
|
+
}
|
|
21
|
+
const mbLibPath = this.options.current.mbLibPath;
|
|
22
|
+
if (!mbLibPath) {
|
|
23
|
+
return errorOutput(MB_LIB_PATH_MISSING, "targetOptions.machineblocks-v3-scad.mbLibPath is required.", blockSource(block));
|
|
24
|
+
}
|
|
25
|
+
if (hasDirectives(block)) {
|
|
26
|
+
return errorOutput(DIRECTIVE_DEFERRED, "bml:each, bml:if, and bml:with are not expanded in this implementation.", blockSource(block));
|
|
27
|
+
}
|
|
28
|
+
return renderSetFile(block, context.outputRelativePath, context.session.outputBasePath, mbLibPath, this.options.mapping);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class ScadBlockProcessor {
|
|
32
|
+
options;
|
|
33
|
+
baseType = BLOCK_FQN;
|
|
34
|
+
constructor(options) {
|
|
35
|
+
this.options = options;
|
|
36
|
+
}
|
|
37
|
+
process(block, engine, context) {
|
|
38
|
+
return engine.compile(block, this, context);
|
|
39
|
+
}
|
|
40
|
+
compile(block, context) {
|
|
41
|
+
if (!isDefinition(block)) {
|
|
42
|
+
return errorOutput(LEAF_VALUE_UNSUPPORTED, "ScadBlockProcessor compiles a block definition.", blockSource(block));
|
|
43
|
+
}
|
|
44
|
+
const mbLibPath = this.options.current.mbLibPath;
|
|
45
|
+
if (!mbLibPath) {
|
|
46
|
+
return errorOutput(MB_LIB_PATH_MISSING, "targetOptions.machineblocks-v3-scad.mbLibPath is required.", blockSource(block));
|
|
47
|
+
}
|
|
48
|
+
if (hasDirectives(block)) {
|
|
49
|
+
return errorOutput(DIRECTIVE_DEFERRED, "bml:each, bml:if, and bml:with are not expanded in this implementation.", blockSource(block));
|
|
50
|
+
}
|
|
51
|
+
const parts = compositionChildren(block, "parts");
|
|
52
|
+
const presets = compositionChildren(block, "presets");
|
|
53
|
+
if (presets.length > 0 && parts.length === 0) {
|
|
54
|
+
return renderPresetFile(block, context.session.typeRegistry, context.outputRelativePath);
|
|
55
|
+
}
|
|
56
|
+
if (parts.length === 0) {
|
|
57
|
+
return errorOutput(EMPTY_BLOCK, "A block with no children has nothing to render.", blockSource(block));
|
|
58
|
+
}
|
|
59
|
+
const only = parts.length === 1 ? parts[0] : undefined;
|
|
60
|
+
if (only?.kind === "blockInstance" && only.instance.typeFqn === NATIVE_BLOCK_FQN) {
|
|
61
|
+
return renderLeafFile(block, context.outputRelativePath, context.session.outputBasePath, mbLibPath);
|
|
62
|
+
}
|
|
63
|
+
return renderCompositeFile(block, context.outputRelativePath, context.session.outputBasePath, mbLibPath, context.session.typeRegistry, this.options.mapping);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function isDefinition(block) {
|
|
67
|
+
return "members" in block;
|
|
68
|
+
}
|
|
69
|
+
function blockSource(block) {
|
|
70
|
+
return block.source ?? { file: "", line: 1, column: 1 };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=processors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processors.js","sourceRoot":"","sources":["../src/processors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQpE,MAAM,OAAO,gBAAgB;IAGE;IAFpB,QAAQ,GAAG,OAAO,CAAC;IAE5B,YAA6B,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;IAAG,CAAC;IAEpD,OAAO,CAAC,KAAmB,EAAE,MAAoB,EAAE,OAAsB;QACvE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,KAAmB,EAAE,OAAsB;QACjD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC,sBAAsB,EAAE,+CAA+C,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAClH,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QACjD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,mBAAmB,EAAE,4DAA4D,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5H,CAAC;QACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC,kBAAkB,EAAE,yEAAyE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACxI,CAAC;QACD,OAAO,aAAa,CAClB,KAAK,EACL,OAAO,CAAC,kBAAkB,EAC1B,OAAO,CAAC,OAAO,CAAC,cAAc,EAC9B,SAAS,EACT,IAAI,CAAC,OAAO,CAAC,OAAO,CACrB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAGA;IAFpB,QAAQ,GAAG,SAAS,CAAC;IAE9B,YAA6B,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;IAAG,CAAC;IAEpD,OAAO,CAAC,KAAmB,EAAE,MAAoB,EAAE,OAAsB;QACvE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,KAAmB,EAAE,OAAsB;QACjD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC,sBAAsB,EAAE,iDAAiD,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACpH,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QACjD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,mBAAmB,EAAE,4DAA4D,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5H,CAAC;QACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC,kBAAkB,EAAE,yEAAyE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACxI,CAAC;QACD,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,WAAW,CAAC,WAAW,EAAE,iDAAiD,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACzG,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,IAAI,IAAI,EAAE,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACjF,OAAO,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,mBAAmB,CACxB,KAAK,EACL,OAAO,CAAC,kBAAkB,EAC1B,OAAO,CAAC,OAAO,CAAC,cAAc,EAC9B,SAAS,EACT,OAAO,CAAC,OAAO,CAAC,YAAY,EAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CACrB,CAAC;IACJ,CAAC;CACF;AAED,SAAS,YAAY,CAAC,KAAmB;IACvC,OAAO,SAAS,IAAI,KAAK,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,KAAmB;IACtC,OAAO,KAAK,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LiteralValue } from "@blockml/bom";
|
|
2
|
+
export declare function isIdentifier(raw: string): boolean;
|
|
3
|
+
export declare function scadString(value: string): string;
|
|
4
|
+
/** Customizer JSON stores every value as a string. Strings stay unquoted. */
|
|
5
|
+
export declare function presetParameterValue(value: LiteralValue): string | undefined;
|
|
6
|
+
export declare function serializeLiteral(value: LiteralValue): string | undefined;
|
|
7
|
+
//# sourceMappingURL=serialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAY5E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAYxE"}
|