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..4702a9f 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..abf3548 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..605b54f 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..5639f81 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..4412d0f 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..3220c65 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..77cb8a0 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..1531c29 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..e34521a 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..f1a413f 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..613a995 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..f41f399 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..c955011 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..e67791e 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..d51e1ab 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..fc023f7 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/types.ts b/lib/db/derivedtables/types.ts index 1410aec..6c5f2f4 100644 --- a/lib/db/derivedtables/types.ts +++ b/lib/db/derivedtables/types.ts @@ -15,6 +15,7 @@ export interface DerivedTableSpec< price1: number | null in_stock: boolean is_basic: boolean + is_extended_promotional: boolean }, > { tableName: string diff --git a/lib/db/derivedtables/usb_c_connector.ts b/lib/db/derivedtables/usb_c_connector.ts index 6d7b317..c7b1836 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..5173fbe 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..2429a1a 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; @@ -39,6 +40,7 @@ export interface Adc { has_spi: number | null; has_uart: number | null; in_stock: number | null; + is_extended_promotional: number | null; is_differential: number | null; lcsc: Generated; mfr: string | null; @@ -63,6 +65,7 @@ export interface AnalogMultiplexer { has_parallel_interface: number | null; has_spi: number | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; leakage_current_na: number | null; mfr: string | null; @@ -86,6 +89,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; @@ -102,6 +106,7 @@ export interface BjtTransistor { current_gain: number | null; description: string | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; package: string | null; @@ -120,6 +125,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 +148,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; @@ -164,6 +171,7 @@ export interface Capacitor { esr_ohms: number | null; in_stock: number | null; is_basic: number | null; + is_extended_promotional: number | null; is_polarized: number | null; is_preferred: number | null; is_surface_mount: number | null; @@ -190,6 +198,7 @@ export interface Component { category_id: number; datasheet: string; description: string; + extended_promotional: Generated; extra: string | null; flag: Generated; joints: number; @@ -247,6 +256,7 @@ export interface Dac { has_parallel_interface: number | null; has_spi: number | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; nonlinearity_lsb: number | null; @@ -271,6 +281,7 @@ export interface Diode { forward_current: number | null; forward_voltage: number | null; in_stock: number | null; + is_extended_promotional: number | null; is_schottky: number | null; is_tvs: number | null; is_zener: number | null; @@ -294,6 +305,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 +322,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; @@ -331,6 +344,7 @@ export interface Fuse { current_rating: number | null; description: string | null; in_stock: number | null; + is_extended_promotional: number | null; is_glass_encased: number | null; is_resettable: number | null; is_surface_mount: number | null; @@ -349,6 +363,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 +393,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; @@ -397,6 +413,7 @@ export interface Header { description: string | null; gender: string | null; in_stock: number | null; + is_extended_promotional: number | null; insulation_height_mm: number | null; is_right_angle: number | null; is_shrouded: number | null; @@ -426,6 +443,7 @@ export interface IoExpander { has_smbus: number | null; has_spi: number | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; num_gpios: number | null; @@ -447,6 +465,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; @@ -464,6 +483,7 @@ export interface LcdDisplay { display_size: string | null; display_type: string | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; package: string | null; @@ -480,6 +500,7 @@ export interface Ldo { input_voltage_max: number | null; input_voltage_min: number | null; is_basic: number | null; + is_extended_promotional: number | null; is_positive: number | null; is_preferred: number | null; lcsc: Generated; @@ -506,6 +527,7 @@ export interface Led { forward_current: number | null; forward_voltage: number | null; in_stock: number | null; + is_extended_promotional: number | null; is_rgb: number | null; lcsc: Generated; lens_color: string | null; @@ -527,6 +549,7 @@ export interface LedDotMatrixDisplay { color: string | null; description: string | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; matrix_size: string | null; mfr: string | null; @@ -542,6 +565,7 @@ export interface LedDriver { dimming_method: string | null; efficiency_percent: number | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; mounting_style: string | null; @@ -561,6 +585,7 @@ export interface LedSegmentDisplay { color: string | null; description: string | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; package: string | null; @@ -578,6 +603,7 @@ export interface LedWithIc { forward_current: number | null; forward_voltage: number | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; mounting_style: string | null; @@ -615,6 +641,7 @@ export interface Microcontroller { has_usb: number | null; has_watchdog: number | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; operating_temp_max: number | null; @@ -634,6 +661,7 @@ export interface Mosfet { drain_source_voltage: number | null; gate_threshold_voltage: number | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; mounting_style: string | null; @@ -650,6 +678,7 @@ export interface OledDisplay { description: string | null; display_width: string | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; package: string | null; @@ -665,6 +694,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; @@ -677,6 +707,7 @@ export interface Potentiometer { attributes: string | null; description: string | null; in_stock: number | null; + is_extended_promotional: number | null; is_surface_mount: number | null; lcsc: Generated; max_resistance: number | null; @@ -696,6 +727,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; @@ -712,6 +744,7 @@ export interface Resistor { description: string | null; in_stock: number | null; is_basic: number | null; + is_extended_promotional: number | null; is_multi_resistor_chip: number | null; is_potentiometer: number | null; is_preferred: number | null; @@ -735,6 +768,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; @@ -757,6 +791,7 @@ export interface Switch { description: string | null; in_stock: number | null; is_basic: number | null; + is_extended_promotional: number | null; is_latching: number | null; is_preferred: number | null; lcsc: Generated; @@ -783,6 +818,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 +837,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; @@ -819,6 +856,7 @@ export interface VoltageRegulator { description: string | null; dropout_voltage: number | null; in_stock: number | null; + is_extended_promotional: number | null; input_voltage_max: number | null; input_voltage_min: number | null; is_low_dropout: number | null; @@ -853,6 +891,7 @@ export interface WifiModule { has_spi: number | null; has_uart: number | null; in_stock: number | null; + is_extended_promotional: number | null; lcsc: Generated; mfr: string | null; operating_temp_max: number | null; @@ -874,6 +913,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,