From 63c673cc403fece2c0dbef4d8150d821171d1e30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Wed, 13 Aug 2025 17:34:50 +0200 Subject: [PATCH] add Coffeescript test app to modern-tests --- .../modern-tests/apps/coffeescript/.gitignore | 1 + .../apps/coffeescript/.meteor/.gitignore | 1 + .../apps/coffeescript/.meteor/.id | 7 + .../apps/coffeescript/.meteor/packages | 23 + .../apps/coffeescript/.meteor/platforms | 2 + .../apps/coffeescript/.meteor/release | 1 + .../apps/coffeescript/.meteor/versions | 68 + .../apps/coffeescript/client/main.coffee | 9 + .../apps/coffeescript/client/main.css | 4 + .../apps/coffeescript/client/main.html | 8 + .../coffeescript/imports/api/links.coffee | 3 + .../apps/coffeescript/imports/ui/App.coffee | 10 + .../apps/coffeescript/imports/ui/Hello.coffee | 12 + .../apps/coffeescript/imports/ui/Info.coffee | 19 + .../apps/coffeescript/package-lock.json | 1445 +++++++++++++++++ .../apps/coffeescript/package.json | 29 + .../apps/coffeescript/server/main.coffee | 29 + .../apps/coffeescript/tests/main.coffee | 14 + tools/modern-tests/assertions.js | 2 + tools/modern-tests/coffeescript.test.js | 64 + tools/modern-tests/test-helpers.js | 17 +- 21 files changed, 1763 insertions(+), 5 deletions(-) create mode 100644 tools/modern-tests/apps/coffeescript/.gitignore create mode 100644 tools/modern-tests/apps/coffeescript/.meteor/.gitignore create mode 100644 tools/modern-tests/apps/coffeescript/.meteor/.id create mode 100644 tools/modern-tests/apps/coffeescript/.meteor/packages create mode 100644 tools/modern-tests/apps/coffeescript/.meteor/platforms create mode 100644 tools/modern-tests/apps/coffeescript/.meteor/release create mode 100644 tools/modern-tests/apps/coffeescript/.meteor/versions create mode 100644 tools/modern-tests/apps/coffeescript/client/main.coffee create mode 100644 tools/modern-tests/apps/coffeescript/client/main.css create mode 100644 tools/modern-tests/apps/coffeescript/client/main.html create mode 100644 tools/modern-tests/apps/coffeescript/imports/api/links.coffee create mode 100644 tools/modern-tests/apps/coffeescript/imports/ui/App.coffee create mode 100644 tools/modern-tests/apps/coffeescript/imports/ui/Hello.coffee create mode 100644 tools/modern-tests/apps/coffeescript/imports/ui/Info.coffee create mode 100644 tools/modern-tests/apps/coffeescript/package-lock.json create mode 100644 tools/modern-tests/apps/coffeescript/package.json create mode 100644 tools/modern-tests/apps/coffeescript/server/main.coffee create mode 100644 tools/modern-tests/apps/coffeescript/tests/main.coffee create mode 100644 tools/modern-tests/coffeescript.test.js diff --git a/tools/modern-tests/apps/coffeescript/.gitignore b/tools/modern-tests/apps/coffeescript/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/tools/modern-tests/apps/coffeescript/.meteor/.gitignore b/tools/modern-tests/apps/coffeescript/.meteor/.gitignore new file mode 100644 index 0000000000..4083037423 --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/.meteor/.gitignore @@ -0,0 +1 @@ +local diff --git a/tools/modern-tests/apps/coffeescript/.meteor/.id b/tools/modern-tests/apps/coffeescript/.meteor/.id new file mode 100644 index 0000000000..248d80b9ca --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/.meteor/.id @@ -0,0 +1,7 @@ +# This file contains a token that is unique to your project. +# Check it into your repository along with the rest of this directory. +# It can be used for purposes such as: +# - ensuring you don't accidentally deploy one app on top of another +# - providing package authors with aggregated statistics + +lv2ipazth09.ysbw5dwq9qvl diff --git a/tools/modern-tests/apps/coffeescript/.meteor/packages b/tools/modern-tests/apps/coffeescript/.meteor/packages new file mode 100644 index 0000000000..1cfb3a8ef5 --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/.meteor/packages @@ -0,0 +1,23 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor-base # Packages every Meteor app needs to have +mobile-experience # Packages for a great mobile UX +mongo # The database Meteor supports right now +reactive-var # Reactive variable for tracker + +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules +shell-server # Server-side component of the `meteor shell` command +hot-module-replacement # Update client in development without reloading the page + + +static-html # Define static page content in .html files +react-meteor-data # React higher-order component for reactively tracking Meteor data +coffeescript # Enable CoffeeScript syntax in .coffee files diff --git a/tools/modern-tests/apps/coffeescript/.meteor/platforms b/tools/modern-tests/apps/coffeescript/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/tools/modern-tests/apps/coffeescript/.meteor/release b/tools/modern-tests/apps/coffeescript/.meteor/release new file mode 100644 index 0000000000..621e94f0ec --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/.meteor/release @@ -0,0 +1 @@ +none diff --git a/tools/modern-tests/apps/coffeescript/.meteor/versions b/tools/modern-tests/apps/coffeescript/.meteor/versions new file mode 100644 index 0000000000..5644ad4d7f --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/.meteor/versions @@ -0,0 +1,68 @@ +allow-deny@2.1.0 +autoupdate@2.0.1 +babel-compiler@7.12.1-rc331.2 +babel-runtime@1.5.2 +base64@1.0.13 +binary-heap@1.0.12 +boilerplate-generator@2.0.1 +caching-compiler@2.0.1 +callback-hook@1.6.1-rc331.2 +check@1.4.4 +core-runtime@1.0.0 +ddp@1.4.2 +ddp-client@3.1.1 +ddp-common@1.4.4 +ddp-server@3.1.2 +diff-sequence@1.1.3 +dynamic-import@0.7.4 +ecmascript@0.16.12-rc331.2 +ecmascript-runtime@0.8.3 +ecmascript-runtime-client@0.12.3 +ecmascript-runtime-server@0.11.1 +ejson@1.1.5 +es5-shim@4.8.1 +facts-base@1.0.2 +fetch@0.1.6 +geojson-utils@1.0.12 +hot-code-push@1.0.5 +hot-module-replacement@0.5.4 +id-map@1.2.0 +inter-process-messaging@0.1.2 +launch-screen@2.0.1 +logging@1.3.6 +meteor@2.1.1 +meteor-base@1.5.2 +minifier-css@2.0.1 +minifier-js@3.0.3-rc331.2 +minimongo@2.0.3-rc331.2 +mobile-experience@1.1.2 +mobile-status-bar@1.1.1 +modern-browsers@0.2.3-rc331.2 +modules@0.20.3 +modules-runtime@0.13.2 +modules-runtime-hot@0.14.3 +mongo@2.1.3-rc331.2 +mongo-decimal@0.2.0 +mongo-dev-server@1.1.1 +mongo-id@1.0.9 +npm-mongo@6.16.0-rc331.2 +ordered-dict@1.2.0 +promise@1.0.0 +random@1.2.2 +react-fast-refresh@0.2.9 +react-meteor-data@4.0.0 +reactive-var@1.0.13 +reload@1.3.2 +retry@1.1.1 +routepolicy@1.1.2 +shell-server@0.6.1 +socket-stream-client@0.6.1 +standard-minifier-css@1.9.3 +standard-minifier-js@3.1.1-rc331.2 +static-html@1.4.0 +static-html-tools@1.0.0 +tracker@1.3.4 +typescript@5.6.5-rc331.2 +webapp@2.0.7 +webapp-hashing@1.1.2 +zodern:types@1.0.13 diff --git a/tools/modern-tests/apps/coffeescript/client/main.coffee b/tools/modern-tests/apps/coffeescript/client/main.coffee new file mode 100644 index 0000000000..406b81b26c --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/client/main.coffee @@ -0,0 +1,9 @@ +import React from 'react' +import { createRoot } from 'react-dom/client' +import { Meteor } from 'meteor/meteor' +import { App } from '/imports/ui/App.coffee' + +Meteor.startup -> + container = document.getElementById('react-target') + root = createRoot(container) + root.render() diff --git a/tools/modern-tests/apps/coffeescript/client/main.css b/tools/modern-tests/apps/coffeescript/client/main.css new file mode 100644 index 0000000000..7f354f0fa7 --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/client/main.css @@ -0,0 +1,4 @@ +body { + padding: 10px; + font-family: sans-serif; +} diff --git a/tools/modern-tests/apps/coffeescript/client/main.html b/tools/modern-tests/apps/coffeescript/client/main.html new file mode 100644 index 0000000000..b11cc28692 --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/client/main.html @@ -0,0 +1,8 @@ + + coffeescript + + + + +
+ diff --git a/tools/modern-tests/apps/coffeescript/imports/api/links.coffee b/tools/modern-tests/apps/coffeescript/imports/api/links.coffee new file mode 100644 index 0000000000..95c5ed8cfc --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/imports/api/links.coffee @@ -0,0 +1,3 @@ +import { Mongo } from 'meteor/mongo' + +export LinksCollection = new Mongo.Collection('links') diff --git a/tools/modern-tests/apps/coffeescript/imports/ui/App.coffee b/tools/modern-tests/apps/coffeescript/imports/ui/App.coffee new file mode 100644 index 0000000000..f6cf0f2b01 --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/imports/ui/App.coffee @@ -0,0 +1,10 @@ +import React from 'react' +import { Hello } from './Hello.coffee' +import { Info } from './Info.coffee' + +export App = -> +
+

Welcome to Meteor!

+ + +
diff --git a/tools/modern-tests/apps/coffeescript/imports/ui/Hello.coffee b/tools/modern-tests/apps/coffeescript/imports/ui/Hello.coffee new file mode 100644 index 0000000000..ab48a1e4f2 --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/imports/ui/Hello.coffee @@ -0,0 +1,12 @@ +import React, { useState } from 'react' + +export Hello = -> + [counter, setCounter] = useState(0) + + increment = -> + setCounter(counter + 1) + +
+ +

You've pressed the button {counter} times.

+
diff --git a/tools/modern-tests/apps/coffeescript/imports/ui/Info.coffee b/tools/modern-tests/apps/coffeescript/imports/ui/Info.coffee new file mode 100644 index 0000000000..062d35eee2 --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/imports/ui/Info.coffee @@ -0,0 +1,19 @@ +import React from 'react' +import { useFind, useSubscribe } from 'meteor/react-meteor-data' +import { LinksCollection } from '../api/links.coffee' + +export Info = -> + isLoading = useSubscribe('links') + links = useFind(-> LinksCollection.find()) + + if isLoading() + return
Loading...
+ +
+

Learn Meteor!

+ +
diff --git a/tools/modern-tests/apps/coffeescript/package-lock.json b/tools/modern-tests/apps/coffeescript/package-lock.json new file mode 100644 index 0000000000..542d86af4b --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/package-lock.json @@ -0,0 +1,1445 @@ +{ + "name": "react", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "react", + "dependencies": { + "@babel/runtime": "^7.23.5", + "@swc/helpers": "^0.5.17", + "meteor-node-stubs": "^1.2.12", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/meteor-node-stubs": { + "version": "1.2.22", + "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.2.22.tgz", + "integrity": "sha512-xpHq9ExdN8fshx9CxOe1nheyWslAepejdkIQgTsk+96e46UJ4ms5TSiQX1rjd6rJuBOjIjHKLqqYvdTsHQj/pw==", + "bundleDependencies": [ + "@meteorjs/crypto-browserify", + "assert", + "browserify-zlib", + "buffer", + "console-browserify", + "constants-browserify", + "domain-browser", + "events", + "https-browserify", + "os-browserify", + "path-browserify", + "process", + "punycode", + "querystring-es3", + "readable-stream", + "stream-browserify", + "stream-http", + "string_decoder", + "timers-browserify", + "tty-browserify", + "url", + "util", + "vm-browserify" + ], + "license": "MIT", + "dependencies": { + "@meteorjs/crypto-browserify": "^3.12.1", + "assert": "^2.1.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.7.1", + "console-browserify": "^1.2.0", + "constants-browserify": "^1.0.0", + "domain-browser": "^4.23.0", + "events": "^3.3.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.2", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.3.0", + "timers-browserify": "^2.0.12", + "tty-browserify": "0.0.1", + "url": "^0.11.4", + "util": "^0.12.5", + "vm-browserify": "^1.1.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign": { + "version": "4.2.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.1", + "brorand": "^1.1.0", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash-base": "~3.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/create-ecdh": { + "version": "4.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/create-ecdh/node_modules/bn.js": { + "version": "4.12.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/crypto-browserify": { + "version": "3.12.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@meteorjs/browserify-sign": "^4.2.3", + "@meteorjs/create-ecdh": "^4.0.4", + "browserify-cipher": "^1.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/asn1.js": { + "version": "4.10.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/assert": { + "version": "2.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "node_modules/meteor-node-stubs/node_modules/available-typed-arrays": { + "version": "1.0.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/bn.js": { + "version": "5.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/brorand": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/browserify-aes": { + "version": "1.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/browserify-cipher": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/browserify-des": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/browserify-rsa": { + "version": "4.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/meteor-node-stubs/node_modules/browserify-zlib": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/meteor-node-stubs/node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/meteor-node-stubs/node_modules/buffer-xor": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/builtin-status-codes": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/call-bind": { + "version": "1.0.8", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/call-bound": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/cipher-base": { + "version": "1.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/meteor-node-stubs/node_modules/console-browserify": { + "version": "1.2.0", + "inBundle": true + }, + "node_modules/meteor-node-stubs/node_modules/constants-browserify": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/core-util-is": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/create-hash": { + "version": "1.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/create-hmac": { + "version": "1.1.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/meteor-node-stubs/node_modules/define-data-property": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/define-properties": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/des.js": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/diffie-hellman": { + "version": "5.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/domain-browser": { + "version": "4.23.0", + "inBundle": true, + "license": "Artistic-2.0", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/meteor-node-stubs/node_modules/dunder-proto": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/es-define-property": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/es-errors": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/es-object-atoms": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/events": { + "version": "3.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/meteor-node-stubs/node_modules/evp_bytestokey": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/for-each": { + "version": "0.3.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/function-bind": { + "version": "1.1.2", + "inBundle": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/get-intrinsic": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/get-proto": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/gopd": { + "version": "1.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/has-property-descriptors": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/has-symbols": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/has-tostringtag": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/hash-base": { + "version": "3.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/meteor-node-stubs/node_modules/hash.js": { + "version": "1.1.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/hasown": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/hmac-drbg": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/https-browserify": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/meteor-node-stubs/node_modules/inherits": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/meteor-node-stubs/node_modules/is-arguments": { + "version": "1.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/is-callable": { + "version": "1.2.7", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/is-generator-function": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/is-nan": { + "version": "1.3.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/is-regex": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/is-typed-array": { + "version": "1.1.15", + "inBundle": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/isarray": { + "version": "2.0.5", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/math-intrinsics": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/md5.js": { + "version": "1.3.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/miller-rabin": { + "version": "4.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/meteor-node-stubs/node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/minimalistic-assert": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/meteor-node-stubs/node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/object-inspect": { + "version": "1.13.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/object-is": { + "version": "1.1.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/object-keys": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/object.assign": { + "version": "4.1.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/os-browserify": { + "version": "0.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/pako": { + "version": "1.0.11", + "inBundle": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/meteor-node-stubs/node_modules/parse-asn1": { + "version": "5.1.7", + "inBundle": true, + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/meteor-node-stubs/node_modules/path-browserify": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/pbkdf2": { + "version": "3.1.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/meteor-node-stubs/node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/possible-typed-array-names": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/process": { + "version": "0.11.10", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/process-nextick-args": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/public-encrypt": { + "version": "4.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/punycode": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/qs": { + "version": "6.14.0", + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/querystring-es3": { + "version": "0.2.1", + "inBundle": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/meteor-node-stubs/node_modules/randombytes": { + "version": "2.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/randomfill": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/readable-stream": { + "version": "3.6.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/meteor-node-stubs/node_modules/ripemd160": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/safe-regex-test": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/set-function-length": { + "version": "1.2.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/setimmediate": { + "version": "1.0.5", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/sha.js": { + "version": "2.4.11", + "inBundle": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/meteor-node-stubs/node_modules/side-channel": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/side-channel-list": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/side-channel-map": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/side-channel-weakmap": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/stream-browserify": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/stream-http": { + "version": "3.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/string_decoder": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/timers-browserify": { + "version": "2.0.12", + "inBundle": true, + "license": "MIT", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/to-buffer": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/tty-browserify": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/typed-array-buffer": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/url": { + "version": "0.11.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/util": { + "version": "0.12.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/vm-browserify": { + "version": "1.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/which-typed-array": { + "version": "1.1.19", + "inBundle": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/xtend": { + "version": "4.0.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + } + } +} diff --git a/tools/modern-tests/apps/coffeescript/package.json b/tools/modern-tests/apps/coffeescript/package.json new file mode 100644 index 0000000000..38d7b27010 --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/package.json @@ -0,0 +1,29 @@ +{ + "name": "react", + "private": true, + "scripts": { + "start": "meteor run", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.23.5", + "@swc/helpers": "^0.5.17", + "coffeescript": "^2.7.0", + "meteor-node-stubs": "^1.2.12", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "playwright": "^1.54.2" + }, + "meteor": { + "mainModule": { + "client": "client/main.coffee", + "server": "server/main.coffee" + }, + "testModule": "tests/main.coffee", + "modern": true + } +} diff --git a/tools/modern-tests/apps/coffeescript/server/main.coffee b/tools/modern-tests/apps/coffeescript/server/main.coffee new file mode 100644 index 0000000000..35d653b1a7 --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/server/main.coffee @@ -0,0 +1,29 @@ +import { Meteor } from 'meteor/meteor' +import { LinksCollection } from '/imports/api/links.coffee' + +insertLink = ({ title, url }) -> + await LinksCollection.insertAsync({ title, url, createdAt: new Date() }) + +Meteor.startup -> + # If the Links collection is empty, add some data. + if await LinksCollection.find().countAsync() is 0 + await insertLink + title: 'Do the Tutorial' + url: 'https://react-tutorial.meteor.com/simple-todos/01-creating-app.html' + + await insertLink + title: 'Follow the Guide' + url: 'https://guide.meteor.com' + + await insertLink + title: 'Read the Docs' + url: 'https://docs.meteor.com' + + await insertLink + title: 'Discussions' + url: 'https://forums.meteor.com' + + # We publish the entire Links collection to all clients. + # In order to be fetched in real-time to the clients + Meteor.publish "links", -> + LinksCollection.find() diff --git a/tools/modern-tests/apps/coffeescript/tests/main.coffee b/tools/modern-tests/apps/coffeescript/tests/main.coffee new file mode 100644 index 0000000000..fe5d2c4b1b --- /dev/null +++ b/tools/modern-tests/apps/coffeescript/tests/main.coffee @@ -0,0 +1,14 @@ +import assert from "assert" + +describe "react", -> + it "package.json has correct name", -> + { name } = await import("../package.json") + assert.strictEqual(name, "react") + + if Meteor.isClient + it "client is not server", -> + assert.strictEqual(Meteor.isServer, false) + + if Meteor.isServer + it "server is not client", -> + assert.strictEqual(Meteor.isClient, false) diff --git a/tools/modern-tests/assertions.js b/tools/modern-tests/assertions.js index a8441ccb9e..2ba29cded4 100644 --- a/tools/modern-tests/assertions.js +++ b/tools/modern-tests/assertions.js @@ -24,12 +24,14 @@ export async function assertMeteorApp(port, options = {}) { if (inTitle) { const title = await page.title(); expect(title).toMatch(new RegExp(inTitle)); + console.log(`✅ Title: ${title}`); } // Check for static content if specified if (inH1) { const h1Text = await page.$eval('h1', el => el.textContent); expect(h1Text).toMatch(new RegExp(inH1)); + console.log(`✅ H1: ${h1Text}`); } } diff --git a/tools/modern-tests/coffeescript.test.js b/tools/modern-tests/coffeescript.test.js new file mode 100644 index 0000000000..4c2dcfa972 --- /dev/null +++ b/tools/modern-tests/coffeescript.test.js @@ -0,0 +1,64 @@ +import { + waitForMeteorOutput, +} from "./helpers"; +import { testMeteorBundler, testMeteorRspackBundler } from './test-helpers'; + +describe('CoffeeScript App Bundling /', () => { + describe('Meteor+Rspack Bundler /', testMeteorRspackBundler({ + appName: 'coffeescript', + port: 3132, + filePaths: { + client: 'client/main.coffee', + server: 'server/main.coffee', + test: 'tests/main.coffee' + }, + customUpdates: { + devClient: (message) => `console.log "${message}" if Meteor.isDevelopment`, + devServer: (message) => `console.log "${message}" if Meteor.isDevelopment`, + prodClient: (message) => `console.log "${message}" if Meteor.isProduction`, + prodServer: (message) => `console.log "${message}" if Meteor.isProduction`, + test: (message) => `console.log "${message}"` + }, + customAssertions: { + afterRun: async ({ result }) => { + await waitForCoffeescriptEnvs(result.outputLines); + }, + afterRunRebuildClient: async ({ allConsoleLogs }) => { + // Check for HMR output as enabled by default + await waitForMeteorOutput(allConsoleLogs, /.*HMR.*Updated modules:*/); + }, + afterRunProduction: async ({ result }) => { + await waitForCoffeescriptEnvs(result.outputLines); + }, + afterRunProductionRebuildClient: async ({ allConsoleLogs }) => { + // Check for HMR to not be enabled in production-like mode + await waitForMeteorOutput(allConsoleLogs, /.*HMR.*Updated modules:*/, { negate: true }); + }, + afterTest: async ({ result }) => { + await waitForCoffeescriptEnvs(result.outputLines); + }, + afterTestOnce: async ({ result }) => { + await waitForCoffeescriptEnvs(result.outputLines); + }, + afterBuild: async ({ result }) => { + await waitForCoffeescriptEnvs(result.outputLines); + }, + } + })); +}); + +/** + * Helper function to wait for CoffeeScript environment output from both Rspack Client and Server + * @param {string[]} outputLines - Array that will be populated with output lines + * @param {Object} options - Options for waiting + * @param {number} options.timeout - Maximum time to wait in milliseconds + * @param {number} options.checkInterval - Interval between checks in milliseconds + * @returns {Promise} - A promise that resolves when coffeescript envs are enabled + */ +export async function waitForCoffeescriptEnvs(outputLines, options = {}) { + await waitForMeteorOutput( + outputLines, + /.*isCoffeescriptEnabled:.*true.*/, + options + ); +} diff --git a/tools/modern-tests/test-helpers.js b/tools/modern-tests/test-helpers.js index eef3ab7b0a..a41e9742bd 100644 --- a/tools/modern-tests/test-helpers.js +++ b/tools/modern-tests/test-helpers.js @@ -105,6 +105,13 @@ export function testMeteorRspackBundler(options) { prodServer: "Hello from prod server", test: "Hello from test" }, + customUpdates = { + devClient: (message) => `if (Meteor.isDevelopment) console.log("${message}");`, + devServer: (message) => `if (Meteor.isDevelopment) console.log("${message}");`, + prodClient: (message) => `if (Meteor.isProduction) console.log("${message}");`, + prodServer: (message) => `if (Meteor.isProduction) console.log("${message}");`, + test: (message) => `console.log("${message}");` + }, customAssertions, // Some existing tests may fail if this is not set verbose = true, @@ -188,7 +195,7 @@ export function testMeteorRspackBundler(options) { // Update the client code await appendFileContent(tempDir, filePaths.client, { - content: `if (Meteor.isDevelopment) console.log("${customMessages.devClient}");`, + content: customUpdates.devClient(customMessages.devClient), }); const consoleLogs = await waitForPlaywrightConsole(customMessages.devClient, { returnAllLogs: true }); @@ -205,7 +212,7 @@ export function testMeteorRspackBundler(options) { // Update the server code await appendFileContent(tempDir, filePaths.server, { - content: `if (Meteor.isDevelopment) console.log("${customMessages.devServer}");`, + content: customUpdates.devServer(customMessages.devServer), }); await waitForMeteorOutput( result.outputLines, @@ -273,7 +280,7 @@ export function testMeteorRspackBundler(options) { // Update the client code await appendFileContent(tempDir, filePaths.client, { - content: `if (Meteor.isProduction) console.log("${customMessages.prodClient}");`, + content: customUpdates.prodClient(customMessages.prodClient), }); const consoleLogs = await waitForPlaywrightConsole(customMessages.prodClient, { returnAllLogs: true }); @@ -290,7 +297,7 @@ export function testMeteorRspackBundler(options) { // Update the server code await appendFileContent(tempDir, filePaths.server, { - content: `if (Meteor.isProduction) console.log("${customMessages.prodServer}");`, + content: customUpdates.prodServer(customMessages.prodServer), }); await waitForMeteorOutput( result.outputLines, @@ -347,7 +354,7 @@ export function testMeteorRspackBundler(options) { // Update the test code await appendFileContent(tempDir, filePaths.test, { - content: `console.log("${customMessages.test}");`, + content: customUpdates.test(customMessages.test), }); await waitForMeteorOutput( result.outputLines,