Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Commit e9fa8b5

Browse files
authored
feat: Allow RegExp for ignoreEntries (#318)
1 parent 5910f64 commit e9fa8b5

5 files changed

Lines changed: 29 additions & 5 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ The structure of the configuration file is the following:
5959
force?: boolean;
6060

6161
/** Ignore entries (e.g. `*.js.map`). */
62-
ignoreEntries?: string[];
62+
ignoreEntries?: Array<string | RegExp>;
6363

6464
/** Add or extract files. */
6565
mode: 'add' | 'extract';

config-examples/.jsziprc.example.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ module.exports = {
55
],
66
force: true,
77
ignoreEntries: [
8-
'*.map'
8+
'*.map',
9+
new RegExp('\\.html?$')
910
],
1011
mode: 'extract',
11-
outputEntry: 'dist2/',
12+
outputEntry: 'dist/',
1213
quiet: false,
1314
verbose: false,
1415
};

spec/BuildService.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,25 @@ describe('BuildService', () => {
5555
expect(buildService['addFile']).not.toHaveBeenCalledWith(jasmine.objectContaining({zipPath: 'b.js.map'}));
5656
expect(buildService['fileService'].writeFile).toHaveBeenCalledTimes(1);
5757
});
58+
59+
it('allows RegExp usage for ignoreEntries', async () => {
60+
jsZipCLI = new JSZipCLI({
61+
ignoreEntries: [/.*\.map/],
62+
outputEntry: 'file.zip',
63+
quiet: true,
64+
verbose: false,
65+
});
66+
const files = ['a.js', 'b.js', 'b.js.map'];
67+
const buildService = jsZipCLI.add(files);
68+
69+
addDefaultSpies(buildService);
70+
71+
const {compressedFilesCount} = await jsZipCLI.save();
72+
expect(compressedFilesCount).toBe(2);
73+
74+
expect(buildService['addFile']).toHaveBeenCalledWith(jasmine.objectContaining({zipPath: 'a.js'}));
75+
expect(buildService['addFile']).toHaveBeenCalledWith(jasmine.objectContaining({zipPath: 'b.js'}));
76+
expect(buildService['addFile']).not.toHaveBeenCalledWith(jasmine.objectContaining({zipPath: 'b.js.map'}));
77+
expect(buildService['fileService'].writeFile).toHaveBeenCalledTimes(1);
78+
});
5879
});

src/BuildService.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ export class BuildService {
2727
});
2828
this.logger.state = {isEnabled: options.verbose};
2929
this.entries = [];
30-
this.ignoreEntries = this.options.ignoreEntries.map(entry => new RegExp(entry.replace('*', '.*')));
30+
this.ignoreEntries = this.options.ignoreEntries.map(entry =>
31+
entry instanceof RegExp ? entry : new RegExp(entry.replace('*', '.*'))
32+
);
3133
this.outputFile = this.options.outputEntry ? path.resolve(this.options.outputEntry) : null;
3234
this.progressBar = new progress('Compressing [:bar] :percent :elapseds', {
3335
complete: '=',

src/interfaces.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export interface TerminalOptions {
88
/** Force overwriting files and directories when extracting (default: false). */
99
force?: boolean;
1010
/** Ignore entries (e.g. `*.js.map`). */
11-
ignoreEntries?: string[];
11+
ignoreEntries?: Array<string | RegExp>;
1212
/** Set the output directory (default: stdout). */
1313
outputEntry?: string | null;
1414
/** Don't log anything excluding errors (default: false). */

0 commit comments

Comments
 (0)