From ebf94653749834c880fb6b052cf17c4c69166ed8 Mon Sep 17 00:00:00 2001 From: Ryc O'Chet Date: Sun, 21 Jan 2024 18:19:10 +0000 Subject: [PATCH 1/7] Fix license headers Closes #188 --- LICENSE => LICENSE.md | 2 +- src/UTF16/UTF16.test.ts | 6 ++++++ src/UTF16/compressToUTF16.ts | 6 ++++++ src/UTF16/decompressFromUTF16.ts | 6 ++++++ src/UTF16/index.ts | 6 ++++++ src/Uint8Array/Uint8Array.test.ts | 6 ++++++ src/Uint8Array/compressToUint8Array.ts | 6 ++++++ src/Uint8Array/decompressFromUint8Array.ts | 6 ++++++ src/Uint8Array/index.ts | 6 ++++++ src/__tests__/testFunctions.ts | 6 ++++++ src/_compress.ts | 6 ++++++ src/_decompress.ts | 6 ++++++ src/base64/base64-string.ts | 15 ++++++--------- src/base64/base64.test.ts | 6 ++++++ src/base64/compressToBase64.ts | 6 ++++++ src/base64/decompressFromBase64.ts | 6 ++++++ src/base64/index.ts | 6 ++++++ src/base64/keyStrBase64.ts | 6 ++++++ src/encodedURI/compressToEncodedURI.ts | 6 ++++++ src/encodedURI/decompressFromEncodedURI.ts | 6 ++++++ src/encodedURI/encodedURI.test.ts | 6 ++++++ src/encodedURI/index.ts | 6 ++++++ src/encodedURI/keyStrUriSafe.ts | 6 ++++++ src/getBaseValue.ts | 6 ++++++ src/index.ts | 14 +++++--------- src/stock/compress.ts | 6 ++++++ src/stock/decompress.ts | 6 ++++++ src/stock/index.ts | 6 ++++++ src/stock/stock.test.ts | 6 ++++++ tests/dist.cjs.main.test.ts | 6 ++++++ tests/dist.es.main.test.ts | 6 ++++++ tests/testFunctions.ts | 6 ++++++ tests/testValues.ts | 6 ++++++ vite.config.ts => vite.config.mts | 19 +++++++++---------- 34 files changed, 201 insertions(+), 29 deletions(-) rename LICENSE => LICENSE.md (95%) rename vite.config.ts => vite.config.mts (69%) diff --git a/LICENSE b/LICENSE.md similarity index 95% rename from LICENSE rename to LICENSE.md index ff5cc14..3301ca3 100644 --- a/LICENSE +++ b/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2013 pieroxy +Copyright (c) 2013 Pieroxy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/src/UTF16/UTF16.test.ts b/src/UTF16/UTF16.test.ts index f97354a..34c3693 100644 --- a/src/UTF16/UTF16.test.ts +++ b/src/UTF16/UTF16.test.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { describe } from "vitest"; import { compressToUTF16, decompressFromUTF16 } from "."; import { runTestSet } from "../__tests__/testFunctions"; diff --git a/src/UTF16/compressToUTF16.ts b/src/UTF16/compressToUTF16.ts index 8e56c86..acee760 100644 --- a/src/UTF16/compressToUTF16.ts +++ b/src/UTF16/compressToUTF16.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { _compress } from "../_compress"; export function compressToUTF16(input: string | null) { diff --git a/src/UTF16/decompressFromUTF16.ts b/src/UTF16/decompressFromUTF16.ts index 9297b84..973ec5d 100644 --- a/src/UTF16/decompressFromUTF16.ts +++ b/src/UTF16/decompressFromUTF16.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { _decompress } from "../_decompress"; export function decompressFromUTF16(compressed: string | null) { diff --git a/src/UTF16/index.ts b/src/UTF16/index.ts index 9a88b42..bf6a46e 100644 --- a/src/UTF16/index.ts +++ b/src/UTF16/index.ts @@ -1,2 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + export { compressToUTF16 } from "./compressToUTF16"; export { decompressFromUTF16 } from "./decompressFromUTF16"; diff --git a/src/Uint8Array/Uint8Array.test.ts b/src/Uint8Array/Uint8Array.test.ts index 990565b..2dea441 100644 --- a/src/Uint8Array/Uint8Array.test.ts +++ b/src/Uint8Array/Uint8Array.test.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { describe } from "vitest"; import { compressToUint8Array, decompressFromUint8Array } from "."; import { runTestSet } from "../__tests__/testFunctions"; diff --git a/src/Uint8Array/compressToUint8Array.ts b/src/Uint8Array/compressToUint8Array.ts index 7db37fb..c179b94 100644 --- a/src/Uint8Array/compressToUint8Array.ts +++ b/src/Uint8Array/compressToUint8Array.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { compress } from "../stock/compress"; export function compressToUint8Array(uncompressed: string | null): Uint8Array { diff --git a/src/Uint8Array/decompressFromUint8Array.ts b/src/Uint8Array/decompressFromUint8Array.ts index e61ee78..32a8dc1 100644 --- a/src/Uint8Array/decompressFromUint8Array.ts +++ b/src/Uint8Array/decompressFromUint8Array.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { decompress } from "../stock/decompress"; export function decompressFromUint8Array(compressed: Uint8Array | null): string | null { diff --git a/src/Uint8Array/index.ts b/src/Uint8Array/index.ts index f56bdce..c6903b1 100644 --- a/src/Uint8Array/index.ts +++ b/src/Uint8Array/index.ts @@ -1,2 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + export { compressToUint8Array } from "./compressToUint8Array"; export { decompressFromUint8Array } from "./decompressFromUint8Array"; diff --git a/src/__tests__/testFunctions.ts b/src/__tests__/testFunctions.ts index 73e7992..7f4e109 100644 --- a/src/__tests__/testFunctions.ts +++ b/src/__tests__/testFunctions.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + /* eslint-disable @typescript-eslint/ban-ts-comment */ import { test, expect } from "vitest"; diff --git a/src/_compress.ts b/src/_compress.ts index afeb91e..8fe96ba 100644 --- a/src/_compress.ts +++ b/src/_compress.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + export type Dictionary = Record; export type PendingDictionary = Record; diff --git a/src/_decompress.ts b/src/_decompress.ts index 905d78f..528ecb9 100644 --- a/src/_decompress.ts +++ b/src/_decompress.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + export interface DecompressionTracker { val: number; position: number; diff --git a/src/base64/base64-string.ts b/src/base64/base64-string.ts index 8c7b905..8278a40 100644 --- a/src/base64/base64-string.ts +++ b/src/base64/base64-string.ts @@ -1,12 +1,9 @@ -// Copyright (c) 2013 Pieroxy -// This work is free. You can redistribute it and/or modify it -// under the terms of the WTFPL, Version 2 -// For more information see LICENSE.txt or http://www.wtfpl.net/ -// -// This lib is part of the lz-string project. -// For more information, the home page: -// http://pieroxy.net/blog/pages/lz-string/index.html -// +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + // Base64 compression / decompression for already compressed content (gif, png, jpg, mp3, ...) // version 1.4.1 diff --git a/src/base64/base64.test.ts b/src/base64/base64.test.ts index 1e9cb98..651832d 100644 --- a/src/base64/base64.test.ts +++ b/src/base64/base64.test.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { describe } from "vitest"; import { compressToBase64, decompressFromBase64 } from "."; import { runTestSet } from "../__tests__/testFunctions"; diff --git a/src/base64/compressToBase64.ts b/src/base64/compressToBase64.ts index 61c4ac4..525b275 100644 --- a/src/base64/compressToBase64.ts +++ b/src/base64/compressToBase64.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { _compress } from "../_compress"; import keyStrBase64 from "./keyStrBase64"; diff --git a/src/base64/decompressFromBase64.ts b/src/base64/decompressFromBase64.ts index 40cc5ce..90f353d 100644 --- a/src/base64/decompressFromBase64.ts +++ b/src/base64/decompressFromBase64.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { _decompress } from "../_decompress"; import { getBaseValue } from "../getBaseValue"; import keyStrBase64 from "./keyStrBase64"; diff --git a/src/base64/index.ts b/src/base64/index.ts index 0a67abd..b05fe9e 100644 --- a/src/base64/index.ts +++ b/src/base64/index.ts @@ -1,2 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + export { compressToBase64 } from "./compressToBase64"; export { decompressFromBase64 } from "./decompressFromBase64"; diff --git a/src/base64/keyStrBase64.ts b/src/base64/keyStrBase64.ts index d2ffd44..b3593ca 100644 --- a/src/base64/keyStrBase64.ts +++ b/src/base64/keyStrBase64.ts @@ -1 +1,7 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + export default "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; diff --git a/src/encodedURI/compressToEncodedURI.ts b/src/encodedURI/compressToEncodedURI.ts index 5408df6..371c320 100644 --- a/src/encodedURI/compressToEncodedURI.ts +++ b/src/encodedURI/compressToEncodedURI.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { _compress } from "../_compress"; import keyStrUriSafe from "./keyStrUriSafe"; diff --git a/src/encodedURI/decompressFromEncodedURI.ts b/src/encodedURI/decompressFromEncodedURI.ts index 3bb3e70..ccb3c4b 100644 --- a/src/encodedURI/decompressFromEncodedURI.ts +++ b/src/encodedURI/decompressFromEncodedURI.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import keyStrUriSafe from "./keyStrUriSafe"; import { _decompress } from "../_decompress"; import { getBaseValue } from "../getBaseValue"; diff --git a/src/encodedURI/encodedURI.test.ts b/src/encodedURI/encodedURI.test.ts index 2918d89..ea8a613 100644 --- a/src/encodedURI/encodedURI.test.ts +++ b/src/encodedURI/encodedURI.test.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { describe, expect, test } from "vitest"; import { compressToEncodedURIComponent, decompressFromEncodedURIComponent } from "."; import { runTestSet, test_longString_fn, test_tattooSource } from "../__tests__/testFunctions"; diff --git a/src/encodedURI/index.ts b/src/encodedURI/index.ts index e97c524..b8ad4fc 100644 --- a/src/encodedURI/index.ts +++ b/src/encodedURI/index.ts @@ -1,2 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + export { compressToEncodedURIComponent } from "./compressToEncodedURI"; export { decompressFromEncodedURIComponent } from "./decompressFromEncodedURI"; diff --git a/src/encodedURI/keyStrUriSafe.ts b/src/encodedURI/keyStrUriSafe.ts index ac67586..2ddd9bc 100644 --- a/src/encodedURI/keyStrUriSafe.ts +++ b/src/encodedURI/keyStrUriSafe.ts @@ -1 +1,7 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + export default "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$"; diff --git a/src/getBaseValue.ts b/src/getBaseValue.ts index c0f922b..fe6ab8d 100644 --- a/src/getBaseValue.ts +++ b/src/getBaseValue.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + export type Dictionary = Record; export type DictionaryCollection = Record; diff --git a/src/index.ts b/src/index.ts index 4a09bd7..7731e0c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,12 +1,8 @@ -// Copyright (c) 2013 Pieroxy -// This work is free. You can redistribute it and/or modify it -// under the terms of the WTFPL, Version 2 -// For more information see LICENSE.txt or http://www.wtfpl.net/ -// -// For more information, the home page: -// http://pieroxy.net/blog/pages/lz-string/testing.html -// -// LZ-based compression algorithm, version 1.4.5 +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ import { _compress } from "./_compress"; import { _decompress } from "./_decompress"; diff --git a/src/stock/compress.ts b/src/stock/compress.ts index 27fa233..11ccc9d 100644 --- a/src/stock/compress.ts +++ b/src/stock/compress.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { _compress } from "../_compress"; export function compress(input: string | null) { diff --git a/src/stock/decompress.ts b/src/stock/decompress.ts index c9c116a..badb79f 100644 --- a/src/stock/decompress.ts +++ b/src/stock/decompress.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { _decompress } from "../_decompress"; export function decompress(compressed: string | null) { diff --git a/src/stock/index.ts b/src/stock/index.ts index b65af8f..f81e243 100644 --- a/src/stock/index.ts +++ b/src/stock/index.ts @@ -1,2 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + export { compress } from "./compress"; export { decompress } from "./decompress"; diff --git a/src/stock/stock.test.ts b/src/stock/stock.test.ts index 4d3702f..d993f10 100644 --- a/src/stock/stock.test.ts +++ b/src/stock/stock.test.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { describe } from "vitest"; import { compress, decompress } from "."; import { runTestSet } from "../__tests__/testFunctions"; diff --git a/tests/dist.cjs.main.test.ts b/tests/dist.cjs.main.test.ts index 42a407e..b479cd8 100644 --- a/tests/dist.cjs.main.test.ts +++ b/tests/dist.cjs.main.test.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { describe } from "vitest"; import LZString from "../dist/index.cjs"; import { runAllTests } from "./testFunctions"; diff --git a/tests/dist.es.main.test.ts b/tests/dist.es.main.test.ts index 7dba0ea..d8edda2 100644 --- a/tests/dist.es.main.test.ts +++ b/tests/dist.es.main.test.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { describe } from "vitest"; import LZString from "../dist/index.js"; import { runAllTests } from "./testFunctions"; diff --git a/tests/testFunctions.ts b/tests/testFunctions.ts index c7500ca..bdfe58c 100644 --- a/tests/testFunctions.ts +++ b/tests/testFunctions.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + import { test, expect, describe } from "vitest"; import { test_allUtf16, diff --git a/tests/testValues.ts b/tests/testValues.ts index 6d7cadf..31d9479 100644 --- a/tests/testValues.ts +++ b/tests/testValues.ts @@ -1,3 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + /** Simple value */ export const test_hw = "Hello world!"; diff --git a/vite.config.ts b/vite.config.mts similarity index 69% rename from vite.config.ts rename to vite.config.mts index f0a659a..fe41245 100644 --- a/vite.config.ts +++ b/vite.config.mts @@ -1,12 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2013 Pieroxy + * + * SPDX-License-Identifier: MIT + */ + /// -import { parse, relative, resolve } from "path"; +import { resolve } from "path"; import { defineConfig } from "vite"; import dts from "vite-plugin-dts"; import eslint from "vite-plugin-eslint"; import tsconfigPaths from "vite-tsconfig-paths"; -const root = resolve(__dirname, "src"); - export default defineConfig({ plugins: [tsconfigPaths(), dts({ rollupTypes: true }), eslint()], build: { @@ -26,13 +30,8 @@ export default defineConfig({ }, { format: "es", - chunkFileNames: "[name].js", - manualChunks: (id: string) => { - const { dir, name } = parse(relative(root, id)); - - // If it's in node_modules then don't export - return dir.startsWith(".") ? null : name || "common"; - }, + preserveModules: true, + entryFileNames: "[name].js", }, { format: "umd", From d6e7fdf270253561e5a1ea7e3bddecaeea243131 Mon Sep 17 00:00:00 2001 From: Ryc O'Chet Date: Sun, 21 Jan 2024 18:26:06 +0000 Subject: [PATCH 2/7] Bump packages, safer code quality --- package-lock.json | 362 +++++++++++++++++++++++----------------------- package.json | 26 ++-- 2 files changed, 196 insertions(+), 192 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8885623..665360a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lz-string", - "version": "2.0.0-rc.2", + "version": "2.0.0-rc.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "lz-string", - "version": "2.0.0-rc.2", + "version": "2.0.0-rc.3", "license": "MIT", "dependencies": { "commander": "11.1.0" @@ -16,19 +16,19 @@ }, "devDependencies": { "@btmills/prettier": "3.1.0", - "@types/node": "20.11.0", - "@typescript-eslint/eslint-plugin": "6.18.1", - "@typescript-eslint/parser": "6.18.1", - "@vitest/coverage-v8": "1.2.0", + "@types/node": "20.11.5", + "@typescript-eslint/eslint-plugin": "6.19.0", + "@typescript-eslint/parser": "6.19.0", + "@vitest/coverage-v8": "1.2.1", "eslint": "8.56.0", "eslint-config-prettier": "9.1.0", "tslib": "2.6.2", "typescript": "5.3.3", - "vite": "5.0.11", - "vite-plugin-dts": "3.7.0", + "vite": "5.0.12", + "vite-plugin-dts": "3.7.1", "vite-plugin-eslint": "1.8.1", - "vite-tsconfig-paths": "4.2.3", - "vitest": "1.2.0" + "vite-tsconfig-paths": "4.3.1", + "vitest": "1.2.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -679,9 +679,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", - "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -811,9 +811,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", - "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", "cpu": [ "arm" ], @@ -824,9 +824,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", - "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", "cpu": [ "arm64" ], @@ -837,9 +837,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", - "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", "cpu": [ "arm64" ], @@ -850,9 +850,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", - "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", "cpu": [ "x64" ], @@ -863,9 +863,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", - "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", "cpu": [ "arm" ], @@ -876,9 +876,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", - "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", "cpu": [ "arm64" ], @@ -889,9 +889,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", - "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", "cpu": [ "arm64" ], @@ -902,9 +902,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", - "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", "cpu": [ "riscv64" ], @@ -915,9 +915,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", "cpu": [ "x64" ], @@ -928,9 +928,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", - "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", "cpu": [ "x64" ], @@ -941,9 +941,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", - "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", "cpu": [ "arm64" ], @@ -954,9 +954,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", - "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", "cpu": [ "ia32" ], @@ -967,9 +967,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", - "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", "cpu": [ "x64" ], @@ -1074,9 +1074,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", - "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", + "version": "20.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", + "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -1089,16 +1089,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.1.tgz", - "integrity": "sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.0.tgz", + "integrity": "sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.18.1", - "@typescript-eslint/type-utils": "6.18.1", - "@typescript-eslint/utils": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/type-utils": "6.19.0", + "@typescript-eslint/utils": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1124,15 +1124,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.1.tgz", - "integrity": "sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz", + "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.18.1", - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/typescript-estree": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4" }, "engines": { @@ -1152,13 +1152,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.1.tgz", - "integrity": "sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz", + "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1" + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1169,13 +1169,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.18.1.tgz", - "integrity": "sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.0.tgz", + "integrity": "sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.18.1", - "@typescript-eslint/utils": "6.18.1", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/utils": "6.19.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1196,9 +1196,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.1.tgz", - "integrity": "sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz", + "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1209,13 +1209,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.1.tgz", - "integrity": "sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz", + "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1237,17 +1237,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.18.1.tgz", - "integrity": "sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz", + "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.18.1", - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/typescript-estree": "6.18.1", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", "semver": "^7.5.4" }, "engines": { @@ -1262,12 +1262,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz", - "integrity": "sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz", + "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/types": "6.19.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -1285,9 +1285,9 @@ "dev": true }, "node_modules/@vitest/coverage-v8": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.2.0.tgz", - "integrity": "sha512-YvX8ULTUm1+zkvkl14IqXYGxE1h13OXKPoDsxazARKlp4YLrP28hHEBdplaU7ZTN/Yn6zy6Z3JadWNRJwcmyrQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.2.1.tgz", + "integrity": "sha512-fJEhKaDwGMZtJUX7BRcGxooGwg1Hl0qt53mVup/ZJeznhvL5EodteVnb/mcByhEcvVWbK83ZF31c7nPEDi4LOQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", @@ -1298,7 +1298,7 @@ "istanbul-lib-source-maps": "^4.0.1", "istanbul-reports": "^3.1.6", "magic-string": "^0.30.5", - "magicast": "^0.3.2", + "magicast": "^0.3.3", "picocolors": "^1.0.0", "std-env": "^3.5.0", "test-exclude": "^6.0.0", @@ -1312,13 +1312,13 @@ } }, "node_modules/@vitest/expect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.0.tgz", - "integrity": "sha512-H+2bHzhyvgp32o7Pgj2h9RTHN0pgYaoi26Oo3mE+dCi1PAqV31kIIVfTbqMO3Bvshd5mIrJLc73EwSRrbol9Lw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.1.tgz", + "integrity": "sha512-/bqGXcHfyKgFWYwIgFr1QYDaR9e64pRKxgBNWNXPefPFRhgm+K3+a/dS0cUGEreWngets3dlr8w8SBRw2fCfFQ==", "dev": true, "dependencies": { - "@vitest/spy": "1.2.0", - "@vitest/utils": "1.2.0", + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", "chai": "^4.3.10" }, "funding": { @@ -1326,12 +1326,12 @@ } }, "node_modules/@vitest/runner": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.0.tgz", - "integrity": "sha512-vaJkDoQaNUTroT70OhM0NPznP7H3WyRwt4LvGwCVYs/llLaqhoSLnlIhUClZpbF5RgAee29KRcNz0FEhYcgxqA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.1.tgz", + "integrity": "sha512-zc2dP5LQpzNzbpaBt7OeYAvmIsRS1KpZQw4G3WM/yqSV1cQKNKwLGmnm79GyZZjMhQGlRcSFMImLjZaUQvNVZQ==", "dev": true, "dependencies": { - "@vitest/utils": "1.2.0", + "@vitest/utils": "1.2.1", "p-limit": "^5.0.0", "pathe": "^1.1.1" }, @@ -1367,9 +1367,9 @@ } }, "node_modules/@vitest/snapshot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.0.tgz", - "integrity": "sha512-P33EE7TrVgB3HDLllrjK/GG6WSnmUtWohbwcQqmm7TAk9AVHpdgf7M3F3qRHKm6vhr7x3eGIln7VH052Smo6Kw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.1.tgz", + "integrity": "sha512-Tmp/IcYEemKaqAYCS08sh0vORLJkMr0NRV76Gl8sHGxXT5151cITJCET20063wk0Yr/1koQ6dnmP6eEqezmd/Q==", "dev": true, "dependencies": { "magic-string": "^0.30.5", @@ -1381,9 +1381,9 @@ } }, "node_modules/@vitest/spy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.0.tgz", - "integrity": "sha512-MNxSAfxUaCeowqyyGwC293yZgk7cECZU9wGb8N1pYQ0yOn/SIr8t0l9XnGRdQZvNV/ZHBYu6GO/W3tj5K3VN1Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.1.tgz", + "integrity": "sha512-vG3a/b7INKH7L49Lbp0IWrG6sw9j4waWAucwnksPB1r1FTJgV7nkBByd9ufzu6VWya/QTvQW4V9FShZbZIB2UQ==", "dev": true, "dependencies": { "tinyspy": "^2.2.0" @@ -1393,9 +1393,9 @@ } }, "node_modules/@vitest/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-FyD5bpugsXlwVpTcGLDf3wSPYy8g541fQt14qtzo8mJ4LdEpDKZ9mQy2+qdJm2TZRpjY5JLXihXCgIxiRJgi5g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-bsH6WVZYe/J2v3+81M5LDU8kW76xWObKIURpPrOXm2pjBniBu2MERI/XP60GpS4PHU3jyK50LUutOwrx4CyHUg==", "dev": true, "dependencies": { "diff-sequences": "^29.6.3", @@ -1445,26 +1445,26 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.13.tgz", - "integrity": "sha512-zGUdmB3j3Irn9z51GXLJ5s0EAHxmsm5/eXl0y6MBaajMeOAaiT4+zaDoxui4Ets98dwIRr8BBaqXXHtHSfm+KA==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.15.tgz", + "integrity": "sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==", "dev": true, "dependencies": { "@babel/parser": "^7.23.6", - "@vue/shared": "3.4.13", + "@vue/shared": "3.4.15", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.13.tgz", - "integrity": "sha512-XSNbpr5Rs3kCfVAmBqMu/HDwOS+RL6y28ZZjDlnDUuf146pRWt2sQkwhsOYc9uu2lxjjJy2NcyOkK7MBLVEc7w==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz", + "integrity": "sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==", "dev": true, "dependencies": { - "@vue/compiler-core": "3.4.13", - "@vue/shared": "3.4.13" + "@vue/compiler-core": "3.4.15", + "@vue/shared": "3.4.15" } }, "node_modules/@vue/language-core": { @@ -1493,9 +1493,9 @@ } }, "node_modules/@vue/shared": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.13.tgz", - "integrity": "sha512-56crFKLPpzk85WXX1L1c0QzPOuoapWlPVys8eMG8kkRmqdMjWUqK8KpFdE2d7BQA4CEbXwyyHPq6MpFr8H9rcg==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.15.tgz", + "integrity": "sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==", "dev": true }, "node_modules/acorn": { @@ -3248,9 +3248,9 @@ } }, "node_modules/rollup": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", - "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -3263,19 +3263,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", "fsevents": "~2.3.2" } }, @@ -3525,15 +3525,15 @@ "dev": true }, "node_modules/tinybench": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", - "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", "dev": true }, "node_modules/tinypool": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz", - "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", "dev": true, "engines": { "node": ">=14.0.0" @@ -3582,18 +3582,18 @@ } }, "node_modules/tsconfck": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.1.2.tgz", - "integrity": "sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.1.tgz", + "integrity": "sha512-7ppiBlF3UEddCLeI1JRx5m2Ryq+xk4JrZuq4EuYXykipebaq1dV0Fhgr1hb7CkmHt32QSgOZlcqVLEtHBG4/mg==", "dev": true, "bin": { "tsconfck": "bin/tsconfck.js" }, "engines": { - "node": "^14.13.1 || ^16 || >=18" + "node": "^18 || >=20" }, "peerDependencies": { - "typescript": "^4.3.5 || ^5.0.0" + "typescript": "^5.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3707,9 +3707,9 @@ } }, "node_modules/vite": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", - "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", "dev": true, "dependencies": { "esbuild": "^0.19.3", @@ -3762,9 +3762,9 @@ } }, "node_modules/vite-node": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.0.tgz", - "integrity": "sha512-ETnQTHeAbbOxl7/pyBck9oAPZZZo+kYnFt1uQDD+hPReOc+wCjXw4r4jHriBRuVDB5isHmPXxrfc1yJnfBERqg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.1.tgz", + "integrity": "sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -3784,9 +3784,9 @@ } }, "node_modules/vite-plugin-dts": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-3.7.0.tgz", - "integrity": "sha512-np1uPaYzu98AtPReB8zkMnbjwcNHOABsLhqVOf81b3ol9b5M2wPcAVs8oqPnOpr6Us+7yDXVauwkxsk5+ldmRA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-3.7.1.tgz", + "integrity": "sha512-VZJckNFpVfRAkmOxhGT5OgTUVWVXxkNQqLpBUuiNGAr9HbtvmvsPLo2JB3Xhn+o/Z9+CT6YZfYa4bX9SGR5hNw==", "dev": true, "dependencies": { "@microsoft/api-extractor": "7.39.0", @@ -3853,14 +3853,14 @@ } }, "node_modules/vite-tsconfig-paths": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.2.3.tgz", - "integrity": "sha512-xVsA2xe6QSlzBujtWF8q2NYexh7PAUYfzJ4C8Axpe/7d2pcERYxuxGgph9F4f0iQO36g5tyGq6eBUYIssdUrVw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.1.tgz", + "integrity": "sha512-cfgJwcGOsIxXOLU/nELPny2/LUD/lcf1IbfyeKTv2bsupVbTH/xpFtdQlBmIP1GEK2CjjLxYhFfB+QODFAx5aw==", "dev": true, "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", - "tsconfck": "^2.1.0" + "tsconfck": "^3.0.1" }, "peerDependencies": { "vite": "*" @@ -3872,17 +3872,17 @@ } }, "node_modules/vitest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.0.tgz", - "integrity": "sha512-Ixs5m7BjqvLHXcibkzKRQUvD/XLw0E3rvqaCMlrm/0LMsA0309ZqYvTlPzkhh81VlEyVZXFlwWnkhb6/UMtcaQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.1.tgz", + "integrity": "sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==", "dev": true, "dependencies": { - "@vitest/expect": "1.2.0", - "@vitest/runner": "1.2.0", - "@vitest/snapshot": "1.2.0", - "@vitest/spy": "1.2.0", - "@vitest/utils": "1.2.0", - "acorn-walk": "^8.3.1", + "@vitest/expect": "1.2.1", + "@vitest/runner": "1.2.1", + "@vitest/snapshot": "1.2.1", + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", + "acorn-walk": "^8.3.2", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", @@ -3896,7 +3896,7 @@ "tinybench": "^2.5.1", "tinypool": "^0.8.1", "vite": "^5.0.0", - "vite-node": "1.2.0", + "vite-node": "1.2.1", "why-is-node-running": "^2.2.2" }, "bin": { diff --git a/package.json b/package.json index 0bbed65..f091c08 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "email": "rycochet@rycochet.com" } ], - "version": "2.0.0-rc.2", + "version": "2.0.0-rc.3", "license": "MIT", "description": "LZ-based compression algorithm", "homepage": "http://pieroxy.net/blog/pages/lz-string/index.html", @@ -50,27 +50,31 @@ ], "scripts": { "build": "tsc && vite build", - "format": "prettier --write .", + "format": "npm run format:prettier && npm run format:eslint", + "format:prettier": "prettier --write .", + "format:eslint": "eslint --fix .", "start": "vite build --watch", "test": "[ -f ./dist/index.js ] || npm run build && vitest", "test:coverage": "vitest run src.main.test.ts --coverage", - "lint": "eslint ." + "lint": "npm run lint:prettier && npm run lint:eslint", + "lint:prettier": "prettier --check .", + "lint:eslint": "eslint ." }, "devDependencies": { "@btmills/prettier": "3.1.0", - "@types/node": "20.11.0", - "@typescript-eslint/eslint-plugin": "6.18.1", - "@typescript-eslint/parser": "6.18.1", - "@vitest/coverage-v8": "1.2.0", + "@types/node": "20.11.5", + "@typescript-eslint/eslint-plugin": "6.19.0", + "@typescript-eslint/parser": "6.19.0", + "@vitest/coverage-v8": "1.2.1", "eslint": "8.56.0", "eslint-config-prettier": "9.1.0", "tslib": "2.6.2", "typescript": "5.3.3", - "vite": "5.0.11", - "vite-plugin-dts": "3.7.0", + "vite": "5.0.12", + "vite-plugin-dts": "3.7.1", "vite-plugin-eslint": "1.8.1", - "vite-tsconfig-paths": "4.2.3", - "vitest": "1.2.0" + "vite-tsconfig-paths": "4.3.1", + "vitest": "1.2.1" }, "override": { "prettier": "npm:@btmills/prettier@3.1.0" From e1420924703dfc1df2fc8c8b94805a7e4c7c5602 Mon Sep 17 00:00:00 2001 From: Ryc O'Chet Date: Sun, 21 Jan 2024 23:16:43 +0000 Subject: [PATCH 3/7] Update CLI command and test tool --- README.md | 26 +++++ bin/cli.cjs | 48 +++++---- test.sh | 120 ++++++++++++++++++----- testdata/lorem_ipsum/data.bin | 19 ++++ testdata/lorem_ipsum/js/base64.bin | 1 + testdata/lorem_ipsum/js/encodeduri.bin | 1 + testdata/lorem_ipsum/js/raw.bin | Bin 0 -> 5679 bytes testdata/lorem_ipsum/js/uint8array.bin | Bin 0 -> 3858 bytes testdata/lorem_ipsum/js/utf16.bin | 1 + testdata/tattoo/{source.bin => data.bin} | 0 testdata/tattoo/{ => js}/base64.bin | 0 testdata/tattoo/{ => js}/base64x.bin | 0 testdata/tattoo/{ => js}/encodeduri.bin | 0 testdata/tattoo/js/raw.bin | Bin 0 -> 972 bytes testdata/tattoo/{ => js}/uint8array.bin | Bin testdata/tattoo/{ => js}/utf16.bin | 0 16 files changed, 172 insertions(+), 44 deletions(-) mode change 100644 => 100755 bin/cli.cjs create mode 100644 testdata/lorem_ipsum/data.bin create mode 100644 testdata/lorem_ipsum/js/base64.bin create mode 100644 testdata/lorem_ipsum/js/encodeduri.bin create mode 100644 testdata/lorem_ipsum/js/raw.bin create mode 100644 testdata/lorem_ipsum/js/uint8array.bin create mode 100644 testdata/lorem_ipsum/js/utf16.bin rename testdata/tattoo/{source.bin => data.bin} (100%) rename testdata/tattoo/{ => js}/base64.bin (100%) rename testdata/tattoo/{ => js}/base64x.bin (100%) rename testdata/tattoo/{ => js}/encodeduri.bin (100%) create mode 100644 testdata/tattoo/js/raw.bin rename testdata/tattoo/{ => js}/uint8array.bin (100%) rename testdata/tattoo/{ => js}/utf16.bin (100%) diff --git a/README.md b/README.md index e83e514..c9f0235 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,32 @@ $ lz-string input.txt > output.txt Home page for this program with examples, documentation and a live demo: http://pieroxy.net/blog/pages/lz-string/index.html +## Command line + +If installed globally there is a command line tool available, and a test suite that can use it to show things are working properly. If other langauges build a command line tool that supports the same arguments then the test suite can be run against them too. + +```sh +$ lz-string -h +Usage: lz-string [options] [input-file] + +Use lz-string to compress or decompress a file + +Arguments: + input-file file to process, if no file then read from stdin + +Options: + -V, --version output the version number + -d, --decompress if unset then this will compress + -f, --format formatter to use (choices: "base64", "encodeduri", "raw", "uint8array", "utf16", default: "raw") + -v, --validate validate before returning (default: true) + -o, --output output file, otherwise write to stdout + -q, --quiet don't print any error messages + -h, --help display help for command +``` + +> [!WARNING] +> Currently I cannot get NodeJS to read binary files correctly, so `raw` and `uint8array` are both compress-only - Ryc + ## Other languages This lib has numerous ports to other languages, for server side processing, mostly. Here they are: diff --git a/bin/cli.cjs b/bin/cli.cjs old mode 100644 new mode 100755 index 7029615..7ffc25e --- a/bin/cli.cjs +++ b/bin/cli.cjs @@ -38,6 +38,14 @@ function decompressContent(format, content) { } } +function loadFile(file) { + try { + return fs.readFileSync(file).toString(); + } catch { + // TODO better error handling + } +} + program .version(pkg.version) .description("Use lz-string to compress or decompress a file") @@ -48,22 +56,32 @@ program .default("raw"), ) .addOption(new Option("-v, --validate", "validate before returning").default(true)) - .addOption(new Option("-o, --output ", "output file")) + .addOption(new Option("-o, --output ", "output file, otherwise write to stdout")) .addOption(new Option("-q, --quiet", "don't print any error messages")) - .argument("", "file to process") + .argument("[input-file]", "file to process, if no file then read from stdin") .showHelpAfterError() - .action((file, { format, decompress, output, quiet, validate }) => { - if (!fs.existsSync(file)) { - if (!quiet) process.stderr.write(`Unable to find ${file}`); + .action((file = process.stdin.fd, { format, decompress, output = process.stdout.fd, quiet, validate }) => { + if (file !== process.stdin.fd) { + if (!fs.existsSync(file)) { + if (!quiet) process.stderr.write(`Unable to find ${file}\n`); + process.exit(1); + } + try { + fs.accessSync(file, fs.constants.R_OK); + } catch { + if (!quiet) process.stderr.write(`Unable to access ${file}\n`); + process.exit(1); + } + } + if (decompress && ["raw", "uint8array"].includes(format)) { + if (!quiet) process.stderr.write(`Decompressing ${format} is currently unsupported\n`); process.exit(1); } - try { - fs.accessSync(file, fs.constants.R_OK); - } catch { - if (!quiet) process.stderr.write(`Unable to read ${file}`); + const unprocessed = loadFile(file, quiet); + if (unprocessed === undefined) { + if (!quiet) process.stderr.write(`Unable to read ${file === process.stdin.fd ? "from stdin" : file}\n`); process.exit(1); } - const unprocessed = fs.readFileSync(file).toString(); const processed = decompress ? decompressContent(format, unprocessed) : compressContent(format, unprocessed); if (validate) { @@ -76,18 +94,14 @@ program } } if (!valid) { - if (!quiet) process.stderr.write(`Unable to validate ${file}`); + if (!quiet) process.stderr.write(`Unable to validate ${file}\n`); process.exit(1); } } if (processed == null) { - if (!quiet) process.stderr.write(`Unable to process ${file}`); + if (!quiet) process.stderr.write(`Unable to process ${file}\n`); process.exit(1); } - if (output) { - fs.writeFileSync(output, processed, null); - } else { - process.stdout.write(processed); - } + fs.writeFileSync(output, processed, null); }) .parse(); diff --git a/test.sh b/test.sh index 30f0bfc..79b6467 100755 --- a/test.sh +++ b/test.sh @@ -6,24 +6,59 @@ FG_RED="\033[31m" FG_GREEN="\033[32m" FG_YELLOW="\033[33m" +OPT_UPDATE=0 +OPT_COMMAND=bin/cli.cjs +OPT_PREFIX=js + Help() { - echo -e "\nUsage: $0 [-u]" - echo "-h: Show this help" - echo "-u: Update any failed tests" + echo -e "\nUsage: $0 [-uh] [-c -p ]" + echo "-u: Update any failed tests" + echo "-c : lz-string command to run (default: $OPT_COMMAND)" + echo "-p : prefix for test results (required if setting a command)" + echo "-h: Show this help" exit } -OPT_UPDATE=0 - # ---===###===--- Code starts here ---===###===--- # -while getopts ":hu" opt; do +while getopts ":huc:o:" opt; do case ${opt} in - "h") Help ;; - "u") OPT_UPDATE=1 ; echo "Updating test files" ;; + h) + Help + ;; + u) + OPT_UPDATE=1 + echo "Updating test files" + ;; + c) + if ! command -v "$OPTARG" &> /dev/null; then + echo "$OPTARG could not be found" + exit 1 + fi + if [ "$OPT_PREFIX" = "js" ]; then + OPT_PREFIX="" + fi + OPT_COMMAND="$OPTARG" + echo "Using: $OPT_COMMAND" + ;; + p) + OPT_PREFIX="${OPTARG//./}" + echo "Prefix: $OPT_PREFIX" + ;; + *) + echo "Invalid option: -$OPTARG" >&2 + Help + exit 2 + ;; esac done +if [ "$OPT_PREFIX" = "" ]; then + echo "Invalid prefix: -$OPT_PREFIX" >&2 + Help + exit 2 +fi + # file1, file2, success compare() { if cmp -s $1 $2; then @@ -37,16 +72,29 @@ compare() { # format, folder process() { - OUTPUT=$(mktemp) - VALIDATE=$(mktemp) - - printf "\nCompress: %-12s " $1 - node bin/cli.cjs -v -q -f $1 testdata/$2/source.bin -o $OUTPUT - if ! compare testdata/$2/$1.bin $OUTPUT; then - node bin/cli.cjs -q -d -f $1 $OUTPUT -o $VALIDATE - if cmp -s $VALIDATE testdata/$2/source.bin; then - if [ ! -f testdata/$2/$1.bin ] || [ $OPT_UPDATE -eq 1 ]; then - cp $OUTPUT testdata/$2/$1.bin + local OUTPUT=$(mktemp) + local VALIDATE=$(mktemp) + + if [ ! -f "testdata/$2/$OPT_PREFIX/$1.bin" ] && [ $OPT_UPDATE -eq 0 ]; then + printf "\n Untested: %-12s " "$1" + printf " ...${FG_RED}%s${ANSI_RESET}" "no validation file" + return + fi + + mkdir -p "testdata/$2/$OPT_PREFIX" + + printf "\n Compress: %-12s " "$1" + $OPT_COMMAND -v -q -f "$1" < "testdata/$2/data.bin" > $OUTPUT + + if [ ! -f "testdata/$2/$OPT_PREFIX/$1.bin" ]; then + cp $OUTPUT "testdata/$2/$OPT_PREFIX/$1.bin" + printf " ...${FG_YELLOW}%s${ANSI_RESET}" "written" + fi + if ! compare "testdata/$2/$OPT_PREFIX/$1.bin" $OUTPUT; then + $OPT_COMMAND -q -d -f "$1" < $OUTPUT > $VALIDATE + if cmp -s $VALIDATE "testdata/$2/data.bin"; then + if [ ! -f "testdata/$2/$OPT_PREFIX/$1.bin" ] || [ $OPT_UPDATE -eq 1 ]; then + cp $OUTPUT "testdata/$2/$OPT_PREFIX/$1.bin" printf " ...${FG_YELLOW}%s${ANSI_RESET}" "updated" else printf " ...${FG_RED}%s${ANSI_RESET}" "unsafe" @@ -56,17 +104,35 @@ process() { fi fi - printf "\nDecompress: %-12s " $1 - node bin/cli.cjs -v -q -d -f $1 testdata/$2/$1.bin -o $OUTPUT - compare testdata/$2/source.bin $OUTPUT + printf "\n Decompress: %-12s " "$1" + $OPT_COMMAND -v -q -d -f "$1" < "testdata/$2/$OPT_PREFIX/$1.bin" > $OUTPUT + compare "testdata/$2/data.bin" $OUTPUT rm $OUTPUT $VALIDATE } -# process raw tattoo -process base64 tattoo -process encodeduri tattoo -# process uint8array tattoo -process utf16 tattoo +# testdata/ +process_data() { + printf "Running against %s..." "$1" + + process raw $1 + printf " (note that testing raw decoding is currently unsupported)" # binary file loading issues in nodejs + + process base64 $1 + + process encodeduri $1 + + process uint8array $1 + printf " (note that testing uint8array decoding is currently unsupported)" # binary file loading issues in nodejs + + process utf16 $1 + + printf "\n...Complete\n\n" +} + +printf "lz-string test runner\n\n" + +process_data tattoo +process_data lorem_ipsum -printf "\n\nDone\n" \ No newline at end of file +printf "Done\n" diff --git a/testdata/lorem_ipsum/data.bin b/testdata/lorem_ipsum/data.bin new file mode 100644 index 0000000..4957dee --- /dev/null +++ b/testdata/lorem_ipsum/data.bin @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Dolor purus non enim praesent elementum facilisis. Enim nec dui nunc mattis enim ut tellus elementum. Egestas integer eget aliquet nibh praesent tristique. Magna etiam tempor orci eu lobortis elementum nibh tellus. At auctor urna nunc id. Et molestie ac feugiat sed lectus vestibulum. Mattis enim ut tellus elementum sagittis vitae et leo. Orci dapibus ultrices in iaculis nunc sed. Ipsum a arcu cursus vitae congue mauris rhoncus aenean vel. Amet tellus cras adipiscing enim eu turpis egestas pretium. Bibendum enim facilisis gravida neque convallis a cras semper. Nec dui nunc mattis enim ut tellus elementum sagittis. Viverra suspendisse potenti nullam ac tortor vitae purus faucibus. Et malesuada fames ac turpis egestas maecenas pharetra convallis. Nunc congue nisi vitae suscipit tellus mauris a diam. Aliquam ut porttitor leo a diam sollicitudin tempor. Sit amet volutpat consequat mauris nunc. + +Tristique senectus et netus et malesuada fames ac turpis. Orci eu lobortis elementum nibh tellus. Faucibus et molestie ac feugiat sed lectus vestibulum mattis. Est ante in nibh mauris cursus mattis molestie. Lacinia at quis risus sed vulputate odio ut enim blandit. Rhoncus aenean vel elit scelerisque mauris pellentesque. Imperdiet dui accumsan sit amet nulla facilisi morbi. Nulla posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Nunc aliquet bibendum enim facilisis gravida neque convallis. Est ullamcorper eget nulla facilisi etiam. Aliquet nibh praesent tristique magna sit amet purus. Diam quam nulla porttitor massa id neque aliquam vestibulum morbi. Viverra orci sagittis eu volutpat odio. Morbi blandit cursus risus at ultrices mi tempus imperdiet nulla. Diam ut venenatis tellus in metus. + +Risus nullam eget felis eget nunc lobortis mattis aliquam. Elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique. Ultrices eros in cursus turpis massa. Eget aliquet nibh praesent tristique. Orci sagittis eu volutpat odio facilisis. Mi tempus imperdiet nulla malesuada pellentesque elit. In fermentum et sollicitudin ac orci phasellus egestas. Amet tellus cras adipiscing enim eu turpis egestas. Posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Rutrum quisque non tellus orci ac auctor augue mauris. Imperdiet massa tincidunt nunc pulvinar sapien. Et tortor consequat id porta nibh venenatis cras. Risus quis varius quam quisque id diam. Etiam tempor orci eu lobortis elementum nibh tellus molestie. Orci a scelerisque purus semper eget duis at tellus at. Congue mauris rhoncus aenean vel elit. Ultricies mi quis hendrerit dolor magna eget est. Etiam non quam lacus suspendisse faucibus. + +Sapien et ligula ullamcorper malesuada proin. Donec ultrices tincidunt arcu non sodales neque sodales. Cras fermentum odio eu feugiat pretium nibh ipsum consequat nisl. Ornare quam viverra orci sagittis eu volutpat odio. Maecenas ultricies mi eget mauris pharetra et ultrices neque ornare. Et tortor consequat id porta nibh venenatis cras sed felis. Urna duis convallis convallis tellus. Congue eu consequat ac felis donec et odio. Quam lacus suspendisse faucibus interdum posuere lorem. Et netus et malesuada fames. Lectus urna duis convallis convallis. Diam phasellus vestibulum lorem sed risus ultricies. Donec enim diam vulputate ut pharetra. Quis lectus nulla at volutpat diam ut venenatis. Vitae justo eget magna fermentum iaculis eu non diam. Volutpat odio facilisis mauris sit. Nisl vel pretium lectus quam id. Lectus proin nibh nisl condimentum id venenatis a condimentum vitae. Nulla pellentesque dignissim enim sit amet venenatis urna cursus eget. + +At volutpat diam ut venenatis tellus in. Eget duis at tellus at urna condimentum mattis pellentesque. Aenean pharetra magna ac placerat vestibulum lectus mauris. Sit amet mattis vulputate enim nulla. Neque vitae tempus quam pellentesque nec nam. Non sodales neque sodales ut etiam sit. Sem et tortor consequat id porta nibh venenatis. At varius vel pharetra vel turpis nunc. Proin sed libero enim sed faucibus turpis in. Malesuada fames ac turpis egestas integer. Eget felis eget nunc lobortis mattis aliquam faucibus. Eget duis at tellus at. Accumsan in nisl nisi scelerisque eu ultrices vitae auctor. Sem et tortor consequat id porta nibh venenatis cras. Mauris in aliquam sem fringilla ut morbi tincidunt. A iaculis at erat pellentesque adipiscing. Ipsum dolor sit amet consectetur. Eget mauris pharetra et ultrices neque ornare aenean. Tortor vitae purus faucibus ornare suspendisse sed nisi lacus. Diam phasellus vestibulum lorem sed. + +Ultrices eros in cursus turpis massa tincidunt dui ut ornare. Ac tortor vitae purus faucibus ornare suspendisse sed nisi. Suspendisse potenti nullam ac tortor vitae. Volutpat maecenas volutpat blandit aliquam etiam. Et malesuada fames ac turpis egestas. Urna et pharetra pharetra massa. Consectetur lorem donec massa sapien faucibus et molestie ac. Adipiscing tristique risus nec feugiat in. Molestie at elementum eu facilisis sed odio morbi quis commodo. Egestas pretium aenean pharetra magna ac. Nisl purus in mollis nunc sed id semper risus. Mattis enim ut tellus elementum sagittis vitae et leo duis. Diam donec adipiscing tristique risus nec feugiat in fermentum. Fermentum dui faucibus in ornare. Semper risus in hendrerit gravida rutrum quisque non tellus orci. Mi tempus imperdiet nulla malesuada pellentesque elit eget gravida. Quam nulla porttitor massa id neque aliquam vestibulum morbi blandit. Ac placerat vestibulum lectus mauris ultrices eros in cursus turpis. Tincidunt dui ut ornare lectus. Pellentesque habitant morbi tristique senectus et netus et. + +Et leo duis ut diam quam nulla porttitor massa. Turpis massa tincidunt dui ut ornare. Eu lobortis elementum nibh tellus molestie nunc. Pellentesque diam volutpat commodo sed. Cras sed felis eget velit. Et tortor at risus viverra. Dictum varius duis at consectetur lorem donec massa sapien. Sed augue lacus viverra vitae congue eu. Egestas quis ipsum suspendisse ultrices. Sem integer vitae justo eget magna fermentum iaculis. Fermentum dui faucibus in ornare quam viverra orci. In ante metus dictum at tempor commodo. Ipsum dolor sit amet consectetur adipiscing elit duis tristique. Sit amet luctus venenatis lectus magna. Netus et malesuada fames ac. Cras tincidunt lobortis feugiat vivamus at augue eget arcu dictum. Ultrices sagittis orci a scelerisque purus semper eget duis at. Quis enim lobortis scelerisque fermentum dui faucibus in ornare quam. Nisl suscipit adipiscing bibendum est ultricies integer. + +Sem integer vitae justo eget. Semper quis lectus nulla at volutpat. Sed enim ut sem viverra aliquet eget. Leo urna molestie at elementum eu. Mauris commodo quis imperdiet massa tincidunt nunc pulvinar sapien et. At varius vel pharetra vel turpis nunc. Egestas egestas fringilla phasellus faucibus. Scelerisque in dictum non consectetur a erat. Et netus et malesuada fames. Quis lectus nulla at volutpat diam ut venenatis. Et malesuada fames ac turpis egestas sed. Aliquam vestibulum morbi blandit cursus risus at ultrices. A condimentum vitae sapien pellentesque. Aliquam ultrices sagittis orci a scelerisque purus semper. Risus commodo viverra maecenas accumsan. Nunc sed blandit libero volutpat. Pellentesque sit amet porttitor eget. + +Varius duis at consectetur lorem donec massa sapien faucibus. Nibh cras pulvinar mattis nunc sed. Elementum tempus egestas sed sed risus. Sit amet est placerat in egestas erat imperdiet. Ut venenatis tellus in metus vulputate eu scelerisque felis imperdiet. Ipsum suspendisse ultrices gravida dictum fusce ut placerat orci. Adipiscing enim eu turpis egestas pretium. Placerat vestibulum lectus mauris ultrices eros in cursus. In nibh mauris cursus mattis molestie. In fermentum posuere urna nec tincidunt praesent semper feugiat. Mi tempus imperdiet nulla malesuada pellentesque elit eget. + +Arcu non sodales neque sodales ut etiam sit amet. Malesuada fames ac turpis egestas sed tempus urna et pharetra. Nisl tincidunt eget nullam non. Lobortis elementum nibh tellus molestie nunc. Iaculis eu non diam phasellus vestibulum lorem. Facilisi morbi tempus iaculis urna id. Elementum integer enim neque volutpat ac tincidunt. Faucibus et molestie ac feugiat sed lectus vestibulum. Faucibus turpis in eu mi bibendum neque egestas. Arcu odio ut sem nulla. Tortor id aliquet lectus proin nibh nisl. Orci ac auctor augue mauris augue neque. Nulla at volutpat diam ut venenatis tellus in metus vulputate. Lacus viverra vitae congue eu consequat ac felis. Fermentum dui faucibus in ornare. Suspendisse in est ante in nibh mauris cursus mattis molestie. Amet volutpat consequat mauris nunc congue nisi vitae. Auctor augue mauris augue neque gravida in fermentum. diff --git a/testdata/lorem_ipsum/js/base64.bin b/testdata/lorem_ipsum/js/base64.bin new file mode 100644 index 0000000..de43135 --- /dev/null +++ b/testdata/lorem_ipsum/js/base64.bin @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/testdata/lorem_ipsum/js/encodeduri.bin b/testdata/lorem_ipsum/js/encodeduri.bin new file mode 100644 index 0000000..dd4878d --- /dev/null +++ b/testdata/lorem_ipsum/js/encodeduri.bin @@ -0,0 +1 @@ +DIewTgpgtgBAlgBwM4FdYBMQBtwyXAFxgEMoICAaGAYxADskJqDyUwT1E4lq46BzGBCyEqjdDExC4KJFBASWUBLj69O6FHSIoiWYgCNwEIUUw5IMKMX51iJEQEcUxAHQwAItlwI2smHT0QnRwsAhgxBCM2kJY0BDaaDAAZsS8IvhI7gCiIbB0TJIocAFa1FbEBATcwaEwujAsWFj+wvGJUDn8UQTESPDaEN3sQ+QOcM5jIQYAFjDhkdFEBGDc1ZPuALI2dqZwpI3QKuzgvEIoMDhGYNX9bWQdAXCzh82y7gCCRMQozLhsuzoZXg6ByRHkcSQ1RMaRSEBQ-H2RHElyYBH8ADces8UC1OjBtlUagk6g0mi07nEHujYEgbIRbjAMYRIqZUSB3AB5MBndDEBA4-q4lZwahRAbwNK4mpAujlcTuACSyCS9mIPIu1DYqH6zN6JloAhQJmsbBqYBm9C1-UiBWIdCZwk+ZGWwgpNAiNs4Ap4fEEJNg8MabB9Qm6UL680g1TQ7gAQs8EppA3kUmk4BkavwIsy+QEIJMaPQMcRmjV7NRPXgjhAwO4AHKFTQlWXlaxEu6pslu1pUhI0vD0jvuABqcCxYAieFkCCT3EY8xALG0Ldx+lgsII4C37D1rN8YH8qV+grBFUhLjzqTINvK6LAodGEf61iYCUjCBm6vIU8NJbLWQwPWwKGvwxpPPgTIsiYOq8AKrpvC+PyrDakj7PiHxOC4sANMcRI7uyJBoQcSDYCIvDopwDpKMc7gAMqECQLpMtgugIJURYMAWLjgshMplK4ABQgkACooes4HRGirREAU6J3LxF7EFepDipuIbcFyPIlEGVzbsSfaPNMczku8MAAGI-LwBgyVY2DYjC5TJPCiIcSicTMJi2I2XiFTDjA2RQiQgwSsZFRmv0WpgDqfmMhCDnuMA6YhGqRDOOa3D+CiGK4r4vQsDAChwCA9REAGMAGPodCcAQ7gAEqWnK-i2hA9qOlgsSMTwbQoYWpoofMbr9lEGwwIqyi1pwYzNiQ1BalAdIOvg3zMUCzT2Kk6TcCU8hgAYcANmu9gqKgtYwWRoqECgVHjM4BzCqsYr9HSiIdoV2lEd1cS9cah1yrdxpEPtBhJkk5WbRm239NmxC5vYBSFn+pYZDkQVHVAtAPrWYZTEdaZbZB5DoZ8WFTM8cwLFE-aNOJEzgdYtj2MtTFjAeZkeOhMB3fkeN4dUBHWEgdIgvmhalnTBxYlCOK+bt+2juOtZTqcJQvQyxIXBirEEOxRBFRyBLgPtFVVTVNDav4KHNToWAik9VglDR-ihLOYBTbJR3uBz91EFiBR2Iypn9HwVisFkwl1Zl-RreuONEM5GRx6U-16TcNTtoy4vczkIjImK33cH1fH9LOzTDUgha+FgzJ2OwpdxIMFfgV++29DEcuO7To0AKq2494q1iAwcOlFMX3qGgt0l0YxZ4DTwvJTSw02sdMQFpZxq29QZay0Oscfr+OQ5kWyO0czsTW7cC4+t55RJex1DY3hbCIQSoOs5YDUmDyIXRR10h7CFW8wvyMEQjjZ8zoxhBw9JGZSXBfQCFqIGC449iThl6IBAACkPY0lhSJlj-jdWe90+6inFJvRkQCmb51rIXX6MA6q6EPLAdKTcTCBGoj2foVDyhWQIj8MCJpi5Kgvu7CoQt7DVDlHATQMRWzzFxDXdUg4BQJDPDuAihpGB3SIDIxcNx4bk0dP7SoNRKx9HqlHLmxRdTqhkP0bm1i6EmD0ZwUgYJOY0VwEA3SIBriMnuP2JIYVoHxWlmvGA3IzjUJ6s4hRh5no1hGN0MwNiSAIXdJUdwABheggjwoDQtFaZqCRWoOixB1F+tUYC9ztlfF8JRWEwBmEmSAqwzDeHYAzXYowypQg8QcDh1iDj6GtNOJAs5qrzhMMeay7xhJ0X5FfB0YwRBgX0PUdaGNwCu1vqgZSx0wAgD4F7eghQHpkP6FI9QWhvgagCEEUifJISi0kgoUsUQclVg-l-WAB8gzOQREiKMRNglGMQKgWAWjuIcRCEgLAWla4mEccyCcysPoUI1ixXeutCqcANtsN8dghSkN4OKKAOkUkFJqJ+b8Kx7BjAufbBG4FwBIvUduXA0KdEizwoYl4ft3yMnMYkiQCdNI1LALsZskVizIzMXKgCrwKQ5LyeBIM3KeKzThInTABRyhjH1u4AAithS4UpnozjnELGZVlBQDBYG7JIJ1cEmAsNAM8clbLWCUipG8iVpJCilfYGVnF-yJyRgBL2nNaWgPdFLaoPkkjutpBACQVsSV1M+Z4M5BrUxuNgDlLAeVKgmFwl+aMEQTVpI8vJUoN8OI7zYhxAtpVjFColWOfUMAABWsgtxJ26RtWsvzJRakTkGIZBbRza1xQfCGmYkIRTwK-IC3AOoVJBTGWAtb-COJkQGzyJcjkhzCnCjqhpOCjr0YKgO5ZOJXqCYW6Ch0b713LoWTgth5x1HKszVSvtSl3qDbsUerQUlCUEl8bFzazCcwaLe0xVyuEDGnqk8sGTrb1GDQ+0IT7Yo0sfiwNhnxSltVpZW+wQ7tUIFGbWRt3lcTJsDdSwCDEVpjAzjUItJaCrlRjm4IC3ETB7hME7BxZr31P3AvqgI7igKPPeS8ll51nnigaETEiq66LQDZBorl9BtFar0Xy+ecxEO3E+L7OxXkOoUZ-PYTdqDo4CRgJgk9S002XETEcpB1YxV2pslcjSw8tgfP2X6tSd4QvgIwQ60YdYApUvFXcKl8jU5xUqJnLCBxZmniS9NNJHFoFZJgB8OaaBFqhXXRBVWNCfomCDEy8UomSC-B3PRXTUDOXsE1RxEz25+XmaA0hmBgFtjLoATl1NsBkirAEBmDZDQO6NDUDI25nwx3ShtGVCIRApPEbFt6bgvABBKhVBgTpK6ONEGhcwVgiXshUv6jSitDm2TNejsJ96SKSBkboO4ESPWoLdrZv0PLQWfvfnGZMzgNr-O1fNdaaNBxY0oYTTLZNxhU2gmErU-udwjnD3NtFfwznxHC2uetmIM0Ghsu-J8O8wPWtg7TCeSH9O8FWqmfDlEcKDowDotzuHC4VDLmqPW2Om5mcvpgCOWdHFXximJTBveQNTaMWIYGao8nsiKTvgctMN5tXk6fBg9w3ccOsze-S4BdKpyT0E7kri937yXGx5IXNFOmZLISGzuZCk7KQmhLNT4x2EGCBFNLQsGb8xORcsCk5htg9X3SbEdoA4AXpkXQjg+K2mm0CgPITA09nxbpkBuf7dvKMVEZqHtd8L4nOwdBCRO8iUR6MYBfGAGawtby7JhykGekiYt1NBNkcQSoypR5d2TcCfSncj13cCsfZOAtcro9+I6n3uHMtvx4M0IfN6h5ATr3fY8hxadVNpjEYZwx70wpIrDCxDOgSrE+hxlDn1dmIgTez76DRlzSaNa5xJx34yKCamqDK8zbj8y4CO4iwqYAySyMayxGwlCVT2g1SM7zB0Z7aOjSxJo7osYvaZoE5CBE4ShgbBYPgSoiRrayLoZtqc5uqBruCYJEYjTNyGAsjtzoHLzR6SSlJHpsheoKSQZ66EShoNCtqOJ-58yEDwF9BTwwAiQxYIFU6MFFAlB07Bqn4BQXAZYGTD75BGKhL2ThLJzUDsGcFsLESFoK63YgBF4KAlQKgwDZJVgogpZJwVKrqSH6bsAcSx6opKyCYcyeSFo2b9ChocR3YsBu4pqe6yYIF0iqIA6C5eYCLgSjKYiKyTiObj6gTqooCl5xZNIQoj7C7TKbJ2zZo6awB8AsDDAg6sh9pQglS9K167A-L4b7DjoSp76fz4aH6BbH4sHDLPpor2Dv5jQOj2gFQuj+CcCRFp5eK9bOHF4GzKiQqe4WDXYsxOEu4JFsAcDwKL6dToZXLL4RLsaHGXDtZeQmKMi7pISMwNhhxsg+oG6Ra3hfKRiaG3Lu7+I1Dr7AqoqkBYbZGNZUrqhahoSREW6krkJDiUIfQxIFx2Gs5d67JdGxHVKmrEiphGHPT1ZxK9EH7FD+72ohwTHZwN4dSwRcDfDh4XHAygyBhoykr1LxbDCQYNG8nYytbtEDq9Jn67JNKvGS6pSq66ydYSDlQNBd5QTTEAxjBikwDAAQAlQAhUYWEh4cSBKPDwhhbLqF5bFOLByiJXy8QSKrbSJaHyJVxKLsBpHLKmBWZMjRHtTV7vZOYxathlGRhm6RhzZ+iLbHQgIoZH5sZkl2EhwrEDhDLxEPZET0bVKSFiFfHhYAHXjZqEn9BSl-6NqOH2FtoWYSqSHfERYbSqS3jBi0GpY9CRjuGYQSyFqoFJAraYFTK3YWz9Cx4cSfabaXp4aPCtZul+4HZcERJtmOKfaDivRonRJ4BxmVx+CJIXyWIxTmmuEqlhEVBEqwIVYLT2h-TyheY9lmwiAgy+ZNpq42FAGHaSSa7MQKEERinCQjjen4mcSMCu6nFJF6qFCpG+7vxjGAT1hGIioKLVx8DKJcYub-TuHZCGQDjiaxYtleYoi96C6vnqlBS0ZpDpkSghmE79bWnkAW6AbPE1DQIhxLG6i5S6ClrnCrmxJ2E+EuyTQ2nna7E6iw41ELngF5iJlJDJCyBihtpEVij4GzEfCsl+h+ZBim7oIfjRgV7sF4EMaEFMbEEiGkG1HkGDzE7UFvxmasYk4xSIVB4JRzFwjDGPAupnTYaAiFCAkxCLzUw4nYxgmlabCnxf5Wk-42nSn-6G7Tl2FVJxyQYfD3JDJPLhavKqZJUaY660j4XVLbC+q1nG7qSNmYWiqf6+AgYMr7Y25VoMn2k3IxBdECb5D0CJR+L6RD6johIoZhIh6BljRSgToXBToxpRlgIY5EHu6QD4iWQEw7T8EYX9HbauX2AHoBRoVJBNEJZ+ZIH3m4qbgMEbYWQQVfH6mp6wh+XIheZSkjV6W74HXk4hxBgUoVSJjVTBLfZkWfD3IHxKm6YCaA7A56KzyrIsbhDHIOhnrrrrwlCwh8K4DQmWWw0qavobIlk4otrwY0UdrIZgIMWfE8YsUsCJQWr7kFGtEGhqqNaaiGYwrfDx4owWT74DijHs7jF6G3HVHw53VBQLEuKg1GKGXUEEYvhHWznMRbVxGU08qGXyLFHsLbQk2fDtYw0Ij0zFxtb5JIEiWLVb6OU0hCRAA \ No newline at end of file diff --git a/testdata/lorem_ipsum/js/raw.bin b/testdata/lorem_ipsum/js/raw.bin new file mode 100644 index 0000000000000000000000000000000000000000..e67b811d66d8861dc904520d8c7225a0a2901019 GIT binary patch literal 5679 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 UTy1ZXND?KBRlbf>NJ2ya0P_;ICjbBd literal 0 HcmV?d00001 diff --git a/testdata/lorem_ipsum/js/utf16.bin b/testdata/lorem_ipsum/js/utf16.bin new file mode 100644 index 0000000..8c14ba2 --- /dev/null +++ b/testdata/lorem_ipsum/js/utf16.bin @@ -0,0 +1 @@ +٣氳䅬஀Ȥ堡悇Ž〩䐡宦◠஬Ĭ偠›ణౠބ䊊޲䰳橇ঊ燰᳦ȶ⅊䜈ㅑס≥Ȣ▴ɼ㻝ᷰ凲ᅤ▸䀱尤Ⴢ䱙ႁ⌷珌≤⁃䕑Zఠᆌ尨涄懳梤璐堤ᡑȱ䷄ዦ䁣㓰〠㎂⼨弩ༀԱۡ梹ቈ㠠囕૸䁠✆ڤ憔がⱌ㿐幑ᔣ倂䐳ࢱ烺ࢎ笰粡本猹иL㄁䤈儡఻䵹ᾐ˨洍⚐剦琪嶼௤ᅡ䄁ೡ嘝㛒ݠ⸶㢜涷㠢ҩ䑈晼᭎杣ᘀ琮⑧䤂⑕⊃⑲ࠪ࿧沨煅擠ሜ;䟌磀⵮䘭奴㔤什楔ⵛ乀篃いۨ⋼〬ォહ⢰ᷠϩ䂇㨸䁠爝⹅㎣⡱þͪ煕၎䝋䔎2Ⲣ☌戯ᆖ僸呟Ⳮ瑬娠䊡᧌㘭☡丈⶟⤰ᖨ㨳᱄糨旐䅩偂ᮇI焘䄩ᬧ䌺㘯呆瓁㻜椦哰眠ь硅᩠潂䧄瀬䛏恥䳞⁁ɬ㒚̼⍔㖛᪩瘀䜨మ瀠犥⚤喷䫶ᅎ畭䦎歪䡨榘㵃徐Š㠶ᘠ䔐夢Ҿ焸禨˦桻岞䬥䈨瀶绣歹弸စ▞䅸ᅴ䉼㴊♡寪瑸਽ృ绕䓠╃Ь滏Ⴧ䍩㙺摐Ỗʦ徦ᩯἢ㉌䓡櫜u㪏ؑ糋۴䤛ἰ籮ץ䀭ᤂቛ嶱ႈℂ⃸ѥ焈厠㩪ᤇ㠠ᥰ䂰ᝩ䮀崡ɴ⋡䀶᜼ୁᥬ勘*ࡄ5ਾ姠瑦䕺ᄠ⧱ᷫ扏ㄥ㵨㣉屣㜥撙।೎㜌┛⏭ᤆ㥎碀&ሙ㰡䆲噖ۤベ♩烂ᄂ⢼⚁ᣖᇒ碥☼ざ⊤⑀悵䙥⍕紶匠㪿䲄Ⴃ侑䁚ㄨ檱ڑ曗ࠐ⢦ᗥ㹏ↀ〢䎠⁝≀ƬQ稽Ԁћ䀠䪶乷磖䈧媮䬥䒬➣㑈フᩈ㺃㬝䩀汐ᅶ⣕厣೭䒦偺䨣刮弦糬⠶㔖ᕇ⓼Ӈ䢀ã䀭䶗塊ᔥ噐ⲭતԢ刃᧠᳢喃ଝິ∽僎楤㯋䓝㣴ᶒ圎ᩤᾈᡩ䥇ᖻ⍖渝᭖კ廠ᒥ倕ᘹ݂է⨥倯囓ٳऋ♻㈯ᄈ㐂慳ᨃ䰫ੇ皭ᱨ䴀㫥外ᦊㆃē᤾ᴩ䂗㽃掘㫀ᇶण剀彔ᛅ亸ᱸ䨱拞㞏淃岕噳唁ᑏ↶ሷ̵ㄤᶪၥ⎰ጀᾈ啵⛉僺忡⇭❢恂䨊塅گ磁ᚓs㙪Ḏο嵤ରᒖᆵ᨝ྡྷ壌୆ক㍏璋㶑捤᧨撑瓇続✁唍冷௼杁ࣨ䱶緼࿋爝ᚖ㓣⤤ᛞଦ㊖ᶥទႀ堀Ⱇ淝ك䮮皽ഠᕶ湝煶墠愁楥ᣞ窦䆎䦔ㆫḣ➥牳▦䷌㪂Ɖ㎭ⷝ⃫Ⳕᶃ䠋粒ຄⶱ洼枂㗛㠷࿍珪ቾ揈㙗䋸∰╡歙〺䦣摢瑱毄Ợ૗䱏撀䑃䛯䴈挨ᱝቓᒷ̚¥呠惘爌━䯱`4䏸楌ᒩ䬿磽ⴗ嵞甴煩庬䐢䳿ᶋლ纬ǵ⺤Ṹݪ✂ァ൤㶿僈㳁ⲡजᠱ᪂牴ఎ瘵э瘺儅ย㐬⋖㳥戺睴䇠ᐩژ㮠䔭ᆡ溱è持岘㝆䝯皵ͱᖯ刊䩙㧑⌊㫁䢞䜆欷ⅆ߃ᰴ䃡Ꮈ棎Ġ溱‹䒄箯汩ص偞ᗅ䶘恗ᆼ㔩疇ࡱ䏬穕䉑崬悌⒠მ剴㮠㴤ऐ债୥㓭₱ⵡ棑ψ忍⣠⾓孋熜ኪ慐͐䦲Ŷೣ㱛S⻥౒劤༰㠼ᶂܿ⇍᪑၌獵㴁ᢃ曒瞬ኔ⿨埡棦ѡ䃞䏴㫰掐֖尊䃪Ⲕ怤Ę௻桁⁝᤯瑉཰ⴭ砺䀰䄴䔙ሲ䗄䡈⦂䐼䫌စ绐œ䆹搱ऱ⌱ᬤ冬⁴֠ⴽ戼∰䠫Ô囘䱃䝒Ԇ⬯僁ං招母ճ䀭宁弽䄪⤭炑⊠ᵂ䤥፱Ά硶ỡ䘥査ɗƐɥ甽峘പ㩄ⴐ僤帿寞⍇ᣤ䢰ԉ剕ᘡ㬹奂壓ᆹ䗪䀵㰪⇩㲾ɡ䷪㱶㔁ᅚ〡⎴ᣧ殗 䖌ᓘ⥬穓䝘䋦㋌偰ثǛቡᵼॐଭ‡䝅㙺悴䕨潂⭩Ⴢ䬛Ƶ乏粩撬k浙嚶䂛八㕡祄䞕婡2֌Ⓨ卞㏡乡囆ᮭ䀼勠㳉⡆த徺ᡂӵ剧䯩⥡弮ᇾ㙁戥婵䙈⩅ⲓ甬 ᗌ䆎ኖ璭嗌徹ᑺ䢼䆨㈫㒓㗎ᐿє晄Ⴊ㰪繠ⷠᵢ剡♒恍㠘⎩䢠洒ጄ㥁昴烃唭Ꭲ䝾䘪䂗᙮ዝ₸ⷰ⢔㟾巫僒㡍䏮ᵧᖆ㕲徊⦗吻㬴㵺ՅӀ䦜㙎㛓Ԇګ㷆ᖒ局㇇啇䬦❻㵦ڧ洨⟻੔夜Ⱝ䍞ᓅ嫍ᙶ綢།⡠冻ⲭ帅㢹ᬣ㪶£࣍ᣠ机䉍ደ⬅⌼渨ט䓡眩䅛Ϋᬗ檞灏唡༂䁱現☄妙歜磀㑂ㅂ嗷⋰ۨᩋ䰈᭥㕾䘒紓䱤ᷘ侫皖ᘄᵢ䚟Ợ㞊ݧ±䁬ढ़◆䶷ࢸ䝉ϋ౵浭䥼䚶ཌྷ䄙綷疊➘↜ɐ⇶䘽〥ᕏ૛䋅示云⥱᧫Юᚆ伲⽭ᩨ熈૩ᠡ碓⚡୴ᗷ∪喭ԝঢن⼴兒⃟ϙ瑷⛀㎷塆咑া溞⽓⁔䍐ᠥ嬹㨠❎厌̈́⫠ࠬ惹ڡ溭ۀ㉖獞ಗ┭况Ѣ၉ṃㆍ瓼௠ȩ⡵̢㩪璑儦䌆ր䓝䡴忴㓂娼涳ᬔ㬩篲⊲̓㨮灂⏶偻嫹忁狰ⴝ砇೩䴀᭿珕㺋嚺ᨮᙔ僢㓫㊎ᡴ洤態⨝析䝘㷭婋籓侨烖崕妨ᧀ梌帙Ἦ禡痍䇺ゾ⑟叜૕⦿݈䜪ݦĈ宽懢烈㌆咚涮䷬杏匠⎶㩘嘑䕑ᓡ弒ͳ㒂戸೵ཇ失┏䄅匭玊祚㸬ྐ漃䏌朗瓘̉⪒⟀伄圷帛擘沙კ兮䳩㈲ල晢䧹⑆䉹唘提䆢ɉ勰塓㽑Ძ䬢䧬ᮀ竞璻ऍXÝᤷℼྪ浔洢䂙Ӡ樌类區ᮿ眍犬⩃ᪧ嬏䌘亖ݡҩ潂⢯⌸̘怦㖥園癬᳄ഔ䢸寉偭䤂ӈ敪ṽ治䂿╛䤕漀⬿㊐୼坧徨畞箧ᦍ粘ᧁ߭甯ဳ埛癜䎫❵᭬ㄸ㎦ἔ慩ૣ֨㏀╸俁捈㨕㭑࠳㶿㺣⍎㒺᫷ᱩ揟ಪӴ檣ᘆ㜃禷®然સƲⲬ㖶ᇐ䨲唖䇊⍛昮䚛㒔㓑፧㩌㆛⚈২⁤炴ᠻˡ砲儲᫺摽ڍ唇ᯊͽ悸ቃࣳ᮰恌䞎㨧ឺẲ╉ሉ夫横⒣Ớࢴᨭ֍⎩翯䲤ޠ彡➦B↫ȥ⧱䅥ňᵛʹ縡⃘ٸಸ㼙ɑ⡫沼ዩ曀㬦㡍䋤⑍˚滤e灰॰ᔦùዌੀ勩ᰵᕽ⒧瓽䀼▯⩉ᖰ☼攒ↈ泿僁儂᷸堭湉唗Ⲹ၎䣊ဧ⃙㳠⌀┹♂ᖲ㢮㜿⠳啥Å玫፨Ⅴ㻢皹⛩涻ᩚ㖠ἠ堸぀疄ᾉℤ哝ᗏ⻠繿ܛܽӉ石紘㑟⁻࿥䇣᚝ᩋ氽纃ₔ㷀થ椞Ԁ⑥叫拝㚐熘ඹ⢰唗֣⻥䱮গɥ堣䄐ᑿ❳僪狫炩㬺๒焍㌒পᤷ㩨⒆΁䎭䡞偗⑺漫犱䓰淫巿払ݿお兴䁸㛨捹⥽⡺䍢⑤ⷴ䬄ሼ┨㺦ሥ提歙㯷㉽ඨ番䵸䣉䉐珳櫮ዝ࡟ㅣ緾橁悸皐ᯣ哐⌀㟣䏢燠攦₁冴䬕ឫモ⃡凜仦⭻婀㫝፟⻩᩵熲番⫚疳嘲݊͡㯪ӳࠦᣡ䕆à ॰Ī䘶यܲɱ焐䌫㌊௫ㅮᘮ⢩⾷䐲ᕻ㒩㑞≵扱㬡剙㋆˓ፃ≝哵瞛Ꮈ拵墅ಬ᧚⌮㚞䑻ㇰ䁥٧玃᥅汄᱋࠼ძ扁癤⟃㕪⑌ⅿ༫'⼻᪤倈ᓅ翱媮࿐守Ⳣ⪲༘䑸㚵ⓗ䘬⴦勧傱䞐昰▰嫈੨ૺお㋗ブ㽢揣䒿㓻☉烱烍㎔忘໫䄱ᎌ措㻰㣏⍤瑩瀮ᦵ搐≨⾲扑❔殤啌ᄵɅⰨ⫡㔖䐚㳁㳧妆愰ࡒ糩媊燐倦໲Ⓔ皂ʤࢬ⧢ℼ㟇煓䒬֗⧥቏⪥ը濛徬ㆠ⟌ᆨ䕡⋵搀㊩㣥期➐癢ಠ㤂㖫அ㳥ࣝ琷Ⰷ啈ᓔ㍨㪄┤ᦤ砋㗇䠢溠㚘䵣⁤ᱫ෴⹲琴嬇ռ汩汇慎撺෇价ㅚ䖧൤᝜ƙ䑬剣ሶ₂䎍ᄵ䔿Ǔघ⭅累晡䕗㨨㼺ᠵ瞀帤ᣰ䅬㙀䢦䡖刄ాㅛ⡍粆㖃क़抱ա灪᳥愸ㆯƕ᧳ヰࢥФ䱢ឺ䱘仦ᡆ䫳デ挟ᗄ翦槲借⇛❎慵Ꭾ␸㸾牣ኙ㡺幵♩⣳໚椿׵ᛸ⿊歘漊⒌昶䕳绞ģ͋盦湵傄緄湦ၽ࠳㹣栱ᒞ៲ᄚ䝤ቈ㌩࢚͌㑲䂽ס❦ᩱ䬡ٙ࡝溰ߤ▰ধ㔜࣢罧㛵昖]q僉ၭ࡫Ᾱၞ秘哼̤㛢搰⬘细叶࢞⹤ឹ╄㖚ⷿǷ䧤ᱡ䃅ղጺ員᜛ᤶ㸾爧扴溸Ӱ໠珱ⴒ噥䜁ٙρ佽㬋慈ⱁ硷ð䳒汔哵稻ᅌ么孾ٔ⤍㈹䁡䖿ਃ଴報ᐶ埼䅦婀梊咋⛂೦૿ޯ੐ⲿ㸣䔸筛䙏⇗່籙滈ᐫ঑⡕౰旴ࡃఁ໖㧬⋺屦⧇䪦⾱ㅧ塻㑄洘㭸懁औ晎᭻物łⱺ圚᳆䡢∠ \ No newline at end of file diff --git a/testdata/tattoo/source.bin b/testdata/tattoo/data.bin similarity index 100% rename from testdata/tattoo/source.bin rename to testdata/tattoo/data.bin diff --git a/testdata/tattoo/base64.bin b/testdata/tattoo/js/base64.bin similarity index 100% rename from testdata/tattoo/base64.bin rename to testdata/tattoo/js/base64.bin diff --git a/testdata/tattoo/base64x.bin b/testdata/tattoo/js/base64x.bin similarity index 100% rename from testdata/tattoo/base64x.bin rename to testdata/tattoo/js/base64x.bin diff --git a/testdata/tattoo/encodeduri.bin b/testdata/tattoo/js/encodeduri.bin similarity index 100% rename from testdata/tattoo/encodeduri.bin rename to testdata/tattoo/js/encodeduri.bin diff --git a/testdata/tattoo/js/raw.bin b/testdata/tattoo/js/raw.bin new file mode 100644 index 0000000000000000000000000000000000000000..27c635ce807e3199db3ea0a34f60641949ffc843 GIT binary patch literal 972 zcmWlW$#UvO07X-kA8(C}!YwR}u(91pMo1WJz(yeOP!(5RHmSS}nr~ydxEFiILFwQzI=Gz-=sz#0sS;(+Zq09g39al7$Ry#QC)D6qml}XxPYMqZwii_^KKtY=zBdn7c&Ss*mo_(ca6%AGPMrCJ6C%4(GCAJ!MUbx=o#-g0{#YdM0ExHdG zY;#bfhC$F)E{1tGIo2+uKVWJoLJy;U;XdYCBTGJMUE^E81EuOBi~xOw()Nm|d9b?W z)?_1{he-UtbI9BQkHN7q?)z60h(~YNOw#rJ|S9 zpo}1Y*13r)^_s$!Sk$t&X*z7P)?=Y2@*}9!y4dM52>9odRMFql3XJKto!Z(_c_D74;bGRof_VQN)pBouH0cif%hnJ2Vf`FNMT#{A<-s&=Xe z!cp^hnZLAz0&!?$p-N^K+2xX`kboVY#d6&z4@O}rWi*jZC37w*x}h*)gDbHxnAyM| z_pAjE_7Hm-UF`{gl?~%hx}skFhyMU7@TzYB literal 0 HcmV?d00001 diff --git a/testdata/tattoo/uint8array.bin b/testdata/tattoo/js/uint8array.bin similarity index 100% rename from testdata/tattoo/uint8array.bin rename to testdata/tattoo/js/uint8array.bin diff --git a/testdata/tattoo/utf16.bin b/testdata/tattoo/js/utf16.bin similarity index 100% rename from testdata/tattoo/utf16.bin rename to testdata/tattoo/js/utf16.bin From 12dd1be89221ac79d8036cfaeb83f049b2f947c9 Mon Sep 17 00:00:00 2001 From: Ryc O'Chet Date: Mon, 22 Jan 2024 09:30:13 +0000 Subject: [PATCH 4/7] Readme update --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c9f0235..66708a3 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Home page for this program with examples, documentation and a live demo: http:// If installed globally there is a command line tool available, and a test suite that can use it to show things are working properly. If other langauges build a command line tool that supports the same arguments then the test suite can be run against them too. -```sh +```console $ lz-string -h Usage: lz-string [options] [input-file] @@ -45,7 +45,7 @@ Options: ``` > [!WARNING] -> Currently I cannot get NodeJS to read binary files correctly, so `raw` and `uint8array` are both compress-only - Ryc +> Currently I cannot get NodeJS to read binary files correctly, so `raw` and `uint8array` are both compress-only, see #139 - Ryc ## Other languages From 6fc763e8040f0818fe44b10400968b21c412e38d Mon Sep 17 00:00:00 2001 From: Ryc O'Chet Date: Mon, 22 Jan 2024 09:31:13 +0000 Subject: [PATCH 5/7] Correct internal link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 66708a3..cfa8612 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Options: ``` > [!WARNING] -> Currently I cannot get NodeJS to read binary files correctly, so `raw` and `uint8array` are both compress-only, see #139 - Ryc +> Currently I cannot get NodeJS to read binary files correctly, so `raw` and `uint8array` are both compress-only, see [#139](issues/139) - Ryc ## Other languages From 65ce622de38a33165b5a9ecfb9fbafab172e2656 Mon Sep 17 00:00:00 2001 From: Ryc O'Chet Date: Mon, 22 Jan 2024 09:32:02 +0000 Subject: [PATCH 6/7] Correct link try 2 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cfa8612..81ae1d8 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Options: ``` > [!WARNING] -> Currently I cannot get NodeJS to read binary files correctly, so `raw` and `uint8array` are both compress-only, see [#139](issues/139) - Ryc +> Currently I cannot get NodeJS to read binary files correctly, so `raw` and `uint8array` are both compress-only, see [#139](/pieroxy/lz-string/issues/139) - Ryc ## Other languages From ef6b6964101faed3a508be48fe99021629c62699 Mon Sep 17 00:00:00 2001 From: Ryc O'Chet Date: Mon, 22 Jan 2024 09:32:31 +0000 Subject: [PATCH 7/7] Just use absolute link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 81ae1d8..d2cc65f 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Options: ``` > [!WARNING] -> Currently I cannot get NodeJS to read binary files correctly, so `raw` and `uint8array` are both compress-only, see [#139](/pieroxy/lz-string/issues/139) - Ryc +> Currently I cannot get NodeJS to read binary files correctly, so `raw` and `uint8array` are both compress-only, see [#139](https://github.com/pieroxy/lz-string/issues/139) - Ryc ## Other languages