This repository was archived by the owner on Sep 23, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathservice_worker.js
More file actions
97 lines (85 loc) · 2.51 KB
/
Copy pathservice_worker.js
File metadata and controls
97 lines (85 loc) · 2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/* global self,URL,Response */
var osmdb = require('osm-p2p')
var osmRouter = require('osm-p2p-server')
var streamFromPromise = require('stream-from-promise')
var onEnd = require('end-of-stream')
var MockResponse = require('./lib/response')
var headers = require('./lib/headers')
var osm = osmdb()
var router = osmRouter(osm)
self.addEventListener('install', function (event) {
event.waitUntil(self.skipWaiting())
})
self.addEventListener('activate', function (event) {
event.waitUntil(self.clients.claim())
})
self.addEventListener('fetch', function (event) {
var req = mockRequest(event.request)
var res = new MockResponse()
if (router.handle(req, res)) {
console.log(req.url)
event.respondWith(resToPromise(res))
}
})
self.addEventListener('message', function (event) {
if (event.data === 'cleanup') {
cleanup(function (err) {
console.log('cleaned')
if (err) return event.ports[0].postMessage({ error: err })
osm = osmdb()
router = osmRouter(osm)
event.ports[0].postMessage('cleaned')
})
}
})
function cleanup (cb) {
var pending = 3
var errors = []
cleanChunkStore(osm.kdb.kdb.store, done)
cleanLevelDB(osm.db, done)
cleanLevelDB(osm.log.db, done)
function done (err) {
console.log('done', pending)
if (err) errors.push(err)
if (--pending === 0) cb(errors[0])
}
}
function cleanLevelDB (levelup, cb) {
var storeName = levelup.db.idb.storeName
var db = levelup.db.idb.db
var transaction = db.transaction([storeName], 'readwrite')
var store = transaction.objectStore(storeName)
transaction.addEventListener('error', function (err) { cb(err) })
var request = store.clear()
request.onsuccess = function () { cb() }
request.onerror = cb
}
function cleanChunkStore (chunkStore, cb) {
chunkStore._store('readwrite', function (err, store) {
if (err) return cb(err)
var request = store.clear()
request.onsuccess = function () { cb() }
request.onerror = cb
})
}
function mockRequest (request) {
var req = streamFromPromise(request.text())
var url = new URL(request.url)
req.url = url.pathname + url.search
req.method = request.method
req.headers = headers.toObject(request.headers)
return req
}
function resToPromise (res) {
return new Promise(function (resolve, reject) {
onEnd(res, function (err) {
if (err) return reject(err)
var init = {
status: res.statusCode,
statusText: res.statusMessage,
headers: res._headers
}
resolve(new Response(res._body, init))
})
})
}