diff --git a/lib/db/derivedtables/accelerometer.ts b/lib/db/derivedtables/accelerometer.ts index bd67aeb..4056ab9 100644 --- a/lib/db/derivedtables/accelerometer.ts +++ b/lib/db/derivedtables/accelerometer.ts @@ -3,6 +3,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Accelerometer extends BaseComponent { + is_extended_promotional: boolean package: string supply_voltage_min: number | null supply_voltage_max: number | null @@ -28,6 +29,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 +104,9 @@ export const accelerometerTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..3310b81 100644 --- a/lib/db/derivedtables/adc.ts +++ b/lib/db/derivedtables/adc.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Adc extends BaseComponent { + is_extended_promotional: boolean // Extra columns package: string resolution_bits: number | null @@ -40,6 +41,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 +117,9 @@ export const adcTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..63654a1 100644 --- a/lib/db/derivedtables/analog_multiplexer.ts +++ b/lib/db/derivedtables/analog_multiplexer.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface AnalogMultiplexer extends BaseComponent { + is_extended_promotional: boolean // Extra columns package: string num_channels: number | null @@ -40,6 +41,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 +146,9 @@ export const analogMultiplexerTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..46f2c30 100644 --- a/lib/db/derivedtables/battery_holder.ts +++ b/lib/db/derivedtables/battery_holder.ts @@ -5,6 +5,7 @@ import { BaseComponent } from "./component-base" import type { KyselyDatabaseInstance } from "../kysely-types" export interface BatteryHolder extends BaseComponent { + is_extended_promotional: boolean package: string connector_type: string | null battery_type: string | null @@ -32,6 +33,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 +76,9 @@ 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.extra && JSON.parse(c.extra).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..fb0b291 100644 --- a/lib/db/derivedtables/bjt_transistor.ts +++ b/lib/db/derivedtables/bjt_transistor.ts @@ -5,6 +5,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { parseAndConvertSiUnit } from "lib/util/parse-and-convert-si-unit" export interface BJTTransistor extends BaseComponent { + is_extended_promotional: boolean package?: string current_gain?: number collector_current?: number @@ -26,6 +27,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 +76,9 @@ 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.extra && JSON.parse(c.extra).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..a08b500 100644 --- a/lib/db/derivedtables/boost_converter.ts +++ b/lib/db/derivedtables/boost_converter.ts @@ -4,6 +4,7 @@ import { BaseComponent } from "./component-base" import type { DerivedTableSpec } from "./types" export interface BoostConverter extends BaseComponent { + is_extended_promotional: boolean package: string input_voltage_min: number | null input_voltage_max: number | null @@ -31,6 +32,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 +119,9 @@ export const boostConverterTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..d14a91a 100644 --- a/lib/db/derivedtables/buck_boost_converter.ts +++ b/lib/db/derivedtables/buck_boost_converter.ts @@ -4,6 +4,7 @@ import { BaseComponent } from "./component-base" import type { DerivedTableSpec } from "./types" export interface BuckBoostConverter extends BaseComponent { + is_extended_promotional: boolean package: string input_voltage_min: number | null input_voltage_max: number | null @@ -32,6 +33,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 +123,9 @@ export const buckBoostConverterTableSpec: DerivedTableSpec = in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..71a658d 100644 --- a/lib/db/derivedtables/capacitor.ts +++ b/lib/db/derivedtables/capacitor.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Capacitor extends BaseComponent { + is_extended_promotional: boolean // Extra columns capacitance_farads: number tolerance_fraction: number @@ -34,6 +35,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 +117,9 @@ export const capacitorTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..27810dc 100644 --- a/lib/db/derivedtables/dac.ts +++ b/lib/db/derivedtables/dac.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Dac extends BaseComponent { + is_extended_promotional: boolean // Extra columns package: string resolution_bits: number | null @@ -38,6 +39,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 +131,9 @@ export const dacTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..0a0e9ce 100644 --- a/lib/db/derivedtables/diode.ts +++ b/lib/db/derivedtables/diode.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Diode extends BaseComponent { + is_extended_promotional: boolean // Extra columns package: string forward_voltage: number | null @@ -40,6 +41,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 +161,9 @@ export const diodeTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..0fde8fd 100644 --- a/lib/db/derivedtables/fpc_connector.ts +++ b/lib/db/derivedtables/fpc_connector.ts @@ -5,6 +5,7 @@ import { BaseComponent } from "./component-base" import type { KyselyDatabaseInstance } from "../kysely-types" export interface FpcConnector extends BaseComponent { + is_extended_promotional: boolean pitch_mm: number | null number_of_contacts: number | null contact_type: string | null @@ -20,6 +21,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 +57,9 @@ 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.extra && JSON.parse(c.extra).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..fc00c4c 100644 --- a/lib/db/derivedtables/fpga.ts +++ b/lib/db/derivedtables/fpga.ts @@ -3,6 +3,7 @@ import type { DerivedTableSpec } from "./types" import { BaseComponent } from "./component-base" export interface FPGA extends BaseComponent { + is_extended_promotional: boolean package: string type: string | null logic_array_blocks: number | null @@ -68,6 +69,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 +101,9 @@ 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.extra && JSON.parse(c.extra).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..277be9d 100644 --- a/lib/db/derivedtables/fuse.ts +++ b/lib/db/derivedtables/fuse.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Fuse extends BaseComponent { + is_extended_promotional: boolean current_rating: number // in Amperes voltage_rating: number // in Volts response_time: string // "fast", "medium", "slow" @@ -25,6 +26,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 +92,9 @@ 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.extra && JSON.parse(c.extra).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..0ad61e4 100644 --- a/lib/db/derivedtables/gas_sensor.ts +++ b/lib/db/derivedtables/gas_sensor.ts @@ -3,6 +3,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface GasSensor extends BaseComponent { + is_extended_promotional: boolean package: string sensor_type: string | null measures_air_quality: boolean @@ -36,6 +37,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 +84,9 @@ export const gasSensorTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..620ffd4 100644 --- a/lib/db/derivedtables/gyroscope.ts +++ b/lib/db/derivedtables/gyroscope.ts @@ -3,6 +3,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Gyroscope extends BaseComponent { + is_extended_promotional: boolean package: string supply_voltage_min: number | null supply_voltage_max: number | null @@ -28,6 +29,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 +108,9 @@ export const gyroscopeTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..6b392de 100644 --- a/lib/db/derivedtables/header.ts +++ b/lib/db/derivedtables/header.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Header extends BaseComponent { + is_extended_promotional: boolean // Extra columns package: string pitch_mm: number @@ -48,6 +49,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 +199,9 @@ export const headerTableSpec: DerivedTableSpec
= { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..9d90d61 100644 --- a/lib/db/derivedtables/io_expander.ts +++ b/lib/db/derivedtables/io_expander.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface IoExpander extends BaseComponent { + is_extended_promotional: boolean // Extra columns package: string num_gpios: number | null @@ -40,6 +41,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 +141,9 @@ export const ioExpanderTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..0ee6b0e 100644 --- a/lib/db/derivedtables/jst_connector.ts +++ b/lib/db/derivedtables/jst_connector.ts @@ -5,6 +5,7 @@ import { BaseComponent } from "./component-base" import type { KyselyDatabaseInstance } from "../kysely-types" export interface JstConnector extends BaseComponent { + is_extended_promotional: boolean package: string pitch_mm: number | null num_rows: number | null @@ -22,6 +23,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 +71,9 @@ 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.extra && JSON.parse(c.extra).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..8566fa1 100644 --- a/lib/db/derivedtables/lcd_display.ts +++ b/lib/db/derivedtables/lcd_display.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface LCDDisplay extends BaseComponent { + is_extended_promotional: boolean package?: string display_size?: string resolution?: string @@ -19,6 +20,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 +66,9 @@ 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.extra && JSON.parse(c.extra).promotional, + ), package: String(c.package || ""), display_size, resolution, diff --git a/lib/db/derivedtables/led.ts b/lib/db/derivedtables/led.ts index f12a12e..30c605f 100644 --- a/lib/db/derivedtables/led.ts +++ b/lib/db/derivedtables/led.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Led extends BaseComponent { + is_extended_promotional: boolean package: string forward_voltage: number | null forward_current: number | null @@ -37,6 +38,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 +167,9 @@ export const ledTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..6b27e6d 100644 --- a/lib/db/derivedtables/led_dot_matrix_display.ts +++ b/lib/db/derivedtables/led_dot_matrix_display.ts @@ -4,6 +4,7 @@ import { BaseComponent } from "./component-base" import { extractMinQPrice } from "lib/util/extract-min-quantity-price" export interface LEDDotMatrixDisplay extends BaseComponent { + is_extended_promotional: boolean package?: string matrix_size?: string color?: string @@ -18,6 +19,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 +59,9 @@ 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.extra && JSON.parse(c.extra).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..4dffd8c 100644 --- a/lib/db/derivedtables/led_driver.ts +++ b/lib/db/derivedtables/led_driver.ts @@ -12,6 +12,7 @@ import { parseIntOrNull } from "lib/util/parse-int-or-null" import { BaseComponent } from "./component-base" export interface LedDriver extends BaseComponent { + is_extended_promotional: boolean // Optional LED driver specific fields package?: string supply_voltage_min?: number @@ -42,6 +43,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 +79,9 @@ 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.extra && JSON.parse(c.extra).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..1248b2c 100644 --- a/lib/db/derivedtables/led_segment_display.ts +++ b/lib/db/derivedtables/led_segment_display.ts @@ -4,6 +4,7 @@ import { BaseComponent } from "./component-base" import { extractMinQPrice } from "lib/util/extract-min-quantity-price" export interface LEDSegmentDisplay extends BaseComponent { + is_extended_promotional: boolean package?: string positions?: string type?: string @@ -21,6 +22,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 +72,9 @@ 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.extra && JSON.parse(c.extra).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..0b57288 100644 --- a/lib/db/derivedtables/led_with_ic.ts +++ b/lib/db/derivedtables/led_with_ic.ts @@ -8,6 +8,7 @@ import { parseAndConvertSiUnit } from "lib/util/parse-and-convert-si-unit" import { extractMinQPrice } from "lib/util/extract-min-quantity-price" export interface LEDWithIC extends BaseComponent { + is_extended_promotional: boolean package?: string forward_voltage: number | null forward_current: number | null @@ -27,6 +28,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 +101,9 @@ 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.extra && JSON.parse(c.extra).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..27feb03 100644 --- a/lib/db/derivedtables/microcontroller.ts +++ b/lib/db/derivedtables/microcontroller.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Microcontroller extends BaseComponent { + is_extended_promotional: boolean // Extra columns package: string cpu_core: string | null @@ -62,6 +63,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 +230,9 @@ export const microcontrollerTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..7c928da 100644 --- a/lib/db/derivedtables/mosfet.ts +++ b/lib/db/derivedtables/mosfet.ts @@ -12,6 +12,7 @@ import { parseIntOrNull } from "lib/util/parse-int-or-null" import { BaseComponent } from "./component-base" export interface Mosfet extends BaseComponent { + is_extended_promotional: boolean package?: string drain_source_voltage?: number continuous_drain_current?: number @@ -35,6 +36,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 +70,9 @@ 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.extra && JSON.parse(c.extra).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..5e3e137 100644 --- a/lib/db/derivedtables/oled_display.ts +++ b/lib/db/derivedtables/oled_display.ts @@ -4,6 +4,7 @@ import { BaseComponent } from "./component-base" import { extractMinQPrice } from "lib/util/extract-min-quantity-price" export interface OLEDDisplay extends BaseComponent { + is_extended_promotional: boolean package?: string protocol?: string display_width?: string @@ -19,6 +20,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 +67,9 @@ 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.extra && JSON.parse(c.extra).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..8a58831 100644 --- a/lib/db/derivedtables/pcie_m2_connector.ts +++ b/lib/db/derivedtables/pcie_m2_connector.ts @@ -3,6 +3,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface PcieM2Connector extends BaseComponent { + is_extended_promotional: boolean key: string | null is_right_angle: boolean } @@ -14,6 +15,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 +51,9 @@ 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.extra && JSON.parse(c.extra).promotional, + ), key, is_right_angle: isRightAngle, attributes: attrs, diff --git a/lib/db/derivedtables/potentiometer.ts b/lib/db/derivedtables/potentiometer.ts index b7c0080..06d9e5b 100644 --- a/lib/db/derivedtables/potentiometer.ts +++ b/lib/db/derivedtables/potentiometer.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Potentiometer extends BaseComponent { + is_extended_promotional: boolean max_resistance: number pin_variant: "two_pin" | "three_pin" package: string @@ -19,6 +20,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 +69,9 @@ export const potentiometerTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..7e0f147 100644 --- a/lib/db/derivedtables/relay.ts +++ b/lib/db/derivedtables/relay.ts @@ -6,6 +6,7 @@ import { BaseComponent } from "./component-base" import type { KyselyDatabaseInstance } from "../kysely-types" export interface Relay extends BaseComponent { + is_extended_promotional: boolean package: string relay_type: string contact_form: string | null @@ -29,6 +30,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 +64,9 @@ 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.extra && JSON.parse(c.extra).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..c7c4a1a 100644 --- a/lib/db/derivedtables/resistor.ts +++ b/lib/db/derivedtables/resistor.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Resistor extends BaseComponent { + is_extended_promotional: boolean resistance: number tolerance_fraction: number power_watts: number @@ -31,6 +32,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 +84,9 @@ export const resistorTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..2b80835 100644 --- a/lib/db/derivedtables/resistor_array.ts +++ b/lib/db/derivedtables/resistor_array.ts @@ -4,6 +4,7 @@ import type { DerivedTableSpec } from "./types" import { BaseComponent } from "./component-base" export interface ResistorArray extends BaseComponent { + is_extended_promotional: boolean package: string resistance: number | null tolerance_fraction: number | null @@ -69,6 +70,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 +126,9 @@ export const resistorArrayTableSpec: DerivedTableSpec = { in_stock: component.stock > 0, is_basic: Boolean(component.basic), is_preferred: Boolean(component.preferred), + is_extended_promotional: Boolean( + component.extra && JSON.parse(component.extra).promotional, + ), package: component.package ?? "", resistance, tolerance_fraction: tolerance, diff --git a/lib/db/derivedtables/switch.ts b/lib/db/derivedtables/switch.ts index 5730306..b4d4a5c 100644 --- a/lib/db/derivedtables/switch.ts +++ b/lib/db/derivedtables/switch.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface Switch extends BaseComponent { + is_extended_promotional: boolean package: string switch_type: string circuit: string | null @@ -37,6 +38,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 +93,9 @@ export const switchTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..5e106ee 100644 --- a/lib/db/derivedtables/usb_c_connector.ts +++ b/lib/db/derivedtables/usb_c_connector.ts @@ -5,6 +5,7 @@ import { BaseComponent } from "./component-base" import type { KyselyDatabaseInstance } from "../kysely-types" export interface UsbCConnector extends BaseComponent { + is_extended_promotional: boolean package: string mounting_style: string | null current_rating_a: number | null @@ -28,6 +29,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 +71,9 @@ 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.extra && JSON.parse(c.extra).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..6d1e386 100644 --- a/lib/db/derivedtables/voltage_regulator.ts +++ b/lib/db/derivedtables/voltage_regulator.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface VoltageRegulator extends BaseComponent { + is_extended_promotional: boolean package: string output_type: "fixed" | "adjustable" | "unknown" output_voltage_min: number | null @@ -43,6 +44,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 +186,9 @@ export const voltageRegulatorTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..d9f7e25 100644 --- a/lib/db/derivedtables/wifi_module.ts +++ b/lib/db/derivedtables/wifi_module.ts @@ -4,6 +4,7 @@ import { extractMinQPrice } from "lib/util/extract-min-quantity-price" import { BaseComponent } from "./component-base" export interface WifiModule extends BaseComponent { + is_extended_promotional: boolean package: string core_processor: string | null antenna_type: string | null @@ -45,6 +46,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 +142,9 @@ export const wifiModuleTableSpec: DerivedTableSpec = { in_stock: c.stock > 0, is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).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..cd23ab6 100644 --- a/lib/db/derivedtables/wire_to_board_connector.ts +++ b/lib/db/derivedtables/wire_to_board_connector.ts @@ -5,6 +5,7 @@ import type { DerivedTableSpec } from "./types" import type { KyselyDatabaseInstance } from "../kysely-types" export interface WireToBoardConnector extends BaseComponent { + is_extended_promotional: boolean package: string pitch_mm: number | null num_rows: number | null @@ -61,6 +62,7 @@ export const wireToBoardConnectorTableSpec: DerivedTableSpec 0), is_basic: Boolean(c.basic), is_preferred: Boolean(c.preferred), + is_extended_promotional: Boolean( + c.extra && JSON.parse(c.extra).promotional, + ), package: String(c.package || ""), pitch_mm: pitchMm, num_rows: numRows, diff --git a/package.json b/package.json index b1295ad..eada228 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "jlcpcb-parts-engine", "module": "index.ts", "devDependencies": { - "@biomejs/biome": "^1.9.4", + "@biomejs/biome": "1.9.4", "@flydotio/dockerfile": "^0.5.9", "@types/bun": "^1.2.19", "@types/react": "^18.3.12", @@ -34,6 +34,7 @@ "dependencies": { "@tscircuit/footprinter": "^0.0.143", "kysely-bun-sqlite": "^0.3.2", + "kysely-d1": "^0.4.0", "react": "^18.3.1", "react-dom": "^18.3.1", "redaxios": "^0.5.1"