From 0c497a00d827a2502f0dbd9b0ba322ad923e6b30 Mon Sep 17 00:00:00 2001 From: sirrodgepodge Date: Sun, 1 Mar 2026 01:56:07 -0500 Subject: [PATCH 1/2] feat: add is_extended_promotional column to all component tables - Add extended_promotional field to Component and VComponent interfaces - Add is_extended_promotional to BaseComponent and all derived table specs - Add is_extended_promotional filter to components list and search API routes - Add Extended Promotional checkbox to components list UI - Add component-extended-promotional-index optimization - Update cf-proxy types and handlers - Update setup-db-optimizations to include new index --- cf-proxy/src/db/types.ts | 18 +++++++++++++ cf-proxy/src/handlers/index.ts | 2 ++ lib/db/derivedtables/accelerometer.ts | 2 ++ lib/db/derivedtables/adc.ts | 2 ++ lib/db/derivedtables/analog_multiplexer.ts | 2 ++ lib/db/derivedtables/battery_holder.ts | 2 ++ lib/db/derivedtables/bjt_transistor.ts | 2 ++ lib/db/derivedtables/boost_converter.ts | 2 ++ lib/db/derivedtables/buck_boost_converter.ts | 2 ++ lib/db/derivedtables/capacitor.ts | 2 ++ lib/db/derivedtables/component-base.ts | 1 + lib/db/derivedtables/dac.ts | 2 ++ lib/db/derivedtables/diode.ts | 2 ++ lib/db/derivedtables/fpc_connector.ts | 2 ++ lib/db/derivedtables/fpga.ts | 2 ++ lib/db/derivedtables/fuse.ts | 2 ++ lib/db/derivedtables/gas_sensor.ts | 2 ++ lib/db/derivedtables/gyroscope.ts | 2 ++ lib/db/derivedtables/header.ts | 2 ++ lib/db/derivedtables/io_expander.ts | 2 ++ lib/db/derivedtables/jst_connector.ts | 2 ++ lib/db/derivedtables/lcd_display.ts | 2 ++ lib/db/derivedtables/led.ts | 2 ++ .../derivedtables/led_dot_matrix_display.ts | 2 ++ lib/db/derivedtables/led_driver.ts | 2 ++ lib/db/derivedtables/led_segment_display.ts | 2 ++ lib/db/derivedtables/led_with_ic.ts | 2 ++ lib/db/derivedtables/microcontroller.ts | 2 ++ lib/db/derivedtables/mosfet.ts | 2 ++ lib/db/derivedtables/oled_display.ts | 2 ++ lib/db/derivedtables/pcie_m2_connector.ts | 2 ++ lib/db/derivedtables/potentiometer.ts | 2 ++ lib/db/derivedtables/relay.ts | 2 ++ lib/db/derivedtables/resistor.ts | 2 ++ lib/db/derivedtables/resistor_array.ts | 2 ++ lib/db/derivedtables/switch.ts | 2 ++ lib/db/derivedtables/usb_c_connector.ts | 2 ++ lib/db/derivedtables/voltage_regulator.ts | 2 ++ lib/db/derivedtables/wifi_module.ts | 2 ++ .../derivedtables/wire_to_board_connector.ts | 2 ++ lib/db/generated/kysely.ts | 20 ++++++++++++++ .../component-extended-promotional-index.ts | 26 +++++++++++++++++++ routes/api/search.tsx | 5 ++++ routes/components/list.tsx | 16 ++++++++++++ scripts/setup-db-optimizations.ts | 2 ++ 45 files changed, 164 insertions(+) create mode 100644 lib/db/optimizations/component-extended-promotional-index.ts diff --git a/cf-proxy/src/db/types.ts b/cf-proxy/src/db/types.ts index d80acef..e6b9e89 100644 --- a/cf-proxy/src/db/types.ts +++ b/cf-proxy/src/db/types.ts @@ -19,6 +19,7 @@ export interface Accelerometer { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated mfr: string | null operating_temp_max: number | null @@ -86,6 +87,7 @@ export interface BatteryHolder { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated mfr: string | null operating_temp_max: number | null @@ -120,6 +122,7 @@ export interface BoostConverter { input_voltage_min: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null is_synchronous: number | null lcsc: Generated mfr: string | null @@ -142,6 +145,7 @@ export interface BuckBoostConverter { input_voltage_min: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null is_synchronous: number | null lcsc: Generated mfr: string | null @@ -166,6 +170,7 @@ export interface Capacitor { is_basic: number | null is_polarized: number | null is_preferred: number | null + is_extended_promotional: number | null is_surface_mount: number | null lcsc: Generated lifetime_hours: number | null @@ -233,6 +238,7 @@ export interface FpcConnector { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated locking_feature: string | null mfr: string | null @@ -249,6 +255,7 @@ export interface Fpga { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated logic_array_blocks: number | null logic_elements: number | null @@ -288,6 +295,7 @@ export interface GasSensor { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated measures_air_quality: number | null measures_carbon_monoxide: number | null @@ -317,6 +325,7 @@ export interface Gyroscope { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated mfr: string | null operating_temp_max: number | null @@ -386,6 +395,7 @@ export interface JstConnector { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated mfr: string | null num_pins: number | null @@ -421,6 +431,7 @@ export interface Ldo { is_basic: number | null is_positive: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated mfr: string | null operating_temp_max: number | null @@ -599,6 +610,7 @@ export interface PcieM2Connector { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null is_right_angle: number | null key: string | null lcsc: Generated @@ -630,6 +642,7 @@ export interface Relay { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated max_switching_current: number | null max_switching_voltage: number | null @@ -649,6 +662,7 @@ export interface Resistor { is_multi_resistor_chip: number | null is_potentiometer: number | null is_preferred: number | null + is_extended_promotional: number | null is_surface_mount: number | null lcsc: Generated max_overload_voltage: number | null @@ -669,6 +683,7 @@ export interface ResistorArray { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null is_surface_mount: number | null lcsc: Generated mfr: string | null @@ -693,6 +708,7 @@ export interface Switch { is_basic: number | null is_latching: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated length_mm: number | null mfr: string | null @@ -717,6 +733,7 @@ export interface UsbCConnector { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null lcsc: Generated mfr: string | null mounting_style: string | null @@ -789,6 +806,7 @@ export interface WireToBoardConnector { in_stock: number | null is_basic: number | null is_preferred: number | null + is_extended_promotional: number | null is_smd: number | null lcsc: Generated mfr: string | null diff --git a/cf-proxy/src/handlers/index.ts b/cf-proxy/src/handlers/index.ts index a5357c5..7088cdd 100644 --- a/cf-proxy/src/handlers/index.ts +++ b/cf-proxy/src/handlers/index.ts @@ -109,6 +109,7 @@ export const TABLE_CONFIGS: Record = { package: { field: "package", type: "string" }, is_basic: { field: "is_basic", type: "boolean" }, is_preferred: { field: "is_preferred", type: "boolean" }, + is_extended_promotional: { field: "is_extended_promotional", type: "boolean" }, resistance: { field: "resistance", type: "number_tolerance" }, }, }, @@ -117,6 +118,7 @@ export const TABLE_CONFIGS: Record = { package: { field: "package", type: "string" }, is_basic: { field: "is_basic", type: "boolean" }, is_preferred: { field: "is_preferred", type: "boolean" }, + is_extended_promotional: { field: "is_extended_promotional", type: "boolean" }, capacitance: { field: "capacitance_farads", type: "number_tolerance" }, }, }, diff --git a/lib/db/derivedtables/accelerometer.ts b/lib/db/derivedtables/accelerometer.ts index bd67aeb..f463ebd 100644 --- a/lib/db/derivedtables/accelerometer.ts +++ b/lib/db/derivedtables/accelerometer.ts @@ -28,6 +28,7 @@ export const accelerometerTableSpec: DerivedTableSpec = { { name: "has_uart", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -102,6 +103,7 @@ export const accelerometerTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", supply_voltage_min: voltageMin, supply_voltage_max: voltageMax, diff --git a/lib/db/derivedtables/adc.ts b/lib/db/derivedtables/adc.ts index 008b533..576e002 100644 --- a/lib/db/derivedtables/adc.ts +++ b/lib/db/derivedtables/adc.ts @@ -40,6 +40,7 @@ export const adcTableSpec: DerivedTableSpec = { { name: "operating_temp_max", type: "real" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -115,6 +116,7 @@ export const adcTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", resolution_bits: resolution, sampling_rate_hz: samplingRate, diff --git a/lib/db/derivedtables/analog_multiplexer.ts b/lib/db/derivedtables/analog_multiplexer.ts index 1e4bb7d..27143dc 100644 --- a/lib/db/derivedtables/analog_multiplexer.ts +++ b/lib/db/derivedtables/analog_multiplexer.ts @@ -40,6 +40,7 @@ export const analogMultiplexerTableSpec: DerivedTableSpec = { { name: "channel_type", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -144,6 +145,7 @@ export const analogMultiplexerTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", num_channels: numChannels, num_bits: numBits, diff --git a/lib/db/derivedtables/battery_holder.ts b/lib/db/derivedtables/battery_holder.ts index c970eee..815b321 100644 --- a/lib/db/derivedtables/battery_holder.ts +++ b/lib/db/derivedtables/battery_holder.ts @@ -32,6 +32,7 @@ export const batteryHolderTableSpec: DerivedTableSpec = { { name: "operating_temp_max", type: "real" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -74,6 +75,7 @@ export const batteryHolderTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), connector_type: attrs["Connector Type"] || null, battery_type: attrs["Battery Type"] || null, diff --git a/lib/db/derivedtables/bjt_transistor.ts b/lib/db/derivedtables/bjt_transistor.ts index ae3a255..67ea935 100644 --- a/lib/db/derivedtables/bjt_transistor.ts +++ b/lib/db/derivedtables/bjt_transistor.ts @@ -26,6 +26,7 @@ export const bjtTransistorTableSpec: DerivedTableSpec = { { name: "temperature_range", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -74,6 +75,7 @@ export const bjtTransistorTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", current_gain: current_gain, collector_current: collector_current, diff --git a/lib/db/derivedtables/boost_converter.ts b/lib/db/derivedtables/boost_converter.ts index da3fad8..2699489 100644 --- a/lib/db/derivedtables/boost_converter.ts +++ b/lib/db/derivedtables/boost_converter.ts @@ -31,6 +31,7 @@ export const boostConverterTableSpec: DerivedTableSpec = { { name: "number_of_outputs", type: "integer" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -117,6 +118,7 @@ export const boostConverterTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", input_voltage_min: inputMin, input_voltage_max: inputMax, diff --git a/lib/db/derivedtables/buck_boost_converter.ts b/lib/db/derivedtables/buck_boost_converter.ts index 784ec02..cec325b 100644 --- a/lib/db/derivedtables/buck_boost_converter.ts +++ b/lib/db/derivedtables/buck_boost_converter.ts @@ -32,6 +32,7 @@ export const buckBoostConverterTableSpec: DerivedTableSpec = { name: "number_of_outputs", type: "integer" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -121,6 +122,7 @@ export const buckBoostConverterTableSpec: DerivedTableSpec = in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", input_voltage_min: inputMin, input_voltage_max: inputMax, diff --git a/lib/db/derivedtables/capacitor.ts b/lib/db/derivedtables/capacitor.ts index 971f055..60b357f 100644 --- a/lib/db/derivedtables/capacitor.ts +++ b/lib/db/derivedtables/capacitor.ts @@ -34,6 +34,7 @@ export const capacitorTableSpec: DerivedTableSpec = { { name: "capacitor_type", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -115,6 +116,7 @@ export const capacitorTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), capacitance_farads: capacitance, tolerance_fraction: tolerance, voltage_rating: voltage, diff --git a/lib/db/derivedtables/component-base.ts b/lib/db/derivedtables/component-base.ts index c028aec..35f2fe6 100644 --- a/lib/db/derivedtables/component-base.ts +++ b/lib/db/derivedtables/component-base.ts @@ -7,5 +7,6 @@ export interface BaseComponent { in_stock: boolean is_basic: boolean is_preferred: boolean + is_extended_promotional: boolean attributes: Record } diff --git a/lib/db/derivedtables/dac.ts b/lib/db/derivedtables/dac.ts index a0388ad..4da2854 100644 --- a/lib/db/derivedtables/dac.ts +++ b/lib/db/derivedtables/dac.ts @@ -38,6 +38,7 @@ export const dacTableSpec: DerivedTableSpec = { { name: "nonlinearity_lsb", type: "real" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -129,6 +130,7 @@ export const dacTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", resolution_bits: resolution, num_channels: numChannels, diff --git a/lib/db/derivedtables/diode.ts b/lib/db/derivedtables/diode.ts index dad2916..40f08c2 100644 --- a/lib/db/derivedtables/diode.ts +++ b/lib/db/derivedtables/diode.ts @@ -40,6 +40,7 @@ export const diodeTableSpec: DerivedTableSpec = { { name: "configuration", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -159,6 +160,7 @@ export const diodeTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", forward_voltage: forwardVoltage, reverse_voltage: reverseVoltage, diff --git a/lib/db/derivedtables/fpc_connector.ts b/lib/db/derivedtables/fpc_connector.ts index ced77e9..c6e3011 100644 --- a/lib/db/derivedtables/fpc_connector.ts +++ b/lib/db/derivedtables/fpc_connector.ts @@ -20,6 +20,7 @@ export const fpcConnectorTableSpec: DerivedTableSpec = { { name: "locking_feature", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -55,6 +56,7 @@ export const fpcConnectorTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), pitch_mm: parseNum(attrs["Pitch"]), number_of_contacts: isNaN(contacts) ? null : contacts, contact_type: attrs["Contact Type"] || null, diff --git a/lib/db/derivedtables/fpga.ts b/lib/db/derivedtables/fpga.ts index e7d0402..d3a43c2 100644 --- a/lib/db/derivedtables/fpga.ts +++ b/lib/db/derivedtables/fpga.ts @@ -68,6 +68,7 @@ export const fpgaTableSpec: DerivedTableSpec = { { name: "logic_gates", type: "real" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -99,6 +100,7 @@ export const fpgaTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock ?? 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: extra?.package ?? c.package ?? "", type: attrs["Type"] ?? null, logic_array_blocks: parseNumericValue(attrs["Logic Array Blocks"]), diff --git a/lib/db/derivedtables/fuse.ts b/lib/db/derivedtables/fuse.ts index 0b56ac1..e49a652 100644 --- a/lib/db/derivedtables/fuse.ts +++ b/lib/db/derivedtables/fuse.ts @@ -25,6 +25,7 @@ export const fuseTableSpec: DerivedTableSpec = { { name: "is_resettable", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -90,6 +91,7 @@ export const fuseTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), current_rating: current_rating as number, voltage_rating: voltage_rating as number, response_time, diff --git a/lib/db/derivedtables/gas_sensor.ts b/lib/db/derivedtables/gas_sensor.ts index a44050b..25843fa 100644 --- a/lib/db/derivedtables/gas_sensor.ts +++ b/lib/db/derivedtables/gas_sensor.ts @@ -36,6 +36,7 @@ export const gasSensorTableSpec: DerivedTableSpec = { { name: "measures_explosive_gases", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db) { return db @@ -82,6 +83,7 @@ export const gasSensorTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", sensor_type: sensorType, measures_air_quality: measuresAirQuality, diff --git a/lib/db/derivedtables/gyroscope.ts b/lib/db/derivedtables/gyroscope.ts index 9671b5d..682e887 100644 --- a/lib/db/derivedtables/gyroscope.ts +++ b/lib/db/derivedtables/gyroscope.ts @@ -28,6 +28,7 @@ export const gyroscopeTableSpec: DerivedTableSpec = { { name: "has_uart", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -106,6 +107,7 @@ export const gyroscopeTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", supply_voltage_min: voltageMin, supply_voltage_max: voltageMax, diff --git a/lib/db/derivedtables/header.ts b/lib/db/derivedtables/header.ts index 04bc7bb..44e0e3c 100644 --- a/lib/db/derivedtables/header.ts +++ b/lib/db/derivedtables/header.ts @@ -48,6 +48,7 @@ export const headerTableSpec: DerivedTableSpec
= { { name: "is_right_angle", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -197,6 +198,7 @@ export const headerTableSpec: DerivedTableSpec
= { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), price1: extractMinQPrice(c.price)!, package: c.package || "", pitch_mm: pitch, diff --git a/lib/db/derivedtables/io_expander.ts b/lib/db/derivedtables/io_expander.ts index e9bf2da..8d74187 100644 --- a/lib/db/derivedtables/io_expander.ts +++ b/lib/db/derivedtables/io_expander.ts @@ -40,6 +40,7 @@ export const ioExpanderTableSpec: DerivedTableSpec = { { name: "source_current_ma", type: "real" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -139,6 +140,7 @@ export const ioExpanderTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", num_gpios: numGpios, supply_voltage_min: voltageMin, diff --git a/lib/db/derivedtables/jst_connector.ts b/lib/db/derivedtables/jst_connector.ts index 0afd2aa..3047873 100644 --- a/lib/db/derivedtables/jst_connector.ts +++ b/lib/db/derivedtables/jst_connector.ts @@ -22,6 +22,7 @@ export const jstConnectorTableSpec: DerivedTableSpec = { { name: "reference_series", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -69,6 +70,7 @@ export const jstConnectorTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), pitch_mm: parseNum(attrs["Pitch"]), num_rows: isNaN(numRows) ? null : numRows, diff --git a/lib/db/derivedtables/lcd_display.ts b/lib/db/derivedtables/lcd_display.ts index 15a34c5..c9a7814 100644 --- a/lib/db/derivedtables/lcd_display.ts +++ b/lib/db/derivedtables/lcd_display.ts @@ -19,6 +19,7 @@ export const lcdDisplayTableSpec: DerivedTableSpec = { { name: "display_type", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -64,6 +65,7 @@ export const lcdDisplayTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), display_size, resolution, diff --git a/lib/db/derivedtables/led.ts b/lib/db/derivedtables/led.ts index f12a12e..f173079 100644 --- a/lib/db/derivedtables/led.ts +++ b/lib/db/derivedtables/led.ts @@ -37,6 +37,7 @@ export const ledTableSpec: DerivedTableSpec = { { name: "is_rgb", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -165,6 +166,7 @@ export const ledTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", forward_voltage: forwardVoltage, forward_current: forwardCurrent, diff --git a/lib/db/derivedtables/led_dot_matrix_display.ts b/lib/db/derivedtables/led_dot_matrix_display.ts index 2d32eda..f15ceb4 100644 --- a/lib/db/derivedtables/led_dot_matrix_display.ts +++ b/lib/db/derivedtables/led_dot_matrix_display.ts @@ -18,6 +18,7 @@ export const ledDotMatrixDisplayTableSpec: DerivedTableSpec { name: "color", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -57,6 +58,7 @@ export const ledDotMatrixDisplayTableSpec: DerivedTableSpec in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), matrix_size, color, diff --git a/lib/db/derivedtables/led_driver.ts b/lib/db/derivedtables/led_driver.ts index 55f0e8c..87c7306 100644 --- a/lib/db/derivedtables/led_driver.ts +++ b/lib/db/derivedtables/led_driver.ts @@ -42,6 +42,7 @@ export const ledDriverTableSpec: DerivedTableSpec = { { name: "mounting_style", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -77,6 +78,7 @@ export const ledDriverTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), supply_voltage_min: parseValue(attrs["Input Voltage"]?.split("~")[0]), supply_voltage_max: parseValue(attrs["Input Voltage"]?.split("~")[1]), diff --git a/lib/db/derivedtables/led_segment_display.ts b/lib/db/derivedtables/led_segment_display.ts index bf5f50e..8b0a3cd 100644 --- a/lib/db/derivedtables/led_segment_display.ts +++ b/lib/db/derivedtables/led_segment_display.ts @@ -21,6 +21,7 @@ export const ledSegmentDisplayTableSpec: DerivedTableSpec = { { name: "color", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { @@ -70,6 +71,7 @@ export const ledSegmentDisplayTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), positions, type, diff --git a/lib/db/derivedtables/led_with_ic.ts b/lib/db/derivedtables/led_with_ic.ts index bba0faa..bade4fd 100644 --- a/lib/db/derivedtables/led_with_ic.ts +++ b/lib/db/derivedtables/led_with_ic.ts @@ -27,6 +27,7 @@ export const ledWithICTableSpec: DerivedTableSpec = { { name: "protocol", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -99,6 +100,7 @@ export const ledWithICTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), forward_voltage: forwardVoltage, forward_current: forwardCurrent, diff --git a/lib/db/derivedtables/microcontroller.ts b/lib/db/derivedtables/microcontroller.ts index 6b7b083..270390e 100644 --- a/lib/db/derivedtables/microcontroller.ts +++ b/lib/db/derivedtables/microcontroller.ts @@ -62,6 +62,7 @@ export const microcontrollerTableSpec: DerivedTableSpec = { { name: "dac_resolution_bits", type: "integer" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -228,6 +229,7 @@ export const microcontrollerTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", cpu_core: cpuCore, cpu_speed_hz: cpuSpeed, diff --git a/lib/db/derivedtables/mosfet.ts b/lib/db/derivedtables/mosfet.ts index 31f5412..ce8cb8d 100644 --- a/lib/db/derivedtables/mosfet.ts +++ b/lib/db/derivedtables/mosfet.ts @@ -35,6 +35,7 @@ export const mosfetTableSpec: DerivedTableSpec = { { name: "mounting_style", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -68,6 +69,7 @@ export const mosfetTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), drain_source_voltage: parseValue( attrs["Drain Source Voltage (Vdss)"], diff --git a/lib/db/derivedtables/oled_display.ts b/lib/db/derivedtables/oled_display.ts index dbabb65..a9e5db0 100644 --- a/lib/db/derivedtables/oled_display.ts +++ b/lib/db/derivedtables/oled_display.ts @@ -19,6 +19,7 @@ export const oledDisplayTableSpec: DerivedTableSpec = { { name: "pixel_resolution", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { @@ -65,6 +66,7 @@ export const oledDisplayTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), protocol: protocol || undefined, display_width, diff --git a/lib/db/derivedtables/pcie_m2_connector.ts b/lib/db/derivedtables/pcie_m2_connector.ts index 0e9bcc1..d423808 100644 --- a/lib/db/derivedtables/pcie_m2_connector.ts +++ b/lib/db/derivedtables/pcie_m2_connector.ts @@ -14,6 +14,7 @@ export const pcieM2ConnectorTableSpec: DerivedTableSpec = { { name: "is_right_angle", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -49,6 +50,7 @@ export const pcieM2ConnectorTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), key, is_right_angle: isRightAngle, attributes: attrs, diff --git a/lib/db/derivedtables/potentiometer.ts b/lib/db/derivedtables/potentiometer.ts index b7c0080..a7c4ecc 100644 --- a/lib/db/derivedtables/potentiometer.ts +++ b/lib/db/derivedtables/potentiometer.ts @@ -19,6 +19,7 @@ export const potentiometerTableSpec: DerivedTableSpec = { { name: "is_surface_mount", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -67,6 +68,7 @@ export const potentiometerTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), max_resistance: maxResistance, pin_variant: pinVariant, package: c.package || "", diff --git a/lib/db/derivedtables/relay.ts b/lib/db/derivedtables/relay.ts index 944a5fe..92abbbf 100644 --- a/lib/db/derivedtables/relay.ts +++ b/lib/db/derivedtables/relay.ts @@ -29,6 +29,7 @@ export const relayTableSpec: DerivedTableSpec = { { name: "pin_number", type: "integer" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -62,6 +63,7 @@ export const relayTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), relay_type: (c as any).subcategory || "", contact_form: attrs["Contact Form"] || null, diff --git a/lib/db/derivedtables/resistor.ts b/lib/db/derivedtables/resistor.ts index b6b437d..a16e09c 100644 --- a/lib/db/derivedtables/resistor.ts +++ b/lib/db/derivedtables/resistor.ts @@ -31,6 +31,7 @@ export const resistorTableSpec: DerivedTableSpec = { { name: "is_multi_resistor_chip", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -82,6 +83,7 @@ export const resistorTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), resistance: resistance, tolerance_fraction: tolerance, power_watts, diff --git a/lib/db/derivedtables/resistor_array.ts b/lib/db/derivedtables/resistor_array.ts index 5521d4d..7753a57 100644 --- a/lib/db/derivedtables/resistor_array.ts +++ b/lib/db/derivedtables/resistor_array.ts @@ -69,6 +69,7 @@ export const resistorArrayTableSpec: DerivedTableSpec = { { name: "is_surface_mount", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -124,6 +125,7 @@ export const resistorArrayTableSpec: DerivedTableSpec = { in_stock: component.stock > 0, is_basic: Boolean(component.basic), is_preferred: Boolean(component.preferred), + is_extended_promotional: Boolean(component.extended_promotional), package: component.package ?? "", resistance, tolerance_fraction: tolerance, diff --git a/lib/db/derivedtables/switch.ts b/lib/db/derivedtables/switch.ts index 5730306..9c3a32d 100644 --- a/lib/db/derivedtables/switch.ts +++ b/lib/db/derivedtables/switch.ts @@ -37,6 +37,7 @@ export const switchTableSpec: DerivedTableSpec = { { name: "switch_height_mm", type: "real" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db) { return db @@ -91,6 +92,7 @@ export const switchTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", switch_type: (c as any).subcategory || "", circuit: attrs["Circuit"] || null, diff --git a/lib/db/derivedtables/usb_c_connector.ts b/lib/db/derivedtables/usb_c_connector.ts index 6d7b317..e9a20b4 100644 --- a/lib/db/derivedtables/usb_c_connector.ts +++ b/lib/db/derivedtables/usb_c_connector.ts @@ -28,6 +28,7 @@ export const usbCConnectorTableSpec: DerivedTableSpec = { { name: "operating_temp_max", type: "real" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -69,6 +70,7 @@ export const usbCConnectorTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), mounting_style: attrs["Mounting Style"] || null, current_rating_a: parseNum(attrs["Current Rating - Power (Max)"]), diff --git a/lib/db/derivedtables/voltage_regulator.ts b/lib/db/derivedtables/voltage_regulator.ts index 86b0f14..1446c46 100644 --- a/lib/db/derivedtables/voltage_regulator.ts +++ b/lib/db/derivedtables/voltage_regulator.ts @@ -43,6 +43,7 @@ export const voltageRegulatorTableSpec: DerivedTableSpec = { { name: "topology", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -184,6 +185,7 @@ export const voltageRegulatorTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", output_type: outputType, output_voltage_min: voltageMin, diff --git a/lib/db/derivedtables/wifi_module.ts b/lib/db/derivedtables/wifi_module.ts index f56be11..ec1a3d2 100644 --- a/lib/db/derivedtables/wifi_module.ts +++ b/lib/db/derivedtables/wifi_module.ts @@ -45,6 +45,7 @@ export const wifiModuleTableSpec: DerivedTableSpec = { { name: "has_pwm", type: "boolean" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -140,6 +141,7 @@ export const wifiModuleTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", core_processor: attrs["Core Processor"] || null, antenna_type: attrs["Antenna Type"] || null, diff --git a/lib/db/derivedtables/wire_to_board_connector.ts b/lib/db/derivedtables/wire_to_board_connector.ts index 48a30a6..9795f35 100644 --- a/lib/db/derivedtables/wire_to_board_connector.ts +++ b/lib/db/derivedtables/wire_to_board_connector.ts @@ -61,6 +61,7 @@ export const wireToBoardConnectorTableSpec: DerivedTableSpec 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), pitch_mm: pitchMm, num_rows: numRows, diff --git a/lib/db/generated/kysely.ts b/lib/db/generated/kysely.ts index 6f300df..9e142ff 100644 --- a/lib/db/generated/kysely.ts +++ b/lib/db/generated/kysely.ts @@ -19,6 +19,7 @@ export interface Accelerometer { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; operating_temp_max: number | null; @@ -86,6 +87,7 @@ export interface BatteryHolder { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; operating_temp_max: number | null; @@ -120,6 +122,7 @@ export interface BoostConverter { input_voltage_min: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; is_synchronous: number | null; lcsc: Generated; mfr: string | null; @@ -142,6 +145,7 @@ export interface BuckBoostConverter { input_voltage_min: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; is_synchronous: number | null; lcsc: Generated; mfr: string | null; @@ -166,6 +170,7 @@ export interface Capacitor { is_basic: number | null; is_polarized: number | null; is_preferred: number | null; + is_extended_promotional: number | null; is_surface_mount: number | null; lcsc: Generated; lifetime_hours: number | null; @@ -190,6 +195,7 @@ export interface Component { category_id: number; datasheet: string; description: string; + extended_promotional: Generated; extra: string | null; flag: Generated; joints: number; @@ -294,6 +300,7 @@ export interface FpcConnector { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; locking_feature: string | null; mfr: string | null; @@ -310,6 +317,7 @@ export interface Fpga { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; logic_array_blocks: number | null; logic_elements: number | null; @@ -349,6 +357,7 @@ export interface GasSensor { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; measures_air_quality: number | null; measures_carbon_monoxide: number | null; @@ -378,6 +387,7 @@ export interface Gyroscope { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; operating_temp_max: number | null; @@ -447,6 +457,7 @@ export interface JstConnector { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; num_pins: number | null; @@ -482,6 +493,7 @@ export interface Ldo { is_basic: number | null; is_positive: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; operating_temp_max: number | null; @@ -665,6 +677,7 @@ export interface PcieM2Connector { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; is_right_angle: number | null; key: string | null; lcsc: Generated; @@ -696,6 +709,7 @@ export interface Relay { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; max_switching_current: number | null; max_switching_voltage: number | null; @@ -715,6 +729,7 @@ export interface Resistor { is_multi_resistor_chip: number | null; is_potentiometer: number | null; is_preferred: number | null; + is_extended_promotional: number | null; is_surface_mount: number | null; lcsc: Generated; max_overload_voltage: number | null; @@ -735,6 +750,7 @@ export interface ResistorArray { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; is_surface_mount: number | null; lcsc: Generated; mfr: string | null; @@ -759,6 +775,7 @@ export interface Switch { is_basic: number | null; is_latching: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; length_mm: number | null; mfr: string | null; @@ -783,6 +800,7 @@ export interface UsbCConnector { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; mounting_style: string | null; @@ -801,6 +819,7 @@ export interface VComponent { category_id: number | null; datasheet: string | null; description: string | null; + extended_promotional: number | null; extra: string | null; joints: number | null; last_on_stock: number | null; @@ -874,6 +893,7 @@ export interface WireToBoardConnector { in_stock: number | null; is_basic: number | null; is_preferred: number | null; + is_extended_promotional: number | null; is_smd: number | null; lcsc: Generated; mfr: string | null; diff --git a/lib/db/optimizations/component-extended-promotional-index.ts b/lib/db/optimizations/component-extended-promotional-index.ts new file mode 100644 index 0000000..50adfb6 --- /dev/null +++ b/lib/db/optimizations/component-extended-promotional-index.ts @@ -0,0 +1,26 @@ +import { sql } from "kysely" +import type { DbOptimizationSpec } from "./types" +import type { KyselyDatabaseInstance } from "../kysely-types" + +export const componentExtendedPromotionalIndex: DbOptimizationSpec = { + name: "idx_components_extended_promotional", + description: + "Index on components.extended_promotional for faster extended promotional component queries", + + async checkIfAdded(db: KyselyDatabaseInstance) { + const result = await sql` + SELECT name FROM sqlite_master + WHERE type='index' AND name=${this.name} + `.execute(db) + + return result.rows.length > 0 + }, + + async execute(db: KyselyDatabaseInstance) { + await db.schema + .createIndex(this.name) + .on("components") + .column("extended_promotional") + .execute() + }, +} diff --git a/routes/api/search.tsx b/routes/api/search.tsx index 9d5d6a3..ffd7f01 100644 --- a/routes/api/search.tsx +++ b/routes/api/search.tsx @@ -26,6 +26,7 @@ export default withWinterSpec({ limit: z.string().optional(), is_basic: z.boolean().optional(), is_preferred: z.boolean().optional(), + is_extended_promotional: z.boolean().optional(), }), jsonResponse: z.any(), } as const)(async (req, ctx) => { @@ -48,6 +49,9 @@ export default withWinterSpec({ if (req.query.is_preferred) { query = query.where("preferred", "=", 1) } + if (req.query.is_extended_promotional) { + query = query.where("extended_promotional", "=", 1) + } if (req.query.q) { const rawSearchTerm = req.query.q.trim() @@ -80,6 +84,7 @@ export default withWinterSpec({ package: c.package, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), description: c.description, stock: c.stock, price: extractSmallQuantityPrice(c.price), diff --git a/routes/components/list.tsx b/routes/components/list.tsx index 8d26b56..33acc58 100644 --- a/routes/components/list.tsx +++ b/routes/components/list.tsx @@ -23,6 +23,7 @@ export default withWinterSpec({ search: z.string().optional(), is_basic: z.boolean().optional(), is_preferred: z.boolean().optional(), + is_extended_promotional: z.boolean().optional(), }), jsonResponse: z.any(), } as const)(async (req, ctx) => { @@ -58,6 +59,9 @@ export default withWinterSpec({ if (req.query.is_preferred) { query = query.where("preferred", "=", 1) } + if (req.query.is_extended_promotional) { + query = query.where(sql.ref("extended_promotional"), "=", 1) + } if (req.query.search) { const search = req.query.search // TypeScript now knows this is defined within this block @@ -82,6 +86,7 @@ export default withWinterSpec({ package: c.package, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean(c.extended_promotional), description: c.description, stock: c.stock, price: extractSmallQuantityPrice(c.price), @@ -126,6 +131,17 @@ export default withWinterSpec({ /> +
+ +
diff --git a/scripts/setup-db-optimizations.ts b/scripts/setup-db-optimizations.ts index 062ed9d..1d8a32f 100644 --- a/scripts/setup-db-optimizations.ts +++ b/scripts/setup-db-optimizations.ts @@ -9,12 +9,14 @@ import { componentSearchFTS } from "lib/db/optimizations/component-search-fts" import { componentPackageIndex } from "lib/db/optimizations/component-indexes" import { componentBasicIndex } from "lib/db/optimizations/component-basic-index" import { componentPreferredIndex } from "lib/db/optimizations/component-preferred-index" +import { componentExtendedPromotionalIndex } from "lib/db/optimizations/component-extended-promotional-index" const OPTIMIZATIONS: DbOptimizationSpec[] = [ componentSearchFTS, componentPackageIndex, componentBasicIndex, componentPreferredIndex, + componentExtendedPromotionalIndex, removeStaleComponents, componentStockIndex, componentInStockColumn, From 14ebbfb906b62a5a699939f7e3d998becf004c02 Mon Sep 17 00:00:00 2001 From: sirrodgepodge Date: Sun, 1 Mar 2026 02:00:16 -0500 Subject: [PATCH 2/2] fix: format with biome --- cf-proxy/src/handlers/index.ts | 10 ++++++++-- lib/db/derivedtables/battery_holder.ts | 2 +- lib/db/derivedtables/bjt_transistor.ts | 2 +- lib/db/derivedtables/boost_converter.ts | 2 +- lib/db/derivedtables/buck_boost_converter.ts | 4 ++-- lib/db/derivedtables/fpc_connector.ts | 2 +- lib/db/derivedtables/fpga.ts | 2 +- lib/db/derivedtables/fuse.ts | 2 +- lib/db/derivedtables/jst_connector.ts | 2 +- lib/db/derivedtables/lcd_display.ts | 2 +- lib/db/derivedtables/led_dot_matrix_display.ts | 4 ++-- lib/db/derivedtables/led_driver.ts | 2 +- lib/db/derivedtables/led_segment_display.ts | 2 +- lib/db/derivedtables/led_with_ic.ts | 2 +- lib/db/derivedtables/mosfet.ts | 2 +- lib/db/derivedtables/oled_display.ts | 2 +- lib/db/derivedtables/relay.ts | 2 +- lib/db/derivedtables/usb_c_connector.ts | 2 +- lib/db/derivedtables/wire_to_board_connector.ts | 4 ++-- 19 files changed, 29 insertions(+), 23 deletions(-) diff --git a/cf-proxy/src/handlers/index.ts b/cf-proxy/src/handlers/index.ts index 7088cdd..2352cc2 100644 --- a/cf-proxy/src/handlers/index.ts +++ b/cf-proxy/src/handlers/index.ts @@ -109,7 +109,10 @@ export const TABLE_CONFIGS: Record = { package: { field: "package", type: "string" }, is_basic: { field: "is_basic", type: "boolean" }, is_preferred: { field: "is_preferred", type: "boolean" }, - is_extended_promotional: { field: "is_extended_promotional", type: "boolean" }, + is_extended_promotional: { + field: "is_extended_promotional", + type: "boolean", + }, resistance: { field: "resistance", type: "number_tolerance" }, }, }, @@ -118,7 +121,10 @@ export const TABLE_CONFIGS: Record = { package: { field: "package", type: "string" }, is_basic: { field: "is_basic", type: "boolean" }, is_preferred: { field: "is_preferred", type: "boolean" }, - is_extended_promotional: { field: "is_extended_promotional", type: "boolean" }, + is_extended_promotional: { + field: "is_extended_promotional", + type: "boolean", + }, capacitance: { field: "capacitance_farads", type: "number_tolerance" }, }, }, diff --git a/lib/db/derivedtables/battery_holder.ts b/lib/db/derivedtables/battery_holder.ts index 815b321..4702a9f 100644 --- a/lib/db/derivedtables/battery_holder.ts +++ b/lib/db/derivedtables/battery_holder.ts @@ -75,7 +75,7 @@ export const batteryHolderTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), connector_type: attrs["Connector Type"] || null, battery_type: attrs["Battery Type"] || null, diff --git a/lib/db/derivedtables/bjt_transistor.ts b/lib/db/derivedtables/bjt_transistor.ts index 67ea935..abf3548 100644 --- a/lib/db/derivedtables/bjt_transistor.ts +++ b/lib/db/derivedtables/bjt_transistor.ts @@ -75,7 +75,7 @@ export const bjtTransistorTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", current_gain: current_gain, collector_current: collector_current, diff --git a/lib/db/derivedtables/boost_converter.ts b/lib/db/derivedtables/boost_converter.ts index 2699489..605b54f 100644 --- a/lib/db/derivedtables/boost_converter.ts +++ b/lib/db/derivedtables/boost_converter.ts @@ -118,7 +118,7 @@ export const boostConverterTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", input_voltage_min: inputMin, input_voltage_max: inputMax, diff --git a/lib/db/derivedtables/buck_boost_converter.ts b/lib/db/derivedtables/buck_boost_converter.ts index cec325b..3ba24b2 100644 --- a/lib/db/derivedtables/buck_boost_converter.ts +++ b/lib/db/derivedtables/buck_boost_converter.ts @@ -32,7 +32,7 @@ export const buckBoostConverterTableSpec: DerivedTableSpec = { name: "number_of_outputs", type: "integer" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, - { name: "is_extended_promotional", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents: (db) => db @@ -122,7 +122,7 @@ export const buckBoostConverterTableSpec: DerivedTableSpec = in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: c.package || "", input_voltage_min: inputMin, input_voltage_max: inputMax, diff --git a/lib/db/derivedtables/fpc_connector.ts b/lib/db/derivedtables/fpc_connector.ts index c6e3011..4412d0f 100644 --- a/lib/db/derivedtables/fpc_connector.ts +++ b/lib/db/derivedtables/fpc_connector.ts @@ -56,7 +56,7 @@ export const fpcConnectorTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), pitch_mm: parseNum(attrs["Pitch"]), number_of_contacts: isNaN(contacts) ? null : contacts, contact_type: attrs["Contact Type"] || null, diff --git a/lib/db/derivedtables/fpga.ts b/lib/db/derivedtables/fpga.ts index d3a43c2..3220c65 100644 --- a/lib/db/derivedtables/fpga.ts +++ b/lib/db/derivedtables/fpga.ts @@ -100,7 +100,7 @@ export const fpgaTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock ?? 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: extra?.package ?? c.package ?? "", type: attrs["Type"] ?? null, logic_array_blocks: parseNumericValue(attrs["Logic Array Blocks"]), diff --git a/lib/db/derivedtables/fuse.ts b/lib/db/derivedtables/fuse.ts index e49a652..77cb8a0 100644 --- a/lib/db/derivedtables/fuse.ts +++ b/lib/db/derivedtables/fuse.ts @@ -91,7 +91,7 @@ export const fuseTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), current_rating: current_rating as number, voltage_rating: voltage_rating as number, response_time, diff --git a/lib/db/derivedtables/jst_connector.ts b/lib/db/derivedtables/jst_connector.ts index 3047873..1531c29 100644 --- a/lib/db/derivedtables/jst_connector.ts +++ b/lib/db/derivedtables/jst_connector.ts @@ -70,7 +70,7 @@ export const jstConnectorTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), pitch_mm: parseNum(attrs["Pitch"]), num_rows: isNaN(numRows) ? null : numRows, diff --git a/lib/db/derivedtables/lcd_display.ts b/lib/db/derivedtables/lcd_display.ts index c9a7814..e34521a 100644 --- a/lib/db/derivedtables/lcd_display.ts +++ b/lib/db/derivedtables/lcd_display.ts @@ -65,7 +65,7 @@ export const lcdDisplayTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), display_size, resolution, diff --git a/lib/db/derivedtables/led_dot_matrix_display.ts b/lib/db/derivedtables/led_dot_matrix_display.ts index f15ceb4..80eab3e 100644 --- a/lib/db/derivedtables/led_dot_matrix_display.ts +++ b/lib/db/derivedtables/led_dot_matrix_display.ts @@ -18,7 +18,7 @@ export const ledDotMatrixDisplayTableSpec: DerivedTableSpec { name: "color", type: "text" }, { name: "is_basic", type: "boolean" }, { name: "is_preferred", type: "boolean" }, - { name: "is_extended_promotional", type: "boolean" }, + { name: "is_extended_promotional", type: "boolean" }, ], listCandidateComponents(db: KyselyDatabaseInstance) { return db @@ -58,7 +58,7 @@ export const ledDotMatrixDisplayTableSpec: DerivedTableSpec in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), matrix_size, color, diff --git a/lib/db/derivedtables/led_driver.ts b/lib/db/derivedtables/led_driver.ts index 87c7306..613a995 100644 --- a/lib/db/derivedtables/led_driver.ts +++ b/lib/db/derivedtables/led_driver.ts @@ -78,7 +78,7 @@ export const ledDriverTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), supply_voltage_min: parseValue(attrs["Input Voltage"]?.split("~")[0]), supply_voltage_max: parseValue(attrs["Input Voltage"]?.split("~")[1]), diff --git a/lib/db/derivedtables/led_segment_display.ts b/lib/db/derivedtables/led_segment_display.ts index 8b0a3cd..f41f399 100644 --- a/lib/db/derivedtables/led_segment_display.ts +++ b/lib/db/derivedtables/led_segment_display.ts @@ -71,7 +71,7 @@ export const ledSegmentDisplayTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), positions, type, diff --git a/lib/db/derivedtables/led_with_ic.ts b/lib/db/derivedtables/led_with_ic.ts index bade4fd..c955011 100644 --- a/lib/db/derivedtables/led_with_ic.ts +++ b/lib/db/derivedtables/led_with_ic.ts @@ -100,7 +100,7 @@ export const ledWithICTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), forward_voltage: forwardVoltage, forward_current: forwardCurrent, diff --git a/lib/db/derivedtables/mosfet.ts b/lib/db/derivedtables/mosfet.ts index ce8cb8d..e67791e 100644 --- a/lib/db/derivedtables/mosfet.ts +++ b/lib/db/derivedtables/mosfet.ts @@ -69,7 +69,7 @@ export const mosfetTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), drain_source_voltage: parseValue( attrs["Drain Source Voltage (Vdss)"], diff --git a/lib/db/derivedtables/oled_display.ts b/lib/db/derivedtables/oled_display.ts index a9e5db0..d51e1ab 100644 --- a/lib/db/derivedtables/oled_display.ts +++ b/lib/db/derivedtables/oled_display.ts @@ -66,7 +66,7 @@ export const oledDisplayTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), protocol: protocol || undefined, display_width, diff --git a/lib/db/derivedtables/relay.ts b/lib/db/derivedtables/relay.ts index 92abbbf..fc023f7 100644 --- a/lib/db/derivedtables/relay.ts +++ b/lib/db/derivedtables/relay.ts @@ -63,7 +63,7 @@ export const relayTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), relay_type: (c as any).subcategory || "", contact_form: attrs["Contact Form"] || null, diff --git a/lib/db/derivedtables/usb_c_connector.ts b/lib/db/derivedtables/usb_c_connector.ts index e9a20b4..c7b1836 100644 --- a/lib/db/derivedtables/usb_c_connector.ts +++ b/lib/db/derivedtables/usb_c_connector.ts @@ -70,7 +70,7 @@ export const usbCConnectorTableSpec: DerivedTableSpec = { in_stock: Boolean((c.stock || 0) > 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), mounting_style: attrs["Mounting Style"] || null, current_rating_a: parseNum(attrs["Current Rating - Power (Max)"]), diff --git a/lib/db/derivedtables/wire_to_board_connector.ts b/lib/db/derivedtables/wire_to_board_connector.ts index 9795f35..9873c6b 100644 --- a/lib/db/derivedtables/wire_to_board_connector.ts +++ b/lib/db/derivedtables/wire_to_board_connector.ts @@ -61,7 +61,7 @@ export const wireToBoardConnectorTableSpec: DerivedTableSpec 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), - is_extended_promotional: Boolean(c.extended_promotional), + is_extended_promotional: Boolean(c.extended_promotional), package: String(c.package || ""), pitch_mm: pitchMm, num_rows: numRows,