From 3df91b651a5dc8bb4d3e40616cf9c4c84054bee5 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Wed, 20 Dec 2023 18:08:00 +0100 Subject: [PATCH] ci: use browserless instead of reachable-url It seems Tesla URLs has akami protection --- package.json | 9 +- test/model-3.js | 26 +- test/snapshots/model-3.js.md | 1360 ++++++++++++++++++++++++++++++++ test/snapshots/model-3.js.snap | Bin 1939 -> 3522 bytes test/util.js | 29 +- 5 files changed, 1400 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 869562f..4564d66 100644 --- a/package.json +++ b/package.json @@ -43,14 +43,12 @@ "visualization", "viz" ], - "dependencies": { - "reachable-url": "~1.7.0" - }, "devDependencies": { "@commitlint/cli": "latest", "@commitlint/config-conventional": "latest", "@ksmithut/prettier-standard": "latest", - "ava": "latest", + "ava": "5", + "browserless": "latest", "c8": "latest", "ci-publish": "latest", "conventional-github-releaser": "latest", @@ -59,6 +57,9 @@ "nano-staged": "latest", "npm-check-updates": "latest", "p-map": "4", + "puppeteer": "latest", + "reachable-url": "latest", + "signal-exit": "latest", "simple-git-hooks": "latest", "standard": "latest", "standard-markdown": "latest", diff --git a/test/model-3.js b/test/model-3.js index 7c6b26d..dc41fc0 100644 --- a/test/model-3.js +++ b/test/model-3.js @@ -543,20 +543,22 @@ test('Model 3 2021', async t => { t.snapshot(photos) }) -test('Model 3 Higland', async t => { - const optionCodes = [] +const combinations = [] - for (const interior of ['IPB2', 'IPB3', 'IPW2', 'IPW3']) { - for (const wheel of ['W38A', 'W39S']) { - for (const color of ['PPSW', 'PBSB', 'PPSB', 'PN01', 'PR01']) { - for (const chasis of ['MT351', 'MT352']) { - optionCodes.push([chasis, interior, wheel, color]) - } +for (const interior of ['IPB2', 'IPB3', 'IPW2', 'IPW3']) { + for (const wheel of ['W38A', 'W39S']) { + for (const color of ['PPSW', 'PBSB', 'PPSB', 'PN01', 'PR01']) { + for (const chasis of ['MT351', 'MT352']) { + combinations.push([chasis, interior, wheel, color]) } } } +} - const photos = optionCodes.flatMap(optionCodes => teslaImages({ modelLetter: 3, optionCodes })) - t.true(await isAllReachable(photos)) - t.snapshot(photos) -}) +for (const optionCodes of combinations) { + test.serial(`Model 3 Highland (${optionCodes.join(', ')})`, async t => { + const photos = teslaImages({ modelLetter: 3, optionCodes }) + t.true(await isAllReachable(photos)) + t.snapshot({ optionCodes, photos }) + }) +} diff --git a/test/snapshots/model-3.js.md b/test/snapshots/model-3.js.md index 3fa43ef..bfcbdcc 100644 --- a/test/snapshots/model-3.js.md +++ b/test/snapshots/model-3.js.md @@ -4,6 +4,1366 @@ The actual snapshot is saved in `model-3.js.snap`. Generated by [AVA](https://avajs.dev). +## Model 3 Highland (MT351, IPB2, W38A, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB2', + 'W38A', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPPSW%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPPSW%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB2, W38A, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB2', + 'W38A', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPPSW%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPPSW%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB2, W38A, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB2', + 'W38A', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPBSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPBSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB2, W38A, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB2', + 'W38A', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPBSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPBSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB2, W38A, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB2', + 'W38A', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPPSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPPSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB2, W38A, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB2', + 'W38A', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPPSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPPSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB2, W38A, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB2', + 'W38A', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPN01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPN01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB2, W38A, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB2', + 'W38A', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPN01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPN01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB2, W38A, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB2', + 'W38A', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPR01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPR01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB2, W38A, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB2', + 'W38A', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPR01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPR01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB2, W39S, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB2', + 'W39S', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPPSW%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPPSW%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB2, W39S, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB2', + 'W39S', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPPSW%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPPSW%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB2, W39S, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB2', + 'W39S', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPBSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPBSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB2, W39S, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB2', + 'W39S', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPBSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPBSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB2, W39S, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB2', + 'W39S', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPPSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPPSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB2, W39S, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB2', + 'W39S', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPPSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPPSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB2, W39S, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB2', + 'W39S', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPN01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPN01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB2, W39S, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB2', + 'W39S', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPN01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPN01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB2, W39S, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB2', + 'W39S', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPR01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT351%2CPR01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB2, W39S, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB2', + 'W39S', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPR01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB2%2CMT352%2CPR01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB3, W38A, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB3', + 'W38A', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPPSW%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPPSW%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB3, W38A, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB3', + 'W38A', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPPSW%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPPSW%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB3, W38A, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB3', + 'W38A', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPBSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPBSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB3, W38A, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB3', + 'W38A', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPBSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPBSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB3, W38A, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB3', + 'W38A', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPPSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPPSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB3, W38A, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB3', + 'W38A', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPPSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPPSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB3, W38A, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB3', + 'W38A', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPN01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPN01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB3, W38A, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB3', + 'W38A', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPN01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPN01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB3, W38A, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB3', + 'W38A', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPR01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPR01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB3, W38A, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB3', + 'W38A', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPR01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPR01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB3, W39S, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB3', + 'W39S', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPPSW%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPPSW%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB3, W39S, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB3', + 'W39S', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPPSW%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPPSW%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB3, W39S, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB3', + 'W39S', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPBSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPBSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB3, W39S, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB3', + 'W39S', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPBSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPBSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB3, W39S, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB3', + 'W39S', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPPSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPPSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB3, W39S, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB3', + 'W39S', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPPSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPPSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB3, W39S, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB3', + 'W39S', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPN01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPN01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB3, W39S, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB3', + 'W39S', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPN01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPN01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPB3, W39S, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPB3', + 'W39S', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPR01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT351%2CPR01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPB3, W39S, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPB3', + 'W39S', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPR01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPB3%2CMT352%2CPR01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW2, W38A, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW2', + 'W38A', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPPSW%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPPSW%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW2, W38A, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW2', + 'W38A', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPPSW%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPPSW%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW2, W38A, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW2', + 'W38A', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPBSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPBSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW2, W38A, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW2', + 'W38A', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPBSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPBSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW2, W38A, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW2', + 'W38A', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPPSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPPSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW2, W38A, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW2', + 'W38A', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPPSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPPSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW2, W38A, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW2', + 'W38A', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPN01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPN01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW2, W38A, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW2', + 'W38A', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPN01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPN01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW2, W38A, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW2', + 'W38A', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPR01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPR01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW2, W38A, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW2', + 'W38A', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPR01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPR01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW2, W39S, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW2', + 'W39S', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPPSW%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPPSW%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW2, W39S, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW2', + 'W39S', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPPSW%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPPSW%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW2, W39S, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW2', + 'W39S', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPBSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPBSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW2, W39S, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW2', + 'W39S', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPBSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPBSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW2, W39S, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW2', + 'W39S', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPPSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPPSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW2, W39S, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW2', + 'W39S', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPPSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPPSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW2, W39S, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW2', + 'W39S', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPN01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPN01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW2, W39S, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW2', + 'W39S', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPN01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPN01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW2, W39S, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW2', + 'W39S', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPR01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT351%2CPR01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW2, W39S, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW2', + 'W39S', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPR01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW2%2CMT352%2CPR01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW3, W38A, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW3', + 'W38A', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPPSW%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPPSW%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW3, W38A, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW3', + 'W38A', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPPSW%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPPSW%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW3, W38A, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW3', + 'W38A', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPBSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPBSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW3, W38A, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW3', + 'W38A', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPBSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPBSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW3, W38A, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW3', + 'W38A', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPPSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPPSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW3, W38A, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW3', + 'W38A', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPPSB%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPPSB%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW3, W38A, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW3', + 'W38A', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPN01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPN01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW3, W38A, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW3', + 'W38A', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPN01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPN01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW3, W38A, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW3', + 'W38A', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPR01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPR01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW3, W38A, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW3', + 'W38A', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPR01%2CW38A&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPR01%2CW38A&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW3, W39S, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW3', + 'W39S', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPPSW%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPPSW%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW3, W39S, PPSW) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW3', + 'W39S', + 'PPSW', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPPSW%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPPSW%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW3, W39S, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW3', + 'W39S', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPBSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPBSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW3, W39S, PBSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW3', + 'W39S', + 'PBSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPBSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPBSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW3, W39S, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW3', + 'W39S', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPPSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPPSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW3, W39S, PPSB) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW3', + 'W39S', + 'PPSB', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPPSB%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPPSB%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW3, W39S, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW3', + 'W39S', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPN01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPN01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW3, W39S, PN01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW3', + 'W39S', + 'PN01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPN01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPN01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT351, IPW3, W39S, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT351', + 'IPW3', + 'W39S', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPR01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT351%2CPR01%2CW39S&size=800&view=STUD_SEAT', + ], + } + +## Model 3 Highland (MT352, IPW3, W39S, PR01) + +> Snapshot 1 + + { + optionCodes: [ + 'MT352', + 'IPW3', + 'W39S', + 'PR01', + ], + photos: [ + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPR01%2CW39S&size=800&view=STUD_3QTR', + 'https://static-assets.tesla.com/configurator/compositor?bkba_opt=2&file_type=jpg&model=m3&options=IPW3%2CMT352%2CPR01%2CW39S&size=800&view=STUD_SEAT', + ], + } + ## Model 3 2017 > Snapshot 1 diff --git a/test/snapshots/model-3.js.snap b/test/snapshots/model-3.js.snap index ea85c2744289749fa6154e743877720ce0a4dbdc..09cd36a0a9cba71aefc38e101a5b6c0805d75ecd 100644 GIT binary patch literal 3522 zcma)+c|6qlAIHTyB3F(HOB5aK7;+Sf%7k29jxbErl53npXi~~Cx!RCWJXXarnQ+yq^%TZ4IP82- zxN3x+r~n_IsXkm))z8w)m?2fE4itxhAY{cEW*e83C!Jf4$hpG zOXwla*qtfW;!ioxe{}7ndVqp@)8#{|>Q{EvzRs%NEOygrP`hXdKX)eOQ~+u!&3p%b ziqM~fxqE%J z747g^Z1G5X5!z&hf!vY9u)lNKqu{Mocy^n0twy6nWJipN^{v6Z9fJg8DTvxd019lYx% zbjx+y$(|$+Zsl3wO!5lN>d)T9j&oV{EZWTLbnmPN7Ok*rD^+vv;yug6PcyV^M(~cl zY!9?Yes`N*Cp+t1xbZJXNzc@K$KN^5mE^x?I|TVuGEc|u&v-i>%V5|%$oMoa9%woG zs_db2s`E(BtbMh&JzK*sjfKr(pNnznlhIO^)pO6#aGwoST!~t&bJ@b(VdI)>pKsmo z;OLNPdeintlCR&3#(IO=;`)%89(k!MUz@|5_c1zv$3vgFkwdb)

li+BcdHWy;o6&bxER|J;;a73{Go`9D@Aw?y za!EENZPa-??$^0>dLagLeyGI|cjAe>(bP{U=%nI(QX>G6bjNk-JiYFg zns1cvtpUNA)Rxdgz%MfX(vep=o@ny z{Lq{#L;|iNay(oowVOg5p>t=GJ<+r7dzGQ>!$t;p=214J!$Z%CN4Qw=YOZhkced!a zL3d=w>-WM!T+XkA$dCPTTKE(Kr(8#ZoE`n92IAQe{}=49Tg=QdOL22Olr8LkWft$H zk5|M)?_LVL9Lxaycjt^0A+E2F^dFD2`sx;S2BFoz^4~q{zWJ_f$eH-#0YXcvVp11k>l?diFxIu#=q8C zI_+D;?@VyBne_arj1`ZP7v&K^yGh0w^uk8|4-xX9iPzGtnL<~?otTB*hFgh|9>SOsDb%tP%7rf?cG;B^Meta=yH@&?>sAyufM=eK5WcS@s~i+Grz2g}>4;r)kzanbAeTClQWAt3y~MFsw>fO` z;CrhieB`%N^Kz=wBGl4`klZXR#vC`^-E5?bsgm7idERMRhiYtys=8D<{?Nzr#5FDd zAKu#WzmlOcvZ=c}4eQ=N`M8|fsC}KoJbGm*7runKb1O>CH-~?E5x%5Z2~RG2oB!(W}cq}&(`yjewQHL~Ke)_4>V6Y2* zOK5AgPNEqsx>eb@rN30Gs7$JZG$41TthYtB%o=Yt(#h@Y9vC-vz4XA1CdTr}oJmG; zt|xI@mveNHCQmkh&SEZyAeBCb#da)@{ZMEiQ(uNE-YE?)uw`wa<98#MiZ|mD2|kLn zhhBxGuo}Cax%;lh1`u!MC2_l!hjWl7KGL64nW@9bny{oxJy?vko43lE#IxmoDpCuh zwkl2Ubi-R?wnrBbK137_M@r$Y5^$!p`=1EHh#cT)h;HWJMD9E~uBf*|LO* z(>C})xZ0`)J?8=P=dPqn&#`_+v^Y8B#B1v;X{yUnmK`z85t-42r##21GGAL4M%G6} zA=h3;YgttL8ql`Zdz?0RX!lr?qxUhBoSdXTUt`kz3gel0O2bo-> zl;nh^evmM&uHHCuvt8NFRZaS@?nv4=av{V(U+Qx*^OH&;JQW%HCb|TF9;ZhOBIgg= zI8f4Od{F6iQt;tpEOX+NFqtIm5<~1);~I_ipc4tq4TZ0S@suY6Bi8y{wL(O2O|}IJ#(8sC44ygWIe+vfcFH*B&kRKg zGUjWW!m4!**7$F4L)n(RxviQ<TyF9F@}MG92=cfrYFOLl|S%Sw%`)`6fuN->+&*t^Y$5 z)Nr|B=Ui~^VH<=^6a_Qh0@zw{;_8kDS^&wT{L1}OZ{9IuXvAZC246x6bfMvJtN|VL zBS2%Vs^3!tg-xLhLKF<@w}gSFTBBA9L2{HN4^$k0rt(1jL1ip2+zV>#-HzJxX<#f4 z3<%>5=meZG8Tq${kr3G zK}bDh=#INt0R!m>z&8xqjBN#17sUtgbcPO|bcC#jsJYOcn|59R^2alfHO^IXAUw`< zsSSVxLgn145ul?mG}fATP7~x^#5RC8+X96u7Qp`;;Hb(W5Jt&DC5BUZ(83^02BBU& zL@{d)5CVZX^n<@AF-X(CXY5O+Pe~oqUu8xK-9Gj9qkdc7 z6>fCC;G4{7Q-OC$cOU0(1@Wa#uN)0x512_j-@W_^+4ML_GtHo|hd<2vK!MoG2Rp|D zJsUtQS-tS=Uh0e(=l~O#Yi!6z03Dq`j$C1W6xAv2U&@gBAQ5{24T@5PLKYV3OIX05 l#FHm}0J0!Y4g_*kQcU9G`~|)+@8wTscdMw|b)7cw{SO7-I_v-d literal 1939 zcmW-edmz*6AID|La>)={>kTvC|Z$t9Q25zXb~_kFg%p1nVx=ly=YzmLU5i$hM~zE^2M5s`PbntO7xc?lLrCM&vKGhu$Z8UwYlC>2XqJRbcx`gNLBnt{fZxOzAp#Ky*-4rR1jkS!sVC`RY zs@CXj?_$W%z#M!xe$Mc7yLs2SWmS_pljwO^`&BmTkD=LbgNaRd#yS+*8FlNj(Y{UC z``>#JpJewNJc;CaIU%+8n-KGU9pjDeclr8wkhN?lx6u$Iw;I||_nNTG=$Ox)E?esf zG;!JS@j%}>@%yXfkm9WD_cQ_3TFdz_L6vP+<|T&AY?wfh<~aB`D3Fe%xhL}ecW1=q zb8@|w#m&lmBAIxl)HC)?jM-4tsPmJMveN~|$Cuq$C9}>mf1NwpKaomiJy)&hX7&3Y zrOgNr8X83&k8on0a%7=~OG2aS1cdvIHJPLAj_De2)5!@$1jDP*}`=j+mWm;YpskaLAy)ww(uw0Y}N80*jB8uAO5 zpH`58R>+mz(|mHsu3a!Qfe+ZHWm7yDjrW z+VJRmeHhtKIrfEljwjVbng0$b6`4tkSk&u!Br|zY0yW^c*D=&5^{kr9S{Rzj%C52y z<8-`CbV{F*sv2G~I=k<5^HiZ^YBa4;rjUv!=_Q(FG~ZgPonpu~UJ+X%gD86iW8o@{4)ytn@BBXe8Tl^>_w zaOvmXZz8hjjpjErR(=SKC19#0q7#+#732$H&BQONl1a4N2>suaIq@-V*sQY7wume_ zgQ7YqQ317CrOOc3Qo2~UHvnB!VKr2(#H^Ez&Z+su2;&D|ktu6Ls*!dzpLO?wyX8o_ z>W7=IoSgpWSW)F3(QRt+0X@#HmSUuvVgOfyz+SABe$15`D+#SAA-iV8+WDB!_lA60 zAbAW*+AhTB=&!Ar7p}F{W_j#gGjHrOAHRU2I|#~jd~PE|8C0IS-W7I8616lN|0Tmz z@LeIQ#lcN8k$s8xaTA8w8n4<&2^`h+>qr&qhWmIZ_~QL))pZe>Ba4AGU-M3%Aq}VI zr0~Pmaqhg9*959jXW=NzFxo@lRU`JYg1lHd zz<`(y84wpJ_Oqjp_E$uDJV8YJ5|2^wKfQ#f|j*sAVPP2 zU}XTR@tP2|>jt;HgIK^#phQWXJ@XE19}rhVgBDy2cnuFw*sj)8%Pa31Sa1KjQbTg$;_;JfJ>DLF}Po2W!ZIk_ic7&y6suOI|pNr)EDGoX3+XG(X|Hl1w%z;TvL zqXM}wP-h8(`EL6{oVMivy&A3D)1K15X>Pi+JAdaHDtNwbNx7R(Cj=#98%ho@gtzAl zXEjQmg=k)O`?hChittVSv)A}+9FTVbIoM4T>}wbgH?_P;l%`P&)70X|2FwPZYKV2* zc5}tT>Tf>8rBzPvSbZ9<@}(5C^z!~XcX{ - reachableUrl.isReachable( - await reachableUrl(url, { - headers: { - 'user-agent': 'googlebot' - } - }) - ) +const browser = () => + Promise.resolve( + this.instance || + (this.instance = (() => { + const browser = createBrowser({ puppeteer: require('puppeteer') }) + onExit(browser.close) + return browser + })()) + ).then(browser => browser.createContext()) + +const isReachable = async url => { + const browserless = await browser() + const ping = browserless.evaluate(async (_, response) => ({ + statusCode: response.status() + })) + const result = await ping(url) + await browserless.destroyContext() + return reachableUrl.isReachable(result) +} const isAllReachable = async urls => { const results = await pMap(urls, isReachable)