altium-toolkit 1.1.41 → 1.2.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 (58) hide show
  1. package/README.md +113 -19
  2. package/docs/api.md +224 -18
  3. package/docs/capabilities.md +65 -0
  4. package/docs/migration/legacy-001.md +309 -0
  5. package/docs/migration/legacy-002.md +309 -0
  6. package/docs/migration/legacy-003.md +309 -0
  7. package/docs/migration/legacy-004.md +309 -0
  8. package/docs/migration/legacy-005.md +111 -0
  9. package/docs/migration.md +20 -0
  10. package/docs/model-format.md +28 -3
  11. package/docs/release-notes-v1.2.0.md +147 -0
  12. package/docs/testing.md +43 -1
  13. package/examples/arduino-uno/PcbThreeSceneRenderer.mjs +1 -1
  14. package/examples/arduino-uno/example.mjs +1 -1
  15. package/examples/cli-utils.mjs +1 -1
  16. package/examples/corpus-smoke.mjs +1 -1
  17. package/examples/inspect-board.mjs +1 -1
  18. package/examples/library-catalog.mjs +1 -1
  19. package/examples/validate-library.mjs +1 -1
  20. package/package.json +20 -5
  21. package/spec/api-baseline-v1.1.41.json +1 -0
  22. package/spec/asset-baseline-v1.1.41.json +1 -0
  23. package/spec/feature-preservation.json +1 -0
  24. package/spec/library-scope.md +14 -4
  25. package/spec/native-source-manifest-v1.1.41.json +1 -0
  26. package/src/capabilities.mjs +4 -0
  27. package/src/convergence/AltiumCircuitJsonProjection.mjs +230 -0
  28. package/src/convergence/AltiumDocumentBuilder.mjs +167 -0
  29. package/src/convergence/AltiumExtensionResolver.mjs +98 -0
  30. package/src/convergence/AltiumProjectDocumentResolver.mjs +324 -0
  31. package/src/convergence/AltiumSchematicCoordinateProjection.mjs +130 -0
  32. package/src/convergence/AltiumWorkerClient.mjs +95 -0
  33. package/src/convergence/Parser.mjs +285 -0
  34. package/src/convergence/ParserInput.mjs +282 -0
  35. package/src/convergence/ProjectLoader.mjs +916 -0
  36. package/src/convergence/SchematicSvgRenderer.mjs +126 -0
  37. package/src/convergence/ToolkitCapabilities.mjs +49 -0
  38. package/src/core/circuit-json/CircuitJsonSchematicDocumentGraphicBuilder.mjs +785 -0
  39. package/src/core/circuit-json/CircuitJsonSchematicGraphicBuilder.mjs +909 -0
  40. package/src/core/circuit-json/CircuitJsonSchematicImageProjection.mjs +277 -0
  41. package/src/core/circuit-json/CircuitJsonSchematicStrokeStyle.mjs +47 -0
  42. package/src/extensions.mjs +11 -0
  43. package/src/index.mjs +20 -4
  44. package/src/interaction.mjs +7 -0
  45. package/src/legacy-netlist-query.mjs +11 -0
  46. package/src/legacy-parser.mjs +141 -0
  47. package/src/legacy-renderers.mjs +25 -0
  48. package/src/legacy-scene3d.mjs +10 -0
  49. package/src/manufacturing.mjs +4 -0
  50. package/src/parser.mjs +12 -138
  51. package/src/project.mjs +11 -0
  52. package/src/query.mjs +4 -0
  53. package/src/renderers.mjs +4 -22
  54. package/src/scene3d.mjs +5 -8
  55. package/src/simulation.mjs +4 -0
  56. package/src/styles/renderers.css +27 -0
  57. package/src/testing.mjs +8 -0
  58. package/src/workers/parser.worker.mjs +37 -0
@@ -0,0 +1,277 @@
1
+ // SPDX-FileCopyrightText: 2026 André Fiedler
2
+ //
3
+ // SPDX-License-Identifier: GPL-3.0-or-later
4
+
5
+ import { CircuitJsonModelAdapterPrimitives } from './CircuitJsonModelAdapterPrimitives.mjs'
6
+
7
+ const Primitives = CircuitJsonModelAdapterPrimitives
8
+
9
+ /**
10
+ * Shares canonical schematic-image row, asset, and diagnostic identity.
11
+ */
12
+ export class CircuitJsonSchematicImageProjection {
13
+ /**
14
+ * Builds one asset-backed canonical image row.
15
+ * @param {Record<string, unknown>} image Native image placement.
16
+ * @param {number} index Native image index.
17
+ * @param {string} idScope Deterministic document id scope.
18
+ * @param {Map<string, string>} ownerIds Owner-to-component lookup.
19
+ * @returns {Record<string, unknown> | null}
20
+ */
21
+ static element(image, index, idScope, ownerIds) {
22
+ const bounds = CircuitJsonSchematicImageProjection.#bounds(image)
23
+ if (!bounds) return null
24
+ const sourcePath = String(image?.fileName || '').trim()
25
+ const row = {
26
+ type: 'schematic_image',
27
+ schematic_image_id: Primitives.id(idScope, [
28
+ 'schematic_image',
29
+ CircuitJsonSchematicImageProjection.#identity(image, index)
30
+ ]),
31
+ asset_id: CircuitJsonSchematicImageProjection.assetId(
32
+ image,
33
+ index,
34
+ idScope
35
+ ),
36
+ center: bounds.center,
37
+ size: bounds.size,
38
+ rotation: -(Primitives.number(image?.rotation, 0) || 0),
39
+ preserve_aspect_ratio: image?.keepAspect !== false,
40
+ render_order: CircuitJsonSchematicImageProjection.#renderOrder(
41
+ image,
42
+ index
43
+ ),
44
+ ...(sourcePath ? { source_path: sourcePath } : {}),
45
+ ...(sourcePath
46
+ ? {
47
+ source_name:
48
+ CircuitJsonSchematicImageProjection.#baseName(
49
+ sourcePath
50
+ )
51
+ }
52
+ : {})
53
+ }
54
+ const opacity = Primitives.number(image?.opacity, null)
55
+ if (opacity !== null && opacity >= 0 && opacity <= 1) {
56
+ row.opacity = opacity
57
+ }
58
+ const ownerId = ownerIds.get(String(image?.ownerIndex || ''))
59
+ if (ownerId) row.schematic_component_id = ownerId
60
+ return row
61
+ }
62
+
63
+ /**
64
+ * Builds canonical raw asset candidates for every valid native image.
65
+ * @param {Record<string, unknown>} model Native renderer model.
66
+ * @returns {Record<string, unknown>[]}
67
+ */
68
+ static assets(model) {
69
+ const sourceFormat = Primitives.sourceFormat(model)
70
+ const idScope = Primitives.idScope(model, sourceFormat)
71
+ return Primitives.array(model?.schematic?.images).flatMap(
72
+ (image, index) => {
73
+ if (!CircuitJsonSchematicImageProjection.#bounds(image)) {
74
+ return []
75
+ }
76
+ const sourcePath = String(image?.fileName || '').trim()
77
+ const name =
78
+ CircuitJsonSchematicImageProjection.#baseName(sourcePath) ||
79
+ `schematic-image-${index + 1}`
80
+ return [
81
+ {
82
+ id: CircuitJsonSchematicImageProjection.assetId(
83
+ image,
84
+ index,
85
+ idScope
86
+ ),
87
+ kind: 'schematic-image',
88
+ name,
89
+ mediaType:
90
+ CircuitJsonSchematicImageProjection.#mediaType(
91
+ image,
92
+ sourcePath
93
+ ),
94
+ data: CircuitJsonSchematicImageProjection.#payload(
95
+ image?.dataBase64
96
+ ),
97
+ source: {
98
+ format: 'altium',
99
+ path: sourcePath,
100
+ embedded: image?.embedded === true,
101
+ state: String(image?.diagnosticState || '')
102
+ }
103
+ }
104
+ ]
105
+ }
106
+ )
107
+ }
108
+
109
+ /**
110
+ * Builds diagnostics for image placements that cannot render exactly.
111
+ * @param {Record<string, unknown>} model Native renderer model.
112
+ * @returns {Record<string, unknown>[]}
113
+ */
114
+ static diagnostics(model) {
115
+ return Primitives.array(model?.schematic?.images).flatMap(
116
+ (image, index) => {
117
+ const sourcePath = String(image?.fileName || '').trim()
118
+ if (!CircuitJsonSchematicImageProjection.#bounds(image)) {
119
+ return [
120
+ {
121
+ severity: 'warning',
122
+ code: 'altium.schematic.image.geometry-invalid',
123
+ message:
124
+ 'Schematic image geometry is empty or invalid for ' +
125
+ (sourcePath || `image ${index + 1}`) +
126
+ '.'
127
+ }
128
+ ]
129
+ }
130
+ if (
131
+ CircuitJsonSchematicImageProjection.#payload(
132
+ image?.dataBase64
133
+ )
134
+ ) {
135
+ return []
136
+ }
137
+ return [
138
+ {
139
+ severity: 'warning',
140
+ code: 'altium.schematic.image.asset-unresolved',
141
+ message:
142
+ 'Schematic image asset could not be resolved for ' +
143
+ (sourcePath || `image ${index + 1}`) +
144
+ '.'
145
+ }
146
+ ]
147
+ }
148
+ )
149
+ }
150
+
151
+ /**
152
+ * Returns the exact canonical asset id for one image.
153
+ * @param {Record<string, unknown>} image Native image placement.
154
+ * @param {number} index Native image index.
155
+ * @param {string} idScope Deterministic document id scope.
156
+ * @returns {string}
157
+ */
158
+ static assetId(image, index, idScope) {
159
+ return Primitives.id(idScope, [
160
+ 'asset',
161
+ 'schematic_image',
162
+ CircuitJsonSchematicImageProjection.#identity(image, index)
163
+ ])
164
+ }
165
+
166
+ /**
167
+ * Resolves canonical center and positive size.
168
+ * @param {Record<string, unknown>} image Native image placement.
169
+ * @returns {{ center: { x: number, y: number }, size: { width: number, height: number } } | null}
170
+ */
171
+ static #bounds(image) {
172
+ const x = Primitives.number(image?.x, null)
173
+ const y = Primitives.number(image?.y, null)
174
+ const cornerX = Primitives.number(image?.cornerX, null)
175
+ const cornerY = Primitives.number(image?.cornerY, null)
176
+ if (x === null || y === null || cornerX === null || cornerY === null) {
177
+ return null
178
+ }
179
+ const width = Math.abs(cornerX - x)
180
+ const height = Math.abs(cornerY - y)
181
+ if (!(width > 0 && height > 0)) return null
182
+ return {
183
+ center: Primitives.point((x + cornerX) / 2, (y + cornerY) / 2),
184
+ size: {
185
+ width: Primitives.round(width),
186
+ height: Primitives.round(height)
187
+ }
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Builds a stable identity that distinguishes repeated source names.
193
+ * @param {Record<string, unknown>} image Native image placement.
194
+ * @param {number} index Native image index.
195
+ * @returns {unknown[]}
196
+ */
197
+ static #identity(image, index) {
198
+ return [
199
+ image?.uniqueId || image?.recordId || image?.fileName || 'image',
200
+ CircuitJsonSchematicImageProjection.#renderOrder(image, index),
201
+ index
202
+ ]
203
+ }
204
+
205
+ /**
206
+ * Resolves a safe authored image order.
207
+ * @param {Record<string, unknown>} image Native image placement.
208
+ * @param {number} fallback Fallback order.
209
+ * @returns {number}
210
+ */
211
+ static #renderOrder(image, fallback) {
212
+ const order = Primitives.number(image?.renderOrder, fallback)
213
+ return Number.isSafeInteger(order) ? order : fallback
214
+ }
215
+
216
+ /**
217
+ * Extracts a source basename from slash variants.
218
+ * @param {string} path Source path.
219
+ * @returns {string}
220
+ */
221
+ static #baseName(path) {
222
+ return (
223
+ String(path || '')
224
+ .replaceAll('\\', '/')
225
+ .split('/')
226
+ .filter(Boolean)
227
+ .at(-1) || ''
228
+ )
229
+ }
230
+
231
+ /**
232
+ * Resolves a usable image media type.
233
+ * @param {Record<string, unknown>} image Native image placement.
234
+ * @param {string} sourcePath Source path.
235
+ * @returns {string}
236
+ */
237
+ static #mediaType(image, sourcePath) {
238
+ const explicit = String(image?.mimeType || '')
239
+ .trim()
240
+ .toLowerCase()
241
+ if (explicit) return explicit
242
+ const suffix = sourcePath.toLowerCase().split('.').at(-1)
243
+ return (
244
+ {
245
+ bmp: 'image/bmp',
246
+ gif: 'image/gif',
247
+ jpeg: 'image/jpeg',
248
+ jpg: 'image/jpeg',
249
+ png: 'image/png',
250
+ webp: 'image/webp'
251
+ }[suffix] || 'application/octet-stream'
252
+ )
253
+ }
254
+
255
+ /**
256
+ * Decodes one exact base64 payload without Node-only dependencies.
257
+ * @param {unknown} value Base64 payload.
258
+ * @returns {Uint8Array | null}
259
+ */
260
+ static #payload(value) {
261
+ const encoded = String(value || '').replace(/\s+/gu, '')
262
+ if (!encoded) return null
263
+ try {
264
+ const binary = atob(encoded)
265
+ const bytes = new Uint8Array(binary.length)
266
+ for (let index = 0; index < binary.length; index += 1) {
267
+ bytes[index] = binary.charCodeAt(index)
268
+ }
269
+ return bytes
270
+ } catch {
271
+ return null
272
+ }
273
+ }
274
+ }
275
+
276
+ Object.freeze(CircuitJsonSchematicImageProjection.prototype)
277
+ Object.freeze(CircuitJsonSchematicImageProjection)
@@ -0,0 +1,47 @@
1
+ // SPDX-FileCopyrightText: 2026 André Fiedler
2
+ //
3
+ // SPDX-License-Identifier: GPL-3.0-or-later
4
+
5
+ import { CircuitJsonModelAdapterPrimitives } from './CircuitJsonModelAdapterPrimitives.mjs'
6
+
7
+ /**
8
+ * Projects native Altium schematic strokes onto common CircuitJSON style.
9
+ */
10
+ export class CircuitJsonSchematicStrokeStyle {
11
+ /**
12
+ * Preserves one authored line style without source-specific renderer logic.
13
+ * @param {Record<string, unknown>} primitive Native schematic primitive.
14
+ * @param {unknown} width Authored stroke width.
15
+ * @returns {{ is_dashed: boolean, stroke_dasharray?: number[], stroke_linecap?: 'round' }}
16
+ */
17
+ static fields(primitive, width) {
18
+ const lineStyle = Number(primitive?.lineStyle || 0)
19
+ const isDashed = primitive?.dashed === true || lineStyle !== 0
20
+ if (![1, 2, 3].includes(lineStyle)) {
21
+ return { is_dashed: isDashed }
22
+ }
23
+
24
+ const authoredWidth = Number(width || 1)
25
+ const resolvedWidth = Number.isFinite(authoredWidth) ? authoredWidth : 1
26
+ const dashLength = Math.max(resolvedWidth * 8, 8)
27
+ const gapLength = Math.max(resolvedWidth * 5, 5)
28
+ const dotLength = Math.max(resolvedWidth * 1.5, 1.5)
29
+ const dasharray =
30
+ lineStyle === 1
31
+ ? [dashLength, gapLength]
32
+ : lineStyle === 2
33
+ ? [dotLength, gapLength]
34
+ : [dashLength, gapLength, dotLength, gapLength]
35
+
36
+ return {
37
+ is_dashed: true,
38
+ stroke_dasharray: dasharray.map((value) =>
39
+ CircuitJsonModelAdapterPrimitives.round(value)
40
+ ),
41
+ stroke_linecap: 'round'
42
+ }
43
+ }
44
+ }
45
+
46
+ Object.freeze(CircuitJsonSchematicStrokeStyle.prototype)
47
+ Object.freeze(CircuitJsonSchematicStrokeStyle)
@@ -0,0 +1,11 @@
1
+ // SPDX-FileCopyrightText: 2026 André Fiedler
2
+ // SPDX-License-Identifier: GPL-3.0-or-later
3
+
4
+ export * from 'circuitjson-toolkit/extensions'
5
+
6
+ export { AltiumExtensionResolver } from './convergence/AltiumExtensionResolver.mjs'
7
+ export { SchematicSvgRenderer } from './convergence/SchematicSvgRenderer.mjs'
8
+ export * from './legacy-parser.mjs'
9
+ export * from './legacy-netlist-query.mjs'
10
+ export * from './legacy-renderers.mjs'
11
+ export * from './legacy-scene3d.mjs'
package/src/index.mjs CHANGED
@@ -1,7 +1,23 @@
1
1
  // SPDX-FileCopyrightText: 2026 André Fiedler
2
- //
3
2
  // SPDX-License-Identifier: GPL-3.0-or-later
4
3
 
5
- export * from './parser.mjs'
6
- export * from './renderers.mjs'
7
- export * from './scene3d.mjs'
4
+ export {
5
+ BomTableRenderer,
6
+ CircuitJsonDocument,
7
+ CircuitJsonDocumentContext,
8
+ CircuitJsonIndexer,
9
+ CircuitJsonUnits,
10
+ ManufacturingService,
11
+ PcbInteractionIndex,
12
+ PcbScene3dBuilder,
13
+ PcbScene3dPreparator,
14
+ PcbSvgRenderer,
15
+ QueryService,
16
+ SchematicSvgRenderer,
17
+ SimulationService,
18
+ ToolkitError
19
+ } from 'circuitjson-toolkit'
20
+
21
+ export { Parser } from './convergence/Parser.mjs'
22
+ export { ProjectLoader } from './convergence/ProjectLoader.mjs'
23
+ export { ToolkitCapabilities } from './convergence/ToolkitCapabilities.mjs'
@@ -0,0 +1,7 @@
1
+ // SPDX-FileCopyrightText: 2026 André Fiedler
2
+ // SPDX-License-Identifier: GPL-3.0-or-later
3
+
4
+ export {
5
+ PcbInteractionIndex,
6
+ PcbSpatialIndex
7
+ } from 'circuitjson-toolkit/interaction'
@@ -0,0 +1,11 @@
1
+ // SPDX-FileCopyrightText: 2026 André Fiedler
2
+ // SPDX-License-Identifier: GPL-3.0-or-later
3
+
4
+ export { RegexPattern } from './core/netlist-query/RegexPattern.mjs'
5
+ export {
6
+ ComponentGrouping,
7
+ MPN_MISSING_NOTE
8
+ } from './core/netlist-query/ComponentGrouping.mjs'
9
+ export { CircuitTraversal } from './core/netlist-query/CircuitTraversal.mjs'
10
+ export { QueryNetlistBuilder } from './core/netlist-query/QueryNetlistBuilder.mjs'
11
+ export { LoadedDesignNetlistService } from './core/netlist-query/LoadedDesignNetlistService.mjs'
@@ -0,0 +1,141 @@
1
+ // SPDX-FileCopyrightText: 2026 André Fiedler
2
+ // SPDX-License-Identifier: GPL-3.0-or-later
3
+
4
+ export { BinaryReader, BinaryReaderCursor } from './core/BinaryReader.mjs'
5
+ export { OleCompoundDocument } from './core/ole/OleCompoundDocument.mjs'
6
+ export { OleConstants } from './core/ole/OleConstants.mjs'
7
+ export { OleDirectoryEntry } from './core/ole/OleDirectoryEntry.mjs'
8
+ export { OleCompoundDocumentWriter } from './core/ole/OleCompoundDocumentWriter.mjs'
9
+ export { AltiumLibraryBatchExporter } from './core/altium/AltiumLibraryBatchExporter.mjs'
10
+ export { AltiumLibraryRecordBuilder } from './core/altium/AltiumLibraryRecordBuilder.mjs'
11
+ export { AltiumPcbLibExporter } from './core/altium/AltiumPcbLibExporter.mjs'
12
+ export { AltiumSchLibExporter } from './core/altium/AltiumSchLibExporter.mjs'
13
+ export { SelectedPartAltiumExportAdapter } from './core/altium/SelectedPartAltiumExportAdapter.mjs'
14
+ export { AltiumUnits } from './core/altium/AltiumUnits.mjs'
15
+ export { SourceBundleExporter } from './core/altium/SourceBundleExporter.mjs'
16
+ export { SourceComponentBundleNormalizer } from './core/altium/SourceComponentBundleNormalizer.mjs'
17
+ export { SourceComponentClient } from './core/altium/SourceComponentClient.mjs'
18
+ export { AltiumParser } from './core/altium/AltiumParser.mjs'
19
+ export { AltiumSchematicArcAngleNormalizer } from './core/altium/AltiumSchematicArcAngleNormalizer.mjs'
20
+ export { AltiumSchematicFreeGraphicStrokeNormalizer } from './core/altium/AltiumSchematicFreeGraphicStrokeNormalizer.mjs'
21
+ export { AltiumSchematicHiddenDesignatorResolver } from './core/altium/AltiumSchematicHiddenDesignatorResolver.mjs'
22
+ export { AltiumSchematicPackedImageResolver } from './core/altium/AltiumSchematicPackedImageResolver.mjs'
23
+ export { AltiumSchematicSheetBoundsNormalizer } from './core/altium/AltiumSchematicSheetBoundsNormalizer.mjs'
24
+ export { AltiumLayoutParser } from './core/altium/AltiumLayoutParser.mjs'
25
+ export { AsciiRecordParser } from './core/altium/AsciiRecordParser.mjs'
26
+ export { HostCapabilityDiagnosticsBuilder } from './core/altium/HostCapabilityDiagnosticsBuilder.mjs'
27
+ export { IntLibModelParser } from './core/altium/IntLibModelParser.mjs'
28
+ export { IntLibStreamExtractor } from './core/altium/IntLibStreamExtractor.mjs'
29
+ export { EmbeddedAssetReportBuilder } from './core/altium/EmbeddedAssetReportBuilder.mjs'
30
+ export { EmbeddedFileInventoryBuilder } from './core/altium/EmbeddedFileInventoryBuilder.mjs'
31
+ export { FixtureCoverageMatrixBuilder } from './core/altium/FixtureCoverageMatrixBuilder.mjs'
32
+ export { GeometryBoundsReportBuilder } from './core/altium/GeometryBoundsReportBuilder.mjs'
33
+ export {
34
+ ParameterCollection,
35
+ ParameterValue
36
+ } from './core/altium/ParameterCollection.mjs'
37
+ export {
38
+ AltiumFileError,
39
+ AltiumParseError,
40
+ AltiumCorruptFileError,
41
+ AltiumUnsupportedFeatureError
42
+ } from './core/altium/ParserErrors.mjs'
43
+ export { CiArtifactBundleBuilder } from './core/altium/CiArtifactBundleBuilder.mjs'
44
+ export { ContractGateReportBuilder } from './core/altium/ContractGateReportBuilder.mjs'
45
+ export { DraftsmanBoardViewMetadataBuilder } from './core/altium/DraftsmanBoardViewMetadataBuilder.mjs'
46
+ export { DraftsmanDigestParser } from './core/altium/DraftsmanDigestParser.mjs'
47
+ export { LibraryRenderManifestBuilder } from './core/altium/LibraryRenderManifestBuilder.mjs'
48
+ export { LibraryCatalogArtifactBuilder } from './core/altium/LibraryCatalogArtifactBuilder.mjs'
49
+ export { LibraryCompatibilityReportBuilder } from './core/altium/LibraryCompatibilityReportBuilder.mjs'
50
+ export { LibraryDiffReportBuilder } from './core/altium/LibraryDiffReportBuilder.mjs'
51
+ export { LibraryInspectionReportBuilder } from './core/altium/LibraryInspectionReportBuilder.mjs'
52
+ export { LibraryQaReportBuilder } from './core/altium/LibraryQaReportBuilder.mjs'
53
+ export { LibrarySearchIndex } from './core/altium/LibrarySearchIndex.mjs'
54
+ export { NativeStreamInventoryBuilder } from './core/altium/NativeStreamInventoryBuilder.mjs'
55
+ export { ParserUtils } from './core/altium/ParserUtils.mjs'
56
+ export { ParameterRecordInventoryBuilder } from './core/altium/ParameterRecordInventoryBuilder.mjs'
57
+ export { ParserCompatibilityFuzzer } from './core/altium/ParserCompatibilityFuzzer.mjs'
58
+ export { ParserDiagnosticNormalizer } from './core/altium/ParserDiagnosticNormalizer.mjs'
59
+ export { ParserFieldCoverageReportBuilder } from './core/altium/ParserFieldCoverageReportBuilder.mjs'
60
+ export { ParserValueVerificationReportBuilder } from './core/altium/ParserValueVerificationReportBuilder.mjs'
61
+ export { NormalizedModelSchema } from './core/altium/NormalizedModelSchema.mjs'
62
+ export { ProjectDesignBundleBuilder } from './core/altium/ProjectDesignBundleBuilder.mjs'
63
+ export { ProjectDocumentGraphBuilder } from './core/altium/ProjectDocumentGraphBuilder.mjs'
64
+ export { ProjectHierarchyReportBuilder } from './core/altium/ProjectHierarchyReportBuilder.mjs'
65
+ export { ProjectAnnotationParser } from './core/altium/ProjectAnnotationParser.mjs'
66
+ export { ProjectNetlistExporter } from './core/altium/ProjectNetlistExporter.mjs'
67
+ export { ProjectVariantViewBuilder } from './core/altium/ProjectVariantViewBuilder.mjs'
68
+ export { CircuitJsonModelSchema } from './core/circuit-json/CircuitJsonModelSchema.mjs'
69
+ export { CircuitJsonModelAdapter } from './core/circuit-json/CircuitJsonModelAdapter.mjs'
70
+ export { PcbBinaryPrimitiveParser } from './core/altium/PcbBinaryPrimitiveParser.mjs'
71
+ export { PcbBomProfileBuilder } from './core/altium/PcbBomProfileBuilder.mjs'
72
+ export { PcbBoardRegionSemanticsParser } from './core/altium/PcbBoardRegionSemanticsParser.mjs'
73
+ export { PcbComponentKindPolicy } from './core/altium/PcbComponentKindPolicy.mjs'
74
+ export { PcbComponentPrimitiveIndexer } from './core/altium/PcbComponentPrimitiveIndexer.mjs'
75
+ export { PcbCustomPadShapeParser } from './core/altium/PcbCustomPadShapeParser.mjs'
76
+ export { PcbDimensionParser } from './core/altium/PcbDimensionParser.mjs'
77
+ export { PcbDimensionReportBuilder } from './core/altium/PcbDimensionReportBuilder.mjs'
78
+ export { PcbEmbeddedFontExtractor } from './core/altium/PcbEmbeddedFontExtractor.mjs'
79
+ export { PcbEmbeddedModelExtractor } from './core/altium/PcbEmbeddedModelExtractor.mjs'
80
+ export { PcbExtendedPrimitiveInformationParser } from './core/altium/PcbExtendedPrimitiveInformationParser.mjs'
81
+ export { PcbFabricationReadinessReportBuilder } from './core/altium/PcbFabricationReadinessReportBuilder.mjs'
82
+ export { PcbFontMetricsParser } from './core/altium/PcbFontMetricsParser.mjs'
83
+ export { PcbLayerIdCodec } from './core/altium/PcbLayerIdCodec.mjs'
84
+ export { PcbLayerGroups } from './core/altium/PcbLayerGroups.mjs'
85
+ export { PcbLayerStackFidelityReportBuilder } from './core/altium/PcbLayerStackFidelityReportBuilder.mjs'
86
+ export { PcbLayerStackInterchangeParser } from './core/altium/PcbLayerStackInterchangeParser.mjs'
87
+ export { PcbLayerStackQueryHelper } from './core/altium/PcbLayerStackQueryHelper.mjs'
88
+ export { PcbLibModelParser } from './core/altium/PcbLibModelParser.mjs'
89
+ export { PcbLibParityReportBuilder } from './core/altium/PcbLibParityReportBuilder.mjs'
90
+ export { PcbLibStreamExtractor } from './core/altium/PcbLibStreamExtractor.mjs'
91
+ export { PcbMechanicalLayerPairParser } from './core/altium/PcbMechanicalLayerPairParser.mjs'
92
+ export { PcbModelParser } from './core/altium/PcbModelParser.mjs'
93
+ export { PcbOutlineRasterizer } from './core/altium/PcbOutlineRasterizer.mjs'
94
+ export { PcbOutlineRecovery } from './core/altium/PcbOutlineRecovery.mjs'
95
+ export { PcbOwnershipGraphBuilder } from './core/altium/PcbOwnershipGraphBuilder.mjs'
96
+ export { PcbPadStackParser } from './core/altium/PcbPadStackParser.mjs'
97
+ export { PcbPlacedFootprintManifestBuilder } from './core/altium/PcbPlacedFootprintManifestBuilder.mjs'
98
+ export { PcbPickPlacePositionResolver } from './core/altium/PcbPickPlacePositionResolver.mjs'
99
+ export { PcbPolygonRecordParser } from './core/altium/PcbPolygonRecordParser.mjs'
100
+ export { PcbPrimitiveFieldOffsetReportBuilder } from './core/altium/PcbPrimitiveFieldOffsetReportBuilder.mjs'
101
+ export { PcbRawRecordRegistry } from './core/altium/PcbRawRecordRegistry.mjs'
102
+ export { PcbReviewMetadataBuilder } from './core/altium/PcbReviewMetadataBuilder.mjs'
103
+ export { PcbReviewPolygonRealizationBuilder } from './core/altium/PcbReviewPolygonRealizationBuilder.mjs'
104
+ export { PcbClassReportBuilder } from './core/altium/PcbClassReportBuilder.mjs'
105
+ export { PcbInspectionReportBuilder } from './core/altium/PcbInspectionReportBuilder.mjs'
106
+ export { PcbNetMembershipReportBuilder } from './core/altium/PcbNetMembershipReportBuilder.mjs'
107
+ export { PcbRouteAnalysisBuilder } from './core/altium/PcbRouteAnalysisBuilder.mjs'
108
+ export { PcbRuleImpactReportBuilder } from './core/altium/PcbRuleImpactReportBuilder.mjs'
109
+ export { PcbRuleParser } from './core/altium/PcbRuleParser.mjs'
110
+ export { PcbSidecarRecordParser } from './core/altium/PcbSidecarRecordParser.mjs'
111
+ export { PcbSpecialStringResolver } from './core/altium/PcbSpecialStringResolver.mjs'
112
+ export { PcbStatisticsBuilder } from './core/altium/PcbStatisticsBuilder.mjs'
113
+ export { PcbStreamExtractor } from './core/altium/PcbStreamExtractor.mjs'
114
+ export { PcbUnionParser } from './core/altium/PcbUnionParser.mjs'
115
+ export { PcbViaStackParser } from './core/altium/PcbViaStackParser.mjs'
116
+ export { PcbViaStructureParser } from './core/altium/PcbViaStructureParser.mjs'
117
+ export { PrintableTextDecoder } from './core/altium/PrintableTextDecoder.mjs'
118
+ export { PrjPcbModelParser } from './core/altium/PrjPcbModelParser.mjs'
119
+ export { PrjScrModelParser } from './core/altium/PrjScrModelParser.mjs'
120
+ export { ProjectBomPnpReconciliationBuilder } from './core/altium/ProjectBomPnpReconciliationBuilder.mjs'
121
+ export { RawDataPreservationReportBuilder } from './core/altium/RawDataPreservationReportBuilder.mjs'
122
+ export { SchLibModelParser } from './core/altium/SchLibModelParser.mjs'
123
+ export { SchLibStreamExtractor } from './core/altium/SchLibStreamExtractor.mjs'
124
+ export { SchematicMultipartOwnerMatcher } from './core/altium/SchematicMultipartOwnerMatcher.mjs'
125
+ export { SchematicCrossSheetConnectorParser } from './core/altium/SchematicCrossSheetConnectorParser.mjs'
126
+ export { SchematicCodeSymbolParser } from './core/altium/SchematicCodeSymbolParser.mjs'
127
+ export { SchematicConnectivityQaBuilder } from './core/altium/SchematicConnectivityQaBuilder.mjs'
128
+ export { SchematicHarnessParser } from './core/altium/SchematicHarnessParser.mjs'
129
+ export { SchematicImplementationParser } from './core/altium/SchematicImplementationParser.mjs'
130
+ export { SchematicImageDiagnosticsBuilder } from './core/altium/SchematicImageDiagnosticsBuilder.mjs'
131
+ export { SchematicOwnershipGraphParser } from './core/altium/SchematicOwnershipGraphParser.mjs'
132
+ export { SchematicProjectParameterResolver } from './core/altium/SchematicProjectParameterResolver.mjs'
133
+ export { SchematicQaReportBuilder } from './core/altium/SchematicQaReportBuilder.mjs'
134
+ export { SchematicRecordStreamParser } from './core/altium/SchematicRecordStreamParser.mjs'
135
+ export { SchematicRecordTypeRegistry } from './core/altium/SchematicRecordTypeRegistry.mjs'
136
+ export { SchematicRepeatedChannelParser } from './core/altium/SchematicRepeatedChannelParser.mjs'
137
+ export { SchematicTemplateParser } from './core/altium/SchematicTemplateParser.mjs'
138
+ export { UnsupportedFeatureReportBuilder } from './core/altium/UnsupportedFeatureReportBuilder.mjs'
139
+ export { SchematicTextRunParser } from './core/altium/SchematicTextRunParser.mjs'
140
+ export { SchematicStandaloneCalloutNormalizer } from './core/altium/SchematicStandaloneCalloutNormalizer.mjs'
141
+ export { SvgModelCrossLinkValidator } from './core/altium/SvgModelCrossLinkValidator.mjs'
@@ -0,0 +1,25 @@
1
+ // SPDX-FileCopyrightText: 2026 André Fiedler
2
+ // SPDX-License-Identifier: GPL-3.0-or-later
3
+
4
+ export { BomTableRenderer } from './ui/BomTableRenderer.mjs'
5
+ export { AltiumPcbBottomViewMirror } from './ui/AltiumPcbBottomViewMirror.mjs'
6
+ export { PcbArcUtils } from './ui/PcbArcUtils.mjs'
7
+ export { PcbEdgeFacingGlyphNormalizer } from './ui/PcbEdgeFacingGlyphNormalizer.mjs'
8
+ export { PcbFootprintPrimitiveSelector } from './ui/PcbFootprintPrimitiveSelector.mjs'
9
+ export { PcbFootprintPadAxisNormalizer } from './ui/PcbFootprintPadAxisNormalizer.mjs'
10
+ export { PcbInteractionIndex } from './ui/PcbInteractionIndex.mjs'
11
+ export { PcbInteractionItemRegistry } from './ui/PcbInteractionItemRegistry.mjs'
12
+ export { PcbInteractionLayerModel } from './ui/PcbInteractionLayerModel.mjs'
13
+ export { PcbLayerGroups } from './core/altium/PcbLayerGroups.mjs'
14
+ export {
15
+ PcbSideResolvedRenderModel,
16
+ isCopperPrimitive,
17
+ preparePcbSideResolvedRenderModel
18
+ } from './ui/PcbSideResolvedRenderModel.mjs'
19
+ export { PcbSvgRenderer } from './ui/PcbSvgRenderer.mjs'
20
+ export { SchematicColorResolver } from './ui/SchematicColorResolver.mjs'
21
+ export { SchematicContentLayout } from './ui/SchematicContentLayout.mjs'
22
+ export { SchematicOwnerPinLabelLayout } from './ui/SchematicOwnerPinLabelLayout.mjs'
23
+ export { SchematicSvgRenderer } from './ui/SchematicSvgRenderer.mjs'
24
+ export { SchematicSvgUtils } from './ui/SchematicSvgUtils.mjs'
25
+ export { SchematicTypography } from './ui/SchematicTypography.mjs'
@@ -0,0 +1,10 @@
1
+ // SPDX-FileCopyrightText: 2026 André Fiedler
2
+ // SPDX-License-Identifier: GPL-3.0-or-later
3
+
4
+ export { PcbScene3dBuilder } from './ui/PcbScene3dBuilder.mjs'
5
+ export { AltiumScene3dAuthoredBodyAnchorAdapter } from './ui/AltiumScene3dAuthoredBodyAnchorAdapter.mjs'
6
+ export { PcbScene3dModelRegistry } from './ui/PcbScene3dModelRegistry.mjs'
7
+ export { PcbScene3dPackages } from './ui/PcbScene3dPackages.mjs'
8
+ export { PcbScene3dScenePreparator } from './ui/PcbScene3dScenePreparator.mjs'
9
+ export { PcbScene3dSummaryRenderer } from './ui/PcbScene3dSummaryRenderer.mjs'
10
+ export { PcbScene3dTextBoxLayoutResolver } from './ui/PcbScene3dTextBoxLayoutResolver.mjs'
@@ -0,0 +1,4 @@
1
+ // SPDX-FileCopyrightText: 2026 André Fiedler
2
+ // SPDX-License-Identifier: GPL-3.0-or-later
3
+
4
+ export { ManufacturingService } from 'circuitjson-toolkit/manufacturing'