UNPKG

tesla-title

Version:

Get Tesla vehicles title based on option codes

220 lines (208 loc) 4.36 kB
'use strict' const MODEL_S = [ ['60D', [['BT60', 'DV4W']]], ['60', [['BT60', 'DV2W']]], ['70', [['BT70', 'DV2W']]], ['70D', [['BT70', 'DV4W']]], [ '75', [ ['BTX5', 'DV2W'], ['BTX7', 'DV2W'], ['BTX8', 'DV2W'] ] ], [ '75D', [ ['BTX5', 'DV4W'], ['BTX7', 'DV4W'], ['BTX8', 'DV4W'] ] ], ['P85+', [['PX01']]], [ 'P85', [ ['BT85', 'X024', 'DV2W'], ['PBT85', 'X024', 'DV2W'] ] ], ['85', [['BT85', 'DV2W']]], ['85D', [['BT85', 'DV4W']]], ['P85D', [['P85D'], ['PBT85', 'X024', 'DV4W']]], [ 'P90D', [ ['X024', 'BTX4', 'DV4W'], ['X024', 'PX4D', 'DV4W'] ] ], ['90', [['BTX4', 'DV2W']]], ['90D', [['BTX4', 'DV4W']]], ['P100D', [['BTX6', 'X024', 'DV4W']]], ['100D', [['BTX6', 'DV4W']]], ['Standard Range', [['MTS01'], ['MTS17']]], ['Long Range', [['MTS03'], ['MTS05'], ['MTS10']]], ['Performance', [['MTS04'], ['MTS06'], ['MTS08']]], ['Long Range Plus', [['MTS07']]], ['', [['MTS12'], ['MTS13'], ['MTS18'], ['MTS20']]], ['Plaid', [['MTS11'], ['MTS14'], ['MTS19'], ['MTS21']]], ['Plaid+', [['MTS09']]] ] const MODEL_X = [ [ '75D', [ ['BTX5', 'DV4W'], ['BTX7', 'DV4W'], ['BTX8', 'DV4W'] ] ], [ 'P90D', [ ['X024', 'BTX4', 'DV4W'], ['X024', 'PX4D', 'DV4W'] ] ], ['90D', [['BTX4', 'DV4W']]], ['P100D', [['BTX6', 'X024', 'DV4W']]], ['100D', [['BTX6', 'DV4W']]], ['Standard Range', [['MTX01'], ['MTX17']]], ['Long Range', [['MTX03'], ['MTX10']]], ['Long Range Plus', [['MTX05'], ['MTX07']]], ['Performance', [['MTX04'], ['MTX06'], ['MTX08']]], ['', [['MTX12'], ['MTX13'], ['MTX15'], ['MTX18'], ['MTX20']]], ['Plaid', [['MTX11'], ['MTX14'], ['MTX16'], ['MTX19'], ['MTX21']]], ['Plaid+', [['MTX09']]] ] const MODEL_3 = [ ['', [['MT322'], ['MT351'], ['MT358']]], ['Standard Range', [['MT300']]], [ 'Standard Range Plus', [ ['MT301'], ['MT308'], ['MT309'], ['MT314'], ['MT320'], ['MT327'], ['MT331'], ['MT332'], ['MT333'], ['MT336'], ['MT337'] ] ], ['Mid Range', [['MT305'], ['MT307']]], ['Long Range RWD', [['MT302'], ['MT341'], ['MT334'], ['MT355'], ['MT356']]], [ 'Long Range AWD', [ ['MT303'], ['MT310'], ['MT315'], ['MT316'], ['MT321'], ['MT323'], ['MT324'], ['MT328'], ['MT352'], ['MT354'], ['MT357'] ] ], [ 'Performance', [ ['MT304'], ['MT311'], ['MT317'], ['MT325'], ['MT329'], ['MT339'], ['MT340'], ['MT353'], ['MT360'] ] ] ] const MODEL_Y = [ [ '', [ ['MTY18'], ['MTY19'], ['MTY23'], ['MTY26'], ['MTY32'], ['MTY40'], ['MTY48'] ] ], ['Standard Range', [['MTY01'], ['MTY08'], ['MTY13']]], [ 'Long Range RWD', [['MTY02'], ['MTY29'], ['MTY35'], ['MTY36'], ['MTY46'], ['MTY50']] ], [ 'Long Range AWD', [ ['MTY03'], ['MTY06'], ['MTY07'], ['MTY09'], ['MTY11'], ['MTY14'], ['MTY20'], ['MTY24'], ['MTY27'], ['MTY33'], ['MTY37'], ['MTY41'], ['MTY42'], ['MTY45'], ['MTY47'], ['MTY51'] ] ], [ 'Performance', [ ['MTY04'], ['MTY05'], ['MTY10'], ['MTY12'], ['MTY21'], ['MTY25'], ['MTY28'], ['MTY34'], ['MTY38'] ] ] ] const getCollection = optionCodes => { if (optionCodes.includes('MDLS')) return MODEL_S if (optionCodes.includes('MDLX')) return MODEL_X if (optionCodes.includes('MDL3')) return MODEL_3 if (optionCodes.includes('MDLY')) return MODEL_Y } const fromOptionCodes = ({ onError, ...opts } = {}) => { const { optionCodes } = opts const collection = getCollection(optionCodes) let result collection.find(([title, allConditions]) => { const isMatch = allConditions.some(conditions => conditions.every(optionCode => optionCodes.includes(optionCode)) ) return isMatch && (result = title) }) return result ?? onError?.(opts) } module.exports = fromOptionCodes module.exports.MODEL_S = MODEL_S module.exports.MODEL_X = MODEL_X module.exports.MODEL_3 = MODEL_3 module.exports.MODEL_Y = MODEL_Y