mirror of
https://github.com/jellyfin/jellyfin-vue.git
synced 2024-10-07 03:23:37 +00:00
build: fix imports and eslint config for use of src folder
This commit is contained in:
parent
5d298819f3
commit
0cec4bdf5f
85
.eslintrc.js
85
.eslintrc.js
@ -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']
|
||||||
},
|
},
|
||||||
settings: {
|
|
||||||
'import/resolver': {
|
|
||||||
nuxt: {
|
|
||||||
extensions: ['.js', '.ts', '.vue', '.json']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
overrides: [
|
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: {
|
||||||
|
'import/resolver': {
|
||||||
|
nuxt: {
|
||||||
|
extensions: ['.js', '.ts', '.vue', '.json'],
|
||||||
|
nuxtSrcDir: 'client/'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
files: ['**/*.spec.ts'],
|
files: ['**/*.spec.ts'],
|
||||||
plugins: ['jest', 'jest-formatting'],
|
plugins: ['jest', 'jest-formatting'],
|
||||||
|
19
.github/labeler.yml
vendored
19
.github/labeler.yml
vendored
@ -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'
|
||||||
|
]
|
||||||
|
2
.github/workflows/Dockerfile.nginx
vendored
2
.github/workflows/Dockerfile.nginx
vendored
@ -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
|
||||||
|
4
.github/workflows/Dockerfile.ssr
vendored
4
.github/workflows/Dockerfile.ssr
vendored
@ -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
|
||||||
|
6
.vscode/settings.json
vendored
6
.vscode/settings.json
vendored
@ -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"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
26
client/jest.config.js
Normal 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']
|
||||||
|
};
|
0
nuxt-i18n.d.ts → client/nuxt-i18n.d.ts
vendored
0
nuxt-i18n.d.ts → client/nuxt-i18n.d.ts
vendored
@ -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
|
@ -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({
|
||||||
|
@ -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
31
client/tsconfig.json
Normal 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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -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', () => {
|
||||||
|
0
vue-shims.d.ts → client/vue-shims.d.ts
vendored
0
vue-shims.d.ts → client/vue-shims.d.ts
vendored
@ -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']
|
|
||||||
};
|
};
|
||||||
|
20
package.json
20
package.json
@ -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",
|
||||||
|
@ -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": [
|
|
||||||
"@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"]
|
"exclude": ["node_modules"]
|
||||||
}
|
}
|
||||||
|
10
vetur.config.js
Normal file
10
vetur.config.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// vetur.config.js
|
||||||
|
/** @type {import('vls').VeturConfig} */
|
||||||
|
module.exports = {
|
||||||
|
projects: [
|
||||||
|
{
|
||||||
|
root: './client',
|
||||||
|
package: '../package.json'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user