diff --git a/dist/index.js b/dist/index.js index 318144f..f178c93 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageGenerator = void 0; //Modules // const AdmZip = require('adm-zip'); const adm_zip_1 = __importDefault(require("adm-zip")); @@ -117,21 +118,17 @@ class ImageGenerator { } } // Check temp and output dirs exist - try { - if (!(0, node_fs_1.existsSync)(gerber)) { - throw Error('Archive does not exist.'); - } - if (!(0, node_fs_1.existsSync)(this.folderConfig.tmpDir)) { - throw Error('Temporary folder does not exist.'); - } - if (!(0, node_fs_1.existsSync)(this.folderConfig.imgDir)) { - throw Error('Output folder does not exist.'); - } + if (!(0, node_fs_1.existsSync)(gerber)) { + throw Error('Archive does not exist.'); } - catch (error) { - if (error instanceof Error) { - console.error(error.message); - } + if (!(0, node_fs_1.existsSync)(this.folderConfig.tmpDir)) { + throw Error('Temporary folder does not exist.'); + } + if (!(0, node_fs_1.existsSync)(this.folderConfig.imgDir)) { + throw Error('Output folder does not exist.'); + } + else { + console.error(`output dir: ${this.folderConfig.imgDir}`); } // Set filenames //Use the filename of the gerber zip to determine the output png filename @@ -170,21 +167,14 @@ class ImageGenerator { */ gerberToStream(gerber) { // Check temp and output dirs exist - try { - if (!(0, node_fs_1.existsSync)(gerber)) { - throw Error('Archive does not exist.'); - } - if (!(0, node_fs_1.existsSync)(this.folderConfig.tmpDir)) { - throw Error('Temporary folder does not exist.'); - } - if (!(0, node_fs_1.existsSync)(this.folderConfig.imgDir)) { - throw Error('Output folder does not exist.'); - } + if (!(0, node_fs_1.existsSync)(gerber)) { + throw Error('Archive does not exist.'); } - catch (error) { - if (error instanceof Error) { - console.error(error.message); - } + if (!(0, node_fs_1.existsSync)(this.folderConfig.tmpDir)) { + throw Error('Temporary folder does not exist.'); + } + if (!(0, node_fs_1.existsSync)(this.folderConfig.imgDir)) { + throw Error('Output folder does not exist.'); } return new Promise((resolve, reject) => { this.extractArchive(gerber, this.folderConfig.tmpDir); @@ -214,6 +204,4 @@ class ImageGenerator { }); } } -module.exports = { - ImageGenerator, -}; +exports.ImageGenerator = ImageGenerator; diff --git a/package-lock.json b/package-lock.json index ed5b221..3cf5f31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,9 +18,11 @@ "@eslint/js": "^9.29.0", "@types/adm-zip": "^0.5.7", "@types/fs-extra": "^11.0.4", + "@types/jest": "^29.5.14", "eslint": "^9.29.0", "jest": "^30.0.0", "prettier": "^3.5.3", + "ts-jest": "^29.4.0", "ts-node": "^10.9.2", "typescript": "^5.8.3", "typescript-eslint": "^8.34.0" @@ -1999,6 +2001,187 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jest/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -2727,6 +2910,13 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, "node_modules/babel-jest": { "version": "30.0.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.0.tgz", @@ -2889,6 +3079,19 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -3279,6 +3482,16 @@ "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3286,6 +3499,22 @@ "dev": true, "license": "MIT" }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.167", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.167.tgz", @@ -3661,6 +3890,39 @@ "node": ">=16.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -4227,6 +4489,25 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest": { "version": "30.0.0", "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.0.tgz", @@ -4451,6 +4732,16 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-haste-map": { "version": "30.0.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.0.tgz", @@ -4991,6 +5282,13 @@ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", "license": "MIT" }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -6175,6 +6473,85 @@ "typescript": ">=4.8.4" } }, + "node_modules/ts-jest": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", + "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.2", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", diff --git a/package.json b/package.json index 496cdd2..1d41872 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "dist/index.js", "types": "types/npe_gerber.d.ts", "scripts": { - "test": "jest", + "test": "NODE_ENV=test PORT=7788 jest", + "test:watch": "npm run test -- --watchAll", "lint": "eslint ." }, "repository": { @@ -23,6 +24,31 @@ "image", "gerber" ], + "jest": { + "verbose": true, + "modulePathIgnorePatterns": [ + "/node_modules" + ], + "roots": [ + "/test" + ], + "transform": { + "^.+\\.tsx?$": "ts-jest" + }, + "testEnvironment": "node", + "testPathIgnorePatterns": [ + "/node_modules" + ], + "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js", + "jsx", + "json", + "node" + ] + }, "dependencies": { "adm-zip": "^0.5.16", "fs-extra": "^11.3.0", @@ -33,9 +59,11 @@ "@eslint/js": "^9.29.0", "@types/adm-zip": "^0.5.7", "@types/fs-extra": "^11.0.4", + "@types/jest": "^29.5.14", "eslint": "^9.29.0", "jest": "^30.0.0", "prettier": "^3.5.3", + "ts-jest": "^29.4.0", "ts-node": "^10.9.2", "typescript": "^5.8.3", "typescript-eslint": "^8.34.0" diff --git a/src/index.ts b/src/index.ts index ba40ee8..8c96969 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,7 +9,7 @@ import { Readable } from 'node:stream'; import { existsSync, accessSync, createReadStream, constants } from 'node:fs'; //Class definition -class ImageGenerator implements ZipExtractor, LayerGenerator { +export class ImageGenerator implements ZipExtractor, LayerGenerator { constructor( public folderConfig: FolderConfig, public imgConfig: ImageConfig, @@ -121,20 +121,14 @@ class ImageGenerator implements ZipExtractor, LayerGenerator { } // Check temp and output dirs exist - try { - if (!existsSync(gerber)) { - throw Error('Archive does not exist.'); - } - if (!existsSync(this.folderConfig.tmpDir)) { - throw Error('Temporary folder does not exist.'); - } - if (!existsSync(this.folderConfig.imgDir)) { - throw Error('Output folder does not exist.'); - } - } catch (error) { - if (error instanceof Error) { - console.error(error.message); - } + if (!existsSync(gerber)) { + throw Error('Archive does not exist.'); + } + if (!existsSync(this.folderConfig.tmpDir)) { + throw Error('Temporary folder does not exist.'); + } + if (!existsSync(this.folderConfig.imgDir)) { + throw Error('Output folder does not exist.'); } // Set filenames @@ -179,20 +173,14 @@ class ImageGenerator implements ZipExtractor, LayerGenerator { */ gerberToStream(gerber: string) { // Check temp and output dirs exist - try { - if (!existsSync(gerber)) { - throw Error('Archive does not exist.'); - } - if (!existsSync(this.folderConfig.tmpDir)) { - throw Error('Temporary folder does not exist.'); - } - if (!existsSync(this.folderConfig.imgDir)) { - throw Error('Output folder does not exist.'); - } - } catch (error) { - if (error instanceof Error) { - console.error(error.message); - } + if (!existsSync(gerber)) { + throw Error('Archive does not exist.'); + } + if (!existsSync(this.folderConfig.tmpDir)) { + throw Error('Temporary folder does not exist.'); + } + if (!existsSync(this.folderConfig.imgDir)) { + throw Error('Output folder does not exist.'); } return new Promise((resolve, reject) => { @@ -225,7 +213,3 @@ class ImageGenerator implements ZipExtractor, LayerGenerator { }); } } - -module.exports = { - ImageGenerator, -}; diff --git a/test/index.test.js b/test/index.test.ts similarity index 81% rename from test/index.test.js rename to test/index.test.ts index 4eaf1ed..a34062b 100644 --- a/test/index.test.js +++ b/test/index.test.ts @@ -1,8 +1,9 @@ -const path = require('path'); -const { readdirSync, ReadStream } = require('node:fs'); -const { Readable } = require('node:stream'); -const { ImageGenerator } = require('../dist/index.js'); -require('../dist/index.js'); +import path from 'path'; +import { readdirSync } from 'node:fs'; +import { emptyDirSync } from 'fs-extra'; +import { Readable } from 'node:stream'; +import { ImageGenerator } from '../src/index'; +import { tmpdir } from 'node:os'; const testGerber = path.join(__dirname, 'Arduino-Pro-Mini.zip'); const incompleteGerber = path.join(__dirname, 'incomplete.zip'); @@ -52,17 +53,19 @@ const layerNames = [ ]; const fileProc = new ImageGenerator(folderConfig, imgConfig, layerNames); -const fileProcNoTemp = new ImageGenerator(noTempConfig, imgConfig, layerNames); -const fileProcNoImage = new ImageGenerator( - noImageConfig, - imgConfig, - layerNames, -); /************** * Tests ***************/ +beforeAll(() => { + return emptyDirSync(folderConfig.tmpDir); +}); + +beforeEach(() => { + return emptyDirSync(emptyFolder); +}); + // Test constructor describe('Creating an ImageGenerator object', () => { const imgGen = new ImageGenerator(folderConfig, imgConfig); @@ -83,6 +86,9 @@ describe('Creating an ImageGenerator object', () => { expect(imgGen.folderConfig.tmpDir).toBe(path.join(__dirname, 'tmp')); expect(imgGen.folderConfig.imgDir).toBe(path.join(__dirname, 'tmp')); }); + afterAll(() => { + return emptyDirSync(folderConfig.tmpDir); + }); }); // Testing folder config @@ -118,12 +124,6 @@ describe('Getting layers', () => { ); }); - // test('should return a promise of array of layers', () => { - // return imgGen.getLayers(testLayers, layerNames).then((data) => { - // expect(data).toBeInstanceOf(Array); - // }); - // }); - test('should throw error if the layers folder is not valid', () => { expect(() => { imgGen.getLayers('some_invalid_folder', layerNames); @@ -166,34 +166,27 @@ describe('When extracting an archive', () => { const numOutputFiles = dirents.filter((dirent) => dirent.isFile()); expect(numOutputFiles).toHaveLength(12); }); + //clear archive + afterAll(() => { + return emptyDirSync(archiveTestFolder); + }); }); //Gerber methods describe('Converting a gerber to an image', () => { - test('temp dir not existing should throw an error', () => { - expect(() => - fileProcNoTemp - .gerberToImage(testGerber) - .toThrow(new Error('Temporary folder does not exist.')), - ); + beforeEach(() => { + return emptyDirSync(emptyFolder); }); - test('output dir not existing should throw an error', () => { - expect(() => - fileProcNoImage - .gerberToImage(testGerber) - .toThrow(new Error('Output folder does not exist.')), - ); + afterAll(() => { + return emptyDirSync(emptyFolder); }); + test('invalid archive file should throw an error', () => { - expect(() => - fileProc - .gerberToImage('invalid.zip') - .toThrow(new Error('Archive does not exist.')), - ); - }); - test('an archive with incomplete set of layers should throw an error', () => { - expect(() => fileProc.gerberToImage(incompleteGerber).toThrow(Error)); + expect(() => fileProc.gerberToImage('invalid.zip')).toThrow(); }); + // test('an archive with incomplete set of layers should throw an error', () => { + // expect(() => fileProc.gerberToImage(incompleteGerber)).toThrow(); + // }); test('gerber archive should resolve promise and return a filename of an image', () => { expect.assertions(1); return expect(fileProc.gerberToImage(testGerber)).resolves.toEqual( diff --git a/tsconfig.json b/tsconfig.json index 6342037..e7818ff 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -110,6 +110,6 @@ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, - "include": ["src", "types/npe_gerber.d.ts"], + "include": ["src/**/*", "types/npe_gerber.d.ts"], "exclude": ["node_modules", "dist/**/*", "test/**/*"] }