Add progressive web app companion for cross-platform access
Vite + TypeScript PWA that mirrors the Android app's core features: - Pre-processed shelter data (build-time UTM33N→WGS84 conversion) - Leaflet map with shelter markers, user location, and offline tiles - Canvas compass arrow (ported from DirectionArrowView.kt) - IndexedDB shelter cache with 7-day staleness check - Service worker with CacheFirst tiles and precached app shell - i18n for en, nb, nn (ported from Android strings.xml) - iOS/Android compass handling with low-pass filter - Respects user map interaction (no auto-snap on pan/zoom) - Build revision cache-breaker for reliable SW updates Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
46365b713b
commit
e8428de775
12051 changed files with 1799735 additions and 0 deletions
207
pwa/node_modules/vitest/dist/coverage.d.ts
generated
vendored
Normal file
207
pwa/node_modules/vitest/dist/coverage.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
import * as vite from 'vite';
|
||||
import { R as ResolvedCoverageOptions, V as Vitest, a as ReportContext } from './chunks/reporters.nr4dxCkA.js';
|
||||
import { A as AfterSuiteRunMeta } from './chunks/environment.LoooBwUu.js';
|
||||
import '@vitest/runner';
|
||||
import 'node:stream';
|
||||
import '@vitest/utils';
|
||||
import './chunks/config.Cy0C388Z.js';
|
||||
import '@vitest/pretty-format';
|
||||
import '@vitest/snapshot';
|
||||
import '@vitest/snapshot/environment';
|
||||
import 'vite-node';
|
||||
import 'chai';
|
||||
import '@vitest/utils/source-map';
|
||||
import 'vite-node/client';
|
||||
import 'vite-node/server';
|
||||
import './chunks/benchmark.geERunq4.js';
|
||||
import '@vitest/runner/utils';
|
||||
import 'tinybench';
|
||||
import '@vitest/snapshot/manager';
|
||||
import 'node:fs';
|
||||
|
||||
interface CoverageSummaryData {
|
||||
lines: Totals;
|
||||
statements: Totals;
|
||||
branches: Totals;
|
||||
functions: Totals;
|
||||
}
|
||||
|
||||
declare class CoverageSummary {
|
||||
constructor(data: CoverageSummary | CoverageSummaryData);
|
||||
merge(obj: CoverageSummary): CoverageSummary;
|
||||
toJSON(): CoverageSummaryData;
|
||||
isEmpty(): boolean;
|
||||
data: CoverageSummaryData;
|
||||
lines: Totals;
|
||||
statements: Totals;
|
||||
branches: Totals;
|
||||
functions: Totals;
|
||||
}
|
||||
|
||||
interface CoverageMapData {
|
||||
[key: string]: FileCoverage | FileCoverageData;
|
||||
}
|
||||
|
||||
declare class CoverageMap {
|
||||
constructor(data: CoverageMapData | CoverageMap);
|
||||
addFileCoverage(pathOrObject: string | FileCoverage | FileCoverageData): void;
|
||||
files(): string[];
|
||||
fileCoverageFor(filename: string): FileCoverage;
|
||||
filter(callback: (key: string) => boolean): void;
|
||||
getCoverageSummary(): CoverageSummary;
|
||||
merge(data: CoverageMapData | CoverageMap): void;
|
||||
toJSON(): CoverageMapData;
|
||||
data: CoverageMapData;
|
||||
}
|
||||
|
||||
interface Location {
|
||||
line: number;
|
||||
column: number;
|
||||
}
|
||||
|
||||
interface Range {
|
||||
start: Location;
|
||||
end: Location;
|
||||
}
|
||||
|
||||
interface BranchMapping {
|
||||
loc: Range;
|
||||
type: string;
|
||||
locations: Range[];
|
||||
line: number;
|
||||
}
|
||||
|
||||
interface FunctionMapping {
|
||||
name: string;
|
||||
decl: Range;
|
||||
loc: Range;
|
||||
line: number;
|
||||
}
|
||||
|
||||
interface FileCoverageData {
|
||||
path: string;
|
||||
statementMap: { [key: string]: Range };
|
||||
fnMap: { [key: string]: FunctionMapping };
|
||||
branchMap: { [key: string]: BranchMapping };
|
||||
s: { [key: string]: number };
|
||||
f: { [key: string]: number };
|
||||
b: { [key: string]: number[] };
|
||||
}
|
||||
|
||||
interface Totals {
|
||||
total: number;
|
||||
covered: number;
|
||||
skipped: number;
|
||||
pct: number;
|
||||
}
|
||||
|
||||
interface Coverage {
|
||||
covered: number;
|
||||
total: number;
|
||||
coverage: number;
|
||||
}
|
||||
|
||||
declare class FileCoverage implements FileCoverageData {
|
||||
constructor(data: string | FileCoverage | FileCoverageData);
|
||||
merge(other: FileCoverageData): void;
|
||||
getBranchCoverageByLine(): { [line: number]: Coverage };
|
||||
getLineCoverage(): { [line: number]: number };
|
||||
getUncoveredLines(): number[];
|
||||
resetHits(): void;
|
||||
computeBranchTotals(): Totals;
|
||||
computeSimpleTotals(): Totals;
|
||||
toSummary(): CoverageSummary;
|
||||
toJSON(): object;
|
||||
|
||||
data: FileCoverageData;
|
||||
path: string;
|
||||
statementMap: { [key: string]: Range };
|
||||
fnMap: { [key: string]: FunctionMapping };
|
||||
branchMap: { [key: string]: BranchMapping };
|
||||
s: { [key: string]: number };
|
||||
f: { [key: string]: number };
|
||||
b: { [key: string]: number[] };
|
||||
}
|
||||
|
||||
type Threshold = 'lines' | 'functions' | 'statements' | 'branches';
|
||||
interface ResolvedThreshold {
|
||||
coverageMap: CoverageMap;
|
||||
name: string;
|
||||
thresholds: Partial<Record<Threshold, number | undefined>>;
|
||||
}
|
||||
/**
|
||||
* Holds info about raw coverage results that are stored on file system:
|
||||
*
|
||||
* ```json
|
||||
* "project-a": {
|
||||
* "web": {
|
||||
* "tests/math.test.ts": "coverage-1.json",
|
||||
* "tests/utils.test.ts": "coverage-2.json",
|
||||
* // ^^^^^^^^^^^^^^^ Raw coverage on file system
|
||||
* },
|
||||
* "ssr": { ... },
|
||||
* "browser": { ... },
|
||||
* },
|
||||
* "project-b": ...
|
||||
* ```
|
||||
*/
|
||||
type CoverageFiles = Map<NonNullable<AfterSuiteRunMeta['projectName']> | symbol, Record<AfterSuiteRunMeta['transformMode'], {
|
||||
[TestFilenames: string]: string;
|
||||
}>>;
|
||||
declare class BaseCoverageProvider<Options extends ResolvedCoverageOptions<'istanbul' | 'v8'>> {
|
||||
ctx: Vitest;
|
||||
readonly name: 'v8' | 'istanbul';
|
||||
version: string;
|
||||
options: Options;
|
||||
coverageFiles: CoverageFiles;
|
||||
pendingPromises: Promise<void>[];
|
||||
coverageFilesDirectory: string;
|
||||
_initialize(ctx: Vitest): void;
|
||||
createCoverageMap(): CoverageMap;
|
||||
generateReports(_: CoverageMap, __: boolean | undefined): Promise<void>;
|
||||
parseConfigModule(_: string): Promise<{
|
||||
generate: () => {
|
||||
code: string;
|
||||
};
|
||||
}>;
|
||||
resolveOptions(): Options;
|
||||
clean(clean?: boolean): Promise<void>;
|
||||
onAfterSuiteRun({ coverage, transformMode, projectName, testFiles }: AfterSuiteRunMeta): void;
|
||||
readCoverageFiles<CoverageType>({ onFileRead, onFinished, onDebug }: {
|
||||
/** Callback invoked with a single coverage result */
|
||||
onFileRead: (data: CoverageType) => void;
|
||||
/** Callback invoked once all results of a project for specific transform mode are read */
|
||||
onFinished: (project: Vitest['projects'][number], transformMode: AfterSuiteRunMeta['transformMode']) => Promise<void>;
|
||||
onDebug: ((...logs: any[]) => void) & {
|
||||
enabled: boolean;
|
||||
};
|
||||
}): Promise<void>;
|
||||
cleanAfterRun(): Promise<void>;
|
||||
onTestFailure(): Promise<void>;
|
||||
reportCoverage(coverageMap: unknown, { allTestsRun }: ReportContext): Promise<void>;
|
||||
reportThresholds(coverageMap: CoverageMap, allTestsRun: boolean | undefined): Promise<void>;
|
||||
/**
|
||||
* Constructs collected coverage and users' threshold options into separate sets
|
||||
* where each threshold set holds their own coverage maps. Threshold set is either
|
||||
* for specific files defined by glob pattern or global for all other files.
|
||||
*/
|
||||
private resolveThresholds;
|
||||
/**
|
||||
* Check collected coverage against configured thresholds. Sets exit code to 1 when thresholds not reached.
|
||||
*/
|
||||
private checkThresholds;
|
||||
/**
|
||||
* Check if current coverage is above configured thresholds and bump the thresholds if needed
|
||||
*/
|
||||
updateThresholds({ thresholds: allThresholds, onUpdate, configurationFile }: {
|
||||
thresholds: ResolvedThreshold[];
|
||||
configurationFile: unknown;
|
||||
onUpdate: () => void;
|
||||
}): Promise<void>;
|
||||
mergeReports(coverageMaps: unknown[]): Promise<void>;
|
||||
hasTerminalReporter(reporters: ResolvedCoverageOptions['reporter']): boolean;
|
||||
toSlices<T>(array: T[], size: number): T[][];
|
||||
createUncoveredFileTransformer(ctx: Vitest): (filename: string) => Promise<vite.TransformResult | null | undefined>;
|
||||
}
|
||||
|
||||
export { BaseCoverageProvider };
|
||||
Loading…
Add table
Add a link
Reference in a new issue