diff --git a/packages/modern-browsers/modern.js b/packages/modern-browsers/modern.js index 6ec81cd07d..187fc33397 100644 --- a/packages/modern-browsers/modern.js +++ b/packages/modern-browsers/modern.js @@ -42,28 +42,32 @@ const browserAliases = { safari: ['appleMail'], }; -// Expand the given minimum versions by reusing chrome versions for -// chromeMobile (according to browserAliases above). +/** + * Expand the given minimum versions by reusing chrome versions for + * chromeMobile (according to browserAliases above). + * @param versions {object} + * @return {any} + */ function applyAliases(versions) { const lowerCaseVersions = Object.create(null); - Object.keys(versions).forEach(browser => { + for (const browser of Object.keys(versions)) { lowerCaseVersions[browser.toLowerCase()] = versions[browser]; - }); + } - Object.keys(browserAliases).forEach(original => { + for (let original of Object.keys(browserAliases)) { const aliases = browserAliases[original]; original = original.toLowerCase(); if (hasOwn.call(lowerCaseVersions, original)) { - aliases.forEach(alias => { + for (let alias of aliases) { alias = alias.toLowerCase(); if (!hasOwn.call(lowerCaseVersions, alias)) { lowerCaseVersions[alias] = lowerCaseVersions[original]; } - }); + } } - }); + } return lowerCaseVersions; } @@ -71,9 +75,15 @@ function applyAliases(versions) { // TODO Should it be possible for callers to setMinimumBrowserVersions to // forbid any version of a particular browser? -// Given a { name, major, minor, patch } object like the one provided by -// webapp via request.browser, return true if that browser qualifies as -// "modern" according to all requested version constraints. +/** + * @name ModernBrowsers.isModern + * @summary Given a { name, major, minor, patch } object like the one provided by + * webapp via request.browser, return true if that browser qualifies as + * "modern" according to all requested version constraints. + * @locus server + * @param [browser] {object} { name: string, major: number, minor?: number, patch?: number } + * @return {boolean} + */ function isModern(browser) { const lowerCaseName = browser && typeof browser.name === 'string' && browser.name.toLowerCase(); @@ -88,29 +98,44 @@ function isModern(browser) { ); } -// Any package that depends on the modern-browsers package can call this -// function to communicate its expectations for the minimum browser -// versions that qualify as "modern." The final decision between -// web.browser.legacy and web.browser will be based on the maximum of all -// requested minimum versions for each browser. +/** + * @name ModernBrowsers.setMinimumBrowserVersions + * @summary Any package that depends on the modern-browsers package can call this + * function to communicate its expectations for the minimum browser + * versions that qualify as "modern." The final decision between + * web.browser.legacy and web.browser builds will be based on the maximum of all + * requested minimum versions for each browser. + * @locus server + * @param versions {object} Name of the browser engine and minimum version for at which it is considered modern. For example: { + * chrome: 49, + * edge: 12, + * ie: 12, + * firefox: 45, + * mobileSafari: 10, + * opera: 38, + * safari: 10, + * electron: [1, 6], + * } + * @param source {function} Name of the capability that requires these minimums. + */ function setMinimumBrowserVersions(versions, source) { const lowerCaseVersions = applyAliases(versions); - Object.keys(lowerCaseVersions).forEach(lowerCaseName => { + for (const lowerCaseName of Object.keys(lowerCaseVersions)) { const version = lowerCaseVersions[lowerCaseName]; if ( hasOwn.call(minimumVersions, lowerCaseName) && !greaterThan(version, minimumVersions[lowerCaseName].version) ) { - return; + continue; } minimumVersions[lowerCaseName] = { version: copy(version), source: source || getCaller('setMinimumBrowserVersions'), }; - }); + } } function getCaller(calleeName) { @@ -127,12 +152,23 @@ function getCaller(calleeName) { return caller; } +/** + * @name ModernBrowsers.getMinimumBrowserVersions + * @summary Returns an object that lists supported browser engines and their minimum versions to be considered modern for Meteor. + * @locus server + * @return {object} + */ function getMinimumBrowserVersions() { return minimumVersions; } Object.assign(exports, { isModern, setMinimumBrowserVersions, getMinimumBrowserVersions, + /** + * @name ModernBrowsers.calculateHashOfMinimumVersions + * @summary Creates a hash of the object of minimum browser versions. + * @return {string} + */ calculateHashOfMinimumVersions() { const { createHash } = require('crypto'); return createHash('sha1') diff --git a/v3-docs/docs/.vitepress/config.mts b/v3-docs/docs/.vitepress/config.mts index 07d33f8773..28bcdf0478 100644 --- a/v3-docs/docs/.vitepress/config.mts +++ b/v3-docs/docs/.vitepress/config.mts @@ -338,6 +338,10 @@ export default defineConfig({ text: "markdown", link: "/packages/markdown", }, + { + text: "modern-browsers", + link: "/packages/modern-browsers", + }, { text: "modules", link: "/packages/modules", diff --git a/v3-docs/docs/api/packages-listing.md b/v3-docs/docs/api/packages-listing.md index c4624c061e..af44ae28cd 100644 --- a/v3-docs/docs/api/packages-listing.md +++ b/v3-docs/docs/api/packages-listing.md @@ -105,6 +105,7 @@ ### [mongo-dev-server](https://github.com/meteor/meteor/tree/devel/packages/mongo-dev-server) {#mongo-dev-server} ### [mongo-id](https://github.com/meteor/meteor/tree/devel/packages/mongo-id) {#mongo-id} ### [mongo-livedata](https://github.com/meteor/meteor/tree/devel/packages/mongo-livedata) {#mongo-livedata} +### [npm-bcrypt](https://github.com/meteor/meteor/tree/devel/packages/npm-bcrypt) {#npm-bcrypt} ### [npm-mongo](https://github.com/meteor/meteor/tree/devel/packages/npm-mongo) {#npm-mongo} ### [oauth](https://github.com/meteor/meteor/tree/devel/packages/oauth) {#oauth} ### [oauth-encryption](https://github.com/meteor/meteor/tree/devel/packages/oauth-encryption) {#oauth-encryption} diff --git a/v3-docs/docs/history.md b/v3-docs/docs/history.md index 90c3e20603..5316279451 100644 --- a/v3-docs/docs/history.md +++ b/v3-docs/docs/history.md @@ -11,7 +11,6 @@ This is a complete history of changes for Meteor releases. [//]: # (go to meteor/docs/generators/changelog/docs) - ## v3.1.1, 2025-01-15 ### Highlights @@ -83,6 +82,7 @@ N/A - [@quyetdgroup](https://github.com/quyetdgroup) ✨✨✨ + ## v3.1.0, 2024-11-20 ### Highlights diff --git a/v3-docs/docs/packages/modern-browsers.md b/v3-docs/docs/packages/modern-browsers.md new file mode 100644 index 0000000000..ae8d39d85d --- /dev/null +++ b/v3-docs/docs/packages/modern-browsers.md @@ -0,0 +1,19 @@ +# Modern-browsers + + +API for defining the boundary between modern and legacy JavaScript clients. + +You can use this package to define the minimum browser versions for which +a browser engine will be considered modern. All browsers that do not meet +the threshold will receive the legacy bundle. This way you can easily keep +on using modern features that you need. + +You can read more about this in [Meteor 1.7 announcement blog](https://blog.meteor.com/meteor-1-7-and-the-evergreen-dream-a8c1270b0901). + + + + + + + +