diff --git a/.circleci/config.yml b/.circleci/config.yml
index 4b7d3eef83..61390230e9 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -32,6 +32,24 @@ run_env_change: &run_env_change
# Reload sysctl so these are in effect.
# sudo sysctl -p
+log_env: &log_env
+ name: Log Environment
+ command: |
+ echo "==> LBS Version"
+ lsb_release -a
+ echo "==> cat /etc/os-release"
+ cat /etc/os-release
+ echo "==> uname -srm"
+ uname -srm
+ echo "==> Node version: $(node --version)"
+ echo "==> NPM version: $(npm --version)"
+ echo "==> Meteor Node version: $(./meteor node --version)"
+ echo "==> Meteor NPM version: $(./meteor npm --version)"
+ echo "==> Dev bundle package.json:"
+ cat ./dev_bundle/lib/package.json
+ echo "==> Dev bundle node_modules:"
+ ls -l ./dev_bundle/lib/node_modules
+
# A reusable "run" snippet which enables the continued logging of memoryusage
# to a file on disk which can be saved to build artifacts for later analysis.
run_log_mem_use: &run_log_mem_use
@@ -61,7 +79,7 @@ run_save_node_bin: &run_save_node_bin
build_machine_environment: &build_machine_environment
# Specify that we want an actual machine (ala Circle 1.0), not a Docker image.
docker:
- - image: meteor/circleci:20231116-android-33-node-14
+ - image: meteor/circleci:2023.12.1-android-34-node-18
resource_class: large
environment:
# This multiplier scales the waitSecs for selftests.
@@ -97,36 +115,10 @@ build_machine_environment: &build_machine_environment
NUM_GROUPS: 12
RUNNING_AVG_LENGTH: 6
-can_disable_fibers: &can_disable_fibers
- parameters:
- fibers:
- type: boolean
- default: true
-
-set_fibers_env: &set_fibers_env
- name: "Disable Fibers"
- command: |
- if [ "<< parameters.fibers >>" == "false" ]; then
- echo "Disabling Fibers"
- echo 'export DISABLE_FIBERS=1' >> "$BASH_ENV"
- source "$BASH_ENV"
- fi
-
-
-# Run tests with Fibers and then without.
-matrix_for_fibers: &matrix_for_fibers
- matrix:
- parameters:
- # If we want to run with Fibers and without, just append false here.
- fibers: [true]
-
-
jobs:
Get Ready:
<<: *build_machine_environment
steps:
- - run:
- command: rm -fR /home/circleci/project/*
- run:
<<: *run_log_mem_use
- run:
@@ -143,8 +135,16 @@ jobs:
- run:
name: Combine NPM Shrinkwrap Files
command: |
- for d in packages/*/.npm/package; do cat $d/npm-shrinkwrap.json >> shrinkwraps.txt; done
- for d in packages/*/.npm/plugin/*; do cat $d/npm-shrinkwrap.json >> shrinkwraps.txt; done
+ for d in packages/*/.npm/package; do
+ if [ -f $d/npm-shrinkwrap.json ]; then
+ cat $d/npm-shrinkwrap.json >> shrinkwraps.txt;
+ fi
+ done
+ for d in packages/*/.npm/plugin/*; do
+ if [ -f $d/npm-shrinkwrap.json ]; then
+ cat $d/npm-shrinkwrap.json >> shrinkwraps.txt;
+ fi
+ done
- restore_cache:
keys:
- package-npm-deps-cache-group1-v3-{{ checksum "shrinkwraps.txt" }}
@@ -171,15 +171,19 @@ jobs:
- run:
name: Clear npm cache
command: ./meteor npm cache clear --force
+ - run:
+ <<: *log_env
- run:
name: Get Ready
command: |
eval $PRE_TEST_COMMANDS;
- pushd tools
- npm install @types/node@14.17.6 --save-dev
+ cd dev_bundle/lib
+ ../../meteor npm install @types/node@20.10.5 --save-dev
# Ensure that meteor/tools has no TypeScript errors.
- ../meteor npx tsc --noEmit --skipLibCheck
- popd
+ ../../meteor npm install -g typescript
+ cd ../../
+ # tools/node_modules is a symlink, but starting on NPM 7, this symlinks are deleted https://github.com/npm/cli/issues/3669
+ # so we are copying the node_modules to tools
./meteor --get-ready
# shouldn't take longer than 60 minutes
no_output_timeout: 60m
@@ -194,7 +198,6 @@ jobs:
path: /tmp/memuse.txt
Isolated Tests:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -203,7 +206,6 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
- run:
name: "Print environment"
command: printenv
@@ -216,6 +218,8 @@ jobs:
--retries ${METEOR_SELF_TEST_RETRIES} \
--headless \
no_output_timeout: 20m
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Custom Warehouse Tests)"
command: |
@@ -238,7 +242,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 0:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -247,10 +250,11 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
- run:
name: "Print environment"
command: printenv
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Test Group 0)"
command: |
@@ -280,7 +284,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 1:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -289,10 +292,11 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
- run:
name: "Print environment"
command: printenv
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Test Group 1)"
command: |
@@ -322,7 +326,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 2:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -331,7 +334,8 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
+ - run:
+ <<: *log_env
- run:
name: "Print environment"
command: printenv
@@ -364,7 +368,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 3:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -373,7 +376,8 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
+ - run:
+ <<: *log_env
- run:
name: "Print environment"
command: printenv
@@ -406,7 +410,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 4:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -415,10 +418,11 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
- run:
name: "Print environment"
command: printenv
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Test Group 4)"
command: |
@@ -448,7 +452,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 5:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -457,10 +460,11 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
- run:
name: "Print environment"
command: printenv
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Test Group 5)"
command: |
@@ -490,7 +494,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 6:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -499,10 +502,11 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
- run:
name: "Print environment"
command: printenv
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Test Group 6)"
command: |
@@ -532,7 +536,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 7:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -541,10 +544,11 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
- run:
name: "Print environment"
command: printenv
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Test Group 7)"
command: |
@@ -574,7 +578,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 8:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -583,10 +586,11 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
- run:
name: "Print environment"
command: printenv
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Test Group 8)"
command: |
@@ -616,7 +620,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 9:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -625,10 +628,11 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
- run:
name: "Print environment"
command: printenv
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Test Group 9)"
command: |
@@ -658,7 +662,6 @@ jobs:
path: /tmp/memuse.txt
Test Group 10:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- run:
@@ -667,10 +670,11 @@ jobs:
<<: *run_env_change
- attach_workspace:
at: .
- - run: *set_fibers_env
- run:
name: "Print environment"
command: printenv
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Test Group 10)"
command: |
@@ -711,6 +715,8 @@ jobs:
- run:
name: "Print environment"
command: printenv
+ - run:
+ <<: *log_env
- run:
name: "Running self-test (Test Group 11)"
command: |
@@ -724,7 +730,7 @@ jobs:
--headless \
--junit ./tmp/results/junit/11.xml \
--without-tag "custom-warehouse"
- no_output_timeout: 30m
+ no_output_timeout: 35m
- run:
<<: *run_save_node_bin
- store_test_results:
@@ -739,47 +745,30 @@ jobs:
- store_artifacts:
path: /tmp/memuse.txt
- # Test the JSDoc declarations which live within this codebase against the
- # Meteor Docs (https://github.com/meteor/docs) repository, where they'll
- # eventually be consumed. This test aims to provide an early warning of
- # potentially breaking changes, so they aren't discovered when the docs are
- # next updated, which generally occurs during major Meteor version releases
- # (for example, 1.4 to 1.5, 1.5 to 1.6).
+ # Test the JSDoc declarations which live within this codebase.
+ # Now the docs live in this repo, we can test them here, every PR is tested.
Docs:
docker:
# This Node version should match that in the meteor/docs CircleCI config.
- - image: meteor/circleci:android-28-node-12
+ - image: meteor/circleci:2023.12.1-android-34-node-20
resource_class: large
environment:
CHECKOUT_METEOR_DOCS: /home/circleci/test_docs
+ <<: *build_machine_environment
steps:
- run:
- name: Cloning "meteor/docs" Repository's "update-to-meteor-1.9" branch
+ name: Cloning "meteor" Repository's current branch
command: |
- git clone --branch update-to-meteor-1.9 https://github.com/meteor/docs.git ${CHECKOUT_METEOR_DOCS}
- # The "docs" repository normally brings in the Meteor code as a Git
- # submodule checked out into the "code" directory. As the goal of this
- # test is to run it against the _current_ repository's code, we'll move
- # the "code" directory out of the way and move the checkout (of meteor)
- # into that directory, rather than the default $CIRCLE_WORKING_DIRECTORY.
- - checkout
- - run:
- name: Move Meteor checkout into docs repository's "code" directory
- command: |
- rmdir "${CHECKOUT_METEOR_DOCS}/code"
- # $CIRCLE_WORKING_DIRECTORY uses a tilde, so expand it to $HOME.
- mv "${CIRCLE_WORKING_DIRECTORY/#\~/$HOME}" \
- "${CHECKOUT_METEOR_DOCS}/code"
+ git clone --branch $CIRCLE_BRANCH https://github.com/meteor/meteor.git ${CHECKOUT_METEOR_DOCS}
# Run almost the same steps the meteor/docs repository runs, minus deploy.
- run:
name: Generating Meteor documentation for JSDoc testing
command: |
- cd ${CHECKOUT_METEOR_DOCS}
+ cd ${CHECKOUT_METEOR_DOCS}/docs
npm install
npm test
Clean Up:
- <<: *can_disable_fibers
<<: *build_machine_environment
steps:
- attach_workspace:
@@ -862,58 +851,45 @@ workflows:
- Docs
- Get Ready
- Isolated Tests:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 0:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 1:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 2:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 3:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 4:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 5:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 6:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 7:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 8:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 9:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 10:
- <<: *matrix_for_fibers
requires:
- Get Ready
- Test Group 11:
requires:
- Get Ready
- Clean Up:
- <<: *matrix_for_fibers
requires:
- Isolated Tests
- Test Group 0
diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000000..1b4ca4f3b5
--- /dev/null
+++ b/.envrc
@@ -0,0 +1,45 @@
+#!/bin/env zsh
+
+#
+# Commands and shortcuts for Meteor core development, you can load these in your terminal by running `source .envrc`.
+# Or by adding `[[ -s .envrc ]] && source .envrc` to your `.zshrc` or `.bashrc`.
+#
+
+export ROOT_DIR=$(git rev-parse --show-toplevel)
+
+########
+# Core #
+########
+
+function @meteor {
+ "$ROOT_DIR/meteor" "$@"
+}
+
+function @test-package {
+ @meteor test-packages "$@" --exclude-archs=web.browser.legacy,web.cordova
+}
+
+function @test-packages {
+ TINYTEST_FILTER="$1" @meteor test-packages --exclude-archs=web.browser.legacy,web.cordova
+}
+
+function @test-self {
+ @meteor self-test "$@"
+}
+
+function @check-syntax {
+ node "$ROOT_DIR/scripts/admin/check-legacy-syntax/check-syntax.js"
+}
+
+function @generate-dev-bundle {
+ rm -rf $ROOT_DIR/dev_bundle*
+ "$ROOT_DIR/scripts/generate-dev-bundle.sh"
+}
+
+#################
+# Documentation #
+#################
+
+function @docs-migration-start {
+ npm run docs:dev --prefix "$ROOT_DIR/v3-docs/v3-migration-docs"
+}
\ No newline at end of file
diff --git a/.eslintignore b/.eslintignore
index 3653ab7c32..a62c426997 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -2,9 +2,7 @@ android_bundle/
dev_bundle/
docs/
examples/
-packages/
scripts/
-tools/
!tools/*.js
!tools/isobuild/*.js
!tools/catalog/*.js
diff --git a/.github/workflows/check-code-style.yml b/.github/workflows/check-code-style.yml
index 32a51a3ac2..5b7dbbac4c 100644
--- a/.github/workflows/check-code-style.yml
+++ b/.github/workflows/check-code-style.yml
@@ -13,7 +13,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
- node-version: 14.x
+ node-version: 20.x
- run: npm ci
- name: Run ESLint@8
run: npx eslint@8 "./npm-packages/meteor-installer/**/*.js"
diff --git a/.github/workflows/check-syntax.yml b/.github/workflows/check-syntax.yml
index 4533769c0c..1f9f151c94 100644
--- a/.github/workflows/check-syntax.yml
+++ b/.github/workflows/check-syntax.yml
@@ -9,7 +9,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
- node-version: 18.x
+ node-version: 20.x
- run: cd scripts/admin/check-legacy-syntax && npm ci
- name: Check syntax
- run: cd scripts/admin/check-legacy-syntax && node check-syntax.js
+ run: cd scripts/admin/check-legacy-syntax && node check-syntax.js
diff --git a/.github/workflows/meteor-selftest-windows.yml b/.github/workflows/meteor-selftest-windows.yml
new file mode 100644
index 0000000000..eed1b2b1b8
--- /dev/null
+++ b/.github/workflows/meteor-selftest-windows.yml
@@ -0,0 +1,55 @@
+name: Meteor Selftest Windows
+
+on:
+ pull_request:
+ types:
+ - opened
+ - reopened
+ - synchronize
+ branches:
+ - release-3.0
+ push:
+ branches:
+ - release-3.0
+
+env:
+ METEOR_PRETTY_OUTPUT: 0
+ SELF_TEST_TOOL_NODE_FLAGS: ' '
+ TOOL_NODE_FLAGS: --expose-gc
+ TIMEOUT_SCALE_FACTOR: 20
+ METEOR_HEADLESS: true
+ SELF_TEST_EXCLUDE: '^NULL-LEAVE-THIS-HERE-NULL$'
+
+jobs:
+ test:
+ runs-on: windows-2019-meteor
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v2
+ with:
+ node-version: 20.x
+
+ - name: Install dependencies
+ shell: pwsh
+ run: |
+ $env:PATH = "C:\Program Files\7-Zip;$env:PATH"
+ .\scripts\windows\ci\install.ps1
+
+ - name: Run tests
+ shell: pwsh
+ run: |
+ $env:PATH = "C:\Program Files\7-Zip;$env:PATH"
+ .\scripts\windows\ci\test.ps1
+
+ - name: Cache dependencies
+ uses: actions/cache@v2
+ with:
+ path: |
+ .\dev_bundle
+ .\.babel-cache
+ .\.meteor
+ key: ${{ runner.os }}-meteor-${{ hashFiles('**/package-lock.json') }}
diff --git a/.github/workflows/npm-eslint-plugin-meteor.yml b/.github/workflows/npm-eslint-plugin-meteor.yml
index be2b5473af..29a72f0005 100644
--- a/.github/workflows/npm-eslint-plugin-meteor.yml
+++ b/.github/workflows/npm-eslint-plugin-meteor.yml
@@ -16,15 +16,12 @@ jobs:
defaults:
run:
working-directory: npm-packages/eslint-plugin-meteor
- strategy:
- matrix:
- node-version: [14.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
- node-version: ${{ matrix.node-version }}
+ node-version: 20.x
cache: npm
- run: npm ci
- run: npm test
diff --git a/.github/workflows/npm-meteor-babel.yml b/.github/workflows/npm-meteor-babel.yml
index dd3c6b9e49..61bb203ccb 100644
--- a/.github/workflows/npm-meteor-babel.yml
+++ b/.github/workflows/npm-meteor-babel.yml
@@ -16,15 +16,12 @@ jobs:
defaults:
run:
working-directory: npm-packages/meteor-babel
- strategy:
- matrix:
- node-version: [14.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
- node-version: ${{ matrix.node-version }}
+ node-version: 14.x
cache: npm
- run: npm ci
- run: npm run test
diff --git a/.gitignore b/.gitignore
index 35e2d8f2e7..fe19b9b3e9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,9 @@ mongo-test-output
# core packages shouldn't have .versions files
packages/*/.versions
+
+# packages shouldn't have .npm on Git
+packages/**/.npm
+
+# doc files should not be committed
+packages/**/*.docs.js
diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 0000000000..711f4c4f56
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,3 @@
+{
+ "esversion": 11
+}
diff --git a/.travis.yml b/.travis.yml
index 912847a39c..4d9997a4d7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,10 @@
language: node_js
os: linux
dist: jammy
+sudo: required
+services: xvfb
node_js:
- - "14.21.3"
+ - "20.15.1"
cache:
directories:
- ".meteor"
@@ -11,17 +13,20 @@ script:
- travis_retry ./packages/test-in-console/run.sh
env:
global:
- - CXX=g++11
+ - CXX=g++-12
- phantom=false
- PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium
- jobs:
- # We don't want to run the tests without fibers anymore.
- # - DISABLE_FIBERS=1
- # Use a different flag, since node would use false as a string.
- - FIBERS_ENABLED=1
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- - g++-11
+ - g++-12
+ - libnss3
+
+before_install:
+ - cat /etc/apt/sources.list
+ - python3 --version
+ - echo "deb http://archive.ubuntu.com/ubuntu jammy main universe" | sudo tee -a /etc/apt/sources.list
+ - sudo apt-get update
+ - sudo apt-get install -y libnss3
diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md
index dbbdfefcdd..a34dd51841 100644
--- a/DEVELOPMENT.md
+++ b/DEVELOPMENT.md
@@ -43,13 +43,19 @@ can run Meteor directly from a Git checkout using these steps:
$ /path/to/meteor-checkout/meteor run
```
- > _Tip:_ Consider making an easy-to-run alias for frequent use:
+ > _Tip 1:_ Consider making an easy-to-run alias for frequent use:
>
> alias mymeteor=/path/to-meteor-checkout/meteor
>
> This allows the use of `mymeteor` in place of `meteor`. To persist this
> across shell logouts, simply add it to `~/.bashrc` or `.zshrc`.
+ > _Tip 2:_ When working with meteor tool, it may be helpful to use the debugger to check what's happening. You can do this using the following flag:
+ >
+ > TOOL_NODE_FLAGS="--inspect-brk" mymeteor
+ >
+ > Then you can use the chrome debugger inside `chrome://inspect`.
+
### Notes when running from a checkout
The following are some distinct differences you must pay attention to when running Meteor from a checkout:
diff --git a/README.md b/README.md
index 1ff97ec39c..df9657445a 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,7 @@
[](https://meteor.com)
[](https://guide.meteor.com/3.0-migration)
+
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index de63e8fd72..0000000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-version: '{build}'
-
-branches:
- except:
- - /^dev-bundle-/
-
-skip_branch_with_pr: true
-
-clone_folder: C:\projects\meteor
-image: Visual Studio 2019
-
-environment:
- METEOR_PRETTY_OUTPUT: 0
- SELF_TEST_TOOL_NODE_FLAGS: " "
- TOOL_NODE_FLAGS: --expose-gc
- TIMEOUT_SCALE_FACTOR: 8
- METEOR_HEADLESS: true
- SELF_TEST_EXCLUDE: "^NULL-LEAVE-THIS-HERE-NULL$"
-platform:
- - x64
-
-matrix:
- fast_finish: true
- allow_failures:
- - platform: x64
-
-# We don't need the actual "build", just the tests.
-build: off
-
-install:
- - ps: C:\projects\meteor\scripts\windows\appveyor\install.ps1
-
-test_script:
- - ps: C:\projects\meteor\scripts\windows\appveyor\test.ps1
-
-on_failure:
- - ps: |
- $npmLogsDir = "$($Env:AppData)\npm-cache\_logs"
- If (Test-Path "$npmLogsDir") {
- Get-ChildItem "${npmLogsDir}\*.log" |
- % { Push-AppveyorArtifact $_.FullName -FileName $_.Name }
- }
-
-cache:
- - dev_bundle -> meteor
- - .babel-cache -> meteor
- - .meteor
diff --git a/docs/_config.yml b/docs/_config.yml
index fdf40aa556..0556242aac 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -64,6 +64,7 @@ sidebar_categories:
- api/packagejs
- api/mobile-config
- api/environment
+ - api/top-level-await
Packages:
- packages/accounts-ui
- packages/accounts-passwordless
diff --git a/docs/generators/changelog/README.md b/docs/generators/changelog/README.md
index 30a3780b8e..bd795db186 100644
--- a/docs/generators/changelog/README.md
+++ b/docs/generators/changelog/README.md
@@ -12,18 +12,37 @@ To get which branches were merged into release you can search in the GitHub
repo by using this query:
```
- is:pr base: is:merged
+ is:pr base: is:merged
```
or in GH Cli:
+
```bash
gh pr list --state merged --base
```
note that it may not be as useful as the first one, since it will not show the
Authors and other related information.
+
## Why?
Computers with lower memory/ IDEs with high memory usage can have problems with
the changelog file(~10k lines). This is a way to reduce the memory usage of the changelog, also creating a more
organized changelog, since all the files will be reflecting at least one version.
+
+## Update ordering.
+
+If you want to make sure that the changelog is correcly ordered, take a look at the `order-packages.js` file.
+to use it, run the command below:
+
+```bash
+node order-packages.js versions/3.0.md
+```
+
+or
+
+```bash
+node order-packages.js versions/.md
+```
+
+it will update the file with the correct ordering(this will override the file).
\ No newline at end of file
diff --git a/docs/generators/changelog/order-packages.js b/docs/generators/changelog/order-packages.js
new file mode 100644
index 0000000000..8af678af5e
--- /dev/null
+++ b/docs/generators/changelog/order-packages.js
@@ -0,0 +1,81 @@
+const fs = require("fs").promises;
+
+// we want to get the strings that are between #### Breaking Changes and #### New Public API
+// then we will create a map with the package name and the version for example:
+//
+// - `accounts-2fa@3.0.0`:
+
+// - Some methods are now async. See below:
+// - `Accounts._is2faEnabledForUser`
+// - `(Meteor Method) - generate2faActivationQrCode`
+// - `(Meteor Method) - enableUser2fa`
+// - `(Meteor Method) - disableUser2fa`
+// - `(Meteor Method) - has2faEnabled`
+
+// will be converted to:
+// {"accounts-2fa@3.0.0": ` - Some methods are now async. See below:
+// - `Accounts._is2faEnabledForUser`
+// - `(Meteor Method) - generate2faActivationQrCode`
+// - `(Meteor Method) - enableUser2fa`
+// - `(Meteor Method) - disableUser2fa`
+// - `(Meteor Method) - has2faEnabled``
+// }
+
+// then we will iterate and order the packages in alphabetical order and write again to the file.
+
+/**
+ *
+ * @param {string} path
+ * @returns {Promise<[string, null] | ["", Error]>}
+ */
+async function getFile(path) {
+ try {
+ const data = await fs.readFile(path, "utf8");
+ return [data, null];
+ } catch (e) {
+ console.error(e);
+ return ["", new Error("could not read file")];
+ }
+}
+
+async function main() {
+ const [filePath] = process.argv.slice(2);
+ const [code, error] = await getFile(filePath);
+ if (error) throw error;
+
+ const regex = /#### Breaking Changes([\s\S]*?)#### New Public API/gm;
+ const matches = code.match(regex).join("\n").split("\n");
+
+ let objectMap = {};
+ let currentWorkingPackage = "";
+ for (const line of matches) {
+ if (line.startsWith("-")) {
+ const packageName = line
+ .replace("-", "")
+ .replace("`:", "")
+ .replace("`", "")
+ .trim();
+ objectMap[packageName] = "";
+ currentWorkingPackage = packageName;
+ continue;
+ }
+ objectMap[currentWorkingPackage] += line + "\n";
+ }
+ // sorting acc
+ const result = Object.keys(objectMap)
+ .reduce((acc, key) => {
+ if (key === "") return acc;
+ acc.push({ key, value: objectMap[key]});
+ return acc;
+ }, [])
+ .sort((a, b) => a.key.localeCompare(b.key))
+ .reduce((acc, { key, value }) => {
+ return acc + `- \`${key}\`:\n${value}`;
+ }, "")
+
+ const newCode = code.replace(regex, `#### Breaking Changes\n\n${result}`);
+
+ await fs.writeFile(filePath, newCode);
+}
+
+main().then(() => console.log("done"));
diff --git a/docs/generators/changelog/script.js b/docs/generators/changelog/script.js
index 8c691ffa0f..5050630dc8 100755
--- a/docs/generators/changelog/script.js
+++ b/docs/generators/changelog/script.js
@@ -1,56 +1,49 @@
-const _fs = require('fs');
+const _fs = require("fs");
const fs = _fs.promises;
-
function getPackageVersion(packageName) {
function getFile(path) {
try {
- const data = _fs.readFileSync(path, 'utf8');
+ const data = _fs.readFileSync(path, "utf8");
return [data, null];
} catch (e) {
console.error(e);
- return ['', e];
+ return ["", e];
}
-
}
- const [code, error] = getFile(`../packages/${ packageName }/package.js`);
- if (error) return 'ERR_NO_VERSION';
+ const [code, error] = getFile(`../packages/${packageName}/package.js`);
+ if (error) return "";
for (const line of code.split(/\n/)) {
// verify if the line has a version
- if (!line.includes('version:')) continue;
+ if (!line.includes("version:")) continue;
//Package.describe({
// summary: 'some description.',
// version: '1.2.3' <--- this is the line we want, we assure that it has a version in the previous if
//});
- const [_, versionValue] = line.split(':');
+ const [_, versionValue] = line.split(":");
if (!versionValue) continue;
- const removeQuotes =
- (v) =>
- v
- .trim()
- .replace(',', '')
- .replace(/'/g, '')
- .replace(/"/g, '');
-
- if (versionValue.includes('-')) return removeQuotes(versionValue.split('-')[0]);
+ const removeQuotes = (v) =>
+ v.trim().replace(",", "").replace(/'/g, "").replace(/"/g, "");
+ if (versionValue.includes("-"))
+ return removeQuotes(versionValue.split("-")[0]);
return removeQuotes(versionValue);
}
}
const main = async () => {
try {
- console.log('started concatenating files');
- const files = await fs.readdir('./generators/changelog/versions', 'utf8');
+ console.log("started concatenating files");
+ const files = await fs.readdir("./generators/changelog/versions", "utf8");
const filesStream = files
- .map(file => {
- console.log(`reading file: ${ file }`);
+ .map((file) => {
+ console.log(`reading file: ${file}`);
return {
fileName: file,
- buf : fs.readFile(`./generators/changelog/versions/${ file }`, 'utf8')
+ buf: fs.readFile(`./generators/changelog/versions/${file}`, "utf8"),
};
})
- .map(async ({buf, fileName}, index) => {
+ .map(async ({ buf, fileName }, index) => {
// first file we don't do anything
// Big file and does not follow the new standard
if (index === 0) return buf;
@@ -58,53 +51,60 @@ const main = async () => {
/**
* @type {Set}
*/
- const contribuitors = new Set()
+ const contribuitors = new Set();
// DSL Replacers
// [PR #123] -> [PR #123](https://github.com/meteor/meteor/pull/123)
// [GH meteor/meteor] -> [meteor/meteor](https://github.com/meteor/meteor)
// package-name@get-version -> package-name@1.3.3
- const file = content
- .replace(/\[PR #(\d+)\]/g, (_, number) => `[PR](https://github.com/meteor/meteor/pull/${ number })`)
+ const file = content
+ .replace(
+ /\[PR #(\d+)\]/g,
+ (_, number) =>
+ `[PR](https://github.com/meteor/meteor/pull/${number})`
+ )
.replace(/\[GH ([^\]]+)\]/g, (_, name) => {
contribuitors.add(name);
- return `[${ name }](https://github.com/${ name })`
+ return `[${name}](https://github.com/${name})`;
})
- .replace(/([a-z0-9-]+)@get-version/g, (_, name) => `${ name }@${ getPackageVersion(name) }`);
+ .replace(
+ /([a-z0-9-]+)@get-version/g,
+ (_, name) => `${name}@${getPackageVersion(name)}`
+ );
// already have the contribuitors thanks in the file
if (
- file.includes('## Contributors') ||
- file.includes('#### Special thanks to') || // this must stay here for legacy reasons
- file.includes('[//]: # (Do not edit this file by hand.)')
- ) return file;
+ file.includes('## Contributors') ||
+ file.includes("#### Special thanks to") || // this must stay here for legacy reasons
+ file.includes("[//]: # (Do not edit this file by hand.)")
+ )
+ return file;
// add the contribuitors
- const contribuitorsList =
- Array
- .from(contribuitors)
- .map(name => `- [@${ name }](https://github.com/${ name }).`)
- .join('\n');
+ const contribuitorsList = Array.from(contribuitors)
+ .map((name) => `- [@${name}](https://github.com/${name}).`)
+ .join("\n");
- const doneFile = `${ file }\n\n## Contributors\n\n${ contribuitorsList }\n\n`;
+ const doneFile = `${file}\n\n## Contributors\n\n${contribuitorsList}\n\n`;
//SIDE EFFECTS
// so that this is not ran every time, we will update the last file.
// this is for the expensive part of the script
- if (index === files.length - 2) await fs.writeFile(`./generators/changelog/versions/${fileName}`, doneFile);
-
+ if (index === files.length - 2)
+ await fs.writeFile(
+ `./generators/changelog/versions/${fileName}`,
+ doneFile
+ );
return doneFile;
})
.reverse();
- console.log('Giving some touches to the files');
+ console.log("Giving some touches to the files");
const filesContent = await Promise.all(filesStream);
- await fs.writeFile('./history.md', filesContent.join(''));
- console.log('Finished :)');
-
+ await fs.writeFile("./history.md", filesContent.join(""));
+ console.log("Finished :)");
} catch (e) {
console.log(e);
}
-
-}
-main().then(_ => _);
+};
+main().then((_) => _);
diff --git a/docs/generators/changelog/versions/2.12.md b/docs/generators/changelog/versions/2.12.md
index 35735edd74..f0b74d3533 100644
--- a/docs/generators/changelog/versions/2.12.md
+++ b/docs/generators/changelog/versions/2.12.md
@@ -148,4 +148,3 @@ you can use ```WARN_WHEN_USING_OLD_API``` before starting your meteor process.
- [@zodern](https://github.com/zodern).
- [@dmromanov](https://github.com/dmromanov).
- [@matheusccastroo](https://github.com/matheusccastroo).
-
diff --git a/docs/generators/changelog/versions/3.0.0.md b/docs/generators/changelog/versions/3.0.0.md
new file mode 100644
index 0000000000..c5fa1f1a1e
--- /dev/null
+++ b/docs/generators/changelog/versions/3.0.0.md
@@ -0,0 +1,742 @@
+## v3.0, 2024-07-15
+
+### Highlights
+
+#### Breaking Changes
+
+- `accounts-2fa@3.0.0`:
+
+ - Some methods are now async. See below:
+ - `Accounts._is2faEnabledForUser`
+ - `(Meteor Method) - generate2faActivationQrCode`
+ - `(Meteor Method) - enableUser2fa`
+ - `(Meteor Method) - disableUser2fa`
+ - `(Meteor Method) - has2faEnabled`
+
+- `accounts-base@3.0.0`:
+
+ - `methods.removeOtherTokens` is now async
+ - `Accounts.destroyToken` is now async
+ - `Accounts.insertUserDoc` is now async
+ - `Accounts.updateOrCreateUserFromExternalService` is now async
+ - `Accounts.expirePasswordToken` is now async
+ - `Accounts.setupUsersCollection` is now async
+ - `Meteor.user` is now async in server
+
+- `accounts-facebook@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-github@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-google@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-meetup@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-meteor-developer@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-password@3.0.0`:
+
+ - Some server methods are now async:
+ - `Accounts.sendResetPasswordEmail`
+ - `Accounts.sendEnrollmentEmail`
+ - `Accounts.sendVerificationEmail`
+ - `Accounts.addEmail`
+ - `Accounts.removeEmail`
+ - `Accounts.verifyEmail`
+ - `Accounts.createUserVerifyingEmail`
+ - `Accounts.createUser`
+ - `Accounts.generateVerificationToken`
+ - `Accounts.generateResetToken`
+ - `Accounts.forgotPassword`
+ - `Accounts.setPassword`
+ - `Accounts.changePassword`
+ - `Accounts.setUsername`
+ - `Accounts.findUserByEmail`
+ - `Accounts.findUserByUsername`
+
+- `accounts-passwordless@3.0.0`:
+
+ - `Accounts.sendLoginTokenEmail` is now async.
+
+- `accounts-twitter@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-ui-unstyled@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-weibo@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `allow-deny@2.0.0`:
+
+ - Updated to accept async functions.
+
+- `appcache@2.0.0`:
+
+ - Updated internal api to use `handlers`
+
+- `audit-argument-checks@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `autopublish@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `autoupdate@2.0.0`:
+
+ - Updated api to be async, with asyncronous queueing.
+
+- `babel-compiler@8.0.0`:
+
+ - Add `Babel.compileForShell`
+ - Removed `Promise.await` default transform.
+ - Added top-level-await to packages.
+
+- `babel-runtime@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `base64@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `binary-heap@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `blaze@3.0.0`:
+ - Todo
+
+- `boilerplate-generator-tests@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `boilerplate-generator@2.0.0`:
+
+ - `toHTML` is no longer available (it was already deprecated). Use `toHTMLStream` instead.
+ - Updated to use `handlers`
+
+- `browser-policy-common@2.0.0`:
+
+ - Updated to use `handlers`
+
+- `browser-policy-content@2.0.0`:
+
+ - Some methods are now async. See below:
+ - `BrowserPolicy.content.setPolicy`
+ - `BrowserPolicy.content.allowInlineScripts`
+ - `BrowserPolicy.content.disallowInlineScripts`
+ - `BrowserPolicy.content.disallowAll`
+ - `BrowserPolicy.setDefaultPolicy`
+
+- `browser-policy-framing@2.0.0`:
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `browser-policy@2.0.0`:
+ Updated to use async methods from `browser-policy-common` and `browser-policy-content`.
+
+- `caching-compiler@2.0.0`:
+
+ - `afterLink` is now async.
+ - Updated to use now async API.
+
+- `callback-hook@2.0.0`:
+
+ - Added `forEachAsync` method.
+
+- `check@2.0.0`:
+
+ - Removed `fibers` related tests.
+
+- `constraint-solver@2.0.0`:
+
+ - Some methods are now async. See below:
+
+ - `ConstraintSolver.getVersionCostSteps`
+ - `ConstraintSolver.analyze`
+ - `ConstraintSolver.resolve`
+
+ - Updated tests to be async.
+ - Removed a few underscore usage.
+ - Added updated to use async methods
+
+- `context@1.0.0`:
+
+ - Removed `fibers` from package.
+
+- `core-runtime@2.0.0`:
+
+ - Created package to load packages and the app.
+ - This is the pakcages that sets up the Runtime.
+
+- `crosswalk@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ddp-client@3.0.0`:
+
+ - Added `isAsyncCall` method to know if call is being made by an async method.
+ - Removed `fibers` from package.
+ - Updated tests to use async methods.
+ - Now `stubPromise` is returned when calling `callAsync` or `applyAsync`.
+
+- `ddp-common@2.0.0`:
+
+ - Added `.fence` option.
+
+- `ddp-rate-limiter@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ddp-server@3.0.0`:
+
+ - Updated to use async methods.
+ - Removed `fibers` from package.
+ - Updated tests to use async methods.
+ - Turned server implementation to async.
+
+- `ddp@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `diff-sequence@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `disable-oplog@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ecmascript-runtime-client@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ecmascript-runtime-server@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ecmascript-runtime@1.0.0`:
+
+ - Added dependency to `@babel/runtime`.
+
+- `ecmascript@1.0.0`:
+
+ - `ECMAScript.compileForShell` was removed. Use `Babel.compileForShell` from
+ `babel-compiler` instead. This change makes some build plugins and apps that do not use `babel-compiler` 90mb smaller.
+ - Added dependency to `@babel/runtime`.
+ - Moved runtime tests.
+
+- `ejson@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `email@3.0.0`:
+
+ - `Email.send` is no longer available. Use `Email.sendAsync` instead.
+ - Updated types to reflext async methods and `Email.send` depracation.
+
+- `es5-shim@5.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `facebook-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `facebook-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `facts-base@2.0.0`:
+
+ - turned unorderd deps on `ddp` to false.
+
+- `facts-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `fetch@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `force-ssl-common@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `force-ssl@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `geojson-utils@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `github-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `github-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `google-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `google-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `hot-code-push@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `http@`:
+ - Updated handlers to use `handlers`
+- `id-map@2.0.0`:
+
+ - Added `forEachAsync` method.
+
+- `insecure@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `inter-process-messaging@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `launch-screen@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `localstorage@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `logging@2.0.0`:
+
+ - Added dependency to `@babel/runtime`.
+
+- `logic-solver@3.0.0`:
+ `Logic.disablingAssertions` is now async.
+ `minMaxWS` is now async.
+
+- `meetup-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `meetup-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `meteor-base@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `meteor-developer-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `meteor-developer-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `meteor-tool@3.0.0`:
+
+ - Changes to how meteor apps are being created [PR](https://github.com/meteor/meteor/pull/12697)
+
+- `meteor@2.0.0`:
+
+ - Async local storage was added to help deal with async methods.
+ - Added `promiseEmmiter` to help with async methods.
+ - Removed `fibers` from package.
+
+- `minifier-css@2.0.0`:
+
+ - `minifyCss` is now async.
+ - Removed `fibers` from package.
+
+- `minifier-js@3.0.0`:
+
+ - `minifyJs` is now async.
+ - `terserMinify` no longer takes callbacks
+ - Removed `fibers` from package.
+
+* `minimongo@2.0.0`:
+ - `cursor.observe` now returns `isReady` and `isReadyPromise` wich indicates
+ if the cursor is ready and if the callbacks are have been called.
+ If you only use it in the `Client` or as a `LocalCollection` things have not
+ changed.
+ - `cursor.observeChangesAsync` and `cursor.observeAsync` are added and resolve as promises, returning results similar to their synchronous counterparts.
+
+- `mobile-experience@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `mobile-status-bar@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `modern-browsers@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `modules-runtime@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `modules@1.0.0`:
+
+ - Updated `reify` version.
+
+- `mongo-decimal@`:
+
+ - Updated to use `async` methods.
+
+- `mongo-dev-server@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `mongo-id@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `mongo-livedata@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `mongo@2.0.0`:
+
+ - Updated to unify methods, `update`,`insert`,`remove`, `fetch` are now async, they are
+ the same as their `*Async` counterpart.
+ - `ensureIndex` and `createIndex` are now async.
+ - `observeChangesAsync` and `observeAsync` are added and resolve as promises, returning results similar to their synchronous counterparts.
+
+- `npm-mongo@5.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `oauth-encryption@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `oauth@`:
+
+ - `_endOfPopupResponseTemplate` and `_endOfRedirectResponseTemplate` are no longer a property but now a function that returns a promise of the same value as before
+ - the following server methods are now async:
+ - `OAuth._renderOauthResults`
+ - `OAuth._endOfLoginResponse`
+ - `OAuth.renderEndOfLoginResponse`
+ - `OAuth._storePendingCredential`
+ - `OAuth._retrievePendingCredential`
+ - `ensureConfigured`
+ - `_cleanStaleResults`
+
+- `oauth@3.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `oauth1@`:
+
+ - the following server methods are now async:
+ - `OAuth._storeRequestToken`
+ - `OAuth._retrieveRequestToken`
+
+- `oauth1@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `oauth2@`:
+
+ - `OAuth._requestHandlers['2']` is now async.
+
+- `oauth2@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ordered-dict@2.0.0`:
+
+ - Added `forEachAsync` method.
+
+- `package-stats-opt-out@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `package-version-parser@4.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `promise@1.0.0`:
+
+ - Removed `fibers` usage
+
+- `random@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `rate-limit@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `reactive-dict@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `reactive-var@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `reload-safetybelt@2.0.0`:
+
+ - Added `ecmascript` package to `package.js`
+
+- `reload@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `retry@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `routepolicy@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `server-render@1.0.0`:
+
+ - Updated usage with `getBoilerplate` that are now `async`.
+
+- `service-configuration@2.0.0`:
+
+ - Updated to use `createIndexAsync`.
+
+- `session@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `sha@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `shell-server@1.0.0`:
+
+ - Updated to handle promises results.
+
+- `socket-stream-client@1.0.0`:
+
+ - Updated tests to handle `async` code.
+
+- `spiderable@`:
+
+ - Updated handlers to use `handlers` that are now using express
+ - removed `fibers` usage if flag is set to `true`
+
+- `standard-minifier-css@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `standard-minifier-js@3.0.0`:
+
+ - `processFilesForBundle` is now `async`.
+
+- `standard-minifiers@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `static-html@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `test-helpers@2.0.0`:
+
+ - Updated to use `async` methods.
+ - Removed `fibers` usage.
+ - Added possibliy to use `async` tests.
+
+- `test-in-browser@2.0.0`:
+
+ - Updated css to be in dark mode.
+
+- `test-in-console@2.0.0`:
+
+ - Updated log identation.
+
+- `test-server-tests-in-console-once@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `tinytest-harness@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `tinytest@2.0.0`:
+
+ - Added `test name` to logs.
+ - Removed `fibers` usage.
+
+- `twitter-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `twitter-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `typescript@5.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `underscore-tests@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `underscore@2.0.0`:
+
+ - Removed dependency in meteor package.
+
+- `url@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `webapp-hashing@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `webapp@2.0.0`:
+
+ - These methods are now async:
+
+ - `WebAppInternals.reloadClientPrograms()`
+ - `WebAppInternals.pauseClient()`
+ - `WebAppInternals.generateClientProgram()`
+ - `WebAppInternals.generateBoilerplate()`
+ - `WebAppInternals.setInlineScriptsAllowed()`
+ - `WebAppInternals.enableSubresourceIntegrity()`
+ - `WebAppInternals.setBundledJsCssUrlRewriteHook()`
+ - `WebAppInternals.setBundledJsCssPrefix()`
+ - `WebAppInternals.getBoilerplate`
+
+ - Changed engine from connect to express and changed api naming to match express. See below:
+ - `WebApp.connectHandlers.use(middleware)` is now `WebApp.handlers.use(middleware)`
+ - `WebApp.rawConnectHandlers.use(middleware)` is now `WebApp.rawHandlers.use(middleware)`
+ - `WebApp.connectApp` is now `WebApp.expressApp`
+
+- `weibo-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `weibo-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+#### New Public API
+
+
+
+- `accounts-base`: (2.9+)
+
+ - `Meteor.userAsync()`
+
+- `callback-hook`:forEachAsync
+
+ - `forEachAsync`
+
+- `ddp-server`: (2.8+)
+
+ - `Meteor.callAsync()`
+
+- `meteor`:
+ - Added `Meteor.isDebug` to execute code in debug builds, activated with the --inspect mode.
+
+- `minifier-css`: (2.9+)
+
+ - `CssTools.minifyCssAsync()`
+
+- `mongo`:
+
+ - `Mongo.Collection`: (2.8+)
+ - `createCappedCollectionAsync`
+ - `createIndexAsync`
+ - `dropCollectionAsync`
+ - `dropIndexAsync`
+ - `findOneAsync`
+ - `insertAsync`
+ - `removeAsync`
+ - `updateAsync`
+ - `upsertAsync`
+ - `Collection.Cursor`: (2.8+)
+ - `countAsync`
+ - `fetchAsync`
+ - `forEachAsync`
+ - `mapAsync`
+ - `[Symbol.asyncIterator]` so this code should work:
+ ```js
+ for await (const document of collection.find(query, options)) /* ... */
+ ```
+
+#### Internal API changes
+
+`accounts-base`:
+
+- `_attemptLogin`
+- `_loginMethod`
+- `_runLoginHandlers`
+
+* Upgraded `node-gyp` to v9.4.0
+* Upgraded `node-pre-gyp` to `@mapbox/node-pre-gyp` v1.0.11
+
+#### New Internal API
+
+`accounts-password`:
+
+- `Accounts._checkPasswordAsync`
+
+#### Special thanks to
+
+- [@denihs](https://github.com/denihs)
+- [@Grubba27](https://github.com/Grubba27)
+- [@nachocodoner](https://github.com/nachocodoner)
+- [@fredmaiaarantes](https://github.com/fredmaiaarantes)
+- [@vit0rr](https://github.com/vit0rr)
+- [@filipenevola](https://github.com/filipenevola)
+- [@zodern](https://github.com/zodern)
+- [@radekmie](https://github.com/radekmie)
+- [@StorytellerCZ](https://github.com/StorytellerCZ)
+- [@gunnartorfis](https://github.com/gunnartorfis)
+- [@xet7](https://github.com/xet7)
+- [@harryadel](https://github.com/harryadel)
+- [@simonwebs](https://github.com/simonwebs)
+- [@TylerThompson](https://github.com/TylerThompson)
+- [@rodrigok](https://github.com/rodrigok)
+- [@zarvox](https://github.com/zarvox)
+- [@srsgores](https://github.com/srsgores)
+- [@tassoevan](https://github.com/tassoevan)
+- [@Torgen](https://github.com/Torgen)
+- [@MarcosSpessatto](https://github.com/MarcosSpessatto)
+- [@vincentcarpentier](https://github.com/vincentcarpentier)
+- [@ggazzo](https://github.com/ggazzo)
+- [@StevenMia](https://github.com/StevenMia)
+- [@acemtp](https://github.com/acemtp)
+
+And so many more people, for making this great framework even better!
diff --git a/docs/generators/changelog/versions/3.0.1.md b/docs/generators/changelog/versions/3.0.1.md
new file mode 100644
index 0000000000..045446db4e
--- /dev/null
+++ b/docs/generators/changelog/versions/3.0.1.md
@@ -0,0 +1,45 @@
+## v3.0.1, 2024-07-16
+
+### Highlights
+
+* Bump the patch for some packages, so we publish them using Meteor 3 tooling. [PR #13231]
+
+#### Breaking Changes
+
+N/A
+
+#### Internal API changes
+
+N/A
+
+#### Migration Steps
+
+Please run the following command to update your project:
+
+```bash
+
+meteor update --release 3.0.1
+
+```
+
+
+#### Meteor Version Release
+
+
+* `Bumped packages`:
+ - accounts-ui-unstyled@1.7.2
+ - crosswalk@1.7.3
+ - facebook-oauth@1.11.4
+ - npm-mongo@4.17.3
+ - package-version-parser@3.2.3
+ - twitter-config-ui@1.0.2
+
+
+#### Special thanks to
+
+- [@denihs](https://github.com/denihs).
+
+
+For making this great framework even better!
+
+
diff --git a/docs/history.md b/docs/history.md
index 401ff551f7..5f9df5f8d7 100644
--- a/docs/history.md
+++ b/docs/history.md
@@ -8,8 +8,794 @@
[//]: # (go to meteor/docs/generators/changelog/docs)
+## v3.0.1, 2024-07-16
+
+### Highlights
+
+* Bump the patch for some packages, so we publish them using Meteor 3 tooling. [PR](https://github.com/meteor/meteor/pull/13231)
+
+#### Breaking Changes
+
+N/A
+
+#### Internal API changes
+
+N/A
+
+#### Migration Steps
+
+Please run the following command to update your project:
+
+```bash
+
+meteor update --release 3.0.1
+
+```
+#### Meteor Version Release
+
+
+* `Bumped packages`:
+ - accounts-ui-unstyled@1.7.2
+ - crosswalk@1.7.3
+ - facebook-oauth@1.11.4
+ - npm-mongo@4.17.3
+ - package-version-parser@3.2.3
+ - twitter-config-ui@1.0.2
+
+
+#### Special thanks to
+
+- [@denihs](https://github.com/denihs).
+
+
+For making this great framework even better!
+
+
+## v3.0, 2024-07-15
+
+### Highlights
+
+#### Breaking Changes
+
+- `accounts-2fa@3.0.0`:
+
+ - Some methods are now async. See below:
+ - `Accounts._is2faEnabledForUser`
+ - `(Meteor Method) - generate2faActivationQrCode`
+ - `(Meteor Method) - enableUser2fa`
+ - `(Meteor Method) - disableUser2fa`
+ - `(Meteor Method) - has2faEnabled`
+
+- `accounts-base@3.0.0`:
+
+ - `methods.removeOtherTokens` is now async
+ - `Accounts.destroyToken` is now async
+ - `Accounts.insertUserDoc` is now async
+ - `Accounts.updateOrCreateUserFromExternalService` is now async
+ - `Accounts.expirePasswordToken` is now async
+ - `Accounts.setupUsersCollection` is now async
+ - `Meteor.user` is now async in server
+
+- `accounts-facebook@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-github@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-google@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-meetup@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-meteor-developer@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-password@3.0.0`:
+
+ - Some server methods are now async:
+ - `Accounts.sendResetPasswordEmail`
+ - `Accounts.sendEnrollmentEmail`
+ - `Accounts.sendVerificationEmail`
+ - `Accounts.addEmail`
+ - `Accounts.removeEmail`
+ - `Accounts.verifyEmail`
+ - `Accounts.createUserVerifyingEmail`
+ - `Accounts.createUser`
+ - `Accounts.generateVerificationToken`
+ - `Accounts.generateResetToken`
+ - `Accounts.forgotPassword`
+ - `Accounts.setPassword`
+ - `Accounts.changePassword`
+ - `Accounts.setUsername`
+ - `Accounts.findUserByEmail`
+ - `Accounts.findUserByUsername`
+
+- `accounts-passwordless@3.0.0`:
+
+ - `Accounts.sendLoginTokenEmail` is now async.
+
+- `accounts-twitter@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-ui-unstyled@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `accounts-weibo@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `allow-deny@2.0.0`:
+
+ - Updated to accept async functions.
+
+- `appcache@2.0.0`:
+
+ - Updated internal api to use `handlers`
+
+- `audit-argument-checks@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `autopublish@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `autoupdate@2.0.0`:
+
+ - Updated api to be async, with asyncronous queueing.
+
+- `babel-compiler@8.0.0`:
+
+ - Add `Babel.compileForShell`
+ - Removed `Promise.await` default transform.
+ - Added top-level-await to packages.
+
+- `babel-runtime@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `base64@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `binary-heap@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `blaze@3.0.0`:
+ - Todo
+
+- `boilerplate-generator-tests@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `boilerplate-generator@2.0.0`:
+
+ - `toHTML` is no longer available (it was already deprecated). Use `toHTMLStream` instead.
+ - Updated to use `handlers`
+
+- `browser-policy-common@2.0.0`:
+
+ - Updated to use `handlers`
+
+- `browser-policy-content@2.0.0`:
+
+ - Some methods are now async. See below:
+ - `BrowserPolicy.content.setPolicy`
+ - `BrowserPolicy.content.allowInlineScripts`
+ - `BrowserPolicy.content.disallowInlineScripts`
+ - `BrowserPolicy.content.disallowAll`
+ - `BrowserPolicy.setDefaultPolicy`
+
+- `browser-policy-framing@2.0.0`:
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `browser-policy@2.0.0`:
+ Updated to use async methods from `browser-policy-common` and `browser-policy-content`.
+
+- `caching-compiler@2.0.0`:
+
+ - `afterLink` is now async.
+ - Updated to use now async API.
+
+- `callback-hook@2.0.0`:
+
+ - Added `forEachAsync` method.
+
+- `check@2.0.0`:
+
+ - Removed `fibers` related tests.
+
+- `constraint-solver@2.0.0`:
+
+ - Some methods are now async. See below:
+
+ - `ConstraintSolver.getVersionCostSteps`
+ - `ConstraintSolver.analyze`
+ - `ConstraintSolver.resolve`
+
+ - Updated tests to be async.
+ - Removed a few underscore usage.
+ - Added updated to use async methods
+
+- `context@1.0.0`:
+
+ - Removed `fibers` from package.
+
+- `core-runtime@2.0.0`:
+
+ - Created package to load packages and the app.
+ - This is the pakcages that sets up the Runtime.
+
+- `crosswalk@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ddp-client@3.0.0`:
+
+ - Added `isAsyncCall` method to know if call is being made by an async method.
+ - Removed `fibers` from package.
+ - Updated tests to use async methods.
+ - Now `stubPromise` is returned when calling `callAsync` or `applyAsync`.
+
+- `ddp-common@2.0.0`:
+
+ - Added `.fence` option.
+
+- `ddp-rate-limiter@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ddp-server@3.0.0`:
+
+ - Updated to use async methods.
+ - Removed `fibers` from package.
+ - Updated tests to use async methods.
+ - Turned server implementation to async.
+
+- `ddp@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `diff-sequence@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `disable-oplog@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ecmascript-runtime-client@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ecmascript-runtime-server@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ecmascript-runtime@1.0.0`:
+
+ - Added dependency to `@babel/runtime`.
+
+- `ecmascript@1.0.0`:
+
+ - `ECMAScript.compileForShell` was removed. Use `Babel.compileForShell` from
+ `babel-compiler` instead. This change makes some build plugins and apps that do not use `babel-compiler` 90mb smaller.
+ - Added dependency to `@babel/runtime`.
+ - Moved runtime tests.
+
+- `ejson@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `email@3.0.0`:
+
+ - `Email.send` is no longer available. Use `Email.sendAsync` instead.
+ - Updated types to reflext async methods and `Email.send` depracation.
+
+- `es5-shim@5.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `facebook-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `facebook-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `facts-base@2.0.0`:
+
+ - turned unorderd deps on `ddp` to false.
+
+- `facts-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `fetch@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `force-ssl-common@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `force-ssl@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `geojson-utils@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `github-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `github-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `google-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `google-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `hot-code-push@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `http@`:
+ - Updated handlers to use `handlers`
+- `id-map@2.0.0`:
+
+ - Added `forEachAsync` method.
+
+- `insecure@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `inter-process-messaging@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `launch-screen@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `localstorage@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `logging@2.0.0`:
+
+ - Added dependency to `@babel/runtime`.
+
+- `logic-solver@3.0.0`:
+ `Logic.disablingAssertions` is now async.
+ `minMaxWS` is now async.
+
+- `meetup-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `meetup-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `meteor-base@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `meteor-developer-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `meteor-developer-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `meteor-tool@3.0.0`:
+
+ - Changes to how meteor apps are being created [PR](https://github.com/meteor/meteor/pull/12697)
+
+- `meteor@2.0.0`:
+
+ - Async local storage was added to help deal with async methods.
+ - Added `promiseEmmiter` to help with async methods.
+ - Removed `fibers` from package.
+
+- `minifier-css@2.0.0`:
+
+ - `minifyCss` is now async.
+ - Removed `fibers` from package.
+
+- `minifier-js@3.0.0`:
+
+ - `minifyJs` is now async.
+ - `terserMinify` no longer takes callbacks
+ - Removed `fibers` from package.
+
+* `minimongo@2.0.0`:
+ - `cursor.observe` now returns `isReady` and `isReadyPromise` wich indicates
+ if the cursor is ready and if the callbacks are have been called.
+ If you only use it in the `Client` or as a `LocalCollection` things have not
+ changed.
+ - `cursor.observeChangesAsync` and `cursor.observeAsync` are added and resolve as promises, returning results similar to their synchronous counterparts.
+
+- `mobile-experience@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `mobile-status-bar@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `modern-browsers@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `modules-runtime@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `modules@1.0.0`:
+
+ - Updated `reify` version.
+ - All modules are described as strict mode
+
+- `mongo-decimal@`:
+
+ - Updated to use `async` methods.
+
+- `mongo-dev-server@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `mongo-id@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `mongo-livedata@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `mongo@2.0.0`:
+
+ - Updated to unify methods, `update`,`insert`,`remove`, `fetch` are now async, they are
+ the same as their `*Async` counterpart.
+ - `ensureIndex` and `createIndex` are now async.
+ - `observeChangesAsync` and `observeAsync` are added and resolve as promises, returning results similar to their synchronous counterparts.
+
+- `npm-mongo@5.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `oauth-encryption@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `oauth@`:
+
+ - `_endOfPopupResponseTemplate` and `_endOfRedirectResponseTemplate` are no longer a property but now a function that returns a promise of the same value as before
+ - the following server methods are now async:
+ - `OAuth._renderOauthResults`
+ - `OAuth._endOfLoginResponse`
+ - `OAuth.renderEndOfLoginResponse`
+ - `OAuth._storePendingCredential`
+ - `OAuth._retrievePendingCredential`
+ - `ensureConfigured`
+ - `_cleanStaleResults`
+
+- `oauth@3.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `oauth1@`:
+
+ - the following server methods are now async:
+ - `OAuth._storeRequestToken`
+ - `OAuth._retrieveRequestToken`
+
+- `oauth1@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `oauth2@`:
+
+ - `OAuth._requestHandlers['2']` is now async.
+
+- `oauth2@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `ordered-dict@2.0.0`:
+
+ - Added `forEachAsync` method.
+
+- `package-stats-opt-out@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `package-version-parser@4.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `promise@1.0.0`:
+
+ - Removed `fibers` usage
+
+- `random@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `rate-limit@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `reactive-dict@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `reactive-var@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `reload-safetybelt@2.0.0`:
+
+ - Added `ecmascript` package to `package.js`
+
+- `reload@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `retry@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `routepolicy@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `server-render@1.0.0`:
+
+ - Updated usage with `getBoilerplate` that are now `async`.
+
+- `service-configuration@2.0.0`:
+
+ - Updated to use `createIndexAsync`.
+
+- `session@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `sha@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `shell-server@1.0.0`:
+
+ - Updated to handle promises results.
+
+- `socket-stream-client@1.0.0`:
+
+ - Updated tests to handle `async` code.
+
+- `spiderable@`:
+
+ - Updated handlers to use `handlers` that are now using express
+ - removed `fibers` usage if flag is set to `true`
+
+- `standard-minifier-css@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `standard-minifier-js@3.0.0`:
+
+ - `processFilesForBundle` is now `async`.
+
+- `standard-minifiers@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `static-html@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `test-helpers@2.0.0`:
+
+ - Updated to use `async` methods.
+ - Removed `fibers` usage.
+ - Added possibliy to use `async` tests.
+
+- `test-in-browser@2.0.0`:
+
+ - Updated css to be in dark mode.
+
+- `test-in-console@2.0.0`:
+
+ - Updated log identation.
+
+- `test-server-tests-in-console-once@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `tinytest-harness@1.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `tinytest@2.0.0`:
+
+ - Added `test name` to logs.
+ - Removed `fibers` usage.
+
+- `twitter-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `twitter-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `typescript@5.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `underscore-tests@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `underscore@2.0.0`:
+
+ - Removed dependency in meteor package.
+
+- `url@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `webapp-hashing@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `webapp@2.0.0`:
+
+ - These methods are now async:
+
+ - `WebAppInternals.reloadClientPrograms()`
+ - `WebAppInternals.pauseClient()`
+ - `WebAppInternals.generateClientProgram()`
+ - `WebAppInternals.generateBoilerplate()`
+ - `WebAppInternals.setInlineScriptsAllowed()`
+ - `WebAppInternals.enableSubresourceIntegrity()`
+ - `WebAppInternals.setBundledJsCssUrlRewriteHook()`
+ - `WebAppInternals.setBundledJsCssPrefix()`
+ - `WebAppInternals.getBoilerplate`
+
+ - Changed engine from connect to express and changed api naming to match express. See below:
+ - `WebApp.connectHandlers.use(middleware)` is now `WebApp.handlers.use(middleware)`
+ - `WebApp.rawConnectHandlers.use(middleware)` is now `WebApp.rawHandlers.use(middleware)`
+ - `WebApp.connectApp` is now `WebApp.expressApp`
+
+- `weibo-config-ui@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+- `weibo-oauth@2.0.0`:
+
+ - Package was bumped due to a dependency update. No code changes were made.
+
+#### New Public API
+
+
+
+- `accounts-base`: (2.9+)
+
+ - `Meteor.userAsync()`
+
+- `callback-hook`:forEachAsync
+
+ - `forEachAsync`
+
+- `ddp-server`: (2.8+)
+
+ - `Meteor.callAsync()`
+
+- `meteor`:
+ - Added `Meteor.isDebug` to execute code in debug builds, activated with the --inspect mode.
+
+- `minifier-css`: (2.9+)
+
+ - `CssTools.minifyCssAsync()`
+
+- `mongo`:
+
+ - `Mongo.Collection`: (2.8+)
+ - `createCappedCollectionAsync`
+ - `createIndexAsync`
+ - `dropCollectionAsync`
+ - `dropIndexAsync`
+ - `findOneAsync`
+ - `insertAsync`
+ - `removeAsync`
+ - `updateAsync`
+ - `upsertAsync`
+ - `Collection.Cursor`: (2.8+)
+ - `countAsync`
+ - `fetchAsync`
+ - `forEachAsync`
+ - `mapAsync`
+ - `[Symbol.asyncIterator]` so this code should work:
+ ```js
+ for await (const document of collection.find(query, options)) /* ... */
+ ```
+
+#### Internal API changes
+
+`accounts-base`:
+
+- `_attemptLogin`
+- `_loginMethod`
+- `_runLoginHandlers`
+
+* Upgraded `node-gyp` to v9.4.0
+* Upgraded `node-pre-gyp` to `@mapbox/node-pre-gyp` v1.0.11
+
+#### New Internal API
+
+`accounts-password`:
+
+- `Accounts._checkPasswordAsync`
+
+#### Special thanks to
+
+- [@denihs](https://github.com/denihs)
+- [@Grubba27](https://github.com/Grubba27)
+- [@nachocodoner](https://github.com/nachocodoner)
+- [@fredmaiaarantes](https://github.com/fredmaiaarantes)
+- [@vit0rr](https://github.com/vit0rr)
+- [@filipenevola](https://github.com/filipenevola)
+- [@zodern](https://github.com/zodern)
+- [@radekmie](https://github.com/radekmie)
+- [@StorytellerCZ](https://github.com/StorytellerCZ)
+- [@gunnartorfis](https://github.com/gunnartorfis)
+- [@xet7](https://github.com/xet7)
+- [@harryadel](https://github.com/harryadel)
+- [@simonwebs](https://github.com/simonwebs)
+- [@TylerThompson](https://github.com/TylerThompson)
+- [@rodrigok](https://github.com/rodrigok)
+- [@zarvox](https://github.com/zarvox)
+- [@srsgores](https://github.com/srsgores)
+- [@tassoevan](https://github.com/tassoevan)
+- [@Torgen](https://github.com/Torgen)
+- [@MarcosSpessatto](https://github.com/MarcosSpessatto)
+- [@vincentcarpentier](https://github.com/vincentcarpentier)
+- [@ggazzo](https://github.com/ggazzo)
+- [@StevenMia](https://github.com/StevenMia)
+- [@acemtp](https://github.com/acemtp)
+
+And so many more people, for making this great framework even better!
## v2.16.0, 2024-05-14
### Highlights
@@ -112,6 +898,7 @@ N/A
- [harryadel](https://github.com/harryadel)
Thanks for making this great framework even better!
+
## v2.15.0, 2024-02-05
### Highlights
@@ -171,6 +958,7 @@ For making this great framework even better!
## v2.14.0, 2023-12-12
+
### Highlights
Hacktoberfest release! 🎉
@@ -221,159 +1009,159 @@ For more information you can check our [Migration Guide](https://guide.meteor.co
## Internal API changes
* Tool
- - Rename `EACCESS` to `EACCES` to follow the Windows spelling
- - Fixed links in skeletons
- - Fixed build issue in Vue skeleton
- - Updated `source-map-support`
- - Fixed bugs in negated “in” and “instanceof” expressions
- - Updated `semver` to v7.5.4
- - Updated `@meteorjs/babel` to v7.18.4
- - Cordova has been updated to v12.0.1 for Android and v7.0.1 for iOS, being able to build to SDK 33.
- - `meteor create` command was re-made to be more interactive
+ - Rename `EACCESS` to `EACCES` to follow the Windows spelling
+ - Fixed links in skeletons
+ - Fixed build issue in Vue skeleton
+ - Updated `source-map-support`
+ - Fixed bugs in negated “in” and “instanceof” expressions
+ - Updated `semver` to v7.5.4
+ - Updated `@meteorjs/babel` to v7.18.4
+ - Cordova has been updated to v12.0.1 for Android and v7.0.1 for iOS, being able to build to SDK 33.
+ - `meteor create` command was re-made to be more interactive
## Meteor Version Release
* `accounts-base@2.2.10`
- - Ensure that `onLogin` callback fires properly
- - Indexes are now created asynchronously
+ - Ensure that `onLogin` callback fires properly
+ - Indexes are now created asynchronously
* `accounts-oauth@1.4.3`
- - Indexes are now created asynchronously
+ - Indexes are now created asynchronously
* `accounts-password@2.4.0`
- - Add `Accounts.createUserAsync` to the client, a promise-based version of `Accounts.createUser`
- - Indexes are now created asynchronously
+ - Add `Accounts.createUserAsync` to the client, a promise-based version of `Accounts.createUser`
+ - Indexes are now created asynchronously
* `accounts-passwordless@2.1.4`
- - Fix #12401, ensure that user is found with ID
- - Indexes are now created asynchronously
+ - Fix #12401, ensure that user is found with ID
+ - Indexes are now created asynchronously
* `babel-compiler@7.10.5`
- - Updated `@meteorjs/babel` to v7.18.4
+ - Updated `@meteorjs/babel` to v7.18.4
* `boilerplate-generator@1.7.2`
- - Removed Underscore dependency
+ - Removed Underscore dependency
* `browser-policy-content@1.1.3`
- - Removed Underscore dependency
+ - Removed Underscore dependency
* `constraint-solver@1.2.1`
- - Removed Underscore dependency
+ - Removed Underscore dependency
* `crosswalk@1.7.2`
- - Updated `cordova-plugin-crosswalk-webview` to v2.4.0
- - Deprecated the package
+ - Updated `cordova-plugin-crosswalk-webview` to v2.4.0
+ - Deprecated the package
* `ddp-rate-limiter@1.2.1`
- - Removed Underscore dependency
+ - Removed Underscore dependency
* `ddp-server@2.7.0`:
- - Allow setting `DISABLE_SOCKJS_CORS` to prevent SockJS from setting CORS headers
- - Added new publication strategy `NO_MERGE_MULTI`
+ - Allow setting `DISABLE_SOCKJS_CORS` to prevent SockJS from setting CORS headers
+ - Added new publication strategy `NO_MERGE_MULTI`
* `ecmascript@0.16.8`:
- - Bumped to get latest version of `@babel/compiler`
+ - Bumped to get latest version of `@babel/compiler`
* `facebook-oauth@1.11.3`:
- - Updated default version of Facebook GraphAPI to v17
+ - Updated default version of Facebook GraphAPI to v17
* `launch-screen@2.0.0`
- - Removed `cordova-plugin-splashscreen` dependency
+ - Removed `cordova-plugin-splashscreen` dependency
* `fetch@0.1.4`:
- - Update `node-fetch` to version 1.6.12
- - Update `whatwg-fetch` to version 3.6.17
+ - Update `node-fetch` to version 1.6.12
+ - Update `whatwg-fetch` to version 3.6.17
* `logging@1.3.3`:
- - Added TS types
- - Updated `chalk` to v4.1.2
+ - Added TS types
+ - Updated `chalk` to v4.1.2
* `logic-solver@2.0.9`
- - Removed Underscore dependency
+ - Removed Underscore dependency
* `meteor@1.11.5`:
- - Improve TS types
+ - Improve TS types
* `mobile-experience@1.1.1`:
- - Bumped to get latests version of `cordova` dependencies
+ - Bumped to get latests version of `cordova` dependencies
* `modern-browsers@0.1.10`
- - Added `appleMail` user agent to allow modern bundle on iPads
+ - Added `appleMail` user agent to allow modern bundle on iPads
* `modules@0.20.0`
- - Updated version of reify to v0.24.1
+ - Updated version of reify to v0.24.1
* `mongo@1.16.8`
- - Added deprecation messages into type definitions
- - Fix ObjectIDs handling in oplogV2V1Converter
+ - Added deprecation messages into type definitions
+ - Fix ObjectIDs handling in oplogV2V1Converter
* `npm-mongo@4.17.2`:
- - Bumped MongoDB driver to version 4.17.2
+ - Bumped MongoDB driver to version 4.17.2
* `oauth@2.2.1`
- - Indexes are now created asynchronously
- - `remove` DB calls migrated to `removeAsync`
+ - Indexes are now created asynchronously
+ - `remove` DB calls migrated to `removeAsync`
* `package-version-parser@3.2.2`
- - Updated `semver` to v7.5.4
+ - Updated `semver` to v7.5.4
* `react-fast-refresh@0.2.8`:
- - Updated `semver` to version 7.5.4
+ - Updated `semver` to version 7.5.4
* `service-configuration@1.3.3`
- - Indexes are now created asynchronously
- - Add types for ConfigError
+ - Indexes are now created asynchronously
+ - Add types for ConfigError
* `socket-stream-client@0.5.2`
- - Removed Underscore dependency
+ - Removed Underscore dependency
* `standard-minifier-css@1.9.2`
- - Updated `@babel/runtime` to v7.23.5
- - Updated `minifier-css` to v1.6.4
- - Updated `logging` package to v1.3.2
+ - Updated `@babel/runtime` to v7.23.5
+ - Updated `minifier-css` to v1.6.4
+ - Updated `logging` package to v1.3.2
* `test-server-tests-in-console-once@1.0.12`
- - Removed Underscore dependency
+ - Removed Underscore dependency
* `tinytest@1.2.3`
- - Removed Underscore dependency
+ - Removed Underscore dependency
* `tracker@1.3.3`
- - Added `firstRunPromise` property, that forces autorun blocks to be executed
- in synchronous-looking order by storing the value autorun promise
- thus making it awaitable
+ - Added `firstRunPromise` property, that forces autorun blocks to be executed
+ in synchronous-looking order by storing the value autorun promise
+ thus making it awaitable
* `typescript@4.9.5`:
- - Updated to 4.9.5
+ - Updated to 4.9.5
* `webapp@1.13.8`
- - Updated `cordova-plugin-meteor-webapp` to v2.0.3
- - Updated `cookie-parser` to v1.4.6
- - Updated `send` to v0.18.0
- - Updated `stream-to-string` to v1.2.1
- - Updated `qs` to v6.11.2
- - Updated `@types/connect` to v3.4.38
+ - Updated `cordova-plugin-meteor-webapp` to v2.0.3
+ - Updated `cookie-parser` to v1.4.6
+ - Updated `send` to v0.18.0
+ - Updated `stream-to-string` to v1.2.1
+ - Updated `qs` to v6.11.2
+ - Updated `@types/connect` to v3.4.38
## Independent releases
* `google-oauth@1.4.4`:
- - Remove logging request/response in google_server
+ - Remove logging request/response in google_server
* NPM `@meteorjs/babel@7.18.4`
- - Updated `@meteorjs/reify` to v0.24.1
+ - Updated `@meteorjs/reify` to v0.24.1
* NPM `@meteorjs/babel-preset-meteor@7.10.1`
- - Add Facebook in-app browser
+ - Add Facebook in-app browser
* NPM `cordova-plugin-meteor-webapp@2.0.2`
- - Fixed Android hot code push failing
+ - Fixed Android hot code push failing
* NPM `cordova-plugin-meteor-webapp@2.0.3`
- - Fix pull manifest from correct url if parameter are used in baseurl
+ - Fix pull manifest from correct url if parameter are used in baseurl
* NPM `meteor-node-stubs@1.2.6`
- - Update dependencies
- - Deep update dependencies that were highlighted by `npm audit`
+ - Update dependencies
+ - Deep update dependencies that were highlighted by `npm audit`
## Contributors
@@ -398,6 +1186,7 @@ For more information you can check our [Migration Guide](https://guide.meteor.co
For making this great framework even better!
+
## v2.13.3, 2023-09-08
### Highlights
@@ -510,10 +1299,10 @@ for more information about the problems and issues you might find while migratin
#### Internal changes
-* `ddp-server@2.7.0`:
+* `ddp-server@3.0.0`:
- Updated livedata server test to be more easily debbuged.
-* `mongo@1.16.8`:
+* `mongo@2.0.0`:
- Updated deprecated reference in Mongo package.
#### Migration Steps
@@ -704,7 +1493,6 @@ you can use ```WARN_WHEN_USING_OLD_API``` before starting your meteor process.
- [@zodern](https://github.com/zodern).
- [@dmromanov](https://github.com/dmromanov).
- [@matheusccastroo](https://github.com/matheusccastroo).
-
## v2.11.0, 2023-03-02
### Highlights
diff --git a/docs/jsdoc/jsdoc-conf.json b/docs/jsdoc/jsdoc-conf.json
index 4f220413fb..82ed30dd10 100644
--- a/docs/jsdoc/jsdoc-conf.json
+++ b/docs/jsdoc/jsdoc-conf.json
@@ -1,8 +1,4 @@
{
- "plugins": ["plugins/markdown"],
- "markdown": {
- "parser": "gfm"
- },
"source": {
"exclude": [
"packages/ddp/sockjs-0.3.4.js",
@@ -18,5 +14,9 @@
"**/node_modules",
"npm-packages"
]
+ },
+ "plugins": [ "plugins/markdown"],
+ "markdown": {
+ "parser": "gfm"
}
}
diff --git a/docs/netlify.toml b/docs/netlify.toml
index 391633b6f3..9af188b853 100644
--- a/docs/netlify.toml
+++ b/docs/netlify.toml
@@ -1,3 +1,3 @@
[build]
publish = "public"
- command = "npm install && npm run build"
+ command = "npm cache clear --force && npm install --legacy-peer-deps && npm run build"
diff --git a/docs/package-lock.json b/docs/package-lock.json
index b2161bafb0..7965d6e9ba 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -4,6 +4,21 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "@babel/parser": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz",
+ "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==",
+ "dev": true
+ },
+ "@jsdoc/salty": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.6.tgz",
+ "integrity": "sha512-aA+awb5yoml8TQ3CzI5Ue7sM3VMRC4l1zJJW4fgZ8OCL1wshJZhNzaf0PL85DSnOUw6QuFgeHGD/eq/xwwAF2g==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.21"
+ }
+ },
"@meteorjs/meteor-hexo-config": {
"version": "1.0.14",
"resolved": "https://registry.npmjs.org/@meteorjs/meteor-hexo-config/-/meteor-hexo-config-1.0.14.tgz",
@@ -16,6 +31,28 @@
"integrity": "sha512-LQIFN05wBMjX7SXgW5CFVTfolDWMuknoypwQ0czl/44LYRBR4/LYZUgX6c+1vLjloJb+5+2HTvMGlVN9Wo1MKA==",
"dev": true
},
+ "@types/linkify-it": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz",
+ "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==",
+ "dev": true
+ },
+ "@types/markdown-it": {
+ "version": "12.2.3",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz",
+ "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==",
+ "dev": true,
+ "requires": {
+ "@types/linkify-it": "*",
+ "@types/mdurl": "*"
+ }
+ },
+ "@types/mdurl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz",
+ "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==",
+ "dev": true
+ },
"JSONStream": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
@@ -543,12 +580,12 @@
"optional": true
},
"catharsis": {
- "version": "0.8.11",
- "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz",
- "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==",
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz",
+ "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==",
"dev": true,
"requires": {
- "lodash": "^4.17.14"
+ "lodash": "^4.17.15"
}
},
"center-align": {
@@ -2379,6 +2416,12 @@
"striptags": "^3.1.1"
}
},
+ "marked": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz",
+ "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==",
+ "dev": true
+ },
"strip-indent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
@@ -2780,12 +2823,12 @@
}
},
"js2xmlparser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
- "integrity": "sha512-CSOkdn0/GhRFwxnipmhXfqJ+FG6+wkWBi46kKSsPx6+j65176ZiQcrCYpg6K8x3iLbO4k3zScBnZ7I/L80dAtw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz",
+ "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==",
"dev": true,
"requires": {
- "xmlcreate": "^1.0.1"
+ "xmlcreate": "^2.0.4"
}
},
"jsbn": {
@@ -2796,47 +2839,56 @@
"optional": true
},
"jsdoc": {
- "version": "3.5.5",
- "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz",
- "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz",
+ "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==",
"dev": true,
"requires": {
- "babylon": "7.0.0-beta.19",
- "bluebird": "~3.5.0",
- "catharsis": "~0.8.9",
- "escape-string-regexp": "~1.0.5",
- "js2xmlparser": "~3.0.0",
- "klaw": "~2.0.0",
- "marked": "~0.3.6",
- "mkdirp": "~0.5.1",
- "requizzle": "~0.2.1",
- "strip-json-comments": "~2.0.1",
- "taffydb": "2.6.2",
- "underscore": "~1.8.3"
+ "@babel/parser": "^7.20.15",
+ "@jsdoc/salty": "^0.2.1",
+ "@types/markdown-it": "^12.2.3",
+ "bluebird": "^3.7.2",
+ "catharsis": "^0.9.0",
+ "escape-string-regexp": "^2.0.0",
+ "js2xmlparser": "^4.0.2",
+ "klaw": "^3.0.0",
+ "markdown-it": "^12.3.2",
+ "markdown-it-anchor": "^8.4.1",
+ "marked": "^4.0.10",
+ "mkdirp": "^1.0.4",
+ "requizzle": "^0.2.3",
+ "strip-json-comments": "^3.1.0",
+ "underscore": "~1.13.2"
},
"dependencies": {
- "babylon": {
- "version": "7.0.0-beta.19",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz",
- "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==",
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
"dev": true
},
- "bluebird": {
- "version": "3.5.5",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
- "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
+ "escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true
},
"marked": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
- "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
+ "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true
},
"underscore": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
- "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==",
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
"dev": true
}
}
@@ -2922,9 +2974,9 @@
}
},
"klaw": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz",
- "integrity": "sha512-Hx5PvgJKTWpMkNJCYrBUNBLlxYIkxN4FVU/BnZP4CFh5BpiHOgujAPx7iFVz/phD0bP8rsqD48gtqcvNlUt0lQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz",
+ "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.9"
@@ -2952,6 +3004,15 @@
"source-map": "^0.5.3"
}
},
+ "linkify-it": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
+ "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
+ "dev": true,
+ "requires": {
+ "uc.micro": "^1.0.1"
+ }
+ },
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
@@ -3095,10 +3156,37 @@
"nopt": "~2.1.1"
}
},
- "marked": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz",
- "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==",
+ "markdown-it": {
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
+ "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1",
+ "entities": "~2.1.0",
+ "linkify-it": "^3.0.1",
+ "mdurl": "^1.0.1",
+ "uc.micro": "^1.0.5"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "entities": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+ "dev": true
+ }
+ }
+ },
+ "markdown-it-anchor": {
+ "version": "8.6.7",
+ "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz",
+ "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==",
"dev": true
},
"math-random": {
@@ -3107,6 +3195,12 @@
"integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
"dev": true
},
+ "mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+ "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
+ "dev": true
+ },
"micromatch": {
"version": "2.3.11",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
@@ -3196,6 +3290,7 @@
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
+ "optional": true,
"requires": {
"minimist": "^1.2.6"
}
@@ -4529,9 +4624,9 @@
"dev": true
},
"strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
"striptags": {
@@ -4585,12 +4680,6 @@
}
}
},
- "taffydb": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
- "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==",
- "dev": true
- },
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -4699,6 +4788,12 @@
"dev": true,
"optional": true
},
+ "uc.micro": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
+ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+ "dev": true
+ },
"uglify-js": {
"version": "3.17.4",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
@@ -4951,9 +5046,9 @@
"optional": true
},
"xmlcreate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
- "integrity": "sha512-Mbe56Dvj00onbnSo9J0qj/XlY5bfN9KidsOnpd5tRCsR3ekB3hyyNU9fGrTdqNT5ZNvv4BsA2TcQlignsZyVcw==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz",
+ "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==",
"dev": true
},
"y18n": {
diff --git a/docs/package.json b/docs/package.json
index 3f8a73f5ec..79c7f3bf31 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -16,7 +16,7 @@
"hexo-renderer-marked": "2.0.0",
"hexo-server": "1.0.0",
"hexo-versioned-netlify-redirects": "1.1.0",
- "jsdoc": "3.5.5",
+ "jsdoc": "^4.0.2",
"@meteorjs/meteor-hexo-config": "1.0.14",
"@meteorjs/meteor-theme-hexo": "2.0.8",
"showdown": "1.9.1",
diff --git a/docs/source/api/assets.md b/docs/source/api/assets.md
index e748b5b49d..af4cd86124 100644
--- a/docs/source/api/assets.md
+++ b/docs/source/api/assets.md
@@ -10,8 +10,8 @@ assets, which are located in the `private` subdirectory of an application's
tree. Assets are not processed as source files and are copied directly
into your application's bundle.
-{% apibox "Assets.getText" %}
-{% apibox "Assets.getBinary" %}
+{% apibox "Assets.getTextAsync" %}
+{% apibox "Assets.getBinaryAsync" %}
{% apibox "Assets.absoluteFilePath" %}
Static server assets are included by placing them in the application's `private`
@@ -20,7 +20,7 @@ directory called `nested` with a file called `data.txt` inside it, then server
code can read `data.txt` by running:
```js
-const data = Assets.getText('nested/data.txt');
+const data = await Assets.getTextAsync('nested/data.txt');
```
Note: Packages can only access their own assets. If you need to read the assets of a different package, or of the enclosing app, you need to get a reference to that package's `Assets` object.
diff --git a/docs/source/api/core.md b/docs/source/api/core.md
index 8909e93256..7edd43c60f 100644
--- a/docs/source/api/core.md
+++ b/docs/source/api/core.md
@@ -3,7 +3,7 @@ title: Core
description: Documentation of core Meteor functions.
---
-If you prefer to watch the video, click below.
+If you prefer to watch the video, click below.
{% youtube 6RRVU0-Vvm8 %}
@@ -64,3 +64,5 @@ if (Meteor.isServer) {
{% apibox "Meteor.isAppTest" %}
{% apibox "Meteor.isPackageTest" %}
+
+{% apibox "Meteor.isFibersDisabled" %}
diff --git a/docs/source/api/methods.md b/docs/source/api/methods.md
index 03854c603d..a476e9dbc6 100644
--- a/docs/source/api/methods.md
+++ b/docs/source/api/methods.md
@@ -80,6 +80,12 @@ with this ID has already been made. Alternatively, you can use
Read more about methods and how to use them in the [Methods](http://guide.meteor.com/methods.html) article in the Meteor Guide.
+{% apibox "Meteor.isAsyncCall" %}
+
+This method can be used to determine if the current method invocation is
+asynchronous. It returns true if the method is running on the server and came from
+an async call(`Meteor.callAsync`)
+
{% apibox "DDPCommon.MethodInvocation#userId" %}
The user id is an arbitrary string — typically the id of the user record
diff --git a/docs/source/api/packagejs.md b/docs/source/api/packagejs.md
index 7cc521073f..9feb02877f 100644
--- a/docs/source/api/packagejs.md
+++ b/docs/source/api/packagejs.md
@@ -80,7 +80,7 @@ package) so that Meteor will pick up the local dependency.
> In a lifecycle of a package there might come time to end the development for various reasons, or
it gets superseded. In either case Meteor allows you to easily notify the users of the package by
setting the deprecated flag to true: `deprecated: true` in the package description. In addition, you
-replace it with a string that tells the users where to find replacement or what to do.
+replace it with a string that tells the users where to find replacement or what to do.
Provide basic package information with `Package.describe(options)`. To publish a
package, you must define `summary` and `version`.
@@ -97,7 +97,7 @@ package is exported to.
{% apibox "PackageAPI#versionsFrom" %}
> Choose Meteor versions carefully. First determine the minimum version of Meteor you need for the API you use in your package.
- This should be based on specific needs of your package like needed the *Async calls, which would require minimum version to be
+ This should be based on specific needs of your package like needed the *Async calls, which would require minimum version to be
at least 2.8. Another example are where packages had a major version bump, for example this has happened with the accounts packages
in Meteor 2.3. If you want to be backward and forward compatible it is good to include Meteor version before 2.3 and then 2.3.6 in the array.
A general recommendation for most compatibility for accounts packages (unless you need API that was affected in Meteor 2.3) is to have the following
@@ -315,7 +315,7 @@ methods are available:
- `addAsset` - Add a file to serve as-is to the browser or to include on the
browser, depending on the target. On the web, it will be served at the exact
path requested. For server targets, it can be retrieved using
- `Assets.getText` or `Assets.getBinary`.
+ `Assets.getTextAsync` or `Assets.getBinaryAsync`.
- `addHtml` - Works in web targets only. Add markup to the `head` or `body`
section of the document.
- `hmrAvailable` - Returns true if the file can be updated with HMR. Among other things,
diff --git a/docs/source/api/passwords.md b/docs/source/api/passwords.md
index 0a643930d7..bb0ddf6b17 100644
--- a/docs/source/api/passwords.md
+++ b/docs/source/api/passwords.md
@@ -37,7 +37,7 @@ id.
On the client, you must pass `password` and at least one of `username` or `email` — enough information for the user to be able to log in again later. If there are existing users with a username or email only differing in case, `createUser` will fail. The callback's `error.reason` will be `'Username already exists.'` or `'Email already exists.'` In the latter case, the user can then either [login](accounts.html#Meteor-loginWithPassword) or [reset their password](#Accounts-resetPassword).
-On the server, you do not need to specify `password`, but the user will not be able to log in until it has a password (eg, set with [`Accounts.setPassword`](#accounts_setpassword)). To create an account without a password on the server and still let the user pick their own password, call `createUser` with the `email` option and then call [`Accounts.sendEnrollmentEmail`](#accounts_sendenrollmentemail). This will send the user an email with a link to set their initial password.
+On the server, you do not need to specify `password`, but the user will not be able to log in until it has a password (eg, set with [`Accounts.setPasswordAsync`](#accounts_setpasswordasync)). To create an account without a password on the server and still let the user pick their own password, call `createUser` with the `email` option and then call [`Accounts.sendEnrollmentEmail`](#accounts_sendenrollmentemail). This will send the user an email with a link to set their initial password.
By default the `profile` option is added directly to the new user document. To
override this behavior, use [`Accounts.onCreateUser`](#accounts_oncreateuser).
@@ -53,7 +53,7 @@ insensitive duplicates before updates.
{% apibox "Accounts.setUsername" %}
-{% apibox "Accounts.addEmail" %}
+{% apibox "Accounts.addEmailAsync" %}
By default, an email address is added with `{ verified: false }`. Use
[`Accounts.sendVerificationEmail`](#Accounts-sendVerificationEmail) to send an
@@ -100,7 +100,7 @@ This function accepts tokens passed into the callbacks registered with
If the user trying to reset the password has 2FA enabled, this error will be thrown:
* "Changed password, but user not logged in because 2FA is enabled [2fa-enabled]": No longer signing in the user automatically if the user has 2FA enabled.
-{% apibox "Accounts.setPassword" %}
+{% apibox "Accounts.setPasswordAsync" %}
{% apibox "Accounts.sendResetPasswordEmail" %}
diff --git a/docs/source/api/top-level-await.md b/docs/source/api/top-level-await.md
new file mode 100644
index 0000000000..accc3f84d7
--- /dev/null
+++ b/docs/source/api/top-level-await.md
@@ -0,0 +1,122 @@
+---
+title: Top Level Await
+description: Documentation of how to use top level await in Meteor
+---
+
+[Top level await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#top_level_await) (TLA) allows you to use `await` in the top level of a module or file instead of only in async functions. One way to view it as every file runs inside an `async` function.
+
+Here is an example of using top level await on the server. When this file is loaded, the `await` will cause the module to wait for the count before the code in the rest of the module is run.
+
+```js
+const Links = new Mongo.Collection('links');
+
+// Async code using top level await.
+// The module waits for this to finish before continuing
+const count = await Links.find().countAsync();
+
+if (count === 0) {
+ await Links.insertAsync({ url: 'https://meteor.com' });
+}
+```
+
+In previous versions of Meteor, async code using fibers could be run in the top level of a module. Top level await allows writing similar code that works without fibers. There are a few differences that this article will cover.
+
+Meteor's implementation of top level await tries to closely follow the specification. There currently are some differences with how Meteor handles circular dependencies.
+
+## Using Top Level Await
+
+Top level await can be used in any app or package that uses the `ecmascript`, `typescript`, or `coffeescript` packages, or that uses any other build plugin that compiles top level await using reify.
+Generally, if you can use ECMAScript modules, then you can also use top level await.
+
+There are some extra considerations when using top level await in packages. They are covered later in this article.
+
+Top level await is only enabled by default on the server. You can enable it for the client by setting the env var `METEOR_ENABLE_CLIENT_TOP_LEVEL_AWAIT` to `true`. There are a couple known issues with using TLA on the client:
+
+1. It breaks any files in `/client/compatibility` since it now wraps those files in a function
+2. Hot module replacement has not been updated to work with TLA
+
+## Async Modules
+
+With top level await, some modules are considered async, which affects how they behave. There are two ways a module can become an async module:
+1. It uses top level await
+2. It imports a module that is async
+
+For example, this module (`setup.js`) would be async because it uses top level await:
+
+```js
+await setupLanguages();
+```
+
+This module (`main.js`) would be sync:
+
+```js
+console.log('in main.js');
+```
+
+However, if it imports `setup.js` which does use top level await, then `main.js` also becomes async.
+
+```js
+import './setup.js';
+
+console.log('in main.js');
+```
+
+## Require
+
+When using `require` to load an async module, instead of directly returning a module's exports, it will return a promise that resolves to the module's exports.
+
+```js
+// resolves to the exports of init.js
+const promise = require('./init.js');
+```
+
+If you are using `require`, this does mean you need to be careful when adding or removing top level await in a file since you also have to update where the module is required.
+Since a module becomes async if it depends on an async module, this could affect more than just the individual modules using top level await.
+
+When possible, you can use ecmascript import syntax or dynamic imports instead so you don't have to worry about which modules are sync or async.
+
+## Nested Imports
+
+Nested imports refer to using `import ...` outside of the root of a module, for example in an if block or a function.
+
+```js
+if (Meteor.isClient) {
+ import './init-client.js';
+}
+
+export function showNotification(message) {
+ import show from './notifications.js';
+
+ show(message);
+}
+```
+
+ This is a feature unique to Meteor, so the top level await specification wasn't written to work with nested imports. Using nested imports to import a sync module continues to work, but it will throw an error if used to import an async module. You can use `require` or dynamic imports for async modules in these situations.
+
+## Using in Packages
+
+Top level await is only supported starting in Meteor 3. Published build plugins are able to use top level await in older Meteor versions since the runtime is bundled when they are published, though in development they require Meteor 3.
+
+If you want to ensure your package only runs in versions of Meteor that support top level await, you can have your package use `isobuild:top-level-await`:
+
+```js
+Package.onUse(function (api) {
+ // Do not allow this package to be used in pre-Meteor 3 apps.
+ api.use("isobuild:top-level-await@3.0.0");
+});
+```
+
+When importing a package that does not have a lazy main module, it will work the same whether a package uses top level await or not. This is true even when using `require`. This allows packages to add or remove top level await without it being a breaking change.
+
+There are a couple cases where adding or removing top level await from a module in a package could be considered a breaking change:
+
+1. If specific modules are require'd from a package. For example: `require('meteor/zodern:aurorae/svelte.js')`. When importing a specific module from a package, `require` changes its behavior based on if the module is async or not.
+2. If a package that has lazy main modules is require'd. Unlike normal packages, `require` will return a promise if the lazy main module is an async module. Changing if the lazy main module is async or not should be considered a breaking change for the package.
+
+## Module and Package Execution Order
+
+Normally, modules are run one at a time. This was even true when using async code with fibers in the root of a module. However, top level await is different - it allows siblings (modules that do not depend on each other) to sometimes run in parallel. This can allow the app to load faster, which is especially important on the client. However, this could cause code to run in an unexpected order if you are used to how Meteor worked with fibers.
+
+This is also applies to packages. Packages that do not directly or indirectly depend on each other are able to load in parallel if they use top level await.
+
+Modules that are eagerly evaluated (added in packages with `api.addFiles`, or outside of `imports` in apps that do not have a main module) and not directly imported continue to run one at a time, even if they use top level await, since it is common for these modules to implicitly depend on the previous modules.
diff --git a/docs/source/commandline.md b/docs/source/commandline.md
index 9381e02d83..11138250d5 100644
--- a/docs/source/commandline.md
+++ b/docs/source/commandline.md
@@ -285,20 +285,6 @@ You can also use Vue 3 with Vite by using the [jorgenvatle:meteor-vite](https://
package. You can see an example on the [meteor-vite](https://github.com/JorgenVatle/meteor-vite/tree/release/examples/vue)
repository.
-
---vue-2
-
-The command `meteor create --vue-2 app-name` creates a Meteor app with [Vue 2](https://v2.vuejs.org/) and
-[MongoDB](https://www.mongodb.com/). To create a complete app, including testing and deployment, follow the
-[Vue 2 tutorial](https://vue-tutorial.meteor.com/).
-
-Npm packages included: `@babel/runtime`, `meteor-node-stubs`, `vue`, `vue-meteor-tracker`.
-
-Meteor packages included: `meteor-base`, `mobile-experience`, `mongo`, `reactive-var`, `standard-minifier-css`,
-`standard-minifier-js`, `es5-shim`, `ecmascript`, `typescript`, `shell-server`, `tracker`, `static-html`, `akryum:vue-component`,
-`meteortesting:mocha`, `johanbrook:publication-collector`.
-
-
meteor generate
``meteor generate`` is a command for generating scaffolds for your current project. When ran without arguments, it will ask
diff --git a/docs/source/index.md b/docs/source/index.md
index 1f9fbba734..71e5923d24 100644
--- a/docs/source/index.md
+++ b/docs/source/index.md
@@ -24,11 +24,11 @@ Meteor is a full-stack JavaScript platform for developing modern web and mobile
1. The place to get started with Meteor is the [tutorials page](https://www.meteor.com/developers/tutorials).
1. [Meteor Examples](https://github.com/meteor/examples) is a list of examples using Meteor. You can also include your example with Meteor.
-
+
1. Once you are familiar with the basics, the [Meteor Guide](http://guide.meteor.com) covers intermediate material on how to use Meteor in a larger scale app.
1. Visit the [Meteor discussion forums](https://forums.meteor.com) to announce projects, get help, talk about the community, or discuss changes to core.
-
+
1. [Meteor Slack Community](https://join.slack.com/t/meteor-community/shared_invite/enQtODA0NTU2Nzk5MTA3LWY5NGMxMWRjZDgzYWMyMTEyYTQ3MTcwZmU2YjM5MTY3MjJkZjQ0NWRjOGZlYmIxZjFlYTA5Mjg4OTk3ODRiOTc) is the best place to ask (and answer!) technical questions and also meet Meteor developers.
1. [Atmosphere](https://atmospherejs.com) is the repository of community packages designed especially for Meteor.
diff --git a/docs/source/install.md b/docs/source/install.md
index b61ad24ddf..ca056915b0 100644
--- a/docs/source/install.md
+++ b/docs/source/install.md
@@ -34,6 +34,8 @@ Install the latest official version of Meteor.js from your terminal by running o
For Windows, Linux and OS X, you can run the following command:
+> Preferably, do not use `sudo` to install Meteor. If you need to use `sudo`, please check the [troubleshooting section](#troubleshooting).
+
```bash
npm install -g meteor
```
@@ -67,6 +69,8 @@ If you only use sudo because of a distribution default permission system, [check
In some cases you can get this error `npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules` because your Node.js installation was performed with wrong permissions. An easy way to fix this is to install Node.js using [nvm](https://github.com/nvm-sh/nvm) and forcing it to be used in your terminal. You can force it in the current session of your terminal by running `nvm use 14`.
+As a last resort you can delete the `.meteor` folder in your home directory and try to install Meteor again using the correct permissions.
+
PATH management
By default, the Meteor installer adds its install path (by default, `~/.meteor/`) to your PATH by updating either your `.bashrc`, `.bash_profile`, or `.zshrc` as appropriate. To disable this behavior, install Meteor by running:
@@ -118,5 +122,4 @@ If you installed Meteor using npm, you can remove it by running:
If you installed Meteor using curl, you can remove it by running:
`rm -rf ~/.meteor`
-`sudo rm /usr/local/bin/meteor`
-
+`sudo rm /usr/local/bin/meteor`
diff --git a/docs/source/packages/webapp.md b/docs/source/packages/webapp.md
index b20d8a6edf..88d7574735 100644
--- a/docs/source/packages/webapp.md
+++ b/docs/source/packages/webapp.md
@@ -13,20 +13,20 @@ This package also allows you to add handlers for HTTP requests.
This lets other services access your app's data through an HTTP API, allowing
it to easily interoperate with tools and frameworks that don't yet support DDP.
-`webapp` exposes the [connect](https://github.com/senchalabs/connect) API for
-handling requests through `WebApp.connectHandlers`.
+`webapp` exposes the [express](https://github.com/expressjs/express) API for
+handling requests through `WebApp.handlers`.
Here's an example that will let you handle a specific URL:
```js
// Listen to incoming HTTP requests (can only be used on the server).
-WebApp.connectHandlers.use('/hello', (req, res, next) => {
+WebApp.handlers.use('/hello', (req, res, next) => {
res.writeHead(200);
res.end(`Hello world from: ${Meteor.release}`);
});
```
-{% apibox "WebApp.connectHandlers" %}
-{% apibox "connectHandlersCallback(req, res, next)" %}
+{% apibox "WebApp.handlers" %}
+{% apibox "expressHandlersCallback(req, res, next)" %}
### Serving a Static Landing Page
@@ -62,36 +62,38 @@ Here's a sample _index.html_ you might use to get started: