/* eslint-disable @typescript-eslint/no-var-requires */ 'use strict' /** * This file overrides the default services webpack config. * This services config enables the use of TypeScript. * * @override node_modules/cozy-scripts/config/webpack.config.services.js */ const webpack = require('webpack') const path = require('path') const fs = require('fs-extra') const paths = require('cozy-scripts/utils/paths') const { eslintFix, makeFilename, target, } = require('cozy-scripts/config/webpack.vars') const servicesFolder = paths.appServicesFolder() const servicesPaths = fs.existsSync(servicesFolder) ? fs.readdirSync(servicesFolder) : [] const servicesEntries = {} servicesPaths.forEach(file => { if (!file.match(/^[^.]*.ts$/)) return const filename = file.match(/^([^.]*).ts$/)[1] servicesEntries[filename] = path.resolve(path.join(servicesFolder, file)) }) const config = { __mergeStrategy: { smart: false, strategy: { plugins: 'replace', output: 'replace', entry: 'replace', optimization: 'replace', module: 'replace', externals: 'replace', }, }, entry: servicesEntries, output: { path: paths.appServicesBuild(), filename: `${makeFilename(false)}.js`, }, target: 'node', optimization: {}, // reset optimization property devtool: false, externals: [], // reset externals property module: { rules: [ { enforce: 'pre', test: /\.ts$/, loader: require.resolve('cozy-scripts/node_modules/eslint-loader'), exclude: /node_modules/, options: { extends: ['cozy-app'], fix: eslintFix, emitWarning: true, }, }, { test: /\.hbs$/, loader: 'handlebars-loader', }, { test: path.resolve(__dirname, 'node_modules/uglify-js/tools/node.js'), loader: 'null-loader', }, { test: /\.ts$/, exclude: /(node_modules|cozy-(bar|client-js))/, loader: require.resolve('cozy-scripts/node_modules/babel-loader'), options: { cacheDirectory: 'cozy-scripts/node_modules/.cache/babel-loader/node', babelrc: false, presets: [['cozy-app', { node: true, react: false }]], }, }, ], }, plugins: [ new webpack.DefinePlugin({ __TARGET__: JSON.stringify('services'), __IS_ALPHA__: false, }), ], } /* We don't build services if no services and if on mobile build */ const addServicesConfig = target === 'browser' && Object.keys(servicesEntries).length // only for browser target (services are usable only on cozy-stack) module.exports = addServicesConfig ? { multiple: { services: config } } : {}