Add compression-streams-polyfill and integrate CompressionStream support

This commit is contained in:
kwaroran
2024-11-04 15:26:17 +09:00
parent 40b890cd42
commit 911ff7fd8b
3 changed files with 30 additions and 0 deletions

View File

@@ -43,6 +43,7 @@
"body-parser": "^1.20.2",
"buffer": "^6.0.3",
"codemirror": "^5.65.16",
"compression-streams-polyfill": "^0.1.7",
"core-js": "^3.35.0",
"cors": "^2.8.5",
"crc": "^4.3.2",

15
pnpm-lock.yaml generated
View File

@@ -86,6 +86,9 @@ importers:
codemirror:
specifier: ^5.65.16
version: 5.65.16
compression-streams-polyfill:
specifier: ^0.1.7
version: 0.1.7
core-js:
specifier: ^3.35.0
version: 3.35.0
@@ -1491,6 +1494,9 @@ packages:
compare-func@2.0.0:
resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
compression-streams-polyfill@0.1.7:
resolution: {integrity: sha512-Y6VkJzi9JkvmcgDuJ2jJZ5DGljNhUrFBGxx5+gQ2RNg+uPesuRDDL5zN1NTk5NTuynyVkQ4MNip5z37MmtbdpQ==}
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -1908,6 +1914,9 @@ packages:
fflate@0.8.1:
resolution: {integrity: sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==}
fflate@0.8.2:
resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
@@ -5031,6 +5040,10 @@ snapshots:
array-ify: 1.0.0
dot-prop: 5.3.0
compression-streams-polyfill@0.1.7:
dependencies:
fflate: 0.8.2
concat-map@0.0.1: {}
console-control-strings@1.1.0:
@@ -5493,6 +5506,8 @@ snapshots:
fflate@0.8.1: {}
fflate@0.8.2: {}
fill-range@7.0.1:
dependencies:
to-regex-range: 5.0.1

View File

@@ -15,6 +15,18 @@ const magicHeader = new Uint8Array([0, 82, 73, 83, 85, 83, 65, 86, 69, 0, 7]);
const magicCompressedHeader = new Uint8Array([0, 82, 73, 83, 85, 83, 65, 86, 69, 0, 8]);
const magicStreamCompressedHeader = new Uint8Array([0, 82, 73, 83, 85, 83, 65, 86, 69, 0, 9]);
async function checkCompressionStreams(){
if(!CompressionStream){
const {makeCompressionStream} = await import('compression-streams-polyfill/ponyfill');
globalThis.CompressionStream = makeCompressionStream(TransformStream);
}
if(!DecompressionStream){
const {makeDecompressionStream} = await import('compression-streams-polyfill/ponyfill');
globalThis.DecompressionStream = makeDecompressionStream(TransformStream);
}
}
export function encodeRisuSaveLegacy(data:any, compression:'noCompression'|'compression' = 'noCompression'){
let encoded:Uint8Array = packr.encode(data)
if(compression === 'compression'){
@@ -33,6 +45,7 @@ export function encodeRisuSaveLegacy(data:any, compression:'noCompression'|'comp
}
export async function encodeRisuSave(data:any) {
await checkCompressionStreams()
let encoded:Uint8Array = packr.encode(data)
const cs = new CompressionStream('gzip');
const writer = cs.writable.getWriter();
@@ -55,6 +68,7 @@ export async function decodeRisuSave(data:Uint8Array){
data = data.slice(magicHeader.length)
return unpackr.decode(data)
case "stream":{
await checkCompressionStreams()
data = data.slice(magicStreamCompressedHeader.length)
const cs = new DecompressionStream('gzip');
const writer = cs.writable.getWriter();