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>
24 lines
828 B
JavaScript
24 lines
828 B
JavaScript
import { truncate } from './helpers.js';
|
|
const stringEscapeChars = new RegExp("['\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5" +
|
|
'\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]', 'g');
|
|
const escapeCharacters = {
|
|
'\b': '\\b',
|
|
'\t': '\\t',
|
|
'\n': '\\n',
|
|
'\f': '\\f',
|
|
'\r': '\\r',
|
|
"'": "\\'",
|
|
'\\': '\\\\',
|
|
};
|
|
const hex = 16;
|
|
const unicodeLength = 4;
|
|
function escape(char) {
|
|
return (escapeCharacters[char] ||
|
|
`\\u${`0000${char.charCodeAt(0).toString(hex)}`.slice(-unicodeLength)}`);
|
|
}
|
|
export default function inspectString(string, options) {
|
|
if (stringEscapeChars.test(string)) {
|
|
string = string.replace(stringEscapeChars, escape);
|
|
}
|
|
return options.stylize(`'${truncate(string, options.truncate - 2)}'`, 'string');
|
|
}
|