diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8b576a0..0dfb491 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,6 +26,7 @@ mirror: snyk: stage: security script: + - npmci npm prepare - npmci command npm install -g snyk - npmci command npm install --ignore-scripts - npmci command snyk test @@ -33,24 +34,39 @@ snyk: - docker - notpriv +sast: + stage: security + image: registry.gitlab.com/hosttoday/ht-docker-dbase:npmci + variables: + DOCKER_DRIVER: overlay2 + allow_failure: true + services: + - docker:stable-dind + script: + - npmci npm prepare + - npmci npm install + - npmci command npm run build + - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') + - docker run + --env SAST_CONFIDENCE_LEVEL="${SAST_CONFIDENCE_LEVEL:-3}" + --volume "$PWD:/code" + --volume /var/run/docker.sock:/var/run/docker.sock + "registry.gitlab.com/gitlab-org/security-products/sast:$SP_VERSION" /app/bin/run /code + artifacts: + reports: + sast: gl-sast-report.json + tags: + - docker + - priv + # ==================== # test stage # ==================== -testLEGACY: - stage: test - script: - - npmci node install legacy - - npmci npm install - - npmci npm test - coverage: /\d+.?\d+?\%\s*coverage/ - tags: - - docker - - notpriv - allow_failure: true testLTS: stage: test script: + - npmci npm prepare - npmci node install lts - npmci npm install - npmci npm test @@ -62,6 +78,7 @@ testLTS: testSTABLE: stage: test script: + - npmci npm prepare - npmci node install stable - npmci npm install - npmci npm test @@ -117,8 +134,10 @@ pages: image: hosttoday/ht-docker-node:npmci stage: metadata script: - - npmci command npm install -g npmpage - - npmci command npmpage + - npmci command npm install -g typedoc typescript + - npmci npm prepare + - npmci npm install + - npmci command typedoc --module "commonjs" --target "ES2016" --out public/ ts/ tags: - docker - notpriv @@ -129,13 +148,3 @@ pages: paths: - public allow_failure: true - -windowsCompatibility: - image: stefanscherer/node-windows:10-build-tools - stage: metadata - script: - - npm install & npm test - coverage: /\d+.?\d+?\%\s*coverage/ - tags: - - windows - allow_failure: true diff --git a/README.md b/README.md index 6d43cad..ec2de1c 100644 --- a/README.md +++ b/README.md @@ -37,11 +37,11 @@ This is why we started smartdata. How RethinkDB's terms map to the ones of smartdata: -| MongoDb term | smartdata class | -| -------------- | ------------------------------| -| Database | smartdata.SmartdataDb | -| Collection | smartdata.SmartdataCollection | -| Document | smartdata.SmartadataDoc | +| MongoDb term | smartdata class | +| ------------ | ----------------------------- | +| Database | smartdata.SmartdataDb | +| Collection | smartdata.SmartdataCollection | +| Document | smartdata.SmartadataDoc | ### class Db diff --git a/npmextra.json b/npmextra.json index 746d87a..71d1e6c 100644 --- a/npmextra.json +++ b/npmextra.json @@ -5,14 +5,8 @@ "dockerSock": false }, "npmci": { - "npmGlobalTools": [ - "@gitzone/npmts" - ], - "npmAccessLevel": "public" - }, - "npmts": { - "testConfig": { - "parallel": false - } + "npmGlobalTools": [], + "npmAccessLevel": "public", + "npmRegistryUrl": "registry.npmjs.org" } } diff --git a/package-lock.json b/package-lock.json index e79a38f..bd4b1dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,6 +49,22 @@ "typescript": "^3.0.1" } }, + "@gitzone/tstest": { + "version": "1.0.18", + "resolved": "https://verdaccio.lossless.one/@gitzone%2ftstest/-/tstest-1.0.18.tgz", + "integrity": "sha512-/owFKFsiFWh6miL+G/DYxBr+B6mgy9WzthLTqNyC7xriYoymvBgnmm5Wo3bo1NQN+1GY83zKeSpY7JB4r2LuEQ==", + "dev": true, + "requires": { + "@gitzone/tsrun": "^1.1.17", + "@pushrocks/consolecolor": "^2.0.1", + "@pushrocks/smartfile": "^6.0.11", + "@pushrocks/smartlog": "^2.0.9", + "@pushrocks/smartpromise": "^2.0.5", + "@pushrocks/smartshell": "^2.0.11", + "@types/figures": "^2.0.0", + "figures": "^2.0.0" + } + }, "@pushrocks/consolecolor": { "version": "2.0.1", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fconsolecolor/-/consolecolor-2.0.1.tgz", @@ -197,6 +213,17 @@ "rxjs": "^6.3.3" } }, + "@pushrocks/smartshell": { + "version": "2.0.13", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartshell/-/smartshell-2.0.13.tgz", + "integrity": "sha512-jLfAhLxMVKAScKdln1QrQqBI7A7INhMNHIq28fJEBi0BNDUS0eerw4yMAnR4CRmcrh4xFp1z+ju1kaPO3I/4MA==", + "dev": true, + "requires": { + "@pushrocks/smartpromise": "^2.0.5", + "@types/which": "^1.3.1", + "which": "^1.3.1" + } + }, "@pushrocks/smartstring": { "version": "3.0.5", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartstring/-/smartstring-3.0.5.tgz", @@ -291,6 +318,12 @@ "@types/chai": "*" } }, + "@types/figures": { + "version": "2.0.0", + "resolved": "https://verdaccio.lossless.one/@types%2ffigures/-/figures-2.0.0.tgz", + "integrity": "sha512-mcRgJ+ncKuNI+Dwac7omO18B8C8u+YBS+AU/oyLhEyjAnT3cUUThhHgZpbiIvu5ZqSvdD30BXtrqg9nxc3OKMg==", + "dev": true + }, "@types/form-data": { "version": "2.2.1", "resolved": "https://verdaccio.lossless.one/@types%2fform-data/-/form-data-2.2.1.tgz", @@ -353,6 +386,12 @@ "@types/node": "*" } }, + "@types/which": { + "version": "1.3.1", + "resolved": "https://verdaccio.lossless.one/@types%2fwhich/-/which-1.3.1.tgz", + "integrity": "sha512-ZrJDWpvg75LTGX4XwuneY9s6bF3OeZcGTpoGh3zDV9ytzcHMFsRrMIaLBRJZQMBoGyKs6unBQfVdrLZiYfb1zQ==", + "dev": true + }, "@types/yargs": { "version": "12.0.5", "resolved": "https://verdaccio.lossless.one/@types%2fyargs/-/yargs-12.0.5.tgz", @@ -380,6 +419,12 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://verdaccio.lossless.one/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -416,6 +461,47 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://verdaccio.lossless.one/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://verdaccio.lossless.one/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://verdaccio.lossless.one/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://verdaccio.lossless.one/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -502,6 +588,12 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://verdaccio.lossless.one/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, "camelcase": { "version": "5.0.0", "resolved": "https://verdaccio.lossless.one/camelcase/-/camelcase-5.0.0.tgz", @@ -537,6 +629,37 @@ "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==", "dev": true }, + "chalk": { + "version": "2.4.2", + "resolved": "https://verdaccio.lossless.one/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://verdaccio.lossless.one/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://verdaccio.lossless.one/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -589,6 +712,21 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://verdaccio.lossless.one/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://verdaccio.lossless.one/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "combined-stream": { "version": "1.0.7", "resolved": "https://verdaccio.lossless.one/combined-stream/-/combined-stream-1.0.7.tgz", @@ -803,12 +941,24 @@ "es6-promise": "^4.0.3" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://verdaccio.lossless.one/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "esprima": { "version": "4.0.1", "resolved": "https://verdaccio.lossless.one/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "esutils": { + "version": "2.0.2", + "resolved": "https://verdaccio.lossless.one/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, "execa": { "version": "1.0.0", "resolved": "https://verdaccio.lossless.one/execa/-/execa-1.0.0.tgz", @@ -833,6 +983,15 @@ "pend": "~1.2.0" } }, + "figures": { + "version": "2.0.0", + "resolved": "https://verdaccio.lossless.one/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "file-type": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", @@ -964,6 +1123,29 @@ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://verdaccio.lossless.one/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://verdaccio.lossless.one/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://verdaccio.lossless.one/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "https-proxy-agent": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", @@ -1055,6 +1237,12 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://verdaccio.lossless.one/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, "js-yaml": { "version": "3.12.1", "resolved": "https://verdaccio.lossless.one/js-yaml/-/js-yaml-3.12.1.tgz", @@ -1420,6 +1608,12 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://verdaccio.lossless.one/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, "pathval": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", @@ -1543,6 +1737,15 @@ "semver": "^5.1.0" } }, + "resolve": { + "version": "1.9.0", + "resolved": "https://verdaccio.lossless.one/resolve/-/resolve-1.9.0.tgz", + "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, "resolve-from": { "version": "2.0.0", "resolved": "https://verdaccio.lossless.one/resolve-from/-/resolve-from-2.0.0.tgz", @@ -1749,6 +1952,12 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://verdaccio.lossless.one/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, "symbol-tree": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", @@ -1811,6 +2020,49 @@ "resolved": "https://verdaccio.lossless.one/tslib/-/tslib-1.9.3.tgz", "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, + "tslint": { + "version": "5.12.0", + "resolved": "https://verdaccio.lossless.one/tslint/-/tslint-5.12.0.tgz", + "integrity": "sha512-CKEcH1MHUBhoV43SA/Jmy1l24HJJgI0eyLbBNSRyFlsQvb9v6Zdq+Nz2vEOH00nC5SUx4SneJ59PZUS/ARcokQ==", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.27.2" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://verdaccio.lossless.one/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + } + } + }, + "tslint-config-prettier": { + "version": "1.17.0", + "resolved": "https://verdaccio.lossless.one/tslint-config-prettier/-/tslint-config-prettier-1.17.0.tgz", + "integrity": "sha512-NKWNkThwqE4Snn4Cm6SZB7lV5RMDDFsBwz6fWUkTxOKGjMx8ycOHnjIbhn7dZd5XmssW3CwqUjlANR6EhP9YQw==", + "dev": true + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://verdaccio.lossless.one/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", diff --git a/package.json b/package.json index ffd90aa..414b8ab 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "scripts": { - "test": "tsrun test/test.ts", + "test": "(tstest test/)", "testLocal": "(npmdocker)", - "build": "(npmts)" + "build": "(tsbuild)" }, "repository": { "type": "git", @@ -32,12 +32,15 @@ "runtime-type-checks": "0.0.4" }, "devDependencies": { - "@gitzone/tsrun": "^1.1.17", + "@gitzone/tsbuild": "^2.1.4", + "@gitzone/tstest": "^1.0.18", "@pushrocks/qenv": "^3.0.2", "@pushrocks/tapbundle": "^3.0.7", "@types/node": "^10.12.18", "@types/shortid": "0.0.29", "mongodb-memory-server": "^2.9.1", - "shortid": "^2.2.14" + "shortid": "^2.2.14", + "tslint": "^5.12.0", + "tslint-config-prettier": "^1.17.0" } } diff --git a/test/test.ts b/test/test.ts index f38dea8..2cc7dae 100644 --- a/test/test.ts +++ b/test/test.ts @@ -62,4 +62,4 @@ tap.test('should close the database connection', async tools => { await testDb.close(); }); -tap.start({throwOnError: true}); +tap.start({ throwOnError: true }); diff --git a/ts/smartdata.classes.collection.ts b/ts/smartdata.classes.collection.ts index 4b9f9e5..ba6660c 100644 --- a/ts/smartdata.classes.collection.ts +++ b/ts/smartdata.classes.collection.ts @@ -56,7 +56,7 @@ export class SmartdataCollection { await this.smartdataDb.mongoDb.createCollection(this.collectionName); } this.mongoDbCollection = await this.smartdataDb.mongoDb.collection(this.collectionName); - console.log(`Successfully initiated Collection ${this.collectionName}`) + console.log(`Successfully initiated Collection ${this.collectionName}`); } } @@ -64,8 +64,8 @@ export class SmartdataCollection { * mark unique index */ markUniqueIndexes(keyArrayArg: string[] = []) { - for(let key of keyArrayArg) { - if(!this.uniqueIndexes.includes(key)) { + for (let key of keyArrayArg) { + if (!this.uniqueIndexes.includes(key)) { this.mongoDbCollection.createIndex(key, { unique: true }); diff --git a/ts/smartdata.classes.db.ts b/ts/smartdata.classes.db.ts index 32e6bdb..1af1165 100644 --- a/ts/smartdata.classes.db.ts +++ b/ts/smartdata.classes.db.ts @@ -70,9 +70,10 @@ export class SmartdataDb { async close(): Promise { await this.mongoDbClient.close(); this.status = 'disconnected'; - plugins.smartlog - .defaultLogger - .log('info', `disconnected from database ${this.smartdataOptions.mongoDbName}`); + plugins.smartlog.defaultLogger.log( + 'info', + `disconnected from database ${this.smartdataOptions.mongoDbName}` + ); } // handle table to class distribution diff --git a/ts/smartdata.classes.doc.ts b/ts/smartdata.classes.doc.ts index 599d041..93ef3ab 100644 --- a/ts/smartdata.classes.doc.ts +++ b/ts/smartdata.classes.doc.ts @@ -39,7 +39,7 @@ export function unI() { } target.saveableProperties.push(key); }; -} +} export class SmartDataDbDoc { /** diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..d4ea2e9 --- /dev/null +++ b/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": ["tslint:latest", "tslint-config-prettier"], + "rules": { + "semicolon": [true, "always"], + "no-console": false, + "ordered-imports": false, + "object-literal-sort-keys": false, + "member-ordering": { + "options":{ + "order": [ + "static-method" + ] + } + } + }, + "defaultSeverity": "warning" +}