@rushstack/zipsync 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +21 -0
- package/CHANGELOG.md +6 -1
- package/lib/cli/ZipSyncCommandLineParser.d.ts.map +1 -0
- package/lib/{ZipSyncCommandLineParser.js → cli/ZipSyncCommandLineParser.js} +1 -1
- package/lib/cli/ZipSyncCommandLineParser.js.map +1 -0
- package/lib/start.js +1 -1
- package/lib/start.js.map +1 -1
- package/package.json +6 -6
- package/lib/ZipSyncCommandLineParser.d.ts.map +0 -1
- package/lib/ZipSyncCommandLineParser.js.map +0 -1
- package/lib/benchmark.test.d.ts +0 -2
- package/lib/benchmark.test.d.ts.map +0 -1
- package/lib/benchmark.test.js.map +0 -1
- package/lib/crc32.test.d.ts +0 -2
- package/lib/crc32.test.d.ts.map +0 -1
- package/lib/crc32.test.js.map +0 -1
- package/lib/index.test.d.ts +0 -2
- package/lib/index.test.d.ts.map +0 -1
- package/lib/index.test.js.map +0 -1
- package/lib/start.test.d.ts +0 -2
- package/lib/start.test.d.ts.map +0 -1
- package/lib/start.test.js.map +0 -1
- package/lib/testUtils.d.ts +0 -9
- package/lib/testUtils.d.ts.map +0 -1
- package/lib/testUtils.js +0 -77
- package/lib/testUtils.js.map +0 -1
- package/lib/workerAsync.test.d.ts +0 -2
- package/lib/workerAsync.test.d.ts.map +0 -1
- package/lib/workerAsync.test.js.map +0 -1
- /package/lib/{ZipSyncCommandLineParser.d.ts → cli/ZipSyncCommandLineParser.d.ts} +0 -0
package/CHANGELOG.json
CHANGED
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rushstack/zipsync",
|
|
3
3
|
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"version": "0.1.1",
|
|
6
|
+
"tag": "@rushstack/zipsync_v0.1.1",
|
|
7
|
+
"date": "Tue, 30 Sep 2025 23:57:45 GMT",
|
|
8
|
+
"comments": {
|
|
9
|
+
"dependency": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "Updating dependency \"@rushstack/terminal\" to `0.18.0`"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.0.5`"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.1`"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"comment": "Updating dependency \"@rushstack/heft\" to `1.0.0`"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
4
25
|
{
|
|
5
26
|
"version": "0.1.0",
|
|
6
27
|
"tag": "@rushstack/zipsync_v0.1.0",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# Change Log - @rushstack/zipsync
|
|
2
2
|
|
|
3
|
-
This log was last generated on Tue, 30 Sep 2025
|
|
3
|
+
This log was last generated on Tue, 30 Sep 2025 23:57:45 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 0.1.1
|
|
6
|
+
Tue, 30 Sep 2025 23:57:45 GMT
|
|
7
|
+
|
|
8
|
+
_Version update only_
|
|
4
9
|
|
|
5
10
|
## 0.1.0
|
|
6
11
|
Tue, 30 Sep 2025 20:33:51 GMT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZipSyncCommandLineParser.d.ts","sourceRoot":"","sources":["../../src/cli/ZipSyncCommandLineParser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAO/F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAKnE,qBAAa,wBAAyB,SAAQ,iBAAiB;IAC7D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoD;IACnF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAsC;IAC5E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsC;IACxE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAiC;IAC7E,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgE;IACtG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;gBAEzC,gBAAgB,EAAE,uBAAuB,EAAE,QAAQ,EAAE,SAAS;cAgExD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CA+BzD"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.ZipSyncCommandLineParser = void 0;
|
|
6
6
|
const CommandLineParser_1 = require("@rushstack/ts-command-line/lib/providers/CommandLineParser");
|
|
7
|
-
const index_1 = require("
|
|
7
|
+
const index_1 = require("../index");
|
|
8
8
|
class ZipSyncCommandLineParser extends CommandLineParser_1.CommandLineParser {
|
|
9
9
|
constructor(terminalProvider, terminal) {
|
|
10
10
|
super({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZipSyncCommandLineParser.js","sourceRoot":"","sources":["../../src/cli/ZipSyncCommandLineParser.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { CommandLineParser } from '@rushstack/ts-command-line/lib/providers/CommandLineParser';\nimport type {\n CommandLineFlagParameter,\n IRequiredCommandLineStringParameter,\n IRequiredCommandLineChoiceParameter,\n CommandLineStringListParameter\n} from '@rushstack/ts-command-line/lib/index';\nimport type { ConsoleTerminalProvider } from '@rushstack/terminal/lib/ConsoleTerminalProvider';\nimport type { ITerminal } from '@rushstack/terminal/lib/ITerminal';\n\nimport type { IZipSyncMode, ZipSyncOptionCompression } from '../zipSyncUtils';\nimport { pack, unpack } from '../index';\n\nexport class ZipSyncCommandLineParser extends CommandLineParser {\n private readonly _debugParameter: CommandLineFlagParameter;\n private readonly _verboseParameter: CommandLineFlagParameter;\n private readonly _modeParameter: IRequiredCommandLineChoiceParameter<IZipSyncMode>;\n private readonly _archivePathParameter: IRequiredCommandLineStringParameter;\n private readonly _baseDirParameter: IRequiredCommandLineStringParameter;\n private readonly _targetDirectoriesParameter: CommandLineStringListParameter;\n private readonly _compressionParameter: IRequiredCommandLineChoiceParameter<ZipSyncOptionCompression>;\n private readonly _terminal: ITerminal;\n private readonly _terminalProvider: ConsoleTerminalProvider;\n\n public constructor(terminalProvider: ConsoleTerminalProvider, terminal: ITerminal) {\n super({\n toolFilename: 'zipsync',\n toolDescription: ''\n });\n\n this._terminal = terminal;\n this._terminalProvider = terminalProvider;\n\n this._debugParameter = this.defineFlagParameter({\n parameterLongName: '--debug',\n parameterShortName: '-d',\n description: 'Show the full call stack if an error occurs while executing the tool'\n });\n\n this._verboseParameter = this.defineFlagParameter({\n parameterLongName: '--verbose',\n parameterShortName: '-v',\n description: 'Show verbose output'\n });\n\n this._modeParameter = this.defineChoiceParameter<IZipSyncMode>({\n parameterLongName: '--mode',\n parameterShortName: '-m',\n description:\n 'The mode of operation: \"pack\" to create a zip archive, or \"unpack\" to extract files from a zip archive',\n alternatives: ['pack', 'unpack'],\n required: true\n });\n\n this._archivePathParameter = this.defineStringParameter({\n parameterLongName: '--archive-path',\n parameterShortName: '-a',\n description: 'Zip file path',\n argumentName: 'ARCHIVE_PATH',\n required: true\n });\n\n this._targetDirectoriesParameter = this.defineStringListParameter({\n parameterLongName: '--target-directory',\n parameterShortName: '-t',\n description: 'Target directories to pack or unpack',\n argumentName: 'TARGET_DIRECTORIES',\n required: true\n });\n\n this._baseDirParameter = this.defineStringParameter({\n parameterLongName: '--base-dir',\n parameterShortName: '-b',\n description: 'Base directory for relative paths within the archive',\n argumentName: 'BASE_DIR',\n required: true\n });\n\n this._compressionParameter = this.defineChoiceParameter<ZipSyncOptionCompression>({\n parameterLongName: '--compression',\n parameterShortName: '-z',\n description:\n 'Compression strategy when packing. \"deflate\" and \"zlib\" attempts compression for every file (keeps only if smaller); \"auto\" first skips likely-compressed types before attempting \"deflate\" compression; \"store\" disables compression.',\n alternatives: ['store', 'deflate', 'zstd', 'auto'],\n required: true\n });\n }\n\n protected override async onExecuteAsync(): Promise<void> {\n if (this._debugParameter.value) {\n // eslint-disable-next-line no-debugger\n debugger;\n this._terminalProvider.debugEnabled = true;\n this._terminalProvider.verboseEnabled = true;\n }\n if (this._verboseParameter.value) {\n this._terminalProvider.verboseEnabled = true;\n }\n try {\n if (this._modeParameter.value === 'pack') {\n pack({\n terminal: this._terminal,\n archivePath: this._archivePathParameter.value,\n targetDirectories: this._targetDirectoriesParameter.values,\n baseDir: this._baseDirParameter.value,\n compression: this._compressionParameter.value\n });\n } else if (this._modeParameter.value === 'unpack') {\n unpack({\n terminal: this._terminal,\n archivePath: this._archivePathParameter.value,\n targetDirectories: this._targetDirectoriesParameter.values,\n baseDir: this._baseDirParameter.value\n });\n }\n } catch (error) {\n this._terminal.writeErrorLine('\\n' + error.stack);\n }\n }\n}\n"]}
|
package/lib/start.js
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
5
5
|
const ConsoleTerminalProvider_1 = require("@rushstack/terminal/lib/ConsoleTerminalProvider");
|
|
6
6
|
const Terminal_1 = require("@rushstack/terminal/lib/Terminal");
|
|
7
7
|
const package_json_1 = require("../package.json");
|
|
8
|
-
const ZipSyncCommandLineParser_1 = require("./ZipSyncCommandLineParser");
|
|
8
|
+
const ZipSyncCommandLineParser_1 = require("./cli/ZipSyncCommandLineParser");
|
|
9
9
|
const toolVersion = package_json_1.version;
|
|
10
10
|
const consoleTerminalProvider = new ConsoleTerminalProvider_1.ConsoleTerminalProvider();
|
|
11
11
|
const terminal = new Terminal_1.Terminal(consoleTerminalProvider);
|
package/lib/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAE3D,6FAA0F;AAC1F,+DAA4D;AAE5D,kDAA0C;AAC1C,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAE3D,6FAA0F;AAC1F,+DAA4D;AAE5D,kDAA0C;AAC1C,6EAA0E;AAE1E,MAAM,WAAW,GAAW,sBAAO,CAAC;AAEpC,MAAM,uBAAuB,GAA4B,IAAI,iDAAuB,EAAE,CAAC;AACvF,MAAM,QAAQ,GAAa,IAAI,mBAAQ,CAAC,uBAAuB,CAAC,CAAC;AAEjE,QAAQ,CAAC,SAAS,EAAE,CAAC;AACrB,QAAQ,CAAC,SAAS,CAAC,WAAW,WAAW,yBAAyB,CAAC,CAAC;AACpE,QAAQ,CAAC,SAAS,EAAE,CAAC;AAErB,MAAM,WAAW,GAA6B,IAAI,mDAAwB,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;AAC9G,WAAW,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACzC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { ConsoleTerminalProvider } from '@rushstack/terminal/lib/ConsoleTerminalProvider';\nimport { Terminal } from '@rushstack/terminal/lib/Terminal';\n\nimport { version } from '../package.json';\nimport { ZipSyncCommandLineParser } from './cli/ZipSyncCommandLineParser';\n\nconst toolVersion: string = version;\n\nconst consoleTerminalProvider: ConsoleTerminalProvider = new ConsoleTerminalProvider();\nconst terminal: Terminal = new Terminal(consoleTerminalProvider);\n\nterminal.writeLine();\nterminal.writeLine(`zipsync ${toolVersion} - https://rushstack.io`);\nterminal.writeLine();\n\nconst commandLine: ZipSyncCommandLineParser = new ZipSyncCommandLineParser(consoleTerminalProvider, terminal);\ncommandLine.executeAsync().catch((error) => {\n terminal.writeError(error);\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rushstack/zipsync",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "CLI tool for creating and extracting ZIP archives with intelligent filesystem synchronization",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -13,14 +13,14 @@
|
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"typescript": "~5.8.2",
|
|
16
|
-
"@rushstack/
|
|
17
|
-
"@rushstack/
|
|
18
|
-
"@rushstack/
|
|
16
|
+
"@rushstack/ts-command-line": "5.0.5",
|
|
17
|
+
"@rushstack/lookup-by-path": "0.8.1",
|
|
18
|
+
"@rushstack/terminal": "0.18.0"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"eslint": "~9.25.1",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
22
|
+
"@rushstack/heft": "1.0.0",
|
|
23
|
+
"local-node-rig": "1.0.0"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
26
|
"start": "node lib/start",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ZipSyncCommandLineParser.d.ts","sourceRoot":"","sources":["../src/ZipSyncCommandLineParser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAO/F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAKnE,qBAAa,wBAAyB,SAAQ,iBAAiB;IAC7D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoD;IACnF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAsC;IAC5E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsC;IACxE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAiC;IAC7E,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgE;IACtG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;gBAEzC,gBAAgB,EAAE,uBAAuB,EAAE,QAAQ,EAAE,SAAS;cAgExD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CA+BzD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ZipSyncCommandLineParser.js","sourceRoot":"","sources":["../src/ZipSyncCommandLineParser.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { CommandLineParser } from '@rushstack/ts-command-line/lib/providers/CommandLineParser';\nimport type {\n CommandLineFlagParameter,\n IRequiredCommandLineStringParameter,\n IRequiredCommandLineChoiceParameter,\n CommandLineStringListParameter\n} from '@rushstack/ts-command-line/lib/index';\nimport type { ConsoleTerminalProvider } from '@rushstack/terminal/lib/ConsoleTerminalProvider';\nimport type { ITerminal } from '@rushstack/terminal/lib/ITerminal';\n\nimport type { IZipSyncMode, ZipSyncOptionCompression } from './zipSyncUtils';\nimport { pack, unpack } from './index';\n\nexport class ZipSyncCommandLineParser extends CommandLineParser {\n private readonly _debugParameter: CommandLineFlagParameter;\n private readonly _verboseParameter: CommandLineFlagParameter;\n private readonly _modeParameter: IRequiredCommandLineChoiceParameter<IZipSyncMode>;\n private readonly _archivePathParameter: IRequiredCommandLineStringParameter;\n private readonly _baseDirParameter: IRequiredCommandLineStringParameter;\n private readonly _targetDirectoriesParameter: CommandLineStringListParameter;\n private readonly _compressionParameter: IRequiredCommandLineChoiceParameter<ZipSyncOptionCompression>;\n private readonly _terminal: ITerminal;\n private readonly _terminalProvider: ConsoleTerminalProvider;\n\n public constructor(terminalProvider: ConsoleTerminalProvider, terminal: ITerminal) {\n super({\n toolFilename: 'zipsync',\n toolDescription: ''\n });\n\n this._terminal = terminal;\n this._terminalProvider = terminalProvider;\n\n this._debugParameter = this.defineFlagParameter({\n parameterLongName: '--debug',\n parameterShortName: '-d',\n description: 'Show the full call stack if an error occurs while executing the tool'\n });\n\n this._verboseParameter = this.defineFlagParameter({\n parameterLongName: '--verbose',\n parameterShortName: '-v',\n description: 'Show verbose output'\n });\n\n this._modeParameter = this.defineChoiceParameter<IZipSyncMode>({\n parameterLongName: '--mode',\n parameterShortName: '-m',\n description:\n 'The mode of operation: \"pack\" to create a zip archive, or \"unpack\" to extract files from a zip archive',\n alternatives: ['pack', 'unpack'],\n required: true\n });\n\n this._archivePathParameter = this.defineStringParameter({\n parameterLongName: '--archive-path',\n parameterShortName: '-a',\n description: 'Zip file path',\n argumentName: 'ARCHIVE_PATH',\n required: true\n });\n\n this._targetDirectoriesParameter = this.defineStringListParameter({\n parameterLongName: '--target-directory',\n parameterShortName: '-t',\n description: 'Target directories to pack or unpack',\n argumentName: 'TARGET_DIRECTORIES',\n required: true\n });\n\n this._baseDirParameter = this.defineStringParameter({\n parameterLongName: '--base-dir',\n parameterShortName: '-b',\n description: 'Base directory for relative paths within the archive',\n argumentName: 'BASE_DIR',\n required: true\n });\n\n this._compressionParameter = this.defineChoiceParameter<ZipSyncOptionCompression>({\n parameterLongName: '--compression',\n parameterShortName: '-z',\n description:\n 'Compression strategy when packing. \"deflate\" and \"zlib\" attempts compression for every file (keeps only if smaller); \"auto\" first skips likely-compressed types before attempting \"deflate\" compression; \"store\" disables compression.',\n alternatives: ['store', 'deflate', 'zstd', 'auto'],\n required: true\n });\n }\n\n protected override async onExecuteAsync(): Promise<void> {\n if (this._debugParameter.value) {\n // eslint-disable-next-line no-debugger\n debugger;\n this._terminalProvider.debugEnabled = true;\n this._terminalProvider.verboseEnabled = true;\n }\n if (this._verboseParameter.value) {\n this._terminalProvider.verboseEnabled = true;\n }\n try {\n if (this._modeParameter.value === 'pack') {\n pack({\n terminal: this._terminal,\n archivePath: this._archivePathParameter.value,\n targetDirectories: this._targetDirectoriesParameter.values,\n baseDir: this._baseDirParameter.value,\n compression: this._compressionParameter.value\n });\n } else if (this._modeParameter.value === 'unpack') {\n unpack({\n terminal: this._terminal,\n archivePath: this._archivePathParameter.value,\n targetDirectories: this._targetDirectoriesParameter.values,\n baseDir: this._baseDirParameter.value\n });\n }\n } catch (error) {\n this._terminal.writeErrorLine('\\n' + error.stack);\n }\n }\n}\n"]}
|
package/lib/benchmark.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.test.d.ts","sourceRoot":"","sources":["../src/benchmark.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.test.js","sourceRoot":"","sources":["../src/benchmark.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n/* eslint-disable no-console */\n\nimport { execSync } from 'child_process';\nimport { tmpdir, cpus, platform, release, arch, totalmem } from 'os';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { createHash, randomUUID } from 'crypto';\n\nimport { NoOpTerminalProvider, Terminal } from '@rushstack/terminal';\n\nimport type { ZipSyncOptionCompression } from './zipSyncUtils';\nimport { pack } from './pack';\nimport { unpack } from './unpack';\n\nconst compressionOptions = ['store', 'deflate', 'zstd', 'auto'] satisfies ZipSyncOptionCompression[];\n\n// create a tempdir and setup dummy files there for benchmarking\nconst NUM_FILES = 1000; // number of files per subdir\nlet tempDir: string;\nconst runId = randomUUID();\nasync function setupDemoDataAsync(): Promise<void> {\n console.log('Setting up demo data for benchmark...');\n tempDir = path.join(tmpdir(), `zipsync-benchmark-${runId}`);\n fs.mkdirSync(tempDir, { recursive: true });\n\n const demoSubDir1 = path.join(tempDir, 'demo-data', 'subdir1');\n fs.mkdirSync(demoSubDir1, { recursive: true });\n const demoSubDir2 = path.join(tempDir, 'demo-data', 'subdir2');\n fs.mkdirSync(demoSubDir2, { recursive: true });\n\n for (let i = 0; i < NUM_FILES; i++) {\n const filePath1 = path.join(demoSubDir1, `file${i}.txt`);\n fs.writeFileSync(filePath1, `This is file ${i} in subdir1\\n`.repeat(1000), { encoding: 'utf-8' });\n const filePath2 = path.join(demoSubDir2, `file${i}.txt`);\n fs.writeFileSync(filePath2, `This is file ${i} in subdir2\\n`.repeat(1000), { encoding: 'utf-8' });\n }\n\n console.log(`Demo data setup complete in ${tempDir}`);\n}\n\nasync function cleanupDemoDataAsync(): Promise<void> {\n if (tempDir && fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true });\n console.log(`Cleaned up temp directory: ${tempDir}`);\n }\n}\n\nbeforeAll(async () => {\n await setupDemoDataAsync();\n});\n\nafterAll(async () => {\n await cleanupDemoDataAsync();\n});\n\n// Collect timings for table output after all tests\ninterface IMeasurement {\n name: string;\n kind: string;\n phase: 'pack' | 'unpack';\n ms: number;\n // Only for pack phase: archive size in bytes and compression ratio (archiveSize / uncompressedSourceSize)\n sizeBytes?: number;\n}\nconst measurements: IMeasurement[] = [];\n// Allow specifying iterations via env BENCH_ITERATIONS. Defaults to 0 to avoid running the benchmark unless explicitly enabled.\nfunction detectIterations(): number {\n let iter = 0;\n const envParsed: number = parseInt(process.env.BENCH_ITERATIONS || '', 10);\n if (!isNaN(envParsed) && envParsed > 0) {\n iter = envParsed;\n }\n return iter;\n}\nconst ITERATIONS: number = detectIterations();\n\nfunction measureFn(callback: () => void): number {\n const start: number = performance.now();\n callback();\n return performance.now() - start;\n}\n\ninterface IBenchContext {\n archive: string;\n demoDir: string; // source demo data directory\n unpackDir: string;\n}\n\ninterface IBenchCommands {\n // Function that performs the packing. Receives archive path and demoDir.\n pack: (ctx: IBenchContext) => void;\n // Function that performs the unpack. Receives archive and unpackDir.\n unpack: (ctx: IBenchContext) => void;\n archive: string;\n unpackDir: string;\n populateUnpackDir?: 'full' | 'partial';\n cleanBeforeUnpack?: boolean;\n}\n\nfunction bench(kind: string, commands: IBenchCommands): void {\n const demoDataPath = path.join(tempDir, 'demo-data');\n const srcDir = demoDataPath;\n // Compute total uncompressed source size once per bench invocation\n // We intentionally no longer compute total source size for ratio; only archive size is tracked.\n function verifyUnpack(unpackDir: string): void {\n // Compare file listings and hashes\n function buildMap(root: string): Map<string, { size: number; hash: string }> {\n const map = new Map<string, { size: number; hash: string }>();\n function walk(current: string): void {\n for (const entry of fs.readdirSync(current, { withFileTypes: true })) {\n const full = path.join(current, entry.name);\n if (entry.isDirectory()) {\n walk(full);\n } else if (entry.isFile()) {\n const rel = path.relative(root, full).replace(/\\\\/g, '/');\n const buf = fs.readFileSync(full);\n const hash = createHash('sha256').update(buf).digest('hex');\n map.set(rel, { size: buf.length, hash });\n }\n }\n }\n walk(root);\n return map;\n }\n const srcMap = buildMap(srcDir);\n const dstMap = buildMap(unpackDir);\n if (srcMap.size !== dstMap.size) {\n throw new Error(\n `Verification failed (${kind}): file count mismatch src=${srcMap.size} dst=${dstMap.size}`\n );\n }\n for (const [rel, meta] of srcMap) {\n const other = dstMap.get(rel);\n if (!other) throw new Error(`Verification failed (${kind}): missing file ${rel}`);\n if (other.size !== meta.size || other.hash !== meta.hash) {\n throw new Error(`Verification failed (${kind}): content mismatch in ${rel}`);\n }\n }\n }\n for (let i = 0; i < ITERATIONS; i++) {\n // Ensure previous artifacts removed\n if (fs.existsSync(commands.archive)) fs.rmSync(commands.archive, { force: true });\n if (commands.populateUnpackDir === 'full') {\n fs.cpSync(srcDir, commands.unpackDir, { recursive: true });\n } else if (commands.populateUnpackDir === 'partial') {\n // Copy half the files\n for (let j = 0; j < NUM_FILES / 2; j++) {\n const file1 = path.join(srcDir, 'subdir1', `file${j}.txt`);\n const file2 = path.join(srcDir, 'subdir2', `file${j}.txt`);\n const dest1 = path.join(commands.unpackDir, 'subdir1', `file${j}.txt`);\n const dest2 = path.join(commands.unpackDir, 'subdir2', `file${j}.txt`);\n fs.mkdirSync(path.dirname(dest1), { recursive: true });\n fs.mkdirSync(path.dirname(dest2), { recursive: true });\n fs.copyFileSync(file1, dest1);\n fs.copyFileSync(file2, dest2);\n }\n }\n\n let archiveSize: number | undefined;\n const packMs: number = measureFn(() => {\n commands.pack({ archive: commands.archive, demoDir: demoDataPath, unpackDir: commands.unpackDir });\n try {\n const stat = fs.statSync(commands.archive);\n archiveSize = stat.size;\n } catch {\n // ignore if archive not found\n }\n });\n measurements.push({\n name: `${kind}#${i + 1}`,\n kind,\n phase: 'pack',\n ms: packMs,\n sizeBytes: archiveSize\n });\n\n const unpackMs: number = measureFn(() => {\n if (commands.cleanBeforeUnpack) {\n fs.rmSync(commands.unpackDir, { recursive: true, force: true });\n fs.mkdirSync(commands.unpackDir, { recursive: true });\n }\n commands.unpack({ archive: commands.archive, demoDir: demoDataPath, unpackDir: commands.unpackDir });\n });\n measurements.push({ name: `${kind}#${i + 1}`, kind, phase: 'unpack', ms: unpackMs });\n verifyUnpack(commands.unpackDir);\n }\n}\n\nfunction benchZipSyncScenario(\n kind: string,\n compression: ZipSyncOptionCompression,\n existingFiles: 'all' | 'none' | 'partial'\n): void {\n if (!tempDir) throw new Error('Temp directory is not set up.');\n const terminal = new Terminal(new NoOpTerminalProvider());\n bench(kind, {\n pack: ({ archive, demoDir }) => {\n const { filesPacked } = pack({\n archivePath: archive,\n targetDirectories: ['subdir1', 'subdir2'],\n baseDir: demoDir,\n compression,\n terminal\n });\n console.log(`Files packed: ${filesPacked}`);\n },\n unpack: ({ archive, unpackDir }) => {\n const { filesDeleted, filesExtracted, filesSkipped, foldersDeleted, otherEntriesDeleted } = unpack({\n archivePath: archive,\n targetDirectories: ['subdir1', 'subdir2'],\n baseDir: unpackDir,\n terminal\n });\n console.log(\n `Files extracted: ${filesExtracted}, files skipped: ${filesSkipped}, files deleted: ${filesDeleted}, folders deleted: ${foldersDeleted}, other entries deleted: ${otherEntriesDeleted}`\n );\n },\n archive: path.join(tempDir, `archive-zipsync-${compression}.zip`),\n unpackDir: path.join(tempDir, `unpacked-zipsync-${compression}-${existingFiles}`),\n populateUnpackDir: existingFiles === 'all' ? 'full' : existingFiles === 'partial' ? 'partial' : undefined,\n cleanBeforeUnpack: false // cleaning is handled internally by zipsync\n });\n}\n\n// the benchmarks are skipped by default because they require external tools (tar, zip) to be installed\ndescribe(`archive benchmarks (iterations=${ITERATIONS})`, () => {\n it('tar', () => {\n if (!isTarAvailable()) {\n console.log('Skipping tar test because tar is not available');\n return;\n }\n if (!tempDir) throw new Error('Temp directory is not set up.');\n bench('tar', {\n pack: ({ archive, demoDir }) => execSync(`tar -cf \"${archive}\" -C \"${demoDir}\" .`),\n unpack: ({ archive, unpackDir }) => execSync(`tar -xf \"${archive}\" -C \"${unpackDir}\"`),\n archive: path.join(tempDir, 'archive.tar'),\n unpackDir: path.join(tempDir, 'unpacked-tar'),\n populateUnpackDir: 'full',\n cleanBeforeUnpack: true\n });\n });\n it('tar-gz', () => {\n if (!isTarAvailable()) {\n console.log('Skipping tar test because tar is not available');\n return;\n }\n if (!tempDir) throw new Error('Temp directory is not set up.');\n bench('tar-gz', {\n pack: ({ archive, demoDir }) => execSync(`tar -czf \"${archive}\" -C \"${demoDir}\" .`),\n unpack: ({ archive, unpackDir }) => execSync(`tar -xzf \"${archive}\" -C \"${unpackDir}\"`),\n archive: path.join(tempDir, 'archive.tar.gz'),\n unpackDir: path.join(tempDir, 'unpacked-tar-gz'),\n populateUnpackDir: 'full',\n cleanBeforeUnpack: true\n });\n });\n it('zip-store', () => {\n if (!isZipAvailable()) {\n console.log('Skipping zip test because zip is not available');\n return;\n }\n if (!tempDir) throw new Error('Temp directory is not set up.');\n bench('zip-store', {\n pack: ({ archive, demoDir }) => execSync(`zip -r -Z store \"${archive}\" .`, { cwd: demoDir }),\n unpack: ({ archive, unpackDir }) => execSync(`unzip \"${archive}\" -d \"${unpackDir}\"`),\n archive: path.join(tempDir, 'archive.zip'),\n unpackDir: path.join(tempDir, 'unpacked-zip'),\n populateUnpackDir: 'full',\n cleanBeforeUnpack: true\n });\n });\n it('zip-deflate', () => {\n if (!isZipAvailable()) {\n console.log('Skipping zip test because zip is not available');\n return;\n }\n if (!tempDir) throw new Error('Temp directory is not set up.');\n bench('zip-deflate', {\n pack: ({ archive, demoDir }) => execSync(`zip -r -Z deflate -9 \"${archive}\" .`, { cwd: demoDir }),\n unpack: ({ archive, unpackDir }) => execSync(`unzip \"${archive}\" -d \"${unpackDir}\"`),\n archive: path.join(tempDir, 'archive-deflate.zip'),\n unpackDir: path.join(tempDir, 'unpacked-zip-deflate'),\n populateUnpackDir: 'full',\n cleanBeforeUnpack: true\n });\n });\n const existingFileOptions: ['all', 'none', 'partial'] = ['all', 'none', 'partial'];\n compressionOptions.forEach((compression) => {\n if (compression === 'zstd') {\n const [major, minor] = process.versions.node.split('.').map((x) => parseInt(x, 10));\n if (major < 22 || (major === 22 && minor < 15)) {\n console.warn(`Skipping zstd test on Node ${process.versions.node}`);\n return;\n }\n }\n existingFileOptions.forEach((existingFiles) => {\n it(`zipsync-${compression}-${existingFiles}-existing`, () => {\n benchZipSyncScenario(`zipsync-${compression}-${existingFiles}-existing`, compression, existingFiles);\n });\n });\n });\n});\n\nafterAll(() => {\n if (!measurements.length) return;\n interface IStats {\n kind: string;\n phase: string;\n n: number;\n min: number;\n max: number;\n mean: number;\n p95: number;\n std: number;\n sizeMean?: number; // only for pack\n }\n const groups: Map<string, { times: number[]; sizes: number[] }> = new Map();\n for (const m of measurements) {\n const key: string = `${m.kind}|${m.phase}`;\n let bucket = groups.get(key);\n if (!bucket) {\n bucket = { times: [], sizes: [] };\n groups.set(key, bucket);\n }\n bucket.times.push(m.ms);\n if (typeof m.sizeBytes === 'number') bucket.sizes.push(m.sizeBytes);\n }\n const stats: IStats[] = [];\n function percentile(sorted: number[], p: number): number {\n if (!sorted.length) return 0;\n const idx: number = Math.min(sorted.length - 1, Math.ceil((p / 100) * sorted.length) - 1);\n return sorted[idx];\n }\n for (const [key, bucket] of groups) {\n const [kind, phase] = key.split('|');\n bucket.times.sort((a, b) => a - b);\n const arr = bucket.times;\n const n = arr.length;\n const min = arr[0];\n const max = arr[n - 1];\n const sum = arr.reduce((a, b) => a + b, 0);\n const mean = sum / n;\n const variance = arr.reduce((a, b) => a + (b - mean) * (b - mean), 0) / n;\n const std = Math.sqrt(variance);\n const p95 = percentile(arr, 95);\n const sizeMean = bucket.sizes.length\n ? bucket.sizes.reduce((a, b) => a + b, 0) / bucket.sizes.length\n : undefined;\n stats.push({ kind, phase, n, min, max, mean, std, p95, sizeMean });\n }\n // Organize into groups\n const groupsDef: Array<{ title: string; baseline: string; members: string[] }> = [\n {\n title: 'Compressed (baseline: tar-gz)',\n baseline: 'tar-gz',\n members: [\n 'tar-gz',\n 'zip-deflate',\n 'zipsync-zstd-all-existing',\n 'zipsync-zstd-none-existing',\n 'zipsync-zstd-partial-existing',\n 'zipsync-deflate-all-existing',\n 'zipsync-deflate-none-existing',\n 'zipsync-deflate-partial-existing',\n 'zipsync-auto-all-existing',\n 'zipsync-auto-none-existing',\n 'zipsync-auto-partial-existing'\n ]\n },\n {\n title: 'Uncompressed (baseline: tar)',\n baseline: 'tar',\n members: [\n 'tar',\n 'zip-store',\n 'zipsync-store-all-existing',\n 'zipsync-store-none-existing',\n 'zipsync-store-partial-existing'\n ]\n }\n ];\n // Build per-group markdown tables (no Group column) for each phase\n function buildGroupTable(\n group: { title: string; baseline: string; members: string[] },\n phase: 'pack' | 'unpack'\n ): string[] {\n // Human readable bytes formatter\n function formatBytes(bytes: number): string {\n const units = ['B', 'KB', 'MB', 'GB'];\n let value = bytes;\n let i = 0;\n while (value >= 1024 && i < units.length - 1) {\n value /= 1024;\n i++;\n }\n const formatted = value >= 100 ? value.toFixed(0) : value >= 10 ? value.toFixed(1) : value.toFixed(2);\n return `${formatted} ${units[i]}`;\n }\n const headers =\n phase === 'pack'\n ? ['Archive', 'min (ms)', 'mean (ms)', 'p95 (ms)', 'max (ms)', 'std (ms)', 'speed (x)', 'size']\n : ['Archive', 'min (ms)', 'mean (ms)', 'p95 (ms)', 'max (ms)', 'std (ms)', 'speed (x)'];\n const lines: string[] = [];\n lines.push('| ' + headers.join(' | ') + ' |');\n const align: string[] = headers.map((header, idx) => (idx === 0 ? '---' : '---:'));\n lines.push('| ' + align.join(' | ') + ' |');\n const baselineStats: IStats | undefined = stats.find(\n (s) => s.kind === group.baseline && s.phase === phase\n );\n for (const member of group.members) {\n const s: IStats | undefined = stats.find((st) => st.kind === member && st.phase === phase);\n if (!s) continue;\n const isBaseline: boolean = member === group.baseline;\n const speedFactor: number = baselineStats ? baselineStats.mean / s.mean : 1;\n const cols: string[] = [\n (isBaseline ? '**' : '') + s.kind + (isBaseline ? '**' : ''),\n s.min.toFixed(2),\n s.mean.toFixed(2),\n s.p95.toFixed(2),\n s.max.toFixed(2),\n s.std.toFixed(2),\n speedFactor.toFixed(2) + 'x'\n ];\n if (phase === 'pack') {\n cols.push(s.sizeMean !== undefined ? formatBytes(Math.round(s.sizeMean)) : '');\n }\n lines.push('| ' + cols.join(' | ') + ' |');\n }\n return lines;\n }\n const outputLines: string[] = [];\n outputLines.push('# Benchmark Results');\n outputLines.push('');\n outputLines.push(\n `\nThis document contains performance measurements for packing and unpacking a synthetic dataset using tar, zip, and zipsync.\n\nThe dataset consists of two directory trees (subdir1, subdir2) populated with ${NUM_FILES} text files each.\n\nzipsync scenarios\n* \"all-existing\": unpack directory is fully populated with existing files\n* \"none-existing\": unpack directory is empty\n* \"partial-existing\": unpack directory contains half of the files\n\nzip and tar scenarios clean the unpack directory before unpacking. This time is included in the measurements because\nzipsync internally handles cleaning as part of its operation.\n`\n );\n outputLines.push('');\n // System info\n try {\n const cpuList = cpus();\n const cpuModelRaw: string | undefined = cpuList[0]?.model;\n const cpuModel: string = cpuModelRaw ? cpuModelRaw.replace(/\\|/g, ' ').trim() : 'unknown';\n const logicalCores: number = cpuList.length || 0;\n const memGB: string = (totalmem() / 1024 ** 3).toFixed(1);\n outputLines.push('**System**');\n outputLines.push('');\n outputLines.push('| OS | Arch | Node | CPU | Logical Cores | Memory |');\n outputLines.push('| --- | --- | --- | --- | ---: | --- |');\n outputLines.push(\n `| ${platform()} ${release()} | ${arch()} | ${process.version} | ${cpuModel} | ${logicalCores} | ${memGB} GB |`\n );\n outputLines.push('');\n } catch {\n // ignore system info errors\n }\n outputLines.push(`Iterations: ${ITERATIONS}`);\n outputLines.push('');\n for (const g of groupsDef) {\n outputLines.push(`## ${g.title}`);\n outputLines.push('');\n outputLines.push('### Unpack Phase');\n outputLines.push('');\n outputLines.push(...buildGroupTable(g, 'unpack'));\n outputLines.push('');\n outputLines.push('### Pack Phase');\n outputLines.push('');\n outputLines.push(...buildGroupTable(g, 'pack'));\n outputLines.push('');\n }\n const resultText = outputLines.join('\\n');\n console.log(resultText);\n try {\n const resultFile = path.join(__dirname, '..', 'temp', `benchmark-results.md`);\n fs.writeFileSync(resultFile, resultText, { encoding: 'utf-8' });\n console.log(`Benchmark results written to: ${resultFile}`);\n } catch (e) {\n console.warn('Failed to write benchmark results file:', (e as Error).message);\n }\n});\nfunction isZipAvailable(): boolean {\n try {\n const checkZip = process.platform === 'win32' ? 'where zip' : 'command -v zip';\n const checkUnzip = process.platform === 'win32' ? 'where unzip' : 'command -v unzip';\n execSync(checkZip, { stdio: 'ignore' });\n execSync(checkUnzip, { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n}\nfunction isTarAvailable(): boolean {\n try {\n const checkTar = process.platform === 'win32' ? 'where tar' : 'command -v tar';\n execSync(checkTar, { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n}\n"]}
|
package/lib/crc32.test.d.ts
DELETED
package/lib/crc32.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crc32.test.d.ts","sourceRoot":"","sources":["../src/crc32.test.ts"],"names":[],"mappings":""}
|
package/lib/crc32.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crc32.test.js","sourceRoot":"","sources":["../src/crc32.test.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3D,2CAA6B;AAE7B,mCAAwC;AAExC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;YACzF,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG;YACf,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe;YAChC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,CAAC;QAEF,IAAI,WAAW,GAAW,CAAC,CAAC;QAC5B,IAAI,OAAO,GAAW,CAAC,CAAC;QAExB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,WAAW,GAAG,IAAA,qBAAa,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC/C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,WAAW,GAAG,WAAW,KAAK,CAAC,CAAC;QAChC,OAAO,GAAG,OAAO,KAAK,CAAC,CAAC;QAExB,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as zlib from 'zlib';\n\nimport { fallbackCrc32 } from './crc32';\n\ndescribe('crc32', () => {\n it('fallbackCrc32 should match zlib.crc32', () => {\n if (!zlib.crc32) {\n // eslint-disable-next-line no-console\n console.log('Skipping test because zlib.crc32 is not available in this Node.js version');\n return;\n }\n\n const testData = [\n Buffer.from('hello world', 'utf-8'),\n Buffer.alloc(0), // empty buffer\n Buffer.from('hello crc32', 'utf-8'),\n Buffer.from([-1, 2, 3, 4, 5, 255, 0, 128])\n ];\n\n let fallbackCrc: number = 0;\n let zlibCrc: number = 0;\n\n for (const data of testData) {\n fallbackCrc = fallbackCrc32(data, fallbackCrc);\n zlibCrc = zlib.crc32(data, zlibCrc);\n }\n\n fallbackCrc = fallbackCrc >>> 0;\n zlibCrc = zlibCrc >>> 0;\n\n expect(fallbackCrc).toBe(zlibCrc);\n });\n});\n"]}
|
package/lib/index.test.d.ts
DELETED
package/lib/index.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
package/lib/index.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\n\nimport { NoOpTerminalProvider } from '@rushstack/terminal/lib/NoOpTerminalProvider';\nimport { Terminal } from '@rushstack/terminal/lib/Terminal';\n\nimport { pack } from './pack';\nimport { unpack } from './unpack';\nimport { getDemoDataDirectoryDisposable } from './testUtils';\nimport type { ZipSyncOptionCompression } from './zipSyncUtils';\n\ndescribe('zipSync tests', () => {\n it(`basic pack test`, () => {\n const compressionOptions = ['store', 'deflate', 'zstd', 'auto'] satisfies ZipSyncOptionCompression[];\n compressionOptions.forEach((compression) => {\n if (compression === 'zstd') {\n const [major, minor] = process.versions.node.split('.').map((x) => parseInt(x, 10));\n if (major < 22 || (major === 22 && minor < 15)) {\n // eslint-disable-next-line no-console\n console.warn(`Skipping zstd test on Node ${process.versions.node}`);\n return;\n }\n }\n\n using demoDataDisposable = getDemoDataDirectoryDisposable(5);\n const { targetDirectories, baseDir, metadata } = demoDataDisposable;\n\n const terminal = new Terminal(new NoOpTerminalProvider());\n\n const archivePath: string = path.join(baseDir, 'archive.zip');\n const packResult = pack({\n terminal: terminal,\n compression,\n baseDir,\n targetDirectories,\n archivePath\n });\n\n expect(packResult).toMatchObject({ filesPacked: 21, metadata });\n\n using unpackDemoDataDisposable = getDemoDataDirectoryDisposable(2);\n const { baseDir: unpackBaseDir } = unpackDemoDataDisposable;\n\n const unpackResult = unpack({\n terminal: terminal,\n archivePath,\n baseDir: unpackBaseDir,\n targetDirectories\n });\n\n expect(unpackResult).toMatchObject({\n filesDeleted: 0,\n filesExtracted: 12,\n filesSkipped: 8,\n foldersDeleted: 0,\n metadata\n });\n\n // Verify files were extracted\n for (const targetDirectory of targetDirectories) {\n const sourceDir: string = path.join(baseDir, targetDirectory);\n for (let i: number = 0; i < 5; ++i) {\n const sourceFile: string = path.join(sourceDir, 'subdir', `file-${i}.txt`);\n const destFile: string = path.join(unpackBaseDir, targetDirectory, 'subdir', `file-${i}.txt`);\n expect(fs.readFileSync(destFile, { encoding: 'utf-8' })).toEqual(\n fs.readFileSync(sourceFile, { encoding: 'utf-8' })\n );\n }\n }\n });\n });\n});\n"]}
|
package/lib/start.test.d.ts
DELETED
package/lib/start.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"start.test.d.ts","sourceRoot":"","sources":["../src/start.test.ts"],"names":[],"mappings":""}
|
package/lib/start.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"start.test.js","sourceRoot":"","sources":["../src/start.test.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAE3D,iDAAyC;AAEzC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,WAAW,GAAG,IAAA,wBAAQ,EAAC,0BAA0B,CAAC,CAAC,QAAQ,EAAE,CAAC;QACpE,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { execSync } from 'child_process';\n\ndescribe('CLI Tool Tests', () => {\n it('should display help for \"zipsync --help\"', () => {\n const startOutput = execSync('node lib/start.js --help').toString();\n expect(startOutput).toMatchSnapshot();\n });\n});\n"]}
|
package/lib/testUtils.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { IMetadata } from './zipSyncUtils';
|
|
2
|
-
export declare function getTempDir(): string;
|
|
3
|
-
export declare function getDemoDataDirectoryDisposable(numFiles: number): {
|
|
4
|
-
targetDirectories: string[];
|
|
5
|
-
baseDir: string;
|
|
6
|
-
metadata: IMetadata;
|
|
7
|
-
[Symbol.dispose](): void;
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=testUtils.d.ts.map
|
package/lib/testUtils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,wBAAgB,UAAU,IAAI,MAAM,CAKnC;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG;IAChE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;IACpB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B,CA+BA"}
|
package/lib/testUtils.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
|
3
|
-
// See LICENSE in the project root for license information.
|
|
4
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
-
if (k2 === undefined) k2 = k;
|
|
6
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
-
}
|
|
10
|
-
Object.defineProperty(o, k2, desc);
|
|
11
|
-
}) : (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
o[k2] = m[k];
|
|
14
|
-
}));
|
|
15
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
-
}) : function(o, v) {
|
|
18
|
-
o["default"] = v;
|
|
19
|
-
});
|
|
20
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
-
var ownKeys = function(o) {
|
|
22
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
-
var ar = [];
|
|
24
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
-
return ar;
|
|
26
|
-
};
|
|
27
|
-
return ownKeys(o);
|
|
28
|
-
};
|
|
29
|
-
return function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
|
-
})();
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.getTempDir = getTempDir;
|
|
39
|
-
exports.getDemoDataDirectoryDisposable = getDemoDataDirectoryDisposable;
|
|
40
|
-
const node_os_1 = require("node:os");
|
|
41
|
-
const path = __importStar(require("node:path"));
|
|
42
|
-
const fs = __importStar(require("node:fs"));
|
|
43
|
-
const crypto = __importStar(require("node:crypto"));
|
|
44
|
-
function getTempDir() {
|
|
45
|
-
const randomId = crypto.randomUUID();
|
|
46
|
-
const tempDir = path.join((0, node_os_1.tmpdir)(), `zipsync-test-${randomId}`);
|
|
47
|
-
fs.mkdirSync(tempDir);
|
|
48
|
-
return tempDir;
|
|
49
|
-
}
|
|
50
|
-
function getDemoDataDirectoryDisposable(numFiles) {
|
|
51
|
-
const baseDir = getTempDir();
|
|
52
|
-
const metadata = { files: {}, version: '1.0' };
|
|
53
|
-
const targetDirectories = ['demo-data-1', 'demo-data-2', 'demo-data-3', 'nested/demo/dir/4'].map((folderName) => {
|
|
54
|
-
const dataDir = path.join(baseDir, folderName);
|
|
55
|
-
fs.mkdirSync(dataDir, { recursive: true });
|
|
56
|
-
const subdir = path.join(dataDir, 'subdir');
|
|
57
|
-
fs.mkdirSync(subdir);
|
|
58
|
-
for (let i = 0; i < numFiles; ++i) {
|
|
59
|
-
const filePath = path.join(subdir, `file-${i}.txt`);
|
|
60
|
-
const content = `This is file ${i} in ${folderName}/subdir\n`;
|
|
61
|
-
const sha1Hash = crypto.createHash('sha1').update(content).digest('hex');
|
|
62
|
-
fs.writeFileSync(filePath, content, { encoding: 'utf-8' });
|
|
63
|
-
const relativeFilePath = path.relative(baseDir, filePath).replace(/\\/g, '/');
|
|
64
|
-
metadata.files[relativeFilePath] = { size: content.length, sha1Hash };
|
|
65
|
-
}
|
|
66
|
-
return folderName;
|
|
67
|
-
});
|
|
68
|
-
return {
|
|
69
|
-
targetDirectories,
|
|
70
|
-
baseDir,
|
|
71
|
-
metadata,
|
|
72
|
-
[Symbol.dispose]() {
|
|
73
|
-
fs.rmSync(baseDir, { recursive: true, force: true });
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=testUtils.js.map
|
package/lib/testUtils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQ3D,gCAKC;AAED,wEAoCC;AAjDD,qCAAiC;AACjC,gDAAkC;AAClC,4CAA8B;AAC9B,oDAAsC;AAGtC,SAAgB,UAAU;IACxB,MAAM,QAAQ,GAAW,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAW,IAAI,CAAC,IAAI,CAAC,IAAA,gBAAM,GAAE,EAAE,gBAAgB,QAAQ,EAAE,CAAC,CAAC;IACxE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,8BAA8B,CAAC,QAAgB;IAM7D,MAAM,OAAO,GAAW,UAAU,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAc,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE1D,MAAM,iBAAiB,GAAa,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC,GAAG,CACxG,CAAC,UAAU,EAAE,EAAE;QACb,MAAM,OAAO,GAAW,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvD,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAW,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpD,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAW,gBAAgB,CAAC,OAAO,UAAU,WAAW,CAAC;YACtE,MAAM,QAAQ,GAAW,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3D,MAAM,gBAAgB,GAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtF,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;QACxE,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CACF,CAAC;IAEF,OAAO;QACL,iBAAiB;QACjB,OAAO;QACP,QAAQ;QACR,CAAC,MAAM,CAAC,OAAO,CAAC;YACd,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { tmpdir } from 'node:os';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport * as crypto from 'node:crypto';\nimport type { IMetadata } from './zipSyncUtils';\n\nexport function getTempDir(): string {\n const randomId: string = crypto.randomUUID();\n const tempDir: string = path.join(tmpdir(), `zipsync-test-${randomId}`);\n fs.mkdirSync(tempDir);\n return tempDir;\n}\n\nexport function getDemoDataDirectoryDisposable(numFiles: number): {\n targetDirectories: string[];\n baseDir: string;\n metadata: IMetadata;\n [Symbol.dispose](): void;\n} {\n const baseDir: string = getTempDir();\n\n const metadata: IMetadata = { files: {}, version: '1.0' };\n\n const targetDirectories: string[] = ['demo-data-1', 'demo-data-2', 'demo-data-3', 'nested/demo/dir/4'].map(\n (folderName) => {\n const dataDir: string = path.join(baseDir, folderName);\n fs.mkdirSync(dataDir, { recursive: true });\n const subdir: string = path.join(dataDir, 'subdir');\n fs.mkdirSync(subdir);\n for (let i: number = 0; i < numFiles; ++i) {\n const filePath: string = path.join(subdir, `file-${i}.txt`);\n const content: string = `This is file ${i} in ${folderName}/subdir\\n`;\n const sha1Hash: string = crypto.createHash('sha1').update(content).digest('hex');\n fs.writeFileSync(filePath, content, { encoding: 'utf-8' });\n const relativeFilePath: string = path.relative(baseDir, filePath).replace(/\\\\/g, '/');\n metadata.files[relativeFilePath] = { size: content.length, sha1Hash };\n }\n return folderName;\n }\n );\n\n return {\n targetDirectories,\n baseDir,\n metadata,\n [Symbol.dispose]() {\n fs.rmSync(baseDir, { recursive: true, force: true });\n }\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workerAsync.test.d.ts","sourceRoot":"","sources":["../src/workerAsync.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workerAsync.test.js","sourceRoot":"","sources":["../src/workerAsync.test.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3D,gDAAkC;AAClC,4CAA8B;AAE9B,2DAAwD;AACxD,uDAAoD;AACpD,2CAA6D;AAE7D,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;;;YAC/B,MAAM,kBAAkB,kCAAG,IAAA,0CAA8B,EAAC,CAAC,CAAC,QAAA,CAAC;YAC7D,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC;YAEpE,MAAM,WAAW,GAAW,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAC9D,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,iCAAe,EAAC;gBAC1D,WAAW,EAAE,SAAS;gBACtB,OAAO;gBACP,iBAAiB;gBACjB,WAAW;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhE,MAAM,wBAAwB,kCAAG,IAAA,0CAA8B,EAAC,CAAC,CAAC,QAAA,CAAC;YACnE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,wBAAwB,CAAC;YAE5D,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,qCAAiB,EAAC;gBAC9D,WAAW;gBACX,OAAO,EAAE,aAAa;gBACtB,iBAAiB;aAClB,CAAC,CAAC;YAEH,MAAM,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC;gBACjC,YAAY,EAAE,CAAC;gBACf,cAAc,EAAE,EAAE;gBAClB,YAAY,EAAE,CAAC;gBACf,cAAc,EAAE,CAAC;gBACjB,QAAQ;aACT,CAAC,CAAC;YAEH,8BAA8B;YAC9B,KAAK,MAAM,eAAe,IAAI,iBAAiB,EAAE,CAAC;gBAChD,MAAM,SAAS,GAAW,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBAC9D,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBACnC,MAAM,UAAU,GAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC3E,MAAM,QAAQ,GAAW,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC9F,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAC9D,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CACnD,CAAC;gBACJ,CAAC;YACH,CAAC;;;;;;;;;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\n\nimport { unpackWorkerAsync } from './unpackWorkerAsync';\nimport { packWorkerAsync } from './packWorkerAsync';\nimport { getDemoDataDirectoryDisposable } from './testUtils';\n\ndescribe('zipSyncWorkerAsync tests', () => {\n it('basic pack test', async () => {\n using demoDataDisposable = getDemoDataDirectoryDisposable(5);\n const { targetDirectories, baseDir, metadata } = demoDataDisposable;\n\n const archivePath: string = path.join(baseDir, 'archive.zip');\n const { zipSyncReturn: packResult } = await packWorkerAsync({\n compression: 'deflate',\n baseDir,\n targetDirectories,\n archivePath\n });\n\n expect(packResult).toMatchObject({ filesPacked: 21, metadata });\n\n using unpackDemoDataDisposable = getDemoDataDirectoryDisposable(2);\n const { baseDir: unpackBaseDir } = unpackDemoDataDisposable;\n\n const { zipSyncReturn: unpackResult } = await unpackWorkerAsync({\n archivePath,\n baseDir: unpackBaseDir,\n targetDirectories\n });\n\n expect(unpackResult).toMatchObject({\n filesDeleted: 0,\n filesExtracted: 12,\n filesSkipped: 8,\n foldersDeleted: 0,\n metadata\n });\n\n // Verify files were extracted\n for (const targetDirectory of targetDirectories) {\n const sourceDir: string = path.join(baseDir, targetDirectory);\n for (let i: number = 0; i < 5; ++i) {\n const sourceFile: string = path.join(sourceDir, 'subdir', `file-${i}.txt`);\n const destFile: string = path.join(unpackBaseDir, targetDirectory, 'subdir', `file-${i}.txt`);\n expect(fs.readFileSync(destFile, { encoding: 'utf-8' })).toEqual(\n fs.readFileSync(sourceFile, { encoding: 'utf-8' })\n );\n }\n }\n });\n});\n"]}
|
|
File without changes
|