diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml index 1b6b7bb723..ab5c15fa2c 100644 --- a/.github/workflows/node.yml +++ b/.github/workflows/node.yml @@ -69,6 +69,22 @@ jobs: - name: test run: npm test working-directory: ./node + + - name: test hybrid node modules - commonjs + run: | + cd hybrid-node-tests + cd commonjs-test + npm install + npm run build-and-test + working-directory: ./node + + - name: test hybrid node modules - ecma + run: | + cd hybrid-node-tests + cd ecmascript-test + npm install + npm run build-and-test + working-directory: ./node - name: test redis modules run: npm run test-modules -- --load-module=$GITHUB_WORKSPACE/redisearch.so --load-module=$GITHUB_WORKSPACE/redisjson.so diff --git a/CHANGELOG.md b/CHANGELOG.md index 811ef9aef4..9101c9c73a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ #### Features * Python: Allow chaining function calls on transaction. ([#987](https://github.com/aws/glide-for-redis/pull/987)) +* Node: Adding support for GLIDE's usage in projects based on either `CommonJS` or `ECMAScript` modules. ([#1132](https://github.com/aws/glide-for-redis/pull/1132)) ## 0.2.0 (2024-02-11) diff --git a/node/DEVELOPER.md b/node/DEVELOPER.md index a6d019eea3..2fd582dbc5 100644 --- a/node/DEVELOPER.md +++ b/node/DEVELOPER.md @@ -170,3 +170,17 @@ Development on the Node wrapper may involve changes in either the TypeScript or - [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner) - in-editor test runner. - [Jest Test Explorer](https://marketplace.visualstudio.com/items?itemName=kavod-io.vscode-jest-test-adapter) - adapter to the VSCode testing UI. - [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) - Rust language support for VSCode. + +### Hybrid package publishing method + +In this project we are using hybrid method for building the package for NodeJS, in order to support GLIDE's usage in projects based on either `CommonJS` or `ECMAScript` modules. +Hybrid method - +In order to build the package for usage in either module system, we use three different tsconfig files: + +- `tsconfig-base` is the general tsconfig file, which the others will extend. +- `tsconfig-cjs` for `commonJS` build with `CommonJS` as the target of translation. +- `tsconfig` for `ECMA` build with `ECMA` as the target of translation. + +The build is composed of 2 build steps, one will use `tsconfig` and write the results of the package's translation into the `build-ts/mjs` folder, and the other will use `tsconfig-cjs` and will write into the `build-ts/cjs` folder. +Additionaly, we add to `package.json` the following export rule, which presents to the user the correct index file, based on the import statement used - `import` for `ECMA`, and `require` for `CommonJS`. +As part of the build we run the `fixup_pj_files_for_build_type` script, which adds the `type` and `types` entries to the different `package.json` that been created for `ECMAScript` and `CommonJS` with the fitting values. diff --git a/node/fixup_pj_files_for_build_type b/node/fixup_pj_files_for_build_type new file mode 100755 index 0000000000..a17a4d7d7e --- /dev/null +++ b/node/fixup_pj_files_for_build_type @@ -0,0 +1,17 @@ +#!/bin/bash +# This script add "type" and "types" entries to the different `package.json` that been created for `ECMAScript` and `CommonJS` with the fitting values. +cat >build-ts/cjs/package.json <build-ts/mjs/package.json < { + exec(`redis-cli -p ${port} FLUSHALL`, (error, _, stderr) => { + if (error) { + console.error(stderr); + reject(error); + } else { + resolve(); + } + }); + }); +} + +FreePort(PORT_NUMBER) + .then(([free_port]) => { + port = free_port; + server = new RedisServer(port); + server.open(async (err) => { + if (err) { + console.error("Error opening server:", err); + throw err; + } + + const client = AsyncClient.CreateConnection( + `redis://localhost:${port}`, + ); + await client.set("test", "test"); + let result = await client.get("test"); + + if (result !== "test") { + throw new Error("Common Test failed"); + } else { + console.log("Common Test passed"); + } + + await flushallOnPort(port).then(() => { + console.log("db flushed"); + }); + await server.close().then(() => { + console.log("server closed"); + }); + }); + }) + .catch((error) => { + console.error("Error occurred while finding a free port:", error); + }); diff --git a/node/hybrid-node-tests/commonjs-test/package.json b/node/hybrid-node-tests/commonjs-test/package.json new file mode 100644 index 0000000000..740cff0d29 --- /dev/null +++ b/node/hybrid-node-tests/commonjs-test/package.json @@ -0,0 +1,26 @@ +{ + "name": "common-test", + "version": "1.0.0", + "description": "", + "main": "Common-test.cjs", + "type": "commonjs", + "scripts": { + "build": "cd ../../../node && npm run build", + "test": "node commonjs-test.cjs", + "build-and-test": "npm run build && npm run test", + "prettier:check:ci": "./node_modules/.bin/prettier --check .", + "prettier:format": "./node_modules/.bin/prettier --write . " + }, + "author": "Amazon Web Services", + "license": "Apache-2.0", + "dependencies": { + "child_process": "^1.0.2", + "find-free-port": "^2.0.0", + "glide-for-redis": "file:../../../node/build-ts/cjs" + }, + "devDependencies": { + "@types/node": "^18.7.9", + "prettier": "^2.8.8", + "typescript": "^4.8.4" + } +} diff --git a/node/hybrid-node-tests/ecmascript-test/ecmascript-test.mjs b/node/hybrid-node-tests/ecmascript-test/ecmascript-test.mjs new file mode 100644 index 0000000000..b37b8e9eb4 --- /dev/null +++ b/node/hybrid-node-tests/ecmascript-test/ecmascript-test.mjs @@ -0,0 +1,49 @@ +import { exec } from "child_process"; +import findFreePorts from "find-free-ports"; +import { AsyncClient } from "glide-rs"; +import RedisServer from "redis-server"; + +const PORT_NUMBER = 4001; +let server; +let port; + +export function flushallOnPort(port) { + return new Promise((resolve, reject) => { + exec(`redis-cli -p ${port} FLUSHALL`, (error, _, stderr) => { + if (error) { + console.error(stderr); + reject(error); + } else { + resolve(); + } + }); + }); +} + +port = await findFreePorts(PORT_NUMBER).then(([free_port]) => free_port); +server = await new Promise((resolve, reject) => { + const server = new RedisServer(port); + server.open(async (err) => { + if (err) { + reject(err); + } + + resolve(server); + }); +}); +const client = AsyncClient.CreateConnection("redis://localhost:" + port); +await client.set("test", "test"); +let result = await client.get("test"); + +if (result !== "test") { + throw new Error("Ecma Test failed"); +} else { + console.log("Ecma Test passed"); +} + +await flushallOnPort(port).then(() => { + console.log("db flushed"); +}); +await server.close().then(() => { + console.log("server closed"); +}); diff --git a/node/hybrid-node-tests/ecmascript-test/package.json b/node/hybrid-node-tests/ecmascript-test/package.json new file mode 100644 index 0000000000..7aec63ed09 --- /dev/null +++ b/node/hybrid-node-tests/ecmascript-test/package.json @@ -0,0 +1,26 @@ +{ + "author": "Amazon Web Services", + "license": "Apache-2.0", + "name": "ecma-test", + "version": "1.0.0", + "description": "", + "main": "Ecma-test.mjs", + "type": "module", + "scripts": { + "build": "cd ../../../node && npm run build", + "test": "node ecmascript-test.mjs", + "build-and-test": "npm run build && npm run test", + "prettier:check:ci": "./node_modules/.bin/prettier --check .", + "prettier:format": "./node_modules/.bin/prettier --write . " + }, + "dependencies": { + "child_process": "^1.0.2", + "find-free-ports": "^3.1.1", + "glide-for-redis": "file:../../../node/build-ts/mjs" + }, + "devDependencies": { + "@types/node": "^18.7.9", + "prettier": "^2.8.8", + "typescript": "^4.8.4" + } +} diff --git a/node/jest.config.js b/node/jest.config.js index a5a0e5c267..61ce044501 100644 --- a/node/jest.config.js +++ b/node/jest.config.js @@ -3,6 +3,20 @@ module.exports = { transform: { "^.+\\.ts?$": "ts-jest" }, testEnvironment: "node", testRegex: "/tests/.*\\.(test|spec)?\\.(ts|tsx)$", - moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], + moduleFileExtensions: [ + "ts", + "tsx", + "js", + "jsx", + "json", + "node", + "cjs", + "mjs", + ], testTimeout: 20000, + globals: { + "ts-jest": { + tsconfig: "tsconfig-mjs.json", + }, + }, }; diff --git a/node/npm/glide/package.json b/node/npm/glide/package.json index 64bce76331..55c19901ec 100644 --- a/node/npm/glide/package.json +++ b/node/npm/glide/package.json @@ -3,14 +3,20 @@ "name": "${scope}${pkg_name}", "version": "${package_version}", "description": "An AWS-sponsored, open-source Redis client.", - "main": "build-ts/index.js", - "types": "build-ts/index.d.ts", + "main": "build-ts/cjs/index.js", + "module": "build-ts/mjs/index.js", + "exports": { + ".": { + "import": "./build-ts/mjs/index.js", + "require": "./build-ts/cjs/index.js" + } + }, "scripts": { "lint": "eslint .", "lint:fix": "eslint . --fix", "clean": "rm -rf build-ts/", - "copy-declaration-files": "cp ../../build-ts/*.d.ts build-ts/ && cp ../../build-ts/src/*.d.ts build-ts/src/", - "build": "tsc && mkdir -p build-ts/src && npm run copy-declaration-files" + "copy-declaration-files": "cp ../../build-ts/mjs/*.d.ts build-ts/mjs/ && cp ../../build-ts/cjs/*.d.ts build-ts/cjs/ && cp ../../build-ts/cjs/src/*.d.ts build-ts/cjs/src/ && cp ../../build-ts/mjs/src/*.d.ts build-ts/mjs/src/", + "build": "tsc -p tsconfig-mjs.json && tsc -p tsconfig-cjs.json && ./../../fixup_pj_files_for_build_type && mkdir -p build-ts/mjs/src && mkdir -p build-ts/cjs/src && npm run copy-declaration-files" }, "files": [ "/build-ts" diff --git a/node/npm/glide/tsconfig-cjs.json b/node/npm/glide/tsconfig-cjs.json new file mode 100644 index 0000000000..1494f7036c --- /dev/null +++ b/node/npm/glide/tsconfig-cjs.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig-cjs.json", + "compilerOptions": { + "outDir": "./build-ts/cjs" /* Specify an output folder for all emitted files. */ + } +} diff --git a/node/npm/glide/tsconfig-mjs.json b/node/npm/glide/tsconfig-mjs.json new file mode 100644 index 0000000000..0799c831b5 --- /dev/null +++ b/node/npm/glide/tsconfig-mjs.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig-mjs.json", + "compilerOptions": { + "outDir": "./build-ts/mjs" /* Specify an output folder for all emitted files. */ + } +} diff --git a/node/npm/glide/tsconfig.json b/node/npm/glide/tsconfig.json deleted file mode 100644 index db01585165..0000000000 --- a/node/npm/glide/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "es2017", - "module": "node16", - "allowJs": true, - "esModuleInterop": true, - "baseUrl": "./", - "outDir": "./build-ts", - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true - } -} diff --git a/node/package.json b/node/package.json index d3fc6932d1..5485a388ed 100644 --- a/node/package.json +++ b/node/package.json @@ -1,8 +1,14 @@ { "name": "@aws/glide-for-redis", "description": "An AWS-sponsored, open-source Redis client.", - "main": "build-ts/index.js", - "types": "build-ts/index.d.ts", + "main": "build-ts/cjs/index.js", + "module": "build-ts/mjs/index.js", + "exports": { + ".": { + "import": "./build-ts/mjs/index.js", + "require": "./build-ts/cjs/index.js" + } + }, "repository": { "type": "git", "url": "git+https://github.com/aws/glide-for-redis.git" @@ -25,8 +31,8 @@ "build-internal": "cd rust-client && npm run build", "build-internal:release": "cd rust-client && npm run build:release", "build-internal:benchmark": "cd rust-client && npm run build:benchmark", - "build-external": "rm -rf build-ts && npx tsc", - "build-external:release": "rm -rf build-ts && npx tsc --stripInternal", + "build-external": "rm -rf build-ts && tsc -p tsconfig-mjs.json && tsc -p tsconfig-cjs.json && ./fixup_pj_files_for_build_type", + "build-external:release": "rm -rf build-ts && tsc -p tsconfig-mjs.json && tsc -p tsconfig-cjs.json && ./fixup_pj_files_for_build_type --stripInternal", "build-protobuf": "npm run compile-protobuf-files && npm run fix-protobuf-file", "compile-protobuf-files": "cd src && pbjs -t static-module -o ProtobufMessage.js ../../glide-core/src/protobuf/*.proto && pbts -o ProtobufMessage.d.ts ProtobufMessage.js", "fix-protobuf-file": "replace 'this\\.encode\\(message, writer\\)\\.ldelim' 'this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim' src/ProtobufMessage.js", diff --git a/node/tsconfig-base.json b/node/tsconfig-base.json new file mode 100644 index 0000000000..22e0a85cd6 --- /dev/null +++ b/node/tsconfig-base.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "ES6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + "sourceMap": true /* Create source map files for emitted JavaScript files. */, + "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + "strict": true /* Enable all strict type-checking options. */, + "skipLibCheck": true /* Skip type checking all .d.ts files. */, + "allowJs": true /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */, + "allowSyntheticDefaultImports": true /* Allow 'import x from y' when a module doesn't have a default export. */, + "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + "inlineSourceMap": false /* Include sourcemap files inside the emitted JavaScript. */, + "listEmittedFiles": false /* List emitted files. */, + "listFiles": false /* Print names of files part of the compilation */, + "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, + "noFallthroughCasesInSwitch": true /* Enable error reporting for fallthrough cases in switch statements. */, + "pretty": true, + "resolveJsonModule": true /* Enable importing .json files. */, + "rootDir": "./" /* Specify the root folder within your source files. */, + "traceResolution": false /* true to have TypeScript print information about its resolution process for each processed file */, + "lib": [ + "esnext" + ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + }, + "compileOnSave": false, + "include": ["./*.ts", "src/*.ts", "src/*.js"], + "exclude": ["node_modules", "build-ts"] +} diff --git a/node/tsconfig-cjs.json b/node/tsconfig-cjs.json new file mode 100644 index 0000000000..6279772d60 --- /dev/null +++ b/node/tsconfig-cjs.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig-base.json", + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + "module": "commonjs" /* Specify what module code is generated. */, + /* Emit */ + "outDir": "./build-ts/cjs" /* Specify an output folder for all emitted files. */ + } +} diff --git a/node/tsconfig-mjs.json b/node/tsconfig-mjs.json new file mode 100644 index 0000000000..4e4f859ed3 --- /dev/null +++ b/node/tsconfig-mjs.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig-base.json", + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + "module": "ES2022" /* Specify what module code is generated. */, + /* Emit */ + "outDir": "./build-ts/mjs" /* Specify an output folder for all emitted files. */ + } +} diff --git a/node/tsconfig.json b/node/tsconfig.json deleted file mode 100644 index cd6c498e34..0000000000 --- a/node/tsconfig.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "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": "es2016" /* 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. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* 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. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "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": "./build-ts" /* 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": 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, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when 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, /* Add 'undefined' to a type when accessed using an index. */ - // "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": ["./*.ts", "src/*.ts", "src/*.js"], - "exclude": ["node_modules", "build-ts"] -}