Releases: quasarframework/quasar
@quasar/app-vite-v1.9.4
Changes
- feat(app-vite): use newest ssl-skip package, depending on the Capacitor version #16808
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If you are interested in supporting this project, please consider the following:
@quasar/app-webpack-v4.0.0-beta.17
Changes
- feat(app-webpack): upgrade tsconfig preset (#17301)
- feat(app-webpack): use newest ssl-skip package, depending on the Capacitor version #16808
- feat(app-webpack): make SSR "create" function async #17235
- feat(app-webpack): make SSR "serveStaticContent" function async #17235
- feat(app-webpack): SSR -> remove ssrHandler() -> no longer needed, instead: directly use "app"
- feat(app-webpack): SSR -> improve production script named exports (handler, listenResult, app)
- feat(app-webpack): SSR -> greatly enhance server types (easier integration with some other webserver than the default express) #17235
SSR breaking change details
- /src-ssr/server.js > listen
- export const listen = ssrListen(async ({ app, port, isReady }) => {
+ // notice: no "isReady" param
+ // notice: ssrListen() param can still be async (below it isn't)
+ export const listen = ssrListen(({ app, devHttpsApp, port }) => {
- await isReady()
- return app.listen(port, () => {
+ const server = devHttpsApp || app
+ return server.listen(port, () => {
if (process.env.PROD) {
console.log('Server listening at port ' + port)
}
})
})
- /src-ssr/server.js > serveStaticContent
- /**
- * Should return middleware that serves the indicated path
- * with static content.
- */
- export const serveStaticContent = ssrServeStaticContent((path, opts) => {
- return express.static(path, { maxAge, ...opts });
- });
+ /**
+ * Should return a function that will be used to configure the webserver
+ * to serve static content at "urlPath" from "pathToServe" folder/file.
+ *
+ * Notice resolve.urlPath(urlPath) and resolve.public(pathToServe) usages.
+ *
+ * Can be async: ssrServeStaticContent(async ({ app, resolve }) => {
+ * Can return an async function: return async ({ urlPath = '/', pathToServe = '.', opts = {} }) => {
+ */
+ export const serveStaticContent = ssrServeStaticContent(({ app, resolve }) => {
+ return ({ urlPath = '/', pathToServe = '.', opts = {} }) => {
+ const serveFn = express.static(resolve.public(pathToServe), { maxAge, ...opts });
+ app.use(resolve.urlPath(urlPath), serveFn);
+ };
+ });
- For a serverless approach, this is how the "listen" part should look like:
export const listen = ssrListen(({ app, devHttpsApp, port }) => {
if (process.env.DEV) {
const server = devHttpsApp || app;
return server.listen(port, () => {
console.log('Server listening at port ' + port)
})
}
else { // in production
// return an object with a "handler" property
// that the server script will named-export
return { handler: app }
}
})
- For TS devs, you should also make a small change to your /src-ssr/middlewares files, like this:
+ import { Request, Response } from 'express';
// ...
- app.get(resolve.urlPath('*'), (req, res) => {
+ app.get(resolve.urlPath('*'), (req: Request, res: Response) => {
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If you are interested in supporting this project, please consider the following:
@quasar/app-vite-v2.0.0-beta.16
Changes
- feat(app-vite): upgrade tsconfig preset (#17301)
- feat(app-vite): use newest ssl-skip package, depending on the Capacitor version #16808
- feat(app-vite): make SSR "create" function async #17235
- feat(app-vite): make SSR "serveStaticContent" function async #17235
- feat(app-vite): SSR -> remove ssrHandler() -> no longer needed, instead: directly use "app"
- feat(app-vite): SSR -> improve production script named exports (handler, listenResult, app)
- feat(app-vite): SSR -> greatly enhance server types (easier integration with some other webserver than the default express) #17235
SSR breaking change details
- /src-ssr/server.js > listen
- export const listen = ssrListen(async ({ app, port, isReady }) => {
+ // notice: no "isReady" param
+ // notice: ssrListen() param can still be async (below it isn't)
+ export const listen = ssrListen(({ app, devHttpsApp, port }) => {
- await isReady()
- return app.listen(port, () => {
+ const server = devHttpsApp || app
+ return server.listen(port, () => {
if (process.env.PROD) {
console.log('Server listening at port ' + port)
}
})
})
- /src-ssr/server.js > serveStaticContent
- /**
- * Should return middleware that serves the indicated path
- * with static content.
- */
- export const serveStaticContent = ssrServeStaticContent((path, opts) => {
- return express.static(path, { maxAge, ...opts });
- });
+ /**
+ * Should return a function that will be used to configure the webserver
+ * to serve static content at "urlPath" from "pathToServe" folder/file.
+ *
+ * Notice resolve.urlPath(urlPath) and resolve.public(pathToServe) usages.
+ *
+ * Can be async: ssrServeStaticContent(async ({ app, resolve }) => {
+ * Can return an async function: return async ({ urlPath = '/', pathToServe = '.', opts = {} }) => {
+ */
+ export const serveStaticContent = ssrServeStaticContent(({ app, resolve }) => {
+ return ({ urlPath = '/', pathToServe = '.', opts = {} }) => {
+ const serveFn = express.static(resolve.public(pathToServe), { maxAge, ...opts });
+ app.use(resolve.urlPath(urlPath), serveFn);
+ };
+ });
- For a serverless approach, this is how the "listen" part should look like:
export const listen = ssrListen(({ app, devHttpsApp, port }) => {
if (process.env.DEV) {
const server = devHttpsApp || app;
return server.listen(port, () => {
console.log('Server listening at port ' + port)
})
}
else { // in production
// return an object with a "handler" property
// that the server script will named-export
return { handler: app }
}
})
- For TS devs, you should also make a small change to your /src-ssr/middlewares files, like this:
+ import { Request, Response } from 'express';
// ...
- app.get(resolve.urlPath('*'), (req, res) => {
+ app.get(resolve.urlPath('*'), (req: Request, res: Response) => {
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If you are interested in supporting this project, please consider the following:
quasar-v2.16.6
Fixes
- fix(ui): correctly apply iOS safe area padding when using q-tabs (#17055)
- fix(ui): avoid Sass warning by upgrading to latest specs in QSkeleton (no declaration after nested rule)
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If you are interested in supporting this project, please consider the following:
@quasar/app-webpack-v4.0.0-beta.16
Changes
- feat(app-webpack): upgrade deps (including esbuild)
- fix(app-webpack): async support in configure wrapper (fix: #17268) (#17291)
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If you are interested in supporting this project, please consider the following:
@quasar/app-vite-v2.0.0-beta.15
Changes
- feat(app-vite): upgrade deps (including esbuild)
- fix(app-vite): async support in configure wrapper (fix: #17268) (#17291)
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If you are interested in supporting this project, please consider the following:
@quasar/extras-v1.16.12
Changes
- feat(extras): update Fontawesome => v6.5.2
- feat(extras): upgrade Ionicons => v7.4.0
- feat(extras): Update Google fonts and icons to the latest
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If you are interested in supporting this project, please consider the following:
quasar-v2.16.5
Fixes
- fix(util): typescript declaration for humanStorageSize (#17240)
- fix(ui): prevent
@typescript-eslint/unbound-method
error on newer utilities types (#17251) - fix(ui): use correct list type for QSliderSlots (fix: #17060) (#17061)
- fix(ui): fix useId composable types (fix: #17284)
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If you are interested in supporting this project, please consider the following:
quasar-v2.16.4
Changes
- fix(ui): support for legacy build systems that don't know about "exports" field #17190
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If you are interested in supporting this project, please consider the following:
quasar-v2.16.3
Changes
- fix(QDate): transitions not working correctly #17183
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If you are interested in supporting this project, please consider the following: