Jelajahi Sumber

[frontend] Upgrade style, lint and test related packages to the latest versions

Johan Åhlén 4 tahun lalu
induk
melakukan
c46f5e4f55

+ 19 - 0
.stylelintrc

@@ -0,0 +1,19 @@
+{
+  "extends": "stylelint-config-standard",
+  "plugins": [
+    "stylelint-scss"
+  ],
+  "rules": {
+    "max-empty-lines": 4,
+    "number-leading-zero": null,
+    "no-descending-specificity": null,
+    "at-rule-no-unknown": null,
+    "scss/at-rule-no-unknown": true,
+    "selector-pseudo-element-no-unknown": [
+      true,
+      {
+        "ignorePseudoElements": ["v-deep"]
+      }
+    ]
+  }
+}

+ 23 - 18
desktop/core/src/desktop/js/apps/editor/components/aceEditor/AceEditor.test.ts

@@ -23,7 +23,6 @@ import { INSERT_AT_CURSOR_EVENT } from 'ko/bindings/ace/ko.aceEditor';
 import { AutocompleteParser, SqlParserProvider, SyntaxError, SyntaxParser } from 'parse/types';
 import { SetOptions, SqlReferenceProvider, UdfCategory } from 'sql/reference/types';
 import huePubSub from 'utils/huePubSub';
-import { nextTick } from 'vue';
 import AceEditor from './AceEditor.vue';
 
 import impalaSyntaxParser from 'parse/sql/impala/impalaSyntaxParser';
@@ -31,11 +30,11 @@ import impalaAutocompleteParser from 'parse/sql/impala/impalaAutocompleteParser'
 
 const sqlParserProvider: SqlParserProvider = {
   async getAutocompleteParser(): Promise<AutocompleteParser> {
-    return (impalaAutocompleteParser as unknown) as AutocompleteParser;
+    return impalaAutocompleteParser as unknown as AutocompleteParser;
   },
 
   async getSyntaxParser(): Promise<SyntaxParser> {
-    return (impalaSyntaxParser as unknown) as SyntaxParser;
+    return impalaSyntaxParser as unknown as SyntaxParser;
   }
 };
 
@@ -55,7 +54,7 @@ const sqlReferenceProvider: SqlReferenceProvider = {
 };
 
 describe('AceEditor.vue', () => {
-  const mockExecutor = ({
+  const mockExecutor = {
     connector: ko.observable({
       dialect: 'impala',
       id: 'impala'
@@ -67,31 +66,37 @@ describe('AceEditor.vue', () => {
       id: 'foo'
     }),
     database: ko.observable('default')
-  } as unknown) as Executor;
+  } as unknown as Executor;
+
+  let mountedTwice = false;
 
   const shallowMountForEditor = async (
     initialValue?: string
-  ): Promise<{ element: Element; editor: Ace.Editor }> => {
-    spyOn(dataCatalog, 'getChildren').and.returnValue(CancellablePromise.resolve([]));
-
-    const wrapper = shallowMount(AceEditor, {
-      props: {
+  ): Promise<{ element: Element; editor: Ace.Editor }> =>
+    new Promise(resolve => {
+      spyOn(dataCatalog, 'getChildren').and.returnValue(CancellablePromise.resolve([]));
+      const props = {
         initialValue,
         id: 'some-id',
         executor: mockExecutor,
         sqlParserProvider,
         sqlReferenceProvider
-      }
-    });
+      };
 
-    await nextTick();
+      let wrapper = shallowMount(AceEditor, { props });
 
-    expect(wrapper.emitted()['ace-created']).toBeTruthy();
-
-    const editor = (wrapper.emitted()['ace-created'][0] as Ace.Editor[])[0];
+      if (!mountedTwice) {
+        // There seems to be a bug in vue-test-utils where the first mount won't trigger the onMounted hook.
+        mountedTwice = true;
+        wrapper = shallowMount(AceEditor, { props });
+      }
 
-    return { element: wrapper.element, editor };
-  };
+      wrapper.vm.$nextTick(() => {
+        expect(wrapper.emitted()['ace-created']).toBeTruthy();
+        const editor = (wrapper.emitted()['ace-created'][0] as Ace.Editor[])[0];
+        resolve({ element: wrapper.element, editor });
+      });
+    });
 
   it('should render', async () => {
     const { element } = await shallowMountForEditor('some query');

+ 2 - 1
desktop/core/src/desktop/js/components/dropdown/DropdownDrawer.test.ts

@@ -19,12 +19,13 @@ import DropdownDrawer from './DropdownDrawer.vue';
 
 describe('DropdownDrawer.vue', () => {
   it('should render empty dropdown drawer', () => {
-    const wrapper = shallowMount(DropdownDrawer);
+    const wrapper = shallowMount(DropdownDrawer, { props: { open: false } });
     expect(wrapper.element).toMatchSnapshot();
   });
 
   it('should render dropdown drawer with slots', () => {
     const wrapper = shallowMount(DropdownDrawer, {
+      props: { open: true },
       slots: {
         default: '<div>Some item</div>'
       }

+ 9 - 2
desktop/core/src/desktop/js/components/dropdown/__snapshots__/DropdownDrawer.test.ts.snap

@@ -2,10 +2,17 @@
 
 exports[`DropdownDrawer.vue should render dropdown drawer with slots 1`] = `
 <div
-  class="hue-dropdown-drawer"
+  class="hue-dropdown-drawer open"
   style="position: fixed;"
 >
-  <!--v-if-->
+  <div
+    class="hue-dropdown-drawer-inner"
+    style="top: 100%; left: 0px;"
+  >
+    
+    <stub />
+    
+  </div>
 </div>
 `;
 

+ 1 - 1
jest.config.js

@@ -11,7 +11,7 @@ module.exports = {
   moduleDirectories: ['node_modules', 'desktop/core/src/desktop/js'],
   modulePaths: ['desktop/core/src/desktop/js'],
   testMatch: ['<rootDir>/desktop/core/src/desktop/js/**/*.test.(js|jsx|ts|tsx)'],
-  testEnvironment: 'jest-environment-jsdom-sixteen',
+  testEnvironment: 'jsdom',
   testURL: 'https://www.gethue.com/hue',
   setupFilesAfterEnv: ['<rootDir>/desktop/core/src/desktop/js/jest/jest.init.js'],
   watchPathIgnorePatterns: ['<rootDir>/desktop/core/src/desktop/static'],

File diff ditekan karena terlalu besar
+ 283 - 273
package-lock.json


+ 28 - 42
package.json

@@ -29,19 +29,6 @@
   "engines": {
     "node": ">=0.10.0"
   },
-  "stylelint": {
-    "extends": "stylelint-config-standard",
-    "plugins": [
-      "stylelint-scss"
-    ],
-    "rules": {
-      "max-empty-lines": 4,
-      "number-leading-zero": null,
-      "no-descending-specificity": null,
-      "at-rule-no-unknown": null,
-      "scss/at-rule-no-unknown": true
-    }
-  },
   "dependencies": {
     "@gethue/sql-formatter": "4.0.3",
     "axios": "0.21.1",
@@ -63,7 +50,6 @@
     "knockout-switch-case": "2.1.0",
     "knockout.mapping": "2.4.3",
     "knockout.validation": "2.0.3",
-    "less": "^3.10.3",
     "localforage": "1.7.3",
     "lodash": "4.17.21",
     "luxon": "1.25.0",
@@ -101,51 +87,51 @@
     "@types/qs": "6.9.4",
     "@types/sanitize-html": "1.27.0",
     "@types/webpack": "5.28.0",
-    "@typescript-eslint/eslint-plugin": "3.4.0",
-    "@typescript-eslint/parser": "3.4.0",
+    "@typescript-eslint/eslint-plugin": "4.25.0",
+    "@typescript-eslint/parser": "4.25.0",
     "@vue/compiler-sfc": "3.0.11",
     "@vue/test-utils": "^2.0.0-rc.1",
     "babel-eslint": "10.1.0",
-    "babel-jest": "26.0.1",
+    "babel-jest": "26.6.3",
     "babel-jscs": "3.0.0-beta1",
     "babel-loader": "8.2.2",
     "babel-plugin-module-resolver": "4.1.0",
     "babel-preset-typescript-vue3": "^2.0.8",
     "clean-webpack-plugin": "1.0.1",
     "copy-webpack-plugin": "^6.0.3",
-    "css-loader": "^3.4.2",
-    "eslint": "7.2.0",
-    "eslint-config-prettier": "6.11.0",
-    "eslint-plugin-jest": "23.13.2",
-    "eslint-plugin-prettier": "3.1.4",
-    "eslint-plugin-vue": "^7.5.0",
-    "expose-loader": "0.7.5",
-    "grunt": "^1.1.0",
-    "grunt-contrib-less": "2.0.0",
+    "css-loader": "5.2.6",
+    "eslint": "7.27.0",
+    "eslint-config-prettier": "8.3.0",
+    "eslint-plugin-jest": "24.3.6",
+    "eslint-plugin-prettier": "3.4.0",
+    "eslint-plugin-vue": "7.10.0",
+    "expose-loader": "3.0.0",
+    "grunt": "1.4.1",
+    "grunt-contrib-less": "3.0.0",
     "grunt-contrib-watch": "1.1.0",
-    "identity-obj-proxy": "^3.0.0",
-    "jest": "26.0.1",
-    "jest-environment-jsdom-sixteen": "1.0.3",
-    "jsdom": "16.4.0",
-    "less-loader": "6.1.2",
+    "identity-obj-proxy": "3.0.0",
+    "jest": "26.6.3",
+    "jsdom": "16.6.0",
+    "less": "4.1.1",
+    "less-loader": "9.0.0",
     "lesshint": "6.3.7",
-    "license-checker": "^25.0.1",
-    "load-grunt-tasks": "4.0.0",
+    "license-checker": "25.0.1",
+    "load-grunt-tasks": "5.1.0",
     "markdown": "0.5.0",
-    "prettier": "2.0.5",
-    "sass": "1.32.12",
-    "sass-loader": "8.0.2",
+    "prettier": "2.3.0",
+    "sass": "1.34.0",
+    "sass-loader": "11.1.1",
     "source-map-loader": "3.0.0",
-    "style-loader": "^2.0.0",
-    "stylelint": "13.6.0",
-    "stylelint-config-standard": "20.0.0",
-    "stylelint-scss": "3.18.0",
-    "ts-jest": "^26.5.1",
+    "style-loader": "2.0.0",
+    "stylelint": "13.13.1",
+    "stylelint-config-standard": "22.0.0",
+    "stylelint-scss": "3.19.0",
+    "ts-jest": "26.5.6",
     "ts-loader": "7.0.5",
     "typescript": "3.9.5",
     "util": "0.12.4",
     "vti": "0.0.24",
-    "vue-jest": "^5.0.0-alpha.8",
+    "vue-jest": "5.0.0-alpha.10",
     "vue-loader": "16.2.0",
     "webpack": "5.38.1",
     "webpack-bundle-analyzer": "4.4.2",

+ 0 - 1
webpack.config.js

@@ -23,7 +23,6 @@ const {
 } = require('./desktop/core/src/desktop/js/webpack/configUtils');
 
 process.traceDeprecation = true;
-
 const config = {
   devtool: false,
   entry: {

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini