From 80e5d39f506bb6bc501fd9647686e80a34bee572 Mon Sep 17 00:00:00 2001 From: Gregor Becker Date: Mon, 15 Jul 2024 18:44:57 +0200 Subject: [PATCH 1/2] fix(pinia-orm): Change plugin registration to be still compatible with pinia types BREAKING-CHANGE: Removed `createORM().use()`. Use `createORM({options.plugins})` instead. --- docs/content/3.plugins/1.introduction.md | 7 +++-- .../3.plugins/2.axios/1.guide/1.setup.md | 22 ++++++++++------ .../2.axios/1.guide/2.configuration.md | 15 ++++++----- packages/axios/test/setup.ts | 11 +++++--- packages/pinia-orm/src/store/Store.ts | 13 ++++------ playgrounds/nuxt3/orm.ts | 18 +++++++++++++ playgrounds/nuxt3/package.json | 4 ++- pnpm-lock.yaml | 26 ++++++------------- 8 files changed, 69 insertions(+), 47 deletions(-) create mode 100644 playgrounds/nuxt3/orm.ts diff --git a/docs/content/3.plugins/1.introduction.md b/docs/content/3.plugins/1.introduction.md index 5b57e11eb..5dfec460e 100644 --- a/docs/content/3.plugins/1.introduction.md +++ b/docs/content/3.plugins/1.introduction.md @@ -25,8 +25,11 @@ import { piniaOrmPlugin } from './plugins' const app = createApp({}) const pinia = createPinia() -const piniaOrm = createORM() -piniaOrm().use(piniaOrmPlugin) +const piniaOrm = createORM({ + plugins: [ + piniaOrmPlugin() + ], +}) pinia.use(piniaOrm) app.use(pinia) setActivePinia(pinia) diff --git a/docs/content/3.plugins/2.axios/1.guide/1.setup.md b/docs/content/3.plugins/2.axios/1.guide/1.setup.md index e0db73f38..f0d6986d7 100644 --- a/docs/content/3.plugins/2.axios/1.guide/1.setup.md +++ b/docs/content/3.plugins/2.axios/1.guide/1.setup.md @@ -29,10 +29,13 @@ or you use `pinaOrmPluginAxios`. It depends if you want to pass options on initi import axios from 'axios' const pinia = createPinia() - const piniaOrm = createORM() - piniaOrm().use(createPiniaOrmAxios({ - axios - })) + const piniaOrm = createORM({ + plugins: [ + createPiniaOrmAxios({ + axios, + }), + ], + }) pinia.use(piniaOrm) ``` ```js{}[Vue2] @@ -43,10 +46,13 @@ or you use `pinaOrmPluginAxios`. It depends if you want to pass options on initi Vue.use(PiniaVuePlugin) const pinia = createPinia() - const piniaOrm = createORM() - piniaOrm().use(createPiniaOrmAxios({ - axios - })) + const piniaOrm = createORM({ + plugins: [ + createPiniaOrmAxios({ + axios, + }), + ], + }) pinia.use(piniaOrm) ``` :: diff --git a/docs/content/3.plugins/2.axios/1.guide/2.configuration.md b/docs/content/3.plugins/2.axios/1.guide/2.configuration.md index 9c484d3c3..7ddb4c092 100644 --- a/docs/content/3.plugins/2.axios/1.guide/2.configuration.md +++ b/docs/content/3.plugins/2.axios/1.guide/2.configuration.md @@ -19,12 +19,15 @@ import axios from 'axios' import { createORM } from 'pinia-orm' import { createPiniaOrmPluginAxios } from '@pinia-orm/axios' -const piniaOrm = createORM() -piniaOrm().use(createPiniaOrmPluginAxios({ - axios, - headers: { 'X-Requested-With': 'XMLHttpRequest' }, - baseURL: 'https://example.com/api/' -})) +const piniaOrm = createORM({ + plugins: [ + createPiniaOrmAxios({ + axios, + headers: { 'X-Requested-With': 'XMLHttpRequest' }, + baseURL: 'https://example.com/api/', + }), + ], +}) ``` ### Model Configuration diff --git a/packages/axios/test/setup.ts b/packages/axios/test/setup.ts index cc104eb32..17192ab0c 100644 --- a/packages/axios/test/setup.ts +++ b/packages/axios/test/setup.ts @@ -16,10 +16,13 @@ beforeAll(() => { beforeEach(() => { const app = createApp({}) const pinia = createPinia() - const piniaOrm = createORM() - piniaOrm().use(createPiniaOrmAxios({ - axios, - })) + const piniaOrm = createORM({ + plugins: [ + createPiniaOrmAxios({ + axios, + }), + ], + }) pinia.use(piniaOrm) app.use(pinia) setActivePinia(pinia) diff --git a/packages/pinia-orm/src/store/Store.ts b/packages/pinia-orm/src/store/Store.ts index a979561aa..aa53cbb28 100644 --- a/packages/pinia-orm/src/store/Store.ts +++ b/packages/pinia-orm/src/store/Store.ts @@ -20,6 +20,7 @@ export interface CacheConfigOptions { export interface InstallOptions { model?: ModelConfigOptions cache?: CacheConfigOptions | boolean + plugins?: PiniaOrmPlugin[] } export interface FilledInstallOptions { @@ -37,13 +38,9 @@ export interface CreatePiniaOrm { export function createORM (options?: InstallOptions): PiniaPlugin { config.model = { ...CONFIG_DEFAULTS.model, ...options?.model } config.cache = options?.cache === false ? false : { ...CONFIG_DEFAULTS.cache, ...(options?.cache !== true && options?.cache) } - const orm = () => { - function use (plugin: PiniaOrmPlugin) { - plugins.push(plugin) - } - return { - use, - } + + if (options?.plugins) { + options.plugins.forEach(plugin => plugins.push(plugin)) } - return orm + return () => {} } diff --git a/playgrounds/nuxt3/orm.ts b/playgrounds/nuxt3/orm.ts new file mode 100644 index 000000000..90987b4cf --- /dev/null +++ b/playgrounds/nuxt3/orm.ts @@ -0,0 +1,18 @@ +import { createPinia } from 'pinia'; +import { createORM } from 'pinia-orm'; +import { createPiniaOrmAxios } from '@pinia-orm/axios'; +import axios from 'axios'; + +export default { + setup() { + const pinia = createPinia(); + const piniaOrm = createORM({ + plugins: [ + createPiniaOrmAxios({ + axios, + }) + ] + }); + pinia.use(piniaOrm); + }, +}; diff --git a/playgrounds/nuxt3/package.json b/playgrounds/nuxt3/package.json index f1605a211..63decaf76 100644 --- a/playgrounds/nuxt3/package.json +++ b/playgrounds/nuxt3/package.json @@ -8,13 +8,15 @@ "start": "node .output/server/index.mjs" }, "devDependencies": { - "@pinia-orm/nuxt": "^1.7.0", + "@pinia-orm/axios": "workspace:*", + "@pinia-orm/nuxt": "workspace:*", "@pinia/nuxt": "^0.5.1", "nuxt": "^3.11.2", "pinia": "^2.1.7", "pinia-orm": "workspace:*" }, "dependencies": { + "axios": "^1.7.2", "nanoid": "^4.0.0", "uuid": "^8.3.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa5b33228..e1771e66f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -385,6 +385,9 @@ importers: playgrounds/nuxt3: dependencies: + axios: + specifier: ^1.7.2 + version: 1.7.2 nanoid: specifier: ^4.0.0 version: 4.0.2 @@ -392,9 +395,12 @@ importers: specifier: ^8.3.2 version: 8.3.2 devDependencies: + '@pinia-orm/axios': + specifier: workspace:* + version: link:../../packages/axios '@pinia-orm/nuxt': - specifier: ^1.7.0 - version: 1.7.0(@pinia/nuxt@0.5.1(@vue/composition-api@1.7.2(vue@3.4.31(typescript@5.5.3)))(magicast@0.3.4)(rollup@4.14.0)(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)))(magicast@0.3.4)(pinia@2.1.7(@vue/composition-api@1.7.2(vue@3.4.31(typescript@5.5.3)))(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)))(rollup@4.14.0) + specifier: workspace:* + version: link:../../packages/nuxt '@pinia/nuxt': specifier: ^0.5.1 version: 0.5.1(@vue/composition-api@1.7.2(vue@3.4.31(typescript@5.5.3)))(magicast@0.3.4)(rollup@4.14.0)(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)) @@ -13996,17 +14002,6 @@ snapshots: - rollup - supports-color - '@pinia-orm/nuxt@1.7.0(@pinia/nuxt@0.5.1(@vue/composition-api@1.7.2(vue@3.4.31(typescript@5.5.3)))(magicast@0.3.4)(rollup@4.14.0)(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)))(magicast@0.3.4)(pinia@2.1.7(@vue/composition-api@1.7.2(vue@3.4.31(typescript@5.5.3)))(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)))(rollup@4.14.0)': - dependencies: - '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.14.0) - '@pinia/nuxt': 0.5.1(@vue/composition-api@1.7.2(vue@3.4.31(typescript@5.5.3)))(magicast@0.3.4)(rollup@4.14.0)(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)) - pinia-orm: 1.7.2(pinia@2.1.7(@vue/composition-api@1.7.2(vue@3.4.31(typescript@5.5.3)))(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3))) - transitivePeerDependencies: - - magicast - - pinia - - rollup - - supports-color - '@pinia/nuxt@0.2.1(@vue/composition-api@1.7.2(vue@2.7.16))(pinia@2.1.7(@vue/composition-api@1.7.2(vue@2.7.16))(typescript@4.2.4)(vue@2.7.16))(vue@2.7.16)': dependencies: pinia: 2.1.7(@vue/composition-api@1.7.2(vue@2.7.16))(typescript@4.2.4)(vue@2.7.16) @@ -20930,11 +20925,6 @@ snapshots: '@pinia-orm/normalizr': 1.9.1 pinia: 2.1.7(@vue/composition-api@1.7.2(vue@2.7.16))(typescript@4.2.4)(vue@2.7.16) - pinia-orm@1.7.2(pinia@2.1.7(@vue/composition-api@1.7.2(vue@3.4.31(typescript@5.5.3)))(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3))): - dependencies: - '@pinia-orm/normalizr': 1.9.1 - pinia: 2.1.7(@vue/composition-api@1.7.2(vue@3.4.31(typescript@5.5.3)))(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)) - pinia@2.1.7(@vue/composition-api@1.7.2(vue@2.7.16))(typescript@4.2.4)(vue@2.7.16): dependencies: '@vue/devtools-api': 6.6.1 From 547a49ac2cec0bc7607cc238f3121cc249d9c6cc Mon Sep 17 00:00:00 2001 From: Gregor Becker Date: Mon, 15 Jul 2024 18:54:32 +0200 Subject: [PATCH 2/2] test(pinia-orm): change plugin behaviour --- packages/pinia-orm/tests/helpers.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/pinia-orm/tests/helpers.ts b/packages/pinia-orm/tests/helpers.ts index a3dd3267a..aab0a823c 100644 --- a/packages/pinia-orm/tests/helpers.ts +++ b/packages/pinia-orm/tests/helpers.ts @@ -18,10 +18,7 @@ interface Entities { export function createPiniaORM (options?: InstallOptions, plugins?: PiniaOrmPlugin[]) { const app = createApp({}) const pinia = createPinia() - const piniaOrm = createORM(options) - if (plugins) { - plugins.forEach(plugin => piniaOrm().use(plugin)) - } + const piniaOrm = createORM({ ...options, plugins }) pinia.use(piniaOrm) app.use(pinia) setActivePinia(pinia)