proteum 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/AGENTS.md +9 -0
  2. package/cli/app/config.ts +61 -0
  3. package/cli/app/index.ts +227 -0
  4. package/cli/bin.js +35 -0
  5. package/cli/commands/build.ts +60 -0
  6. package/cli/commands/deploy/app.ts +29 -0
  7. package/cli/commands/deploy/web.ts +60 -0
  8. package/cli/commands/dev.ts +124 -0
  9. package/cli/commands/init.ts +85 -0
  10. package/cli/commands/refresh.ts +18 -0
  11. package/cli/compiler/client/identite.ts +69 -0
  12. package/cli/compiler/client/index.ts +343 -0
  13. package/cli/compiler/common/babel/index.ts +173 -0
  14. package/cli/compiler/common/babel/plugins/index.ts +0 -0
  15. package/cli/compiler/common/babel/plugins/services.ts +586 -0
  16. package/cli/compiler/common/babel/routes/imports.ts +127 -0
  17. package/cli/compiler/common/babel/routes/routes.ts +1170 -0
  18. package/cli/compiler/common/files/autres.ts +39 -0
  19. package/cli/compiler/common/files/images.ts +42 -0
  20. package/cli/compiler/common/files/style.ts +82 -0
  21. package/cli/compiler/common/index.ts +165 -0
  22. package/cli/compiler/index.ts +585 -0
  23. package/cli/compiler/server/index.ts +220 -0
  24. package/cli/index.ts +213 -0
  25. package/cli/paths.ts +165 -0
  26. package/cli/print.ts +12 -0
  27. package/cli/tsconfig.json +42 -0
  28. package/cli/utils/index.ts +22 -0
  29. package/cli/utils/keyboard.ts +78 -0
  30. package/client/app/index.ts +2 -0
  31. package/client/components/Dialog/Manager.tsx +3 -49
  32. package/client/components/Dialog/index.less +3 -1
  33. package/client/components/index.ts +1 -2
  34. package/client/services/router/index.tsx +6 -16
  35. package/common/errors/index.tsx +12 -31
  36. package/package.json +58 -22
  37. package/server/app/container/config.ts +20 -1
  38. package/server/app/container/console/index.ts +1 -1
  39. package/server/services/auth/index.ts +62 -27
  40. package/server/services/auth/router/request.ts +17 -6
  41. package/server/services/router/http/index.ts +3 -3
  42. package/server/services/router/response/index.ts +1 -1
  43. package/server/services/schema/request.ts +28 -10
  44. package/server/utils/slug.ts +0 -3
  45. package/tsconfig.common.json +2 -1
  46. package/types/global/constants.d.ts +12 -0
  47. package/changelog.md +0 -5
  48. package/client/components/Button.tsx +0 -298
  49. package/client/components/Dialog/card.tsx +0 -208
  50. package/client/data/input.ts +0 -32
  51. package/client/pages/bug.tsx.old +0 -60
  52. package/templates/composant.tsx +0 -40
  53. package/templates/form.ts +0 -30
  54. package/templates/modal.tsx +0 -47
  55. package/templates/modele.ts +0 -56
  56. package/templates/page.tsx +0 -74
  57. package/templates/route.ts +0 -43
  58. package/templates/service.ts +0 -75
  59. package/vscode/copyimportationpath/.eslintrc.json +0 -24
  60. package/vscode/copyimportationpath/.vscodeignore +0 -12
  61. package/vscode/copyimportationpath/CHANGELOG.md +0 -9
  62. package/vscode/copyimportationpath/README.md +0 -3
  63. package/vscode/copyimportationpath/copyimportationpath-0.0.1.vsix +0 -0
  64. package/vscode/copyimportationpath/out/extension.js +0 -206
  65. package/vscode/copyimportationpath/out/extension.js.map +0 -1
  66. package/vscode/copyimportationpath/package-lock.json +0 -4536
  67. package/vscode/copyimportationpath/package.json +0 -86
  68. package/vscode/copyimportationpath/src/extension.ts +0 -300
  69. package/vscode/copyimportationpath/tsconfig.json +0 -22
  70. package/vscode/copyimportationpath/vsc-extension-quickstart.md +0 -42
@@ -0,0 +1,18 @@
1
+ /*----------------------------------
2
+ - DEPENDANCES
3
+ ----------------------------------*/
4
+
5
+ // Configs
6
+ import Compiler from '../compiler';
7
+
8
+ /*----------------------------------
9
+ - COMMAND
10
+ ----------------------------------*/
11
+ export const run = (): Promise<void> => new Promise(async (resolve) => {
12
+
13
+ const compiler = new Compiler('dev');
14
+
15
+ await compiler.refreshGeneratedTypings();
16
+
17
+ resolve();
18
+ });
@@ -0,0 +1,69 @@
1
+ // Npm
2
+ import favicons from 'favicons';
3
+ import fs from 'fs-extra';
4
+
5
+ // Type
6
+ import type App from '../../app';
7
+
8
+ export default async ( app: App, outputDir: string, enabled: boolean = true ) => {
9
+
10
+ if (!enabled)
11
+ return;
12
+
13
+ if (!fs.existsSync(outputDir)) {
14
+
15
+ console.info(`Generating identity assets ...`);
16
+ fs.emptyDirSync(outputDir);
17
+
18
+ const identity = app.identity;
19
+
20
+ const response = await favicons( app.paths.root + '/client/assets/identity/logo.svg', {
21
+
22
+ path: '/assets/img/identite/favicons/',
23
+ appName: identity.name,
24
+ appShortName: identity.name,
25
+ appDescription: identity.description,
26
+ developerName: identity.author.name,
27
+ developerURL: identity.author.url,
28
+ dir: "auto",
29
+ lang: identity.language,
30
+ background: "#fff",
31
+ theme_color: identity.maincolor,
32
+ appleStatusBarStyle: "default",
33
+ display: "standalone",
34
+ orientation: "any",
35
+ //scope: "/",
36
+ start_url: "/",
37
+ version: identity.web.version,
38
+ logging: false,
39
+ pixel_art: false,
40
+ icons: {
41
+ android: true,
42
+ appleIcon: true,
43
+ appleStartup: false,
44
+ coast: false,
45
+ favicons: true,
46
+ windows: true,
47
+ yandex: false
48
+ }
49
+
50
+ });
51
+
52
+ await Promise.all([
53
+
54
+ // Enregistrement images
55
+ ...response.images.map((image) => {
56
+ let destimg = outputDir + '/' + image.name;
57
+ return fs.writeFile(destimg, image.contents);
58
+ }),
59
+
60
+ // Enregistrement fichiers
61
+ ...response.files.map((fichier) => {
62
+ let destfichier = outputDir + '/' + fichier.name;
63
+ return fs.writeFile(destfichier, fichier.contents);
64
+ })
65
+
66
+ ]);
67
+ }
68
+
69
+ }
@@ -0,0 +1,343 @@
1
+ /*----------------------------------
2
+ - DEPENDANCES
3
+ ----------------------------------*/
4
+
5
+ // Npm
6
+ import webpack from 'webpack';
7
+ import fs from 'fs-extra';
8
+ import path from 'path';
9
+
10
+ // Plugins
11
+ const TerserPlugin = require('terser-webpack-plugin');
12
+ // Optimisations
13
+ const BrotliCompression = require("brotli-webpack-plugin");
14
+ import CompressionPlugin from "compression-webpack-plugin";
15
+ const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin");
16
+ const imageminWebp = require('imagemin-webp');
17
+ const { extendDefaultPlugins } = require("svgo");
18
+ // Ressources
19
+ const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
20
+ import MiniCssExtractPlugin from "mini-css-extract-plugin";
21
+ import WebpackAssetsManifest from 'webpack-assets-manifest';
22
+ // Dev
23
+ import PreactRefreshPlugin from '@prefresh/webpack';
24
+
25
+ // Core
26
+ import createCommonConfig, { TCompileMode, TCompileOutputTarget, regex } from '../common';
27
+ import identityAssets from './identite';
28
+ import cli from '../..';
29
+
30
+ // Type
31
+ import type { App } from '../../app';
32
+
33
+ const debug = false;
34
+
35
+ /*----------------------------------
36
+ - CONFIG
37
+ ----------------------------------*/
38
+ export default function createCompiler(
39
+ app: App,
40
+ mode: TCompileMode,
41
+ outputTarget: TCompileOutputTarget = mode === 'dev' ? 'dev' : 'bin'
42
+ ): webpack.Configuration {
43
+
44
+ console.info(`Creating compiler for client (${mode}).`);
45
+ const dev = mode === 'dev';
46
+ const buildDev = dev && outputTarget === 'bin';
47
+ const outputPath = app.outputPath(outputTarget);
48
+
49
+ const commonConfig = createCommonConfig(app, 'client', mode, outputTarget);
50
+
51
+ // Smoke builds only validate compilation, so skip expensive static generation.
52
+ identityAssets(app, path.join(outputPath, 'public', 'app'), !buildDev);
53
+
54
+ // Symlinks to public
55
+ /*const publicDirs = fs.readdirSync(app.paths.root + '/public');
56
+ for (const publicDir of publicDirs)
57
+ fs.symlinkSync(
58
+ app.paths.root + '/public/' + publicDir,
59
+ app.paths.public + '/' + publicDir
60
+ );*/
61
+
62
+ // Convert tsconfig cli.paths to webpack aliases
63
+ const { aliases } = app.aliases.client.forWebpack({
64
+ modulesPath: app.paths.root + '/node_modules'
65
+ });
66
+
67
+ // We're not supposed in any case to import server libs from client
68
+ delete aliases["@server"];
69
+ delete aliases["@/server"];
70
+
71
+ debug && console.log("client aliases", aliases);
72
+ const config: webpack.Configuration = {
73
+
74
+ ...commonConfig,
75
+
76
+ name: 'client',
77
+ target: 'web',
78
+ entry: {
79
+ client: [
80
+ /*...(dev ? [
81
+ process.env.framework + '/cli/compilation/webpack/libs/webpackHotDevClient.js',
82
+ // https://github.com/webpack-contrib/webpack-hot-middleware#config
83
+ cli.paths.core.root + '/node_modules' + '/webpack-hot-middleware/client?name=client&reload=true',
84
+ ] : []),*/
85
+ cli.paths.core.root + '/client/index.ts'
86
+ ]
87
+ },
88
+
89
+ output: {
90
+
91
+ pathinfo: dev,
92
+ path: outputPath + '/public',
93
+ filename: '[name].js', // Output client.js
94
+ assetModuleFilename: '[hash][ext]',
95
+
96
+ chunkFilename: dev
97
+ ? '[name].js'
98
+ : '[id].[hash:8].js'
99
+ },
100
+
101
+ resolve: {
102
+
103
+ ...commonConfig.resolve,
104
+
105
+ alias: aliases,
106
+
107
+ // RAPPEL: on a besoin de résoudre les node_modules
108
+ extensions: [".mjs", '.ts', '.tsx', ".jsx", ".js", ".json", ".sql"],
109
+ },
110
+
111
+ module: {
112
+ // Make missing exports an error instead of warning
113
+ strictExportPresence: true,
114
+
115
+ rules: [
116
+ {
117
+ test: regex.scripts,
118
+ include: [
119
+
120
+ app.paths.root + '/client',
121
+ cli.paths.core.root + '/client',
122
+
123
+ app.paths.root + '/common',
124
+ cli.paths.core.root + '/common',
125
+
126
+ app.paths.root + '/server/.generated/models.ts',
127
+
128
+ ],
129
+ rules: require('../common/babel')(app, 'client', dev, buildDev)
130
+ },
131
+
132
+ // Les pages étan tà la fois compilées dans le bundle client et serveur
133
+ // On ne compile les ressources (css) qu'une seule fois
134
+ {
135
+ test: regex.style,
136
+ rules: require('../common/files/style')(app, dev, true, buildDev),
137
+
138
+ // Don't consider CSS imports dead code even if the
139
+ // containing package claims to have no side effects.
140
+ // Remove this when webpack adds a warning or an error for this.
141
+ // See https://github.com/webpack/webpack/issues/6571
142
+ sideEffects: true,
143
+ },
144
+
145
+ ...require('../common/files/images')(app, dev, true),
146
+
147
+ ...require('../common/files/autres')(app, dev, true),
148
+
149
+ // Exclude dev modules from production build
150
+ /*...(dev ? [] : [
151
+ {
152
+ test: app.paths.root + '/node_modules/react-deep-force-update/lib/index.js'),
153
+ loader: 'null-loader',
154
+ },
155
+ ]),*/
156
+ ],
157
+ },
158
+
159
+ plugins: [
160
+
161
+ ...(commonConfig.plugins || []),
162
+
163
+ ...((dev && false) ? [] : [
164
+ new MiniCssExtractPlugin({})
165
+ ]),
166
+
167
+ ...(buildDev ? [] : [
168
+ // Emit runtime asset manifests only for runnable builds.
169
+ new WebpackAssetsManifest({
170
+ output: outputPath + `/asset-manifest.json`,
171
+ publicPath: true,
172
+ writeToDisk: true, // Force la copie du fichier sur e disque, au lieu d'en mémoire en mode dev
173
+ customize: ({ key, value }) => {
174
+ // You can prevent adding items to the manifest by returning false.
175
+ if (key.toLowerCase().endsWith('.map')) return false;
176
+ return { key, value };
177
+ },
178
+ done: (manifest, stats) => {
179
+ // Write chunk-manifest.json.json
180
+ const chunkFileName = outputPath + `/chunk-manifest.json`;
181
+ try {
182
+ const fileFilter = file => !file.endsWith('.map');
183
+ const addPath = file => manifest.getPublicPath(file);
184
+ const chunkFiles = stats.compilation.chunkGroups.reduce((acc, c) => {
185
+ acc[c.name] = [
186
+ ...(acc[c.name] || []),
187
+ ...c.chunks.reduce(
188
+ (files, cc) => [
189
+ ...files,
190
+ ...[...cc.files].filter(fileFilter).map(addPath),
191
+ ],
192
+ [],
193
+ ),
194
+ ];
195
+ return acc;
196
+ }, Object.create(null));
197
+ fs.writeFileSync(chunkFileName, JSON.stringify(chunkFiles, null, 4));
198
+ } catch (err) {
199
+ console.error(`ERROR: Cannot write ${chunkFileName}: `, err);
200
+ if (!dev) process.exit(1);
201
+ }
202
+ },
203
+ })
204
+ ]),
205
+
206
+ ...(dev ? [
207
+
208
+ // HMR pour preact
209
+ //new PreactRefreshPlugin(),
210
+
211
+ ] : [
212
+
213
+ /*new MomentLocalesPlugin({
214
+ localesToKeep: ['fr'],
215
+ }),*/
216
+
217
+ /*new CompressionPlugin({
218
+ cache: true,
219
+ minRatio: 0.99
220
+ }),
221
+
222
+ new BrotliCompression({
223
+ algorithm: 'gzip',
224
+ test: /\.js$|\.css$|\.html$/,
225
+ threshold: 10240,
226
+ minRatio: 0.8,
227
+ })*/
228
+
229
+ /*new webpack.HashedModuleIdsPlugin({
230
+ hashFunction: 'sha256',
231
+ hashDigest: 'hex',
232
+ hashDigestLength: 20,
233
+ }),*/
234
+
235
+ /*new PurgecssPlugin({}),*/
236
+ ]),
237
+ ],
238
+
239
+ // CSP-safe in development: avoid any `eval`-based source map mode.
240
+ // https://webpack.js.org/configuration/devtool/#devtool
241
+ devtool: buildDev ? false : (dev ? 'cheap-module-source-map' : 'source-map'),
242
+ /*devServer: {
243
+ hot: true,
244
+ },*/
245
+
246
+ optimization: {
247
+
248
+ // Code splitting serveur = même que client
249
+ // La décomposition des chunks doit toujours être la même car le rendu des pages dépend de cette organisation
250
+
251
+ // https://webpack.js.org/plugins/split-chunks-plugin/#configuration
252
+ splitChunks: {
253
+
254
+ // This indicates which chunks will be selected for optimization
255
+ chunks: 'async',
256
+ // Minimum size, in bytes, for a chunk to be generated.
257
+ // Pour les imports async (ex: pages), on crée systématiquemen un chunk séparé
258
+ // Afin que le css d'une page ne soit appliqué qu'à la page concernée
259
+ cacheGroups: {
260
+ defaultVendors: {
261
+ test: (module) => {
262
+ // Check if the module is in node_modules but not in node_modules/proteum
263
+ return /[\\/]node_modules[\\/]/.test(module.context) && !/[\\/]node_modules[\\/]proteum[\\/]/.test(module.context);
264
+ },
265
+ priority: -10,
266
+ reuseExistingChunk: true,
267
+ },
268
+ default: {
269
+ minChunks: 2,
270
+ priority: -20,
271
+ reuseExistingChunk: true,
272
+ },
273
+ },
274
+ },
275
+
276
+ // Production
277
+ ...(dev ? {} : {
278
+
279
+ // https://github.com/react-boilerplate/react-boilerplate/blob/master/internals/webpack/webpack.prod.babel.js
280
+ minimize: true,
281
+ removeAvailableModules: true,
282
+ minimizer: [
283
+ new TerserPlugin({
284
+ terserOptions: {
285
+ parse: {
286
+ // We want terser to parse ecma 8 code. However, we don't want it
287
+ // to apply any minification steps that turns valid ecma 5 code
288
+ // into invalid ecma 5 code. This is why the 'compress' and 'output'
289
+ // sections only apply transformations that are ecma 5 safe
290
+ // https://github.com/facebook/create-react-app/pull/4234
291
+ ecma: 8,
292
+ },
293
+ compress: {
294
+ ecma: 5,
295
+ warnings: false,
296
+ // Disabled because of an issue with Uglify breaking seemingly valid code:
297
+ // https://github.com/facebook/create-react-app/issues/2376
298
+ // Pending further investigation:
299
+ // https://github.com/mishoo/UglifyJS2/issues/2011
300
+ comparisons: false,
301
+ // Disabled because of an issue with Terser breaking valid code:
302
+ // https://github.com/facebook/create-react-app/issues/5250
303
+ // Pending further investigation:
304
+ // https://github.com/terser-js/terser/issues/120
305
+ inline: 2,
306
+ },
307
+ mangle: {
308
+ safari10: true,
309
+ },
310
+ output: {
311
+ ecma: 5,
312
+ comments: false,
313
+ // Turned on because emoji and regex is not minified properly using default
314
+ // https://github.com/facebook/create-react-app/issues/2488
315
+ ascii_only: true,
316
+ },
317
+ }
318
+ }),
319
+
320
+ ...(dev ? [] : [
321
+ new CssMinimizerPlugin()
322
+ ]),
323
+
324
+ /*new ImageMinimizerPlugin({
325
+ // (optional) add generators; you can also just import &format=webp (see below)
326
+ generator: [
327
+ {
328
+ preset: "webp",
329
+ implementation: ImageMinimizerPlugin.imageminGenerate,
330
+ options: { plugins: ["imagemin-webp"] }
331
+ }
332
+ ]
333
+ })*/
334
+ ],
335
+ nodeEnv: 'production',
336
+ sideEffects: true,
337
+ }),
338
+
339
+ },
340
+ };
341
+
342
+ return config;
343
+ };
@@ -0,0 +1,173 @@
1
+ /*----------------------------------
2
+ - DEPENDANCES
3
+ ----------------------------------*/
4
+
5
+ // Npm
6
+ import type webpack from 'webpack';
7
+ import PresetBabel, { Options } from '@babel/preset-env';
8
+ import path from 'path';
9
+
10
+ import cli from '@cli';
11
+ import type { TAppSide, App } from '@cli/app';
12
+
13
+ /*----------------------------------
14
+ - REGLES
15
+ ----------------------------------*/
16
+ module.exports = (app: App, side: TAppSide, dev: boolean, buildDev: boolean = false): webpack.RuleSetRule[] => {
17
+
18
+ const babelPresetEnvConfig: Options = side === 'client' ? {
19
+
20
+ // Ajoute automatiquement les polyfills babel
21
+ // https://stackoverflow.com/a/61517521/12199605
22
+ "useBuiltIns": "usage", // alternative mode: "entry"
23
+ "corejs": 3, // default would be 2
24
+
25
+ targets: {
26
+ browsers: dev
27
+ ? 'last 2 versions'
28
+ : app.packageJson.browserslist,
29
+ },
30
+ forceAllTransforms: !dev, // for UglifyJS
31
+ modules: false,
32
+ debug: false,
33
+ bugfixes: !dev
34
+ } : {
35
+ targets: {
36
+ node: true,//pkg.engines.node.match(/(\d+\.?)+/)[0],
37
+ },
38
+ modules: false,
39
+ useBuiltIns: false,
40
+ debug: false,
41
+ }
42
+
43
+ return [{
44
+ loader: require.resolve('babel-loader'),
45
+ exclude: (filePath) => {
46
+ // 1) If not in "node_modules" at all => transpile it
47
+ if (!filePath.includes('node_modules')) {
48
+ return false;
49
+ }
50
+
51
+ // 2) If it’s "node_modules/proteum" but NOT "node_modules/proteum/node_modules",
52
+ // then transpile. Otherwise, exclude.
53
+ if (
54
+ filePath.includes('node_modules/proteum') &&
55
+ !filePath.includes('node_modules/proteum/node_modules')
56
+ ) {
57
+ return false;
58
+ }
59
+
60
+ // 3) Everything else in node_modules is excluded
61
+ return true;
62
+ },
63
+ options: {
64
+
65
+ // https://github.com/babel/babel-loader#options
66
+
67
+ // ATTENTION: Ne prend pas toujours compte des màj des plugins babel
68
+ cacheDirectory: (dev || cli.args.cache === true)
69
+ ? path.join(app.paths.cache, 'babel', side, buildDev ? 'build-dev' : (dev ? 'dev' : 'prod'))
70
+ : false,
71
+ // Désactive car ralenti compilation
72
+ cacheCompression: false,
73
+
74
+ compact: !dev,
75
+
76
+ // https://babeljs.io/docs/usage/options/
77
+ babelrc: false,
78
+ presets: [
79
+
80
+ // https://github.com/babel/babel-preset-env
81
+ [PresetBabel, babelPresetEnvConfig],
82
+
83
+ [require("@babel/preset-typescript"), {
84
+ useDefineForClassFields: true,
85
+ //jsxPragma: "h"
86
+ }],
87
+
88
+ // JSX
89
+ // https://github.com/babel/babel/tree/master/packages/babel-preset-react
90
+ [require('@babel/preset-react'), {
91
+ //pragma: "h"
92
+ development: dev
93
+ }],
94
+
95
+ ],
96
+ plugins: [
97
+
98
+ // NOTE: On résoud les plugins et presets directement ici
99
+ // Autrement, babel-loader les cherchera dans projet/node_modules
100
+
101
+ [require("@babel/plugin-proposal-decorators"), { "legacy": true }],
102
+
103
+ [require('@babel/plugin-proposal-class-properties'), { "loose": true }],
104
+
105
+ [require('@babel/plugin-proposal-private-methods'), { "loose": true }],
106
+
107
+ // Masque erreur associée à @babel/plugin-proposal-decorators legacy: true
108
+ [require('@babel/plugin-proposal-private-property-in-object'), { "loose": true }],
109
+
110
+ ...(dev ? [
111
+
112
+ ...(side === 'client' ? [
113
+
114
+
115
+ ] : [])
116
+
117
+ ] : [
118
+
119
+ // Les 3 plugins suivants sont tirés de https://github.com/jamiebuilds/babel-react-optimize
120
+
121
+ // Remove unnecessary React propTypes from the production build
122
+ // https://github.com/oliviertassinari/babel-plugin-transform-react-remove-prop-types
123
+ [require('babel-plugin-transform-react-remove-prop-types')],
124
+ // Treat React JSX elements as value types and hoist them to the highest scope
125
+ // https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-react-constant-elements
126
+ [require('@babel/plugin-transform-react-constant-elements')],
127
+
128
+ // Pour du tree shaking manuel
129
+ // https://www.npmjs.com/package/babel-plugin-transform-imports
130
+ [require("babel-plugin-transform-imports"), {
131
+ "lodash": {
132
+ "transform": "lodash/${member}",
133
+ "preventFullImport": true
134
+ }
135
+ }],
136
+
137
+ ...(side === 'client' ? [
138
+
139
+ [require('babel-plugin-transform-remove-console')],
140
+
141
+ ] : [])
142
+ ]),
143
+
144
+ require('./routes/routes')({ side, app, debug: false }),
145
+
146
+ ...(side === 'client' ? [
147
+
148
+ ] : [
149
+
150
+ require('./plugins/services')({ side, app, debug: false }),
151
+
152
+ ]),
153
+
154
+ // Allow to import multiple fiels with one import statement thanks to glob patterns
155
+ require('babel-plugin-glob-import')({
156
+ debug: false,
157
+ removeAliases: (source: string) => app.paths.withoutAlias(source, side)
158
+ }, [
159
+ // Routes imports on frontend side
160
+ require('./routes/imports')(app, side, dev)
161
+ ])
162
+ ],
163
+
164
+ overrides: [
165
+
166
+ ...(side === 'client' ? [
167
+
168
+ ] : [
169
+ ]),
170
+ ]
171
+ }
172
+ }]
173
+ }
File without changes