Welcome to mirror list, hosted at ThFree Co, Russian Federation.

rollup.config.js - gitlab.com/gitlab-org/gitlab-docs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 26bd7352cd54620e91b4a34d191ab1630fbf1309 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
const json = require('@rollup/plugin-json');
const { nodeResolve } = require('@rollup/plugin-node-resolve');
const replace = require('@rollup/plugin-replace');
const { globSync } = require('glob');
const commonjs = require('@rollup/plugin-commonjs');
const { babel } = require('@rollup/plugin-babel');
const css = require('rollup-plugin-import-css');
const url = require('@rollup/plugin-url');
const vue = require('@vitejs/plugin-vue2');
const copy = require('rollup-plugin-copy');
const terser = require('@rollup/plugin-terser');
const yaml = require('@rollup/plugin-yaml');

function mapDirectory(file) {
  return file.replace('content/', 'public/');
}

const vendorDir = './public/assets/vendor'; // Global assets are copied here
const searchBackend = process.env.SEARCH_BACKEND || 'google';

module.exports = globSync('content/frontend/**/*.js')
  // Drop search bundles that aren't required in this build.
  .filter((file) => {
    const fileName = file.split('/').pop();
    return (
      fileName.startsWith(searchBackend) ||
      (!fileName.startsWith('google') && !fileName.startsWith('lunr'))
    );
  })
  .map((file) => ({
    input: file,
    output: {
      file: mapDirectory(file),
      format: 'iife',
      name: file,
      inlineDynamicImports: true,
      globals: {
        vue: 'Vue',
        jquery: '$',
      },
    },
    external: ['vue', 'jquery'],
    cache: true,
    plugins: [
      nodeResolve({ browser: true, preferBuiltins: false }),
      commonjs(),
      vue(),
      url({
        destDir: 'public/assets/images',
        publicPath: '/assets/images/',
        fileName: 'icons.svg',
      }),
      babel({
        exclude: 'node_modules/**',
        babelHelpers: 'bundled',
      }),
      json(),
      css(),
      replace({
        preventAssignment: true,
        'process.env.NODE_ENV': JSON.stringify('production'),
      }),
      terser(),
      yaml(),
      copy({
        copyOnce: true,
        hook: 'closeBundle',
        targets: [
          {
            src: './node_modules/mermaid/dist/mermaid.min.js*',
            dest: vendorDir,
          },
          {
            src: './node_modules/vue/dist/vue.min.js',
            dest: vendorDir,
          },
          {
            src: './node_modules/lunr/lunr.min.js',
            dest: vendorDir,
          },
          {
            src: './node_modules/jquery/dist/jquery.slim.min.js',
            dest: vendorDir,
          },
          {
            src: './node_modules/bootstrap/dist/js/bootstrap.bundle.min.js*',
            dest: vendorDir,
          },
          {
            src: './node_modules/@gitlab/ui/dist/utility_classes.css*',
            dest: vendorDir,
          },
          {
            src: './node_modules/@gitlab/ui/dist/index.css*',
            dest: vendorDir,
          },
          {
            src: './node_modules/@gitlab/fonts/gitlab-sans/GitLabSans*.woff2',
            dest: vendorDir,
          },
          {
            src: './node_modules/@gitlab/fonts/gitlab-mono/GitLabMono*.woff2',
            dest: vendorDir,
          },
        ],
      }),
    ],
    onwarn(warning, warn) {
      // Ignore known issues from third-party code.
      const ignoreMap = {
        CIRCULAR_DEPENDENCY: ['@gitlab/ui'],
        INVALID_ANNOTATION: ['bootstrap-vue'],
      };
      const ignoredKeywords = ignoreMap[warning.code] || [];
      if (!ignoredKeywords.some((keyword) => warning.message.includes(keyword))) {
        warn(warning);
      }
    },
  }));