quasar

Форк
0
146 строк · 4.1 Кб
1
// Inspired by @vue/babel-preset-app
2

3
const path = require('path')
4

5
const {
6
  default: getTargets,
7
  isRequired
8
} = require('@babel/helper-compilation-targets')
9

10
function getPolyfills (targets, userPolyfills = []) {
11
  // if no targets specified, include all default polyfills
12
  if (!userPolyfills.length || !targets || !Object.keys(targets).length) {
13
    return userPolyfills
14
  }
15

16
  const compatData = require('core-js-compat').data
17
  return userPolyfills.filter(item => isRequired(item, targets, { compatData }))
18
}
19

20
module.exports = (_, opts = {}) => {
21
  const presets = []
22
  const plugins = []
23

24
  const runtimePath = path.dirname(require.resolve('@babel/runtime/package.json'))
25
  const runtimeVersion = require('@babel/runtime/package.json').version
26

27
  const {
28
    polyfills: userPolyfills,
29
    loose = false,
30
    debug = false,
31
    useBuiltIns = 'usage',
32
    modules = false,
33
    bugfixes = true,
34
    targets: rawTargets,
35
    spec,
36
    include,
37
    exclude,
38
    shippedProposals,
39
    forceAllTransforms,
40
    decoratorsBeforeExport,
41
    decoratorsLegacy,
42

43
    // Undocumented option of @babel/plugin-transform-runtime.
44
    // When enabled, an absolute path is used when importing a runtime helper after transforming.
45
    // This ensures the transpiled file always use the runtime version required in this package.
46
    // However, this may cause hash inconsistency if the project is moved to another directory.
47
    // So here we allow user to explicit disable this option if hash consistency is a requirement
48
    // and the runtime version is sure to be correct.
49
    absoluteRuntime = runtimePath,
50

51
    // https://babeljs.io/docs/en/babel-plugin-transform-runtime#version
52
    // By default transform-runtime assumes that @babel/runtime@7.0.0-beta.0 is installed, which means helpers introduced later than 7.0.0-beta.0 will be inlined instead of imported.
53
    // See https://github.com/babel/babel/issues/10261
54
    // And https://github.com/facebook/docusaurus/pull/2111
55
    version = runtimeVersion
56
  } = opts
57

58
  let targets = getTargets(rawTargets)
59
  let polyfills = []
60

61
  if (useBuiltIns === 'usage') {
62
    polyfills = getPolyfills(targets, userPolyfills)
63

64
    if (polyfills.length > 0) {
65
      plugins.push([
66
        require('./polyfills'),
67
        { polyfills, useAbsolutePath: !!absoluteRuntime }
68
      ])
69
    }
70
  }
71

72
  const envOptions = {
73
    bugfixes,
74
    corejs: useBuiltIns ? require('core-js/package.json').version : false,
75
    spec,
76
    loose,
77
    debug,
78
    modules,
79
    targets,
80
    useBuiltIns,
81
    include,
82
    exclude: polyfills.concat(exclude || []),
83
    shippedProposals,
84
    forceAllTransforms
85
  }
86

87
  // pass options along to babel-preset-env
88
  presets.unshift([ require('@babel/preset-env'), envOptions ])
89

90
  plugins.push(
91
    // Stage 2
92
    [
93
      require('@babel/plugin-proposal-decorators'), {
94
        decoratorsBeforeExport,
95
        legacy: decoratorsLegacy !== false
96
      }
97
    ],
98
    [
99
      require('@babel/plugin-transform-class-properties'), {
100
        loose
101
      }
102
    ],
103
    require('@babel/plugin-proposal-function-sent'),
104
    require('@babel/plugin-transform-export-namespace-from'),
105
    require('@babel/plugin-transform-numeric-separator'),
106
    require('@babel/plugin-proposal-throw-expressions'),
107

108
    // Stage 3
109
    require('@babel/plugin-syntax-dynamic-import'),
110
    require('@babel/plugin-syntax-import-meta'),
111
    require('@babel/plugin-transform-json-strings'),
112

113
    // Transform runtime, but only for helpers
114
    [
115
      require('@babel/plugin-transform-runtime'), {
116
        regenerator: useBuiltIns !== 'usage',
117

118
        // polyfills are injected by preset-env & polyfillsPlugin, so no need to add them again
119
        corejs: false,
120

121
        helpers: useBuiltIns === 'usage',
122
        useESModules: false,
123

124
        absoluteRuntime,
125

126
        version
127
      }
128
    ]
129
  )
130

131
  return {
132
    sourceType: 'unambiguous',
133
    overrides: [{
134
      exclude: [ /@babel[\/|\\\\]runtime/, /core-js/ ],
135
      presets,
136
      plugins
137
    }, {
138
      // there are some untranspiled code in @babel/runtime
139
      // https://github.com/babel/babel/issues/9903
140
      include: [ /@babel[\/|\\\\]runtime/ ],
141
      presets: [
142
        [ require('@babel/preset-env'), envOptions ]
143
      ]
144
    }]
145
  }
146
}
147

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.