@tscircuit/parts-engine 0.0.17 → 0.0.18

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/index.d.ts CHANGED
@@ -1,25 +1,32 @@
1
- import { PartsEngine } from '@tscircuit/props';
2
1
  import * as zod from 'zod';
2
+ import { PartsEngine } from '@tscircuit/props';
3
3
 
4
- type PlatformFetch = typeof fetch;
4
+ type PlatformFetch = (input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]) => ReturnType<typeof fetch>;
5
5
  type FetchPartCircuitJsonParams = {
6
6
  supplierPartNumber?: string;
7
7
  manufacturerPartNumber?: string;
8
8
  platformFetch?: PlatformFetch;
9
9
  };
10
- type CreateJlcPartsEngineOptions = {
10
+ type EasyEdaProxyConfig = {
11
+ proxyEndpointUrl: string;
12
+ headers?: Record<string, string>;
13
+ };
14
+ type JlcPcbPartsEngineOptions = {
11
15
  platformFetch?: PlatformFetch;
16
+ easyEdaProxyConfig?: EasyEdaProxyConfig;
12
17
  };
13
18
 
14
- declare class JlcPartsEngine implements PartsEngine {
15
- private readonly platformFetch;
16
- constructor(options?: CreateJlcPartsEngineOptions);
19
+ declare class JlcPcbPartsEngine implements PartsEngine {
20
+ private readonly defaultPlatformFetch;
21
+ private readonly easyEdaProxyConfig;
22
+ constructor({ platformFetch: defaultPlatformFetch, easyEdaProxyConfig, }?: JlcPcbPartsEngineOptions);
23
+ private getEasyEdaPlatformFetch;
17
24
  findPart({ sourceComponent, footprinterString, }: Parameters<PartsEngine["findPart"]>[0]): Promise<{
18
25
  jlcpcb: string[];
19
26
  } | {
20
27
  jlcpcb?: undefined;
21
28
  }>;
22
- fetchPartCircuitJson({ supplierPartNumber, manufacturerPartNumber, platformFetch: callPlatformFetch, }: Parameters<NonNullable<PartsEngine["fetchPartCircuitJson"]>>[0]): Promise<({
29
+ fetchPartCircuitJson({ supplierPartNumber, manufacturerPartNumber, platformFetch: platformFetchOverride, }: Parameters<NonNullable<PartsEngine["fetchPartCircuitJson"]>>[0]): Promise<({
23
30
  type: "source_trace";
24
31
  source_trace_id: string;
25
32
  connected_source_port_ids: string[];
@@ -4256,7 +4263,11 @@ declare class JlcPartsEngine implements PartsEngine {
4256
4263
 
4257
4264
  declare const cache: Map<string, any>;
4258
4265
 
4259
- declare const createJlcPartsEngine: (options?: CreateJlcPartsEngineOptions) => PartsEngine;
4260
- declare const jlcPartsEngine: PartsEngine;
4266
+ declare const getFetchWithEasyEdaProxy: ({ platformFetch: upstreamFetch, easyEdaProxyConfig, }: {
4267
+ platformFetch: PlatformFetch;
4268
+ easyEdaProxyConfig: EasyEdaProxyConfig;
4269
+ }) => PlatformFetch;
4270
+
4271
+ declare const jlcPartsEngine: JlcPcbPartsEngine;
4261
4272
 
4262
- export { type CreateJlcPartsEngineOptions, type FetchPartCircuitJsonParams, JlcPartsEngine, type PlatformFetch, cache, createJlcPartsEngine, jlcPartsEngine };
4273
+ export { type EasyEdaProxyConfig, type FetchPartCircuitJsonParams, JlcPcbPartsEngine, type JlcPcbPartsEngineOptions, type PlatformFetch, cache, getFetchWithEasyEdaProxy, jlcPartsEngine };
package/dist/index.js CHANGED
@@ -10432,6 +10432,91 @@ var getJlcpcbPackageName = (footprint) => {
10432
10432
  return getJlcPackageFromFootprinterString(footprint);
10433
10433
  };
10434
10434
 
10435
+ // lib/jlc-parts-engine/getFetchWithEasyEdaProxy.ts
10436
+ var EASYEDA_API_ORIGIN = "https://easyeda.com";
10437
+ var METHODS_WITHOUT_BODY = /* @__PURE__ */ new Set(["GET", "HEAD"]);
10438
+ var getRequestUrl = (requestInput) => {
10439
+ if (typeof requestInput === "string") return requestInput;
10440
+ if (requestInput instanceof URL) return requestInput.toString();
10441
+ return requestInput.url;
10442
+ };
10443
+ var createMergedTargetRequest = (requestInput, requestInit) => {
10444
+ if (requestInput instanceof URL) {
10445
+ return new Request(requestInput.toString(), requestInit);
10446
+ }
10447
+ if (typeof requestInput === "string") {
10448
+ return new Request(requestInput, requestInit);
10449
+ }
10450
+ return new Request(requestInput, requestInit);
10451
+ };
10452
+ var isEasyEdaApiRequestUrl = (requestUrl) => requestUrl.startsWith(`${EASYEDA_API_ORIGIN}/api/`);
10453
+ var getFetchWithEasyEdaProxy = ({
10454
+ platformFetch: upstreamFetch,
10455
+ easyEdaProxyConfig
10456
+ }) => {
10457
+ return async (requestInput, requestInit) => {
10458
+ const targetRequestUrl = getRequestUrl(requestInput);
10459
+ if (!isEasyEdaApiRequestUrl(targetRequestUrl)) {
10460
+ return upstreamFetch(requestInput, requestInit);
10461
+ }
10462
+ const mergedTargetRequest = createMergedTargetRequest(
10463
+ requestInput,
10464
+ requestInit
10465
+ );
10466
+ const targetRequestHeaders = new Headers(mergedTargetRequest.headers);
10467
+ const proxyRequestHeaders = new Headers(targetRequestHeaders);
10468
+ proxyRequestHeaders.delete("origin");
10469
+ proxyRequestHeaders.delete("authority");
10470
+ proxyRequestHeaders.delete("host");
10471
+ proxyRequestHeaders.delete("referer");
10472
+ proxyRequestHeaders.delete("user-agent");
10473
+ proxyRequestHeaders.delete("cookie");
10474
+ proxyRequestHeaders.set("X-Target-Url", targetRequestUrl);
10475
+ proxyRequestHeaders.set(
10476
+ "X-Sender-Origin",
10477
+ targetRequestHeaders.get("origin") ?? ""
10478
+ );
10479
+ proxyRequestHeaders.set(
10480
+ "X-Sender-Host",
10481
+ targetRequestHeaders.get("host") ?? EASYEDA_API_ORIGIN
10482
+ );
10483
+ proxyRequestHeaders.set(
10484
+ "X-Sender-Referer",
10485
+ targetRequestHeaders.get("referer") ?? ""
10486
+ );
10487
+ proxyRequestHeaders.set(
10488
+ "X-Sender-User-Agent",
10489
+ targetRequestHeaders.get("user-agent") ?? ""
10490
+ );
10491
+ proxyRequestHeaders.set(
10492
+ "X-Sender-Cookie",
10493
+ targetRequestHeaders.get("cookie") ?? ""
10494
+ );
10495
+ proxyRequestHeaders.set(
10496
+ "authority",
10497
+ targetRequestHeaders.get("authority") ?? targetRequestHeaders.get("host") ?? ""
10498
+ );
10499
+ proxyRequestHeaders.set(
10500
+ "content-type",
10501
+ targetRequestHeaders.get("content-type") ?? ""
10502
+ );
10503
+ for (const [name, value] of Object.entries(
10504
+ easyEdaProxyConfig.headers ?? {}
10505
+ )) {
10506
+ proxyRequestHeaders.set(name, value);
10507
+ }
10508
+ const proxyRequestBody = METHODS_WITHOUT_BODY.has(
10509
+ mergedTargetRequest.method
10510
+ ) ? void 0 : await mergedTargetRequest.clone().arrayBuffer();
10511
+ return upstreamFetch(easyEdaProxyConfig.proxyEndpointUrl, {
10512
+ method: mergedTargetRequest.method,
10513
+ headers: proxyRequestHeaders,
10514
+ body: proxyRequestBody,
10515
+ signal: requestInit?.signal
10516
+ });
10517
+ };
10518
+ };
10519
+
10435
10520
  // lib/jlc-parts-engine/jlc-parts-cache.ts
10436
10521
  var cache = /* @__PURE__ */ new Map();
10437
10522
  var getJlcPartsCached = async (name, params) => {
@@ -10457,10 +10542,25 @@ var withBasicPartPreference = (parts) => {
10457
10542
  };
10458
10543
 
10459
10544
  // lib/jlc-parts-engine/JlcPartsEngine.ts
10460
- var JlcPartsEngine = class {
10461
- platformFetch;
10462
- constructor(options = {}) {
10463
- this.platformFetch = options.platformFetch;
10545
+ var JlcPcbPartsEngine = class {
10546
+ defaultPlatformFetch;
10547
+ easyEdaProxyConfig;
10548
+ constructor({
10549
+ platformFetch: defaultPlatformFetch,
10550
+ easyEdaProxyConfig
10551
+ } = {}) {
10552
+ this.defaultPlatformFetch = defaultPlatformFetch;
10553
+ this.easyEdaProxyConfig = easyEdaProxyConfig;
10554
+ }
10555
+ getEasyEdaPlatformFetch(platformFetchOverride) {
10556
+ const resolvedPlatformFetch = platformFetchOverride ?? this.defaultPlatformFetch ?? globalThis.fetch;
10557
+ if (!this.easyEdaProxyConfig) {
10558
+ return resolvedPlatformFetch;
10559
+ }
10560
+ return getFetchWithEasyEdaProxy({
10561
+ platformFetch: resolvedPlatformFetch,
10562
+ easyEdaProxyConfig: this.easyEdaProxyConfig
10563
+ });
10464
10564
  }
10465
10565
  async findPart({
10466
10566
  sourceComponent,
@@ -10613,32 +10713,36 @@ var JlcPartsEngine = class {
10613
10713
  async fetchPartCircuitJson({
10614
10714
  supplierPartNumber,
10615
10715
  manufacturerPartNumber,
10616
- platformFetch: callPlatformFetch
10716
+ platformFetch: platformFetchOverride
10617
10717
  }) {
10618
- const easyEdaFetch = callPlatformFetch ?? this.platformFetch ?? globalThis.fetch;
10619
- let resolvedPartNumber = supplierPartNumber;
10620
- if (!resolvedPartNumber && manufacturerPartNumber) {
10718
+ const easyEdaPlatformFetch = this.getEasyEdaPlatformFetch(
10719
+ platformFetchOverride
10720
+ );
10721
+ let resolvedSupplierPartNumber = supplierPartNumber;
10722
+ if (!resolvedSupplierPartNumber && manufacturerPartNumber) {
10621
10723
  const { components } = await getJlcPartsCached("components", {
10622
10724
  search: manufacturerPartNumber
10623
10725
  });
10624
- resolvedPartNumber = components?.[0] ? `C${components[0].lcsc}` : void 0;
10726
+ resolvedSupplierPartNumber = components?.[0] ? `C${components[0].lcsc}` : void 0;
10625
10727
  }
10626
- if (!resolvedPartNumber) return void 0;
10627
- const rawEasyEdaJson = await fetchEasyEDAComponent(resolvedPartNumber, {
10628
- fetch: easyEdaFetch
10629
- });
10728
+ if (!resolvedSupplierPartNumber) return void 0;
10729
+ const rawEasyEdaJson = await fetchEasyEDAComponent(
10730
+ resolvedSupplierPartNumber,
10731
+ {
10732
+ fetch: easyEdaPlatformFetch
10733
+ }
10734
+ );
10630
10735
  const parsed = EasyEdaJsonSchema.parse(rawEasyEdaJson);
10631
10736
  return convertEasyEdaJsonToCircuitJson(parsed);
10632
10737
  }
10633
10738
  };
10634
10739
 
10635
10740
  // lib/jlc-parts-engine/index.ts
10636
- var createJlcPartsEngine = (options = {}) => new JlcPartsEngine(options);
10637
- var jlcPartsEngine = new JlcPartsEngine();
10741
+ var jlcPartsEngine = new JlcPcbPartsEngine();
10638
10742
  export {
10639
- JlcPartsEngine,
10743
+ JlcPcbPartsEngine,
10640
10744
  cache,
10641
- createJlcPartsEngine,
10745
+ getFetchWithEasyEdaProxy,
10642
10746
  jlcPartsEngine
10643
10747
  };
10644
10748
  //# sourceMappingURL=index.js.map