@modular-circuit/transpiler 0.0.109 → 0.1.1

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