@lyeve-labs/client-vue 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
- # @lyeve/cms-client-vue
1
+ # @lyeve-labs/client-vue
2
2
 
3
3
  Vue 3 composables for the LyEve Core. `useQuery`, `useMutation`, and the
4
- `CmsPlugin` provider. Thin wrapper around `@lyeve/cms-client` using the
4
+ `CmsPlugin` provider. Thin wrapper around `@lyeve-labs/client` using the
5
5
  Composition API.
6
6
 
7
7
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
@@ -9,12 +9,12 @@ Composition API.
9
9
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-3178c6.svg)](https://www.typescriptlang.org)
10
10
 
11
11
  ```bash
12
- pnpm add @lyeve/cms-client @lyeve/cms-client-vue
12
+ pnpm add @lyeve-labs/client @lyeve-labs/client-vue
13
13
  ```
14
14
 
15
15
  ```ts
16
16
  import { createApp } from "vue";
17
- import { CmsPlugin } from "@lyeve/cms-client-vue";
17
+ import { CmsPlugin } from "@lyeve-labs/client-vue";
18
18
 
19
19
  const app = createApp(App);
20
20
  app.use(CmsPlugin, {
@@ -40,14 +40,14 @@ One plugin at the root, reactive refs everywhere else. No ceremony.
40
40
 
41
41
  - **Node 20** or newer
42
42
  - **Vue 3.0** or newer
43
- - **[@lyeve/cms-client](https://www.npmjs.com/package/@lyeve/cms-client)** `>=0.1.0`
43
+ - **[@lyeve-labs/client](https://www.npmjs.com/package/@lyeve-labs/client)** `>=0.1.0`
44
44
 
45
45
  ## Install
46
46
 
47
47
  ```bash
48
- pnpm add @lyeve/cms-client @lyeve/cms-client-vue
49
- # or npm install @lyeve/cms-client @lyeve/cms-client-vue
50
- # or yarn add @lyeve/cms-client @lyeve/cms-client-vue
48
+ pnpm add @lyeve-labs/client @lyeve-labs/client-vue
49
+ # or npm install @lyeve-labs/client @lyeve-labs/client-vue
50
+ # or yarn add @lyeve-labs/client @lyeve-labs/client-vue
51
51
  ```
52
52
 
53
53
  ## Use
@@ -56,7 +56,7 @@ pnpm add @lyeve/cms-client @lyeve/cms-client-vue
56
56
 
57
57
  ```ts
58
58
  import { createApp } from "vue";
59
- import { CmsPlugin } from "@lyeve/cms-client-vue";
59
+ import { CmsPlugin } from "@lyeve-labs/client-vue";
60
60
 
61
61
  const app = createApp(App);
62
62
  app.use(CmsPlugin, {
@@ -72,8 +72,8 @@ app.mount("#app");
72
72
 
73
73
  ```vue
74
74
  <script setup lang="ts">
75
- import { useQuery } from "@lyeve/cms-client-vue";
76
- import { getSchemas } from "@lyeve/cms-client-rest";
75
+ import { useQuery } from "@lyeve-labs/client-vue";
76
+ import { getSchemas } from "@lyeve-labs/client-rest";
77
77
 
78
78
  const { data, error, loading, refetch } = useQuery((client) =>
79
79
  getSchemas(client),
@@ -93,8 +93,8 @@ const { data, error, loading, refetch } = useQuery((client) =>
93
93
 
94
94
  ```vue
95
95
  <script setup lang="ts">
96
- import { useMutation } from "@lyeve/cms-client-vue";
97
- import { deleteContent } from "@lyeve/cms-client-rest";
96
+ import { useMutation } from "@lyeve-labs/client-vue";
97
+ import { deleteContent } from "@lyeve-labs/client-rest";
98
98
 
99
99
  const [remove, removing] = useMutation((client, id: string) =>
100
100
  deleteContent(id, client),
@@ -163,7 +163,7 @@ tests/ # vitest test suite
163
163
 
164
164
  ## Versioning
165
165
 
166
- `@lyeve/cms-client-vue` follows [SemVer](https://semver.org). While under `1.0`,
166
+ `@lyeve-labs/client-vue` follows [SemVer](https://semver.org). While under `1.0`,
167
167
  breaking changes bump the **minor** version; additive changes bump the **patch**.
168
168
  Every release is logged in [`CHANGELOG.md`](CHANGELOG.md).
169
169
 
package/dist/index.cjs CHANGED
@@ -25,13 +25,13 @@ __export(src_exports, {
25
25
  useQuery: () => useQuery
26
26
  });
27
27
  module.exports = __toCommonJS(src_exports);
28
- var import_cms_client = require("@lyeve/cms-client");
28
+ var import_client = require("@lyeve-labs/client");
29
29
  var import_vue = require("vue");
30
30
  var CMS_KEY = /* @__PURE__ */ Symbol("cms-client");
31
31
  var CmsPlugin = {
32
32
  install(app, config) {
33
33
  const base = config.baseUrl ?? "";
34
- const client = (0, import_cms_client.createClient)((url, init) => {
34
+ const client = (0, import_client.createClient)((url, init) => {
35
35
  const fullUrl = typeof url === "string" ? `${base}${url}` : url;
36
36
  return fetch(fullUrl, {
37
37
  ...init,
@@ -43,7 +43,10 @@ var CmsPlugin = {
43
43
  };
44
44
  function useClient() {
45
45
  const client = (0, import_vue.inject)(CMS_KEY);
46
- if (!client) throw new Error("CmsPlugin must be installed via app.use(CmsPlugin, config)");
46
+ if (!client)
47
+ throw new Error(
48
+ "CmsPlugin must be installed via app.use(CmsPlugin, config)"
49
+ );
47
50
  return client;
48
51
  }
49
52
  function useQuery(fetcher) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createClient, type HttpClient } from '@lyeve/cms-client';\nimport { ref, inject, type InjectionKey, type Ref, type App } from 'vue';\n\n// Plugin\n\nexport interface VueCmsConfig {\n baseUrl?: string;\n getHeaders?: () => Record<string, string>;\n}\n\nconst CMS_KEY: InjectionKey<HttpClient> = Symbol('cms-client');\n\n/** Vue plugin that provides an HttpClient via app-level dependency injection. */\nexport const CmsPlugin = {\n install(app: App, config: VueCmsConfig) {\n const base = config.baseUrl ?? '';\n const client = createClient((url, init) => {\n const fullUrl = typeof url === 'string' ? `${base}${url}` : url;\n return fetch(fullUrl, {\n ...init,\n headers: { ...init?.headers, ...config.getHeaders?.() },\n });\n });\n app.provide(CMS_KEY, client);\n },\n};\n\nfunction useClient(): HttpClient {\n const client = inject(CMS_KEY);\n if (!client) throw new Error('CmsPlugin must be installed via app.use(CmsPlugin, config)');\n return client;\n}\n\n// Composables\n\nexport interface AsyncState<T> {\n data: Ref<T | null>;\n error: Ref<Error | null>;\n loading: Ref<boolean>;\n refetch: () => void;\n}\n\n/**\n * Reactive query that fires immediately on mount and exposes loading/data/error state.\n * Re-fetch by calling the returned `refetch` function.\n */\nexport function useQuery<T>(fetcher: (client: HttpClient) => Promise<T>): AsyncState<T> {\n const client = useClient();\n const data = ref<T | null>(null) as Ref<T | null>;\n const error = ref<Error | null>(null);\n const loading = ref(true);\n\n async function run() {\n loading.value = true;\n try {\n data.value = await fetcher(client);\n error.value = null;\n } catch (e) {\n error.value = e as Error;\n } finally {\n loading.value = false;\n }\n }\n\n run();\n\n return { data, error, loading, refetch: run };\n}\n\n/**\n * Returns a mutate function and a reactive state object tracking the latest invocation.\n * The mutate function throws on failure so callers can catch and handle errors inline.\n */\nexport function useMutation<T, V>(\n mutator: (client: HttpClient, vars: V) => Promise<T>,\n): [(vars: V) => Promise<T>, { data: Ref<T | null>; error: Ref<Error | null>; loading: Ref<boolean> }] {\n const client = useClient();\n const data = ref<T | null>(null) as Ref<T | null>;\n const error = ref<Error | null>(null);\n const loading = ref(false);\n\n async function run(vars: V): Promise<T> {\n loading.value = true;\n error.value = null;\n try {\n const result = await mutator(client, vars);\n data.value = result;\n return result;\n } catch (e) {\n error.value = e as Error;\n throw e;\n } finally {\n loading.value = false;\n }\n }\n\n return [run, { data, error, loading }];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA8C;AAC9C,iBAAmE;AASnE,IAAM,UAAoC,uBAAO,YAAY;AAGtD,IAAM,YAAY;AAAA,EACvB,QAAQ,KAAU,QAAsB;AACtC,UAAM,OAAO,OAAO,WAAW;AAC/B,UAAM,aAAS,gCAAa,CAAC,KAAK,SAAS;AACzC,YAAM,UAAU,OAAO,QAAQ,WAAW,GAAG,IAAI,GAAG,GAAG,KAAK;AAC5D,aAAO,MAAM,SAAS;AAAA,QACpB,GAAG;AAAA,QACH,SAAS,EAAE,GAAG,MAAM,SAAS,GAAG,OAAO,aAAa,EAAE;AAAA,MACxD,CAAC;AAAA,IACH,CAAC;AACD,QAAI,QAAQ,SAAS,MAAM;AAAA,EAC7B;AACF;AAEA,SAAS,YAAwB;AAC/B,QAAM,aAAS,mBAAO,OAAO;AAC7B,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,4DAA4D;AACzF,SAAO;AACT;AAeO,SAAS,SAAY,SAA4D;AACtF,QAAM,SAAS,UAAU;AACzB,QAAM,WAAO,gBAAc,IAAI;AAC/B,QAAM,YAAQ,gBAAkB,IAAI;AACpC,QAAM,cAAU,gBAAI,IAAI;AAExB,iBAAe,MAAM;AACnB,YAAQ,QAAQ;AAChB,QAAI;AACF,WAAK,QAAQ,MAAM,QAAQ,MAAM;AACjC,YAAM,QAAQ;AAAA,IAChB,SAAS,GAAG;AACV,YAAM,QAAQ;AAAA,IAChB,UAAE;AACA,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,MAAI;AAEJ,SAAO,EAAE,MAAM,OAAO,SAAS,SAAS,IAAI;AAC9C;AAMO,SAAS,YACd,SACqG;AACrG,QAAM,SAAS,UAAU;AACzB,QAAM,WAAO,gBAAc,IAAI;AAC/B,QAAM,YAAQ,gBAAkB,IAAI;AACpC,QAAM,cAAU,gBAAI,KAAK;AAEzB,iBAAe,IAAI,MAAqB;AACtC,YAAQ,QAAQ;AAChB,UAAM,QAAQ;AACd,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,QAAQ,IAAI;AACzC,WAAK,QAAQ;AACb,aAAO;AAAA,IACT,SAAS,GAAG;AACV,YAAM,QAAQ;AACd,YAAM;AAAA,IACR,UAAE;AACA,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,SAAO,CAAC,KAAK,EAAE,MAAM,OAAO,QAAQ,CAAC;AACvC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createClient, type HttpClient } from \"@lyeve-labs/client\";\nimport { ref, inject, type InjectionKey, type Ref, type App } from \"vue\";\n\n// Plugin\n\nexport interface VueCmsConfig {\n baseUrl?: string;\n getHeaders?: () => Record<string, string>;\n}\n\nconst CMS_KEY: InjectionKey<HttpClient> = Symbol(\"cms-client\");\n\n/** Vue plugin that provides an HttpClient via app-level dependency injection. */\nexport const CmsPlugin = {\n install(app: App, config: VueCmsConfig) {\n const base = config.baseUrl ?? \"\";\n const client = createClient((url, init) => {\n const fullUrl = typeof url === \"string\" ? `${base}${url}` : url;\n return fetch(fullUrl, {\n ...init,\n headers: { ...init?.headers, ...config.getHeaders?.() },\n });\n });\n app.provide(CMS_KEY, client);\n },\n};\n\nfunction useClient(): HttpClient {\n const client = inject(CMS_KEY);\n if (!client)\n throw new Error(\n \"CmsPlugin must be installed via app.use(CmsPlugin, config)\",\n );\n return client;\n}\n\n// Composables\n\nexport interface AsyncState<T> {\n data: Ref<T | null>;\n error: Ref<Error | null>;\n loading: Ref<boolean>;\n refetch: () => void;\n}\n\n/**\n * Reactive query that fires immediately on mount and exposes loading/data/error state.\n * Re-fetch by calling the returned `refetch` function.\n */\nexport function useQuery<T>(\n fetcher: (client: HttpClient) => Promise<T>,\n): AsyncState<T> {\n const client = useClient();\n const data = ref<T | null>(null) as Ref<T | null>;\n const error = ref<Error | null>(null);\n const loading = ref(true);\n\n async function run() {\n loading.value = true;\n try {\n data.value = await fetcher(client);\n error.value = null;\n } catch (e) {\n error.value = e as Error;\n } finally {\n loading.value = false;\n }\n }\n\n run();\n\n return { data, error, loading, refetch: run };\n}\n\n/**\n * Returns a mutate function and a reactive state object tracking the latest invocation.\n * The mutate function throws on failure so callers can catch and handle errors inline.\n */\nexport function useMutation<T, V>(\n mutator: (client: HttpClient, vars: V) => Promise<T>,\n): [\n (vars: V) => Promise<T>,\n { data: Ref<T | null>; error: Ref<Error | null>; loading: Ref<boolean> },\n] {\n const client = useClient();\n const data = ref<T | null>(null) as Ref<T | null>;\n const error = ref<Error | null>(null);\n const loading = ref(false);\n\n async function run(vars: V): Promise<T> {\n loading.value = true;\n error.value = null;\n try {\n const result = await mutator(client, vars);\n data.value = result;\n return result;\n } catch (e) {\n error.value = e as Error;\n throw e;\n } finally {\n loading.value = false;\n }\n }\n\n return [run, { data, error, loading }];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA8C;AAC9C,iBAAmE;AASnE,IAAM,UAAoC,uBAAO,YAAY;AAGtD,IAAM,YAAY;AAAA,EACvB,QAAQ,KAAU,QAAsB;AACtC,UAAM,OAAO,OAAO,WAAW;AAC/B,UAAM,aAAS,4BAAa,CAAC,KAAK,SAAS;AACzC,YAAM,UAAU,OAAO,QAAQ,WAAW,GAAG,IAAI,GAAG,GAAG,KAAK;AAC5D,aAAO,MAAM,SAAS;AAAA,QACpB,GAAG;AAAA,QACH,SAAS,EAAE,GAAG,MAAM,SAAS,GAAG,OAAO,aAAa,EAAE;AAAA,MACxD,CAAC;AAAA,IACH,CAAC;AACD,QAAI,QAAQ,SAAS,MAAM;AAAA,EAC7B;AACF;AAEA,SAAS,YAAwB;AAC/B,QAAM,aAAS,mBAAO,OAAO;AAC7B,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,SAAO;AACT;AAeO,SAAS,SACd,SACe;AACf,QAAM,SAAS,UAAU;AACzB,QAAM,WAAO,gBAAc,IAAI;AAC/B,QAAM,YAAQ,gBAAkB,IAAI;AACpC,QAAM,cAAU,gBAAI,IAAI;AAExB,iBAAe,MAAM;AACnB,YAAQ,QAAQ;AAChB,QAAI;AACF,WAAK,QAAQ,MAAM,QAAQ,MAAM;AACjC,YAAM,QAAQ;AAAA,IAChB,SAAS,GAAG;AACV,YAAM,QAAQ;AAAA,IAChB,UAAE;AACA,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,MAAI;AAEJ,SAAO,EAAE,MAAM,OAAO,SAAS,SAAS,IAAI;AAC9C;AAMO,SAAS,YACd,SAIA;AACA,QAAM,SAAS,UAAU;AACzB,QAAM,WAAO,gBAAc,IAAI;AAC/B,QAAM,YAAQ,gBAAkB,IAAI;AACpC,QAAM,cAAU,gBAAI,KAAK;AAEzB,iBAAe,IAAI,MAAqB;AACtC,YAAQ,QAAQ;AAChB,UAAM,QAAQ;AACd,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,QAAQ,IAAI;AACzC,WAAK,QAAQ;AACb,aAAO;AAAA,IACT,SAAS,GAAG;AACV,YAAM,QAAQ;AACd,YAAM;AAAA,IACR,UAAE;AACA,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,SAAO,CAAC,KAAK,EAAE,MAAM,OAAO,QAAQ,CAAC;AACvC;","names":[]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { HttpClient } from '@lyeve/cms-client';
1
+ import { HttpClient } from '@lyeve-labs/client';
2
2
  import { Ref, App } from 'vue';
3
3
 
4
4
  interface VueCmsConfig {
@@ -24,10 +24,13 @@ declare function useQuery<T>(fetcher: (client: HttpClient) => Promise<T>): Async
24
24
  * Returns a mutate function and a reactive state object tracking the latest invocation.
25
25
  * The mutate function throws on failure so callers can catch and handle errors inline.
26
26
  */
27
- declare function useMutation<T, V>(mutator: (client: HttpClient, vars: V) => Promise<T>): [(vars: V) => Promise<T>, {
28
- data: Ref<T | null>;
29
- error: Ref<Error | null>;
30
- loading: Ref<boolean>;
31
- }];
27
+ declare function useMutation<T, V>(mutator: (client: HttpClient, vars: V) => Promise<T>): [
28
+ (vars: V) => Promise<T>,
29
+ {
30
+ data: Ref<T | null>;
31
+ error: Ref<Error | null>;
32
+ loading: Ref<boolean>;
33
+ }
34
+ ];
32
35
 
33
36
  export { type AsyncState, CmsPlugin, type VueCmsConfig, useMutation, useQuery };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { HttpClient } from '@lyeve/cms-client';
1
+ import { HttpClient } from '@lyeve-labs/client';
2
2
  import { Ref, App } from 'vue';
3
3
 
4
4
  interface VueCmsConfig {
@@ -24,10 +24,13 @@ declare function useQuery<T>(fetcher: (client: HttpClient) => Promise<T>): Async
24
24
  * Returns a mutate function and a reactive state object tracking the latest invocation.
25
25
  * The mutate function throws on failure so callers can catch and handle errors inline.
26
26
  */
27
- declare function useMutation<T, V>(mutator: (client: HttpClient, vars: V) => Promise<T>): [(vars: V) => Promise<T>, {
28
- data: Ref<T | null>;
29
- error: Ref<Error | null>;
30
- loading: Ref<boolean>;
31
- }];
27
+ declare function useMutation<T, V>(mutator: (client: HttpClient, vars: V) => Promise<T>): [
28
+ (vars: V) => Promise<T>,
29
+ {
30
+ data: Ref<T | null>;
31
+ error: Ref<Error | null>;
32
+ loading: Ref<boolean>;
33
+ }
34
+ ];
32
35
 
33
36
  export { type AsyncState, CmsPlugin, type VueCmsConfig, useMutation, useQuery };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/index.ts
2
- import { createClient } from "@lyeve/cms-client";
2
+ import { createClient } from "@lyeve-labs/client";
3
3
  import { ref, inject } from "vue";
4
4
  var CMS_KEY = /* @__PURE__ */ Symbol("cms-client");
5
5
  var CmsPlugin = {
@@ -17,7 +17,10 @@ var CmsPlugin = {
17
17
  };
18
18
  function useClient() {
19
19
  const client = inject(CMS_KEY);
20
- if (!client) throw new Error("CmsPlugin must be installed via app.use(CmsPlugin, config)");
20
+ if (!client)
21
+ throw new Error(
22
+ "CmsPlugin must be installed via app.use(CmsPlugin, config)"
23
+ );
21
24
  return client;
22
25
  }
23
26
  function useQuery(fetcher) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createClient, type HttpClient } from '@lyeve/cms-client';\nimport { ref, inject, type InjectionKey, type Ref, type App } from 'vue';\n\n// Plugin\n\nexport interface VueCmsConfig {\n baseUrl?: string;\n getHeaders?: () => Record<string, string>;\n}\n\nconst CMS_KEY: InjectionKey<HttpClient> = Symbol('cms-client');\n\n/** Vue plugin that provides an HttpClient via app-level dependency injection. */\nexport const CmsPlugin = {\n install(app: App, config: VueCmsConfig) {\n const base = config.baseUrl ?? '';\n const client = createClient((url, init) => {\n const fullUrl = typeof url === 'string' ? `${base}${url}` : url;\n return fetch(fullUrl, {\n ...init,\n headers: { ...init?.headers, ...config.getHeaders?.() },\n });\n });\n app.provide(CMS_KEY, client);\n },\n};\n\nfunction useClient(): HttpClient {\n const client = inject(CMS_KEY);\n if (!client) throw new Error('CmsPlugin must be installed via app.use(CmsPlugin, config)');\n return client;\n}\n\n// Composables\n\nexport interface AsyncState<T> {\n data: Ref<T | null>;\n error: Ref<Error | null>;\n loading: Ref<boolean>;\n refetch: () => void;\n}\n\n/**\n * Reactive query that fires immediately on mount and exposes loading/data/error state.\n * Re-fetch by calling the returned `refetch` function.\n */\nexport function useQuery<T>(fetcher: (client: HttpClient) => Promise<T>): AsyncState<T> {\n const client = useClient();\n const data = ref<T | null>(null) as Ref<T | null>;\n const error = ref<Error | null>(null);\n const loading = ref(true);\n\n async function run() {\n loading.value = true;\n try {\n data.value = await fetcher(client);\n error.value = null;\n } catch (e) {\n error.value = e as Error;\n } finally {\n loading.value = false;\n }\n }\n\n run();\n\n return { data, error, loading, refetch: run };\n}\n\n/**\n * Returns a mutate function and a reactive state object tracking the latest invocation.\n * The mutate function throws on failure so callers can catch and handle errors inline.\n */\nexport function useMutation<T, V>(\n mutator: (client: HttpClient, vars: V) => Promise<T>,\n): [(vars: V) => Promise<T>, { data: Ref<T | null>; error: Ref<Error | null>; loading: Ref<boolean> }] {\n const client = useClient();\n const data = ref<T | null>(null) as Ref<T | null>;\n const error = ref<Error | null>(null);\n const loading = ref(false);\n\n async function run(vars: V): Promise<T> {\n loading.value = true;\n error.value = null;\n try {\n const result = await mutator(client, vars);\n data.value = result;\n return result;\n } catch (e) {\n error.value = e as Error;\n throw e;\n } finally {\n loading.value = false;\n }\n }\n\n return [run, { data, error, loading }];\n}\n"],"mappings":";AAAA,SAAS,oBAAqC;AAC9C,SAAS,KAAK,cAAqD;AASnE,IAAM,UAAoC,uBAAO,YAAY;AAGtD,IAAM,YAAY;AAAA,EACvB,QAAQ,KAAU,QAAsB;AACtC,UAAM,OAAO,OAAO,WAAW;AAC/B,UAAM,SAAS,aAAa,CAAC,KAAK,SAAS;AACzC,YAAM,UAAU,OAAO,QAAQ,WAAW,GAAG,IAAI,GAAG,GAAG,KAAK;AAC5D,aAAO,MAAM,SAAS;AAAA,QACpB,GAAG;AAAA,QACH,SAAS,EAAE,GAAG,MAAM,SAAS,GAAG,OAAO,aAAa,EAAE;AAAA,MACxD,CAAC;AAAA,IACH,CAAC;AACD,QAAI,QAAQ,SAAS,MAAM;AAAA,EAC7B;AACF;AAEA,SAAS,YAAwB;AAC/B,QAAM,SAAS,OAAO,OAAO;AAC7B,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,4DAA4D;AACzF,SAAO;AACT;AAeO,SAAS,SAAY,SAA4D;AACtF,QAAM,SAAS,UAAU;AACzB,QAAM,OAAO,IAAc,IAAI;AAC/B,QAAM,QAAQ,IAAkB,IAAI;AACpC,QAAM,UAAU,IAAI,IAAI;AAExB,iBAAe,MAAM;AACnB,YAAQ,QAAQ;AAChB,QAAI;AACF,WAAK,QAAQ,MAAM,QAAQ,MAAM;AACjC,YAAM,QAAQ;AAAA,IAChB,SAAS,GAAG;AACV,YAAM,QAAQ;AAAA,IAChB,UAAE;AACA,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,MAAI;AAEJ,SAAO,EAAE,MAAM,OAAO,SAAS,SAAS,IAAI;AAC9C;AAMO,SAAS,YACd,SACqG;AACrG,QAAM,SAAS,UAAU;AACzB,QAAM,OAAO,IAAc,IAAI;AAC/B,QAAM,QAAQ,IAAkB,IAAI;AACpC,QAAM,UAAU,IAAI,KAAK;AAEzB,iBAAe,IAAI,MAAqB;AACtC,YAAQ,QAAQ;AAChB,UAAM,QAAQ;AACd,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,QAAQ,IAAI;AACzC,WAAK,QAAQ;AACb,aAAO;AAAA,IACT,SAAS,GAAG;AACV,YAAM,QAAQ;AACd,YAAM;AAAA,IACR,UAAE;AACA,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,SAAO,CAAC,KAAK,EAAE,MAAM,OAAO,QAAQ,CAAC;AACvC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createClient, type HttpClient } from \"@lyeve-labs/client\";\nimport { ref, inject, type InjectionKey, type Ref, type App } from \"vue\";\n\n// Plugin\n\nexport interface VueCmsConfig {\n baseUrl?: string;\n getHeaders?: () => Record<string, string>;\n}\n\nconst CMS_KEY: InjectionKey<HttpClient> = Symbol(\"cms-client\");\n\n/** Vue plugin that provides an HttpClient via app-level dependency injection. */\nexport const CmsPlugin = {\n install(app: App, config: VueCmsConfig) {\n const base = config.baseUrl ?? \"\";\n const client = createClient((url, init) => {\n const fullUrl = typeof url === \"string\" ? `${base}${url}` : url;\n return fetch(fullUrl, {\n ...init,\n headers: { ...init?.headers, ...config.getHeaders?.() },\n });\n });\n app.provide(CMS_KEY, client);\n },\n};\n\nfunction useClient(): HttpClient {\n const client = inject(CMS_KEY);\n if (!client)\n throw new Error(\n \"CmsPlugin must be installed via app.use(CmsPlugin, config)\",\n );\n return client;\n}\n\n// Composables\n\nexport interface AsyncState<T> {\n data: Ref<T | null>;\n error: Ref<Error | null>;\n loading: Ref<boolean>;\n refetch: () => void;\n}\n\n/**\n * Reactive query that fires immediately on mount and exposes loading/data/error state.\n * Re-fetch by calling the returned `refetch` function.\n */\nexport function useQuery<T>(\n fetcher: (client: HttpClient) => Promise<T>,\n): AsyncState<T> {\n const client = useClient();\n const data = ref<T | null>(null) as Ref<T | null>;\n const error = ref<Error | null>(null);\n const loading = ref(true);\n\n async function run() {\n loading.value = true;\n try {\n data.value = await fetcher(client);\n error.value = null;\n } catch (e) {\n error.value = e as Error;\n } finally {\n loading.value = false;\n }\n }\n\n run();\n\n return { data, error, loading, refetch: run };\n}\n\n/**\n * Returns a mutate function and a reactive state object tracking the latest invocation.\n * The mutate function throws on failure so callers can catch and handle errors inline.\n */\nexport function useMutation<T, V>(\n mutator: (client: HttpClient, vars: V) => Promise<T>,\n): [\n (vars: V) => Promise<T>,\n { data: Ref<T | null>; error: Ref<Error | null>; loading: Ref<boolean> },\n] {\n const client = useClient();\n const data = ref<T | null>(null) as Ref<T | null>;\n const error = ref<Error | null>(null);\n const loading = ref(false);\n\n async function run(vars: V): Promise<T> {\n loading.value = true;\n error.value = null;\n try {\n const result = await mutator(client, vars);\n data.value = result;\n return result;\n } catch (e) {\n error.value = e as Error;\n throw e;\n } finally {\n loading.value = false;\n }\n }\n\n return [run, { data, error, loading }];\n}\n"],"mappings":";AAAA,SAAS,oBAAqC;AAC9C,SAAS,KAAK,cAAqD;AASnE,IAAM,UAAoC,uBAAO,YAAY;AAGtD,IAAM,YAAY;AAAA,EACvB,QAAQ,KAAU,QAAsB;AACtC,UAAM,OAAO,OAAO,WAAW;AAC/B,UAAM,SAAS,aAAa,CAAC,KAAK,SAAS;AACzC,YAAM,UAAU,OAAO,QAAQ,WAAW,GAAG,IAAI,GAAG,GAAG,KAAK;AAC5D,aAAO,MAAM,SAAS;AAAA,QACpB,GAAG;AAAA,QACH,SAAS,EAAE,GAAG,MAAM,SAAS,GAAG,OAAO,aAAa,EAAE;AAAA,MACxD,CAAC;AAAA,IACH,CAAC;AACD,QAAI,QAAQ,SAAS,MAAM;AAAA,EAC7B;AACF;AAEA,SAAS,YAAwB;AAC/B,QAAM,SAAS,OAAO,OAAO;AAC7B,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,SAAO;AACT;AAeO,SAAS,SACd,SACe;AACf,QAAM,SAAS,UAAU;AACzB,QAAM,OAAO,IAAc,IAAI;AAC/B,QAAM,QAAQ,IAAkB,IAAI;AACpC,QAAM,UAAU,IAAI,IAAI;AAExB,iBAAe,MAAM;AACnB,YAAQ,QAAQ;AAChB,QAAI;AACF,WAAK,QAAQ,MAAM,QAAQ,MAAM;AACjC,YAAM,QAAQ;AAAA,IAChB,SAAS,GAAG;AACV,YAAM,QAAQ;AAAA,IAChB,UAAE;AACA,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,MAAI;AAEJ,SAAO,EAAE,MAAM,OAAO,SAAS,SAAS,IAAI;AAC9C;AAMO,SAAS,YACd,SAIA;AACA,QAAM,SAAS,UAAU;AACzB,QAAM,OAAO,IAAc,IAAI;AAC/B,QAAM,QAAQ,IAAkB,IAAI;AACpC,QAAM,UAAU,IAAI,KAAK;AAEzB,iBAAe,IAAI,MAAqB;AACtC,YAAQ,QAAQ;AAChB,UAAM,QAAQ;AACd,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,QAAQ,IAAI;AACzC,WAAK,QAAQ;AACb,aAAO;AAAA,IACT,SAAS,GAAG;AACV,YAAM,QAAQ;AACd,YAAM;AAAA,IACR,UAAE;AACA,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,SAAO,CAAC,KAAK,EAAE,MAAM,OAAO,QAAQ,CAAC;AACvC;","names":[]}
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@lyeve-labs/client-vue",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Vue 3 composables for the LyEve Core client - useQuery, useMutation, and the CmsPlugin provider",
5
5
  "license": "MIT",
6
- "author": "LyEve Labs <hello@lyeve.com>",
6
+ "author": "LyEve <info@lyeve.com>",
7
7
  "type": "module",
8
+ "packageManager": "pnpm@9.15.0",
8
9
  "engines": {
9
10
  "node": ">=20"
10
11
  },
@@ -14,9 +15,14 @@
14
15
  "sideEffects": false,
15
16
  "exports": {
16
17
  ".": {
17
- "types": "./dist/index.d.ts",
18
- "import": "./dist/index.js",
19
- "require": "./dist/index.cjs"
18
+ "import": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "require": {
23
+ "types": "./dist/index.d.cts",
24
+ "default": "./dist/index.cjs"
25
+ }
20
26
  },
21
27
  "./package.json": "./package.json"
22
28
  },
@@ -28,12 +34,21 @@
28
34
  "publishConfig": {
29
35
  "access": "public"
30
36
  },
37
+ "scripts": {
38
+ "dev": "tsup --watch",
39
+ "build": "tsup && publint && node scripts/check-dist.mjs",
40
+ "check": "tsc --noEmit",
41
+ "test": "vitest run",
42
+ "test:watch": "vitest",
43
+ "format": "prettier --write .",
44
+ "format:check": "prettier --check ."
45
+ },
31
46
  "peerDependencies": {
32
- "@lyeve-labs/client-vue": ">=0.1.0",
47
+ "@lyeve-labs/client": ">=0.1.0",
33
48
  "vue": ">=3.0.0"
34
49
  },
35
50
  "devDependencies": {
36
- "@lyeve-labs/client-vue": "^0.1.0",
51
+ "@lyeve-labs/client": "^0.2.0",
37
52
  "jsdom": "^29.1.1",
38
53
  "prettier": "^3.4.0",
39
54
  "publint": "^0.3.0",
@@ -41,14 +56,5 @@
41
56
  "typescript": "^5.7.0",
42
57
  "vitest": "^2.1.0",
43
58
  "vue": "^3.5.0"
44
- },
45
- "scripts": {
46
- "dev": "tsup --watch",
47
- "build": "tsup && publint",
48
- "check": "tsc --noEmit",
49
- "test": "vitest run",
50
- "test:watch": "vitest",
51
- "format": "prettier --write .",
52
- "format:check": "prettier --check ."
53
59
  }
54
- }
60
+ }