diff --git a/node_modules/junk/index.d.ts b/node_modules/junk/index.d.ts
new file mode 100644
index 0000000..46dbded
--- /dev/null
+++ b/node_modules/junk/index.d.ts
@@ -0,0 +1,40 @@
+declare const junk: {
+	/**
+	Returns `true` if `filename` matches a junk file.
+	*/
+	is(filename: string): boolean;
+
+	/**
+	Returns `true` if `filename` doesn't match a junk file.
+
+	@example
+	```
+	import {promisify} from 'util';
+	import * as fs from 'fs';
+	import junk = require('junk');
+
+	const pReaddir = promisify(fs.readdir);
+
+	(async () => {
+		const files = await pReaddir('some/path');
+
+		console.log(files);
+		//=> ['.DS_Store', 'test.jpg']
+
+		console.log(files.filter(junk.not));
+		//=> ['test.jpg']
+	})();
+	```
+	*/
+	not(filename: string): boolean;
+
+	/**
+	Regex used for matching junk files.
+	*/
+	readonly regex: RegExp;
+
+	// TODO: Remove this for the next major release
+	default: typeof junk;
+};
+
+export = junk;
diff --git a/node_modules/junk/index.js b/node_modules/junk/index.js
new file mode 100644
index 0000000..76efefa
--- /dev/null
+++ b/node_modules/junk/index.js
@@ -0,0 +1,39 @@
+'use strict';
+
+const blacklist = [
+	// # All
+	'^npm-debug\\.log$', // Error log for npm
+	'^\\..*\\.swp$', // Swap file for vim state
+
+	// # macOS
+	'^\\.DS_Store$', // Stores custom folder attributes
+	'^\\.AppleDouble$', // Stores additional file resources
+	'^\\.LSOverride$', // Contains the absolute path to the app to be used
+	'^Icon\\r$', // Custom Finder icon: http://superuser.com/questions/298785/icon-file-on-os-x-desktop
+	'^\\._.*', // Thumbnail
+	'^\\.Spotlight-V100(?:$|\\/)', // Directory that might appear on external disk
+	'\\.Trashes', // File that might appear on external disk
+	'^__MACOSX$', // Resource fork
+
+	// # Linux
+	'~$', // Backup file
+
+	// # Windows
+	'^Thumbs\\.db$', // Image file cache
+	'^ehthumbs\\.db$', // Folder config file
+	'^Desktop\\.ini$', // Stores custom folder attributes
+	'@eaDir$' // Synology Diskstation "hidden" folder where the server stores thumbnails
+];
+
+exports.re = () => {
+	throw new Error('`junk.re` was renamed to `junk.regex`');
+};
+
+exports.regex = new RegExp(blacklist.join('|'));
+
+exports.is = filename => exports.regex.test(filename);
+
+exports.not = filename => !exports.is(filename);
+
+// TODO: Remove this for the next major release
+exports.default = module.exports;
diff --git a/node_modules/junk/license b/node_modules/junk/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/node_modules/junk/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/junk/package.json b/node_modules/junk/package.json
new file mode 100644
index 0000000..38cd577
--- /dev/null
+++ b/node_modules/junk/package.json
@@ -0,0 +1,74 @@
+{
+  "_from": "junk@^3.1.0",
+  "_id": "junk@3.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
+  "_location": "/junk",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "junk@^3.1.0",
+    "name": "junk",
+    "escapedName": "junk",
+    "rawSpec": "^3.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.1.0"
+  },
+  "_requiredBy": [
+    "/imagemin"
+  ],
+  "_resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
+  "_shasum": "31499098d902b7e98c5d9b9c80f43457a88abfa1",
+  "_spec": "junk@^3.1.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\imagemin",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/junk/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Filter out system junk files like .DS_Store and Thumbs.db",
+  "devDependencies": {
+    "ava": "^1.4.1",
+    "tsd": "^0.7.1",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=8"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/sindresorhus/junk#readme",
+  "keywords": [
+    "junk",
+    "trash",
+    "garbage",
+    "files",
+    "os",
+    "ignore",
+    "exclude",
+    "filter",
+    "temp",
+    "tmp",
+    "system",
+    "clean",
+    "cleanup"
+  ],
+  "license": "MIT",
+  "name": "junk",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/junk.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd"
+  },
+  "version": "3.1.0"
+}
diff --git a/node_modules/junk/readme.md b/node_modules/junk/readme.md
new file mode 100644
index 0000000..74c23ca
--- /dev/null
+++ b/node_modules/junk/readme.md
@@ -0,0 +1,51 @@
+# junk [![Build Status](https://travis-ci.org/sindresorhus/junk.svg?branch=master)](https://travis-ci.org/sindresorhus/junk)
+
+> Filter out [system junk files](test.js) like `.DS_Store` and `Thumbs.db`
+
+
+## Install
+
+```
+$ npm install junk
+```
+
+
+## Usage
+
+```js
+const {promisify} = require('util');
+const fs = require('fs');
+const junk = require('junk');
+
+const pReaddir = promisify(fs.readdir);
+
+(async () => {
+	const files = await pReaddir('some/path');
+
+	console.log(files);
+	//=> ['.DS_Store', 'test.jpg']
+
+	console.log(files.filter(junk.not));
+	//=> ['test.jpg']
+})();
+```
+
+
+## API
+
+### junk.is(filename)
+
+Returns `true` if `filename` matches a junk file.
+
+### junk.not(filename)
+
+Returns `true` if `filename` doesn't match a junk file.
+
+### junk.regex
+
+Regex used for matching junk files.
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
