diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..fb92325 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,17 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major version +last 2 iOS major versions +Firefox ESR +not IE 9-11 # For IE 9-11 support, remove 'not'. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..cc48aad --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,67 @@ +name: Ci + +on: push + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@master + + - name: install + run: npm install + + - name: run + run: | + npm run build + + test: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@master + + - name: install + run: npm install + + - name: run + run: | + npm run test + cat ./coverage/lcov.info | ./node_modules/.bin/codecov + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + lint: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@master + + - name: install + run: npm install + + - name: run + run: | + npm run lint + + site: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@master + + - name: install + run: npm install + + - name: build + run: | + node --max_old_space_size=5120 ./node_modules/@angular/cli/bin/ng build --prod --base-href /ng-github-button/ + cp ./dist/index.html ./dist/404.html + ls ./dist + + - name: deploy-to-gh-pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./dist diff --git a/.stylelintrc b/.stylelintrc deleted file mode 100644 index f4aafa3..0000000 --- a/.stylelintrc +++ /dev/null @@ -1,34 +0,0 @@ -{ - "extends": { - "stylelint-config-standard", - "./node_modules/prettier-stylelint/config.js" - }, - "rules": { - "comment-empty-line-before": null, - "declaration-empty-line-before": null, - "function-comma-newline-after": null, - "function-name-case": null, - "function-parentheses-newline-inside": null, - "function-max-empty-lines": null, - "function-whitespace-after": null, - "indentation": null, - "number-leading-zero": null, - "number-no-trailing-zeros": null, - "rule-empty-line-before": null, - "selector-combinator-space-after": null, - "selector-list-comma-newline-after": null, - "selector-pseudo-element-colon-notation": null, - "unit-no-unknown": null, - "value-list-max-empty-lines": null, - "selector-type-no-unknown": null, - "selector-pseudo-element-no-unknown": [ - true, - { - "ignorePseudoElements": [ - "ng-deep" - ] - } - ], - "no-descending-specificity": null - } -} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a44417c..0000000 --- a/.travis.yml +++ /dev/null @@ -1,32 +0,0 @@ -sudo: required -dist: trusty -language: node_js - -git: - depth: 1 - -cache: - yarn: true - directories: - - ./node_modules - -addons: - chrome: stable - -before_install: - - export CHROME_BIN=chromium-browser - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - -env: - - TASK=test - - TASK=lint - - TASK=build - - TASK=site:build - -script: - - npm run $TASK - - | - if [ "$TASK" = "test" ]; then - cat ./coverage/lcov.info | ./node_modules/.bin/codecov - fi diff --git a/README.md b/README.md index df5a929..eeb8b2b 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Unofficial GitHub buttons in Angular. [![NPM version](https://img.shields.io/npm/v/ng-github-button.svg)](https://www.npmjs.com/package/ng-github-button) -[![Build Status](https://travis-ci.org/cipchk/ng-github-button.svg?branch=master)](https://travis-ci.org/cipchk/ng-github-button) +![Ci](https://github.com/cipchk/ng-github-button/workflows/Ci/badge.svg) ## Demo diff --git a/karma.conf.js b/karma.conf.js index dc6b2c6..efa608c 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -10,15 +10,19 @@ module.exports = function (config) { require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage-istanbul-reporter'), - require('@angular-devkit/build-angular/plugins/karma') + require('@angular-devkit/build-angular/plugins/karma'), ], client: { - clearContext: false // leave Jasmine Spec Runner output visible in browser + jasmine: { + random: false, + }, + clearContext: false, // leave Jasmine Spec Runner output visible in browser }, coverageIstanbulReporter: { dir: require('path').join(__dirname, '../coverage'), - dir: require('path').join(__dirname, 'coverage'), reports: ['html', 'lcovonly'], - fixWebpackSourcePaths: true + dir: require('path').join(__dirname, 'coverage'), + reports: ['html', 'lcovonly'], + fixWebpackSourcePaths: true, }, reporters: ['progress', 'kjhtml'], port: 9876, @@ -26,6 +30,12 @@ module.exports = function (config) { logLevel: config.LOG_INFO, autoWatch: true, browsers: ['Chrome'], - singleRun: false + customLaunchers: { + ChromeHeadlessCI: { + base: 'ChromeHeadless', + flags: ['--no-sandbox'], + }, + }, + singleRun: false, }); }; diff --git a/lib/ng-package.json b/lib/ng-package.json new file mode 100644 index 0000000..1cebca7 --- /dev/null +++ b/lib/ng-package.json @@ -0,0 +1,9 @@ +{ + "$schema": "../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../publish", + "deleteDestPath": true, + "lib": { + "entryFile": "index.ts" + }, + "whitelistedNonPeerDependencies": ["tslib", "angular"] +} diff --git a/lib/package.json b/lib/package.json new file mode 100644 index 0000000..2f58dcb --- /dev/null +++ b/lib/package.json @@ -0,0 +1,26 @@ +{ + "name": "ng-github-button", + "version": "10.0.0", + "description": "Unofficial GitHub buttons in Angular.", + "author": "cipchk ", + "license": "MIT", + "bugs": { + "url": "https://github.com/cipchk/ng-github-button/issues" + }, + "homepage": "https://cipchk.github.io/ng-github-button/", + "keywords": [ + "angular", + "github", + "button", + "ng-github-button", + "ng2-github-button", + "angular-github-button", + "angular2-github-button", + "github-button", + "github button" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/cipchk/ng-github-button.git" + } +} diff --git a/lib/spec/component.spec.ts b/lib/spec/component.spec.ts index 10e3f70..9c45ecc 100644 --- a/lib/spec/component.spec.ts +++ b/lib/spec/component.spec.ts @@ -1,5 +1,5 @@ import { Component, ViewChild, DebugElement } from '@angular/core'; -import { ComponentFixture, TestBed, tick, fakeAsync } from '@angular/core/testing'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { GithubButtonModule } from '../src/module'; @@ -11,24 +11,24 @@ describe('github-button', () => { let dl: DebugElement; const win = window as any; const oldXMLHttpRequest = win.XMLHttpRequest; - function genXhr(status: number, text: any) { + function genXhr(status: number, text: any): void { spyOn(win, 'XMLHttpRequest').and.callFake(() => { return { responseText: JSON.stringify(text), readyState: XMLHttpRequest.DONE, status, - open() {}, - send() { + open(): void {}, + send(): void { this.onreadystatechange(); }, - abort() {}, + abort(): void {}, }; }); } function getCountEl(): HTMLElement { return dl.query(By.css('.gh-count')).nativeElement as HTMLElement; } - function getCount() { + function getCount(): number { const value = getCountEl().textContent.trim(); return +value; } diff --git a/lib/src/component.ts b/lib/src/component.ts index 9f62c9d..2260ed5 100644 --- a/lib/src/component.ts +++ b/lib/src/component.ts @@ -62,14 +62,14 @@ export class GithubButtonComponent implements OnChanges, OnInit, OnDestroy { // endregion - get repo_url() { + get repo_url(): string { return `//github.com/${this.namespace}/${this.repo}/`; } - get count_url() { - return `//github.com/${this.namespace}/${this.repo}/${this.typeToPath[ - this.type - ] || this.type}/`; + get count_url(): string { + return `//github.com/${this.namespace}/${this.repo}/${ + this.typeToPath[this.type] || this.type + }/`; } constructor( @@ -77,13 +77,13 @@ export class GithubButtonComponent implements OnChanges, OnInit, OnDestroy { private cdr: ChangeDetectorRef, ) {} - private setCount(data: any) { + private setCount(data: any): void { this.count = data ? data[`${this.type}_count`] : 0; this.cdr.detectChanges(); } ngOnInit(): void { - this.notify$ = this.srv.notify.subscribe(res => this.setCount(res)); + this.notify$ = this.srv.notify.subscribe((res) => this.setCount(res)); } ngOnChanges(): void { diff --git a/lib/src/service.ts b/lib/src/service.ts index b5e7b6b..f496898 100644 --- a/lib/src/service.ts +++ b/lib/src/service.ts @@ -1,12 +1,12 @@ import { Injectable } from '@angular/core'; -import { BehaviorSubject } from 'rxjs'; +import { BehaviorSubject, Observable } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class GithubButtonService { private cached: { [url: string]: any } = {}; private _notify = new BehaviorSubject<{ [url: string]: any }>(null); - get notify() { + get notify(): Observable<{ [url: string]: any }> { return this._notify.asObservable(); } diff --git a/lib/test.ts b/lib/test.ts index 1631789..b6d614d 100644 --- a/lib/test.ts +++ b/lib/test.ts @@ -4,7 +4,7 @@ import 'zone.js/dist/zone-testing'; import { getTestBed } from '@angular/core/testing'; import { BrowserDynamicTestingModule, - platformBrowserDynamicTesting + platformBrowserDynamicTesting, } from '@angular/platform-browser-dynamic/testing'; declare const require: any; @@ -12,7 +12,7 @@ declare const require: any; // First, initialize the Angular testing environment. getTestBed().initTestEnvironment( BrowserDynamicTestingModule, - platformBrowserDynamicTesting() + platformBrowserDynamicTesting(), ); // Then we find all the tests. const context = require.context('./', true, /\.spec\.ts$/); diff --git a/lib/tsconfig.lib.json b/lib/tsconfig.lib.json index 009f21a..0eb4513 100644 --- a/lib/tsconfig.lib.json +++ b/lib/tsconfig.lib.json @@ -1,8 +1,6 @@ { - "extends": "../tsconfig.json", + "extends": "../tsconfig.base.json", "compilerOptions": { - "target": "es2015", - "lib": ["es2018", "dom"], "alwaysStrict": true, "sourceMap": true, "inlineSources": true, @@ -11,9 +9,8 @@ "strictFunctionTypes": true, "stripInternal": true }, - "files": [ - "./index.ts" - ], + "files": ["./src/module.ts"], + "include": ["**/*.ts"], "angularCompilerOptions": { "enableIvy": false } diff --git a/package.json b/package.json index 411afdf..c710dfd 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,7 @@ { "name": "ng-github-button", - "version": "9.0.0", + "version": "10.0.0", "description": "Unofficial GitHub buttons in Angular.", - "repository": { - "type": "git", - "url": "git+https://github.com/cipchk/ng-github-button.git" - }, "keywords": [ "angular", "github", @@ -17,61 +13,60 @@ "github-button", "github button" ], - "author": "cipchk ", + "author": "cipchk ", "license": "MIT", "bugs": { "url": "https://github.com/cipchk/ng-github-button/issues" }, - "homepage": "https://github.com/cipchk/ng-github-button#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/cipchk/ng-github-button.git" + }, + "homepage": "https://cipchk.github.io/ng-github-button/", "scripts": { - "analyze": "ng build --prod --build-optimizer --stats-json", - "lint": "tslint -p tsconfig.json -c tslint.json 'lib/*/*.ts'", - "test": "ng test --code-coverage --watch=false", - "site:build": "ng build --prod --build-optimizer", - "site:gh": "ng build --prod --build-optimizer --base-href /ng-github-button/ && gh-pages -d ./dist", + "analyze": "ng build --prod --stats-json", + "lint": "tslint -p tsconfig.app.json -c tslint.json 'lib/*/*.ts'", + "test": "ng test --no-progress --browsers=ChromeHeadlessCI --code-coverage --no-watch", "build": "node scripts/build.js", "release:next": "npm run build && cd publish && npm publish --access public --tag next", "release": "npm run build && cd publish && npm publish --access public" }, + "dependencies": { + "@angular/animations": "~10.0.0", + "@angular/common": "~10.0.0", + "@angular/compiler": "~10.0.0", + "@angular/core": "~10.0.0", + "@angular/forms": "~10.0.0", + "@angular/platform-browser": "~10.0.0", + "@angular/platform-browser-dynamic": "~10.0.0", + "@angular/router": "~10.0.0", + "rxjs": "~6.5.5", + "tslib": "^2.0.0", + "zone.js": "~0.10.3" + }, "devDependencies": { - "@angular/animations": "~9.0.7", - "@angular/common": "~9.0.7", - "@angular/compiler": "~9.0.7", - "@angular/core": "~9.0.7", - "@angular/forms": "~9.0.7", - "@angular/platform-browser": "~9.0.7", - "@angular/platform-browser-dynamic": "~9.0.7", - "@angular/router": "~9.0.7", - "rxjs": "~6.5.4", - "tslib": "^1.10.0", - "zone.js": "~0.10.2", - "@angular-devkit/build-angular": "~0.900.7", - "@angular/cli": "~9.0.7", - "@angular/compiler-cli": "~9.0.7", - "@angular/language-service": "~9.0.7", + "@angular-devkit/build-angular": "~0.1000.0", + "@angular/cli": "~10.0.0", + "@angular/compiler-cli": "~10.0.0", "@types/node": "^12.11.1", "@types/jasmine": "~3.5.0", "@types/jasminewd2": "~2.0.3", - "codelyzer": "^5.1.2", + "codelyzer": "^6.0.0-next.1", "jasmine-core": "~3.5.0", - "jasmine-spec-reporter": "~4.2.1", - "karma": "~4.3.0", + "jasmine-spec-reporter": "~5.0.0", + "karma": "~5.0.0", "karma-chrome-launcher": "~3.1.0", - "karma-coverage-istanbul-reporter": "~2.1.0", - "karma-jasmine": "~2.0.1", - "karma-jasmine-html-reporter": "^1.4.2", - "protractor": "~5.4.3", + "karma-coverage-istanbul-reporter": "~3.0.2", + "karma-jasmine": "~3.3.0", + "karma-jasmine-html-reporter": "^1.5.0", + "protractor": "~7.0.0", "ts-node": "~8.3.0", - "tslint": "~5.18.0", - "typescript": "~3.7.5", - "codecov": "^3.6.5", - "ng-packagr": "^9.0.3", - "ngx-highlight-js": "^9.0.0" - }, - "ngPackage": { - "lib": { - "entryFile": "lib/index.ts" - }, - "dest": "./publish" + "tslint": "~6.1.0", + "typescript": "~3.9.5", + "tslint-config-prettier": "^1.18.0", + "prettier": "^2.0.5", + "codecov": "^3.5.0", + "ng-packagr": "^10.0.0", + "ngx-highlight-js": "^10.0.3" } } diff --git a/scripts/build.js b/scripts/build.js index c7de051..c2cd503 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,14 +1,38 @@ const path = require('path'); +const fs = require('fs-extra'); const ngPackage = require('ng-packagr'); const root = path.resolve(__dirname, `..`); +const libPackagePath = path.resolve(root, `./lib/package.json`); + +// Update version +const rootPackageJson = require(path.resolve(root, `./package.json`)); +const libPackageJson = require(libPackagePath); +[ + 'name', + 'version', + 'description', + 'keywords', + 'author', + 'license', + 'repository', + 'bugs', + 'homepage', +].forEach((key) => (libPackageJson[key] = rootPackageJson[key])); +fs.writeJsonSync(libPackagePath, libPackageJson, { spaces: 2 }); ngPackage .ngPackagr() - .forProject(path.resolve(root, `./package.json`)) + .forProject(path.resolve(root, `./lib/ng-package.json`)) .withTsConfig(path.resolve(root, './lib/tsconfig.lib.json')) .build() - .catch(error => { + .then(() => + fs.copyFileSync( + path.resolve(root, `./README.md`), + path.resolve(root, `./publish/README.md`), + ), + ) + .catch((error) => { console.error(error); process.exit(1); }); diff --git a/tsconfig.app.json b/tsconfig.app.json index f758d98..232c3a5 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -1,5 +1,6 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ { - "extends": "./tsconfig.json", + "extends": "./tsconfig.base.json", "compilerOptions": { "outDir": "./out-tsc/app", "types": [] diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..13133ea --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,23 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "module": "es2020", + "lib": ["es2018", "dom"], + "paths": { + "ng-github-button": ["lib/index"] + } + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true + } +} diff --git a/tsconfig.json b/tsconfig.json index 5a64b7f..8f1a8f4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,26 +1,17 @@ +/* + This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScript’s language server to improve development experience. + It is not intended to be used to perform a compilation. + + To learn more about this file see: https://angular.io/config/solution-tsconfig. +*/ { - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "module": "esnext", - "moduleResolution": "node", - "importHelpers": true, - "target": "es2015", - "lib": [ - "es2018", - "dom" - ], - "paths": { - "ng-github-button": ["lib/index"] + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" } - }, - "angularCompilerOptions": { - "fullTemplateTypeCheck": true, - "strictInjectionParameters": true - } + ] } diff --git a/tsconfig.spec.json b/tsconfig.spec.json index 393f194..bd8c5e6 100644 --- a/tsconfig.spec.json +++ b/tsconfig.spec.json @@ -1,5 +1,6 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ { - "extends": "./tsconfig.json", + "extends": "./tsconfig.base.json", "compilerOptions": { "outDir": "./out-tsc/spec", "types": [ diff --git a/tslint.json b/tslint.json index 0255a3d..1d7e1cb 100644 --- a/tslint.json +++ b/tslint.json @@ -1,91 +1,107 @@ { - "rulesDirectory": ["node_modules/codelyzer"], + "extends": ["tslint:latest", "tslint-config-prettier"], + "rulesDirectory": ["codelyzer"], "rules": { - "callable-types": true, - "class-name": true, - "comment-format": [true, "check-space"], - "curly": false, - "eofline": true, - "forin": true, - "import-blacklist": [true], + "align": { + "options": ["parameters", "statements"] + }, + "array-type": false, + "arrow-return-shorthand": true, + "curly": true, + "deprecation": { + "severity": "warning" + }, + "component-class-suffix": [true, "Component", "Widget"], + "contextual-lifecycle": true, + "directive-class-suffix": true, + "directive-selector": [false, "attribute", "app", "camelCase"], + "component-selector": [false, "element", "app", "kebab-case"], + "import-blacklist": [true, "rxjs/Rx"], "import-spacing": true, - "indent": [true, "spaces"], - "interface-over-type-literal": true, - "label-position": true, + "indent": { + "options": ["spaces"] + }, + "max-classes-per-file": false, "max-line-length": [false, 140], - "member-access": false, - "member-ordering": [false], - "no-arg": true, - "no-bitwise": true, - "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], - "no-construct": true, - "no-debugger": true, - "no-duplicate-variable": true, - "no-empty": false, - "no-empty-interface": true, - "no-eval": true, - "no-inferrable-types": [true, "ignore-params"], - "no-shadowed-variable": true, - "no-string-literal": false, - "no-string-throw": true, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unused-expression": true, - "no-use-before-declare": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [ - false, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" - ], - "prefer-const": true, - "quotemark": [true, "single"], - "radix": true, - "semicolon": [true, "always"], - "triple-equals": [true, "allow-null-check"], - "typedef-whitespace": [ + "member-ordering": [ true, { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] } ], - "typeof-compare": true, - "unified-signatures": true, + "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], + "no-empty": false, + "no-inferrable-types": [false, "ignore-params"], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-var-requires": false, + "object-literal-key-quotes": [false, "as-needed"], + "quotemark": [false, "single"], + "semicolon": { + "options": ["always"] + }, + "space-before-function-paren": { + "options": { + "anonymous": "never", + "asyncArrow": "always", + "constructor": "never", + "method": "never", + "named": "never" + } + }, + "typedef": [true, "call-signature"], + "typedef-whitespace": { + "options": [ + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ] + }, "variable-name": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ], - - "directive-selector": [false, "attribute", "app", "camelCase"], - "component-selector": [false, "element", "app", "kebab-case"], - "use-input-property-decorator": true, - "use-output-property-decorator": true, - "use-host-property-decorator": false, + "whitespace": { + "options": [ + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type", + "check-typecast" + ] + }, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": false, "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, "no-output-rename": true, - "use-life-cycle-interface": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, "use-pipe-transform-interface": true, - "component-class-suffix": true, - "directive-class-suffix": true, - "no-access-missing-member": true, - "templates-use-public": true, - "invoke-injectable": true - }, - "linterOptions": { - "exclude": [ - "lib/**/*.spec.ts" - ] + "no-submodule-imports": false, + "no-implicit-dependencies": false, + "no-object-literal-type-assertion": false, + "no-bitwise": false, + "no-this-assignment": false, + "prefer-conditional-expression": false } }