reject-lazy-imports-into-globals

Rejects importing lazy items into window or globalThis when in a non-system module scope.

Importing into the window scope (or globalThis) will share the imported global with everything else in the same window. In modules, this is generally unnecessary and undesirable because each module imports what it requires. Additionally, sharing items via the global scope makes it more difficult for linters to determine the available globals.

Instead, the globals should either be imported directly, or into a lazy object. If there is a good reason for sharing the globals via the window scope, then this rule may be disabled as long as a comment is added explaining the reasons.

Examples of incorrect code for this rule:

ChromeUtils.defineESModuleGetters(globalThis, { foo: "foo.sys.mjs" });
ChromeUtils.defineESModuleGetters(window, { "foo": "foo.sys.mjs" });
ChromeUtils.defineLazyGetter(globalThis, "foo", () => {});
ChromeUtils.defineLazyGetter(window, "foo", () => {});

Examples of correct code for this rule:

const lazy = {};
ChromeUtils.defineLazyGetter(lazy, "foo", () => {});