Skip to content

Commit 3514296

Browse files
committed
refactor: 共享 KV 实例并精简缓存参数传递
1 parent a3d24f2 commit 3514296

7 files changed

Lines changed: 28 additions & 28 deletions

File tree

src/Hono.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { KV as Storage } from "@auraflare/shared";
12
import { fetch } from "@nsnanocat/util";
23
import { Hono } from "hono";
34
import HonoWorkerAdapter from "./class/HonoWorkerAdapter.mjs";
@@ -8,15 +9,16 @@ import { Request } from "./process/Request.mjs";
89
export default new Hono().all("/:rest{.*}", async c => {
910
let $request = await HonoWorkerAdapter.buildRequest(c);
1011
let $response;
11-
({ $request, $response } = await Request($request, c.env));
12+
const KV = c.env ? new Storage({ env: { namespaces: new Map([["", c.env.PersistentStore], ["@iRingo.Maps.Caches", c.env.Maps]]) } }) : undefined;
13+
({ $request, $response } = await Request($request, KV));
1214
switch (typeof $response) {
1315
case "object": // 有构造回复数据,返回构造的回复数据
1416
console.debug("finally", `echo $response: ${JSON.stringify($response, null, 2)}`);
1517
return HonoWorkerAdapter.writeResponse(c, $response);
1618
case "undefined": // 无构造回复数据,发送修改的请求数据
1719
console.debug("finally", `$request: ${JSON.stringify($request, null, 2)}`);
1820
$response = await fetch($request);
19-
$response = await Response($request, $response, c.env);
21+
$response = await Response($request, $response, KV);
2022
return HonoWorkerAdapter.writeResponse(c, $response);
2123
default:
2224
console.error(`不合法的 $response 类型: ${typeof $response}`);

src/class/GEOResourceManifest.mjs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { KV as Storage } from "@auraflare/shared";
2-
import { Console, fetch, Storage as PersistentStorage } from "@nsnanocat/util";
1+
import { Console, fetch, Storage } from "@nsnanocat/util";
32
import GEOResourceManifestDownload from "./GEOResourceManifestDownload.mjs";
43
export default class GEOResourceManifest {
54
/**
@@ -55,10 +54,10 @@ export default class GEOResourceManifest {
5554
* @param {string} queryString 查询字符串(包含前导问号) / Query string with leading question mark.
5655
* @param {string} eTag 实体标签 / Entity tag.
5756
* @param {Uint8Array|ArrayBuffer} rawBody 原始二进制 / Raw binary body.
58-
* @param {object} env Worker 环境对象 / Worker environment bindings.
57+
* @param {object} KV Shared KV storage instance.
5958
* @returns {Promise<boolean>} 是否写入成功 / Whether cache is written.
6059
*/
61-
static async setCache(caches = {}, queryString = "", eTag = "", rawBody = new Uint8Array(), env) {
60+
static async setCache(caches = {}, queryString = "", eTag = "", rawBody = new Uint8Array(), KV) {
6261
Console.log("☑️ Set Cache");
6362
if (!queryString) {
6463
Console.error("Set Cache", "Missing query string");
@@ -102,9 +101,11 @@ export default class GEOResourceManifest {
102101
Console.error("Set Cache", `Empty base64: ${queryString}`);
103102
return false;
104103
}
105-
if (!env?.PersistentStore) for (const key in caches) if (key.startsWith("?")) delete caches[key];
104+
if (!KV) for (const key in caches) if (key.startsWith("?")) delete caches[key];
106105
caches[queryString] = { eTag, base64 };
107-
const result = env?.PersistentStore ? await new Storage({ env: { namespace: env.PersistentStore } }).setItem("@iRingo.Maps.Caches", caches) : PersistentStorage.setItem("@iRingo.Maps.Caches", caches);
106+
const result = KV
107+
? await KV.setItem("@iRingo.Maps.Caches", caches)
108+
: Storage.setItem("@iRingo.Maps.Caches", caches);
108109
Console.log("✅ Set Cache");
109110
return result;
110111
}

src/function/setENV.mjs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { KV as Storage } from "@auraflare/shared";
21
import getStorage from "@nsnanocat/util/getStorage.mjs";
32
import { Console } from "@nsnanocat/util";
43

@@ -8,15 +7,13 @@ import { Console } from "@nsnanocat/util";
87
* @param {String} name - Persistent Store Key
98
* @param {Array} platforms - Platform Names
109
* @param {Object} database - Default DataBase
11-
* @param {Object} env - Worker Environment Bindings
1210
* @return {Promise<Object>} { Settings, Caches, Configs }
1311
*/
14-
export default async function setENV(name, platforms, database, env) {
12+
export default async function setENV(name, platforms, database, KV) {
1513
Console.log("☑️ Set Environment Variables");
1614
const { Settings, Caches, Configs } = getStorage(name, platforms, database);
17-
if (env?.PersistentStore) {
18-
const storage = new Storage({ env: { namespace: env.PersistentStore } });
19-
const persistedCaches = await storage.getItem("@iRingo.Maps.Caches", {});
15+
if (KV) {
16+
const persistedCaches = await KV.getItem("@iRingo.Maps.Caches", {});
2017
for (const key in Caches) delete Caches[key];
2118
if (typeof persistedCaches === "object" && persistedCaches !== null) Object.assign(Caches, persistedCaches);
2219
} else {

src/process/Request.dev.mjs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import database from "../function/database.mjs";
33
import setENV from "../function/setENV.mjs";
44
import GEOResourceManifest from "../class/GEOResourceManifest.mjs";
55
/***************** Processing *****************/
6-
export async function Request($request, env) {
6+
export async function Request($request, KV) {
77
// 构造回复数据
88
let $response = undefined;
99
// 解构URL
@@ -19,7 +19,7 @@ export async function Request($request, env) {
1919
* 设置
2020
* @type {{Settings: import('./types').Settings}}
2121
*/
22-
const { Settings, Caches, Configs } = await setENV("iRingo", "Maps", database, env);
22+
const { Settings, Caches, Configs } = await setENV("iRingo", "Maps", database, KV);
2323
Console.logLevel = Settings.LogLevel;
2424
// 创建空数据
2525
let body = {};
@@ -158,7 +158,7 @@ export async function Request($request, env) {
158158
switch (response?.status) {
159159
case 200:
160160
if (!response?.eTag || !response?.body?.length) Console.warn(`Skip cache update: ${cacheCountryCode}`);
161-
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, env);
161+
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, KV);
162162
break;
163163
case 304:
164164
Console.info(`Cache not modified: ${cacheCountryCode}`);
@@ -184,7 +184,7 @@ export async function Request($request, env) {
184184
switch (response?.status) {
185185
case 200:
186186
if (!response?.eTag || !response?.body?.length) Console.warn(`Skip cache update: ${cacheCountryCode}`);
187-
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, env);
187+
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, KV);
188188
break;
189189
case 304:
190190
Console.info(`Cache not modified: ${cacheCountryCode}`);
@@ -209,7 +209,7 @@ export async function Request($request, env) {
209209
switch (response?.status) {
210210
case 200:
211211
if (!response?.eTag || !response?.body?.length) Console.warn(`Skip cache update: ${cacheCountryCode}`);
212-
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, env);
212+
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, KV);
213213
break;
214214
case 304:
215215
Console.info(`Cache not modified: ${cacheCountryCode}`);

src/process/Request.mjs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import database from "../function/database.mjs";
33
import setENV from "../function/setENV.mjs";
44
import GEOResourceManifest from "../class/GEOResourceManifest.mjs";
55
/***************** Processing *****************/
6-
export async function Request($request, env) {
6+
export async function Request($request, KV) {
77
// 构造回复数据
88
let $response = undefined;
99
// 解构URL
@@ -19,7 +19,7 @@ export async function Request($request, env) {
1919
* 设置
2020
* @type {{Settings: import('./types').Settings}}
2121
*/
22-
const { Settings, Caches, Configs } = await setENV("iRingo", "Maps", database, env);
22+
const { Settings, Caches, Configs } = await setENV("iRingo", "Maps", database, KV);
2323
Console.logLevel = Settings.LogLevel;
2424
// 创建空数据
2525
let body = {};
@@ -147,7 +147,7 @@ export async function Request($request, env) {
147147
switch (response?.status) {
148148
case 200:
149149
if (!response?.eTag || !response?.body?.length) Console.warn(`Skip cache update: ${cacheCountryCode}`);
150-
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, env);
150+
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, KV);
151151
break;
152152
case 304:
153153
Console.info(`Cache not modified: ${cacheCountryCode}`);
@@ -173,7 +173,7 @@ export async function Request($request, env) {
173173
switch (response?.status) {
174174
case 200:
175175
if (!response?.eTag || !response?.body?.length) Console.warn(`Skip cache update: ${cacheCountryCode}`);
176-
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, env);
176+
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, KV);
177177
break;
178178
case 304:
179179
Console.info(`Cache not modified: ${cacheCountryCode}`);
@@ -198,7 +198,7 @@ export async function Request($request, env) {
198198
switch (response?.status) {
199199
case 200:
200200
if (!response?.eTag || !response?.body?.length) Console.warn(`Skip cache update: ${cacheCountryCode}`);
201-
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, env);
201+
else await GEOResourceManifest.setCache(Caches, cacheURL.search, response.eTag, response.body, KV);
202202
break;
203203
case 304:
204204
Console.info(`Cache not modified: ${cacheCountryCode}`);

src/process/Response.dev.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import GEOResourceManifest from "../class/GEOResourceManifest.mjs";
66
import GEOResourceManifestDownload from "../class/GEOResourceManifestDownload.mjs";
77
import { BinaryReader, UnknownFieldHandler } from "@protobuf-ts/runtime";
88
/***************** Processing *****************/
9-
export async function Response($request, $response, env) {
9+
export async function Response($request, $response, KV) {
1010
// 解构URL
1111
const url = new URL($request.url);
1212
Console.info(`url: ${url.toJSON()}`);
@@ -23,7 +23,7 @@ export async function Response($request, $response, env) {
2323
* 设置
2424
* @type {{Settings: import('./types').Settings}}
2525
*/
26-
const { Settings, Caches, Configs } = await setENV("iRingo", PLATFORM, database, env);
26+
const { Settings, Caches, Configs } = await setENV("iRingo", PLATFORM, database, KV);
2727
Console.logLevel = Settings.LogLevel;
2828
// 创建空数据
2929
let body = {};

src/process/Response.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import setENV from "../function/setENV.mjs";
55
import GEOResourceManifest from "../class/GEOResourceManifest.mjs";
66
import GEOResourceManifestDownload from "../class/GEOResourceManifestDownload.mjs";
77
/***************** Processing *****************/
8-
export async function Response($request, $response, env) {
8+
export async function Response($request, $response, KV) {
99
// 解构URL
1010
const url = new URL($request.url);
1111
Console.info(`url: ${url.toJSON()}`);
@@ -22,7 +22,7 @@ export async function Response($request, $response, env) {
2222
* 设置
2323
* @type {{Settings: import('./types').Settings}}
2424
*/
25-
const { Settings, Caches, Configs } = await setENV("iRingo", PLATFORM, database, env);
25+
const { Settings, Caches, Configs } = await setENV("iRingo", PLATFORM, database, KV);
2626
Console.logLevel = Settings.LogLevel;
2727
// 创建空数据
2828
let body = {};

0 commit comments

Comments
 (0)