build: fix imports and eslint config for use of src folder

This commit is contained in:
MrTimscampi 2021-03-24 13:33:24 +01:00 committed by Julien Machiels
parent 5d298819f3
commit 0cec4bdf5f
21 changed files with 161 additions and 113 deletions

View File

@ -1,7 +1,6 @@
module.exports = { module.exports = {
root: true, root: true,
env: { env: {
browser: true,
node: true node: true
}, },
extends: [ extends: [
@ -9,11 +8,9 @@ module.exports = {
'plugin:jsdoc/recommended', 'plugin:jsdoc/recommended',
'plugin:json/recommended', 'plugin:json/recommended',
'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended',
'@nuxtjs/eslint-config-typescript',
'prettier', 'prettier',
'plugin:prettier/recommended', 'plugin:prettier/recommended',
'plugin:promise/recommended', 'plugin:promise/recommended',
'plugin:nuxt/recommended',
'plugin:import/errors', 'plugin:import/errors',
'plugin:import/warnings', 'plugin:import/warnings',
'plugin:import/typescript' 'plugin:import/typescript'
@ -31,28 +28,6 @@ module.exports = {
'@typescript-eslint/prefer-ts-expect-error': 'error', '@typescript-eslint/prefer-ts-expect-error': 'error',
'prefer-arrow-callback': 'error', 'prefer-arrow-callback': 'error',
curly: 'error', curly: 'error',
// Force some component order stuff, formatting and such, for consistency
'vue/component-name-in-template-casing': [
'error',
'kebab-case',
{
ignores: []
}
],
'vue/order-in-components': 'error',
'vue/v-bind-style': 'error',
'vue/v-on-style': 'error',
'vue/v-slot-style': 'error',
'vue/attributes-order': 'error',
'vue/html-self-closing': [
'error',
{
html: {
void: 'always'
}
}
],
'vue/multiline-html-element-content-newline': 'error',
'padding-line-between-statements': [ 'padding-line-between-statements': [
'error', 'error',
// Always require blank lines after directives (like 'use-strict'), except between directives // Always require blank lines after directives (like 'use-strict'), except between directives
@ -93,14 +68,60 @@ module.exports = {
], ],
'lodash/import-scope': ['error', 'method'] 'lodash/import-scope': ['error', 'method']
}, },
overrides: [
{
files: ['client/**/*'],
env: {
browser: true,
node: true
},
extends: [
'eslint:recommended',
'plugin:jsdoc/recommended',
'plugin:json/recommended',
'plugin:@typescript-eslint/recommended',
'@nuxtjs/eslint-config-typescript',
'prettier',
'plugin:prettier/recommended',
'plugin:promise/recommended',
'plugin:nuxt/recommended',
'plugin:import/errors',
'plugin:import/warnings',
'plugin:import/typescript'
],
rules: {
// Force some component order stuff, formatting and such, for consistency
'vue/component-name-in-template-casing': [
'error',
'kebab-case',
{
ignores: []
}
],
'vue/order-in-components': 'error',
'vue/v-bind-style': 'error',
'vue/v-on-style': 'error',
'vue/v-slot-style': 'error',
'vue/attributes-order': 'error',
'vue/html-self-closing': [
'error',
{
html: {
void: 'always'
}
}
],
'vue/multiline-html-element-content-newline': 'error'
},
settings: { settings: {
'import/resolver': { 'import/resolver': {
nuxt: { nuxt: {
extensions: ['.js', '.ts', '.vue', '.json'] extensions: ['.js', '.ts', '.vue', '.json'],
nuxtSrcDir: 'client/'
}
} }
} }
}, },
overrides: [
{ {
files: ['**/*.spec.ts'], files: ['**/*.spec.ts'],
plugins: ['jest', 'jest-formatting'], plugins: ['jest', 'jest-formatting'],

19
.github/labeler.yml vendored
View File

@ -1,20 +1,25 @@
tests: tests:
- "**/*.spec.js" - '**/*.spec.js'
github_actions: github_actions:
- ".github/workflows/*" - '.github/workflows/*'
vuex: vuex:
- "store/**/*.ts" - 'client/store/**/*.ts'
plugins: plugins:
- "plugins/**/*.ts" - 'client/plugins/**/*.ts'
vue: vue:
- "**/*.vue" - '**/*.vue'
docker: docker:
- "Dockerfile*" - 'Dockerfile*'
ui: ui:
- any: ["components/**/*.vue", "layouts/**/*.vue", "pages/**/*.vue"] - any:
[
'client/components/**/*.vue',
'client/layouts/**/*.vue',
'client/pages/**/*.vue'
]

View File

@ -6,6 +6,6 @@ FROM nginx:alpine
LABEL maintainer="Jellyfin Packaging Team - packaging@jellyfin.org" LABEL maintainer="Jellyfin Packaging Team - packaging@jellyfin.org"
LABEL org.opencontainers.image.source="https://github.com/jellyfin/jellyfin-vue" LABEL org.opencontainers.image.source="https://github.com/jellyfin/jellyfin-vue"
COPY dist/ /usr/share/nginx/html/ COPY client/dist/ /usr/share/nginx/html/
COPY .docker/nginx.conf /etc/nginx/conf.d/default.conf COPY .docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY .docker/mime.types /etc/nginx/mime.types COPY .docker/mime.types /etc/nginx/mime.types

View File

@ -7,8 +7,8 @@ LABEL maintainer="Jellyfin Packaging Team - packaging@jellyfin.org"
LABEL org.opencontainers.image.source="https://github.com/jellyfin/jellyfin-vue" LABEL org.opencontainers.image.source="https://github.com/jellyfin/jellyfin-vue"
COPY .docker/package.json .docker/package-lock.json ./.docker/nuxt.config.js ./ COPY .docker/package.json .docker/package-lock.json ./.docker/nuxt.config.js ./
COPY .nuxt ./.nuxt COPY client/.nuxt ./.nuxt
COPY static ./static COPY client/static ./static
# Install runtime dependencies # Install runtime dependencies
RUN npm ci --production --no-audit RUN npm ci --production --no-audit

View File

@ -1,9 +1,11 @@
{ {
"editor.formatOnSave": true, "editor.formatOnSave": true,
"i18n-ally.keystyle": "nested", "i18n-ally.keystyle": "nested",
"i18n-ally.localesPaths": "locales",
"i18n-ally.sortKeys": true, "i18n-ally.sortKeys": true,
"vetur.format.defaultFormatter.html": "prettier", "vetur.format.defaultFormatter.html": "prettier",
"i18n-ally.sourceLanguage": "en-US", "i18n-ally.sourceLanguage": "en-US",
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode",
"i18n-ally.localesPaths": [
"client/locales"
]
} }

View File

@ -23,8 +23,8 @@ WORKDIR /app
COPY .docker/package.json .docker/package-lock.json .docker/nuxt.config.js ./ COPY .docker/package.json .docker/package-lock.json .docker/nuxt.config.js ./
# Copy client files from the build image # Copy client files from the build image
COPY --from=build /app/.nuxt ./.nuxt COPY --from=build /app/client/.nuxt ./.nuxt
COPY --from=build /app/static ./static COPY --from=build /app/client/static ./static
# Install runtime dependencies # Install runtime dependencies
RUN npm ci --production --no-audit RUN npm ci --production --no-audit

View File

@ -19,6 +19,6 @@ RUN npm run build:static
# Deploy built distribution to nginx # Deploy built distribution to nginx
FROM nginx:alpine FROM nginx:alpine
COPY --from=build /app/dist/ /usr/share/nginx/html/ COPY --from=build /app/client/dist/ /usr/share/nginx/html/
COPY .docker/nginx.conf /etc/nginx/conf.d/default.conf COPY .docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY .docker/mime.types /etc/nginx/mime.types COPY .docker/mime.types /etc/nginx/mime.types

26
client/jest.config.js Normal file
View File

@ -0,0 +1,26 @@
module.exports = {
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/$1',
'^~/(.*)$': '<rootDir>/$1'
},
moduleFileExtensions: ['ts', 'js', 'vue', 'json'],
transform: {
'^.+\\.ts$': 'ts-jest',
'^.+\\.js$': 'babel-jest',
'.*\\.(vue)$': 'vue-jest'
},
collectCoverageFrom: [
'<rootDir>/components/**/*.vue',
'<rootDir>/layouts/**/*.vue',
'<rootDir>/middleware/**/*.vue',
'<rootDir>/middleware/**/*.ts',
'<rootDir>/mixins/**/*.vue',
'<rootDir>/mixins/**/*.ts',
'<rootDir>/pages/**/*.vue',
'<rootDir>/plugins/**/*.ts',
'<rootDir>/schemes/**/*.ts',
'<rootDir>/store/**/*.ts',
'<rootDir>/utils/**/*.ts'
],
setupFiles: ['jest-canvas-mock', './jest.setup.ts']
};

View File

@ -23,11 +23,6 @@ const config: NuxtConfig = {
** See https://nuxtjs.org/api/configuration-modern ** See https://nuxtjs.org/api/configuration-modern
*/ */
modern: 'client', modern: 'client',
/**
* Source directory
* See https://nuxtjs.org/docs/2.x/configuration-glossary/configuration-srcdir/
*/
srcDir: 'client/',
/* /*
** Progress bar between routes ** Progress bar between routes
** See https://nuxtjs.org/api/configuration-loading ** See https://nuxtjs.org/api/configuration-loading

View File

@ -128,7 +128,7 @@ import Vue from 'vue';
import { mapActions } from 'vuex'; import { mapActions } from 'vuex';
import isEmpty from 'lodash/isEmpty'; import isEmpty from 'lodash/isEmpty';
import { SystemInfo } from '@jellyfin/client-axios'; import { SystemInfo } from '@jellyfin/client-axios';
import { version } from '~/package.json'; import { version } from '../../../package.json';
import htmlHelper from '~/mixins/htmlHelper'; import htmlHelper from '~/mixins/htmlHelper';
export default Vue.extend({ export default Vue.extend({

View File

@ -1,7 +1,7 @@
import { ActionTree, MutationTree } from 'vuex'; import { ActionTree, MutationTree } from 'vuex';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import { version } from '../../package.json';
import { browserDetector } from '~/plugins/browserDetection'; import { browserDetector } from '~/plugins/browserDetection';
import { version } from '~/package.json';
export interface DeviceState { export interface DeviceState {
deviceId: string; deviceId: string;

31
client/tsconfig.json Normal file
View File

@ -0,0 +1,31 @@
{
"compilerOptions": {
"target": "ES2018",
"module": "ESNext",
"moduleResolution": "Node",
"lib": ["ESNext", "ESNext.AsyncIterable", "DOM"],
"esModuleInterop": true,
"resolveJsonModule": true,
"allowJs": true,
"sourceMap": true,
"strict": true,
"noEmit": true,
"experimentalDecorators": true,
"baseUrl": ".",
"paths": {
"~/*": ["./*"],
"@/*": ["./*"]
},
"types": [
"@types/node",
"@nuxt/types",
"@types/nuxtjs__auth",
"@nuxtjs/axios",
"@nuxtjs/vuetify",
"@nuxtjs/date-fns",
"nuxt-i18n",
"@types/wicg-mediasession",
"jest"
]
}
}

View File

@ -2,7 +2,7 @@ import {
getShapeFromCollectionType, getShapeFromCollectionType,
getShapeFromItemType, getShapeFromItemType,
getLibraryIcon getLibraryIcon
} from '../items'; } from '~/utils/items';
describe('getLibraryIcon', () => { describe('getLibraryIcon', () => {
it('returns the correct library icon based on library type', () => { it('returns the correct library icon based on library type', () => {

View File

@ -1,29 +1,6 @@
module.exports = { module.exports = {
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/$1',
'^~/(.*)$': '<rootDir>/$1'
},
moduleFileExtensions: ['ts', 'js', 'vue', 'json'],
transform: {
'^.+\\.ts$': 'ts-jest',
'^.+\\.js$': 'babel-jest',
'.*\\.(vue)$': 'vue-jest'
},
collectCoverage: true, collectCoverage: true,
collectCoverageFrom: [ coverageReporters: ['text', 'cobertura', 'html', 'lcov'],
'<rootDir>/components/**/*.vue', projects: ['<rootDir>/client/jest.config.js'],
'<rootDir>/layouts/**/*.vue', testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$'
'<rootDir>/middleware/**/*.vue',
'<rootDir>/middleware/**/*.ts',
'<rootDir>/mixins/**/*.vue',
'<rootDir>/mixins/**/*.ts',
'<rootDir>/pages/**/*.vue',
'<rootDir>/plugins/**/*.ts',
'<rootDir>/schemes/**/*.ts',
'<rootDir>/store/**/*.ts',
'<rootDir>/utils/**/*.ts'
],
testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$',
setupFiles: ['jest-canvas-mock', './jest.setup.ts'],
coverageReporters: ['text', 'cobertura', 'html', 'lcov']
}; };

View File

@ -4,16 +4,16 @@
"version": "0.0.0", "version": "0.0.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "NUXT_SSR=1 nuxt", "dev": "NUXT_SSR=1 nuxt client",
"dev:static": "nuxt", "dev:static": "nuxt client",
"build": "NUXT_SSR=1 nuxt build", "build": "NUXT_SSR=1 nuxt build client",
"build:standalone": "NUXT_SSR=1 nuxt build --standalone", "build:standalone": "NUXT_SSR=1 nuxt build --standalone client",
"build:static": "nuxt build", "build:static": "nuxt build client",
"prod": "npm run build && npm run start", "prod": "npm run build client && npm run start client",
"prod:static": "npm run build:static && npm run start:static", "prod:static": "npm run build:static client && npm run start:static client",
"start": "NUXT_SSR=1 nuxt start", "start": "NUXT_SSR=1 nuxt start client",
"start:static": "nuxt start", "start:static": "nuxt start client",
"generate": "nuxt generate", "generate": "nuxt generate client",
"lint:js": "eslint --ext .ts,.js,.json,.vue .", "lint:js": "eslint --ext .ts,.js,.json,.vue .",
"lint:style": "stylelint **/*.{vue,css} --ignore-path .gitignore", "lint:style": "stylelint **/*.{vue,css} --ignore-path .gitignore",
"lint": "npm run lint:js && npm run lint:style", "lint": "npm run lint:js && npm run lint:style",

View File

@ -3,30 +3,11 @@
"target": "ES2018", "target": "ES2018",
"module": "ESNext", "module": "ESNext",
"moduleResolution": "Node", "moduleResolution": "Node",
"lib": ["ESNext", "ESNext.AsyncIterable", "DOM"], "lib": ["ESNext", "ESNext.AsyncIterable"],
"esModuleInterop": true,
"resolveJsonModule": true,
"allowJs": true,
"sourceMap": true,
"strict": true, "strict": true,
"noEmit": true, "noEmit": true,
"experimentalDecorators": true,
"baseUrl": ".", "baseUrl": ".",
"paths": { "types": ["@types/node"]
"~/*": ["./*"],
"@/*": ["./*"]
}, },
"types": [ "exclude": ["node_modules"]
"@types/node",
"@nuxt/types",
"@types/nuxtjs__auth",
"@nuxtjs/axios",
"@nuxtjs/vuetify",
"@nuxtjs/date-fns",
"nuxt-i18n",
"@types/wicg-mediasession",
"jest"
]
},
"exclude": ["node_modules", ".nuxt", "dist"]
} }

10
vetur.config.js Normal file
View File

@ -0,0 +1,10 @@
// vetur.config.js
/** @type {import('vls').VeturConfig} */
module.exports = {
projects: [
{
root: './client',
package: '../package.json'
}
]
};