@tscircuit/eval 0.0.789 → 0.0.790
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blob-url.js +1 -1
- package/dist/eval/index.js +10 -3
- package/dist/lib/index.js +10 -3
- package/dist/webworker/entrypoint.js +3 -3
- package/package.json +1 -1
|
@@ -667,7 +667,7 @@ ${spiceString}`)}catch(error2){debug10(`Failed to convert circuit JSON to SPICE:
|
|
|
667
667
|
${Object.keys(fsMapOrAllFilePaths).join(", ")}`);return resolvedFilePath};var stripComments=code=>{let out="",i3=0,inSingle=!1,inDouble=!1,inTemplate=!1;for(;i3<code.length;){let ch3=code[i3],next2=code[i3+1];if(!inDouble&&!inTemplate&&ch3==="'"&&code[i3-1]!=="\\"){inSingle=!inSingle,out+=ch3,i3++;continue}if(!inSingle&&!inTemplate&&ch3==='"'&&code[i3-1]!=="\\"){inDouble=!inDouble,out+=ch3,i3++;continue}if(!inSingle&&!inDouble&&ch3==="`"&&code[i3-1]!=="\\"){inTemplate=!inTemplate,out+=ch3,i3++;continue}if(!inSingle&&!inDouble&&!inTemplate){if(ch3==="/"&&next2==="/"){for(out+=" ",i3+=2;i3<code.length&&code[i3]!==`
|
|
668
668
|
`;)out+=" ",i3++;continue}if(ch3==="/"&&next2==="*"){for(out+=" ",i3+=2;i3<code.length;){if(code[i3]===`
|
|
669
669
|
`?out+=`
|
|
670
|
-
`:out+=" ",code[i3]==="*"&&code[i3+1]==="/"){out+=" ",i3+=2;break}i3++}continue}}out+=ch3,i3++}return out};var getImportsFromCode=code=>{let strippedCode=stripComments(code),importRegex=/(?:^|;)\s*import\s*(?:(?:[\w]+\s*,\s*)?(?:\*\s+as\s+[\w]+|\{[^}]+\}|[\w]+)\s*from\s*)?['"]([^'"]+)['"]/gm,imports=[],match2;for(;(match2=importRegex.exec(strippedCode))!==null;){let fullMatch=match2[0];/\bimport\s+type\b/.test(fullMatch)||imports.push(match2[1])}let reExportRegex=/^\s*export\s+(?:type\s+)?(?:\*\s+as\s+[\w$]+|\*|\{[^}]+\})\s+from\s*['"](.+?)['"]/gm,reExportMatch;for(;(reExportMatch=reExportRegex.exec(strippedCode))!==null;){let fullMatch=reExportMatch[0];/^\s*export\s+type\b/.test(fullMatch)||imports.push(reExportMatch[1])}let requireRegex=/\brequire\s*\(\s*['"]([^'"]+)['"]\s*\)/g,requireMatch=requireRegex.exec(strippedCode);for(;requireMatch!==null;)imports.push(requireMatch[1]),requireMatch=requireRegex.exec(strippedCode);return imports};var getTypeExportsFromCode=code=>{let strippedCode=stripComments(code),typeExports=[],exportTypeRegex=/export\s+type\s+(\w+)\s*(?:=|<)/g,match2;for(;(match2=exportTypeRegex.exec(strippedCode))!==null;)typeExports.push(match2[1]);let exportInterfaceRegex=/export\s+interface\s+(\w+)/g;for(;(match2=exportInterfaceRegex.exec(strippedCode))!==null;)typeExports.push(match2[1]);return typeExports};function createContext(modulePath,fsMap,basePath){return{fsMap,extensions:[".js",".jsx",".ts",".tsx",".json"],basePath,modulePath}}function findPackageJson(nodeModulesPath,ctx){let packageJsonPath=`${nodeModulesPath}/package.json`;if(!ctx.fsMap[packageJsonPath])return null;try{return JSON.parse(ctx.fsMap[packageJsonPath])}catch{return null}}function tryResolveWithExtensions(path,ctx){if(ctx.fsMap[path])return path;for(let ext of ctx.extensions){let pathWithExt=path.replace(/\.js$|\.jsx$/,"")+ext;if(ctx.fsMap[pathWithExt])return pathWithExt}return null}function resolveExportPath(nodeModulesPath,exportPath,ctx){let fullExportPath=`${nodeModulesPath}/${exportPath.replace(/^\.\//,"")}`;return tryResolveWithExtensions(fullExportPath,ctx)}function resolveConditionalExport(exportValue){if(typeof exportValue=="string")return exportValue;let conditions=["import","default","require","node","browser"];for(let condition of conditions)if(exportValue[condition]){let conditionValue=exportValue[condition];if(typeof conditionValue=="string")return conditionValue;let resolved=resolveConditionalExport(conditionValue);if(resolved)return resolved}return null}function resolvePackageExports(nodeModulesPath,packageJson,remainingPath,ctx){if(!packageJson.exports)return null;let defaultExport=packageJson.exports["."];if(remainingPath===""&&defaultExport){let exportPath=resolveConditionalExport(defaultExport);if(exportPath){let resolved=resolveExportPath(nodeModulesPath,exportPath,ctx);if(resolved)return resolved}}let subpathExport=remainingPath?packageJson.exports[`./${remainingPath}`]:null;if(subpathExport){let exportPath=resolveConditionalExport(subpathExport);if(exportPath){let resolved=resolveExportPath(nodeModulesPath,exportPath,ctx);if(resolved)return resolved}}let importExport=packageJson.exports.import;if(remainingPath===""&&importExport!==void 0){let exportPath=resolveConditionalExport(importExport);if(exportPath){let resolved=resolveExportPath(nodeModulesPath,exportPath,ctx);if(resolved)return resolved}}return null}function resolvePackageEntryPoint(nodeModulesPath,packageJson,ctx){let entryPoint=packageJson.module||packageJson.main||"index.js",fullPath=`${nodeModulesPath}/${entryPoint}`;return tryResolveWithExtensions(fullPath,ctx)}function resolveRemainingPath(nodeModulesPath,remainingPath,ctx){if(!remainingPath){for(let ext of ctx.extensions){let indexPath=`${nodeModulesPath}/index${ext}`;if(ctx.fsMap[indexPath])return indexPath}return null}let fullPath=`${nodeModulesPath}/${remainingPath}`,directMatch=tryResolveWithExtensions(fullPath,ctx);if(directMatch)return directMatch;for(let ext of ctx.extensions){let indexPath=`${fullPath}/index${ext}`;if(ctx.fsMap[indexPath])return indexPath}return null}function resolveNodeModuleInPath(searchPath,ctx){let moduleParts=ctx.modulePath.split("/"),scope=moduleParts[0].startsWith("@")?moduleParts.slice(0,2).join("/"):moduleParts[0],remainingPath=moduleParts.slice(scope.includes("/")?2:1).join("/"),nodeModulesPath=`${searchPath==="."?"":`${searchPath}/`}node_modules/${scope}`,packageJson=findPackageJson(nodeModulesPath,ctx);if(packageJson){let exportsResolution=resolvePackageExports(nodeModulesPath,packageJson,remainingPath,ctx);if(exportsResolution)return exportsResolution;let entryPointResolution=resolvePackageEntryPoint(nodeModulesPath,packageJson,ctx);if(entryPointResolution)return entryPointResolution}let remainingPathResolution=resolveRemainingPath(nodeModulesPath,remainingPath,ctx);if(remainingPathResolution)return remainingPathResolution;let parentPath=dirname(searchPath);return parentPath&&parentPath!==searchPath?resolveNodeModuleInPath(parentPath,ctx):null}function resolveNodeModule(modulePath,fsMap,basePath){let ctx=createContext(modulePath,fsMap,basePath);return resolveNodeModuleInPath(ctx.basePath,ctx)}function evalCompiledJs(compiledCode,preSuppliedImports,cwd){globalThis.__tscircuit_require=name=>{let resolvedFilePath=resolveFilePath(name,preSuppliedImports,cwd);!resolvedFilePath&&!name.startsWith(".")&&!name.startsWith("/")&&(resolvedFilePath=resolveNodeModule(name,preSuppliedImports,cwd||""));let hasResolvedFilePath=resolvedFilePath&&preSuppliedImports[resolvedFilePath];if(!preSuppliedImports[name]&&!hasResolvedFilePath)throw new Error(`Import "${name}" not found ${cwd?`in "${cwd}"`:""}`);let mod=preSuppliedImports[name]||preSuppliedImports[resolvedFilePath];if(mod.__esModule&&mod.default!==void 0){let modKeys=Object.keys(mod);if(modKeys.length===2&&modKeys.includes("__esModule")&&modKeys.includes("default"))return mod.default}if(mod.default&&typeof mod.default=="function"){let callableWrapper=(...args)=>mod.default(...args);return Object.assign(callableWrapper,mod),callableWrapper.__esModule=!0,callableWrapper}return new Proxy(mod,{get(target,prop){if(!(prop in target)){if(prop==="default")return target.default!==void 0?target.default:target.__esModule?void 0:typeof target=="function"||typeof target=="object"?target:void 0;if(prop==="__esModule")return!0;if(prop==="__typeOnlyExports__")return target.__typeOnlyExports__||[];let typeExports=target.__typeOnlyExports__||[],propName=String(prop);throw typeExports.includes(propName)?new Error(`"${propName}" is a type exported by "${name}" and cannot be imported as a value.
|
|
670
|
+
`:out+=" ",code[i3]==="*"&&code[i3+1]==="/"){out+=" ",i3+=2;break}i3++}continue}}out+=ch3,i3++}return out};var getImportsFromCode=code=>{let strippedCode=stripComments(code),importRegex=/(?:^|;)\s*import\s*(?:(?:[\w]+\s*,\s*)?(?:\*\s+as\s+[\w]+|\{[^}]+\}|[\w]+)\s*from\s*)?['"]([^'"]+)['"]/gm,imports=[],match2;for(;(match2=importRegex.exec(strippedCode))!==null;){let fullMatch=match2[0];/\bimport\s+type\b/.test(fullMatch)||imports.push(match2[1])}let reExportRegex=/^\s*export\s+(?:type\s+)?(?:\*\s+as\s+[\w$]+|\*|\{[^}]+\})\s+from\s*['"](.+?)['"]/gm,reExportMatch;for(;(reExportMatch=reExportRegex.exec(strippedCode))!==null;){let fullMatch=reExportMatch[0];/^\s*export\s+type\b/.test(fullMatch)||imports.push(reExportMatch[1])}let requireRegex=/\brequire\s*\(\s*['"]([^'"]+)['"]\s*\)/g,requireMatch=requireRegex.exec(strippedCode);for(;requireMatch!==null;)imports.push(requireMatch[1]),requireMatch=requireRegex.exec(strippedCode);return imports};var getTypeExportsFromCode=code=>{let strippedCode=stripComments(code),typeExports=[],exportTypeRegex=/export\s+type\s+(\w+)\s*(?:=|<)/g,match2;for(;(match2=exportTypeRegex.exec(strippedCode))!==null;)typeExports.push(match2[1]);let exportInterfaceRegex=/export\s+interface\s+(\w+)/g;for(;(match2=exportInterfaceRegex.exec(strippedCode))!==null;)typeExports.push(match2[1]);return typeExports};var normalizePackageEntrypoint=entrypoint=>entrypoint.replace(/^\.\//,"");function createContext(modulePath,fsMap,basePath){return{fsMap,extensions:[".js",".jsx",".ts",".tsx",".json"],basePath,modulePath}}function findPackageJson(nodeModulesPath,ctx){let packageJsonPath=`${nodeModulesPath}/package.json`;if(!ctx.fsMap[packageJsonPath])return null;try{return JSON.parse(ctx.fsMap[packageJsonPath])}catch{return null}}function tryResolveWithExtensions(path,ctx){if(ctx.fsMap[path])return path;for(let ext of ctx.extensions){let pathWithExt=path.replace(/\.js$|\.jsx$/,"")+ext;if(ctx.fsMap[pathWithExt])return pathWithExt}return null}function resolveExportPath(nodeModulesPath,exportPath,ctx){let fullExportPath=`${nodeModulesPath}/${exportPath.replace(/^\.\//,"")}`;return tryResolveWithExtensions(fullExportPath,ctx)}function resolveConditionalExport(exportValue){if(typeof exportValue=="string")return exportValue;let conditions=["import","default","require","node","browser"];for(let condition of conditions)if(exportValue[condition]){let conditionValue=exportValue[condition];if(typeof conditionValue=="string")return conditionValue;let resolved=resolveConditionalExport(conditionValue);if(resolved)return resolved}return null}function resolvePackageExports(nodeModulesPath,packageJson,remainingPath,ctx){if(!packageJson.exports)return null;let defaultExport=packageJson.exports["."];if(remainingPath===""&&defaultExport){let exportPath=resolveConditionalExport(defaultExport);if(exportPath){let resolved=resolveExportPath(nodeModulesPath,exportPath,ctx);if(resolved)return resolved}}let subpathExport=remainingPath?packageJson.exports[`./${remainingPath}`]:null;if(subpathExport){let exportPath=resolveConditionalExport(subpathExport);if(exportPath){let resolved=resolveExportPath(nodeModulesPath,exportPath,ctx);if(resolved)return resolved}}let importExport=packageJson.exports.import;if(remainingPath===""&&importExport!==void 0){let exportPath=resolveConditionalExport(importExport);if(exportPath){let resolved=resolveExportPath(nodeModulesPath,exportPath,ctx);if(resolved)return resolved}}return null}function resolvePackageEntryPoint(nodeModulesPath,packageJson,ctx){let entryPoint=normalizePackageEntrypoint(packageJson.module||packageJson.main||"index.js"),fullPath=`${nodeModulesPath}/${entryPoint}`;return tryResolveWithExtensions(fullPath,ctx)}function resolveRemainingPath(nodeModulesPath,remainingPath,ctx){if(!remainingPath){for(let ext of ctx.extensions){let indexPath=`${nodeModulesPath}/index${ext}`;if(ctx.fsMap[indexPath])return indexPath}return null}let fullPath=`${nodeModulesPath}/${remainingPath}`,directMatch=tryResolveWithExtensions(fullPath,ctx);if(directMatch)return directMatch;for(let ext of ctx.extensions){let indexPath=`${fullPath}/index${ext}`;if(ctx.fsMap[indexPath])return indexPath}return null}function resolveNodeModuleInPath(searchPath,ctx){let moduleParts=ctx.modulePath.split("/"),scope=moduleParts[0].startsWith("@")?moduleParts.slice(0,2).join("/"):moduleParts[0],remainingPath=moduleParts.slice(scope.includes("/")?2:1).join("/"),nodeModulesPath=`${searchPath==="."?"":`${searchPath}/`}node_modules/${scope}`,packageJson=findPackageJson(nodeModulesPath,ctx);if(packageJson){let exportsResolution=resolvePackageExports(nodeModulesPath,packageJson,remainingPath,ctx);if(exportsResolution)return exportsResolution;let entryPointResolution=resolvePackageEntryPoint(nodeModulesPath,packageJson,ctx);if(entryPointResolution)return entryPointResolution}let remainingPathResolution=resolveRemainingPath(nodeModulesPath,remainingPath,ctx);if(remainingPathResolution)return remainingPathResolution;let parentPath=dirname(searchPath);return parentPath&&parentPath!==searchPath?resolveNodeModuleInPath(parentPath,ctx):null}function resolveNodeModule(modulePath,fsMap,basePath){let ctx=createContext(modulePath,fsMap,basePath);return resolveNodeModuleInPath(ctx.basePath,ctx)}function evalCompiledJs(compiledCode,preSuppliedImports,cwd){globalThis.__tscircuit_require=name=>{let resolvedFilePath=resolveFilePath(name,preSuppliedImports,cwd);!resolvedFilePath&&!name.startsWith(".")&&!name.startsWith("/")&&(resolvedFilePath=resolveNodeModule(name,preSuppliedImports,cwd||""));let hasResolvedFilePath=resolvedFilePath&&preSuppliedImports[resolvedFilePath];if(!preSuppliedImports[name]&&!hasResolvedFilePath)throw new Error(`Import "${name}" not found ${cwd?`in "${cwd}"`:""}`);let mod=preSuppliedImports[name]||preSuppliedImports[resolvedFilePath];if(mod.__esModule&&mod.default!==void 0){let modKeys=Object.keys(mod);if(modKeys.length===2&&modKeys.includes("__esModule")&&modKeys.includes("default"))return mod.default}if(mod.default&&typeof mod.default=="function"){let callableWrapper=(...args)=>mod.default(...args);return Object.assign(callableWrapper,mod),callableWrapper.__esModule=!0,callableWrapper}return new Proxy(mod,{get(target,prop){if(!(prop in target)){if(prop==="default")return target.default!==void 0?target.default:target.__esModule?void 0:typeof target=="function"||typeof target=="object"?target:void 0;if(prop==="__esModule")return!0;if(prop==="__typeOnlyExports__")return target.__typeOnlyExports__||[];let typeExports=target.__typeOnlyExports__||[],propName=String(prop);throw typeExports.includes(propName)?new Error(`"${propName}" is a type exported by "${name}" and cannot be imported as a value.
|
|
671
671
|
Use "export type { ${propName} }" instead of "export { ${propName} }"`):new Error(`"${propName}" is not exported by "${name}".
|
|
672
672
|
If "${propName}" is a type, use "export type { ${propName} }" instead of "export { ${propName} }"`)}return target[prop]}})};let functionBody=`
|
|
673
673
|
var exports = {};
|
|
@@ -808,7 +808,7 @@ ${namesToRegister.map(({variableName,uniqueLocalName})=>` reactHotLoader.regist
|
|
|
808
808
|
leaveModule(module);
|
|
809
809
|
})();`}process(){return!1}};var RESERVED_WORDS=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield","enum","implements","interface","let","package","private","protected","public","static","await","false","null","true"]);function isIdentifier(name){if(name.length===0||!IS_IDENTIFIER_START[name.charCodeAt(0)])return!1;for(let i3=1;i3<name.length;i3++)if(!IS_IDENTIFIER_CHAR[name.charCodeAt(i3)])return!1;return!RESERVED_WORDS.has(name)}var TypeScriptTransformer=class extends Transformer{constructor(rootTransformer,tokens,isImportsTransformEnabled){super(),this.rootTransformer=rootTransformer,this.tokens=tokens,this.isImportsTransformEnabled=isImportsTransformEnabled}process(){return this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange()?!0:this.tokens.matches1(TokenType._public)||this.tokens.matches1(TokenType._protected)||this.tokens.matches1(TokenType._private)||this.tokens.matches1(TokenType._abstract)||this.tokens.matches1(TokenType._readonly)||this.tokens.matches1(TokenType._override)||this.tokens.matches1(TokenType.nonNullAssertion)?(this.tokens.removeInitialToken(),!0):this.tokens.matches1(TokenType._enum)||this.tokens.matches2(TokenType._const,TokenType._enum)?(this.processEnum(),!0):this.tokens.matches2(TokenType._export,TokenType._enum)||this.tokens.matches3(TokenType._export,TokenType._const,TokenType._enum)?(this.processEnum(!0),!0):!1}processEnum(isExport=!1){for(this.tokens.removeInitialToken();this.tokens.matches1(TokenType._const)||this.tokens.matches1(TokenType._enum);)this.tokens.removeToken();let enumName=this.tokens.identifierName();this.tokens.removeToken(),isExport&&!this.isImportsTransformEnabled&&this.tokens.appendCode("export "),this.tokens.appendCode(`var ${enumName}; (function (${enumName})`),this.tokens.copyExpectedToken(TokenType.braceL),this.processEnumBody(enumName),this.tokens.copyExpectedToken(TokenType.braceR),isExport&&this.isImportsTransformEnabled?this.tokens.appendCode(`)(${enumName} || (exports.${enumName} = ${enumName} = {}));`):this.tokens.appendCode(`)(${enumName} || (${enumName} = {}));`)}processEnumBody(enumName){let previousValueCode=null;for(;!this.tokens.matches1(TokenType.braceR);){let{nameStringCode,variableName}=this.extractEnumKeyInfo(this.tokens.currentToken());this.tokens.removeInitialToken(),this.tokens.matches3(TokenType.eq,TokenType.string,TokenType.comma)||this.tokens.matches3(TokenType.eq,TokenType.string,TokenType.braceR)?this.processStringLiteralEnumMember(enumName,nameStringCode,variableName):this.tokens.matches1(TokenType.eq)?this.processExplicitValueEnumMember(enumName,nameStringCode,variableName):this.processImplicitValueEnumMember(enumName,nameStringCode,variableName,previousValueCode),this.tokens.matches1(TokenType.comma)&&this.tokens.removeToken(),variableName!=null?previousValueCode=variableName:previousValueCode=`${enumName}[${nameStringCode}]`}}extractEnumKeyInfo(nameToken){if(nameToken.type===TokenType.name){let name=this.tokens.identifierNameForToken(nameToken);return{nameStringCode:`"${name}"`,variableName:isIdentifier(name)?name:null}}else if(nameToken.type===TokenType.string){let name=this.tokens.stringValueForToken(nameToken);return{nameStringCode:this.tokens.code.slice(nameToken.start,nameToken.end),variableName:isIdentifier(name)?name:null}}else throw new Error("Expected name or string at beginning of enum element.")}processStringLiteralEnumMember(enumName,nameStringCode,variableName){variableName!=null?(this.tokens.appendCode(`const ${variableName}`),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.appendCode(`; ${enumName}[${nameStringCode}] = ${variableName};`)):(this.tokens.appendCode(`${enumName}[${nameStringCode}]`),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.appendCode(";"))}processExplicitValueEnumMember(enumName,nameStringCode,variableName){let rhsEndIndex=this.tokens.currentToken().rhsEndIndex;if(rhsEndIndex==null)throw new Error("Expected rhsEndIndex on enum assign.");if(variableName!=null){for(this.tokens.appendCode(`const ${variableName}`),this.tokens.copyToken();this.tokens.currentIndex()<rhsEndIndex;)this.rootTransformer.processToken();this.tokens.appendCode(`; ${enumName}[${enumName}[${nameStringCode}] = ${variableName}] = ${nameStringCode};`)}else{for(this.tokens.appendCode(`${enumName}[${enumName}[${nameStringCode}]`),this.tokens.copyToken();this.tokens.currentIndex()<rhsEndIndex;)this.rootTransformer.processToken();this.tokens.appendCode(`] = ${nameStringCode};`)}}processImplicitValueEnumMember(enumName,nameStringCode,variableName,previousValueCode){let valueCode=previousValueCode!=null?`${previousValueCode} + 1`:"0";variableName!=null&&(this.tokens.appendCode(`const ${variableName} = ${valueCode}; `),valueCode=variableName),this.tokens.appendCode(`${enumName}[${enumName}[${nameStringCode}] = ${valueCode}] = ${nameStringCode};`)}};var RootTransformer=class _RootTransformer{__init(){this.transformers=[]}__init2(){this.generatedVariables=[]}constructor(sucraseContext,transforms,enableLegacyBabel5ModuleInterop,options){_RootTransformer.prototype.__init.call(this),_RootTransformer.prototype.__init2.call(this),this.nameManager=sucraseContext.nameManager,this.helperManager=sucraseContext.helperManager;let{tokenProcessor,importProcessor}=sucraseContext;this.tokens=tokenProcessor,this.isImportsTransformEnabled=transforms.includes("imports"),this.isReactHotLoaderTransformEnabled=transforms.includes("react-hot-loader"),this.disableESTransforms=!!options.disableESTransforms,options.disableESTransforms||(this.transformers.push(new OptionalChainingNullishTransformer(tokenProcessor,this.nameManager)),this.transformers.push(new NumericSeparatorTransformer(tokenProcessor)),this.transformers.push(new OptionalCatchBindingTransformer(tokenProcessor,this.nameManager))),transforms.includes("jsx")&&(options.jsxRuntime!=="preserve"&&this.transformers.push(new JSXTransformer(this,tokenProcessor,importProcessor,this.nameManager,options)),this.transformers.push(new ReactDisplayNameTransformer(this,tokenProcessor,importProcessor,options)));let reactHotLoaderTransformer=null;if(transforms.includes("react-hot-loader")){if(!options.filePath)throw new Error("filePath is required when using the react-hot-loader transform.");reactHotLoaderTransformer=new ReactHotLoaderTransformer(tokenProcessor,options.filePath),this.transformers.push(reactHotLoaderTransformer)}if(transforms.includes("imports")){if(importProcessor===null)throw new Error("Expected non-null importProcessor with imports transform enabled.");this.transformers.push(new CJSImportTransformer(this,tokenProcessor,importProcessor,this.nameManager,this.helperManager,reactHotLoaderTransformer,enableLegacyBabel5ModuleInterop,!!options.enableLegacyTypeScriptModuleInterop,transforms.includes("typescript"),transforms.includes("flow"),!!options.preserveDynamicImport,!!options.keepUnusedImports))}else this.transformers.push(new ESMImportTransformer(tokenProcessor,this.nameManager,this.helperManager,reactHotLoaderTransformer,transforms.includes("typescript"),transforms.includes("flow"),!!options.keepUnusedImports,options));transforms.includes("flow")&&this.transformers.push(new FlowTransformer(this,tokenProcessor,transforms.includes("imports"))),transforms.includes("typescript")&&this.transformers.push(new TypeScriptTransformer(this,tokenProcessor,transforms.includes("imports"))),transforms.includes("jest")&&this.transformers.push(new JestHoistTransformer(this,tokenProcessor,this.nameManager,importProcessor))}transform(){this.tokens.reset(),this.processBalancedCode();let prefix=this.isImportsTransformEnabled?'"use strict";':"";for(let transformer of this.transformers)prefix+=transformer.getPrefixCode();prefix+=this.helperManager.emitHelpers(),prefix+=this.generatedVariables.map(v4=>` var ${v4};`).join("");for(let transformer of this.transformers)prefix+=transformer.getHoistedCode();let suffix="";for(let transformer of this.transformers)suffix+=transformer.getSuffixCode();let result=this.tokens.finish(),{code}=result;if(code.startsWith("#!")){let newlineIndex=code.indexOf(`
|
|
810
810
|
`);return newlineIndex===-1&&(newlineIndex=code.length,code+=`
|
|
811
|
-
`),{code:code.slice(0,newlineIndex+1)+prefix+code.slice(newlineIndex+1)+suffix,mappings:this.shiftMappings(result.mappings,prefix.length)}}else return{code:prefix+code+suffix,mappings:this.shiftMappings(result.mappings,prefix.length)}}processBalancedCode(){let braceDepth=0,parenDepth=0;for(;!this.tokens.isAtEnd();){if(this.tokens.matches1(TokenType.braceL)||this.tokens.matches1(TokenType.dollarBraceL))braceDepth++;else if(this.tokens.matches1(TokenType.braceR)){if(braceDepth===0)return;braceDepth--}if(this.tokens.matches1(TokenType.parenL))parenDepth++;else if(this.tokens.matches1(TokenType.parenR)){if(parenDepth===0)return;parenDepth--}this.processToken()}}processToken(){if(this.tokens.matches1(TokenType._class)){this.processClass();return}for(let transformer of this.transformers)if(transformer.process())return;this.tokens.copyToken()}processNamedClass(){if(!this.tokens.matches2(TokenType._class,TokenType.name))throw new Error("Expected identifier for exported class name.");let name=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.processClass(),name}processClass(){let classInfo=getClassInfo(this,this.tokens,this.nameManager,this.disableESTransforms),needsCommaExpression=(classInfo.headerInfo.isExpression||!classInfo.headerInfo.className)&&classInfo.staticInitializerNames.length+classInfo.instanceInitializerNames.length>0,className=classInfo.headerInfo.className;needsCommaExpression&&(className=this.nameManager.claimFreeName("_class"),this.generatedVariables.push(className),this.tokens.appendCode(` (${className} =`));let contextId=this.tokens.currentToken().contextId;if(contextId==null)throw new Error("Expected class to have a context ID.");for(this.tokens.copyExpectedToken(TokenType._class);!this.tokens.matchesContextIdAndLabel(TokenType.braceL,contextId);)this.processToken();this.processClassBody(classInfo,className);let staticInitializerStatements=classInfo.staticInitializerNames.map(name=>`${className}.${name}()`);needsCommaExpression?this.tokens.appendCode(`, ${staticInitializerStatements.map(s3=>`${s3}, `).join("")}${className})`):classInfo.staticInitializerNames.length>0&&this.tokens.appendCode(` ${staticInitializerStatements.map(s3=>`${s3};`).join(" ")}`)}processClassBody(classInfo,className){let{headerInfo,constructorInsertPos,constructorInitializerStatements,fields,instanceInitializerNames,rangesToRemove}=classInfo,fieldIndex=0,rangeToRemoveIndex=0,classContextId=this.tokens.currentToken().contextId;if(classContextId==null)throw new Error("Expected non-null context ID on class.");this.tokens.copyExpectedToken(TokenType.braceL),this.isReactHotLoaderTransformEnabled&&this.tokens.appendCode("__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}");let needsConstructorInit=constructorInitializerStatements.length+instanceInitializerNames.length>0;if(constructorInsertPos===null&&needsConstructorInit){let constructorInitializersCode=this.makeConstructorInitCode(constructorInitializerStatements,instanceInitializerNames,className);if(headerInfo.hasSuperclass){let argsName=this.nameManager.claimFreeName("args");this.tokens.appendCode(`constructor(...${argsName}) { super(...${argsName}); ${constructorInitializersCode}; }`)}else this.tokens.appendCode(`constructor() { ${constructorInitializersCode}; }`)}for(;!this.tokens.matchesContextIdAndLabel(TokenType.braceR,classContextId);)if(fieldIndex<fields.length&&this.tokens.currentIndex()===fields[fieldIndex].start){let needsCloseBrace=!1;for(this.tokens.matches1(TokenType.bracketL)?this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this`):this.tokens.matches1(TokenType.string)||this.tokens.matches1(TokenType.num)?(this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this[`),needsCloseBrace=!0):this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this.`);this.tokens.currentIndex()<fields[fieldIndex].end;)needsCloseBrace&&this.tokens.currentIndex()===fields[fieldIndex].equalsIndex&&this.tokens.appendCode("]"),this.processToken();this.tokens.appendCode("}"),fieldIndex++}else if(rangeToRemoveIndex<rangesToRemove.length&&this.tokens.currentIndex()>=rangesToRemove[rangeToRemoveIndex].start){for(this.tokens.currentIndex()<rangesToRemove[rangeToRemoveIndex].end&&this.tokens.removeInitialToken();this.tokens.currentIndex()<rangesToRemove[rangeToRemoveIndex].end;)this.tokens.removeToken();rangeToRemoveIndex++}else this.tokens.currentIndex()===constructorInsertPos?(this.tokens.copyToken(),needsConstructorInit&&this.tokens.appendCode(`;${this.makeConstructorInitCode(constructorInitializerStatements,instanceInitializerNames,className)};`),this.processToken()):this.processToken();this.tokens.copyExpectedToken(TokenType.braceR)}makeConstructorInitCode(constructorInitializerStatements,instanceInitializerNames,className){return[...constructorInitializerStatements,...instanceInitializerNames.map(name=>`${className}.prototype.${name}.call(this)`)].join(";")}processPossibleArrowParamEnd(){if(this.tokens.matches2(TokenType.parenR,TokenType.colon)&&this.tokens.tokenAtRelativeIndex(1).isType){let nextNonTypeIndex=this.tokens.currentIndex()+1;for(;this.tokens.tokens[nextNonTypeIndex].isType;)nextNonTypeIndex++;if(this.tokens.matches1AtIndex(nextNonTypeIndex,TokenType.arrow)){for(this.tokens.removeInitialToken();this.tokens.currentIndex()<nextNonTypeIndex;)this.tokens.removeToken();return this.tokens.replaceTokenTrimmingLeftWhitespace(") =>"),!0}}return!1}processPossibleAsyncArrowWithTypeParams(){if(!this.tokens.matchesContextual(ContextualKeyword._async)&&!this.tokens.matches1(TokenType._async))return!1;let nextToken2=this.tokens.tokenAtRelativeIndex(1);if(nextToken2.type!==TokenType.lessThan||!nextToken2.isType)return!1;let nextNonTypeIndex=this.tokens.currentIndex()+1;for(;this.tokens.tokens[nextNonTypeIndex].isType;)nextNonTypeIndex++;if(this.tokens.matches1AtIndex(nextNonTypeIndex,TokenType.parenL)){for(this.tokens.replaceToken("async ("),this.tokens.removeInitialToken();this.tokens.currentIndex()<nextNonTypeIndex;)this.tokens.removeToken();return this.tokens.removeToken(),this.processBalancedCode(),this.processToken(),!0}return!1}processPossibleTypeRange(){if(this.tokens.currentToken().isType){for(this.tokens.removeInitialToken();this.tokens.currentToken().isType;)this.tokens.removeToken();return!0}return!1}shiftMappings(mappings,prefixLength){for(let i3=0;i3<mappings.length;i3++){let mapping=mappings[i3];mapping!==void 0&&(mappings[i3]=mapping+prefixLength)}return mappings}};var import_lines_and_columns=__toESM(require_build());function getTSImportedNames(tokens){let importedNames=new Set;for(let i3=0;i3<tokens.tokens.length;i3++)tokens.matches1AtIndex(i3,TokenType._import)&&!tokens.matches3AtIndex(i3,TokenType._import,TokenType.name,TokenType.eq)&&collectNamesForImport(tokens,i3,importedNames);return importedNames}function collectNamesForImport(tokens,index,importedNames){index++,!tokens.matches1AtIndex(index,TokenType.parenL)&&(tokens.matches1AtIndex(index,TokenType.name)&&(importedNames.add(tokens.identifierNameAtIndex(index)),index++,tokens.matches1AtIndex(index,TokenType.comma)&&index++),tokens.matches1AtIndex(index,TokenType.star)&&(index+=2,importedNames.add(tokens.identifierNameAtIndex(index)),index++),tokens.matches1AtIndex(index,TokenType.braceL)&&(index++,collectNamesForNamedImport(tokens,index,importedNames)))}function collectNamesForNamedImport(tokens,index,importedNames){for(;;){if(tokens.matches1AtIndex(index,TokenType.braceR))return;let specifierInfo=getImportExportSpecifierInfo(tokens,index);if(index=specifierInfo.endIndex,specifierInfo.isType||importedNames.add(specifierInfo.rightName),tokens.matches2AtIndex(index,TokenType.comma,TokenType.braceR))return;if(tokens.matches1AtIndex(index,TokenType.braceR))return;if(tokens.matches1AtIndex(index,TokenType.comma))index++;else throw new Error(`Unexpected token: ${JSON.stringify(tokens.tokens[index])}`)}}function transform5(code,options){validateOptions(options);try{let sucraseContext=getSucraseContext(code,options),transformerResult=new RootTransformer(sucraseContext,options.transforms,!!options.enableLegacyBabel5ModuleInterop,options).transform(),result={code:transformerResult.code};if(options.sourceMapOptions){if(!options.filePath)throw new Error("filePath must be specified when generating a source map.");result={...result,sourceMap:computeSourceMap(transformerResult,options.filePath,options.sourceMapOptions,code,sucraseContext.tokenProcessor.tokens)}}return result}catch(e5){throw options.filePath&&(e5.message=`Error transforming ${options.filePath}: ${e5.message}`),e5}}function getSucraseContext(code,options){let isJSXEnabled2=options.transforms.includes("jsx"),isTypeScriptEnabled2=options.transforms.includes("typescript"),isFlowEnabled2=options.transforms.includes("flow"),disableESTransforms=options.disableESTransforms===!0,file=parse4(code,isJSXEnabled2,isTypeScriptEnabled2,isFlowEnabled2),tokens=file.tokens,scopes=file.scopes,nameManager=new NameManager(code,tokens),helperManager=new HelperManager(nameManager),tokenProcessor=new TokenProcessor(code,tokens,isFlowEnabled2,disableESTransforms,helperManager),enableLegacyTypeScriptModuleInterop=!!options.enableLegacyTypeScriptModuleInterop,importProcessor=null;return options.transforms.includes("imports")?(importProcessor=new CJSImportProcessor(nameManager,tokenProcessor,enableLegacyTypeScriptModuleInterop,options,options.transforms.includes("typescript"),!!options.keepUnusedImports,helperManager),importProcessor.preprocessTokens(),identifyShadowedGlobals(tokenProcessor,scopes,importProcessor.getGlobalNames()),options.transforms.includes("typescript")&&!options.keepUnusedImports&&importProcessor.pruneTypeOnlyImports()):options.transforms.includes("typescript")&&!options.keepUnusedImports&&identifyShadowedGlobals(tokenProcessor,scopes,getTSImportedNames(tokenProcessor)),{tokenProcessor,scopes,nameManager,importProcessor,helperManager}}var TS_EXTENSIONS=new Set([".ts",".tsx",".mts",".cts"]),JSX_EXTENSIONS=new Set([".tsx",".jsx",".ts"]),TYPE_STAR_EXPORT_REGEX=/^\s*export\s+type\s+\*\s+(?:as\s+[\w$]+\s+)?from\s+['"][^'"]+['"]\s*;?\s*$/gim,stripTypeStarExports=code=>code.replace(TYPE_STAR_EXPORT_REGEX,""),stripQueryAndHash=filePath=>{let queryIndex=filePath.indexOf("?"),hashIndex=filePath.indexOf("#"),endIndex=filePath.length;return queryIndex!==-1&&hashIndex!==-1?endIndex=Math.min(queryIndex,hashIndex):queryIndex!==-1?endIndex=queryIndex:hashIndex!==-1&&(endIndex=hashIndex),filePath.slice(0,endIndex)},getExtension=filePath=>{let normalizedPath=stripQueryAndHash(filePath),lastDotIndex=normalizedPath.lastIndexOf(".");return lastDotIndex===-1||Math.max(normalizedPath.lastIndexOf("/"),normalizedPath.lastIndexOf("\\"))>lastDotIndex?"":normalizedPath.slice(lastDotIndex).toLowerCase()},getTransformsForFilePath=filePath=>{let extension=getExtension(filePath),transforms=["imports"];return TS_EXTENSIONS.has(extension)&&transforms.unshift("typescript"),JSX_EXTENSIONS.has(extension)&&transforms.push("jsx"),transforms},transformWithSucrase=(code,filePath)=>{let transforms=getTransformsForFilePath(filePath),sanitizedCode=stripTypeStarExports(code),{code:transformedCode}=transform5(sanitizedCode,{filePath,production:!0,transforms});return transformedCode};init_dist6();function tokenize3(input2){let tokens=[],i3=0,isWhitespace2=ch3=>/\s/.test(ch3),isSymbolInitial=ch3=>/[^\s()"]/u.test(ch3),peek=()=>i3<input2.length?input2[i3]:void 0,advance=()=>{if(i3>=input2.length)throw new SyntaxError("Unexpected end of input");return input2[i3++]};for(;i3<input2.length;){let ch3=peek();if(ch3===void 0)break;let current3=ch3;if(isWhitespace2(current3)){i3++;continue}if(current3===";"){for(;i3<input2.length&&input2[i3]!==`
|
|
811
|
+
`),{code:code.slice(0,newlineIndex+1)+prefix+code.slice(newlineIndex+1)+suffix,mappings:this.shiftMappings(result.mappings,prefix.length)}}else return{code:prefix+code+suffix,mappings:this.shiftMappings(result.mappings,prefix.length)}}processBalancedCode(){let braceDepth=0,parenDepth=0;for(;!this.tokens.isAtEnd();){if(this.tokens.matches1(TokenType.braceL)||this.tokens.matches1(TokenType.dollarBraceL))braceDepth++;else if(this.tokens.matches1(TokenType.braceR)){if(braceDepth===0)return;braceDepth--}if(this.tokens.matches1(TokenType.parenL))parenDepth++;else if(this.tokens.matches1(TokenType.parenR)){if(parenDepth===0)return;parenDepth--}this.processToken()}}processToken(){if(this.tokens.matches1(TokenType._class)){this.processClass();return}for(let transformer of this.transformers)if(transformer.process())return;this.tokens.copyToken()}processNamedClass(){if(!this.tokens.matches2(TokenType._class,TokenType.name))throw new Error("Expected identifier for exported class name.");let name=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.processClass(),name}processClass(){let classInfo=getClassInfo(this,this.tokens,this.nameManager,this.disableESTransforms),needsCommaExpression=(classInfo.headerInfo.isExpression||!classInfo.headerInfo.className)&&classInfo.staticInitializerNames.length+classInfo.instanceInitializerNames.length>0,className=classInfo.headerInfo.className;needsCommaExpression&&(className=this.nameManager.claimFreeName("_class"),this.generatedVariables.push(className),this.tokens.appendCode(` (${className} =`));let contextId=this.tokens.currentToken().contextId;if(contextId==null)throw new Error("Expected class to have a context ID.");for(this.tokens.copyExpectedToken(TokenType._class);!this.tokens.matchesContextIdAndLabel(TokenType.braceL,contextId);)this.processToken();this.processClassBody(classInfo,className);let staticInitializerStatements=classInfo.staticInitializerNames.map(name=>`${className}.${name}()`);needsCommaExpression?this.tokens.appendCode(`, ${staticInitializerStatements.map(s3=>`${s3}, `).join("")}${className})`):classInfo.staticInitializerNames.length>0&&this.tokens.appendCode(` ${staticInitializerStatements.map(s3=>`${s3};`).join(" ")}`)}processClassBody(classInfo,className){let{headerInfo,constructorInsertPos,constructorInitializerStatements,fields,instanceInitializerNames,rangesToRemove}=classInfo,fieldIndex=0,rangeToRemoveIndex=0,classContextId=this.tokens.currentToken().contextId;if(classContextId==null)throw new Error("Expected non-null context ID on class.");this.tokens.copyExpectedToken(TokenType.braceL),this.isReactHotLoaderTransformEnabled&&this.tokens.appendCode("__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}");let needsConstructorInit=constructorInitializerStatements.length+instanceInitializerNames.length>0;if(constructorInsertPos===null&&needsConstructorInit){let constructorInitializersCode=this.makeConstructorInitCode(constructorInitializerStatements,instanceInitializerNames,className);if(headerInfo.hasSuperclass){let argsName=this.nameManager.claimFreeName("args");this.tokens.appendCode(`constructor(...${argsName}) { super(...${argsName}); ${constructorInitializersCode}; }`)}else this.tokens.appendCode(`constructor() { ${constructorInitializersCode}; }`)}for(;!this.tokens.matchesContextIdAndLabel(TokenType.braceR,classContextId);)if(fieldIndex<fields.length&&this.tokens.currentIndex()===fields[fieldIndex].start){let needsCloseBrace=!1;for(this.tokens.matches1(TokenType.bracketL)?this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this`):this.tokens.matches1(TokenType.string)||this.tokens.matches1(TokenType.num)?(this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this[`),needsCloseBrace=!0):this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this.`);this.tokens.currentIndex()<fields[fieldIndex].end;)needsCloseBrace&&this.tokens.currentIndex()===fields[fieldIndex].equalsIndex&&this.tokens.appendCode("]"),this.processToken();this.tokens.appendCode("}"),fieldIndex++}else if(rangeToRemoveIndex<rangesToRemove.length&&this.tokens.currentIndex()>=rangesToRemove[rangeToRemoveIndex].start){for(this.tokens.currentIndex()<rangesToRemove[rangeToRemoveIndex].end&&this.tokens.removeInitialToken();this.tokens.currentIndex()<rangesToRemove[rangeToRemoveIndex].end;)this.tokens.removeToken();rangeToRemoveIndex++}else this.tokens.currentIndex()===constructorInsertPos?(this.tokens.copyToken(),needsConstructorInit&&this.tokens.appendCode(`;${this.makeConstructorInitCode(constructorInitializerStatements,instanceInitializerNames,className)};`),this.processToken()):this.processToken();this.tokens.copyExpectedToken(TokenType.braceR)}makeConstructorInitCode(constructorInitializerStatements,instanceInitializerNames,className){return[...constructorInitializerStatements,...instanceInitializerNames.map(name=>`${className}.prototype.${name}.call(this)`)].join(";")}processPossibleArrowParamEnd(){if(this.tokens.matches2(TokenType.parenR,TokenType.colon)&&this.tokens.tokenAtRelativeIndex(1).isType){let nextNonTypeIndex=this.tokens.currentIndex()+1;for(;this.tokens.tokens[nextNonTypeIndex].isType;)nextNonTypeIndex++;if(this.tokens.matches1AtIndex(nextNonTypeIndex,TokenType.arrow)){for(this.tokens.removeInitialToken();this.tokens.currentIndex()<nextNonTypeIndex;)this.tokens.removeToken();return this.tokens.replaceTokenTrimmingLeftWhitespace(") =>"),!0}}return!1}processPossibleAsyncArrowWithTypeParams(){if(!this.tokens.matchesContextual(ContextualKeyword._async)&&!this.tokens.matches1(TokenType._async))return!1;let nextToken2=this.tokens.tokenAtRelativeIndex(1);if(nextToken2.type!==TokenType.lessThan||!nextToken2.isType)return!1;let nextNonTypeIndex=this.tokens.currentIndex()+1;for(;this.tokens.tokens[nextNonTypeIndex].isType;)nextNonTypeIndex++;if(this.tokens.matches1AtIndex(nextNonTypeIndex,TokenType.parenL)){for(this.tokens.replaceToken("async ("),this.tokens.removeInitialToken();this.tokens.currentIndex()<nextNonTypeIndex;)this.tokens.removeToken();return this.tokens.removeToken(),this.processBalancedCode(),this.processToken(),!0}return!1}processPossibleTypeRange(){if(this.tokens.currentToken().isType){for(this.tokens.removeInitialToken();this.tokens.currentToken().isType;)this.tokens.removeToken();return!0}return!1}shiftMappings(mappings,prefixLength){for(let i3=0;i3<mappings.length;i3++){let mapping=mappings[i3];mapping!==void 0&&(mappings[i3]=mapping+prefixLength)}return mappings}};var import_lines_and_columns=__toESM(require_build());function getTSImportedNames(tokens){let importedNames=new Set;for(let i3=0;i3<tokens.tokens.length;i3++)tokens.matches1AtIndex(i3,TokenType._import)&&!tokens.matches3AtIndex(i3,TokenType._import,TokenType.name,TokenType.eq)&&collectNamesForImport(tokens,i3,importedNames);return importedNames}function collectNamesForImport(tokens,index,importedNames){index++,!tokens.matches1AtIndex(index,TokenType.parenL)&&(tokens.matches1AtIndex(index,TokenType.name)&&(importedNames.add(tokens.identifierNameAtIndex(index)),index++,tokens.matches1AtIndex(index,TokenType.comma)&&index++),tokens.matches1AtIndex(index,TokenType.star)&&(index+=2,importedNames.add(tokens.identifierNameAtIndex(index)),index++),tokens.matches1AtIndex(index,TokenType.braceL)&&(index++,collectNamesForNamedImport(tokens,index,importedNames)))}function collectNamesForNamedImport(tokens,index,importedNames){for(;;){if(tokens.matches1AtIndex(index,TokenType.braceR))return;let specifierInfo=getImportExportSpecifierInfo(tokens,index);if(index=specifierInfo.endIndex,specifierInfo.isType||importedNames.add(specifierInfo.rightName),tokens.matches2AtIndex(index,TokenType.comma,TokenType.braceR))return;if(tokens.matches1AtIndex(index,TokenType.braceR))return;if(tokens.matches1AtIndex(index,TokenType.comma))index++;else throw new Error(`Unexpected token: ${JSON.stringify(tokens.tokens[index])}`)}}function transform5(code,options){validateOptions(options);try{let sucraseContext=getSucraseContext(code,options),transformerResult=new RootTransformer(sucraseContext,options.transforms,!!options.enableLegacyBabel5ModuleInterop,options).transform(),result={code:transformerResult.code};if(options.sourceMapOptions){if(!options.filePath)throw new Error("filePath must be specified when generating a source map.");result={...result,sourceMap:computeSourceMap(transformerResult,options.filePath,options.sourceMapOptions,code,sucraseContext.tokenProcessor.tokens)}}return result}catch(e5){throw options.filePath&&(e5.message=`Error transforming ${options.filePath}: ${e5.message}`),e5}}function getSucraseContext(code,options){let isJSXEnabled2=options.transforms.includes("jsx"),isTypeScriptEnabled2=options.transforms.includes("typescript"),isFlowEnabled2=options.transforms.includes("flow"),disableESTransforms=options.disableESTransforms===!0,file=parse4(code,isJSXEnabled2,isTypeScriptEnabled2,isFlowEnabled2),tokens=file.tokens,scopes=file.scopes,nameManager=new NameManager(code,tokens),helperManager=new HelperManager(nameManager),tokenProcessor=new TokenProcessor(code,tokens,isFlowEnabled2,disableESTransforms,helperManager),enableLegacyTypeScriptModuleInterop=!!options.enableLegacyTypeScriptModuleInterop,importProcessor=null;return options.transforms.includes("imports")?(importProcessor=new CJSImportProcessor(nameManager,tokenProcessor,enableLegacyTypeScriptModuleInterop,options,options.transforms.includes("typescript"),!!options.keepUnusedImports,helperManager),importProcessor.preprocessTokens(),identifyShadowedGlobals(tokenProcessor,scopes,importProcessor.getGlobalNames()),options.transforms.includes("typescript")&&!options.keepUnusedImports&&importProcessor.pruneTypeOnlyImports()):options.transforms.includes("typescript")&&!options.keepUnusedImports&&identifyShadowedGlobals(tokenProcessor,scopes,getTSImportedNames(tokenProcessor)),{tokenProcessor,scopes,nameManager,importProcessor,helperManager}}var TS_EXTENSIONS=new Set([".ts",".tsx",".mts",".cts"]),JSX_EXTENSIONS=new Set([".tsx",".jsx",".ts"]),TYPE_STAR_EXPORT_REGEX=/^\s*export\s+type\s+\*\s+(?:as\s+[\w$]+\s+)?from\s+['"][^'"]+['"]\s*;?\s*$/gim,stripTypeStarExports=code=>code.replace(TYPE_STAR_EXPORT_REGEX,""),stripQueryAndHash=filePath=>{let queryIndex=filePath.indexOf("?"),hashIndex=filePath.indexOf("#"),endIndex=filePath.length;return queryIndex!==-1&&hashIndex!==-1?endIndex=Math.min(queryIndex,hashIndex):queryIndex!==-1?endIndex=queryIndex:hashIndex!==-1&&(endIndex=hashIndex),filePath.slice(0,endIndex)},getExtension=filePath=>{let normalizedPath=stripQueryAndHash(filePath),lastDotIndex=normalizedPath.lastIndexOf(".");return lastDotIndex===-1||Math.max(normalizedPath.lastIndexOf("/"),normalizedPath.lastIndexOf("\\"))>lastDotIndex?"":normalizedPath.slice(lastDotIndex).toLowerCase()},getTransformsForFilePath=filePath=>{let extension=getExtension(filePath),transforms=["imports"];return TS_EXTENSIONS.has(extension)&&transforms.unshift("typescript"),JSX_EXTENSIONS.has(extension)&&transforms.push("jsx"),transforms},transformWithSucrase=(code,filePath)=>{let transforms=getTransformsForFilePath(filePath),sanitizedCode=stripTypeStarExports(code),{code:transformedCode}=transform5(sanitizedCode,{filePath,disableESTransforms:!0,production:!0,transforms});return transformedCode};init_dist6();function tokenize3(input2){let tokens=[],i3=0,isWhitespace2=ch3=>/\s/.test(ch3),isSymbolInitial=ch3=>/[^\s()"]/u.test(ch3),peek=()=>i3<input2.length?input2[i3]:void 0,advance=()=>{if(i3>=input2.length)throw new SyntaxError("Unexpected end of input");return input2[i3++]};for(;i3<input2.length;){let ch3=peek();if(ch3===void 0)break;let current3=ch3;if(isWhitespace2(current3)){i3++;continue}if(current3===";"){for(;i3<input2.length&&input2[i3]!==`
|
|
812
812
|
`;)i3++;continue}if(current3==="("){tokens.push({type:"lparen"}),i3++;continue}if(current3===")"){tokens.push({type:"rparen"}),i3++;continue}if(current3==='"'){i3++;let out="";for(;i3<input2.length;){let c4=advance();if(c4==='"')break;if(c4==="\\"){if(i3>=input2.length)throw new SyntaxError("Unterminated escape in string");let e5=advance();switch(e5){case"n":out+=`
|
|
813
813
|
`;break;case"r":out+="\r";break;case"t":out+=" ";break;case'"':out+='"';break;case"\\":out+="\\";break;default:out+=e5;break}}else out+=c4}if(input2[i3-1]!=='"')throw new SyntaxError("Unterminated string literal");tokens.push({type:"string",value:out});continue}if(isSymbolInitial(current3)||current3==="-"||current3==="+"||current3==="."){let start=i3;for(;i3<input2.length;){let nextChar=input2[i3];if(isWhitespace2(nextChar)||nextChar==="("||nextChar===")"||nextChar==='"')break;i3++}let raw=input2.slice(start,i3);if(raw==="#t"){tokens.push({type:"boolean",value:!0});continue}if(raw==="#f"){tokens.push({type:"boolean",value:!1});continue}if(raw==="nil"){tokens.push({type:"nil"});continue}/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/u.test(raw)?tokens.push({type:"number",value:Number(raw)}):tokens.push({type:"symbol",value:raw});continue}throw new SyntaxError(`Unexpected character: ${JSON.stringify(ch3)} at ${i3}`)}return tokens}function parseToPrimitiveSExpr(input2){let toks=tokenize3(input2),idx=0,peekToken=()=>idx<toks.length?toks[idx]:void 0,advanceToken=()=>{if(idx>=toks.length)throw new SyntaxError("Unexpected end of input");return toks[idx++]};function readForm(){let t52=advanceToken();switch(t52.type){case"lparen":{let list=[];for(;;){let next2=peekToken();if(!next2)throw new SyntaxError("Unmatched '('");if(next2.type==="rparen")break;list.push(readForm())}return advanceToken(),list}case"rparen":throw new SyntaxError("Unmatched ')'");case"number":return t52.value;case"string":return t52.value;case"boolean":return t52.value;case"nil":return null;case"symbol":return t52.value}}let forms=[];for(;peekToken();)forms.push(readForm());return forms}function printSExpr(x4){if(x4===null)return"nil";if(typeof x4=="boolean")return x4?"#t":"#f";if(typeof x4=="number")return Number.isFinite(x4)?String(x4):"nan";if(typeof x4=="string")return/^[^\s()"]+$/u.test(x4)&&x4!=="nil"&&x4!=="#t"&&x4!=="#f"?x4:`"${x4.replace(/["\\\n\r\t]/g,m4=>m4==='"'?'\\"':m4==="\\"?"\\\\":m4===`
|
|
814
814
|
`?"\\n":m4==="\r"?"\\r":"\\t")}"`;if(Array.isArray(x4))return`(${x4.map(printSExpr).join(" ")})`;throw new Error(`Unsupported S-expression value: ${JSON.stringify(x4)}`)}var DEFAULT_PARENT_TOKEN="__default__",_a6,SxClass=(_a6=class{constructor(){__publicField(this,"isSxClass",!0)}getChildren(){return Object.keys(this).filter(k4=>k4.startsWith("_sx")).map(k4=>this[k4]).filter(v4=>v4&&typeof v4=="object"&&v4.isSxClass)}getStringIndented(){return this.getString().split(`
|
|
@@ -868,7 +868,7 @@ ${namesToRegister.map(({variableName,uniqueLocalName})=>` reactHotLoader.regist
|
|
|
868
868
|
`)}},__publicField(_a347,"token","layer"),__publicField(_a347,"parentToken","stackup"),_a347);SxClass.register(StackupLayer);var _a348,Stackup=(_a348=class extends SxClass{constructor(opts={}){super();__publicField(this,"token","stackup");__publicField(this,"_layers",[]);__publicField(this,"_sxCopperFinish");__publicField(this,"_sxDielectricConstraints");__publicField(this,"_sxEdgeConnector");__publicField(this,"_sxCastellatedPads");__publicField(this,"_sxEdgePlating");this.layers=opts.layers??[],this._sxCopperFinish=opts.copperFinish,this._sxDielectricConstraints=opts.dielectricConstraints,this._sxEdgeConnector=opts.edgeConnector,this._sxCastellatedPads=opts.castellatedPads,this._sxEdgePlating=opts.edgePlating}static fromSexprPrimitives(primitiveSexprs){let{propertyMap,arrayPropertyMap}=SxClass.parsePrimitivesToClassProperties(primitiveSexprs,this.token);return new _a348({layers:arrayPropertyMap.layer??[],copperFinish:propertyMap.copper_finish,dielectricConstraints:propertyMap.dielectric_constraints,edgeConnector:propertyMap.edge_connector,castellatedPads:propertyMap.castellated_pads,edgePlating:propertyMap.edge_plating})}get layers(){return[...this._layers]}set layers(layers){this._layers=layers.map(layer=>{if(!(layer instanceof StackupLayer))throw new Error("Stackup layers must be StackupLayer instances");return layer})}get copperFinish(){return this._sxCopperFinish?.value}set copperFinish(value){this._sxCopperFinish=value?new StackupCopperFinish(value):void 0}get dielectricConstraints(){return this._sxDielectricConstraints?.value}set dielectricConstraints(value){this._sxDielectricConstraints=value?new StackupDielectricConstraints(value):void 0}get edgeConnector(){return this._sxEdgeConnector?.value}set edgeConnector(value){this._sxEdgeConnector=value?new StackupEdgeConnector(value):void 0}get castellatedPads(){return this._sxCastellatedPads?.value}set castellatedPads(value){this._sxCastellatedPads=value?new StackupCastellatedPads(value):void 0}get edgePlating(){return this._sxEdgePlating?.value}set edgePlating(value){this._sxEdgePlating=value?new StackupEdgePlating(value):void 0}getChildren(){let children=[...this._layers],optionalChildren=[this._sxCopperFinish,this._sxDielectricConstraints,this._sxEdgeConnector,this._sxCastellatedPads,this._sxEdgePlating];for(let child of optionalChildren)child&&children.push(child);return children}},__publicField(_a348,"token","stackup"),__publicField(_a348,"parentToken","setup"),_a348);SxClass.register(Stackup);var TOKEN_TO_KEY2={stackup:"stackup",pcbplotparams:"pcbPlotParams",pad_to_mask_clearance:"padToMaskClearance",solder_mask_min_width:"solderMaskMinWidth",pad_to_paste_clearance:"padToPasteClearance",pad_to_paste_clearance_ratio:"padToPasteClearanceRatio",last_trace_width:"lastTraceWidth",trace_clearance:"traceClearance",zone_clearance:"zoneClearance",zone_45_only:"zone45Only",trace_min:"traceMin",segment_width:"segmentWidth",edge_width:"edgeWidth",via_size:"viaSize",via_drill:"viaDrill",via_min_size:"viaMinSize",via_min_drill:"viaMinDrill",uvias_allowed:"uviasAllowed",uvia_size:"uviaSize",uvia_drill:"uviaDrill",uvia_min_size:"uviaMinSize",uvia_min_drill:"uviaMinDrill",pcb_text_width:"pcbTextWidth",pcb_text_size:"pcbTextSize",mod_edge_width:"modEdgeWidth",mod_text_size:"modTextSize",mod_text_width:"modTextWidth",pad_size:"padSize",pad_drill:"padDrill",allow_soldermask_bridges_in_footprints:"allowSoldermaskBridgesInFootprints",tenting:"tenting",aux_axis_origin:"auxAxisOrigin",grid_origin:"gridOrigin",visible_elements:"visibleElements",pad_to_paste_clearance_values:"padToPasteClearanceValues",trace_width:"traceWidth"},SETUP_CHILD_ORDER=["stackup","padToMaskClearance","solderMaskMinWidth","padToPasteClearance","padToPasteClearanceRatio","lastTraceWidth","traceClearance","zoneClearance","zone45Only","traceMin","segmentWidth","edgeWidth","viaSize","viaDrill","viaMinSize","viaMinDrill","uviaSize","uviaDrill","uviasAllowed","uviaMinSize","uviaMinDrill","pcbTextWidth","pcbTextSize","modEdgeWidth","modTextSize","modTextWidth","padSize","padDrill","allowSoldermaskBridgesInFootprints","tenting","auxAxisOrigin","gridOrigin","visibleElements","padToPasteClearanceValues","traceWidth","pcbPlotParams"],_a349,Setup=(_a349=class extends SxClass{constructor(){super(...arguments);__publicField(this,"token","setup");__publicField(this,"_properties",{})}static fromSexprPrimitives(primitiveSexprs){let setup=new _a349,{propertyMap}=SxClass.parsePrimitivesToClassProperties(primitiveSexprs,this.token);for(let[token,instance]of Object.entries(propertyMap)){let key=TOKEN_TO_KEY2[token];if(!key)throw new Error(`Unsupported setup property token: ${token}`);setup._properties[key]=instance}return setup}getChildren(){let children=[];for(let key of SETUP_CHILD_ORDER){let child=this._properties[key];child&&children.push(child)}return children}setProperty(key,instance){if(instance){this._properties[key]=instance;return}delete this._properties[key]}setNumberProperty(key,value,ClassRef){if(value===void 0){delete this._properties[key];return}this._properties[key]=new ClassRef(value)}getPropertyInstance(key,ClassRef){let value=this._properties[key];return value instanceof ClassRef?value:void 0}get stackup(){return this.getPropertyInstance("stackup",Stackup)}set stackup(value){if(value!==void 0&&!(value instanceof Stackup))throw new Error("stackup must be a Stackup instance");this.setProperty("stackup",value)}get pcbPlotParams(){return this.getPropertyInstance("pcbPlotParams",PcbPlotParams)}set pcbPlotParams(value){if(value!==void 0&&!(value instanceof PcbPlotParams))throw new Error("pcbPlotParams must be a PcbPlotParams instance");this.setProperty("pcbPlotParams",value)}get padToMaskClearance(){return this.getPropertyInstance("padToMaskClearance",SetupPadToMaskClearance)?.value}set padToMaskClearance(value){this.setNumberProperty("padToMaskClearance",value,SetupPadToMaskClearance)}get solderMaskMinWidth(){return this.getPropertyInstance("solderMaskMinWidth",SetupSolderMaskMinWidth)?.value}set solderMaskMinWidth(value){this.setNumberProperty("solderMaskMinWidth",value,SetupSolderMaskMinWidth)}get padToPasteClearance(){return this.getPropertyInstance("padToPasteClearance",SetupPadToPasteClearance)?.value}set padToPasteClearance(value){this.setNumberProperty("padToPasteClearance",value,SetupPadToPasteClearance)}get padToPasteClearanceRatio(){return this.getPropertyInstance("padToPasteClearanceRatio",SetupPadToPasteClearanceRatio)?.value}set padToPasteClearanceRatio(value){this.setNumberProperty("padToPasteClearanceRatio",value,SetupPadToPasteClearanceRatio)}get lastTraceWidth(){return this.getPropertyInstance("lastTraceWidth",SetupLastTraceWidth)?.value}set lastTraceWidth(value){this.setNumberProperty("lastTraceWidth",value,SetupLastTraceWidth)}get traceClearance(){return this.getPropertyInstance("traceClearance",SetupTraceClearance)?.value}set traceClearance(value){this.setNumberProperty("traceClearance",value,SetupTraceClearance)}get zoneClearance(){return this.getPropertyInstance("zoneClearance",SetupZoneClearance)?.value}set zoneClearance(value){this.setNumberProperty("zoneClearance",value,SetupZoneClearance)}get zone45Only(){return this.getPropertyInstance("zone45Only",SetupZone45Only)?.value}set zone45Only(value){this.setProperty("zone45Only",value===void 0?void 0:new SetupZone45Only(value))}get traceMin(){return this.getPropertyInstance("traceMin",SetupTraceMin)?.value}set traceMin(value){this.setNumberProperty("traceMin",value,SetupTraceMin)}get segmentWidth(){return this.getPropertyInstance("segmentWidth",SetupSegmentWidth)?.value}set segmentWidth(value){this.setNumberProperty("segmentWidth",value,SetupSegmentWidth)}get edgeWidth(){return this.getPropertyInstance("edgeWidth",SetupEdgeWidth)?.value}set edgeWidth(value){this.setNumberProperty("edgeWidth",value,SetupEdgeWidth)}get viaSize(){return this.getPropertyInstance("viaSize",SetupViaSize)?.value}set viaSize(value){this.setNumberProperty("viaSize",value,SetupViaSize)}get viaDrill(){return this.getPropertyInstance("viaDrill",SetupViaDrill)?.value}set viaDrill(value){this.setNumberProperty("viaDrill",value,SetupViaDrill)}get viaMinSize(){return this.getPropertyInstance("viaMinSize",SetupViaMinSize)?.value}set viaMinSize(value){this.setNumberProperty("viaMinSize",value,SetupViaMinSize)}get viaMinDrill(){return this.getPropertyInstance("viaMinDrill",SetupViaMinDrill)?.value}set viaMinDrill(value){this.setNumberProperty("viaMinDrill",value,SetupViaMinDrill)}get uviasAllowed(){return this.getPropertyInstance("uviasAllowed",SetupUviasAllowed)?.value}set uviasAllowed(value){this.setProperty("uviasAllowed",value===void 0?void 0:new SetupUviasAllowed(value))}get uviaSize(){return this.getPropertyInstance("uviaSize",SetupUviaSize)?.value}set uviaSize(value){this.setNumberProperty("uviaSize",value,SetupUviaSize)}get uviaDrill(){return this.getPropertyInstance("uviaDrill",SetupUviaDrill)?.value}set uviaDrill(value){this.setNumberProperty("uviaDrill",value,SetupUviaDrill)}get uviaMinSize(){return this.getPropertyInstance("uviaMinSize",SetupUviaMinSize)?.value}set uviaMinSize(value){this.setNumberProperty("uviaMinSize",value,SetupUviaMinSize)}get uviaMinDrill(){return this.getPropertyInstance("uviaMinDrill",SetupUviaMinDrill)?.value}set uviaMinDrill(value){this.setNumberProperty("uviaMinDrill",value,SetupUviaMinDrill)}get pcbTextWidth(){return this.getPropertyInstance("pcbTextWidth",SetupPcbTextWidth)?.value}set pcbTextWidth(value){this.setNumberProperty("pcbTextWidth",value,SetupPcbTextWidth)}get pcbTextSize(){return this.getPropertyInstance("pcbTextSize",SetupPcbTextSize)?.values}set pcbTextSize(values){if(values===void 0){delete this._properties.pcbTextSize;return}this.setProperty("pcbTextSize",new SetupPcbTextSize(values))}get modEdgeWidth(){return this.getPropertyInstance("modEdgeWidth",SetupModEdgeWidth)?.value}set modEdgeWidth(value){this.setNumberProperty("modEdgeWidth",value,SetupModEdgeWidth)}get modTextSize(){return this.getPropertyInstance("modTextSize",SetupModTextSize)?.values}set modTextSize(values){if(values===void 0){delete this._properties.modTextSize;return}this.setProperty("modTextSize",new SetupModTextSize(values))}get modTextWidth(){return this.getPropertyInstance("modTextWidth",SetupModTextWidth)?.value}set modTextWidth(value){this.setNumberProperty("modTextWidth",value,SetupModTextWidth)}get padSize(){return this.getPropertyInstance("padSize",SetupPadSize)?.values}set padSize(values){if(values===void 0){delete this._properties.padSize;return}this.setProperty("padSize",new SetupPadSize(values))}get padDrill(){return this.getPropertyInstance("padDrill",SetupPadDrill)?.value}set padDrill(value){this.setNumberProperty("padDrill",value,SetupPadDrill)}get allowSoldermaskBridgesInFootprints(){return this.getPropertyInstance("allowSoldermaskBridgesInFootprints",SetupAllowSoldermaskBridgesInFootprints)?.value}set allowSoldermaskBridgesInFootprints(value){this.setProperty("allowSoldermaskBridgesInFootprints",value===void 0?void 0:new SetupAllowSoldermaskBridgesInFootprints(value))}get tenting(){return this.getPropertyInstance("tenting",SetupTenting)?.sides}set tenting(sides){if(sides===void 0){delete this._properties.tenting;return}this.setProperty("tenting",new SetupTenting(sides))}get auxAxisOrigin(){let origin=this.getPropertyInstance("auxAxisOrigin",SetupAuxAxisOrigin);if(origin)return{x:origin.x,y:origin.y}}set auxAxisOrigin(origin){if(!origin){delete this._properties.auxAxisOrigin;return}this.setProperty("auxAxisOrigin",new SetupAuxAxisOrigin(origin.x,origin.y))}get gridOrigin(){let origin=this.getPropertyInstance("gridOrigin",SetupGridOrigin);if(origin)return{x:origin.x,y:origin.y}}set gridOrigin(origin){if(!origin){delete this._properties.gridOrigin;return}this.setProperty("gridOrigin",new SetupGridOrigin(origin.x,origin.y))}get visibleElements(){return this.getPropertyInstance("visibleElements",SetupVisibleElements)?.value}set visibleElements(value){this.setProperty("visibleElements",value===void 0?void 0:new SetupVisibleElements(value))}get padToPasteClearanceValues(){return this.getPropertyInstance("padToPasteClearanceValues",SetupPadToPasteClearanceValues)?.values}set padToPasteClearanceValues(values){if(values===void 0){delete this._properties.padToPasteClearanceValues;return}this.setProperty("padToPasteClearanceValues",new SetupPadToPasteClearanceValues(values))}get traceWidth(){return this.getPropertyInstance("traceWidth",SetupTraceWidth)?.values}set traceWidth(values){if(values===void 0){delete this._properties.traceWidth;return}this.setProperty("traceWidth",new SetupTraceWidth(values))}},__publicField(_a349,"token","setup"),_a349);SxClass.register(Setup);var _a350,PcbGeneralThickness=(_a350=class extends SxPrimitiveNumber{constructor(){super(...arguments);__publicField(this,"token","thickness")}},__publicField(_a350,"token","thickness"),__publicField(_a350,"parentToken","general"),_a350);SxClass.register(PcbGeneralThickness);var _a351,PcbGeneralLegacyTeardrops=(_a351=class extends SxClass{constructor(enabled){super();__publicField(this,"token","legacy_teardrops");__publicField(this,"_enabled");this._enabled=enabled}static fromSexprPrimitives(primitiveSexprs){let value=toStringValue(primitiveSexprs[0]);if(value===void 0)throw new Error("legacy_teardrops expects a string value");let enabled=/^(yes|true)$/iu.test(value);return new _a351(enabled)}get enabled(){return this._enabled}set enabled(value){this._enabled=value}getChildren(){return[]}getString(){return`(legacy_teardrops ${this._enabled?"yes":"no"})`}},__publicField(_a351,"token","legacy_teardrops"),__publicField(_a351,"parentToken","general"),_a351);SxClass.register(PcbGeneralLegacyTeardrops);var SINGLE_TOKENS3=new Set(["thickness","legacy_teardrops"]),_a352,PcbGeneral=(_a352=class extends SxClass{constructor(){super(...arguments);__publicField(this,"token","general");__publicField(this,"_sxThickness");__publicField(this,"_sxLegacyTeardrops")}static fromSexprPrimitives(primitiveSexprs){let general=new _a352,{propertyMap,arrayPropertyMap}=SxClass.parsePrimitivesToClassProperties(primitiveSexprs,this.token);for(let token of Object.keys(propertyMap))if(!SINGLE_TOKENS3.has(token))throw new Error(`general encountered unsupported child token "${token}"`);for(let[token,entries]of Object.entries(arrayPropertyMap)){if(!SINGLE_TOKENS3.has(token))throw new Error(`general encountered unsupported child token "${token}"`);if(entries.length>1)throw new Error(`general encountered repeated child token "${token}"`)}return general._sxThickness=arrayPropertyMap.thickness?.[0]??propertyMap.thickness,general._sxLegacyTeardrops=arrayPropertyMap.legacy_teardrops?.[0]??propertyMap.legacy_teardrops,general}get thickness(){return this._sxThickness?.value}set thickness(value){this._sxThickness=value===void 0?void 0:new PcbGeneralThickness(value)}get legacyTeardrops(){return this._sxLegacyTeardrops?.enabled}set legacyTeardrops(value){if(value===void 0){this._sxLegacyTeardrops=void 0;return}this._sxLegacyTeardrops=new PcbGeneralLegacyTeardrops(value)}getChildren(){let children=[];return this._sxThickness&&children.push(this._sxThickness),this._sxLegacyTeardrops&&children.push(this._sxLegacyTeardrops),children}},__publicField(_a352,"token","general"),__publicField(_a352,"parentToken","kicad_pcb"),_a352);SxClass.register(PcbGeneral);var _a353,PcbLayerDefinition=(_a353=class extends SxClass{constructor(options){super();__publicField(this,"token","__pcb_layer_definition__");__publicField(this,"_index");__publicField(this,"_name");__publicField(this,"_type");__publicField(this,"_userName");this._index=options.index,this._name=options.name,this._type=options.type,this._userName=options.userName}static fromPrimitive(primitive){if(!Array.isArray(primitive)||primitive.length<3)throw new Error(`layers entry must be an array with at least index, name, and type: ${JSON.stringify(primitive)}`);let[rawIndex,rawName,rawType,rawUser]=primitive,index=toNumberValue(rawIndex),name=toStringValue(rawName),type=toStringValue(rawType),userName=rawUser===void 0?void 0:toStringValue(rawUser);if(index===void 0||name===void 0||type===void 0)throw new Error(`layers entry is missing required values: ${JSON.stringify(primitive)}`);return new _a353({index,name,type,userName})}get index(){return this._index}set index(value){this._index=value}get name(){return this._name}set name(value){this._name=value}get type(){return this._type}set type(value){this._type=value}get userName(){return this._userName}set userName(value){this._userName=value}getChildren(){return[]}getString(){if(this._index===void 0||this._name===void 0||this._type===void 0)return"()";let tokens=[String(this._index),quoteSExprString(this._name),this._type];return this._userName!==void 0&&tokens.push(quoteSExprString(this._userName)),`(${tokens.join(" ")})`}},__publicField(_a353,"token","__pcb_layer_definition__"),__publicField(_a353,"parentToken","layers"),_a353);SxClass.register(PcbLayerDefinition);var _a354,PcbLayers=(_a354=class extends SxClass{constructor(){super(...arguments);__publicField(this,"token","layers");__publicField(this,"_definitions",[])}static fromSexprPrimitives(primitiveSexprs){let layers=new _a354;return layers._definitions=primitiveSexprs.map(primitive=>PcbLayerDefinition.fromPrimitive(primitive)),layers}get definitions(){return[...this._definitions]}set definitions(value){this._definitions=[...value]}getChildren(){return[...this._definitions]}},__publicField(_a354,"token","layers"),__publicField(_a354,"parentToken","kicad_pcb"),_a354);SxClass.register(PcbLayers);var _a355,PcbNet=(_a355=class extends SxClass{constructor(id2,name){super();__publicField(this,"token","net");__publicField(this,"_id");__publicField(this,"_name");this._id=id2,this._name=name}static fromSexprPrimitives(primitiveSexprs){let id2=toNumberValue(primitiveSexprs[0]),name=toStringValue(primitiveSexprs[1]);if(id2===void 0||name===void 0)throw new Error("net requires numeric id and string name");return new _a355(id2,name)}get id(){return this._id}set id(value){this._id=value}get name(){return this._name}set name(value){this._name=value}getChildren(){return[]}getString(){return`(net ${this._id} ${quoteSExprString(this._name)})`}},__publicField(_a355,"token","net"),__publicField(_a355,"parentToken","kicad_pcb"),_a355);SxClass.register(PcbNet);var _a356,PcbVersion=(_a356=class extends SxPrimitiveNumber{constructor(){super(...arguments);__publicField(this,"token","version")}},__publicField(_a356,"token","version"),__publicField(_a356,"parentToken","kicad_pcb"),_a356);SxClass.register(PcbVersion);var isSymbol=value=>/^[A-Za-z0-9._-]+$/.test(value),_a357,PcbGenerator=(_a357=class extends SxPrimitiveString{constructor(){super(...arguments);__publicField(this,"token","generator")}getString(){return`(generator ${isSymbol(this.value)?this.value:quoteSExprString(this.value)})`}},__publicField(_a357,"token","generator"),__publicField(_a357,"parentToken","kicad_pcb"),_a357);SxClass.register(PcbGenerator);var isSymbol2=value=>/^[A-Za-z0-9._-]+$/.test(value),_a358,PcbGeneratorVersion=(_a358=class extends SxPrimitiveString{constructor(){super(...arguments);__publicField(this,"token","generator_version")}getString(){return`(generator_version ${isSymbol2(this.value)?this.value:quoteSExprString(this.value)})`}},__publicField(_a358,"token","generator_version"),__publicField(_a358,"parentToken","kicad_pcb"),_a358);SxClass.register(PcbGeneratorVersion);var _a359,ViaNet=(_a359=class extends SxClass{constructor(id2,name){super();__publicField(this,"token","net");__publicField(this,"_id");__publicField(this,"_name");this._id=id2,this._name=name}static fromSexprPrimitives(primitiveSexprs){let id2=toNumberValue(primitiveSexprs[0]);if(id2===void 0)throw new Error("via net requires a numeric id");let name=primitiveSexprs.length>1?toStringValue(primitiveSexprs[1]):void 0;return new _a359(id2,name)}get id(){return this._id}set id(value){this._id=value}get name(){return this._name}set name(value){this._name=value}getChildren(){return[]}getString(){return this._name!==void 0?`(net ${this._id} ${quoteSExprString(this._name)})`:`(net ${this._id})`}},__publicField(_a359,"token","net"),__publicField(_a359,"parentToken","via"),_a359);SxClass.register(ViaNet);var BARE_FLAGS=new Set(["locked","free","remove_unused_layers","keep_end_layers"]),_a360,Via2=(_a360=class extends SxClass{constructor(params={}){super();__publicField(this,"token","via");__publicField(this,"_type");__publicField(this,"_locked",!1);__publicField(this,"_free",!1);__publicField(this,"_removeUnusedLayers",!1);__publicField(this,"_keepEndLayers",!1);__publicField(this,"_sxAt");__publicField(this,"_size");__publicField(this,"_drill");__publicField(this,"_sxLayers");__publicField(this,"_sxNet");__publicField(this,"_sxUuid");__publicField(this,"_sxTstamp");__publicField(this,"_sxTeardrops");params.type!==void 0&&(this.type=params.type),params.locked!==void 0&&(this.locked=params.locked),params.free!==void 0&&(this.free=params.free),params.removeUnusedLayers!==void 0&&(this.removeUnusedLayers=params.removeUnusedLayers),params.keepEndLayers!==void 0&&(this.keepEndLayers=params.keepEndLayers),params.at!==void 0&&(this.at=params.at),params.size!==void 0&&(this.size=params.size),params.drill!==void 0&&(this.drill=params.drill),params.layers!==void 0&&(this.layers=params.layers),params.net!==void 0&&(this.net=params.net),params.uuid!==void 0&&(this.uuid=params.uuid),params.tstamp!==void 0&&(this.tstamp=params.tstamp),params.teardrops!==void 0&&(this.teardrops=params.teardrops)}static fromSexprPrimitives(primitiveSexprs){let via=new _a360;for(let primitive of primitiveSexprs){if(typeof primitive=="string"){via.consumeBareToken(primitive);continue}if(!Array.isArray(primitive)||primitive.length===0)throw new Error(`via encountered unsupported primitive child: ${JSON.stringify(primitive)}`);let[token,...rest]=primitive;if(typeof token!="string")throw new Error(`via encountered child with non-string token: ${JSON.stringify(primitive)}`);via.consumeNode(token,rest)}return via}consumeBareToken(token){if(token==="blind"||token==="micro"){this._type=token;return}if(!BARE_FLAGS.has(token))throw new Error(`via encountered unsupported flag "${token}"`);switch(token){case"locked":this._locked=!0;break;case"free":this._free=!0;break;case"remove_unused_layers":this._removeUnusedLayers=!0;break;case"keep_end_layers":this._keepEndLayers=!0;break}}consumeNode(token,args){switch(token){case"type":{let value=toStringValue(args[0]);if(value===void 0)throw new Error("via type expects a string value");this._type=value;return}case"locked":this._locked=this.parseYesNo(args);return;case"free":this._free=this.parseYesNo(args);return;case"remove_unused_layers":this._removeUnusedLayers=this.parseYesNo(args);return;case"keep_end_layers":this._keepEndLayers=this.parseYesNo(args);return;case"at":{let parsed=SxClass.parsePrimitiveSexpr(["at",...args],{parentToken:this.token});if(!(parsed instanceof At3))throw new Error("via failed to parse at child");this._sxAt=parsed;return}case"size":{let value=toNumberValue(args[0]);if(value===void 0)throw new Error("via size expects a numeric value");this._size=value;return}case"drill":{let value=toNumberValue(args[0]);if(value===void 0)throw new Error("via drill expects a numeric value");this._drill=value;return}case"layers":{this._sxLayers=Layers.fromSexprPrimitives(args);return}case"net":{this._sxNet=ViaNet.fromSexprPrimitives(args);return}case"teardrops":{this._sxTeardrops=PadTeardrops.fromSexprPrimitives(args);return}case"uuid":{let value=toStringValue(args[0]);if(value===void 0)throw new Error("via uuid expects a string value");this._sxUuid=new Uuid(value);return}case"tstamp":{let value=toStringValue(args[0]);if(value===void 0)throw new Error("via tstamp expects a string value");this._sxTstamp=new Tstamp(value);return}default:throw new Error(`via encountered unsupported child token "${token}"`)}}parseYesNo(args){if(args.length===0)return!0;let value=toStringValue(args[0]);if(value===void 0)throw new Error("Expected string when parsing via boolean child");return/^(yes|true)$/iu.test(value)}get type(){return this._type}set type(value){this._type=value}get locked(){return this._locked}set locked(value){this._locked=value}get free(){return this._free}set free(value){this._free=value}get removeUnusedLayers(){return this._removeUnusedLayers}set removeUnusedLayers(value){this._removeUnusedLayers=value}get keepEndLayers(){return this._keepEndLayers}set keepEndLayers(value){this._keepEndLayers=value}get at(){return this._sxAt}set at(value){this._sxAt=value!==void 0?At3.from(value):void 0}get size(){return this._size}set size(value){this._size=value}get drill(){return this._drill}set drill(value){this._drill=value}get layers(){return this._sxLayers}set layers(value){if(value===void 0){this._sxLayers=void 0;return}this._sxLayers=value instanceof Layers?value:new Layers(value)}get net(){return this._sxNet}set net(value){this._sxNet=value}get uuid(){return this._sxUuid}set uuid(value){if(value===void 0){this._sxUuid=void 0;return}this._sxUuid=value instanceof Uuid?value:new Uuid(value)}get teardrops(){return this._sxTeardrops}set teardrops(value){this._sxTeardrops=value}get tstamp(){return this._sxTstamp}set tstamp(value){if(value===void 0){this._sxTstamp=void 0;return}this._sxTstamp=value instanceof Tstamp?value:new Tstamp(value)}getChildren(){let children=[];return this._sxAt&&children.push(this._sxAt),this._sxLayers&&children.push(this._sxLayers),this._sxNet&&children.push(this._sxNet),this._sxUuid&&children.push(this._sxUuid),this._sxTstamp&&children.push(this._sxTstamp),this._sxTeardrops&&children.push(this._sxTeardrops),children}getString(){let lines=["(via"];return this._type!==void 0&&lines.push(` (type ${this._type})`),this._locked&&lines.push(" (locked)"),this._free&&lines.push(" (free)"),this._removeUnusedLayers&&lines.push(" (remove_unused_layers)"),this._keepEndLayers&&lines.push(" (keep_end_layers)"),this._sxAt&&lines.push(this._sxAt.getStringIndented()),this._size!==void 0&&lines.push(` (size ${this._size})`),this._drill!==void 0&&lines.push(` (drill ${this._drill})`),this._sxLayers&&lines.push(this._sxLayers.getStringIndented()),this._sxNet&&lines.push(this._sxNet.getStringIndented()),this._sxUuid&&lines.push(this._sxUuid.getStringIndented()),this._sxTstamp&&lines.push(this._sxTstamp.getStringIndented()),this._sxTeardrops&&lines.push(this._sxTeardrops.getStringIndented()),lines.push(")"),lines.join(`
|
|
869
869
|
`)}},__publicField(_a360,"token","via"),_a360);SxClass.register(Via2);var _a361,KicadPcb=(_a361=class extends SxClass{constructor(params={}){super();__publicField(this,"token","kicad_pcb");__publicField(this,"_sxVersion");__publicField(this,"_sxGenerator");__publicField(this,"_sxGeneratorVersion");__publicField(this,"_sxGeneral");__publicField(this,"_sxPaper");__publicField(this,"_sxTitleBlock");__publicField(this,"_sxLayers");__publicField(this,"_sxSetup");__publicField(this,"_properties",[]);__publicField(this,"_nets",[]);__publicField(this,"_footprints",[]);__publicField(this,"_images",[]);__publicField(this,"_segments",[]);__publicField(this,"_grLines",[]);__publicField(this,"_grTexts",[]);__publicField(this,"_grPolys",[]);__publicField(this,"_grRects",[]);__publicField(this,"_vias",[]);__publicField(this,"_zones",[]);__publicField(this,"_otherChildren",[]);params.version!==void 0&&(this.version=params.version),params.generator!==void 0&&(this.generator=params.generator),params.generatorVersion!==void 0&&(this.generatorVersion=params.generatorVersion),params.general!==void 0&&(this.general=params.general),params.paper!==void 0&&(this.paper=params.paper),params.titleBlock!==void 0&&(this.titleBlock=params.titleBlock),params.layers!==void 0&&(this.layers=params.layers),params.setup!==void 0&&(this.setup=params.setup),params.properties!==void 0&&(this.properties=params.properties),params.nets!==void 0&&(this.nets=params.nets),params.footprints!==void 0&&(this.footprints=params.footprints),params.images!==void 0&&(this.images=params.images),params.segments!==void 0&&(this.segments=params.segments),params.graphicLines!==void 0&&(this.graphicLines=params.graphicLines),params.graphicTexts!==void 0&&(this.graphicTexts=params.graphicTexts),params.graphicPolys!==void 0&&(this.graphicPolys=params.graphicPolys),params.graphicRects!==void 0&&(this.graphicRects=params.graphicRects),params.vias!==void 0&&(this.vias=params.vias),params.zones!==void 0&&(this.zones=params.zones),params.otherChildren!==void 0&&(this.otherChildren=params.otherChildren)}static fromSexprPrimitives(primitiveSexprs){let pcb=new _a361;for(let primitive of primitiveSexprs){if(!Array.isArray(primitive)||primitive.length===0)throw new Error(`kicad_pcb encountered unsupported primitive child: ${JSON.stringify(primitive)}`);let parsed=SxClass.parsePrimitiveSexpr(primitive,{parentToken:this.token});if(!(parsed instanceof SxClass))throw new Error(`kicad_pcb expected SxClass child, received ${JSON.stringify(primitive)}`);pcb.consumeChild(parsed)}return pcb}consumeChild(child){if(child instanceof PcbVersion){this._sxVersion=child;return}if(child instanceof PcbGenerator){this._sxGenerator=child;return}if(child instanceof PcbGeneratorVersion){this._sxGeneratorVersion=child;return}if(child instanceof PcbGeneral){this._sxGeneral=child;return}if(child instanceof Paper){this._sxPaper=child;return}if(child instanceof TitleBlock){this._sxTitleBlock=child;return}if(child instanceof PcbLayers){this._sxLayers=child;return}if(child instanceof Setup){this._sxSetup=child;return}if(child instanceof Property){this._properties.push(child);return}if(child instanceof PcbNet){this._nets.push(child);return}if(child instanceof Footprint2){this._footprints.push(child);return}if(child instanceof Image){this._images.push(child);return}if(child instanceof Segment3){this._segments.push(child);return}if(child instanceof GrLine){this._grLines.push(child);return}if(child instanceof GrText){this._grTexts.push(child);return}if(child instanceof GrPoly){this._grPolys.push(child);return}if(child instanceof GrRect){this._grRects.push(child);return}if(child instanceof Via2){this._vias.push(child);return}if(child instanceof Zone){this._zones.push(child);return}this._otherChildren.push(child)}get version(){return this._sxVersion?.value}set version(value){this._sxVersion=value===void 0?void 0:new PcbVersion(value)}get generator(){return this._sxGenerator?.value}set generator(value){this._sxGenerator=value===void 0?void 0:new PcbGenerator(value)}get generatorVersion(){return this._sxGeneratorVersion?.value}set generatorVersion(value){this._sxGeneratorVersion=value===void 0?void 0:new PcbGeneratorVersion(value)}get general(){return this._sxGeneral}set general(value){this._sxGeneral=value}get paper(){return this._sxPaper}set paper(value){this._sxPaper=value}get titleBlock(){return this._sxTitleBlock}set titleBlock(value){this._sxTitleBlock=value}get layers(){return this._sxLayers}set layers(value){this._sxLayers=value}get setup(){return this._sxSetup}set setup(value){this._sxSetup=value}get properties(){return[...this._properties]}set properties(value){this._properties=[...value]}get nets(){return[...this._nets]}set nets(value){this._nets=[...value]}get footprints(){return[...this._footprints]}set footprints(value){this._footprints=[...value]}get images(){return[...this._images]}set images(value){this._images=[...value]}get segments(){return[...this._segments]}set segments(value){this._segments=[...value]}get graphicLines(){return[...this._grLines]}set graphicLines(value){this._grLines=[...value]}get graphicTexts(){return[...this._grTexts]}set graphicTexts(value){this._grTexts=[...value]}get graphicPolys(){return[...this._grPolys]}set graphicPolys(value){this._grPolys=[...value]}get graphicRects(){return[...this._grRects]}set graphicRects(value){this._grRects=[...value]}get vias(){return[...this._vias]}set vias(value){this._vias=[...value]}get zones(){return[...this._zones]}set zones(value){this._zones=[...value]}get otherChildren(){return[...this._otherChildren]}set otherChildren(value){this._otherChildren=[...value]}getChildren(){let children=[];return this._sxVersion&&children.push(this._sxVersion),this._sxGenerator&&children.push(this._sxGenerator),this._sxGeneratorVersion&&children.push(this._sxGeneratorVersion),this._sxGeneral&&children.push(this._sxGeneral),this._sxPaper&&children.push(this._sxPaper),this._sxTitleBlock&&children.push(this._sxTitleBlock),this._sxLayers&&children.push(this._sxLayers),this._sxSetup&&children.push(this._sxSetup),children.push(...this._properties),children.push(...this._nets),children.push(...this._footprints),children.push(...this._images),children.push(...this._segments),children.push(...this._grLines),children.push(...this._grTexts),children.push(...this._grPolys),children.push(...this._grRects),children.push(...this._vias),children.push(...this._zones),children.push(...this._otherChildren),children}},__publicField(_a361,"token","kicad_pcb"),_a361);SxClass.register(KicadPcb);var parseKicadSexpr=sexpr=>SxClass.parse(sexpr),parseKicadSch=sexpr=>{let[root]=parseKicadSexpr(sexpr);if(!(root instanceof KicadSch))throw new Error(`Expected KicadSch root, got ${root?.constructor.name??"undefined"}`);return root},parseKicadPcb=sexpr=>{let[root]=parseKicadSexpr(sexpr);if(!(root instanceof KicadPcb))throw new Error(`Expected KicadPcb root, got ${root?.constructor.name??"undefined"}`);return root};init_src();init_src();init_src();init_src();init_src();init_src();init_src();init_src();init_src();init_src();init_src();init_src();var ConverterStage=class{constructor(ctx){__publicField(this,"MAX_ITERATIONS",100);__publicField(this,"iterationCount",0);__publicField(this,"finished",!1);this.ctx=ctx}runUntilFinished(){for(this.iterationCount=0;!this.finished&&this.iterationCount<this.MAX_ITERATIONS;)this.step()||(this.finished=!0),this.iterationCount++;this.iterationCount>=this.MAX_ITERATIONS&&(this.ctx.warnings=this.ctx.warnings||[],this.ctx.warnings.push(`Stage ${this.constructor.name} exceeded maximum iterations (${this.MAX_ITERATIONS})`),this.finished=!0)}};function getComponentLayer(footprint){return(footprint.layer?.names||[]).some(name=>name.includes("B.Cu")||name.includes("Back"))?"bottom":"top"}function determineLayerFromLayers(layers){let layerArray=Array.isArray(layers)?layers:layers?._layers||[];return layerArray.includes("B.Cu")||layerArray.includes("Back")?"bottom":"top"}function mapTextLayer(kicadLayer){let layerStr=typeof kicadLayer=="string"?kicadLayer:kicadLayer?.names?.join(" ")||"";return layerStr.includes("B.")||layerStr.includes("Back")?"bottom":"top"}function getTextValue(footprint,type){let texts=footprint.fpTexts||[];return(Array.isArray(texts)?texts:[texts]).find(t52=>t52.type===type)?.text}function getPropertyValue(footprint,propertyName){let properties=footprint.properties||[];return(Array.isArray(properties)?properties:[properties]).find(p4=>p4.key===propertyName)?.value}function substituteKicadVariables(text,footprint){let result=text,reference=getPropertyValue(footprint,"Reference")||getTextValue(footprint,"reference")||"?",value=getPropertyValue(footprint,"Value")||getTextValue(footprint,"value")||"";return result=result.replace(/\$\{REFERENCE\}/g,reference),result=result.replace(/\$\{VALUE\}/g,value),result}function rotatePoint4(x4,y4,rotationDeg){let rotationRad=rotationDeg*Math.PI/180;return{x:x4*Math.cos(rotationRad)-y4*Math.sin(rotationRad),y:x4*Math.sin(rotationRad)+y4*Math.cos(rotationRad)}}function processFootprintGraphics(ctx,footprint,componentId,kicadComponentPos,componentRotation){if(!ctx.k2cMatPcb)return;let lines=footprint.fpLines||[],lineArray=Array.isArray(lines)?lines:lines?[lines]:[];for(let line2 of lineArray)createFootprintLine(ctx,line2,componentId,kicadComponentPos,componentRotation);let circles=footprint.fpCircles||[],circleArray=Array.isArray(circles)?circles:circles?[circles]:[];for(let circle2 of circleArray)createFootprintCircle(ctx,circle2,componentId,kicadComponentPos,componentRotation);let arcs=footprint.fpArcs||[],arcArray=Array.isArray(arcs)?arcs:arcs?[arcs]:[];for(let arc2 of arcArray)createFootprintArc(ctx,arc2,componentId,kicadComponentPos,componentRotation);let polys=footprint.fpPolys||[],polyArray=Array.isArray(polys)?polys:polys?[polys]:[];for(let poly of polyArray)createFootprintPoly(ctx,poly,componentId,kicadComponentPos,componentRotation)}function createFootprintLine(ctx,line2,componentId,kicadComponentPos,componentRotation){if(!ctx.k2cMatPcb)return;let start=line2.start||{x:0,y:0},end=line2.end||{x:0,y:0},rotatedStart=rotatePoint4(start.x,start.y,-componentRotation),rotatedEnd=rotatePoint4(end.x,end.y,-componentRotation),startKicadPos={x:kicadComponentPos.x+rotatedStart.x,y:kicadComponentPos.y+rotatedStart.y},endKicadPos={x:kicadComponentPos.x+rotatedEnd.x,y:kicadComponentPos.y+rotatedEnd.y},startPos=applyToPoint(ctx.k2cMatPcb,startKicadPos),endPos=applyToPoint(ctx.k2cMatPcb,endKicadPos),layer=mapTextLayer(line2.layer),strokeWidth=line2.stroke?.width||line2.width||.12;ctx.db.pcb_silkscreen_path.insert({pcb_component_id:componentId,layer,route:[startPos,endPos],stroke_width:strokeWidth})}function createFootprintCircle(ctx,circle2,componentId,kicadComponentPos,componentRotation){if(!ctx.k2cMatPcb)return;let center2=circle2.center||{x:0,y:0},end=circle2.end||{x:0,y:0},radius=Math.sqrt((end.x-center2.x)**2+(end.y-center2.y)**2),rotatedCenter=rotatePoint4(center2.x,center2.y,-componentRotation),centerKicadPos={x:kicadComponentPos.x+rotatedCenter.x,y:kicadComponentPos.y+rotatedCenter.y},centerPos=applyToPoint(ctx.k2cMatPcb,centerKicadPos),layer=mapTextLayer(circle2.layer),strokeWidth=circle2.stroke?.width||circle2.width||.12,numPoints=16,circleRoute=[];for(let i3=0;i3<=numPoints;i3++){let angle=i3/numPoints*2*Math.PI,x4=centerPos.x+radius*Math.cos(angle),y4=centerPos.y+radius*Math.sin(angle);circleRoute.push({x:x4,y:y4})}ctx.db.pcb_silkscreen_path.insert({pcb_component_id:componentId,layer,route:circleRoute,stroke_width:strokeWidth})}function calculateArcCenter(p12,p22,p32){let ax3=p12.x-p22.x,ay3=p12.y-p22.y,bx3=p22.x-p32.x,by3=p22.y-p32.y,denom=2*(ax3*by3-ay3*bx3);if(Math.abs(denom)<1e-10)return null;let d12=p12.x*p12.x+p12.y*p12.y-p22.x*p22.x-p22.y*p22.y,d22=p22.x*p22.x+p22.y*p22.y-p32.x*p32.x-p32.y*p32.y,cx3=(d12*by3-d22*ay3)/denom,cy3=(ax3*d22-bx3*d12)/denom,radius=Math.sqrt((p12.x-cx3)**2+(p12.y-cy3)**2);return{center:{x:cx3,y:cy3},radius}}function createFootprintArc(ctx,arc2,componentId,kicadComponentPos,componentRotation){if(!ctx.k2cMatPcb)return;let start=arc2.start||{x:0,y:0},mid=arc2.mid||{x:0,y:0},end=arc2.end||{x:0,y:0},rotatedStart=rotatePoint4(start.x,start.y,-componentRotation),rotatedMid=rotatePoint4(mid.x,mid.y,-componentRotation),rotatedEnd=rotatePoint4(end.x,end.y,-componentRotation),startKicadPos={x:kicadComponentPos.x+rotatedStart.x,y:kicadComponentPos.y+rotatedStart.y},midKicadPos={x:kicadComponentPos.x+rotatedMid.x,y:kicadComponentPos.y+rotatedMid.y},endKicadPos={x:kicadComponentPos.x+rotatedEnd.x,y:kicadComponentPos.y+rotatedEnd.y},layer=mapTextLayer(arc2.layer),strokeWidth=arc2.stroke?.width||arc2.width||.12,arcInfo=calculateArcCenter(startKicadPos,midKicadPos,endKicadPos);if(!arcInfo){let startPos=applyToPoint(ctx.k2cMatPcb,startKicadPos),endPos=applyToPoint(ctx.k2cMatPcb,endKicadPos);ctx.db.pcb_silkscreen_path.insert({pcb_component_id:componentId,layer,route:[startPos,endPos],stroke_width:strokeWidth});return}let{center:center2,radius}=arcInfo,startAngle=Math.atan2(startKicadPos.y-center2.y,startKicadPos.x-center2.x),midAngle=Math.atan2(midKicadPos.y-center2.y,midKicadPos.x-center2.x),sweepAngle=Math.atan2(endKicadPos.y-center2.y,endKicadPos.x-center2.x)-startAngle,midSweep=midAngle-startAngle;for(;sweepAngle>Math.PI;)sweepAngle-=2*Math.PI;for(;sweepAngle<-Math.PI;)sweepAngle+=2*Math.PI;for(;midSweep>Math.PI;)midSweep-=2*Math.PI;for(;midSweep<-Math.PI;)midSweep+=2*Math.PI;let isCCW=sweepAngle>0;isCCW&&midSweep>0&&midSweep<sweepAngle||!isCCW&&midSweep<0&&midSweep>sweepAngle||(sweepAngle=sweepAngle>0?sweepAngle-2*Math.PI:sweepAngle+2*Math.PI);let arcLength2=Math.abs(radius*sweepAngle),numSegments=Math.max(2,Math.ceil(arcLength2/.1)),arcRoute=[];for(let i3=0;i3<=numSegments;i3++){let t52=i3/numSegments,angle=startAngle+sweepAngle*t52,kicadPoint={x:center2.x+radius*Math.cos(angle),y:center2.y+radius*Math.sin(angle)},cjPoint=applyToPoint(ctx.k2cMatPcb,kicadPoint);arcRoute.push(cjPoint)}ctx.db.pcb_silkscreen_path.insert({pcb_component_id:componentId,layer,route:arcRoute,stroke_width:strokeWidth})}function createFootprintPoly(ctx,poly,componentId,kicadComponentPos,componentCcwRotationDegrees){if(!ctx.k2cMatPcb)return;let ptArray=poly.points?.points||[];if(ptArray.length===0)return;let layer=mapTextLayer(poly.layer),strokeWidth=poly.stroke?.width||poly.width||.12,transformedPts=ptArray.map(p4=>{let x4=p4.x??p4.xy?.x??0,y4=p4.y??p4.xy?.y??0,rotated=rotatePoint4(x4,y4,-componentCcwRotationDegrees),kicadPos={x:kicadComponentPos.x+rotated.x,y:kicadComponentPos.y+rotated.y};return applyToPoint(ctx.k2cMatPcb,kicadPos)});ctx.db.pcb_silkscreen_path.insert({pcb_component_id:componentId,layer,route:transformedPts,stroke_width:strokeWidth})}function createPcbPort({ctx,componentId,padInfo}){if(!padInfo.layers||padInfo.layers.length===0)return;let sourcePortId=`${componentId}_port_${padInfo.padNumber}`;return ctx.db.pcb_port.insert({pcb_component_id:componentId,source_port_id:sourcePortId,x:padInfo.position.x,y:padInfo.position.y,layers:padInfo.layers}).pcb_port_id}function processPads(ctx,footprint,componentId,kicadComponentPos,componentRotation){if(!ctx.k2cMatPcb)return;let pads=footprint.fpPads||[],padArray=Array.isArray(pads)?pads:[pads];for(let pad2 of padArray)processPad({ctx,pad:pad2,componentId,kicadComponentPos,componentRotation})}function processPad({ctx,pad:pad2,componentId,kicadComponentPos,componentRotation}){if(!ctx.k2cMatPcb)return;let padAt=pad2.at||{x:0,y:0,angle:0},padType=pad2.padType||pad2.type||"thru_hole",padShape=pad2.shape||"circle",padRotation=padAt.angle||0,rotationRad=-componentRotation*Math.PI/180,rotatedPadX=padAt.x*Math.cos(rotationRad)-padAt.y*Math.sin(rotationRad),rotatedPadY=padAt.x*Math.sin(rotationRad)+padAt.y*Math.cos(rotationRad),padKicadPos={x:kicadComponentPos.x+rotatedPadX,y:kicadComponentPos.y+rotatedPadY},globalPos=applyToPoint(ctx.k2cMatPcb,padKicadPos),sizeX=1,sizeY=1;pad2.size&&(Array.isArray(pad2.size)?(sizeX=pad2.size[0]||1,sizeY=pad2.size[1]||1):typeof pad2.size=="object"&&(sizeX=pad2.size._width||pad2.size.x||1,sizeY=pad2.size._height||pad2.size.y||1));let size3={x:sizeX,y:sizeY},drill=pad2.drill,totalCcwRotationDegrees=padAt.angle||0,padNumber=pad2.number?.toString(),pcbPortId,sourcePortId;if(padNumber){let padLayers=padType==="smd"?[determineLayerFromLayers(pad2.layers||[])]:padType==="thru_hole"?["top","bottom"]:[];pcbPortId=createPcbPort({ctx,componentId,padInfo:{padNumber,padType,layers:padLayers,position:globalPos}}),pcbPortId&&(sourcePortId=`${componentId}_port_${padNumber}`)}padType==="smd"?createSmdPad({ctx,pad:pad2,componentId,pos:globalPos,size:size3,shape:padShape,pcbPortId,sourcePortId,padKicadPos,totalCcwRotationDegrees}):padType==="np_thru_hole"?createNpthHole(ctx,pad2,componentId,globalPos,drill):createPlatedHole(ctx,pad2,componentId,globalPos,size3,drill,padShape,totalCcwRotationDegrees,pcbPortId,sourcePortId)}function createSmdPad({ctx,pad:pad2,componentId,pos,size:size3,shape,pcbPortId,sourcePortId,padKicadPos,totalCcwRotationDegrees=0}){let layers=pad2.layers||[],layer=determineLayerFromLayers(layers);if(shape==="custom"){let primitives=pad2._sxPrimitives?._graphics||pad2.primitives||[],primitivesArray=Array.isArray(primitives)?primitives:[primitives],primitivesProcessed=0;for(let primitive of primitivesArray){if(primitive.token==="gr_poly"){let grPoly=primitive.gr_poly||primitive,rawPts=[],ptsContainer=grPoly._sxPts||grPoly.points||grPoly.pts,contours=grPoly._contours||grPoly.contours;if(ptsContainer)Array.isArray(ptsContainer)?rawPts=ptsContainer:Array.isArray(ptsContainer.points)?rawPts=ptsContainer.points:Array.isArray(ptsContainer.pts)&&(rawPts=ptsContainer.pts);else if(Array.isArray(contours))for(let contour of contours){let contourPts=contour.points||contour.pts||[];rawPts.push(...Array.isArray(contourPts)?contourPts:[contourPts])}let points=[];for(let pt3 of rawPts){let x4=pt3.x??pt3.xy?.x,y4=pt3.y??pt3.xy?.y;if(x4!==void 0&&y4!==void 0){let rotated=rotatePoint4(x4,y4,totalCcwRotationDegrees),kicadPos={x:padKicadPos.x+rotated.x,y:padKicadPos.y+rotated.y};points.push(applyToPoint(ctx.k2cMatPcb,kicadPos))}}if(points.length>0){let smtpad2={type:"pcb_smtpad",shape:"polygon",pcb_component_id:componentId,pcb_port_id:pcbPortId,pcb_smtpad_id:"pcb_smtpad_id",layer,port_hints:[pad2.number.toString()],points};ctx.db.pcb_smtpad.insert(smtpad2),primitivesProcessed++}}if(primitive.token==="gr_circle"){let grCircle=primitive.gr_circle||primitive,center2=grCircle.center||{x:0,y:0},end=grCircle.end||{x:0,y:0},radius=Math.sqrt((end.x-center2.x)**2+(end.y-center2.y)**2),rotatedCenter=rotatePoint4(center2.x,center2.y,totalCcwRotationDegrees),kicadCenterPos={x:padKicadPos.x+rotatedCenter.x,y:padKicadPos.y+rotatedCenter.y},globalCenter=applyToPoint(ctx.k2cMatPcb,kicadCenterPos),smtpad2={type:"pcb_smtpad",shape:"circle",pcb_component_id:componentId,pcb_port_id:pcbPortId,pcb_smtpad_id:"pcb_smtpad_id",layer,port_hints:[pad2.number.toString()],x:globalCenter.x,y:globalCenter.y,width:radius*2,height:radius*2,radius};ctx.db.pcb_smtpad.insert(smtpad2),primitivesProcessed++}}if(primitivesProcessed>0){ctx.stats&&(ctx.stats.pads=(ctx.stats.pads||0)+primitivesProcessed);return}}let baseSmtPad={type:"pcb_smtpad",pcb_component_id:componentId,x:pos.x,y:pos.y,width:size3.x,height:size3.y,layer,pcb_port_id:pcbPortId,port_hints:[pad2.number?.toString()]},ccwRotationDegrees=pad2.at?.angle;if(shape==="circle"){let smtpad2={type:"pcb_smtpad",pcb_component_id:componentId,pcb_smtpad_id:"pcb_smtpad_id",x:pos.x,y:pos.y,width:size3.x,height:size3.y,layer,pcb_port_id:pcbPortId,port_hints:[pad2.number?.toString()],shape:"circle",radius:Math.max(size3.x,size3.y)/2};ctx.db.pcb_smtpad.insert(smtpad2)}else if(shape==="rect"||shape==="roundrect"){let roundrectRatio=pad2._sxRoundrectRatio?.value??pad2.roundrect_rratio,cornerRadius;if(shape==="roundrect"&&roundrectRatio!==void 0&&(cornerRadius=Math.min(size3.x,size3.y)*roundrectRatio/2),ccwRotationDegrees){let rotatedsmtpad={type:"pcb_smtpad",pcb_component_id:componentId,x:pos.x,y:pos.y,width:size3.x,height:size3.y,layer,pcb_port_id:pcbPortId,port_hints:[pad2.number.toString()],shape:"rotated_rect",ccw_rotation:ccwRotationDegrees,corner_radius:cornerRadius};ctx.db.pcb_smtpad.insert(rotatedsmtpad);return}let smtpad2={type:"pcb_smtpad",pcb_component_id:componentId,x:pos.x,y:pos.y,width:size3.x,height:size3.y,layer,pcb_port_id:pcbPortId,port_hints:[pad2.number.toString()],shape:"rect",corner_radius:cornerRadius};ctx.db.pcb_smtpad.insert(smtpad2)}else ctx.db.pcb_smtpad.insert({type:"pcb_smtpad",pcb_component_id:componentId,x:pos.x,y:pos.y,width:size3.x,height:size3.y,layer,pcb_port_id:pcbPortId,port_hints:[pad2.number?.toString()],shape:"rect"});ctx.stats&&(ctx.stats.pads=(ctx.stats.pads||0)+1)}function createPlatedHole(ctx,pad2,componentId,pos,size3,drill,shape,rotation5=0,pcbPortId,sourcePortId){let drillX=typeof drill=="object"?drill?.x||drill?._width||drill?.diameter||.8:drill||.8,drillY=typeof drill=="object"?drill?.y||drill?._height||drill?.diameter||drillX:drill||.8,holeDiameter=Math.max(drillX,drillY),drillIsOval=typeof drill=="object"&&drillX!==void 0&&drillY!==void 0&&drillX!==drillY,outerWidth=size3.x,outerHeight=size3.y;if(shape==="circle"){let platedHole={type:"pcb_plated_hole",shape:"circle",pcb_component_id:componentId,pcb_port_id:pcbPortId,x:pos.x,y:pos.y,port_hints:[pad2.number?.toString()],hole_diameter:holeDiameter,outer_diameter:Math.max(outerWidth,outerHeight),layers:["top","bottom"]};ctx.db.pcb_plated_hole.insert(platedHole)}else if(shape==="oval"){let platedHole={type:"pcb_plated_hole",shape:"pill",pcb_component_id:componentId,pcb_port_id:pcbPortId,x:pos.x,y:pos.y,port_hints:[pad2.number?.toString()],hole_width:holeDiameter,hole_height:holeDiameter,outer_width:outerWidth,outer_height:outerHeight,ccw_rotation:pad2.at?.angle||0,layers:["top","bottom"]};ctx.db.pcb_plated_hole.insert(platedHole)}else if(shape==="rect"||shape==="square"||shape==="roundrect")if(drillIsOval){let platedHole={type:"pcb_plated_hole",shape:"rotated_pill_hole_with_rect_pad",pcb_component_id:componentId,pcb_port_id:pcbPortId,x:pos.x,y:pos.y,port_hints:[pad2.number?.toString()],hole_shape:"rotated_pill",pad_shape:"rect",hole_width:drillY,hole_height:drillX,hole_ccw_rotation:pad2.at?.angle||0,rect_ccw_rotation:pad2.at?.angle||0,rect_pad_width:outerWidth,rect_pad_height:outerHeight,hole_offset_x:0,hole_offset_y:0,layers:["top","bottom"]};if(shape==="roundrect"){let roundrectRatio=pad2._sxRoundrectRatio?.value??pad2.roundrect_rratio;if(roundrectRatio!==void 0){let minDimension=Math.min(outerWidth,outerHeight);platedHole.rect_border_radius=minDimension*roundrectRatio/2}}ctx.db.pcb_plated_hole.insert(platedHole)}else{let platedHole={type:"pcb_plated_hole",shape:"circular_hole_with_rect_pad",pcb_component_id:componentId,pcb_port_id:pcbPortId,pcb_plated_hole_id:"pcb_plated_hole_id",x:pos.x,y:pos.y,port_hints:[pad2.number?.toString()],hole_shape:"circle",pad_shape:"rect",hole_diameter:holeDiameter,rect_ccw_rotation:pad2.at?.angle||0,rect_pad_width:outerWidth,rect_pad_height:outerHeight,hole_offset_x:0,hole_offset_y:0,layers:["top","bottom"]};if(shape==="roundrect"){let roundrectRatio=pad2._sxRoundrectRatio?.value??pad2.roundrect_rratio;if(roundrectRatio!==void 0){let minDimension=Math.min(outerWidth,outerHeight);platedHole.rect_border_radius=minDimension*roundrectRatio/2}}ctx.db.pcb_plated_hole.insert(platedHole)}ctx.stats&&(ctx.stats.pads=(ctx.stats.pads||0)+1)}function createNpthHole(ctx,pad2,componentId,pos,drill){let holeDiameter=drill?.diameter||drill||1,hole={type:"pcb_hole",hole_shape:"circle",pcb_component_id:componentId,x:pos.x,y:pos.y,hole_diameter:holeDiameter};ctx.db.pcb_hole.insert(hole)}function processFootprintText(ctx,footprint,componentId,kicadComponentPos,componentRotation){if(!ctx.k2cMatPcb)return;processFootprintProperties(ctx,footprint,componentId,kicadComponentPos,componentRotation);let texts=footprint.fpTexts||[],textArray=Array.isArray(texts)?texts:[texts];for(let text of textArray){let layerStr=typeof text.layer=="string"?text.layer:text.layer?.names?.join(" ")||"";if(!(layerStr.includes("SilkS")||layerStr.includes("Silk")))continue;let textElement={text:text.text,at:text._sxPosition||text.at,layer:text.layer,effects:text._sxEffects||text.effects,_sxEffects:text._sxEffects};createSilkscreenText(ctx,textElement,componentId,kicadComponentPos,componentRotation,footprint)}}function processFootprintProperties(ctx,footprint,componentId,kicadComponentPos,componentRotation){if(!ctx.k2cMatPcb)return;let properties=footprint.properties||[],propertyArray=Array.isArray(properties)?properties:[properties];for(let property of propertyArray){if(!property.layer)continue;let layerStr=typeof property.layer=="string"?property.layer:property.layer?.names?.join(" ")||"";if(!(layerStr.includes("SilkS")||layerStr.includes("Silk")))continue;let textElement={text:property.value,at:property._sxAt,layer:property.layer,effects:property._sxEffects||property.effects,_sxEffects:property._sxEffects};createSilkscreenText(ctx,textElement,componentId,kicadComponentPos,componentRotation,footprint)}}function createSilkscreenText(ctx,text,componentId,kicadComponentPos,componentRotation,footprint){if(!ctx.k2cMatPcb)return;let at3=text.at,textLocalX=at3?.x??0,textLocalY=at3?.y??0,rotationRad=-componentRotation*Math.PI/180,rotatedTextX=textLocalX*Math.cos(rotationRad)-textLocalY*Math.sin(rotationRad),rotatedTextY=textLocalX*Math.sin(rotationRad)+textLocalY*Math.cos(rotationRad),textKicadPos={x:kicadComponentPos.x+rotatedTextX,y:kicadComponentPos.y+rotatedTextY},pos=applyToPoint(ctx.k2cMatPcb,textKicadPos),layer=mapTextLayer(text.layer),processedText=substituteKicadVariables(text.text||"",footprint),kicadFontSize=text._sxEffects?._sxFont?._sxSize?._height||text.effects?.font?.size?.y||1;ctx.db.pcb_silkscreen_text.insert({pcb_component_id:componentId,font:"tscircuit2024",font_size:kicadFontSize*1.5,text:processedText,anchor_position:pos,layer})}function inferComponentType(reference){if(!reference)return"simple_chip";switch(reference.match(/^([A-Z]+)/)?.[1]){case"R":return"simple_resistor";case"C":return"simple_capacitor";case"L":return"simple_inductor";case"D":return"simple_diode";case"LED":return"simple_diode";case"Q":return"simple_transistor";case"U":case"IC":return"simple_chip";case"J":case"P":return"simple_chip";default:return"simple_chip"}}function inferTransistorTypeFromFootprint(footprint,value){let lowerValue=(value||"").toLowerCase();if(lowerValue.includes("pnp"))return"pnp";if(lowerValue.includes("npn"))return"npn";let lowerLibId=(footprint.libraryId||"").toLowerCase();return lowerLibId.includes("pnp")?"pnp":(lowerLibId.includes("npn"),"npn")}function processFootprint(ctx,footprint){if(!ctx.k2cMatPcb)return;let position4=footprint.position,kicadPos={x:position4?.x??0,y:position4?.y??0},cjPos=applyToPoint(ctx.k2cMatPcb,kicadPos),rotation5=position4?.angle??0,uuid=footprint.uuid?.value||footprint.tstamp?.value;if(!uuid)return;let refdes=getFootprintReference(footprint),value=getFootprintValue(footprint),ftype=inferComponentType(refdes),sourceComponentData={name:refdes||"U",ftype};if(ftype==="simple_transistor"&&(sourceComponentData.transistor_type=inferTransistorTypeFromFootprint(footprint,value)),value){let sanitizedValue=value.replace(/,/g,".");switch(ftype){case"simple_resistor":sourceComponentData.resistance=sanitizedValue;break;case"simple_capacitor":sourceComponentData.capacitance=sanitizedValue;break;case"simple_inductor":sourceComponentData.inductance=sanitizedValue;break}}let sourceComponentId=ctx.db.source_component.insert(sourceComponentData).source_component_id,componentId=ctx.db.pcb_component.insert({center:{x:cjPos.x,y:cjPos.y},layer:getComponentLayer(footprint),rotation:-rotation5,width:0,height:0,source_component_id:sourceComponentId}).pcb_component_id;ctx.footprintUuidToComponentId?.set(uuid,componentId),ctx.footprintUuidToSourceComponentId?.set(uuid,sourceComponentId),processPads(ctx,footprint,componentId,kicadPos,rotation5),processFootprintText(ctx,footprint,componentId,kicadPos,rotation5),processFootprintGraphics(ctx,footprint,componentId,kicadPos,rotation5),ctx.stats&&(ctx.stats.components=(ctx.stats.components||0)+1)}function getFootprintReference(footprint){let properties=footprint.properties||[],propertyArray=Array.isArray(properties)?properties:[properties];for(let property of propertyArray)if(property.key==="Reference"||property.name==="Reference")return property.value;let textItems=footprint.fpTexts||[],textArray=Array.isArray(textItems)?textItems:[textItems];for(let text of textArray)if(text.type==="reference")return text.text}function getFootprintValue(footprint){let properties=footprint.properties||[],propertyArray=Array.isArray(properties)?properties:[properties];for(let property of propertyArray)if(property.key==="Value"||property.name==="Value")return property.value;let textItems=footprint.fpTexts||[],textArray=Array.isArray(textItems)?textItems:[textItems];for(let text of textArray)if(text.type==="value")return text.text}var CollectFootprintsStage=class extends ConverterStage{constructor(){super(...arguments);__publicField(this,"processedFootprints",new Set)}step(){if(!this.ctx.kicadPcb||!this.ctx.k2cMatPcb)return this.finished=!0,!1;let footprints=this.ctx.kicadPcb.footprints||[],footprintArray=Array.isArray(footprints)?footprints:[footprints];for(let footprint of footprintArray){let uuid=footprint.uuid?.value||footprint.tstamp?.value;uuid&&(this.processedFootprints.has(uuid)||(processFootprint(this.ctx,footprint),this.processedFootprints.add(uuid)))}return this.finished=!0,!1}},CollectGraphicsStage=class extends ConverterStage{step(){if(!this.ctx.kicadPcb||!this.ctx.k2cMatPcb)return this.finished=!0,!1;let lines=this.ctx.kicadPcb.graphicLines||[],lineArray=Array.isArray(lines)?lines:[lines],edgeCutLines=[],silkLines=[];for(let line2 of lineArray){let layer=line2.layer,layerStr=(typeof layer=="string"?[layer]:layer?.names||[]).join(" ");layerStr.includes("Edge.Cuts")?edgeCutLines.push(line2):layerStr.includes("SilkS")&&silkLines.push(line2)}edgeCutLines.length>0&&this.createBoardOutline(edgeCutLines);for(let line2 of silkLines)this.createSilkscreenPath(line2);let grRects=this.ctx.kicadPcb.graphicRects||[];for(let rect of grRects)this.processRectangle(rect);let grPolys=this.ctx.kicadPcb.graphicPolys||[],polyArray=Array.isArray(grPolys)?grPolys:[grPolys];for(let poly of polyArray)this.processPolygon(poly);let texts=this.ctx.kicadPcb.graphicTexts||[],textArray=Array.isArray(texts)?texts:[texts];for(let text of textArray){let layer=text.layer;(typeof layer=="string"?[layer]:layer?.names||[]).some(name=>name.includes("SilkS")||name.includes(".Cu")||name.includes("Fab"))&&this.createSilkscreenText(text)}return this.finished=!0,!1}createBoardOutline(lines){if(!this.ctx.k2cMatPcb)return;let segments=lines.map(line2=>({start:line2.start??{x:0,y:0},end:line2.end??{x:0,y:0}})),orderedSegments=[],remainingSegments=[...segments];if(remainingSegments.length>0)for(orderedSegments.push(remainingSegments.shift());remainingSegments.length>0;){let lastEnd=orderedSegments[orderedSegments.length-1].end,foundIndex=remainingSegments.findIndex(seg=>this.pointsEqualKicad(seg.start,lastEnd));if(foundIndex===-1&&(foundIndex=remainingSegments.findIndex(seg=>this.pointsEqualKicad(seg.end,lastEnd)),foundIndex!==-1)){let seg=remainingSegments[foundIndex];orderedSegments.push({start:seg.end,end:seg.start}),remainingSegments.splice(foundIndex,1);continue}foundIndex!==-1?orderedSegments.push(remainingSegments.splice(foundIndex,1)[0]):orderedSegments.push(remainingSegments.shift())}let points=[];for(let segment2 of orderedSegments){let startPos=applyToPoint(this.ctx.k2cMatPcb,{x:segment2.start.x,y:segment2.start.y}),lastPoint=points[points.length-1];(!lastPoint||!this.pointsEqual(lastPoint,startPos))&&points.push(startPos)}if(orderedSegments.length>0){let lastSegment=orderedSegments[orderedSegments.length-1],endPos=applyToPoint(this.ctx.k2cMatPcb,{x:lastSegment.end.x,y:lastSegment.end.y}),firstPoint=points[0];firstPoint&&!this.pointsEqual(firstPoint,endPos)&&points.push(endPos)}let existingBoard=this.ctx.db.pcb_board.list()[0];existingBoard?(existingBoard.outline=points,existingBoard.width=this.calculateWidth(points),existingBoard.height=this.calculateHeight(points)):this.ctx.db.pcb_board.insert({outline:points,width:this.calculateWidth(points),height:this.calculateHeight(points)})}createSilkscreenPath(line2){if(!this.ctx.k2cMatPcb)return;let start=line2.start||{x:0,y:0},end=line2.end||{x:0,y:0},startPos=applyToPoint(this.ctx.k2cMatPcb,{x:start.x,y:start.y}),endPos=applyToPoint(this.ctx.k2cMatPcb,{x:end.x,y:end.y}),layer=this.mapLayer(line2.layer),strokeWidth=line2.width||.15;this.ctx.db.pcb_silkscreen_path.insert({pcb_component_id:"",layer,route:[startPos,endPos],stroke_width:strokeWidth})}processRectangle(rect){if(!this.ctx.k2cMatPcb)return;let start={x:rect._sxStart?._x??0,y:rect._sxStart?._y??0},end={x:rect._sxEnd?._x??0,y:rect._sxEnd?._y??0},layerStr=(rect._sxLayer?._names||[]).join(" "),isFilled=rect._sxFill&&(rect._sxFill.isFilled===!0||String(rect._sxFill).includes("fill yes")),isCopperLayer=layerStr.includes(".Cu");if(!isFilled||!isCopperLayer)return;let centerKicad={x:(start.x+end.x)/2,y:(start.y+end.y)/2},widthKicad=Math.abs(end.x-start.x),heightKicad=Math.abs(end.y-start.y),centerCJ=applyToPoint(this.ctx.k2cMatPcb,centerKicad),layer=this.mapLayer(rect._sxLayer);this.ctx.db.pcb_smtpad.insert({pcb_component_id:"",x:centerCJ.x,y:centerCJ.y,width:widthKicad,height:heightKicad,layer,shape:"rect",port_hints:[]}),this.ctx.stats&&(this.ctx.stats.pads=(this.ctx.stats.pads||0)+1)}createSilkscreenText(text){if(!this.ctx.k2cMatPcb)return;let at3=text.at||text._sxPosition,pos=applyToPoint(this.ctx.k2cMatPcb,{x:at3?.x??0,y:at3?.y??0}),layer=this.mapLayer(text.layer),fontSize=(text._sxEffects?._sxFont?._sxSize?._height||text.effects?.font?.size?.y||1)*1.5;this.ctx.db.pcb_silkscreen_text.insert({pcb_component_id:"",text:text.text||text._text||"",anchor_position:pos,layer,font_size:fontSize,font:"tscircuit2024"})}mapLayer(kicadLayer){let layerStr=typeof kicadLayer=="string"?kicadLayer:kicadLayer?.names?.join(" ")||"";return layerStr.includes("B.")||layerStr.includes("Back")?"bottom":"top"}pointsEqual(p12,p22){return Math.abs(p12.x-p22.x)<.001&&Math.abs(p12.y-p22.y)<.001}pointsEqualKicad(p12,p22){return Math.abs(p12.x-p22.x)<.001&&Math.abs(p12.y-p22.y)<.001}calculateWidth(points){if(points.length===0)return 0;let xs3=points.map(p4=>p4.x);return Math.max(...xs3)-Math.min(...xs3)}calculateHeight(points){if(points.length===0)return 0;let ys3=points.map(p4=>p4.y);return Math.max(...ys3)-Math.min(...ys3)}processPolygon(poly){if(!this.ctx.k2cMatPcb)return;let layerStr=(poly._sxLayer?._names||[]).join(" "),isFilled=poly._sxFill?.filled===!0,isCopperLayer=layerStr.includes(".Cu");if(!isFilled||!isCopperLayer)return;let ptsData=poly._sxPts?.points||[],points=[];for(let pt3 of ptsData)if(pt3.token==="xy")points.push({x:pt3.x,y:pt3.y});else if(pt3.token==="arc"){let arcPoints=this.convertArcToPoints({x:pt3._sxStart?._x,y:pt3._sxStart?._y},{x:pt3._sxMid?._x,y:pt3._sxMid?._y},{x:pt3._sxEnd?._x,y:pt3._sxEnd?._y});points.push(...arcPoints)}if(points.length<3)return;let transformedPoints=points.map(pt3=>applyToPoint(this.ctx.k2cMatPcb,pt3)),layer=this.mapLayer(poly._sxLayer);this.ctx.db.pcb_smtpad.insert({pcb_component_id:"",shape:"polygon",points:transformedPoints,layer,port_hints:[]}),this.ctx.stats&&(this.ctx.stats.pads=(this.ctx.stats.pads||0)+1)}convertArcToPoints(start,mid,end,numSegments=8){let points=[],{center:center2,radius}=this.calculateArcCenter(start,mid,end);if(!center2||radius===0)return[start,end];let startAngle=Math.atan2(start.y-center2.y,start.x-center2.x),endAngle=Math.atan2(end.y-center2.y,end.x-center2.x),midAngle=Math.atan2(mid.y-center2.y,mid.x-center2.x),angleRange=endAngle-startAngle,midFromStart=midAngle-startAngle,endFromStart=endAngle-startAngle,normalizeMid=(midFromStart+Math.PI)%(2*Math.PI)-Math.PI,normalizeEnd=(endFromStart+Math.PI)%(2*Math.PI)-Math.PI;(normalizeEnd>0&&(normalizeMid<0||normalizeMid>normalizeEnd)||normalizeEnd<0&&(normalizeMid>0||normalizeMid<normalizeEnd))&&(angleRange=angleRange-Math.sign(angleRange)*2*Math.PI);for(let i3=1;i3<numSegments;i3++){let t52=i3/numSegments,angle=startAngle+angleRange*t52;points.push({x:center2.x+radius*Math.cos(angle),y:center2.y+radius*Math.sin(angle)})}return points.push(end),points}calculateArcCenter(p12,p22,p32){let ax3=p12.x,ay3=p12.y,bx3=p22.x,by3=p22.y,cx3=p32.x,cy3=p32.y,d4=2*(ax3*(by3-cy3)+bx3*(cy3-ay3)+cx3*(ay3-by3));if(Math.abs(d4)<1e-10)return{center:null,radius:0};let ux3=((ax3*ax3+ay3*ay3)*(by3-cy3)+(bx3*bx3+by3*by3)*(cy3-ay3)+(cx3*cx3+cy3*cy3)*(ay3-by3))/d4,uy3=((ax3*ax3+ay3*ay3)*(cx3-bx3)+(bx3*bx3+by3*by3)*(ax3-cx3)+(cx3*cx3+cy3*cy3)*(bx3-ax3))/d4,radius=Math.sqrt((ax3-ux3)**2+(ay3-uy3)**2);return{center:{x:ux3,y:uy3},radius}}},CollectNetsStage=class extends ConverterStage{step(){if(!this.ctx.kicadPcb||!this.ctx.netNumToName)return this.finished=!0,!1;let nets=this.ctx.kicadPcb.nets||[],netArray=Array.isArray(nets)?nets:[nets];for(let net of netArray){let netNum=net._id??net.number??net.ordinal??0,netName=net._name??net.name??`Net-${netNum}`;this.ctx.netNumToName.set(netNum,netName)}return this.ctx.netNumToName.has(0)||this.ctx.netNumToName.set(0,""),this.finished=!0,!1}},CollectSourceTracesStage=class extends ConverterStage{constructor(){super(...arguments);__publicField(this,"processedNets",new Set)}step(){if(!this.ctx.kicadPcb||!this.ctx.netNumToName)return this.finished=!0,!1;let netToPads=new Map,footprints=this.ctx.kicadPcb.footprints||[],footprintArray=Array.isArray(footprints)?footprints:[footprints];for(let footprint of footprintArray)this.processFootprintPads(footprint,netToPads);this.collectNetsFromSegments(netToPads);for(let[netNum,pads]of netToPads.entries())this.processedNets.has(netNum)||(this.createSourceTrace(netNum,pads),this.processedNets.add(netNum));return this.finished=!0,!1}collectNetsFromSegments(netToPads){if(!this.ctx.kicadPcb)return;let segments=this.ctx.kicadPcb.segments||[],segmentArray=Array.isArray(segments)?segments:[segments];for(let segment2 of segmentArray){let netNum=this.getSegmentNet(segment2);netNum&&(netToPads.has(netNum)||netToPads.set(netNum,[]))}}getSegmentNet(segment2){let net=segment2?.net;return net?typeof net=="number"?net:typeof net=="object"?net._id??net.number??net.ordinal??null:null:null}processFootprintPads(footprint,netToPads){let footprintUuid=footprint.uuid?.value||footprint.tstamp?.value;if(!footprintUuid)return;let componentId=this.ctx.footprintUuidToComponentId?.get(footprintUuid);if(!componentId)return;let pads=footprint.fpPads||[],padArray=Array.isArray(pads)?pads:[pads];for(let pad2 of padArray){let padNumber=pad2.number?.toString();if(!padNumber)continue;let netNum=this.getPadNet(pad2);if(netNum==null||netNum===0)continue;let sourcePortId=this.getOrCreateSourcePort(componentId,padNumber,footprint);netToPads.has(netNum)||netToPads.set(netNum,[]),netToPads.get(netNum).push({componentId,padNumber,sourcePortId})}}getPadNet(pad2){let net=pad2._sxNet||pad2.net;return net?typeof net=="number"?net:typeof net=="object"?net._id??net.number??net.ordinal??null:null:null}getOrCreateSourcePort(componentId,padNumber,footprint){let sourcePortId=`${componentId}_port_${padNumber}`;if(!this.ctx.db.source_port.list().find(sp3=>sp3.source_port_id===sourcePortId)){let footprintUuid=footprint.uuid?.value||footprint.tstamp?.value,sourceComponentId=footprintUuid&&this.ctx.footprintUuidToSourceComponentId?this.ctx.footprintUuidToSourceComponentId.get(footprintUuid):void 0,reference=this.getFootprintReference(footprint);this.ctx.db.source_port.insert({source_port_id:sourcePortId,source_component_id:sourceComponentId||componentId,name:`${reference||"U"}.${padNumber}`,pin_number:parseInt(padNumber,10)||void 0})}return sourcePortId}getFootprintReference(footprint){let properties=footprint.properties||[],propertyArray=Array.isArray(properties)?properties:[properties];for(let property of propertyArray)if(property.key==="Reference"||property.name==="Reference")return property.value;let textItems=footprint.fpTexts||[],textArray=Array.isArray(textItems)?textItems:[textItems];for(let text of textArray)if(text.type==="reference")return text.text}createSourceTrace(netNum,pads){let netName=this.ctx.netNumToName?.get(netNum)||`Net-${netNum}`,sourceTrace=this.ctx.db.source_trace.insert({connected_source_port_ids:pads.map(p4=>p4.sourcePortId),connected_source_net_ids:[],display_name:netName});this.ctx.netNumToSourceTraceId?.set(netNum,sourceTrace.source_trace_id),this.ctx.stats&&(this.ctx.stats.traces=(this.ctx.stats.traces||0)+1)}},CollectTracesStage=class extends ConverterStage{constructor(){super(...arguments);__publicField(this,"PORT_MATCH_TOLERANCE",.001)}step(){if(!this.ctx.kicadPcb||!this.ctx.k2cMatPcb||!this.ctx.netNumToName||!this.ctx.netNumToSourceTraceId)return this.finished=!0,!1;let segments=this.ctx.kicadPcb.segments||[],segmentArray=Array.isArray(segments)?segments:[segments];for(let segment2 of segmentArray)this.createTraceFromSegment(segment2);return this.finished=!0,!1}createTraceFromSegment(segment2){if(!this.ctx.k2cMatPcb||!this.ctx.netNumToSourceTraceId)return;let start=segment2.start||{x:0,y:0},end=segment2.end||{x:0,y:0},width=segment2.width||.2,layerStr=(segment2.layer?.names||[]).join(" "),mappedLayer=this.mapLayer(layerStr),netNum=this.getSegmentNet(segment2),sourceTraceId=netNum!==null?this.ctx.netNumToSourceTraceId.get(netNum)??void 0:void 0,startPos=applyToPoint(this.ctx.k2cMatPcb,{x:start.x,y:start.y}),endPos=applyToPoint(this.ctx.k2cMatPcb,{x:end.x,y:end.y}),startPcbPortId=this.findPortAtPosition(startPos,mappedLayer),endPcbPortId=this.findPortAtPosition(endPos,mappedLayer),route=[{route_type:"wire",x:startPos.x,y:startPos.y,width,layer:mappedLayer,start_pcb_port_id:startPcbPortId},{route_type:"wire",x:endPos.x,y:endPos.y,width,layer:mappedLayer,end_pcb_port_id:endPcbPortId}];this.ctx.db.pcb_trace.insert({route,source_trace_id:sourceTraceId,pcb_port_id:void 0}),this.ctx.stats&&(this.ctx.stats.traces=(this.ctx.stats.traces||0)+1)}mapLayer(kicadLayer){return kicadLayer?.includes("B.Cu")||kicadLayer?.includes("Back")?"bottom":"top"}getSegmentNet(segment2){let net=segment2?.net;return net?typeof net=="number"?net:typeof net=="object"?net._id??net.number??net.ordinal??null:null:null}findPortAtPosition(point7,layer){let ports=this.ctx.db.pcb_port.list();for(let port of ports){let layers=port.layers;if(!(layers?.length&&!layers.includes(layer))&&Math.abs((port.x??0)-point7.x)<=this.PORT_MATCH_TOLERANCE&&Math.abs((port.y??0)-point7.y)<=this.PORT_MATCH_TOLERANCE)return port.pcb_port_id}}},CollectViasStage=class extends ConverterStage{step(){if(!this.ctx.kicadPcb||!this.ctx.k2cMatPcb||!this.ctx.netNumToName)return this.finished=!0,!1;let vias=this.ctx.kicadPcb.vias||[],viaArray=Array.isArray(vias)?vias:[vias];for(let via of viaArray)this.processVia(via);return this.finished=!0,!1}processVia(via){if(!this.ctx.k2cMatPcb||!this.ctx.netNumToName)return;let at3=via.at||{x:0,y:0},pos=applyToPoint(this.ctx.k2cMatPcb,{x:at3.x,y:at3.y}),size3=via.size||.8,drill=via.drill||.4,netNum=via.net||0,netName=this.ctx.netNumToName.get(netNum)||"",fromLayer="top",toLayer="bottom";if(via.layers){let layersArray=Array.isArray(via.layers)?via.layers:via.layers._layers||[];layersArray.length>0&&(fromLayer=this.mapLayer(layersArray[0]),layersArray.length>1&&(toLayer=this.mapLayer(layersArray[layersArray.length-1])))}this.ctx.db.pcb_via.insert({x:pos.x,y:pos.y,outer_diameter:size3,hole_diameter:drill,layers:[fromLayer,toLayer]}),this.ctx.stats&&(this.ctx.stats.vias=(this.ctx.stats.vias||0)+1)}mapLayer(kicadLayer){return kicadLayer?.includes("B.Cu")||kicadLayer?.includes("Back")||kicadLayer?.includes("B_Cu")?"bottom":"top"}},CollectZonesStage=class extends ConverterStage{step(){if(!this.ctx.kicadPcb||!this.ctx.k2cMatPcb||!this.ctx.netNumToName)return this.finished=!0,!1;let zones=this.ctx.kicadPcb.zones||[],zoneArray=Array.isArray(zones)?zones:[zones];for(let zone of zoneArray)this.isZoneFilled(zone)&&this.createCopperPourFromZone(zone);return this.finished=!0,!1}isZoneFilled(zone){if(!zone._rawChildren||!Array.isArray(zone._rawChildren))return!1;let fillEntry=zone._rawChildren.find(child=>Array.isArray(child)&&child[0]==="fill");return fillEntry&&fillEntry[1]==="yes"?!0:zone._rawChildren.some(child=>Array.isArray(child)&&child[0]==="filled_polygon")}createCopperPourFromZone(zone){if(!this.ctx.k2cMatPcb||!this.ctx.netNumToName||!zone._rawChildren||!Array.isArray(zone._rawChildren))return;let zoneData=this.parseZoneData(zone._rawChildren),filledPolygons=this.extractFilledPolygons(zone._rawChildren);if(filledPolygons.length===0){let mainPolygon=this.extractMainPolygon(zone._rawChildren);mainPolygon.length>0&&filledPolygons.push(mainPolygon)}if(filledPolygons.length===0){this.ctx.warnings&&this.ctx.warnings.push(`Zone on layer ${zoneData.layer||"unknown"} has no valid polygon points`);return}let layer=this.mapLayer(zoneData.layer),netNum=zoneData.net||0,netName=this.ctx.netNumToName.get(netNum)||zoneData.netName||"";for(let polygonPoints of filledPolygons){let transformedPoints=polygonPoints.map(point7=>applyToPoint(this.ctx.k2cMatPcb,{x:point7.x,y:point7.y}));this.ctx.db.pcb_copper_pour.insert({layer,net_name:netName,points:transformedPoints,shape:"polygon"}),this.ctx.stats&&(this.ctx.stats.copper_pours=(this.ctx.stats.copper_pours||0)+1)}}parseZoneData(children){let data={};for(let child of children)if(Array.isArray(child))switch(child[0]){case"net":data.net=child[1];break;case"net_name":data.netName=child[1];break;case"layer":data.layer=child[1];break}return data}extractMainPolygon(children){let polygonEntry=children.find(child=>Array.isArray(child)&&child[0]==="polygon");return polygonEntry?this.extractPointsFromPolygonEntry(polygonEntry):[]}extractFilledPolygons(children){let filledPolygonEntries=children.filter(child=>Array.isArray(child)&&child[0]==="filled_polygon"),polygons=[];for(let entry of filledPolygonEntries){let points=this.extractPointsFromPolygonEntry(entry);points.length>0&&polygons.push(points)}return polygons}extractPointsFromPolygonEntry(polygonEntry){let points=[],ptsEntry=polygonEntry.find(child=>Array.isArray(child)&&child[0]==="pts");if(!ptsEntry)return[];for(let i3=1;i3<ptsEntry.length;i3++){let item=ptsEntry[i3];if(Array.isArray(item)&&item[0]==="xy"&&item.length>=3){let x4=item[1],y4=item[2];typeof x4=="number"&&typeof y4=="number"&&points.push({x:x4,y:y4})}}return points}mapLayer(kicadLayer){let layerStr=typeof kicadLayer=="string"?kicadLayer:kicadLayer?.names?.join(" ")||kicadLayer?.name||"";return layerStr.includes("B.Cu")||layerStr.includes("Back")||layerStr.includes("Bottom")?"bottom":"top"}},InitializePcbContextStage=class extends ConverterStage{step(){if(!this.ctx.kicadPcb)return this.finished=!0,!1;let center2=this.calculateBoardCenter();return this.ctx.k2cMatPcb=compose(scale(1,-1),translate(-center2.x,-center2.y)),this.ctx.netNumToName=new Map,this.ctx.netNumToSourceTraceId=new Map,this.ctx.footprintUuidToComponentId=new Map,this.ctx.footprintUuidToSourceComponentId=new Map,this.finished=!0,!1}calculateBoardCenter(){if(!this.ctx.kicadPcb)return{x:0,y:0};let lines=this.ctx.kicadPcb.graphicLines||[],edgeCutLines=(Array.isArray(lines)?lines:[lines]).filter(line2=>{let layer=line2.layer;return(typeof layer=="string"?[layer]:layer?.names||[]).join(" ").includes("Edge.Cuts")});if(edgeCutLines.length===0)return{x:0,y:0};let xs3=[],ys3=[];for(let line2 of edgeCutLines)line2.start&&(xs3.push(line2.start.x),ys3.push(line2.start.y)),line2.end&&(xs3.push(line2.end.x),ys3.push(line2.end.y));if(xs3.length===0||ys3.length===0)return{x:0,y:0};let minX=Math.min(...xs3),maxX=Math.max(...xs3),minY=Math.min(...ys3),maxY=Math.max(...ys3);return{x:(minX+maxX)/2,y:(minY+maxY)/2}}};function rotationToDirection(rotation5){let normalized=(rotation5%360+360)%360;return normalized>=315||normalized<45?"up":normalized>=45&&normalized<135?"right":normalized>=135&&normalized<225?"down":"left"}function inferSymbolName({libId,reference,rotation:rotation5}){let lower=libId.toLowerCase(),direction2=rotationToDirection(rotation5);if(lower.includes(":r_")||lower.includes(":r")&&reference.startsWith("R"))return`boxresistor_${direction2}`;if(lower.includes(":c_")||lower.includes(":c")&&reference.startsWith("C"))return lower.includes("polarized")||lower.includes("_pol")?`capacitor_${direction2}`:`capacitor_${direction2}`;if(lower.includes(":l_")||lower.includes(":l")&&reference.startsWith("L"))return`inductor_${direction2}`;if(lower.includes(":d_")||lower.includes("diode")||reference.startsWith("D"))return lower.includes("led")?`led_${direction2}`:lower.includes("schottky")?`schottky_diode_${direction2}`:lower.includes("zener")?`zener_diode_${direction2}`:`diode_${direction2}`;if(lower.includes(":q_")||reference.startsWith("Q"))return lower.includes("npn")?`npn_bipolar_transistor_${direction2}`:lower.includes("pnp")?`pnp_bipolar_transistor_${direction2}`:lower.includes("_n_")||lower.includes("nmos")?`n_channel_mosfet_transistor_${direction2}`:lower.includes("_p_")||lower.includes("pmos")?`p_channel_mosfet_transistor_${direction2}`:`npn_bipolar_transistor_${direction2}`;lower.includes("gnd")||lower.includes("ground")||lower.includes("vcc")||lower.includes("vdd")||lower.includes("power")}var CollectLibrarySymbolsStage=class extends ConverterStage{constructor(){super(...arguments);__publicField(this,"processedSymbols",new Set)}step(){if(!this.ctx.kicadSch||!this.ctx.k2cMatSch)return this.finished=!0,!1;let symbols=this.ctx.kicadSch.symbols||[];for(let symbol of symbols){let uuid=symbol.uuid;!uuid||this.processedSymbols.has(uuid)||(this.processSymbol(symbol),this.processedSymbols.add(uuid))}return this.finished=!0,!1}processSymbol(symbol){if(!this.ctx.k2cMatSch)return;let reference=this.getProperty(symbol,"Reference")||"U?",value=this.getProperty(symbol,"Value")||"",libId=symbol.libraryId||"",at3=symbol.at,kicadPos={x:at3?.x??0,y:at3?.y??0},cjPos=applyToPoint(this.ctx.k2cMatSch,kicadPos),rotation5=at3?.angle??0,ftype=this.inferFtype(libId,reference),sourceComponentId=`${libId}_source`;this.ctx.db.source_component.list().find(sc2=>sc2.source_component_id===sourceComponentId)||this.ctx.db.source_component.insert({name:libId||reference,ftype,manufacturer_part_number:value||void 0});let uuid=symbol.uuid;if(!uuid)return;let symbolName=inferSymbolName({libId,reference,rotation:rotation5}),componentId=this.ctx.db.schematic_component.insert({source_component_id:sourceComponentId,center:{x:cjPos.x,y:cjPos.y},size:this.estimateSize(symbol),...symbolName?{symbol_name:symbolName}:{}}).schematic_component_id;this.ctx.symbolUuidToComponentId?.set(uuid,componentId),this.createPorts(symbol,componentId),this.ctx.stats&&(this.ctx.stats.components=(this.ctx.stats.components||0)+1)}getProperty(symbol,propName){return(symbol.properties||[]).find(p4=>p4.key===propName)?.value}inferFtype(libId,reference){let lower=libId.toLowerCase();return lower.includes(":r_")||reference.startsWith("R")?"simple_resistor":lower.includes(":c_")||reference.startsWith("C")?"simple_capacitor":lower.includes(":l_")||reference.startsWith("L")?"simple_inductor":lower.includes(":d_")||reference.startsWith("D")?"simple_diode":lower.includes(":led")||reference.startsWith("LED")?"simple_led":lower.includes(":q_")||reference.startsWith("Q")?"simple_transistor":"simple_chip"}estimateSize(symbol){return{width:1,height:1}}createPorts(symbol,componentId){let libId=symbol.libraryId,libSymbol=this.ctx.kicadSch?.libSymbols?.symbols?.find(ls3=>ls3.libraryId===libId);if(!libSymbol)return;let allPins=[];if(libSymbol.pins&&Array.isArray(libSymbol.pins)&&libSymbol.pins.length>0?allPins.push(...libSymbol.pins):libSymbol.pins&&!Array.isArray(libSymbol.pins)&&allPins.push(libSymbol.pins),libSymbol.subSymbols&&Array.isArray(libSymbol.subSymbols))for(let subSymbol of libSymbol.subSymbols)subSymbol.pins&&Array.isArray(subSymbol.pins)&&subSymbol.pins.length>0?allPins.push(...subSymbol.pins):subSymbol.pins&&!Array.isArray(subSymbol.pins)&&allPins.push(subSymbol.pins);if(allPins.length===0)return;let componentRotation=symbol.at?.angle??0;for(let pin of allPins){let pinAt=pin._sxAt;if(!pinAt)continue;let rotRad=componentRotation*Math.PI/180,cosR=Math.cos(rotRad),sinR=Math.sin(rotRad),rotatedPinPos={x:pinAt.x*cosR-pinAt.y*sinR,y:pinAt.x*sinR+pinAt.y*cosR},scaleFactor=Math.abs(this.ctx.k2cMatSch?.a||1/15),relativePos={x:rotatedPinPos.x*scaleFactor,y:-rotatedPinPos.y*scaleFactor};this.ctx.db.schematic_port.insert({schematic_component_id:componentId,center:relativePos,facing_direction:this.inferPinDirection(pin,componentRotation),pin_number:pin._sxNumber?.value??pin.pinNumber??void 0})}}inferPinDirection(pin,componentRotation){let totalAngle=(pin.at?.angle??0)+componentRotation;return rotationToDirection(totalAngle)}},CollectSchematicTracesStage=class extends ConverterStage{step(){if(!this.ctx.kicadSch||!this.ctx.k2cMatSch)return this.finished=!0,!1;let wires=this.ctx.kicadSch.wires||[],wireArray=Array.isArray(wires)?wires:[wires];for(let wire of wireArray)this.processWire(wire);let junctions=this.ctx.kicadSch.junctions||[],junctionArray=Array.isArray(junctions)?junctions:[junctions];for(let junction of junctionArray)this.processJunction(junction);return this.finished=!0,!1}processWire(wire){if(!this.ctx.k2cMatSch||!wire.pts)return;let pts=Array.isArray(wire.pts.xy)?wire.pts.xy:[wire.pts.xy];if(pts.length<2)return;let edges=[];for(let i3=0;i3<pts.length-1;i3++){let from=applyToPoint(this.ctx.k2cMatSch,{x:pts[i3].x,y:pts[i3].y}),to3=applyToPoint(this.ctx.k2cMatSch,{x:pts[i3+1].x,y:pts[i3+1].y});edges.push({from,to:to3})}this.ctx.db.schematic_trace.insert({edges}),this.ctx.stats&&(this.ctx.stats.traces=(this.ctx.stats.traces||0)+1)}processJunction(junction){if(!this.ctx.k2cMatSch||!junction.at)return;let pos=applyToPoint(this.ctx.k2cMatSch,{x:junction.at.x,y:junction.at.y});this.ctx.db.schematic_trace.insert({edges:[],junctions:[pos]})}},InitializeSchematicContextStage=class extends ConverterStage{step(){if(!this.ctx.kicadSch)return this.finished=!0,!1;let KICAD_CENTER_X=105,KICAD_CENTER_Y=148.5,kicadCenterX=KICAD_CENTER_X,kicadCenterY=KICAD_CENTER_Y,cjCenterX=0,cjCenterY=0;return this.ctx.k2cMatSch=compose(translate(cjCenterX,cjCenterY),scale(1/15,-1/15),translate(-kicadCenterX,-kicadCenterY)),this.ctx.symbolUuidToComponentId=new Map,this.ctx.warnings=this.ctx.warnings||[],this.ctx.stats=this.ctx.stats||{},this.finished=!0,!1}},KicadToCircuitJsonConverter=class{constructor(){__publicField(this,"fsMap",{});__publicField(this,"ctx");__publicField(this,"currentStageIndex",0);__publicField(this,"pipeline")}get currentStage(){return this.pipeline?.[this.currentStageIndex]}addFile(filePath,content){this.fsMap[filePath]=content}_findFileWithExtension(extension){let filesWithExtension=Object.keys(this.fsMap).filter(key=>key.endsWith(extension));if(filesWithExtension.length>1)throw new Error(`Expected 0 or 1 file with extension ${extension}, got ${filesWithExtension.length}. Files: ${filesWithExtension.join(", ")}`);return filesWithExtension[0]??null}initializePipeline(){let pcbFile=this._findFileWithExtension(".kicad_pcb"),schFile=this._findFileWithExtension(".kicad_sch");this.ctx={db:cju_default([]),kicadPcb:pcbFile?parseKicadPcb(this.fsMap[pcbFile]):void 0,kicadSch:schFile?parseKicadSch(this.fsMap[schFile]):void 0,warnings:[],stats:{}},this.pipeline=[],this.ctx.kicadSch&&this.pipeline.push(new InitializeSchematicContextStage(this.ctx),new CollectLibrarySymbolsStage(this.ctx),new CollectSchematicTracesStage(this.ctx)),this.ctx.kicadPcb&&this.pipeline.push(new InitializePcbContextStage(this.ctx),new CollectNetsStage(this.ctx),new CollectFootprintsStage(this.ctx),new CollectSourceTracesStage(this.ctx),new CollectTracesStage(this.ctx),new CollectViasStage(this.ctx),new CollectZonesStage(this.ctx),new CollectGraphicsStage(this.ctx))}step(){return this.pipeline||this.initializePipeline(),this.currentStage?((!this.currentStage.step()||this.currentStage.finished)&&this.currentStageIndex++,this.currentStageIndex<(this.pipeline?.length||0)):!1}runUntilFinished(){this.pipeline||this.initializePipeline();for(let stage of this.pipeline||[])stage.runUntilFinished()}getOutput(){this.ctx||(this.initializePipeline(),this.runUntilFinished());let elements=[],tableNames=["source_component","source_port","source_trace","schematic_component","schematic_port","schematic_trace","schematic_net_label","pcb_component","pcb_port","pcb_smtpad","pcb_plated_hole","pcb_hole","pcb_trace","pcb_via","pcb_copper_pour","pcb_board","pcb_silkscreen_text","pcb_silkscreen_path"];for(let tableName of tableNames){let table=this.ctx.db[tableName];if(table&&typeof table.list=="function"){let items=table.list();items&&Array.isArray(items)&&elements.push(...items)}}return elements}getOutputString(){return JSON.stringify(this.getOutput(),null,2)}getWarnings(){return this.ctx?.warnings||[]}getStats(){return this.ctx?.stats||{}}};var debug13=(0,import_debug23.default)("tsci:eval:import-local-file"),importLocalFile=async(importName,ctx,depth=0)=>{debug13("importLocalFile called with:",{importName});let{fsMap,preSuppliedImports,importStack,currentlyImporting}=ctx,fsPath=resolveFilePathOrThrow(importName,fsMap,void 0,{tsConfig:ctx.tsConfig});if(debug13("fsPath:",fsPath),currentlyImporting.has(fsPath)){let cycleStartIndex=importStack.indexOf(fsPath),cyclePath=cycleStartIndex>=0?importStack.slice(cycleStartIndex).concat(fsPath):[...importStack,fsPath];throw new Error(`Circular dependency detected while importing "${fsPath}". The following import chain forms a cycle:
|
|
870
870
|
|
|
871
|
-
${cyclePath.join(" -> ")}`)}if(!ctx.fsMap[fsPath])throw debug13("fsPath not found in fsMap:",fsPath),new Error(`File "${fsPath}" not found`);let fileContent=fsMap[fsPath];debug13("fileContent:",fileContent?.slice(0,100)),currentlyImporting.add(fsPath),importStack.push(fsPath);try{if(fsPath.endsWith(".json")){let jsonData=JSON.parse(fileContent);preSuppliedImports[fsPath]={__esModule:!0,default:jsonData}}else if(fsPath.endsWith(".kicad_pcb")){let converter=new KicadToCircuitJsonConverter;converter.addFile(fsPath,fileContent),converter.runUntilFinished();let circuitJson=converter.getOutput();preSuppliedImports[fsPath]={__esModule:!0,circuitJson}}else if(isStaticAssetPath2(fsPath)){let staticUrl;if(fileContent==="__STATIC_ASSET__")staticUrl=`${ctx.circuit.platform?.projectBaseUrl??""}/${fsPath.startsWith("./")?fsPath.slice(2):fsPath}`;else if(fileContent.startsWith("blob:"))staticUrl=`${fileContent}#ext=${fsPath.split(".").pop()}`;else{let blob=new Blob([fileContent],{type:fsPath.endsWith(".kicad_mod")?"text/plain":"application/octet-stream"}),ext=fsPath.split(".").pop()?.toLowerCase(),isStepFile=ext==="step"||ext==="stp",blobUrl=URL.createObjectURL(blob);staticUrl=isStepFile?`${blobUrl}#ext=${ext}`:blobUrl}preSuppliedImports[fsPath]={__esModule:!0,default:staticUrl}}else if(fsPath.endsWith(".tsx")||fsPath.endsWith(".ts")){let importNames=getImportsFromCode(fileContent);for(let importName2 of importNames)preSuppliedImports[importName2]||await importEvalPath(importName2,ctx,depth+1,{cwd:dirname(fsPath)});try{let transformedCode=transformWithSucrase(fileContent,fsPath);debug13("evalCompiledJs called with:",{code:transformedCode.slice(0,100),dirname:dirname(fsPath)});let typeExports=getTypeExportsFromCode(fileContent),importRunResult=evalCompiledJs(transformedCode,preSuppliedImports,dirname(fsPath));debug13("importRunResult:",{fsPath,importRunResult});let moduleExports=importRunResult.exports;typeExports.length>0&&(moduleExports.__typeOnlyExports__=typeExports),preSuppliedImports[fsPath]=moduleExports}catch(error2){throw new Error(`Eval compiled js error for "${importName}": ${error2.message}`)}}else if(fsPath.endsWith(".js")||fsPath.endsWith(".mjs")){let importNames=getImportsFromCode(fileContent);for(let importName2 of importNames)preSuppliedImports[importName2]||await importEvalPath(importName2,ctx,depth+1,{cwd:dirname(fsPath)});preSuppliedImports[fsPath]=evalCompiledJs(transformWithSucrase(fileContent,fsPath),preSuppliedImports,dirname(fsPath)).exports}else throw new Error(`Unsupported file extension "${fsPath.split(".").pop()}" for "${fsPath}"`)}finally{importStack.pop(),currentlyImporting.delete(fsPath)}};async function importSnippet(importName,ctx,depth=0){let{preSuppliedImports}=ctx,fullSnippetName=importName.replace("@tsci/","").replace(".","/"),fetchOptions={};ctx.tscircuitSessionToken&&(fetchOptions.headers={Authorization:`Bearer ${ctx.tscircuitSessionToken}`});let{cjs,error:error2}=await globalThis.fetch(`${ctx.cjsRegistryUrl}/${fullSnippetName}`,fetchOptions).then(async res2=>({cjs:await res2.text(),error:null})).catch(e5=>({error:e5,cjs:null}));if(error2){console.error("Error fetching import",importName,error2);return}if(cjs?.startsWith("{"))try{let jsonResponse=JSON.parse(cjs);if(jsonResponse.ok===!1&&jsonResponse.error)throw new Error(`"${importName}" has no files in dist, it may not be built`)}catch(e5){throw e5 instanceof Error&&e5.message.includes("has no files in dist")?e5:new Error(`Error parsing cjs response: ${e5}`)}let importNames=getImportsFromCode(cjs),staticAssetImports=[],otherImports=[];for(let subImportName of importNames)if(!preSuppliedImports[subImportName])if(subImportName.startsWith("./")&&isStaticAssetPath2(subImportName)){let assetPath=subImportName.slice(2),assetUrl=`${ctx.cjsRegistryUrl}/${importName}/${assetPath}`;staticAssetImports.push({subImportName,assetUrl})}else otherImports.push(subImportName);await Promise.all(staticAssetImports.map(async({subImportName,assetUrl})=>{try{let response=await globalThis.fetch(assetUrl,fetchOptions);if(!response.ok)throw new Error(`Failed to fetch asset: ${response.statusText}`);let blob=await response.blob(),extension=subImportName.split(".").pop()||"",blobUrl=`${URL.createObjectURL(blob)}#ext=${extension}`;preSuppliedImports[subImportName]={__esModule:!0,default:blobUrl}}catch(e5){console.error(`Error fetching static asset ${assetUrl}:`,e5),preSuppliedImports[subImportName]={__esModule:!0,default:assetUrl}}}));for(let subImportName of otherImports)preSuppliedImports[subImportName]||await importEvalPath(subImportName,ctx,depth+1);try{preSuppliedImports[importName]=evalCompiledJs(cjs,preSuppliedImports).exports}catch(e5){console.error("Error importing snippet",e5)}}var import_debug24=__toESM(require_browser(),1);function extractBasePackageName(importName){let basePackageName=importName;if(importName.startsWith("@")){let parts=importName.split("/");basePackageName=parts.length>=2?`${parts[0]}/${parts[1]}`:importName}else basePackageName=importName.split("/")[0];return basePackageName}function isPackageDeclaredInPackageJson(packageName,fsMap){let packageJsonContent=fsMap["package.json"];if(!packageJsonContent)return!0;try{let packageJson=JSON.parse(packageJsonContent),dependencies=packageJson.dependencies||{},devDependencies=packageJson.devDependencies||{},peerDependencies=packageJson.peerDependencies||{},basePackageName=extractBasePackageName(packageName);return basePackageName in dependencies||basePackageName in devDependencies||basePackageName in peerDependencies}catch{return!0}}function getNodeModuleDirectory(packageName,fsMap){let nodeModulePath=`node_modules/${extractBasePackageName(packageName)}`;return Object.keys(fsMap).some(path=>path.startsWith(nodeModulePath+"/")||path===nodeModulePath)?nodeModulePath:null}function getPackageJsonEntrypoint(packageName,fsMap){let packageJsonPath=`node_modules/${extractBasePackageName(packageName)}/package.json`,packageJsonContent=fsMap[packageJsonPath];if(!packageJsonContent)return null;try{let packageJson=JSON.parse(packageJsonContent);return packageJson.main||packageJson.module||null}catch{return null}}function isTypeScriptEntrypoint(entrypoint){return entrypoint?entrypoint.endsWith(".ts")||entrypoint.endsWith(".tsx"):!1}function isDistDirEmpty(packageName,fsMap){let distPath=`node_modules/${extractBasePackageName(packageName)}/dist`;return!Object.keys(fsMap).some(path=>path.startsWith(distPath+"/"))}var moduleExtensions=[".js",".jsx",".ts",".tsx",".json"],resolveEntrypointPath=(packageName,entrypoint,fsMap)=>{let entrypointPath=`node_modules/${
|
|
871
|
+
${cyclePath.join(" -> ")}`)}if(!ctx.fsMap[fsPath])throw debug13("fsPath not found in fsMap:",fsPath),new Error(`File "${fsPath}" not found`);let fileContent=fsMap[fsPath];debug13("fileContent:",fileContent?.slice(0,100)),currentlyImporting.add(fsPath),importStack.push(fsPath);try{if(fsPath.endsWith(".json")){let jsonData=JSON.parse(fileContent);preSuppliedImports[fsPath]={__esModule:!0,default:jsonData}}else if(fsPath.endsWith(".kicad_pcb")){let converter=new KicadToCircuitJsonConverter;converter.addFile(fsPath,fileContent),converter.runUntilFinished();let circuitJson=converter.getOutput();preSuppliedImports[fsPath]={__esModule:!0,circuitJson}}else if(isStaticAssetPath2(fsPath)){let staticUrl;if(fileContent==="__STATIC_ASSET__")staticUrl=`${ctx.circuit.platform?.projectBaseUrl??""}/${fsPath.startsWith("./")?fsPath.slice(2):fsPath}`;else if(fileContent.startsWith("blob:"))staticUrl=`${fileContent}#ext=${fsPath.split(".").pop()}`;else{let blob=new Blob([fileContent],{type:fsPath.endsWith(".kicad_mod")?"text/plain":"application/octet-stream"}),ext=fsPath.split(".").pop()?.toLowerCase(),isStepFile=ext==="step"||ext==="stp",blobUrl=URL.createObjectURL(blob);staticUrl=isStepFile?`${blobUrl}#ext=${ext}`:blobUrl}preSuppliedImports[fsPath]={__esModule:!0,default:staticUrl}}else if(fsPath.endsWith(".tsx")||fsPath.endsWith(".ts")){let importNames=getImportsFromCode(fileContent);for(let importName2 of importNames)preSuppliedImports[importName2]||await importEvalPath(importName2,ctx,depth+1,{cwd:dirname(fsPath)});try{let transformedCode=transformWithSucrase(fileContent,fsPath);debug13("evalCompiledJs called with:",{code:transformedCode.slice(0,100),dirname:dirname(fsPath)});let typeExports=getTypeExportsFromCode(fileContent),importRunResult=evalCompiledJs(transformedCode,preSuppliedImports,dirname(fsPath));debug13("importRunResult:",{fsPath,importRunResult});let moduleExports=importRunResult.exports;typeExports.length>0&&(moduleExports.__typeOnlyExports__=typeExports),preSuppliedImports[fsPath]=moduleExports}catch(error2){throw new Error(`Eval compiled js error for "${importName}": ${error2.message}`)}}else if(fsPath.endsWith(".js")||fsPath.endsWith(".mjs")){let importNames=getImportsFromCode(fileContent);for(let importName2 of importNames)preSuppliedImports[importName2]||await importEvalPath(importName2,ctx,depth+1,{cwd:dirname(fsPath)});preSuppliedImports[fsPath]=evalCompiledJs(transformWithSucrase(fileContent,fsPath),preSuppliedImports,dirname(fsPath)).exports}else throw new Error(`Unsupported file extension "${fsPath.split(".").pop()}" for "${fsPath}"`)}finally{importStack.pop(),currentlyImporting.delete(fsPath)}};async function importSnippet(importName,ctx,depth=0){let{preSuppliedImports}=ctx,fullSnippetName=importName.replace("@tsci/","").replace(".","/"),fetchOptions={};ctx.tscircuitSessionToken&&(fetchOptions.headers={Authorization:`Bearer ${ctx.tscircuitSessionToken}`});let{cjs,error:error2}=await globalThis.fetch(`${ctx.cjsRegistryUrl}/${fullSnippetName}`,fetchOptions).then(async res2=>({cjs:await res2.text(),error:null})).catch(e5=>({error:e5,cjs:null}));if(error2){console.error("Error fetching import",importName,error2);return}if(cjs?.startsWith("{"))try{let jsonResponse=JSON.parse(cjs);if(jsonResponse.ok===!1&&jsonResponse.error)throw new Error(`"${importName}" has no files in dist, it may not be built`)}catch(e5){throw e5 instanceof Error&&e5.message.includes("has no files in dist")?e5:new Error(`Error parsing cjs response: ${e5}`)}let importNames=getImportsFromCode(cjs),staticAssetImports=[],otherImports=[];for(let subImportName of importNames)if(!preSuppliedImports[subImportName])if(subImportName.startsWith("./")&&isStaticAssetPath2(subImportName)){let assetPath=subImportName.slice(2),assetUrl=`${ctx.cjsRegistryUrl}/${importName}/${assetPath}`;staticAssetImports.push({subImportName,assetUrl})}else otherImports.push(subImportName);await Promise.all(staticAssetImports.map(async({subImportName,assetUrl})=>{try{let response=await globalThis.fetch(assetUrl,fetchOptions);if(!response.ok)throw new Error(`Failed to fetch asset: ${response.statusText}`);let blob=await response.blob(),extension=subImportName.split(".").pop()||"",blobUrl=`${URL.createObjectURL(blob)}#ext=${extension}`;preSuppliedImports[subImportName]={__esModule:!0,default:blobUrl}}catch(e5){console.error(`Error fetching static asset ${assetUrl}:`,e5),preSuppliedImports[subImportName]={__esModule:!0,default:assetUrl}}}));for(let subImportName of otherImports)preSuppliedImports[subImportName]||await importEvalPath(subImportName,ctx,depth+1);try{preSuppliedImports[importName]=evalCompiledJs(cjs,preSuppliedImports).exports}catch(e5){console.error("Error importing snippet",e5)}}var import_debug24=__toESM(require_browser(),1);function extractBasePackageName(importName){let basePackageName=importName;if(importName.startsWith("@")){let parts=importName.split("/");basePackageName=parts.length>=2?`${parts[0]}/${parts[1]}`:importName}else basePackageName=importName.split("/")[0];return basePackageName}function isPackageDeclaredInPackageJson(packageName,fsMap){let packageJsonContent=fsMap["package.json"];if(!packageJsonContent)return!0;try{let packageJson=JSON.parse(packageJsonContent),dependencies=packageJson.dependencies||{},devDependencies=packageJson.devDependencies||{},peerDependencies=packageJson.peerDependencies||{},basePackageName=extractBasePackageName(packageName);return basePackageName in dependencies||basePackageName in devDependencies||basePackageName in peerDependencies}catch{return!0}}function getNodeModuleDirectory(packageName,fsMap){let nodeModulePath=`node_modules/${extractBasePackageName(packageName)}`;return Object.keys(fsMap).some(path=>path.startsWith(nodeModulePath+"/")||path===nodeModulePath)?nodeModulePath:null}function getPackageJsonEntrypoint(packageName,fsMap){let packageJsonPath=`node_modules/${extractBasePackageName(packageName)}/package.json`,packageJsonContent=fsMap[packageJsonPath];if(!packageJsonContent)return null;try{let packageJson=JSON.parse(packageJsonContent);return packageJson.main||packageJson.module||null}catch{return null}}function isTypeScriptEntrypoint(entrypoint){return entrypoint?entrypoint.endsWith(".ts")||entrypoint.endsWith(".tsx"):!1}function isDistDirEmpty(packageName,fsMap){let distPath=`node_modules/${extractBasePackageName(packageName)}/dist`;return!Object.keys(fsMap).some(path=>path.startsWith(distPath+"/"))}var moduleExtensions=[".js",".jsx",".ts",".tsx",".json"],resolveEntrypointPath=(packageName,entrypoint,fsMap)=>{let basePackageName=extractBasePackageName(packageName),normalizedEntrypoint=normalizePackageEntrypoint(entrypoint),entrypointPath=`node_modules/${basePackageName}/${normalizedEntrypoint}`;if(fsMap[entrypointPath])return entrypointPath;for(let ext of moduleExtensions){let pathWithExt=entrypointPath.replace(/\.js$|\.jsx$/,"")+ext;if(fsMap[pathWithExt])return pathWithExt}return null};var debug14=(0,import_debug24.default)("tsci:eval:import-node-module"),importNodeModule=async(importName,ctx,depth=0)=>{let{preSuppliedImports,fsMap}=ctx;if(preSuppliedImports[importName])return;let hasPackageJson=!!fsMap["package.json"];if(hasPackageJson&&!isPackageDeclaredInPackageJson(importName,fsMap))throw new Error(`Node module imported but not in package.json "${importName}"
|
|
872
872
|
|
|
873
873
|
${ctx.logger.stringifyLogs()}`);let nodeModuleDir=hasPackageJson?getNodeModuleDirectory(importName,fsMap):null,resolvedNodeModulePath=resolveNodeModule(importName,ctx.fsMap,"");if(hasPackageJson&&resolvedNodeModulePath){if(!nodeModuleDir)throw new Error(`Node module "${importName}" has no files in the node_modules directory
|
|
874
874
|
|