From 9d53bf30d295368e7f1e925c18b00e48cc16014e Mon Sep 17 00:00:00 2001 From: Dmytro Pustovit Date: Fri, 11 Jun 2021 23:53:15 +0300 Subject: [PATCH] Chore: integrate node-package-tester --- .mocharc.bundle.json | 15 --- .package-tester.json | 4 + appveyor.yml | 10 +- bin/pack-tests.js | 105 --------------- bin/pack-tests.sh | 7 - bin/pack.sh | 7 - bin/test-package.sh | 12 -- package-lock.json | 307 +++++++++++++++++++++++++++++++++++++++++++ package.json | 3 +- 9 files changed, 318 insertions(+), 152 deletions(-) delete mode 100644 .mocharc.bundle.json create mode 100644 .package-tester.json delete mode 100755 bin/pack-tests.js delete mode 100755 bin/pack-tests.sh delete mode 100755 bin/pack.sh delete mode 100755 bin/test-package.sh diff --git a/.mocharc.bundle.json b/.mocharc.bundle.json deleted file mode 100644 index 36075b7..0000000 --- a/.mocharc.bundle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "diff": true, - "extension": ["js"], - "reporter": "spec", - "slow": 100, - "timeout": 30000, - "ui": "qunit", - "exit": true, - "color": true, - "full-trace": true, - "recursive": true, - "grep": "#no-pack", - "invert": true, - "require": ["./tests-init.js"] -} \ No newline at end of file diff --git a/.package-tester.json b/.package-tester.json new file mode 100644 index 0000000..93bcd88 --- /dev/null +++ b/.package-tester.json @@ -0,0 +1,4 @@ +{ + "dir": "tmp/package-tests", + "copyDefaultFiles": true +} \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index 1d34291..0dfaee6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -33,7 +33,7 @@ environment: job_depends_on: Build nodejs_version: 16 - # MacOS + # # MacOS - job_name: macOS Node.js v.10 job_group: Tests @@ -59,7 +59,7 @@ environment: job_depends_on: Build nodejs_version: 16 - # Windows + # # Windows - job_name: Windows Node.js v.10 job_group: Tests @@ -105,7 +105,7 @@ for: - sh: nvm use $nodejs_version - sh: npm config get user-agent - npm install - - ./bin/pack-tests.sh + - npx npt pack -c .package-tester.json - matrix: only: @@ -142,5 +142,5 @@ for: - cd package-tests - npm i test_script: - - sh: npm run test - - cmd: npm run test-win + - npm run test + diff --git a/bin/pack-tests.js b/bin/pack-tests.js deleted file mode 100755 index 818a8f3..0000000 --- a/bin/pack-tests.js +++ /dev/null @@ -1,105 +0,0 @@ -#!./node_modules/.bin/babel-node - -import path from 'path'; -import { rollup } from 'rollup'; -import commonjs from '@rollup/plugin-commonjs'; -import resolve from '@rollup/plugin-node-resolve'; -import json from '@rollup/plugin-json'; -import multi from '@rollup/plugin-multi-entry'; -import babel from '@rollup/plugin-babel'; -import fs from 'fs-extra'; -import packajeInfo from '../package.json'; - -const isMain = !module.parent; -const DIR = path.resolve('./tmp/package-tests'); - -const COPY = [ - [ 'tests/init.js', 'tests-init.js' ], - - [ '.mocharc.bundle.json', '.mocharc.json' ] -]; - -const TEST_MODULES = [ - 'mocha' -]; - -const resolveIgnoreRegexp = `^(?!${TEST_MODULES.join('|')}).*$`; - -async function run(tarFilePath) { - const nodeModulesPath = [ 'node_modules', packajeInfo.name, 'lib' ]; - - COPY.push([ tarFilePath, tarFilePath ]); - const testConfig = { - 'name' : `${packajeInfo.name}-tests`, - 'version' : packajeInfo.version, - 'scripts' : { - 'test-win' : `set ENTRY=${path.win32.join(...nodeModulesPath)}&& mocha --config .mocharc.json tests.js`, - 'test' : `ENTRY="${path.join(...nodeModulesPath)}" mocha --config .mocharc.json tests.js` - }, - 'dependencies' : { - [packajeInfo.name] : tarFilePath, - ...packajeInfo.peerDependencies - }, - 'devDependencies' : TEST_MODULES.reduce((prev, cur) => ({ // eslint-disable-line unicorn/no-array-reduce - [cur] : packajeInfo.devDependencies[cur], - ...prev - }), {}) - }; - - try { - try { - await fs.remove(DIR); - - const bundle = await rollup({ - input : 'tests/**/*test.js', - plugins : [ - babel({ - exclude : 'node_modules/**', - babelHelpers : 'inline' - }), - resolve({ - preferBuiltins : true, - // eslint-disable-next-line security/detect-non-literal-regexp - resolveOnly : [ new RegExp(resolveIgnoreRegexp) ] - }), - commonjs({ - include : [ /node_modules/ ], - sourceMap : false, - ignoreDynamicRequires : true - }), - json({ - include : 'node_modules/**', - compact : true - }), - multi() - ] - }); - - await fs.ensureDir(DIR); - await bundle.write({ - file : path.resolve(DIR, 'tests.js'), - format : 'cjs' - }); - - await Promise.all(COPY.map(([ from, to ]) => fs.copy( - from, - path.resolve(DIR, to) - ))); - await fs.writeJSON(path.resolve(DIR, 'package.json'), testConfig); - } catch (error) { - console.error('ROLLUP ERROR'); - throw error; - } finally { - // await fs.move(backup, path.resolve('tests/entry.js'), { overwrite: true }); - } - - console.log('Done'); - process.exit(0); - } catch (error) { - console.error(error); - process.exit(1); - } -} - - -if (isMain) run(process.argv[2]); diff --git a/bin/pack-tests.sh b/bin/pack-tests.sh deleted file mode 100755 index 575509d..0000000 --- a/bin/pack-tests.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -e - -echo "Packing ..." -TAR_NAME="$(npm pack 2>&1 | tail -1)" -./bin/pack-tests.js $TAR_NAME -mv $TAR_NAME tmp/package-tests/ \ No newline at end of file diff --git a/bin/pack.sh b/bin/pack.sh deleted file mode 100755 index a6c9ca9..0000000 --- a/bin/pack.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -rm -rf tmp/package -PACKAGE="$(npm pack 2>&1 | tail -1)" -mkdir -p tmp -tar -xvzf $PACKAGE -C tmp -#mv $PACKAGE ${PACKAGE/-[0-9.]*.tgz/.tgz} -echo "$PACKAGE" \ No newline at end of file diff --git a/bin/test-package.sh b/bin/test-package.sh deleted file mode 100755 index 6663739..0000000 --- a/bin/test-package.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -set -e - -echo "Packing ..." -./bin/pack-tests.sh - -echo "Install ..." -cd ./tmp/package-tests -npm i --no-audit - -echo "Test ..." -npm test \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 44d320b..2f1a881 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4317,6 +4317,12 @@ "path-type": "^4.0.0" } }, + "docopt": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", + "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -8261,6 +8267,307 @@ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, + "node-package-tester": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/node-package-tester/-/node-package-tester-1.0.1.tgz", + "integrity": "sha512-OZFlpnklTN6LBG98Y6PMXP1NUbA9isPoHmWnbOGHQA7qTdmpoQ39y/U88LumfpoyDVoi08KNovVJhN1DxFOXcg==", + "dev": true, + "requires": { + "@babel/core": "^7.14.5", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^19.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-multi-entry": "^4.0.0", + "@rollup/plugin-node-resolve": "^13.0.0", + "docopt": "^0.6.2", + "fs-extra": "^10.0.0", + "rollup": "^2.45.2", + "semver": "^7.3.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz", + "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==", + "dev": true + }, + "@babel/core": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.5.tgz", + "integrity": "sha512-RN/AwP2DJmQTZSfiDaD+JQQ/J99KsIpOCfBE5pL+5jJSt7nI3nYGoAXZu+ffYSQ029NLs2DstZb+eR81uuARgg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz", + "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helpers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.5.tgz", + "integrity": "sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q==", + "dev": true, + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.5.tgz", + "integrity": "sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg==", + "dev": true + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz", + "integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", diff --git a/package.json b/package.json index af8ab7a..64a31c7 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "test:security": "npm audit && npm run test:lock", "test:lint": "eslint src bin tests", "test:mocha": "mocha --config .mocharc.json 'tests/**/*test.js'", - "test:package": "./bin/test-package.sh", + "test:package": "npt test -c .package-tester.json", "test:coverage": "BUILD=0 MODE=test nyc mocha --config .mocharc.json 'tests/**/*test.js'", "test:debt": "jscpd src --config .jscpd.json", "test:lock": "lockfile-lint --path package-lock.json --validate-https --allowed-hosts npm", @@ -81,6 +81,7 @@ "lockfile-lint": "^4.6.2", "mocha": "^8.0.0", "mocha-junit-reporter": "^2.0.0", + "node-package-tester": "^1.0.1", "nyc": "^15.0.0", "rollup": "^2.45.2", "semantic-release": "^17.4.2",