@tscircuit/cli 0.1.1425 → 0.1.1426

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/cli/main.js CHANGED
@@ -100688,7 +100688,7 @@ var import_perfect_cli = __toESM2(require_dist2(), 1);
100688
100688
  // lib/getVersion.ts
100689
100689
  import { createRequire as createRequire2 } from "node:module";
100690
100690
  // package.json
100691
- var version = "0.1.1424";
100691
+ var version = "0.1.1425";
100692
100692
  var package_default = {
100693
100693
  name: "@tscircuit/cli",
100694
100694
  version,
@@ -110190,6 +110190,40 @@ var getEntrypoint = async ({
110190
110190
  }
110191
110191
  };
110192
110192
 
110193
+ // lib/shared/platform-config-utils.ts
110194
+ var mergePlatformConfigs = (...configs) => {
110195
+ const definedConfigs = configs.filter(Boolean);
110196
+ if (definedConfigs.length === 0) {
110197
+ return;
110198
+ }
110199
+ return definedConfigs.reduce((mergedConfig, config) => {
110200
+ return {
110201
+ ...mergedConfig,
110202
+ ...config,
110203
+ footprintLibraryMap: {
110204
+ ...mergedConfig.footprintLibraryMap,
110205
+ ...config.footprintLibraryMap
110206
+ },
110207
+ footprintFileParserMap: {
110208
+ ...mergedConfig.footprintFileParserMap,
110209
+ ...config.footprintFileParserMap
110210
+ },
110211
+ staticFileLoaderMap: {
110212
+ ...mergedConfig.staticFileLoaderMap,
110213
+ ...config.staticFileLoaderMap
110214
+ },
110215
+ autorouterMap: {
110216
+ ...mergedConfig.autorouterMap,
110217
+ ...config.autorouterMap
110218
+ },
110219
+ spiceEngineMap: {
110220
+ ...mergedConfig.spiceEngineMap,
110221
+ ...config.spiceEngineMap
110222
+ }
110223
+ };
110224
+ }, {});
110225
+ };
110226
+
110193
110227
  // lib/site/loadingStateUi.ts
110194
110228
  var loadingStateUi = `
110195
110229
  <div id="loader" class="loading-overlay">
@@ -110509,7 +110543,7 @@ var applyCiBuildOptions = async ({
110509
110543
  if (!options?.ci) {
110510
110544
  return { resolvedOptions: options, handled: false };
110511
110545
  }
110512
- const projectConfig = loadProjectConfig(projectDir);
110546
+ const projectConfig = await loadRuntimeProjectConfig(projectDir);
110513
110547
  const insideBuildCommand = process.env.TSCIRCUIT_INSIDE_BUILD_COMMAND === "1";
110514
110548
  await installProjectDependencies({
110515
110549
  cwd: projectDir,
@@ -113959,17 +113993,45 @@ var findBoardFiles = ({
113959
113993
  } = {}) => {
113960
113994
  const resolvedProjectDir = path37.resolve(projectDir);
113961
113995
  const boardFilePatterns = getBoardFilePatterns(resolvedProjectDir);
113996
+ return findBoardFilesFromPatterns({
113997
+ boardFilePatterns,
113998
+ projectDir: resolvedProjectDir,
113999
+ ignore,
114000
+ filePaths
114001
+ });
114002
+ };
114003
+ var findBoardFilesAsync = async ({
114004
+ projectDir = process.cwd(),
114005
+ ignore = DEFAULT_IGNORED_PATTERNS,
114006
+ filePaths = []
114007
+ } = {}) => {
114008
+ const resolvedProjectDir = path37.resolve(projectDir);
114009
+ const projectConfig = await loadRuntimeProjectConfig(resolvedProjectDir);
114010
+ const boardFilePatterns = projectConfig?.includeBoardFiles?.filter((pattern) => pattern.trim()) ?? [];
114011
+ return findBoardFilesFromPatterns({
114012
+ boardFilePatterns: boardFilePatterns.length > 0 ? boardFilePatterns : DEFAULT_BOARD_FILE_PATTERNS,
114013
+ projectDir: resolvedProjectDir,
114014
+ ignore,
114015
+ filePaths
114016
+ });
114017
+ };
114018
+ var findBoardFilesFromPatterns = ({
114019
+ boardFilePatterns,
114020
+ projectDir,
114021
+ ignore,
114022
+ filePaths
114023
+ }) => {
113962
114024
  const relativeBoardFiles = globbySync(boardFilePatterns, {
113963
- cwd: resolvedProjectDir,
114025
+ cwd: projectDir,
113964
114026
  ignore
113965
114027
  });
113966
- const absoluteBoardFiles = relativeBoardFiles.map((f) => path37.join(resolvedProjectDir, f));
114028
+ const absoluteBoardFiles = relativeBoardFiles.map((f) => path37.join(projectDir, f));
113967
114029
  const boardFileSet = new Set;
113968
114030
  if (filePaths.length > 0) {
113969
114031
  for (const inputPath of filePaths) {
113970
114032
  if (isGlobPattern(inputPath)) {
113971
114033
  const matches = globbySync(inputPath, {
113972
- cwd: resolvedProjectDir,
114034
+ cwd: projectDir,
113973
114035
  ignore,
113974
114036
  absolute: true
113975
114037
  });
@@ -113977,14 +114039,14 @@ var findBoardFiles = ({
113977
114039
  boardFileSet.add(match);
113978
114040
  }
113979
114041
  } else {
113980
- const targetPath = path37.resolve(resolvedProjectDir, inputPath);
114042
+ const targetPath = path37.resolve(projectDir, inputPath);
113981
114043
  if (!fs34.existsSync(targetPath)) {
113982
114044
  continue;
113983
114045
  }
113984
114046
  const stat = fs34.statSync(targetPath);
113985
114047
  if (stat.isDirectory()) {
113986
114048
  const resolvedDir = path37.resolve(targetPath);
113987
- if (isSubPath(resolvedDir, resolvedProjectDir)) {
114049
+ if (isSubPath(resolvedDir, projectDir)) {
113988
114050
  for (const boardFile of absoluteBoardFiles) {
113989
114051
  if (isSubPath(boardFile, resolvedDir)) {
113990
114052
  boardFileSet.add(boardFile);
@@ -114055,14 +114117,15 @@ async function getBuildEntrypoints({
114055
114117
  includeBoardFiles = true
114056
114118
  }) {
114057
114119
  const resolvedRoot = path38.resolve(rootDir);
114058
- const includeBoardFilePatterns = includeBoardFiles ? getBoardFilePatterns(resolvedRoot) : [];
114120
+ const rootProjectConfig = await loadRuntimeProjectConfig(resolvedRoot);
114121
+ const includeBoardFilePatterns = includeBoardFiles ? rootProjectConfig?.includeBoardFiles?.filter((pattern) => pattern.trim()) ?? DEFAULT_BOARD_FILE_PATTERNS : [];
114059
114122
  const buildFromProjectDir = async () => {
114060
- const projectConfig = loadProjectConfig(resolvedRoot);
114123
+ const projectConfig = rootProjectConfig;
114061
114124
  const hasConfiguredIncludeBoardFiles = Boolean(projectConfig?.includeBoardFiles?.some((pattern) => pattern.trim()));
114062
114125
  const resolvedPreviewComponentPath = projectConfig?.previewComponentPath ? path38.resolve(resolvedRoot, projectConfig.previewComponentPath) : undefined;
114063
114126
  const resolvedSiteDefaultComponentPath = projectConfig?.siteDefaultComponentPath ? path38.resolve(resolvedRoot, projectConfig.siteDefaultComponentPath) : undefined;
114064
114127
  if (includeBoardFiles) {
114065
- const files = findBoardFiles({ projectDir: resolvedRoot });
114128
+ const files = await findBoardFilesAsync({ projectDir: resolvedRoot });
114066
114129
  if (files.length > 0) {
114067
114130
  return {
114068
114131
  projectDir: resolvedRoot,
@@ -114108,12 +114171,12 @@ async function getBuildEntrypoints({
114108
114171
  if (fileOrDir) {
114109
114172
  const resolved = path38.resolve(resolvedRoot, fileOrDir);
114110
114173
  if (fs35.existsSync(resolved) && fs35.statSync(resolved).isDirectory()) {
114111
- const projectConfig2 = loadProjectConfig(resolvedRoot);
114174
+ const projectConfig2 = rootProjectConfig;
114112
114175
  const resolvedPreviewComponentPath2 = projectConfig2?.previewComponentPath ? path38.resolve(resolvedRoot, projectConfig2.previewComponentPath) : undefined;
114113
114176
  const resolvedSiteDefaultComponentPath2 = projectConfig2?.siteDefaultComponentPath ? path38.resolve(resolvedRoot, projectConfig2.siteDefaultComponentPath) : undefined;
114114
114177
  if (includeBoardFiles) {
114115
114178
  const hasConfiguredIncludeBoardFiles = Boolean(projectConfig2?.includeBoardFiles?.some((pattern) => pattern.trim()));
114116
- const matchedFiles = findBoardFiles({
114179
+ const matchedFiles = await findBoardFilesAsync({
114117
114180
  projectDir: resolvedRoot
114118
114181
  });
114119
114182
  const circuitFiles = matchedFiles.filter((file) => isSubPath2(file, resolved));
@@ -114152,7 +114215,7 @@ async function getBuildEntrypoints({
114152
114215
  }
114153
114216
  const fileDir = path38.dirname(resolved);
114154
114217
  const projectDir = findProjectRoot(fileDir);
114155
- const projectConfig = loadProjectConfig(projectDir);
114218
+ const projectConfig = await loadRuntimeProjectConfig(projectDir);
114156
114219
  const resolvedPreviewComponentPath = projectConfig?.previewComponentPath ? path38.resolve(projectDir, projectConfig.previewComponentPath) : undefined;
114157
114220
  const resolvedSiteDefaultComponentPath = projectConfig?.siteDefaultComponentPath ? path38.resolve(projectDir, projectConfig.siteDefaultComponentPath) : undefined;
114158
114221
  return {
@@ -115018,7 +115081,7 @@ var registerBuild = (program2) => {
115018
115081
  } else {
115019
115082
  projectDir = resolvedRoot;
115020
115083
  }
115021
- const projectConfig = loadProjectConfig(projectDir);
115084
+ const projectConfig = await loadRuntimeProjectConfig(projectDir);
115022
115085
  const { options: optionsWithConfig, configAppliedOpts } = resolveBuildOptions({
115023
115086
  cliOptions: options,
115024
115087
  projectConfig
@@ -115042,7 +115105,7 @@ var registerBuild = (program2) => {
115042
115105
  } = await getBuildEntrypoints({
115043
115106
  fileOrDir: fileOrDirForBuild
115044
115107
  });
115045
- const platformConfig = (() => {
115108
+ const commandPlatformConfig = (() => {
115046
115109
  if (!resolvedOptions?.disablePcb && !resolvedOptions?.routingDisabled && !resolvedOptions?.disablePartsEngine) {
115047
115110
  return;
115048
115111
  }
@@ -115058,6 +115121,7 @@ var registerBuild = (program2) => {
115058
115121
  }
115059
115122
  return config;
115060
115123
  })();
115124
+ const platformConfig = mergePlatformConfigs(projectConfig?.platformConfig, commandPlatformConfig);
115061
115125
  const distDir = path42.join(projectDir, "dist");
115062
115126
  fs39.mkdirSync(distDir, { recursive: true });
115063
115127
  const concurrencyValue = Math.max(1, Number.parseInt(resolvedOptions?.concurrency || "1", 10));
@@ -115399,9 +115463,8 @@ var registerBuild = (program2) => {
115399
115463
  fileOrDir: file,
115400
115464
  includeBoardFiles: false
115401
115465
  });
115402
- const projectConfig2 = loadProjectConfig(projectDir);
115403
- const entryFile = projectConfig2?.kicadLibraryEntrypointPath != null ? await getEntrypoint({
115404
- filePath: projectConfig2.kicadLibraryEntrypointPath,
115466
+ const entryFile = projectConfig?.kicadLibraryEntrypointPath != null ? await getEntrypoint({
115467
+ filePath: projectConfig.kicadLibraryEntrypointPath,
115405
115468
  projectDir
115406
115469
  }) : kicadEntrypoint;
115407
115470
  if (!entryFile) {
@@ -115433,9 +115496,8 @@ var registerBuild = (program2) => {
115433
115496
  fileOrDir: file,
115434
115497
  includeBoardFiles: false
115435
115498
  });
115436
- const projectConfig2 = loadProjectConfig(projectDir);
115437
- const entryFile = projectConfig2?.kicadLibraryEntrypointPath != null ? await getEntrypoint({
115438
- filePath: projectConfig2.kicadLibraryEntrypointPath,
115499
+ const entryFile = projectConfig?.kicadLibraryEntrypointPath != null ? await getEntrypoint({
115500
+ filePath: projectConfig.kicadLibraryEntrypointPath,
115439
115501
  projectDir
115440
115502
  }) : kicadEntrypoint;
115441
115503
  if (!entryFile) {
@@ -254841,7 +254903,9 @@ import { promises as fs57 } from "node:fs";
254841
254903
  var registerExport = (program2) => {
254842
254904
  program2.command("export").description("Export tscircuit code to various formats").argument("<file>", "Path to the package file").option("-f, --format <format>", `Output format (${ALLOWED_EXPORT_FORMATS.join(", ")})`).option("-o, --output <path>", "Output file path").option("--disable-parts-engine", "Disable the parts engine").option("--show-courtyards", "Show courtyard outlines in PCB SVG output").action(async (file, options) => {
254843
254905
  const formatOption = options.format ?? "json";
254844
- const platformConfig2 = options.disablePartsEngine === true ? { partsEngineDisabled: true } : undefined;
254906
+ const projectConfig2 = await loadRuntimeProjectConfig(process.cwd());
254907
+ const commandPlatformConfig = options.disablePartsEngine === true ? { partsEngineDisabled: true } : undefined;
254908
+ const platformConfig2 = mergePlatformConfigs(projectConfig2?.platformConfig, commandPlatformConfig);
254845
254909
  if (formatOption === "spice") {
254846
254910
  const { circuitJson } = await generateCircuitJson({
254847
254911
  filePath: file,
@@ -275795,7 +275859,9 @@ var resultToTable = (result) => {
275795
275859
  var registerSimulate = (program3) => {
275796
275860
  const simulateCommand = program3.command("simulate").description("Run a simulation");
275797
275861
  simulateCommand.command("analog").description("Run an analog SPICE simulation").argument("<file>", "Path to tscircuit tsx or circuit json file").option("--disable-parts-engine", "Disable the parts engine").action(async (file, options) => {
275798
- const platformConfig2 = options.disablePartsEngine === true ? { partsEngineDisabled: true } : undefined;
275862
+ const projectConfig2 = await loadRuntimeProjectConfig(process.cwd());
275863
+ const commandPlatformConfig = options.disablePartsEngine === true ? { partsEngineDisabled: true } : undefined;
275864
+ const platformConfig2 = mergePlatformConfigs(projectConfig2?.platformConfig, commandPlatformConfig);
275799
275865
  const { circuitJson } = await generateCircuitJson({
275800
275866
  filePath: file,
275801
275867
  saveToFile: false,
package/dist/lib/index.js CHANGED
@@ -65733,7 +65733,7 @@ var getNodeHandler = (winterSpec, { port, middleware = [] }) => {
65733
65733
  }));
65734
65734
  };
65735
65735
  // package.json
65736
- var version = "0.1.1424";
65736
+ var version = "0.1.1425";
65737
65737
  var package_default = {
65738
65738
  name: "@tscircuit/cli",
65739
65739
  version,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tscircuit/cli",
3
- "version": "0.1.1425",
3
+ "version": "0.1.1426",
4
4
  "main": "dist/cli/main.js",
5
5
  "exports": {
6
6
  ".": "./dist/cli/main.js",
@@ -19,7 +19,7 @@
19
19
  "@tscircuit/krt-wasm": "^0.1.0",
20
20
  "@tscircuit/math-utils": "0.0.36",
21
21
  "@tscircuit/props": "^0.0.536",
22
- "@tscircuit/runframe": "^0.0.2021",
22
+ "@tscircuit/runframe": "^0.0.2022",
23
23
  "@tscircuit/schematic-match-adapt": "^0.0.22",
24
24
  "@types/bun": "^1.2.2",
25
25
  "@types/configstore": "^6.0.2",