This is an automated email from the ASF dual-hosted git repository. chanholee pushed a commit to branch branch-0.12 in repository https://gitbox.apache.org/repos/asf/zeppelin.git
The following commit(s) were added to refs/heads/branch-0.12 by this push: new dfff680649 [ZEPPELIN-6305] Modify package.json so that lint and prettier cover projects folder dfff680649 is described below commit dfff68064950a0e50d371b0cf6a6d1430c8b9872 Author: YONGJAE LEE(이용재) <dev.yongjae...@gmail.com> AuthorDate: Sat Sep 6 16:53:19 2025 +0900 [ZEPPELIN-6305] Modify package.json so that lint and prettier cover projects folder ### What is this PR for? > This PR for **zeppeling-web-angular** In `npm run lint`, `projects folder` is linted using ng, but `prettier` only checks the `src folder`. In `lint-staged`, neither lint nor `prettier` checks the `projects folder`. This seems to need fixing. Because `ng lint --fix` is not supported, I added a `lint:fix` script to run `tslint` with the `--fix` option. Since src and projects folders need to reference different tslint configs, I added the corresponding option to `lint-staged`. ### What type of PR is it? Bug Fix Improvement ### Todos ### What is the Jira issue? * [[ZEPPELIN-6305](https://issues.apache.org/jira/browse/ZEPPELIN-6305)] ### How should this be tested? ### Screenshots (if appropriate) ### Questions: * Does the license files need to update? N * Is there breaking changes for older versions? N * Does this needs documentation? N Closes #5054 from dididy/fix/ZEPPELIN-6305. Signed-off-by: ChanHo Lee <chanho...@apache.org> (cherry picked from commit 7110bed788b51bfcd5e891f44dcc77335f0599bd) Signed-off-by: ChanHo Lee <chanho...@apache.org> --- zeppelin-web-angular/.prettierignore | 6 +++ zeppelin-web-angular/angular.json | 56 +++++----------------- zeppelin-web-angular/e2e/protractor.conf.js | 8 ++-- zeppelin-web-angular/e2e/src/app.e2e-spec.ts | 13 +++-- zeppelin-web-angular/e2e/tsconfig.json | 6 +-- zeppelin-web-angular/karma.conf.js | 2 +- zeppelin-web-angular/package.json | 10 ++-- .../projects/helium-vis-example/karma.conf.js | 2 +- .../projects/helium-vis-example/ng-package.json | 2 +- .../projects/helium-vis-example/package.json | 2 +- .../helium-vis-example/src/json-vis.module.ts | 2 +- .../helium-vis-example/src/json-visualization.ts | 3 +- .../projects/helium-vis-example/src/test.ts | 10 +--- .../projects/helium-vis-example/tsconfig.lib.json | 10 +--- .../projects/helium-vis-example/tsconfig.spec.json | 14 ++---- .../projects/helium-vis-example/tslint.json | 14 +----- .../projects/zeppelin-helium/karma.conf.js | 2 +- .../projects/zeppelin-helium/ng-package.json | 2 +- .../projects/zeppelin-helium/package.json | 2 +- .../projects/zeppelin-helium/src/common-deps.ts | 2 +- .../projects/zeppelin-helium/src/test.ts | 10 +--- .../zeppelin-helium/src/zeppelin-helium.module.ts | 2 +- .../zeppelin-helium/src/zeppelin-helium.service.ts | 32 ++++++------- .../projects/zeppelin-helium/tsconfig.lib.json | 10 +--- .../projects/zeppelin-helium/tsconfig.spec.json | 14 ++---- .../projects/zeppelin-helium/tslint.json | 14 +----- .../projects/zeppelin-sdk/karma.conf.js | 2 +- .../projects/zeppelin-sdk/ng-package.json | 2 +- .../src/interfaces/message-operator.interface.ts | 6 +-- .../projects/zeppelin-sdk/src/message.ts | 56 ++++++++-------------- .../projects/zeppelin-sdk/tsconfig.lib.json | 10 +--- .../projects/zeppelin-sdk/tsconfig.spec.json | 14 ++---- .../projects/zeppelin-sdk/tslint.json | 14 +----- .../projects/zeppelin-visualization/karma.conf.js | 2 +- .../zeppelin-visualization/ng-package.json | 2 +- .../projects/zeppelin-visualization/package.json | 2 +- .../src/g2-visualization-component-base.ts | 4 +- .../zeppelin-visualization/tsconfig.lib.json | 10 +--- .../zeppelin-visualization/tsconfig.spec.json | 14 ++---- .../projects/zeppelin-visualization/tslint.json | 14 +----- zeppelin-web-angular/tsconfig.app.json | 14 ++---- zeppelin-web-angular/tsconfig.json | 40 ++++------------ zeppelin-web-angular/tsconfig.spec.json | 15 ++---- .../tslint-rules/constructorParamsOrderRule.ts | 13 +++-- zeppelin-web-angular/tslint.json | 3 ++ zeppelin-web-angular/webpack.partial.js | 38 +++++++++++++-- 46 files changed, 190 insertions(+), 335 deletions(-) diff --git a/zeppelin-web-angular/.prettierignore b/zeppelin-web-angular/.prettierignore index b9f1979fbd..515cc4e37a 100644 --- a/zeppelin-web-angular/.prettierignore +++ b/zeppelin-web-angular/.prettierignore @@ -1,3 +1,9 @@ **/*.md **/*.less **/*.svg + +dist/* +node/* +node_modules/* +target/* +tslint-rules/**/*.js diff --git a/zeppelin-web-angular/angular.json b/zeppelin-web-angular/angular.json index 7cce21f83b..1ba0a1d3ef 100644 --- a/zeppelin-web-angular/angular.json +++ b/zeppelin-web-angular/angular.json @@ -76,11 +76,7 @@ "./node_modules/github-markdown-css/github-markdown.css" ], "stylePreprocessorOptions": { - "includePaths": [ - "src/styles/theme", - "src/styles/theme/dark", - "src/styles/theme/light" - ] + "includePaths": ["src/styles/theme", "src/styles/theme/dark", "src/styles/theme/light"] }, "scripts": [ "node_modules/mathjax/MathJax.js", @@ -134,26 +130,16 @@ "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.spec.json", "karmaConfig": "src/karma.conf.js", - "styles": [ - "src/styles.less" - ], + "styles": ["src/styles.less"], "scripts": [], - "assets": [ - "src/favicon.ico", - "src/assets" - ] + "assets": ["src/favicon.ico", "src/assets"] } }, "lint": { "builder": "@angular-devkit/build-angular:tslint", "options": { - "tsConfig": [ - "src/tsconfig.app.json", - "src/tsconfig.spec.json" - ], - "exclude": [ - "**/node_modules/**" - ] + "tsConfig": ["src/tsconfig.app.json", "src/tsconfig.spec.json"], + "exclude": ["**/node_modules/**"] } } } @@ -179,9 +165,7 @@ "builder": "@angular-devkit/build-angular:tslint", "options": { "tsConfig": "e2e/tsconfig.json", - "exclude": [ - "**/node_modules/**" - ] + "exclude": ["**/node_modules/**"] } } } @@ -210,13 +194,8 @@ "lint": { "builder": "@angular-devkit/build-angular:tslint", "options": { - "tsConfig": [ - "projects/zeppelin-helium/tsconfig.lib.json", - "projects/zeppelin-helium/tsconfig.spec.json" - ], - "exclude": [ - "**/node_modules/**" - ] + "tsConfig": ["projects/zeppelin-helium/tsconfig.lib.json", "projects/zeppelin-helium/tsconfig.spec.json"], + "exclude": ["**/node_modules/**"] } } } @@ -249,9 +228,7 @@ "projects/helium-vis-example/tsconfig.lib.json", "projects/helium-vis-example/tsconfig.spec.json" ], - "exclude": [ - "**/node_modules/**" - ] + "exclude": ["**/node_modules/**"] } } } @@ -284,9 +261,7 @@ "projects/zeppelin-visualization/tsconfig.lib.json", "projects/zeppelin-visualization/tsconfig.spec.json" ], - "exclude": [ - "**/node_modules/**" - ] + "exclude": ["**/node_modules/**"] } } } @@ -315,17 +290,12 @@ "lint": { "builder": "@angular-devkit/build-angular:tslint", "options": { - "tsConfig": [ - "projects/zeppelin-sdk/tsconfig.lib.json", - "projects/zeppelin-sdk/tsconfig.spec.json" - ], - "exclude": [ - "**/node_modules/**" - ] + "tsConfig": ["projects/zeppelin-sdk/tsconfig.lib.json", "projects/zeppelin-sdk/tsconfig.spec.json"], + "exclude": ["**/node_modules/**"] } } } } }, "defaultProject": "zeppelin" -} \ No newline at end of file +} diff --git a/zeppelin-web-angular/e2e/protractor.conf.js b/zeppelin-web-angular/e2e/protractor.conf.js index 1be6b53068..7db8a81491 100644 --- a/zeppelin-web-angular/e2e/protractor.conf.js +++ b/zeppelin-web-angular/e2e/protractor.conf.js @@ -21,11 +21,9 @@ const { SpecReporter } = require('jasmine-spec-reporter'); */ exports.config = { allScriptsTimeout: 11000, - specs: [ - './src/**/*.e2e-spec.ts' - ], + specs: ['./src/**/*.e2e-spec.ts'], capabilities: { - 'browserName': 'chrome' + browserName: 'chrome' }, directConnect: true, baseUrl: 'http://localhost:4200/', @@ -41,4 +39,4 @@ exports.config = { }); jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); } -}; \ No newline at end of file +}; diff --git a/zeppelin-web-angular/e2e/src/app.e2e-spec.ts b/zeppelin-web-angular/e2e/src/app.e2e-spec.ts index fcdd911b5b..e12080414d 100644 --- a/zeppelin-web-angular/e2e/src/app.e2e-spec.ts +++ b/zeppelin-web-angular/e2e/src/app.e2e-spec.ts @@ -27,9 +27,14 @@ describe('workspace-project App', () => { afterEach(async () => { // Assert that there are no errors emitted from the browser - const logs = await browser.manage().logs().get(logging.Type.BROWSER); - expect(logs).not.toContain(jasmine.objectContaining({ - level: logging.Level.SEVERE - } as logging.Entry)); + const logs = await browser + .manage() + .logs() + .get(logging.Type.BROWSER); + expect(logs).not.toContain( + jasmine.objectContaining({ + level: logging.Level.SEVERE + } as logging.Entry) + ); }); }); diff --git a/zeppelin-web-angular/e2e/tsconfig.json b/zeppelin-web-angular/e2e/tsconfig.json index 39b800f789..677f30ff8a 100644 --- a/zeppelin-web-angular/e2e/tsconfig.json +++ b/zeppelin-web-angular/e2e/tsconfig.json @@ -4,10 +4,6 @@ "outDir": "../out-tsc/e2e", "module": "commonjs", "target": "es5", - "types": [ - "jasmine", - "jasminewd2", - "node" - ] + "types": ["jasmine", "jasminewd2", "node"] } } diff --git a/zeppelin-web-angular/karma.conf.js b/zeppelin-web-angular/karma.conf.js index 67c6820c27..edf69d9b4a 100644 --- a/zeppelin-web-angular/karma.conf.js +++ b/zeppelin-web-angular/karma.conf.js @@ -13,7 +13,7 @@ // Karma configuration file, see link for more information // https://karma-runner.github.io/1.0/config/configuration-file.html -module.exports = function (config) { +module.exports = function(config) { config.set({ basePath: '', frameworks: ['jasmine', '@angular-devkit/build-angular'], diff --git a/zeppelin-web-angular/package.json b/zeppelin-web-angular/package.json index 1a418855e4..99a3f352a0 100644 --- a/zeppelin-web-angular/package.json +++ b/zeppelin-web-angular/package.json @@ -13,7 +13,8 @@ "build-project:vis": " ng build --project zeppelin-visualization", "build-project:helium": "ng build --project zeppelin-helium", "test": "ng test", - "lint": "ng lint && prettier --check \"src/**/*.{ts,js,css,html}\"", + "lint": "ng lint && tslint tslint-rules/*.ts && prettier --check \"**/*.{ts,js,json,css,html}\"", + "lint:fix": "ng lint --fix && tslint --fix tslint-rules/*.ts && prettier --write \"**/*.{ts,js,json,css,html}\"", "e2e": "ng e2e" }, "engines": { @@ -88,12 +89,13 @@ "typescript": "3.8.3" }, "lint-staged": { - "src/**/*.{ts,js,json}": [ + "**/*.ts": [ + "tslint --fix", "./node_modules/.bin/prettier --write", "git add" ], - "src/**/*.ts": [ - "tslint --project src/tslint.json --fix", + "**/*.{js,json,css,html}": [ + "./node_modules/.bin/prettier --write", "git add" ] }, diff --git a/zeppelin-web-angular/projects/helium-vis-example/karma.conf.js b/zeppelin-web-angular/projects/helium-vis-example/karma.conf.js index ed77432da6..c13ce59e93 100644 --- a/zeppelin-web-angular/projects/helium-vis-example/karma.conf.js +++ b/zeppelin-web-angular/projects/helium-vis-example/karma.conf.js @@ -13,7 +13,7 @@ // Karma configuration file, see link for more information // https://karma-runner.github.io/1.0/config/configuration-file.html -module.exports = function (config) { +module.exports = function(config) { config.set({ basePath: '', frameworks: ['jasmine', '@angular-devkit/build-angular'], diff --git a/zeppelin-web-angular/projects/helium-vis-example/ng-package.json b/zeppelin-web-angular/projects/helium-vis-example/ng-package.json index 2193ef3df3..a25ad3d233 100644 --- a/zeppelin-web-angular/projects/helium-vis-example/ng-package.json +++ b/zeppelin-web-angular/projects/helium-vis-example/ng-package.json @@ -4,4 +4,4 @@ "lib": { "entryFile": "src/public-api.ts" } -} \ No newline at end of file +} diff --git a/zeppelin-web-angular/projects/helium-vis-example/package.json b/zeppelin-web-angular/projects/helium-vis-example/package.json index 17f7cb02fb..6b574506b4 100644 --- a/zeppelin-web-angular/projects/helium-vis-example/package.json +++ b/zeppelin-web-angular/projects/helium-vis-example/package.json @@ -5,4 +5,4 @@ "@angular/common": "^8.2.9", "@angular/core": "^8.2.9" } -} \ No newline at end of file +} diff --git a/zeppelin-web-angular/projects/helium-vis-example/src/json-vis.module.ts b/zeppelin-web-angular/projects/helium-vis-example/src/json-vis.module.ts index caa81eabfd..a259f70a65 100644 --- a/zeppelin-web-angular/projects/helium-vis-example/src/json-vis.module.ts +++ b/zeppelin-web-angular/projects/helium-vis-example/src/json-vis.module.ts @@ -20,4 +20,4 @@ import { JsonVisComponent } from './json-vis.component'; entryComponents: [JsonVisComponent], exports: [JsonVisComponent] }) -export class JsonVisModule { } +export class JsonVisModule {} diff --git a/zeppelin-web-angular/projects/helium-vis-example/src/json-visualization.ts b/zeppelin-web-angular/projects/helium-vis-example/src/json-visualization.ts index 1e63eee1b7..dea934d77d 100644 --- a/zeppelin-web-angular/projects/helium-vis-example/src/json-visualization.ts +++ b/zeppelin-web-angular/projects/helium-vis-example/src/json-visualization.ts @@ -36,7 +36,8 @@ export class JsonVisualization extends Visualization<JsonVisComponent> { private portalOutlet: CdkPortalOutlet, private viewContainerRef: ViewContainerRef, config: GraphConfig, - private componentFactoryResolver?: ComponentFactoryResolver) { + private componentFactoryResolver?: ComponentFactoryResolver + ) { super(config); } diff --git a/zeppelin-web-angular/projects/helium-vis-example/src/test.ts b/zeppelin-web-angular/projects/helium-vis-example/src/test.ts index f003001f58..951bb4eb70 100644 --- a/zeppelin-web-angular/projects/helium-vis-example/src/test.ts +++ b/zeppelin-web-angular/projects/helium-vis-example/src/test.ts @@ -13,20 +13,14 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files import { getTestBed } from '@angular/core/testing'; -import { - platformBrowserDynamicTesting, - BrowserDynamicTestingModule -} from '@angular/platform-browser-dynamic/testing'; +import { platformBrowserDynamicTesting, BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; // tslint:disable-next-line:no-import-side-effect import 'zone.js/dist/zone'; // tslint:disable-next-line:no-import-side-effect import 'zone.js/dist/zone-testing'; // First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); declare const require: NodeJS.Require; diff --git a/zeppelin-web-angular/projects/helium-vis-example/tsconfig.lib.json b/zeppelin-web-angular/projects/helium-vis-example/tsconfig.lib.json index bd23948e59..2972099ba1 100644 --- a/zeppelin-web-angular/projects/helium-vis-example/tsconfig.lib.json +++ b/zeppelin-web-angular/projects/helium-vis-example/tsconfig.lib.json @@ -6,10 +6,7 @@ "declaration": true, "inlineSources": true, "types": [], - "lib": [ - "dom", - "es2018" - ] + "lib": ["dom", "es2018"] }, "angularCompilerOptions": { "annotateForClosureCompiler": true, @@ -19,8 +16,5 @@ "strictInjectionParameters": true, "enableResourceInlining": true }, - "exclude": [ - "src/test.ts", - "**/*.spec.ts" - ] + "exclude": ["src/test.ts", "**/*.spec.ts"] } diff --git a/zeppelin-web-angular/projects/helium-vis-example/tsconfig.spec.json b/zeppelin-web-angular/projects/helium-vis-example/tsconfig.spec.json index 16da33db07..ec3528a8fd 100644 --- a/zeppelin-web-angular/projects/helium-vis-example/tsconfig.spec.json +++ b/zeppelin-web-angular/projects/helium-vis-example/tsconfig.spec.json @@ -2,16 +2,8 @@ "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "../../out-tsc/spec", - "types": [ - "jasmine", - "node" - ] + "types": ["jasmine", "node"] }, - "files": [ - "src/test.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts" - ] + "files": ["src/test.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] } diff --git a/zeppelin-web-angular/projects/helium-vis-example/tslint.json b/zeppelin-web-angular/projects/helium-vis-example/tslint.json index 124133f849..205aedaa55 100644 --- a/zeppelin-web-angular/projects/helium-vis-example/tslint.json +++ b/zeppelin-web-angular/projects/helium-vis-example/tslint.json @@ -1,17 +1,7 @@ { "extends": "../../tslint.json", "rules": { - "directive-selector": [ - true, - "attribute", - "lib", - "camelCase" - ], - "component-selector": [ - true, - "element", - "lib", - "kebab-case" - ] + "directive-selector": [true, "attribute", "lib", "camelCase"], + "component-selector": [true, "element", "lib", "kebab-case"] } } diff --git a/zeppelin-web-angular/projects/zeppelin-helium/karma.conf.js b/zeppelin-web-angular/projects/zeppelin-helium/karma.conf.js index 3ddb74a1a4..ea627c1bfe 100644 --- a/zeppelin-web-angular/projects/zeppelin-helium/karma.conf.js +++ b/zeppelin-web-angular/projects/zeppelin-helium/karma.conf.js @@ -13,7 +13,7 @@ // Karma configuration file, see link for more information // https://karma-runner.github.io/1.0/config/configuration-file.html -module.exports = function (config) { +module.exports = function(config) { config.set({ basePath: '', frameworks: ['jasmine', '@angular-devkit/build-angular'], diff --git a/zeppelin-web-angular/projects/zeppelin-helium/ng-package.json b/zeppelin-web-angular/projects/zeppelin-helium/ng-package.json index da717624c1..132f1ef09b 100644 --- a/zeppelin-web-angular/projects/zeppelin-helium/ng-package.json +++ b/zeppelin-web-angular/projects/zeppelin-helium/ng-package.json @@ -4,4 +4,4 @@ "lib": { "entryFile": "src/public-api.ts" } -} \ No newline at end of file +} diff --git a/zeppelin-web-angular/projects/zeppelin-helium/package.json b/zeppelin-web-angular/projects/zeppelin-helium/package.json index cd0b499afa..6ae361a0bb 100644 --- a/zeppelin-web-angular/projects/zeppelin-helium/package.json +++ b/zeppelin-web-angular/projects/zeppelin-helium/package.json @@ -9,4 +9,4 @@ "rxjs": "~6.5.3", "ng-zorro-antd": "^8.3.0" } -} \ No newline at end of file +} diff --git a/zeppelin-web-angular/projects/zeppelin-helium/src/common-deps.ts b/zeppelin-web-angular/projects/zeppelin-helium/src/common-deps.ts index a4595ce7e4..e10b3ccdd3 100644 --- a/zeppelin-web-angular/projects/zeppelin-helium/src/common-deps.ts +++ b/zeppelin-web-angular/projects/zeppelin-helium/src/common-deps.ts @@ -37,7 +37,7 @@ export const COMMON_DEPS = { '@zeppelin/sdk': sdk, '@zeppelin/visualization': visualization, '@zeppelin/helium': zeppelinHelium, - 'lodash': lodash, + lodash: lodash, 'ng-zorro-antd': ngZorro, rxjs, tslib diff --git a/zeppelin-web-angular/projects/zeppelin-helium/src/test.ts b/zeppelin-web-angular/projects/zeppelin-helium/src/test.ts index 393a159296..6f0de9170d 100644 --- a/zeppelin-web-angular/projects/zeppelin-helium/src/test.ts +++ b/zeppelin-web-angular/projects/zeppelin-helium/src/test.ts @@ -13,10 +13,7 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files import { getTestBed } from '@angular/core/testing'; -import { - platformBrowserDynamicTesting, - BrowserDynamicTestingModule -} from '@angular/platform-browser-dynamic/testing'; +import { platformBrowserDynamicTesting, BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; // tslint:disable-next-line:no-import-side-effect import 'zone.js/dist/zone'; // tslint:disable-next-line:no-import-side-effect @@ -25,10 +22,7 @@ import 'zone.js/dist/zone-testing'; declare const require: NodeJS.Require; // First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); // Then we find all the tests. const context = require.context('./', true, /\.spec\.ts$/); // And load the modules. diff --git a/zeppelin-web-angular/projects/zeppelin-helium/src/zeppelin-helium.module.ts b/zeppelin-web-angular/projects/zeppelin-helium/src/zeppelin-helium.module.ts index e24ac800a7..2b3985d5f5 100644 --- a/zeppelin-web-angular/projects/zeppelin-helium/src/zeppelin-helium.module.ts +++ b/zeppelin-web-angular/projects/zeppelin-helium/src/zeppelin-helium.module.ts @@ -13,4 +13,4 @@ import { NgModule } from '@angular/core'; @NgModule({}) -export class ZeppelinHeliumModule { } +export class ZeppelinHeliumModule {} diff --git a/zeppelin-web-angular/projects/zeppelin-helium/src/zeppelin-helium.service.ts b/zeppelin-web-angular/projects/zeppelin-helium/src/zeppelin-helium.service.ts index 42b339c8a5..1833deed88 100644 --- a/zeppelin-web-angular/projects/zeppelin-helium/src/zeppelin-helium.service.ts +++ b/zeppelin-web-angular/projects/zeppelin-helium/src/zeppelin-helium.service.ts @@ -30,8 +30,7 @@ export class ZeppelinHeliumPackage { public icon = 'build', // tslint:disable-next-line:no-any public visualization?: any - ) { - } + ) {} } export enum HeliumPackageType { @@ -49,7 +48,7 @@ export function createHeliumPackage(config: { // tslint:disable-next-line:no-any component: Type<any>; // tslint:disable-next-line:no-any - visualization?: any + visualization?: any; }) { return new ZeppelinHeliumPackage( config.name, @@ -65,10 +64,9 @@ export function createHeliumPackage(config: { providedIn: ZeppelinHeliumModule }) export class ZeppelinHeliumService { - depsDefined = false; - constructor() { } + constructor() {} defineDeps() { if (this.depsDefined) { @@ -77,21 +75,23 @@ export class ZeppelinHeliumService { Object.entries(COMMON_DEPS).forEach(([externalKey, externalValue]) => // tslint:disable-next-line:no-any (window as any).define(externalKey, [], () => externalValue) - ) + ); this.depsDefined = true; } loadPackage(name: string): Promise<ZeppelinHeliumPackage> { this.defineDeps(); - return SystemJs.import(`./assets/helium-packages/${name}.umd.js`) - .then(() => SystemJs.import(name)) - // tslint:disable-next-line:no-any - .then((plugin: any) => { - if (plugin instanceof ZeppelinHeliumPackage) { - return Promise.resolve(plugin); - } else { - throw new TypeError('This module is not a valid helium package'); - } - }); + return ( + SystemJs.import(`./assets/helium-packages/${name}.umd.js`) + .then(() => SystemJs.import(name)) + // tslint:disable-next-line:no-any + .then((plugin: any) => { + if (plugin instanceof ZeppelinHeliumPackage) { + return Promise.resolve(plugin); + } else { + throw new TypeError('This module is not a valid helium package'); + } + }) + ); } } diff --git a/zeppelin-web-angular/projects/zeppelin-helium/tsconfig.lib.json b/zeppelin-web-angular/projects/zeppelin-helium/tsconfig.lib.json index 45b781973d..9e14859e0b 100644 --- a/zeppelin-web-angular/projects/zeppelin-helium/tsconfig.lib.json +++ b/zeppelin-web-angular/projects/zeppelin-helium/tsconfig.lib.json @@ -6,10 +6,7 @@ "declaration": true, "inlineSources": true, "types": [], - "lib": [ - "dom", - "es2018" - ] + "lib": ["dom", "es2018"] }, "angularCompilerOptions": { "annotateForClosureCompiler": true, @@ -20,8 +17,5 @@ "enableResourceInlining": true, "flatModuleId": "@zeppelin/helium" }, - "exclude": [ - "src/test.ts", - "**/*.spec.ts" - ] + "exclude": ["src/test.ts", "**/*.spec.ts"] } diff --git a/zeppelin-web-angular/projects/zeppelin-helium/tsconfig.spec.json b/zeppelin-web-angular/projects/zeppelin-helium/tsconfig.spec.json index 16da33db07..ec3528a8fd 100644 --- a/zeppelin-web-angular/projects/zeppelin-helium/tsconfig.spec.json +++ b/zeppelin-web-angular/projects/zeppelin-helium/tsconfig.spec.json @@ -2,16 +2,8 @@ "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "../../out-tsc/spec", - "types": [ - "jasmine", - "node" - ] + "types": ["jasmine", "node"] }, - "files": [ - "src/test.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts" - ] + "files": ["src/test.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] } diff --git a/zeppelin-web-angular/projects/zeppelin-helium/tslint.json b/zeppelin-web-angular/projects/zeppelin-helium/tslint.json index 124133f849..205aedaa55 100644 --- a/zeppelin-web-angular/projects/zeppelin-helium/tslint.json +++ b/zeppelin-web-angular/projects/zeppelin-helium/tslint.json @@ -1,17 +1,7 @@ { "extends": "../../tslint.json", "rules": { - "directive-selector": [ - true, - "attribute", - "lib", - "camelCase" - ], - "component-selector": [ - true, - "element", - "lib", - "kebab-case" - ] + "directive-selector": [true, "attribute", "lib", "camelCase"], + "component-selector": [true, "element", "lib", "kebab-case"] } } diff --git a/zeppelin-web-angular/projects/zeppelin-sdk/karma.conf.js b/zeppelin-web-angular/projects/zeppelin-sdk/karma.conf.js index bf69ea2ebb..fbf53c55e4 100644 --- a/zeppelin-web-angular/projects/zeppelin-sdk/karma.conf.js +++ b/zeppelin-web-angular/projects/zeppelin-sdk/karma.conf.js @@ -13,7 +13,7 @@ // Karma configuration file, see link for more information // https://karma-runner.github.io/1.0/config/configuration-file.html -module.exports = function (config) { +module.exports = function(config) { config.set({ basePath: '', frameworks: ['jasmine', '@angular-devkit/build-angular'], diff --git a/zeppelin-web-angular/projects/zeppelin-sdk/ng-package.json b/zeppelin-web-angular/projects/zeppelin-sdk/ng-package.json index 41dc5a032d..2cd75f06c2 100644 --- a/zeppelin-web-angular/projects/zeppelin-sdk/ng-package.json +++ b/zeppelin-web-angular/projects/zeppelin-sdk/ng-package.json @@ -4,4 +4,4 @@ "lib": { "entryFile": "src/public-api.ts" } -} \ No newline at end of file +} diff --git a/zeppelin-web-angular/projects/zeppelin-sdk/src/interfaces/message-operator.interface.ts b/zeppelin-web-angular/projects/zeppelin-sdk/src/interfaces/message-operator.interface.ts index cc10753cff..1d31d208b9 100644 --- a/zeppelin-web-angular/projects/zeppelin-sdk/src/interfaces/message-operator.interface.ts +++ b/zeppelin-web-angular/projects/zeppelin-sdk/src/interfaces/message-operator.interface.ts @@ -373,9 +373,9 @@ export enum OP { GET_INTERPRETER_BINDINGS = 'GET_INTERPRETER_BINDINGS', /** - * [c-s] - * @param selectedSettingIds - */ + * [c-s] + * @param selectedSettingIds + */ SAVE_INTERPRETER_BINDINGS = 'SAVE_INTERPRETER_BINDINGS', /** diff --git a/zeppelin-web-angular/projects/zeppelin-sdk/src/message.ts b/zeppelin-web-angular/projects/zeppelin-sdk/src/message.ts index cd30db598f..951e140bd9 100644 --- a/zeppelin-web-angular/projects/zeppelin-sdk/src/message.ts +++ b/zeppelin-web-angular/projects/zeppelin-sdk/src/message.ts @@ -10,30 +10,25 @@ * limitations under the License. */ -import {interval, Observable, Subject, Subscription} from 'rxjs'; -import {delay, filter, map, mergeMap, retryWhen, take} from 'rxjs/operators'; -import {webSocket, WebSocketSubject} from 'rxjs/webSocket'; +import { interval, Observable, Subject, Subscription } from 'rxjs'; +import { delay, filter, map, mergeMap, retryWhen, take } from 'rxjs/operators'; +import { webSocket, WebSocketSubject } from 'rxjs/webSocket'; -import {Ticket} from './interfaces/message-common.interface'; +import { Ticket } from './interfaces/message-common.interface'; import { MessageReceiveDataTypeMap, MessageSendDataTypeMap, MixMessageDataTypeMap } from './interfaces/message-data-type-map.interface'; -import { - Note, - NoteConfig, - PersonalizedMode, - SendNote -} from './interfaces/message-notebook.interface'; -import {OP} from './interfaces/message-operator.interface'; +import { Note, NoteConfig, PersonalizedMode, SendNote } from './interfaces/message-notebook.interface'; +import { OP } from './interfaces/message-operator.interface'; import { DynamicFormParams, ParagraphConfig, ParagraphParams, SendParagraph } from './interfaces/message-paragraph.interface'; -import {WebSocketMessage} from './interfaces/websocket-message.interface'; +import { WebSocketMessage } from './interfaces/websocket-message.interface'; export type ArgumentsType<T> = T extends (...args: infer U) => void ? U : never; @@ -56,7 +51,9 @@ export class Message { private pingIntervalSubscription = new Subscription(); private wsUrl?: string; private ticket?: Ticket; - private uniqueClientId = Math.random().toString(36).substring(2, 7); + private uniqueClientId = Math.random() + .toString(36) + .substring(2, 7); private lastMsgIdSeqSent = 0; constructor() { @@ -99,9 +96,7 @@ export class Message { connect() { if (!this.wsUrl) { - throw new Error( - 'WebSocket URL is not set. Please call setWsUrl() before connect()' - ) + throw new Error('WebSocket URL is not set. Please call setWsUrl() before connect()'); } this.ws = webSocket<WebSocketMessage<keyof MixMessageDataTypeMap>>({ url: this.wsUrl, @@ -112,18 +107,9 @@ export class Message { this.ws .pipe( // reconnect - retryWhen(errors => - errors.pipe( - mergeMap(() => - this.close$.pipe( - take(1), - delay(4000) - ) - ) - ) - ) + retryWhen(errors => errors.pipe(mergeMap(() => this.close$.pipe(take(1), delay(4000))))) ) - .subscribe((e) => { + .subscribe(e => { console.log('Receive:', e); this.received$.next(this.interceptReceived(e as WebSocketMessage<keyof MessageReceiveDataTypeMap>)); }); @@ -184,9 +170,7 @@ export class Message { const isResponseForRequestFromThisClient = uniqueClientId === this.uniqueClientId; if (message.op === OP.PARAGRAPH) { - if (isResponseForRequestFromThisClient && - this.lastMsgIdSeqSent > msgIdSeqReceived - ) { + if (isResponseForRequestFromThisClient && this.lastMsgIdSeqSent > msgIdSeqReceived) { console.log('PARAPGRAPH is already updated by shortcircuit'); return false; } else { @@ -282,7 +266,7 @@ export class Message { } reloadNote(noteId: string): void { - this.send<OP.RELOAD_NOTE>(OP.RELOAD_NOTE, { id: noteId }) + this.send<OP.RELOAD_NOTE>(OP.RELOAD_NOTE, { id: noteId }); } getNote(noteId: string): void { @@ -411,9 +395,9 @@ export class Message { op: OP.PARAGRAPH_STATUS, data: { id: paragraphId, - status: "PENDING" + status: 'PENDING' } - }) + }); // send message to server this.send<OP.RUN_PARAGRAPH>(OP.RUN_PARAGRAPH, { @@ -542,8 +526,10 @@ export class Message { } saveInterpreterBindings(noteId: string, selectedSettingIds: string[]): void { - this.send<OP.SAVE_INTERPRETER_BINDINGS>(OP.SAVE_INTERPRETER_BINDINGS, - {noteId: noteId, selectedSettingIds: selectedSettingIds}); + this.send<OP.SAVE_INTERPRETER_BINDINGS>(OP.SAVE_INTERPRETER_BINDINGS, { + noteId: noteId, + selectedSettingIds: selectedSettingIds + }); } listConfigurations(): void { diff --git a/zeppelin-web-angular/projects/zeppelin-sdk/tsconfig.lib.json b/zeppelin-web-angular/projects/zeppelin-sdk/tsconfig.lib.json index 784751866f..08b5b68195 100644 --- a/zeppelin-web-angular/projects/zeppelin-sdk/tsconfig.lib.json +++ b/zeppelin-web-angular/projects/zeppelin-sdk/tsconfig.lib.json @@ -6,10 +6,7 @@ "declaration": true, "inlineSources": true, "types": [], - "lib": [ - "dom", - "es2018" - ] + "lib": ["dom", "es2018"] }, "angularCompilerOptions": { "annotateForClosureCompiler": true, @@ -20,8 +17,5 @@ "enableResourceInlining": true, "flatModuleId": "@zeppelin/sdk" }, - "exclude": [ - "src/test.ts", - "**/*.spec.ts" - ] + "exclude": ["src/test.ts", "**/*.spec.ts"] } diff --git a/zeppelin-web-angular/projects/zeppelin-sdk/tsconfig.spec.json b/zeppelin-web-angular/projects/zeppelin-sdk/tsconfig.spec.json index 16da33db07..ec3528a8fd 100644 --- a/zeppelin-web-angular/projects/zeppelin-sdk/tsconfig.spec.json +++ b/zeppelin-web-angular/projects/zeppelin-sdk/tsconfig.spec.json @@ -2,16 +2,8 @@ "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "../../out-tsc/spec", - "types": [ - "jasmine", - "node" - ] + "types": ["jasmine", "node"] }, - "files": [ - "src/test.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts" - ] + "files": ["src/test.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] } diff --git a/zeppelin-web-angular/projects/zeppelin-sdk/tslint.json b/zeppelin-web-angular/projects/zeppelin-sdk/tslint.json index 124133f849..205aedaa55 100644 --- a/zeppelin-web-angular/projects/zeppelin-sdk/tslint.json +++ b/zeppelin-web-angular/projects/zeppelin-sdk/tslint.json @@ -1,17 +1,7 @@ { "extends": "../../tslint.json", "rules": { - "directive-selector": [ - true, - "attribute", - "lib", - "camelCase" - ], - "component-selector": [ - true, - "element", - "lib", - "kebab-case" - ] + "directive-selector": [true, "attribute", "lib", "camelCase"], + "component-selector": [true, "element", "lib", "kebab-case"] } } diff --git a/zeppelin-web-angular/projects/zeppelin-visualization/karma.conf.js b/zeppelin-web-angular/projects/zeppelin-visualization/karma.conf.js index e04c06a8f5..1e0e9a0288 100644 --- a/zeppelin-web-angular/projects/zeppelin-visualization/karma.conf.js +++ b/zeppelin-web-angular/projects/zeppelin-visualization/karma.conf.js @@ -13,7 +13,7 @@ // Karma configuration file, see link for more information // https://karma-runner.github.io/1.0/config/configuration-file.html -module.exports = function (config) { +module.exports = function(config) { config.set({ basePath: '', frameworks: ['jasmine', '@angular-devkit/build-angular'], diff --git a/zeppelin-web-angular/projects/zeppelin-visualization/ng-package.json b/zeppelin-web-angular/projects/zeppelin-visualization/ng-package.json index 78b3ecf185..5f0a54a8e3 100644 --- a/zeppelin-web-angular/projects/zeppelin-visualization/ng-package.json +++ b/zeppelin-web-angular/projects/zeppelin-visualization/ng-package.json @@ -4,4 +4,4 @@ "lib": { "entryFile": "src/public-api.ts" } -} \ No newline at end of file +} diff --git a/zeppelin-web-angular/projects/zeppelin-visualization/package.json b/zeppelin-web-angular/projects/zeppelin-visualization/package.json index 1d4232be54..0c6239f111 100644 --- a/zeppelin-web-angular/projects/zeppelin-visualization/package.json +++ b/zeppelin-web-angular/projects/zeppelin-visualization/package.json @@ -5,4 +5,4 @@ "@angular/common": "^8.2.8", "@angular/core": "^8.2.8" } -} \ No newline at end of file +} diff --git a/zeppelin-web-angular/projects/zeppelin-visualization/src/g2-visualization-component-base.ts b/zeppelin-web-angular/projects/zeppelin-visualization/src/g2-visualization-component-base.ts index d7fe02bfcc..5969387103 100644 --- a/zeppelin-web-angular/projects/zeppelin-visualization/src/g2-visualization-component-base.ts +++ b/zeppelin-web-angular/projects/zeppelin-visualization/src/g2-visualization-component-base.ts @@ -60,7 +60,7 @@ export abstract class G2VisualizationComponentBase implements OnDestroy { this.chart.changeHeight(this.config.height || 400); setTimeout(() => { if (!this.chart) { - throw new Error('Can not refresh the chart, Please make sure on correct assignment.') + throw new Error('Can not refresh the chart, Please make sure on correct assignment.'); } this.setScale(this.chart); this.chart.forceFit(); @@ -91,7 +91,7 @@ export abstract class G2VisualizationComponentBase implements OnDestroy { throw new Error(`Can't find the container, Please make sure on correct assignment.`); } } - return this.chart + return this.chart; } ngOnDestroy(): void { diff --git a/zeppelin-web-angular/projects/zeppelin-visualization/tsconfig.lib.json b/zeppelin-web-angular/projects/zeppelin-visualization/tsconfig.lib.json index 15689086f6..15cc393d9b 100644 --- a/zeppelin-web-angular/projects/zeppelin-visualization/tsconfig.lib.json +++ b/zeppelin-web-angular/projects/zeppelin-visualization/tsconfig.lib.json @@ -6,10 +6,7 @@ "declaration": true, "inlineSources": true, "types": [], - "lib": [ - "dom", - "es2018" - ] + "lib": ["dom", "es2018"] }, "angularCompilerOptions": { "annotateForClosureCompiler": true, @@ -20,8 +17,5 @@ "enableResourceInlining": true, "flatModuleId": "@zeppelin/visualization" }, - "exclude": [ - "src/test.ts", - "**/*.spec.ts" - ] + "exclude": ["src/test.ts", "**/*.spec.ts"] } diff --git a/zeppelin-web-angular/projects/zeppelin-visualization/tsconfig.spec.json b/zeppelin-web-angular/projects/zeppelin-visualization/tsconfig.spec.json index 16da33db07..ec3528a8fd 100644 --- a/zeppelin-web-angular/projects/zeppelin-visualization/tsconfig.spec.json +++ b/zeppelin-web-angular/projects/zeppelin-visualization/tsconfig.spec.json @@ -2,16 +2,8 @@ "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "../../out-tsc/spec", - "types": [ - "jasmine", - "node" - ] + "types": ["jasmine", "node"] }, - "files": [ - "src/test.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts" - ] + "files": ["src/test.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] } diff --git a/zeppelin-web-angular/projects/zeppelin-visualization/tslint.json b/zeppelin-web-angular/projects/zeppelin-visualization/tslint.json index 124133f849..205aedaa55 100644 --- a/zeppelin-web-angular/projects/zeppelin-visualization/tslint.json +++ b/zeppelin-web-angular/projects/zeppelin-visualization/tslint.json @@ -1,17 +1,7 @@ { "extends": "../../tslint.json", "rules": { - "directive-selector": [ - true, - "attribute", - "lib", - "camelCase" - ], - "component-selector": [ - true, - "element", - "lib", - "kebab-case" - ] + "directive-selector": [true, "attribute", "lib", "camelCase"], + "component-selector": [true, "element", "lib", "kebab-case"] } } diff --git a/zeppelin-web-angular/tsconfig.app.json b/zeppelin-web-angular/tsconfig.app.json index 565a11a215..add669334a 100644 --- a/zeppelin-web-angular/tsconfig.app.json +++ b/zeppelin-web-angular/tsconfig.app.json @@ -4,15 +4,7 @@ "outDir": "./out-tsc/app", "types": [] }, - "files": [ - "src/main.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.ts" - ], - "exclude": [ - "src/test.ts", - "src/**/*.spec.ts" - ] + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.ts"], + "exclude": ["src/test.ts", "src/**/*.spec.ts"] } diff --git a/zeppelin-web-angular/tsconfig.json b/zeppelin-web-angular/tsconfig.json index b118ddf25f..00296eaca6 100644 --- a/zeppelin-web-angular/tsconfig.json +++ b/zeppelin-web-angular/tsconfig.json @@ -3,28 +3,13 @@ "compilerOptions": { "baseUrl": "./", "paths": { - "@zeppelin/*": [ - "./src/app/*", - "./src/environments/*" - ], - "@zeppelin/helium": [ - "./dist/zeppelin-helium" - ], - "@zeppelin/helium/*": [ - "./dist/zeppelin-helium/*" - ], - "@zeppelin/visualization": [ - "dist/zeppelin-visualization" - ], - "@zeppelin/visualization/*": [ - "dist/zeppelin-visualization/*" - ], - "@zeppelin/sdk": [ - "dist/zeppelin-sdk" - ], - "@zeppelin/sdk/*": [ - "dist/zeppelin-sdk/*" - ] + "@zeppelin/*": ["./src/app/*", "./src/environments/*"], + "@zeppelin/helium": ["./dist/zeppelin-helium"], + "@zeppelin/helium/*": ["./dist/zeppelin-helium/*"], + "@zeppelin/visualization": ["dist/zeppelin-visualization"], + "@zeppelin/visualization/*": ["dist/zeppelin-visualization/*"], + "@zeppelin/sdk": ["dist/zeppelin-sdk"], + "@zeppelin/sdk/*": ["dist/zeppelin-sdk/*"] }, "outDir": "./dist/out-tsc", "sourceMap": true, @@ -38,12 +23,7 @@ "skipLibCheck": true, "importHelpers": true, "target": "es5", - "typeRoots": [ - "node_modules/@types" - ], - "lib": [ - "es2018", - "dom" - ] + "typeRoots": ["node_modules/@types"], + "lib": ["es2018", "dom"] } -} \ No newline at end of file +} diff --git a/zeppelin-web-angular/tsconfig.spec.json b/zeppelin-web-angular/tsconfig.spec.json index 6400fde7d5..430cf757ce 100644 --- a/zeppelin-web-angular/tsconfig.spec.json +++ b/zeppelin-web-angular/tsconfig.spec.json @@ -2,17 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/spec", - "types": [ - "jasmine", - "node" - ] + "types": ["jasmine", "node"] }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] + "files": ["src/test.ts", "src/polyfills.ts"], + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] } diff --git a/zeppelin-web-angular/tslint-rules/constructorParamsOrderRule.ts b/zeppelin-web-angular/tslint-rules/constructorParamsOrderRule.ts index 692051a33e..2392dc158c 100644 --- a/zeppelin-web-angular/tslint-rules/constructorParamsOrderRule.ts +++ b/zeppelin-web-angular/tslint-rules/constructorParamsOrderRule.ts @@ -95,11 +95,14 @@ function walk(ctx: Lint.WalkContext<void>) { } function getModifier(param: ts.ParameterDeclaration): string { - const hasOptional = param.decorators?.some(d => { - let expr = d.expression; - if (ts.isCallExpression(expr)) expr = expr.expression; - return ts.isIdentifier(expr) && expr.text === "Optional"; - }) || !!param.questionToken; + const hasOptional = + param.decorators?.some(d => { + let expr = d.expression; + if (ts.isCallExpression(expr)) { + expr = expr.expression; + } + return ts.isIdentifier(expr) && expr.text === 'Optional'; + }) || !!param.questionToken; if (hasOptional) { return 'optional'; diff --git a/zeppelin-web-angular/tslint.json b/zeppelin-web-angular/tslint.json index f8cc3bf206..f7ab7e7d8a 100644 --- a/zeppelin-web-angular/tslint.json +++ b/zeppelin-web-angular/tslint.json @@ -1,5 +1,8 @@ { "rulesDirectory": ["node_modules/codelyzer", "node_modules/nz-tslint-rules", "tslint-rules"], + "linterOptions": { + "exclude": ["dist/**", "node/**", "node_modules/**"] + }, "rules": { "nz-secondary-entry-imports": true, "banana-in-box": true, diff --git a/zeppelin-web-angular/webpack.partial.js b/zeppelin-web-angular/webpack.partial.js index c2261441f9..20ad710264 100644 --- a/zeppelin-web-angular/webpack.partial.js +++ b/zeppelin-web-angular/webpack.partial.js @@ -16,12 +16,42 @@ module.exports = { plugins: [ new MonacoWebpackPlugin({ languages: [ - 'bat', 'cpp', 'csharp', 'csp', 'css', 'dockerfile', 'go', 'handlebars', 'html', 'java', 'javascript', 'json', - 'less', 'lua', 'markdown', 'mysql', 'objective', 'perl', 'pgsql', 'php', 'powershell', 'python', 'r', 'ruby', - 'rust', 'scheme', 'scss', 'shell', 'sql', 'swift', 'typescript', 'vb', 'xml', 'yaml' + 'bat', + 'cpp', + 'csharp', + 'csp', + 'css', + 'dockerfile', + 'go', + 'handlebars', + 'html', + 'java', + 'javascript', + 'json', + 'less', + 'lua', + 'markdown', + 'mysql', + 'objective', + 'perl', + 'pgsql', + 'php', + 'powershell', + 'python', + 'r', + 'ruby', + 'rust', + 'scheme', + 'scss', + 'shell', + 'sql', + 'swift', + 'typescript', + 'vb', + 'xml', + 'yaml' ], features: ['!accessibilityHelp'] }) ] }; -