@wxn0brp/vql-client 0.2.4 → 0.2.6

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/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VQLUQ } from "./vql";
2
2
  export type VQLResult<T = any> = Promise<T>;
3
- export type VQLTransport = (query: VQLUQ) => VQLResult;
3
+ export type VQLTransport = (query: VQLUQ, fetchOptions?: FetchOptions) => VQLResult;
4
4
  export interface VQLHooks {
5
5
  onStart?: (query: VQLUQ, hookContext: any) => void;
6
6
  onEnd?: (query: VQLUQ, durationMs: number, result: any, hookContext: any) => void;
@@ -8,10 +8,19 @@ export interface VQLHooks {
8
8
  }
9
9
  export interface Config {
10
10
  transport?: VQLTransport;
11
+ fetchImplementation: typeof fetch;
11
12
  hooks?: VQLHooks;
12
13
  url?: string;
13
14
  body?: Record<string, any>;
15
+ headers?: Record<string, any>;
16
+ hookContext?: any;
17
+ }
18
+ export interface FetchOptions {
19
+ signal?: AbortSignal;
20
+ headers?: Record<string, any>;
21
+ body?: Record<string, any>;
14
22
  }
15
23
  export declare const VConfig: Config;
16
- export declare function fetchVQL<T = any>(query: VQLUQ<T>, vars?: any, hookContext?: any): Promise<T>;
17
- export declare function defTransport(query: VQLUQ): Promise<any>;
24
+ export declare function fetchVQL<T = any>(query: VQLUQ<T>, vars?: any, hookContext?: any, fetchOptions?: FetchOptions): Promise<T>;
25
+ export declare function defTransport(query: VQLUQ, fetchOptions?: FetchOptions): Promise<any>;
26
+ export declare const V: <T = any>(strings: TemplateStringsArray, ...values: any[]) => Promise<T>;
package/dist/index.js CHANGED
@@ -1,14 +1,15 @@
1
1
  ;
2
2
  export const VConfig = {
3
3
  transport: defTransport,
4
+ fetchImplementation: (input, init) => fetch(input, init),
4
5
  hooks: {},
5
6
  url: "/VQL"
6
7
  };
7
- export async function fetchVQL(query, vars = {}, hookContext = {}) {
8
+ export async function fetchVQL(query, vars = {}, hookContext = {}, fetchOptions = {}) {
8
9
  const { transport, hooks } = VConfig;
9
10
  const start = Date.now();
10
11
  try {
11
- hookContext = Object.assign({}, vars, hookContext);
12
+ hookContext = Object.assign({}, VConfig.hookContext, vars, hookContext);
12
13
  hooks.onStart?.(query, hookContext);
13
14
  if (typeof query === "string" && Object.keys(vars).length) {
14
15
  query = {
@@ -16,7 +17,7 @@ export async function fetchVQL(query, vars = {}, hookContext = {}) {
16
17
  var: vars
17
18
  };
18
19
  }
19
- const res = await transport(query);
20
+ const res = await transport(query, fetchOptions);
20
21
  const duration = Date.now() - start;
21
22
  hooks.onEnd?.(query, duration, res, hookContext);
22
23
  if (res?.err) {
@@ -33,22 +34,36 @@ export async function fetchVQL(query, vars = {}, hookContext = {}) {
33
34
  throw e;
34
35
  }
35
36
  }
36
- export async function defTransport(query) {
37
- const res = await fetch(VConfig.url, {
38
- method: "POST",
39
- headers: {
40
- "Content-Type": "application/json"
41
- },
42
- body: JSON.stringify({ query, ...(VConfig.body || {}) })
37
+ export async function defTransport(query, fetchOptions) {
38
+ const headers = Object.assign({
39
+ "Content-Type": "application/json"
40
+ }, VConfig.headers, fetchOptions.headers);
41
+ const body = Object.assign({}, VConfig.body, fetchOptions.body, {
42
+ query
43
43
  });
44
+ const queryConfig = {
45
+ method: "POST",
46
+ headers,
47
+ body: JSON.stringify(body)
48
+ };
49
+ if (fetchOptions.signal)
50
+ queryConfig.signal = fetchOptions.signal;
51
+ const res = await VConfig.fetchImplementation(VConfig.url, queryConfig);
44
52
  if (!res.ok)
45
53
  throw new Error(`VQL request failed: ${res.status}`);
46
54
  return await res.json();
47
55
  }
56
+ export const V = async (strings, ...values) => {
57
+ const query = strings
58
+ .map((str, i) => str.trim() + (values[i] !== undefined ? values[i] : ""))
59
+ .join(" ");
60
+ return fetchVQL(query);
61
+ };
48
62
  if (typeof window !== "undefined") {
49
63
  window.VQLClient = {
50
64
  fetchVQL,
51
65
  defTransport,
66
+ VQL: V,
52
67
  cfg: VConfig
53
68
  };
54
69
  }
package/dist/min.js CHANGED
@@ -1 +1 @@
1
- var VQLClient=(()=>{var s=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames,u=Object.getOwnPropertySymbols;var L=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable;var V=(n,r,t)=>r in n?s(n,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[r]=t,l=(n,r)=>{for(var t in r||(r={}))L.call(r,t)&&V(n,t,r[t]);if(u)for(var t of u(r))U.call(r,t)&&V(n,t,r[t]);return n};var b=(n,r)=>{for(var t in r)s(n,t,{get:r[t],enumerable:!0})},x=(n,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of E(r))!L.call(n,o)&&o!==t&&s(n,o,{get:()=>r[o],enumerable:!(i=m(r,o))||i.enumerable});return n};var j=n=>x(s({},"__esModule",{value:!0}),n);var O={};b(O,{VConfig:()=>a,defTransport:()=>Q,fetchVQL:()=>w});var a={transport:Q,hooks:{},url:"/VQL"};async function w(n,r={},t={}){var f,y,c,d;let{transport:i,hooks:o}=a,g=Date.now();try{t=Object.assign({},r,t),(f=o.onStart)==null||f.call(o,n,t),typeof n=="string"&&Object.keys(r).length&&(n={query:n,var:r});let e=await i(n),T=Date.now()-g;if((y=o.onEnd)==null||y.call(o,n,T,e,t),e!=null&&e.err){let p=new Error(e.err);throw(c=o.onError)==null||c.call(o,n,p,e,t),p}return e.result!==void 0?e.result:e}catch(e){throw(d=o.onError)==null||d.call(o,n,e,null,t),e}}async function Q(n){let r=await fetch(a.url,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l({query:n},a.body||{}))});if(!r.ok)throw new Error(`VQL request failed: ${r.status}`);return await r.json()}typeof window!="undefined"&&(window.VQLClient={fetchVQL:w,defTransport:Q,cfg:a});return j(O);})();
1
+ var VQLClient=(()=>{var c=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var T=(t,n)=>{for(var e in n)c(t,e,{get:n[e],enumerable:!0})},b=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of w(n))!h.call(t,o)&&o!==e&&c(t,o,{get:()=>n[o],enumerable:!(i=m(n,o))||i.enumerable});return t};var x=t=>b(c({},"__esModule",{value:!0}),t);var O={};T(O,{V:()=>g,VConfig:()=>s,defTransport:()=>d,fetchVQL:()=>y});var s={transport:d,fetchImplementation:(t,n)=>fetch(t,n),hooks:{},url:"/VQL"};async function y(t,n={},e={},i={}){var p,f,u,Q;let{transport:o,hooks:r}=s,V=Date.now();try{e=Object.assign({},s.hookContext,n,e),(p=r.onStart)==null||p.call(r,t,e),typeof t=="string"&&Object.keys(n).length&&(t={query:t,var:n});let a=await o(t,i),L=Date.now()-V;if((f=r.onEnd)==null||f.call(r,t,L,a,e),a!=null&&a.err){let l=new Error(a.err);throw(u=r.onError)==null||u.call(r,t,l,a,e),l}return a.result!==void 0?a.result:a}catch(a){throw(Q=r.onError)==null||Q.call(r,t,a,null,e),a}}async function d(t,n){let e=Object.assign({"Content-Type":"application/json"},s.headers,n.headers),i=Object.assign({},s.body,n.body,{query:t}),o={method:"POST",headers:e,body:JSON.stringify(i)};n.signal&&(o.signal=n.signal);let r=await s.fetchImplementation(s.url,o);if(!r.ok)throw new Error(`VQL request failed: ${r.status}`);return await r.json()}var g=async(t,...n)=>{let e=t.map((i,o)=>i.trim()+(n[o]!==void 0?n[o]:"")).join(" ");return y(e)};typeof window!="undefined"&&(window.VQLClient={fetchVQL:y,defTransport:d,VQL:g,cfg:s});return x(O);})();
package/dist/vql.d.ts CHANGED
@@ -98,6 +98,7 @@ declare class CollectionManager<D = Data> {
98
98
  remove<T = Data>(search: Search<T & Data>, context?: VContext): Promise<boolean>;
99
99
  removeOne<T = Data>(search: Search<T & Data>, context?: VContext): Promise<boolean>;
100
100
  updateOneOrAdd<T = Data>(search: Search<T & Data>, updater: Updater<T & Data>, { add_arg, context, id_gen }: UpdateOneOrAdd<T & Data>): Promise<boolean>;
101
+ toggleOne<T = Data>(search: Search<T & Data>, data?: Arg<T & Data>, context?: VContext): Promise<boolean>;
101
102
  }
102
103
  export interface ValtheraCompatible {
103
104
  c(collection: string): CollectionManager;
@@ -113,6 +114,7 @@ export interface ValtheraCompatible {
113
114
  removeOne<T = Data>(collection: string, search: Search<T>, context?: VContext): Promise<boolean>;
114
115
  removeCollection(collection: string): Promise<boolean>;
115
116
  updateOneOrAdd<T = Data>(collection: string, search: Search<T>, updater: Updater<T>, opts?: UpdateOneOrAdd<T>): Promise<boolean>;
117
+ toggleOne<T = Data>(collection: string, search: Search<T>, data?: Arg<T>, context?: VContext): Promise<boolean>;
116
118
  }
117
119
  export interface UpdateOneOrAdd<T> {
118
120
  add_arg?: Arg<T>;
@@ -185,6 +187,11 @@ export interface VQL_OP_UpdateOneOrAdd<T = any> {
185
187
  add_arg?: Arg<T>;
186
188
  id_gen?: boolean;
187
189
  }
190
+ export interface VQL_OP_ToggleOne<T = any> {
191
+ collection: string;
192
+ search: Search<T>;
193
+ data?: Arg<T>;
194
+ }
188
195
  export interface VQL_OP_CollectionOperation {
189
196
  collection: string;
190
197
  }
@@ -207,6 +214,8 @@ export type VQL_Query_CRUD_Data<T = any> = {
207
214
  removeOne: VQL_OP_Remove<T>;
208
215
  } | {
209
216
  updateOneOrAdd: VQL_OP_UpdateOneOrAdd<T>;
217
+ } | {
218
+ toggleOne: VQL_OP_ToggleOne<T>;
210
219
  } | {
211
220
  removeCollection: VQL_OP_CollectionOperation;
212
221
  } | {
@@ -216,6 +225,7 @@ export type VQL_Query_CRUD_Data<T = any> = {
216
225
  } | {
217
226
  getCollections: {};
218
227
  };
228
+ export type VQL_Query_CRUD_Keys = VQL_Query_CRUD_Data extends infer U ? U extends Record<string, unknown> ? keyof U : never : never;
219
229
  export interface VQL_Query_CRUD<T = any> {
220
230
  db: string;
221
231
  d: VQL_Query_CRUD_Data<T>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wxn0brp/vql-client",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "description": "VQL Client",