@brickflow/http 0.0.15 → 0.0.16

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/dist/nuxt.d.ts CHANGED
@@ -1,12 +1,16 @@
1
- import type { HttpClient, HttpError, HttpErrorGuard, HttpKey, HttpParam, HttpResponse, HttpResponseData, HttpSuccessData } from './http';
1
+ import type { HttpClient, HttpErrorGuard, HttpKey, HttpParam, HttpResponseData } from './http';
2
2
  export interface CreateUseHttpDependencies {
3
3
  channelName?: string;
4
- getCache?: () => null | UseHttpCache;
4
+ getCache: () => null | UseHttpCache;
5
5
  getHttpClient: () => HttpClient;
6
- isError?: HttpErrorGuard<unknown, HttpError>;
7
6
  isDev?: () => boolean;
7
+ isError?: HttpErrorGuard<unknown>;
8
8
  ttl?: number;
9
9
  }
10
+ export type HttpError = HttpErrorMap[keyof HttpErrorMap];
11
+ export interface HttpErrorMap {
12
+ }
13
+ export type HttpSuccessData<TKey extends HttpKey = HttpKey> = Exclude<HttpResponseData<TKey>, HttpError>;
10
14
  export interface UseHttpCache {
11
15
  deleteKeysWithPart: (part: string) => Promise<void>;
12
16
  get: <T>(key: string) => Promise<null | UseHttpCacheEntry<T>>;
@@ -16,57 +20,36 @@ export interface UseHttpCacheEntry<T> {
16
20
  hash: string;
17
21
  value: T;
18
22
  }
19
- type UseHttpOptionsBase<T extends HttpKey, P extends HttpParam> = {
20
- effect?: (data: HttpResponseData<T>, config: {
21
- cached: boolean;
22
- params: P;
23
- }) => void;
24
- ignore?: (response: HttpResponse<HttpError>) => boolean;
23
+ export interface UseHttpFn {
24
+ <T extends HttpKey, P extends HttpParam>(options: UseHttpOptions<T, P>): Promise<UseHttpResult<T, P>>;
25
+ }
26
+ export interface UseHttpOptions<T extends HttpKey, P extends HttpParam> {
27
+ effect?: UseHttpEffect<T, P>;
25
28
  initParams?: P;
29
+ isError?: (payload: HttpResponseData<T>) => boolean;
26
30
  lazy?: true;
27
- mapParams?: <R extends P>(params?: R) => R;
31
+ mapParams?: (params?: P) => P;
28
32
  server?: boolean;
29
33
  url: T;
30
- };
31
- export type UseHttpOptions<T extends HttpKey, P extends HttpParam> = UseHttpOptionsBase<T, P> & {
32
- isError?: (payload: HttpResponseData<T>) => boolean;
33
- };
34
- export type CreateGetOptions<T extends HttpKey, P extends HttpParam> = Omit<UseHttpOptions<T, P>, 'url'>;
35
- export interface CreateGetResult<T extends HttpKey, P extends HttpParam> {
36
- data: HttpSuccessData<T> | null;
37
- error: Extract<HttpResponseData<T>, HttpError> | null;
38
- fetch: (params?: P, opt?: {
39
- signal: AbortSignal;
40
- }) => Promise<void>;
41
- hasFirstData: boolean;
42
- hasFreshData: boolean;
43
- pending: boolean;
44
- pendingCache: boolean;
45
- }
46
- export interface CreateGetPayload<T extends HttpKey, P extends HttpParam> {
47
- effect?: (data: HttpResponseData<T>, config: {
48
- cached: boolean;
49
- params: P;
50
- }) => undefined;
51
- ignore?: (response: HttpResponse<HttpError>) => boolean;
52
- isError?: (payload: HttpResponseData<T>) => boolean;
53
- mapParams?: <R extends P>(params?: R) => R;
54
34
  }
55
35
  export interface UseHttpResult<T extends HttpKey, P extends HttpParam> {
56
36
  data: HttpSuccessData<T> | null;
57
- error: Extract<HttpResponseData<T>, HttpError> | null;
58
- fetch: (params?: P, opt?: {
59
- signal: AbortSignal;
60
- }) => Promise<void>;
37
+ error: null | UseHttpError<T>;
38
+ fetch: UseHttpFetch<P>;
61
39
  hasFirstData: boolean;
62
40
  hasFreshData: boolean;
63
41
  pending: boolean;
64
42
  pendingCache: boolean;
65
43
  }
66
- export interface UseHttpFn {
67
- <T extends HttpKey, P extends HttpParam>(options: UseHttpOptions<T, P>): Promise<UseHttpResult<T, P>>;
68
- }
69
- export declare function createGet(useHttp: UseHttpFn): <P extends HttpParam>() => <T extends HttpKey>(url: T, payload?: CreateGetPayload<T, P>) => (options?: CreateGetOptions<T, P>) => Promise<CreateGetResult<T, P>>;
44
+ type UseHttpEffect<T extends HttpKey, P extends HttpParam> = (data: HttpResponseData<T>, config: UseHttpEffectConfig<P>) => void;
45
+ type UseHttpEffectConfig<P extends HttpParam> = {
46
+ cached: boolean;
47
+ params: P;
48
+ };
49
+ type UseHttpError<T extends HttpKey> = Extract<HttpResponseData<T>, HttpError>;
50
+ type UseHttpFetch<P extends HttpParam> = (params?: P, opt?: {
51
+ signal: AbortSignal;
52
+ }) => Promise<void>;
70
53
  export declare function createUseHttp(dependencies: CreateUseHttpDependencies): UseHttpFn;
71
54
  export {};
72
55
  //# sourceMappingURL=nuxt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nuxt.d.ts","sourceRoot":"","sources":["../src/nuxt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nuxt.d.ts","sourceRoot":"","sources":["../src/nuxt.ts"],"names":[],"mappings":"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"}
package/dist/nuxt.mjs CHANGED
@@ -1,222 +1,2 @@
1
- import { r as hashData, t as createURL } from "./utils-DMSINHi5.js";
2
- import { useLazyAsyncData, useState } from "#app";
3
- import { onScopeDispose, shallowReactive, shallowRef } from "vue";
4
- //#region src/nuxt.ts
5
- const DAY = 1e3 * 60 * 60 * 24;
6
- const DEFAULT_CHANNEL_NAME = "http-tab-sync";
7
- const DEFAULT_TTL = DAY * 7;
8
- function createGet(useHttp) {
9
- return function withParams() {
10
- return function withUrl(url, payload) {
11
- return async function request(options = {}) {
12
- return await useHttp({
13
- ignore: payload?.ignore,
14
- isError: options.isError ?? payload?.isError,
15
- ...options,
16
- effect: (...args) => {
17
- const [data, config] = args;
18
- payload?.effect?.(data, config);
19
- options?.effect?.(data, config);
20
- },
21
- mapParams: payload?.mapParams,
22
- url
23
- });
24
- };
25
- };
26
- };
27
- }
28
- function createUseHttp(dependencies) {
29
- let channel;
30
- const useHttp = async (options) => {
31
- const mapParams = (params) => {
32
- if (options.mapParams) return options.mapParams(params ?? {});
33
- return params ?? {};
34
- };
35
- const effect = options.effect;
36
- const isError = createIsErrorGuard(options.isError, dependencies.isError);
37
- const buildUrl = createURL;
38
- const initFullUrl = buildUrl(options.url, mapParams(options.initParams));
39
- const httpClient = dependencies.getHttpClient();
40
- const cache = import.meta.client ? dependencies.getCache?.() ?? null : null;
41
- let hasDataFromServer = false;
42
- const result = shallowReactive({
43
- data: null,
44
- error: null,
45
- fetch: async (_params, _opt) => await void 0,
46
- hasFirstData: false,
47
- hasFreshData: false,
48
- pending: true,
49
- pendingCache: true
50
- });
51
- const setError = (value) => {
52
- result.error = value;
53
- };
54
- const setData = (value) => {
55
- result.data = value;
56
- };
57
- const syncResult = (payload) => {
58
- if (payload == null) {
59
- setData(null);
60
- setError(null);
61
- return;
62
- }
63
- if (isError(payload)) {
64
- setData(null);
65
- setError(payload);
66
- return;
67
- }
68
- setData(payload);
69
- setError(null);
70
- };
71
- const controller = new AbortController();
72
- const serverData = useState(`http-${initFullUrl}`, () => null);
73
- if (options.server && import.meta.server) {
74
- const paramsReactive = shallowRef(mapParams(options.initParams));
75
- const ssr = await useLazyAsyncData(initFullUrl, async () => {
76
- return await httpClient.get(options.url, { params: paramsReactive.value });
77
- });
78
- result.fetch = async (params) => {
79
- paramsReactive.value = mapParams(params);
80
- await ssr.refresh();
81
- };
82
- serverData.value = ssr.data.value?.data ?? null;
83
- const serverPayload = serverData.value;
84
- syncResult(serverPayload);
85
- result.pending = false;
86
- result.pendingCache = false;
87
- result.hasFirstData = true;
88
- result.hasFreshData = true;
89
- if (serverData.value) effect?.(serverData.value, {
90
- cached: false,
91
- params: mapParams(options.initParams)
92
- });
93
- if (result.data) hasDataFromServer = true;
94
- }
95
- if (import.meta.client) {
96
- channel = getChannel(dependencies.channelName ?? DEFAULT_CHANNEL_NAME, channel);
97
- const fullUrlHistory = {};
98
- function onMessage(event) {
99
- if (event.data.fullUrl && fullUrlHistory[event.data.fullUrl]) {
100
- const eventPayload = event.data.data;
101
- if (eventPayload) effect?.(eventPayload, {
102
- cached: false,
103
- params: event.data.params
104
- });
105
- syncResult(eventPayload);
106
- result.hasFirstData = true;
107
- result.hasFreshData = true;
108
- }
109
- }
110
- channel?.addEventListener("message", onMessage);
111
- if (serverData.value) {
112
- const clientServerPayload = serverData.value;
113
- syncResult(clientServerPayload);
114
- result.pending = false;
115
- result.pendingCache = false;
116
- result.hasFirstData = true;
117
- result.hasFreshData = true;
118
- }
119
- const raceCondition = {};
120
- const ttl = dependencies.ttl ?? DEFAULT_TTL;
121
- const runFetch = async (params, fetchOpt) => {
122
- const mappedParams = mapParams(params);
123
- const fullUrl = buildUrl(options.url, mappedParams);
124
- const fetchId = Date.now() + getRandom(0, 300);
125
- if (raceCondition[fullUrl]) {
126
- console.info("Race Condition affect", fullUrl);
127
- return;
128
- }
129
- raceCondition[fullUrl] = fetchId;
130
- try {
131
- result.pending = true;
132
- result.pendingCache = true;
133
- const cachedFetch = cache && !dependencies.isDev?.() ? await cache.get(fullUrl) : null;
134
- if (cachedFetch) {
135
- const cachedPayload = cachedFetch.value;
136
- effect?.(cachedPayload, {
137
- cached: true,
138
- params: mappedParams
139
- });
140
- syncResult(cachedPayload);
141
- result.hasFirstData = true;
142
- result.pendingCache = false;
143
- }
144
- if (controller.signal.aborted || fetchOpt?.signal?.aborted) throw new DOMException("Aborted", "AbortError");
145
- const signalHttp = fetchOpt?.signal ? [controller.signal, fetchOpt.signal] : controller.signal;
146
- const response = await httpClient.get(options.url, {
147
- ignore: options.ignore,
148
- params: mappedParams,
149
- signal: signalHttp
150
- });
151
- const responsePayload = response.data;
152
- effect?.(responsePayload, {
153
- cached: false,
154
- params: mappedParams
155
- });
156
- if (isError(responsePayload)) syncResult(responsePayload);
157
- else {
158
- syncResult(responsePayload);
159
- const successData = responsePayload;
160
- fullUrlHistory[fullUrl] = true;
161
- channel?.postMessage({
162
- data: normalizeBroadcastValue(successData),
163
- fullUrl,
164
- params: normalizeBroadcastValue(mappedParams),
165
- type: "STATE_UPDATE"
166
- });
167
- if (cache) {
168
- if (cachedFetch) {
169
- if (await hashData(responsePayload) !== cachedFetch.hash) await cache.deleteKeysWithPart(options.url);
170
- }
171
- if (response.status === 200) await cache.set(fullUrl, successData, ttl);
172
- }
173
- }
174
- result.hasFirstData = true;
175
- result.hasFreshData = true;
176
- } catch (error) {
177
- console.error(error);
178
- } finally {
179
- if (raceCondition[fullUrl] === fetchId) delete raceCondition[fullUrl];
180
- result.pending = false;
181
- result.pendingCache = false;
182
- }
183
- };
184
- result.fetch = runFetch;
185
- if (!hasDataFromServer && options.lazy !== true) runFetch(options.initParams);
186
- onScopeDispose(() => {
187
- channel?.removeEventListener("message", onMessage);
188
- controller.abort(`Http Abort -> onScopeDispose ${options.url}`);
189
- if (serverData.value) serverData.value = null;
190
- });
191
- }
192
- return result;
193
- };
194
- return useHttp;
195
- }
196
- function getChannel(name, currentChannel) {
197
- if (currentChannel) return currentChannel;
198
- if (import.meta.server || typeof BroadcastChannel !== "function") return null;
199
- return new BroadcastChannel(name);
200
- }
201
- function getRandom(min, max) {
202
- return Math.floor(Math.random() * (max - min + 1)) + min;
203
- }
204
- function hasErrorStatus(payload) {
205
- return Boolean(payload && typeof payload === "object" && "status" in payload && payload.status === "error");
206
- }
207
- function createIsErrorGuard(localGuard, globalGuard) {
208
- if (localGuard) return localGuard;
209
- if (globalGuard) return globalGuard;
210
- return (payload) => hasErrorStatus(payload);
211
- }
212
- function normalizeBroadcastValue(payload) {
213
- try {
214
- return structuredClone(payload);
215
- } catch {
216
- return JSON.parse(JSON.stringify(payload));
217
- }
218
- }
219
- //#endregion
220
- export { createGet, createUseHttp };
221
-
222
- //# sourceMappingURL=nuxt.mjs.map
1
+ import { t as createUseHttp } from "./nuxt-DAmJOX58.js";
2
+ export { createUseHttp };
package/package.json CHANGED
@@ -1,23 +1,24 @@
1
1
  {
2
2
  "name": "@brickflow/http",
3
- "version": "0.0.15",
3
+ "version": "0.0.16",
4
4
  "description": "Minimal HTTP transport and Nuxt state helpers for brickflow.",
5
5
  "sideEffects": false,
6
6
  "files": [
7
- "dist"
7
+ "dist",
8
+ "src"
8
9
  ],
9
10
  "main": "./dist/index.mjs",
10
11
  "module": "./dist/index.mjs",
11
- "types": "./dist/index.d.ts",
12
+ "types": "./src/index.ts",
12
13
  "exports": {
13
14
  ".": {
14
- "types": "./dist/index.d.ts",
15
+ "types": "./src/index.ts",
15
16
  "development": "./src/index.ts",
16
17
  "import": "./dist/index.mjs",
17
18
  "default": "./dist/index.mjs"
18
19
  },
19
20
  "./nuxt": {
20
- "types": "./dist/nuxt.d.ts",
21
+ "types": "./src/nuxt.ts",
21
22
  "development": "./src/nuxt.ts",
22
23
  "import": "./dist/nuxt.mjs",
23
24
  "default": "./dist/nuxt.mjs"
@@ -26,7 +27,7 @@
26
27
  "scripts": {
27
28
  "build": "rolldown -c build.config.ts && tsc --project tsconfig.build.json",
28
29
  "typecheck": "NODE_OPTIONS='--conditions=development' tsc --project tsconfig.json --noEmit",
29
- "lint": "pnpm run --if-present typecheck",
30
+ "lint": "pnpm typecheck && eslint -v && NODE_ENV=deploy eslint --cache .",
30
31
  "lint:fix": "pnpm exec eslint . --fix",
31
32
  "format": "pnpm exec prettier . --ignore-path ../../.prettierignore --write",
32
33
  "format:check": "pnpm exec prettier . --ignore-path ../../.prettierignore --check"
@@ -35,13 +36,13 @@
35
36
  "access": "public"
36
37
  },
37
38
  "dependencies": {
38
- "@nuxt/kit": "3.21.7"
39
+ "@nuxt/kit": "4.4.7"
39
40
  },
40
41
  "devDependencies": {
41
42
  "@brickflow/lint": "workspace:*",
42
43
  "@brickflow/prettier": "workspace:*",
43
- "rolldown": "1.0.3",
44
- "vue-tsc": "3.3.2"
44
+ "rolldown": "1.1.0",
45
+ "vue-tsc": "3.3.4"
45
46
  },
46
47
  "peerDependencies": {
47
48
  "nuxt": ">=3",
package/src/app.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ declare module '#app' {
2
+ export * from 'nuxt/app'
3
+ }
4
+
5
+ interface ImportMeta {
6
+ browser: boolean
7
+ client: boolean
8
+ dev: boolean
9
+ server: boolean
10
+ test: boolean
11
+ }
@@ -0,0 +1,43 @@
1
+ import type { HttpClient, HttpKey, HttpParam } from './http'
2
+ import type { UseHttpFn, UseHttpOptions, UseHttpResult } from './nuxt'
3
+
4
+ export type CreateGetOptions<T extends HttpKey, P extends HttpParam> = Omit<UseHttpOptions<T, P>, 'url'>
5
+
6
+ export type CreateGetPayload<T extends HttpKey, P extends HttpParam> = Pick<
7
+ UseHttpOptions<T, P>,
8
+ 'effect' | 'isError' | 'mapParams'
9
+ >
10
+
11
+ export type CreateGetResult<T extends HttpKey, P extends HttpParam> = UseHttpResult<T, P>
12
+
13
+ export function createUseCase<D>() {
14
+ return <T>(
15
+ callback: (payload: D & { httpClient: HttpClient }) => T,
16
+ ): ((payload: D & { httpClient: HttpClient }) => T) => callback
17
+ }
18
+
19
+ export function defineGet(useHttp: UseHttpFn) {
20
+ return function withParams<P extends HttpParam>() {
21
+ return function withUrl<T extends HttpKey>(
22
+ url: T,
23
+ payload?: CreateGetPayload<T, P>,
24
+ ): (options?: CreateGetOptions<T, P>) => Promise<CreateGetResult<T, P>> {
25
+ return async function request(options: CreateGetOptions<T, P> = {}): Promise<CreateGetResult<T, P>> {
26
+ const result = await useHttp({
27
+ ...options,
28
+ effect: (...args) => {
29
+ const [data, config] = args
30
+
31
+ payload?.effect?.(data, config)
32
+ options?.effect?.(data, config)
33
+ },
34
+ isError: options.isError ?? payload?.isError,
35
+ mapParams: options.mapParams ?? payload?.mapParams,
36
+ url,
37
+ })
38
+
39
+ return result
40
+ }
41
+ }
42
+ }
43
+ }