diff options
27 files changed, 367 insertions, 148 deletions
@@ -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; |