Files
LingChair/client/Data.ts
CrescentLeaf 25320fe521 refactor: 推翻舊架構, 進入 Vite 盛世!
* 所有的 CDN 依賴已全部 npm 化
* Webpack? 一邊去! Vite 太好用啦!
* 將 Imports.ts 剔除
* 移除了大量的靜態文件
* 將 index.html 的部分代碼分離
* 修改 deno task
* 移除了動態編譯頁面的支持
* ./static 引用全部變更為 npm 包引用
2025-09-07 12:49:09 +08:00

46 lines
1.0 KiB
TypeScript

import * as CryptoES from 'crypto-es'
const dataIsEmpty = !localStorage.tws_data || localStorage.tws_data == ''
const aes = {
enc: (m: string, k: string) => CryptoES.AES.encrypt(m, k).toString(CryptoES.HexFormatter),
dec: (m: string, k: string) => CryptoES.AES.decrypt(m, k).toString(CryptoES.Utf8),
}
const key = location.host + '_TWS_姐姐'
if (dataIsEmpty) localStorage.tws_data = aes.enc('{}', key)
let _dec = aes.dec(localStorage.tws_data, key)
if (_dec == '') _dec = '{}'
const _data_cached = JSON.parse(_dec)
// 類型定義
declare global {
interface Window {
data: {
apply: () => void
access_token?: string
}
}
}
// deno-lint-ignore no-window
(window.data == null) && (window.data = new Proxy({
apply() {
localStorage.tws_data = aes.enc(JSON.stringify(_data_cached), key)
}
}, {
get(_obj, k) {
return _data_cached[k]
},
set(_obj, k, v) {
_data_cached[k] = v
return true
},
}))
// deno-lint-ignore no-window
export default window.data