PageSourceSearch

https://0697.ai/sw/sw-moudules.utils.js

js 0697.ai collected 2026-10-05 11:46:55 UTC 3,631 bytes, 109 lines download raw bytes

1let currentDomain = self.location.origin;
2let availableDomains = [];
3let currentScope = '/';
4const apiUrl = 'api/public/health';
5
6const logs = {
7  "0001": "Checking domain availability..., current domain: {0}",
8  "0002": "Heartbeat lost. Last heartbeat was {0} seconds ago.",
9  "0003": "Current domain {0} is still available",
10  "0004": "try to switch to new domain...",
11  "0005": "switchToNewDomain",
12  "0006": "Switching to new domain: {0}",
13  "0007": "No available domain found",
14  "0008": "Activating fallback mode with {0} clients",
15  "0009": "Switching from {0} to {1}",
16  "0010": "Already on domain {0}, no need to switch.",
17  "0011": "Checking client: {0}",
18  "0012": "Navigated client to {0}",
19  "0013": "Failed to navigate client: {0}",
20  "0014": "Finished switching to {0}",
21  "0015": "Error updating manifest:",
22  "0016": "Fetching failed:, url: {0}",
23  "0017": "Error fetching domain list:{0}",
24  "0018": "domain list:{0}",
25  "0019": "switchMessage error as did not have any clients or available domains",
26  "0020": "indexedDB is not exist, before create it need install our app first",
27  "0021": "activate after caches.open",
28  "0022": "get newUrl & params with {0}",
29  "0023": "navigate to online.html, newUrl: {0}",
30  "0024": "openWindow to online.html as not support navigate, newUrl: {0}",
31  "0025": "activate init worker",
32  "0026": "createDynamicOnlinePage",
33  "0027": "User is offline",
34};
35
36// 创建统一的日志函数
37const logger = (level, key, ...args) => {
38  if (logs[key]) {
39    const message = logs[key].replace(/\{(\d+)\}/g, (match, index) => args[index] || '');
40    console[level](`[${key}] ${message}`);
41  }
42};
43
44// 使用统一的日志函数
45const log = (key, ...args) => logger('log', key, ...args);
46const error = (key, ...args) => logger('error', key, ...args);
47
48
49async function getKeyFromDb(id, resolve, reject) {
50  const store = await openDb();
51  const getRequest = store.get(id);
52  getRequest.onsuccess = () => resolve([[id], getRequest.result]);
53  getRequest.onerror = (e) => reject(e.target.error);
54}
55
56async function setKeyToDb(id, value) {
57  return new Promise((resolve, reject) => {
58    openDb().then((store) => {
59      const putRequest = store.put(value, id);
60      putRequest.onsuccess = () => resolve(true);
61      putRequest.onerror = (event) => reject(event.target.error);
62    });
63  });
64}
65
66async function openDb() {
67  return new Promise((resolve, reject) => {
68    const request = indexedDB.open("_ionicstorage", 2);
69    request.onerror = (event) => reject(event.target.error);
70    request.onsuccess = (event) => {
71      const db = event.target.result;
72      const transaction = db.transaction(["_ionickv"], "readwrite");
73      const store = transaction.objectStore("_ionickv");
74      resolve(store);
75    };
76    request.onupgradeneeded = (event) => {
77      const db = event.target.result;
78      if (!db.objectStoreNames.contains("_ionickv")) {
79        db.createObjectStore("_ionickv");
80      }
81    };
82  });
83}
84
85async function useStore(list) { // 批量从 indexedDB 中获取数据
86  const res = await Promise.all(list.map((id) => new Promise((resolve, reject) => getKeyFromDb(id, resolve, reject))));
87  try {
88    return Object.fromEntries(res);
89  } catch (e) { // 兼容性处理
90    const obj = {};
91    res.forEach(([key, value]) => {
92      obj[key] = value;
93    });
94    return obj;
95  }
96
97}
98function setParamsToUrlParamsarams(params) {
99  try {
100    return Object.entries(params).map(([key, value]) => `${key}=${value}`).join('&');
101  } catch (e) { // 兼容性处理
102    const str = '';
103    for (const key in params) {
104      str += `${key}=${params[key]}&`;
105    }
106    return str;
107  }
108}
109

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.