kicadts 0.0.2 → 0.0.4
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/dist/index.d.ts +4466 -0
- package/dist/index.js +14253 -0
- package/package.json +5 -2
- package/.cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdc +0 -111
- package/.github/workflows/bun-formatcheck.yml +0 -26
- package/.github/workflows/bun-pver-release.yml +0 -70
- package/.github/workflows/bun-test.yml +0 -32
- package/.github/workflows/bun-typecheck.yml +0 -26
- package/.vscode/settings.json +0 -16
- package/AGENTS.md +0 -31
- package/TODO.md +0 -46
- package/biome.json +0 -93
- package/bunfig.toml +0 -5
- package/lib/index.ts +0 -1
- package/lib/sexpr/base-classes/SxClass.ts +0 -164
- package/lib/sexpr/base-classes/SxPrimitiveBoolean.ts +0 -35
- package/lib/sexpr/base-classes/SxPrimitiveNumber.ts +0 -26
- package/lib/sexpr/base-classes/SxPrimitiveString.ts +0 -26
- package/lib/sexpr/classes/At.ts +0 -53
- package/lib/sexpr/classes/Bus.ts +0 -103
- package/lib/sexpr/classes/BusEntry.ts +0 -169
- package/lib/sexpr/classes/Color.ts +0 -29
- package/lib/sexpr/classes/Dnp.ts +0 -8
- package/lib/sexpr/classes/EmbeddedFonts.ts +0 -68
- package/lib/sexpr/classes/ExcludeFromSim.ts +0 -8
- package/lib/sexpr/classes/FieldsAutoplaced.ts +0 -8
- package/lib/sexpr/classes/Footprint.ts +0 -849
- package/lib/sexpr/classes/FootprintAttr.ts +0 -104
- package/lib/sexpr/classes/FootprintAutoplaceCost180.ts +0 -9
- package/lib/sexpr/classes/FootprintAutoplaceCost90.ts +0 -9
- package/lib/sexpr/classes/FootprintClearance.ts +0 -9
- package/lib/sexpr/classes/FootprintDescr.ts +0 -44
- package/lib/sexpr/classes/FootprintLocked.ts +0 -32
- package/lib/sexpr/classes/FootprintModel.ts +0 -142
- package/lib/sexpr/classes/FootprintNetTiePadGroups.ts +0 -52
- package/lib/sexpr/classes/FootprintPad.ts +0 -857
- package/lib/sexpr/classes/FootprintPath.ts +0 -44
- package/lib/sexpr/classes/FootprintPlaced.ts +0 -32
- package/lib/sexpr/classes/FootprintPrivateLayers.ts +0 -56
- package/lib/sexpr/classes/FootprintSheetfile.ts +0 -44
- package/lib/sexpr/classes/FootprintSheetname.ts +0 -44
- package/lib/sexpr/classes/FootprintSolderMaskMargin.ts +0 -9
- package/lib/sexpr/classes/FootprintSolderPasteMargin.ts +0 -9
- package/lib/sexpr/classes/FootprintSolderPasteRatio.ts +0 -9
- package/lib/sexpr/classes/FootprintTags.ts +0 -44
- package/lib/sexpr/classes/FootprintTedit.ts +0 -21
- package/lib/sexpr/classes/FootprintThermalGap.ts +0 -9
- package/lib/sexpr/classes/FootprintThermalWidth.ts +0 -9
- package/lib/sexpr/classes/FootprintZoneConnect.ts +0 -9
- package/lib/sexpr/classes/FpArc.ts +0 -312
- package/lib/sexpr/classes/FpCircle.ts +0 -314
- package/lib/sexpr/classes/FpLine.ts +0 -316
- package/lib/sexpr/classes/FpPoly.ts +0 -286
- package/lib/sexpr/classes/FpPolyFill.ts +0 -48
- package/lib/sexpr/classes/FpPolyLocked.ts +0 -40
- package/lib/sexpr/classes/FpRect.ts +0 -314
- package/lib/sexpr/classes/FpText.ts +0 -375
- package/lib/sexpr/classes/FpTextBox.ts +0 -450
- package/lib/sexpr/classes/GrLine.ts +0 -264
- package/lib/sexpr/classes/GrLineAngle.ts +0 -32
- package/lib/sexpr/classes/GrLineEnd.ts +0 -61
- package/lib/sexpr/classes/GrLineLocked.ts +0 -40
- package/lib/sexpr/classes/GrLineStart.ts +0 -61
- package/lib/sexpr/classes/GrText.ts +0 -228
- package/lib/sexpr/classes/Image.ts +0 -283
- package/lib/sexpr/classes/InBom.ts +0 -8
- package/lib/sexpr/classes/Junction.ts +0 -166
- package/lib/sexpr/classes/KicadPcb.ts +0 -361
- package/lib/sexpr/classes/KicadSch.ts +0 -397
- package/lib/sexpr/classes/KicadSchGenerator.ts +0 -32
- package/lib/sexpr/classes/KicadSchGeneratorVersion.ts +0 -30
- package/lib/sexpr/classes/KicadSchVersion.ts +0 -22
- package/lib/sexpr/classes/Label.ts +0 -176
- package/lib/sexpr/classes/Layer.ts +0 -51
- package/lib/sexpr/classes/Layers.ts +0 -47
- package/lib/sexpr/classes/LibSymbols.ts +0 -61
- package/lib/sexpr/classes/NoConnect.ts +0 -90
- package/lib/sexpr/classes/OnBoard.ts +0 -8
- package/lib/sexpr/classes/PadChamfer.ts +0 -50
- package/lib/sexpr/classes/PadChamferRatio.ts +0 -9
- package/lib/sexpr/classes/PadClearance.ts +0 -9
- package/lib/sexpr/classes/PadDieLength.ts +0 -9
- package/lib/sexpr/classes/PadDrill.ts +0 -145
- package/lib/sexpr/classes/PadDrillOffset.ts +0 -54
- package/lib/sexpr/classes/PadLayers.ts +0 -71
- package/lib/sexpr/classes/PadNet.ts +0 -56
- package/lib/sexpr/classes/PadOptions.ts +0 -181
- package/lib/sexpr/classes/PadPinFunction.ts +0 -9
- package/lib/sexpr/classes/PadPinType.ts +0 -9
- package/lib/sexpr/classes/PadPrimitiveGrArc.ts +0 -272
- package/lib/sexpr/classes/PadPrimitiveGrCircle.ts +0 -298
- package/lib/sexpr/classes/PadPrimitiveGrLine.ts +0 -126
- package/lib/sexpr/classes/PadPrimitives.ts +0 -291
- package/lib/sexpr/classes/PadRectDelta.ts +0 -57
- package/lib/sexpr/classes/PadRoundrectRratio.ts +0 -9
- package/lib/sexpr/classes/PadSize.ts +0 -69
- package/lib/sexpr/classes/PadSolderMaskMargin.ts +0 -9
- package/lib/sexpr/classes/PadSolderPasteMargin.ts +0 -9
- package/lib/sexpr/classes/PadSolderPasteMarginRatio.ts +0 -9
- package/lib/sexpr/classes/PadTeardrops.ts +0 -210
- package/lib/sexpr/classes/PadThermalBridgeAngle.ts +0 -9
- package/lib/sexpr/classes/PadThermalGap.ts +0 -9
- package/lib/sexpr/classes/PadThermalWidth.ts +0 -9
- package/lib/sexpr/classes/PadZoneConnect.ts +0 -9
- package/lib/sexpr/classes/Paper.ts +0 -119
- package/lib/sexpr/classes/PcbGeneral.ts +0 -82
- package/lib/sexpr/classes/PcbGeneralLegacyTeardrops.ts +0 -44
- package/lib/sexpr/classes/PcbGeneralThickness.ts +0 -9
- package/lib/sexpr/classes/PcbGenerator.ts +0 -16
- package/lib/sexpr/classes/PcbGeneratorVersion.ts +0 -16
- package/lib/sexpr/classes/PcbLayerDefinition.ts +0 -106
- package/lib/sexpr/classes/PcbLayers.ts +0 -34
- package/lib/sexpr/classes/PcbNet.ts +0 -56
- package/lib/sexpr/classes/PcbVersion.ts +0 -9
- package/lib/sexpr/classes/Property.ts +0 -301
- package/lib/sexpr/classes/PropertyHide.ts +0 -9
- package/lib/sexpr/classes/PropertyUnlocked.ts +0 -9
- package/lib/sexpr/classes/Pts.ts +0 -67
- package/lib/sexpr/classes/RenderCache.ts +0 -221
- package/lib/sexpr/classes/SchematicText.ts +0 -171
- package/lib/sexpr/classes/Segment.ts +0 -243
- package/lib/sexpr/classes/SegmentEnd.ts +0 -59
- package/lib/sexpr/classes/SegmentLocked.ts +0 -33
- package/lib/sexpr/classes/SegmentNet.ts +0 -64
- package/lib/sexpr/classes/SegmentStart.ts +0 -59
- package/lib/sexpr/classes/Setup/PcbPlotParams.ts +0 -689
- package/lib/sexpr/classes/Setup/PcbPlotParamsBase.ts +0 -9
- package/lib/sexpr/classes/Setup/PcbPlotParamsNumericProperties.ts +0 -105
- package/lib/sexpr/classes/Setup/PcbPlotParamsStringPropertiesA.ts +0 -104
- package/lib/sexpr/classes/Setup/PcbPlotParamsStringPropertiesB.ts +0 -105
- package/lib/sexpr/classes/Setup/Setup.ts +0 -574
- package/lib/sexpr/classes/Setup/SetupPropertyTypes.ts +0 -119
- package/lib/sexpr/classes/Setup/Stackup.ts +0 -135
- package/lib/sexpr/classes/Setup/StackupLayer.ts +0 -233
- package/lib/sexpr/classes/Setup/StackupLayerProperties.ts +0 -80
- package/lib/sexpr/classes/Setup/StackupProperties.ts +0 -40
- package/lib/sexpr/classes/Setup/base.ts +0 -165
- package/lib/sexpr/classes/Setup/index.ts +0 -14
- package/lib/sexpr/classes/Setup/setupMultiValueProperties.ts +0 -53
- package/lib/sexpr/classes/Setup/setupNumericProperties.ts +0 -151
- package/lib/sexpr/classes/Setup/setupPropertyHandlers.ts +0 -90
- package/lib/sexpr/classes/Setup/setupStringProperties.ts +0 -75
- package/lib/sexpr/classes/Sheet.ts +0 -287
- package/lib/sexpr/classes/SheetFill.ts +0 -44
- package/lib/sexpr/classes/SheetInstances.ts +0 -168
- package/lib/sexpr/classes/SheetInstancesRoot.ts +0 -165
- package/lib/sexpr/classes/SheetPin.ts +0 -125
- package/lib/sexpr/classes/SheetProperty.ts +0 -115
- package/lib/sexpr/classes/SheetSize.ts +0 -44
- package/lib/sexpr/classes/Stroke.ts +0 -58
- package/lib/sexpr/classes/StrokeType.ts +0 -34
- package/lib/sexpr/classes/Symbol.ts +0 -1666
- package/lib/sexpr/classes/TextEffects.ts +0 -461
- package/lib/sexpr/classes/TitleBlock.ts +0 -369
- package/lib/sexpr/classes/Unit.ts +0 -28
- package/lib/sexpr/classes/Uuid.ts +0 -8
- package/lib/sexpr/classes/Via.ts +0 -363
- package/lib/sexpr/classes/ViaNet.ts +0 -60
- package/lib/sexpr/classes/Width.ts +0 -8
- package/lib/sexpr/classes/Wire.ts +0 -111
- package/lib/sexpr/classes/Xy.ts +0 -33
- package/lib/sexpr/classes/Zone.ts +0 -39
- package/lib/sexpr/index.ts +0 -130
- package/lib/sexpr/parseKicadSexpr.ts +0 -5
- package/lib/sexpr/parseToPrimitiveSExpr.ts +0 -245
- package/lib/sexpr/utils/indentLines.ts +0 -3
- package/lib/sexpr/utils/parseYesNo.ts +0 -12
- package/lib/sexpr/utils/quoteSExprString.ts +0 -8
- package/lib/sexpr/utils/strokeFromArgs.ts +0 -18
- package/lib/sexpr/utils/toNumberValue.ts +0 -13
- package/lib/sexpr/utils/toStringValue.ts +0 -11
- package/scripts/download-references.ts +0 -68
- package/tests/fixtures/expectEqualPrimitiveSExpr.ts +0 -199
- package/tests/fixtures/png-matcher.ts +0 -109
- package/tests/fixtures/preload.ts +0 -1
- package/tests/sexpr/KicadPcbDemos.test.ts +0 -48
- package/tests/sexpr/KicadSchDemos.test.ts +0 -49
- package/tests/sexpr/classes/Footprint.test.ts +0 -277
- package/tests/sexpr/classes/FootprintPad.test.ts +0 -78
- package/tests/sexpr/classes/FpArc.test.ts +0 -45
- package/tests/sexpr/classes/FpCircle.test.ts +0 -39
- package/tests/sexpr/classes/FpPoly.test.ts +0 -43
- package/tests/sexpr/classes/FpRect.test.ts +0 -40
- package/tests/sexpr/classes/FpTextBox.test.ts +0 -84
- package/tests/sexpr/classes/Image.test.ts +0 -58
- package/tests/sexpr/classes/KicadSch.test.ts +0 -95
- package/tests/sexpr/classes/Paper.test.ts +0 -30
- package/tests/sexpr/classes/Property.test.ts +0 -48
- package/tests/sexpr/classes/Setup.test.ts +0 -188
- package/tests/sexpr/classes/Sheet.test.ts +0 -107
- package/tests/sexpr/classes/Stroke.test.ts +0 -15
- package/tests/sexpr/classes/Symbol.test.ts +0 -96
- package/tests/sexpr/classes/TextEffects.test.ts +0 -56
- package/tests/sexpr/classes/TitleBlock.test.ts +0 -40
- package/tsconfig.json +0 -35
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
2
|
-
import { printSExpr, type PrimitiveSExpr } from "../parseToPrimitiveSExpr"
|
|
3
|
-
import { quoteSExprString } from "../utils/quoteSExprString"
|
|
4
|
-
|
|
5
|
-
export class Layers extends SxClass {
|
|
6
|
-
static override token = "layers"
|
|
7
|
-
token = "layers"
|
|
8
|
-
|
|
9
|
-
private _names: string[] = []
|
|
10
|
-
|
|
11
|
-
constructor(names: Array<string | number> = []) {
|
|
12
|
-
super()
|
|
13
|
-
this.names = names
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
static override fromSexprPrimitives(
|
|
17
|
-
primitiveSexprs: PrimitiveSExpr[],
|
|
18
|
-
): Layers {
|
|
19
|
-
const names = primitiveSexprs.map((primitive) =>
|
|
20
|
-
typeof primitive === "string" || typeof primitive === "number"
|
|
21
|
-
? String(primitive)
|
|
22
|
-
: printSExpr(primitive),
|
|
23
|
-
)
|
|
24
|
-
return new Layers(names)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
get names(): string[] {
|
|
28
|
-
return [...this._names]
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
set names(values: Array<string | number>) {
|
|
32
|
-
this._names = values.map((value) => String(value))
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
override getString(): string {
|
|
36
|
-
const rendered = this._names
|
|
37
|
-
.map((name) => {
|
|
38
|
-
if (/^[^\s()"]+$/u.test(name) && !["nil", "#t", "#f"].includes(name)) {
|
|
39
|
-
return name
|
|
40
|
-
}
|
|
41
|
-
return quoteSExprString(name)
|
|
42
|
-
})
|
|
43
|
-
.join(" ")
|
|
44
|
-
return `(layers ${rendered})`
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
SxClass.register(Layers)
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
2
|
-
import type { PrimitiveSExpr } from "../parseToPrimitiveSExpr"
|
|
3
|
-
import { SchematicSymbol } from "./Symbol"
|
|
4
|
-
|
|
5
|
-
const SUPPORTED_ARRAY_TOKENS = new Set(["symbol"])
|
|
6
|
-
|
|
7
|
-
export class LibSymbols extends SxClass {
|
|
8
|
-
static override token = "lib_symbols"
|
|
9
|
-
static override parentToken = "kicad_sch"
|
|
10
|
-
override token = "lib_symbols"
|
|
11
|
-
|
|
12
|
-
private _symbols: SchematicSymbol[] = []
|
|
13
|
-
|
|
14
|
-
static override fromSexprPrimitives(
|
|
15
|
-
primitiveSexprs: PrimitiveSExpr[],
|
|
16
|
-
): LibSymbols {
|
|
17
|
-
const libSymbols = new LibSymbols()
|
|
18
|
-
|
|
19
|
-
const { propertyMap, arrayPropertyMap } =
|
|
20
|
-
SxClass.parsePrimitivesToClassProperties(primitiveSexprs, this.token)
|
|
21
|
-
|
|
22
|
-
const unsupportedSingularTokens = Object.keys(propertyMap).filter(
|
|
23
|
-
(token) => !SUPPORTED_ARRAY_TOKENS.has(token),
|
|
24
|
-
)
|
|
25
|
-
if (unsupportedSingularTokens.length > 0) {
|
|
26
|
-
throw new Error(
|
|
27
|
-
`Unsupported child tokens inside lib_symbols expression: ${unsupportedSingularTokens.join(", ")}`,
|
|
28
|
-
)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const unsupportedArrayTokens = Object.keys(arrayPropertyMap).filter(
|
|
32
|
-
(token) => !SUPPORTED_ARRAY_TOKENS.has(token),
|
|
33
|
-
)
|
|
34
|
-
if (unsupportedArrayTokens.length > 0) {
|
|
35
|
-
throw new Error(
|
|
36
|
-
`Unsupported repeated child tokens inside lib_symbols expression: ${unsupportedArrayTokens.join(", ")}`,
|
|
37
|
-
)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const symbols = (arrayPropertyMap.symbol as SchematicSymbol[]) ?? []
|
|
41
|
-
if (!symbols.length && propertyMap.symbol) {
|
|
42
|
-
symbols.push(propertyMap.symbol as SchematicSymbol)
|
|
43
|
-
}
|
|
44
|
-
libSymbols._symbols = symbols
|
|
45
|
-
|
|
46
|
-
return libSymbols
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
get symbols(): SchematicSymbol[] {
|
|
50
|
-
return [...this._symbols]
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
set symbols(value: SchematicSymbol[]) {
|
|
54
|
-
this._symbols = [...value]
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
override getChildren(): SxClass[] {
|
|
58
|
-
return [...this._symbols]
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
SxClass.register(LibSymbols)
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
2
|
-
import type { PrimitiveSExpr } from "../parseToPrimitiveSExpr"
|
|
3
|
-
import { At, type AtInput } from "./At"
|
|
4
|
-
import { Uuid } from "./Uuid"
|
|
5
|
-
|
|
6
|
-
const SUPPORTED_TOKENS = new Set(["at", "uuid"])
|
|
7
|
-
|
|
8
|
-
export interface NoConnectConstructorParams {
|
|
9
|
-
at?: AtInput
|
|
10
|
-
uuid?: string | Uuid
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export class NoConnect extends SxClass {
|
|
14
|
-
static override token = "no_connect"
|
|
15
|
-
static override parentToken = "kicad_sch"
|
|
16
|
-
override token = "no_connect"
|
|
17
|
-
|
|
18
|
-
private _sxAt?: At
|
|
19
|
-
private _sxUuid?: Uuid
|
|
20
|
-
|
|
21
|
-
constructor(params: NoConnectConstructorParams = {}) {
|
|
22
|
-
super()
|
|
23
|
-
|
|
24
|
-
if (params.at !== undefined) {
|
|
25
|
-
this.at = params.at
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (params.uuid !== undefined) {
|
|
29
|
-
this.uuid = params.uuid
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
static override fromSexprPrimitives(
|
|
34
|
-
primitiveSexprs: PrimitiveSExpr[],
|
|
35
|
-
): NoConnect {
|
|
36
|
-
const noConnect = new NoConnect()
|
|
37
|
-
|
|
38
|
-
const { propertyMap, arrayPropertyMap } =
|
|
39
|
-
SxClass.parsePrimitivesToClassProperties(primitiveSexprs, this.token)
|
|
40
|
-
|
|
41
|
-
if (Object.keys(arrayPropertyMap).length > 0) {
|
|
42
|
-
const tokens = Object.keys(arrayPropertyMap).join(", ")
|
|
43
|
-
throw new Error(
|
|
44
|
-
`no_connect does not support repeated child tokens: ${tokens}`,
|
|
45
|
-
)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const unsupportedTokens = Object.keys(propertyMap).filter(
|
|
49
|
-
(token) => !SUPPORTED_TOKENS.has(token),
|
|
50
|
-
)
|
|
51
|
-
if (unsupportedTokens.length > 0) {
|
|
52
|
-
throw new Error(
|
|
53
|
-
`Unsupported child tokens inside no_connect expression: ${unsupportedTokens.join(", ")}`,
|
|
54
|
-
)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
noConnect._sxAt = propertyMap.at as At | undefined
|
|
58
|
-
noConnect._sxUuid = propertyMap.uuid as Uuid | undefined
|
|
59
|
-
|
|
60
|
-
return noConnect
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
get at(): At | undefined {
|
|
64
|
-
return this._sxAt
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
set at(value: AtInput | undefined) {
|
|
68
|
-
this._sxAt = value !== undefined ? At.from(value) : undefined
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
get uuid(): Uuid | undefined {
|
|
72
|
-
return this._sxUuid
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
set uuid(value: Uuid | string | undefined) {
|
|
76
|
-
if (value === undefined) {
|
|
77
|
-
this._sxUuid = undefined
|
|
78
|
-
return
|
|
79
|
-
}
|
|
80
|
-
this._sxUuid = value instanceof Uuid ? value : new Uuid(value)
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
override getChildren(): SxClass[] {
|
|
84
|
-
const children: SxClass[] = []
|
|
85
|
-
if (this._sxAt) children.push(this._sxAt)
|
|
86
|
-
if (this._sxUuid) children.push(this._sxUuid)
|
|
87
|
-
return children
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
SxClass.register(NoConnect)
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
2
|
-
import { SxPrimitiveBoolean } from "../base-classes/SxPrimitiveBoolean"
|
|
3
|
-
|
|
4
|
-
export class OnBoard extends SxPrimitiveBoolean {
|
|
5
|
-
static override token = "on_board"
|
|
6
|
-
token = "on_board"
|
|
7
|
-
}
|
|
8
|
-
SxClass.register(OnBoard)
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
2
|
-
import type { PrimitiveSExpr } from "../parseToPrimitiveSExpr"
|
|
3
|
-
import { printSExpr } from "../parseToPrimitiveSExpr"
|
|
4
|
-
import { toStringValue } from "../utils/toStringValue"
|
|
5
|
-
|
|
6
|
-
export class PadChamfer extends SxClass {
|
|
7
|
-
static override token = "chamfer"
|
|
8
|
-
static override parentToken = "pad"
|
|
9
|
-
token = "chamfer"
|
|
10
|
-
|
|
11
|
-
private _corners: string[] = []
|
|
12
|
-
|
|
13
|
-
constructor(corners: string[]) {
|
|
14
|
-
super()
|
|
15
|
-
this.corners = corners
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
static override fromSexprPrimitives(
|
|
19
|
-
primitiveSexprs: PrimitiveSExpr[],
|
|
20
|
-
): PadChamfer {
|
|
21
|
-
const corners = primitiveSexprs.map((primitive) => {
|
|
22
|
-
const corner = toStringValue(primitive)
|
|
23
|
-
if (corner === undefined) {
|
|
24
|
-
return printSExpr(primitive)
|
|
25
|
-
}
|
|
26
|
-
return corner
|
|
27
|
-
})
|
|
28
|
-
return new PadChamfer(corners)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
get corners(): string[] {
|
|
32
|
-
return [...this._corners]
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
set corners(values: string[]) {
|
|
36
|
-
this._corners = values.map((value) => String(value))
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
override getChildren(): SxClass[] {
|
|
40
|
-
return []
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
override getString(): string {
|
|
44
|
-
if (this._corners.length === 0) {
|
|
45
|
-
return "(chamfer)"
|
|
46
|
-
}
|
|
47
|
-
return `(chamfer ${this._corners.join(" ")})`
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
SxClass.register(PadChamfer)
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { SxPrimitiveNumber } from "../base-classes/SxPrimitiveNumber"
|
|
2
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
3
|
-
|
|
4
|
-
export class PadChamferRatio extends SxPrimitiveNumber {
|
|
5
|
-
static override token = "chamfer_ratio"
|
|
6
|
-
static override parentToken = "pad"
|
|
7
|
-
token = "chamfer_ratio"
|
|
8
|
-
}
|
|
9
|
-
SxClass.register(PadChamferRatio)
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { SxPrimitiveNumber } from "../base-classes/SxPrimitiveNumber"
|
|
2
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
3
|
-
|
|
4
|
-
export class PadClearance extends SxPrimitiveNumber {
|
|
5
|
-
static override token = "clearance"
|
|
6
|
-
static override parentToken = "pad"
|
|
7
|
-
token = "clearance"
|
|
8
|
-
}
|
|
9
|
-
SxClass.register(PadClearance)
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { SxPrimitiveNumber } from "../base-classes/SxPrimitiveNumber"
|
|
2
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
3
|
-
|
|
4
|
-
export class PadDieLength extends SxPrimitiveNumber {
|
|
5
|
-
static override token = "die_length"
|
|
6
|
-
static override parentToken = "pad"
|
|
7
|
-
token = "die_length"
|
|
8
|
-
}
|
|
9
|
-
SxClass.register(PadDieLength)
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
2
|
-
import type { PrimitiveSExpr } from "../parseToPrimitiveSExpr"
|
|
3
|
-
import { printSExpr } from "../parseToPrimitiveSExpr"
|
|
4
|
-
import { toNumberValue } from "../utils/toNumberValue"
|
|
5
|
-
import { PadDrillOffset } from "./PadDrillOffset"
|
|
6
|
-
|
|
7
|
-
export class PadDrill extends SxClass {
|
|
8
|
-
static override token = "drill"
|
|
9
|
-
static override parentToken = "pad"
|
|
10
|
-
token = "drill"
|
|
11
|
-
|
|
12
|
-
private _oval = false
|
|
13
|
-
private _diameter: number
|
|
14
|
-
private _width?: number
|
|
15
|
-
private _sxOffset?: PadDrillOffset
|
|
16
|
-
|
|
17
|
-
constructor({
|
|
18
|
-
oval = false,
|
|
19
|
-
diameter,
|
|
20
|
-
width,
|
|
21
|
-
offset,
|
|
22
|
-
}: {
|
|
23
|
-
oval?: boolean
|
|
24
|
-
diameter: number
|
|
25
|
-
width?: number
|
|
26
|
-
offset?: PadDrillOffset | { x: number; y: number }
|
|
27
|
-
}) {
|
|
28
|
-
super()
|
|
29
|
-
this._oval = oval
|
|
30
|
-
this._diameter = diameter
|
|
31
|
-
this._width = width
|
|
32
|
-
if (offset instanceof PadDrillOffset) {
|
|
33
|
-
this._sxOffset = offset
|
|
34
|
-
} else if (offset) {
|
|
35
|
-
this._sxOffset = new PadDrillOffset(offset.x, offset.y)
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
static override fromSexprPrimitives(
|
|
40
|
-
primitiveSexprs: PrimitiveSExpr[],
|
|
41
|
-
): PadDrill {
|
|
42
|
-
const remaining = [...primitiveSexprs]
|
|
43
|
-
let oval = false
|
|
44
|
-
if (remaining[0] === "oval") {
|
|
45
|
-
oval = true
|
|
46
|
-
remaining.shift()
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const diameter = toNumberValue(remaining.shift())
|
|
50
|
-
if (diameter === undefined) {
|
|
51
|
-
throw new Error("drill requires a diameter value")
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
let width: number | undefined
|
|
55
|
-
const potentialWidth = toNumberValue(remaining[0])
|
|
56
|
-
if (potentialWidth !== undefined) {
|
|
57
|
-
width = potentialWidth
|
|
58
|
-
remaining.shift()
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const drill = new PadDrill({ oval, diameter, width })
|
|
62
|
-
|
|
63
|
-
for (const primitive of remaining) {
|
|
64
|
-
if (!Array.isArray(primitive)) {
|
|
65
|
-
throw new Error(
|
|
66
|
-
`drill encountered unexpected primitive child: ${JSON.stringify(primitive)}`,
|
|
67
|
-
)
|
|
68
|
-
}
|
|
69
|
-
const parsed = SxClass.parsePrimitiveSexpr(primitive, {
|
|
70
|
-
parentToken: this.token,
|
|
71
|
-
})
|
|
72
|
-
if (!(parsed instanceof PadDrillOffset)) {
|
|
73
|
-
throw new Error(
|
|
74
|
-
`drill encountered unsupported child token: ${printSExpr(primitive)}`,
|
|
75
|
-
)
|
|
76
|
-
}
|
|
77
|
-
if (drill._sxOffset) {
|
|
78
|
-
throw new Error("drill does not support multiple offset children")
|
|
79
|
-
}
|
|
80
|
-
drill._sxOffset = parsed
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return drill
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
get oval(): boolean {
|
|
87
|
-
return this._oval
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
set oval(value: boolean) {
|
|
91
|
-
this._oval = value
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
get diameter(): number {
|
|
95
|
-
return this._diameter
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
set diameter(value: number) {
|
|
99
|
-
this._diameter = value
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
get width(): number | undefined {
|
|
103
|
-
return this._width
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
set width(value: number | undefined) {
|
|
107
|
-
this._width = value
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
get offset(): PadDrillOffset | undefined {
|
|
111
|
-
return this._sxOffset
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
set offset(value: PadDrillOffset | { x: number; y: number } | undefined) {
|
|
115
|
-
if (value === undefined) {
|
|
116
|
-
this._sxOffset = undefined
|
|
117
|
-
return
|
|
118
|
-
}
|
|
119
|
-
this._sxOffset =
|
|
120
|
-
value instanceof PadDrillOffset
|
|
121
|
-
? value
|
|
122
|
-
: new PadDrillOffset(value.x, value.y)
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
override getChildren(): SxClass[] {
|
|
126
|
-
return this._sxOffset ? [this._sxOffset] : []
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
override getString(): string {
|
|
130
|
-
const tokens: string[] = []
|
|
131
|
-
if (this._oval) tokens.push("oval")
|
|
132
|
-
tokens.push(String(this._diameter))
|
|
133
|
-
if (this._width !== undefined) tokens.push(String(this._width))
|
|
134
|
-
|
|
135
|
-
if (!this._sxOffset) {
|
|
136
|
-
return `(drill ${tokens.join(" ")})`
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
const lines = [`(drill ${tokens.join(" ")}`]
|
|
140
|
-
lines.push(this._sxOffset.getStringIndented())
|
|
141
|
-
lines.push(")")
|
|
142
|
-
return lines.join("\n")
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
SxClass.register(PadDrill)
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
2
|
-
import type { PrimitiveSExpr } from "../parseToPrimitiveSExpr"
|
|
3
|
-
import { toNumberValue } from "../utils/toNumberValue"
|
|
4
|
-
|
|
5
|
-
export class PadDrillOffset extends SxClass {
|
|
6
|
-
static override token = "offset"
|
|
7
|
-
static override parentToken = "drill"
|
|
8
|
-
token = "offset"
|
|
9
|
-
|
|
10
|
-
private _x: number
|
|
11
|
-
private _y: number
|
|
12
|
-
|
|
13
|
-
constructor(x: number, y: number) {
|
|
14
|
-
super()
|
|
15
|
-
this._x = x
|
|
16
|
-
this._y = y
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
static override fromSexprPrimitives(
|
|
20
|
-
primitiveSexprs: PrimitiveSExpr[],
|
|
21
|
-
): PadDrillOffset {
|
|
22
|
-
const x = toNumberValue(primitiveSexprs[0])
|
|
23
|
-
const y = toNumberValue(primitiveSexprs[1])
|
|
24
|
-
if (x === undefined || y === undefined) {
|
|
25
|
-
throw new Error("drill offset requires x and y numeric values")
|
|
26
|
-
}
|
|
27
|
-
return new PadDrillOffset(x, y)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
get x(): number {
|
|
31
|
-
return this._x
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
set x(value: number) {
|
|
35
|
-
this._x = value
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
get y(): number {
|
|
39
|
-
return this._y
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
set y(value: number) {
|
|
43
|
-
this._y = value
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
override getChildren(): SxClass[] {
|
|
47
|
-
return []
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
override getString(): string {
|
|
51
|
-
return `(offset ${this._x} ${this._y})`
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
SxClass.register(PadDrillOffset)
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
2
|
-
import type { PrimitiveSExpr } from "../parseToPrimitiveSExpr"
|
|
3
|
-
import { printSExpr } from "../parseToPrimitiveSExpr"
|
|
4
|
-
import { quoteSExprString } from "../utils/quoteSExprString"
|
|
5
|
-
import { toStringValue } from "../utils/toStringValue"
|
|
6
|
-
|
|
7
|
-
export type PadLayersInput = PadLayers | string[]
|
|
8
|
-
|
|
9
|
-
export class PadLayers extends SxClass {
|
|
10
|
-
static override token = "layers"
|
|
11
|
-
static override parentToken = "pad"
|
|
12
|
-
token = "layers"
|
|
13
|
-
|
|
14
|
-
private _layers: string[] = []
|
|
15
|
-
|
|
16
|
-
constructor(layers: string[]) {
|
|
17
|
-
super()
|
|
18
|
-
this.layers = layers
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
static from(input: PadLayersInput): PadLayers {
|
|
22
|
-
if (input instanceof PadLayers) {
|
|
23
|
-
return input
|
|
24
|
-
}
|
|
25
|
-
return new PadLayers(input)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
static override fromSexprPrimitives(
|
|
29
|
-
primitiveSexprs: PrimitiveSExpr[],
|
|
30
|
-
): PadLayers {
|
|
31
|
-
const layers = primitiveSexprs.map((primitive) => {
|
|
32
|
-
const value = toStringValue(primitive)
|
|
33
|
-
if (value === undefined) {
|
|
34
|
-
return printSExpr(primitive)
|
|
35
|
-
}
|
|
36
|
-
return value
|
|
37
|
-
})
|
|
38
|
-
return new PadLayers(layers)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
get layers(): string[] {
|
|
42
|
-
return [...this._layers]
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
set layers(values: string[]) {
|
|
46
|
-
this._layers = values.map((value) => String(value))
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
override getChildren(): SxClass[] {
|
|
50
|
-
return []
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
override getString(): string {
|
|
54
|
-
if (this._layers.length === 0) {
|
|
55
|
-
return "(layers)"
|
|
56
|
-
}
|
|
57
|
-
const rendered = this._layers
|
|
58
|
-
.map((layer) => {
|
|
59
|
-
if (
|
|
60
|
-
/^[^\s()"]+$/u.test(layer) &&
|
|
61
|
-
!["nil", "#t", "#f"].includes(layer)
|
|
62
|
-
) {
|
|
63
|
-
return layer
|
|
64
|
-
}
|
|
65
|
-
return quoteSExprString(layer)
|
|
66
|
-
})
|
|
67
|
-
.join(" ")
|
|
68
|
-
return `(layers ${rendered})`
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
SxClass.register(PadLayers)
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { SxClass } from "../base-classes/SxClass"
|
|
2
|
-
import type { PrimitiveSExpr } from "../parseToPrimitiveSExpr"
|
|
3
|
-
import { quoteSExprString } from "../utils/quoteSExprString"
|
|
4
|
-
import { toNumberValue } from "../utils/toNumberValue"
|
|
5
|
-
import { toStringValue } from "../utils/toStringValue"
|
|
6
|
-
|
|
7
|
-
export class PadNet extends SxClass {
|
|
8
|
-
static override token = "net"
|
|
9
|
-
static override parentToken = "pad"
|
|
10
|
-
token = "net"
|
|
11
|
-
|
|
12
|
-
private _id: number
|
|
13
|
-
private _name: string
|
|
14
|
-
|
|
15
|
-
constructor(id: number, name: string) {
|
|
16
|
-
super()
|
|
17
|
-
this._id = id
|
|
18
|
-
this._name = name
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
static override fromSexprPrimitives(
|
|
22
|
-
primitiveSexprs: PrimitiveSExpr[],
|
|
23
|
-
): PadNet {
|
|
24
|
-
const id = toNumberValue(primitiveSexprs[0])
|
|
25
|
-
const name = toStringValue(primitiveSexprs[1])
|
|
26
|
-
if (id === undefined || name === undefined) {
|
|
27
|
-
throw new Error("pad net requires numeric id and string name")
|
|
28
|
-
}
|
|
29
|
-
return new PadNet(id, name)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
get id(): number {
|
|
33
|
-
return this._id
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
set id(value: number) {
|
|
37
|
-
this._id = value
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
get name(): string {
|
|
41
|
-
return this._name
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
set name(value: string) {
|
|
45
|
-
this._name = value
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
override getChildren(): SxClass[] {
|
|
49
|
-
return []
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
override getString(): string {
|
|
53
|
-
return `(net ${this._id} ${quoteSExprString(this._name)})`
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
SxClass.register(PadNet)
|