quasar

Форк
0
/
build.transforms.js 
153 строки · 4.1 Кб
1
// Partly used with babel-plugin-transform-imports
2
// and by @quasar/app-* auto-import feature
3

4
const path = require('node:path')
5
const glob = require('fast-glob')
6

7
const root = path.resolve(__dirname, '..')
8
const resolvePath = file => path.resolve(root, file)
9
const { writeFile, kebabCase, filterTestFiles } = require('./build.utils')
10

11
function relative (name) {
12
  return path.relative(root, name).split('\\').join('/')
13
}
14

15
function getWithoutExtension (filename) {
16
  const insertionPoint = filename.lastIndexOf('.')
17
  return filename.slice(0, insertionPoint)
18
}
19

20
function lowerCamelCase (name) {
21
  return name.replace(/-([a-z])/g, g => g[ 1 ].toUpperCase())
22
}
23

24
function addComponents (map, autoImport) {
25
  glob.sync('src/components/**/Q*.js', { cwd: root, absolute: true })
26
    .filter(filterTestFiles)
27
    .map(relative)
28
    .forEach(file => {
29
      const
30
        name = getWithoutExtension(path.basename(file)),
31
        kebab = kebabCase(name)
32

33
      map[ name ] = file
34

35
      autoImport.kebabComponents.push(kebab)
36
      autoImport.pascalComponents.push(name)
37
      autoImport.importName[ name ] = name
38
      autoImport.importName[ kebab ] = name
39
    })
40
}
41

42
function addDirectives (map, autoImport) {
43
  glob.sync('src/directives/**/*.js', { cwd: root, absolute: true })
44
    .filter(filterTestFiles)
45
    .map(relative)
46
    .forEach(file => {
47
      const
48
        name = getWithoutExtension(path.basename(file)),
49
        kebab = 'v-' + kebabCase(name)
50

51
      map[ name ] = file
52

53
      autoImport.directives.push(kebab)
54
      autoImport.importName[ kebab ] = name
55
    })
56
}
57

58
function addPlugins (map) {
59
  glob.sync('src/plugins/*.js', { cwd: root, absolute: true })
60
    .filter(filterTestFiles)
61
    .map(relative)
62
    .forEach(file => {
63
      const name = getWithoutExtension(path.basename(file))
64
      map[ name ] = file
65
    })
66
}
67

68
function addComposables (map) {
69
  glob.sync('src/composables/*.js', { cwd: root, absolute: true })
70
    .filter(filterTestFiles)
71
    .map(relative)
72
    .forEach(file => {
73
      const name = getWithoutExtension(path.basename(file))
74
      map[ lowerCamelCase(name) ] = file
75
    })
76
}
77

78
function addUtils (map) {
79
  glob.sync('src/utils/*.js', { cwd: root, absolute: true })
80
    .filter(filterTestFiles)
81
    .map(relative)
82
    .forEach(file => {
83
      const name = getWithoutExtension(path.basename(file))
84
      map[ name === 'open-url' ? 'openURL' : lowerCamelCase(name) ] = file
85
    })
86
}
87

88
function getImportTransformationsContent () {
89
  return `const map = require('./import-map.json')
90

91
module.exports = function (importName) {
92
  const file = map[importName]
93
  if (file === void 0) {
94
    throw new Error('Unknown import from Quasar: ' + importName)
95
  }
96
  return 'quasar/' + file
97
}
98
`
99
}
100

101
function getAutoImportFile (autoImport, encodeFn) {
102
  autoImport.kebabComponents.sort((a, b) => (a.length > b.length ? -1 : 1))
103
  autoImport.pascalComponents.sort((a, b) => (a.length > b.length ? -1 : 1))
104
  autoImport.components = autoImport.kebabComponents.concat(autoImport.pascalComponents)
105
  autoImport.directives.sort((a, b) => (a.length > b.length ? -1 : 1))
106

107
  return encodeFn({
108
    importName: autoImport.importName,
109
    regex: {
110
      kebabComponents: '(' + autoImport.kebabComponents.join('|') + ')',
111
      pascalComponents: '(' + autoImport.pascalComponents.join('|') + ')',
112
      components: '(' + autoImport.components.join('|') + ')',
113
      directives: '(' + autoImport.directives.join('|') + ')'
114
    }
115
  })
116
}
117

118
module.exports.generate = function ({ compact = false } = {}) {
119
  const encodeFn = compact === true
120
    ? JSON.stringify
121
    : json => JSON.stringify(json, null, 2)
122

123
  const map = {
124
    Quasar: relative(resolvePath('src/vue-plugin.js'))
125
  }
126
  const autoImport = {
127
    kebabComponents: [],
128
    pascalComponents: [],
129
    directives: [],
130
    importName: {}
131
  }
132

133
  addComponents(map, autoImport)
134
  addDirectives(map, autoImport)
135
  addPlugins(map)
136
  addComposables(map)
137
  addUtils(map)
138

139
  writeFile(
140
    resolvePath('dist/transforms/import-map.json'),
141
    encodeFn(map)
142
  )
143

144
  writeFile(
145
    resolvePath('dist/transforms/import-transformation.js'),
146
    getImportTransformationsContent()
147
  )
148

149
  writeFile(
150
    resolvePath('dist/transforms/auto-import.json'),
151
    getAutoImportFile(autoImport, encodeFn)
152
  )
153
}
154

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

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

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

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