DEV: Improve plugin/theme deprecation prefixes (#24155)

- Add prefixes to Ember deprecations (previously was just Discourse deprecations)

- Allow logic to work in tests (where window.Discourse is not defined)

- Detect `{plugin}_tests.js` files

- Optimise dev/test regex logic out of the production build using `if(DEBUG)`
This commit is contained in:
David Taylor 2023-10-31 10:56:11 +00:00 committed by GitHub
parent bbcf8e421c
commit 32716f3746
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 13 deletions

View File

@ -39,7 +39,7 @@ export default function deprecated(msg, options = {}) {
msg = msg.join(" "); msg = msg.join(" ");
let consolePrefix = ""; let consolePrefix = "";
if (window.Discourse) { if (require.has("discourse/lib/source-identifier")) {
// This module doesn't exist in pretty-text/wizard/etc. // This module doesn't exist in pretty-text/wizard/etc.
consolePrefix = consolePrefix =
require("discourse/lib/source-identifier").consolePrefix() || ""; require("discourse/lib/source-identifier").consolePrefix() || "";

View File

@ -0,0 +1,23 @@
import { registerDeprecationHandler } from "@ember/debug";
import { consolePrefix } from "discourse/lib/source-identifier";
let registered = false;
export default {
initialize() {
if (registered) {
return;
}
registerDeprecationHandler((message, options, next) => {
let prefix = consolePrefix();
if (prefix) {
next(`${prefix} ${message}`, options);
} else {
next(message, options);
}
});
registered = true;
},
};

View File

@ -1,5 +1,5 @@
import DEBUG from "@glimmer/env";
import PreloadStore from "discourse/lib/preload-store"; import PreloadStore from "discourse/lib/preload-store";
import { isDevelopment } from "discourse-common/config/environment";
import getURL from "discourse-common/lib/get-url"; import getURL from "discourse-common/lib/get-url";
export default function identifySource(error) { export default function identifySource(error) {
@ -30,20 +30,20 @@ export default function identifySource(error) {
let plugin; let plugin;
// Source-mapped: if (DEBUG) {
plugin = plugin || error.stack.match(/plugins\/([\w-]+)\//)?.[1]; // Development (no fingerprinting)
plugin ??= error.stack.match(/assets\/plugins\/([\w-]+)\.js/)?.[1];
if (isDevelopment()) { // Test files:
// Un-source-mapped: plugin ??= error.stack.match(
plugin = plugin || error.stack.match(/assets\/plugins\/([\w-]+)\.js/)?.[1]; /assets\/plugins\/test\/([\w-]+)_tests\.js/
)?.[1];
} }
// Production mode // Production (with fingerprints)
plugin = plugin ??= error.stack.match(
plugin || /assets\/plugins\/_?([\w-]+)-[0-9a-f]+(?:\.br)?\.js/
error.stack.match( )?.[1];
/assets\/plugins\/_?([\w-]+)-[0-9a-f]+(?:\.br)?\.js/
)?.[1];
if (plugin) { if (plugin) {
return { return {