@modular-circuit/transpiler 0.0.108 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/dist/index.d.mts +479 -0
  2. package/dist/index.d.ts +479 -0
  3. package/dist/index.js +3031 -0
  4. package/dist/index.mjs +2927 -0
  5. package/package.json +15 -12
  6. package/build/builder/graph_to_kicad/do_convert_graph_to_kicad_project.d.ts +0 -3
  7. package/build/builder/graph_to_kicad/do_convert_graph_to_kicad_project.d.ts.map +0 -1
  8. package/build/builder/graph_to_kicad/do_convert_graph_to_kicad_project.js +0 -115
  9. package/build/builder/graph_to_kicad/index.d.ts +0 -3
  10. package/build/builder/graph_to_kicad/index.d.ts.map +0 -1
  11. package/build/builder/graph_to_kicad/index.js +0 -63
  12. package/build/builder/index.d.ts +0 -2
  13. package/build/builder/index.d.ts.map +0 -1
  14. package/build/builder/index.js +0 -1
  15. package/build/converter/graph_to_netlist/context.d.ts +0 -13
  16. package/build/converter/graph_to_netlist/context.d.ts.map +0 -1
  17. package/build/converter/graph_to_netlist/context.js +0 -0
  18. package/build/converter/graph_to_netlist/graph_converter.d.ts +0 -8
  19. package/build/converter/graph_to_netlist/graph_converter.d.ts.map +0 -1
  20. package/build/converter/graph_to_netlist/graph_converter.js +0 -192
  21. package/build/converter/graph_to_netlist/index.d.ts +0 -3
  22. package/build/converter/graph_to_netlist/index.d.ts.map +0 -1
  23. package/build/converter/graph_to_netlist/index.js +0 -2
  24. package/build/converter/index.d.ts +0 -4
  25. package/build/converter/index.d.ts.map +0 -1
  26. package/build/converter/index.js +0 -3
  27. package/build/converter/kicad_sexpr/eeschema/drawing_sheet/index.d.ts +0 -2
  28. package/build/converter/kicad_sexpr/eeschema/drawing_sheet/index.d.ts.map +0 -1
  29. package/build/converter/kicad_sexpr/eeschema/drawing_sheet/index.js +0 -5
  30. package/build/converter/kicad_sexpr/eeschema/drawing_sheet/sch_default_drawing_sheet.d.ts +0 -2
  31. package/build/converter/kicad_sexpr/eeschema/drawing_sheet/sch_default_drawing_sheet.d.ts.map +0 -1
  32. package/build/converter/kicad_sexpr/eeschema/drawing_sheet/sch_default_drawing_sheet.js +0 -1
  33. package/build/converter/kicad_sexpr/eeschema/index.d.ts +0 -3
  34. package/build/converter/kicad_sexpr/eeschema/index.d.ts.map +0 -1
  35. package/build/converter/kicad_sexpr/eeschema/index.js +0 -2
  36. package/build/converter/kicad_sexpr/eeschema/printer.d.ts +0 -38
  37. package/build/converter/kicad_sexpr/eeschema/printer.d.ts.map +0 -1
  38. package/build/converter/kicad_sexpr/eeschema/printer.js +0 -296
  39. package/build/converter/kicad_sexpr/index.d.ts +0 -3
  40. package/build/converter/kicad_sexpr/index.d.ts.map +0 -1
  41. package/build/converter/kicad_sexpr/index.js +0 -2
  42. package/build/converter/kicad_sexpr/pcb/index.d.ts +0 -2
  43. package/build/converter/kicad_sexpr/pcb/index.d.ts.map +0 -1
  44. package/build/converter/kicad_sexpr/pcb/index.js +0 -1
  45. package/build/converter/link_to_netlist/context.d.ts +0 -12
  46. package/build/converter/link_to_netlist/context.d.ts.map +0 -1
  47. package/build/converter/link_to_netlist/context.js +0 -0
  48. package/build/converter/link_to_netlist/converter.d.ts +0 -13
  49. package/build/converter/link_to_netlist/converter.d.ts.map +0 -1
  50. package/build/converter/link_to_netlist/converter.js +0 -154
  51. package/build/converter/link_to_netlist/index.d.ts +0 -3
  52. package/build/converter/link_to_netlist/index.d.ts.map +0 -1
  53. package/build/converter/link_to_netlist/index.js +0 -2
  54. package/build/converter/link_to_netlist/links/converter_base.d.ts +0 -30
  55. package/build/converter/link_to_netlist/links/converter_base.d.ts.map +0 -1
  56. package/build/converter/link_to_netlist/links/converter_base.js +0 -156
  57. package/build/converter/link_to_netlist/links/converters.d.ts +0 -51
  58. package/build/converter/link_to_netlist/links/converters.d.ts.map +0 -1
  59. package/build/converter/link_to_netlist/links/converters.js +0 -1190
  60. package/build/converter/link_to_netlist/links/index.d.ts +0 -3
  61. package/build/converter/link_to_netlist/links/index.d.ts.map +0 -1
  62. package/build/converter/link_to_netlist/links/index.js +0 -2
  63. package/build/converter/netlist_to_kicad/context.d.ts +0 -10
  64. package/build/converter/netlist_to_kicad/context.d.ts.map +0 -1
  65. package/build/converter/netlist_to_kicad/context.js +0 -0
  66. package/build/converter/netlist_to_kicad/index.d.ts +0 -4
  67. package/build/converter/netlist_to_kicad/index.d.ts.map +0 -1
  68. package/build/converter/netlist_to_kicad/index.js +0 -3
  69. package/build/converter/netlist_to_kicad/layout.d.ts +0 -36
  70. package/build/converter/netlist_to_kicad/layout.d.ts.map +0 -1
  71. package/build/converter/netlist_to_kicad/layout.js +0 -200
  72. package/build/converter/netlist_to_kicad/netlist_converter.d.ts +0 -28
  73. package/build/converter/netlist_to_kicad/netlist_converter.d.ts.map +0 -1
  74. package/build/converter/netlist_to_kicad/netlist_converter.js +0 -398
  75. package/build/converter/netlist_to_kicad/place_blocks.d.ts +0 -6
  76. package/build/converter/netlist_to_kicad/place_blocks.d.ts.map +0 -1
  77. package/build/converter/netlist_to_kicad/place_blocks.js +0 -59
  78. package/build/index.d.ts +0 -6
  79. package/build/index.d.ts.map +0 -1
  80. package/build/index.js +0 -5
  81. package/build/kicad/constraints/index.d.ts +0 -5
  82. package/build/kicad/constraints/index.d.ts.map +0 -1
  83. package/build/kicad/constraints/index.js +0 -4
  84. package/build/kicad/index.d.ts +0 -1
  85. package/build/kicad/index.d.ts.map +0 -1
  86. package/build/kicad/index.js +0 -1
  87. package/build/kicad/label/index.d.ts +0 -3
  88. package/build/kicad/label/index.d.ts.map +0 -1
  89. package/build/kicad/label/index.js +0 -2
  90. package/build/kicad/label/net_label.d.ts +0 -4
  91. package/build/kicad/label/net_label.d.ts.map +0 -1
  92. package/build/kicad/label/net_label.js +0 -14
  93. package/build/kicad/label/sheet_pin.d.ts +0 -5
  94. package/build/kicad/label/sheet_pin.d.ts.map +0 -1
  95. package/build/kicad/label/sheet_pin.js +0 -25
  96. package/build/kicad/project/index.d.ts +0 -3
  97. package/build/kicad/project/index.d.ts.map +0 -1
  98. package/build/kicad/project/index.js +0 -2
  99. package/build/kicad/project/kicad_prl.d.ts +0 -48
  100. package/build/kicad/project/kicad_prl.d.ts.map +0 -1
  101. package/build/kicad/project/kicad_prl.js +0 -50
  102. package/build/kicad/project/kicad_pro.d.ts +0 -176
  103. package/build/kicad/project/kicad_pro.d.ts.map +0 -1
  104. package/build/kicad/project/kicad_pro.js +0 -224
  105. package/build/kicad/project/kicad_project_archive.d.ts +0 -237
  106. package/build/kicad/project/kicad_project_archive.d.ts.map +0 -1
  107. package/build/kicad/project/kicad_project_archive.js +0 -53
  108. package/build/kicad/project/wildcards_and_files_ext.d.ts +0 -62
  109. package/build/kicad/project/wildcards_and_files_ext.d.ts.map +0 -1
  110. package/build/kicad/project/wildcards_and_files_ext.js +0 -61
  111. package/build/kicad/sheet/index.d.ts +0 -2
  112. package/build/kicad/sheet/index.d.ts.map +0 -1
  113. package/build/kicad/sheet/index.js +0 -1
  114. package/build/kicad/sheet/sheet.d.ts +0 -8
  115. package/build/kicad/sheet/sheet.d.ts.map +0 -1
  116. package/build/kicad/sheet/sheet.js +0 -44
  117. package/build/kicad/symbols/index.d.ts +0 -3
  118. package/build/kicad/symbols/index.d.ts.map +0 -1
  119. package/build/kicad/symbols/index.js +0 -2
  120. package/build/kicad/symbols/lib_symbol/gnd.d.ts +0 -3
  121. package/build/kicad/symbols/lib_symbol/gnd.d.ts.map +0 -1
  122. package/build/kicad/symbols/lib_symbol/gnd.js +0 -121
  123. package/build/kicad/symbols/lib_symbol/index.d.ts +0 -3
  124. package/build/kicad/symbols/lib_symbol/index.d.ts.map +0 -1
  125. package/build/kicad/symbols/lib_symbol/index.js +0 -2
  126. package/build/kicad/symbols/lib_symbol/vcc.d.ts +0 -3
  127. package/build/kicad/symbols/lib_symbol/vcc.d.ts.map +0 -1
  128. package/build/kicad/symbols/lib_symbol/vcc.js +0 -119
  129. package/build/kicad/symbols/sch_symbol/gnd.d.ts +0 -4
  130. package/build/kicad/symbols/sch_symbol/gnd.d.ts.map +0 -1
  131. package/build/kicad/symbols/sch_symbol/gnd.js +0 -66
  132. package/build/kicad/symbols/sch_symbol/index.d.ts +0 -3
  133. package/build/kicad/symbols/sch_symbol/index.d.ts.map +0 -1
  134. package/build/kicad/symbols/sch_symbol/index.js +0 -2
  135. package/build/kicad/symbols/sch_symbol/vcc.d.ts +0 -4
  136. package/build/kicad/symbols/sch_symbol/vcc.d.ts.map +0 -1
  137. package/build/kicad/symbols/sch_symbol/vcc.js +0 -66
  138. package/build/kicad/symbols/symbol_utils.d.ts +0 -2
  139. package/build/kicad/symbols/symbol_utils.d.ts.map +0 -1
  140. package/build/kicad/symbols/symbol_utils.js +0 -1
  141. package/build/kicad/wire/gen_wire.d.ts +0 -4
  142. package/build/kicad/wire/gen_wire.d.ts.map +0 -1
  143. package/build/kicad/wire/gen_wire.js +0 -12
  144. package/build/tsconfig.build.tsbuildinfo +0 -1
  145. package/build/utils/collect_sub_sheets.d.ts +0 -7
  146. package/build/utils/collect_sub_sheets.d.ts.map +0 -1
  147. package/build/utils/collect_sub_sheets.js +0 -156
  148. package/build/utils/collect_sub_sheets_by_id.d.ts +0 -7
  149. package/build/utils/collect_sub_sheets_by_id.d.ts.map +0 -1
  150. package/build/utils/collect_sub_sheets_by_id.js +0 -150
  151. package/build/utils/constraints.d.ts +0 -11
  152. package/build/utils/constraints.d.ts.map +0 -1
  153. package/build/utils/constraints.js +0 -17
  154. package/build/utils/filter_null_undefined.d.ts +0 -2
  155. package/build/utils/filter_null_undefined.d.ts.map +0 -1
  156. package/build/utils/filter_null_undefined.js +0 -39
  157. package/build/utils/index.d.ts +0 -6
  158. package/build/utils/index.d.ts.map +0 -1
  159. package/build/utils/index.js +0 -5
  160. package/build/utils/string_formatter.d.ts +0 -14
  161. package/build/utils/string_formatter.d.ts.map +0 -1
  162. package/build/utils/string_formatter.js +0 -35
package/dist/index.js ADDED
@@ -0,0 +1,3031 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
9
+ var __typeError = (msg) => {
10
+ throw TypeError(msg);
11
+ };
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
27
+ // If the importer is in node compatibility mode or this is not an ESM
28
+ // file that has been converted to a CommonJS file using a Babel-
29
+ // compatible transform (i.e. "__esModule" has not been set), then set
30
+ // "default" to the CommonJS "module.exports" for node compatibility.
31
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
32
+ mod
33
+ ));
34
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
35
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
36
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
37
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
38
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
39
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
40
+ var __runInitializers = (array, flags, self, value) => {
41
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
42
+ return value;
43
+ };
44
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
45
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
46
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
47
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
48
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
49
+ return __privateGet(this, extra);
50
+ }, set [name](x) {
51
+ return __privateSet(this, extra, x);
52
+ } }, name));
53
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
54
+ for (var i = decorators.length - 1; i >= 0; i--) {
55
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
56
+ if (k) {
57
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
58
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
59
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
60
+ }
61
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
62
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
63
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
64
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
65
+ }
66
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
67
+ };
68
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
69
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
70
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
71
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
72
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
73
+
74
+ // src/index.ts
75
+ var index_exports = {};
76
+ __export(index_exports, {
77
+ AllegroNetlistFileExtension: () => AllegroNetlistFileExtension,
78
+ AltiumFootprintLibPathExtension: () => AltiumFootprintLibPathExtension,
79
+ ArchiveFileExtension: () => ArchiveFileExtension,
80
+ BLOCK_PIN_GAP: () => BLOCK_PIN_GAP,
81
+ BLOCK_PIN_TB_MARGIN: () => BLOCK_PIN_TB_MARGIN,
82
+ CadstarFootprintLibPathExtension: () => CadstarFootprintLibPathExtension,
83
+ CadstarNetlistFileExtension: () => CadstarNetlistFileExtension,
84
+ CadstarPartsLibraryFileExtension: () => CadstarPartsLibraryFileExtension,
85
+ CadstarPcbFileExtension: () => CadstarPcbFileExtension,
86
+ CadstarSchematicFileExtension: () => CadstarSchematicFileExtension,
87
+ CsvFileExtension: () => CsvFileExtension,
88
+ DEFAULT_PAPER_SIZE: () => DEFAULT_PAPER_SIZE,
89
+ DatabaseLibraryFileExtension: () => DatabaseLibraryFileExtension,
90
+ DesignRulesFileExtension: () => DesignRulesFileExtension,
91
+ DrawingSheetFileExtension: () => DrawingSheetFileExtension,
92
+ DrillFileExtension: () => DrillFileExtension,
93
+ EagleFootprintLibPathExtension: () => EagleFootprintLibPathExtension,
94
+ EaglePcbFileExtension: () => EaglePcbFileExtension,
95
+ EquFileExtension: () => EquFileExtension,
96
+ FONT_SIZE: () => FONT_SIZE,
97
+ FootprintAssignmentFileExtension: () => FootprintAssignmentFileExtension,
98
+ FootprintPlaceFileExtension: () => FootprintPlaceFileExtension,
99
+ GENERATOR_NAME: () => GENERATOR_NAME,
100
+ GENERATOR_VERSION: () => GENERATOR_VERSION,
101
+ GRID_SIZE: () => GRID_SIZE,
102
+ GedaPcbFootprintLibFileExtension: () => GedaPcbFootprintLibFileExtension,
103
+ GerberFileExtension: () => GerberFileExtension,
104
+ GerberFileExtensionsRegex: () => GerberFileExtensionsRegex,
105
+ GerberJobFileExtension: () => GerberJobFileExtension,
106
+ GltfBinaryFileExtension: () => GltfBinaryFileExtension,
107
+ GraphConverter: () => GraphConverter,
108
+ HTTPLibraryFileExtension: () => HTTPLibraryFileExtension,
109
+ HotkeyFileExtension: () => HotkeyFileExtension,
110
+ HtmlFileExtension: () => HtmlFileExtension,
111
+ Ipc2581FileExtension: () => Ipc2581FileExtension,
112
+ IpcD356FileExtension: () => IpcD356FileExtension,
113
+ JpegFileExtension: () => JpegFileExtension,
114
+ JsonFileExtension: () => JsonFileExtension,
115
+ KICAD_SCH_FRAME: () => KICAD_SCH_FRAME,
116
+ KiCadFootprintFileExtension: () => KiCadFootprintFileExtension,
117
+ KiCadFootprintLibPathExtension: () => KiCadFootprintLibPathExtension,
118
+ KiCadPcbFileExtension: () => KiCadPcbFileExtension,
119
+ KiCadProjectArchive: () => KiCadProjectArchive,
120
+ KiCadSchematicFileExtension: () => KiCadSchematicFileExtension,
121
+ KiCadSymbolLibFileExtension: () => KiCadSymbolLibFileExtension,
122
+ Layout: () => Layout,
123
+ LegacyFootprintLibPathExtension: () => LegacyFootprintLibPathExtension,
124
+ LegacyPcbFileExtension: () => LegacyPcbFileExtension,
125
+ LegacyProjectFileExtension: () => LegacyProjectFileExtension,
126
+ LegacySchematicFileExtension: () => LegacySchematicFileExtension,
127
+ LegacySymbolDocumentFileExtension: () => LegacySymbolDocumentFileExtension,
128
+ LegacySymbolLibFileExtension: () => LegacySymbolLibFileExtension,
129
+ MacrosFileExtension: () => MacrosFileExtension,
130
+ MarkdownFileExtension: () => MarkdownFileExtension,
131
+ NetListConverter: () => NetListConverter,
132
+ NetlistFileExtension: () => NetlistFileExtension,
133
+ OrCadPcb2NetlistFileExtension: () => OrCadPcb2NetlistFileExtension,
134
+ PAPER: () => PAPER,
135
+ PAPER_SIZE: () => PAPER_SIZE,
136
+ PdfFileExtension: () => PdfFileExtension,
137
+ PngFileExtension: () => PngFileExtension,
138
+ ProjectFileExtension: () => ProjectFileExtension,
139
+ ProjectLocalSettingsFileExtension: () => ProjectLocalSettingsFileExtension,
140
+ ReportFileExtension: () => ReportFileExtension,
141
+ SCHEMATIC_PRINTER: () => SCHEMATIC_PRINTER,
142
+ SCH_VERSION: () => SCH_VERSION,
143
+ SVGFileExtension: () => SVGFileExtension,
144
+ SchematicSymbolFileExtension: () => SchematicSymbolFileExtension,
145
+ SpecctraDsnFileExtension: () => SpecctraDsnFileExtension,
146
+ SpecctraSessionFileExtension: () => SpecctraSessionFileExtension,
147
+ SpiceFileExtension: () => SpiceFileExtension,
148
+ StepFileAbrvExtension: () => StepFileAbrvExtension,
149
+ StepFileExtension: () => StepFileExtension,
150
+ StringFormatter: () => StringFormatter,
151
+ TextFileExtension: () => TextFileExtension,
152
+ VrmlFileExtension: () => VrmlFileExtension,
153
+ WIRE_PADDING: () => WIRE_PADDING,
154
+ WorkbookFileExtension: () => WorkbookFileExtension,
155
+ XmlFileExtension: () => XmlFileExtension,
156
+ collect_sub_sheets: () => collect_sub_sheets,
157
+ collect_sub_sheets_by_id: () => collect_sub_sheets_by_id,
158
+ convert_graph_to_kicad_project: () => convert_graph_to_kicad_project,
159
+ filterNullOrUndefined: () => filterNullOrUndefined,
160
+ gen_lib_gnd: () => gen_lib_gnd,
161
+ gen_lib_vcc: () => gen_lib_vcc,
162
+ gen_sch_gnd: () => gen_sch_gnd,
163
+ gen_sch_vcc: () => gen_sch_vcc,
164
+ get_power_pos: () => get_power_pos,
165
+ get_sch_default_drawing_sheet: () => get_sch_default_drawing_sheet,
166
+ tab: () => tab
167
+ });
168
+ module.exports = __toCommonJS(index_exports);
169
+
170
+ // src/converter/kicad_sexpr/eeschema/drawing_sheet/index.ts
171
+ var import_js_base64 = require("js-base64");
172
+
173
+ // src/converter/kicad_sexpr/eeschema/drawing_sheet/sch_default_drawing_sheet.ts
174
+ var BASE_64_ENCODED_SCH_DEFAULT_DRAWING_SHEET = "KGtpY2FkX3drcwoJKHZlcnNpb24gMjAyMzExMTgpCgkoZ2VuZXJhdG9yICJwbF9lZGl0b3IiKQoJKGdlbmVyYXRvcl92ZXJzaW9uICI4LjAiKQoJKHNldHVwCgkJKHRleHRzaXplIDEuNSAxLjUpCgkJKGxpbmV3aWR0aCAwLjE1KQoJCSh0ZXh0bGluZXdpZHRoIDAuMTUpCgkJKGxlZnRfbWFyZ2luIDEwKQoJCShyaWdodF9tYXJnaW4gMTApCgkJKHRvcF9tYXJnaW4gMTApCgkJKGJvdHRvbV9tYXJnaW4gMTApCgkpCgkocmVjdAoJCShuYW1lICIiKQoJCShzdGFydCAxMzUuNjY5IDM0LjI3MjIpCgkJKGVuZCAyIDIuMDAwMikKCQkoY29tbWVudCAicmVjdCBhcm91bmQgdGhlIHRpdGxlIGJsb2NrIikKCSkKCShyZWN0CgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDAgMCBsdGNvcm5lcikKCQkoZW5kIDAgMCkKCQkocmVwZWF0IDIpCgkJKGluY3J4IDIpCgkJKGluY3J5IDIpCgkpCgkobGluZQoJCShuYW1lICIiKQoJCShzdGFydCA1MCAyIGx0Y29ybmVyKQoJCShlbmQgNTAgMCBsdGNvcm5lcikKCQkocmVwZWF0IDMwKQoJCShpbmNyeCA1MCkKCSkKCSh0YnRleHQgIjEiCgkJKG5hbWUgIiIpCgkJKHBvcyAyNSAxIGx0Y29ybmVyKQoJCShmb250CgkJCShzaXplIDEuMyAxLjMpCgkJKQoJCShyZXBlYXQgMTAwKQoJCShpbmNyeCA1MCkKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDUwIDIgbGJjb3JuZXIpCgkJKGVuZCA1MCAwIGxiY29ybmVyKQoJCShyZXBlYXQgMzApCgkJKGluY3J4IDUwKQoJKQoJKHRidGV4dCAiMSIKCQkobmFtZSAiIikKCQkocG9zIDI1IDEgbGJjb3JuZXIpCgkJKGZvbnQKCQkJKHNpemUgMS4zIDEuMykKCQkpCgkJKHJlcGVhdCAxMDApCgkJKGluY3J4IDUwKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMCA1MCBsdGNvcm5lcikKCQkoZW5kIDIgNTAgbHRjb3JuZXIpCgkJKHJlcGVhdCAzMCkKCQkoaW5jcnkgNTApCgkpCgkodGJ0ZXh0ICJBIgoJCShuYW1lICIiKQoJCShwb3MgMSAyNSBsdGNvcm5lcikKCQkoZm9udAoJCQkoc2l6ZSAxLjMgMS4zKQoJCSkKCQkoanVzdGlmeSBjZW50ZXIpCgkJKHJlcGVhdCAxMDApCgkJKGluY3J5IDUwKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMCA1MCBydGNvcm5lcikKCQkoZW5kIDIgNTAgcnRjb3JuZXIpCgkJKHJlcGVhdCAzMCkKCQkoaW5jcnkgNTApCgkpCgkodGJ0ZXh0ICJBIgoJCShuYW1lICIiKQoJCShwb3MgMSAyNSBydGNvcm5lcikKCQkoZm9udAoJCQkoc2l6ZSAxLjMgMS4zKQoJCSkKCQkoanVzdGlmeSBjZW50ZXIpCgkJKHJlcGVhdCAxMDApCgkJKGluY3J5IDUwKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMTM1LjY2OSAyOS4xOTIpCgkJKGVuZCA0OS4zMDkgMjkuMTkyKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMTM1LjY2OSAyNC4xMTIpCgkJKGVuZCA0OS4zMDkgMjQuMTEyKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgMTM1LjY2OSAxOS4wMzIpCgkJKGVuZCAyIDE5LjAzMikKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDQ5LjMwOSAzNC4yNzIyKQoJCShlbmQgNDkuMzA5IDE5LjAzMjIpCgkpCgkodGJ0ZXh0ICJEb2N1bWVudCBOYW1lOiIKCQkobmFtZSAiIikKCQkocG9zIDEzNC4zOTkgMzEuNzMyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKSBib2xkKQoJKQoJKHRidGV4dCAiJHtUSVRMRX0iCgkJKG5hbWUgIiIpCgkJKHBvcyAxMTYuNjk5IDMxLjczMjIpCgkJKGZvbnQKCQkJKGZhY2UgIkFyaWFsIikKCQkpCgkpCgkodGJ0ZXh0ICJQcm9qZWN0IE5hbWU6IgoJCShuYW1lICIiKQoJCShwb3MgMTM0LjM5OSAyNi42NTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke0NPTU1FTlQzfSIKCQkobmFtZSAiIikKCQkocG9zIDExOS42OTkgMjYuNjUyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCSh0YnRleHQgIlNoZWV0IE5hbWU6IgoJCShuYW1lICIiKQoJCShwb3MgMTM0LjM5OSAyMS41NzIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke0ZJTEVOQU1FfSIKCQkobmFtZSAiIikKCQkocG9zIDEyMS4wOTkgMjEuNTcyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDEzNS42NjkgMTMuOTUyKQoJCShlbmQgMiAxMy45NTIpCgkpCgkodGJ0ZXh0ICJBdXRob3I6IgoJCShuYW1lICIiKQoJCShwb3MgMTM0LjM5OSAxNi40OTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke0NPTU1FTlQyfSIKCQkobmFtZSAiIikKCQkocG9zIDEyNi4xOTkgMTYuNDkyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCShsaW5lCgkJKG5hbWUgIiIpCgkJKHN0YXJ0IDEzNS42NjkgOC44NzIpCgkJKGVuZCAyIDguODcyKQoJKQoJKHRidGV4dCAiRGF0ZToiCgkJKG5hbWUgIiIpCgkJKHBvcyA0OC4wMzkgMTEuNDEyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKSBib2xkKQoJKQoJKHRidGV4dCAiJHtJU1NVRV9EQVRFfSIKCQkobmFtZSAiIikKCQkocG9zIDQyLjEzOSAxMS40MTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpCgkJKQoJKQoJKHRidGV4dCAiU2hlZXQgTnVtYmVyOiIKCQkobmFtZSAiIikKCQkocG9zIDEzNC4zOTkgMTEuNDEyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKSBib2xkKQoJKQoJKHRidGV4dCAiJHsjfSBvZiAkeyMjfSIKCQkobmFtZSAiIikKCQkocG9zIDExOC42OTkgMTEuNDEyMikKCQkoZm9udAoJCQkoZmFjZSAiQXJpYWwiKQoJCSkKCSkKCSh0YnRleHQgIlJldmlzaW9uOiIKCQkobmFtZSAiIikKCQkocG9zIDg3LjQwOSAxMS40MTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpIGJvbGQpCgkpCgkodGJ0ZXh0ICIke1JFVklTSU9OfSIKCQkobmFtZSAiIikKCQkocG9zIDc3LjIwOSAxMS40MTIyKQoJCShmb250CgkJCShmYWNlICJBcmlhbCIpCgkJKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgNDkuMzA5IDEzLjk1MjIpCgkJKGVuZCA0OS4zMDkgOC44NzIyKQoJKQoJKGxpbmUKCQkobmFtZSAiIikKCQkoc3RhcnQgODguNjc5IDEzLjk1MjIpCgkJKGVuZCA4OC42NzkgOC44NzIyKQoJKQoJKHRidGV4dCAiTW9kdWxhciBDaXJjdWl0IERlc2lnbiBTdHVkaW8gZGVzaWducyBhcmUgbWFjaGluZS1nZW5lcmF0ZWQgZHJhZnRzIGFuZCByZXF1aXJlIHZlcmlmaWNhdGlvbiBieSBxdWFsaWZpZWQgc3BlY2lhbGlzdHMuIFxuQnkgdXNpbmcgdGhlc2UgZGVzaWducywgeW91IGFncmVlIHRvIHRoZSBlZGEuY24gVGVybXMgb2YgVXNlOiAke0NPTU1FTlQxfSIKCQkobmFtZSAiIikKCQkocG9zIDEzNC4zOTkgNi4zMzIpCgkJKGZvbnQKCQkJKGZhY2UgIkFyaWFsIikKCQkpCgkpCgkoYml0bWFwCgkJKG5hbWUgIiIpCgkJKHBvcyAyNS40MDggMjYuOTA2KQoJCShzY2FsZSAwLjc1ODA2NDUxNjEpCgkJKGRhdGEgImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFJNEFBQUF5Q0FZQUFBQ0s5ZU1HQUFBQUNYQklXWE1BQUE3REFBQU93d0hIYjZoa0FBQUEiCgkJCSJHWFJGV0hSVGIyWjBkMkZ5WlFCM2QzY3VhVzVyYzJOaGNHVXViM0pubSs0OEdnQUFFRUJKUkVGVWVKenRuWG1jVk5XVng3Ky9WKzlWIgoJCQkiSXlJRUJISDdtQmhsSERmOFJCcG5rb3hMM0dmVWNaMDJ4R1Zzc0xzS25lQVN0OEc0a01SdEpDUXFoSDdkOE1HNEQrNUxOSTY0eHkxMiIKCQkJImswR05ZK0lXTUFoK1JDR3lTSGRWdlROL3ZOZnQ2K3JhZXFOUitINCs5YUhlZmZlZWM2dnJjTis1NTU1N1MyWkdNVnFrbllEamdYOEIiCgkJCSJkZ1oyQUFZWGJkQzN0QUhMZ1NVR1R4bzhNTjdzZnplUWJpUnQ3Y0UzT3BYQitsYXpQK2JWRytuQjErTmxHVmhtWmg5dWdHNjI5eUVKIgoJCQkialBKZ2xNRzJCbHRtemU0dDE4NlZUbkJnWkx3c0EvZVoyWXF5T2dzWnppSnBod3hjTHBnSXVOMzREUDJLWUVFQUYxV2IvYUcvZFhuUyIKCQkJIkU4Q2hlY1dYWjh4K0dpOUlTdlVHZmw2OWFSbXpLMHZKbDdTbG1hMHQxdzlKUTEyWWFqRFVnU0VHV3dGRGdPSFJ2OXRFNytOOG1ESGIiCgkJCSJvWnhzVDJvR3huWFNCOVZ0WmkzbDJuWXhpb1hTa1FaM0NZYVZhN3loTVRoVThHcUxkT2s0cyt2NlM0OHJuYTQ4b3hGOGtJR2Y5MWEyIgoJCQkicENFdVhKQ0EweVh0Wm1hWk1rMkdBQmNMS1A1czJQQTQ4WXRtS1dYd0NCdWgwY1JJQU5jdWxHN3FEK0dTdGhaTXp5OFA0SHd6VzljTCIKCQkJInVYS2wwMTE0QjdoQ3NITWlkQU8rbEhRWXprTHBDTUZNd2k5bW84ZmdQMXFrYy9wU3BpVEhoVnVCVVhtM2ZwTTF1NmVuY2ozcFFCZCsiCgkJCSJML2cxTUxwREgwenBxY3dDL0E1NHdHQXU4S3VZN2g5NTBvZnRyNlIwYzRWOVBpemV6cE1XeHUrN0FDM1NTT0F1TmlKL3BrS210MGhQIgoJCQkialRON3ZTK0V1ZkFUNEovemlsZGs0Y3lleUt1U3hnWndEZUhrb2dzRzIwc2FabVovS3lIbU0rQWl3YWNCckJTc0JLWUIrOGNyWmN6MiIKCQkJIkw5ZzY5SW0yaStuY3VwSytHd3hTckYwKzdZWnlPZkMxU2dSdVpMakExY0F4dlJZa0hTK1ltbDl1a0RLejVkMlJaYkJUVXJyVjRBZmsiCgkJCSJ1UU1SYTRGcmN2QnpNMXRmVXBiWkd1RDZlSmtubmRlZC92UUg3dXZTY0NCVnBwNFpQTzdBVTBDcC94MTlob0VyMk5WZ0FyQnRpYXBIIgoJCQkidnlydE9UNXZtdHdkWE9rb3dSMkE4bTQ5bXpXN3I3dnlCTFZGSEZrVDNKT0JDODFzY2ZkN3V2SGd0c0xSZ21TSk9xc05UcWcyVzdEQiIKCQkJImVoWGpOZW15VE9oM0ZIVWtFM0FzMENQRGlZem1IbUJRZ2R1ZjlVUm1FWjRITG00emU2a1BaUTRZanVESVVoVUVadzJVMFFDTU5WdTciCgkJCSJPaHp5M3lwUjdmQ2V5RTVLWndydXA3RFJsRVRTSUZjNnpTQmRwdXFUd0VFWnN3TXlYeEdqZ2RCSDJLbkUvZVg3aGtQNGdIS1EyZnFXIgoJCQkiY1BvOXE5QjlLLzBadWlCcEt3OW1HNXpTelhZSkZ3NDBPTW1GNzlNMThCYm5NZUJuR2JNWHU2TWpuNlIwZGdCajQyVU9qTTEvRkNhbCIKCQkJIitlM3ZEZDdMbUYzU0c3M2xjSUh0Uzl4L0hiT2dQenRRS1FhTDhoMlFHRVc5LzN3a0RVbkFRb05kdTZOL2tEVEdoUmVBVVNYNkVlcUEiCgkJCSJ1amF6T2QyUlh3eURJNVRuL0JmeW53eitMWFpaTnZMYlcxeEtETk1HWFR6K0Z1a3lZTDhpOWQrcE5xdkk0MitXSmloOEJGVWt4NEgxIgoJCQkiSlNLbkZUOXF6R3hOVW1vdVlEaC9BbllyMWk2QW9YU043eFNyKzFHeGU0T2tYYkt3Yjd3c0J3K1pXV3Nsc3Z1WUxyNnRRVlVsRFhzUyIKCQkJInQ5a1BPTHJRRGNIQ1F1VkYySzJQNUhTYkRKem5odkdhWVFBR2pRN01NK2l1RC9JbThCZUt4R2tLa1lOVEZNWmgyc2tDVzNSVGI1OGciCgkJCSJHRmJnUCtOV2xiUXRGR1A0eW1ObXk2TXZiNDNCcVZtekZGQnV6YWlkVDZMbzdQNFpzejBGRDNaTE4reVlkLzJCbVdXTDFVL0ErWUpxIgoJCQkiUWJYQmFVV3FyVFNvYVg4QkZmazNGbzZpK1dVVkxUZDkyU0xGZlVZR2JxcUNoOWFidlZ0aC9hVXVISjZGcDB0OTBSRkZINTNLYzNRRiIKCQkJIjc1Y1N0TjdzbmZiM1NlbmJSUjdYbjJmTjdpN1RwODc5Q0JkYnV4aUo4bEpFaXJISkdrNzA1VmRrTkZIOTVZVDVRWlZ3blNmdFFXY2YiCgkJCSJNU0hZRy9pSFRuTERSMTJsRkZ0V1FOSWdEMzVnY0h3V1RqU3p0bEtDUE5qTHVnWThFZXhaU1VjMldjUHBLd0pZbS8vWFY1ajBkbVYrIgoJCQkiM1VLamhlRC9LdEVUTGNBZVZPVDIxaTU4WUZGU2xnZG5BSTJSL0llQmpxUXlnL2FJOWQ2RkJGazBJdVpna1JkYlVRakNaWklPTmh0TyIKCQkJIkw4bkJNeTZzcGtLbk1vL1dSQmlBTElzTEJ4SW1iUldpaXM2em9Vc2wzV3htYlZGU1ZxSHArY0ZGWkkyVk5OTE1saEFaWHlFMlNlZTQiCgkJCSJMekd6cFlTencyYkNHVklsdEFLTERHb3E5YkVpcDdjVXkySjFkNHBHbllKSXFyTGlNOEZFQW80bzE1L05JMDRQU0VxM0dld2VLL280IgoJCQkiWXphK3YvUkpjbDA0TVZhVW8ydmUxQnpnc3RqMTFQWlJKMTllWkJoZFpsUWQrdUE0NFBaU2ZlcHJ3OW1sUlhxNGtvcUN2K3RqM2IwaSIKCQkJIkE0dTl2Q3lCbUQ5QVh2bnVkQTdpTFN0VXI2OUloT3VKOGVEalM4QS94ZXNJSGpHb0pacnVHM3c5N3V2azFmMVJHWlhIU3RvaEdrMEwiCgkJCSIwdGVHTTR3aVFiMk5uU2l6ditnemZTQVJUSTVkZmdZOFI1N2hFSTVDYzRFclltV1g1bzg2bnZRZDRJQzh0bGs2MjRMbndpVEN4TGFDIgoJCQkiYkpLUHFxUTB6bnFYL0pXL05yYVZKMTNaQzNuUFpNeWVLWFJEMGpmY3poa01DeWdTck14Q2t3dVhFbjJ2Qm04QUk0akNDTkhNN1BvQyIKCQkJIlRYOUNPTnJHZDBiOFVOSU54YklUTjBuRElkd1Nja1haV3BVenBBL2tQVk9vMEEzVE5qb21NWUxmRk1zR01MT2xYdWdxRENYY3l0TnAiCgkJCSJaZDZES1FiZnlXdTJPZ3MzdWVEUjJVY2E2Y0tGd0k4TDZkbzhxOXFJVVppZEdjLzN5V1hnMFZKdHNuQjZ4dXpRZktPcGtzWWEvS3hBIgoJCQkia3lZelc1V0ZKc0xIWFp6ekpCV01KRzgybkkwWUY4Nmw4N0xBRStYeW42TWM1VTVJR3BtREI0QXQ4MjZ0eThJdm9uWWZDUEozZnc1MiIKCQkJIllaNmtMbmF5cVQ2cVd1aThRdDFkNnVuczU2eWhkNXYxbmlsVXFIQkJ0UU9EZWQwVkhLMUozVThZemM3bkNqUDdhL3VGQTFOellScHUiCgkJCSJQSmo0UFE5K0NOd1FiOWpYaHJPQ0NpT2hoSDdHdm1WcjlRTWxvcWtWNFVuSDBObHdWcGZiOHRzVDJzeHU5S1R0Q0ZlN2wwYWpSc1ZJIgoJCQkiMnRJTmx4enlaMkFBaTdKNXhyRGU3RjFQdXBIUXQrbkE0SHBQV2hSMzRQdmFjSmFNTTZ1dnBHS3pkS1VHeUhDK1RHUmhhaUxNT3Z4eiIKCQkJInVZWExPSkpHdVdIS3g3Y0xpUlhVRnRwK25JV3JYRGlkMk1aQlFzZDV2cVQ5ek93dnNObkgyZWd4TTh0Qk9sc2szN29RVmRKZUNYaUYiCgkJCSJ3a2FENEp5MklnYzNSTlB2TStpNkpqdktoZjlST0FKdU5wd3ZBMmFXcmVSa2kzWUNhRkJobndaZ2VwdlpyNHJjQXlCajlsdnlIbU1SIgoJCQkiWTF4NFF0S296WWJ6RmNRSm5mZENCeVRjbDRXTEs1R1JEZjJxUWltOG81S3d6V2JEK1FyU2F2YW00UHk4NG51emNJcFZ1R3ZGekZxeiIKCQkJImNJdzZyOWQ5NU1BaHJXWi8zR3c0WDFIYXpIeUZCMGtBM0ppRm1uTDcxUE14c3c4VnBsOThLdmdnQWZ1M21yMEJtMjRjcDdjOFJ5eXIiCgkJCSJUdkRKQnRiL082RFR3VktaQW1tdEdUakxnd1Z0Wm5ON3FxalY3TTJrZEZRQ1B2cmNyQ00vK2t0ak9EbFlxdkJrcXM4RW93MzJJY3dyIgoJCQkiMlZCbkVuYVFxWER2V0QvcVgwQzQyRmtTTTF0SnVHTGVLOXJNWHM0djY0bmgvTDdZRFF0UG02cVVQeEdlL2xXUm5QRmhxUDIvNG1VdCIKCQkJIjBqREJoUVlYZFVQdlp2cUNabmk3R2F6UTYxVjR6TXpZV0Y3eklmRWlqSGdhM0hqNXEvRGRnZTVic1ZjcWxUcTFQK1hYMTlkN0EvRzUiCgkJCSJISXM5cS9OUk4vZFg5eGV2U3VOYnBFZStDV3VUOE1sV3NLNUZlcnhaK2k1QXRka0xBOTNIWWxnL0huSUpJT25KZERxOVIzL3FLSVJUIgoJCQkiWmtQWXJzM1NRUnVxTTRWWUtKM3FoSnY5aitLTHhUY1BPRnp3YkxNMGFlQjZOL0FrazhuREdob2EzdXlOakZRcTVhVlNxVzRkR0twWCIKCQkJIjRmdUNPMHZVV1d4d2NMWFplNzNwWEU5b2tmWW0zRDFRNnVDbmpNRysxZEUwc1J3MU5UV0o0Y09IdjlEVzFuYmt2SG56VnRYWDEvOHIiCgkJCSJjR2hqWStNVWdQcjYranNrdlM5cGNVTkRRMk5OVFUxaXhJZ1JUNXZaSWI3dloxS3AxSm5BanBKMmIyaG9PQmtnblU3L01naUMrWTJOIgoJCQkialMvVzFkWHQ3RGpPTk4vM1R3ZElwVkxMQ0JPLzY4M3NOYy96VG1wcmF4dmpPTTRCdnU5ZkZlazhSOUkydnU5ZldsZFhOemFSU013MCIKCQkJInN6Rm05clNrZi9kOVAxTmZYejhldU1weG5CSEFUNE1nT0xLeHNYRnlLcFZxY2h6bmhpQUlqZzJDNExtbXBxYm5JNzBQQmtGd1ExTlQiCgkJCSIwMVB0bjcyK3Z2NElTVk9Cb1daMmUyTmo0L1IwT24yeW1jMG1uR1Fzek9WeUUrYk1tYk00bFVyZEd1bS9BRmdzNlJJenU1WXdwM21LIgoJCQkicS9BY2w4OHB2dkg5NjRLRnpkS3NCRHhsc0txU0w2aW5HS3dhOThXV2tZc3BiVFFBWHBSOFhWdUovUG56NStmUzZYUkxWVlhWaWNCYyIKCQkJIlNST0EvVk9wMUNXZTUyMGhhVmRKMXdWQjBBZzBEaDgrL0FBejIwZlNZY0NqWm5aS01wazhJNVBKUERWcDBxVHRYZGY5R0RndU90MzgiCgkJCSJSVWtuU29vblVXMExMSzJxcXRxeHRiWDEwbXcyZTBFaWtYald6RHF5K0tLRXJaSFIrMm96TzlmMy9ZV3BWR3FHbWRWTW1qVHBJZGQxIgoJCQkicHdNbkRoNDhlTzJhTld0dWNSeW5mVWxoZERhYnJYSWNaNmRFSXZHMW1Nd2RFb2xFUi81Tk9wM2VSOUpjNEVUUDg5N0paRExuMU5YViIKCQkJImpYVWM1MnJDck1BbFFGTWlrV2dFanBDMHU2VDMxcTFiTjM3dzRNRjNBVE9BWTRJZytNZEVJakhOR1dmMk4wRzVNNE9IQ2FZR3NNQ2ciCgkJCSJ1WjlmVjhYMEhsS0pNVkI4YzFsQmNybmNyV1kyb2JhMmRoQ3dsNlFHTXp1NnJhM3RXRE9iMzlEUXNFaFNWVHFkSGlQcEpFbG5tOW1FIgoJCQkidXJxNjBaSnM1c3laaTRFN1hkZXRrWFFJWWZaY2RTcVY4aVFkNjdwdWZCLzNDdC8zZjNIampUZCtGZ1RCL2NDWVVuM0xack1QU3pvbyIKCQkJIm5VNy8wc3kyQm5ieFBPOElTWS82dnI5aXhvd1puMHNxbWtSZWdsUE5iSjd2KzYvTW5EbnpFOS8zTDNjYzV6Qko5L20rLzVidisrc2MiCgkJCSJ4NWtPSERabHlwU2gwZC9wNWx0dXVXV3RtZjNXekY2TzZqeHZaanM3QUI1Y1M1aExzekVRWDJNcGRlSlZuTkhscTN4QlUxUFR5OEIyIgoJCQkibnVkTkJCN01ack8zU2pwWjBnbEJFTFIvNmJjR1FUQWhDSUl4RFEwTnQwbmExWEdjVXhXZGZDWHAxNFNuY3AwUUJNRWRoTmw1WndBciIKCQkJIlo4NmNHUThJeGxNaE1vUS9neEFRQzRXWVdRSmcyclJwanVkNVR3SnZPbzR6RzFnUlpkOGx6S3pjR1VEV0xpZTZjUE51dGtwYW5WZjIiCgkJCSJlUkFFUTlxdmM3bmNXaURudW00R0lBaUMxdWl6WnFLKzQvdCtCbkFjZ0wzTlZncE95UHVRQTRJNkc4c0hGVGI3YS9rcVhiaGQwaldTIgoJCQkiN3Bnelo4NWl3aFROcXVnOXJ1dmVMdWxjU1FzQXpPeCs0RDh0T2lpN29hSGhiU0F3c3gyYm1wcmVsM1M3cE9sbTl0OFRKMDRjTlhIaSIKCQkJInhGS0hNTDBMakt1dHJSMTA5dGxuYnl2cEpJQWxTNVpzQ1F6OTlOTlBueG85ZXZTN2tzWUFKQktKWjRIYSt2cjZBeWRQbnJ5Tm1SVTYiCgkJCSJHUHh0b29TdHVycTZnNEU5QU00Ly8vd3R6anJyckc4NmpuT1hwSnBVS2pXc3RyWjJVRHFkbmlicEVVa0hUWjQ4ZWE5VUtqVVl1TWpNIgoJCQkiWnMrWU1lUHpjbis4anJXcWZjMmVOemlMcmduTEc1cjQxTEtpakRmQlF6M1FjeHZ3UlB1TXhNem1FVXZObkRWcjFuTGdidGQxN3dSdyIKCQkJIlhmZE9NN3ZiOS8yT2tkbk1acG5aN1FDUm5NYzh6M3ZRODd5VFhOYzlEa0RTa3BqT2RjQzd2dSsvQmR5YlRDYmZ5MmF6VDVyWlRjQ1MiCgkJCSJ1WFBucmdadUdqNTgrRXZMbGkxN0dWaHRaaXVqdmt5VmRFY1FCSzlMaXVmU3ZBdXNjMTNYQi80K2xVb3RkeHpuUXVEcVhDNjNhdlhxIgoJCQkiMWRYWmJQYmMyYk5udnhFRXdTWEFYWjduTFFEVytiNi9STkpwWm5ZRDhJcmpPR3RXclZwMVh2VFpsaWFUeVN4QUVBUWZTNHFIYlY3ciIKCQkJIjh1c3g3VDhDd2dEK25vTURlMzdMN00wL1NLTUNlSTNTNXh4L0hNRFk4ZDA4eFByTHpLUkprN2IzUE8raGhvYUc2b0hxUTVmVjhYM0QiCgkJCSJKSjdkS2J4ZFlvTVFSSHVVdm1YMmNiUTV2dGhXMUk4TWp0NlVqR1pqb1dCYXhUaXpaZVBNNm9Nd2kyd0s4RGp3WndvbkIvVUhOZTJCIgoJCQkidmVpM3FmWTArSEYwUnQ5N3dNdUNLOXRnajJxem9tdG5YMVdHRFJ1Mk1ucnNEQmovRDJLVHp6ZGJvdlp5QUFBQUFFbEZUa1N1UW1DQyIKCQkpCgkpCikK";
175
+
176
+ // src/converter/kicad_sexpr/eeschema/drawing_sheet/index.ts
177
+ function get_sch_default_drawing_sheet() {
178
+ return import_js_base64.Base64.decode(BASE_64_ENCODED_SCH_DEFAULT_DRAWING_SHEET);
179
+ }
180
+
181
+ // src/converter/kicad_sexpr/eeschema/printer.ts
182
+ var import_electronics_model = require("@modular-circuit/electronics-model");
183
+ var import_ir = require("@modular-circuit/ir");
184
+ var import_utils3 = require("@modular-circuit/utils");
185
+
186
+ // src/utils/collect_sub_sheets.ts
187
+ var import_utils = require("@modular-circuit/utils");
188
+ async function collect_sub_sheets(dependencies, module_resolver) {
189
+ const sheets = {};
190
+ const module_main_sheet = {};
191
+ const modules = {};
192
+ for (const [k, v] of Object.entries(dependencies)) {
193
+ const zip_archive_url = await module_resolver.get_module_archive({
194
+ ...(0, import_utils.parse_module_name)(k),
195
+ version: v
196
+ });
197
+ const module2 = await module_resolver.get_module_circuit({
198
+ ...(0, import_utils.parse_module_name)(k),
199
+ version: v
200
+ });
201
+ if (!zip_archive_url || !module2) {
202
+ console.error(`Module ${k}/${v} not found`);
203
+ continue;
204
+ }
205
+ if (!module2.main) {
206
+ console.error(`Missing main entry in module ${k}/${v}`);
207
+ continue;
208
+ }
209
+ module_main_sheet[k] = module2.main;
210
+ modules[k] = module2;
211
+ const zip_archive = await fetch(zip_archive_url).then((res) => res.arrayBuffer());
212
+ const files = await (0, import_utils.unzipFile)(zip_archive);
213
+ for (const [name, content] of Object.entries(files)) {
214
+ if (name.endsWith(import_utils.KICAD_SHC_FILE_EXT)) {
215
+ const fileName = (0, import_utils.remove_filename_path_prefix)(name);
216
+ if (fileName in sheets) {
217
+ console.error(`Duplicate sheet name: ${fileName}`);
218
+ continue;
219
+ }
220
+ sheets[fileName] = content;
221
+ }
222
+ }
223
+ }
224
+ return { sheets, module_main_sheet, modules };
225
+ }
226
+
227
+ // src/utils/constraints.ts
228
+ var PAPER_SIZE = {
229
+ A0: { width: 841, height: 1189 },
230
+ A1: { width: 594, height: 841 },
231
+ A2: { width: 420, height: 594 },
232
+ A3: { width: 297, height: 420 },
233
+ A4: { width: 210, height: 297 },
234
+ A5: { width: 148, height: 210 },
235
+ A6: { width: 105, height: 148 },
236
+ A7: { width: 74, height: 105 },
237
+ A8: { width: 52, height: 74 }
238
+ };
239
+ var DEFAULT_PAPER_SIZE = PAPER_SIZE.A4;
240
+ var GENERATOR_NAME = "modular_circuit";
241
+ var SCH_VERSION = 20231120;
242
+ var PAPER = "A4";
243
+ var GENERATOR_VERSION = "8.0";
244
+
245
+ // src/utils/filter_null_undefined.ts
246
+ function filterNullOrUndefined(originalMethod, _context) {
247
+ function replacementMethod(...args) {
248
+ if (args.length === 0 || args.length === 1 && (args[0] === void 0 || args[0] === null)) return "";
249
+ const result = originalMethod.call(this, ...args);
250
+ return result;
251
+ }
252
+ return replacementMethod;
253
+ }
254
+
255
+ // src/utils/string_formatter.ts
256
+ var tab = " ";
257
+ var StringFormatter = class {
258
+ constructor(intend = 0) {
259
+ this.intend = intend;
260
+ this.content = "";
261
+ }
262
+ toString() {
263
+ return this.content;
264
+ }
265
+ get intend_level() {
266
+ return this.intend;
267
+ }
268
+ enter_scope() {
269
+ this.intend += 1;
270
+ }
271
+ exit_scope() {
272
+ this.intend -= 1;
273
+ }
274
+ append(str) {
275
+ this.content += str;
276
+ }
277
+ append_line(str) {
278
+ this.content += `${tab.repeat(this.intend)}${str}`;
279
+ }
280
+ append_quote(str) {
281
+ this.append(`"${str}"`);
282
+ }
283
+ };
284
+
285
+ // src/utils/collect_sub_sheets_by_id.ts
286
+ var import_utils2 = require("@modular-circuit/utils");
287
+ async function collect_sub_sheets_by_id(module_ids, module_resolver) {
288
+ const sheets = {};
289
+ const module_main_sheet = {};
290
+ const modules = {};
291
+ for (const id of module_ids) {
292
+ const zip_archive_url = await module_resolver.get_module_archive_by_id(id);
293
+ const module_circuit = await module_resolver.get_module_circuit_by_id(id);
294
+ if (!module_circuit) {
295
+ console.error(`Module ${id} not found`);
296
+ continue;
297
+ }
298
+ if (!zip_archive_url || !module_circuit) {
299
+ console.error(`Module ${module_circuit.author}/${module_circuit.name} not found`);
300
+ continue;
301
+ }
302
+ if (!module_circuit.main) {
303
+ console.error(`Missing main entry in module${module_circuit.author}/${module_circuit.name}`);
304
+ continue;
305
+ }
306
+ const k = (0, import_utils2.fmt_module_name)(module_circuit);
307
+ module_main_sheet[k] = module_circuit.main;
308
+ modules[k] = module_circuit;
309
+ const zip_archive = await fetch(zip_archive_url).then((res) => res.arrayBuffer());
310
+ const files = await (0, import_utils2.unzipFile)(zip_archive);
311
+ for (const [name, content] of Object.entries(files)) {
312
+ if (name.endsWith(import_utils2.KICAD_SHC_FILE_EXT)) {
313
+ const fileName = (0, import_utils2.remove_filename_path_prefix)(name);
314
+ if (fileName in sheets) {
315
+ console.error(`Duplicate sheet name: ${fileName}`);
316
+ continue;
317
+ }
318
+ sheets[fileName] = content;
319
+ }
320
+ }
321
+ }
322
+ return { sheets, module_main_sheet, modules };
323
+ }
324
+
325
+ // src/converter/kicad_sexpr/eeschema/printer.ts
326
+ var SCOPE_START = "\n ";
327
+ var SPACE = " ";
328
+ var SCOPE_END = "\n";
329
+ var IGNORE_BOOLEANS = /* @__PURE__ */ new Set(["power"]);
330
+ var _color_dec, _stroke_dec, _fill_dec, _fields_dec, _justify_dec, _lib_id_dec, _unit_dec, _pin_defs_dec, _drawings_dec, _lib_children_dec, _pin_display_opt_dec, _power_dec, _init;
331
+ _power_dec = [filterNullOrUndefined], _pin_display_opt_dec = [filterNullOrUndefined], _lib_children_dec = [filterNullOrUndefined], _drawings_dec = [filterNullOrUndefined], _pin_defs_dec = [filterNullOrUndefined], _unit_dec = [filterNullOrUndefined], _lib_id_dec = [filterNullOrUndefined], _justify_dec = [filterNullOrUndefined], _fields_dec = [filterNullOrUndefined], _fill_dec = [filterNullOrUndefined], _stroke_dec = [filterNullOrUndefined], _color_dec = [filterNullOrUndefined];
332
+ var SCHEMATIC_PRINTER = class {
333
+ constructor() {
334
+ __runInitializers(_init, 5, this);
335
+ }
336
+ schematic(sch) {
337
+ const lib_symbols = (() => {
338
+ if (!sch.lib_symbols?.symbols.length) return "";
339
+ return `${SCOPE_START}(lib_symbols ${sch.lib_symbols?.symbols.map((it) => this.lib_symbol(it)).join(`${SCOPE_END}`)} )`;
340
+ })();
341
+ const wires = (() => {
342
+ if (!sch.wires?.length) return "";
343
+ return `${SCOPE_START}${sch.wires.map((it) => this.wire(it)).join(`${SCOPE_END}`)} `;
344
+ })();
345
+ const labels = (() => {
346
+ if (!sch.labels?.length) return "";
347
+ return `${SCOPE_START}${sch.labels.map((it) => this.label(it)).join(`${SCOPE_END}`)}`;
348
+ })();
349
+ const sch_sheets = (() => {
350
+ if (!sch.sheets?.length) return "";
351
+ return `${SCOPE_START}${sch.sheets.map((it) => this.sch_sheet(it)).join(`${SCOPE_END}`)} `;
352
+ })();
353
+ const sch_symbols = (() => {
354
+ if (!sch.symbols?.length) return "";
355
+ return `${SCOPE_START}${sch.symbols.map((it) => this.sch_symbol(it)).join(`${SCOPE_END}`)} `;
356
+ })();
357
+ return `
358
+ (kicad_sch
359
+ (version ${SCH_VERSION})
360
+ (generator "${GENERATOR_NAME}")
361
+ (generator_version "${GENERATOR_VERSION}")
362
+ (uuid "${(0, import_utils3.gen_uuid)()}")
363
+ (paper "${PAPER}")
364
+ ${lib_symbols}
365
+ ${wires}
366
+ ${labels}
367
+ ${sch_symbols}
368
+ ${sch_sheets}
369
+ )
370
+ `;
371
+ }
372
+ power(power) {
373
+ return power ? "(power)" : "";
374
+ }
375
+ pin_display_opt(opt) {
376
+ if (!opt) return;
377
+ const offset = (off) => off ? `(offset ${off})` : "";
378
+ const hide = (h) => h ? "hide" : "";
379
+ const pin_numbers = `${opt.pin_numbers ? `(pin_numbers ${offset(opt.pin_numbers.offset)} ${hide(opt.pin_numbers.hide)})` : ""}`;
380
+ const pin_names = `${opt.pin_names ? `(pin_names ${offset(opt.pin_names.offset)} ${hide(opt.pin_names.hide)})` : ""}`;
381
+ return `${pin_numbers}
382
+ ${pin_names}
383
+ `;
384
+ }
385
+ lib_symbol(lib_symbol) {
386
+ return `
387
+ (symbol "${lib_symbol.name}" ${this.power(lib_symbol.power)}
388
+ ${this.pin_display_opt(lib_symbol)}
389
+ ${this.booleans(lib_symbol)}
390
+ ${this.fields(lib_symbol.properties)}
391
+ ${this.pin_defs(lib_symbol.pins)}
392
+ ${this.drawings(lib_symbol.drawings)}
393
+ ${this.lib_children(lib_symbol.children)}
394
+ )
395
+ `;
396
+ }
397
+ lib_children(libs) {
398
+ if (!libs) return "";
399
+ return libs.map((i) => this.lib_symbol(i)).join(SCOPE_END);
400
+ }
401
+ pts(points) {
402
+ return `(pts ${points.map((i) => `(xy ${i.x} ${i.y} )`).join(SPACE)})`;
403
+ }
404
+ drawings(draws) {
405
+ if (!draws) return;
406
+ return draws.map((i) => this.drawing(i)).join(SCOPE_END);
407
+ }
408
+ drawing(draw) {
409
+ if (!("shape" in draw)) throw new Error(`Unhandled drawing ${draw}`);
410
+ switch (draw.shape) {
411
+ case import_ir.SHAPE_T.POLY:
412
+ return `(polyline
413
+ ${this.pts(draw.pts)}
414
+ ${this.stroke(draw.stroke)}
415
+ ${this.fill(draw.fill)}
416
+ )`;
417
+ }
418
+ throw new Error(`Unhandled drawing ${draw}`);
419
+ }
420
+ pin_defs(defs) {
421
+ if (!defs) return;
422
+ return defs.map((it) => this.pin_def(it)).join(SCOPE_END);
423
+ }
424
+ pin_def(def) {
425
+ return `(pin ${import_electronics_model.READABLE_ELECTRICAL_PINTYPE[def.type]} ${def.shape}
426
+ ${this.at(def.at)}
427
+ (length ${def.length})
428
+ (name "${def.name.text}"
429
+ ${this.effects(def.name.effects)}
430
+ )
431
+ (number "${def.number.text}"
432
+ ${this.effects(def.number.effects)}
433
+ )
434
+ )`;
435
+ }
436
+ label(label) {
437
+ return ` (${label.label_type} "${label.text}"
438
+ ${this.at(label.at)}
439
+ ${this.fields_autoplaced()}
440
+ ${this.effects(label.effects)}
441
+ ${this.uuid(label.uuid)}
442
+ )`;
443
+ }
444
+ unit(c) {
445
+ return `(unit ${c})`;
446
+ }
447
+ sch_symbol(sch_symbol) {
448
+ return `(symbol
449
+ ${this.lib_id(sch_symbol.lib_id)}
450
+ ${this.at(sch_symbol.at)}
451
+ ${this.unit(sch_symbol.unit)}
452
+ ${this.booleans(sch_symbol)}
453
+ ${this.fields(sch_symbol.properties)}
454
+ ${sch_symbol.pins.map((pin) => this.sch_symbol_pin(pin)).join(SCOPE_START)}
455
+ )`;
456
+ }
457
+ wire(w) {
458
+ return `(wire
459
+ ${this.pts([w.start, w.end])}
460
+ ${this.stroke(w.stroke)}
461
+ ${this.uuid(w.uuid)}
462
+ )`;
463
+ }
464
+ lib_id(id) {
465
+ if (!id) return;
466
+ return `(lib_id "${id}")`;
467
+ }
468
+ sch_symbol_pin(pin) {
469
+ return `(pin "${pin.number}" ${this.uuid(pin.uuid)})`;
470
+ }
471
+ sch_sheet(sheet) {
472
+ return `(sheet
473
+ ${this.at(sheet.at)}
474
+ ${this.size(sheet.size)}
475
+ ${this.fields_autoplaced()}
476
+ ${this.stroke(sheet.stroke)}
477
+ ${this.fill(sheet.fill)}
478
+ ${this.uuid(sheet.uuid)}
479
+ ${this.fields(sheet.fields)}
480
+ ${sheet.pins.map((sheet_pin) => this.sch_sheet_pin(sheet_pin)).join(SCOPE_START)}
481
+ )`;
482
+ }
483
+ sch_sheet_pin(sheet_pin) {
484
+ return `(pin "${sheet_pin.text}" ${sheet_pin.shape}
485
+ ${this.at(sheet_pin.at)}
486
+ ${this.effects(sheet_pin.effects)}
487
+ ${this.uuid(sheet_pin.uuid)}
488
+ )`;
489
+ }
490
+ at(pos) {
491
+ return `(at ${pos.position.x} ${pos.position.y} ${pos.rotation === void 0 ? "" : pos.rotation})`;
492
+ }
493
+ uuid(id) {
494
+ return `(uuid "${id}")`;
495
+ }
496
+ effects(e) {
497
+ return `(effects
498
+ (font
499
+ (size ${e.font.size.x} ${e.font.size.y})
500
+ )${this.justify(e.justify)}${e.hide ? "(hide yes)" : ""}
501
+ )`;
502
+ }
503
+ justify(justify) {
504
+ if (!justify) return;
505
+ return `(justify ${justify.horizontal} ${justify.vertical})`;
506
+ }
507
+ booleans(it) {
508
+ if (typeof it !== "object" || !it) return;
509
+ const res = [];
510
+ for (const [k, v] of Object.entries(it)) {
511
+ if (typeof v === "boolean" && !IGNORE_BOOLEANS.has(k)) res.push(`( ${k} ${v ? "yes" : "no"} )`);
512
+ }
513
+ return res.join(SCOPE_START);
514
+ }
515
+ fields(fields) {
516
+ if (!fields) return;
517
+ return fields.map((f) => this.field(f)).join(SCOPE_START);
518
+ }
519
+ field(field) {
520
+ return `(property "${field.name}" "${field.text}"
521
+ ${this.at(field.at)}
522
+ ${this.effects(field.effects)}
523
+ )`;
524
+ }
525
+ fill(f) {
526
+ if (!f) return;
527
+ return `(fill${f.type ? ` (type ${f.type})` : ""} ${this.color(f.color)})`;
528
+ }
529
+ size(s) {
530
+ return `(size ${s.x} ${s.y})`;
531
+ }
532
+ fields_autoplaced() {
533
+ return "(fields_autoplaced yes)";
534
+ }
535
+ stroke(s) {
536
+ if (!s) return;
537
+ return `(stroke
538
+ (width ${s.width})
539
+ (type ${s.type})
540
+ ${this.color(s.color)}
541
+ )`;
542
+ }
543
+ color(c) {
544
+ if (!c) return;
545
+ return `(color ${c.r} ${c.g} ${c.b} ${c.a})`;
546
+ }
547
+ };
548
+ _init = __decoratorStart(null);
549
+ __decorateElement(_init, 1, "power", _power_dec, SCHEMATIC_PRINTER);
550
+ __decorateElement(_init, 1, "pin_display_opt", _pin_display_opt_dec, SCHEMATIC_PRINTER);
551
+ __decorateElement(_init, 1, "lib_children", _lib_children_dec, SCHEMATIC_PRINTER);
552
+ __decorateElement(_init, 1, "drawings", _drawings_dec, SCHEMATIC_PRINTER);
553
+ __decorateElement(_init, 1, "pin_defs", _pin_defs_dec, SCHEMATIC_PRINTER);
554
+ __decorateElement(_init, 1, "unit", _unit_dec, SCHEMATIC_PRINTER);
555
+ __decorateElement(_init, 1, "lib_id", _lib_id_dec, SCHEMATIC_PRINTER);
556
+ __decorateElement(_init, 1, "justify", _justify_dec, SCHEMATIC_PRINTER);
557
+ __decorateElement(_init, 1, "fields", _fields_dec, SCHEMATIC_PRINTER);
558
+ __decorateElement(_init, 1, "fill", _fill_dec, SCHEMATIC_PRINTER);
559
+ __decorateElement(_init, 1, "stroke", _stroke_dec, SCHEMATIC_PRINTER);
560
+ __decorateElement(_init, 1, "color", _color_dec, SCHEMATIC_PRINTER);
561
+ __decoratorMetadata(_init, SCHEMATIC_PRINTER);
562
+
563
+ // src/converter/graph_to_netlist/graph_converter.ts
564
+ var import_electronics_model4 = require("@modular-circuit/electronics-model");
565
+
566
+ // src/converter/link_to_netlist/converter.ts
567
+ var import_electronics_model3 = require("@modular-circuit/electronics-model");
568
+
569
+ // src/converter/link_to_netlist/links/converters.ts
570
+ var import_electronics_model2 = require("@modular-circuit/electronics-model");
571
+
572
+ // src/converter/link_to_netlist/links/converter_base.ts
573
+ var LinkConverterBase = class {
574
+ constructor(ctx, ports, net_pros) {
575
+ this.ctx = ctx;
576
+ this.ports = ports;
577
+ this.net_pros = net_pros;
578
+ }
579
+ convert() {
580
+ if (!this.init_link()) return;
581
+ this.do_convert();
582
+ }
583
+ get_net_code() {
584
+ return this.ctx.nl_netlist.nets.length + 1;
585
+ }
586
+ gen_net_name(signal_name) {
587
+ const base_net_name = signal_name ? `${this.net_pros.name}-${signal_name}` : `${this.net_pros.name}`;
588
+ if (this.net_pros.is_global_pwr)
589
+ return base_net_name;
590
+ if (!this.ctx.net_names_count.has(base_net_name)) {
591
+ this.ctx.net_names_count.set(base_net_name, 0);
592
+ return base_net_name;
593
+ }
594
+ const count = this.ctx.net_names_count.get(base_net_name);
595
+ this.ctx.net_names_count.set(base_net_name, count + 1);
596
+ return `${base_net_name}-${count}`;
597
+ }
598
+ };
599
+ var MetaPortConverter = class extends LinkConverterBase {
600
+ do_convert() {
601
+ const pins = [];
602
+ for (const p of this.ports) {
603
+ const p_id = this.ctx.port_map.get(p);
604
+ pins.push(...Object.values(this.ctx.pin_map[p_id]));
605
+ }
606
+ this.ctx.nl_netlist.nets.push({
607
+ code: this.get_net_code(),
608
+ name: this.gen_net_name(),
609
+ pins
610
+ });
611
+ }
612
+ init_link() {
613
+ return true;
614
+ }
615
+ };
616
+ var CompositePortLinkConverterBase = class extends LinkConverterBase {
617
+ do_convert() {
618
+ for (const signal of this.get_signals()) {
619
+ const pins = [];
620
+ for (const port of signal.ports) {
621
+ pins.push(
622
+ this.ctx.pin_map[this.ctx.port_map.get(port.parent)][port.meta_port.label_associated]
623
+ );
624
+ }
625
+ this.ctx.nl_netlist.nets.push({
626
+ code: this.get_net_code(),
627
+ name: this.gen_net_name(signal.name),
628
+ pins
629
+ });
630
+ }
631
+ }
632
+ };
633
+
634
+ // src/converter/link_to_netlist/links/converters.ts
635
+ var CanLogicLinkTester = class extends CompositePortLinkConverterBase {
636
+ get_signals() {
637
+ if (!this.link) return [];
638
+ return [
639
+ {
640
+ name: "txd",
641
+ ports: [
642
+ {
643
+ parent: this.link.controller,
644
+ meta_port: this.link.controller.txd
645
+ },
646
+ {
647
+ parent: this.link.transceiver,
648
+ meta_port: this.link.transceiver.rxd
649
+ },
650
+ ...this.link.passive.map((port) => {
651
+ return {
652
+ parent: port,
653
+ meta_port: port.rxd
654
+ };
655
+ })
656
+ ]
657
+ },
658
+ {
659
+ name: "rxd",
660
+ ports: [
661
+ {
662
+ parent: this.link.controller,
663
+ meta_port: this.link.controller.rxd
664
+ },
665
+ {
666
+ parent: this.link.transceiver,
667
+ meta_port: this.link.transceiver.txd
668
+ },
669
+ ...this.link.passive.map((port) => {
670
+ return {
671
+ parent: port,
672
+ meta_port: port.txd
673
+ };
674
+ })
675
+ ]
676
+ }
677
+ ];
678
+ }
679
+ init_link() {
680
+ const controllers = [];
681
+ const transceivers = [];
682
+ const passive = [];
683
+ for (const v of this.ports) {
684
+ switch (v.type) {
685
+ case import_electronics_model2.PortType.CanControllerPort: {
686
+ controllers.push(v);
687
+ break;
688
+ }
689
+ case import_electronics_model2.PortType.CanTransceiverPort: {
690
+ transceivers.push(v);
691
+ break;
692
+ }
693
+ case import_electronics_model2.PortType.CanPassivePort: {
694
+ passive.push(v);
695
+ break;
696
+ }
697
+ }
698
+ }
699
+ if (controllers.length !== 1) {
700
+ return false;
701
+ }
702
+ if (transceivers.length !== 1) {
703
+ return false;
704
+ }
705
+ this.link = {
706
+ controller: controllers[0],
707
+ transceiver: transceivers[0],
708
+ passive
709
+ };
710
+ return true;
711
+ }
712
+ };
713
+ var CanDiffLinkTester = class extends CompositePortLinkConverterBase {
714
+ get_signals() {
715
+ if (!this.link) return [];
716
+ return [
717
+ {
718
+ name: "canh",
719
+ ports: [
720
+ ...this.link.nodes.map((port) => {
721
+ return {
722
+ parent: port,
723
+ meta_port: port.canh
724
+ };
725
+ })
726
+ ]
727
+ },
728
+ {
729
+ name: "canl",
730
+ ports: [
731
+ ...this.link.nodes.map((port) => {
732
+ return {
733
+ parent: port,
734
+ meta_port: port.canl
735
+ };
736
+ })
737
+ ]
738
+ }
739
+ ];
740
+ }
741
+ init_link() {
742
+ const nodes = [];
743
+ for (const v of this.ports) {
744
+ if (v.type === import_electronics_model2.PortType.CanDiffPort) {
745
+ nodes.push(v);
746
+ }
747
+ }
748
+ if (nodes.length === 0) {
749
+ return false;
750
+ }
751
+ this.link = {
752
+ nodes
753
+ };
754
+ return true;
755
+ }
756
+ };
757
+ var CrystalLinkTester = class extends CompositePortLinkConverterBase {
758
+ get_signals() {
759
+ if (!this.link) return [];
760
+ const driver = this.link.driver;
761
+ const crystal = this.link.crystal;
762
+ return [
763
+ {
764
+ name: "xtal",
765
+ ports: [
766
+ {
767
+ parent: driver,
768
+ meta_port: driver.xtal_in
769
+ },
770
+ {
771
+ parent: crystal,
772
+ meta_port: crystal.xtal_out
773
+ }
774
+ ]
775
+ },
776
+ {
777
+ name: "xtal",
778
+ ports: [
779
+ {
780
+ parent: driver,
781
+ meta_port: driver.xtal_out
782
+ },
783
+ {
784
+ parent: crystal,
785
+ meta_port: crystal.xtal_in
786
+ }
787
+ ]
788
+ }
789
+ ];
790
+ }
791
+ init_link() {
792
+ const drivers = [];
793
+ const crystals = [];
794
+ for (const v of this.ports) {
795
+ switch (v.type) {
796
+ case import_electronics_model2.PortType.CrystalDriver: {
797
+ drivers.push(v);
798
+ break;
799
+ }
800
+ case import_electronics_model2.PortType.CrystalPort: {
801
+ crystals.push(v);
802
+ break;
803
+ }
804
+ }
805
+ }
806
+ if (drivers.length !== 1) {
807
+ return false;
808
+ }
809
+ if (crystals.length !== 1) {
810
+ return false;
811
+ }
812
+ this.link = {
813
+ driver: drivers[0],
814
+ crystal: crystals[0]
815
+ };
816
+ return true;
817
+ }
818
+ };
819
+ var SwdLinkTester = class extends CompositePortLinkConverterBase {
820
+ get_signals() {
821
+ if (!this.link) return [];
822
+ return [
823
+ {
824
+ name: "swdio",
825
+ ports: [
826
+ {
827
+ parent: this.link.host,
828
+ meta_port: this.link.host.swdio
829
+ },
830
+ {
831
+ parent: this.link.device,
832
+ meta_port: this.link.device.swdio
833
+ },
834
+ ...this.link.pull.map((port) => {
835
+ return {
836
+ parent: port,
837
+ meta_port: port.swdio
838
+ };
839
+ })
840
+ ]
841
+ },
842
+ {
843
+ name: "swclk",
844
+ ports: [
845
+ {
846
+ parent: this.link.host,
847
+ meta_port: this.link.host.swclk
848
+ },
849
+ {
850
+ parent: this.link.device,
851
+ meta_port: this.link.device.swclk
852
+ },
853
+ ...this.link.pull.map((port) => {
854
+ return {
855
+ parent: port,
856
+ meta_port: port.swclk
857
+ };
858
+ })
859
+ ]
860
+ }
861
+ ];
862
+ }
863
+ init_link() {
864
+ const hosts = [];
865
+ const devices = [];
866
+ const pull = [];
867
+ for (const v of this.ports) {
868
+ switch (v.type) {
869
+ case import_electronics_model2.PortType.SwdHostPort: {
870
+ hosts.push(v);
871
+ break;
872
+ }
873
+ case import_electronics_model2.PortType.SwdTargetPort: {
874
+ devices.push(v);
875
+ break;
876
+ }
877
+ case import_electronics_model2.PortType.SwdPullPort: {
878
+ pull.push(v);
879
+ break;
880
+ }
881
+ }
882
+ }
883
+ if (hosts.length !== 1) {
884
+ return false;
885
+ }
886
+ if (devices.length !== 1) {
887
+ return false;
888
+ }
889
+ this.link = {
890
+ host: hosts[0],
891
+ device: devices[0],
892
+ pull
893
+ };
894
+ return true;
895
+ }
896
+ };
897
+ var I2cLinkTester = class extends CompositePortLinkConverterBase {
898
+ get_signals() {
899
+ if (!this.link) return [];
900
+ const scl = [
901
+ ...this.link.pull.map((device) => ({
902
+ parent: device,
903
+ meta_port: device.scl
904
+ })),
905
+ {
906
+ parent: this.link.controller,
907
+ meta_port: this.link.controller.scl
908
+ },
909
+ ...this.link.targets.map((device) => ({
910
+ parent: device,
911
+ meta_port: device.scl
912
+ }))
913
+ ];
914
+ const sda = [
915
+ ...this.link.pull.map((device) => ({
916
+ parent: device,
917
+ meta_port: device.sda
918
+ })),
919
+ {
920
+ parent: this.link.controller,
921
+ meta_port: this.link.controller.sda
922
+ },
923
+ ...this.link.targets.map((device) => ({
924
+ parent: device,
925
+ meta_port: device.sda
926
+ }))
927
+ ];
928
+ return [
929
+ {
930
+ name: "scl",
931
+ ports: scl
932
+ },
933
+ {
934
+ name: "sda",
935
+ ports: sda
936
+ }
937
+ ];
938
+ }
939
+ init_link() {
940
+ const pull = [];
941
+ const controllers = [];
942
+ const targets = [];
943
+ for (const v of this.ports) {
944
+ switch (v.type) {
945
+ case import_electronics_model2.PortType.I2cPullupPort: {
946
+ pull.push(v);
947
+ break;
948
+ }
949
+ case import_electronics_model2.PortType.I2cController: {
950
+ controllers.push(v);
951
+ break;
952
+ }
953
+ case import_electronics_model2.PortType.I2cTarget: {
954
+ targets.push(v);
955
+ break;
956
+ }
957
+ }
958
+ }
959
+ if (controllers.length !== 1) {
960
+ return false;
961
+ }
962
+ if (targets.length === 0) {
963
+ return false;
964
+ }
965
+ this.link = {
966
+ pull,
967
+ controller: controllers[0],
968
+ targets
969
+ };
970
+ return true;
971
+ }
972
+ };
973
+ var I2sLinkTester = class extends CompositePortLinkConverterBase {
974
+ get_signals() {
975
+ if (!this.link) return [];
976
+ const controller = this.link.controller;
977
+ const target_receiver = this.link.target_receiver;
978
+ return [
979
+ {
980
+ name: "sck",
981
+ ports: [
982
+ {
983
+ parent: controller,
984
+ meta_port: controller.sck
985
+ },
986
+ {
987
+ parent: target_receiver,
988
+ meta_port: target_receiver.sck
989
+ }
990
+ ]
991
+ },
992
+ {
993
+ name: "ws",
994
+ ports: [
995
+ {
996
+ parent: controller,
997
+ meta_port: controller.ws
998
+ },
999
+ {
1000
+ parent: target_receiver,
1001
+ meta_port: target_receiver.ws
1002
+ }
1003
+ ]
1004
+ },
1005
+ {
1006
+ name: "sd",
1007
+ ports: [
1008
+ {
1009
+ parent: controller,
1010
+ meta_port: controller.sd
1011
+ },
1012
+ {
1013
+ parent: target_receiver,
1014
+ meta_port: target_receiver.sd
1015
+ }
1016
+ ]
1017
+ }
1018
+ ];
1019
+ }
1020
+ init_link() {
1021
+ const controllers = [];
1022
+ const target_receivers = [];
1023
+ for (const v of this.ports) {
1024
+ switch (v.type) {
1025
+ case import_electronics_model2.PortType.I2sController: {
1026
+ controllers.push(v);
1027
+ break;
1028
+ }
1029
+ case import_electronics_model2.PortType.I2sTargetReceiver: {
1030
+ target_receivers.push(v);
1031
+ break;
1032
+ }
1033
+ }
1034
+ }
1035
+ if (controllers.length !== 1) {
1036
+ return false;
1037
+ }
1038
+ if (target_receivers.length !== 1) {
1039
+ return false;
1040
+ }
1041
+ this.link = {
1042
+ controller: controllers[0],
1043
+ target_receiver: target_receivers[0]
1044
+ };
1045
+ return true;
1046
+ }
1047
+ };
1048
+ var SpiLinkTester = class extends CompositePortLinkConverterBase {
1049
+ get_signals() {
1050
+ if (!this.link) return [];
1051
+ const controller = this.link.controller;
1052
+ const peripherals = this.link.peripherals;
1053
+ return [
1054
+ {
1055
+ name: "sck",
1056
+ ports: [
1057
+ {
1058
+ parent: controller,
1059
+ meta_port: controller.sck
1060
+ },
1061
+ ...peripherals.map((device) => ({
1062
+ parent: device,
1063
+ meta_port: device.sck
1064
+ }))
1065
+ ]
1066
+ },
1067
+ {
1068
+ name: "miso",
1069
+ ports: [
1070
+ {
1071
+ parent: controller,
1072
+ meta_port: controller.miso
1073
+ },
1074
+ ...peripherals.map((device) => ({
1075
+ parent: device,
1076
+ meta_port: device.miso
1077
+ }))
1078
+ ]
1079
+ },
1080
+ {
1081
+ name: "mosi",
1082
+ ports: [
1083
+ {
1084
+ parent: controller,
1085
+ meta_port: controller.mosi
1086
+ },
1087
+ ...peripherals.map((device) => ({
1088
+ parent: device,
1089
+ meta_port: device.mosi
1090
+ }))
1091
+ ]
1092
+ }
1093
+ ];
1094
+ }
1095
+ init_link() {
1096
+ const controllers = [];
1097
+ const peripherals = [];
1098
+ for (const v of this.ports) {
1099
+ switch (v.type) {
1100
+ case import_electronics_model2.PortType.SpiController: {
1101
+ controllers.push(v);
1102
+ break;
1103
+ }
1104
+ case import_electronics_model2.PortType.SpiPeripheral: {
1105
+ peripherals.push(v);
1106
+ break;
1107
+ }
1108
+ }
1109
+ }
1110
+ if (controllers.length !== 1) {
1111
+ return false;
1112
+ }
1113
+ if (peripherals.length === 0) {
1114
+ return false;
1115
+ }
1116
+ this.link = {
1117
+ controller: controllers[0],
1118
+ peripherals
1119
+ };
1120
+ return true;
1121
+ }
1122
+ };
1123
+ var SpeakerLinkTester = class extends CompositePortLinkConverterBase {
1124
+ get_signals() {
1125
+ if (!this.link) return [];
1126
+ return [
1127
+ {
1128
+ name: "a",
1129
+ ports: [
1130
+ {
1131
+ parent: this.link.source,
1132
+ meta_port: this.link.source.a
1133
+ },
1134
+ {
1135
+ parent: this.link.sink,
1136
+ meta_port: this.link.sink.a
1137
+ }
1138
+ ]
1139
+ },
1140
+ {
1141
+ name: "b",
1142
+ ports: [
1143
+ {
1144
+ parent: this.link.source,
1145
+ meta_port: this.link.source.b
1146
+ },
1147
+ {
1148
+ parent: this.link.sink,
1149
+ meta_port: this.link.sink.b
1150
+ }
1151
+ ]
1152
+ }
1153
+ ];
1154
+ }
1155
+ init_link() {
1156
+ const sources = [];
1157
+ const sinks = [];
1158
+ for (const v of this.ports) {
1159
+ switch (v.type) {
1160
+ case import_electronics_model2.PortType.SpeakerDriverPort: {
1161
+ sources.push(v);
1162
+ break;
1163
+ }
1164
+ case import_electronics_model2.PortType.SpeakerPort: {
1165
+ sinks.push(v);
1166
+ break;
1167
+ }
1168
+ }
1169
+ }
1170
+ if (sources.length !== 1) {
1171
+ return false;
1172
+ }
1173
+ if (sinks.length !== 1) {
1174
+ return false;
1175
+ }
1176
+ this.link = {
1177
+ source: sources[0],
1178
+ sink: sinks[0]
1179
+ };
1180
+ return true;
1181
+ }
1182
+ };
1183
+ var UartLinkTester = class extends CompositePortLinkConverterBase {
1184
+ get_signals() {
1185
+ if (!this.link) return [];
1186
+ return [
1187
+ {
1188
+ name: "tx",
1189
+ ports: [
1190
+ {
1191
+ parent: this.link.a,
1192
+ meta_port: this.link.a.tx
1193
+ },
1194
+ {
1195
+ parent: this.link.b,
1196
+ meta_port: this.link.b.rx
1197
+ }
1198
+ ]
1199
+ },
1200
+ {
1201
+ name: "rx",
1202
+ ports: [
1203
+ {
1204
+ parent: this.link.b,
1205
+ meta_port: this.link.b.tx
1206
+ },
1207
+ {
1208
+ parent: this.link.a,
1209
+ meta_port: this.link.a.rx
1210
+ }
1211
+ ]
1212
+ }
1213
+ ];
1214
+ }
1215
+ init_link() {
1216
+ const ports = [];
1217
+ for (const v of this.ports) {
1218
+ if (v.type === import_electronics_model2.PortType.UartPort) {
1219
+ ports.push(v);
1220
+ }
1221
+ }
1222
+ if (ports.length !== 2) {
1223
+ return false;
1224
+ }
1225
+ this.link = {
1226
+ a: ports[0],
1227
+ b: ports[1]
1228
+ };
1229
+ return true;
1230
+ }
1231
+ };
1232
+ var UsbLinkTester = class extends CompositePortLinkConverterBase {
1233
+ get_signals() {
1234
+ if (!this.link) return [];
1235
+ return [
1236
+ {
1237
+ name: "dp",
1238
+ ports: [
1239
+ {
1240
+ parent: this.link.host,
1241
+ meta_port: this.link.host.dp
1242
+ },
1243
+ {
1244
+ parent: this.link.device,
1245
+ meta_port: this.link.device.dp
1246
+ },
1247
+ ...this.link.passive.map((port) => ({
1248
+ parent: port,
1249
+ meta_port: port.dp
1250
+ }))
1251
+ ]
1252
+ },
1253
+ {
1254
+ name: "dm",
1255
+ ports: [
1256
+ {
1257
+ parent: this.link.host,
1258
+ meta_port: this.link.host.dm
1259
+ },
1260
+ {
1261
+ parent: this.link.device,
1262
+ meta_port: this.link.device.dm
1263
+ },
1264
+ ...this.link.passive.map((port) => ({
1265
+ parent: port,
1266
+ meta_port: port.dm
1267
+ }))
1268
+ ]
1269
+ }
1270
+ ];
1271
+ }
1272
+ init_link() {
1273
+ const hosts = [];
1274
+ const devices = [];
1275
+ const passive = [];
1276
+ for (const v of this.ports) {
1277
+ switch (v.type) {
1278
+ case import_electronics_model2.PortType.UsbHostPort: {
1279
+ hosts.push(v);
1280
+ break;
1281
+ }
1282
+ case import_electronics_model2.PortType.UsbDevicePort: {
1283
+ devices.push(v);
1284
+ break;
1285
+ }
1286
+ case import_electronics_model2.PortType.UsbPassivePort: {
1287
+ passive.push(v);
1288
+ break;
1289
+ }
1290
+ }
1291
+ }
1292
+ if (hosts.length !== 1) {
1293
+ return false;
1294
+ }
1295
+ if (devices.length !== 1) {
1296
+ return false;
1297
+ }
1298
+ this.link = {
1299
+ host: hosts[0],
1300
+ device: devices[0],
1301
+ passive
1302
+ };
1303
+ return true;
1304
+ }
1305
+ };
1306
+ var UsbCcLinkTester = class extends CompositePortLinkConverterBase {
1307
+ get_signals() {
1308
+ if (!this.link) return [];
1309
+ return [
1310
+ {
1311
+ name: "cc1",
1312
+ ports: [
1313
+ {
1314
+ parent: this.link.a,
1315
+ meta_port: this.link.a.cc1
1316
+ },
1317
+ {
1318
+ parent: this.link.b,
1319
+ meta_port: this.link.b.cc1
1320
+ }
1321
+ ]
1322
+ },
1323
+ {
1324
+ name: "cc2",
1325
+ ports: [
1326
+ {
1327
+ parent: this.link.a,
1328
+ meta_port: this.link.a.cc2
1329
+ },
1330
+ {
1331
+ parent: this.link.b,
1332
+ meta_port: this.link.b.cc2
1333
+ }
1334
+ ]
1335
+ }
1336
+ ];
1337
+ }
1338
+ init_link() {
1339
+ const nodes = [];
1340
+ for (const v of this.ports) {
1341
+ if (v.type === import_electronics_model2.PortType.UsbCcPort) {
1342
+ nodes.push(v);
1343
+ }
1344
+ }
1345
+ if (nodes.length !== 2) {
1346
+ return false;
1347
+ }
1348
+ this.link = {
1349
+ a: nodes[0],
1350
+ b: nodes[1]
1351
+ };
1352
+ return true;
1353
+ }
1354
+ };
1355
+ var Dvp8LinkTester = class extends CompositePortLinkConverterBase {
1356
+ get_signals() {
1357
+ if (!this.link) return [];
1358
+ const host = this.link.host;
1359
+ const cam = this.link.cam;
1360
+ return [
1361
+ {
1362
+ name: "xclk",
1363
+ ports: [
1364
+ {
1365
+ parent: host,
1366
+ meta_port: host.xclk
1367
+ },
1368
+ {
1369
+ parent: cam,
1370
+ meta_port: cam.xclk
1371
+ }
1372
+ ]
1373
+ },
1374
+ {
1375
+ name: "pclk",
1376
+ ports: [
1377
+ {
1378
+ parent: host,
1379
+ meta_port: host.pclk
1380
+ },
1381
+ {
1382
+ parent: cam,
1383
+ meta_port: cam.pclk
1384
+ }
1385
+ ]
1386
+ },
1387
+ {
1388
+ name: "href",
1389
+ ports: [
1390
+ {
1391
+ parent: host,
1392
+ meta_port: host.href
1393
+ },
1394
+ {
1395
+ parent: cam,
1396
+ meta_port: cam.href
1397
+ }
1398
+ ]
1399
+ },
1400
+ {
1401
+ name: "vsync",
1402
+ ports: [
1403
+ {
1404
+ parent: host,
1405
+ meta_port: host.vsync
1406
+ },
1407
+ {
1408
+ parent: cam,
1409
+ meta_port: cam.vsync
1410
+ }
1411
+ ]
1412
+ },
1413
+ {
1414
+ name: "y0",
1415
+ ports: [
1416
+ {
1417
+ parent: host,
1418
+ meta_port: host.y0
1419
+ },
1420
+ {
1421
+ parent: cam,
1422
+ meta_port: cam.y0
1423
+ }
1424
+ ]
1425
+ },
1426
+ {
1427
+ name: "y1",
1428
+ ports: [
1429
+ {
1430
+ parent: host,
1431
+ meta_port: host.y1
1432
+ }
1433
+ ]
1434
+ },
1435
+ {
1436
+ name: "y2",
1437
+ ports: [
1438
+ {
1439
+ parent: host,
1440
+ meta_port: host.y2
1441
+ },
1442
+ {
1443
+ parent: cam,
1444
+ meta_port: cam.y2
1445
+ }
1446
+ ]
1447
+ },
1448
+ {
1449
+ name: "y3",
1450
+ ports: [
1451
+ {
1452
+ parent: host,
1453
+ meta_port: host.y3
1454
+ },
1455
+ {
1456
+ parent: cam,
1457
+ meta_port: cam.y3
1458
+ }
1459
+ ]
1460
+ },
1461
+ {
1462
+ name: "y4",
1463
+ ports: [
1464
+ {
1465
+ parent: host,
1466
+ meta_port: host.y4
1467
+ }
1468
+ ]
1469
+ },
1470
+ {
1471
+ name: "y5",
1472
+ ports: [
1473
+ {
1474
+ parent: host,
1475
+ meta_port: host.y5
1476
+ },
1477
+ {
1478
+ parent: cam,
1479
+ meta_port: cam.y5
1480
+ }
1481
+ ]
1482
+ },
1483
+ {
1484
+ name: "y6",
1485
+ ports: [
1486
+ {
1487
+ parent: host,
1488
+ meta_port: host.y6
1489
+ },
1490
+ {
1491
+ parent: cam,
1492
+ meta_port: cam.y6
1493
+ }
1494
+ ]
1495
+ },
1496
+ {
1497
+ name: "y7",
1498
+ ports: [
1499
+ {
1500
+ parent: host,
1501
+ meta_port: host.y7
1502
+ },
1503
+ {
1504
+ parent: cam,
1505
+ meta_port: cam.y7
1506
+ }
1507
+ ]
1508
+ }
1509
+ ];
1510
+ }
1511
+ init_link() {
1512
+ const hosts = [];
1513
+ const cams = [];
1514
+ for (const v of this.ports) {
1515
+ switch (v.type) {
1516
+ case import_electronics_model2.PortType.Dvp8Host: {
1517
+ hosts.push(v);
1518
+ break;
1519
+ }
1520
+ case import_electronics_model2.PortType.Dvp8Camera: {
1521
+ cams.push(v);
1522
+ break;
1523
+ }
1524
+ }
1525
+ }
1526
+ if (hosts.length !== 1) {
1527
+ return false;
1528
+ }
1529
+ if (cams.length !== 1) {
1530
+ return false;
1531
+ }
1532
+ this.link = {
1533
+ host: hosts[0],
1534
+ cam: cams[0]
1535
+ };
1536
+ return true;
1537
+ }
1538
+ };
1539
+
1540
+ // src/converter/link_to_netlist/converter.ts
1541
+ var LINK_CONVERTER = class {
1542
+ constructor(ctx) {
1543
+ this.ctx = ctx;
1544
+ }
1545
+ port_is_composite_port(p) {
1546
+ return Object.values(this.ctx.pin_map[this.port_id.get(p)]).length > 1;
1547
+ }
1548
+ do_convert(CtorClass, ports, net_pros) {
1549
+ return new CtorClass(this.ctx, ports, net_pros).convert();
1550
+ }
1551
+ visit_cc(cc) {
1552
+ if (cc.is_isolated) {
1553
+ return;
1554
+ }
1555
+ this.link_map = (0, import_electronics_model3.gen_link_map)();
1556
+ const ports = cc.nodes.filter((i) => i.type === import_electronics_model3.ConnectionNodeType.Port);
1557
+ const meta_ports = [];
1558
+ this.port_id = /* @__PURE__ */ new Map();
1559
+ for (const p of ports) this.port_id.set(p.param, p.uuid);
1560
+ for (const v of ports) {
1561
+ const port = v.param;
1562
+ const arr = this.link_map[(0, import_electronics_model3.get_port_link_type)(port)];
1563
+ if (this.port_is_composite_port(port)) {
1564
+ arr.push(port);
1565
+ } else {
1566
+ meta_ports.push(port);
1567
+ }
1568
+ }
1569
+ const meta_port_converter = new MetaPortConverter(this.ctx, meta_ports, cc);
1570
+ meta_port_converter.convert();
1571
+ for (const [k, v] of Object.entries(this.link_map)) {
1572
+ if (!v || !v.length) continue;
1573
+ switch (k) {
1574
+ case import_electronics_model3.LinkType.CanLogicLink: {
1575
+ this.do_convert(CanLogicLinkTester, v, cc);
1576
+ break;
1577
+ }
1578
+ case import_electronics_model3.LinkType.CanDiffLink: {
1579
+ this.do_convert(CanDiffLinkTester, v, cc);
1580
+ break;
1581
+ }
1582
+ case import_electronics_model3.LinkType.CrystalLink: {
1583
+ this.do_convert(CrystalLinkTester, v, cc);
1584
+ break;
1585
+ }
1586
+ case import_electronics_model3.LinkType.SwdLink: {
1587
+ this.do_convert(SwdLinkTester, v, cc);
1588
+ break;
1589
+ }
1590
+ case import_electronics_model3.LinkType.I2cLink: {
1591
+ this.do_convert(I2cLinkTester, v, cc);
1592
+ break;
1593
+ }
1594
+ case import_electronics_model3.LinkType.I2sLink: {
1595
+ this.do_convert(I2sLinkTester, v, cc);
1596
+ break;
1597
+ }
1598
+ case import_electronics_model3.LinkType.SpiLink: {
1599
+ this.do_convert(SpiLinkTester, v, cc);
1600
+ break;
1601
+ }
1602
+ case import_electronics_model3.LinkType.SpeakerLink: {
1603
+ this.do_convert(SpeakerLinkTester, v, cc);
1604
+ break;
1605
+ }
1606
+ case import_electronics_model3.LinkType.UartLink: {
1607
+ this.do_convert(UartLinkTester, v, cc);
1608
+ break;
1609
+ }
1610
+ case import_electronics_model3.LinkType.UsbLink: {
1611
+ this.do_convert(UsbLinkTester, v, cc);
1612
+ break;
1613
+ }
1614
+ case import_electronics_model3.LinkType.UsbCcLink: {
1615
+ this.do_convert(UsbCcLinkTester, v, cc);
1616
+ break;
1617
+ }
1618
+ case import_electronics_model3.LinkType.Dvp8Link: {
1619
+ this.do_convert(Dvp8LinkTester, v, cc);
1620
+ break;
1621
+ }
1622
+ default: {
1623
+ throw new Error(`Unhandled link type: ${k}`);
1624
+ }
1625
+ }
1626
+ }
1627
+ }
1628
+ };
1629
+
1630
+ // src/converter/graph_to_netlist/graph_converter.ts
1631
+ var GraphConverter = class {
1632
+ constructor(ctx) {
1633
+ this.ctx = ctx;
1634
+ }
1635
+ convert_to_netlist() {
1636
+ let pin_count = 0;
1637
+ const nl_netlist = {
1638
+ nets: [],
1639
+ schematics: {}
1640
+ };
1641
+ const pin_map = {};
1642
+ const port_map = /* @__PURE__ */ new Map();
1643
+ const pin_shapes = {};
1644
+ for (const sub of this.ctx.connection_graph.subgraphs) {
1645
+ for (const node of sub.nodes) {
1646
+ if (node.type === import_electronics_model4.ConnectionNodeType.Port) {
1647
+ const port_id = node.uuid;
1648
+ port_map.set(node.param, port_id);
1649
+ for (const [label_name, shape] of Object.entries(node.label_shapes)) {
1650
+ const pin_id = `pin-${++pin_count}`;
1651
+ pin_shapes[pin_id] = shape;
1652
+ if (!(port_id in pin_map)) {
1653
+ pin_map[port_id] = {};
1654
+ }
1655
+ pin_map[port_id][label_name] = pin_id;
1656
+ }
1657
+ }
1658
+ }
1659
+ }
1660
+ for (const [filename, sch] of Object.entries(this.ctx.cg_schematics)) {
1661
+ const { uuid, powers, sheets } = sch;
1662
+ const sheet_symbols = [];
1663
+ for (const sheet of sheets) {
1664
+ const pins = [];
1665
+ for (const port_id of sheet.ports) {
1666
+ if (!(port_id in pin_map)) {
1667
+ console.error(`Port ${port_id} not found in pin_map`);
1668
+ continue;
1669
+ }
1670
+ for (const [label_name, pin_id] of Object.entries(pin_map[port_id])) {
1671
+ pins.push({
1672
+ uuid: pin_id,
1673
+ name: label_name,
1674
+ shape: pin_shapes[pin_id]
1675
+ });
1676
+ }
1677
+ }
1678
+ sheet_symbols.push({ ...sheet, pins });
1679
+ }
1680
+ nl_netlist.schematics[filename] = {
1681
+ uuid,
1682
+ filename,
1683
+ powers,
1684
+ sheet_symbols,
1685
+ hiera_labels: []
1686
+ };
1687
+ }
1688
+ const link_converter = new LINK_CONVERTER({
1689
+ pin_map,
1690
+ nl_netlist,
1691
+ port_map,
1692
+ net_names_count: /* @__PURE__ */ new Map()
1693
+ });
1694
+ for (const sub of this.ctx.connection_graph.subgraphs) {
1695
+ link_converter.visit_cc(sub);
1696
+ }
1697
+ return nl_netlist;
1698
+ }
1699
+ };
1700
+
1701
+ // src/converter/netlist_to_kicad/layout.ts
1702
+ var import_elk_bundled = __toESM(require("elkjs/lib/elk.bundled.js"));
1703
+ var MIL_TO_MM = 0.0254;
1704
+ var GRID_SIZE = 50 * MIL_TO_MM;
1705
+ var FONT_SIZE = GRID_SIZE;
1706
+ var POWER_START_Y = 30 * GRID_SIZE;
1707
+ var POWER_START_X = (PAPER_SIZE.A4.height - 30) * GRID_SIZE;
1708
+ var POWER_Y_STEP = 16 * GRID_SIZE;
1709
+ var BLOCK_V_SPACE = 8 * GRID_SIZE;
1710
+ var BLOCK_H_SPACE = 14 * GRID_SIZE - BLOCK_V_SPACE;
1711
+ var PADDING = 10 * GRID_SIZE;
1712
+ var PADDING_TOP = 21 * GRID_SIZE;
1713
+ function get_power_pos(pwr_number) {
1714
+ return { x: POWER_START_X, y: POWER_START_Y + POWER_Y_STEP * pwr_number };
1715
+ }
1716
+ var BLOCK_PIN_GAP = 4 * GRID_SIZE;
1717
+ var BLOCK_PIN_TB_MARGIN = 2 * GRID_SIZE;
1718
+ var MIN_BLOCK_WIDTH = 8 * GRID_SIZE;
1719
+ var INTERNAL_LABEL_MARGIN = 8 * FONT_SIZE;
1720
+ var WIRE_PADDING = GRID_SIZE;
1721
+ var SIDE_MARGIN = WIRE_PADDING * 2 + BLOCK_H_SPACE / 2;
1722
+ var Layout = class {
1723
+ constructor() {
1724
+ this.block_geo = {};
1725
+ this.elk = new import_elk_bundled.default();
1726
+ }
1727
+ add_block(id, factor) {
1728
+ this.block_geo[id] = this.calc_block_size(factor);
1729
+ }
1730
+ async finalize() {
1731
+ const bbox = {};
1732
+ const graph = {
1733
+ id: "root",
1734
+ layoutOptions: {
1735
+ "elk.algorithm": "rectpacking",
1736
+ "elk.contentAlignment": "V_TOP | H_LEFT",
1737
+ "elk.rectpacking.orderBySize": "true",
1738
+ "elk.nodeSize.fixedGraphSize": "true",
1739
+ "org.eclipse.elk.rectpacking.packing.compaction.rowHeightReevaluation": "true",
1740
+ "elk.rectpacking.widthApproximation.optimizationGoal": "ASPECT_RATIO_DRIVEN",
1741
+ "org.eclipse.elk.rectpacking.packing.compaction.iterations": "5",
1742
+ "org.eclipse.elk.aspectRatio": "1.414",
1743
+ "elk.spacing.nodeNode": `${BLOCK_V_SPACE}`,
1744
+ "elk.padding": `[top=${PADDING_TOP},left=${PADDING},bottom=${PADDING},right=${PADDING}]`,
1745
+ "elk.childAreaWidth": `${PAPER_SIZE.A4.height}`,
1746
+ "elk.childAreaHeight": `${PAPER_SIZE.A4.width}`
1747
+ },
1748
+ children: [],
1749
+ edges: []
1750
+ };
1751
+ for (const [id, geo] of Object.entries(this.block_geo)) {
1752
+ const bounding_size = geo.bounding_size;
1753
+ graph.children.push({
1754
+ id,
1755
+ width: bounding_size.x,
1756
+ height: bounding_size.y
1757
+ });
1758
+ }
1759
+ const res = await this.elk.layout(graph);
1760
+ if (res.children) {
1761
+ for (const child of res.children) {
1762
+ const geo = this.block_geo[child.id];
1763
+ const pos = {
1764
+ x: (child.x ?? 0) + geo.l_margin,
1765
+ y: child.y ?? 0
1766
+ };
1767
+ bbox[child.id] = {
1768
+ pos,
1769
+ size: geo.size
1770
+ };
1771
+ }
1772
+ }
1773
+ return bbox;
1774
+ }
1775
+ calc_block_size(factor) {
1776
+ const block_height = Math.floor(factor.total_pin_num / 2) * BLOCK_PIN_GAP + 2 * BLOCK_PIN_TB_MARGIN;
1777
+ const block_width = Math.max(
1778
+ MIN_BLOCK_WIDTH,
1779
+ factor.internal.l_side + factor.internal.r_side + INTERNAL_LABEL_MARGIN
1780
+ );
1781
+ const l_margin = factor.outer.l_side + SIDE_MARGIN;
1782
+ const r_margin = factor.outer.r_side + SIDE_MARGIN;
1783
+ const block_bounding_width = block_width + l_margin + r_margin;
1784
+ const size = {
1785
+ x: block_width,
1786
+ y: block_height
1787
+ };
1788
+ const bounding_size = {
1789
+ x: block_bounding_width,
1790
+ y: block_height
1791
+ };
1792
+ return {
1793
+ size,
1794
+ bounding_size,
1795
+ l_margin,
1796
+ r_margin,
1797
+ factor
1798
+ };
1799
+ }
1800
+ };
1801
+
1802
+ // src/converter/netlist_to_kicad/netlist_converter.ts
1803
+ var import_electronics_model8 = require("@modular-circuit/electronics-model");
1804
+ var import_ir4 = require("@modular-circuit/ir");
1805
+ var import_utils11 = require("@modular-circuit/utils");
1806
+
1807
+ // src/kicad/label/net_label.ts
1808
+ var import_utils5 = require("@modular-circuit/utils");
1809
+
1810
+ // src/kicad/constraints/index.ts
1811
+ var DEFAULT_FONT_SIZE = {
1812
+ x: 1.27,
1813
+ y: 1.27
1814
+ };
1815
+
1816
+ // src/kicad/label/net_label.ts
1817
+ var gen_net_label = (name, at, justify) => ({
1818
+ label_type: "label",
1819
+ text: name,
1820
+ fields: [],
1821
+ fields_autoplaced: true,
1822
+ at: { position: at, rotation: 0 },
1823
+ effects: {
1824
+ font: { size: DEFAULT_FONT_SIZE },
1825
+ justify
1826
+ },
1827
+ uuid: (0, import_utils5.gen_uuid)()
1828
+ });
1829
+
1830
+ // src/kicad/label/sheet_pin.ts
1831
+ var import_utils6 = require("@modular-circuit/utils");
1832
+ var gen_base_hierarchical_label = (text, at, justify, rotation, shape) => ({
1833
+ shape,
1834
+ effects: {
1835
+ font: { size: DEFAULT_FONT_SIZE },
1836
+ justify
1837
+ },
1838
+ text,
1839
+ at: { position: at, rotation },
1840
+ uuid: (0, import_utils6.gen_uuid)()
1841
+ });
1842
+ var gen_sheet_pin = (text, at, justify, rotation, shape) => ({
1843
+ label_type: "hierarchical_label",
1844
+ ...gen_base_hierarchical_label(text, at, justify, rotation, shape)
1845
+ });
1846
+ var gen_hierarchical_label = gen_sheet_pin;
1847
+
1848
+ // src/kicad/sheet/sheet.ts
1849
+ var import_utils7 = require("@modular-circuit/utils");
1850
+ var TEXT_MARGIN = 0.7116;
1851
+ var gen_sch_sheet = (rect, pins, fields) => ({
1852
+ // NOTE no rotation in the sheet
1853
+ at: { position: rect.pos },
1854
+ size: rect.size,
1855
+ pins,
1856
+ fields: [
1857
+ {
1858
+ name: "Sheetname",
1859
+ text: fields.Sheetname,
1860
+ at: { position: { x: rect.pos.x, y: rect.pos.y - TEXT_MARGIN }, rotation: 0 },
1861
+ effects: {
1862
+ font: { size: DEFAULT_FONT_SIZE },
1863
+ justify: {
1864
+ vertical: "bottom",
1865
+ horizontal: "left"
1866
+ }
1867
+ }
1868
+ },
1869
+ {
1870
+ name: "Sheetfile",
1871
+ text: fields.Sheetfile,
1872
+ at: { position: { x: rect.pos.x, y: rect.pos.y + rect.size.y + TEXT_MARGIN }, rotation: 0 },
1873
+ effects: {
1874
+ font: { size: DEFAULT_FONT_SIZE },
1875
+ justify: {
1876
+ vertical: "top",
1877
+ horizontal: "left"
1878
+ }
1879
+ }
1880
+ }
1881
+ ],
1882
+ fields_autoplaced: true,
1883
+ stroke: {
1884
+ width: 0.1524,
1885
+ type: "solid"
1886
+ },
1887
+ fill: {
1888
+ color: { r: 0, g: 0, b: 0, a: 0 }
1889
+ },
1890
+ uuid: (0, import_utils7.gen_uuid)()
1891
+ });
1892
+
1893
+ // src/kicad/symbols/lib_symbol/gnd.ts
1894
+ var import_electronics_model5 = require("@modular-circuit/electronics-model");
1895
+ var import_ir2 = require("@modular-circuit/ir");
1896
+ var gen_lib_gnd = (value) => ({
1897
+ name: `power:${value}`,
1898
+ pin_numbers: {
1899
+ offset: 0,
1900
+ hide: true
1901
+ },
1902
+ pin_names: {
1903
+ offset: 0,
1904
+ hide: true
1905
+ },
1906
+ in_bom: true,
1907
+ on_board: true,
1908
+ exclude_from_sim: false,
1909
+ properties: [
1910
+ {
1911
+ name: "Reference",
1912
+ text: "#PWR",
1913
+ at: { position: { x: 0, y: -6.35 }, rotation: 0 },
1914
+ effects: {
1915
+ font: { size: DEFAULT_FONT_SIZE },
1916
+ hide: true
1917
+ }
1918
+ },
1919
+ {
1920
+ name: "Value",
1921
+ text: `${value}`,
1922
+ at: { position: { x: 0, y: -3.81 }, rotation: 0 },
1923
+ effects: {
1924
+ font: { size: DEFAULT_FONT_SIZE }
1925
+ }
1926
+ },
1927
+ {
1928
+ name: "Footprint",
1929
+ text: "",
1930
+ at: { position: { x: 0, y: 0 }, rotation: 0 },
1931
+ effects: {
1932
+ font: { size: DEFAULT_FONT_SIZE },
1933
+ hide: true
1934
+ }
1935
+ },
1936
+ {
1937
+ name: "Datasheet",
1938
+ text: "",
1939
+ at: { position: { x: 0, y: 0 }, rotation: 0 },
1940
+ effects: {
1941
+ font: { size: DEFAULT_FONT_SIZE },
1942
+ hide: true
1943
+ }
1944
+ },
1945
+ {
1946
+ name: "Description",
1947
+ text: 'Power symbol creates a global label with name \\"GND\\" , ground',
1948
+ at: { position: { x: 0, y: 0 }, rotation: 0 },
1949
+ effects: {
1950
+ font: { size: DEFAULT_FONT_SIZE },
1951
+ hide: true
1952
+ }
1953
+ },
1954
+ {
1955
+ name: "ki_keywords",
1956
+ text: "global power",
1957
+ at: { position: { x: 0, y: 0 }, rotation: 0 },
1958
+ effects: {
1959
+ font: { size: DEFAULT_FONT_SIZE },
1960
+ hide: true
1961
+ }
1962
+ }
1963
+ ],
1964
+ children: [
1965
+ {
1966
+ name: `${value}_0_1`,
1967
+ drawings: [
1968
+ {
1969
+ shape: import_ir2.SHAPE_T.POLY,
1970
+ pts: [
1971
+ { x: 0, y: 0 },
1972
+ { x: 0, y: -1.27 },
1973
+ { x: 1.27, y: -1.27 },
1974
+ { x: 0, y: -2.54 },
1975
+ { x: -1.27, y: -1.27 },
1976
+ { x: 0, y: -1.27 }
1977
+ ],
1978
+ stroke: {
1979
+ width: 0,
1980
+ type: "default"
1981
+ },
1982
+ fill: {
1983
+ type: "none"
1984
+ }
1985
+ }
1986
+ ]
1987
+ },
1988
+ {
1989
+ name: `${value}_0_1`,
1990
+ pins: [
1991
+ {
1992
+ type: import_electronics_model5.ELECTRICAL_PINTYPE.PT_POWER_IN,
1993
+ shape: import_electronics_model5.GRAPHIC_PINSHAPE.LINE,
1994
+ hide: false,
1995
+ at: { position: { x: 0, y: 0 }, rotation: 270 },
1996
+ length: 0,
1997
+ name: {
1998
+ text: "~",
1999
+ effects: {
2000
+ font: { size: DEFAULT_FONT_SIZE }
2001
+ }
2002
+ },
2003
+ number: {
2004
+ text: "1",
2005
+ effects: {
2006
+ font: { size: DEFAULT_FONT_SIZE }
2007
+ }
2008
+ }
2009
+ }
2010
+ ]
2011
+ }
2012
+ ]
2013
+ });
2014
+
2015
+ // src/kicad/symbols/lib_symbol/vcc.ts
2016
+ var import_electronics_model6 = require("@modular-circuit/electronics-model");
2017
+ var import_ir3 = require("@modular-circuit/ir");
2018
+ var gen_lib_vcc = (value) => ({
2019
+ name: `power:${value}`,
2020
+ power: true,
2021
+ pin_numbers: {
2022
+ offset: 0,
2023
+ hide: true
2024
+ },
2025
+ pin_names: {
2026
+ offset: 0,
2027
+ hide: true
2028
+ },
2029
+ in_bom: true,
2030
+ on_board: true,
2031
+ exclude_from_sim: false,
2032
+ properties: [
2033
+ {
2034
+ name: "Reference",
2035
+ text: "#PWR",
2036
+ at: { position: { x: 0, y: -3.81 }, rotation: 0 },
2037
+ effects: {
2038
+ font: { size: DEFAULT_FONT_SIZE },
2039
+ hide: true
2040
+ }
2041
+ },
2042
+ {
2043
+ name: "Value",
2044
+ text: `${value}`,
2045
+ at: { position: { x: 0, y: 3.556 }, rotation: 0 },
2046
+ effects: {
2047
+ font: { size: DEFAULT_FONT_SIZE }
2048
+ }
2049
+ },
2050
+ {
2051
+ name: "Footprint",
2052
+ text: "",
2053
+ at: { position: { x: 0, y: 0 }, rotation: 0 },
2054
+ effects: {
2055
+ font: { size: DEFAULT_FONT_SIZE },
2056
+ hide: true
2057
+ }
2058
+ },
2059
+ {
2060
+ name: "Datasheet",
2061
+ text: "",
2062
+ at: { position: { x: 0, y: 0 }, rotation: 0 },
2063
+ effects: {
2064
+ font: { size: DEFAULT_FONT_SIZE },
2065
+ hide: true
2066
+ }
2067
+ },
2068
+ {
2069
+ name: "Description",
2070
+ text: `Power symbol creates a global label with name \\"${value}\\"`,
2071
+ at: { position: { x: 0, y: 0 }, rotation: 0 },
2072
+ effects: {
2073
+ font: { size: DEFAULT_FONT_SIZE },
2074
+ hide: true
2075
+ }
2076
+ },
2077
+ {
2078
+ name: "ki_keywords",
2079
+ text: "global power",
2080
+ at: { position: { x: 0, y: 0 }, rotation: 0 },
2081
+ effects: {
2082
+ font: { size: DEFAULT_FONT_SIZE },
2083
+ hide: true
2084
+ }
2085
+ }
2086
+ ],
2087
+ children: [
2088
+ {
2089
+ name: `${value}_0_1`,
2090
+ drawings: [
2091
+ {
2092
+ shape: import_ir3.SHAPE_T.POLY,
2093
+ pts: [
2094
+ { x: -0.762, y: 1.27 },
2095
+ { x: 0, y: 2.54 },
2096
+ { x: 0.762, y: 1.27 }
2097
+ ],
2098
+ stroke: {
2099
+ width: 0,
2100
+ type: "default"
2101
+ },
2102
+ fill: {
2103
+ type: "none"
2104
+ }
2105
+ }
2106
+ ]
2107
+ },
2108
+ {
2109
+ name: `${value}_1_1`,
2110
+ pins: [
2111
+ {
2112
+ type: import_electronics_model6.ELECTRICAL_PINTYPE.PT_POWER_IN,
2113
+ shape: import_electronics_model6.GRAPHIC_PINSHAPE.LINE,
2114
+ hide: false,
2115
+ at: { position: { x: 0, y: 0 }, rotation: 90 },
2116
+ length: 0,
2117
+ name: {
2118
+ text: "~",
2119
+ effects: {
2120
+ font: { size: DEFAULT_FONT_SIZE }
2121
+ }
2122
+ },
2123
+ number: {
2124
+ text: "1",
2125
+ effects: {
2126
+ font: { size: DEFAULT_FONT_SIZE }
2127
+ }
2128
+ }
2129
+ }
2130
+ ]
2131
+ }
2132
+ ]
2133
+ });
2134
+
2135
+ // src/kicad/symbols/sch_symbol/gnd.ts
2136
+ var import_utils8 = require("@modular-circuit/utils");
2137
+
2138
+ // src/kicad/symbols/symbol_utils.ts
2139
+ var gen_pwr_ref = (pwr_num) => `#PWR${pwr_num}`;
2140
+
2141
+ // src/kicad/symbols/sch_symbol/gnd.ts
2142
+ var gen_sch_gnd = (value, pwr_number, port_id, position) => ({
2143
+ lib_id: `power:${value}`,
2144
+ at: { position, rotation: 0 },
2145
+ unit: 1,
2146
+ exclude_from_sim: false,
2147
+ in_bom: true,
2148
+ on_board: true,
2149
+ dnp: false,
2150
+ fields_autoplaced: true,
2151
+ uuid: (0, import_utils8.gen_uuid)(),
2152
+ properties: [
2153
+ {
2154
+ name: "Reference",
2155
+ text: gen_pwr_ref(pwr_number),
2156
+ at: { position: { x: position.x, y: position.y + 6.35 }, rotation: 0 },
2157
+ effects: {
2158
+ font: { size: DEFAULT_FONT_SIZE },
2159
+ hide: true
2160
+ }
2161
+ },
2162
+ {
2163
+ name: "Value",
2164
+ text: `${value}`,
2165
+ at: { position: { x: position.x, y: position.y + 5.08 }, rotation: 0 },
2166
+ effects: {
2167
+ font: { size: DEFAULT_FONT_SIZE }
2168
+ }
2169
+ },
2170
+ {
2171
+ name: "Footprint",
2172
+ text: "",
2173
+ at: { position, rotation: 0 },
2174
+ effects: {
2175
+ font: { size: DEFAULT_FONT_SIZE },
2176
+ hide: true
2177
+ }
2178
+ },
2179
+ {
2180
+ name: "Datasheet",
2181
+ text: "",
2182
+ at: { position, rotation: 0 },
2183
+ effects: {
2184
+ font: { size: DEFAULT_FONT_SIZE },
2185
+ hide: true
2186
+ }
2187
+ },
2188
+ {
2189
+ name: "Description",
2190
+ text: `Power symbol creates a global label with name \\"${value}\\" , ground`,
2191
+ at: { position, rotation: 0 },
2192
+ effects: {
2193
+ font: { size: DEFAULT_FONT_SIZE },
2194
+ hide: true
2195
+ }
2196
+ }
2197
+ ],
2198
+ pins: [
2199
+ {
2200
+ uuid: port_id,
2201
+ number: "1"
2202
+ }
2203
+ ]
2204
+ });
2205
+
2206
+ // src/kicad/symbols/sch_symbol/vcc.ts
2207
+ var import_utils9 = require("@modular-circuit/utils");
2208
+ var gen_sch_vcc = (value, pwr_number, port_id, position) => ({
2209
+ lib_id: `power:${value}`,
2210
+ at: { position, rotation: 0 },
2211
+ unit: 1,
2212
+ exclude_from_sim: false,
2213
+ in_bom: true,
2214
+ on_board: true,
2215
+ dnp: false,
2216
+ fields_autoplaced: true,
2217
+ uuid: (0, import_utils9.gen_uuid)(),
2218
+ properties: [
2219
+ {
2220
+ name: "Reference",
2221
+ text: gen_pwr_ref(pwr_number),
2222
+ at: { position: { x: position.x, y: position.y + 3.81 }, rotation: 0 },
2223
+ effects: {
2224
+ font: { size: DEFAULT_FONT_SIZE },
2225
+ hide: true
2226
+ }
2227
+ },
2228
+ {
2229
+ name: "Value",
2230
+ text: `${value}`,
2231
+ at: { position: { x: position.x, y: position.y - 5.08 }, rotation: 0 },
2232
+ effects: {
2233
+ font: { size: DEFAULT_FONT_SIZE }
2234
+ }
2235
+ },
2236
+ {
2237
+ name: "Footprint",
2238
+ text: "",
2239
+ at: { position, rotation: 0 },
2240
+ effects: {
2241
+ font: { size: DEFAULT_FONT_SIZE },
2242
+ hide: true
2243
+ }
2244
+ },
2245
+ {
2246
+ name: "Datasheet",
2247
+ text: "",
2248
+ at: { position, rotation: 0 },
2249
+ effects: {
2250
+ font: { size: DEFAULT_FONT_SIZE },
2251
+ hide: true
2252
+ }
2253
+ },
2254
+ {
2255
+ name: "Description",
2256
+ text: `Power symbol creates a global label with name \\"${value}\\"`,
2257
+ at: { position, rotation: 0 },
2258
+ effects: {
2259
+ font: { size: DEFAULT_FONT_SIZE },
2260
+ hide: true
2261
+ }
2262
+ }
2263
+ ],
2264
+ pins: [
2265
+ {
2266
+ number: "1",
2267
+ uuid: port_id
2268
+ }
2269
+ ]
2270
+ });
2271
+
2272
+ // src/kicad/wire/gen_wire.ts
2273
+ var import_electronics_model7 = require("@modular-circuit/electronics-model");
2274
+ var import_utils10 = require("@modular-circuit/utils");
2275
+ var gen_wire = (start, end) => ({
2276
+ stroke: {
2277
+ type: "default",
2278
+ width: 0
2279
+ },
2280
+ start,
2281
+ end,
2282
+ uuid: (0, import_utils10.gen_uuid)(),
2283
+ type: import_electronics_model7.GS_SCH_ITEM_TYPE.LINE
2284
+ });
2285
+
2286
+ // src/converter/netlist_to_kicad/netlist_converter.ts
2287
+ var H_LABEL_FACTOR = {
2288
+ internal: { l_side: 0, r_side: 0 },
2289
+ outer: { l_side: 0, r_side: 0 },
2290
+ total_pin_num: 1
2291
+ };
2292
+ var NetListConverter = class {
2293
+ constructor(ctx) {
2294
+ this.ctx = ctx;
2295
+ this.sheet_pwr_count = 0;
2296
+ this.net_name = {};
2297
+ this.wires = [];
2298
+ for (const net of this.ctx.netlist.nets) {
2299
+ for (const it of net.pins) {
2300
+ this.net_name[it] = net.name;
2301
+ }
2302
+ }
2303
+ }
2304
+ pin_is_connected(id) {
2305
+ return this.net_name[id] !== void 0;
2306
+ }
2307
+ get_pin_net_name(id) {
2308
+ return this.net_name[id];
2309
+ }
2310
+ async convert_to_kicad() {
2311
+ const all_sch = {};
2312
+ for (const [k, v] of Object.entries(this.ctx.netlist.schematics)) {
2313
+ this.sheet_pwr_count = 0;
2314
+ this.block_calc = new Layout();
2315
+ all_sch[k] = await this.convert_sch(k, v);
2316
+ }
2317
+ return all_sch;
2318
+ }
2319
+ /**
2320
+ * Convert a schematic to a kicad schematic
2321
+ * @param name The name of the graph ,also the file name of the converted schematic
2322
+ * @param schematic For net label , it will be reflected by the net name,
2323
+ * no need to handle them before the other types of label are introduced, e.g. global or hierarchical
2324
+ * @returns
2325
+ */
2326
+ async convert_sch(name, schematic) {
2327
+ const powers = /* @__PURE__ */ new Set();
2328
+ this.wires = [];
2329
+ const sch = {
2330
+ version: SCH_VERSION,
2331
+ generator: GENERATOR_NAME,
2332
+ generator_version: GENERATOR_VERSION,
2333
+ paper: {
2334
+ size: "A4"
2335
+ },
2336
+ title_block: {
2337
+ title: name.replace(`.${import_ir4.MODULAR_CIRCUIT_SCH_EXT}`, ""),
2338
+ date: (0, import_utils11.replaceAll)((/* @__PURE__ */ new Date()).toISOString().slice(0, 10), "-", "/"),
2339
+ rev: "1.0",
2340
+ comment: {
2341
+ 1: "https://www.eda.cn",
2342
+ 2: this.ctx.project.author,
2343
+ 3: this.ctx.project.name
2344
+ }
2345
+ },
2346
+ lib_symbols: {
2347
+ symbols: []
2348
+ },
2349
+ uuid: schematic.uuid,
2350
+ symbols: [],
2351
+ labels: [],
2352
+ sheets: []
2353
+ };
2354
+ for (const it of schematic.powers) {
2355
+ if (!powers.has(it.value)) {
2356
+ switch (it.shape) {
2357
+ case import_electronics_model8.PowerShape.VCC:
2358
+ sch.lib_symbols?.symbols.push(gen_lib_vcc(it.value));
2359
+ break;
2360
+ case import_electronics_model8.PowerShape.GND:
2361
+ sch.lib_symbols?.symbols.push(gen_lib_gnd(it.value));
2362
+ break;
2363
+ }
2364
+ powers.add(it.value);
2365
+ this.convert_pwr_symbol(it, get_power_pos(this.sheet_pwr_count++), sch);
2366
+ }
2367
+ }
2368
+ const sheet_names_count = /* @__PURE__ */ new Map();
2369
+ const ordered_sheets = schematic.sheet_symbols.sort((a, b) => {
2370
+ return b.pins.length - a.pins.length;
2371
+ });
2372
+ for (const it of ordered_sheets) {
2373
+ const sheet_padding = this.get_sheet_symbol_lb_padding(it);
2374
+ this.block_calc.add_block(it.uuid, sheet_padding);
2375
+ }
2376
+ for (const it of schematic.hiera_labels) {
2377
+ this.block_calc.add_block(it.uuid, H_LABEL_FACTOR);
2378
+ }
2379
+ const res = await this.block_calc.finalize();
2380
+ for (const it of ordered_sheets) {
2381
+ this.convert_sheet_symbol(it, res[it.uuid], sch, sheet_names_count);
2382
+ }
2383
+ for (const it of schematic.hiera_labels) {
2384
+ this.convert_hierarchical_label(it, res[it.uuid], sch);
2385
+ }
2386
+ sch.wires = this.wires;
2387
+ return sch;
2388
+ }
2389
+ convert_hierarchical_label(pin, bbox, sch) {
2390
+ sch.labels?.push(
2391
+ gen_hierarchical_label(pin.name, bbox.pos, { horizontal: "left", vertical: "bottom" }, 0, pin.shape)
2392
+ );
2393
+ }
2394
+ convert_pwr_symbol(pwr, at, sch) {
2395
+ const pin_id = pwr.uuid;
2396
+ const sch_pwr_symbol = pwr.shape === import_electronics_model8.PowerShape.VCC ? gen_sch_vcc(pwr.value, this.sheet_pwr_count, pin_id, at) : gen_sch_gnd(pwr.value, this.sheet_pwr_count, pin_id, at);
2397
+ sch.symbols.push(sch_pwr_symbol);
2398
+ this.convert_net_label(pwr.value, at, sch);
2399
+ }
2400
+ get_sheet_symbol_lb_padding(sheet_sym) {
2401
+ const factor = {
2402
+ internal: {
2403
+ l_side: 0,
2404
+ r_side: 0
2405
+ },
2406
+ outer: {
2407
+ l_side: 0,
2408
+ r_side: 0
2409
+ },
2410
+ total_pin_num: sheet_sym.pins.length
2411
+ };
2412
+ const port_count = sheet_sym.pins.length;
2413
+ const h_count = Math.ceil(port_count / 2);
2414
+ for (let i = 0; i < port_count; i++) {
2415
+ const is_left = i < h_count;
2416
+ const cur_pin = sheet_sym.pins[i];
2417
+ if (is_left) {
2418
+ factor.internal.l_side = Math.max(factor.internal.l_side, cur_pin.name.length);
2419
+ } else {
2420
+ factor.internal.r_side = Math.max(factor.internal.r_side, cur_pin.name.length);
2421
+ }
2422
+ if (this.pin_is_connected(cur_pin.uuid)) {
2423
+ const net_name = this.get_pin_net_name(cur_pin.uuid);
2424
+ if (is_left) {
2425
+ factor.outer.l_side = Math.max(factor.outer.l_side, net_name.length);
2426
+ } else {
2427
+ factor.outer.r_side = Math.max(factor.outer.r_side, net_name.length);
2428
+ }
2429
+ }
2430
+ }
2431
+ return {
2432
+ internal: {
2433
+ l_side: factor.internal.l_side * FONT_SIZE,
2434
+ r_side: factor.internal.r_side * FONT_SIZE
2435
+ },
2436
+ outer: {
2437
+ l_side: factor.outer.l_side * FONT_SIZE,
2438
+ r_side: factor.outer.r_side * FONT_SIZE
2439
+ },
2440
+ total_pin_num: sheet_sym.pins.length
2441
+ };
2442
+ }
2443
+ convert_sheet_symbol(sheet_sym, rect, sch, sheet_names_count) {
2444
+ const port_count = sheet_sym.pins.length;
2445
+ const pins = [];
2446
+ const h_count = Math.floor(port_count / 2);
2447
+ for (let i = 0; i < port_count; i++) {
2448
+ const is_left = i < h_count;
2449
+ const x = is_left ? rect.pos.x : rect.pos.x + rect.size.x;
2450
+ const y = rect.pos.y + BLOCK_PIN_GAP * Math.abs(i < h_count ? i : i - h_count) + BLOCK_PIN_TB_MARGIN;
2451
+ const justify = is_left ? "left" : "right";
2452
+ const rotation = is_left ? 180 : 0;
2453
+ pins.push(this.convert_sheet_pin(sheet_sym.pins[i], { x, y }, sch, justify, rotation, is_left));
2454
+ }
2455
+ let sheet_name = sheet_sym.sheet_name;
2456
+ if (sheet_names_count.has(sheet_name)) {
2457
+ const count = sheet_names_count.get(sheet_name);
2458
+ sheet_name += `_${count}`;
2459
+ sheet_names_count.set(sheet_name, count + 1);
2460
+ } else {
2461
+ sheet_names_count.set(sheet_name, 1);
2462
+ }
2463
+ sch.sheets.push(
2464
+ gen_sch_sheet(rect, pins, {
2465
+ Sheetfile: sheet_sym.sheet_file_name,
2466
+ Sheetname: sheet_name
2467
+ })
2468
+ );
2469
+ }
2470
+ convert_sheet_pin(pin, pin_pos, sch, horizontal, rotation, is_left) {
2471
+ if (this.pin_is_connected(pin.uuid)) {
2472
+ const nt_name = this.get_pin_net_name(pin.uuid);
2473
+ this.convert_net_label(
2474
+ nt_name,
2475
+ {
2476
+ x: pin_pos.x + (is_left ? -WIRE_PADDING : WIRE_PADDING),
2477
+ y: pin_pos.y
2478
+ },
2479
+ sch,
2480
+ horizontal === "left" ? "right" : "left"
2481
+ );
2482
+ const lb_txt_len = nt_name.length * FONT_SIZE;
2483
+ const wire_padding = lb_txt_len + 2 * WIRE_PADDING;
2484
+ this.wires.push(
2485
+ gen_wire(pin_pos, {
2486
+ x: pin_pos.x + (is_left ? -wire_padding : wire_padding),
2487
+ y: pin_pos.y
2488
+ })
2489
+ );
2490
+ }
2491
+ return gen_sheet_pin(pin.name, pin_pos, { horizontal, vertical: "bottom" }, rotation, pin.shape);
2492
+ }
2493
+ convert_net_label(net_name, pin_pos, sch, horizontal = "right") {
2494
+ sch.labels.push(gen_net_label(net_name, pin_pos, { horizontal, vertical: "bottom" }));
2495
+ }
2496
+ };
2497
+
2498
+ // src/builder/graph_to_kicad/index.ts
2499
+ var import_perc = require("@modular-circuit/perc");
2500
+
2501
+ // src/builder/graph_to_kicad/do_convert_graph_to_kicad_project.ts
2502
+ var import_ir5 = require("@modular-circuit/ir");
2503
+
2504
+ // src/kicad/project/wildcards_and_files_ext.ts
2505
+ var KiCadSymbolLibFileExtension = "kicad_sym";
2506
+ var SchematicSymbolFileExtension = "sym";
2507
+ var LegacySymbolLibFileExtension = "lib";
2508
+ var LegacySymbolDocumentFileExtension = "dcm";
2509
+ var VrmlFileExtension = "wrl";
2510
+ var ProjectFileExtension = "kicad_pro";
2511
+ var LegacyProjectFileExtension = "pro";
2512
+ var ProjectLocalSettingsFileExtension = "kicad_prl";
2513
+ var LegacySchematicFileExtension = "sch";
2514
+ var CadstarSchematicFileExtension = "csa";
2515
+ var CadstarPartsLibraryFileExtension = "lib";
2516
+ var KiCadSchematicFileExtension = "kicad_sch";
2517
+ var SpiceFileExtension = "cir";
2518
+ var CadstarNetlistFileExtension = "frp";
2519
+ var OrCadPcb2NetlistFileExtension = "net";
2520
+ var NetlistFileExtension = "net";
2521
+ var AllegroNetlistFileExtension = "txt";
2522
+ var FootprintAssignmentFileExtension = "cmp";
2523
+ var GerberFileExtension = "gbr";
2524
+ var GerberJobFileExtension = "gbrjob";
2525
+ var HtmlFileExtension = "html";
2526
+ var EquFileExtension = "equ";
2527
+ var HotkeyFileExtension = "hotkeys";
2528
+ var DatabaseLibraryFileExtension = "kicad_dbl";
2529
+ var HTTPLibraryFileExtension = "kicad_httplib";
2530
+ var ArchiveFileExtension = "zip";
2531
+ var LegacyPcbFileExtension = "brd";
2532
+ var EaglePcbFileExtension = "brd";
2533
+ var CadstarPcbFileExtension = "cpa";
2534
+ var KiCadPcbFileExtension = "kicad_pcb";
2535
+ var DrawingSheetFileExtension = "kicad_wks";
2536
+ var DesignRulesFileExtension = "kicad_dru";
2537
+ var PdfFileExtension = "pdf";
2538
+ var MacrosFileExtension = "mcr";
2539
+ var DrillFileExtension = "drl";
2540
+ var SVGFileExtension = "svg";
2541
+ var ReportFileExtension = "rpt";
2542
+ var FootprintPlaceFileExtension = "pos";
2543
+ var KiCadFootprintLibPathExtension = "pretty";
2544
+ var LegacyFootprintLibPathExtension = "mod";
2545
+ var AltiumFootprintLibPathExtension = "PcbLib";
2546
+ var CadstarFootprintLibPathExtension = "cpa";
2547
+ var EagleFootprintLibPathExtension = "lbr";
2548
+ var GedaPcbFootprintLibFileExtension = "fp";
2549
+ var KiCadFootprintFileExtension = "kicad_mod";
2550
+ var SpecctraDsnFileExtension = "dsn";
2551
+ var SpecctraSessionFileExtension = "ses";
2552
+ var IpcD356FileExtension = "d356";
2553
+ var Ipc2581FileExtension = "xml";
2554
+ var WorkbookFileExtension = "wbk";
2555
+ var PngFileExtension = "png";
2556
+ var JpegFileExtension = "jpg";
2557
+ var TextFileExtension = "txt";
2558
+ var MarkdownFileExtension = "md";
2559
+ var CsvFileExtension = "csv";
2560
+ var XmlFileExtension = "xml";
2561
+ var JsonFileExtension = "json";
2562
+ var StepFileExtension = "step";
2563
+ var StepFileAbrvExtension = "stp";
2564
+ var GltfBinaryFileExtension = "glb";
2565
+ var GerberFileExtensionsRegex = /(gbr|gko|pho|(g[tb][alops])|(gm?\\d\\d*)|(gp[tb]))/;
2566
+
2567
+ // src/kicad/project/kicad_project_archive.ts
2568
+ var import_utils12 = require("@modular-circuit/utils");
2569
+
2570
+ // src/kicad/project/kicad_prl.ts
2571
+ var kicad_prl = (prj_name) => ({
2572
+ board: {
2573
+ active_layer: 0,
2574
+ active_layer_preset: "",
2575
+ auto_track_width: true,
2576
+ hidden_netclasses: [],
2577
+ hidden_nets: [],
2578
+ high_contrast_mode: 0,
2579
+ net_color_mode: 1,
2580
+ opacity: {
2581
+ images: 0.6,
2582
+ pads: 1,
2583
+ tracks: 1,
2584
+ vias: 1,
2585
+ zones: 0.6
2586
+ },
2587
+ selection_filter: {
2588
+ dimensions: true,
2589
+ footprints: true,
2590
+ graphics: true,
2591
+ keepouts: true,
2592
+ lockedItems: false,
2593
+ otherItems: true,
2594
+ pads: true,
2595
+ text: true,
2596
+ tracks: true,
2597
+ vias: true,
2598
+ zones: true
2599
+ },
2600
+ visible_items: [
2601
+ 0,
2602
+ 1,
2603
+ 2,
2604
+ 3,
2605
+ 4,
2606
+ 5,
2607
+ 8,
2608
+ 9,
2609
+ 10,
2610
+ 11,
2611
+ 12,
2612
+ 13,
2613
+ 15,
2614
+ 16,
2615
+ 17,
2616
+ 18,
2617
+ 19,
2618
+ 20,
2619
+ 21,
2620
+ 22,
2621
+ 23,
2622
+ 24,
2623
+ 25,
2624
+ 26,
2625
+ 27,
2626
+ 28,
2627
+ 29,
2628
+ 30,
2629
+ 32,
2630
+ 33,
2631
+ 34,
2632
+ 35,
2633
+ 36,
2634
+ 39,
2635
+ 40
2636
+ ],
2637
+ visible_layers: "fffffff_ffffffff",
2638
+ zone_display_mode: 0
2639
+ },
2640
+ git: {
2641
+ repo_password: "",
2642
+ repo_type: "",
2643
+ repo_username: "",
2644
+ ssh_key: ""
2645
+ },
2646
+ meta: {
2647
+ filename: `${prj_name}.kicad_prl`,
2648
+ version: 3
2649
+ },
2650
+ project: {
2651
+ files: []
2652
+ }
2653
+ });
2654
+
2655
+ // src/kicad/project/kicad_pro.ts
2656
+ var kicad_pro = (project_name) => ({
2657
+ board: {
2658
+ "3dviewports": [],
2659
+ ipc2581: {
2660
+ dist: "",
2661
+ distpn: "",
2662
+ internal_id: "",
2663
+ mfg: "",
2664
+ mpn: ""
2665
+ },
2666
+ layer_presets: [],
2667
+ viewports: []
2668
+ },
2669
+ boards: [],
2670
+ cvpcb: {
2671
+ equivalence_files: []
2672
+ },
2673
+ erc: {
2674
+ erc_exclusions: [],
2675
+ meta: {
2676
+ version: 0
2677
+ },
2678
+ pin_map: [
2679
+ [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2],
2680
+ [0, 2, 0, 1, 0, 0, 1, 0, 2, 2, 2, 2],
2681
+ [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 2],
2682
+ [0, 1, 0, 0, 0, 0, 1, 1, 2, 1, 1, 2],
2683
+ [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2],
2684
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],
2685
+ [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2],
2686
+ [0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 2],
2687
+ [0, 2, 1, 2, 0, 0, 1, 0, 2, 2, 2, 2],
2688
+ [0, 2, 0, 1, 0, 0, 1, 0, 2, 0, 0, 2],
2689
+ [0, 2, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2],
2690
+ [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
2691
+ ],
2692
+ rule_severities: {
2693
+ bus_definition_conflict: "error",
2694
+ bus_entry_needed: "error",
2695
+ bus_to_bus_conflict: "error",
2696
+ bus_to_net_conflict: "error",
2697
+ conflicting_netclasses: "error",
2698
+ different_unit_footprint: "error",
2699
+ different_unit_net: "error",
2700
+ duplicate_reference: "error",
2701
+ duplicate_sheet_names: "error",
2702
+ endpoint_off_grid: "warning",
2703
+ extra_units: "error",
2704
+ global_label_dangling: "warning",
2705
+ hier_label_mismatch: "error",
2706
+ label_dangling: "error",
2707
+ lib_symbol_issues: "warning",
2708
+ missing_bidi_pin: "warning",
2709
+ missing_input_pin: "warning",
2710
+ missing_power_pin: "error",
2711
+ missing_unit: "warning",
2712
+ multiple_net_names: "warning",
2713
+ net_not_bus_member: "warning",
2714
+ no_connect_connected: "warning",
2715
+ no_connect_dangling: "warning",
2716
+ pin_not_connected: "error",
2717
+ pin_not_driven: "error",
2718
+ pin_to_pin: "warning",
2719
+ power_pin_not_driven: "error",
2720
+ similar_labels: "warning",
2721
+ simulation_model_issue: "ignore",
2722
+ unannotated: "error",
2723
+ unit_value_mismatch: "error",
2724
+ unresolved_variable: "error",
2725
+ wire_dangling: "error"
2726
+ }
2727
+ },
2728
+ libraries: {
2729
+ pinned_footprint_libs: [],
2730
+ pinned_symbol_libs: []
2731
+ },
2732
+ meta: {
2733
+ filename: `${project_name}.kicad_pro`,
2734
+ version: 1
2735
+ },
2736
+ net_settings: {
2737
+ classes: [
2738
+ {
2739
+ bus_width: 12,
2740
+ clearance: 0.2,
2741
+ diff_pair_gap: 0.25,
2742
+ diff_pair_via_gap: 0.25,
2743
+ diff_pair_width: 0.2,
2744
+ line_style: 0,
2745
+ microvia_diameter: 0.3,
2746
+ microvia_drill: 0.1,
2747
+ name: "Default",
2748
+ pcb_color: "rgba(0, 0, 0, 0.000)",
2749
+ schematic_color: "rgba(0, 0, 0, 0.000)",
2750
+ track_width: 0.2,
2751
+ via_diameter: 0.6,
2752
+ via_drill: 0.3,
2753
+ wire_width: 6
2754
+ }
2755
+ ],
2756
+ meta: {
2757
+ version: 3
2758
+ },
2759
+ net_colors: null,
2760
+ netclass_assignments: null,
2761
+ netclass_patterns: []
2762
+ },
2763
+ pcbnew: {
2764
+ last_paths: {
2765
+ gencad: "",
2766
+ idf: "",
2767
+ netlist: "",
2768
+ plot: "",
2769
+ pos_files: "",
2770
+ specctra_dsn: "",
2771
+ step: "",
2772
+ svg: "",
2773
+ vrml: ""
2774
+ }
2775
+ // page_layout_descr_file: 'layout_frame.kicad_wks',
2776
+ },
2777
+ schematic: {
2778
+ annotate_start_num: 0,
2779
+ bom_export_filename: "",
2780
+ bom_fmt_presets: [],
2781
+ bom_fmt_settings: {
2782
+ field_delimiter: ",",
2783
+ keep_line_breaks: false,
2784
+ keep_tabs: false,
2785
+ name: "CSV",
2786
+ ref_delimiter: ",",
2787
+ ref_range_delimiter: "",
2788
+ string_delimiter: '"'
2789
+ },
2790
+ bom_presets: [],
2791
+ bom_settings: {
2792
+ exclude_dnp: false,
2793
+ fields_ordered: [
2794
+ {
2795
+ group_by: false,
2796
+ label: "Reference",
2797
+ name: "Reference",
2798
+ show: true
2799
+ },
2800
+ {
2801
+ group_by: true,
2802
+ label: "Value",
2803
+ name: "Value",
2804
+ show: true
2805
+ },
2806
+ {
2807
+ group_by: false,
2808
+ label: "Datasheet",
2809
+ name: "Datasheet",
2810
+ show: true
2811
+ },
2812
+ {
2813
+ group_by: false,
2814
+ label: "Footprint",
2815
+ name: "Footprint",
2816
+ show: true
2817
+ },
2818
+ {
2819
+ group_by: false,
2820
+ label: "Qty",
2821
+ name: "${QUANTITY}",
2822
+ show: true
2823
+ },
2824
+ {
2825
+ group_by: true,
2826
+ label: "DNP",
2827
+ name: "${DNP}",
2828
+ show: true
2829
+ }
2830
+ ],
2831
+ filter_string: "",
2832
+ group_symbols: true,
2833
+ name: "Grouped By Value",
2834
+ sort_asc: true,
2835
+ sort_field: "Reference"
2836
+ },
2837
+ connection_grid_size: 50,
2838
+ drawing: {
2839
+ dashed_lines_dash_length_ratio: 12,
2840
+ dashed_lines_gap_length_ratio: 3,
2841
+ default_line_thickness: 6,
2842
+ default_text_size: 50,
2843
+ field_names: [],
2844
+ intersheets_ref_own_page: false,
2845
+ intersheets_ref_prefix: "",
2846
+ intersheets_ref_short: false,
2847
+ intersheets_ref_show: false,
2848
+ intersheets_ref_suffix: "",
2849
+ junction_size_choice: 3,
2850
+ label_size_ratio: 0.375,
2851
+ operating_point_overlay_i_precision: 3,
2852
+ operating_point_overlay_i_range: "~A",
2853
+ operating_point_overlay_v_precision: 3,
2854
+ operating_point_overlay_v_range: "~V",
2855
+ overbar_offset_ratio: 1.23,
2856
+ pin_symbol_size: 25,
2857
+ text_offset_ratio: 0.15
2858
+ },
2859
+ legacy_lib_dir: "",
2860
+ legacy_lib_list: [],
2861
+ meta: {
2862
+ version: 1
2863
+ },
2864
+ net_format_name: "",
2865
+ page_layout_descr_file: `${project_name}.${DrawingSheetFileExtension}`,
2866
+ plot_directory: "",
2867
+ spice_current_sheet_as_root: false,
2868
+ spice_external_command: 'spice "%I"',
2869
+ spice_model_current_sheet_as_root: true,
2870
+ spice_save_all_currents: false,
2871
+ spice_save_all_dissipations: false,
2872
+ spice_save_all_voltages: false,
2873
+ subpart_first_id: 65,
2874
+ subpart_id_separator: 0
2875
+ },
2876
+ sheets: [],
2877
+ text_variables: {}
2878
+ });
2879
+
2880
+ // src/kicad/project/kicad_project_archive.ts
2881
+ var KICAD_SCH_FRAME = get_sch_default_drawing_sheet();
2882
+ var KiCadProjectArchive = class {
2883
+ constructor(project_name, sheets) {
2884
+ this.project_name = project_name;
2885
+ this.sheets = sheets;
2886
+ }
2887
+ get sch_frame() {
2888
+ return KICAD_SCH_FRAME;
2889
+ }
2890
+ get kicad_prl() {
2891
+ return kicad_prl(this.project_name);
2892
+ }
2893
+ get kicad_pro() {
2894
+ return kicad_pro(this.project_name);
2895
+ }
2896
+ get_project_directive_file_name(ext) {
2897
+ return `${this.project_name}.${ext}`;
2898
+ }
2899
+ toZip() {
2900
+ return (0, import_utils12.zipFiles)({
2901
+ [this.get_project_directive_file_name(ProjectLocalSettingsFileExtension)]: JSON.stringify(this.kicad_prl),
2902
+ [this.get_project_directive_file_name(ProjectFileExtension)]: JSON.stringify(this.kicad_pro),
2903
+ [this.get_project_directive_file_name(DrawingSheetFileExtension)]: this.sch_frame,
2904
+ ...this.sheets
2905
+ });
2906
+ }
2907
+ };
2908
+
2909
+ // src/builder/graph_to_kicad/do_convert_graph_to_kicad_project.ts
2910
+ async function do_convert_graph_to_kicad_project(ctx) {
2911
+ const { sheets } = await collect_sub_sheets(ctx.project.dependencies, ctx.module_resolver);
2912
+ const netlist = new GraphConverter({
2913
+ ...ctx
2914
+ }).convert_to_netlist();
2915
+ const converted_sheets = await new NetListConverter({
2916
+ ...ctx,
2917
+ netlist
2918
+ }).convert_to_kicad();
2919
+ const sexpr_printer = new SCHEMATIC_PRINTER();
2920
+ for (const [k, v] of Object.entries(converted_sheets)) {
2921
+ if (k in sheets) {
2922
+ console.error(`Duplicated sheet file name found ${k}`);
2923
+ }
2924
+ sheets[k.replace(import_ir5.MODULAR_CIRCUIT_SCH_EXT, KiCadSchematicFileExtension)] = sexpr_printer.schematic(v);
2925
+ }
2926
+ const kicad_project = new KiCadProjectArchive(ctx.project.name, {
2927
+ ...sheets
2928
+ });
2929
+ return kicad_project.toZip();
2930
+ }
2931
+
2932
+ // src/builder/graph_to_kicad/index.ts
2933
+ async function convert_graph_to_kicad_project(ctx) {
2934
+ return do_convert_graph_to_kicad_project({
2935
+ ...ctx,
2936
+ ...await (0, import_perc.build_connection_graph)({ ...ctx, dependencies: ctx.project.dependencies })
2937
+ });
2938
+ }
2939
+ // Annotate the CommonJS export names for ESM import in node:
2940
+ 0 && (module.exports = {
2941
+ AllegroNetlistFileExtension,
2942
+ AltiumFootprintLibPathExtension,
2943
+ ArchiveFileExtension,
2944
+ BLOCK_PIN_GAP,
2945
+ BLOCK_PIN_TB_MARGIN,
2946
+ CadstarFootprintLibPathExtension,
2947
+ CadstarNetlistFileExtension,
2948
+ CadstarPartsLibraryFileExtension,
2949
+ CadstarPcbFileExtension,
2950
+ CadstarSchematicFileExtension,
2951
+ CsvFileExtension,
2952
+ DEFAULT_PAPER_SIZE,
2953
+ DatabaseLibraryFileExtension,
2954
+ DesignRulesFileExtension,
2955
+ DrawingSheetFileExtension,
2956
+ DrillFileExtension,
2957
+ EagleFootprintLibPathExtension,
2958
+ EaglePcbFileExtension,
2959
+ EquFileExtension,
2960
+ FONT_SIZE,
2961
+ FootprintAssignmentFileExtension,
2962
+ FootprintPlaceFileExtension,
2963
+ GENERATOR_NAME,
2964
+ GENERATOR_VERSION,
2965
+ GRID_SIZE,
2966
+ GedaPcbFootprintLibFileExtension,
2967
+ GerberFileExtension,
2968
+ GerberFileExtensionsRegex,
2969
+ GerberJobFileExtension,
2970
+ GltfBinaryFileExtension,
2971
+ GraphConverter,
2972
+ HTTPLibraryFileExtension,
2973
+ HotkeyFileExtension,
2974
+ HtmlFileExtension,
2975
+ Ipc2581FileExtension,
2976
+ IpcD356FileExtension,
2977
+ JpegFileExtension,
2978
+ JsonFileExtension,
2979
+ KICAD_SCH_FRAME,
2980
+ KiCadFootprintFileExtension,
2981
+ KiCadFootprintLibPathExtension,
2982
+ KiCadPcbFileExtension,
2983
+ KiCadProjectArchive,
2984
+ KiCadSchematicFileExtension,
2985
+ KiCadSymbolLibFileExtension,
2986
+ Layout,
2987
+ LegacyFootprintLibPathExtension,
2988
+ LegacyPcbFileExtension,
2989
+ LegacyProjectFileExtension,
2990
+ LegacySchematicFileExtension,
2991
+ LegacySymbolDocumentFileExtension,
2992
+ LegacySymbolLibFileExtension,
2993
+ MacrosFileExtension,
2994
+ MarkdownFileExtension,
2995
+ NetListConverter,
2996
+ NetlistFileExtension,
2997
+ OrCadPcb2NetlistFileExtension,
2998
+ PAPER,
2999
+ PAPER_SIZE,
3000
+ PdfFileExtension,
3001
+ PngFileExtension,
3002
+ ProjectFileExtension,
3003
+ ProjectLocalSettingsFileExtension,
3004
+ ReportFileExtension,
3005
+ SCHEMATIC_PRINTER,
3006
+ SCH_VERSION,
3007
+ SVGFileExtension,
3008
+ SchematicSymbolFileExtension,
3009
+ SpecctraDsnFileExtension,
3010
+ SpecctraSessionFileExtension,
3011
+ SpiceFileExtension,
3012
+ StepFileAbrvExtension,
3013
+ StepFileExtension,
3014
+ StringFormatter,
3015
+ TextFileExtension,
3016
+ VrmlFileExtension,
3017
+ WIRE_PADDING,
3018
+ WorkbookFileExtension,
3019
+ XmlFileExtension,
3020
+ collect_sub_sheets,
3021
+ collect_sub_sheets_by_id,
3022
+ convert_graph_to_kicad_project,
3023
+ filterNullOrUndefined,
3024
+ gen_lib_gnd,
3025
+ gen_lib_vcc,
3026
+ gen_sch_gnd,
3027
+ gen_sch_vcc,
3028
+ get_power_pos,
3029
+ get_sch_default_drawing_sheet,
3030
+ tab
3031
+ });