4
const path = require('node:path')
5
const glob = require('fast-glob')
7
const root = path.resolve(__dirname, '..')
8
const resolvePath = file => path.resolve(root, file)
9
const { writeFile, kebabCase, filterTestFiles } = require('./build.utils')
11
function relative (name) {
12
return path.relative(root, name).split('\\').join('/')
15
function getWithoutExtension (filename) {
16
const insertionPoint = filename.lastIndexOf('.')
17
return filename.slice(0, insertionPoint)
20
function lowerCamelCase (name) {
21
return name.replace(/-([a-z])/g, g => g[ 1 ].toUpperCase())
24
function addComponents (map, autoImport) {
25
glob.sync('src/components/**/Q*.js', { cwd: root, absolute: true })
26
.filter(filterTestFiles)
30
name = getWithoutExtension(path.basename(file)),
31
kebab = kebabCase(name)
35
autoImport.kebabComponents.push(kebab)
36
autoImport.pascalComponents.push(name)
37
autoImport.importName[ name ] = name
38
autoImport.importName[ kebab ] = name
42
function addDirectives (map, autoImport) {
43
glob.sync('src/directives/**/*.js', { cwd: root, absolute: true })
44
.filter(filterTestFiles)
48
name = getWithoutExtension(path.basename(file)),
49
kebab = 'v-' + kebabCase(name)
53
autoImport.directives.push(kebab)
54
autoImport.importName[ kebab ] = name
58
function addPlugins (map) {
59
glob.sync('src/plugins/*.js', { cwd: root, absolute: true })
60
.filter(filterTestFiles)
63
const name = getWithoutExtension(path.basename(file))
68
function addComposables (map) {
69
glob.sync('src/composables/*.js', { cwd: root, absolute: true })
70
.filter(filterTestFiles)
73
const name = getWithoutExtension(path.basename(file))
74
map[ lowerCamelCase(name) ] = file
78
function addUtils (map) {
79
glob.sync('src/utils/*.js', { cwd: root, absolute: true })
80
.filter(filterTestFiles)
83
const name = getWithoutExtension(path.basename(file))
84
map[ name === 'open-url' ? 'openURL' : lowerCamelCase(name) ] = file
88
function getImportTransformationsContent () {
89
return `const map = require('./import-map.json')
91
module.exports = function (importName) {
92
const file = map[importName]
93
if (file === void 0) {
94
throw new Error('Unknown import from Quasar: ' + importName)
96
return 'quasar/' + file
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))
108
importName: autoImport.importName,
110
kebabComponents: '(' + autoImport.kebabComponents.join('|') + ')',
111
pascalComponents: '(' + autoImport.pascalComponents.join('|') + ')',
112
components: '(' + autoImport.components.join('|') + ')',
113
directives: '(' + autoImport.directives.join('|') + ')'
118
module.exports.generate = function ({ compact = false } = {}) {
119
const encodeFn = compact === true
121
: json => JSON.stringify(json, null, 2)
124
Quasar: relative(resolvePath('src/vue-plugin.js'))
128
pascalComponents: [],
133
addComponents(map, autoImport)
134
addDirectives(map, autoImport)
140
resolvePath('dist/transforms/import-map.json'),
145
resolvePath('dist/transforms/import-transformation.js'),
146
getImportTransformationsContent()
150
resolvePath('dist/transforms/auto-import.json'),
151
getAutoImportFile(autoImport, encodeFn)