build: provide Typescript support in Vue SFC files

Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
This commit is contained in:
Maksim Sukharev 2024-02-25 15:35:59 +01:00
parent 89e20d99c8
commit ec9e5d9ec5
No known key found for this signature in database
GPG key ID: 6349D071889BD1D5
4 changed files with 28 additions and 2 deletions

View file

@ -1,6 +1,7 @@
module.exports = { module.exports = {
extends: [ extends: [
'@nextcloud', '@nextcloud',
'@nextcloud/eslint-config/typescript',
], ],
globals: { globals: {
// @nextcloud/webpack-vue-config globals // @nextcloud/webpack-vue-config globals
@ -12,6 +13,7 @@ module.exports = {
rules: { rules: {
'comma-dangle': 'off', 'comma-dangle': 'off',
'jsdoc/no-defaults': 'off', 'jsdoc/no-defaults': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'import/newline-after-import': 'warn', 'import/newline-after-import': 'warn',
'import/no-named-as-default-member': 'off', 'import/no-named-as-default-member': 'off',
'import/order': [ 'import/order': [

View file

@ -86,6 +86,12 @@ module.exports = {
}, },
transform: { transform: {
'\\.ts$': ['ts-jest', {
useESM: true,
tsconfig: {
verbatimModuleSyntax: false,
},
}],
'\\.js$': 'babel-jest', '\\.js$': 'babel-jest',
'\\.vue$': '@vue/vue2-jest', '\\.vue$': '@vue/vue2-jest',
'\\.tflite$': 'jest-transform-stub', '\\.tflite$': 'jest-transform-stub',

View file

@ -1,14 +1,20 @@
{ {
"include": ["./src/**/*.ts"], "include": ["./src/**/*.ts", "./src/**/*.vue"],
"exclude": ["node_modules", "vendor"], "exclude": ["node_modules", "vendor"],
"compilerOptions": { "compilerOptions": {
"outDir": "./js", "outDir": "./js",
"allowJs": true, "allowJs": true,
"module": "CommonJS", "checkJs": true,
"allowImportingTsExtensions": true,
"lib": ["ESNext"],
"module": "ESNext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"verbatimModuleSyntax": true, "verbatimModuleSyntax": true,
"target": "ES2020", "target": "ES2020",
"esModuleInterop": true, "esModuleInterop": true,
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
},
"vueCompilerOptions": {
"target": 2.7,
} }
} }

View file

@ -31,6 +31,7 @@ module.exports = mergeWithRules({
test: 'match', test: 'match',
loader: 'replace', loader: 'replace',
options: 'replace', options: 'replace',
use: 'replace',
}, },
}, },
})({ })({
@ -62,6 +63,17 @@ module.exports = mergeWithRules({
'webdav', 'webdav',
]), ]),
}, },
{
test: /\.tsx?$/,
use: [{
loader: 'esbuild-loader',
options: {
// Implicitly set as TS loader so only <script lang="ts"> Vue SFCs will be transpiled
loader: 'ts',
target: 'es2020',
},
}]
},
{ {
test: /\.wasm$/i, test: /\.wasm$/i,
type: 'asset/resource', type: 'asset/resource',