diff --git a/CHANGELOG.md b/CHANGELOG.md index cb445bf4..84f25359 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,9 @@ ## Changelog -### **HEAD -> main** 2022/11/04 mandic00@live.com +### **HEAD -> main** 2022/11/10 mandic00@live.com +- refresh dependencies - add named exports - add draw label templates - reduce dev dependencies diff --git a/build.js b/build.js index b812966a..019f06df 100644 --- a/build.js +++ b/build.js @@ -32,17 +32,26 @@ const apiExtractorIgnoreList = [ // eslint-disable-line no-unused-vars ]; function copy(src, dst) { - if (!fs.existsSync(src)) return; + if (!fs.existsSync(src)) { + log.warn('Copy:', { input: src, output: dst }); + return; + } + log.state('Copy:', { input: src, output: dst }); const buffer = fs.readFileSync(src); fs.writeFileSync(dst, buffer); } function write(str, dst) { + log.state('Write:', { output: dst }); fs.writeFileSync(dst, str); } function filter(str, src) { - if (!fs.existsSync(src)) return; + if (!fs.existsSync(src)) { + log.warn('Filter:', { src }); + return; + } + log.state('Filter:', { input: src }); const buffer = fs.readFileSync(src, 'UTF-8'); const lines = buffer.split(/\r?\n/); const out = []; @@ -89,16 +98,19 @@ async function analyzeModels() { async function main() { log.logFile(logFile); log.data('Build', { name: packageJSON.name, version: packageJSON.version }); + // run production build const build = new Build(); await build.run('production'); + // patch tfjs typedefs - log.state('Copy:', { input: 'src/tfjs', output: 'dist/tfjs.esm.d.ts' }); copy('src/tfjs/tfjs.esm.d.ts', 'dist/tfjs.esm.d.ts'); - // log.state('Copy:', { input: '@vladmandic/tfjs/types', output: 'types/tfjs-core.esm.d.ts' }); - // copy('node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts', 'types/tfjs-core.esm.d.ts'); - // log.state('Copy:', { input: '@vladmandic/tfjs/types', output: 'types/tfjs.esm.d.ts' }); - // copy('node_modules/@vladmandic/tfjs/types/tfjs.d.ts', 'types/tfjs.esm.d.ts'); + copy('node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts', 'types/tfjs-core.d.ts'); + copy('node_modules/@vladmandic/tfjs/types/tfjs.d.ts', 'types/tfjs.esm.d.ts'); + copy('tfjs/types-tsconfig.json', 'types/tsconfig.json'); + copy('tfjs/types-eslint.json', 'types/.eslintrc.json'); + filter('reference types', 'types/tfjs-core.d.ts'); + // run api-extractor to create typedef rollup const extractorConfig = APIExtractor.ExtractorConfig.loadFileAndPrepare('.api-extractor.json'); const extractorResult = APIExtractor.Extractor.invoke(extractorConfig, { @@ -113,24 +125,13 @@ async function main() { }, }); log.state('API-Extractor:', { succeeeded: extractorResult.succeeded, errors: extractorResult.errorCount, warnings: extractorResult.warningCount }); - // distribute typedefs - // log.state('Copy:', { input: 'types/human.d.ts' }); - // copy('types/human.d.ts', 'dist/human.esm-nobundle.d.ts'); - // copy('types/human.d.ts', 'dist/human.esm.d.ts'); - // copy('types/human.d.ts', 'dist/human.d.ts'); - // copy('types/human.d.ts', 'dist/human.node-gpu.d.ts'); - // copy('types/human.d.ts', 'dist/human.node.d.ts'); - // copy('types/human.d.ts', 'dist/human.node-wasm.d.ts'); - log.state('Filter:', { input: 'types/human.d.ts' }); filter('reference types', 'types/human.d.ts'); - log.state('Link:', { input: 'types/human.d.ts' }); write('export * from \'../types/human\';', 'dist/human.esm-nobundle.d.ts'); write('export * from \'../types/human\';', 'dist/human.esm.d.ts'); write('export * from \'../types/human\';', 'dist/human.d.ts'); write('export * from \'../types/human\';', 'dist/human.node-gpu.d.ts'); write('export * from \'../types/human\';', 'dist/human.node.d.ts'); write('export * from \'../types/human\';', 'dist/human.node-wasm.d.ts'); - // export * from '../types/human'; // generate model signature await analyzeModels(); diff --git a/src/human.ts b/src/human.ts index b036db38..c7476c2c 100644 --- a/src/human.ts +++ b/src/human.ts @@ -45,7 +45,6 @@ import type { Input, DrawOptions, Config, Result, FaceResult, HandResult, BodyRe import type { Tensor, Tensor4D } from './tfjs/types'; // type exports export * from './exports'; -// tfjs re-export /** **Human** library main class * diff --git a/src/tfjs/tfjs.esm.d.ts b/src/tfjs/tfjs.esm.d.ts index a7ab4a9b..90ac9fb4 100644 --- a/src/tfjs/tfjs.esm.d.ts +++ b/src/tfjs/tfjs.esm.d.ts @@ -1,6 +1,8 @@ /* eslint-disable import/no-unresolved */ /* eslint-disable import/no-extraneous-dependencies */ +export * from 'types/tfjs.esm'; + export declare const version: { 'tfjs-core': string; 'tfjs-backend-cpu': string; @@ -13,12 +15,11 @@ export declare const version: { export * from '@tensorflow/tfjs-core'; export * from '@tensorflow/tfjs-converter'; -// export * from '@tensorflow/tfjs-data'; -// export * from '@tensorflow/tfjs-layers'; -// export * from '@tensorflow/tfjs-backend-cpu'; +export * from '@tensorflow/tfjs-data'; +export * from '@tensorflow/tfjs-layers'; +export * from '@tensorflow/tfjs-backend-cpu'; export * from '@tensorflow/tfjs-backend-wasm'; export * from '@tensorflow/tfjs-backend-webgl'; -// export * from '@tensorflow/tfjs-backend-webgpu'; - -// export * from 'types/tfjs-core.esm'; -// export * from 'types/tfjs.esm'; +export * from '@tensorflow/tfjs-backend-webgpu'; +export * from '@tensorflow/tfjs-node'; +export * from '@tensorflow/tfjs-node-gpu'; diff --git a/src/util/env.ts b/src/util/env.ts index 996b401f..67d01421 100644 --- a/src/util/env.ts +++ b/src/util/env.ts @@ -127,7 +127,7 @@ export class Env { async updateBackend() { // analyze backends this.backends = Object.keys(tf.engine().registryFactory); - try { + try { // backend may not be initialized this.tensorflow = { version: (tf.backend()['binding'] ? tf.backend()['binding'].TF_Version : undefined), gpu: (tf.backend()['binding'] ? tf.backend()['binding'].isUsingGpuDevice() : undefined), @@ -140,12 +140,10 @@ export class Env { this.wasm.multithread = await tf.env().getAsync('WASM_HAS_MULTITHREAD_SUPPORT') as boolean; } const c = image.canvas(100, 100); - const ctx = c ? c.getContext('webgl2') : undefined; // causes too many gl contexts - // const ctx = typeof tf.backend().getGPGPUContext !== undefined ? tf.backend().getGPGPUContext : null; - this.webgl.supported = typeof ctx !== 'undefined'; + const gl = c ? c.getContext('webgl2') as WebGL2RenderingContext : undefined; // causes too many gl contexts + this.webgl.supported = typeof gl !== 'undefined'; this.webgl.backend = this.backends.includes('webgl'); - if (this.webgl.supported && this.webgl.backend) { - const gl = ctx as WebGL2RenderingContext; + if (this.webgl.supported && this.webgl.backend && gl) { this.webgl.version = gl.getParameter(gl.VERSION); this.webgl.vendor = gl.getParameter(gl.VENDOR); this.webgl.renderer = gl.getParameter(gl.RENDERER); diff --git a/test/build.log b/test/build.log index e512420a..c09da00d 100644 --- a/test/build.log +++ b/test/build.log @@ -1,40 +1,50 @@ -2022-11-10 20:16:03 DATA:  Build {"name":"@vladmandic/human","version":"3.0.0"} -2022-11-10 20:16:03 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.0"} -2022-11-10 20:16:03 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2022-11-10 20:16:03 INFO:  Toolchain: {"build":"0.7.14","esbuild":"0.15.13","typescript":"4.8.4","typedoc":"0.23.20","eslint":"8.27.0"} -2022-11-10 20:16:03 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2022-11-10 20:16:03 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} -2022-11-10 20:16:03 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":361} -2022-11-10 20:16:03 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":569,"outputBytes":924} -2022-11-10 20:16:03 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":79,"inputBytes":674094,"outputBytes":316829} -2022-11-10 20:16:03 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":577,"outputBytes":928} -2022-11-10 20:16:03 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":79,"inputBytes":674098,"outputBytes":316833} -2022-11-10 20:16:03 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":665,"outputBytes":1876} -2022-11-10 20:16:03 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":79,"inputBytes":675046,"outputBytes":316944} -2022-11-10 20:16:03 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670} -2022-11-10 20:16:03 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":79,"inputBytes":673840,"outputBytes":315438} -2022-11-10 20:16:03 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1375,"outputBytes":1144900} -2022-11-10 20:16:03 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":79,"inputBytes":1818070,"outputBytes":1457034} -2022-11-10 20:16:04 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":79,"inputBytes":1818070,"outputBytes":1914674} -2022-11-10 20:16:08 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15} -2022-11-10 20:16:10 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":76,"generated":true} -2022-11-10 20:16:10 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":5981,"outputBytes":2862} -2022-11-10 20:16:10 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17134,"outputBytes":9181} -2022-11-10 20:16:19 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":116,"errors":0,"warnings":0} -2022-11-10 20:16:19 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2022-11-10 20:16:19 STATE: Copy: {"input":"src/tfjs","output":"dist/tfjs.esm.d.ts"} -2022-11-10 20:16:19 INFO:  Done... -2022-11-10 20:16:20 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":195} -2022-11-10 20:16:20 STATE: Filter: {"input":"types/human.d.ts"} -2022-11-10 20:16:20 STATE: Link: {"input":"types/human.d.ts"} -2022-11-10 20:16:20 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} -2022-11-10 20:16:20 STATE: Models {"folder":"./models","models":12} -2022-11-10 20:16:20 STATE: Models {"folder":"../human-models/models","models":43} -2022-11-10 20:16:20 STATE: Models {"folder":"../blazepose/model/","models":4} -2022-11-10 20:16:20 STATE: Models {"folder":"../anti-spoofing/model","models":1} -2022-11-10 20:16:20 STATE: Models {"folder":"../efficientpose/models","models":3} -2022-11-10 20:16:20 STATE: Models {"folder":"../insightface/models","models":5} -2022-11-10 20:16:20 STATE: Models {"folder":"../movenet/models","models":3} -2022-11-10 20:16:20 STATE: Models {"folder":"../nanodet/models","models":4} -2022-11-10 20:16:21 STATE: Models: {"count":58,"totalSize":386543911} -2022-11-10 20:16:21 INFO:  Human Build complete... {"logFile":"test/build.log"} +2022-11-11 11:10:32 DATA:  Build {"name":"@vladmandic/human","version":"3.0.0"} +2022-11-11 11:10:32 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.0"} +2022-11-11 11:10:32 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-11-11 11:10:32 INFO:  Toolchain: {"build":"0.7.14","esbuild":"0.15.13","typescript":"4.8.4","typedoc":"0.23.20","eslint":"8.27.0"} +2022-11-11 11:10:32 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2022-11-11 11:10:32 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} +2022-11-11 11:10:32 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":361} +2022-11-11 11:10:32 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":569,"outputBytes":924} +2022-11-11 11:10:32 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":79,"inputBytes":673984,"outputBytes":316823} +2022-11-11 11:10:32 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":577,"outputBytes":928} +2022-11-11 11:10:32 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":79,"inputBytes":673988,"outputBytes":316827} +2022-11-11 11:10:32 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":665,"outputBytes":1876} +2022-11-11 11:10:32 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":79,"inputBytes":674936,"outputBytes":316938} +2022-11-11 11:10:32 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670} +2022-11-11 11:10:32 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":79,"inputBytes":673730,"outputBytes":315432} +2022-11-11 11:10:32 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1375,"outputBytes":1144900} +2022-11-11 11:10:32 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":79,"inputBytes":1817960,"outputBytes":1457028} +2022-11-11 11:10:32 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":79,"inputBytes":1817960,"outputBytes":1914658} +2022-11-11 11:10:36 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15} +2022-11-11 11:10:38 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":76,"generated":true} +2022-11-11 11:10:38 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":5981,"outputBytes":2862} +2022-11-11 11:10:38 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17134,"outputBytes":9181} +2022-11-11 11:10:46 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":116,"errors":0,"warnings":0} +2022-11-11 11:10:46 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2022-11-11 11:10:46 STATE: Copy: {"input":"src/tfjs/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} +2022-11-11 11:10:46 INFO:  Done... +2022-11-11 11:10:46 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} +2022-11-11 11:10:46 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} +2022-11-11 11:10:46 STATE: Copy: {"input":"tfjs/types-tsconfig.json","output":"types/tsconfig.json"} +2022-11-11 11:10:46 STATE: Copy: {"input":"tfjs/types-eslint.json","output":"types/.eslintrc.json"} +2022-11-11 11:10:46 STATE: Filter: {"input":"types/tfjs-core.d.ts"} +2022-11-11 11:10:47 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":195} +2022-11-11 11:10:47 STATE: Filter: {"input":"types/human.d.ts"} +2022-11-11 11:10:47 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} +2022-11-11 11:10:47 STATE: Write: {"output":"dist/human.esm.d.ts"} +2022-11-11 11:10:47 STATE: Write: {"output":"dist/human.d.ts"} +2022-11-11 11:10:47 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} +2022-11-11 11:10:47 STATE: Write: {"output":"dist/human.node.d.ts"} +2022-11-11 11:10:47 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} +2022-11-11 11:10:47 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} +2022-11-11 11:10:47 STATE: Models {"folder":"./models","models":12} +2022-11-11 11:10:47 STATE: Models {"folder":"../human-models/models","models":43} +2022-11-11 11:10:47 STATE: Models {"folder":"../blazepose/model/","models":4} +2022-11-11 11:10:47 STATE: Models {"folder":"../anti-spoofing/model","models":1} +2022-11-11 11:10:47 STATE: Models {"folder":"../efficientpose/models","models":3} +2022-11-11 11:10:47 STATE: Models {"folder":"../insightface/models","models":5} +2022-11-11 11:10:47 STATE: Models {"folder":"../movenet/models","models":3} +2022-11-11 11:10:47 STATE: Models {"folder":"../nanodet/models","models":4} +2022-11-11 11:10:47 STATE: Models: {"count":58,"totalSize":386543911} +2022-11-11 11:10:47 INFO:  Human Build complete... {"logFile":"test/build.log"} diff --git a/tfjs/types-eslint.json b/tfjs/types-eslint.json new file mode 100644 index 00000000..0b94b496 --- /dev/null +++ b/tfjs/types-eslint.json @@ -0,0 +1,50 @@ +{ + "globals": {}, + "env": { + "browser": true, + "commonjs": true, + "node": true, + "es2022": true + }, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest" + }, + "plugins": [ + "@typescript-eslint" + ], + "extends": [ + "airbnb-base", + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "max-len": [1, 1000, 3], + "@typescript-eslint/ban-types":"off", + "@typescript-eslint/no-empty-interface":"off", + "@typescript-eslint/no-explicit-any":"off", + "@typescript-eslint/no-extraneous-class":"off", + "@typescript-eslint/no-unnecessary-type-constraint":"off", + "@typescript-eslint/no-unused-vars":"off", + "@typescript-eslint/prefer-function-type":"off", + "@typescript-eslint/unified-signatures":"off", + "camelcase":"off", + "comma-dangle":"off", + "import/extensions":"off", + "import/no-duplicates":"off", + "import/no-mutable-exports":"off", + "import/no-unresolved":"off", + "indent":"off", + "lines-between-class-members":"off", + "max-classes-per-file":"off", + "no-multiple-empty-lines":"off", + "no-shadow":"off", + "no-tabs":"off", + "no-underscore-dangle":"off", + "no-use-before-define":"off", + "object-curly-newline":"off", + "quotes":"off", + "semi":"off" + } +} diff --git a/tfjs/types-tsconfig.json b/tfjs/types-tsconfig.json new file mode 100644 index 00000000..c6b0785a --- /dev/null +++ b/tfjs/types-tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + "module": "esnext", + "target": "esnext", + "moduleResolution": "node", + "baseUrl": "./", + "lib": ["esnext", "dom"], + "allowJs": true, + "allowSyntheticDefaultImports": false, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "alwaysStrict": true, + "declaration": true, + "declarationMap": true, + "emitDecoratorMetadata": true, + "esModuleInterop": false, + "exactOptionalPropertyTypes": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": true, + "importsNotUsedAsValues": "error", + "isolatedModules": false, + "noEmitHelpers": true, + "noEmitOnError": false, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": false, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noPropertyAccessFromIndexSignature": false, + "noUncheckedIndexedAccess": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveConstEnums": true, + "pretty": true, + "removeComments": false, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strictBindCallApply": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "strictPropertyInitialization": true, + "stripInternal": false, + "useDefineForClassFields": true, + "useUnknownInCatchVariables": true + }, + "exclude": ["node_modules/", "dist/**/*.js"] +}