diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..05531977 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,55 @@ +name: test + +on: + push: + paths-ignore: + - 'docs/**' + - 'playground/**' + - 'examples/**' + + pull_request: + paths-ignore: + - 'docs/**' + - 'playground/**' + - 'examples/**' + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version: '>=20' + cache: 'pnpm' + + - name: Install + run: pnpm install --frozen-lockfile + + - name: Install firebase-tools + run: pnpm add -g firebase-tools + + - name: Lint + run: pnpm run lint + + - name: Types + run: pnpm run test:types + + - name: Test + run: firebase emulators:exec 'pnpm run test:unit' + + - name: Build + run: pnpm run build + + - name: Nuxt module build + working-directory: ./packages/nuxt + run: pnpm run build + + - uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/docs-prs.yml b/.github/workflows/docs-prs.yml index 3452e7f4..3e5a4231 100644 --- a/.github/workflows/docs-prs.yml +++ b/.github/workflows/docs-prs.yml @@ -19,7 +19,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v3 with: - node-version: 18 + node-version: 20 cache: 'pnpm' - name: Install dependencies diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 722d3e4b..98127880 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -21,7 +21,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v3 with: - node-version: 18 + node-version: 20 cache: 'pnpm' - name: Install dependencies diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 459427b1..00000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: test - -on: - push: - paths-ignore: - - 'docs/**' - - 'playground/**' - - 'examples/**' - - pull_request: - paths-ignore: - - 'docs/**' - - 'playground/**' - - 'examples/**' - -permissions: - contents: read - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: 20 - - - uses: pnpm/action-setup@v2 - with: - version: 8.10.2 - run_install: false - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - - uses: actions/cache@v3 - name: Setup pnpm cache - with: - path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Cache firebase tools - id: cache-firebase-tools - uses: actions/cache@v3 - env: - cache-name: cache-firebase-tools - with: - path: ~/.cache/firebase/emulators - key: ${{ runner.os }}-build-${{ env.cache-name }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }} - ${{ runner.os }}-build- - ${{ runner.os }}- - - - name: Install - run: pnpm install --frozen-lockfile - - - name: Install firebase-tools - run: pnpm add -g firebase-tools - - - name: Lint - run: pnpm run lint - - - name: Types - run: pnpm run test:types - - - name: Test - run: firebase emulators:exec 'pnpm run test:unit' - - - name: Build - run: pnpm run build - - - name: Nuxt module build - working-directory: ./packages/nuxt - run: pnpm run build - - - uses: codecov/codecov-action@v2 diff --git a/CHANGELOG.md b/CHANGELOG.md index e86db307..e3c03ab6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,25 @@ +## [3.2.2](https://github.com/vuejs/vuefire/compare/v3.2.1...v3.2.2) (2025-07-20) + +### Features + +- support Firebase 12 ([#1629](https://github.com/vuejs/vuefire/issues/1629)) ([3b2405f](https://github.com/vuejs/vuefire/commit/3b2405f027e17902044d4be5887d811c9dc39f7c)) + +## [3.2.1](https://github.com/vuejs/vuefire/compare/v3.2.1-beta.0...v3.2.1) (2024-12-18) + +### Features + +- support latest firebase ([062c044](https://github.com/vuejs/vuefire/commit/062c0441903d3b8f9b6467e292a896ff4aed0cd1)) + +# [3.2.0](https://github.com/vuejs/vuefire/compare/vuefire@3.1.24...vuefire@3.2.0) (2024-08-16) + +### Bug Fixes + +- **types:** augment `vue` rather than `@vue/runtime-core` ([#1565](https://github.com/vuejs/vuefire/issues/1565)) ([ad462bd](https://github.com/vuejs/vuefire/commit/ad462bdbf7614927b6fd2511aba7620a806ced23)) + +## [3.1.24](https://github.com/vuejs/vuefire/compare/vuefire@3.1.23...vuefire@3.1.24) (2024-07-13) + +- Update firebase peer dependencies + ## [3.1.23](https://github.com/vuejs/vuefire/compare/vuefire@3.1.22...vuefire@3.1.23) (2024-02-23) ### Bug Fixes diff --git a/README.md b/README.md index 06740596..828415ae 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@

npm package build status - code coverage +


@@ -30,10 +30,10 @@

Silver Sponsors

- + - - VueMastery + + Route Optimizer and Route Planner Software @@ -42,32 +42,38 @@ Prefect + + + + VueMastery + +

Bronze Sponsors

- + - - Stanislas Ormières + + Storyblok - + - - Antony Konstantinidis + + Nuxt UI Pro Templates - + - - Storyblok + + Antony Konstantinidis - + - - Nuxt UI Pro Templates + + Stanislas Ormières

@@ -78,8 +84,7 @@ ## Status -- VueFire is currently stable -- Nuxt VueFire is in _Preview_ +- VueFire and Nuxt VueFire are both currently stable ## Roadmap diff --git a/docs/.vitepress/components/HomeSponsors.vue b/docs/.vitepress/components/HomeSponsors.vue deleted file mode 100644 index eb8a7b31..00000000 --- a/docs/.vitepress/components/HomeSponsors.vue +++ /dev/null @@ -1,108 +0,0 @@ - - - - - diff --git a/docs/.vitepress/components/sponsors.json b/docs/.vitepress/components/sponsors.json deleted file mode 100644 index d4ef1030..00000000 --- a/docs/.vitepress/components/sponsors.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "platinum": [], - "gold": [], - "silver": [ - { - "alt": "VueMastery", - "href": "https://www.vuemastery.com/", - "imgSrcDark": "https://posva-sponsors.pages.dev/logos/vuemastery-dark.png", - "imgSrcLight": "https://posva-sponsors.pages.dev/logos/vuemastery-light.svg" - }, - { - "alt": "Prefect", - "href": "https://www.prefect.io/", - "imgSrcDark": "https://posva-sponsors.pages.dev/logos/prefectlogo-dark.svg", - "imgSrcLight": "https://posva-sponsors.pages.dev/logos/prefectlogo-light.svg" - } - ], - "bronze": [ - { - "alt": "Stanislas Ormières", - "href": "https://stormier.ninja", - "imgSrcDark": "https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4", - "imgSrcLight": "https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4" - }, - { - "alt": "Antony Konstantinidis", - "href": "https://www.vuejs.de", - "imgSrcDark": "https://avatars.githubusercontent.com/u/4183726?u=6b50a8ea16de29d2982f43c5640b1db9299ebcd1&v=4", - "imgSrcLight": "https://avatars.githubusercontent.com/u/4183726?u=6b50a8ea16de29d2982f43c5640b1db9299ebcd1&v=4" - }, - { - "alt": "Storyblok", - "href": "https://storyblok.com", - "imgSrcDark": "https://posva-sponsors.pages.dev/logos/storyblok.png", - "imgSrcLight": "https://posva-sponsors.pages.dev/logos/storyblok.png" - }, - { - "alt": "Nuxt UI Pro Templates", - "href": "https://ui.nuxt.com/pro", - "imgSrcDark": "https://avatars.githubusercontent.com/u/81570812?v=4", - "imgSrcLight": "https://avatars.githubusercontent.com/u/81570812?v=4" - } - ] -} diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index dd11a29f..5a4345a9 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -280,7 +280,10 @@ function sidebarApi(): SidebarGroup { text: 'API Reference', items: [ { text: 'Package List', link: '/api/' }, - { text: 'nuxt-vuefire', link: '/api/modules/nuxt_vuefire.html' }, + { + text: 'nuxt-vuefire', + link: '/api/modules/packages_nuxt_src_module.html', + }, { text: 'vuefire', link: '/api/modules/vuefire.html' }, ], } diff --git a/docs/.vitepress/theme/components/sponsors.json b/docs/.vitepress/theme/components/sponsors.json index d4ef1030..993019bb 100644 --- a/docs/.vitepress/theme/components/sponsors.json +++ b/docs/.vitepress/theme/components/sponsors.json @@ -3,8 +3,8 @@ "gold": [], "silver": [ { - "alt": "VueMastery", - "href": "https://www.vuemastery.com/", + "alt": "Vue Mastery", + "href": "https://www.vuemastery.com", "imgSrcDark": "https://posva-sponsors.pages.dev/logos/vuemastery-dark.png", "imgSrcLight": "https://posva-sponsors.pages.dev/logos/vuemastery-light.svg" }, @@ -13,21 +13,15 @@ "href": "https://www.prefect.io/", "imgSrcDark": "https://posva-sponsors.pages.dev/logos/prefectlogo-dark.svg", "imgSrcLight": "https://posva-sponsors.pages.dev/logos/prefectlogo-light.svg" + }, + { + "alt": "Route Optimizer and Route Planner Software", + "href": "https://route4me.com", + "imgSrcDark": "https://posva-sponsors.pages.dev/logos/route4me.png", + "imgSrcLight": "https://posva-sponsors.pages.dev/logos/route4me.png" } ], "bronze": [ - { - "alt": "Stanislas Ormières", - "href": "https://stormier.ninja", - "imgSrcDark": "https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4", - "imgSrcLight": "https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4" - }, - { - "alt": "Antony Konstantinidis", - "href": "https://www.vuejs.de", - "imgSrcDark": "https://avatars.githubusercontent.com/u/4183726?u=6b50a8ea16de29d2982f43c5640b1db9299ebcd1&v=4", - "imgSrcLight": "https://avatars.githubusercontent.com/u/4183726?u=6b50a8ea16de29d2982f43c5640b1db9299ebcd1&v=4" - }, { "alt": "Storyblok", "href": "https://storyblok.com", @@ -37,8 +31,20 @@ { "alt": "Nuxt UI Pro Templates", "href": "https://ui.nuxt.com/pro", - "imgSrcDark": "https://avatars.githubusercontent.com/u/81570812?v=4", - "imgSrcLight": "https://avatars.githubusercontent.com/u/81570812?v=4" + "imgSrcDark": "https://posva-sponsors.pages.dev/logos/nuxt-dark.svg", + "imgSrcLight": "https://posva-sponsors.pages.dev/logos/nuxt-light.svg" + }, + { + "alt": "Antony Konstantinidis", + "href": "https://www.vuejs.de", + "imgSrcDark": "https://avatars.githubusercontent.com/u/4183726?u=6b50a8ea16de29d2982f43c5640b1db9299ebcd1&v=4", + "imgSrcLight": "https://avatars.githubusercontent.com/u/4183726?u=6b50a8ea16de29d2982f43c5640b1db9299ebcd1&v=4" + }, + { + "alt": "Stanislas Ormières", + "href": "https://stormier.ninja", + "imgSrcDark": "https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4", + "imgSrcLight": "https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4" } ] } diff --git a/docs/guide/getting-started.md b/docs/guide/getting-started.md index 8a4a44f1..513e3ba6 100644 --- a/docs/guide/getting-started.md +++ b/docs/guide/getting-started.md @@ -38,7 +38,7 @@ Most of the time, you should gather collection references in one of your files a ```js import { initializeApp } from 'firebase/app' -import { getDatabase, dbRef } from 'firebase/database' +import { getDatabase, ref as dbRef } from 'firebase/database' // ... other firebase imports export const firebaseApp = initializeApp({ diff --git a/docs/guide/realtime-data.md b/docs/guide/realtime-data.md index 7ce81e08..f4066977 100644 --- a/docs/guide/realtime-data.md +++ b/docs/guide/realtime-data.md @@ -16,7 +16,7 @@ Use the `useCollection()`, `useDatabaseList()`, `useDocument()`, and `useDatabas ```vue ``` + diff --git a/docs/guide/storage.md b/docs/guide/storage.md index 7e641d30..bdfbb805 100644 --- a/docs/guide/storage.md +++ b/docs/guide/storage.md @@ -1,6 +1,6 @@ # Firebase Storage -[Firebase Storage](https://firebase.google.com/docs/storage/web/start) is a cloud storage service for Firebase. It allows you to store and serve user-generated content like images, audio, video, and other files. While most of the APIs can be used as you would normally do with Firebase, VueFire exposes a few composables to integrate better with Vue that not only give you access to reactive variables but also to some actions like `upload()` to update a file while keeping the reactive variable up to date at the same time. +[Firebase Storage](https://firebase.google.com/docs/storage/web/start) is a cloud storage service for Firebase. It allows you to store and serve user-generated content like images, audio, video, and other files. While most of the APIs can be used as you would normally do with Firebase, VueFire exposes a few composables to integrate better with Vue. These not only give you access to reactive variables, but also to some actions like `upload()` which updates a file while also keeping the reactive variable up to date. ## Installation @@ -10,9 +10,9 @@ You can access the Firebase Storage from within any component with the composabl ## Uploading Files -You can upload and monitor the progress of a file upload with the `useStorageFile()` composable. This also exposes the URL of the file once it's uploaded and its metadata, let's start with a full example of a form upload: +To upload and monitor the upload progress of a file, use the `useStorageFile()` composable. This will expose the URL and metadata of the file once it's uploaded. Here's a full example of a form upload: -```vue +```vue{5,18}