Closes issue: OwlBoard/backend#39
Still awaiting the check auth endpoint, the code only acts on a 401 response. That means that it currently will not detect if an account is expired.
This commit is contained in:
parent
4cd8a496b8
commit
bc6fd6cdc9
@ -1,31 +1,25 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:svelte/recommended',
|
||||
'prettier'
|
||||
],
|
||||
parser: '@typescript-eslint/parser',
|
||||
plugins: ['@typescript-eslint'],
|
||||
parserOptions: {
|
||||
sourceType: 'module',
|
||||
ecmaVersion: 2020,
|
||||
extraFileExtensions: ['.svelte']
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
es2017: true,
|
||||
node: true
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: ['*.svelte'],
|
||||
parser: 'svelte-eslint-parser',
|
||||
parserOptions: {
|
||||
parser: '@typescript-eslint/parser'
|
||||
}
|
||||
}
|
||||
]
|
||||
root: true,
|
||||
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:svelte/recommended', 'prettier'],
|
||||
parser: '@typescript-eslint/parser',
|
||||
plugins: ['@typescript-eslint'],
|
||||
parserOptions: {
|
||||
sourceType: 'module',
|
||||
ecmaVersion: 2020,
|
||||
extraFileExtensions: ['.svelte']
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
es2017: true,
|
||||
node: true
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: ['*.svelte'],
|
||||
parser: 'svelte-eslint-parser',
|
||||
parserOptions: {
|
||||
parser: '@typescript-eslint/parser'
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
owlboard-svelte is the OwlBoard web-frontend as of version 2023.7.1 replacing the previous version (https://git.fjla.uk/owlboard/web) and moving from a raw HTML/CSS/JS to a statically build Svelte website.
|
||||
|
||||
The decision was made because as new features were added, the markup and code started to become difficult to manage and maintain. The Svelte version introduces reusable components simplifying the maintenance and the addition of new features.
|
||||
The decision was made because as new features were added, the markup and code started to become difficult to manage and maintain. The Svelte version introduces reusable components simplifying the maintenance and the addition of new features.
|
||||
|
||||
## Building
|
||||
|
||||
To build owlboard-svelte, simply clone the repo and run `npm run build` which will build a static website in the `build` folder. The static files can then be uplaoded to a webserver of your choice.
|
||||
To build owlboard-svelte, simply clone the repo and run `npm run build` which will build a static website in the `build` folder. The static files can then be uplaoded to a webserver of your choice.
|
||||
|
||||
The website is build statically for server performance reasons - running an nginx server is lighter than running Node considering that much of the data fetching and processing happens on the client side anyway due to user UUID access keys being required.
|
||||
|
||||
|
@ -1,19 +1,19 @@
|
||||
<div id="banner">DEVMODE</div>
|
||||
|
||||
<style>
|
||||
#banner {
|
||||
width: 200px;
|
||||
background: red;
|
||||
color: #fff;
|
||||
position: fixed;
|
||||
text-align: center;
|
||||
top: 25px;
|
||||
line-height: 40px;
|
||||
right: -50px;
|
||||
left: auto;
|
||||
-ms-transform: rotate(45deg);
|
||||
-webkit-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
z-index: 100;
|
||||
}
|
||||
#banner {
|
||||
width: 200px;
|
||||
background: red;
|
||||
color: #fff;
|
||||
position: fixed;
|
||||
text-align: center;
|
||||
top: 25px;
|
||||
line-height: 40px;
|
||||
right: -50px;
|
||||
left: auto;
|
||||
-ms-transform: rotate(45deg);
|
||||
-webkit-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
z-index: 100;
|
||||
}
|
||||
</style>
|
||||
|
@ -2,9 +2,9 @@
|
||||
import Island from '$lib/islands/island.svelte';
|
||||
|
||||
interface resultObj {
|
||||
results: boolean,
|
||||
title: string,
|
||||
resultLines: string[]
|
||||
results: boolean;
|
||||
title: string;
|
||||
resultLines: string[];
|
||||
}
|
||||
|
||||
export let resultObject: resultObj = {
|
||||
|
@ -9,7 +9,7 @@
|
||||
import Island from '$lib/islands/island.svelte';
|
||||
import TableGeneratorDev from './table/table-generator_dev.svelte';
|
||||
|
||||
const TableGenerator = TableGeneratorDev
|
||||
const TableGenerator = TableGeneratorDev;
|
||||
|
||||
import type { StaffLdb, NrccMessage, TrainServices, ApiResponse } from '@owlboard/ts-types';
|
||||
|
||||
@ -22,9 +22,9 @@
|
||||
|
||||
$: {
|
||||
if (isLoading) {
|
||||
title = "Loading..."
|
||||
title = 'Loading...';
|
||||
} else {
|
||||
title = station
|
||||
title = station;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,55 +13,77 @@
|
||||
}
|
||||
|
||||
async function formatLocations(locations: ServiceLocation[]): Promise<string> {
|
||||
let tiplocs: string[] = []
|
||||
let tiplocs: string[] = [];
|
||||
for (const location of locations) {
|
||||
tiplocs.push(location.tiploc)
|
||||
tiplocs.push(location.tiploc);
|
||||
}
|
||||
return tiplocs.join(' & ')
|
||||
return tiplocs.join(' & ');
|
||||
}
|
||||
|
||||
async function classGenerator(service: TrainServices) {
|
||||
let otherArr: string[] = []
|
||||
let arrArr: string[] = []
|
||||
let depArr: string[] = []
|
||||
let platArr: string[] = []
|
||||
let otherArr: string[] = [];
|
||||
let arrArr: string[] = [];
|
||||
let depArr: string[] = [];
|
||||
let platArr: string[] = [];
|
||||
|
||||
if (service.isCancelled) {otherArr.push("canc")}
|
||||
if (service.serviceIsSupressed) {otherArr.push("nonPass")}
|
||||
if (service.platformIsHidden) {platArr.push("nonPass")}
|
||||
if (service.isCancelled) {
|
||||
otherArr.push('canc');
|
||||
}
|
||||
if (service.serviceIsSupressed) {
|
||||
otherArr.push('nonPass');
|
||||
}
|
||||
if (service.platformIsHidden) {
|
||||
platArr.push('nonPass');
|
||||
}
|
||||
|
||||
if (service.sta !== undefined) {
|
||||
if (service.eta !== undefined) {
|
||||
if (service.sta < service.eta) { arrArr.push("late"); }
|
||||
} else if (service.ata !== undefined) {
|
||||
if (service.sta < service.ata) { arrArr.push("late"); }
|
||||
if (service.eta !== undefined) {
|
||||
if (service.sta < service.eta) {
|
||||
arrArr.push('late');
|
||||
}
|
||||
} else if (service.ata !== undefined) {
|
||||
if (service.sta < service.ata) {
|
||||
arrArr.push('late');
|
||||
}
|
||||
}
|
||||
if (service.eta !== undefined) {
|
||||
if (service.sta > service.eta) {
|
||||
arrArr.push('early');
|
||||
}
|
||||
} else if (service.ata !== undefined) {
|
||||
if (service.sta > service.ata) {
|
||||
arrArr.push('early');
|
||||
}
|
||||
}
|
||||
}
|
||||
if (service.eta !== undefined) {
|
||||
if (service.sta > service.eta) { arrArr.push("early"); }
|
||||
} else if (service.ata !== undefined) {
|
||||
if (service.sta > service.ata) { arrArr.push("early"); }
|
||||
}
|
||||
}
|
||||
|
||||
if (service.std !== undefined) {
|
||||
if (service.etd !== undefined) {
|
||||
if (service.std < service.etd) { depArr.push("late"); }
|
||||
} else if (service.atd !== undefined) {
|
||||
if (service.std < service.atd) { depArr.push("late"); }
|
||||
if (service.std !== undefined) {
|
||||
if (service.etd !== undefined) {
|
||||
if (service.std < service.etd) {
|
||||
depArr.push('late');
|
||||
}
|
||||
} else if (service.atd !== undefined) {
|
||||
if (service.std < service.atd) {
|
||||
depArr.push('late');
|
||||
}
|
||||
}
|
||||
if (service.etd !== undefined) {
|
||||
if (service.std > service.etd) {
|
||||
depArr.push('early');
|
||||
}
|
||||
} else if (service.atd !== undefined) {
|
||||
if (service.std > service.atd) {
|
||||
depArr.push('early');
|
||||
}
|
||||
}
|
||||
}
|
||||
if (service.etd !== undefined) {
|
||||
if (service.std > service.etd) { depArr.push("early"); }
|
||||
} else if (service.atd !== undefined) {
|
||||
if (service.std > service.atd) { depArr.push("early"); }
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
other: otherArr.join(" "),
|
||||
arr: arrArr.join(" "),
|
||||
dep: depArr.join(" "),
|
||||
plat: platArr.join(" "),
|
||||
}
|
||||
other: otherArr.join(' '),
|
||||
arr: arrArr.join(' '),
|
||||
dep: depArr.join(' '),
|
||||
plat: platArr.join(' ')
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -83,39 +105,43 @@
|
||||
<th class="timepair" colspan="2">Departure</th>
|
||||
</tr>
|
||||
{#each services as service}
|
||||
<tr
|
||||
class="dataRow"
|
||||
on:click={(event) => detail(event, service.rid, service.uid, service.trainid)}
|
||||
on:keypress={(event) => detail(event, service.rid, service.uid, service.trainid)}
|
||||
>
|
||||
<tr
|
||||
class="dataRow"
|
||||
on:click={(event) => detail(event, service.rid, service.uid, service.trainid)}
|
||||
on:keypress={(event) => detail(event, service.rid, service.uid, service.trainid)}
|
||||
>
|
||||
{#await classGenerator(service) then classes}
|
||||
<td class="id {classes.other}">{service.trainid}</td>
|
||||
<td class="from {classes.other}">{#await formatLocations(service.origin) then txt}{txt}{/await}</td>
|
||||
<td class="to {classes.other}">{#await formatLocations(service.destination) then txt}{txt}{/await}</td>
|
||||
<td class="plat">{service.platform || '-'}</td>
|
||||
<td class="time schTime {classes.other}">{service.sta || '-'}</td> <!-- All time need to be displayed appropriately -->
|
||||
<td class="time {classes.other} {classes.arr}">{service.eta || service.ata || '-'}</td> <!-- All time need to be displayed appropriately -->
|
||||
<td class="time schTime {classes.other}">{service.std || '-'}</td> <!-- All time need to be displayed appropriately -->
|
||||
<td class="time {classes.other} {classes.dep}">{service.etd || service.atd || '-'}</td> <!-- All time need to be displayed appropriately -->
|
||||
<td class="time schTime {classes.other}">{service.sta || '-'}</td>
|
||||
<!-- All time need to be displayed appropriately -->
|
||||
<td class="time {classes.other} {classes.arr}">{service.eta || service.ata || '-'}</td>
|
||||
<!-- All time need to be displayed appropriately -->
|
||||
<td class="time schTime {classes.other}">{service.std || '-'}</td>
|
||||
<!-- All time need to be displayed appropriately -->
|
||||
<td class="time {classes.other} {classes.dep}">{service.etd || service.atd || '-'}</td>
|
||||
<!-- All time need to be displayed appropriately -->
|
||||
{/await}
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableTxt" colspan="8">
|
||||
{tocMap.get(service.operatorCode.toLowerCase()) || service.operatorCode}
|
||||
{#if service.length} | {service.length} carriages{/if}
|
||||
{#if service.delayReason}
|
||||
<br />
|
||||
<Reason type={'delay'} code={service.delayReason} />
|
||||
{/if}
|
||||
{#if service.cancelReason}
|
||||
<br />
|
||||
<Reason type={'cancel'} code={service.cancelReason} />
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8">Unable to display service</td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableTxt" colspan="8">
|
||||
{tocMap.get(service.operatorCode.toLowerCase()) || service.operatorCode}
|
||||
{#if service.length} | {service.length} carriages{/if}
|
||||
{#if service.delayReason}
|
||||
<br />
|
||||
<Reason type={'delay'} code={service.delayReason} />
|
||||
{/if}
|
||||
{#if service.cancelReason}
|
||||
<br />
|
||||
<Reason type={'cancel'} code={service.cancelReason} />
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8">Unable to display service</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</table>
|
||||
|
||||
|
@ -103,7 +103,7 @@
|
||||
<h6>{detail.headcode}</h6>
|
||||
<p in:fade id="loading">Loading Data...</p>
|
||||
{:then train}
|
||||
<h6><StylesToc toc={train.GetServiceDetailsResult.operatorCode} full={true}/> {detail.headcode}</h6>
|
||||
<h6><StylesToc toc={train.GetServiceDetailsResult.operatorCode} full={true} /> {detail.headcode}</h6>
|
||||
<p>
|
||||
Locations in grey are not scheduled stops
|
||||
<br />
|
||||
|
@ -1,72 +1,76 @@
|
||||
import { uuid } from "./stores/uuid"
|
||||
import { uuid } from './stores/uuid';
|
||||
|
||||
export interface libauthResponse {
|
||||
uuidPresent?: boolean;
|
||||
serverAuthCheck?: boolean;
|
||||
uuidValue?: string;
|
||||
serverAuthCheckResponseCode?: number;
|
||||
uuidPresent?: boolean;
|
||||
serverAuthCheck?: boolean;
|
||||
uuidValue?: string;
|
||||
serverAuthCheckResponseCode?: number;
|
||||
}
|
||||
|
||||
interface uuidCheckRes {
|
||||
uuidValue?: string;
|
||||
uuidPresent?: boolean;
|
||||
uuidValue?: string;
|
||||
uuidPresent?: boolean;
|
||||
}
|
||||
|
||||
export async function checkAuth(): Promise<libauthResponse> {
|
||||
let result: libauthResponse = {};
|
||||
const uuidCheck = await checkUuid();
|
||||
result.uuidPresent = uuidCheck?.uuidPresent;
|
||||
result.uuidValue = uuidCheck?.uuidValue;
|
||||
let result: libauthResponse = {};
|
||||
const uuidCheck = await checkUuid();
|
||||
result.uuidPresent = uuidCheck?.uuidPresent;
|
||||
result.uuidValue = uuidCheck?.uuidValue;
|
||||
|
||||
const serverCheck = await checkServerAuth();
|
||||
result.serverAuthCheck = serverCheck.authOk;
|
||||
result.serverAuthCheckResponseCode = serverCheck.status;
|
||||
const serverCheck = await checkServerAuth(result.uuidValue || '');
|
||||
result.serverAuthCheck = serverCheck.authOk;
|
||||
result.serverAuthCheckResponseCode = serverCheck.status;
|
||||
|
||||
return result
|
||||
return result;
|
||||
}
|
||||
|
||||
export async function checkUuid(): Promise<uuidCheckRes> {
|
||||
let uuid_value: string = '';
|
||||
const unsubscribe = uuid.subscribe(value => {
|
||||
uuid_value = value;
|
||||
});
|
||||
let res: uuidCheckRes = {
|
||||
uuidValue: uuid_value
|
||||
}
|
||||
console.log("uuid-value is: ", uuid_value)
|
||||
if (uuid_value && uuid_value != 'null') {
|
||||
res = {
|
||||
uuidPresent: true,
|
||||
uuidValue: uuid_value,
|
||||
}
|
||||
} else {
|
||||
res = {
|
||||
uuidPresent: false,
|
||||
uuidValue: uuid_value,
|
||||
}
|
||||
|
||||
}unsubscribe()
|
||||
return res;}
|
||||
|
||||
export async function checkServerAuth() {
|
||||
let uuid_value: string = '';
|
||||
uuid.subscribe((value => uuid_value = value))
|
||||
const url = "https://owlboard.info/api/v2/user/checkAuth"
|
||||
const options = {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
uuid: uuid_value,
|
||||
}
|
||||
async function checkUuid(): Promise<uuidCheckRes> {
|
||||
let uuid_value: string = '';
|
||||
const unsubscribe = uuid.subscribe((value) => {
|
||||
uuid_value = value;
|
||||
});
|
||||
let res: uuidCheckRes = {
|
||||
uuidValue: uuid_value
|
||||
};
|
||||
console.log('uuid-value is: ', uuid_value);
|
||||
if (uuid_value && uuid_value != 'null') {
|
||||
res = {
|
||||
uuidPresent: true,
|
||||
uuidValue: uuid_value
|
||||
};
|
||||
const res = await fetch(url, options)
|
||||
let ok: boolean;
|
||||
if (res.status !== 401) {
|
||||
ok = true;
|
||||
} else {
|
||||
ok = false;
|
||||
}
|
||||
return {
|
||||
authOk: ok,
|
||||
status: res.status,
|
||||
}
|
||||
} else {
|
||||
res = {
|
||||
uuidPresent: false,
|
||||
uuidValue: uuid_value
|
||||
};
|
||||
}
|
||||
unsubscribe();
|
||||
return res;
|
||||
}
|
||||
|
||||
async function checkServerAuth(uuidString: string) {
|
||||
const url = 'https://owlboard.info/api/v2/user/checkAuth';
|
||||
const options = {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
uuid: uuidString
|
||||
}
|
||||
};
|
||||
const res = await fetch(url, options);
|
||||
let ok: boolean;
|
||||
if (res.status !== 401) {
|
||||
ok = true;
|
||||
} else {
|
||||
ok = false;
|
||||
}
|
||||
return {
|
||||
authOk: ok,
|
||||
status: res.status
|
||||
};
|
||||
}
|
||||
|
||||
export async function logout(): Promise<boolean> {
|
||||
uuid.set(null);
|
||||
return true;
|
||||
}
|
24
src/lib/navigation/LogoutButton.svelte
Normal file
24
src/lib/navigation/LogoutButton.svelte
Normal file
@ -0,0 +1,24 @@
|
||||
<script lang="ts">
|
||||
import { logout } from '$lib/libauth';
|
||||
|
||||
async function logoutAction() {
|
||||
await logout();
|
||||
location.reload();
|
||||
}
|
||||
</script>
|
||||
|
||||
<button class="logout" type="button" on:click={logoutAction}>Logout</button>
|
||||
|
||||
<style>
|
||||
.logout {
|
||||
border: none;
|
||||
background-color: var(--overlay-color);
|
||||
color: white;
|
||||
width: 35%;
|
||||
border-radius: 50px;
|
||||
font-size: 20px;
|
||||
min-width: 90px;
|
||||
margin: 30px;
|
||||
height: 48px;
|
||||
}
|
||||
</style>
|
@ -1,13 +1,14 @@
|
||||
<p id="load">Loading...</p>
|
||||
|
||||
<style>
|
||||
#load {
|
||||
margin-top: 5px;
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: white;
|
||||
animation: pulse-loading 2.5s linear infinite;
|
||||
}
|
||||
@keyframes pulse-loading {
|
||||
#load {
|
||||
margin-top: 5px;
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: white;
|
||||
animation: pulse-loading 2.5s linear infinite;
|
||||
}
|
||||
@keyframes pulse-loading {
|
||||
50% {
|
||||
color: rgb(136, 164, 255);
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
const pageText: string[] = [
|
||||
'<h3>Sign-up Fixed</h3>' +
|
||||
"<p>An issue present since 28/07/2023 has meant that new users or users with expired logins are unable to register.</p>" +
|
||||
'<p>An issue present since 28/07/2023 has meant that new users or users with expired logins are unable to register.</p>' +
|
||||
'<p>This issue has now been fixed and new users will be able to register for Rail Staff Access</p>',
|
||||
'<h3>Always Improving</h3>' +
|
||||
'<p>OwlBoard is always improving, the current focus is to improve performance when you have low mobile signal by reducing the amount of data being sent.</p>'
|
||||
|
@ -1,44 +1,43 @@
|
||||
export const tocs = new Map<string, string>([
|
||||
[ 'gw', 'Great Western Railway' ],
|
||||
[ 'sw', 'South Western Railway' ],
|
||||
[ 'id', 'Island Line' ],
|
||||
[ 'nt', 'Northern' ],
|
||||
[ 'aw', 'Transport for Wales' ],
|
||||
[ 'cc', 'c2c' ],
|
||||
[ 'cs', 'Caledonian Sleeper' ],
|
||||
[ 'ch', 'Chiltern Railways' ],
|
||||
[ 'xc', 'CrossCountry' ],
|
||||
[ 'em', 'East Midlands Railway' ],
|
||||
[ 'es', 'Eurostar' ],
|
||||
[ 'ht', 'Hull Trains' ],
|
||||
[ 'tl', 'Thameslink' ],
|
||||
[ 'gc', 'Grand Central' ],
|
||||
[ 'gx', 'Gatwick Express' ],
|
||||
[ 'hx', 'Heathrow Express' ],
|
||||
[ 'ls', 'Locomotive Services Limited' ],
|
||||
[ 'me', 'Merseyrail' ],
|
||||
[ 'lr', 'Network Rail OTM' ],
|
||||
[ 'xr', 'TfL Elizabeth Line' ],
|
||||
[ 'se', 'Southeastern' ],
|
||||
[ 'sn', 'Southern' ],
|
||||
[ 'le', 'Greater Anglia' ],
|
||||
[ 'ga', 'Greater Anglia' ],
|
||||
[ 'lm', 'West Midlands Railway' ],
|
||||
[ 'sr', 'ScotRail' ],
|
||||
[ 'gn', 'Great Northern' ],
|
||||
[ 'lt', 'TfL London Underground' ],
|
||||
[ 'lo', 'TfL London Overground' ],
|
||||
[ 'sj', 'Sheffield SuperTram' ],
|
||||
[ 'tp', 'TransPennine Express' ],
|
||||
[ 'vt', 'Avanti West Coast' ],
|
||||
[ 'gr', 'LNER' ],
|
||||
[ 'wr', 'West Coast Railway' ],
|
||||
[ 'ty', 'Vintage Trains' ],
|
||||
[ 'ld', 'Lumo' ],
|
||||
[ 'so', 'Rail Adventure' ],
|
||||
[ 'ln', 'Grand Union Trains' ],
|
||||
[ 'zz', 'Freight/Charter Company' ],
|
||||
[ 'wm', 'West Midlands Railway (WMT)' ],
|
||||
[ 'uk', 'Unknown Operator' ]
|
||||
]
|
||||
)
|
||||
['gw', 'Great Western Railway'],
|
||||
['sw', 'South Western Railway'],
|
||||
['id', 'Island Line'],
|
||||
['nt', 'Northern'],
|
||||
['aw', 'Transport for Wales'],
|
||||
['cc', 'c2c'],
|
||||
['cs', 'Caledonian Sleeper'],
|
||||
['ch', 'Chiltern Railways'],
|
||||
['xc', 'CrossCountry'],
|
||||
['em', 'East Midlands Railway'],
|
||||
['es', 'Eurostar'],
|
||||
['ht', 'Hull Trains'],
|
||||
['tl', 'Thameslink'],
|
||||
['gc', 'Grand Central'],
|
||||
['gx', 'Gatwick Express'],
|
||||
['hx', 'Heathrow Express'],
|
||||
['ls', 'Locomotive Services Limited'],
|
||||
['me', 'Merseyrail'],
|
||||
['lr', 'Network Rail OTM'],
|
||||
['xr', 'TfL Elizabeth Line'],
|
||||
['se', 'Southeastern'],
|
||||
['sn', 'Southern'],
|
||||
['le', 'Greater Anglia'],
|
||||
['ga', 'Greater Anglia'],
|
||||
['lm', 'West Midlands Railway'],
|
||||
['sr', 'ScotRail'],
|
||||
['gn', 'Great Northern'],
|
||||
['lt', 'TfL London Underground'],
|
||||
['lo', 'TfL London Overground'],
|
||||
['sj', 'Sheffield SuperTram'],
|
||||
['tp', 'TransPennine Express'],
|
||||
['vt', 'Avanti West Coast'],
|
||||
['gr', 'LNER'],
|
||||
['wr', 'West Coast Railway'],
|
||||
['ty', 'Vintage Trains'],
|
||||
['ld', 'Lumo'],
|
||||
['so', 'Rail Adventure'],
|
||||
['ln', 'Grand Union Trains'],
|
||||
['zz', 'Freight/Charter Company'],
|
||||
['wm', 'West Midlands Railway (WMT)'],
|
||||
['uk', 'Unknown Operator']
|
||||
]);
|
||||
|
@ -1,185 +1,223 @@
|
||||
<script lang="ts">
|
||||
export let toc: string
|
||||
export let full: boolean = false;
|
||||
export let toc: string;
|
||||
export let full: boolean = false;
|
||||
|
||||
import { tocs as map } from "$lib/stores/tocMap";
|
||||
import { tocs as map } from '$lib/stores/tocMap';
|
||||
|
||||
let text: string
|
||||
let text: string;
|
||||
|
||||
$: {
|
||||
if (full) {
|
||||
text = map.get(toc.toLowerCase()) || toc;
|
||||
} else {
|
||||
text = toc;
|
||||
}
|
||||
$: {
|
||||
if (full) {
|
||||
text = map.get(toc.toLowerCase()) || toc;
|
||||
} else {
|
||||
text = toc;
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<span class="{toc.toLocaleLowerCase()}">{text}</span>
|
||||
<span class={toc.toLocaleLowerCase()}>{text}</span>
|
||||
|
||||
<style>
|
||||
span {
|
||||
padding: 4px;
|
||||
border-radius: 5px;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
.gw { /* GWR */
|
||||
background-color: #07352d;
|
||||
color: white;
|
||||
border-color: #041d18;
|
||||
}
|
||||
.sw, .il { /* SWR & Island Line */
|
||||
background-color: rgb(17, 23, 23);
|
||||
color: white;
|
||||
}
|
||||
.nt { /* Northern */
|
||||
background-color: rgb(38, 34, 98);
|
||||
color: white;
|
||||
}
|
||||
.aw { /* TfW */
|
||||
background-color: red;
|
||||
color: white;
|
||||
}
|
||||
.cc { /* c2c */
|
||||
background-color: rgb(168, 25, 127);
|
||||
color: white;
|
||||
}
|
||||
.cs { /* Caledonian Sleeper */
|
||||
background-color: #033c3c;
|
||||
color: white;
|
||||
}
|
||||
.ch { /* Chiltern Railways */
|
||||
background-color: white;
|
||||
color: blue;
|
||||
}
|
||||
.xc { /* CrossCountry */
|
||||
background-color: rgb(76, 18, 58);
|
||||
color: white;
|
||||
}
|
||||
.em { /* EMR */
|
||||
background-color: rgb(69, 29, 69);
|
||||
color: white;
|
||||
}
|
||||
.es { /* Eurostar */
|
||||
background-color: rgb(13, 13, 98);
|
||||
color: yellow;
|
||||
}
|
||||
.zz { /* Freight, Charters, etc */
|
||||
background-color: rgba(255, 255, 255, 0);
|
||||
color: white;
|
||||
}
|
||||
.ht { /* Hull Trains */
|
||||
background-color: rgb(160, 0, 136);
|
||||
color: rgb(19, 19, 173);
|
||||
}
|
||||
.gn { /* GTR Great Northern */
|
||||
background-color: rgb(79, 0, 128);
|
||||
color: white;
|
||||
}
|
||||
.tl { /* GTR Thameslink */
|
||||
background-color: rgb(191, 25, 183);
|
||||
color: white;
|
||||
}
|
||||
.gc { /* Grand Central */
|
||||
background-color: rgb(40, 40, 40);
|
||||
color: rgb(219, 123, 5);
|
||||
}
|
||||
.le, .ga { /*Greater Anglia */
|
||||
background-color: rgb(122, 124, 154);
|
||||
color: rgb(151, 0, 0);
|
||||
border-color: red;
|
||||
}
|
||||
.hx { /* Heathrow Express */
|
||||
background-color: rgb(181, 142, 211);
|
||||
color: black;
|
||||
}
|
||||
.ls { /* Locomotive Services Limited */
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
.lm { /* West Midlands Railway */
|
||||
background-color: rgb(120, 120, 120);
|
||||
border-color: rgb(230, 150, 0);
|
||||
color: white;
|
||||
}
|
||||
.lo { /*London Overground */
|
||||
background-color: rgb(231, 150, 0);
|
||||
color: rgb(0, 0, 210)
|
||||
}
|
||||
.lt { /* London Underground (when on Network Rail Metals) */
|
||||
background-color: rgb(203, 17, 17);
|
||||
color: rgb(0, 0, 210);
|
||||
}
|
||||
.me { /* Merseyrail */
|
||||
background-color: rgb(229, 229, 16);
|
||||
color: rgb(96, 96, 96);
|
||||
}
|
||||
.lr { /* NR On-Track Machines */
|
||||
background-color: yellow;
|
||||
color: black;
|
||||
}
|
||||
.tw { /* Tyne & Wear Metro (when on Network Rail Metals) */
|
||||
background-color: rgb(212, 169, 0);
|
||||
color: black;
|
||||
}
|
||||
.sr { /* ScotRail */
|
||||
background-color: rgb(16, 16, 200);
|
||||
color: white;
|
||||
}
|
||||
.sj { /* South Yorkshire (Sheffield) SuperTram (When on network rail metals) */
|
||||
background-color: rgb(255, 185, 56);
|
||||
color: rgb(58, 58, 255);
|
||||
}
|
||||
.se { /* Southeastern */
|
||||
background-color: darkblue;
|
||||
color: rgb(107, 152, 207);
|
||||
}
|
||||
.sn { /* GTR (Southern) */
|
||||
background-color: rgb(11, 74, 11);
|
||||
color: rgb(231, 231, 188);
|
||||
}
|
||||
.xr { /* Elizabeth Line (EastWest CrossRail) */
|
||||
background-color: rgb(91, 0, 171);
|
||||
color: rgb(207, 207, 255);
|
||||
}
|
||||
.tp { /* TransPennine Express */
|
||||
background-color: rgb(197, 130, 238);
|
||||
color: rgb(0, 98, 226)
|
||||
}
|
||||
.vt { /* Avanti West Coast */
|
||||
background-color: rgb(37, 37, 86);
|
||||
color: rgb(230, 96, 0);
|
||||
}
|
||||
.gr { /* LNER */
|
||||
background-color: rgb(202, 0, 0);
|
||||
color: white;
|
||||
}
|
||||
.wc { /* West Coast Railway (Spot Hire/Charter) */
|
||||
background-color: maroon;
|
||||
color: rgb(225, 190, 92);
|
||||
}
|
||||
.ty { /* Vintage Trains (Tour Operator) */
|
||||
background-color: green;
|
||||
color: white;
|
||||
}
|
||||
.ld { /* Lumo */
|
||||
background-color: whitesmoke;
|
||||
color: blue;
|
||||
}
|
||||
.so { /* Rail Adventure */
|
||||
background-color: rgb(93, 93, 93);
|
||||
color: rgb(93, 195, 93)
|
||||
}
|
||||
.ln { /* Grand Union Trains */
|
||||
background-color: rgb(89, 89, 89);
|
||||
color: white;
|
||||
}
|
||||
.uk {
|
||||
background-color: whitesmoke;
|
||||
color: black;
|
||||
}
|
||||
span {
|
||||
padding: 4px;
|
||||
border-radius: 5px;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
.gw {
|
||||
/* GWR */
|
||||
background-color: #07352d;
|
||||
color: white;
|
||||
border-color: #041d18;
|
||||
}
|
||||
.sw,
|
||||
.il {
|
||||
/* SWR & Island Line */
|
||||
background-color: rgb(17, 23, 23);
|
||||
color: white;
|
||||
}
|
||||
.nt {
|
||||
/* Northern */
|
||||
background-color: rgb(38, 34, 98);
|
||||
color: white;
|
||||
}
|
||||
.aw {
|
||||
/* TfW */
|
||||
background-color: red;
|
||||
color: white;
|
||||
}
|
||||
.cc {
|
||||
/* c2c */
|
||||
background-color: rgb(168, 25, 127);
|
||||
color: white;
|
||||
}
|
||||
.cs {
|
||||
/* Caledonian Sleeper */
|
||||
background-color: #033c3c;
|
||||
color: white;
|
||||
}
|
||||
.ch {
|
||||
/* Chiltern Railways */
|
||||
background-color: white;
|
||||
color: blue;
|
||||
}
|
||||
.xc {
|
||||
/* CrossCountry */
|
||||
background-color: rgb(76, 18, 58);
|
||||
color: white;
|
||||
}
|
||||
.em {
|
||||
/* EMR */
|
||||
background-color: rgb(69, 29, 69);
|
||||
color: white;
|
||||
}
|
||||
.es {
|
||||
/* Eurostar */
|
||||
background-color: rgb(13, 13, 98);
|
||||
color: yellow;
|
||||
}
|
||||
.zz {
|
||||
/* Freight, Charters, etc */
|
||||
background-color: rgba(255, 255, 255, 0);
|
||||
color: white;
|
||||
}
|
||||
.ht {
|
||||
/* Hull Trains */
|
||||
background-color: rgb(160, 0, 136);
|
||||
color: rgb(19, 19, 173);
|
||||
}
|
||||
.gn {
|
||||
/* GTR Great Northern */
|
||||
background-color: rgb(79, 0, 128);
|
||||
color: white;
|
||||
}
|
||||
.tl {
|
||||
/* GTR Thameslink */
|
||||
background-color: rgb(191, 25, 183);
|
||||
color: white;
|
||||
}
|
||||
.gc {
|
||||
/* Grand Central */
|
||||
background-color: rgb(40, 40, 40);
|
||||
color: rgb(219, 123, 5);
|
||||
}
|
||||
.le,
|
||||
.ga {
|
||||
/*Greater Anglia */
|
||||
background-color: rgb(122, 124, 154);
|
||||
color: rgb(151, 0, 0);
|
||||
border-color: red;
|
||||
}
|
||||
.hx {
|
||||
/* Heathrow Express */
|
||||
background-color: rgb(181, 142, 211);
|
||||
color: black;
|
||||
}
|
||||
.ls {
|
||||
/* Locomotive Services Limited */
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
.lm {
|
||||
/* West Midlands Railway */
|
||||
background-color: rgb(120, 120, 120);
|
||||
border-color: rgb(230, 150, 0);
|
||||
color: white;
|
||||
}
|
||||
.lo {
|
||||
/*London Overground */
|
||||
background-color: rgb(231, 150, 0);
|
||||
color: rgb(0, 0, 210);
|
||||
}
|
||||
.lt {
|
||||
/* London Underground (when on Network Rail Metals) */
|
||||
background-color: rgb(203, 17, 17);
|
||||
color: rgb(0, 0, 210);
|
||||
}
|
||||
.me {
|
||||
/* Merseyrail */
|
||||
background-color: rgb(229, 229, 16);
|
||||
color: rgb(96, 96, 96);
|
||||
}
|
||||
.lr {
|
||||
/* NR On-Track Machines */
|
||||
background-color: yellow;
|
||||
color: black;
|
||||
}
|
||||
.tw {
|
||||
/* Tyne & Wear Metro (when on Network Rail Metals) */
|
||||
background-color: rgb(212, 169, 0);
|
||||
color: black;
|
||||
}
|
||||
.sr {
|
||||
/* ScotRail */
|
||||
background-color: rgb(16, 16, 200);
|
||||
color: white;
|
||||
}
|
||||
.sj {
|
||||
/* South Yorkshire (Sheffield) SuperTram (When on network rail metals) */
|
||||
background-color: rgb(255, 185, 56);
|
||||
color: rgb(58, 58, 255);
|
||||
}
|
||||
.se {
|
||||
/* Southeastern */
|
||||
background-color: darkblue;
|
||||
color: rgb(107, 152, 207);
|
||||
}
|
||||
.sn {
|
||||
/* GTR (Southern) */
|
||||
background-color: rgb(11, 74, 11);
|
||||
color: rgb(231, 231, 188);
|
||||
}
|
||||
.xr {
|
||||
/* Elizabeth Line (EastWest CrossRail) */
|
||||
background-color: rgb(91, 0, 171);
|
||||
color: rgb(207, 207, 255);
|
||||
}
|
||||
.tp {
|
||||
/* TransPennine Express */
|
||||
background-color: rgb(197, 130, 238);
|
||||
color: rgb(0, 98, 226);
|
||||
}
|
||||
.vt {
|
||||
/* Avanti West Coast */
|
||||
background-color: rgb(37, 37, 86);
|
||||
color: rgb(230, 96, 0);
|
||||
}
|
||||
.gr {
|
||||
/* LNER */
|
||||
background-color: rgb(202, 0, 0);
|
||||
color: white;
|
||||
}
|
||||
.wc {
|
||||
/* West Coast Railway (Spot Hire/Charter) */
|
||||
background-color: maroon;
|
||||
color: rgb(225, 190, 92);
|
||||
}
|
||||
.ty {
|
||||
/* Vintage Trains (Tour Operator) */
|
||||
background-color: green;
|
||||
color: white;
|
||||
}
|
||||
.ld {
|
||||
/* Lumo */
|
||||
background-color: whitesmoke;
|
||||
color: blue;
|
||||
}
|
||||
.so {
|
||||
/* Rail Adventure */
|
||||
background-color: rgb(93, 93, 93);
|
||||
color: rgb(93, 195, 93);
|
||||
}
|
||||
.ln {
|
||||
/* Grand Union Trains */
|
||||
background-color: rgb(89, 89, 89);
|
||||
color: white;
|
||||
}
|
||||
.uk {
|
||||
background-color: whitesmoke;
|
||||
color: black;
|
||||
}
|
||||
</style>
|
@ -34,7 +34,8 @@
|
||||
<div class="container">
|
||||
<div class="container-header" on:click={expand} on:keypress={expand}>
|
||||
<span class="header"
|
||||
><StylesToc toc={service?.operator || ''} /> {service?.stops[0]['publicDeparture'] || service?.stops[0]['wttDeparture']}
|
||||
><StylesToc toc={service?.operator || ''} />
|
||||
{service?.stops[0]['publicDeparture'] || service?.stops[0]['wttDeparture']}
|
||||
{service?.stops[0]['tiploc']} to {service?.stops[service['stops'].length - 1]['tiploc']}</span
|
||||
>
|
||||
<span id="container-arrow" class:isExpanded>V</span>
|
||||
|
@ -7,7 +7,10 @@
|
||||
<svelte:head>
|
||||
<meta name="application-name" content="OwlBoard" />
|
||||
<meta name="author" content="Frederick Boniface" />
|
||||
<meta name="description" content="Get instant access to live train data, PIS codes, and location reference codes. Built by railway staff, for railway staff – your fastest route to accurate information." />
|
||||
<meta
|
||||
name="description"
|
||||
content="Get instant access to live train data, PIS codes, and location reference codes. Built by railway staff, for railway staff – your fastest route to accurate information."
|
||||
/>
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta name="theme-color" content="#00b7b7" />
|
||||
<link rel="icon" href="/images/icon.svg" type="image/svg+xml" />
|
||||
@ -16,6 +19,6 @@
|
||||
<title>OwlBoard</title>
|
||||
</svelte:head>
|
||||
{#if dev}
|
||||
<DevBanner />
|
||||
<DevBanner />
|
||||
{/if}
|
||||
<slot />
|
||||
|
@ -1,5 +1,6 @@
|
||||
<script>
|
||||
import Header from '$lib/navigation/header.svelte';
|
||||
import LogoutButton from '$lib/navigation/LogoutButton.svelte';
|
||||
import Header from '$lib/navigation/header.svelte';
|
||||
import Loading from '$lib/navigation/loading.svelte';
|
||||
import Nav from '$lib/navigation/nav.svelte';
|
||||
import { uuid } from '$lib/stores/uuid.js';
|
||||
@ -45,6 +46,8 @@
|
||||
{:else if data[0].domain != 'User not Found'}
|
||||
<p class="api_response">Registration Domain: {data[0]['domain']}</p>
|
||||
<p class="api_response">Access Time: {data[0]['atime']}</p>
|
||||
<LogoutButton />
|
||||
<p>Clicking the logout button will delete your data from your browser. You will then be able to make a new account, your old account will remain inactive and be deleted after 90 days.</p>
|
||||
{:else}
|
||||
<p class="api_response">You are not registered, we don't have any data stored.</p>
|
||||
{/if}
|
||||
|
@ -3,8 +3,8 @@
|
||||
import Nav from '$lib/navigation/nav.svelte';
|
||||
import Loading from '$lib/navigation/loading.svelte';
|
||||
import { onMount } from 'svelte';
|
||||
import { uuid } from '$lib/stores/uuid.js';
|
||||
import { checkAuth } from '$lib/libauth';
|
||||
import { checkAuth, logout } from '$lib/libauth';
|
||||
import LogoutButton from '$lib/navigation/LogoutButton.svelte';
|
||||
|
||||
const title = 'Register';
|
||||
|
||||
@ -42,7 +42,7 @@
|
||||
onMount(async () => {
|
||||
const auth = await checkAuth();
|
||||
if (auth.uuidPresent === false) {
|
||||
state = 'unreg';
|
||||
state = 'unreg';
|
||||
} else if (auth.uuidPresent === true) {
|
||||
state = 'reg';
|
||||
}
|
||||
@ -50,54 +50,57 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<Header {title} />
|
||||
{#if isLoading}
|
||||
<Loading />
|
||||
{:else}
|
||||
{#if state == 'unreg'}
|
||||
<p>The staff version of OwlBoard offers several extra features:</p>
|
||||
<ul>
|
||||
<li>Access the Train Finder</li>
|
||||
<li>Access the PIS Finder</li>
|
||||
<li>More detailed departure boards:</li>
|
||||
|
||||
<section class="content">
|
||||
{#if isLoading}
|
||||
<Loading />
|
||||
{:else if state == 'unreg'}
|
||||
<p>The staff version of OwlBoard offers several extra features:</p>
|
||||
<ul>
|
||||
<li>Non-Passenger movements</li>
|
||||
<li>Hidden platform numbers</li>
|
||||
<li>Display up to 25 services</li>
|
||||
<li>Access the Train Finder</li>
|
||||
<li>Access the PIS Finder</li>
|
||||
<li>More detailed departure boards:</li>
|
||||
<ul>
|
||||
<li>Non-Passenger movements</li>
|
||||
<li>Hidden platform numbers</li>
|
||||
<li>Display up to 25 services</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</ul>
|
||||
<p>To register, you will need to enter a work email address to receive a confirmation email</p>
|
||||
<form on:submit={request}>
|
||||
<input type="text" autocomplete="email" placeholder="Enter work email" bind:value={inputValue} on:input={handleInput} /><br />
|
||||
<label for="checkbox">
|
||||
I have read and accept the terms of the <a href="/more/privacy">Privacy Policy</a><br />
|
||||
<input id="checkbox" type="checkbox" required />
|
||||
</label><br />
|
||||
<button type="submit">Submit</button>
|
||||
</form>
|
||||
{:else if state == 'sent'}
|
||||
<p>An email has been sent, click the link in the email to activate your profile.</p>
|
||||
<p>When you click the link, your authorisation key will be automatically be stored in your browser.</p>
|
||||
<p>If you use multiple browsers, you will only be logged in using the browser you open the link with.</p>
|
||||
<p>You will be able to register again using the same email address</p>
|
||||
{:else if state == 'unauth'}
|
||||
<p>The email address you entered does not belong to an authorised business.</p>
|
||||
<p>If you think this is an error, you can report an issue in the 'More' menu.</p>
|
||||
{:else if state == 'error'}
|
||||
<p>There was an error processing your request.</p>
|
||||
<p>Check that the email you entered was correct or try again later.</p>
|
||||
{:else if state == 'reg'}
|
||||
<p>
|
||||
You are already registered for OwlBoard. If you've recently logged out or updated, you may need to refresh this page to register as old data could still be stored in your
|
||||
browser.
|
||||
</p>
|
||||
{/if}
|
||||
{/if}
|
||||
<p>To register, you will need to enter a work email address to receive a confirmation email</p>
|
||||
<form on:submit={request}>
|
||||
<input type="text" autocomplete="email" placeholder="Enter work email" bind:value={inputValue} on:input={handleInput} /><br />
|
||||
<label for="checkbox">
|
||||
I have read and accept the terms of the <a href="/more/privacy">Privacy Policy</a><br />
|
||||
<input id="checkbox" type="checkbox" required />
|
||||
</label><br />
|
||||
<button type="submit">Submit</button>
|
||||
</form>
|
||||
{:else if state == 'sent'}
|
||||
<p>An email has been sent, click the link in the email to activate your profile.</p>
|
||||
<p>When you click the link, your authorisation key will be automatically be stored in your browser.</p>
|
||||
<p>If you use multiple browsers, you will only be logged in using the browser you open the link with.</p>
|
||||
<p>You will be able to register again using the same email address</p>
|
||||
{:else if state == 'unauth'}
|
||||
<p>The email address you entered does not belong to an authorised business.</p>
|
||||
<p>If you think this is an error, you can report an issue by <a href="/more/report">reporting an issue</a>.</p>
|
||||
{:else if state == 'error'}
|
||||
<p>There was an error processing your request.</p>
|
||||
<p>Check that the email you entered was correct or try again later.</p>
|
||||
{:else if state == 'reg'}
|
||||
<p>
|
||||
You are already registered for OwlBoard. If you've recently logged out or updated, you may need to refresh this page to register as old data could still be stored in your
|
||||
browser.
|
||||
</p>
|
||||
<LogoutButton />
|
||||
{/if}
|
||||
</section>
|
||||
<Nav />
|
||||
|
||||
<style>
|
||||
.content {
|
||||
margin-top: 30px;
|
||||
}
|
||||
p {
|
||||
margin: 10px;
|
||||
}
|
||||
|
@ -26,13 +26,13 @@
|
||||
<a class="data" href="https://git.fjla.uk/owlboard/owlboard-svelte" target="_blank">Web-app version<br /><span class="data">{version}-{versionTag}</span></a>
|
||||
</p>
|
||||
<p>
|
||||
<a class="data" href="https://git.fjla.uk/owlboard/backend" target="_blank">API Server version<br /><span class="data">{data?.backend || "Unknown"}</span></a>
|
||||
<a class="data" href="https://git.fjla.uk/owlboard/backend" target="_blank">API Server version<br /><span class="data">{data?.backend || 'Unknown'}</span></a>
|
||||
</p>
|
||||
<p>
|
||||
<a class="data" href="https://git.fjla.uk/owlboard/db-manager" target="_blank">DB Manager version<br /><span class="data">{data?.['db-manager'] || 'Unknown'}</span></a>
|
||||
</p>
|
||||
<p>
|
||||
<a class="data" href="https://git.fjla.uk/owlboard/mq-client" target="_blank">MQ Client version<br><span class="data">{data?.['mq-client'] || 'Not installed'}</span></a>
|
||||
<a class="data" href="https://git.fjla.uk/owlboard/mq-client" target="_blank">MQ Client version<br /><span class="data">{data?.['mq-client'] || 'Not installed'}</span></a>
|
||||
</p>
|
||||
</Island>
|
||||
{:catch}
|
||||
|
@ -1,18 +1,18 @@
|
||||
{
|
||||
"extends": "./.svelte-kit/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"outDir": "./dist"
|
||||
}
|
||||
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
|
||||
//
|
||||
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
|
||||
// from the referenced tsconfig.json - TypeScript does not merge them in
|
||||
"extends": "./.svelte-kit/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"outDir": "./dist"
|
||||
}
|
||||
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
|
||||
//
|
||||
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
|
||||
// from the referenced tsconfig.json - TypeScript does not merge them in
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user