Skip to content

Commit f011ca3

Browse files
IlCallorstoenescu
andauthored
feat(typescript): PR quasarframework#5944 and quasarframework#5815 already merged (quasarframework#6293)
* feat(typescript): introduce feature-flag * feat(typescript): add boot and configure helpers * docs(type helpers): add docs for `boot` and `configure` * feat(typescript): simplify electron-packager related types * fix(typescript): add fs-extra and yargs typings * build(app): regenerate feature flag files during build, if needed * docs(type-helpers): update required version * fix(typescript): apply feature flags correctly * feat(typescript): add cordova typings * feat(typescript): add Electron typings * Update index.umd.js * Update quasar-build * Update quasar-dev * Update types-feature-flags.js * Update types-feature-flags.js * Update boot-files.md * Update quasar-conf-js.md * Update quasar-conf-js.md * Update boot-files.md * fix(typescript): add shim to avoid TS errors when electron-builder is absent * feat(wrappers): move wrappers to their own module Co-authored-by: Razvan Stoenescu <razvan.stoenescu@gmail.com>
1 parent 4ab3606 commit f011ca3

38 files changed

+3079
-329
lines changed

app/bin/quasar-build

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ const Generator = require('../lib/generator')
113113
const artifacts = require('../lib/artifacts')
114114
const getQuasarCtx = require('../lib/helpers/get-quasar-ctx')
115115
const extensionRunner = require('../lib/app-extension/extensions-runner')
116+
const regenerateTypesFeatureFlags = require("../lib/helpers/types-feature-flags")
116117

117118
function parseWebpackConfig (webpackConfig, mode) {
118119
if (mode === 'ssr') {
@@ -173,6 +174,8 @@ async function build () {
173174
const webpackConfig = quasarConfig.getWebpackConfig()
174175
const buildConfig = quasarConfig.getBuildConfig()
175176

177+
regenerateTypesFeatureFlags(buildConfig)
178+
176179
let outputFolder = buildConfig.build.packagedDistDir ||
177180
buildConfig.build.distDir
178181

app/bin/quasar-dev

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ async function goLive () {
188188
const Generator = require('../lib/generator')
189189
const getQuasarCtx = require('../lib/helpers/get-quasar-ctx')
190190
const extensionRunner = require('../lib/app-extension/extensions-runner')
191+
const regenerateTypesFeatureFlags = require("../lib/helpers/types-feature-flags")
191192

192193
const ctx = getQuasarCtx({
193194
mode: argv.mode,
@@ -227,6 +228,8 @@ async function goLive () {
227228

228229
buildConfig = quasarConfig.getBuildConfig()
229230

231+
regenerateTypesFeatureFlags(buildConfig)
232+
230233
if (buildConfig.__vueDevtools !== false) {
231234
await startVueDevtools()
232235
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
const logger = require('./logger')
2+
const path = require('path')
3+
const warn = logger('app:mode', 'yellow')
4+
const fs = require('fs')
5+
const fse = require('fs-extra')
6+
const getMode = require('../mode/index')
7+
const appPaths = require('../app-paths')
8+
9+
function getStoreFlagPath(storeIndexPath) {
10+
return path.join(path.parse(storeIndexPath).dir, 'store-flag.d.ts')
11+
}
12+
13+
module.exports = function regenerateTypesFeatureFlags(buildConfig) {
14+
const storeFeatureData = [
15+
buildConfig.store,
16+
appPaths.resolve.cli('templates/app/store/store-flag.d.ts'),
17+
appPaths.resolve.app(getStoreFlagPath(buildConfig.sourceFiles.store))
18+
]
19+
20+
// Flags must be available even in pure JS codebases,
21+
// because boot and configure wrappers functions files will
22+
// provide autocomplete based on them also to JS users
23+
// Flags files should be copied over, for every enabled mode,
24+
// every time `quasar dev` and `quasar build` are run:
25+
// this automatize the upgrade for existing codebases
26+
for (const feature of [
27+
'pwa',
28+
'cordova',
29+
'capacitor',
30+
'electron',
31+
'ssr',
32+
'store'
33+
]) {
34+
const [isFeatureInstalled, sourceFlagPath, destFlagPath] = feature === 'store'
35+
? storeFeatureData
36+
: [
37+
getMode(feature).isInstalled,
38+
appPaths.resolve.cli(`templates/${feature}/${feature}-flag.d.ts`),
39+
appPaths.resolve[feature](`${feature}-flag.d.ts`)
40+
]
41+
42+
if (isFeatureInstalled && !fs.existsSync(destFlagPath)) {
43+
fse.copySync(sourceFlagPath, destFlagPath)
44+
warn(`'${feature}' feature flag was missing and has been regenerated`)
45+
}
46+
}
47+
}

app/package.json

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,21 @@
3838
"type": "github",
3939
"url": "https://donate.quasar.dev"
4040
},
41+
"//": "@types/fs-extra and @types/yargs are needed for electron-builder types",
42+
"///": "They can be removed when https://github.com/electron-userland/electron-builder/pull/4574#issuecomment-578484232 is released",
4143
"dependencies": {
4244
"@quasar/babel-preset-app": "1.1.8",
4345
"@quasar/fastclick": "1.1.4",
46+
"@types/cordova": "0.0.34",
47+
"@types/electron-packager": "14.0.0",
48+
"@types/express": "4.17.2",
49+
"@types/fs-extra": "8.0.1",
50+
"@types/lru-cache": "5.1.0",
51+
"@types/terser-webpack-plugin": "2.2.0",
52+
"@types/webpack": "4.41.0",
53+
"@types/webpack-bundle-analyzer": "2.13.3",
54+
"@types/webpack-dev-server": "3.9.0",
55+
"@types/yargs": "15.0.0",
4456
"@vue/preload-webpack-plugin": "1.1.1",
4557
"autoprefixer": "9.7.3",
4658
"chalk": "3.0.0",
@@ -101,7 +113,8 @@
101113
"webpack-dev-server": "3.10.1",
102114
"webpack-merge": "4.2.2",
103115
"webpack-node-externals": "1.7.2",
104-
"workbox-webpack-plugin": "4.3.1"
116+
"workbox-webpack-plugin": "4.3.1",
117+
"yargs": "15.1.0"
105118
},
106119
"engines": {
107120
"node": ">= 8.9.0",
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// THIS FEATURE-FLAG FILE IS AUTOGENERATED,
2+
// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING
3+
import "quasar/dist/types/feature-flag";
4+
5+
declare module "quasar/dist/types/feature-flag" {
6+
interface QuasarFeatureFlags {
7+
store: true;
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// THIS FEATURE-FLAG FILE IS AUTOGENERATED,
2+
// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING
3+
import "quasar/dist/types/feature-flag";
4+
5+
declare module "quasar/dist/types/feature-flag" {
6+
interface QuasarFeatureFlags {
7+
capacitor: true;
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// THIS FEATURE-FLAG FILE IS AUTOGENERATED,
2+
// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING
3+
import "quasar/dist/types/feature-flag";
4+
5+
declare module "quasar/dist/types/feature-flag" {
6+
interface QuasarFeatureFlags {
7+
cordova: true;
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// THIS FEATURE-FLAG FILE IS AUTOGENERATED,
2+
// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING
3+
import "quasar/dist/types/feature-flag";
4+
5+
declare module "quasar/dist/types/feature-flag" {
6+
interface QuasarFeatureFlags {
7+
electron: true;
8+
}
9+
}

app/templates/pwa/pwa-flag.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// THIS FEATURE-FLAG FILE IS AUTOGENERATED,
2+
// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING
3+
import "quasar/dist/types/feature-flag";
4+
5+
declare module "quasar/dist/types/feature-flag" {
6+
interface QuasarFeatureFlags {
7+
pwa: true;
8+
}
9+
}

app/templates/ssr/ssr-flag.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// THIS FEATURE-FLAG FILE IS AUTOGENERATED,
2+
// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING
3+
import "quasar/dist/types/feature-flag";
4+
5+
declare module "quasar/dist/types/feature-flag" {
6+
interface QuasarFeatureFlags {
7+
ssr: true;
8+
}
9+
}

0 commit comments

Comments
 (0)