diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index e80f35fa6..000000000 --- a/.eslintrc +++ /dev/null @@ -1,42 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - // "parserOptions": { - // "ecmaVersion": 2018, - // "sourceType": "module", - // "ecmaFeatures": { - // "jsx": true - // }, - // "project": "./tsconfig.json" - // }, - "ignorePatterns": [ "**/*.js" ], - "root": true, - "plugins": [ - "@typescript-eslint" - ], - "extends": ["eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended"], - "rules": { - "linebreak-style": 0, - "comma-dangle": ["error", "always-multiline"], - "no-plusplus": "off", - "func-names": 0, - "import/no-unresolved": 0, - "import/extensions": 0, - "import/no-extraneous-dependencies": 0, - "no-underscore-dangle": 0, - "no-nested-ternary": 0, - "no-async-promise-executor": 0, - "radix": 0 - // unit tests only - // "max-len" : 0, - // "no-new" : 0, - // "no-unused-expressions": 0, - // "prefer-spread": 0, - // "@typescript-eslint/ban-ts-comment": 0, - // "@typescript-eslint/no-explicit-any": 0 - }, - "env": { - "es6": true, - "node": true - // "mocha": true - } -} diff --git a/.gitignore b/.gitignore index 3ee4ee8e4..16e770eba 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,5 @@ cjs/install/ cjs/lib/ esm/install/ esm/lib/ +u4-opencv4nodejs-*.tgz +examples/yolo_out_py.avi diff --git a/CHANGELOG.md b/CHANGELOG.md index e5cdfc5b2..c3a1cf50b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # changelog +## Version 7.0.0 +- Updated code to ESM. +- Introduced new exports model. +- Fixed typing errors. +- Added missing types. +- Removed typing duplication in codebase. +- Native code is now generated directly by the default node-gyp rebuild. +- GitHub actions now test all available Windows, macOS, and Linux environments. + ## Version 6.6.0 - update gcc flag to enable C++ 17 - fix code to support latest onpenCV version up to 4.9 diff --git a/README.md b/README.md index 71450c266..eb35d7dfa 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ Opencv4nodejs can be linked to a prebuild openCV 3 or 4. or can build its own openCV using [@u4/opencv-build](https://www.npmjs.com/package/@u4/opencv-build), In this case, you have to choose which version you want to link. +> Since version 7, you should be able to use this module directly without any configuration if you have OpenCV installed from your package manager (Chocolatey / Brew / apt). + ### To use your OWN openCV build **3 way to use your own openCV (Without automatic building)** @@ -54,7 +56,7 @@ OPENCV_BUILD_ROOT=~/opencv #### 1) Environment variable Define environment variable: -- `OPENCV4NODEJS_AUTOBUILD_OPENCV_VERSION`="4.6.0" +- `OPENCV4NODEJS_AUTOBUILD_OPENCV_VERSION`="4.9.0" #### 2) package.json Define an opencv4nodejs section in your package.json like: @@ -660,7 +662,7 @@ try { ## With TypeScript ``` javascript -import * as cv from '@u4/opencv4nodejs' +import cv from '@u4/opencv4nodejs' ``` Check out the TypeScript [examples](https://github.com/urielch/opencv4nodejs/tree/master/examples). diff --git a/appveyor.yml b/appveyor.yml index 2409a9c7b..7d085dadd 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,10 +15,10 @@ shallow_clone: true # what combinations to test environment: OPENCV3_N0: 3.4.16 # 2021-10-11 - #OPENCV4_N_0: 4.6.0 # 2022-06-12 - OPENCV4_N0: 4.5.5 # 2022-06-12 - OPENCV4_N1: 4.5.0 # 2021-12-30 - OPENCV4_N2: 4.4.0 # 2020-07-18 + OPENCV4_N0: 4.9.0 # 2022-06-12 + # OPENCV4_N0: 4.5.5 # 2022-06-12 + # OPENCV4_N1: 4.5.0 # 2021-12-30 + # OPENCV4_N2: 4.4.0 # 2020-07-18 # OPENCV4_N0: 4.5.3 # # OPENCV4_N1: 4.5.2 # @@ -69,8 +69,8 @@ environment: install: - cmd: choco install OpenCV -y --version %OPENCVV% - if not "%BUILD_TASK%" == "ENVS" SET OPENCV_INCLUDE_DIR=c:\tools\opencv\build\include - - if not "%BUILD_TASK%" == "ENVS" SET OPENCV_LIB_DIR=c:\tools\opencv\build\x64\vc14\lib - - if not "%BUILD_TASK%" == "ENVS" SET OPENCV_BIN_DIR=c:\tools\opencv\build\x64\vc14\bin + - if not "%BUILD_TASK%" == "ENVS" SET OPENCV_LIB_DIR=c:\tools\opencv\build\x64\vc16\lib + - if not "%BUILD_TASK%" == "ENVS" SET OPENCV_BIN_DIR=c:\tools\opencv\build\x64\vc16\bin - if not "%BUILD_TASK%" == "ENVS" SET PATH=%PATH%;%OPENCV_BIN_DIR%; - ps: Install-Product node $env:NODEV x64 # - node --version @@ -86,6 +86,7 @@ test_script: - cd c:\projects\opencv4nodejs - pnpm install --frozen-lockfile - pnpm run prepack + - pnpm run rebuild # - npm link # - build-opencv rebuild # - cd c:\projects\opencv4nodejs\ci\envs && build-opencv rebuild && pnpm install && pnpm test diff --git a/bin/install.js b/bin/install.js index 62b0ef654..91273fbd9 100755 --- a/bin/install.js +++ b/bin/install.js @@ -1,4 +1,4 @@ #!/usr/bin/env node -const compileLib = require("../install/compileLib.js"); +const compileLib = require("../cjs/install/compileLib.js"); const {argv} = process; compileLib.compileLib(argv); diff --git a/bin/install.ts b/bin/install.ts index 91882e2ea..89639188d 100755 --- a/bin/install.ts +++ b/bin/install.ts @@ -1,4 +1,4 @@ #!/usr/bin/env node -import * as compileLib from "../install/compileLib"; +import { compileLib } from "../src/install/compileLib"; const {argv} = process; -compileLib.compileLib(argv); +compileLib(argv); diff --git a/cc/dnn/dnn.cc b/cc/dnn/dnn.cc index 1dc0758ae..3903385f4 100644 --- a/cc/dnn/dnn.cc +++ b/cc/dnn/dnn.cc @@ -48,6 +48,10 @@ NAN_MODULE_INIT(Dnn::Init) { FF_CONST_TYPE(DNN_TARGET_HDDL, cv::dnn::DNN_TARGET_HDDL) #endif +#if CV_VERSION_GREATER_EQUAL(4, 8, 0) + FF_CONST_TYPE(DNN_BACKEND_WEBNN, cv::dnn::DNN_BACKEND_WEBNN) +#endif + Net::Init(target); diff --git a/cjs/package.json b/cjs/package.json new file mode 100644 index 000000000..5bbefffba --- /dev/null +++ b/cjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..184092917 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,36 @@ +// @ts-check +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommended, + { + ignores: [ + "test/**/*.ts", + "**/*.js", + "types/**/*.d.ts", + "src/lib/meta.ts", + ], + } + , + {"rules": { + "linebreak-style": 0, + "comma-dangle": ["error", "always-multiline"], + "no-plusplus": "off", + "import/no-unresolved": 0, + "import/extensions": 0, + "import/no-extraneous-dependencies": 0, + "no-async-promise-executor": 0, + "radix": 1, + "no-undef": 0, + "no-case-declarations": 0, + // unit tests only + // "max-len" : 0, + // "no-new" : 0, + // "no-unused-expressions": 0, + // "prefer-spread": 0, + // "@typescript-eslint/ban-ts-comment": 0, + // "@typescript-eslint/no-explicit-any": 0 + }}, +); diff --git a/esm/package.json b/esm/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/examples/package.json b/examples/package.json index 2103ae64e..cffc6cd6c 100644 --- a/examples/package.json +++ b/examples/package.json @@ -2,19 +2,20 @@ "name": "opencv4nodejs-examples", "version": "0.0.0", "description": "example for opencv4nodejs", - "main": "EASTTextDetection.js", + "main": "src/EASTTextDetection.js", + "type": "module", "scripts": { - "clean": "rimraf src/**/*.js src/**/*.map *.js.map *.js *.log" + "clean": "rimraf src/*.js src/**/*.js src/**/*.map *.js.map *.js *.log" }, "author": "", "license": "MIT", "dependencies": { "@types/lodash.samplesize": "^4.2.9", "@u4/opencv4nodejs": "link:..", - "axios": "^1.2.2", + "axios": "^1.6.8", "lodash.samplesize": "^4.2.0", "mri": "^1.2.0", - "p-limit": "3.1.0", + "p-limit": "5.0.0", "picocolors": "^1.0.0", "progress": "^2.0.3" }, diff --git a/examples/pnpm-lock.yaml b/examples/pnpm-lock.yaml index 22aef82cf..253d71529 100644 --- a/examples/pnpm-lock.yaml +++ b/examples/pnpm-lock.yaml @@ -12,8 +12,8 @@ dependencies: specifier: link:.. version: link:.. axios: - specifier: ^1.2.2 - version: 1.2.2 + specifier: ^1.6.8 + version: 1.6.8 lodash.samplesize: specifier: ^4.2.0 version: 4.2.0 @@ -21,8 +21,8 @@ dependencies: specifier: ^1.2.0 version: 1.2.0 p-limit: - specifier: 3.1.0 - version: 3.1.0 + specifier: 5.0.0 + version: 5.0.0 picocolors: specifier: ^1.0.0 version: 1.0.0 @@ -180,10 +180,10 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /axios@1.2.2: - resolution: {integrity: sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==} + /axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} dependencies: - follow-redirects: 1.15.2 + follow-redirects: 1.15.6 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -253,8 +253,8 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + /follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -351,11 +351,11 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} dependencies: - yocto-queue: 0.1.0 + yocto-queue: 1.0.0 dev: false /path-key@3.1.1: @@ -517,7 +517,7 @@ packages: engines: {node: '>=6'} dev: true - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} dev: false diff --git a/examples/src/AgeGender/AgeGender.ts b/examples/src/AgeGender/AgeGender.ts index 05760ad8f..e75e7dedb 100644 --- a/examples/src/AgeGender/AgeGender.ts +++ b/examples/src/AgeGender/AgeGender.ts @@ -1,9 +1,9 @@ -import fs from 'fs'; +import fs from 'node:fs'; import mri from 'mri'; +import * as openCV from '@u4/opencv4nodejs'; import { Mat, Net, Point2, Rect, Size, Vec3, VideoCapture } from '@u4/opencv4nodejs'; -import { cv, getCachedFile, wait4key } from '../utils'; -import path from 'path'; -import NetIdentifier from './NetIdentifier'; +import { cv, getCachedFile, getExampleDirname, wait4key } from '../utils.js'; +import NetIdentifier from './NetIdentifier.js'; // ported from https://github.com/spmallick/learnopencv/blob/master/AgeGender/AgeGender.py @@ -48,23 +48,28 @@ if (args.help) { } const main = async () => { - const faceProto = path.resolve(__dirname, "opencv_face_detector.pbtxt") - const faceModel = await getCachedFile(path.resolve(__dirname, "opencv_face_detector_uint8.pb"), 'https://github.com/spmallick/learnopencv/raw/master/AgeGender/opencv_face_detector_uint8.pb') + const faceProto = getExampleDirname("AgeGender", "opencv_face_detector.pbtxt") + const faceModel = await getCachedFile(getExampleDirname("AgeGender", "opencv_face_detector_uint8.pb"), 'https://github.com/spmallick/learnopencv/raw/master/AgeGender/opencv_face_detector_uint8.pb') - const ageProto = path.resolve(__dirname, "age_deploy.prototxt") + const ageProto = getExampleDirname("AgeGender", "age_deploy.prototxt") // 44 MB file - const ageModel = path.resolve(__dirname, "age_net.caffemodel") // https://www.dropbox.com/s/xfb20y596869vbb/age_net.caffemodel?dl=0 + const ageModel = getExampleDirname("AgeGender", "age_net.caffemodel") // https://www.dropbox.com/s/xfb20y596869vbb/age_net.caffemodel?dl=0 - const genderProto = path.resolve(__dirname, "gender_deploy.prototxt") + const genderProto = getExampleDirname("AgeGender", "gender_deploy.prototxt") // 44 MB file - const genderModel = path.resolve(__dirname, "gender_net.caffemodel") // https://www.dropbox.com/s/iyv483wz7ztr9gh/gender_net.caffemodel?dl=0 + const genderModel = getExampleDirname("AgeGender", "gender_net.caffemodel") // https://www.dropbox.com/s/iyv483wz7ztr9gh/gender_net.caffemodel?dl=0 const MODEL_MEAN_VALUES = new Vec3(78.4263377603, 87.7689143744, 114.895847746) // Load network if (!fs.existsSync(ageModel)) { - throw Error(`fail to read ${ageModel}`); + throw Error(`fail to read ${ageModel} please download if from https://www.dropbox.com/s/xfb20y596869vbb/age_net.caffemodel?dl=0`); } + + if (!fs.existsSync(genderModel)) { + throw Error(`fail to read ${genderModel} please download if from https://www.dropbox.com/s/iyv483wz7ztr9gh/gender_net.caffemodel?dl=0`); + } + if (!fs.existsSync(ageProto)) { throw Error(`fail to read ${ageProto}`); } diff --git a/examples/src/AgeGender/NetIdentifier.ts b/examples/src/AgeGender/NetIdentifier.ts index 5afada8d8..6546924fb 100644 --- a/examples/src/AgeGender/NetIdentifier.ts +++ b/examples/src/AgeGender/NetIdentifier.ts @@ -1,6 +1,5 @@ import cv, { Net, Mat } from "@u4/opencv4nodejs"; - const getMaxIndex = (scores: number[]): number => { let max = Number.MIN_VALUE; let classId = -1; diff --git a/examples/src/EASTTextDetection.ts b/examples/src/EASTTextDetection.ts index 9b884423e..d0815ed65 100644 --- a/examples/src/EASTTextDetection.ts +++ b/examples/src/EASTTextDetection.ts @@ -1,6 +1,6 @@ -import path from 'path'; -import { cv, drawBlueRect, getCachedFile, getResourcePath, wait4key } from './utils'; +import path from 'node:path'; import type { Mat, Rect } from '@u4/opencv4nodejs'; +import { cv, drawBlueRect, getCachedFile, getResourcePath, wait4key } from './utils.js'; /** * Text detection simple code example. @@ -45,7 +45,7 @@ function decode(scores: Mat, geometry: Mat, confThreshold = MIN_CONFIDENCE) { startX, startY, endX - startX, - endY - startY + endY - startY, )); confidences.push(score); } @@ -81,7 +81,8 @@ async function detection(modelPath: string, imgAbsPath: string): Promise { const indices = cv.NMSBoxes( boxes, confidences, - MIN_CONFIDENCE, NMS_THRESHOLD + MIN_CONFIDENCE, + NMS_THRESHOLD, ); indices.forEach((i) => { @@ -90,7 +91,7 @@ async function detection(modelPath: string, imgAbsPath: string): Promise { rect.x * widthRatio, rect.y * heightRatio, rect.width * widthRatio, - rect.height * heightRatio + rect.height * heightRatio, ) drawBlueRect(img, imgRect); }); diff --git a/examples/src/OCRTools.ts b/examples/src/OCRTools.ts index 2aea54bec..835d2ce45 100644 --- a/examples/src/OCRTools.ts +++ b/examples/src/OCRTools.ts @@ -1,6 +1,6 @@ -import fs from 'fs'; +import fs from 'node:fs'; import { Mat } from '@u4/opencv4nodejs'; -import { cv } from './utils'; +import { cv } from './utils.js'; // a - z export const lccs: Array = Array(26).fill(97).map((v, i) => v + i).map(ascii => String.fromCharCode(ascii)); @@ -13,7 +13,7 @@ const getBoundingRect = (component: number[]) => new cv.Rect( component[cv.CC_STAT_LEFT], component[cv.CC_STAT_TOP], component[cv.CC_STAT_WIDTH], - component[cv.CC_STAT_HEIGHT] + component[cv.CC_STAT_HEIGHT], ); const getLetterBoundingRect = (img: Mat, isIorJ?: boolean) => { @@ -46,7 +46,7 @@ const getLetterBoundingRect = (img: Mat, isIorJ?: boolean) => { xLeft, dotComponent[cv.CC_STAT_TOP], Math.max(letterRect.width, dotRectXRight - xLeft), - (letterRectYBottom - dotComponent[cv.CC_STAT_TOP]) + (letterRectYBottom - dotComponent[cv.CC_STAT_TOP]), ); } @@ -65,7 +65,7 @@ export const centerLetterInImage = (img: Mat, isIorJ?: boolean) => { offX, offY, rect.width, - rect.height + rect.height, ); const centered = new cv.Mat(img.rows, img.cols, img.type, [255, 255, 255]); @@ -78,7 +78,7 @@ export const saveConfusionMatrix = ( testDataFiles: string[][], predict: (mat: Mat, isIorJ: boolean) => number, numTestImagesPerClass: number, - outputFile: string + outputFile: string, ) => { const confusionMat = new cv.Mat(26, 26, cv.CV_64F, 0); testDataFiles.forEach((files: string[], label: number) => { @@ -91,7 +91,7 @@ export const saveConfusionMatrix = ( const confusionMatMatrix = [[''].concat(lccs)].concat( confusionMat.div(numTestImagesPerClass) - .getDataAsArray().map((col: number[], l: number) => [lccs[l]].concat(col.map((v: number) => '' + Math.round(v * 100) / 100))) + .getDataAsArray().map((col: number[], l: number) => [lccs[l]].concat(col.map((v: number) => '' + Math.round(v * 100) / 100))), ); const csvRows = confusionMatMatrix.map(cols => cols.join(';')); diff --git a/examples/src/ObjectDetection-YOLO/object_detection_yolo.ts b/examples/src/ObjectDetection-YOLO/object_detection_yolo.ts index d37f95e98..46a692065 100644 --- a/examples/src/ObjectDetection-YOLO/object_detection_yolo.ts +++ b/examples/src/ObjectDetection-YOLO/object_detection_yolo.ts @@ -1,9 +1,8 @@ -import { assert } from 'console'; -import fs from 'fs'; +import fs from 'node:fs'; +import { assert } from 'node:console'; import mri from 'mri'; import { Mat, Net, Point2, Rect, Size, Vec3, VideoCapture, VideoWriter } from '@u4/opencv4nodejs'; -import { cv, getCachedFile } from '../utils'; -import path from 'path'; +import { cv, getCachedFile, getExampleDirname } from '../utils.js'; // ported from https://github.com/spmallick/learnopencv/blob/master/ObjectDetection-YOLO/object_detection_yolo.py @@ -18,22 +17,23 @@ const args = mri(process.argv.slice(2), { default: { device: 'cpu' }, alias: { h if (args.help) { console.log('Object Detection using YOLO in OPENCV'); - console.log('--device Device to perform inference on \'cpu\' or \'gpu\'. (default is cpu)'); + console.log('--device Device to perform inference on \'cpu\' or \'cuda\' or \'opencl\'. (default is cpu)'); console.log('--image Path to image file.'); console.log('--video Path to video file.'); - process.exit(0); + console.log('OpenCV getBuildInformation:', cv.getBuildInformation()); + process.exit(0); } const device = args.device || 'cpu'; async function main() { // # Load names of classes - const classesFile = path.resolve(__dirname, "coco.names"); + const classesFile = getExampleDirname("ObjectDetection-YOLO", "coco.names"); // classes = None const classes = fs.readFileSync(classesFile, 'utf8').split(/[\r\n]+/); // Give the configuration and weight files for the model and load the network using them. - const modelConfiguration = path.resolve(__dirname, "yolov3.cfg") + const modelConfiguration = getExampleDirname("ObjectDetection-YOLO", "yolov3.cfg") const modelWeights = await getCachedFile("yolov3.weights", 'https://pjreddie.com/media/files/yolov3.weights') const net: Net = cv.readNetFromDarknet(modelConfiguration, modelWeights) @@ -42,7 +42,11 @@ async function main() { net.setPreferableBackend(cv.DNN_BACKEND_OPENCV) net.setPreferableTarget(cv.DNN_TARGET_CPU) console.log('Using CPU device.') - } else if (device == 'gpu') { + } else if (device == 'opencl' ) { + net.setPreferableBackend(cv.DNN_BACKEND_OPENCV) + net.setPreferableTarget(cv.DNN_TARGET_OPENCL) + console.log('Using GPU device.') + } else if (device == 'gpu' || device == 'cuda' ) { net.setPreferableBackend(cv.DNN_BACKEND_CUDA) net.setPreferableTarget(cv.DNN_TARGET_CUDA) console.log('Using GPU device.') diff --git a/examples/src/YOLOv3-Training-Snowman-Detector/getDataFromOpenImages_snowman.ts b/examples/src/YOLOv3-Training-Snowman-Detector/getDataFromOpenImages_snowman.ts index cd5fa6be7..961113566 100644 --- a/examples/src/YOLOv3-Training-Snowman-Detector/getDataFromOpenImages_snowman.ts +++ b/examples/src/YOLOv3-Training-Snowman-Detector/getDataFromOpenImages_snowman.ts @@ -1,9 +1,8 @@ -import { getCachedFile } from "../utils"; -import fs from 'fs'; -import path from 'path'; -// import rimraf from 'rimraf'; -import readline from 'readline'; +import fs from 'node:fs'; +import path from 'node:path'; +import readline from 'node:readline'; import pLimit from 'p-limit'; +import { getCachedFile, getExampleDirname } from "../utils.js"; /** * imported from https://github.com/spmallick/learnopencv/blob/master/YOLOv3-Training-Snowman-Detector/getDataFromOpenImages_snowman.py @@ -14,7 +13,7 @@ async function getDataFromOpenImages_snowman() { const runMode = "train"; const classes = ["Snowman"]; - const dataPath = __dirname; // "../../data/dnn/openimages"; + const dataPath = getExampleDirname("YOLOv3-Training-Snowman-Detector"); // "../../data/dnn/openimages"; const JPEGImages = path.join(dataPath, 'JPEGImages'); const labels = path.join(dataPath, 'labels'); diff --git a/examples/src/YOLOv3-Training-Snowman-Detector/object_detection_yolo.ts b/examples/src/YOLOv3-Training-Snowman-Detector/object_detection_yolo.ts index 93e45ea65..c62bc4822 100644 --- a/examples/src/YOLOv3-Training-Snowman-Detector/object_detection_yolo.ts +++ b/examples/src/YOLOv3-Training-Snowman-Detector/object_detection_yolo.ts @@ -1,11 +1,10 @@ // # This code is written at BigVision LLC. It is based on the OpenCV project. It is subject to the license terms in the LICENSE file found in this distribution and at http://opencv.org/license.html +import fs from "node:fs"; +import assert from 'node:assert'; import mri from "mri"; -import fs from "fs"; -import path from "path"; -import assert from 'assert'; -import { cv } from "../utils"; import { Net, Mat, VideoCapture, VideoWriter, Size, Point2, Vec3, Rect } from '@u4/opencv4nodejs'; +import { cv, getExampleDirname } from "../utils.js"; // # Usage example: python3 object_detection_yolo.py --video=run.mp4 // # python3 object_detection_yolo.py --image=bird.jpg @@ -18,13 +17,13 @@ import { Net, Mat, VideoCapture, VideoWriter, Size, Point2, Vec3, Rect } from '@ // Initialize the parameters const conf = { - confThreshold: 0.5,// #Confidence threshold - nmsThreshold: 0.4,// #Non-maximum suppression threshold + confThreshold: 0.5, // #Confidence threshold + nmsThreshold: 0.4, // #Non-maximum suppression threshold } -const inpWidth = 416;// #608 #Width of network's input image -const inpHeight = 416;// #608 #Height of network's input image +const inpWidth = 416; // #608 #Width of network's input image +const inpHeight = 416; // #608 #Height of network's input image -const args: { image?: string, video?: string, device?: string, help?: boolean } = mri(process.argv.slice(2), { default: { device: 'cpu' }, alias: { h: 'help' } }) as any; +const args: { image?: string, video?: string, device?: string, help?: boolean } = mri(process.argv.slice(2), { default: { device: 'cpu' }, alias: { h: 'help' } }); if (args.help) { console.log('Object Detection using YOLO in OPENCV'); @@ -41,8 +40,8 @@ const classes = fs.readFileSync(classesFile, { encoding: 'utf8' }).trim().split( // Give the configuration and weight files for the model and load the network using them. -const modelConfiguration = path.join(__dirname, 'darknet-yolov3.cfg'); -const modelWeights = path.join(__dirname, 'weights', 'darknet-yolov3_final.weights'); // "/data-ssd/sunita/snowman/darknet-yolov3_final.weights"; +const modelConfiguration = getExampleDirname("YOLOv3-Training-Snowman-Detector", 'darknet-yolov3.cfg'); +const modelWeights = getExampleDirname("YOLOv3-Training-Snowman-Detector", 'weights', 'darknet-yolov3_final.weights'); // "/data-ssd/sunita/snowman/darknet-yolov3_final.weights"; const net = cv.readNetFromDarknet(modelConfiguration, modelWeights) if (args.device == "cpu") { diff --git a/examples/src/YOLOv3-Training-Snowman-Detector/splitTrainAndTest.ts b/examples/src/YOLOv3-Training-Snowman-Detector/splitTrainAndTest.ts index 5794a6c28..036eba87b 100644 --- a/examples/src/YOLOv3-Training-Snowman-Detector/splitTrainAndTest.ts +++ b/examples/src/YOLOv3-Training-Snowman-Detector/splitTrainAndTest.ts @@ -1,5 +1,5 @@ -import fs from 'fs'; -import path from 'path'; +import fs from 'node:fs'; +import path from 'node:path'; import samplesize from 'lodash.samplesize'; import pc from 'picocolors'; diff --git a/examples/src/applyColorMap.ts b/examples/src/applyColorMap.ts index 629543f99..c11812141 100644 --- a/examples/src/applyColorMap.ts +++ b/examples/src/applyColorMap.ts @@ -1,6 +1,6 @@ // using default import import cv from '@u4/opencv4nodejs'; -import { cv_imshow, cv_setWindowProperty, getResourcePath, wait4key } from './utils'; +import { cv_imshow, cv_setWindowProperty, getResourcePath, wait4key } from './utils.js'; export async function applyColorMap() { const file = getResourcePath('Lenna.png'); diff --git a/examples/src/asyncMatchFeatures.ts b/examples/src/asyncMatchFeatures.ts index 3baed5d47..419801d90 100644 --- a/examples/src/asyncMatchFeatures.ts +++ b/examples/src/asyncMatchFeatures.ts @@ -1,10 +1,10 @@ -import { cv, getResourcePath, wait4key } from './utils'; import { FeatureDetector, Mat } from '@u4/opencv4nodejs'; +import { cv, getResourcePath, wait4key } from './utils.js'; const detectAndComputeAsync = (det: FeatureDetector, img: Mat) => det.detectAsync(img) .then(kps => det.computeAsync(img, kps) - .then(desc => ({ kps, desc })) + .then(desc => ({ kps, desc })), ); const img1 = cv.imread(getResourcePath('s0.jpg')); @@ -55,14 +55,14 @@ async function asyncMatch() { .then(allResults => cv.matchBruteForceAsync( allResults[0].desc, - allResults[1].desc + allResults[1].desc, ) .then(matches => ({ matches, kps1: allResults[0].kps, kps2: allResults[1].kps, - })) - ) + })), + ), ); for (let i = 0; i < promises.length; i++) { try { @@ -72,7 +72,7 @@ async function asyncMatch() { img2, result.kps1, result.kps2, - result.matches + result.matches, ); const title = `Detector ${detectorNames[i]}` cv.imshow(title, drawMatchesImg); diff --git a/examples/src/data/dnnTensorflowObjectDetectionClassNames.ts b/examples/src/data/dnnTensorflowObjectDetectionClassNames.ts index 0fe67757d..b1c083b8b 100644 --- a/examples/src/data/dnnTensorflowObjectDetectionClassNames.ts +++ b/examples/src/data/dnnTensorflowObjectDetectionClassNames.ts @@ -1,4 +1,4 @@ -export = { +const dnnTensorflowObjectDetectionClassNames = { 0: "background", 1: "person", 2: "bicycle", @@ -80,4 +80,6 @@ export = { 88: "teddy bear", 89: "hair drier", 90: "toothbrush", -} as {[key: number]: string}; \ No newline at end of file +} as {[key: number]: string}; + +export default dnnTensorflowObjectDetectionClassNames; \ No newline at end of file diff --git a/examples/src/dnn/loadFacenet.ts b/examples/src/dnn/loadFacenet.ts index dc150b379..a00590c64 100644 --- a/examples/src/dnn/loadFacenet.ts +++ b/examples/src/dnn/loadFacenet.ts @@ -1,6 +1,6 @@ -import fs from 'fs'; -import path from 'path'; -import { cv, getResourcePath } from '../utils'; +import fs from 'node:fs'; +import path from 'node:path'; +import { cv, getResourcePath } from '../utils.js'; export default function () { const modelPath = path.resolve(path.join(getResourcePath('dnn'), 'facenet')); diff --git a/examples/src/dnn/ssdUtils.ts b/examples/src/dnn/ssdUtils.ts index 888c07126..e697df8c5 100644 --- a/examples/src/dnn/ssdUtils.ts +++ b/examples/src/dnn/ssdUtils.ts @@ -1,5 +1,5 @@ import type { Mat, Rect } from '@u4/opencv4nodejs'; -import { cv } from '../utils'; +import { cv } from '../utils.js'; export type Prediction = { classLabel: number @@ -14,17 +14,17 @@ export function extractResults(outputBlob: Mat, imgDimensions: { rows: number, c const confidence = outputBlob.at(i, 2); const bottomLeft = new cv.Point2( outputBlob.at(i, 3) * imgDimensions.cols, - outputBlob.at(i, 6) * imgDimensions.rows + outputBlob.at(i, 6) * imgDimensions.rows, ); const topRight = new cv.Point2( outputBlob.at(i, 5) * imgDimensions.cols, - outputBlob.at(i, 4) * imgDimensions.rows + outputBlob.at(i, 4) * imgDimensions.rows, ); const rect = new cv.Rect( bottomLeft.x, topRight.y, topRight.x - bottomLeft.x, - bottomLeft.y - topRight.y + bottomLeft.y - topRight.y, ); return ({ classLabel, confidence, rect }); diff --git a/examples/src/dnnDarknetYOLORealTimeObjectDetection.ts b/examples/src/dnnDarknetYOLORealTimeObjectDetection.ts index 1e93769ec..6ad9533c9 100644 --- a/examples/src/dnnDarknetYOLORealTimeObjectDetection.ts +++ b/examples/src/dnnDarknetYOLORealTimeObjectDetection.ts @@ -4,7 +4,7 @@ */ import fs from "fs"; import { Mat, Net, Rect } from '@u4/opencv4nodejs'; -import { cv, getCachedFile, runVideoDetection } from "./utils"; +import { cv, getCachedFile, runVideoDetection } from './utils.js'; class dnnDarknetYOLORealTimeObjectDetection { // set webcam port @@ -62,7 +62,7 @@ class dnnDarknetYOLORealTimeObjectDetection { boxes, confidences, this.minConfidence, - this.nmsThreshold + this.nmsThreshold, ); indices.forEach(i => { diff --git a/examples/src/dnnSSDCoco.ts b/examples/src/dnnSSDCoco.ts index 0d0bdd711..caa53cacc 100644 --- a/examples/src/dnnSSDCoco.ts +++ b/examples/src/dnnSSDCoco.ts @@ -1,8 +1,8 @@ -import { getResourcePath, drawRect, wait4key } from './utils'; -import fs from 'fs'; -import path from 'path'; -import { classNames } from './data/dnnCocoClassNames'; -import { extractResults, Prediction } from './dnn/ssdUtils'; +import fs from 'node:fs'; +import path from 'node:path'; +import { getResourcePath, drawRect, wait4key } from './utils.js'; +import { classNames } from './data/dnnCocoClassNames.js'; +import { extractResults, Prediction } from './dnn/ssdUtils.js'; import {cv, Mat, Net, Vec3 } from '@u4/opencv4nodejs'; if (!cv.xmodules || !cv.xmodules.dnn) { @@ -59,7 +59,7 @@ const runDetectDishesExample = async (net: Net) => { fontSize: 0.8, color: classColors[className], })), - alpha + alpha, ); Object.keys(classColors).forEach((className) => { diff --git a/examples/src/dnnTensorflowInception.ts b/examples/src/dnnTensorflowInception.ts index ff6a08194..ffd7c1e87 100644 --- a/examples/src/dnnTensorflowInception.ts +++ b/examples/src/dnnTensorflowInception.ts @@ -1,7 +1,7 @@ -import { cv, getResourcePath, wait4key } from './utils'; -import fs from 'fs'; -import path from 'path'; +import fs from 'node:fs'; +import path from 'node:path'; import { Mat } from '@u4/opencv4nodejs'; +import { cv, getResourcePath, wait4key } from './utils.js'; async function main() { if (!cv.xmodules || !cv.xmodules.dnn) { @@ -102,7 +102,7 @@ async function main() { img, { x: 0, y: 0 }, predictions.map(p => ({ text: p, fontSize: 0.5, thickness: 1 })), - alpha + alpha, ); cv.imshow('img', img); await wait4key(); diff --git a/examples/src/dnnTensorflowObjectDetection.ts b/examples/src/dnnTensorflowObjectDetection.ts index 57de1c381..1f8167ee6 100644 --- a/examples/src/dnnTensorflowObjectDetection.ts +++ b/examples/src/dnnTensorflowObjectDetection.ts @@ -1,13 +1,12 @@ - /** * Please refer to the python version of "ExploreOpencvDnn" by Saumya Shovan Roy. * For more detail: https://github.com/rdeepc/ExploreOpencvDnn */ -import fs from "fs"; -import path from "path"; +import fs from "node:fs"; +import path from "node:path"; import { Mat } from '@u4/opencv4nodejs'; -import classNames from "./data/dnnTensorflowObjectDetectionClassNames"; -import { cv, getCachedFile, getResourcePath, runVideoDetection } from "./utils"; +import classNames from "./data/dnnTensorflowObjectDetectionClassNames.js"; +import { cv, getCachedFile, getResourcePath, runVideoDetection } from './utils.js'; async function main() { if (!cv.xmodules || !cv.xmodules.dnn) { diff --git a/examples/src/faceDetect/asyncFaceDetection.ts b/examples/src/faceDetect/asyncFaceDetection.ts index a5376bdb7..03974711f 100644 --- a/examples/src/faceDetect/asyncFaceDetection.ts +++ b/examples/src/faceDetect/asyncFaceDetection.ts @@ -1,4 +1,4 @@ -import { cv, getResourcePath, drawBlueRect, wait4key } from '../utils'; +import { cv, getResourcePath, drawBlueRect, wait4key } from '../utils.js'; export async function asyncFaceDetection() { const classifier = new cv.CascadeClassifier(cv.HAAR_FRONTALFACE_ALT2); diff --git a/examples/src/faceDetect/commons.ts b/examples/src/faceDetect/commons.ts index 028afd536..c9f1a716d 100644 --- a/examples/src/faceDetect/commons.ts +++ b/examples/src/faceDetect/commons.ts @@ -1,6 +1,6 @@ -import { cv, grabFrames, drawBlueRect } from '../utils'; -import loadFacenet from '../dnn/loadFacenet'; -import { extractResults } from '../dnn/ssdUtils'; +import { cv, grabFrames, drawBlueRect } from '../utils.js'; +import loadFacenet from '../dnn/loadFacenet.js'; +import { extractResults } from '../dnn/ssdUtils.js'; import { Mat, Net, Rect } from '@u4/opencv4nodejs'; /** diff --git a/examples/src/faceDetect/faceAndEyeDetection.ts b/examples/src/faceDetect/faceAndEyeDetection.ts index b5e94b939..fd668478e 100644 --- a/examples/src/faceDetect/faceAndEyeDetection.ts +++ b/examples/src/faceDetect/faceAndEyeDetection.ts @@ -1,6 +1,5 @@ import { Rect } from '@u4/opencv4nodejs'; -import { cv, getResourcePath, drawBlueRect, drawGreenRect, wait4key } from '../utils'; - +import { cv, getResourcePath, drawBlueRect, drawGreenRect, wait4key } from '../utils.js'; export async function faceAndEyeDetection() { diff --git a/examples/src/faceDetect/faceDetection.ts b/examples/src/faceDetect/faceDetection.ts index f5f08b6fd..158c7508c 100644 --- a/examples/src/faceDetect/faceDetection.ts +++ b/examples/src/faceDetect/faceDetection.ts @@ -1,4 +1,4 @@ -import { cv, getResourcePath, drawBlueRect, wait4key } from '../utils'; +import { cv, getResourcePath, drawBlueRect, wait4key } from '../utils.js'; export async function faceDetection() { const image = cv.imread(getResourcePath('got.jpg')); diff --git a/examples/src/faceDetect/facenetSSD.ts b/examples/src/faceDetect/facenetSSD.ts index c19446a0e..f891c9a0a 100644 --- a/examples/src/faceDetect/facenetSSD.ts +++ b/examples/src/faceDetect/facenetSSD.ts @@ -1,5 +1,5 @@ -import { cv, getResourcePath, wait4key } from '../utils'; -import { makeRunDetectFacenetSSD } from './commons'; +import { cv, getResourcePath, wait4key } from '../utils.js'; +import { makeRunDetectFacenetSSD } from './commons.js'; export async function facenetSSD() { const runDetection = makeRunDetectFacenetSSD(); diff --git a/examples/src/faceDetect/videoFaceDetectionCpu.ts b/examples/src/faceDetect/videoFaceDetectionCpu.ts index a78bcb13e..2014c8eb0 100644 --- a/examples/src/faceDetect/videoFaceDetectionCpu.ts +++ b/examples/src/faceDetect/videoFaceDetectionCpu.ts @@ -1,6 +1,6 @@ import { Mat } from '@u4/opencv4nodejs'; -import { cv, getResourcePath } from '../utils'; -import { runVideoFaceDetection } from './commons'; +import { cv, getResourcePath } from '../utils.js'; +import { runVideoFaceDetection } from './commons.js'; const videoFile = getResourcePath('people.mp4'); diff --git a/examples/src/faceDetect/videoFaceDetectionCpuAsync.ts b/examples/src/faceDetect/videoFaceDetectionCpuAsync.ts index a3c7c2212..37704f44e 100644 --- a/examples/src/faceDetect/videoFaceDetectionCpuAsync.ts +++ b/examples/src/faceDetect/videoFaceDetectionCpuAsync.ts @@ -1,6 +1,6 @@ import type { Mat, Rect } from '@u4/opencv4nodejs'; -import { cv, getResourcePath } from '../utils'; -import { runVideoFaceDetectionAsync } from './commons'; +import { cv, getResourcePath } from '../utils.js'; +import { runVideoFaceDetectionAsync } from './commons.js'; const videoFile = getResourcePath('people.mp4'); diff --git a/examples/src/faceDetect/videoFaceDetectionGpu.ts b/examples/src/faceDetect/videoFaceDetectionGpu.ts index 29bc2d27a..07f6b25b3 100644 --- a/examples/src/faceDetect/videoFaceDetectionGpu.ts +++ b/examples/src/faceDetect/videoFaceDetectionGpu.ts @@ -1,6 +1,7 @@ import { Mat } from '@u4/opencv4nodejs'; -import { cv, getResourcePath } from '../utils'; -import { runVideoFaceDetection } from './commons'; +import { cv, getResourcePath } from '../utils.js'; +import { runVideoFaceDetection } from './commons.js'; + if (cv.version.minor === 4) { console.log('Warning: It seems like opencv 3.4 does not run the opencl version of detectMultiScale.'); } diff --git a/examples/src/faceDetect/videoFaceDetectionGpuAsync.ts b/examples/src/faceDetect/videoFaceDetectionGpuAsync.ts index e94c4d80a..209a30e83 100644 --- a/examples/src/faceDetect/videoFaceDetectionGpuAsync.ts +++ b/examples/src/faceDetect/videoFaceDetectionGpuAsync.ts @@ -1,6 +1,7 @@ import { Mat } from '@u4/opencv4nodejs'; -import { cv, getResourcePath } from '../utils'; -import { runVideoFaceDetectionAsync } from './commons'; +import { cv, getResourcePath } from '../utils.js'; +import { runVideoFaceDetectionAsync } from './commons.js'; + if (cv.version.minor === 4) { console.log('Warning: It seems like opencv 3.4 does not run the opencl version of detectMultiScale.'); } diff --git a/examples/src/faceDetect/webcamFaceDetectionCpu.ts b/examples/src/faceDetect/webcamFaceDetectionCpu.ts index d9fe1c103..87f207aa6 100644 --- a/examples/src/faceDetect/webcamFaceDetectionCpu.ts +++ b/examples/src/faceDetect/webcamFaceDetectionCpu.ts @@ -1,6 +1,6 @@ import { Mat } from '@u4/opencv4nodejs'; -import { cv } from '../utils'; -import { runVideoFaceDetection } from './commons'; +import { cv } from '../utils.js'; +import { runVideoFaceDetection } from './commons.js'; const classifier = new cv.CascadeClassifier(cv.HAAR_FRONTALFACE_ALT2); diff --git a/examples/src/faceDetect/webcamFaceDetectionGpu.ts b/examples/src/faceDetect/webcamFaceDetectionGpu.ts index ee5db7058..609e765ae 100644 --- a/examples/src/faceDetect/webcamFaceDetectionGpu.ts +++ b/examples/src/faceDetect/webcamFaceDetectionGpu.ts @@ -1,6 +1,6 @@ import { Mat } from '@u4/opencv4nodejs'; -import { cv } from '../utils'; -import { runVideoFaceDetection } from './commons'; +import { cv } from '../utils.js'; +import { runVideoFaceDetection } from './commons.js'; const classifier = new cv.CascadeClassifier(cv.HAAR_FRONTALFACE_ALT2); diff --git a/examples/src/faceDetect/webcamFacenetSSD.ts b/examples/src/faceDetect/webcamFacenetSSD.ts index 04d2a00da..be1c11b66 100644 --- a/examples/src/faceDetect/webcamFacenetSSD.ts +++ b/examples/src/faceDetect/webcamFacenetSSD.ts @@ -1,6 +1,6 @@ import { Mat } from '@u4/opencv4nodejs'; -import { cv, grabFrames } from '../utils'; -import { makeRunDetectFacenetSSD } from './commons'; +import { cv, grabFrames } from '../utils.js'; +import { makeRunDetectFacenetSSD } from './commons.js'; const runDetection = makeRunDetectFacenetSSD(); diff --git a/examples/src/faceRecognition0.ts b/examples/src/faceRecognition0.ts index c2acf7c90..c4f1f702b 100644 --- a/examples/src/faceRecognition0.ts +++ b/examples/src/faceRecognition0.ts @@ -1,7 +1,7 @@ -import fs from 'fs'; -import path from 'path'; +import fs from 'node:fs'; +import path from 'node:path'; import { FaceRecognizer, Mat } from '@u4/opencv4nodejs'; -import { cv, getResourcePath, wait4key } from './utils'; +import { cv, getResourcePath, wait4key } from './utils.js'; async function main() { if (!cv.xmodules || !cv.xmodules.face) { diff --git a/examples/src/faceRecognition1.ts b/examples/src/faceRecognition1.ts index 37ed243e1..21f335355 100644 --- a/examples/src/faceRecognition1.ts +++ b/examples/src/faceRecognition1.ts @@ -1,7 +1,7 @@ -import fs from 'fs'; -import path from 'path'; +import fs from 'node:fs'; +import path from 'node:path'; import cv, { Mat } from '@u4/opencv4nodejs'; -import { getResourcePath, wait4key } from './utils'; +import { getResourcePath, wait4key } from './utils.js'; async function main() { if (!cv.xmodules || !cv.xmodules.face) { @@ -57,7 +57,7 @@ async function main() { const rect = cv.drawDetection( twoFacesImg, faceRect, - { color: new cv.Vec3(255, 0, 0), segmentFraction: 4 } + { color: new cv.Vec3(255, 0, 0), segmentFraction: 4 }, ); const alpha = 0.4; @@ -65,7 +65,7 @@ async function main() { twoFacesImg, new cv.Point2(rect.x, rect.y + rect.height + 10), [{ text: who }], - alpha + alpha, ); }); diff --git a/examples/src/facemark.ts b/examples/src/facemark.ts index 397f76b0f..6f65cf542 100644 --- a/examples/src/facemark.ts +++ b/examples/src/facemark.ts @@ -1,6 +1,5 @@ import { Mat } from '@u4/opencv4nodejs'; -import { cv, getCachedFile, getResourcePath, wait4key } from './utils'; - +import { cv, getCachedFile, getResourcePath, wait4key } from './utils.js'; async function main() { if (!cv.xmodules || !cv.xmodules.face) { diff --git a/examples/src/getStructureSimilarity.ts b/examples/src/getStructureSimilarity.ts index cb3762524..ce2c910ea 100644 --- a/examples/src/getStructureSimilarity.ts +++ b/examples/src/getStructureSimilarity.ts @@ -1,5 +1,5 @@ import { CV_32F, imread, Mat, Size } from '@u4/opencv4nodejs'; -import { getResourcePath } from './utils'; +import { getResourcePath } from './utils.js'; // Ported from https://docs.opencv.org/2.4/doc/tutorials/gpu/gpu-basics-similarity/gpu-basics-similarity.html function getStructureSimilarity(i1: Mat, i2: Mat): number { diff --git a/examples/src/guidedFilter.ts b/examples/src/guidedFilter.ts index 05be337ea..23306cd28 100644 --- a/examples/src/guidedFilter.ts +++ b/examples/src/guidedFilter.ts @@ -1,5 +1,4 @@ -import { cv, getResourcePath, wait4key } from './utils'; - +import { cv, getResourcePath, wait4key } from './utils.js'; export async function guidedFilter() { const image = cv.imread(getResourcePath('Lenna.png')); diff --git a/examples/src/handGestureRecognition0.ts b/examples/src/handGestureRecognition0.ts index 2c6834fd4..3785a7045 100644 --- a/examples/src/handGestureRecognition0.ts +++ b/examples/src/handGestureRecognition0.ts @@ -1,8 +1,7 @@ -import path from 'path'; +import path from 'node:path'; import type { Contour, Mat } from '@u4/opencv4nodejs'; import { Point2 } from '@u4/opencv4nodejs'; -import { cv, getResourcePath } from './utils'; -import { grabFrames } from './utils'; +import { cv, getResourcePath, grabFrames } from './utils.js'; interface PointWithIdx { pt: Point2; @@ -75,7 +74,7 @@ const getRoughHull = (contour: Contour, maxDist: number) => { const center: Point2 = getCenterPt(pointGroup.map(ptWithIdx => ptWithIdx.pt)); // sort ascending by distance to center return pointGroup.sort( - (ptWithIdx1, ptWithIdx2) => ptDist(ptWithIdx1.pt, center) - ptDist(ptWithIdx2.pt, center) + (ptWithIdx1, ptWithIdx2) => ptDist(ptWithIdx1.pt, center) - ptDist(ptWithIdx2.pt, center), )[0]; }; const pointGroups = Array.from(pointsByLabel.values()); @@ -160,7 +159,7 @@ grabFrames(video, delay, (frame) => { [handContour.getPoints()], 0, blue, - { thickness: 6 } + { thickness: 6 }, ); // draw points and vertices @@ -168,20 +167,20 @@ grabFrames(video, delay, (frame) => { resizedImg.drawLine( v.pt, v.d1, - { color: green, thickness: 2 } + { color: green, thickness: 2 }, ); resizedImg.drawLine( v.pt, v.d2, - { color: green, thickness: 2 } + { color: green, thickness: 2 }, ); resizedImg.drawEllipse( new cv.RotatedRect(v.pt, new cv.Size(20, 20), 0), - { color: red, thickness: 2 } + { color: red, thickness: 2 }, ); result.drawEllipse( new cv.RotatedRect(v.pt, new cv.Size(20, 20), 0), - { color: red, thickness: 2 } + { color: red, thickness: 2 }, ); } @@ -190,7 +189,7 @@ grabFrames(video, delay, (frame) => { result.drawRectangle( new cv.Point2(10, 10), new cv.Point2(70, 70), - { color: green, thickness: 2 } + { color: green, thickness: 2 }, ); const fontScale = 2; @@ -199,7 +198,7 @@ grabFrames(video, delay, (frame) => { new cv.Point2(20, 60), cv.FONT_ITALIC, fontScale, - { color: green, thickness: 2 } + { color: green, thickness: 2 }, ); const { rows, cols } = result; diff --git a/examples/src/machineLearningOCR.ts b/examples/src/machineLearningOCR.ts index 6ac2b6415..fefe8f98b 100644 --- a/examples/src/machineLearningOCR.ts +++ b/examples/src/machineLearningOCR.ts @@ -1,14 +1,13 @@ -import path from 'path'; -import fs from 'fs'; -import { cv, getResourcePath } from './utils'; -import { lccs, centerLetterInImage, saveConfusionMatrix } from './OCRTools'; +import fs from 'node:fs'; +import path from 'node:path'; import { Mat } from '@u4/opencv4nodejs'; +import { cv, getResourcePath } from './utils.js'; +import { lccs, centerLetterInImage, saveConfusionMatrix } from './OCRTools.js'; const outPath = getResourcePath('ocr'); const trainDataPath = path.join(outPath, 'traindata'); const testDataPath = path.join(outPath, 'testdata'); - const SVMFile = 'lcletters.xml'; const hog = new cv.HOGDescriptor({ @@ -67,7 +66,7 @@ const trainSVM = (trainDataFiles: string[][], isAuto = false) => { const trainData = new cv.TrainData( new cv.Mat(samples, cv.CV_32F), cv.ml.ROW_SAMPLE, - new cv.Mat([labels], cv.CV_32S) + new cv.Mat([labels], cv.CV_32S), ); svm[isAuto ? 'trainAuto' : 'train'](trainData); }; @@ -113,10 +112,9 @@ console.log('prediction result:'); errs.forEach((err, l) => console.log(lccs[l], err, 1 - (err / numTestImagesPerClass))); console.log('average: ', 1 - (errs.reduce((e1, e2) => e1 + e2) / (lccs.length * numTestImagesPerClass))); - saveConfusionMatrix( testDataFiles, (img, isIorJ) => svm.predict(computeHOGDescriptorFromImage(img, isIorJ) as number[]), numTestImagesPerClass, - path.join(outPath, 'confusionmatrix.csv') + path.join(outPath, 'confusionmatrix.csv'), ); diff --git a/examples/src/makeDataSetOCR.ts b/examples/src/makeDataSetOCR.ts index 0ec34bdc2..af6978648 100644 --- a/examples/src/makeDataSetOCR.ts +++ b/examples/src/makeDataSetOCR.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ -import fs from 'fs'; -import { cv, getResourcePath } from './utils'; +import fs from 'node:fs'; +import path from 'node:path'; import type { Mat } from '@u4/opencv4nodejs'; -import path from 'path'; +import { cv, getResourcePath } from './utils.js'; const labeledDataPath = path.join(getResourcePath('ocr-nocommit'), 'letters'); const outputDataPath = path.join(getResourcePath('ocr-nocommit'), 'letters_generated'); diff --git a/examples/src/matchFeatures.ts b/examples/src/matchFeatures.ts index fc7457785..09f382319 100644 --- a/examples/src/matchFeatures.ts +++ b/examples/src/matchFeatures.ts @@ -1,5 +1,5 @@ import { DescriptorMatch, FeatureDetector, Mat } from '@u4/opencv4nodejs'; -import { cv, getResourcePath, wait4key } from './utils'; +import { cv, getResourcePath, wait4key } from './utils.js'; const matchFeaturesPass = (arg: { img1: Mat, img2: Mat, detector: FeatureDetector, matchFunc: (descs1: Mat, descs2: Mat) => DescriptorMatch[] }) => { const { img1, img2, detector, matchFunc } = arg; @@ -17,7 +17,7 @@ const matchFeaturesPass = (arg: { img1: Mat, img2: Mat, detector: FeatureDetecto // only keep good matches const bestN = 40; const bestMatches = matches.sort( - (match1, match2) => match1.distance - match2.distance + (match1, match2) => match1.distance - match2.distance, ).slice(0, bestN); return cv.drawMatches( @@ -25,7 +25,7 @@ const matchFeaturesPass = (arg: { img1: Mat, img2: Mat, detector: FeatureDetecto img2, keyPoints1, keyPoints2, - bestMatches + bestMatches, ); }; diff --git a/examples/src/ocrHMMCharacters.ts b/examples/src/ocrHMMCharacters.ts index 44e9d3b60..c91798bd1 100644 --- a/examples/src/ocrHMMCharacters.ts +++ b/examples/src/ocrHMMCharacters.ts @@ -1,6 +1,6 @@ -import { cv, getResourcePath, wait4key } from './utils'; -import path from 'path'; +import path from 'node:path'; import type { Mat } from '@u4/opencv4nodejs'; +import { cv, getResourcePath, wait4key } from './utils.js'; /** * OCR One by one using OCRHMMClassifier @@ -45,7 +45,7 @@ export async function ocrHMMCharacters() { (clazz: number, i: number) => ({ class: vocabulary[clazz], confidence: confidences[i], - }) + }), ) .filter(prediction => prediction.confidence > minConfidence); diff --git a/examples/src/ocrHMMWords.ts b/examples/src/ocrHMMWords.ts index c63dcf1f5..0c9fed262 100644 --- a/examples/src/ocrHMMWords.ts +++ b/examples/src/ocrHMMWords.ts @@ -1,6 +1,6 @@ -import path from 'path'; +import path from 'node:path'; import { cv } from '@u4/opencv4nodejs'; -import { getResourcePath, wait4key } from './utils'; +import { getResourcePath, wait4key } from './utils.js'; export async function ocrHMMWords() { diff --git a/examples/src/plotHist.ts b/examples/src/plotHist.ts index cdeff487d..ec5ea9a80 100644 --- a/examples/src/plotHist.ts +++ b/examples/src/plotHist.ts @@ -1,5 +1,4 @@ -import { cv, getResourcePath, wait4key } from './utils'; - +import { cv, getResourcePath, wait4key } from './utils.js'; export async function plotHist() { const img = cv.imread(getResourcePath('Lenna.png')); diff --git a/examples/src/simpleTracking0.ts b/examples/src/simpleTracking0.ts index 3518fbef7..91e4392f9 100644 --- a/examples/src/simpleTracking0.ts +++ b/examples/src/simpleTracking0.ts @@ -1,4 +1,4 @@ -import { cv, grabFrames, drawRectAroundBlobs, getResourcePath } from './utils'; +import { cv, grabFrames, drawRectAroundBlobs, getResourcePath } from './utils.js'; const delay = 100; grabFrames(getResourcePath('horses.mp4'), delay, (frame) => { diff --git a/examples/src/simpleTracking1.ts b/examples/src/simpleTracking1.ts index 30ff4fde1..6eab5f442 100644 --- a/examples/src/simpleTracking1.ts +++ b/examples/src/simpleTracking1.ts @@ -1,4 +1,4 @@ -import { cv, grabFrames, drawRectAroundBlobs, getResourcePath } from './utils'; +import { cv, grabFrames, drawRectAroundBlobs, getResourcePath } from './utils.js'; const bgSubtractor = new cv.BackgroundSubtractorMOG2(); @@ -10,7 +10,7 @@ grabFrames(getResourcePath('traffic.mp4'), delay, (frame) => { const dilated = foreGroundMask.dilate( cv.getStructuringElement(cv.MORPH_ELLIPSE, new cv.Size(4, 4)), new cv.Point2(-1, -1), - iterations + iterations, ); const blurred = dilated.blur(new cv.Size(10, 10)); const thresholded = blurred.threshold(200, 255, cv.THRESH_BINARY); diff --git a/examples/src/templateMatch/multiMatchBench.ts b/examples/src/templateMatch/multiMatchBench.ts index 82de7807f..d6795b301 100644 --- a/examples/src/templateMatch/multiMatchBench.ts +++ b/examples/src/templateMatch/multiMatchBench.ts @@ -1,5 +1,5 @@ import cv, { Mat } from '@u4/opencv4nodejs'; -import { getResourcePath, wait4key } from '../utils'; +import { getResourcePath, wait4key } from '../utils.js'; const confidence = 0.97; diff --git a/examples/src/templateMatch/multiMatchColision.ts b/examples/src/templateMatch/multiMatchColision.ts index 73d2b7c8b..ab9fd8aaa 100644 --- a/examples/src/templateMatch/multiMatchColision.ts +++ b/examples/src/templateMatch/multiMatchColision.ts @@ -1,5 +1,5 @@ import cv, { Mat } from '@u4/opencv4nodejs'; -import { getResourcePath, wait4key } from '../utils'; +import { getResourcePath, wait4key } from '../utils.js'; const confidence = 0.60; diff --git a/examples/src/templateMatch/templateMatching.ts b/examples/src/templateMatch/templateMatching.ts index 632035244..67957e9ab 100644 --- a/examples/src/templateMatch/templateMatching.ts +++ b/examples/src/templateMatch/templateMatching.ts @@ -1,5 +1,5 @@ import cv from '@u4/opencv4nodejs'; -import { getResourcePath, wait4key } from '../utils'; +import { getResourcePath, wait4key } from '../utils.js'; const findWaldo = async () => { // Load images @@ -17,7 +17,7 @@ const findWaldo = async () => { new cv.Rect(x, y, waldoMat.cols, waldoMat.rows), new cv.Vec3(0, 255, 0), 2, - cv.LINE_8 + cv.LINE_8, ); const windowName = 'We\'ve found Waldo!'; diff --git a/examples/src/test34d.ts b/examples/src/test34d.ts index 8c023805d..ca5aa21ef 100644 --- a/examples/src/test34d.ts +++ b/examples/src/test34d.ts @@ -1,11 +1,9 @@ - -import { cv } from "./utils"; - +import { cv } from './utils.js'; try { console.log(''); console.log('1 Dims'); - const mat1 = new cv.Mat([4, 5, 6] as any, cv.CV_8UC3); + const mat1 = new cv.Mat([4, 5, 6], cv.CV_8UC3); //const mat1 = new cv.Mat([[ // [1, 2, 3.3], // [4, 5, 6], @@ -19,7 +17,7 @@ try { try { console.log(''); console.log('2 Dims'); - const mat2 = new cv.Mat([[4, 5, 6]] as any, cv.CV_32FC3); + const mat2 = new cv.Mat([[4, 5, 6]], cv.CV_32FC3); //const mat1 = new cv.Mat([[ // [1, 2, 3.3], // [4, 5, 6], @@ -34,7 +32,7 @@ try { try { console.log(''); console.log('3 Dims'); - const mat3 = new cv.Mat([[[4, 5, 6]]] as any, cv.CV_32FC3); + const mat3 = new cv.Mat([[[4, 5, 6]]], cv.CV_32FC3); //const mat1 = new cv.Mat([[ // [1, 2, 3.3], // [4, 5, 6], @@ -42,14 +40,13 @@ try { // console.log(mat3.getDataAsArray()); } catch (e) { - + // empty } - try { console.log(''); console.log('4 Dims'); - const mat4 = new cv.Mat([[[[4, 5, 6]]]] as any, cv.CV_32FC3); + const mat4 = new cv.Mat([[[[4, 5, 6]]]], cv.CV_32FC3); //const mat1 = new cv.Mat([[ // [1, 2, 3.3], // [4, 5, 6], @@ -57,5 +54,5 @@ try { // console.log(mat4.getDataAsArray()); } catch (e) { - + // empty } diff --git a/examples/src/utils.ts b/examples/src/utils.ts index 2885b10c9..f871ee7d9 100644 --- a/examples/src/utils.ts +++ b/examples/src/utils.ts @@ -1,17 +1,27 @@ -import path from 'path'; -import fs from 'fs'; +import path from 'node:path'; +import fs from 'node:fs'; +import crypto from 'node:crypto'; +import { fileURLToPath } from 'node:url'; import cv, { Mat, Rect, Vec3 } from '@u4/opencv4nodejs'; export { default as cv } from '@u4/opencv4nodejs'; import Axios from 'axios'; import ProgressBar from 'progress'; import pc from 'picocolors'; -import crypto from 'crypto'; export const delay = (ms: number): Promise => new Promise(resolve => setTimeout(resolve, ms)); +export function getExampleDirname(...names: string[]) { + let dir = '.'; + dir = fileURLToPath(new URL('.', import.meta.url)); + // dir = __dirname; + if (!names.length) + return dir; + return path.resolve(dir, ...names); +} + export function getCachedFile(localName: string, url: string, opts?: { notice?: string, noProgress?: boolean }): Promise { opts = opts || {}; - const localFile = path.resolve(__dirname, localName); + const localFile = getExampleDirname(localName); if (fs.existsSync(localFile)) { return Promise.resolve(localFile); } @@ -40,7 +50,7 @@ export function getCachedFile(localName: string, url: string, opts?: { notice?: complete: '=', incomplete: ' ', renderThrottle: 1, - total: parseInt(totalLength), + total: parseInt(totalLength, 10), }); data.on('data', (chunk: Buffer) => progressBar.tick(chunk.length)); } @@ -66,7 +76,7 @@ export function getCachedFile(localName: string, url: string, opts?: { notice?: * add some helpter for examples TS */ -export const dataPath = path.resolve(__dirname, '..', '..', 'data'); +export const dataPath = getExampleDirname('..', '..', 'data'); // export const getDataFilePath = (fileName: string): string => { // const fullpath = path.resolve(dataPath, fileName) @@ -129,7 +139,8 @@ export const drawRectAroundBlobs = (binaryImg: Mat, dstImg: Mat, minPxSize: numb dstImg.drawRectangle( new cv.Point2(x1, y1), new cv.Point2(x2, y2), - blue, thickness + blue, + thickness, ); } } @@ -140,7 +151,7 @@ export const drawRect = (image: Mat, rect: Rect, color: Vec3, opts = { thickness rect, color, opts.thickness, - cv.LINE_8 + cv.LINE_8, ); const { HEADLESS } = process.env; diff --git a/examples/tsconfig.json b/examples/tsconfig.json index c42c894b6..24552bc36 100644 --- a/examples/tsconfig.json +++ b/examples/tsconfig.json @@ -1,108 +1,13 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Projects */ - // "incremental": true, /* Enable incremental compilation */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ "target": "ESNext", - /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ - // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - - /* Modules */ - "module": "commonjs", - /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "resolveJsonModule": true, /* Enable importing .json files */ - // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + "module": "ES2022", + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ "inlineSourceMap": true, - /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ "esModuleInterop": true, - /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ "forceConsistentCasingInFileNames": true, - /* Ensure that casing is correct in imports. */ - - /* Type Checking */ "strict": true, - /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ - // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ - // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, - "include": ["./src/**/*.ts"] + "include": ["src"] } \ No newline at end of file diff --git a/examples/tsconfig.prod.json b/examples/tsconfig.prod.json index c5626571d..225b51395 100644 --- a/examples/tsconfig.prod.json +++ b/examples/tsconfig.prod.json @@ -1,108 +1,12 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Projects */ - // "incremental": true, /* Enable incremental compilation */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ "target": "ESNext", - /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ - // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - - /* Modules */ "module": "commonjs", - /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "resolveJsonModule": true, /* Enable importing .json files */ - // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ "inlineSourceMap": false, - /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ "esModuleInterop": true, - /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ "forceConsistentCasingInFileNames": true, - /* Ensure that casing is correct in imports. */ - - /* Type Checking */ "strict": true, - /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ - // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ - // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, - "include": ["./src/**/*.ts"] + "include": ["src"] } \ No newline at end of file diff --git a/extra/meta.cjs b/extra/meta.cjs new file mode 100644 index 000000000..0e1e1148c --- /dev/null +++ b/extra/meta.cjs @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getRequire = exports.getDirName = void 0; + +function getDirName() { + return __dirname; +} +exports.getDirName = getDirName; + +function getRequire() { + return require; +} +exports.getRequire = getRequire; diff --git a/extra/meta.mjs b/extra/meta.mjs new file mode 100644 index 000000000..aecdf4ee8 --- /dev/null +++ b/extra/meta.mjs @@ -0,0 +1,8 @@ +import { createRequire } from 'node:module'; +import { fileURLToPath } from 'node:url'; +export function getDirName() { + return fileURLToPath(new URL('.', import.meta.url)); +} +export function getRequire() { + return createRequire(import.meta.url); +} diff --git a/install/compileLib.js b/install/compileLib.js deleted file mode 100644 index 76ecd9b00..000000000 --- a/install/compileLib.js +++ /dev/null @@ -1,422 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.compileLib = void 0; -const opencv_build_1 = require("@u4/opencv-build"); -const child_process = require("child_process"); -const fs = require("fs"); -const npmlog = require("npmlog"); -const commons_js_1 = require("../lib/commons.js"); -const pc = require("picocolors"); -const path = require("path"); -const os_1 = require("os"); -const glob_1 = require("glob"); -const cvloader_js_1 = require("../lib/cvloader.js"); -const defaultDir = '/usr/local'; -const defaultLibDir = `${defaultDir}/lib`; -const defaultIncludeDir = `${defaultDir}/include`; -const defaultIncludeDirOpenCV4 = `${defaultIncludeDir}/opencv4`; -let silenceMode = false; -function log(level, prefix, message, ...args) { - if (!opencv_build_1.OpenCVBuildEnv.silence) - npmlog.log(level, prefix, message, ...args); -} -function toBool(value) { - if (!value) - return false; - if (typeof value === "boolean") - return value; - if (typeof value === "number") - return value !== 0; - if (value === '0' || value === 'false' || value === 'off' || value.startsWith('disa')) - return false; - return true; -} -/** - * @returns global system include paths - */ -function getDefaultIncludeDirs(env) { - log('info', 'install', 'OPENCV_INCLUDE_DIR is not set, looking for default include dir'); - if (env.isWin) { - throw new Error('OPENCV_INCLUDE_DIR has to be defined on windows when auto build is disabled'); - } - return [defaultIncludeDir, defaultIncludeDirOpenCV4]; -} -/** - * @returns return a path like /usr/local/lib - */ -function getDefaultLibDir(env) { - log('info', 'install', 'OPENCV_LIB_DIR is not set, looking for default lib dir'); - if (env.isWin) { - throw new Error('OPENCV_LIB_DIR has to be defined on windows when auto build is disabled'); - } - return defaultLibDir; -} -/** - * @returns a built lib directory - */ -function getLibDir(env) { - if (env.isAutoBuildDisabled) { - return (0, commons_js_1.resolvePath)(process.env.OPENCV_LIB_DIR) || getDefaultLibDir(env); - } - else { - const dir = (0, commons_js_1.resolvePath)(env.opencvLibDir); - if (!dir) { - throw Error('failed to resolve opencvLibDir path'); - } - return dir; - } -} -/** - * convert lib list to existing parameter for the linker - * @param env - * @param libDir - * @param libsFoundInDir - * @returns - */ -function getOPENCV4NODEJS_LIBRARIES(env, libDir, libsFoundInDir) { - const libs = env.isWin - ? libsFoundInDir.map(lib => (0, commons_js_1.resolvePath)(lib.libPath)) - // dynamically link libs if not on windows - : ['-L' + libDir] - .concat(libsFoundInDir.map(lib => '-lopencv_' + lib.opencvModule)) - .concat('-Wl,-rpath,' + libDir); - if (libs.length > 0) { - const dir = path.dirname(libs[0]); - const names = libs.map(lib => path.basename(lib)); - log('info', 'libs', `${os_1.EOL}Setting lib from ${pc.green(dir)} : ${names.map(pc.yellow).join(', ')}`); - } - else { - log('info', 'libs', `${os_1.EOL}no Libs available`); - } - return libs; -} -/** - * generate all C++ Defines and debug them nicely on screen - * @param libsFoundInDir selected modules - * @returns list of defines - */ -function getOPENCV4NODEJS_DEFINES(libsFoundInDir) { - const defines = libsFoundInDir - .map(lib => `OPENCV4NODEJS_FOUND_LIBRARY_${lib.opencvModule.toUpperCase()}`); - log('info', 'defines', `${os_1.EOL}Setting the following defines:`); - const longest = Math.max(...defines.map(a => a.length)); - let next = ''; - for (const define of defines) { - if (next.length > 80) { - log('info', 'defines', pc.yellow(next)); - next = ''; - } - next += define.padEnd(longest + 1, ' '); - } - if (next) - log('info', 'defines', pc.yellow(next)); - return defines; -} -/** - * generate C++ Includes - * @param env context - * @returns list of directory to include for C++ compiler - */ -function getOPENCV4NODEJS_INCLUDES(env) { - const { OPENCV_INCLUDE_DIR } = process.env; - let explicitIncludeDir = ''; - if (OPENCV_INCLUDE_DIR) { - explicitIncludeDir = (0, commons_js_1.resolvePath)(OPENCV_INCLUDE_DIR); - } - let includes = []; - if (env.isAutoBuildDisabled) { - if (explicitIncludeDir) { - if (explicitIncludeDir.endsWith('opencv4')) { - includes = [explicitIncludeDir, path.resolve(explicitIncludeDir, '..')]; - } - else { - includes = [explicitIncludeDir, path.resolve(explicitIncludeDir, 'opencv4')]; - } - } - else { - includes = getDefaultIncludeDirs(env); - } - } - else { - includes = [(0, commons_js_1.resolvePath)(env.opencvInclude), (0, commons_js_1.resolvePath)(env.opencv4Include)]; - } - log('info', 'install', `${os_1.EOL}Setting the following includes:`); - includes.forEach(inc => log('info', 'includes', pc.green(inc))); - return includes; -} -function getExistingNodeModulesBin(dir, name) { - const binPath = path.join(dir, 'node_modules', '.bin', name); - if (fs.existsSync(binPath)) { - return binPath; - } - return ''; -} -function getExistingBin(dir, name) { - const binPath = path.join(dir, name); - if (fs.existsSync(binPath)) { - return binPath; - } - return ''; -} -async function compileLib(args) { - let builder = null; - let dryRun = false; - let JOBS = 'max'; - const validAction = ['build', 'clean', 'configure', 'rebuild', 'install', 'list', 'remove', 'auto', "OPENCV4NODEJS_DEFINES", "OPENCV4NODEJS_INCLUDES", "OPENCV4NODEJS_LIBRARIES"]; - const actionOriginal = args[args.length - 1]; - if (args.includes('--help') || args.includes('-h') || !validAction.includes(actionOriginal)) { - console.log(`Usage: build-opencv build|rebuild|configure|install [--version=] [--vscode] [--jobs=] [--electron] [--node-gyp-options=] [--dry-run] [--flags=] [--cuda] [--cudaArch=] [--nocontrib] [--nobuild] ${validAction.join('|')}`); - console.log((0, opencv_build_1.genHelp)()); - return; - } - const buildOptions = (0, opencv_build_1.args2Option)(args); - if (actionOriginal === 'list') { - const buildDir = opencv_build_1.OpenCVBuildEnv.getBuildDir(buildOptions); - const builds = opencv_build_1.OpenCVBuildEnv.listBuild(buildDir); - if (!builds.length) { - console.log(`${pc.red('NO Build available on your system in')} ${pc.green(buildDir)}`); - } - else { - console.log(`${pc.green(builds.length.toString())} Build avilible on your system in ${pc.green(buildDir)}`); - } - for (const build of builds) { - const { dir, date, buildInfo } = build; - let line = ` - build ${pc.green(dir)} build on ${pc.red(date.toISOString())}`; - if (buildInfo.env.buildWithCuda) { - line += ` [${pc.green('CUDA')}]`; - } - if (buildInfo.env.cudaArch) { - line += ` ${pc.green('cuda_arch:' + buildInfo.env.cudaArch)}`; - } - console.log(line); - } - return; - } - if (actionOriginal.startsWith('OPENCV4NODEJS_')) { - silenceMode = true; - opencv_build_1.OpenCVBuildEnv.silence = true; - } - const env = process.env; - const npmEnv = opencv_build_1.OpenCVBuildEnv.readEnvsFromPackageJson() || {}; - let action = actionOriginal; - if (actionOriginal === 'auto') { - try { - const openCV = (0, cvloader_js_1.getOpenCV)({ prebuild: 'latestBuild' }); - const version = openCV.version; - const txt = `${version.major}.${version.minor}.${version.revision}`; - console.log(`${pc.yellow(txt)} already ready no build needed.`); - return; - } - catch (_e) { - // console.log(_e); - // no build available - } - if (toBool(env.OPENCV4NODEJS_DISABLE_AUTOBUILD)) { - action = 'rebuild'; - } - if (env.OPENCV4NODEJS_AUTOBUILD_OPENCV_VERSION) { - action = 'rebuild'; - } - if (Object.keys(npmEnv).length) { - action = 'rebuild'; - } - } - if (buildOptions.extra.jobs) { - JOBS = buildOptions.extra.jobs; - } - if (buildOptions.disableAutoBuild || toBool(env.OPENCV4NODEJS_DISABLE_AUTOBUILD) || npmEnv.disableAutoBuild) { - const summery = opencv_build_1.OpenCVBuildEnv.autoLocatePrebuild(); - if (!silenceMode) { - log('info', 'envAutodetect', `autodetect ${pc.green('%d')} changes`, summery.changes); - for (const txt of summery.summery) { - log('info', 'envAutodetect', `- ${pc.yellow('%s')}`, txt); - } - } - } - if (buildOptions.extra['dry-run'] || buildOptions.extra['dryrun']) { - dryRun = true; - } - if (!silenceMode) { - for (const K in ['autoBuildFlags']) { - if (buildOptions[K]) - console.log(`using ${K}:`, buildOptions[K]); - } - } - try { - builder = new opencv_build_1.OpenCVBuilder({ ...buildOptions, prebuild: 'latestBuild' }); - } - catch (_e) { - // ignore - } - if (action === 'auto' && builder) - action = 'rebuild'; - if (action === 'auto' && !builder) { - console.log(`Use 'npx build-opencv rebuild' script to start node-gyp, use --help to check all options. -or configure configure a opencv4nodejs section in your package.json -or use OPENCV4NODEJS_* env variable.`); - return; - } - if (!builder) { - builder = new opencv_build_1.OpenCVBuilder(buildOptions); - } - if (!silenceMode) { - log('info', 'install', `Using openCV ${pc.green('%s')}`, builder.env.opencvVersion); - } - /** - * prepare environment variable - */ - const libDir = getLibDir(builder.env); - if (!silenceMode) { - log('info', 'install', `Using lib dir: ${pc.green('%s')}`, libDir); - } - //if (!fs.existsSync(libDir)) - await builder.install(); - if (!fs.existsSync(libDir)) { - throw new Error(`library dir does not exist: ${pc.green(libDir)}'`); - } - // get module list from auto-build.json - const libsInDir = builder.getLibs.getLibs(); - const libsFoundInDir = libsInDir.filter(lib => lib.libPath); - if (!libsFoundInDir.length) { - throw new Error(`no OpenCV libraries found in lib dir: ${pc.green(libDir)}`); - } - log('info', 'install', `${os_1.EOL}Found the following libs:`); - libsFoundInDir.forEach(lib => log('info', 'install', `${pc.yellow('%s')}: ${pc.green('%s')}`, lib.opencvModule, lib.libPath)); - const OPENCV4NODEJS_DEFINES = getOPENCV4NODEJS_DEFINES(libsFoundInDir).join(';'); - const OPENCV4NODEJS_INCLUDES = getOPENCV4NODEJS_INCLUDES(builder.env).join(';'); - const OPENCV4NODEJS_LIBRARIES = getOPENCV4NODEJS_LIBRARIES(builder.env, libDir, libsFoundInDir).join(';'); - process.env['OPENCV4NODEJS_DEFINES'] = OPENCV4NODEJS_DEFINES; - process.env['OPENCV4NODEJS_INCLUDES'] = OPENCV4NODEJS_INCLUDES; - process.env['OPENCV4NODEJS_LIBRARIES'] = OPENCV4NODEJS_LIBRARIES; - if (silenceMode) { - const outputs = process.env[actionOriginal].split(/[\n;]/); - outputs.forEach(o => console.log(o)); - return; - } - // see https://github.com/nodejs/node-gyp#command-options for all flags - let flags = ' -f binding_old.gyp'; - // process.env.JOBS=JOBS; - flags += ` --jobs ${JOBS}`; - // --target not mapped - // --silly, --loglevel=silly Log all progress to console - // --verbose, --loglevel=verbose Log most progress to console - // --silent, --loglevel=silent Don't log anything to console - if (process.env.BINDINGS_DEBUG || buildOptions.extra['debug']) - flags += ' --debug'; - else - flags += ' --release'; - // --thin=yes - const cwd = path.join(__dirname, '..'); - // const arch = 'x86_64' / 'x64' - // flags += --arch=${arch} --target_arch=${arch} - const cmdOptions = buildOptions.extra['node-gyp-options'] || ''; - flags += ` ${cmdOptions}`; - const nodegyp = buildOptions.extra.electron ? 'electron-rebuild' : 'node-gyp'; - let nodegypCmd = ''; - for (const dir of process.env.PATH.split(path.delimiter)) { - nodegypCmd = getExistingBin(dir, nodegyp); - if (nodegypCmd) { - // no need to use full path - nodegypCmd = nodegyp; - break; - } - } - if (!nodegypCmd) { - for (const startDir in [__dirname, process.cwd()]) { - let dir = startDir; - while (dir) { - nodegypCmd = getExistingNodeModulesBin(dir, nodegyp); - if (nodegypCmd) - break; - const next = path.resolve(dir, '..'); - if (next === dir) { - break; - } - dir = next; - } - if (nodegypCmd) - break; - } - } - if (!nodegypCmd) { - const msg = `Please install "${nodegyp}" to build openCV bindings${os_1.EOL}npm install --save-dev ${nodegyp}`; - throw Error(msg); - } - // flags starts with ' ' - nodegypCmd += ` ${action}${flags}`; - log('info', 'install', `Spawning in directory:${cwd} node-gyp process: ${nodegypCmd}`); - if (buildOptions.extra.vscode) { - // const nan = require('nan'); - // const nativeNodeUtils = require('native-node-utils'); - // const pblob = promisify(blob) - const openCvModuleInclude = (0, glob_1.globSync)(path.join(builder.env.opencvSrc, 'modules', '*', 'include').replace(/\\/g, '/')); - const openCvContribModuleInclude = (0, glob_1.globSync)(path.join(builder.env.opencvContribSrc, 'modules', '*', 'include').replace(/\\/g, '/')); - const cvVersion = builder.env.opencvVersion.split('.'); - const config = { - "name": "opencv4nodejs", - "includePath": [ - // 'Missing node-gyp/Cache/16.13.1/include/node', - ...OPENCV4NODEJS_INCLUDES, - '${workspaceFolder}/node_modules/nan', - '${workspaceFolder}/node_modules/native-node-utils/src', - '${workspaceFolder}/cc', - '${workspaceFolder}/cc/core', - ...openCvModuleInclude, - ...openCvContribModuleInclude, - ], - "defines": [ - `CV_VERSION_MAJOR=${cvVersion[0]}`, - `CV_VERSION_MINOR=${cvVersion[1]}`, - `CV_VERSION_REVISION=${cvVersion[2]}`, - ...OPENCV4NODEJS_DEFINES - ], - "cStandard": "c17", - "cppStandard": "c++17", - // "compilerArgs": [ "-std=c++11" ] - }; - if (process.platform === 'win32') { - config.defines.push('WIN'); - config.defines.push('_HAS_EXCEPTIONS=1'); - } - console.log(JSON.stringify(config, null, ' ')); - } - else if (dryRun) { - let setEnv = 'export '; - if (process.platform === 'win32') { - setEnv = '$Env:'; - } - console.log(''); - console.log(`${setEnv}OPENCV4NODEJS_DEFINES="${OPENCV4NODEJS_DEFINES}"`); - console.log(`${setEnv}OPENCV4NODEJS_INCLUDES="${OPENCV4NODEJS_INCLUDES}"`); - console.log(`${setEnv}OPENCV4NODEJS_LIBRARIES="${OPENCV4NODEJS_LIBRARIES}"`); - console.log(''); - if (cwd.includes(' ')) - console.log(`cd "${cwd}"`); - else - console.log(`cd ${cwd}`); - console.log(nodegypCmd); - console.log(''); - } - else { - // for (const key in process.env) { - // if (key.startsWith('OPENCV')) - // console.log(`export ${key}=${process.env[key]}`); - // } - const child = child_process.exec(nodegypCmd, { maxBuffer: Infinity, cwd }, function (error /*, stdout, stderr*/) { - // fs.unlinkSync(realGyp); - const bin = buildOptions.extra.electron ? 'electron-rebuild' : 'node-gyp'; - if (error) { - console.log(`error: `, error); - log('error', 'install', `${bin} failed and return ${error.name} ${error.message} return code: ${error.code}`); - } - else { - log('info', 'install', `${bin} complete successfully`); - } - }); - if (child.stdout) - child.stdout.pipe(process.stdout); - if (child.stderr) - child.stderr.pipe(process.stderr); - } -} -exports.compileLib = compileLib; diff --git a/install/parseEnv.js b/install/parseEnv.js deleted file mode 100644 index c91e3da9d..000000000 --- a/install/parseEnv.js +++ /dev/null @@ -1,6 +0,0 @@ -const envName = process.argv[2]; -if (!envName) { - throw new Error('no env name passed to parseEnv'); -} -const outputs = (process.env[envName] || '').split(/[\n;]/); -outputs.forEach(o => console.log(o)); diff --git a/lib/commons.js b/lib/commons.js deleted file mode 100644 index 88592b25b..000000000 --- a/lib/commons.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isElectronWebpack = exports.resolvePath = void 0; -const path = require("path"); -function resolvePath(filePath, file) { - if (!filePath) { - return ''; - } - return (file ? path.resolve(filePath, file) : path.resolve(filePath)).replace(/\\/g, '/'); -} -exports.resolvePath = resolvePath; -/** - * detect if electron https://github.com/electron/electron/issues/2288 - */ -function isElectronWebpack() { - // return process.versions.hasOwnProperty('electron'); - // assume module required by webpack if no system path inv envs - return !process.env.path - // eslint-disable-next-line @typescript-eslint/no-explicit-any - && global.window && global.window.process && global.window.process.type - && global.navigator && ((global.navigator.userAgent || '').toLowerCase().indexOf(' electron/') > -1); -} -exports.isElectronWebpack = isElectronWebpack; diff --git a/lib/cvloader.js b/lib/cvloader.js deleted file mode 100644 index edd515a4b..000000000 --- a/lib/cvloader.js +++ /dev/null @@ -1,116 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getOpenCV = void 0; -const opencv_build_1 = require("@u4/opencv-build"); -const fs = require("fs"); -const path = require("path"); -const commons_js_1 = require("./commons.js"); -const pc = require("picocolors"); -const npmlog_1 = require("npmlog"); -const logDebug = process.env.OPENCV4NODES_DEBUG_REQUIRE ? npmlog_1.info : () => { }; -function tryGetOpencvBinDir(builder) { - if (process.env.OPENCV_BIN_DIR) { - logDebug('tryGetOpencvBinDir', `${pc.yellow('OPENCV_BIN_DIR')} environment variable is set`); - return process.env.OPENCV_BIN_DIR; - } - // if the auto build is not disabled via environment do not even attempt - // to read package.json - if (!builder.env.isAutoBuildDisabled) { - logDebug('tryGetOpencvBinDir', 'auto build has not been disabled via environment variable, using opencv bin dir of opencv-build'); - return builder.env.opencvBinDir; - } - logDebug('tryGetOpencvBinDir', 'auto build has not been explicitly disabled via environment variable, attempting to read envs from package.json...'); - // const envs = builder.env.readEnvsFromPackageJson() - if (!builder.env.isAutoBuildDisabled && process.env.OPENCV_BIN_DIR) { - logDebug('tryGetOpencvBinDir', 'auto build has not been disabled via package.json, using opencv bin dir of opencv-build'); - return process.env.OPENCV_BIN_DIR; //.opencvBinDir - } - if (builder.env.opencvBinDir) { - logDebug('tryGetOpencvBinDir', 'found opencv binary environment variable in package.json'); - return builder.env.opencvBinDir; - } - logDebug('tryGetOpencvBinDir', 'failed to find opencv binary environment variable in package.json'); - return null; -} -function getOpenCV(opt) { - if (!opt) - opt = { prebuild: 'latestBuild' }; - const builder = new opencv_build_1.OpenCVBuilder(opt); - let opencvBuild = null; - let requirePath = ''; - if ((0, commons_js_1.isElectronWebpack)()) { - requirePath = '../build/Release/opencv4nodejs.node'; - } - else { - requirePath = path.join(__dirname, '../build/Debug/opencv4nodejs.node'); - if (!fs.existsSync(requirePath)) { - requirePath = path.join(__dirname, '../build/Release/opencv4nodejs.node'); - } - requirePath = requirePath.replace(/\.node$/, ''); - // path.join(__dirname, process.env.BINDINGS_DEBUG ? '../build/Debug/opencv4nodejs' : '../build/Release/opencv4nodejs') - } - try { - logDebug('require', `require path is ${pc.yellow(requirePath)}`); - opencvBuild = require(requirePath); - } - catch (err) { - // err.code === 'ERR_DLOPEN_FAILED' - logDebug('require', `failed to require cv with exception: ${pc.red(err.toString())}`); - logDebug('require', 'attempting to add opencv binaries to path'); - if (!process.env.path) { - logDebug('require', 'there is no path environment variable, skipping...'); - throw err; - } - const opencvBinDir = tryGetOpencvBinDir(builder); - logDebug('require', 'adding opencv binary dir to path: ' + opencvBinDir); - if (!fs.existsSync(opencvBinDir)) { - throw new Error('opencv binary dir does not exist: ' + opencvBinDir); - } - // ensure binaries are added to path on windows - if (!process.env.path.includes(opencvBinDir)) { - process.env.path = `${process.env.path};${opencvBinDir};`; - } - logDebug('require', 'process.env.path: ' + process.env.path); - try { - opencvBuild = require(requirePath); - } - catch (e) { - if (e instanceof Error) { - let msg = ''; - const message = e.message; - if (message.startsWith('Cannot find module')) { - msg = `require("${pc.yellow(requirePath)}"); - Failed with: ${pc.red(message)}, openCV binding not available, reed: - build-opencv --help - And build missing file with: - npx build-opencv --version 4.6.0 rebuild - - PS: a 'npm link' may help - `; - } - else if (message.startsWith('The specified module could not be found.')) { - msg = `require("${pc.yellow(requirePath)}"); - Failed with: ${pc.red(message)}, openCV module looks broken, clean you builds directory and rebuild everything - rm -r - npx build-opencv --version 4.6.0 rebuild - `; - } - else { - msg = `require("${pc.yellow(requirePath)}"); - Failed with: ${pc.red(message)} - `; - } - throw Error(msg); - } - throw e; - } - } - // resolve haarcascade files - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const { haarCascades, lbpCascades } = opencvBuild; - Object.keys(haarCascades).forEach(key => opencvBuild[key] = (0, commons_js_1.resolvePath)(path.join(__dirname, 'haarcascades'), haarCascades[key])); - Object.keys(lbpCascades).forEach(key => opencvBuild[key] = (0, commons_js_1.resolvePath)(path.join(__dirname, 'lbpcascades'), lbpCascades[key])); - return opencvBuild; -} -exports.getOpenCV = getOpenCV; -exports.default = getOpenCV; diff --git a/lib/opencv4nodejs.js b/lib/opencv4nodejs.js deleted file mode 100644 index 3b9109881..000000000 --- a/lib/opencv4nodejs.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -const promisify_js_1 = require("./promisify.js"); -const src_1 = require("./src"); -const cvloader_js_1 = require("./cvloader.js"); -function loadOpenCV(opt) { - const cvBase = (0, cvloader_js_1.getOpenCV)(opt); - if (!cvBase.accumulate) { - throw Error('failed to load opencv basic accumulate not found.'); - } - if (!cvBase.blur) { - throw Error('failed to load opencv basic blur not found.'); - } - // promisify async methods - let cvObj = (0, promisify_js_1.default)(cvBase); - cvObj = (0, src_1.default)(cvObj); - // add xmodules alias if not present (moved to C++ part) - // if (!cvObj.xmodules && cvObj.modules) - // cvObj.xmodules = cvObj.modules - return cvObj; -} -const cv = loadOpenCV({ prebuild: 'latestBuild' }); -const defExport = { cv }; -// duplicate all export for retro-compatibility -for (const key in cv) { - defExport[key] = cv[key]; -} -defExport['cv'] = cv; -module.exports = defExport; diff --git a/lib/opencv4nodejs.ts b/lib/opencv4nodejs.ts deleted file mode 100644 index 06a2bdfcf..000000000 --- a/lib/opencv4nodejs.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { type OpenCVBuildEnvParams } from '@u4/opencv-build'; -import promisify from './promisify.js'; -import extendWithJsSources from './src'; -import { getOpenCV } from './cvloader.js'; -import type * as openCV from '..'; -declare type OpenCVType = typeof openCV; - -function loadOpenCV(opt?: OpenCVBuildEnvParams): OpenCVType { - const cvBase = getOpenCV(opt); - if (!cvBase.accumulate) { - throw Error('failed to load opencv basic accumulate not found.') - } - if (!cvBase.blur) { - throw Error('failed to load opencv basic blur not found.') - } - - // promisify async methods - let cvObj = promisify(cvBase); - cvObj = extendWithJsSources(cvObj); - // add xmodules alias if not present (moved to C++ part) - // if (!cvObj.xmodules && cvObj.modules) - // cvObj.xmodules = cvObj.modules - return cvObj; -} - -const cv = loadOpenCV({ prebuild: 'latestBuild' }); -const defExport = { cv }; -// duplicate all export for retro-compatibility -for (const key in cv) { - defExport[key] = cv[key]; -} -defExport['cv'] = cv; - -export = defExport; diff --git a/lib/promisify.js b/lib/promisify.js deleted file mode 100644 index 15aede4c0..000000000 --- a/lib/promisify.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/* eslint-disable @typescript-eslint/no-explicit-any */ -const isFn = (obj) => typeof obj === 'function'; -const isAsyncFn = (fn) => { - try { - return fn.prototype.constructor.name.endsWith('Async'); - } - catch (e) { - return false; - } -}; -const promisify = (fn) => function (...params) { - if (isFn(params[params.length - 1])) { - return fn.apply(this, params); - } - return new Promise((resolve, reject) => { - const args = Array.prototype.slice.call(params); - args.push(function (err, res) { - if (err) { - return reject(err); - } - return resolve(res); - }); - fn.apply(this, args); - }); -}; -exports.default = (cv) => { - const fns = Object.keys(cv).filter(k => isFn(cv[k])).map(k => cv[k]); - const asyncFuncs = fns.filter(isAsyncFn); - const clazzes = fns.filter(fn => fn.prototype && !!Object.keys(fn.prototype).length); - clazzes.forEach((clazz) => { - const protoFnKeys = Object.keys(clazz.prototype).filter(k => isAsyncFn(clazz.prototype[k])); - protoFnKeys.forEach(k => clazz.prototype[k] = promisify(clazz.prototype[k])); - }); - asyncFuncs.forEach((fn) => { - cv[fn.prototype.constructor.name] = promisify(fn); - }); - return cv; -}; diff --git a/lib/src/deprecations.ts b/lib/src/deprecations.ts deleted file mode 100644 index 1ac55c45d..000000000 --- a/lib/src/deprecations.ts +++ /dev/null @@ -1,33 +0,0 @@ -import * as assert from 'assert'; -import type * as openCV from '../..' -import type { Mat } from '../..'; - -export default function (cv: typeof openCV) { - // deprecate wrapper for the old calcHist API - const _calcHist = cv.calcHist; - cv.calcHist = function calcHist(img: Mat, histAxes: { channel: number, bins: number, ranges: [number, number] }[], mask?: Mat) { - assert(img instanceof cv.Mat, 'Imgproc::CalcHist - Error: expected argument 0 to be of type Mat'); - assert(Array.isArray(histAxes), 'Imgproc::CalcHist - Error: expected argument 1 to be of type array of HistAxes'); - - histAxes = histAxes.slice(); - - let warningThrown = false; - const len = histAxes.length; - - for (let i = 0; i < len; ++i) { - const entry = histAxes[i]; - if (!(entry instanceof cv.HistAxes)) { - if (!warningThrown) { - warningThrown = true; - console.warn(`Imgproc::CalcHist - Deprecated support for object in argument 1 at index ${i}. Please switch to using HistAxes instances.`); - } - histAxes[i] = new cv.HistAxes(entry); - } - } - - if (mask) { - return _calcHist(img, histAxes, mask); - } - return _calcHist(img, histAxes); - }; -} diff --git a/lib/src/index.ts b/lib/src/index.ts deleted file mode 100644 index 73a264603..000000000 --- a/lib/src/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import makeDrawUtils from './drawUtils'; -import deprecations from './deprecations'; -import * as OpenCV from '../..'; -import misc from './misc'; - -export default function(cv: typeof OpenCV) { - // add functions - makeDrawUtils(cv); - // add functions - misc(cv); - deprecations(cv); - return cv; -} \ No newline at end of file diff --git a/lib/src/misc.ts b/lib/src/misc.ts deleted file mode 100644 index 106fbd797..000000000 --- a/lib/src/misc.ts +++ /dev/null @@ -1,109 +0,0 @@ -import type * as openCV from '../..'; -import type { Mat, Rect } from '../..'; - -export const allTypes = ['CV_8U', 'CV_8S', 'CV_16U', 'CV_16S', 'CV_32S', 'CV_32F', 'CV_64F', 'CV_8UC1', 'CV_8UC2', 'CV_8UC3', 'CV_8UC4', 'CV_8SC1', 'CV_8SC2', 'CV_8SC3', 'CV_8SC4', 'CV_16UC1', 'CV_16UC2', 'CV_16UC3', 'CV_16UC4', 'CV_16SC1', 'CV_16SC2', 'CV_16SC3', 'CV_16SC4', 'CV_32SC1', 'CV_32SC2', 'CV_32SC3', 'CV_32SC4', 'CV_32FC1', 'CV_32FC2', 'CV_32FC3', 'CV_32FC4', 'CV_64FC1', 'CV_64FC2', 'CV_64FC3', 'CV_64FC4'] as const; -export type MatTypes = typeof allTypes[number]; -/** - * register new functions - * @param cv - */ -export default function (cv: typeof openCV): void { - /** - * Check declaration and doc in cv.d.ts - */ - cv.getVersion = function(): [number, number, number] { - return [cv.getVersionMajor(), cv.getVersionMinor(), cv.getVersionRevision()] - } - - /** - * Check declaration and doc in cv.d.ts - */ - cv.getVersionString = function(): string { - return `${cv.getVersionMajor()}.${cv.getVersionMinor()}.${cv.getVersionRevision()}`; - } - - /** - * Convert a Mat type to string for easy read - * non Natif code - * @param type Mat type as int value - */ - cv.toMatTypeName = function toMatTypeName(type: number): MatTypes | undefined { - for (const t of allTypes) { - if (cv[t] === type) return t; - } - return undefined; - }; - /** - * Find values greater than threshold in a 32bit float matrix and return a list of matchs formated as [[x1, y1, score1]. [x2, y2, score2], [x3, y3, score3]] - * add to be used with matchTemplate - * non Natif code - * @param scoreMat Matric containing scores as 32Bit float (CV_32F) - * @param threshold Minimal score to collect - * @param region search region - * @returns a list of matchs - */ - cv.getScoreMax = function getScoreMax(scoreMat: Mat, threshold: number, region?: Rect): Array<[number, number, number]> { - if (scoreMat.type !== cv.CV_32F) - throw Error('this method can only be call on a CV_32F Mat'); - if (scoreMat.dims !== 2) - throw Error('this method can only be call on a 2 dimmention Mat'); - - const out: Array<[number, number, number]> = []; - const { cols, rows } = scoreMat; - const raw = scoreMat.getData(); - - let x1: number, x2: number, y1: number, y2: number; - if (region) { - x1 = region.x; - y1 = region.y; - x2 = x1 + region.width; - y2 = y1 + region.height; - } else { - x1 = y1 = 0; - x2 = cols; - y2 = rows; - } - for (let y = y1; y < y2; y++) { - let offset = (x1 + y * cols) * 4; - for (let x = x1; x < x2; x++) { - const value = raw.readFloatLE(offset); - if (value > threshold) { - out.push([x, y, value]); - } - offset += 4; - } - } - return out; - } - - /** - * Drop overlaping zones, keeping best one - * @param template template Matrix used to get dimentions. - * @param matches list of matches as a list in [x,y,score]. (this data will be altered) - * @returns best match without colisions - */ - cv.dropOverlappingZone = function dropOverlappingZone(template: Mat, matches: Array<[number, number, number]>): Array<[number, number, number]> { - const total = matches.length; - const width = template.cols / 2; - const height = template.rows / 2; - for (let i = 0; i < total; i++) { - const cur = matches[i]; - if (!cur[2]) continue; - for (let j = i + 1; j < total; j++) { - const sec = matches[j]; - if (!sec[2]) continue; - if (Math.abs(cur[1] - sec[1]) > height) continue; - if (Math.abs(cur[0] - sec[0]) > width) continue; - if (cur[2] > sec[2]) { - sec[2] = 0; - } else { - cur[2] = 0; - break; - } - } - } - return matches.filter(m => m[2]); - } - - -} diff --git a/package.json b/package.json index d50d6f88d..c7b4fd166 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@u4/opencv4nodejs", - "version": "7.0.0-alpha", + "version": "7.0.0", "description": "Asynchronous OpenCV 3.x / 4.x nodejs bindings with JavaScript and TypeScript API.", "keywords": [ "opencv", @@ -16,6 +16,14 @@ "async", "typescript" ], + "type": "commonjs", + "exports": { + ".": { + "types": "./typings/index.d.ts", + "require": "./cjs/lib/opencv4nodejs.js", + "import": "./esm/lib/opencv4nodejs.js" + } + }, "contributors": [ "Uriel Chemouni (https://uriel.ovh/)", "justadudewhohacks (https://github.com/justadudewhohacks)" @@ -33,10 +41,13 @@ "build-opencv": "bin/install.js" }, "homepage": "https://github.com/UrielCh/opencv4nodejs#readme", - "main": "./lib/opencv4nodejs.js", + "main": "./cjs/lib/opencv4nodejs.js", + "module": "./esm/lib/opencv4nodejs.js", "typings": "./typings/index.d.ts", "scripts": { - "build": "tsc --pretty --project .", + "build": "tsc --pretty --project tsconfig.json && tsc --pretty --project tsconfig-esm.json && npm run copyfile", + "build-types": "rimraf types && tsc --pretty --project tsconfig-types.json", + "copyfile": "shx cp extra/meta.mjs esm/lib/meta.js && shx cp extra/meta.cjs cjs/lib/meta.js", "prepack": "npm run build", "install_old": "node bin/install.js auto", "install_Mac": "CXXFLAGS=\"-std=c++17 -Wno-c++11-narrowing -Wno-c++17-extensions -Wno-c++17-attribute-extensions\" node ./bin/install.js --version 4.5.3 build", @@ -49,50 +60,43 @@ "samples": "cd examples && pnpm install && npm run build && node ./src/templateMatch/multiMatchBench.js && node ./src/templateMatch/multiMatchColision.js && node ./src/applyColorMap.js && node ./src/asyncMatchFeatures.js && node ./src/faceDetect/asyncFaceDetection.js", "do-build": "npm run build && node bin/install.js --version 4.6.0 --jobs MAX build", "do-rebuild": "npm run build && node bin/install.js --version 4.6.0 --jobs MAX rebuild", - "lint": "eslint examples/**/*.ts lib/**/*.ts typings/**/*.ts ", + "lint": "eslint examples/**/*.ts src/**/*.ts typings/**/*.ts ", "clean": "node-gyp clean", - "cleanjs": "rimraf {install,lib,examples}/**/*.{d.ts,js,map}", - "build-debug": "npm run build && BINDINGS_DEBUG=true node bin/install.js rebuild" + "rebuild": "node-gyp rebuild", + "cleanjs": "rimraf {examples}/**/*.{d.ts,js,map} {cjs,esm}/{lib,install}", + "build-debug": "npm run build && BINDINGS_DEBUG=true node bin/install.js rebuild", + "checkExports": "npx @arethetypeswrong/cli $(npm pack)", + "publish-next": "npm publish --dry-run --tag next" }, "dependencies": { - "@u4/opencv-build": "^0.9.1", + "@u4/opencv-build": "1.0.0", + "eslint": "^9.1.1", "glob": "^10.3.12", "nan": "^2.19.0", "node-gyp": "^10.1.0", - "npmlog": "^7.0.1", - "picocolors": "^1.0.0" + "picocolors": "^1.0.0", + "typescript-eslint": "^7.8.0" }, "devDependencies": { + "@eslint/js": "^9.1.1", "@types/node": "^20.12.7", - "@types/npmlog": "^7.0.0", "@types/progress": "^2.0.7", - "@typescript-eslint/eslint-plugin": "^7.7.0", - "@typescript-eslint/parser": "^7.7.0", "axios": "^1.6.8", "cross-env": "^7.0.3", - "eslint": "^8.57.0", - "eslint-config-airbnb": "^19.0.4", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-react": "^7.34.1", - "eslint-plugin-react-hooks": "^4.6.0", "progress": "^2.0.3", "rimraf": "^5.0.5", + "shx": "^0.3.4", "typescript": "^5.4.5" }, "files": [ "cc", - "install/*.js", - "install/*.d.ts", - "install/*.map", - "lib/**/*.xml", - "lib/**/*.js", - "lib/**/*.d.ts", - "lib/**/*.map", + "cjs", + "esm", + "src/**/*.xml", "bin/*.js", "typings", + "types", "binding.gyp", - "binding_old.gyp", - "tsconfig.json" + "binding_old.gyp" ] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a41493a5c..ea6bc557f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,8 +6,11 @@ settings: dependencies: '@u4/opencv-build': - specifier: ^0.9.1 - version: 0.9.1 + specifier: 1.0.0 + version: 1.0.0 + eslint: + specifier: ^9.1.1 + version: 9.1.1 glob: specifier: ^10.3.12 version: 10.3.12 @@ -17,59 +20,38 @@ dependencies: node-gyp: specifier: ^10.1.0 version: 10.1.0 - npmlog: - specifier: ^7.0.1 - version: 7.0.1 picocolors: specifier: ^1.0.0 version: 1.0.0 + typescript-eslint: + specifier: ^7.8.0 + version: 7.8.0(eslint@9.1.1)(typescript@5.4.5) devDependencies: + '@eslint/js': + specifier: ^9.1.1 + version: 9.1.1 '@types/node': specifier: ^20.12.7 version: 20.12.7 - '@types/npmlog': - specifier: ^7.0.0 - version: 7.0.0 '@types/progress': specifier: ^2.0.7 version: 2.0.7 - '@typescript-eslint/eslint-plugin': - specifier: ^7.7.0 - version: 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: ^7.7.0 - version: 7.7.0(eslint@8.57.0)(typescript@5.4.5) axios: specifier: ^1.6.8 version: 1.6.8 cross-env: specifier: ^7.0.3 version: 7.0.3 - eslint: - specifier: ^8.57.0 - version: 8.57.0 - eslint-config-airbnb: - specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0) - eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.7.0)(eslint@8.57.0) - eslint-plugin-jsx-a11y: - specifier: ^6.8.0 - version: 6.8.0(eslint@8.57.0) - eslint-plugin-react: - specifier: ^7.34.1 - version: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.0(eslint@8.57.0) progress: specifier: ^2.0.3 version: 2.0.3 rimraf: specifier: ^5.0.5 version: 5.0.5 + shx: + specifier: ^0.3.4 + version: 0.3.4 typescript: specifier: ^5.4.5 version: 5.4.5 @@ -79,38 +61,42 @@ packages: /@aashutoshrathi/word-wrap@1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - dev: true + dev: false + + /@deno/shim-deno-test@0.5.0: + resolution: {integrity: sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w==} + dev: false - /@babel/runtime@7.24.4: - resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} - engines: {node: '>=6.9.0'} + /@deno/shim-deno@0.19.1: + resolution: {integrity: sha512-8hYIpmDqpG76sn+UY1853RCi+CI7ZWz9tt37nfyDL8rwr6xbW0+GHUwCLcsGbh1uMIKURuJy6xtrIcnW+a0duA==} dependencies: - regenerator-runtime: 0.14.1 - dev: true + '@deno/shim-deno-test': 0.5.0 + which: 4.0.0 + dev: false - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + /@eslint-community/eslint-utils@4.4.0(eslint@9.1.1): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.57.0 + eslint: 9.1.1 eslint-visitor-keys: 3.4.3 - dev: true + dev: false /@eslint-community/regexpp@4.10.0: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + dev: false - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/eslintrc@3.0.2: + resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 + espree: 10.0.1 + globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -118,15 +104,14 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true + dev: false - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + /@eslint/js@9.1.1: + resolution: {integrity: sha512-5WoDz3Y19Bg2BnErkZTp0en+c/i9PvgFS7MBe1+m60HjFr0hrphlAGp4yzI7pxpt4xShln4ZyYp4neJm8hmOkQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + /@humanwhocodes/config-array@0.13.0: + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -134,16 +119,21 @@ packages: minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true + dev: false /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true + dev: false /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - dev: true + dev: false + + /@humanwhocodes/retry@0.2.3: + resolution: {integrity: sha512-X38nUbachlb01YMlvPFojKoiXq+LzZvuSce70KPMPdeM1Rj03k4dR7lDslhbqXn3Ang4EU3+EAmwEAsbrjHW3g==} + engines: {node: '>=18.18'} + dev: false /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -162,12 +152,12 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true + dev: false /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true + dev: false /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -175,7 +165,7 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - dev: true + dev: false /@npmcli/agent@2.2.2: resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==} @@ -205,11 +195,7 @@ packages: /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + dev: false /@types/node@20.12.7: resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} @@ -217,12 +203,6 @@ packages: undici-types: 5.26.5 dev: true - /@types/npmlog@7.0.0: - resolution: {integrity: sha512-hJWbrKFvxKyWwSUXjZMYTINsSOY6IclhvGOZ97M8ac2tmR9hMwmTnYaMdpGhvju9ctWLTPhCS+eLfQNluiEjQQ==} - dependencies: - '@types/node': 20.12.7 - dev: true - /@types/progress@2.0.7: resolution: {integrity: sha512-iadjw02vte8qWx7U0YM++EybBha2CQLPGu9iJ97whVgJUT5Zq9MjAPYUnbfRI2Kpehimf1QjFJYxD0t8nqzu5w==} dependencies: @@ -231,10 +211,10 @@ packages: /@types/semver@7.5.8: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true + dev: false - /@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==} + /@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0)(eslint@9.1.1)(typescript@5.4.5): + resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -245,13 +225,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/type-utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/parser': 7.8.0(eslint@9.1.1)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/type-utils': 7.8.0(eslint@9.1.1)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@9.1.1)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 - eslint: 8.57.0 + eslint: 9.1.1 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -260,10 +240,10 @@ packages: typescript: 5.4.5 transitivePeerDependencies: - supports-color - dev: true + dev: false - /@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} + /@typescript-eslint/parser@7.8.0(eslint@9.1.1)(typescript@5.4.5): + resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -272,27 +252,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 - eslint: 8.57.0 + eslint: 9.1.1 typescript: 5.4.5 transitivePeerDependencies: - supports-color - dev: true + dev: false - /@typescript-eslint/scope-manager@7.7.0: - resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} + /@typescript-eslint/scope-manager@7.8.0: + resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 - dev: true + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 + dev: false - /@typescript-eslint/type-utils@7.7.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==} + /@typescript-eslint/type-utils@7.8.0(eslint@9.1.1)(typescript@5.4.5): + resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -301,23 +281,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@9.1.1)(typescript@5.4.5) debug: 4.3.4 - eslint: 8.57.0 + eslint: 9.1.1 ts-api-utils: 1.3.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - dev: true + dev: false - /@typescript-eslint/types@7.7.0: - resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} + /@typescript-eslint/types@7.8.0: + resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} engines: {node: ^18.18.0 || >=20.0.0} - dev: true + dev: false - /@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.5): - resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} + /@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5): + resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -325,8 +305,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -336,49 +316,45 @@ packages: typescript: 5.4.5 transitivePeerDependencies: - supports-color - dev: true + dev: false - /@typescript-eslint/utils@7.7.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} + /@typescript-eslint/utils@7.8.0(eslint@9.1.1)(typescript@5.4.5): + resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - eslint: 8.57.0 + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + eslint: 9.1.1 semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript - dev: true + dev: false - /@typescript-eslint/visitor-keys@7.7.0: - resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} + /@typescript-eslint/visitor-keys@7.8.0: + resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/types': 7.8.0 eslint-visitor-keys: 3.4.3 - dev: true + dev: false - /@u4/opencv-build@0.9.1: - resolution: {integrity: sha512-28SOPrP6y47CWexaOe1ALuygByPaqrnz5Lkwhn7yHak7IlXWC9bnG5mwvx6G/xR+WjFUjmegjGIGPJGT1VVgzg==} + /@u4/opencv-build@1.0.0: + resolution: {integrity: sha512-3/sBGebF0/UtQCq6YjCMhNSIS7tBQoqIBEFcgrl4wlk4g4rQg51ko0n31Lk5EYY25NXL0rKpyh3c8exH6wvHkQ==} hasBin: true dependencies: + '@deno/shim-deno': 0.19.1 glob: 10.3.12 npmlog: 7.0.1 - picocolors: 1.0.0 - rimraf: 4.4.1 + rimraf: 5.0.5 dev: false - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - /abbrev@2.0.0: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -390,13 +366,13 @@ packages: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.11.3 - dev: true + dev: false /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - dev: true + dev: false /agent-base@7.1.1: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} @@ -422,7 +398,7 @@ packages: fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true + dev: false /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -453,136 +429,17 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - dependencies: - dequal: 2.0.3 - dev: true - - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - dev: true - - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - dev: true + dev: false /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - dev: true - - /array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - dev: true - - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - dev: true - - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true + dev: false /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 - dev: true - - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - dev: true - /axios@1.6.8: resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} dependencies: @@ -593,12 +450,6 @@ packages: - debug dev: true - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - dependencies: - dequal: 2.0.3 - dev: true - /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -607,7 +458,6 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -619,7 +469,7 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: true + dev: false /cacache@18.0.2: resolution: {integrity: sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==} @@ -639,21 +489,10 @@ packages: unique-filename: 3.0.0 dev: false - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - dev: true - /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true + dev: false /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -661,7 +500,7 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true + dev: false /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} @@ -696,11 +535,6 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: true /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} @@ -722,48 +556,6 @@ packages: shebang-command: 2.0.0 which: 2.0.2 - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true - - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true - /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -774,59 +566,23 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: false /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - dev: true - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - dev: true + dev: false /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: true - /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 - dev: true - - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true + dev: false /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -854,344 +610,60 @@ packages: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} dev: false - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: true - - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - dev: true - - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true - - /es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.2 - safe-array-concat: 1.1.2 - dev: true - - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - dev: true - - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - dev: true - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.2 - dev: true - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true - - /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0): - resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 - dependencies: - confusing-browser-globals: 1.0.11 - eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0)(eslint@8.57.0) - object.assign: 4.1.5 - object.entries: 1.1.8 - semver: 6.3.1 - dev: true - - /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0): - resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} - engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 - eslint-plugin-jsx-a11y: ^6.5.1 - eslint-plugin-react: ^7.28.0 - eslint-plugin-react-hooks: ^4.3.0 - dependencies: - eslint: 8.57.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - object.assign: 4.1.5 - object.entries: 1.1.8 - dev: true - - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0)(eslint@8.57.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) - hasown: 2.0.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.24.4 - aria-query: 5.3.0 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.18 - eslint: 8.57.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - dev: true - - /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.57.0 - dev: true - - /eslint-plugin-react@7.34.1(eslint@8.57.0): - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 - array.prototype.toreversed: 1.1.2 - array.prototype.tosorted: 1.1.3 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 - eslint: 8.57.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - object.hasown: 1.1.4 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.11 - dev: true + dev: false - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-scope@8.0.1: + resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true + dev: false /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + dev: false - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: false + + /eslint@9.1.1: + resolution: {integrity: sha512-b4cRQ0BeZcSEzPpY2PjFY70VbO32K7BStTGtBsnIGdTSEEQzBi8hPBcGQmTG2zUvFr9uLe0TK42bw8YszuHEqg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/eslintrc': 3.0.2 + '@eslint/js': 9.1.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.2.3 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.0.1 + eslint-visitor-keys: 4.0.0 + espree: 10.0.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -1202,40 +674,40 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true + dev: false - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /espree@10.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: acorn: 8.11.3 acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - dev: true + eslint-visitor-keys: 4.0.0 + dev: false /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 - dev: true + dev: false /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 - dev: true + dev: false /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - dev: true + dev: false /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - dev: true + dev: false /exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} @@ -1243,7 +715,7 @@ packages: /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + dev: false /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} @@ -1254,35 +726,35 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true + dev: false /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + dev: false /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + dev: false /fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 - dev: true + dev: false - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} dependencies: - flat-cache: 3.2.0 - dev: true + flat-cache: 4.0.1 + dev: false /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: true + dev: false /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -1290,20 +762,19 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true + dev: false - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} dependencies: flatted: 3.3.1 keyv: 4.5.4 - rimraf: 3.0.2 - dev: true + dev: false /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true + dev: false /follow-redirects@1.15.6: resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} @@ -1315,12 +786,6 @@ packages: optional: true dev: true - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} @@ -1353,25 +818,12 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - /gauge@5.0.1: resolution: {integrity: sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -1386,39 +838,19 @@ packages: wide-align: 1.1.5 dev: false - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - dev: true - - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - dev: true - /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: true + dev: false /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: true + dev: false /glob@10.3.12: resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} @@ -1442,30 +874,11 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@9.3.5: - resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - fs.realpath: 1.0.0 - minimatch: 8.0.4 - minipass: 4.2.8 - path-scurry: 1.10.2 + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} dev: false - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - dev: true - /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -1476,13 +889,7 @@ packages: ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 - dev: true - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.4 - dev: true + dev: false /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1490,39 +897,12 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + dev: false /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true - - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - dependencies: - es-define-property: 1.0.0 - dev: true - - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true + dev: false /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} @@ -1571,7 +951,7 @@ packages: /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} - dev: true + dev: false /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -1579,11 +959,12 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true + dev: false /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + dev: false /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} @@ -1601,13 +982,9 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} dev: true /ip-address@9.0.5: @@ -1618,183 +995,41 @@ packages: sprintf-js: 1.1.3 dev: false - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true - - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.2 dev: true - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - dependencies: - is-typed-array: 1.1.13 - dev: true - - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true - - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - dependencies: - call-bind: 1.0.7 - dev: true + dev: false /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: true + dev: false /is-lambda@1.0.1: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} dev: false - /is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - dev: true - - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true + dev: false /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - dev: true - - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true - - /is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - dev: true - - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - dev: true - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.15 - dev: true - - /is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - dev: true - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.7 - dev: true - - /is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true - - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + dev: false /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1804,16 +1039,6 @@ packages: engines: {node: '>=16'} dev: false - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 - set-function-name: 2.0.2 - dev: true - /jackspeak@2.3.6: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} @@ -1822,16 +1047,12 @@ packages: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true - /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 - dev: true + dev: false /jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} @@ -1839,49 +1060,21 @@ packages: /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + dev: false /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + dev: false /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 - dev: true + dev: false /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 - dev: true - - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true - - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - dependencies: - language-subtag-registry: 0.3.22 - dev: true + dev: false /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -1889,25 +1082,18 @@ packages: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true + dev: false /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 - dev: true + dev: false /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: true + dev: false /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} @@ -1918,6 +1104,7 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 + dev: false /make-fetch-happen@13.0.0: resolution: {integrity: sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==} @@ -1941,7 +1128,7 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: true + dev: false /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} @@ -1949,7 +1136,7 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true + dev: false /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -1967,14 +1154,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true - - /minimatch@8.0.4: - resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: false /minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} @@ -2032,11 +1211,6 @@ packages: yallist: 4.0.0 dev: false - /minipass@4.2.8: - resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} - engines: {node: '>=8'} - dev: false - /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} @@ -2062,10 +1236,7 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + dev: false /nan@2.19.0: resolution: {integrity: sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==} @@ -2073,7 +1244,7 @@ packages: /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + dev: false /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} @@ -2117,76 +1288,6 @@ packages: set-blocking: 2.0.0 dev: false - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true - - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true - - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: true - - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - dev: true - - /object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: true - - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true - /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -2203,21 +1304,21 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true + dev: false /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - dev: true + dev: false /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 - dev: true + dev: false /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} @@ -2231,12 +1332,12 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 - dev: true + dev: false /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - dev: true + dev: false /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} @@ -2261,7 +1362,7 @@ packages: /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: true + dev: false /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -2270,17 +1371,12 @@ packages: /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true - - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + dev: false /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - dev: true + dev: false /proc-log@3.0.0: resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} @@ -2300,14 +1396,6 @@ packages: retry: 0.12.0 dev: false - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: true - /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true @@ -2315,47 +1403,23 @@ packages: /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - dev: true + dev: false /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true - - /reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 - dev: true - - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true + dev: false - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} + /rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 + resolve: 1.22.8 dev: true /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true + dev: false /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} @@ -2366,15 +1430,6 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -2383,21 +1438,6 @@ packages: /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rimraf@4.4.1: - resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} - engines: {node: '>=14'} - hasBin: true - dependencies: - glob: 9.3.5 dev: false /rimraf@5.0.5: @@ -2406,32 +1446,12 @@ packages: hasBin: true dependencies: glob: 10.3.12 - dev: true /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: true - - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - dev: true - - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - dev: true + dev: false /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -2439,44 +1459,18 @@ packages: dev: false optional: true - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true - /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 + dev: false /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: false - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - dev: true - - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - dev: true - /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2487,14 +1481,23 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + /shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true + + /shx@0.3.4: + resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} + engines: {node: '>=6'} + hasBin: true dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + minimist: 1.2.8 + shelljs: 0.8.5 dev: true /signal-exit@4.1.0: @@ -2504,7 +1507,7 @@ packages: /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dev: true + dev: false /smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} @@ -2557,51 +1560,6 @@ packages: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - /string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.2 - side-channel: 1.0.6 - dev: true - - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: true - - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true - - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true - /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2614,22 +1572,17 @@ packages: dependencies: ansi-regex: 6.0.1 - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true - /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - dev: true + dev: false /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true + dev: false /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} @@ -2650,14 +1603,14 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + dev: false /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: true + dev: false /ts-api-utils@1.3.0(typescript@5.4.5): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} @@ -2666,87 +1619,38 @@ packages: typescript: '>=4.2.0' dependencies: typescript: 5.4.5 - dev: true - - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true + dev: false /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true + dev: false - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + /typescript-eslint@7.8.0(eslint@9.1.1)(typescript@5.4.5): + resolution: {integrity: sha512-sheFG+/D8N/L7gC3WT0Q8sB97Nm573Yfr+vZFzl/4nBdYcmviBPtwGSX9TJ7wpVg28ocerKVOt+k2eGmHzcgVA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - dev: true + '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0)(eslint@9.1.1)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@9.1.1)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@9.1.1)(typescript@5.4.5) + eslint: 9.1.1 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: false /typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true - dev: true - - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -2770,56 +1674,7 @@ packages: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 - dev: true - - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.15 - dev: true - - /which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.3 - dev: true - - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: true + dev: false /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -2864,8 +1719,9 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - dev: true + dev: false diff --git a/install/compileLib.ts b/src/install/compileLib.ts similarity index 87% rename from install/compileLib.ts rename to src/install/compileLib.ts index f4ca95cdb..046fdc521 100644 --- a/install/compileLib.ts +++ b/src/install/compileLib.ts @@ -1,25 +1,25 @@ -import { type OpencvModule, OpenCVBuilder, OpenCVBuildEnv, type OpenCVBuildEnvParams, args2Option, genHelp } from '@u4/opencv-build' -import * as child_process from 'child_process' -import * as fs from 'fs' -import * as npmlog from 'npmlog' -import { LogLevels } from 'npmlog' -import { resolvePath } from '../lib/commons.js' -import * as pc from 'picocolors' -import * as path from 'path' -import { EOL } from 'os' +import { Log, Platfrm, StaticTools } from '@u4/opencv-build'; +import type { OpencvModule, OpenCVBuildEnvParams, LogLevels } from '@u4/opencv-build'; +import { OpenCVBuilder, OpenCVBuildEnv, args2Option, genHelp } from '@u4/opencv-build'; +import child_process from 'child_process'; +import fs from 'fs'; +import pc from 'picocolors'; +import path from 'path'; +import { EOL } from 'os'; import { globSync } from "glob"; -import { getOpenCV } from '../lib/cvloader.js' +import { resolvePath } from '../lib/commons.js'; +import { getOpenCV } from '../lib/cvloader.js'; -const defaultDir = '/usr/local' -const defaultLibDir = `${defaultDir}/lib` -const defaultIncludeDir = `${defaultDir}/include` -const defaultIncludeDirOpenCV4 = `${defaultIncludeDir}/opencv4` +const defaultDir = '/usr/local'; +const defaultLibDir = `${defaultDir}/lib`; +const defaultIncludeDir = `${defaultDir}/include`; +const defaultIncludeDirOpenCV4 = `${defaultIncludeDir}/opencv4`; let silenceMode = false; function log(level: LogLevels | string, prefix: string, message: string, ...args: unknown[]): void { - if (!OpenCVBuildEnv.silence) - npmlog.log(level, prefix, message, ...args); + if (!Log.silence) + Log.log(level, prefix, message, ...args); } function toBool(value?: string | boolean | number | null) { @@ -37,9 +37,9 @@ function toBool(value?: string | boolean | number | null) { /** * @returns global system include paths */ -function getDefaultIncludeDirs(env: OpenCVBuildEnv) { +function getDefaultIncludeDirs(/*env: OpenCVBuildEnv*/) { log('info', 'install', 'OPENCV_INCLUDE_DIR is not set, looking for default include dir') - if (env.isWin) { + if (Platfrm.isWindows) { throw new Error('OPENCV_INCLUDE_DIR has to be defined on windows when auto build is disabled') } return [defaultIncludeDir, defaultIncludeDirOpenCV4] @@ -48,9 +48,9 @@ function getDefaultIncludeDirs(env: OpenCVBuildEnv) { /** * @returns return a path like /usr/local/lib */ -function getDefaultLibDir(env: OpenCVBuildEnv) { +function getDefaultLibDir(/*env: OpenCVBuildEnv*/) { log('info', 'install', 'OPENCV_LIB_DIR is not set, looking for default lib dir') - if (env.isWin) { + if (Platfrm.isWindows) { throw new Error('OPENCV_LIB_DIR has to be defined on windows when auto build is disabled') } return defaultLibDir @@ -61,7 +61,7 @@ function getDefaultLibDir(env: OpenCVBuildEnv) { */ function getLibDir(env: OpenCVBuildEnv): string { if (env.isAutoBuildDisabled) { - return resolvePath(process.env.OPENCV_LIB_DIR) || getDefaultLibDir(env); + return resolvePath(process.env.OPENCV_LIB_DIR) || getDefaultLibDir(); } else { const dir = resolvePath(env.opencvLibDir); if (!dir) { @@ -79,7 +79,7 @@ function getLibDir(env: OpenCVBuildEnv): string { * @returns */ function getOPENCV4NODEJS_LIBRARIES(env: OpenCVBuildEnv, libDir: string, libsFoundInDir: OpencvModule[]): string[] { - const libs = env.isWin + const libs = Platfrm.isWindows ? libsFoundInDir.map(lib => resolvePath(lib.libPath)) // dynamically link libs if not on windows : ['-L' + libDir] @@ -139,7 +139,7 @@ function getOPENCV4NODEJS_INCLUDES(env: OpenCVBuildEnv): string[] { includes = [explicitIncludeDir, path.resolve(explicitIncludeDir, 'opencv4')]; } } else { - includes = getDefaultIncludeDirs(env); + includes = getDefaultIncludeDirs(); } } else { includes = [resolvePath(env.opencvInclude), resolvePath(env.opencv4Include)]; @@ -179,8 +179,8 @@ export async function compileLib(args: string[]) { const buildOptions: OpenCVBuildEnvParams = args2Option(args) if (actionOriginal === 'list') { - const buildDir = OpenCVBuildEnv.getBuildDir(buildOptions); - const builds = OpenCVBuildEnv.listBuild(buildDir); + const buildDir = StaticTools.getBuildDir(buildOptions); + const builds = StaticTools.listBuild(buildDir); if (!builds.length) { console.log(`${pc.red('NO Build available on your system in')} ${pc.green(buildDir)}`); } else { @@ -202,11 +202,11 @@ export async function compileLib(args: string[]) { if (actionOriginal.startsWith('OPENCV4NODEJS_')) { silenceMode = true; - OpenCVBuildEnv.silence = true; + Log.silence = true; } const env = process.env; - const npmEnv = OpenCVBuildEnv.readEnvsFromPackageJson() || {}; + const npmEnv = StaticTools.readEnvsFromPackageJson() || {}; let action = actionOriginal; if (actionOriginal === 'auto') { try { @@ -230,13 +230,14 @@ export async function compileLib(args: string[]) { action = 'rebuild'; } } + const extra = buildOptions.extra || {}; - if (buildOptions.extra.jobs) { - JOBS = buildOptions.extra.jobs; + if (extra.jobs) { + JOBS = extra.jobs; } if (buildOptions.disableAutoBuild || toBool(env.OPENCV4NODEJS_DISABLE_AUTOBUILD) || npmEnv.disableAutoBuild) { - const summery = OpenCVBuildEnv.autoLocatePrebuild(); + const summery = StaticTools.autoLocatePrebuild(); if (!silenceMode) { log('info', 'envAutodetect', `autodetect ${pc.green('%d')} changes`, summery.changes) for (const txt of summery.summery) { @@ -245,14 +246,15 @@ export async function compileLib(args: string[]) { } } - if (buildOptions.extra['dry-run'] || buildOptions.extra['dryrun']) { + if (extra['dry-run'] || extra['dryrun']) { dryRun = true; } if (!silenceMode) { - for (const K in ['autoBuildFlags']) { + const K = 'autoBuildFlags' as const; + // for (const K in ['autoBuildFlags'] as const) { if (buildOptions[K]) console.log(`using ${K}:`, buildOptions[K]); - } + // } } try { @@ -309,7 +311,7 @@ or use OPENCV4NODEJS_* env variable.`) if (silenceMode) { - const outputs = process.env[actionOriginal].split(/[\n;]/); + const outputs = (process.env[actionOriginal] || '').split(/[\n;]/); outputs.forEach(o => console.log(o)); return; } @@ -325,7 +327,7 @@ or use OPENCV4NODEJS_* env variable.`) // --verbose, --loglevel=verbose Log most progress to console // --silent, --loglevel=silent Don't log anything to console - if (process.env.BINDINGS_DEBUG || buildOptions.extra['debug']) + if (process.env.BINDINGS_DEBUG || extra['debug']) flags += ' --debug'; else flags += ' --release'; @@ -336,12 +338,12 @@ or use OPENCV4NODEJS_* env variable.`) // const arch = 'x86_64' / 'x64' // flags += --arch=${arch} --target_arch=${arch} - const cmdOptions = buildOptions.extra['node-gyp-options'] || ''; + const cmdOptions = extra['node-gyp-options'] || ''; flags += ` ${cmdOptions}`; - const nodegyp = buildOptions.extra.electron ? 'electron-rebuild' : 'node-gyp'; + const nodegyp = extra.electron ? 'electron-rebuild' : 'node-gyp'; let nodegypCmd = ''; - for (const dir of process.env.PATH.split(path.delimiter)) { + for (const dir of (process.env.PATH || '').split(path.delimiter)) { nodegypCmd = getExistingBin(dir, nodegyp); if (nodegypCmd) { // no need to use full path @@ -376,7 +378,7 @@ or use OPENCV4NODEJS_* env variable.`) log('info', 'install', `Spawning in directory:${cwd} node-gyp process: ${nodegypCmd}`) - if (buildOptions.extra.vscode) { + if (extra.vscode) { // const nan = require('nan'); // const nativeNodeUtils = require('native-node-utils'); // const pblob = promisify(blob) @@ -431,9 +433,9 @@ or use OPENCV4NODEJS_* env variable.`) // if (key.startsWith('OPENCV')) // console.log(`export ${key}=${process.env[key]}`); // } - const child = child_process.exec(nodegypCmd, { maxBuffer: Infinity, cwd }, function (error/*, stdout, stderr*/) { + const child = child_process.exec(nodegypCmd, { maxBuffer: Infinity, cwd }, function callNodegypCmd(error/*, stdout, stderr*/) { // fs.unlinkSync(realGyp); - const bin = buildOptions.extra.electron ? 'electron-rebuild' : 'node-gyp'; + const bin = extra.electron ? 'electron-rebuild' : 'node-gyp'; if (error) { console.log(`error: `, error); log('error', 'install', `${bin} failed and return ${error.name} ${error.message} return code: ${error.code}`); diff --git a/install/parseEnv.ts b/src/install/parseEnv.ts similarity index 100% rename from install/parseEnv.ts rename to src/install/parseEnv.ts diff --git a/lib/commons.ts b/src/lib/commons.ts similarity index 96% rename from lib/commons.ts rename to src/lib/commons.ts index 970a36c8d..3b4658028 100644 --- a/lib/commons.ts +++ b/src/lib/commons.ts @@ -1,4 +1,4 @@ -import * as path from 'path' +import path from 'path' export function resolvePath(filePath?: string, file?: string): string { if (!filePath) { diff --git a/lib/cvloader.ts b/src/lib/cvloader.ts similarity index 72% rename from lib/cvloader.ts rename to src/lib/cvloader.ts index 7644f7cea..2bb8694a6 100644 --- a/lib/cvloader.ts +++ b/src/lib/cvloader.ts @@ -1,15 +1,15 @@ -import { OpenCVBuilder, type OpenCVBuildEnvParams } from '@u4/opencv-build'; -import * as fs from 'fs'; -import * as path from 'path'; -import { isElectronWebpack, resolvePath } from './commons.js'; -import * as pc from 'picocolors' -import { info } from 'npmlog'; -import type * as openCV from '..'; +import { pc, Log, OpenCVBuilder, type OpenCVBuildEnvParams } from '@u4/opencv-build'; +import fs from 'fs'; +import path from 'path'; +import { isElectronWebpack } from './commons.js'; +import type * as openCV from '../../typings/index.js'; +import { getDirName, getRequire } from './meta.js'; + declare type OpenCVType = typeof openCV; -const logDebug = process.env.OPENCV4NODES_DEBUG_REQUIRE ? info : () => { /* ignore */ } +const logDebug = process.env.OPENCV4NODES_DEBUG_REQUIRE ? (prefix: string, message: string, ...args: unknown[]) => Log.log('info', prefix, message, ...args) : () => { /* ignore */ } -function tryGetOpencvBinDir(builder: OpenCVBuilder) { +function tryGetOpencvBinDir(builder: OpenCVBuilder): string { if (process.env.OPENCV_BIN_DIR) { logDebug('tryGetOpencvBinDir', `${pc.yellow('OPENCV_BIN_DIR')} environment variable is set`) return process.env.OPENCV_BIN_DIR @@ -34,7 +34,7 @@ function tryGetOpencvBinDir(builder: OpenCVBuilder) { return builder.env.opencvBinDir as string } logDebug('tryGetOpencvBinDir', 'failed to find opencv binary environment variable in package.json') - return null + return ""; } export function getOpenCV(opt?: OpenCVBuildEnvParams): OpenCVType { @@ -42,24 +42,25 @@ export function getOpenCV(opt?: OpenCVBuildEnvParams): OpenCVType { opt = { prebuild: 'latestBuild' } const builder = new OpenCVBuilder(opt); - let opencvBuild: OpenCVType = null; + let opencvBuild: OpenCVType | null = null; let requirePath = ''; if (isElectronWebpack()) { - requirePath = '../build/Release/opencv4nodejs.node'; + requirePath = '../../build/Release/opencv4nodejs.node'; } else { - requirePath = path.join(__dirname, '../build/Debug/opencv4nodejs.node'); + const dirname = getDirName(); + requirePath = path.join(dirname, '../../build/Debug/opencv4nodejs.node'); if (!fs.existsSync(requirePath)) { - requirePath = path.join(__dirname, '../build/Release/opencv4nodejs.node'); + requirePath = path.join(dirname, '../../build/Release/opencv4nodejs.node'); } requirePath = requirePath.replace(/\.node$/, ''); - // path.join(__dirname, process.env.BINDINGS_DEBUG ? '../build/Debug/opencv4nodejs' : '../build/Release/opencv4nodejs') } try { logDebug('require', `require path is ${pc.yellow(requirePath)}`) - opencvBuild = require(requirePath); + opencvBuild = getRequire()(requirePath); + } catch (err) { // err.code === 'ERR_DLOPEN_FAILED' - logDebug('require', `failed to require cv with exception: ${pc.red(err.toString())}`) + logDebug('require', `failed to require cv with exception: ${pc.red((err as Error).toString())}`) logDebug('require', 'attempting to add opencv binaries to path') if (!process.env.path) { @@ -78,7 +79,7 @@ export function getOpenCV(opt?: OpenCVBuildEnvParams): OpenCVType { } logDebug('require', 'process.env.path: ' + process.env.path) try { - opencvBuild = require(requirePath); + opencvBuild = getRequire()(requirePath); } catch (e) { if (e instanceof Error) { let msg = ''; @@ -108,14 +109,8 @@ export function getOpenCV(opt?: OpenCVBuildEnvParams): OpenCVType { throw e; } } - - // resolve haarcascade files - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const { haarCascades, lbpCascades } = opencvBuild as any; - Object.keys(haarCascades).forEach( - key => opencvBuild[key] = resolvePath(path.join(__dirname, 'haarcascades'), haarCascades[key])); - Object.keys(lbpCascades).forEach( - key => opencvBuild[key] = resolvePath(path.join(__dirname, 'lbpcascades'), lbpCascades[key])); + if (!opencvBuild) + throw new Error('Failed to require opencv4nodejs.node'); return opencvBuild; } diff --git a/src/lib/ext/deprecations.ts b/src/lib/ext/deprecations.ts new file mode 100644 index 000000000..9f1444280 --- /dev/null +++ b/src/lib/ext/deprecations.ts @@ -0,0 +1,41 @@ +import assert from 'assert'; +import type * as openCV from '../../../typings/index.js' + +let cv: typeof openCV; +let _calcHist: (img: openCV.Mat, histAxes: openCV.HistAxes[], mask?: openCV.Mat) => openCV.Mat; + +function calcHist(img: openCV.Mat, histAxes: { channel: number, bins: number, ranges: [number, number] }[], mask?: openCV.Mat) { + assert(img instanceof cv.Mat, 'Imgproc::CalcHist - Error: expected argument 0 to be of type Mat'); + assert(Array.isArray(histAxes), 'Imgproc::CalcHist - Error: expected argument 1 to be of type array of HistAxes'); + + histAxes = histAxes.slice(); + + let warningThrown = false; + const len = histAxes.length; + + for (let i = 0; i < len; ++i) { + const entry = histAxes[i]; + if (!(entry instanceof cv.HistAxes)) { + if (!warningThrown) { + warningThrown = true; + console.warn(`Imgproc::CalcHist - Deprecated support for object in argument 1 at index ${i}. Please switch to using HistAxes instances.`); + } + histAxes[i] = new cv.HistAxes(entry); + } + } + + if (mask) { + return _calcHist(img, histAxes, mask); + } + return _calcHist(img, histAxes); +} + +export default function (newCv: typeof openCV): void { + // store global cv + cv = newCv; + _calcHist = cv.calcHist; + + // deprecate wrapper for the old calcHist API + // const _calcHist = cv.calcHist; + cv.calcHist = calcHist; +} diff --git a/lib/src/drawUtils.ts b/src/lib/ext/drawUtils.ts similarity index 66% rename from lib/src/drawUtils.ts rename to src/lib/ext/drawUtils.ts index dda4100fc..66390fd0e 100644 --- a/lib/src/drawUtils.ts +++ b/src/lib/ext/drawUtils.ts @@ -1,5 +1,6 @@ -import type * as openCV from '../..'; -import { Mat, Rect, Vec3 } from '../..'; +/* eslint-disable @typescript-eslint/ban-ts-comment */ +import type * as openCV from '../../../typings/index.js'; +import { Mat, Rect, Vec3 } from '../../../typings/index.js'; export interface TextParams { fontType: number; @@ -8,7 +9,12 @@ export interface TextParams { lineType: number; } -export interface TextLines { +export interface FontParams extends DrawParams { + fontType?: number; + fontSize?: number; +} + +export interface TextLines extends FontParams { text: string; } @@ -18,34 +24,34 @@ export interface TextDimention { baseLine: number; } -interface DrawParams { +export interface DrawParams { color?: Vec3; thickness?: number; lineType?: number; shift?: number; } -export default function (cv: typeof openCV): void { - const DefaultTextParams: TextParams = { fontType: cv.FONT_HERSHEY_SIMPLEX, fontSize: 0.8, thickness: 2, lineType: cv.LINE_4 } +let cv: typeof openCV; +let DefaultTextParams: TextParams - function reshapeRectAtBorders(rect: Rect, imgDim: Mat) { - const x = Math.min(Math.max(0, rect.x), imgDim.cols) - const y = Math.min(Math.max(0, rect.y), imgDim.rows) - const width = Math.min(rect.width, imgDim.cols - x) - const height = Math.min(rect.height, imgDim.rows - y) - return new cv.Rect(x, y, width, height) - } +function reshapeRectAtBorders(rect: Rect, imgDim: Mat) { + const x = Math.min(Math.max(0, rect.x), imgDim.cols) + const y = Math.min(Math.max(0, rect.y), imgDim.rows) + const width = Math.min(rect.width, imgDim.cols - x) + const height = Math.min(rect.height, imgDim.rows - y) + return new cv.Rect(x, y, width, height) +} - function insertText(boxImg: Mat, text: string, origin: { x: number, y: number }, opts: Partial) { - const fontType = opts.fontType || DefaultTextParams.fontType; - const fontSize = opts.fontSize || DefaultTextParams.fontSize; - const color = opts.color || new cv.Vec3(255, 255, 255); - const thickness = opts.thickness || DefaultTextParams.thickness; - const lineType = opts.lineType || DefaultTextParams.lineType; - const originPt = new cv.Point2(origin.x, origin.y) - boxImg.putText(text, originPt, fontType, fontSize, color, thickness, lineType, 0) - return boxImg - } +function insertText(boxImg: Mat, text: string, origin: { x: number, y: number }, opts: Partial) { + const fontType = opts.fontType || DefaultTextParams.fontType; + const fontSize = opts.fontSize || DefaultTextParams.fontSize; + const color = opts.color || new cv.Vec3(255, 255, 255); + const thickness = opts.thickness || DefaultTextParams.thickness; + const lineType = opts.lineType || DefaultTextParams.lineType; + const originPt = new cv.Point2(origin.x, origin.y) + boxImg.putText(text, originPt, fontType, fontSize, color, thickness, lineType, 0) + return boxImg +} /** * get text block contour @@ -75,10 +81,6 @@ export default function (cv: typeof openCV): void { }, 0) } - // function getBaseLine(textLine: TextLines, opts?: Partial): number { - // return getTextSize(textLine.text, opts).baseLine - // } - /** * get single text line height in pixel * @param textLine line to write @@ -99,7 +101,7 @@ export default function (cv: typeof openCV): void { return textLines.reduce((height, textLine) => height + getLineHeight(textLine, opts), 0) } - cv.drawTextBox = function drawTextBox(img: Mat, upperLeft: { x: number, y: number }, textLines: TextLines[], alpha: number): Mat { + export function drawTextBox(img: Mat, upperLeft: { x: number, y: number }, textLines: TextLines[], alpha: number): Mat { const padding = 10 const linePadding = 10 @@ -116,13 +118,17 @@ export default function (cv: typeof openCV): void { pt = pt.add(new cv.Point2(0, getLineHeight(textLine))) insertText(boxImg, textLine.text, pt, opts) pt = pt.add(new cv.Point2(0, linePadding)) - } + }, ) boxImg.copyTo(img.getRegion(rect)) return img } - cv.drawDetection = function drawDetection(img: Mat, inputRect: Rect, opts = {} as DrawParams & { segmentFraction?: number }): Rect { + export interface DrawDetectionParams extends DrawParams { + segmentFraction?: number; + } + + export function drawDetection(img: Mat, inputRect: Rect, opts = {} as DrawDetectionParams): Rect { const rect = inputRect.toSquare() const { x, y, width, height } = rect @@ -148,4 +154,20 @@ export default function (cv: typeof openCV): void { img.drawLine(bottomRight, bottomRight.add(new cv.Point2(-segmentLength, 0)), drawParams) return rect } + +export default function (newCv: typeof openCV): void { + cv = newCv; + + DefaultTextParams = { + fontType: cv.FONT_HERSHEY_SIMPLEX, + fontSize: 0.8, + thickness: 2, + lineType: cv.LINE_4, + }; + + // @ts-ignore + cv.drawTextBox = drawTextBox; + + // @ts-ignore + cv.drawDetection = drawDetection; } \ No newline at end of file diff --git a/src/lib/ext/index.ts b/src/lib/ext/index.ts new file mode 100644 index 000000000..e57b9a477 --- /dev/null +++ b/src/lib/ext/index.ts @@ -0,0 +1,14 @@ +import makeDrawUtils from './drawUtils.js'; +import deprecations from './deprecations.js'; +import * as OpenCV from '../../../typings/index.js'; +import misc from './misc.js'; + +export default function extendWithJsSources(cv: typeof OpenCV) { + // add functions + makeDrawUtils(cv); + // add functions + misc(cv); + // add wrapper on calcHist function + deprecations(cv); + return cv; +} \ No newline at end of file diff --git a/src/lib/ext/misc.ts b/src/lib/ext/misc.ts new file mode 100644 index 000000000..2bf6bcc8c --- /dev/null +++ b/src/lib/ext/misc.ts @@ -0,0 +1,124 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +import type * as openCV from '../../../typings/index.js'; +import type { Mat, Rect } from '../../../typings/index.js'; + +export const allTypes = ['CV_8U', 'CV_8S', 'CV_16U', 'CV_16S', 'CV_32S', 'CV_32F', 'CV_64F', 'CV_8UC1', 'CV_8UC2', 'CV_8UC3', 'CV_8UC4', 'CV_8SC1', 'CV_8SC2', 'CV_8SC3', 'CV_8SC4', 'CV_16UC1', 'CV_16UC2', 'CV_16UC3', 'CV_16UC4', 'CV_16SC1', 'CV_16SC2', 'CV_16SC3', 'CV_16SC4', 'CV_32SC1', 'CV_32SC2', 'CV_32SC3', 'CV_32SC4', 'CV_32FC1', 'CV_32FC2', 'CV_32FC3', 'CV_32FC4', 'CV_64FC1', 'CV_64FC2', 'CV_64FC3', 'CV_64FC4'] as const; +export type MatTypes = typeof allTypes[number]; + +let cv: typeof openCV; + +/** + * Check declaration and doc in cv.d.ts + */ +export function getVersion(): [number, number, number] { + return [cv.getVersionMajor(), cv.getVersionMinor(), cv.getVersionRevision()]; +} +/** + * Check declaration and doc in cv.d.ts + */ +export function getVersionString(): string { + return `${cv.getVersionMajor()}.${cv.getVersionMinor()}.${cv.getVersionRevision()}`; +} + +/** + * Convert a Mat type to string for easy read + * non Natif code + * @param type Mat type as int value + */ +export function toMatTypeName(type: number): MatTypes | undefined { + for (const t of allTypes) { + if (cv[t] === type) return t; + } + return undefined; +} + +/** + * Find values greater than threshold in a 32bit float matrix and return a list of matchs formated as [[x1, y1, score1]. [x2, y2, score2], [x3, y3, score3]] + * add to be used with matchTemplate + * non Natif code + * @param scoreMat Matric containing scores as 32Bit float (CV_32F) + * @param threshold Minimal score to collect + * @param region search region + * @returns a list of matchs + */ +export function getScoreMax(scoreMat: Mat, threshold: number, region?: Rect): Array<[number, number, number]> { + if (scoreMat.type !== cv.CV_32F) + throw Error('this method can only be call on a CV_32F Mat'); + if (scoreMat.dims !== 2) + throw Error('this method can only be call on a 2 dimmention Mat'); + + const out: Array<[number, number, number]> = []; + const { cols, rows } = scoreMat; + const raw = scoreMat.getData(); + + let x1: number, x2: number, y1: number, y2: number; + if (region) { + x1 = region.x; + y1 = region.y; + x2 = x1 + region.width; + y2 = y1 + region.height; + } else { + x1 = y1 = 0; + x2 = cols; + y2 = rows; + } + for (let y = y1; y < y2; y++) { + let offset = (x1 + y * cols) * 4; + for (let x = x1; x < x2; x++) { + const value = raw.readFloatLE(offset); + if (value > threshold) { + out.push([x, y, value]); + } + offset += 4; + } + } + return out; +} + +/** + * Drop overlaping zones, keeping best one + * @param template template Matrix used to get dimentions. + * @param matches list of matches as a list in [x,y,score]. (this data will be altered) + * @returns best match without colisions + */ +export function dropOverlappingZone(template: Mat, matches: Array<[number, number, number]>): Array<[number, number, number]> { + const total = matches.length; + const width = template.cols / 2; + const height = template.rows / 2; + for (let i = 0; i < total; i++) { + const cur = matches[i]; + if (!cur[2]) continue; + for (let j = i + 1; j < total; j++) { + const sec = matches[j]; + if (!sec[2]) continue; + if (Math.abs(cur[1] - sec[1]) > height) continue; + if (Math.abs(cur[0] - sec[0]) > width) continue; + if (cur[2] > sec[2]) { + sec[2] = 0; + } else { + cur[2] = 0; + break; + } + } + } + return matches.filter(m => m[2]); +} + +/** + * register new functions + * @param cv + */ +export default function (newCv: typeof openCV): void { + // store global cv + cv = newCv; + // @ts-ignore + cv.getVersion = getVersion; + // @ts-ignore + cv.getVersionString = getVersionString; + // @ts-ignore + cv.toMatTypeName = toMatTypeName; + // @ts-ignore + cv.getScoreMax = getScoreMax; + // @ts-ignore + cv.dropOverlappingZone = dropOverlappingZone; +} diff --git a/lib/haarcascades/haarcascade_eye.xml b/src/lib/haarcascades/haarcascade_eye.xml similarity index 100% rename from lib/haarcascades/haarcascade_eye.xml rename to src/lib/haarcascades/haarcascade_eye.xml diff --git a/lib/haarcascades/haarcascade_eye_tree_eyeglasses.xml b/src/lib/haarcascades/haarcascade_eye_tree_eyeglasses.xml similarity index 100% rename from lib/haarcascades/haarcascade_eye_tree_eyeglasses.xml rename to src/lib/haarcascades/haarcascade_eye_tree_eyeglasses.xml diff --git a/lib/haarcascades/haarcascade_frontalcatface.xml b/src/lib/haarcascades/haarcascade_frontalcatface.xml similarity index 100% rename from lib/haarcascades/haarcascade_frontalcatface.xml rename to src/lib/haarcascades/haarcascade_frontalcatface.xml diff --git a/lib/haarcascades/haarcascade_frontalcatface_extended.xml b/src/lib/haarcascades/haarcascade_frontalcatface_extended.xml similarity index 100% rename from lib/haarcascades/haarcascade_frontalcatface_extended.xml rename to src/lib/haarcascades/haarcascade_frontalcatface_extended.xml diff --git a/lib/haarcascades/haarcascade_frontalface_alt.xml b/src/lib/haarcascades/haarcascade_frontalface_alt.xml similarity index 100% rename from lib/haarcascades/haarcascade_frontalface_alt.xml rename to src/lib/haarcascades/haarcascade_frontalface_alt.xml diff --git a/lib/haarcascades/haarcascade_frontalface_alt2.xml b/src/lib/haarcascades/haarcascade_frontalface_alt2.xml similarity index 100% rename from lib/haarcascades/haarcascade_frontalface_alt2.xml rename to src/lib/haarcascades/haarcascade_frontalface_alt2.xml diff --git a/lib/haarcascades/haarcascade_frontalface_alt_tree.xml b/src/lib/haarcascades/haarcascade_frontalface_alt_tree.xml similarity index 100% rename from lib/haarcascades/haarcascade_frontalface_alt_tree.xml rename to src/lib/haarcascades/haarcascade_frontalface_alt_tree.xml diff --git a/lib/haarcascades/haarcascade_frontalface_default.xml b/src/lib/haarcascades/haarcascade_frontalface_default.xml similarity index 100% rename from lib/haarcascades/haarcascade_frontalface_default.xml rename to src/lib/haarcascades/haarcascade_frontalface_default.xml diff --git a/lib/haarcascades/haarcascade_fullbody.xml b/src/lib/haarcascades/haarcascade_fullbody.xml similarity index 100% rename from lib/haarcascades/haarcascade_fullbody.xml rename to src/lib/haarcascades/haarcascade_fullbody.xml diff --git a/lib/haarcascades/haarcascade_lefteye_2splits.xml b/src/lib/haarcascades/haarcascade_lefteye_2splits.xml similarity index 100% rename from lib/haarcascades/haarcascade_lefteye_2splits.xml rename to src/lib/haarcascades/haarcascade_lefteye_2splits.xml diff --git a/lib/haarcascades/haarcascade_licence_plate_rus_16stages.xml b/src/lib/haarcascades/haarcascade_license_plate_rus_16stages.xml similarity index 100% rename from lib/haarcascades/haarcascade_licence_plate_rus_16stages.xml rename to src/lib/haarcascades/haarcascade_license_plate_rus_16stages.xml diff --git a/lib/haarcascades/haarcascade_lowerbody.xml b/src/lib/haarcascades/haarcascade_lowerbody.xml similarity index 100% rename from lib/haarcascades/haarcascade_lowerbody.xml rename to src/lib/haarcascades/haarcascade_lowerbody.xml diff --git a/lib/haarcascades/haarcascade_profileface.xml b/src/lib/haarcascades/haarcascade_profileface.xml similarity index 100% rename from lib/haarcascades/haarcascade_profileface.xml rename to src/lib/haarcascades/haarcascade_profileface.xml diff --git a/lib/haarcascades/haarcascade_righteye_2splits.xml b/src/lib/haarcascades/haarcascade_righteye_2splits.xml similarity index 100% rename from lib/haarcascades/haarcascade_righteye_2splits.xml rename to src/lib/haarcascades/haarcascade_righteye_2splits.xml diff --git a/lib/haarcascades/haarcascade_russian_plate_number.xml b/src/lib/haarcascades/haarcascade_russian_plate_number.xml similarity index 100% rename from lib/haarcascades/haarcascade_russian_plate_number.xml rename to src/lib/haarcascades/haarcascade_russian_plate_number.xml diff --git a/lib/haarcascades/haarcascade_smile.xml b/src/lib/haarcascades/haarcascade_smile.xml similarity index 100% rename from lib/haarcascades/haarcascade_smile.xml rename to src/lib/haarcascades/haarcascade_smile.xml diff --git a/lib/haarcascades/haarcascade_upperbody.xml b/src/lib/haarcascades/haarcascade_upperbody.xml similarity index 100% rename from lib/haarcascades/haarcascade_upperbody.xml rename to src/lib/haarcascades/haarcascade_upperbody.xml diff --git a/lib/lbpcascades/lbpcascade_frontalcatface.xml b/src/lib/lbpcascades/lbpcascade_frontalcatface.xml similarity index 100% rename from lib/lbpcascades/lbpcascade_frontalcatface.xml rename to src/lib/lbpcascades/lbpcascade_frontalcatface.xml diff --git a/lib/lbpcascades/lbpcascade_frontalface.xml b/src/lib/lbpcascades/lbpcascade_frontalface.xml similarity index 100% rename from lib/lbpcascades/lbpcascade_frontalface.xml rename to src/lib/lbpcascades/lbpcascade_frontalface.xml diff --git a/lib/lbpcascades/lbpcascade_frontalface_improved.xml b/src/lib/lbpcascades/lbpcascade_frontalface_improved.xml similarity index 100% rename from lib/lbpcascades/lbpcascade_frontalface_improved.xml rename to src/lib/lbpcascades/lbpcascade_frontalface_improved.xml diff --git a/lib/lbpcascades/lbpcascade_profileface.xml b/src/lib/lbpcascades/lbpcascade_profileface.xml similarity index 100% rename from lib/lbpcascades/lbpcascade_profileface.xml rename to src/lib/lbpcascades/lbpcascade_profileface.xml diff --git a/lib/lbpcascades/lbpcascade_silverware.xml b/src/lib/lbpcascades/lbpcascade_silverware.xml similarity index 100% rename from lib/lbpcascades/lbpcascade_silverware.xml rename to src/lib/lbpcascades/lbpcascade_silverware.xml diff --git a/src/lib/meta.ts b/src/lib/meta.ts new file mode 100644 index 000000000..1a9500f08 --- /dev/null +++ b/src/lib/meta.ts @@ -0,0 +1,22 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +import { createRequire } from 'node:module'; +import { fileURLToPath } from 'node:url'; + +export function getDirName(): string { + if ('__dirname' in globalThis) { + return globalThis.__dirname; + } else { + // @ts-ignore + return fileURLToPath(new URL('.', import.meta.url)); + } +} + +export function getRequire(): NodeRequire { + if ('require' in globalThis) { + return globalThis.require; + } else { + // @ts-ignore + return createRequire(import.meta.url); + } +} diff --git a/src/lib/opencv4nodejs.ts b/src/lib/opencv4nodejs.ts new file mode 100644 index 000000000..1f7fd0973 --- /dev/null +++ b/src/lib/opencv4nodejs.ts @@ -0,0 +1,194 @@ +import path from 'node:path'; +import { type OpenCVBuildEnvParams } from '@u4/opencv-build'; +import promisify from './promisify.js'; +import extendWithJsSources from './ext/index.js'; +import { getOpenCV } from './cvloader.js'; +import type * as openCV from '../../typings/index.js'; +import { getDirName } from './meta.js'; +import { resolvePath } from './commons.js'; + +export type * as openCV from '../../typings/index.js'; +export { getDirName, getRequire } from "./meta.js" + +declare type OpenCVType = typeof openCV; + +function loadOpenCV(opt?: OpenCVBuildEnvParams): OpenCVType { + // load native binding + const cvBase = getOpenCV(opt); + // check the presence of any expected symbol, to ensure the library is loaded + if (!cvBase.accumulate) { + throw Error('failed to load opencv basic accumulate not found.') + } + if (!cvBase.blur) { + throw Error('failed to load opencv basic blur not found.') + } + + // resolve haarcascade and lbpCascades files paths + const { haarCascades, lbpCascades } = cvBase; + const dirname = getDirName(); + const xmlDir = path.join(dirname, '..', '..', 'src', 'lib'); + Object.keys(haarCascades).forEach( + key => (cvBase as any)[key] = resolvePath(path.join(xmlDir, 'haarcascades'), haarCascades[key as keyof typeof haarCascades])); + Object.keys(lbpCascades).forEach( + key => (cvBase as any)[key] = resolvePath(path.join(xmlDir, 'lbpcascades'), lbpCascades[key as keyof typeof lbpCascades])); + // promisify async methods + let cvObj = promisify(cvBase); + cvObj = extendWithJsSources(cvObj); + // add xmodules alias if not present (moved to C++ part) + // if (!cvObj.xmodules && cvObj.modules) + // cvObj.xmodules = cvObj.modules + return cvObj; +} + +export const cv = loadOpenCV({ prebuild: 'latestBuild' }); + +function dumpExports() { + let allExports = Object.keys(cv); + allExports = allExports.filter(key => !key.includes('"')); + console.log('\n\n'); + while (allExports.length) { + const keys = allExports.splice(0, 15); + console.log(`const { ${keys} } = cv;`); + console.log(`export { ${keys} };`); + } + console.log('\n\n'); +} +// dumpExports(); + +////////////// +//// GENERATED code + +const { isCustomMatAllocatorEnabled,dangerousEnableCustomMatAllocator,dangerousDisableCustomMatAllocator,getMemMetrics,version,modules,xmodules,CV_8U,CV_8S,CV_16U,CV_16S,CV_32S,CV_32F,CV_64F,CV_16F } = cv; +export { isCustomMatAllocatorEnabled,dangerousEnableCustomMatAllocator,dangerousDisableCustomMatAllocator,getMemMetrics,version,modules,xmodules,CV_8U,CV_8S,CV_16U,CV_16S,CV_32S,CV_32F,CV_64F,CV_16F }; +const { CV_8UC1,CV_8UC2,CV_8UC3,CV_8UC4,CV_8SC1,CV_8SC2,CV_8SC3,CV_8SC4,CV_16UC1,CV_16UC2,CV_16UC3,CV_16UC4,CV_16SC1,CV_16SC2,CV_16SC3 } = cv; +export { CV_8UC1,CV_8UC2,CV_8UC3,CV_8UC4,CV_8SC1,CV_8SC2,CV_8SC3,CV_8SC4,CV_16UC1,CV_16UC2,CV_16UC3,CV_16UC4,CV_16SC1,CV_16SC2,CV_16SC3 }; +const { CV_16SC4,CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4,CV_32FC1,CV_32FC2,CV_32FC3,CV_32FC4,CV_64FC1,CV_64FC2,CV_64FC3,CV_64FC4,CV_16FC1,CV_16FC2 } = cv; +export { CV_16SC4,CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4,CV_32FC1,CV_32FC2,CV_32FC3,CV_32FC4,CV_64FC1,CV_64FC2,CV_64FC3,CV_64FC4,CV_16FC1,CV_16FC2 }; +const { CV_16FC3,CV_16FC4,NORM_INF,NORM_L1,NORM_L2,NORM_L2SQR,NORM_HAMMING,NORM_HAMMING2,NORM_TYPE_MASK,NORM_RELATIVE,NORM_MINMAX,KMEANS_RANDOM_CENTERS,KMEANS_PP_CENTERS,KMEANS_USE_INITIAL_LABELS,termCriteria } = cv; +export { CV_16FC3,CV_16FC4,NORM_INF,NORM_L1,NORM_L2,NORM_L2SQR,NORM_HAMMING,NORM_HAMMING2,NORM_TYPE_MASK,NORM_RELATIVE,NORM_MINMAX,KMEANS_RANDOM_CENTERS,KMEANS_PP_CENTERS,KMEANS_USE_INITIAL_LABELS,termCriteria }; +const { haarCascades,lbpCascades,REDUCE_SUM,REDUCE_AVG,REDUCE_MAX,REDUCE_MIN,ROTATE_90_CLOCKWISE,ROTATE_180,ROTATE_90_COUNTERCLOCKWISE,DECOMP_LU,DECOMP_CHOLESKY,DECOMP_EIG,DECOMP_SVD,DECOMP_QR,DECOMP_NORMAL } = cv; +export { haarCascades,lbpCascades,REDUCE_SUM,REDUCE_AVG,REDUCE_MAX,REDUCE_MIN,ROTATE_90_CLOCKWISE,ROTATE_180,ROTATE_90_COUNTERCLOCKWISE,DECOMP_LU,DECOMP_CHOLESKY,DECOMP_EIG,DECOMP_SVD,DECOMP_QR,DECOMP_NORMAL }; +const { BORDER_CONSTANT,BORDER_REPLICATE,BORDER_REFLECT,BORDER_WRAP,BORDER_REFLECT_101,BORDER_TRANSPARENT,BORDER_ISOLATED,BORDER_DEFAULT,Mat,Point,Point2,Point3,Vec,Vec2,Vec3 } = cv; +export { BORDER_CONSTANT,BORDER_REPLICATE,BORDER_REFLECT,BORDER_WRAP,BORDER_REFLECT_101,BORDER_TRANSPARENT,BORDER_ISOLATED,BORDER_DEFAULT,Mat,Point,Point2,Point3,Vec,Vec2,Vec3 }; +const { Vec4,Vec6,Size,Rect,RotatedRect,TermCriteria,HistAxes,getBuildInformation,partition,kmeans,cartToPolar,cartToPolarAsync,polarToCart,polarToCartAsync,getNumThreads } = cv; +export { Vec4,Vec6,Size,Rect,RotatedRect,TermCriteria,HistAxes,getBuildInformation,partition,kmeans,cartToPolar,cartToPolarAsync,polarToCart,polarToCartAsync,getNumThreads }; +const { setNumThreads,getThreadNum,addWeighted,addWeightedAsync,minMaxLoc,minMaxLocAsync,findNonZero,findNonZeroAsync,countNonZero,countNonZeroAsync,split,splitAsync,mulSpectrums,mulSpectrumsAsync,transform } = cv; +export { setNumThreads,getThreadNum,addWeighted,addWeightedAsync,minMaxLoc,minMaxLocAsync,findNonZero,findNonZeroAsync,countNonZero,countNonZeroAsync,split,splitAsync,mulSpectrums,mulSpectrumsAsync,transform }; +const { transformAsync,perspectiveTransform,perspectiveTransformAsync,convertScaleAbs,convertScaleAbsAsync,sum,sumAsync,mean,meanAsync,meanStdDev,meanStdDevAsync,reduce,reduceAsync,eigen,eigenAsync } = cv; +export { transformAsync,perspectiveTransform,perspectiveTransformAsync,convertScaleAbs,convertScaleAbsAsync,sum,sumAsync,mean,meanAsync,meanStdDev,meanStdDevAsync,reduce,reduceAsync,eigen,eigenAsync }; +const { min,minAsync,max,maxAsync,solve,solveAsync,magnitude,magnitudeAsync,getTickFrequency,getTickCount,getVersionMajor,getVersionMinor,getVersionRevision,WINDOW_NORMAL,WINDOW_AUTOSIZE } = cv; +export { min,minAsync,max,maxAsync,solve,solveAsync,magnitude,magnitudeAsync,getTickFrequency,getTickCount,getVersionMajor,getVersionMinor,getVersionRevision,WINDOW_NORMAL,WINDOW_AUTOSIZE }; +const { WINDOW_OPENGL,WINDOW_FULLSCREEN,WINDOW_FREERATIO,WINDOW_KEEPRATIO,WINDOW_GUI_EXPANDED,WINDOW_GUI_NORMAL,WND_PROP_FULLSCREEN,WND_PROP_AUTOSIZE,WND_PROP_ASPECT_RATIO,WND_PROP_OPENGL,WND_PROP_VISIBLE,WND_PROP_TOPMOST,WND_PROP_VSYNC,EVENT_MOUSEMOVE,EVENT_LBUTTONDOWN } = cv; +export { WINDOW_OPENGL,WINDOW_FULLSCREEN,WINDOW_FREERATIO,WINDOW_KEEPRATIO,WINDOW_GUI_EXPANDED,WINDOW_GUI_NORMAL,WND_PROP_FULLSCREEN,WND_PROP_AUTOSIZE,WND_PROP_ASPECT_RATIO,WND_PROP_OPENGL,WND_PROP_VISIBLE,WND_PROP_TOPMOST,WND_PROP_VSYNC,EVENT_MOUSEMOVE,EVENT_LBUTTONDOWN }; +const { EVENT_RBUTTONDOWN,EVENT_MBUTTONDOWN,EVENT_LBUTTONUP,EVENT_RBUTTONUP,EVENT_MBUTTONUP,EVENT_LBUTTONDBLCLK,EVENT_RBUTTONDBLCLK,EVENT_MBUTTONDBLCLK,EVENT_MOUSEWHEEL,EVENT_MOUSEHWHEEL,EVENT_FLAG_LBUTTON,EVENT_FLAG_RBUTTON,EVENT_FLAG_MBUTTON,EVENT_FLAG_CTRLKEY,EVENT_FLAG_SHIFTKEY } = cv; +export { EVENT_RBUTTONDOWN,EVENT_MBUTTONDOWN,EVENT_LBUTTONUP,EVENT_RBUTTONUP,EVENT_MBUTTONUP,EVENT_LBUTTONDBLCLK,EVENT_RBUTTONDBLCLK,EVENT_MBUTTONDBLCLK,EVENT_MOUSEWHEEL,EVENT_MOUSEHWHEEL,EVENT_FLAG_LBUTTON,EVENT_FLAG_RBUTTON,EVENT_FLAG_MBUTTON,EVENT_FLAG_CTRLKEY,EVENT_FLAG_SHIFTKEY }; +const { EVENT_FLAG_ALTKEY,QT_FONT_LIGHT,QT_FONT_NORMAL,QT_FONT_DEMIBOLD,QT_FONT_BOLD,QT_FONT_BLACK,QT_STYLE_NORMAL,QT_STYLE_ITALIC,QT_STYLE_OBLIQUE,QT_PUSH_BUTTON,QT_CHECKBOX,QT_RADIOBOX,QT_NEW_BUTTONBAR,setWindowProperty,getWindowProperty } = cv; +export { EVENT_FLAG_ALTKEY,QT_FONT_LIGHT,QT_FONT_NORMAL,QT_FONT_DEMIBOLD,QT_FONT_BOLD,QT_FONT_BLACK,QT_STYLE_NORMAL,QT_STYLE_ITALIC,QT_STYLE_OBLIQUE,QT_PUSH_BUTTON,QT_CHECKBOX,QT_RADIOBOX,QT_NEW_BUTTONBAR,setWindowProperty,getWindowProperty }; +const { setWindowTitle,moveWindow,namedWindow,resizeWindow,startWindowThread,REGULAR,LMEDS,RANSAC,RHO,SOLVEPNP_ITERATIVE,SOLVEPNP_EPNP,SOLVEPNP_P3P,SOLVEPNP_DLS,SOLVEPNP_UPNP,CALIB_CB_ADAPTIVE_THRESH } = cv; +export { setWindowTitle,moveWindow,namedWindow,resizeWindow,startWindowThread,REGULAR,LMEDS,RANSAC,RHO,SOLVEPNP_ITERATIVE,SOLVEPNP_EPNP,SOLVEPNP_P3P,SOLVEPNP_DLS,SOLVEPNP_UPNP,CALIB_CB_ADAPTIVE_THRESH }; +const { CALIB_CB_NORMALIZE_IMAGE,CALIB_CB_FILTER_QUADS,CALIB_CB_FAST_CHECK,CALIB_CB_SYMMETRIC_GRID,CALIB_CB_ASYMMETRIC_GRID,CALIB_CB_CLUSTERING,CALIB_USE_INTRINSIC_GUESS,CALIB_FIX_ASPECT_RATIO,CALIB_FIX_PRINCIPAL_POINT,CALIB_ZERO_TANGENT_DIST,CALIB_FIX_FOCAL_LENGTH,CALIB_FIX_K1,CALIB_FIX_K2,CALIB_FIX_K3,CALIB_FIX_K4 } = cv; +export { CALIB_CB_NORMALIZE_IMAGE,CALIB_CB_FILTER_QUADS,CALIB_CB_FAST_CHECK,CALIB_CB_SYMMETRIC_GRID,CALIB_CB_ASYMMETRIC_GRID,CALIB_CB_CLUSTERING,CALIB_USE_INTRINSIC_GUESS,CALIB_FIX_ASPECT_RATIO,CALIB_FIX_PRINCIPAL_POINT,CALIB_ZERO_TANGENT_DIST,CALIB_FIX_FOCAL_LENGTH,CALIB_FIX_K1,CALIB_FIX_K2,CALIB_FIX_K3,CALIB_FIX_K4 }; +const { CALIB_FIX_K5,CALIB_FIX_K6,CALIB_RATIONAL_MODEL,CALIB_THIN_PRISM_MODEL,CALIB_FIX_S1_S2_S3_S4,CALIB_FIX_INTRINSIC,CALIB_SAME_FOCAL_LENGTH,CALIB_ZERO_DISPARITY,CALIB_TILTED_MODEL,CALIB_FIX_TAUX_TAUY,CALIB_USE_LU,CALIB_USE_QR,SOLVEPNP_AP3P,SOLVEPNP_MAX_COUNT,CALIB_FIX_TANGENT_DIST } = cv; +export { CALIB_FIX_K5,CALIB_FIX_K6,CALIB_RATIONAL_MODEL,CALIB_THIN_PRISM_MODEL,CALIB_FIX_S1_S2_S3_S4,CALIB_FIX_INTRINSIC,CALIB_SAME_FOCAL_LENGTH,CALIB_ZERO_DISPARITY,CALIB_TILTED_MODEL,CALIB_FIX_TAUX_TAUY,CALIB_USE_LU,CALIB_USE_QR,SOLVEPNP_AP3P,SOLVEPNP_MAX_COUNT,CALIB_FIX_TANGENT_DIST }; +const { FM_7POINT,FM_8POINT,FM_LMEDS,FM_RANSAC,findHomography,findHomographyAsync,composeRT,composeRTAsync,solvePnP,solvePnPAsync,solvePnPRansac,solvePnPRansacAsync,projectPoints,projectPointsAsync,initCameraMatrix2D } = cv; +export { FM_7POINT,FM_8POINT,FM_LMEDS,FM_RANSAC,findHomography,findHomographyAsync,composeRT,composeRTAsync,solvePnP,solvePnPAsync,solvePnPRansac,solvePnPRansacAsync,projectPoints,projectPointsAsync,initCameraMatrix2D }; +const { initCameraMatrix2DAsync,stereoCalibrate,stereoCalibrateAsync,stereoRectifyUncalibrated,stereoRectifyUncalibratedAsync,findFundamentalMat,findFundamentalMatAsync,findEssentialMat,findEssentialMatAsync,recoverPose,recoverPoseAsync,computeCorrespondEpilines,computeCorrespondEpilinesAsync,getValidDisparityROI,getValidDisparityROIAsync } = cv; +export { initCameraMatrix2DAsync,stereoCalibrate,stereoCalibrateAsync,stereoRectifyUncalibrated,stereoRectifyUncalibratedAsync,findFundamentalMat,findFundamentalMatAsync,findEssentialMat,findEssentialMatAsync,recoverPose,recoverPoseAsync,computeCorrespondEpilines,computeCorrespondEpilinesAsync,getValidDisparityROI,getValidDisparityROIAsync }; +const { estimateAffine3D,estimateAffine3DAsync,sampsonDistance,sampsonDistanceAsync,calibrateCamera,calibrateCameraAsync,calibrateCameraExtended,calibrateCameraExtendedAsync,estimateAffine2D,estimateAffine2DAsync,estimateAffinePartial2D,estimateAffinePartial2DAsync,solveP3P,solveP3PAsync,undistortPoints } = cv; +export { estimateAffine3D,estimateAffine3DAsync,sampsonDistance,sampsonDistanceAsync,calibrateCamera,calibrateCameraAsync,calibrateCameraExtended,calibrateCameraExtendedAsync,estimateAffine2D,estimateAffine2DAsync,estimateAffinePartial2D,estimateAffinePartial2DAsync,solveP3P,solveP3PAsync,undistortPoints }; +const { undistortPointsAsync,DNN_BACKEND_OPENCV,DNN_BACKEND_INFERENCE_ENGINE,DNN_BACKEND_HALIDE,DNN_BACKEND_CUDA,DNN_TARGET_CPU,DNN_TARGET_OPENCL,DNN_TARGET_OPENCL_FP16,DNN_TARGET_MYRIAD,DNN_TARGET_CUDA,DNN_TARGET_CUDA_FP16,DNN_TARGET_HDDL,Net,readNetFromTensorflow,readNetFromTensorflowAsync } = cv; +export { undistortPointsAsync,DNN_BACKEND_OPENCV,DNN_BACKEND_INFERENCE_ENGINE,DNN_BACKEND_HALIDE,DNN_BACKEND_CUDA,DNN_TARGET_CPU,DNN_TARGET_OPENCL,DNN_TARGET_OPENCL_FP16,DNN_TARGET_MYRIAD,DNN_TARGET_CUDA,DNN_TARGET_CUDA_FP16,DNN_TARGET_HDDL,Net,readNetFromTensorflow,readNetFromTensorflowAsync }; +const { readNetFromCaffe,readNetFromCaffeAsync,blobFromImage,blobFromImageAsync,blobFromImages,blobFromImagesAsync,readNetFromDarknet,readNetFromDarknetAsync,NMSBoxes,readNetFromONNX,readNetFromONNXAsync,readNet,readNetAsync,EigenFaceRecognizer,FisherFaceRecognizer } = cv; +export { readNetFromCaffe,readNetFromCaffeAsync,blobFromImage,blobFromImageAsync,blobFromImages,blobFromImagesAsync,readNetFromDarknet,readNetFromDarknetAsync,NMSBoxes,readNetFromONNX,readNetFromONNXAsync,readNet,readNetAsync,EigenFaceRecognizer,FisherFaceRecognizer }; +const { LBPHFaceRecognizer,FacemarkAAM,FacemarkAAMData,FacemarkAAMParams,FacemarkLBF,FacemarkLBFParams,KeyPoint,KeyPointMatch,DescriptorMatch,matchFlannBased,matchBruteForce,matchBruteForceL1,matchBruteForceHamming,matchFlannBasedAsync,matchBruteForceAsync } = cv; +export { LBPHFaceRecognizer,FacemarkAAM,FacemarkAAMData,FacemarkAAMParams,FacemarkLBF,FacemarkLBFParams,KeyPoint,KeyPointMatch,DescriptorMatch,matchFlannBased,matchBruteForce,matchBruteForceL1,matchBruteForceHamming,matchFlannBasedAsync,matchBruteForceAsync }; +const { matchBruteForceL1Async,matchBruteForceHammingAsync,matchBruteForceHammingLut,matchBruteForceSL2,matchBruteForceHammingLutAsync,matchBruteForceSL2Async,matchKnnFlannBased,matchKnnBruteForce,matchKnnBruteForceL1,matchKnnBruteForceHamming,matchKnnFlannBasedAsync,matchKnnBruteForceAsync,matchKnnBruteForceL1Async,matchKnnBruteForceHammingAsync,matchKnnBruteForceHammingLut } = cv; +export { matchBruteForceL1Async,matchBruteForceHammingAsync,matchBruteForceHammingLut,matchBruteForceSL2,matchBruteForceHammingLutAsync,matchBruteForceSL2Async,matchKnnFlannBased,matchKnnBruteForce,matchKnnBruteForceL1,matchKnnBruteForceHamming,matchKnnFlannBasedAsync,matchKnnBruteForceAsync,matchKnnBruteForceL1Async,matchKnnBruteForceHammingAsync,matchKnnBruteForceHammingLut }; +const { matchKnnBruteForceSL2,matchKnnBruteForceHammingLutAsync,matchKnnBruteForceSL2Async,AGASTDetector,AGASTDetectorType,AKAZEDetector,AKAZEDescriptorType,BRISKDetector,BFMatcher,FASTDetector,FASTDetectorType,GFTTDetector,KAZEDetector,KAZEDiffusivityType,MSERDetector } = cv; +export { matchKnnBruteForceSL2,matchKnnBruteForceHammingLutAsync,matchKnnBruteForceSL2Async,AGASTDetector,AGASTDetectorType,AKAZEDetector,AKAZEDescriptorType,BRISKDetector,BFMatcher,FASTDetector,FASTDetectorType,GFTTDetector,KAZEDetector,KAZEDiffusivityType,MSERDetector }; +const { ORBDetector,ORBScoreType,SimpleBlobDetectorParams,SimpleBlobDetector,drawKeyPoints,drawMatches,MORPH_RECT,MORPH_CROSS,MORPH_ELLIPSE,MORPH_ERODE,MORPH_DILATE,MORPH_OPEN,MORPH_CLOSE,MORPH_GRADIENT,MORPH_TOPHAT } = cv; +export { ORBDetector,ORBScoreType,SimpleBlobDetectorParams,SimpleBlobDetector,drawKeyPoints,drawMatches,MORPH_RECT,MORPH_CROSS,MORPH_ELLIPSE,MORPH_ERODE,MORPH_DILATE,MORPH_OPEN,MORPH_CLOSE,MORPH_GRADIENT,MORPH_TOPHAT }; +const { MORPH_BLACKHAT,MORPH_HITMISS,INTER_NEAREST,INTER_LINEAR,INTER_CUBIC,INTER_AREA,INTER_LANCZOS4,INTER_MAX,INTER_LINEAR_EXACT,WARP_FILL_OUTLIERS,WARP_INVERSE_MAP,THRESH_BINARY,THRESH_BINARY_INV,THRESH_TRUNC,THRESH_TOZERO } = cv; +export { MORPH_BLACKHAT,MORPH_HITMISS,INTER_NEAREST,INTER_LINEAR,INTER_CUBIC,INTER_AREA,INTER_LANCZOS4,INTER_MAX,INTER_LINEAR_EXACT,WARP_FILL_OUTLIERS,WARP_INVERSE_MAP,THRESH_BINARY,THRESH_BINARY_INV,THRESH_TRUNC,THRESH_TOZERO }; +const { THRESH_TOZERO_INV,THRESH_MASK,THRESH_OTSU,THRESH_TRIANGLE,ADAPTIVE_THRESH_MEAN_C,ADAPTIVE_THRESH_GAUSSIAN_C,GC_BGD,GC_FGD,GC_PR_BGD,GC_PR_FGD,GC_INIT_WITH_RECT,GC_INIT_WITH_MASK,GC_EVAL,TM_SQDIFF,TM_SQDIFF_NORMED } = cv; +export { THRESH_TOZERO_INV,THRESH_MASK,THRESH_OTSU,THRESH_TRIANGLE,ADAPTIVE_THRESH_MEAN_C,ADAPTIVE_THRESH_GAUSSIAN_C,GC_BGD,GC_FGD,GC_PR_BGD,GC_PR_FGD,GC_INIT_WITH_RECT,GC_INIT_WITH_MASK,GC_EVAL,TM_SQDIFF,TM_SQDIFF_NORMED }; +const { TM_CCORR,TM_CCORR_NORMED,TM_CCOEFF,TM_CCOEFF_NORMED,DFT_INVERSE,DFT_SCALE,DFT_ROWS,DFT_COMPLEX_OUTPUT,DFT_REAL_OUTPUT,DCT_INVERSE,DCT_ROWS,HOUGH_STANDARD,HOUGH_PROBABILISTIC,HOUGH_MULTI_SCALE,HOUGH_GRADIENT } = cv; +export { TM_CCORR,TM_CCORR_NORMED,TM_CCOEFF,TM_CCOEFF_NORMED,DFT_INVERSE,DFT_SCALE,DFT_ROWS,DFT_COMPLEX_OUTPUT,DFT_REAL_OUTPUT,DCT_INVERSE,DCT_ROWS,HOUGH_STANDARD,HOUGH_PROBABILISTIC,HOUGH_MULTI_SCALE,HOUGH_GRADIENT }; +const { HISTCMP_CORREL,HISTCMP_CHISQR,HISTCMP_INTERSECT,HISTCMP_BHATTACHARYYA,HISTCMP_HELLINGER,HISTCMP_CHISQR_ALT,HISTCMP_KL_DIV,FLOODFILL_FIXED_RANGE,FLOODFILL_MASK_ONLY,COLOR_BGR2BGRA,COLOR_RGB2RGBA,COLOR_BGRA2BGR,COLOR_RGBA2RGB,COLOR_BGR2RGBA,COLOR_RGB2BGRA } = cv; +export { HISTCMP_CORREL,HISTCMP_CHISQR,HISTCMP_INTERSECT,HISTCMP_BHATTACHARYYA,HISTCMP_HELLINGER,HISTCMP_CHISQR_ALT,HISTCMP_KL_DIV,FLOODFILL_FIXED_RANGE,FLOODFILL_MASK_ONLY,COLOR_BGR2BGRA,COLOR_RGB2RGBA,COLOR_BGRA2BGR,COLOR_RGBA2RGB,COLOR_BGR2RGBA,COLOR_RGB2BGRA }; +const { COLOR_RGBA2BGR,COLOR_BGRA2RGB,COLOR_BGR2RGB,COLOR_RGB2BGR,COLOR_BGRA2RGBA,COLOR_RGBA2BGRA,COLOR_BGR2GRAY,COLOR_RGB2GRAY,COLOR_GRAY2BGR,COLOR_GRAY2RGB,COLOR_GRAY2BGRA,COLOR_GRAY2RGBA,COLOR_BGRA2GRAY,COLOR_RGBA2GRAY,COLOR_BGR2BGR565 } = cv; +export { COLOR_RGBA2BGR,COLOR_BGRA2RGB,COLOR_BGR2RGB,COLOR_RGB2BGR,COLOR_BGRA2RGBA,COLOR_RGBA2BGRA,COLOR_BGR2GRAY,COLOR_RGB2GRAY,COLOR_GRAY2BGR,COLOR_GRAY2RGB,COLOR_GRAY2BGRA,COLOR_GRAY2RGBA,COLOR_BGRA2GRAY,COLOR_RGBA2GRAY,COLOR_BGR2BGR565 }; +const { COLOR_RGB2BGR565,COLOR_BGR5652BGR,COLOR_BGR5652RGB,COLOR_BGRA2BGR565,COLOR_RGBA2BGR565,COLOR_BGR5652BGRA,COLOR_BGR5652RGBA,COLOR_GRAY2BGR565,COLOR_BGR5652GRAY,COLOR_BGR2BGR555,COLOR_RGB2BGR555,COLOR_BGR5552BGR,COLOR_BGR5552RGB,COLOR_BGRA2BGR555,COLOR_RGBA2BGR555 } = cv; +export { COLOR_RGB2BGR565,COLOR_BGR5652BGR,COLOR_BGR5652RGB,COLOR_BGRA2BGR565,COLOR_RGBA2BGR565,COLOR_BGR5652BGRA,COLOR_BGR5652RGBA,COLOR_GRAY2BGR565,COLOR_BGR5652GRAY,COLOR_BGR2BGR555,COLOR_RGB2BGR555,COLOR_BGR5552BGR,COLOR_BGR5552RGB,COLOR_BGRA2BGR555,COLOR_RGBA2BGR555 }; +const { COLOR_BGR5552BGRA,COLOR_BGR5552RGBA,COLOR_GRAY2BGR555,COLOR_BGR5552GRAY,COLOR_BGR2XYZ,COLOR_RGB2XYZ,COLOR_XYZ2BGR,COLOR_XYZ2RGB,COLOR_BGR2YCrCb,COLOR_RGB2YCrCb,COLOR_YCrCb2BGR,COLOR_YCrCb2RGB,COLOR_BGR2HSV,COLOR_RGB2HSV,COLOR_BGR2Lab } = cv; +export { COLOR_BGR5552BGRA,COLOR_BGR5552RGBA,COLOR_GRAY2BGR555,COLOR_BGR5552GRAY,COLOR_BGR2XYZ,COLOR_RGB2XYZ,COLOR_XYZ2BGR,COLOR_XYZ2RGB,COLOR_BGR2YCrCb,COLOR_RGB2YCrCb,COLOR_YCrCb2BGR,COLOR_YCrCb2RGB,COLOR_BGR2HSV,COLOR_RGB2HSV,COLOR_BGR2Lab }; +const { COLOR_RGB2Lab,COLOR_BGR2Luv,COLOR_RGB2Luv,COLOR_BGR2HLS,COLOR_RGB2HLS,COLOR_HSV2BGR,COLOR_HSV2RGB,COLOR_Lab2BGR,COLOR_Lab2RGB,COLOR_Luv2BGR,COLOR_Luv2RGB,COLOR_HLS2BGR,COLOR_HLS2RGB,COLOR_BGR2HSV_FULL,COLOR_RGB2HSV_FULL } = cv; +export { COLOR_RGB2Lab,COLOR_BGR2Luv,COLOR_RGB2Luv,COLOR_BGR2HLS,COLOR_RGB2HLS,COLOR_HSV2BGR,COLOR_HSV2RGB,COLOR_Lab2BGR,COLOR_Lab2RGB,COLOR_Luv2BGR,COLOR_Luv2RGB,COLOR_HLS2BGR,COLOR_HLS2RGB,COLOR_BGR2HSV_FULL,COLOR_RGB2HSV_FULL }; +const { COLOR_BGR2HLS_FULL,COLOR_RGB2HLS_FULL,COLOR_HSV2BGR_FULL,COLOR_HSV2RGB_FULL,COLOR_HLS2BGR_FULL,COLOR_HLS2RGB_FULL,COLOR_LBGR2Lab,COLOR_LRGB2Lab,COLOR_LBGR2Luv,COLOR_LRGB2Luv,COLOR_Lab2LBGR,COLOR_Lab2LRGB,COLOR_Luv2LBGR,COLOR_Luv2LRGB,COLOR_BGR2YUV } = cv; +export { COLOR_BGR2HLS_FULL,COLOR_RGB2HLS_FULL,COLOR_HSV2BGR_FULL,COLOR_HSV2RGB_FULL,COLOR_HLS2BGR_FULL,COLOR_HLS2RGB_FULL,COLOR_LBGR2Lab,COLOR_LRGB2Lab,COLOR_LBGR2Luv,COLOR_LRGB2Luv,COLOR_Lab2LBGR,COLOR_Lab2LRGB,COLOR_Luv2LBGR,COLOR_Luv2LRGB,COLOR_BGR2YUV }; +const { COLOR_RGB2YUV,COLOR_YUV2BGR,COLOR_YUV2RGB,COLOR_YUV2RGB_NV12,COLOR_YUV2BGR_NV12,COLOR_YUV2RGB_NV21,COLOR_YUV2BGR_NV21,COLOR_YUV420sp2RGB,COLOR_YUV420sp2BGR,COLOR_YUV2RGBA_NV12,COLOR_YUV2BGRA_NV12,COLOR_YUV2RGBA_NV21,COLOR_YUV2BGRA_NV21,COLOR_YUV420sp2RGBA,COLOR_YUV420sp2BGRA } = cv; +export { COLOR_RGB2YUV,COLOR_YUV2BGR,COLOR_YUV2RGB,COLOR_YUV2RGB_NV12,COLOR_YUV2BGR_NV12,COLOR_YUV2RGB_NV21,COLOR_YUV2BGR_NV21,COLOR_YUV420sp2RGB,COLOR_YUV420sp2BGR,COLOR_YUV2RGBA_NV12,COLOR_YUV2BGRA_NV12,COLOR_YUV2RGBA_NV21,COLOR_YUV2BGRA_NV21,COLOR_YUV420sp2RGBA,COLOR_YUV420sp2BGRA }; +const { COLOR_YUV2RGB_YV12,COLOR_YUV2BGR_YV12,COLOR_YUV2RGB_IYUV,COLOR_YUV2BGR_IYUV,COLOR_YUV2RGB_I420,COLOR_YUV2BGR_I420,COLOR_YUV420p2RGB,COLOR_YUV420p2BGR,COLOR_YUV2RGBA_YV12,COLOR_YUV2BGRA_YV12,COLOR_YUV2RGBA_IYUV,COLOR_YUV2BGRA_IYUV,COLOR_YUV2RGBA_I420,COLOR_YUV2BGRA_I420,COLOR_YUV420p2RGBA } = cv; +export { COLOR_YUV2RGB_YV12,COLOR_YUV2BGR_YV12,COLOR_YUV2RGB_IYUV,COLOR_YUV2BGR_IYUV,COLOR_YUV2RGB_I420,COLOR_YUV2BGR_I420,COLOR_YUV420p2RGB,COLOR_YUV420p2BGR,COLOR_YUV2RGBA_YV12,COLOR_YUV2BGRA_YV12,COLOR_YUV2RGBA_IYUV,COLOR_YUV2BGRA_IYUV,COLOR_YUV2RGBA_I420,COLOR_YUV2BGRA_I420,COLOR_YUV420p2RGBA }; +const { COLOR_YUV420p2BGRA,COLOR_YUV2GRAY_420,COLOR_YUV2GRAY_NV21,COLOR_YUV2GRAY_NV12,COLOR_YUV2GRAY_YV12,COLOR_YUV2GRAY_IYUV,COLOR_YUV2GRAY_I420,COLOR_YUV420sp2GRAY,COLOR_YUV420p2GRAY,COLOR_YUV2RGB_UYVY,COLOR_YUV2BGR_UYVY,COLOR_YUV2RGB_Y422,COLOR_YUV2BGR_Y422,COLOR_YUV2RGB_UYNV,COLOR_YUV2BGR_UYNV } = cv; +export { COLOR_YUV420p2BGRA,COLOR_YUV2GRAY_420,COLOR_YUV2GRAY_NV21,COLOR_YUV2GRAY_NV12,COLOR_YUV2GRAY_YV12,COLOR_YUV2GRAY_IYUV,COLOR_YUV2GRAY_I420,COLOR_YUV420sp2GRAY,COLOR_YUV420p2GRAY,COLOR_YUV2RGB_UYVY,COLOR_YUV2BGR_UYVY,COLOR_YUV2RGB_Y422,COLOR_YUV2BGR_Y422,COLOR_YUV2RGB_UYNV,COLOR_YUV2BGR_UYNV }; +const { COLOR_YUV2RGBA_UYVY,COLOR_YUV2BGRA_UYVY,COLOR_YUV2RGBA_Y422,COLOR_YUV2BGRA_Y422,COLOR_YUV2RGBA_UYNV,COLOR_YUV2BGRA_UYNV,COLOR_YUV2RGB_YUY2,COLOR_YUV2BGR_YUY2,COLOR_YUV2RGB_YVYU,COLOR_YUV2BGR_YVYU,COLOR_YUV2RGB_YUYV,COLOR_YUV2BGR_YUYV,COLOR_YUV2RGB_YUNV,COLOR_YUV2BGR_YUNV,COLOR_YUV2RGBA_YUY2 } = cv; +export { COLOR_YUV2RGBA_UYVY,COLOR_YUV2BGRA_UYVY,COLOR_YUV2RGBA_Y422,COLOR_YUV2BGRA_Y422,COLOR_YUV2RGBA_UYNV,COLOR_YUV2BGRA_UYNV,COLOR_YUV2RGB_YUY2,COLOR_YUV2BGR_YUY2,COLOR_YUV2RGB_YVYU,COLOR_YUV2BGR_YVYU,COLOR_YUV2RGB_YUYV,COLOR_YUV2BGR_YUYV,COLOR_YUV2RGB_YUNV,COLOR_YUV2BGR_YUNV,COLOR_YUV2RGBA_YUY2 }; +const { COLOR_YUV2BGRA_YUY2,COLOR_YUV2RGBA_YVYU,COLOR_YUV2BGRA_YVYU,COLOR_YUV2RGBA_YUYV,COLOR_YUV2BGRA_YUYV,COLOR_YUV2RGBA_YUNV,COLOR_YUV2BGRA_YUNV,COLOR_YUV2GRAY_UYVY,COLOR_YUV2GRAY_YUY2,COLOR_YUV2GRAY_Y422,COLOR_YUV2GRAY_UYNV,COLOR_YUV2GRAY_YVYU,COLOR_YUV2GRAY_YUYV,COLOR_YUV2GRAY_YUNV,COLOR_RGBA2mRGBA } = cv; +export { COLOR_YUV2BGRA_YUY2,COLOR_YUV2RGBA_YVYU,COLOR_YUV2BGRA_YVYU,COLOR_YUV2RGBA_YUYV,COLOR_YUV2BGRA_YUYV,COLOR_YUV2RGBA_YUNV,COLOR_YUV2BGRA_YUNV,COLOR_YUV2GRAY_UYVY,COLOR_YUV2GRAY_YUY2,COLOR_YUV2GRAY_Y422,COLOR_YUV2GRAY_UYNV,COLOR_YUV2GRAY_YVYU,COLOR_YUV2GRAY_YUYV,COLOR_YUV2GRAY_YUNV,COLOR_RGBA2mRGBA }; +const { COLOR_mRGBA2RGBA,COLOR_RGB2YUV_I420,COLOR_BGR2YUV_I420,COLOR_RGB2YUV_IYUV,COLOR_BGR2YUV_IYUV,COLOR_RGBA2YUV_I420,COLOR_BGRA2YUV_I420,COLOR_RGBA2YUV_IYUV,COLOR_BGRA2YUV_IYUV,COLOR_RGB2YUV_YV12,COLOR_BGR2YUV_YV12,COLOR_RGBA2YUV_YV12,COLOR_BGRA2YUV_YV12,COLOR_BayerBG2BGR,COLOR_BayerGB2BGR } = cv; +export { COLOR_mRGBA2RGBA,COLOR_RGB2YUV_I420,COLOR_BGR2YUV_I420,COLOR_RGB2YUV_IYUV,COLOR_BGR2YUV_IYUV,COLOR_RGBA2YUV_I420,COLOR_BGRA2YUV_I420,COLOR_RGBA2YUV_IYUV,COLOR_BGRA2YUV_IYUV,COLOR_RGB2YUV_YV12,COLOR_BGR2YUV_YV12,COLOR_RGBA2YUV_YV12,COLOR_BGRA2YUV_YV12,COLOR_BayerBG2BGR,COLOR_BayerGB2BGR }; +const { COLOR_BayerRG2BGR,COLOR_BayerGR2BGR,COLOR_BayerBG2RGB,COLOR_BayerGB2RGB,COLOR_BayerRG2RGB,COLOR_BayerGR2RGB,COLOR_BayerBG2GRAY,COLOR_BayerGB2GRAY,COLOR_BayerRG2GRAY,COLOR_BayerGR2GRAY,COLOR_BayerBG2BGR_VNG,COLOR_BayerGB2BGR_VNG,COLOR_BayerRG2BGR_VNG,COLOR_BayerGR2BGR_VNG,COLOR_BayerBG2RGB_VNG } = cv; +export { COLOR_BayerRG2BGR,COLOR_BayerGR2BGR,COLOR_BayerBG2RGB,COLOR_BayerGB2RGB,COLOR_BayerRG2RGB,COLOR_BayerGR2RGB,COLOR_BayerBG2GRAY,COLOR_BayerGB2GRAY,COLOR_BayerRG2GRAY,COLOR_BayerGR2GRAY,COLOR_BayerBG2BGR_VNG,COLOR_BayerGB2BGR_VNG,COLOR_BayerRG2BGR_VNG,COLOR_BayerGR2BGR_VNG,COLOR_BayerBG2RGB_VNG }; +const { COLOR_BayerGB2RGB_VNG,COLOR_BayerRG2RGB_VNG,COLOR_BayerGR2RGB_VNG,COLOR_BayerBG2BGR_EA,COLOR_BayerGB2BGR_EA,COLOR_BayerRG2BGR_EA,COLOR_BayerGR2BGR_EA,COLOR_BayerBG2RGB_EA,COLOR_BayerGB2RGB_EA,COLOR_BayerRG2RGB_EA,COLOR_BayerGR2RGB_EA,COLOR_COLORCVT_MAX,CC_STAT_LEFT,CC_STAT_TOP,CC_STAT_WIDTH } = cv; +export { COLOR_BayerGB2RGB_VNG,COLOR_BayerRG2RGB_VNG,COLOR_BayerGR2RGB_VNG,COLOR_BayerBG2BGR_EA,COLOR_BayerGB2BGR_EA,COLOR_BayerRG2BGR_EA,COLOR_BayerGR2BGR_EA,COLOR_BayerBG2RGB_EA,COLOR_BayerGB2RGB_EA,COLOR_BayerRG2RGB_EA,COLOR_BayerGR2RGB_EA,COLOR_COLORCVT_MAX,CC_STAT_LEFT,CC_STAT_TOP,CC_STAT_WIDTH }; +const { CC_STAT_HEIGHT,CC_STAT_AREA,CC_STAT_MAX,CHAIN_APPROX_NONE,CHAIN_APPROX_SIMPLE,CHAIN_APPROX_TC89_L1,CHAIN_APPROX_TC89_KCOS,DIST_USER,DIST_L1,DIST_L2,DIST_C,DIST_L12,DIST_FAIR,DIST_WELSCH,DIST_HUBER } = cv; +export { CC_STAT_HEIGHT,CC_STAT_AREA,CC_STAT_MAX,CHAIN_APPROX_NONE,CHAIN_APPROX_SIMPLE,CHAIN_APPROX_TC89_L1,CHAIN_APPROX_TC89_KCOS,DIST_USER,DIST_L1,DIST_L2,DIST_C,DIST_L12,DIST_FAIR,DIST_WELSCH,DIST_HUBER }; +const { DIST_MASK_3,DIST_MASK_5,DIST_MASK_PRECISE,DIST_LABEL_CCOMP,DIST_LABEL_PIXEL,RETR_EXTERNAL,RETR_LIST,RETR_CCOMP,RETR_TREE,RETR_FLOODFILL,CONTOURS_MATCH_I1,CONTOURS_MATCH_I2,CONTOURS_MATCH_I3,FONT_HERSHEY_SIMPLEX,FONT_HERSHEY_PLAIN } = cv; +export { DIST_MASK_3,DIST_MASK_5,DIST_MASK_PRECISE,DIST_LABEL_CCOMP,DIST_LABEL_PIXEL,RETR_EXTERNAL,RETR_LIST,RETR_CCOMP,RETR_TREE,RETR_FLOODFILL,CONTOURS_MATCH_I1,CONTOURS_MATCH_I2,CONTOURS_MATCH_I3,FONT_HERSHEY_SIMPLEX,FONT_HERSHEY_PLAIN }; +const { FONT_HERSHEY_DUPLEX,FONT_HERSHEY_COMPLEX,FONT_HERSHEY_TRIPLEX,FONT_HERSHEY_COMPLEX_SMALL,FONT_HERSHEY_SCRIPT_SIMPLEX,FONT_HERSHEY_SCRIPT_COMPLEX,FONT_ITALIC,FILLED,LINE_4,LINE_8,LINE_AA,COLORMAP_AUTUMN,COLORMAP_BONE,COLORMAP_JET,COLORMAP_WINTER } = cv; +export { FONT_HERSHEY_DUPLEX,FONT_HERSHEY_COMPLEX,FONT_HERSHEY_TRIPLEX,FONT_HERSHEY_COMPLEX_SMALL,FONT_HERSHEY_SCRIPT_SIMPLEX,FONT_HERSHEY_SCRIPT_COMPLEX,FONT_ITALIC,FILLED,LINE_4,LINE_8,LINE_AA,COLORMAP_AUTUMN,COLORMAP_BONE,COLORMAP_JET,COLORMAP_WINTER }; +const { COLORMAP_RAINBOW,COLORMAP_OCEAN,COLORMAP_SUMMER,COLORMAP_SPRING,COLORMAP_COOL,COLORMAP_HSV,COLORMAP_PINK,COLORMAP_HOT,COLORMAP_PARULA,getStructuringElement,getRotationMatrix2D,plot1DHist,fitLine,getAffineTransform,getPerspectiveTransform } = cv; +export { COLORMAP_RAINBOW,COLORMAP_OCEAN,COLORMAP_SUMMER,COLORMAP_SPRING,COLORMAP_COOL,COLORMAP_HSV,COLORMAP_PINK,COLORMAP_HOT,COLORMAP_PARULA,getStructuringElement,getRotationMatrix2D,plot1DHist,fitLine,getAffineTransform,getPerspectiveTransform }; +const { getTextSize,getTextSizeAsync,applyColorMap,applyColorMapAsync,canny,cannyAsync,goodFeaturesToTrack,goodFeaturesToTrackAsync,blur,blurAsync,gaussianBlur,gaussianBlurAsync,medianBlur,medianBlurAsync,accumulate } = cv; +export { getTextSize,getTextSizeAsync,applyColorMap,applyColorMapAsync,canny,cannyAsync,goodFeaturesToTrack,goodFeaturesToTrackAsync,blur,blurAsync,gaussianBlur,gaussianBlurAsync,medianBlur,medianBlurAsync,accumulate }; +const { accumulateAsync,accumulateProduct,accumulateProductAsync,accumulateSquare,accumulateSquareAsync,accumulateWeighted,accumulateWeightedAsync,calcHist,calcHistAsync,Moments,Contour,CAP_PROP_POS_MSEC,CAP_PROP_POS_FRAMES,CAP_PROP_POS_AVI_RATIO,CAP_PROP_FRAME_WIDTH } = cv; +export { accumulateAsync,accumulateProduct,accumulateProductAsync,accumulateSquare,accumulateSquareAsync,accumulateWeighted,accumulateWeightedAsync,calcHist,calcHistAsync,Moments,Contour,CAP_PROP_POS_MSEC,CAP_PROP_POS_FRAMES,CAP_PROP_POS_AVI_RATIO,CAP_PROP_FRAME_WIDTH }; +const { CAP_PROP_FRAME_HEIGHT,CAP_PROP_FPS,CAP_PROP_FOURCC,CAP_PROP_FRAME_COUNT,CAP_PROP_FORMAT,CAP_PROP_MODE,CAP_PROP_BRIGHTNESS,CAP_PROP_CONTRAST,CAP_PROP_SATURATION,CAP_PROP_HUE,CAP_PROP_GAIN,CAP_PROP_EXPOSURE,CAP_PROP_CONVERT_RGB,CAP_PROP_WHITE_BALANCE_BLUE_U,CAP_PROP_RECTIFICATION } = cv; +export { CAP_PROP_FRAME_HEIGHT,CAP_PROP_FPS,CAP_PROP_FOURCC,CAP_PROP_FRAME_COUNT,CAP_PROP_FORMAT,CAP_PROP_MODE,CAP_PROP_BRIGHTNESS,CAP_PROP_CONTRAST,CAP_PROP_SATURATION,CAP_PROP_HUE,CAP_PROP_GAIN,CAP_PROP_EXPOSURE,CAP_PROP_CONVERT_RGB,CAP_PROP_WHITE_BALANCE_BLUE_U,CAP_PROP_RECTIFICATION }; +const { CAP_PROP_MONOCHROME,CAP_PROP_SHARPNESS,CAP_PROP_AUTO_EXPOSURE,CAP_PROP_GAMMA,CAP_PROP_TEMPERATURE,CAP_PROP_TRIGGER,CAP_PROP_TRIGGER_DELAY,CAP_PROP_WHITE_BALANCE_RED_V,CAP_PROP_ZOOM,CAP_PROP_FOCUS,CAP_PROP_GUID,CAP_PROP_ISO_SPEED,CAP_PROP_BACKLIGHT,CAP_PROP_PAN,CAP_PROP_TILT } = cv; +export { CAP_PROP_MONOCHROME,CAP_PROP_SHARPNESS,CAP_PROP_AUTO_EXPOSURE,CAP_PROP_GAMMA,CAP_PROP_TEMPERATURE,CAP_PROP_TRIGGER,CAP_PROP_TRIGGER_DELAY,CAP_PROP_WHITE_BALANCE_RED_V,CAP_PROP_ZOOM,CAP_PROP_FOCUS,CAP_PROP_GUID,CAP_PROP_ISO_SPEED,CAP_PROP_BACKLIGHT,CAP_PROP_PAN,CAP_PROP_TILT }; +const { CAP_PROP_ROLL,CAP_PROP_IRIS,CAP_PROP_SETTINGS,CAP_PROP_BUFFERSIZE,CAP_PROP_AUTOFOCUS,CAP_ANY,CAP_VFW,CAP_V4L,CAP_V4L2,CAP_FIREWIRE,CAP_IEEE1394,CAP_DC1394,CAP_CMU1394,CAP_QT,CAP_UNICAP } = cv; +export { CAP_PROP_ROLL,CAP_PROP_IRIS,CAP_PROP_SETTINGS,CAP_PROP_BUFFERSIZE,CAP_PROP_AUTOFOCUS,CAP_ANY,CAP_VFW,CAP_V4L,CAP_V4L2,CAP_FIREWIRE,CAP_IEEE1394,CAP_DC1394,CAP_CMU1394,CAP_QT,CAP_UNICAP }; +const { CAP_DSHOW,CAP_PVAPI,CAP_OPENNI,CAP_OPENNI_ASUS,CAP_ANDROID,CAP_XIAPI,CAP_AVFOUNDATION,CAP_GIGANETIX,CAP_MSMF,CAP_WINRT,CAP_INTELPERC,CAP_OPENNI2,CAP_OPENNI2_ASUS,CAP_GPHOTO2,CAP_GSTREAMER } = cv; +export { CAP_DSHOW,CAP_PVAPI,CAP_OPENNI,CAP_OPENNI_ASUS,CAP_ANDROID,CAP_XIAPI,CAP_AVFOUNDATION,CAP_GIGANETIX,CAP_MSMF,CAP_WINRT,CAP_INTELPERC,CAP_OPENNI2,CAP_OPENNI2_ASUS,CAP_GPHOTO2,CAP_GSTREAMER }; +const { CAP_FFMPEG,CAP_IMAGES,CAP_ARAVIS,VIDEOWRITER_PROP_QUALITY,VIDEOWRITER_PROP_FRAMEBYTES,VIDEOWRITER_PROP_NSTRIPES,VideoCapture,VideoWriter,imread,imshow,imshowWait,imwrite,waitKey,waitKeyEx,imencode } = cv; +export { CAP_FFMPEG,CAP_IMAGES,CAP_ARAVIS,VIDEOWRITER_PROP_QUALITY,VIDEOWRITER_PROP_FRAMEBYTES,VIDEOWRITER_PROP_NSTRIPES,VideoCapture,VideoWriter,imread,imshow,imshowWait,imwrite,waitKey,waitKeyEx,imencode }; +const { imdecode,destroyWindow,destroyAllWindows,imreadAsync,imwriteAsync,imencodeAsync,imdecodeAsync,IMREAD_UNCHANGED,IMREAD_GRAYSCALE,IMREAD_COLOR,IMREAD_ANYDEPTH,IMREAD_ANYCOLOR,IMREAD_LOAD_GDAL,IMWRITE_JPEG_QUALITY,IMWRITE_JPEG_PROGRESSIVE } = cv; +export { imdecode,destroyWindow,destroyAllWindows,imreadAsync,imwriteAsync,imencodeAsync,imdecodeAsync,IMREAD_UNCHANGED,IMREAD_GRAYSCALE,IMREAD_COLOR,IMREAD_ANYDEPTH,IMREAD_ANYCOLOR,IMREAD_LOAD_GDAL,IMWRITE_JPEG_QUALITY,IMWRITE_JPEG_PROGRESSIVE }; +const { IMWRITE_JPEG_OPTIMIZE,IMWRITE_JPEG_RST_INTERVAL,IMWRITE_JPEG_LUMA_QUALITY,IMWRITE_JPEG_CHROMA_QUALITY,IMWRITE_PNG_COMPRESSION,IMWRITE_PNG_STRATEGY,IMWRITE_PNG_BILEVEL,IMWRITE_PXM_BINARY,IMWRITE_WEBP_QUALITY,IMREAD_REDUCED_GRAYSCALE_2,IMREAD_REDUCED_COLOR_2,IMREAD_REDUCED_GRAYSCALE_4,IMREAD_REDUCED_COLOR_4,IMREAD_REDUCED_GRAYSCALE_8,IMREAD_REDUCED_COLOR_8 } = cv; +export { IMWRITE_JPEG_OPTIMIZE,IMWRITE_JPEG_RST_INTERVAL,IMWRITE_JPEG_LUMA_QUALITY,IMWRITE_JPEG_CHROMA_QUALITY,IMWRITE_PNG_COMPRESSION,IMWRITE_PNG_STRATEGY,IMWRITE_PNG_BILEVEL,IMWRITE_PXM_BINARY,IMWRITE_WEBP_QUALITY,IMREAD_REDUCED_GRAYSCALE_2,IMREAD_REDUCED_COLOR_2,IMREAD_REDUCED_GRAYSCALE_4,IMREAD_REDUCED_COLOR_4,IMREAD_REDUCED_GRAYSCALE_8,IMREAD_REDUCED_COLOR_8 }; +const { IMREAD_IGNORE_ORIENTATION,IMWRITE_PAM_TUPLETYPE,IMWRITE_PAM_FORMAT_NULL,IMWRITE_PAM_FORMAT_BLACKANDWHITE,IMWRITE_PAM_FORMAT_GRAYSCALE,IMWRITE_PAM_FORMAT_GRAYSCALE_ALPHA,IMWRITE_PAM_FORMAT_RGB,IMWRITE_PAM_FORMAT_RGB_ALPHA,IMWRITE_PNG_STRATEGY_DEFAULT,IMWRITE_PNG_STRATEGY_FILTERED,IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY,IMWRITE_PNG_STRATEGY_RLE,IMWRITE_PNG_STRATEGY_FIXED,ml,statModel } = cv; +export { IMREAD_IGNORE_ORIENTATION,IMWRITE_PAM_TUPLETYPE,IMWRITE_PAM_FORMAT_NULL,IMWRITE_PAM_FORMAT_BLACKANDWHITE,IMWRITE_PAM_FORMAT_GRAYSCALE,IMWRITE_PAM_FORMAT_GRAYSCALE_ALPHA,IMWRITE_PAM_FORMAT_RGB,IMWRITE_PAM_FORMAT_RGB_ALPHA,IMWRITE_PNG_STRATEGY_DEFAULT,IMWRITE_PNG_STRATEGY_FILTERED,IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY,IMWRITE_PNG_STRATEGY_RLE,IMWRITE_PNG_STRATEGY_FIXED,ml,statModel }; +const { TrainData,ParamGrid,StatModel,SVM,CascadeClassifier,HOGDescriptor,HOGHistogramNormType,DetectionROI,INPAINT_NS,INPAINT_TELEA,NORMAL_CLONE,MIXED_CLONE,MONOCHROME_TRANSFER,fastNlMeansDenoisingColored,fastNlMeansDenoisingColoredAsync } = cv; +export { TrainData,ParamGrid,StatModel,SVM,CascadeClassifier,HOGDescriptor,HOGHistogramNormType,DetectionROI,INPAINT_NS,INPAINT_TELEA,NORMAL_CLONE,MIXED_CLONE,MONOCHROME_TRANSFER,fastNlMeansDenoisingColored,fastNlMeansDenoisingColoredAsync }; +const { inpaint,inpaintAsync,seamlessClone,seamlessCloneAsync,OCRHMMDecoder,OCRHMMClassifier,loadOCRHMMClassifierNM,loadOCRHMMClassifierNMAsync,loadOCRHMMClassifierCNN,loadOCRHMMClassifierCNNAsync,createOCRHMMTransitionsTable,createOCRHMMTransitionsTableAsync,TrackerBoostingParams,TrackerBoosting,TrackerMedianFlow } = cv; +export { inpaint,inpaintAsync,seamlessClone,seamlessCloneAsync,OCRHMMDecoder,OCRHMMClassifier,loadOCRHMMClassifierNM,loadOCRHMMClassifierNMAsync,loadOCRHMMClassifierCNN,loadOCRHMMClassifierCNNAsync,createOCRHMMTransitionsTable,createOCRHMMTransitionsTableAsync,TrackerBoostingParams,TrackerBoosting,TrackerMedianFlow }; +const { TrackerMILParams,TrackerMIL,TrackerTLD,TrackerKCFParams,TrackerKCF,MultiTracker,trackerKCFModes,TrackerGOTURN,TrackerMOSSE,TrackerCSRTParams,TrackerCSRT,BackgroundSubtractorMOG2,BackgroundSubtractorKNN,SIFTDetector,SURFDetector } = cv; +export { TrackerMILParams,TrackerMIL,TrackerTLD,TrackerKCFParams,TrackerKCF,MultiTracker,trackerKCFModes,TrackerGOTURN,TrackerMOSSE,TrackerCSRTParams,TrackerCSRT,BackgroundSubtractorMOG2,BackgroundSubtractorKNN,SIFTDetector,SURFDetector }; +const { SuperpixelSEEDS,SuperpixelSLIC,SuperpixelLSC,SLIC,SLICO,PHash,HAAR_EYE,HAAR_EYE_TREE_EYEGLASSES,HAAR_FRONTALCATFACE,HAAR_FRONTALCATFACE_EXTENDED,HAAR_FRONTALFACE_ALT,HAAR_FRONTALFACE_ALT2,HAAR_FRONTALFACE_ALT_TREE,HAAR_FRONTALFACE_DEFAULT,HAAR_FULLBODY } = cv; +export { SuperpixelSEEDS,SuperpixelSLIC,SuperpixelLSC,SLIC,SLICO,PHash,HAAR_EYE,HAAR_EYE_TREE_EYEGLASSES,HAAR_FRONTALCATFACE,HAAR_FRONTALCATFACE_EXTENDED,HAAR_FRONTALFACE_ALT,HAAR_FRONTALFACE_ALT2,HAAR_FRONTALFACE_ALT_TREE,HAAR_FRONTALFACE_DEFAULT,HAAR_FULLBODY }; +const { HAAR_LEFTEYE_2SPLITS,HAAR_LICENCE_PLATE_RUS_16STAGES,HAAR_LOWERBODY,HAAR_PROFILEFACE,HAAR_RIGHTEYE_2SPLITS,HAAR_RUSSIAN_PLATE_NUMBER,HAAR_SMILE,HAAR_UPPERBODY,LBP_FRONTALCATFACE,LBP_FRONTALFACE,LBP_FRONTALFACE_IMPROVED,LBP_PROFILEFACE,LBP_SILVERWARE,drawTextBox,drawDetection } = cv; +export { HAAR_LEFTEYE_2SPLITS,HAAR_LICENCE_PLATE_RUS_16STAGES,HAAR_LOWERBODY,HAAR_PROFILEFACE,HAAR_RIGHTEYE_2SPLITS,HAAR_RUSSIAN_PLATE_NUMBER,HAAR_SMILE,HAAR_UPPERBODY,LBP_FRONTALCATFACE,LBP_FRONTALFACE,LBP_FRONTALFACE_IMPROVED,LBP_PROFILEFACE,LBP_SILVERWARE,drawTextBox,drawDetection }; +const { getVersion,getVersionString,toMatTypeName,getScoreMax,dropOverlappingZone } = cv; +export { getVersion,getVersionString,toMatTypeName,getScoreMax,dropOverlappingZone }; + +// TODO FIX this export mess +export const AGAST = (cv as any)['"AGAST"']; +export const AKAZE = (cv as any)['"AKAZE"'] as { DESCRIPTOR_KAZE: 3, DESCRIPTOR_MLDB_UPRIGHT: 4, DESCRIPTOR_MLDB: 5 }; +export const KAZE = (cv as any)['"KAZE"']; +export const FAST = (cv as any)['"FAST"']; +export const ORB = (cv as any)['"ORB"']; + +export default cv; + diff --git a/lib/promisify.ts b/src/lib/promisify.ts similarity index 70% rename from lib/promisify.ts rename to src/lib/promisify.ts index 834d43c72..0c4bf99fb 100644 --- a/lib/promisify.ts +++ b/src/lib/promisify.ts @@ -9,14 +9,15 @@ const isAsyncFn = (fn: (...args: any[]) => any) => { } }; -const promisify = (fn: () => any) => function (...params: any[]) { +const promisify = (fn: (...args: any[]) => any) => function toPromise(this: any, ...params: any[]) { if (isFn(params[params.length - 1])) { - return fn.apply(this, params); + return fn.apply(this, params as Parameters); } return new Promise((resolve, reject) => { const args = Array.prototype.slice.call(params); - args.push(function(err: Error, res: any) { + // add a param to convert callback to promise + args.push(function pomisifyed(err: Error, res: any) { if (err) { return reject(err); } @@ -27,7 +28,7 @@ const promisify = (fn: () => any) => function (...params: any[]) { }); }; -export default (cv: T): T => { +export default (cv: T): T => { const fns = Object.keys(cv).filter(k => isFn(cv[k])).map(k => cv[k]); const asyncFuncs = fns.filter(isAsyncFn); const clazzes = fns.filter(fn => fn.prototype && !!Object.keys(fn.prototype).length); @@ -38,7 +39,8 @@ export default (cv: T): T => { }); asyncFuncs.forEach((fn) => { - cv[fn.prototype.constructor.name] = promisify(fn); + const {name} = fn.prototype.constructor; + (cv as any)[name] = promisify(fn); }); return cv; diff --git a/test/.mocharc.json b/test/.mocharc.json new file mode 100644 index 000000000..cb0f98149 --- /dev/null +++ b/test/.mocharc.json @@ -0,0 +1,7 @@ +{ + "timeout": "30000", + "node-option": [ + "experimental-specifier-resolution=node", + "loader=ts-node/esm" + ] +} \ No newline at end of file diff --git a/test/package-lock.json b/test/package-lock.json deleted file mode 100644 index 15b1e04d2..000000000 --- a/test/package-lock.json +++ /dev/null @@ -1,1498 +0,0 @@ -{ - "name": "opencv4nodejs_test", - "version": "1.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "opencv4nodejs_test", - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "chai": "^4.2.0", - "istanbul": "^0.4.5", - "mocha": "^5.2.0" - }, - "devDependencies": { - "@types/chai": "^4.3.0", - "@types/mocha": "^9.1.0", - "rimraf": "^3.0.2", - "typescript": "^4.5.5" - } - }, - "node_modules/@types/chai": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", - "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" - }, - "node_modules/align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "engines": { - "node": "*" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "node_modules/camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "optional": true, - "dependencies": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "engines": { - "node": "*" - } - }, - "node_modules/cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "optional": true, - "dependencies": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "node_modules/cliui/node_modules/wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "optional": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/escodegen/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "engines": { - "node": "*" - } - }, - "node_modules/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "engines": { - "node": ">=4.x" - } - }, - "node_modules/handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "dependencies": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^2.6" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "bin": { - "he": "bin/he" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "optional": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "istanbul": "lib/cli.js" - } - }, - "node_modules/istanbul/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/istanbul/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - }, - "node_modules/istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/js-yaml": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz", - "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dependencies": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dependencies": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "node_modules/optimist/node_modules/wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "engines": { - "node": "*" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "optional": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "optional": true, - "dependencies": { - "align-text": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "optional": true, - "dependencies": { - "source-map": "~0.5.1", - "yargs": "~3.10.0" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - }, - "optionalDependencies": { - "uglify-to-browserify": "~1.0.0" - } - }, - "node_modules/uglify-js/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "optional": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "optional": true, - "dependencies": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - }, - "dependencies": { - "@types/chai": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", - "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", - "dev": true - }, - "@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", - "dev": true - }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "optional": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "optional": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "optional": true - } - } - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "optional": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=" - } - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "optional": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "js-yaml": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz", - "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "optional": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "requires": { - "abbrev": "1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "optional": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "optional": true - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "optional": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } -} diff --git a/test/package.json b/test/package.json index 75d822d58..8c34498bc 100644 --- a/test/package.json +++ b/test/package.json @@ -1,13 +1,14 @@ { "name": "opencv4nodejs_test", "version": "1.1.0", + "type": "module", "scripts": { - "test": "mocha -r ts-node/register --timeout 30000 ./tests/**/*.test.ts", - "test2": "env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register 'tests/**/*.test.ts'", - "test3": "env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register 'tests/**/simple.test.ts'", - "testIO": "env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register 'tests/io/**/*.ts'", - "testIOIO": "env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register 'tests/io/io.test.ts'", - "testCore": "env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register 'tests/core/core.test.ts'", + "test": "ts-mocha ./tests/**/*.test.ts", + "test2": "ts-mocha 'tests/**/*.test.ts'", + "test3": "ts-mocha 'tests/**/simple.test.ts'", + "testIO": "ts-mocha 'tests/io/**/*.ts'", + "testIOIO": "ts-mocha 'tests/io/io.test.ts'", + "testCore": "ts-mocha 'tests/core/core.test.ts'", "test-appveyor": "set APPVEYOR_BUILD=true && mocha -r ts-node/register --timeout 30000 ./tests/**/*.test.ts", "test-docker": "DOCKER_BUILD=true mocha -r ts-node/register --timeout 60000 ./tests/**/*.test.ts", "test-externalMemTrackingOther": "mocha -r ts-node/register --timeout 30000 ./externalMemTracking/other/index.test.ts", @@ -22,17 +23,17 @@ "license": "MIT", "dependencies": { "@u4/opencv4nodejs": "link:..", - "chai": "^4.4.1", + "chai": "^5.1.0", "istanbul": "^0.4.5", "mocha": "^10.4.0" }, "devDependencies": { - "@types/chai": "^4.3.14", "@types/chai-arrays": "^2.0.3", - "@types/mocha": "^9.1.1", + "@types/mocha": "^10.0.6", "@types/node": "^20.12.7", "chai-arrays": "^2.2.0", "rimraf": "^5.0.5", + "ts-mocha": "^10.0.0", "ts-node": "^10.9.2", "typescript": "^5.4.5" } diff --git a/test/pnpm-lock.yaml b/test/pnpm-lock.yaml index 8caaeb99b..1a1d4b8a6 100644 --- a/test/pnpm-lock.yaml +++ b/test/pnpm-lock.yaml @@ -9,8 +9,8 @@ dependencies: specifier: link:.. version: link:.. chai: - specifier: ^4.4.1 - version: 4.4.1 + specifier: ^5.1.0 + version: 5.1.0 istanbul: specifier: ^0.4.5 version: 0.4.5 @@ -19,15 +19,12 @@ dependencies: version: 10.4.0 devDependencies: - '@types/chai': - specifier: ^4.3.14 - version: 4.3.14 '@types/chai-arrays': specifier: ^2.0.3 version: 2.0.3 '@types/mocha': - specifier: ^9.1.1 - version: 9.1.1 + specifier: ^10.0.6 + version: 10.0.6 '@types/node': specifier: ^20.12.7 version: 20.12.7 @@ -37,6 +34,9 @@ devDependencies: rimraf: specifier: ^5.0.5 version: 5.0.5 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@10.4.0) ts-node: specifier: ^10.9.2 version: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) @@ -114,8 +114,14 @@ packages: resolution: {integrity: sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w==} dev: true - /@types/mocha@9.1.1: - resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + requiresBuild: true + dev: true + optional: true + + /@types/mocha@10.0.6: + resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} dev: true /@types/node@20.12.7: @@ -149,7 +155,6 @@ packages: /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} - dev: false /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -177,7 +182,6 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: false /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -191,10 +195,15 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: false - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + + /assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} dev: false /async@1.5.2: @@ -207,7 +216,6 @@ packages: /binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - dev: false /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -226,33 +234,32 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: false /browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: false + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - dev: false /chai-arrays@2.2.0: resolution: {integrity: sha512-4awrdGI2EH8owJ9I58PXwG4N56/FiM8bsn4CVSNEgr4GKAM6Kq5JPVApUbhUBjDakbZNuRvV7quRSC38PWq/tg==} engines: {node: '>=0.10'} dev: true - /chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} + /chai@5.1.0: + resolution: {integrity: sha512-kDZ7MZyM6Q1DhR9jy7dalKohXQ2yrlXkk59CR52aRKxJrobmlBNqnFQxX9xOX8w+4mz8SYlKJa/7D7ddltFXCw==} + engines: {node: '>=12'} dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 + assertion-error: 2.0.1 + check-error: 2.0.0 + deep-eql: 5.0.1 + loupe: 3.1.0 + pathval: 2.0.0 dev: false /chalk@4.1.2: @@ -261,12 +268,10 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: false - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - dependencies: - get-func-name: 2.0.2 + /check-error@2.0.0: + resolution: {integrity: sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==} + engines: {node: '>= 16'} dev: false /chokidar@3.5.3: @@ -282,7 +287,6 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: false /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -290,7 +294,6 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: false /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -329,24 +332,25 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 - dev: false /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} - dev: false - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + /deep-eql@5.0.1: + resolution: {integrity: sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==} engines: {node: '>=6'} - dependencies: - type-detect: 4.0.8 dev: false /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: false + /diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -355,7 +359,6 @@ packages: /diff@5.0.0: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} - dev: false /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -371,12 +374,10 @@ packages: /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} - dev: false /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: false /escodegen@1.8.1: resolution: {integrity: sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==} @@ -422,7 +423,6 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: false /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -430,12 +430,10 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: false /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - dev: false /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -447,20 +445,17 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: false /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: false optional: true /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - dev: false /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -471,7 +466,6 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: false /glob@10.3.12: resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} @@ -504,7 +498,6 @@ packages: inherits: 2.0.4 minimatch: 5.0.1 once: 1.4.0 - dev: false /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} @@ -527,35 +520,29 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: false /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - dev: false /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: false /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.3.0 - dev: false /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: false /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -566,22 +553,18 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: false /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: false /is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} - dev: false /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - dev: false /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -632,7 +615,15 @@ packages: hasBin: true dependencies: argparse: 2.0.1 - dev: false + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + requiresBuild: true + dependencies: + minimist: 1.2.8 + dev: true + optional: true /levn@0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} @@ -647,7 +638,6 @@ packages: engines: {node: '>=10'} dependencies: p-locate: 5.0.0 - dev: false /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} @@ -655,10 +645,9 @@ packages: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: false - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + /loupe@3.1.0: + resolution: {integrity: sha512-qKl+FrLXUhFuHUoDJG7f8P8gEMHq9NFS0c6ghXG1J0rldmZFQZoNVv/vyirE9qwCIhWZDsvEFd1sbFu3GvRQFg==} dependencies: get-func-name: 2.0.2 dev: false @@ -683,7 +672,6 @@ packages: engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: false /minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} @@ -694,7 +682,6 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: false /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} @@ -706,7 +693,6 @@ packages: hasBin: true dependencies: minimist: 1.2.8 - dev: false /mocha@10.4.0: resolution: {integrity: sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==} @@ -733,15 +719,12 @@ packages: yargs: 16.2.0 yargs-parser: 20.2.4 yargs-unparser: 2.0.0 - dev: false /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -757,13 +740,11 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: false /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: false /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} @@ -782,19 +763,16 @@ packages: engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - dev: false /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 - dev: false /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - dev: false /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} @@ -814,14 +792,14 @@ packages: minipass: 7.0.4 dev: true - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + /pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} dev: false /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: false /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} @@ -832,19 +810,16 @@ packages: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 - dev: false /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: false /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - dev: false /resolve@1.1.7: resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} @@ -860,13 +835,11 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false /serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} dependencies: randombytes: 2.1.0 - dev: false /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -885,6 +858,13 @@ packages: engines: {node: '>=14'} dev: true + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + /source-map@0.2.0: resolution: {integrity: sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==} engines: {node: '>=0.8.0'} @@ -897,7 +877,6 @@ packages: /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - dev: false /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -933,10 +912,16 @@ packages: ansi-regex: 6.0.1 dev: true + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + requiresBuild: true + dev: true + optional: true + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - dev: false /supports-color@3.2.3: resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} @@ -950,21 +935,31 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: false /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - dev: false /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: false + + /ts-mocha@10.0.0(mocha@10.4.0): + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + dependencies: + mocha: 10.4.0 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + dev: true /ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} @@ -997,6 +992,32 @@ packages: yn: 3.1.1 dev: true + /ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + dev: true + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + requiresBuild: true + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + optional: true + /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} @@ -1004,11 +1025,6 @@ packages: prelude-ls: 1.1.2 dev: false - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: false - /typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -1057,7 +1073,6 @@ packages: /workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} - dev: false /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -1078,17 +1093,14 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: false /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: false /yargs-parser@20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} - dev: false /yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} @@ -1098,7 +1110,6 @@ packages: decamelize: 4.0.0 flat: 5.0.2 is-plain-obj: 2.1.0 - dev: false /yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} @@ -1111,7 +1122,11 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.4 - dev: false + + /yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + dev: true /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} @@ -1121,4 +1136,3 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - dev: false diff --git a/test/tests/calib3d/MatCalib3d.test.ts b/test/tests/calib3d/MatCalib3d.test.ts index db21b0b96..c16afeeef 100644 --- a/test/tests/calib3d/MatCalib3d.test.ts +++ b/test/tests/calib3d/MatCalib3d.test.ts @@ -2,11 +2,11 @@ import { expect } from 'chai'; import { CalibrationMatrixValues, CorrectMatchesRet, DecomposeEssentialMatRet, DecomposeHomographyMatRet, DecomposeProjectionMatrixRet, Mat, OptimalNewCameraMatrix, RqDecomp3x3Ret, StereoRectify, Vec3, } from '@u4/opencv4nodejs'; -import { getTestContext } from '../model'; -import { assertMetaData } from '../../utils/matTestUtils'; -import { expectToBeVec2, expectToBeVec3, expectToBeVec4 } from '../../utils/testUtils'; -import { generateAPITests } from '../../utils/generateAPITests'; -import toTest from '../toTest'; +import { getTestContext } from '../model.js'; +import { assertMetaData } from '../../utils/matTestUtils.js'; +import { expectToBeVec2, expectToBeVec3, expectToBeVec4 } from '../../utils/testUtils.js'; +import { generateAPITests } from '../../utils/generateAPITests.js'; +import toTest from '../toTest.js'; if (toTest.calib3d) { const { diff --git a/test/tests/core/core.test.ts b/test/tests/core/core.test.ts index 77d1d1897..75402b3ca 100644 --- a/test/tests/core/core.test.ts +++ b/test/tests/core/core.test.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { expect } from 'chai'; -import { Mat, Point2, Point3 } from '@u4/opencv4nodejs'; +import { Mat, Point2, Point3, Vec2 } from '@u4/opencv4nodejs'; import asyncHooks from 'async_hooks'; import { getTestContext, TestContext } from '../model'; import { @@ -30,7 +30,7 @@ if (toTest.core) { const {getNodeMajorVersion} = TestContext; - const partitionTests = (createInstance: () => Point2) => { + const partitionTests = (createInstance: () => Point2 | Vec2) => { it('should return labels and numLabels', () => { const { labels, numLabels } = cv.partition([createInstance(), createInstance()], () => true); @@ -79,27 +79,25 @@ if (toTest.core) { }); describe('Vec2 input', () => { - // @ts-ignore - partitionTests(() => new cv.Vec2(0, 0)); + partitionTests(() => { + return new cv.Vec2(0, 0); + }); }); describe('Vec3 input', () => { - // @ts-ignore partitionTests(() => new cv.Vec3(0, 0, 0)); }); describe('Vec4 input', () => { - // @ts-ignore partitionTests(() => new cv.Vec4(0, 0, 0, 0)); }); describe('Vec6 input', () => { - // @ts-ignore partitionTests(() => new cv.Vec6(0, 0, 0, 0, 0, 0)); }); describe('Mat input', () => { - // @ts-ignore + // @ts-ignore partitionTests(() => new cv.Mat()); }); }); @@ -282,7 +280,7 @@ if (toTest.core) { it('should trigger `init` callback in async_hooks', () => { let typeFound = false; const hook = asyncHooks.createHook({ - // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + // eslint-disable-next-line @typescript-eslint/no-unused-vars init: (_asyncId, type, _triggerAsyncId, _resource) => { if (type.indexOf('opencv4nodejs') === 0) { typeFound = true; @@ -295,7 +293,7 @@ if (toTest.core) { const createInstance = () => new cv.Point2(0, 0); const num = 5; const instances = Array(num).fill(0).map(() => createInstance()); - // eslint-disable-next-line no-unused-vars + // const { labels, numLabels } = cv.partition(instances, () => true); expect(typeFound).to.be.equal(true); @@ -698,7 +696,7 @@ if (toTest.core) { classNameSpace: 'Mat', methodNameSpace: 'Core', getRequiredArgs: () => ([dim, rtype, dtype]), - // eslint-disable-next-line no-unused-vars + expectOutput: (res) => { expect(res).to.be.instanceOf(cv.Mat); expect(res.getDataAsArray()).to.eql(expectedResults); @@ -724,7 +722,7 @@ if (toTest.core) { methodName: 'eigen', classNameSpace: 'Mat', methodNameSpace: 'Core', - // eslint-disable-next-line no-unused-vars + expectOutput: (res: Mat) => { expect(res).to.be.instanceOf(cv.Mat); const arrayRes = res.getDataAsArray(); @@ -755,7 +753,7 @@ if (toTest.core) { ['flags', flags], ]), getRequiredArgs: () => ([m2]), - // eslint-disable-next-line no-unused-vars + expectOutput: (res: Mat) => { expect(res).to.be.instanceOf(cv.Mat); const arrayRes = res.getDataAsArray(); diff --git a/test/tests/face/facemarkTests.ts b/test/tests/face/facemarkTests.ts index 9ad93cda8..5747fcabb 100644 --- a/test/tests/face/facemarkTests.ts +++ b/test/tests/face/facemarkTests.ts @@ -81,7 +81,7 @@ export default (args: TestContext) => (Facemark: typeof FacemarkLBF | typeof Fac } before(() => { - const params = new FacemarkParams() as any; + const params = new FacemarkParams() as FacemarkLBFParams; params.cascadeFace = '../lib/haarcascades/haarcascade_frontalcatface.xml'; params.modelFilename = 'modelFilename.model'; params.nLandmarks = 68; diff --git a/test/tests/face/recognizerTests.ts b/test/tests/face/recognizerTests.ts index 9a62415ee..b3874fe8d 100644 --- a/test/tests/face/recognizerTests.ts +++ b/test/tests/face/recognizerTests.ts @@ -12,7 +12,7 @@ export default (args0: TestContext) => (args: string[], values: number[], Recogn props[arg] = values[i]; }); - /* eslint-disable new-parens */ + it('is constructable from args', () => { expect(() => new (Recognizer.bind.apply(Recognizer, [null].concat(values)))).to.not.throw(); }); diff --git a/test/tests/features2d/KeyPoint.test.ts b/test/tests/features2d/KeyPoint.test.ts index a6647a022..fc7176973 100644 --- a/test/tests/features2d/KeyPoint.test.ts +++ b/test/tests/features2d/KeyPoint.test.ts @@ -1,4 +1,4 @@ -/* eslint-disable camelcase */ + import { expect } from 'chai'; import { assertPropsWithValue, expectFloat } from '../../utils/testUtils'; import { getTestContext } from '../model'; diff --git a/test/tests/features2d/detectorTests.ts b/test/tests/features2d/detectorTests.ts index f7e0e3cf2..6b890cf56 100644 --- a/test/tests/features2d/detectorTests.ts +++ b/test/tests/features2d/detectorTests.ts @@ -42,7 +42,7 @@ export default function (args: TestContext) { customProps.args.forEach((arg: string, i) => { props[arg] = customProps.values[i]; }); - /* eslint-disable new-parens */ + const detector = new (Detector.bind.apply(Detector, [null].concat(customProps.values))); assertPropsWithValue(detector, props); }); diff --git a/test/tests/img_hash/imgHashTests.ts b/test/tests/img_hash/imgHashTests.ts index e95f31f75..493c08ef2 100644 --- a/test/tests/img_hash/imgHashTests.ts +++ b/test/tests/img_hash/imgHashTests.ts @@ -1,10 +1,10 @@ -import chai, { expect } from 'chai'; +import { use, expect } from 'chai'; import chaiArrays from 'chai-arrays'; import { PHash } from '../../../typings'; import { generateAPITests } from '../../utils/generateAPITests'; import { getTestContext } from '../model'; -chai.use(chaiArrays); +use(chaiArrays); export default () => (ImgHash: typeof PHash) => { const { getTestImg } = getTestContext(); diff --git a/test/tests/imgproc/Contour.test.ts b/test/tests/imgproc/Contour.test.ts index 73c02be85..fbfd2e96c 100644 --- a/test/tests/imgproc/Contour.test.ts +++ b/test/tests/imgproc/Contour.test.ts @@ -220,7 +220,6 @@ if (toTest.imgproc) { }); describe('matchShapes', () => { - // @ts-expect-error multuple variable name depending on openCV version const method = cvVersionGreaterEqual(4, 0, 0) ? cv.CONTOURS_MATCH_I1 : cv.CV_CONTOURS_MATCH_I1; it('should return zero for same shapes', () => { const similarity = leftmostContour.matchShapes(leftmostContour, method); diff --git a/test/tests/imgproc/MatImgproc.test.ts b/test/tests/imgproc/MatImgproc.test.ts index b6dd4be38..644e7ac05 100644 --- a/test/tests/imgproc/MatImgproc.test.ts +++ b/test/tests/imgproc/MatImgproc.test.ts @@ -902,7 +902,7 @@ if (toTest.imgproc) { ['apertureSize', 5], ['L2gradient', true], ]), - expectOutput: (binImg) => { + expectOutput: (binImg: any) => { assertMetaData(binImg)(img.rows, img.cols, cv.CV_8U); }, }); @@ -995,7 +995,7 @@ if (toTest.imgproc) { ['size', sizeDown], ['borderType', cv.BORDER_REFLECT], ]), - expectOutput: (outImg) => assertMetaData(outImg)(sizeDown.height, sizeDown.width, cv.CV_8UC3), + expectOutput: (outImg: any) => assertMetaData(outImg)(sizeDown.height, sizeDown.width, cv.CV_8UC3), }); }); @@ -1008,7 +1008,7 @@ if (toTest.imgproc) { ['size', sizeUp], ['borderType', cv.BORDER_DEFAULT], ]), - expectOutput: (outImg) => assertMetaData(outImg)(sizeUp.height, sizeUp.width, cv.CV_8UC3), + expectOutput: (outImg: any) => assertMetaData(outImg)(sizeUp.height, sizeUp.width, cv.CV_8UC3), }); }); @@ -1016,7 +1016,7 @@ if (toTest.imgproc) { const expectOutput = (pyramid: Mat[]) => { expect(pyramid).to.be.an('array').lengthOf(4); pyramid.forEach((outImg, i) => { - /* eslint-disable no-restricted-properties */ + const scale = 1 / 2 ** i; expect(outImg).to.be.instanceOf(cv.Mat); assertMetaData(outImg)(img.rows * scale, img.cols * scale, cv.CV_8UC3); @@ -1383,7 +1383,7 @@ if (toTest.imgproc) { zeroZone, criteria, ]), - expectOutput: (adjustedCorners) => { + expectOutput: (adjustedCorners: unknown) => { expect(adjustedCorners).to.be.an('array').lengthOf(corners.length); }, }); @@ -1431,7 +1431,7 @@ if (toTest.imgproc) { ['sdepth', cv.CV_64F], ['sqdepth', cv.CV_64F], ]), - expectOutput: (res) => { + expectOutput: (res: unknown) => { expect(res).to.have.property('sum').to.be.instanceOf(cv.Mat); expect(res).to.have.property('sqsum').to.be.instanceOf(cv.Mat); expect(res).to.have.property('tilted').to.be.instanceOf(cv.Mat); @@ -1504,7 +1504,7 @@ if (toTest.imgproc) { methodName: 'undistort', methodNameSpace: 'Mat', getRequiredArgs: () => ([cameraMatrix, distCoeffs]), - expectOutput: (res) => { + expectOutput: (res: unknown) => { expect(res).to.be.instanceOf(cv.Mat); }, }); diff --git a/test/tests/index.test.ts b/test/tests/index.test.ts index 585d30311..76dbe657a 100644 --- a/test/tests/index.test.ts +++ b/test/tests/index.test.ts @@ -1,4 +1,4 @@ -/* eslint-disable no-console */ + import { expect } from 'chai'; import cv from '@u4/opencv4nodejs'; import { getTestContext } from './model'; diff --git a/test/tests/io/VideoCapture.test.ts b/test/tests/io/VideoCapture.test.ts index 3a23c832f..880c3d06c 100644 --- a/test/tests/io/VideoCapture.test.ts +++ b/test/tests/io/VideoCapture.test.ts @@ -1,7 +1,7 @@ -/* eslint-disable no-bitwise */ + import { VideoCapture } from '@u4/opencv4nodejs'; import { expect } from 'chai'; -import * as path from 'path'; +import path from 'path'; import { assertMetaData } from '../../utils/matTestUtils'; import { getTestContext } from '../model'; import toTest from '../toTest'; diff --git a/test/tests/io/io.test.ts b/test/tests/io/io.test.ts index 34a51796c..496196575 100644 --- a/test/tests/io/io.test.ts +++ b/test/tests/io/io.test.ts @@ -2,8 +2,9 @@ import fs from 'fs'; import path from 'path'; import { expect } from 'chai'; import { Mat } from '@u4/opencv4nodejs'; -import { getTestContext } from '../model'; -import { assertDataDeepEquals, assertMetaData } from '../../utils/matTestUtils'; +import { getDirName } from '@u4/opencv4nodejs'; +import { getTestContext } from '../model.js'; +import { assertDataDeepEquals, assertMetaData } from '../../utils/matTestUtils.js'; import { clearTmpData, fileExists, @@ -11,9 +12,9 @@ import { getTmpDataFilePath, _asyncFuncShouldRequireArgs, } - from '../../utils/testUtils'; -import { generateAPITests } from '../../utils/generateAPITests'; -import toTest from '../toTest'; + from '../../utils/testUtils.js'; +import { generateAPITests } from '../../utils/generateAPITests.js'; +import toTest from '../toTest.js'; if (toTest.io) { const { @@ -36,8 +37,8 @@ if (toTest.io) { before(() => { lenna = cv.imread(getLennaPngPath()); got = cv.imread(getGotJpgPath()); - const lennaBase64File = fs.readFileSync(path.join(__dirname, 'data/lennaBase64.json'), { encoding: 'utf8', flag: 'r' }); - const gotBase64File = fs.readFileSync(path.join(__dirname, 'data/gotBase64.json'), { encoding: 'utf8', flag: 'r' }); + const lennaBase64File = fs.readFileSync(path.join(getDirName(), '../../test/tests/io/data/lennaBase64.json'), { encoding: 'utf8', flag: 'r' }); + const gotBase64File = fs.readFileSync(path.join(getDirName(), '../../test/tests/io/data/gotBase64.json'), { encoding: 'utf8', flag: 'r' }); lennaBase64Buf = Buffer.from(JSON.parse(lennaBase64File).data, 'base64'); gotBase64Buf = Buffer.from(JSON.parse(gotBase64File).data, 'base64'); // imageData = fs.readFileSync(getTestImagePath(true)); diff --git a/test/tests/model.ts b/test/tests/model.ts index daa48544b..5c5a0c746 100644 --- a/test/tests/model.ts +++ b/test/tests/model.ts @@ -1,7 +1,8 @@ import { cv as realCV, Mat } from '@u4/opencv4nodejs'; import fs from 'fs'; import path from 'path'; -import generateClassMethodTestsFactory from '../utils/generateClassMethodTests'; +import { getDirName } from '@u4/opencv4nodejs'; +import generateClassMethodTestsFactory from '../utils/generateClassMethodTests.js'; export type OpenCV = typeof realCV @@ -65,8 +66,7 @@ export class TestContext { private maskLerna512?: Mat; public get dataPrefix(): string { - return path.join(__dirname, '..', '..', 'data'); -// return path.join(__dirname, 'io', 'data'); + return path.join(getDirName(), '..', '..', 'data'); } constructor(public cv: OpenCV) { @@ -75,7 +75,7 @@ export class TestContext { public getTestImg: () => Mat = () => { if (!this.lerna512) { - const file = path.resolve(__dirname, '../utils/Lenna.data'); + const file = path.resolve(getDirName(), '../../test/utils/Lenna.data'); this.lerna512 = new this.cv.Mat(fs.readFileSync(file), 512, 512, this.cv.CV_8UC3); } return this.lerna512; @@ -100,7 +100,7 @@ export class TestContext { public getPeoplesTestImg: () => Mat = () => { if (!this.people360) { - const file = path.resolve(__dirname, '../utils/people.data'); + const file = path.resolve(getDirName(), '../../test/utils/people.data'); this.people360 = new this.cv.Mat(fs.readFileSync(file), 360, 640, this.cv.CV_8UC3); } return this.people360; diff --git a/test/tests/tracking/Tracker.test.ts b/test/tests/tracking/Tracker.test.ts index 4ccd919f1..4ba277a66 100644 --- a/test/tests/tracking/Tracker.test.ts +++ b/test/tests/tracking/Tracker.test.ts @@ -23,7 +23,7 @@ if (toTest.tracking) { } = getTestContext(); const TrackerTestGenerator = (getTestImg2: () => Mat) => (trackerName: TrackerNames) => { - // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + // eslint-disable-next-line @typescript-eslint/no-unused-vars const newTracker = (_arg2?: unknown) => new cv[trackerName](); const newTrackerParams = () => { if (trackerName === 'TrackerBoosting' || trackerName === 'TrackerKCF' || trackerName === 'TrackerMIL') { diff --git a/test/tests/ximgproc/ximgproc.test.ts b/test/tests/ximgproc/ximgproc.test.ts index e6b500546..e761b4505 100644 --- a/test/tests/ximgproc/ximgproc.test.ts +++ b/test/tests/ximgproc/ximgproc.test.ts @@ -1,4 +1,4 @@ -/* eslint-disable camelcase */ + import { assert, expect } from 'chai'; import { assertMetaData } from '../../utils/matTestUtils'; import { assertPropsWithValue } from '../../utils/testUtils'; diff --git a/test/tsconfig.json b/test/tsconfig.json index 53d393b73..d8703507a 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "target": "es2016", - "module": "commonjs", + "target": "ES2022", + "module": "ES2022", "moduleResolution": "node", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, diff --git a/test/utils/generateAPITests.ts b/test/utils/generateAPITests.ts index a8c52d525..a8680d0fc 100644 --- a/test/utils/generateAPITests.ts +++ b/test/utils/generateAPITests.ts @@ -79,10 +79,11 @@ export const generateAPITests = (opts_: PartialAPITestOpts): void => { case 'callbacked': // Use Callback args.push(expectOutputCallbacked(done, dut, args)); return dut[method].apply(dut, args); - default: // Use Sync + default: {// Use Sync const result = dut[method].apply(dut, args); opts.expectOutput(result, dut, args); return done(); + } } }; diff --git a/test/utils/matTestUtils.ts b/test/utils/matTestUtils.ts index 31cbf36b9..8fa076e35 100644 --- a/test/utils/matTestUtils.ts +++ b/test/utils/matTestUtils.ts @@ -10,7 +10,7 @@ const normalizeValue = (val: number | Vec4 | Array) => ((val as Vec4).x : ((val as Array).length !== 4 ? [undefined, (val as number[])[0], (val as number[])[1], (val as number[])[2]] : val) ); -// eslint-disable-next-line no-unused-vars + type Comparator = (a: T, b: T) => boolean; export const AssertMatValueEquals = (cmpFunc: Comparator) => (val0: number | number[], val1: number | number[]): void => { @@ -41,7 +41,7 @@ export const assertDataDeepEquals = (data0: any, data1: any): void => { assert(dangerousDeepEquals(data0, data1), 'mat data not equal'); }; -// eslint-disable-next-line no-unused-vars + type CompareInts = (a: number, b: number) => void; export const MatValuesComparator = (mat0: Mat, mat1: Mat) => (cmpFunc: CompareInts): void => { diff --git a/test/utils/testUtils.ts b/test/utils/testUtils.ts index 5424b3815..6028c704f 100644 --- a/test/utils/testUtils.ts +++ b/test/utils/testUtils.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable no-unused-vars */ + import { assert, expect } from 'chai'; import fs from 'fs'; import { @@ -8,7 +8,6 @@ import { Vec3, Vec4, } from '@u4/opencv4nodejs'; -import type Chai from 'chai'; export const assertError = (func: () => any, msg: string): void => { let errMsg = ''; diff --git a/tsconfig-common.json b/tsconfig-common.json new file mode 100644 index 000000000..4511ee4e8 --- /dev/null +++ b/tsconfig-common.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ES2019", + "strict": false, + "esModuleInterop": true, + "noImplicitReturns": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + }, + "include": [ "src/**/*.ts"] +} diff --git a/tsconfig-esm.json b/tsconfig-esm.json new file mode 100644 index 000000000..35090bde1 --- /dev/null +++ b/tsconfig-esm.json @@ -0,0 +1,15 @@ +{ + "extends": [ + "./tsconfig-common.json" + ], + "compilerOptions": { + "module": "es2020", + "target": "es2020", + "lib": [ + "es2020" + ], + "outDir": "esm", + "moduleResolution": "node" + } + } + \ No newline at end of file diff --git a/tsconfig-types.json b/tsconfig-types.json new file mode 100644 index 000000000..9f7ac991a --- /dev/null +++ b/tsconfig-types.json @@ -0,0 +1,12 @@ +{ + "extends": [ + "./tsconfig-common.json" + ], + "compilerOptions": { + "emitDeclarationOnly": true, + "declaration": true, + "declarationDir": "types", + "moduleResolution": "node" + } + } + \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 92593c362..10292db61 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,15 +1,12 @@ { + "extends": "./tsconfig-common.json", "compilerOptions": { - "target": "ES2019", "module": "commonjs", - "strict": false, - "esModuleInterop": false, - "noImplicitReturns": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "declaration": true, - "declarationMap": true, - }, - //"files": [ "./install/install.ts", "./install/parseEnv.ts" ] - "include": [ "./install/*.ts", "./lib/**/*.ts"] + "declaration": false, + "strict": true, + // "declarationMap": false, + // "declarationDir": "types", + "outDir": "cjs", + "moduleResolution": "Node10", + } } diff --git a/types/install/compileLib.d.ts b/types/install/compileLib.d.ts new file mode 100644 index 000000000..3f9f0799f --- /dev/null +++ b/types/install/compileLib.d.ts @@ -0,0 +1 @@ +export declare function compileLib(args: string[]): Promise; diff --git a/types/install/parseEnv.d.ts b/types/install/parseEnv.d.ts new file mode 100644 index 000000000..333b5913e --- /dev/null +++ b/types/install/parseEnv.d.ts @@ -0,0 +1,2 @@ +declare const envName: string; +declare const outputs: string[]; diff --git a/types/lib/commons.d.ts b/types/lib/commons.d.ts new file mode 100644 index 000000000..fc7dfeaa0 --- /dev/null +++ b/types/lib/commons.d.ts @@ -0,0 +1,5 @@ +export declare function resolvePath(filePath?: string, file?: string): string; +/** + * detect if electron https://github.com/electron/electron/issues/2288 + */ +export declare function isElectronWebpack(): boolean; diff --git a/types/lib/cvloader.d.ts b/types/lib/cvloader.d.ts new file mode 100644 index 000000000..751795b29 --- /dev/null +++ b/types/lib/cvloader.d.ts @@ -0,0 +1,5 @@ +import { type OpenCVBuildEnvParams } from '@u4/opencv-build'; +import type * as openCV from '../../typings/index.js'; +declare type OpenCVType = typeof openCV; +export declare function getOpenCV(opt?: OpenCVBuildEnvParams): OpenCVType; +export default getOpenCV; diff --git a/types/lib/meta.d.ts b/types/lib/meta.d.ts new file mode 100644 index 000000000..fbdc60b8d --- /dev/null +++ b/types/lib/meta.d.ts @@ -0,0 +1,3 @@ +/// +export declare function getDirName(): string; +export declare function getRequire(): NodeRequire; diff --git a/types/lib/opencv4nodejs.d.ts b/types/lib/opencv4nodejs.d.ts new file mode 100644 index 000000000..ad18b1378 --- /dev/null +++ b/types/lib/opencv4nodejs.d.ts @@ -0,0 +1,8 @@ +import type * as openCV from '../../typings/index.js'; +export type * as openCV from '../../typings/index.js'; +export declare const cv: typeof openCV; +declare const defExport: { + [key: string]: any; +}; +export { getDirName, getRequire } from "./meta.js"; +export default defExport; diff --git a/types/lib/promisify.d.ts b/types/lib/promisify.d.ts new file mode 100644 index 000000000..f1ecff0d5 --- /dev/null +++ b/types/lib/promisify.d.ts @@ -0,0 +1,4 @@ +declare const _default: (cv: T) => T; +export default _default; diff --git a/types/lib/src/deprecations.d.ts b/types/lib/src/deprecations.d.ts new file mode 100644 index 000000000..d7c27d55e --- /dev/null +++ b/types/lib/src/deprecations.d.ts @@ -0,0 +1,2 @@ +import type * as openCV from '../../../typings/index.js'; +export default function (cv: typeof openCV): void; diff --git a/types/lib/src/drawUtils.d.ts b/types/lib/src/drawUtils.d.ts new file mode 100644 index 000000000..fc0660e24 --- /dev/null +++ b/types/lib/src/drawUtils.d.ts @@ -0,0 +1,35 @@ +import type * as openCV from '../../../typings/index.js'; +import { Mat, Rect, Vec3 } from '../../../typings/index.js'; +export interface TextParams { + fontType: number; + fontSize: number; + thickness: number; + lineType: number; +} +export interface FontParams extends DrawParams { + fontType?: number; + fontSize?: number; +} +export interface TextLines extends FontParams { + text: string; +} +export interface TextDimention { + width: number; + height: number; + baseLine: number; +} +export interface DrawParams { + color?: Vec3; + thickness?: number; + lineType?: number; + shift?: number; +} +export declare function drawTextBox(img: Mat, upperLeft: { + x: number; + y: number; +}, textLines: TextLines[], alpha: number): Mat; +export interface DrawDetectionParams extends DrawParams { + segmentFraction?: number; +} +export declare function drawDetection(img: Mat, inputRect: Rect, opts?: DrawDetectionParams): Rect; +export default function (newCv: typeof openCV): void; diff --git a/types/lib/src/index.d.ts b/types/lib/src/index.d.ts new file mode 100644 index 000000000..e3942e11d --- /dev/null +++ b/types/lib/src/index.d.ts @@ -0,0 +1,2 @@ +import * as OpenCV from '../../../typings/index.js'; +export default function extendWithJsSources(cv: typeof OpenCV): typeof OpenCV; diff --git a/types/lib/src/misc.d.ts b/types/lib/src/misc.d.ts new file mode 100644 index 000000000..9d47b77ff --- /dev/null +++ b/types/lib/src/misc.d.ts @@ -0,0 +1,40 @@ +import type * as openCV from '../../../typings/index.js'; +import type { Mat, Rect } from '../../../typings/index.js'; +export declare const allTypes: readonly ["CV_8U", "CV_8S", "CV_16U", "CV_16S", "CV_32S", "CV_32F", "CV_64F", "CV_8UC1", "CV_8UC2", "CV_8UC3", "CV_8UC4", "CV_8SC1", "CV_8SC2", "CV_8SC3", "CV_8SC4", "CV_16UC1", "CV_16UC2", "CV_16UC3", "CV_16UC4", "CV_16SC1", "CV_16SC2", "CV_16SC3", "CV_16SC4", "CV_32SC1", "CV_32SC2", "CV_32SC3", "CV_32SC4", "CV_32FC1", "CV_32FC2", "CV_32FC3", "CV_32FC4", "CV_64FC1", "CV_64FC2", "CV_64FC3", "CV_64FC4"]; +export type MatTypes = typeof allTypes[number]; +/** + * Check declaration and doc in cv.d.ts + */ +export declare function getVersion(): [number, number, number]; +/** + * Check declaration and doc in cv.d.ts + */ +export declare function getVersionString(): string; +/** + * Convert a Mat type to string for easy read + * non Natif code + * @param type Mat type as int value + */ +export declare function toMatTypeName(type: number): MatTypes | undefined; +/** + * Find values greater than threshold in a 32bit float matrix and return a list of matchs formated as [[x1, y1, score1]. [x2, y2, score2], [x3, y3, score3]] + * add to be used with matchTemplate + * non Natif code + * @param scoreMat Matric containing scores as 32Bit float (CV_32F) + * @param threshold Minimal score to collect + * @param region search region + * @returns a list of matchs + */ +export declare function getScoreMax(scoreMat: Mat, threshold: number, region?: Rect): Array<[number, number, number]>; +/** + * Drop overlaping zones, keeping best one + * @param template template Matrix used to get dimentions. + * @param matches list of matches as a list in [x,y,score]. (this data will be altered) + * @returns best match without colisions + */ +export declare function dropOverlappingZone(template: Mat, matches: Array<[number, number, number]>): Array<[number, number, number]>; +/** + * register new functions + * @param cv + */ +export default function (newCv: typeof openCV): void; diff --git a/typings/FacemarkLBFParams.d.ts b/typings/FacemarkLBFParams.d.ts index df45f9afc..a24c2fdc6 100644 --- a/typings/FacemarkLBFParams.d.ts +++ b/typings/FacemarkLBFParams.d.ts @@ -3,7 +3,7 @@ import { Rect } from "./Rect.d"; export interface IFacemarkLBFParams { baggingOverlap: number; cascadeFile: string; - // cascadeFace: string; + cascadeFace?: string; detectROI: Rect; featsM: number[]; initShapeN: number; @@ -20,24 +20,23 @@ export interface IFacemarkLBFParams { verbose: boolean; } - export class FacemarkLBFParams { readonly baggingOverlap: number; readonly cascadeFile: string; - // readonly cascadeFace: string; + cascadeFace?: string; readonly detectROI: Rect; readonly featsM: number[]; - readonly initShapeN: number; - readonly modelFilename: string; - readonly nLandmarks: number; + initShapeN: number; + modelFilename: string; + nLandmarks: number; readonly pupils: number[][]; readonly radiusM: number[]; readonly saveModel: boolean; readonly seed: number; readonly shapeOffset: number; - readonly stagesN: number; - readonly treeDepth: number; - readonly treeN: number; + stagesN: number; + treeDepth: number; + treeN: number; readonly verbose: boolean; - constructor(params?: Partial); + constructor(params?: Partial): FacemarkLBFParams; } diff --git a/typings/constants.d.ts b/typings/constants.d.ts index 63d60b678..26004c2a8 100644 --- a/typings/constants.d.ts +++ b/typings/constants.d.ts @@ -86,7 +86,7 @@ export const DNN_BACKEND_OPENCV: number; export const DNN_BACKEND_INFERENCE_ENGINE: number; export const DNN_BACKEND_HALIDE: number; export const DNN_BACKEND_CUDA: number; - +export const DNN_BACKEND_WEBNN: number; export const DNN_TARGET_CPU: number; export const DNN_TARGET_OPENCL: number; export const DNN_TARGET_OPENCL_FP16: number; @@ -634,6 +634,7 @@ export const INTER_CUBIC: number; export const INTER_LANCZOS4: number; export const INTER_LINEAR: number; export const INTER_MAX: number; +export const INTER_LINEAR_EXACT: number; export const INTER_NEAREST: number; export const KMEANS_PP_CENTERS: number; export const KMEANS_RANDOM_CENTERS: number; @@ -657,6 +658,7 @@ export const MORPH_RECT: number; export const MORPH_TOPHAT: number; export const NORM_HAMMING: number; export const NORM_HAMMING2: number; +export const NORM_TYPE_MASK: number; export const NORM_INF: number; export const NORM_L1: number; export const NORM_L2: number; @@ -670,6 +672,9 @@ export const REGULAR: number; export const RETR_CCOMP: number; export const RETR_EXTERNAL: number; export const RETR_FLOODFILL: number; +export const CONTOURS_MATCH_I1: number; +export const CONTOURS_MATCH_I2: number; +export const CONTOURS_MATCH_I3: number; export const RETR_LIST: number; export const RETR_TREE: number; export const RHO: number; diff --git a/typings/cv.d.ts b/typings/cv.d.ts index 57f344b33..e33ac1a64 100644 --- a/typings/cv.d.ts +++ b/typings/cv.d.ts @@ -38,6 +38,7 @@ export function calcHist(img: Mat, histAxes: HistAxes[], mask?: Mat): Mat; export function calcHistAsync(img: Mat, histAxes: HistAxes[], mask?: Mat): Promise; export function canny(dx: Mat, dy: Mat, threshold1: number, threshold2: number, L2gradient?: boolean): Mat; +export function cannyAsync(dx: Mat, dy: Mat, threshold1: number, threshold2: number, L2gradient?: boolean): Promise; export function computeCorrespondEpilines(points: Point2[], whichImage: number, F: Mat): Vec3[]; export function computeCorrespondEpilinesAsync(points: Point2[], whichImage: number, F: Mat): Promise; @@ -48,6 +49,7 @@ export function drawKeyPoints(img: Mat, keyPoints: KeyPoint[]): Mat; export function drawMatches(img1: Mat, img2: Mat, keyPoints1: KeyPoint[], keyPoints2: KeyPoint[], matches: DescriptorMatch[]): Mat; export function fastNlMeansDenoisingColored(src: Mat, h?: number, hColor?: number, templateWindowSize?: number, searchWindowSize?: number): Mat; +export function fastNlMeansDenoisingColoredAsync(src: Mat, h?: number, hColor?: number, templateWindowSize?: number, searchWindowSize?: number): Promise; export function inpaint(src: Mat, mask: Mat, inpaintRadius: number, flags: number): Mat; export function inpaintAsync(src: Mat, mask: Mat, inpaintRadius: number, flags: number): Promise; @@ -149,70 +151,16 @@ export function dangerousEnableCustomMatAllocator(): boolean; export function dangerousDisableCustomMatAllocator(): boolean; export function getMemMetrics(): { TotalAlloc: number, TotalKnownByJS: number, NumAllocations: number, NumDeAllocations: number }; -export type DrawParams = { - thickness?: number; - lineType?: number; - color?: Vec3; -} - -export interface DrawDetectionParams extends DrawParams { - segmentFraction?: number; -} - -export interface FontParams extends DrawParams { - fontType?: number; - fontSize?: number; -} - -export interface TextLine extends FontParams { - text: string; -} - /** * All non-native functions signatures go here. * Implementation are injected fron lib/src/index.ts */ -/** - * return openCV version as an array containing Major, minor, patch - */ -export function getVersion(): [number, number, number]; - -/** - * return openCV version as a string - */ -export function getVersionString(): string; +// drawDetection TextLines type FontParams, type DrawDetectionParams, type DrawParams +export * from '../types/lib/src/drawUtils'; -// non Natif -export function drawDetection(img: Mat, inputRect: Rect, opts?: DrawDetectionParams): Rect; -// non Natif -export function drawTextBox(img: Mat, upperLeft: { x: number, y: number }, textLines: TextLine[], alpha: number): Mat; -/** - * Convert a Mat type to string for easy read - * non Natif code - * @param type Mat type as int value - */ -export function toMatTypeName(type: number): string | undefined; -/** - * Find values greater than threshold in a 32bit float matrix and return a list of matchs formated as [[x1, y1, score1]. [x2, y2, score2], [x3, y3, score3]] - * add to be used with matchTemplate - * non Natif code - * @param scoreMat Matric containing scores as 32Bit float (CV_32F) - * @param threshold Minimal score to collect - * @param region search region - * @returns a list of matchs - */ -export function getScoreMax(scoreMat: Mat, threshold: number, region?: Rect): Array<[number, number, number]>; - -/** - * Drop overlaping zones, keeping best one - * add to be used with matchTemplate - * non Natif code - * @param template template Matrix used to get dimentions. - * @param matches list of matches as a list in [x,y,score]. (this data will be altered) - * @returns best match without colisions - */ -export function dropOverlappingZone(template: Mat, matches: Array<[number, number, number]>): Array<[number, number, number]>; +// dropOverlappingZone getScoreMax toMatTypeName +export * from '../types/lib/src/misc' // experimental, need improvements / rewrite export function min(src1: Mat, src2: Mat, dst: Mat): Mat; @@ -223,3 +171,38 @@ export function maxAsync(src1: Mat, src2: Mat, dst: Mat): Promise; export function magnitude(x: Mat, y: Mat, magnitude: Mat): Mat; export function magnitudeAsync(x: Mat, y: Mat, magnitude: Mat): Promise; + +export const haarCascades: { + HAAR_EYE: string; + HAAR_EYE_TREE_EYEGLASSES: string; + HAAR_FRONTALCATFACE: string; + HAAR_FRONTALCATFACE_EXTENDED: string; + HAAR_FRONTALFACE_ALT: string; + HAAR_FRONTALFACE_ALT2: string; + HAAR_FRONTALFACE_ALT_TREE: string; + HAAR_FRONTALFACE_DEFAULT: string; + HAAR_FULLBODY: string; + HAAR_LEFTEYE_2SPLITS: string; + HAAR_LICENCE_PLATE_RUS_16STAGES: string; + HAAR_LOWERBODY: string; + HAAR_PROFILEFACE: string; + HAAR_RIGHTEYE_2SPLITS: string; + HAAR_RUSSIAN_PLATE_NUMBER: string; + HAAR_SMILE: string; + HAAR_UPPERBODY: string; +}; +export const lbpCascades: { + LBP_FRONTALCATFACE: string; + LBP_FRONTALFACE: string; + LBP_FRONTALFACE_IMPROVED: string; + LBP_PROFILEFACE: string; + LBP_SILVERWARE: string; +}; +export const HOGHistogramNormType: { L2Hys: string}; +// TODO Fill this types +export class KeyPointMatch { + distance: number; + kpTo?: Object; + kpFrom?: Object; +} +export class StatModel {} diff --git a/typings/group/calib3d.d.ts b/typings/group/calib3d.d.ts index f3ad00bb6..174838b37 100644 --- a/typings/group/calib3d.d.ts +++ b/typings/group/calib3d.d.ts @@ -188,6 +188,7 @@ export interface FindHomographyRet { } export function findHomography(srcPoints: Point2[], dstPoints: Point2[], method?: number, ransacReprojThreshold?: number, maxIters?: number, confidence?: number): FindHomographyRet; +export function findHomographyAsync(srcPoints: Point2[], dstPoints: Point2[], method?: number, ransacReprojThreshold?: number, maxIters?: number, confidence?: number): Promise; // Finds a perspective transformation between two planes. More... // @@ -300,6 +301,15 @@ export function solvePnPRansac(objectPoints: Point3[], imagePoints: Point2[], ca flags: number, }): SolvePnPRansacRet; +export function solvePnPRansacAsync(objectPoints: Point3[], imagePoints: Point2[], cameraMatrix: Mat, distCoeffs: number[], args: { + rvec: Vec3, + tvec: Vec3, + useExtrinsicGuess: boolean, + iterationsCount: number, + reprojectionError: number, + confidence: number, + flags: number, +}): Promise; //void cv::solvePnPRefineLM (InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, InputOutputArray rvec, InputOutputArray tvec, TermCriteria criteria=TermCriteria(TermCriteria::EPS+TermCriteria::COUNT, 20, FLT_EPSILON)) diff --git a/typings/group/core_cluster.d.ts b/typings/group/core_cluster.d.ts index e05858097..31fb12ff1 100644 --- a/typings/group/core_cluster.d.ts +++ b/typings/group/core_cluster.d.ts @@ -7,20 +7,24 @@ import { Point2 } from "../Point2"; import { Point3 } from "../Point3"; import { TermCriteria } from "../TermCriteria"; - // double cv::kmeans (InputArray data, int K, InputOutputArray bestLabels, TermCriteria criteria, int attempts, int flags, OutputArray centers=noArray()) // Finds centers of clusters and groups input samples around the clusters. More... // // Splits an element set into equivalency classes. More... -export function kmeans(data: Point2[], k: number, termCriteria: TermCriteria, attempts: number, flags: number): { labels: number[], centers: Point2[] }; -export function kmeans(data: Point3[], k: number, termCriteria: TermCriteria, attempts: number, flags: number): { labels: number[], centers: Point3[] }; + +export function kmeans(data: T[], k: number, termCriteria: TermCriteria, attempts: number, flags: number): { labels: number[], centers: T[] }; + +// export function kmeans(data: Point2[], k: number, termCriteria: TermCriteria, attempts: number, flags: number): { labels: number[], centers: Point2[] }; +// export function kmeans(data: Point3[], k: number, termCriteria: TermCriteria, attempts: number, flags: number): { labels: number[], centers: Point3[] }; // template // int partition (const std::vector< _Tp > &_vec, std::vector< int > &labels, _EqPredicate predicate=_EqPredicate()) -export function partition(data: Point2[], predicate: (pt1: Point2, pt2: Point2) => boolean): { labels: number[], numLabels: number }; -export function partition(data: Point3[], predicate: (pt1: Point3, pt2: Point3) => boolean): { labels: number[], numLabels: number }; -export function partition(data: Vec2[], predicate: (vec1: Vec2, vec2: Vec2) => boolean): { labels: number[], numLabels: number }; -export function partition(data: Vec3[], predicate: (vec1: Vec3, vec2: Vec3) => boolean): { labels: number[], numLabels: number }; -export function partition(data: Vec4[], predicate: (vec1: Vec4, vec2: Vec4) => boolean): { labels: number[], numLabels: number }; -export function partition(data: Vec6[], predicate: (vec1: Vec6, vec2: Vec6) => boolean): { labels: number[], numLabels: number }; -export function partition(data: Mat[], predicate: (mat1: Mat, mat2: Mat) => boolean): { labels: number[], numLabels: number }; +export function partition(data: Array, predicate: (pt1: T, pt2: T) => boolean): { labels: number[], numLabels: number }; + +// export function partition(data: Point2[], predicate: (pt1: Point2, pt2: Point2) => boolean): { labels: number[], numLabels: number }; +// export function partition(data: Point3[], predicate: (pt1: Point3, pt2: Point3) => boolean): { labels: number[], numLabels: number }; +// export function partition(data: Vec2[], predicate: (vec1: Vec2, vec2: Vec2) => boolean): { labels: number[], numLabels: number }; +// export function partition(data: Vec3[], predicate: (vec1: Vec3, vec2: Vec3) => boolean): { labels: number[], numLabels: number }; +// export function partition(data: Vec4[], predicate: (vec1: Vec4, vec2: Vec4) => boolean): { labels: number[], numLabels: number }; +// export function partition(data: Vec6[], predicate: (vec1: Vec6, vec2: Vec6) => boolean): { labels: number[], numLabels: number }; +// export function partition(data: Mat[], predicate: (mat1: Mat, mat2: Mat) => boolean): { labels: number[], numLabels: number }; diff --git a/typings/group/imgproc_colormap.d.ts b/typings/group/imgproc_colormap.d.ts index f2da6077a..5c57dfaf2 100644 --- a/typings/group/imgproc_colormap.d.ts +++ b/typings/group/imgproc_colormap.d.ts @@ -9,3 +9,4 @@ import { Mat } from '../Mat.d'; // Applies a user colormap on a given image. More... export function applyColorMap(src: Mat, colormap: number | Mat): Mat; +export function applyColorMapAsync(src: Mat, colormap: number | Mat): Promise; diff --git a/typings/index.d.ts b/typings/index.d.ts index 4ec8f8743..8405073d8 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -2,3 +2,4 @@ import * as allOpenCV from './openCV'; export * from './openCV'; export declare const cv: typeof allOpenCV; export default cv; +export { getDirName, getRequire } from "../types/lib/meta.js";