tibi-svelte-starter/src/index.ts

93 lines
2.5 KiB
TypeScript

import App from "./components/App.svelte"
import { location } from "./store"
import { apiBaseURL } from "./config"
import "./i18n"
console.log("API Base: ", apiBaseURL)
// update location store
const publishLocation = (_p?: string) => {
const push = !!_p
if (!_p && typeof window !== "undefined") {
_p = window.location?.pathname + window.location?.search
}
let _s: string
if (_p) {
const parts = _p.split("?")
_p = parts.shift()
_s = parts.join()
if (_s) _s = "?" + _s
}
const newLocation = {
path: _p,
search: _s,
push,
pop: !push,
}
location.set(newLocation)
}
// history proxy for location store update
if (typeof history !== "undefined") {
if (typeof Proxy !== "undefined") {
// modern browser
const historyApply = (target, thisArg, argumentsList) => {
publishLocation(argumentsList && argumentsList.length >= 2 && argumentsList[2])
Reflect.apply(target, thisArg, argumentsList)
}
history.pushState = new Proxy(history.pushState, {
apply: historyApply,
})
history.replaceState = new Proxy(history.replaceState, {
apply: historyApply,
})
} else {
// ie11
const pushStateFn = history.pushState
const replaceStateFn = history.replaceState
history.pushState = function (data: any, title: string, url?: string) {
publishLocation(url)
return pushStateFn.apply(history, arguments)
}
history.replaceState = function (data: any, title: string, url?: string) {
publishLocation(url)
return replaceStateFn.apply(history, arguments)
}
}
} // else ssr -> no history handling
typeof window !== "undefined" &&
window.addEventListener("popstate", (event) => {
publishLocation()
})
let appContainer = document?.getElementById("appContainer")
const hydrate = true //import.meta?.env?.MODE !== "development"
console.log("Features: ", { hydrate })
const app = new App({
target: appContainer,
props: {},
hydrate,
})
export default app
// PWA
if (typeof navigator !== "undefined" && "serviceWorker" in navigator) {
console.log("Registering service worker")
navigator.serviceWorker
.register("/serviceworker.js", { scope: "/" })
.then((reg) => {
console.log("Registration succeeded. Scope is " + reg.scope)
})
.catch((e) => {
console.log("Registration failed:", e)
})
}