From 07cd270d7074610d4188edcb2b986f679dd36905 Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Fri, 23 Dec 2022 12:01:27 +0100 Subject: [PATCH] refactor: split options api entry points This should include the types only if the plugins are imported from the correct entries once the deprecated versions are removed. It requires some extra testing before merging --- build.config.ts | 8 ++ package.json | 10 +++ src/database/index.ts | 1 - src/database/unbind.ts | 6 +- src/firestore/unbind.ts | 6 +- src/index.ts | 74 +++++++++++++++---- .../optionsApi.ts => options-api/database.ts} | 15 ++-- .../firestore.ts} | 18 ++--- 8 files changed, 98 insertions(+), 40 deletions(-) rename src/{database/optionsApi.ts => options-api/database.ts} (95%) rename src/{firestore/optionsApi.ts => options-api/firestore.ts} (94%) diff --git a/build.config.ts b/build.config.ts index b1d5129f..a29aee08 100644 --- a/build.config.ts +++ b/build.config.ts @@ -10,6 +10,14 @@ export default defineBuildConfig({ input: './src/server/index', name: 'server/index', }, + { + input: './src/options-api/firestore', + name: 'options-api/firestore', + }, + { + input: './src/options-api/database', + name: 'options-api/database', + }, ], declaration: true, externals: [ diff --git a/package.json b/package.json index 81b86676..80218cc3 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,16 @@ "types": "./dist/server/index.d.ts", "import": "./dist/server/index.mjs", "require": "./dist/server/index.cjs" + }, + "./options-api/firestore": { + "types": "./dist/options-api/firestore.d.ts", + "import": "./dist/options-api/firestore.mjs", + "require": "./dist/options-api/firestore.cjs" + }, + "./options-api/database": { + "types": "./dist/options-api/database.d.ts", + "import": "./dist/options-api/database.mjs", + "require": "./dist/options-api/database.cjs" } }, "main": "./dist/index.cjs", diff --git a/src/database/index.ts b/src/database/index.ts index 78c71076..461a26ca 100644 --- a/src/database/index.ts +++ b/src/database/index.ts @@ -10,7 +10,6 @@ import { import { useFirebaseApp } from '../app' import { UseDatabaseRefOptions, _useDatabaseRef } from './useDatabaseRef' -export { databasePlugin } from './optionsApi' export { globalDatabaseOptions } from './bind' export type { UseDatabaseRefOptions } diff --git a/src/database/unbind.ts b/src/database/unbind.ts index 2942206a..65e610cb 100644 --- a/src/database/unbind.ts +++ b/src/database/unbind.ts @@ -1,6 +1,10 @@ import type { Ref } from 'vue-demi' import type { UnbindWithReset, ResetOption } from '../shared' -import { databaseUnbinds } from './optionsApi' + +export const databaseUnbinds = new WeakMap< + object, + Record +>() export function internalUnbind( key: string, diff --git a/src/firestore/unbind.ts b/src/firestore/unbind.ts index 03bd3771..1edb094a 100644 --- a/src/firestore/unbind.ts +++ b/src/firestore/unbind.ts @@ -1,7 +1,11 @@ import type { Ref } from 'vue-demi' import type { UnbindWithReset } from '../shared' import type { FirestoreRefOptions } from './bind' -import { firestoreUnbinds } from './optionsApi' + +export const firestoreUnbinds = new WeakMap< + object, + Record +>() export function internalUnbind( key: string, diff --git a/src/index.ts b/src/index.ts index c93d50da..846dc1c1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -43,30 +43,72 @@ export type { /** * Database Options API */ +import { + databasePlugin as _databasePlugin, + databasePlugin as _rtdbPlugin, + VueFireDatabaseOptionsAPI as _VueFireDatabaseOptionsAPI, +} from './options-api/database' +import type { + DatabasePluginOptions as _DatabasePluginOptions, + VueFirebaseObject as _VueFirebaseObject, + FirebaseOption as _FirebaseOption, +} from './options-api/database' + export { + // already deprecated databasePlugin, // To ease migration databasePlugin as rtdbPlugin, - VueFireDatabaseOptionsAPI, -} from './database/optionsApi' -export type { - DatabasePluginOptions, - VueFirebaseObject, - FirebaseOption, -} from './database/optionsApi' +} from './options-api/database' + +// TODO: remove deprecations in v4 +/** + * @deprecated import from `vuefire/options-api/database` instead + */ +export const VueFireDatabaseOptionsAPI = _VueFireDatabaseOptionsAPI +/** + * @deprecated import from `vuefire/options-api/database` instead + */ +export type DatabasePluginOptions = _DatabasePluginOptions +/** + * @deprecated import from `vuefire/options-api/database` instead + */ +export type VueFirebaseObject = _VueFirebaseObject +/** + * @deprecated import from `vuefire/options-api/database` instead + */ +export type FirebaseOption = _FirebaseOption /** * Firestore Options API */ -export { - firestorePlugin, - VueFireFirestoreOptionsAPI, -} from './firestore/optionsApi' -export type { - FirestorePluginOptions, - VueFirestoreObject, - FirestoreOption, -} from './firestore/optionsApi' +import { VueFireFirestoreOptionsAPI as _VueFireFirestoreOptionsAPI } from './options-api/firestore' +import type { + FirestorePluginOptions as _FirestorePluginOptions, + VueFirestoreObject as _VueFirestoreObject, + FirestoreOption as _FirestoreOption, +} from './options-api/firestore' + +// TODO: remove deprecations in v4 +/** + * @deprecated import from `vuefire/options-api/firestore` instead + */ +export const VueFireFirestoreOptionsAPI = _VueFireFirestoreOptionsAPI +/** + * @deprecated import from `vuefire/options-api/firestore` instead + */ +export type FirestorePluginOptions = _FirestorePluginOptions +/** + * @deprecated import from `vuefire/options-api/firestore` instead + */ +export type VueFirestoreObject = _VueFirestoreObject +/** + * @deprecated import from `vuefire/options-api/firestore` instead + */ +export type FirestoreOption = _FirestoreOption + +// this one is deprecated already +export { firestorePlugin } from './options-api/firestore' /** * App diff --git a/src/database/optionsApi.ts b/src/options-api/database.ts similarity index 95% rename from src/database/optionsApi.ts rename to src/options-api/database.ts index baf4b2d4..00e47e3a 100644 --- a/src/database/optionsApi.ts +++ b/src/options-api/database.ts @@ -1,13 +1,13 @@ -import { FirebaseApp } from 'firebase/app' -import { DatabaseReference, DataSnapshot, Query } from 'firebase/database' +import type { FirebaseApp } from 'firebase/app' +import type { DatabaseReference, DataSnapshot, Query } from 'firebase/database' import { App, ComponentPublicInstance, effectScope, toRef } from 'vue-demi' import { isVue3 } from 'vue-demi' import { useFirebaseApp } from '../app' import { getGlobalScope } from '../globals' import { ResetOption, UnbindWithReset } from '../shared' -import { internalUnbind } from './unbind' -import { _DatabaseRefOptions } from './bind' -import { _useDatabaseRef } from './useDatabaseRef' +import { databaseUnbinds, internalUnbind } from '../database/unbind' +import { _DatabaseRefOptions } from '../database/bind' +import { _useDatabaseRef } from '../database/useDatabaseRef' /** * Options for the Firebase Database Plugin that enables the Options API such as `$databaseBind` and `$databaseUnbind`. @@ -34,11 +34,6 @@ const databasePluginDefaults: Readonly< export type VueFirebaseObject = Record export type FirebaseOption = VueFirebaseObject | (() => VueFirebaseObject) -export const databaseUnbinds = new WeakMap< - object, - Record ->() - /** * Install this plugin if you want to add `$databaseBind` and `$databaseUnbind` functions. Note this plugin is only necessary if * you use the Options API. If you **exclusively use the Composition API** (e.g. `useDatabaseObject()` and `useDatabaseList()`), you diff --git a/src/firestore/optionsApi.ts b/src/options-api/firestore.ts similarity index 94% rename from src/firestore/optionsApi.ts rename to src/options-api/firestore.ts index 82757179..47f3a441 100644 --- a/src/firestore/optionsApi.ts +++ b/src/options-api/firestore.ts @@ -11,24 +11,19 @@ import { toRef, isVue3, } from 'vue-demi' -import { FirestoreRefOptions } from './bind' -import { _useFirestoreRef } from './useFirestoreRef' +import { FirestoreRefOptions } from '../firestore/bind' +import { _useFirestoreRef } from '../firestore/useFirestoreRef' import { ResetOption, UnbindWithReset, _FirestoreDataSource } from '../shared' -import { FirebaseApp } from 'firebase/app' +import type { FirebaseApp } from 'firebase/app' import { getGlobalScope } from '../globals' import { useFirebaseApp } from '../app' -import { internalUnbind } from './unbind' +import { firestoreUnbinds, internalUnbind } from '../firestore/unbind' // TODO: this should be an entry point to generate the corresponding .d.ts file that only gets included if the plugin is imported export type VueFirestoreObject = Record export type FirestoreOption = VueFirestoreObject | (() => VueFirestoreObject) -export const firestoreUnbinds = new WeakMap< - object, - Record ->() - /** * Options for the Firebase Database Plugin that enables the Options API such as `$firestoreBind` and * `$firestoreUnbind`. @@ -55,7 +50,7 @@ const firestorePluginDefaults: Readonly< /** * Install this plugin to add `$firestoreBind` and `$firestoreUnbind` functions. Note this plugin is not necessary if * you exclusively use the Composition API (`useDocument()` and `useCollection()`). - * @deprecated Use `VueFire` and `VueFireFirestoreOptionsAPI` with the `modules` option instead.b + * @deprecated Use `VueFire` and `VueFireFirestoreOptionsAPI` with the `modules` option instead. * * @param app * @param pluginOptions @@ -168,7 +163,8 @@ export const firestorePlugin = function firestorePlugin( * * ```ts * import { createApp } from 'vue' - * import { VueFire, VueFireFirestoreOptionsAPI } from 'vuefire' + * import { VueFire } from 'vuefire' + * import { VueFireFirestoreOptionsAPI } from 'vuefire/options-api/firestore' * * const app = createApp(App) * app.use(VueFire, {