1
process.env.BABEL_ENV = 'production'
3
const path = require('node:path')
4
const fse = require('fs-extra')
5
const { build: esBuild } = require('esbuild')
7
const { version } = require('../package.json')
9
const buildConf = require('./build.conf')
10
const buildUtils = require('./build.utils')
11
const prepareDiff = require('./prepare-diff')
13
const vueNamedImportsCode = (() => {
26
const namedImports = [
28
'ref', 'computed', 'watch',
29
'isRef', 'toRaw', 'unref', 'reactive', 'shallowReactive',
31
'onActivated', 'onDeactivated',
32
'onBeforeMount', 'onMounted',
33
'onBeforeUnmount', 'onUnmounted',
34
'onBeforeUpdate', 'onUpdated',
38
'Transition', 'TransitionGroup', 'KeepAlive', 'Teleport',
42
'defineComponent', 'createApp'
45
return { contents: `const { ${ namedImports } } = window.Vue;export { ${ namedImports } };` }
48
const umdTempFilesList = []
49
const umdTargetAssetRE = /\.mjs$/
50
process.on('exit', () => {
51
umdTempFilesList.forEach(file => {
56
const rootFolder = path.resolve(__dirname, '..')
57
const resolve = file => path.resolve(rootFolder, file)
59
const quasarEsbuildPluginUmdGlobalExternals = {
60
name: 'quasar:umd-global-externals',
62
const namespace = 'Search for vueNamedImportsCode in /ui/build '
63
build.onResolve({ filter: /^vue$/ }, (args) => ({
69
{ filter: /.*/, namespace },
70
() => vueNamedImportsCode
81
__QUASAR_VERSION__: `'${ version }'`,
82
__QUASAR_SSR_SERVER__: 'false'
85
resolve('src/index.dev.js')
87
outfile: resolve('dist/quasar.esm.js')
97
__QUASAR_VERSION__: `'${ version }'`,
98
__QUASAR_SSR__: 'false',
99
__QUASAR_SSR_SERVER__: 'false',
100
__QUASAR_SSR_CLIENT__: 'false',
101
__QUASAR_SSR_PWA__: 'false'
104
resolve('src/index.prod.js')
106
outfile: resolve('dist/quasar.esm.prod.js')
116
__QUASAR_VERSION__: `'${ version }'`,
117
__QUASAR_SSR__: 'true',
118
__QUASAR_SSR_SERVER__: 'true',
119
__QUASAR_SSR_CLIENT__: 'false',
120
__QUASAR_SSR_PWA__: 'false'
123
resolve('src/index.ssr.js')
125
outfile: resolve('dist/quasar.cjs.prod.js')
132
__QUASAR_VERSION__: `'${ version }'`,
133
__QUASAR_SSR__: 'false',
134
__QUASAR_SSR_SERVER__: 'false',
135
__QUASAR_SSR_CLIENT__: 'false',
136
__QUASAR_SSR_PWA__: 'false'
139
resolve('src/index.umd.js')
141
outfile: resolve('dist/quasar.umd.js'),
142
plugins: [ quasarEsbuildPluginUmdGlobalExternals ]
150
__QUASAR_VERSION__: `'${ version }'`,
151
__QUASAR_SSR__: 'false',
152
__QUASAR_SSR_SERVER__: 'false',
153
__QUASAR_SSR_CLIENT__: 'false',
154
__QUASAR_SSR_PWA__: 'false'
157
resolve('src/index.umd.js')
159
outfile: resolve('dist/quasar.umd.prod.js'),
160
plugins: [ quasarEsbuildPluginUmdGlobalExternals ]
164
function genConfig (opts) {
167
packages: 'external',
168
target: [ 'es2022', 'firefox115', 'chrome115', 'safari14' ],
178
function build (builds) {
179
const promiseList = builds.map(genConfig)
180
.map(esbuildConfig => {
181
return esBuild(esbuildConfig).then(result => {
182
if (result.errors.length !== 0 || result.warnings.length !== 0) {
183
buildUtils.logError(`Errors encountered for ${ esbuildConfig.entryPoints[ 0 ] }`)
187
return buildUtils.writeFile(
188
esbuildConfig.outfile,
189
result.outputFiles[ 0 ].text,
190
esbuildConfig.minify === true
199
buildUtils.logError('Errors encountered during the esbuild compilation. Exiting...')
204
function addUmdAssets (builds, type, injectName) {
205
const files = fse.readdirSync(resolve(type))
207
files.forEach(file => {
208
if (umdTargetAssetRE.test(file) === false) return
211
.substring(0, file.length - 4)
212
.replace(/-([a-zA-Z])/g, g => g[ 1 ].toUpperCase())
214
const inputCode = fse.readFileSync(resolve(`${ type }/${ file }`), 'utf-8')
215
const tempFile = resolve(`dist/${ type }/temp.${ file }`)
217
umdTempFilesList.push(tempFile)
221
inputCode.replace('export default ', `window.Quasar.${ injectName }.${ name } = `),
231
outfile: addExtension(resolve(`dist/${ type }/${ file }`), 'umd.prod')
236
function addExtension (filename, ext = 'prod') {
237
const insertionPoint = filename.lastIndexOf('.')
238
const suffix = filename.slice(insertionPoint)
239
return `${ filename.slice(0, insertionPoint) }.${ ext }${ suffix === '.mjs' ? '.js' : suffix }`
244
require('./build.transforms').generate({ compact: true })
245
require('./build.icon-sets').generate()
247
addUmdAssets(builds, 'lang', 'lang')
248
addUmdAssets(builds, 'icon-set', 'iconSet')
252
const api = await require('./build.api').generate({ compact: true })
254
require('./build.vetur').generate({ api, compact: true })
255
require('./build.web-types').generate({ api, compact: true })
257
const quasarLangIndex = await require('./build.lang').generate()
258
require('./build.types').generate({ api, quasarLangIndex })
262
prepareDiff('dist/types/index.d.ts')
264
const api = await require('./build.api').generate()
266
const quasarLangIndex = await require('./build.lang').generate()
267
require('./build.types').generate({ api, quasarLangIndex })
271
await prepareDiff('dist/api')
272
require('./build.api').generate()
276
await prepareDiff('dist/vetur')
278
const api = await require('./build.api').generate({ compact: true })
279
require('./build.vetur').generate({ api })
283
await prepareDiff('dist/web-types')
285
const api = await require('./build.api').generate({ compact: true })
286
require('./build.web-types').generate({ api })
289
async transforms () {
290
await prepareDiff('dist/transforms')
291
require('./build.transforms').generate()
295
module.exports = function (subtype) {
296
if (runBuild[ subtype ] === void 0) {
297
console.log(` Unrecognized subtype specified: "${ subtype }".`)
298
console.log(` Available: ${ Object.keys(runBuild).join(' | ') }\n`)
302
runBuild[ subtype ]()