Merge branch 'main' of raspberrypi.local:~/Projects/dandelion
This commit is contained in:
@@ -99,6 +99,7 @@
|
|||||||
|
|
||||||
#log {
|
#log {
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
|
text-wrap: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button {
|
.button {
|
||||||
|
|||||||
45
main.go
45
main.go
@@ -1,3 +1,45 @@
|
|||||||
|
// TODO
|
||||||
|
// 1. Convery network messages to flatbuffers so we don't need to parse JSON in Go.
|
||||||
|
// Use binary WS messages. Generate for Go and JS and use that everywhere. We can
|
||||||
|
// also use this for WebRTC messages.
|
||||||
|
// 2. Keep a list of all nodes that bootstrapped in the last N minutes.
|
||||||
|
// 3. When a node bootstraps, send it a random list of the nodes we know about.
|
||||||
|
// 4. Do the signalling to connect those nodes.
|
||||||
|
// 5. Each node will know about N other nodes. To find get the data for a feed,
|
||||||
|
// a node will need to find another node that has that data. To do that we'll need to
|
||||||
|
// implement a search message that is sent to all currently connected nodes, and they
|
||||||
|
// forward to all their nodes, passing back the address of the node that has the data.
|
||||||
|
// Once we find it, we'll do the signalling to connect to it via Web RTC via our existing connected nodes.
|
||||||
|
// -----
|
||||||
|
// Feeds. People can curate feeds which can be any combination of hashtags, serch terms and users.
|
||||||
|
// Invite-only communities. Just block everyone else even if they post to it.
|
||||||
|
// Limit to friends and friends of friends
|
||||||
|
|
||||||
|
// MVP
|
||||||
|
// You connect to the person you want to get the post from to get the post
|
||||||
|
// they give you the post
|
||||||
|
// If they're offline, you can't get their updates.
|
||||||
|
// This is very stupid, but it's simplest thing.
|
||||||
|
// The bootstrap server connects you to them directly via WebRTC
|
||||||
|
// This will make the thing actually function as a little toy for people to play with.
|
||||||
|
// This will let us test whether background tabs respond to webrtc requests.
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
// Need to have identity sorted out
|
||||||
|
// When you read someone's posts, you also cache them locally
|
||||||
|
// cache priority goes mutuals->people you follow->people who you folllow, follow, so you're always
|
||||||
|
// caching your mutual's posts
|
||||||
|
// Posts are samll, so caching per-post will work fine.
|
||||||
|
// Then the process is for the bootstrap server to remember all nodes and what they're caching
|
||||||
|
// This will allow distributed content delivery but put a memory and bendwidth strain on the
|
||||||
|
// bootstrap sever. Look into Web Transport for the raspberry pi overhead. Could buy a few more RPIs
|
||||||
|
// and make a little cluster
|
||||||
|
// Domain name so we can get a certificate and serve HTTPS / HTTP3
|
||||||
|
|
||||||
|
// Think about compiling Typescript on initial access and caching the JS in a service worker
|
||||||
|
// so you don't need a build system to change things.
|
||||||
|
// Think about self-hosting the client so the system can be completely self-hosted
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -34,6 +76,7 @@ func handleWebSocket(w http.ResponseWriter, r *http.Request) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
log.Printf("recv: %s", message)
|
log.Printf("recv: %s", message)
|
||||||
|
|
||||||
err = conn.WriteMessage(mt, message)
|
err = conn.WriteMessage(mt, message)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Write error:", err)
|
log.Println("Write error:", err)
|
||||||
@@ -73,7 +116,7 @@ func noDirListing(h http.Handler, root string) http.HandlerFunc {
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
dir := "./"
|
dir := "./"
|
||||||
port := 80
|
port := 6789
|
||||||
|
|
||||||
addr := ":" + strconv.Itoa(port)
|
addr := ":" + strconv.Itoa(port)
|
||||||
log.Printf("Starting server on %s", addr)
|
log.Printf("Starting server on %s", addr)
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"typescript": "^5.2.2"
|
"typescript": "^5.4.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
36
src/main.ts
36
src/main.ts
@@ -40,6 +40,21 @@ class Post {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.addEventListener('scroll', () => {
|
||||||
|
// Total height of the document
|
||||||
|
const totalPageHeight = document.body.scrollHeight;
|
||||||
|
|
||||||
|
// Current scroll position
|
||||||
|
const scrollPoint = window.scrollY + window.innerHeight;
|
||||||
|
|
||||||
|
// Check if scrolled to bottom
|
||||||
|
if (scrollPoint >= totalPageHeight) {
|
||||||
|
console.log('Scrolled to the bottom!');
|
||||||
|
console.log(scrollPoint, totalPageHeight);
|
||||||
|
// You can perform your action here
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
function initMarkdown() {
|
function initMarkdown() {
|
||||||
const renderer = new marked.Renderer();
|
const renderer = new marked.Renderer();
|
||||||
@@ -254,6 +269,8 @@ function connectWebsocket(userID: string) {
|
|||||||
websocket.onopen = function (evt) {
|
websocket.onopen = function (evt) {
|
||||||
log("Websocket: CONNECTED");
|
log("Websocket: CONNECTED");
|
||||||
websocket.send(`{"messageType":"connect", "id": "${userID}"}`);
|
websocket.send(`{"messageType":"connect", "id": "${userID}"}`);
|
||||||
|
|
||||||
|
let websocketPingInterval = window.setInterval(()=>{websocket.send(`{"messageType":"ping", "id": "${userID}"}`);}, 5000)
|
||||||
};
|
};
|
||||||
|
|
||||||
websocket.onclose = function (evt) {
|
websocket.onclose = function (evt) {
|
||||||
@@ -271,15 +288,24 @@ function connectWebsocket(userID: string) {
|
|||||||
return websocket;
|
return websocket;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setFont(fontName: string) {
|
function setFont(fontName: string, fontSize: string) {
|
||||||
|
|
||||||
|
let content = document.getElementById('content');
|
||||||
|
|
||||||
|
if (!content) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
content.style.fontFamily = fontName;
|
||||||
|
content.style.fontSize = fontSize;
|
||||||
|
|
||||||
document.body.style.fontFamily = fontName;
|
|
||||||
let textArea = document.getElementById('textarea_post');
|
let textArea = document.getElementById('textarea_post');
|
||||||
if (!textArea) {
|
if (!textArea) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
textArea.style.fontFamily = fontName;
|
textArea.style.fontFamily = fontName;
|
||||||
|
textArea.style.fontSize = fontSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
function initOffline() {
|
function initOffline() {
|
||||||
@@ -297,8 +323,8 @@ function initButtons(userID: string, posts: Post[]) {
|
|||||||
let font1Button = document.getElementById("button_font1") as HTMLButtonElement;
|
let font1Button = document.getElementById("button_font1") as HTMLButtonElement;
|
||||||
let font2Button = document.getElementById("button_font2") as HTMLButtonElement;
|
let font2Button = document.getElementById("button_font2") as HTMLButtonElement;
|
||||||
|
|
||||||
font1Button.addEventListener('click', () => { setFont('Bookerly'); });
|
font1Button.addEventListener('click', () => { setFont('Bookerly', '16px') });
|
||||||
font2Button.addEventListener('click', () => { setFont('Virgil') });
|
font2Button.addEventListener('click', () => { setFont('Virgil', '24px') });
|
||||||
|
|
||||||
|
|
||||||
let postButton = document.getElementById("button_post") as HTMLButtonElement;
|
let postButton = document.getElementById("button_post") as HTMLButtonElement;
|
||||||
@@ -351,7 +377,7 @@ async function main() {
|
|||||||
log(`Persisted storage granted: ${isPersisted}`);
|
log(`Persisted storage granted: ${isPersisted}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
log(`Persisted: ${(await navigator.storage.persisted()).toString()}`);
|
log(`Persisted: ${(await navigator?.storage?.persisted())?.toString()}`);
|
||||||
|
|
||||||
initMarkdown();
|
initMarkdown();
|
||||||
|
|
||||||
|
|||||||
2
sw.js
2
sw.js
@@ -51,4 +51,4 @@ addEventListener("message", async (e) => {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvc3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlCQUF5QjtBQUN6QixNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBRztJQUN2QixhQUFhO0lBQ2IsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixjQUFjO0NBQ2IsQ0FBQztBQUVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFLLEVBQUUsRUFBRTtJQUN6QyxDQUFDLENBQUMsU0FBUyxDQUNULENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDVixNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FDVCxxREFBcUQsRUFDckQsY0FBYyxDQUNmLENBQUM7UUFDRixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDLEVBQUUsQ0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBSyxFQUFFLEVBQUU7SUFDdkMsQ0FBQyxDQUFDLFdBQVcsQ0FDWCxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ1YsTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQ1QsNENBQTRDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQzVELENBQUM7WUFDRixPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsSUFBSSxRQUFRLENBQUM7UUFDYixJQUFJO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCw4REFBOEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDOUUsQ0FBQztZQUVGLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakI7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FDVCw4Q0FBOEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDOUQsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7U0FDOUQ7UUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdkMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDLEVBQUUsQ0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTNDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDbkIsS0FBSyxZQUFZO1lBQ2YsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0RBQWdELENBQUMsQ0FBQztZQUM5RCxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdEMsTUFBTTtLQUNUO0FBQ0gsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBFc3RhYmxpc2ggYSBjYWNoZSBuYW1lXG5jb25zdCBjYWNoZU5hbWUgPSBcImRhbmRlbGlvbl9jYWNoZV92MVwiO1xuXG5jb25zdCBjb250ZW50VG9DYWNoZSA9IFtcblwiL2luZGV4Lmh0bWxcIixcblwiL21haW4uanNcIixcblwiL21hcmtlZC5taW4uanNcIixcblwiL2RiLmpzXCIsXG5cIi9ib29rZXJseS53b2ZmMlwiLFxuXCIvdmlyZ2lsLndvZmYyXCIsXG5cIi9mYXZpY29uLmljb1wiXG5dO1xuXG5zZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnN0YWxsXCIsIChlOmFueSkgPT4ge1xuICBlLndhaXRVbnRpbChcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY2FjaGUgPSBhd2FpdCBjYWNoZXMub3BlbihjYWNoZU5hbWUpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiW1NlcnZpY2UgV29ya2VyXSBDYWNoaW5nIGFsbDogYXBwIHNoZWxsIGFuZCBjb250ZW50XCIsXG4gICAgICAgIGNvbnRlbnRUb0NhY2hlXG4gICAgICApO1xuICAgICAgYXdhaXQgY2FjaGUuYWRkQWxsKGNvbnRlbnRUb0NhY2hlKTtcbiAgICB9KSgpXG4gICk7XG59KTtcblxuc2VsZi5hZGRFdmVudExpc3RlbmVyKFwiZmV0Y2hcIiwgKGU6YW55KSA9PiB7XG4gIGUucmVzcG9uZFdpdGgoXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBjYWNoZXMubWF0Y2goZS5yZXF1ZXN0KTtcbiAgICAgIGlmIChyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbU2VydmljZSBXb3JrZXJdIENhY2hlIGhpdCBmb3IgcmVzb3VyY2U6ICR7ZS5yZXF1ZXN0LnVybH1gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW1NlcnZpY2UgV29ya2VyXSBDYWNoZSBtaXNzLCBhdHRlbXB0aW5nIHRvIGZldGNoIHJlc291cmNlOiAke2UucmVxdWVzdC51cmx9YFxuICAgICAgICApO1xuXG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZS5yZXF1ZXN0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FjaGUgPSBhd2FpdCBjYWNoZXMub3BlbihjYWNoZU5hbWUpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbU2VydmljZSBXb3JrZXJdIEFkZGluZyByZXNvdXJjZSB0byBjYWNoZTogJHtlLnJlcXVlc3QudXJsfWBcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcmVzb3VyY2U6ICR7ZS5yZXF1ZXN0LnVybH1gKVxuICAgICAgfVxuICAgICAgY2FjaGUucHV0KGUucmVxdWVzdCwgcmVzcG9uc2UuY2xvbmUoKSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkoKVxuICApO1xufSk7XG5cbmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGFzeW5jIChlKSA9PiB7XG4gIGNvbnNvbGUubG9nKGBNZXNzYWdlIHJlY2VpdmVkOiAke2UuZGF0YX1gKTtcblxuICBzd2l0Y2ggKGUuZGF0YS50eXBlKSB7XG4gICAgY2FzZSBcInVwZGF0ZU1haW5cIjpcbiAgICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgY2FjaGVzLm9wZW4oY2FjaGVOYW1lKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmljZSBXb3JrZXJdIENhY2hpbmcgbmV3IHJlc291cmNlOiBtYWluLmpzYCk7XG4gICAgICBjYWNoZS5wdXQoXCIvbWFpbi5qc1wiLCBuZXcgUmVzcG9uc2UoKSk7XG4gICAgICBicmVhaztcbiAgfVxufSk7XG4iXX0=
|
//# sourceMappingURL=sw.js.map
|
||||||
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"sw.js","sourceRoot":"","sources":["src/sw.ts"],"names":[],"mappings":";AAAA,yBAAyB;AACzB,MAAM,SAAS,GAAG,oBAAoB,CAAC;AAEvC,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;AAEnE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAK,EAAE,EAAE;IACzC,CAAC,CAAC,SAAS,CACT,CAAC,KAAK,IAAI,EAAE;QACV,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CACT,qDAAqD,EACrD,cAAc,CACf,CAAC;QACF,MAAM,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC,CAAC,EAAE,CACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAK,EAAE,EAAE;IACvC,CAAC,CAAC,WAAW,CACX,CAAC,KAAK,IAAI,EAAE;QACV,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE;YACL,OAAO,CAAC,GAAG,CACT,4CAA4C,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC5D,CAAC;YACF,OAAO,CAAC,CAAC;SACV;QAED,IAAI,QAAQ,CAAC;QACb,IAAI;YACF,OAAO,CAAC,GAAG,CACT,8DAA8D,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC9E,CAAC;YAEF,QAAQ,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SACnC;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;QACD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CACT,8CAA8C,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC9D,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;SAC9D;QACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,EAAE,CACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3C,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;QACnB,KAAK,YAAY;YACf,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC9D,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC;YACtC,MAAM;KACT;AACH,CAAC,CAAC,CAAC"}
|
{"version":3,"file":"sw.js","sourceRoot":"","sources":["src/sw.ts"],"names":[],"mappings":";AAAA,yBAAyB;AACzB,MAAM,SAAS,GAAG,oBAAoB,CAAC;AAEvC,MAAM,cAAc,GAAG;IACvB,aAAa;IACb,UAAU;IACV,gBAAgB;IAChB,QAAQ;IACR,iBAAiB;IACjB,eAAe;IACf,cAAc;CACb,CAAC;AAEF,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAK,EAAE,EAAE;IACzC,CAAC,CAAC,SAAS,CACT,CAAC,KAAK,IAAI,EAAE;QACV,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CACT,qDAAqD,EACrD,cAAc,CACf,CAAC;QACF,MAAM,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC,CAAC,EAAE,CACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAK,EAAE,EAAE;IACvC,CAAC,CAAC,WAAW,CACX,CAAC,KAAK,IAAI,EAAE;QACV,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC;YACN,OAAO,CAAC,GAAG,CACT,4CAA4C,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC5D,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CACT,8DAA8D,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC9E,CAAC;YAEF,QAAQ,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CACT,8CAA8C,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC9D,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC/D,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,EAAE,CACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3C,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,YAAY;YACf,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC9D,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC;YACtC,MAAM;IACV,CAAC;AACH,CAAC,CAAC,CAAC"}
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
|
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
|
||||||
// "declaration": true, /* Generates corresponding '.d.ts' file. */
|
// "declaration": true, /* Generates corresponding '.d.ts' file. */
|
||||||
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
||||||
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
"sourceMap": true, /* Generates corresponding '.map' file. */
|
||||||
// "outFile": "./", /* Concatenate and emit output to single file. */
|
// "outFile": "./", /* Concatenate and emit output to single file. */
|
||||||
"outDir": "./", /* Redirect output structure to the directory. */
|
"outDir": "./", /* Redirect output structure to the directory. */
|
||||||
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||||
@@ -58,8 +58,8 @@
|
|||||||
/* Source Map Options */
|
/* Source Map Options */
|
||||||
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
||||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||||
"inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
||||||
"inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
||||||
|
|
||||||
/* Experimental Options */
|
/* Experimental Options */
|
||||||
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
||||||
|
|||||||
Reference in New Issue
Block a user