From ae97171daf61975e4e21da861f073332907434c4 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sun, 6 Sep 2020 17:07:59 +0200 Subject: [PATCH 1/5] Start work on deprecation flag for packages --- tools/cli/commands-packages-query.js | 13 ++++++++++++- tools/console/console.js | 2 +- tools/isobuild/package-namespace.js | 9 ++++++++- tools/isobuild/package-source.js | 7 ++++++- tools/packaging/package-map.js | 8 ++++++++ 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/tools/cli/commands-packages-query.js b/tools/cli/commands-packages-query.js index 2e68a79d76..9848c4966e 100644 --- a/tools/cli/commands-packages-query.js +++ b/tools/cli/commands-packages-query.js @@ -762,6 +762,7 @@ _.extend(PackageQuery.prototype, { // - exports: a PkgExports object, representing package exports. // - exports: a PkgImplies object, representing package implies. // - dependencies: a PkgDependencies object, representing dependencies. + // - deprecated: If the package has been deprecated or not _displayVersion: function (data) { var self = this; Console.info( @@ -823,6 +824,16 @@ _.extend(PackageQuery.prototype, { Console.command("'meteor show " + data.name + "@" + data.version + "'"), "from outside the project."); } + + // Display deprecation message + if (data.deprecated) { + Console.info(); + if (data.deprecatedMessage) { + Console.info(data.deprecatedMessage); + } else { + Console.info('This packages has been DEPRECATED.'); + } + } }, // Returns a user-friendly object from this PackageQuery to the caller. Takes // in a data object with the same keys as _displayVersion. @@ -1124,7 +1135,7 @@ _.extend(ReleaseQuery.prototype, { recommended: versionRecord.recommended, orderKey: versionRecord.orderKey, publishedBy: versionRecord.publishedBy["username"], - pubishedOn: publishDate, + publishedOn: publishDate, packages: versionRecord.packages, tool: versionRecord.tool }; diff --git a/tools/console/console.js b/tools/console/console.js index 4c96edfe81..46581c2a37 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -1069,7 +1069,7 @@ class Console extends ConsoleBase { // level with Console.LEVEL_INFO, Console.LEVEL_ERROR, etc. // - ignoreWidth: ignore the width of the terminal, and go over the // character limit instead of trailing off with '...'. Useful for - // printing directories, for examle. + // printing directories, for example. // - indent: indent the entire table by a given number of spaces. printTwoColumns(rows, options) { options = options || Object.create(null); diff --git a/tools/isobuild/package-namespace.js b/tools/isobuild/package-namespace.js index e37e61838f..0df74b628a 100644 --- a/tools/isobuild/package-namespace.js +++ b/tools/isobuild/package-namespace.js @@ -53,6 +53,8 @@ export class PackageNamespace { * will ONLY be bundled into production builds. * @param {Boolean} options.testOnly A package with this flag set to true * will ONLY be bundled as part of `meteor test`. + * @param {Boolean|String} options.deprecated A flag that will mark the + * package as deprecated. Provide string to override the default message. */ describe(options) { const source = this._packageSource; @@ -128,7 +130,7 @@ export class PackageNamespace { // * These flags CAN cause different package load orders in // development and production! We should probably fix this. // Basically, packages that are excluded from the build using - // these flags are also excluded fro the build order calculation, + // these flags are also excluded from the build order calculation, // and that's the problem // // * We should consider publicly documenting these flags, since they @@ -139,6 +141,11 @@ export class PackageNamespace { source.prodOnly = !!value; } else if (key === "testOnly") { source.testOnly = !!value; + } else if (key === "deprecated") { + if (typeof(value) !== "string") { + source.deprecatedMessage = value; + } + source.deprecated = true; } else { // Do nothing. We might want to add some keys later, and we should err // on the side of backwards compatibility. diff --git a/tools/isobuild/package-source.js b/tools/isobuild/package-source.js index 253c5fda18..0d5af2d078 100644 --- a/tools/isobuild/package-source.js +++ b/tools/isobuild/package-source.js @@ -74,7 +74,7 @@ var loadOrderSort = function (sourceProcessorSet, arch) { return false; default: - throw Error(`surprising type ${classification.type} for ${filename}`); + throw Error(`Surprising type ${classification.type} for ${filename}`); } }); @@ -379,6 +379,11 @@ var PackageSource = function () { // specify the correct restrictions at 0.90. // XXX: 0.90 package versions. self.isCore = false; + + // Flags for Atmosphere and developers to mark if deprecated packages + // and provide additional info. + self.deprecated = false; + self.deprecatedMessage = null; }; diff --git a/tools/packaging/package-map.js b/tools/packaging/package-map.js index a5b3f51fff..9fc8000b6e 100644 --- a/tools/packaging/package-map.js +++ b/tools/packaging/package-map.js @@ -267,6 +267,14 @@ _.extend(exports.PackageMapDelta.prototype, { description = "downgraded from " + info.oldVersion + " to " + info.newVersion; } + + if (info.deprecated) { + name += ' - DEPRECATED'; + if (info.deprecatedMessage) { + description += ' - ' + info.deprecatedMessage; + } + } + displayItems.push({ name: name, description: description }); }); From 809f0f5b63642ee107b015e0b74839e025967701 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Fri, 19 Mar 2021 11:41:22 +0100 Subject: [PATCH 2/5] List deprecated messages in the console --- tools/cli/commands-packages-query.js | 3 ++- tools/cli/commands-packages.js | 18 ++++++++++++++++-- tools/isobuild/package-namespace.js | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/tools/cli/commands-packages-query.js b/tools/cli/commands-packages-query.js index 9848c4966e..9c5a5213f1 100644 --- a/tools/cli/commands-packages-query.js +++ b/tools/cli/commands-packages-query.js @@ -762,7 +762,8 @@ _.extend(PackageQuery.prototype, { // - exports: a PkgExports object, representing package exports. // - exports: a PkgImplies object, representing package implies. // - dependencies: a PkgDependencies object, representing dependencies. - // - deprecated: If the package has been deprecated or not + // - deprecated: If the package has been deprecated or not. + // - deprecatedMessage: Optional message from the deprecated package for the users. _displayVersion: function (data) { var self = this; Console.info( diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 5ae2ad2b81..12433a786b 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -1953,6 +1953,7 @@ main.registerCommand({ var nonlatestDirectDeps = []; var nonlatestIndirectDeps = []; + var deprecatedDeps = []; projectContext.packageMap.eachPackage(function (name, info) { var selectedVersion = info.version; var catalog = projectContext.projectCatalog; @@ -1966,6 +1967,13 @@ main.registerCommand({ nonlatestIndirectDeps.push(rec); } } + if (info.packageSource && info.packageSource.deprecated) { + deprecatedDeps.push({ + name: name, + selectedVersion: selectedVersion, + message: info.packageSource.deprecatedMessage + }) + } }); var printItem = function (rec) { Console.info(" * " + rec.name + " " + rec.selectedVersion + @@ -1974,12 +1982,18 @@ main.registerCommand({ if (nonlatestDirectDeps.length) { Console.info("\nThe following top-level dependencies were not updated " + "to the very latest version available:"); - _.each(nonlatestDirectDeps, printItem); + nonlatestDirectDeps.forEach(printItem); + } + if(deprecatedDeps.length) { + Console.info("\nThe following packages have been DEPRECATED. Please consider finding replacements for them."); + deprecatedDeps.forEach(function (item) { + Console.info(" * " + item.name + " " + item.selectedVersion + " " + (item.deprecatedMessage || "")); + }) } if (nonlatestIndirectDeps.length) { Console.info("\nNewer versions of the following indirect dependencies" + " are available:"); - _.each(nonlatestIndirectDeps, printItem); + nonlatestIndirectDeps.forEach(printItem); Console.info([ "These versions may not be compatible with your project.", "To update one or more of these packages to their latest", diff --git a/tools/isobuild/package-namespace.js b/tools/isobuild/package-namespace.js index 0df74b628a..3f1c4492dd 100644 --- a/tools/isobuild/package-namespace.js +++ b/tools/isobuild/package-namespace.js @@ -142,7 +142,7 @@ export class PackageNamespace { } else if (key === "testOnly") { source.testOnly = !!value; } else if (key === "deprecated") { - if (typeof(value) !== "string") { + if (typeof(value) === "string") { source.deprecatedMessage = value; } source.deprecated = true; From 00b77f20c55532a921abbb22bf38d710e4b04870 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Fri, 19 Mar 2021 11:54:28 +0100 Subject: [PATCH 3/5] Fix var typo and improve deprecated message display --- tools/cli/commands-packages.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 12433a786b..a83a142dd8 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -1971,7 +1971,7 @@ main.registerCommand({ deprecatedDeps.push({ name: name, selectedVersion: selectedVersion, - message: info.packageSource.deprecatedMessage + deprecatedMessage: info.packageSource.deprecatedMessage }) } }); @@ -1987,7 +1987,7 @@ main.registerCommand({ if(deprecatedDeps.length) { Console.info("\nThe following packages have been DEPRECATED. Please consider finding replacements for them."); deprecatedDeps.forEach(function (item) { - Console.info(" * " + item.name + " " + item.selectedVersion + " " + (item.deprecatedMessage || "")); + Console.info(" * " + item.name + " " + item.selectedVersion + " " + (item.deprecatedMessage ? "(" + item.deprecatedMessage + ")" : "")); }) } if (nonlatestIndirectDeps.length) { From 317a8f397e2fcd170e3fbf66d5486a70ea6899fe Mon Sep 17 00:00:00 2001 From: filipenevola Date: Wed, 31 Mar 2021 12:09:00 -0400 Subject: [PATCH 4/5] Deprecation flag for packages - loading fields to local catalog - sending new fields to Troposphere --- tools/packaging/catalog/catalog-local.js | 4 ++++ tools/packaging/package-client.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/tools/packaging/catalog/catalog-local.js b/tools/packaging/catalog/catalog-local.js index 3368108aa1..1b22227283 100644 --- a/tools/packaging/catalog/catalog-local.js +++ b/tools/packaging/catalog/catalog-local.js @@ -389,6 +389,10 @@ _.extend(LocalCatalog.prototype, { debugOnly: packageSource.debugOnly, prodOnly: packageSource.prodOnly, testOnly: packageSource.testOnly, + + deprecated: packageSource.deprecated, + deprecatedMessage: packageSource.deprecatedMessage, + containsPlugins: packageSource.containsPlugins() } }; diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 17f9d3a9d6..b62f94526d 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -792,6 +792,10 @@ exports.publishPackage = function (options) { debugOnly: packageSource.debugOnly, prodOnly: packageSource.prodOnly, testOnly: packageSource.testOnly, + + deprecated: packageSource.deprecated, + deprecatedMessage: packageSource.deprecatedMessage, + exports: packageSource.getExports(), releaseName: release.current.name, dependencies: packageDeps From 6667d541628cb99b00d63c0a63d4f7be1c648efa Mon Sep 17 00:00:00 2001 From: filipenevola Date: Wed, 7 Apr 2021 14:29:12 -0400 Subject: [PATCH 5/5] Fixes deprecatedMessage to be undefined by default False should be considered as well in the deprecated field --- tools/isobuild/package-namespace.js | 2 +- tools/isobuild/package-source.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/isobuild/package-namespace.js b/tools/isobuild/package-namespace.js index 3f1c4492dd..8128a1ec02 100644 --- a/tools/isobuild/package-namespace.js +++ b/tools/isobuild/package-namespace.js @@ -145,7 +145,7 @@ export class PackageNamespace { if (typeof(value) === "string") { source.deprecatedMessage = value; } - source.deprecated = true; + source.deprecated = !!value; } else { // Do nothing. We might want to add some keys later, and we should err // on the side of backwards compatibility. diff --git a/tools/isobuild/package-source.js b/tools/isobuild/package-source.js index eec8545ccd..f9b8ca674f 100644 --- a/tools/isobuild/package-source.js +++ b/tools/isobuild/package-source.js @@ -383,7 +383,7 @@ var PackageSource = function () { // Flags for Atmosphere and developers to mark if deprecated packages // and provide additional info. self.deprecated = false; - self.deprecatedMessage = null; + self.deprecatedMessage = undefined; };