{"version":3,"sources":["../node_modules/ms/index.js","../node_modules/debug/src/common.js","../node_modules/debug/src/browser.js","../node_modules/debug/src/node.js","../node_modules/debug/src/index.js","../src/index.ts","../src/parse-kicad-mod-to-kicad-json.ts","../src/kicad-zod.ts","../src/get-attr.ts","../src/convert-kicad-json-to-tscircuit-soup.ts","../src/math/arc-utils.ts","../src/math/make-point.ts","../src/parse-kicad-mod-to-tscircuit-soup.ts"],"sourcesContent":["/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","export { parseKicadModToKicadJson } from \"./parse-kicad-mod-to-kicad-json\"\nexport { parseKicadModToTscircuitSoup } from \"./parse-kicad-mod-to-tscircuit-soup\"\nexport { convertKicadJsonToTsCircuitSoup } from \"./convert-kicad-json-to-tscircuit-soup\"\n","import parseSExpression from \"s-expression\"\nimport {\n  attributes_def,\n  kicad_mod_json_def,\n  pad_def,\n  type FpArc,\n  type FpLine,\n  type FpText,\n  type KicadModJson,\n  type Pad,\n  type Property,\n} from \"./kicad-zod\"\nimport { formatAttr, getAttr } from \"./get-attr\"\nimport Debug from \"debug\"\n\nconst debug = Debug(\"kicad-mod-converter\")\n\nexport const parseKicadModToKicadJson = (fileContent: string): KicadModJson => {\n  const kicadSExpr = parseSExpression(fileContent)\n\n  const footprintName = kicadSExpr[1].valueOf()\n\n  const topLevelAttributes: any = {}\n\n  const simpleTopLevelAttributes = Object.entries(kicad_mod_json_def.shape)\n    .filter(\n      ([attributeKey, def]) =>\n        def._def.typeName === \"ZodString\" || attributeKey === \"tags\",\n    )\n    .map(([attributeKey]) => attributeKey)\n  for (const kicadSExprRow of kicadSExpr.slice(2)) {\n    if (!simpleTopLevelAttributes.includes(kicadSExprRow[0])) continue\n\n    const key = kicadSExprRow[0].valueOf()\n    const val = formatAttr(kicadSExprRow.slice(1), key)\n    topLevelAttributes[key] = val\n  }\n\n  const properties = kicadSExpr\n    .slice(2)\n    .filter((row: any[]) => row[0] === \"property\")\n    .map((row: any) => {\n      const key = row[1].valueOf()\n      const val = row[2].valueOf()\n      const attributes = attributes_def.parse(\n        row.slice(3).reduce((acc: any, attrAr: any[]) => {\n          const attrKey = attrAr[0].valueOf()\n          acc[attrKey] = formatAttr(attrAr.slice(1), attrKey)\n          return acc\n        }, {} as any),\n      )\n\n      return {\n        key,\n        val,\n        attributes,\n      } as Property\n    })\n\n  const padRows = kicadSExpr.slice(2).filter((row: any[]) => row[0] === \"pad\")\n\n  const pads: Array<Pad> = []\n\n  for (const row of padRows) {\n    const at = getAttr(row, \"at\")\n    const size = getAttr(row, \"size\")\n    const drill = getAttr(row, \"drill\")\n    let layers = getAttr(row, \"layers\")\n    if (Array.isArray(layers)) {\n      layers = layers.map((layer) => layer.valueOf())\n    } else if (typeof layers === \"string\") {\n      layers = [layers]\n    } else if (!layers) {\n      layers = []\n    }\n\n    const roundrect_rratio = getAttr(row, \"roundrect_rratio\")\n    const uuid = getAttr(row, \"uuid\")\n    const padRaw = {\n      name: row[1].valueOf(),\n      pad_type: row[2].valueOf(),\n      pad_shape: row[3].valueOf(),\n      at,\n      drill,\n      size,\n      layers,\n      roundrect_rratio,\n      uuid,\n    }\n\n    debug(`attempting to parse pad: ${JSON.stringify(padRaw, null, \"  \")}`)\n    pads.push(pad_def.parse(padRaw))\n  }\n\n  const fp_texts_rows = kicadSExpr\n    .slice(2)\n    .filter((row: any[]) => row[0] === \"fp_text\")\n\n  const fp_texts: FpText[] = []\n\n  for (const fp_text_row of fp_texts_rows) {\n    const text = fp_text_row[2].valueOf()\n    const at = getAttr(fp_text_row, \"at\")\n    const layer = getAttr(fp_text_row, \"layer\")\n    const uuid = getAttr(fp_text_row, \"uuid\")\n    const effects = getAttr(fp_text_row, \"effects\")\n\n    fp_texts.push({\n      fp_text_type: \"user\",\n      text,\n      at,\n      layer,\n      uuid,\n      effects,\n    })\n  }\n\n  const fp_lines: FpLine[] = []\n\n  const fp_lines_rows = kicadSExpr\n    .slice(2)\n    .filter((row: any[]) => row[0] === \"fp_line\")\n\n  for (const fp_line_row of fp_lines_rows) {\n    const start = getAttr(fp_line_row, \"start\")\n    const end = getAttr(fp_line_row, \"end\")\n    const stroke = getAttr(fp_line_row, \"stroke\")\n    const layer = getAttr(fp_line_row, \"layer\")\n    const uuid = getAttr(fp_line_row, \"uuid\")\n\n    fp_lines.push({\n      start,\n      end,\n      stroke,\n      layer,\n      uuid,\n    })\n  }\n\n  const fp_arcs: FpArc[] = []\n  const fp_arcs_rows = kicadSExpr\n    .slice(2)\n    .filter((row: any[]) => row[0] === \"fp_arc\")\n\n  for (const fp_arc_row of fp_arcs_rows) {\n    const start = getAttr(fp_arc_row, \"start\")\n    const mid = getAttr(fp_arc_row, \"mid\")\n    const end = getAttr(fp_arc_row, \"end\")\n    const stroke = getAttr(fp_arc_row, \"stroke\")\n    const layer = getAttr(fp_arc_row, \"layer\")\n    const uuid = getAttr(fp_arc_row, \"uuid\")\n\n    fp_arcs.push({\n      start,\n      mid,\n      end,\n      stroke,\n      layer,\n      uuid,\n    })\n  }\n\n  return kicad_mod_json_def.parse({\n    footprint_name: footprintName,\n    ...topLevelAttributes,\n    properties,\n    fp_lines,\n    fp_texts,\n    fp_arcs,\n    pads,\n  })\n}\n","import { z } from \"zod\"\n\nexport const point2 = z.tuple([z.coerce.number(), z.coerce.number()])\nexport const point3 = z.tuple([z.number(), z.number(), z.number()])\nexport const point = z.union([point2, point3])\n\ntype MakeRequired<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>\n\nexport const attributes_def = z\n  .object({\n    at: point,\n    size: point2,\n    layers: z.array(z.string()),\n    roundrect_rratio: z.number(),\n    uuid: z.string(),\n  })\n  .partial()\n\nexport const property_def = z.object({\n  key: z.string(),\n  val: z.string(),\n  attributes: attributes_def,\n})\n\nconst drill_def = z.object({\n  oval: z.boolean().default(false),\n  width: z.number().optional(),\n  height: z.number().optional(),\n  offset: point2.optional(),\n})\n\nexport const pad_def = z.object({\n  name: z.string(),\n  pad_type: z.enum([\"thru_hole\", \"smd\", \"np_thru_hole\", \"connect\"]),\n  pad_shape: z.enum([\n    \"roundrect\",\n    \"circle\",\n    \"rect\",\n    \"oval\",\n    \"trapezoid\",\n    \"custom\",\n  ]),\n  at: point,\n  size: point2,\n  drill: z\n    .union([z.number(), z.array(z.any()), drill_def])\n    .transform((a) => {\n      if (typeof a === \"number\") {\n        return { oval: false, width: a, height: a }\n      }\n      if (\"oval\" in a) return a\n      if (a.length === 2) {\n        return {\n          oval: false,\n          width: Number.parseFloat(a[0]),\n          height: Number.parseFloat(a[0]),\n          offset: point2.parse(a[1].slice(1)),\n        }\n      }\n      if (a.length === 3 || a.length === 4) {\n        return {\n          oval: a[0] === \"oval\",\n          width: Number.parseFloat(a[1] as string),\n          height: Number.parseFloat(a[2] as string),\n          offset: a[3] ? point2.parse(a[3].slice(1)) : undefined,\n        }\n      }\n      return a\n    })\n    .pipe(drill_def)\n    .optional(),\n  layers: z.array(z.string()).optional(),\n  roundrect_rratio: z.number().optional(),\n  chamfer_ratio: z.number().optional(),\n  solder_paste_margin: z.number().optional(),\n  solder_paste_margin_ratio: z.number().optional(),\n  clearance: z.number().optional(),\n  zone_connection: z\n    .union([\n      z.literal(0).describe(\"Pad is not connect to zone\"),\n      z.literal(1).describe(\"Pad is connected to zone using thermal relief\"),\n      z.literal(2).describe(\"Pad is connected to zone using solid fill\"),\n    ])\n    .optional(),\n  thermal_width: z.number().optional(),\n  thermal_gap: z.number().optional(),\n  uuid: z.string().optional(),\n})\n\nexport const effects_def = z\n  .object({\n    font: z.object({\n      size: point2,\n      thickness: z.number().optional(),\n    }),\n  })\n  .partial()\n\nexport const fp_text_def = z.object({\n  fp_text_type: z.literal(\"user\"),\n  text: z.string(),\n  at: point,\n  layer: z.string(),\n  uuid: z.string().optional(),\n  effects: effects_def.partial(),\n})\n\nexport const fp_arc_def = z.object({\n  start: point2,\n  mid: point2,\n  end: point2,\n  stroke: z.object({\n    width: z.number(),\n    type: z.string(),\n  }),\n  layer: z.string(),\n  uuid: z.string().optional(),\n})\n\nexport const fp_line = z\n  .object({\n    start: point2,\n    end: point2,\n    stroke: z\n      .object({\n        width: z.number(),\n        type: z.string(),\n      })\n      .optional(),\n    width: z.number().optional(),\n    layer: z.string(),\n    uuid: z.string().optional(),\n  })\n  // Old kicad versions don't have \"stroke\"\n  .transform((data) => {\n    return {\n      ...data,\n      width: undefined,\n      stroke: data.stroke ?? { width: data.width },\n    } as MakeRequired<Omit<typeof data, \"width\">, \"stroke\">\n  })\n\nexport const kicad_mod_json_def = z.object({\n  footprint_name: z.string(),\n  version: z.string().optional(),\n  generator: z.string().optional(),\n  generator_version: z.string().optional(),\n  layer: z.string(),\n  descr: z.string().default(\"\"),\n  tags: z.array(z.string()).optional(),\n  properties: z.array(property_def),\n  fp_lines: z.array(fp_line),\n  fp_texts: z.array(fp_text_def),\n  fp_arcs: z.array(fp_arc_def),\n  pads: z.array(pad_def),\n})\n\nexport type Point2 = z.infer<typeof point2>\nexport type Point3 = z.infer<typeof point3>\nexport type Point = z.infer<typeof point>\nexport type Attributes = z.infer<typeof attributes_def>\nexport type Property = z.infer<typeof property_def>\nexport type Pad = z.infer<typeof pad_def>\nexport type EffectsObj = z.infer<typeof effects_def>\nexport type FpText = z.infer<typeof fp_text_def>\nexport type FpLine = z.infer<typeof fp_line>\nexport type FpArc = z.infer<typeof fp_arc_def>\nexport type KicadModJson = z.infer<typeof kicad_mod_json_def>\n","import { type EffectsObj, effects_def } from \"./kicad-zod\"\n\nexport const formatAttr = (val: any, attrKey: string) => {\n  if (attrKey === \"effects\" && Array.isArray(val)) {\n    // val = [ [ 'font', [ 'size', '1', '1' ], [ 'thickness', '0.2' ] ] ]\n    const effectsObj: EffectsObj = {}\n    for (const elm of val) {\n      if (elm[0] === \"font\") {\n        const fontObj: any = {}\n        for (const fontElm of elm.slice(1)) {\n          if (fontElm.length === 2) {\n            fontObj[fontElm[0].valueOf()] = Number.parseFloat(\n              fontElm[1].valueOf(),\n            )\n          } else {\n            fontObj[fontElm[0].valueOf()] = fontElm\n              .slice(1)\n              .map((n: any) => Number.parseFloat(n.valueOf()))\n          }\n        }\n        effectsObj.font = fontObj\n      }\n    }\n    return effects_def.parse(effectsObj)\n  }\n  if (attrKey === \"stroke\") {\n    const strokeObj: any = {}\n    for (const strokeElm of val) {\n      const strokePropKey = strokeElm[0].valueOf()\n      strokeObj[strokePropKey] = formatAttr(strokeElm.slice(1), strokePropKey)\n    }\n    return strokeObj\n  }\n  if (\n    attrKey === \"at\" ||\n    attrKey === \"size\" ||\n    attrKey === \"start\" ||\n    attrKey === \"mid\" ||\n    attrKey === \"end\"\n  ) {\n    return val.map((n: any) => Number.parseFloat(n.valueOf()))\n  }\n  if (attrKey === \"tags\") {\n    return val.map((n: any) => n.valueOf())\n  }\n  if (attrKey === \"generator_version\" || attrKey === \"version\") {\n    return val[0].valueOf()\n  }\n  if (val.length === 2) {\n    return val.valueOf()\n  }\n  if (attrKey === \"uuid\") {\n    if (Array.isArray(val)) {\n      return val[0].valueOf()\n    }\n    return val.valueOf()\n  }\n  if (/^[\\d\\.]+$/.test(val) && !Number.isNaN(Number.parseFloat(val))) {\n    return Number.parseFloat(val)\n  }\n  if (Array.isArray(val) && val.length === 1) {\n    return val[0].valueOf()\n  }\n  if (Array.isArray(val)) {\n    return val.map((s) => s.valueOf())\n  }\n  return val\n}\n\nexport const getAttr = (s: Array<any>, key: string) => {\n  for (const elm of s) {\n    if (Array.isArray(elm) && elm[0] === key) {\n      return formatAttr(elm.slice(1), key)\n    }\n  }\n}\n","import type { KicadModJson } from \"./kicad-zod\"\nimport type { AnySoupElement } from \"@tscircuit/soup\"\nimport { createProjectBuilder } from \"@tscircuit/builder\"\nimport Debug from \"debug\"\nimport { generateArcPath, getArcLength } from \"./math/arc-utils\"\nimport { makePoint } from \"./math/make-point\"\n\nconst debug = Debug(\"kicad-mod-converter\")\n\nexport const convertKicadLayerToTscircuitLayer = (kicadLayer: string) => {\n  switch (kicadLayer) {\n    case \"F.Cu\":\n    case \"F.Fab\":\n    case \"F.SilkS\":\n      return \"top\"\n    case \"B.Cu\":\n    case \"B.Fab\":\n    case \"B.SilkS\":\n      return \"bottom\"\n  }\n}\n\nexport const convertKicadJsonToTsCircuitSoup = async (\n  kicadJson: KicadModJson,\n): Promise<AnySoupElement[]> => {\n  const { fp_lines, fp_texts, fp_arcs, pads, footprint_name, properties } =\n    kicadJson\n\n  const pb = createProjectBuilder()\n\n  pb.add(\"component\", (cb) => {\n    for (const pad of pads) {\n      if (pad.pad_type === \"smd\") {\n        cb.footprint.add(\"smtpad\", (pb) =>\n          pb\n            .setProps({\n              x: pad.at[0],\n              y: -pad.at[1],\n              // ??? @tscircuit/builder bug? width and height are not recognized\n              width: pad.size[0],\n              height: pad.size[1],\n              layer: pad.layers?.[0]! as any,\n              shape: \"rect\",\n              port_hints: [pad.name],\n            })\n            .setSize(pad.size[0], pad.size[1]),\n        )\n      } else if (pad.pad_type === \"thru_hole\") {\n        if(pad.pad_shape === \"circle\") {\n            cb.footprint.add(\"platedhole\", (phb) =>\n            phb.setProps({\n              x: pad.at[0],\n              y: -pad.at[1],\n              outer_diameter: pad.size[0], // Assuming outer_diameter is the same as diameter for a circle\n              hole_diameter: pad.drill?.width!,\n              shape: \"circle\",\n              // TODO kicad uses \"*.Cu\" and \"*.Mask\" to mean \"every\"\n              layers: [\"top\", \"bottom\"],\n              port_hints: [pad.name],\n            }),\n          )\n        } else if(pad.pad_shape === \"oval\") {\n          cb.footprint.add(\"platedhole\", (phb) =>\n            phb.setProps({\n              shape: \"oval\",\n              x: pad.at[0],\n              y: -pad.at[1],\n              outer_width: pad.size[0],\n              outer_height: pad.size[1],\n              hole_width: pad.drill?.width!,\n              hole_height: pad.drill?.height!,\n              // TODO kicad uses \"*.Cu\" and \"*.Mask\" to mean \"every\"\n              layers: [\"top\", \"bottom\"],\n              // port_hints: [pad.name],\n            }),\n          )\n        }\n      } else if (pad.pad_type === \"np_thru_hole\") {\n        cb.footprint.add(\"hole\", (hb) =>\n          hb.setProps({\n            x: pad.at[0],\n            y: -pad.at[1],\n            hole_diameter: pad.drill?.width!,\n          }),\n        )\n      } else if (pad.pad_type === \"connect\") {\n        // ???\n      }\n    }\n    for (const fp_line of fp_lines) {\n      if (fp_line.layer === \"F.Cu\") {\n        cb.footprint.add(\"pcbtrace\", (pb) =>\n          pb.setProps({\n            route: [\n              { x: fp_line.start[0], y: -fp_line.start[1] },\n              { x: fp_line.end[0], y: -fp_line.end[1] },\n            ],\n            layer: convertKicadLayerToTscircuitLayer(fp_line.layer),\n            thickness: fp_line.stroke.width,\n          }),\n        )\n      } else if (fp_line.layer === \"F.SilkS\") {\n        cb.footprint.add(\"silkscreenpath\", (lb) =>\n          lb.setProps({\n            route: [\n              { x: fp_line.start[0], y: -fp_line.start[1] },\n              { x: fp_line.end[0], y: -fp_line.end[1] },\n            ],\n            layer: \"top\",\n            pcbX: \"\",\n            pcbY: \"\"\n          }),\n        )\n      } else if (fp_line.layer === \"F.Fab\") {\n        cb.footprint.add(\"fabricationnotepath\", (lb) =>\n          lb.setProps({\n            route: [\n              { x: fp_line.start[0], y: -fp_line.start[1] },\n              { x: fp_line.end[0], y: -fp_line.end[1] },\n            ],\n            layer: \"top\", //convertKicadLayerToTscircuitLayer(fp_line.layer),\n          }),\n        )\n      } else {\n        debug(\"Unhandled layer for fp_line\", fp_line.layer)\n      }\n    }\n\n    for (const fp_arc of fp_arcs) {\n      const { stroke, layer } = fp_arc\n      const start = makePoint(fp_arc.start)\n      const mid = makePoint(fp_arc.mid)\n      const end = makePoint(fp_arc.end)\n      const arcLength = getArcLength(start, mid, end)\n\n      const arcPoints = generateArcPath(start, mid, end, Math.ceil(arcLength))\n\n      cb.footprint.add(\"silkscreenpath\", (sp) =>\n        sp.setProps({\n          route: arcPoints.map((p) => ({ x: p.x, y: -p.y })),\n          layer: convertKicadLayerToTscircuitLayer(layer)!,\n          pcbX: \"\",\n          pcbY: \"\"\n        }),\n      )\n    }\n\n    for (const fp_text of fp_texts) {\n      cb.footprint.add(\"silkscreentext\", (pb) =>\n        pb.setProps({\n          text: fp_text.text,\n          pcbX: fp_text.at[0],\n          pcbY: -fp_text.at[1],\n          layer: convertKicadLayerToTscircuitLayer(fp_text.layer)!,\n          fontSize: fp_text.effects?.font?.size[0],\n\n          // TODO\n          // rotation: fp_text.angle,\n        }),\n      )\n    }\n\n    // The reference property also becomes text\n    const refProp = properties.find((prop) => prop.key === \"Reference\")\n    const valProp = properties.find((prop) => prop.key === \"Value\")\n    const propFabTexts = [refProp, valProp].filter((p) => p && Boolean(p.val))\n    for (const propFab of propFabTexts) {\n      const at = propFab!.attributes.at\n      if (!at) continue\n      cb.footprint.add(\"fabricationnotetext\", (fnt) =>\n        fnt.setProps({\n          text: propFab!.val,\n          pcbX: at[0],\n          pcbY: -at[1],\n          layer: \"top\",\n          fontSize: 1.27,\n        }),\n      )\n    }\n  })\n\n  const soup = await pb.build()\n\n  return soup as any\n}\n","export interface Point {\n  x: number\n  y: number\n}\n\nexport function calculateCenter(start: Point, mid: Point, end: Point): Point {\n  const mid1 = { x: (start.x + mid.x) / 2, y: (start.y + mid.y) / 2 }\n  const mid2 = { x: (mid.x + end.x) / 2, y: (mid.y + end.y) / 2 }\n\n  const slope1 = -(start.x - mid.x) / (start.y - mid.y)\n  const slope2 = -(mid.x - end.x) / (mid.y - end.y)\n\n  const centerX =\n    (mid1.y - mid2.y + slope2 * mid2.x - slope1 * mid1.x) / (slope2 - slope1)\n  const centerY = mid1.y + slope1 * (centerX - mid1.x)\n\n  return { x: centerX, y: centerY }\n}\n\nfunction calculateRadius(center: Point, point: Point): number {\n  return Math.sqrt((center.x - point.x) ** 2 + (center.y - point.y) ** 2)\n}\n\nfunction calculateAngle(center: Point, point: Point): number {\n  return Math.atan2(point.y - center.y, point.x - center.x)\n}\n\nexport const getArcLength = (start: Point, mid: Point, end: Point) => {\n  const center = calculateCenter(start, mid, end)\n  const radius = calculateRadius(center, start)\n\n  const angleStart = calculateAngle(center, start)\n  const angleEnd = calculateAngle(center, end)\n\n  let angleDelta = angleEnd - angleStart\n  if (angleDelta < 0) {\n    angleDelta += 2 * Math.PI\n  }\n\n  return radius * angleDelta\n}\n\nexport function generateArcPath(\n  start: Point,\n  mid: Point,\n  end: Point,\n  numPoints: number,\n): Point[] {\n  const center = calculateCenter(start, mid, end)\n  const radius = calculateRadius(center, start)\n\n  const angleStart = calculateAngle(center, start)\n  const angleEnd = calculateAngle(center, end)\n\n  let angleDelta = angleEnd - angleStart\n  if (angleDelta < 0) {\n    angleDelta += 2 * Math.PI\n  }\n\n  const path: Point[] = []\n\n  for (let i = 0; i <= numPoints; i++) {\n    const angle = angleStart + (i / numPoints) * angleDelta\n    const x = center.x + radius * Math.cos(angle)\n    const y = center.y + radius * Math.sin(angle)\n    path.push({ x, y })\n  }\n\n  return path\n}\n","export const makePoint = (\n  p: { x: number; y: number } | [number, number],\n): { x: number; y: number } => {\n  if (Array.isArray(p)) {\n    return { x: p[0], y: p[1] }\n  }\n  return p\n}\n","import type { AnySoupElement } from \"@tscircuit/soup\"\nimport { parseKicadModToKicadJson } from \"./parse-kicad-mod-to-kicad-json\"\nimport { convertKicadJsonToTsCircuitSoup } from \"./convert-kicad-json-to-tscircuit-soup\"\n\nexport const parseKicadModToTscircuitSoup = async (\n  kicadMod: string\n): Promise<AnySoupElement[]> => {\n  const kicadJson = parseKicadModToKicadJson(kicadMod)\n\n  const soup = await convertKicadJsonToTsCircuitSoup(kicadJson)\n  return soup\n}\n"],"mappings":"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","names":["exports","module","exports","module","debug","exports","module","exports","module","useColors","debug","exports","module","Debug","parseSExpression","import_debug","point","debug","Debug","pb","fp_line"]}