Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_000027
T

155 lines
17 KiB
Plaintext

/* _processed_nuxt_unctx_transform */
import { executeAsync as __executeAsync } from "/_nuxt/node_modules/unctx/dist/index.mjs?v=e4f18c29";import { has as objectHas } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29";
import { defineNuxtPlugin } from "/_nuxt/node_modules/nuxt/dist/app/nuxt.js?v=e4f18c29";
import { useLogger } from "/_nuxt/composables/logging.ts";
const createInMemoryCache = () => {
const cache = {};
const res = {
has: async (key) => objectHas(cache, key),
set: async (key, val, options) => {
cache[key] = val;
if (options?.expiryMs) {
setTimeout(() => {
delete cache[key];
}, options.expiryMs);
}
},
get: async (key) => {
if (!objectHas(cache, key)) return void 0;
const val = cache[key];
return val;
},
setMultiple: async (keyVals, options) => {
Object.assign(cache, keyVals);
if (options?.expiryMs) {
setTimeout(() => {
for (const key of Object.keys(keyVals)) {
delete cache[key];
}
}, options.expiryMs);
}
},
getMultiple: async (keys) => {
const keyVals = {};
for (const key of keys) {
if (!objectHas(cache, key)) continue;
keyVals[key] = cache[key];
}
return keyVals;
}
};
return res;
};
const inMemoryCache = createInMemoryCache();
const getOrInitInternalCache = async (params) => {
const { logger, redis } = params;
if (!redis) {
logger.info(
"Initializing appCache as basic in-memory cache (no redis available)..."
);
return inMemoryCache;
}
logger.info("Initializing appCache with redis...");
const client = redis;
const redisKeyPrefix = "fe2-app-cache:";
const finalKey = (key) => redisKeyPrefix + key;
const internalCache = {
has: async (key) => {
const exists = await client.exists(finalKey(key));
return !!exists;
},
set: async (key, val, options) => {
if (options?.expiryMs) {
await client.set(finalKey(key), JSON.stringify(val), "PX", options.expiryMs);
} else {
await client.set(finalKey(key), JSON.stringify(val));
}
},
get: async (key) => {
const val = await client.get(finalKey(key));
if (!val) return void 0;
return JSON.parse(val);
},
setMultiple: async (keyVals, options) => {
const entries = Object.entries(keyVals).map(([key, val]) => [
finalKey(key),
JSON.stringify(val)
]);
if (options?.expiryMs) {
await client.mset(...entries.flat(), "PX", options.expiryMs);
} else {
await client.mset(...entries.flat());
}
},
getMultiple: async (keys) => {
if (!keys?.length) return {};
const finalKeys = keys.map(finalKey);
const vals = await client.mget(...finalKeys);
const keyVals = {};
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
const val = vals[i];
if (!val || !key) continue;
keyVals[key] = JSON.parse(val);
}
return keyVals;
}
};
return internalCache;
};
export default defineNuxtPlugin(async (nuxtApp) => {let __temp, __restore;
const logger = useLogger();
const internalCache = (([__temp,__restore]=__executeAsync(()=>getOrInitInternalCache({
redis: nuxtApp.$redis,
logger
}))),__temp=await __temp,__restore(),__temp);
const reqTouched = {};
if (false) {
nuxtApp.hook("app:rendered", async () => {
const touchedKeys = Object.keys(reqTouched);
const cacheToSend = await internalCache.getMultiple(touchedKeys);
nuxtApp.ssrContext.payload.appCache = cacheToSend;
});
} else if (true) {
const restorable = nuxtApp.payload?.appCache;
if (restorable) {
;(([__temp,__restore]=__executeAsync(()=>internalCache.setMultiple(restorable))),await __temp,__restore());;
}
}
const finalCache = {
has: async (key) => {
const has = await internalCache.has(key);
return has;
},
set: async (key, val, options) => {
await internalCache.set(key, val, options);
reqTouched[key] = true;
},
get: async (key) => {
const val = await internalCache.get(key);
reqTouched[key] = true;
return val;
},
setMultiple: async (keyVals, options) => {
await internalCache.setMultiple(keyVals, options);
for (const key of Object.keys(keyVals)) {
reqTouched[key] = true;
}
},
getMultiple: async (keys) => {
const keyVals = await internalCache.getMultiple(keys);
for (const key of keys) {
reqTouched[key] = true;
}
return keyVals;
}
};
return {
provide: {
appCache: finalCache
}
};
},1);
//# sourceMappingURL=data:application/json;base64,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QU0sTUFBTSxjQUFjLElBQUksR0FBRztBQUN2QyxhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FBSyxPQUFPLEtBQUssS0FBSyxZQUFZO0FBQ2hDLFlBQU0sY0FBYyxJQUFJLEtBQUssS0FBSyxPQUFPO0FBQ3pDLGlCQUFXLEdBQUcsSUFBSTtBQUFBLElBQ3BCO0FBQUEsSUFDQSxLQUFLLE9BQW9CLFFBQWdCO0FBQ3ZDLFlBQU0sTUFBTSxNQUFNLGNBQWMsSUFBTyxHQUFHO0FBQzFDLGlCQUFXLEdBQUcsSUFBSTtBQUNsQixhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsYUFBYSxPQUFPLFNBQVMsWUFBWTtBQUN2QyxZQUFNLGNBQWMsWUFBWSxTQUFTLE9BQU87QUFDaEQsaUJBQVcsT0FBTyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQ3RDLG1CQUFXLEdBQUcsSUFBSTtBQUFBLE1BQ3BCO0FBQUEsSUFDRjtBQUFBLElBQ0EsYUFBYSxPQUFPLFNBQVM7QUFDM0IsWUFBTSxVQUFVLE1BQU0sY0FBYyxZQUFZLElBQUk7QUFDcEQsaUJBQVcsT0FBTyxNQUFNO0FBQ3RCLG1CQUFXLEdBQUcsSUFBSTtBQUFBLE1BQ3BCO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLE1BQ1AsVUFBVTtBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQ0YsR0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiMDUwLWNhY2hlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT3B0aW9uYWwgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQnXHJcbmltcG9ydCB7IGhhcyBhcyBvYmplY3RIYXMgfSBmcm9tICdsb2Rhc2gtZXMnXHJcbmltcG9ydCB0eXBlIHsgUmVkaXMgfSBmcm9tICdpb3JlZGlzJ1xyXG5pbXBvcnQgdHlwZSB7IEFwcExvZ2dlciB9IGZyb20gJ34vY29tcG9zYWJsZXMvbG9nZ2luZydcclxuXHJcbnR5cGUgQXN5bmNDYWNoZUludGVyZmFjZSA9IHtcclxuICBoYXMoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+XHJcbiAgZ2V0PFYgPSB1bmtub3duPihrZXk6IHN0cmluZyk6IFByb21pc2U8ViB8IHVuZGVmaW5lZD5cclxuICBzZXQ8ViA9IHVua25vd24+KGtleTogc3RyaW5nLCB2YWw6IFYsIG9wdGlvbnM/OiB7IGV4cGlyeU1zOiBudW1iZXIgfSk6IFByb21pc2U8dm9pZD5cclxuICBzZXRNdWx0aXBsZTxWID0gdW5rbm93bj4oXHJcbiAgICBrZXlWYWxzOiBSZWNvcmQ8c3RyaW5nLCBWPixcclxuICAgIG9wdGlvbnM/OiB7IGV4cGlyeU1zOiBudW1iZXIgfVxyXG4gICk6IFByb21pc2U8dm9pZD5cclxuICBnZXRNdWx0aXBsZShrZXlzOiBzdHJpbmdbXSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+XHJcbn1cclxuXHJcbmNvbnN0IGNyZWF0ZUluTWVtb3J5Q2FjaGUgPSAoKSA9PiB7XHJcbiAgY29uc3QgY2FjaGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge31cclxuXHJcbiAgY29uc3QgcmVzOiBBc3luY0NhY2hlSW50ZXJmYWNlID0ge1xyXG4gICAgaGFzOiBhc3luYyAoa2V5KSA9PiBvYmplY3RIYXMoY2FjaGUsIGtleSksXHJcbiAgICBzZXQ6IGFzeW5jIChrZXksIHZhbCwgb3B0aW9ucykgPT4ge1xyXG4gICAgICBjYWNoZVtrZXldID0gdmFsXHJcblxyXG4gICAgICBpZiAob3B0aW9ucz8uZXhwaXJ5TXMpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGRlbGV0ZSBjYWNoZVtrZXldXHJcbiAgICAgICAgfSwgb3B0aW9ucy5leHBpcnlNcylcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldDogYXN5bmMgPFYgPSB1bmtub3duPihrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoIW9iamVjdEhhcyhjYWNoZSwga2V5KSkgcmV0dXJuIHVuZGVmaW5lZFxyXG5cclxuICAgICAgY29uc3QgdmFsID0gY2FjaGVba2V5XSBhcyBWXHJcbiAgICAgIHJldHVybiB2YWxcclxuICAgIH0sXHJcbiAgICBzZXRNdWx0aXBsZTogYXN5bmMgKGtleVZhbHMsIG9wdGlvbnMpID0+IHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihjYWNoZSwga2V5VmFscylcclxuXHJcbiAgICAgIGlmIChvcHRpb25zPy5leHBpcnlNcykge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoa2V5VmFscykpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGNhY2hlW2tleV1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBvcHRpb25zLmV4cGlyeU1zKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0TXVsdGlwbGU6IGFzeW5jIChrZXlzKSA9PiB7XHJcbiAgICAgIGNvbnN0IGtleVZhbHMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XHJcbiAgICAgICAgaWYgKCFvYmplY3RIYXMoY2FjaGUsIGtleSkpIGNvbnRpbnVlXHJcblxyXG4gICAgICAgIGtleVZhbHNba2V5XSA9IGNhY2hlW2tleV1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGtleVZhbHNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiByZXNcclxufVxyXG5cclxuY29uc3QgaW5NZW1vcnlDYWNoZSA9IGNyZWF0ZUluTWVtb3J5Q2FjaGUoKVxyXG5cclxuY29uc3QgZ2V0T3JJbml0SW50ZXJuYWxDYWNoZSA9IGFzeW5jIChwYXJhbXM6IHtcclxuICByZWRpczogT3B0aW9uYWw8UmVkaXM+XHJcbiAgbG9nZ2VyOiBBcHBMb2dnZXJcclxufSkgPT4ge1xyXG4gIGNvbnN0IHsgbG9nZ2VyLCByZWRpcyB9ID0gcGFyYW1zXHJcblxyXG4gIGlmICghcmVkaXMpIHtcclxuICAgIGxvZ2dlci5pbmZvKFxyXG4gICAgICAnSW5pdGlhbGl6aW5nIGFwcENhY2hlIGFzIGJhc2ljIGluLW1lbW9yeSBjYWNoZSAobm8gcmVkaXMgYXZhaWxhYmxlKS4uLidcclxuICAgIClcclxuICAgIHJldHVybiBpbk1lbW9yeUNhY2hlXHJcbiAgfVxyXG5cclxuICBsb2dnZXIuaW5mbygnSW5pdGlhbGl6aW5nIGFwcENhY2hlIHdpdGggcmVkaXMuLi4nKVxyXG4gIGNvbnN0IGNsaWVudCA9IHJlZGlzXHJcbiAgY29uc3QgcmVkaXNLZXlQcmVmaXggPSAnZmUyLWFwcC1jYWNoZTonXHJcbiAgY29uc3QgZmluYWxLZXkgPSAoa2V5OiBzdHJpbmcpID0+IHJlZGlzS2V5UHJlZml4ICsga2V5XHJcblxyXG4gIGNvbnN0IGludGVybmFsQ2FjaGU6IEFzeW5jQ2FjaGVJbnRlcmZhY2UgPSB7XHJcbiAgICBoYXM6IGFzeW5jIChrZXkpID0+IHtcclxuICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgY2xpZW50LmV4aXN0cyhmaW5hbEtleShrZXkpKVxyXG4gICAgICByZXR1cm4gISFleGlzdHNcclxuICAgIH0sXHJcbiAgICBzZXQ6IGFzeW5jIChrZXksIHZhbCwgb3B0aW9ucykgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucz8uZXhwaXJ5TXMpIHtcclxuICAgICAgICBhd2FpdCBjbGllbnQuc2V0KGZpbmFsS2V5KGtleSksIEpTT04uc3RyaW5naWZ5KHZhbCksICdQWCcsIG9wdGlvbnMuZXhwaXJ5TXMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXdhaXQgY2xpZW50LnNldChmaW5hbEtleShrZXkpLCBKU09OLnN0cmluZ2lmeSh2YWwpKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0OiBhc3luYyA8ViA9IHVua25vd24+KGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IGNsaWVudC5nZXQoZmluYWxLZXkoa2V5KSlcclxuICAgICAgaWYgKCF2YWwpIHJldHVybiB1bmRlZmluZWRcclxuXHJcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbCkgYXMgVlxyXG4gICAgfSxcclxuICAgIHNldE11bHRpcGxlOiBhc3luYyAoa2V5VmFscywgb3B0aW9ucykgPT4ge1xyXG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoa2V5VmFscykubWFwKChba2V5LCB2YWxdKSA9PiBbXHJcbiAgICAgICAgZmluYWxLZXkoa2V5KSxcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWwpXHJcbiAgICAgIF0pXHJcblxyXG4gICAgICBpZiAob3B0aW9ucz8uZXhwaXJ5TXMpIHtcclxuICAgICAgICBhd2FpdCBjbGllbnQubXNldCguLi5lbnRyaWVzLmZsYXQoKSwgJ1BYJywgb3B0aW9ucy5leHBpcnlNcylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCBjbGllbnQubXNldCguLi5lbnRyaWVzLmZsYXQoKSlcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldE11bHRpcGxlOiBhc3luYyAoa2V5cykgPT4ge1xyXG4gICAgICBpZiAoIWtleXM/Lmxlbmd0aCkgcmV0dXJuIHt9XHJcblxyXG4gICAgICBjb25zdCBmaW5hbEtleXMgPSBrZXlzLm1hcChmaW5hbEtleSlcclxuICAgICAgY29uc3QgdmFscyA9IGF3YWl0IGNsaWVudC5tZ2V0KC4uLmZpbmFsS2V5cylcclxuICAgICAgY29uc3Qga2V5VmFscyA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV1cclxuICAgICAgICBjb25zdCB2YWwgPSB2YWxzW2ldXHJcbiAgICAgICAgaWYgKCF2YWwgfHwgIWtleSkgY29udGludWVcclxuXHJcbiAgICAgICAga2V5VmFsc1trZXldID0gSlNPTi5wYXJzZSh2YWwpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBrZXlWYWxzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaW50ZXJuYWxDYWNoZVxyXG59XHJcblxyXG4vKipcclxuICogSW4gU1NSOiBQcm92aWRlcyBhIHJlZGlzIGNhY2hlIHRoYXQgaXMgc2hhcmVkIGFjcm9zcyBhcHAgcHJvY2Vzc2VzIGFuZCByZXF1ZXN0c1xyXG4gKiBJbiBDU1I6IFByb3ZpZGVzIGFuIGluLW1lbW9yeSBjYWNoZSB0aGF0IGlzIHNoYXJlZCBhY3Jvc3MgdGhlIGFwcCBzZXNzaW9uXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVOdXh0UGx1Z2luKGFzeW5jIChudXh0QXBwKSA9PiB7XHJcbiAgY29uc3QgbG9nZ2VyID0gdXNlTG9nZ2VyKClcclxuICBjb25zdCBpbnRlcm5hbENhY2hlID0gYXdhaXQgZ2V0T3JJbml0SW50ZXJuYWxDYWNoZSh7XHJcbiAgICByZWRpczogbnV4dEFwcC4kcmVkaXMgYXMgUmVkaXMsXHJcbiAgICBsb2dnZXJcclxuICB9KVxyXG4gIGNvbnN0IHJlcVRvdWNoZWQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge31cclxuXHJcbiAgaWYgKGltcG9ydC5tZXRhLnNlcnZlcikge1xyXG4gICAgbnV4dEFwcC5ob29rKCdhcHA6cmVuZGVyZWQnLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRvdWNoZWRLZXlzID0gT2JqZWN0LmtleXMocmVxVG91Y2hlZClcclxuICAgICAgY29uc3QgY2FjaGVUb1NlbmQgPSBhd2FpdCBpbnRlcm5hbENhY2hlLmdldE11bHRpcGxlKHRvdWNoZWRLZXlzKVxyXG5cclxuICAgICAgbnV4dEFwcC5zc3JDb250ZXh0IS5wYXlsb2FkLmFwcENhY2hlID0gY2FjaGVUb1NlbmRcclxuICAgIH0pXHJcbiAgfSBlbHNlIGlmIChpbXBvcnQubWV0YS5jbGllbnQpIHtcclxuICAgIGNvbnN0IHJlc3RvcmFibGUgPSBudXh0QXBwLnBheWxvYWQ/LmFwcENhY2hlXHJcbiAgICBpZiAocmVzdG9yYWJsZSkge1xyXG4gICAgICBhd2FpdCBpbnRlcm5hbENhY2hlLnNldE11bHRpcGxlKHJlc3RvcmFibGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBmaW5hbENhY2hlOiBBc3luY0NhY2hlSW50ZXJmYWNlID0ge1xyXG4gICAgaGFzOiBhc3luYyAoa2V5KSA9PiB7XHJcbiAgICAgIGNvbnN0IGhhcyA9IGF3YWl0IGludGVybmFsQ2FjaGUuaGFzKGtleSlcclxuICAgICAgcmV0dXJuIGhhc1xyXG4gICAgfSxcclxuICAgIHNldDogYXN5bmMgKGtleSwgdmFsLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgIGF3YWl0IGludGVybmFsQ2FjaGUuc2V0KGtleSwgdmFsLCBvcHRpb25zKVxyXG4gICAgICByZXFUb3VjaGVkW2tleV0gPSB0cnVlXHJcbiAgICB9LFxyXG4gICAgZ2V0OiBhc3luYyA8ViA9IHVua25vd24+KGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IGludGVybmFsQ2FjaGUuZ2V0PFY+KGtleSlcclxuICAgICAgcmVxVG91Y2hlZFtrZXldID0gdHJ1ZVxyXG4gICAgICByZXR1cm4gdmFsXHJcbiAgICB9LFxyXG4gICAgc2V0TXVsdGlwbGU6IGFzeW5jIChrZXlWYWxzLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgIGF3YWl0IGludGVybmFsQ2FjaGUuc2V0TXVsdGlwbGUoa2V5VmFscywgb3B0aW9ucylcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoa2V5VmFscykpIHtcclxuICAgICAgICByZXFUb3VjaGVkW2tleV0gPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBnZXRNdWx0aXBsZTogYXN5bmMgKGtleXMpID0+IHtcclxuICAgICAgY29uc3Qga2V5VmFscyA9IGF3YWl0IGludGVybmFsQ2FjaGUuZ2V0TXVsdGlwbGUoa2V5cylcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICAgIHJlcVRvdWNoZWRba2V5XSA9IHRydWVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4ga2V5VmFsc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHByb3ZpZGU6IHtcclxuICAgICAgYXBwQ2FjaGU6IGZpbmFsQ2FjaGVcclxuICAgIH1cclxuICB9XHJcbn0pXHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9wbHVnaW5zLzA1MC1jYWNoZS50cyJ9