aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md14
-rwxr-xr-xbuild/command.js6
-rw-r--r--build/fixtures/README.md29
-rw-r--r--build/tasks/build.js70
-rw-r--r--build/tasks/dist.js2
-rw-r--r--build/tasks/node_smoke_tests.js118
-rw-r--r--eslint.config.js30
-rw-r--r--package.json8
-rw-r--r--src/wrapper-esm.js27
-rw-r--r--src/wrapper-factory-esm.js33
-rw-r--r--src/wrapper-factory.js38
-rw-r--r--src/wrapper.js18
-rw-r--r--test/node_smoke_tests/commonjs/document_passed.cjs16
-rw-r--r--test/node_smoke_tests/commonjs/factory/document_missing.cjs (renamed from test/node_smoke_tests/commonjs/document_missing.cjs)6
-rw-r--r--test/node_smoke_tests/commonjs/factory/document_passed.cjs16
-rw-r--r--test/node_smoke_tests/commonjs/factory/iterable_with_native_symbol.cjs (renamed from test/node_smoke_tests/commonjs/iterable_with_native_symbol.cjs)4
-rw-r--r--test/node_smoke_tests/commonjs/lib/ensure_iterability_es6.cjs2
-rw-r--r--test/node_smoke_tests/commonjs/regular/window_present_originally.cjs (renamed from test/node_smoke_tests/commonjs/window_present_originally.cjs)6
-rw-r--r--test/node_smoke_tests/module/document_missing.js13
-rw-r--r--test/node_smoke_tests/module/document_passed.js14
-rw-r--r--test/node_smoke_tests/module/factory/document_missing.js13
-rw-r--r--test/node_smoke_tests/module/factory/document_passed.js14
-rw-r--r--test/node_smoke_tests/module/factory/iterable_with_native_symbol.js (renamed from test/node_smoke_tests/module/iterable_with_native_symbol.js)4
-rw-r--r--test/node_smoke_tests/module/lib/ensure_iterability_es6.js2
-rw-r--r--test/node_smoke_tests/module/regular/window_present_originally.js (renamed from test/node_smoke_tests/module/window_present_originally.js)6
-rw-r--r--test/promises_aplus_adapters/deferred.cjs3
-rw-r--r--test/promises_aplus_adapters/when.cjs3
27 files changed, 367 insertions, 148 deletions
diff --git a/README.md b/README.md
index 8b3a7cab0..a18b15f72 100644
--- a/README.md
+++ b/README.md
@@ -143,6 +143,20 @@ By default, jQuery generates a regular script JavaScript file. You can also gene
npm run build -- --filename=jquery.module.js --esm
```
+##### Factory mode
+
+By default, jQuery depends on a global `window`. For environments that don't have one, you can generate a factory build that exposes a function accepting `window` as a parameter that you can provide externally (see [`README` of the published package](build/fixtures/README.md) for usage instructions). You can generate such a factory using the `--factory` parameter:
+
+```bash
+npm run build -- --filename=jquery.factory.js --factory
+```
+
+This option can be mixed with others like `--esm` or `--slim`:
+
+```bash
+npm run build -- --filename=jquery.factory.slim.module.js --factory --esm --slim --dir="/dist-module"
+```
+
#### Custom Build Examples
Create a custom build using `npm run build`, listing the modules to be excluded. Excluding a top-level module also excludes its corresponding directory of modules.
diff --git a/build/command.js b/build/command.js
index ee1a153bc..e976fac90 100755
--- a/build/command.js
+++ b/build/command.js
@@ -58,6 +58,12 @@ const argv = yargs( process.argv.slice( 2 ) )
"Build an ES module (ESM) bundle. " +
"By default, a UMD bundle is built."
} )
+ .option( "factory", {
+ type: "boolean",
+ description:
+ "Build the factory bundle. " +
+ "By default, a UMD bundle is built."
+ } )
.option( "slim", {
alias: "s",
type: "boolean",
diff --git a/build/fixtures/README.md b/build/fixtures/README.md
index a12e6121c..9e4f68913 100644
--- a/build/fixtures/README.md
+++ b/build/fixtures/README.md
@@ -136,16 +136,16 @@ Node.js doesn't understand AMD natively so this method is mostly used in a brows
### Node.js pre-requisites
-For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/jsdom/jsdom). This can be useful for testing purposes.
+For jQuery to work in Node, a `window` with a `document` is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/jsdom/jsdom). This can be useful for testing purposes.
-jQuery checks for a `window` global with a `document` property and - if one is not present, as is the default in Node.js - it returns a factory accepting a `window` as a parameter instead.
+For Node-based environments that don't have a global `window`, jQuery exposes a dedicated `jquery/factory` entry point.
To `import` jQuery using this factory, use the following:
```js
import { JSDOM } from "jsdom";
const { window } = new JSDOM( "" );
-import jQueryFactory from "jquery";
+import { jQueryFactory } from "jquery/factory";
const $ = jQueryFactory( window );
```
@@ -154,27 +154,10 @@ or, if you use `require`:
```js
const { JSDOM } = require( "jsdom" );
const { window } = new JSDOM( "" );
-const $ = require( "jquery" )( window );
-```
-
-If the `window` global is present at the moment of the `import` or `require` of `"jquery"`, it will resolve to a jQuery instance, as in the browser. You can set such a global manually to simulate the behavior; with `import`:
-
-```js
-import { JSDOM } from "jsdom";
-const { window } = new JSDOM( "" );
-globalThis.window = window;
-const { default: $ } = await import( "jquery" );
-```
-
-or with `require`:
-
-```js
-const { JSDOM } = require( "jsdom" );
-const { window } = new JSDOM( "" );
-globalThis.window = window;
-const $ = require( "jquery" );
+const { jQueryFactory } = require( "jquery/factory" );
+const $ = jQueryFactory( window );
```
#### Slim build in Node.js
-To use the slim build of jQuery in Node.js, use `"jquery/slim"` instead of `"jquery"` in both `require` or `import` calls above.
+To use the slim build of jQuery in Node.js, use `"jquery/slim"` instead of `"jquery"` in both `require` or `import` calls above. To use the slim build in Node.js with factory mode, use `jquery/factory-slim` instead of `jquery/factory`.
diff --git a/build/tasks/build.js b/build/tasks/build.js
index 1a0d7d75a..69a4de7c7 100644
--- a/build/tasks/build.js
+++ b/build/tasks/build.js
@@ -15,6 +15,7 @@ const excludedFromSlim = require( "./lib/slim-exclude" );
const rollupFileOverrides = require( "./lib/rollup-plugin-file-overrides" );
const pkg = require( "../../package.json" );
const isCleanWorkingDir = require( "./lib/isCleanWorkingDir" );
+const processForDist = require( "./dist" );
const minify = require( "./minify" );
const getTimestamp = require( "./lib/getTimestamp" );
const verifyNodeVersion = require( "./lib/verifyNodeVersion" );
@@ -71,8 +72,16 @@ async function readdirRecursive( dir, all = [] ) {
return all;
}
-async function getOutputRollupOptions( { esm = false } = {} ) {
- const wrapperFileName = `wrapper${esm ? "-esm" : ""}.js`;
+async function getOutputRollupOptions( {
+ esm = false,
+ factory = false
+} = {} ) {
+ const wrapperFileName = `wrapper${
+ factory ? "-factory" : ""
+ }${
+ esm ? "-esm" : ""
+ }.js`;
+
const wrapperSource = await read( wrapperFileName );
// Catch `// @CODE` and subsequent comment lines event if they don't start
@@ -163,6 +172,7 @@ async function build( {
filename = "jquery.js",
include = [],
esm = false,
+ factory = false,
slim = false,
version,
watch = false
@@ -275,7 +285,7 @@ async function build( {
plugins: [ rollupFileOverrides( fileOverrides ) ]
} );
- const outputOptions = await getOutputRollupOptions( { esm } );
+ const outputOptions = await getOutputRollupOptions( { esm, factory } );
if ( watch ) {
const watcher = rollup.watch( {
@@ -305,7 +315,11 @@ async function build( {
version
} );
- await minify( { dir, filename, esm } );
+ // Don't minify factory files; they are not meant
+ // for the browser anyway.
+ if ( !factory ) {
+ await minify( { dir, filename, esm } );
+ }
break;
}
} );
@@ -317,7 +331,22 @@ async function build( {
} = await bundle.generate( outputOptions );
await writeCompiled( { code, dir, filename, version } );
- await minify( { dir, filename, esm } );
+
+ // Don't minify factory files; they are not meant
+ // for the browser anyway.
+ if ( !factory ) {
+ await minify( { dir, filename, esm } );
+ } else {
+
+ // We normally process for dist during minification to save
+ // file reads. However, some files are not minified and then
+ // we need to do it separately.
+ const contents = await fs.promises.readFile(
+ path.join( dir, filename ),
+ "utf8"
+ );
+ processForDist( contents, filename );
+ }
}
}
@@ -339,6 +368,37 @@ async function buildDefaultFiles( { version, watch } = {} ) {
slim: true,
version,
watch
+ } ),
+
+ build( {
+ filename: "jquery.factory.js",
+ factory: true,
+ version,
+ watch
+ } ),
+ build( {
+ filename: "jquery.factory.slim.js",
+ slim: true,
+ factory: true,
+ version,
+ watch
+ } ),
+ build( {
+ dir: "dist-module",
+ filename: "jquery.factory.module.js",
+ esm: true,
+ factory: true,
+ version,
+ watch
+ } ),
+ build( {
+ dir: "dist-module",
+ filename: "jquery.factory.slim.module.js",
+ esm: true,
+ slim: true,
+ factory: true,
+ version,
+ watch
} )
] );
diff --git a/build/tasks/dist.js b/build/tasks/dist.js
index d6488aa1b..f15689e3d 100644
--- a/build/tasks/dist.js
+++ b/build/tasks/dist.js
@@ -1,7 +1,7 @@
"use strict";
// Process files for distribution.
-module.exports = async function processForDist( text, filename ) {
+module.exports = function processForDist( text, filename ) {
if ( !text ) {
throw new Error( "text required for processForDist" );
}
diff --git a/build/tasks/node_smoke_tests.js b/build/tasks/node_smoke_tests.js
index 5aa7660b0..433a005d5 100644
--- a/build/tasks/node_smoke_tests.js
+++ b/build/tasks/node_smoke_tests.js
@@ -5,7 +5,8 @@ const util = require( "util" );
const exec = util.promisify( require( "child_process" ).exec );
const verifyNodeVersion = require( "./lib/verifyNodeVersion" );
-const allowedModules = [ "commonjs", "module" ];
+const allowedLibraryTypes = [ "regular", "factory" ];
+const allowedSourceTypes = [ "commonjs", "module" ];
if ( !verifyNodeVersion() ) {
return;
@@ -17,33 +18,116 @@ if ( !verifyNodeVersion() ) {
// important so that the tests & the main process don't interfere with
// each other, e.g. so that they don't share the `require` cache.
-async function runTests( sourceType, module ) {
- if ( !allowedModules.includes( sourceType ) ) {
- throw new Error(
- `Usage: \`node_smoke_tests [${allowedModules.join( "|" )}]:JQUERY\``
- );
+async function runTests( { libraryType, sourceType, module } ) {
+ if ( !allowedLibraryTypes.includes( libraryType ) ||
+ !allowedSourceTypes.includes( sourceType ) ) {
+ throw new Error( `Incorrect libraryType or sourceType value; passed: ${
+ libraryType
+ } ${ sourceType } "${ module }"` );
}
- const dir = `./test/node_smoke_tests/${sourceType}`;
+ const dir = `./test/node_smoke_tests/${ sourceType }/${ libraryType }`;
const files = await fs.promises.readdir( dir, { withFileTypes: true } );
const testFiles = files.filter( ( testFilePath ) => testFilePath.isFile() );
+
+ if ( !testFiles.length ) {
+ throw new Error( `No test files found for ${
+ libraryType
+ } ${ sourceType } "${ module }"` );
+ }
+
await Promise.all(
testFiles.map( ( testFile ) =>
- exec( `node "${dir}/${testFile.name}" "${module}"` )
+ exec( `node "${ dir }/${ testFile.name }" "${ module }"` )
)
);
- console.log( `Node smoke tests passed for ${sourceType} "${module}".` );
+ console.log( `Node smoke tests passed for ${
+ libraryType
+ } ${ sourceType } "${ module }".` );
}
async function runDefaultTests() {
await Promise.all( [
- runTests( "commonjs", "jquery" ),
- runTests( "commonjs", "jquery/slim" ),
- runTests( "commonjs", "./dist/jquery.js" ),
- runTests( "commonjs", "./dist/jquery.slim.js" ),
- runTests( "module", "jquery" ),
- runTests( "module", "jquery/slim" ),
- runTests( "module", "./dist-module/jquery.module.js" ),
- runTests( "module", "./dist-module/jquery.slim.module.js" )
+ runTests( {
+ libraryType: "regular",
+ sourceType: "commonjs",
+ module: "jquery"
+ } ),
+ runTests( {
+ libraryType: "regular",
+ sourceType: "commonjs",
+ module: "jquery/slim"
+ } ),
+ runTests( {
+ libraryType: "regular",
+ sourceType: "commonjs",
+ module: "./dist/jquery.js"
+ } ),
+ runTests( {
+ libraryType: "regular",
+ sourceType: "commonjs",
+ module: "./dist/jquery.slim.js"
+ } ),
+ runTests( {
+ libraryType: "regular",
+ sourceType: "module",
+ module: "jquery"
+ } ),
+ runTests( {
+ libraryType: "regular",
+ sourceType: "module",
+ module: "jquery/slim"
+ } ),
+ runTests( {
+ libraryType: "regular",
+ sourceType: "module",
+ module: "./dist-module/jquery.module.js"
+ } ),
+ runTests( {
+ libraryType: "regular",
+ sourceType: "module",
+ module: "./dist-module/jquery.slim.module.js"
+ } ),
+
+ runTests( {
+ libraryType: "factory",
+ sourceType: "commonjs",
+ module: "jquery/factory"
+ } ),
+ runTests( {
+ libraryType: "factory",
+ sourceType: "commonjs",
+ module: "jquery/factory-slim"
+ } ),
+ runTests( {
+ libraryType: "factory",
+ sourceType: "commonjs",
+ module: "./dist/jquery.factory.js"
+ } ),
+ runTests( {
+ libraryType: "factory",
+ sourceType: "commonjs",
+ module: "./dist/jquery.factory.slim.js"
+ } ),
+ runTests( {
+ libraryType: "factory",
+ sourceType: "module",
+ module: "jquery/factory"
+ } ),
+ runTests( {
+ libraryType: "factory",
+ sourceType: "module",
+ module: "jquery/factory-slim"
+ } ),
+ runTests( {
+ libraryType: "factory",
+ sourceType: "module",
+ module: "./dist-module/jquery.factory.module.js"
+ } ),
+ runTests( {
+ libraryType: "factory",
+ sourceType: "module",
+ module: "./dist-module/jquery.factory.slim.module.js"
+ } )
] );
}
diff --git a/eslint.config.js b/eslint.config.js
index 4c8d86bbd..bb6ca7635 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -89,12 +89,15 @@ export default [
},
{
- files: [ "src/wrapper.js" ],
+ files: [
+ "src/wrapper.js",
+ "src/wrapper-esm.js",
+ "src/wrapper-factory.js",
+ "src/wrapper-factory-esm.js"
+ ],
languageOptions: {
- sourceType: "script",
globals: {
- jQuery: false,
- module: true
+ jQuery: false
}
},
rules: {
@@ -106,7 +109,7 @@ export default [
// This makes it so code within the wrapper is not indented.
ignoredNodes: [
- "Program > ExpressionStatement > CallExpression > :last-child > *"
+ "Program > FunctionDeclaration > *"
]
}
]
@@ -114,14 +117,21 @@ export default [
},
{
- files: [ "src/wrapper-esm.js" ],
+ files: [
+ "src/wrapper.js",
+ "src/wrapper-factory.js"
+ ],
languageOptions: {
+ sourceType: "script",
globals: {
- jQuery: false
+ module: false
}
- },
+ }
+ },
+
+ {
+ files: [ "src/wrapper.js" ],
rules: {
- "no-unused-vars": "off",
indent: [
"error",
"tab",
@@ -129,7 +139,7 @@ export default [
// This makes it so code within the wrapper is not indented.
ignoredNodes: [
- "Program > FunctionDeclaration > *"
+ "Program > ExpressionStatement > CallExpression > :last-child > *"
]
}
]
diff --git a/package.json b/package.json
index de94b1110..29e6f90e5 100644
--- a/package.json
+++ b/package.json
@@ -27,6 +27,14 @@
"script": "./dist/jquery.slim.min.js",
"default": "./dist-module/jquery.slim.module.min.js"
},
+ "./factory": {
+ "node": "./dist/jquery.factory.js",
+ "default": "./dist-module/jquery.factory.module.js"
+ },
+ "./factory-slim": {
+ "node": "./dist/jquery.factory.slim.js",
+ "default": "./dist-module/jquery.factory.slim.module.js"
+ },
"./src/*.js": "./src/*.js"
},
"main": "dist/jquery.js",
diff --git a/src/wrapper-esm.js b/src/wrapper-esm.js
index 00ff2995c..a4574a3fa 100644
--- a/src/wrapper-esm.js
+++ b/src/wrapper-esm.js
@@ -10,22 +10,12 @@
*/
// For ECMAScript module environments where a proper `window`
// is present, execute the factory and get jQuery.
-// For environments that do not have a `window` with a `document`
-// (such as Node.js), expose a factory as module.exports.
-// This accentuates the need for the creation of a real `window`.
-// e.g. var jQuery = require("jquery")(window);
-// See ticket trac-14549 for more info.
-var jQueryOrJQueryFactory = typeof window !== "undefined" && window.document ?
- jQueryFactory( window, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return jQueryFactory( w );
- };
-
function jQueryFactory( window, noGlobal ) {
+if ( typeof window === "undefined" || !window.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+}
+
// @CODE
// build.js inserts compiled jQuery here
@@ -33,9 +23,8 @@ return jQuery;
}
-export {
- jQueryOrJQueryFactory as jQuery,
- jQueryOrJQueryFactory as $
-};
+var jQuery = jQueryFactory( window, true );
+
+export { jQuery, jQuery as $ };
-export default jQueryOrJQueryFactory;
+export default jQuery;
diff --git a/src/wrapper-factory-esm.js b/src/wrapper-factory-esm.js
new file mode 100644
index 000000000..9127d41e6
--- /dev/null
+++ b/src/wrapper-factory-esm.js
@@ -0,0 +1,33 @@
+/*!
+ * jQuery JavaScript Library v@VERSION
+ * https://jquery.com/
+ *
+ * Copyright OpenJS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: @DATE
+ */
+// Expose a factory as `jQueryFactory`. Aimed at environments without
+// a real `window` where an emulated window needs to be constructed. Example:
+//
+// import { jQueryFactory } from "jquery/factory";
+// const jQuery = jQueryFactory( window );
+//
+// See ticket trac-14549 for more info.
+function jQueryFactoryWrapper( window, noGlobal ) {
+
+if ( !window.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+}
+
+// @CODE
+// build.js inserts compiled jQuery here
+
+return jQuery;
+
+}
+
+export function jQueryFactory( window ) {
+ return jQueryFactoryWrapper( window, true );
+}
diff --git a/src/wrapper-factory.js b/src/wrapper-factory.js
new file mode 100644
index 000000000..212ff33bf
--- /dev/null
+++ b/src/wrapper-factory.js
@@ -0,0 +1,38 @@
+/*!
+ * jQuery JavaScript Library v@VERSION
+ * https://jquery.com/
+ *
+ * Copyright OpenJS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: @DATE
+ */
+// Expose a factory as `jQueryFactory`. Aimed at environments without
+// a real `window` where an emulated window needs to be constructed. Example:
+//
+// const jQuery = require( "jquery/factory" )( window );
+//
+// See ticket trac-14549 for more info.
+function jQueryFactoryWrapper( window, noGlobal ) {
+
+"use strict";
+
+if ( !window.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+}
+
+// @CODE
+// build.js inserts compiled jQuery here
+
+return jQuery;
+
+}
+
+function jQueryFactory( window ) {
+ "use strict";
+
+ return jQueryFactoryWrapper( window, true );
+}
+
+module.exports = { jQueryFactory: jQueryFactory };
diff --git a/src/wrapper.js b/src/wrapper.js
index fa8240e1e..ce7637c63 100644
--- a/src/wrapper.js
+++ b/src/wrapper.js
@@ -16,19 +16,7 @@
// For CommonJS and CommonJS-like environments where a proper `window`
// is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket trac-14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
+ module.exports = factory( global, true );
} else {
factory( global );
}
@@ -38,6 +26,10 @@
"use strict";
+if ( !window.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+}
+
// @CODE
// build.js inserts compiled jQuery here
diff --git a/test/node_smoke_tests/commonjs/document_passed.cjs b/test/node_smoke_tests/commonjs/document_passed.cjs
deleted file mode 100644
index 4cf280109..000000000
--- a/test/node_smoke_tests/commonjs/document_passed.cjs
+++ /dev/null
@@ -1,16 +0,0 @@
-"use strict";
-
-const { JSDOM } = require( "jsdom" );
-
-const { ensureJQuery } = require( "./lib/ensure_jquery.cjs" );
-const { ensureGlobalNotCreated } = require( "./lib/ensure_global_not_created.cjs" );
-const { getJQueryModuleSpecifier } = require( "./lib/jquery-module-specifier.cjs" );
-
-const { window } = new JSDOM( "" );
-
-const jQueryModuleSpecifier = getJQueryModuleSpecifier();
-const jQueryFactory = require( jQueryModuleSpecifier );
-const jQuery = jQueryFactory( window );
-
-ensureJQuery( jQuery );
-ensureGlobalNotCreated( module.exports );
diff --git a/test/node_smoke_tests/commonjs/document_missing.cjs b/test/node_smoke_tests/commonjs/factory/document_missing.cjs
index cf31fe427..e079912d8 100644
--- a/test/node_smoke_tests/commonjs/document_missing.cjs
+++ b/test/node_smoke_tests/commonjs/factory/document_missing.cjs
@@ -2,11 +2,11 @@
const assert = require( "node:assert" );
-const { ensureGlobalNotCreated } = require( "./lib/ensure_global_not_created.cjs" );
-const { getJQueryModuleSpecifier } = require( "./lib/jquery-module-specifier.cjs" );
+const { ensureGlobalNotCreated } = require( "../lib/ensure_global_not_created.cjs" );
+const { getJQueryModuleSpecifier } = require( "../lib/jquery-module-specifier.cjs" );
const jQueryModuleSpecifier = getJQueryModuleSpecifier();
-const jQueryFactory = require( jQueryModuleSpecifier );
+const { jQueryFactory } = require( jQueryModuleSpecifier );
assert.throws( () => {
jQueryFactory( {} );
diff --git a/test/node_smoke_tests/commonjs/factory/document_passed.cjs b/test/node_smoke_tests/commonjs/factory/document_passed.cjs
new file mode 100644
index 000000000..d7770b00a
--- /dev/null
+++ b/test/node_smoke_tests/commonjs/factory/document_passed.cjs
@@ -0,0 +1,16 @@
+"use strict";
+
+const { JSDOM } = require( "jsdom" );
+
+const { ensureJQuery } = require( "../lib/ensure_jquery.cjs" );
+const { ensureGlobalNotCreated } = require( "../lib/ensure_global_not_created.cjs" );
+const { getJQueryModuleSpecifier } = require( "../lib/jquery-module-specifier.cjs" );
+
+const { window } = new JSDOM( "" );
+
+const jQueryModuleSpecifier = getJQueryModuleSpecifier();
+const { jQueryFactory } = require( jQueryModuleSpecifier );
+const jQuery = jQueryFactory( window );
+
+ensureJQuery( jQuery );
+ensureGlobalNotCreated( module.exports );
diff --git a/test/node_smoke_tests/commonjs/iterable_with_native_symbol.cjs b/test/node_smoke_tests/commonjs/factory/iterable_with_native_symbol.cjs
index 8fce34e06..d973271b4 100644
--- a/test/node_smoke_tests/commonjs/iterable_with_native_symbol.cjs
+++ b/test/node_smoke_tests/commonjs/factory/iterable_with_native_symbol.cjs
@@ -7,8 +7,8 @@ if ( typeof Symbol === "undefined" ) {
process.exit();
}
-const { ensureIterability } = require( "./lib/ensure_iterability_es6.cjs" );
-const { getJQueryModuleSpecifier } = require( "./lib/jquery-module-specifier.cjs" );
+const { ensureIterability } = require( "../lib/ensure_iterability_es6.cjs" );
+const { getJQueryModuleSpecifier } = require( "../lib/jquery-module-specifier.cjs" );
const jQueryModuleSpecifier = getJQueryModuleSpecifier();
ensureIterability( jQueryModuleSpecifier );
diff --git a/test/node_smoke_tests/commonjs/lib/ensure_iterability_es6.cjs b/test/node_smoke_tests/commonjs/lib/ensure_iterability_es6.cjs
index eb4914758..01e0d4b56 100644
--- a/test/node_smoke_tests/commonjs/lib/ensure_iterability_es6.cjs
+++ b/test/node_smoke_tests/commonjs/lib/ensure_iterability_es6.cjs
@@ -8,7 +8,7 @@ const { ensureJQuery } = require( "./ensure_jquery.cjs" );
const ensureIterability = ( jQueryModuleSpecifier ) => {
const { window } = new JSDOM( "" );
- const jQueryFactory = require( jQueryModuleSpecifier );
+ const { jQueryFactory } = require( jQueryModuleSpecifier );
const jQuery = jQueryFactory( window );
const elem = jQuery( "<div></div><span></span><a></a>" );
diff --git a/test/node_smoke_tests/commonjs/window_present_originally.cjs b/test/node_smoke_tests/commonjs/regular/window_present_originally.cjs
index 908fcb940..644a15a77 100644
--- a/test/node_smoke_tests/commonjs/window_present_originally.cjs
+++ b/test/node_smoke_tests/commonjs/regular/window_present_originally.cjs
@@ -2,9 +2,9 @@
const { JSDOM } = require( "jsdom" );
-const { ensureJQuery } = require( "./lib/ensure_jquery.cjs" );
-const { ensureGlobalNotCreated } = require( "./lib/ensure_global_not_created.cjs" );
-const { getJQueryModuleSpecifier } = require( "./lib/jquery-module-specifier.cjs" );
+const { ensureJQuery } = require( "../lib/ensure_jquery.cjs" );
+const { ensureGlobalNotCreated } = require( "../lib/ensure_global_not_created.cjs" );
+const { getJQueryModuleSpecifier } = require( "../lib/jquery-module-specifier.cjs" );
const jQueryModuleSpecifier = getJQueryModuleSpecifier();
diff --git a/test/node_smoke_tests/module/document_missing.js b/test/node_smoke_tests/module/document_missing.js
deleted file mode 100644
index 9394af796..000000000
--- a/test/node_smoke_tests/module/document_missing.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import assert from "node:assert";
-
-import { ensureGlobalNotCreated } from "./lib/ensure_global_not_created.js";
-import { getJQueryModuleSpecifier } from "./lib/jquery-module-specifier.js";
-
-const jQueryModuleSpecifier = getJQueryModuleSpecifier();
-const { default: jQueryFactory } = await import( jQueryModuleSpecifier );
-
-assert.throws( () => {
- jQueryFactory( {} );
-}, /jQuery requires a window with a document/ );
-
-ensureGlobalNotCreated();
diff --git a/test/node_smoke_tests/module/document_passed.js b/test/node_smoke_tests/module/document_passed.js
deleted file mode 100644
index 7af5a7972..000000000
--- a/test/node_smoke_tests/module/document_passed.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { JSDOM } from "jsdom";
-
-import { ensureJQuery } from "./lib/ensure_jquery.js";
-import { ensureGlobalNotCreated } from "./lib/ensure_global_not_created.js";
-import { getJQueryModuleSpecifier } from "./lib/jquery-module-specifier.js";
-
-const { window } = new JSDOM( "" );
-
-const jQueryModuleSpecifier = getJQueryModuleSpecifier();
-const { default: jQueryFactory } = await import( jQueryModuleSpecifier );
-const jQuery = jQueryFactory( window );
-
-ensureJQuery( jQuery );
-ensureGlobalNotCreated();
diff --git a/test/node_smoke_tests/module/factory/document_missing.js b/test/node_smoke_tests/module/factory/document_missing.js
new file mode 100644
index 000000000..ccb3383ad
--- /dev/null
+++ b/test/node_smoke_tests/module/factory/document_missing.js
@@ -0,0 +1,13 @@
+import assert from "node:assert";
+
+import { ensureGlobalNotCreated } from "../lib/ensure_global_not_created.js";
+import { getJQueryModuleSpecifier } from "../lib/jquery-module-specifier.js";
+
+const jQueryModuleSpecifier = getJQueryModuleSpecifier();
+const { jQueryFactory } = await import( jQueryModuleSpecifier );
+
+assert.throws( () => {
+ jQueryFactory( {} );
+}, /jQuery requires a window with a document/ );
+
+ensureGlobalNotCreated();
diff --git a/test/node_smoke_tests/module/factory/document_passed.js b/test/node_smoke_tests/module/factory/document_passed.js
new file mode 100644
index 000000000..800b34a4e
--- /dev/null
+++ b/test/node_smoke_tests/module/factory/document_passed.js
@@ -0,0 +1,14 @@
+import { JSDOM } from "jsdom";
+
+import { ensureJQuery } from "../lib/ensure_jquery.js";
+import { ensureGlobalNotCreated } from "../lib/ensure_global_not_created.js";
+import { getJQueryModuleSpecifier } from "../lib/jquery-module-specifier.js";
+
+const { window } = new JSDOM( "" );
+
+const jQueryModuleSpecifier = getJQueryModuleSpecifier();
+const { jQueryFactory } = await import( jQueryModuleSpecifier );
+const jQuery = jQueryFactory( window );
+
+ensureJQuery( jQuery );
+ensureGlobalNotCreated();
diff --git a/test/node_smoke_tests/module/iterable_with_native_symbol.js b/test/node_smoke_tests/module/factory/iterable_with_native_symbol.js
index 3417e8ac0..cb19c26c2 100644
--- a/test/node_smoke_tests/module/iterable_with_native_symbol.js
+++ b/test/node_smoke_tests/module/factory/iterable_with_native_symbol.js
@@ -1,7 +1,7 @@
import process from "node:process";
-import { ensureIterability } from "./lib/ensure_iterability_es6.js";
-import { getJQueryModuleSpecifier } from "./lib/jquery-module-specifier.js";
+import { ensureIterability } from "../lib/ensure_iterability_es6.js";
+import { getJQueryModuleSpecifier } from "../lib/jquery-module-specifier.js";
if ( typeof Symbol === "undefined" ) {
console.log( "Symbols not supported, skipping the test..." );
diff --git a/test/node_smoke_tests/module/lib/ensure_iterability_es6.js b/test/node_smoke_tests/module/lib/ensure_iterability_es6.js
index 8893267a0..3f88913d0 100644
--- a/test/node_smoke_tests/module/lib/ensure_iterability_es6.js
+++ b/test/node_smoke_tests/module/lib/ensure_iterability_es6.js
@@ -6,7 +6,7 @@ const { ensureJQuery } = await import( "./ensure_jquery.js" );
export const ensureIterability = async( jQueryModuleSpecifier ) => {
const { window } = new JSDOM( "" );
- const { default: jQueryFactory } = await import( jQueryModuleSpecifier );
+ const { jQueryFactory } = await import( jQueryModuleSpecifier );
const jQuery = jQueryFactory( window );
const elem = jQuery( "<div></div><span></span><a></a>" );
diff --git a/test/node_smoke_tests/module/window_present_originally.js b/test/node_smoke_tests/module/regular/window_present_originally.js
index ab60947e8..ac5a416c8 100644
--- a/test/node_smoke_tests/module/window_present_originally.js
+++ b/test/node_smoke_tests/module/regular/window_present_originally.js
@@ -1,8 +1,8 @@
import { JSDOM } from "jsdom";
-import { ensureJQuery } from "./lib/ensure_jquery.js";
-import { ensureGlobalNotCreated } from "./lib/ensure_global_not_created.js";
-import { getJQueryModuleSpecifier } from "./lib/jquery-module-specifier.js";
+import { ensureJQuery } from "../lib/ensure_jquery.js";
+import { ensureGlobalNotCreated } from "../lib/ensure_global_not_created.js";
+import { getJQueryModuleSpecifier } from "../lib/jquery-module-specifier.js";
const jQueryModuleSpecifier = getJQueryModuleSpecifier();
diff --git a/test/promises_aplus_adapters/deferred.cjs b/test/promises_aplus_adapters/deferred.cjs
index 5e3ffe2d8..10e824561 100644
--- a/test/promises_aplus_adapters/deferred.cjs
+++ b/test/promises_aplus_adapters/deferred.cjs
@@ -4,7 +4,8 @@ const { JSDOM } = require( "jsdom" );
const { window } = new JSDOM( "" );
-const jQuery = require( "../../" )( window );
+const { jQueryFactory } = require( "jquery/factory" );
+const jQuery = jQueryFactory( window );
module.exports.deferred = () => {
const deferred = jQuery.Deferred();
diff --git a/test/promises_aplus_adapters/when.cjs b/test/promises_aplus_adapters/when.cjs
index 3e945d475..827216803 100644
--- a/test/promises_aplus_adapters/when.cjs
+++ b/test/promises_aplus_adapters/when.cjs
@@ -4,7 +4,8 @@ const { JSDOM } = require( "jsdom" );
const { window } = new JSDOM( "" );
-const jQuery = require( "../../" )( window );
+const { jQueryFactory } = require( "jquery/factory" );
+const jQuery = jQueryFactory( window );
module.exports.deferred = () => {
let adopted, promised;