Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@micro-graphql/core

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@micro-graphql/core - npm Package Compare versions

Comparing version
0.0.6
to
0.1.0
+7
-2
lib/cache.d.ts

@@ -6,8 +6,13 @@ export interface IMicroGraphQLCacheResult<TValue> {

export interface IMicroGraphQLCache {
tryGet<TValue>(key: string): IMicroGraphQLCacheResult<TValue>;
trySet<TValue>(key: string, data?: TValue): boolean;
tryGet<TValue>(query: string, variables: {
[key: string]: unknown;
} | undefined): IMicroGraphQLCacheResult<TValue>;
trySet<TValue>(query: string, variables: {
[key: string]: unknown;
} | undefined, data?: TValue): boolean;
stringify(): string;
restore(data: string): void;
prepareQuery(query: string): string;
}
export declare function createCache(): IMicroGraphQLCache;
//# sourceMappingURL=cache.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB,CAAC,MAAM;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACpD,SAAS,IAAI,MAAM,CAAC;IACpB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,WAAW,IAAI,kBAAkB,CAyBhD"}
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB,CAAC,MAAM;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,SAAS,GAC/C,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,SAAS,EACjD,IAAI,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;IACX,SAAS,IAAI,MAAM,CAAC;IACpB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACpC;AAED,wBAAgB,WAAW,IAAI,kBAAkB,CAuChD"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hash_1 = require("./hash");
function createCache() {
let cache = {};
return {
tryGet: (key) => {
tryGet: (query, variables) => {
const key = hash_1.objectHash({ query, variables });
const success = key in cache;

@@ -14,3 +16,4 @@ const data = success ? cache[key] : undefined;

},
trySet: (key, data) => {
trySet: (query, variables, data) => {
const key = hash_1.objectHash({ query, variables });
cache[key] = data;

@@ -24,2 +27,5 @@ return false;

cache = JSON.parse(data);
},
prepareQuery(query) {
return query;
}

@@ -26,0 +32,0 @@ };

@@ -1,1 +0,1 @@

{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":";;AAYA,SAAgB,WAAW;IAC1B,IAAI,KAAK,GAA+B,EAAE,CAAC;IAE3C,OAAO;QACN,MAAM,EAAE,CAAS,GAAW,EAAoC,EAAE;YACjE,MAAM,OAAO,GAAG,GAAG,IAAI,KAAK,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE9C,OAAO;gBACN,IAAI,EAAE,IAAc;gBACpB,OAAO;aACP,CAAC;QACH,CAAC;QACD,MAAM,EAAE,CAAS,GAAW,EAAE,IAAa,EAAW,EAAE;YACvD,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAElB,OAAO,KAAK,CAAC;QACd,CAAC;QACD,SAAS;YACR,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,IAAY;YACnB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;KACD,CAAC;AACH,CAAC;AAzBD,kCAyBC"}
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":";;AAAA,iCAAoC;AAsBpC,SAAgB,WAAW;IAC1B,IAAI,KAAK,GAA+B,EAAE,CAAC;IAE3C,OAAO;QACN,MAAM,EAAE,CACP,KAAa,EACb,SAAiD,EACd,EAAE;YACrC,MAAM,GAAG,GAAG,iBAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAE7C,MAAM,OAAO,GAAG,GAAG,IAAI,KAAK,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE9C,OAAO;gBACN,IAAI,EAAE,IAAc;gBACpB,OAAO;aACP,CAAC;QACH,CAAC;QACD,MAAM,EAAE,CACP,KAAa,EACb,SAAiD,EACjD,IAAa,EACH,EAAE;YACZ,MAAM,GAAG,GAAG,iBAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAE7C,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAElB,OAAO,KAAK,CAAC;QACd,CAAC;QACD,SAAS;YACR,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,IAAY;YACnB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,YAAY,CAAC,KAAa;YACzB,OAAO,KAAK,CAAC;QACd,CAAC;KACD,CAAC;AACH,CAAC;AAvCD,kCAuCC"}
import { IMicroGraphQLCache } from './cache';
import { ObjectHasher } from './hash';
export interface IMicroGraphQLConfig {

@@ -8,3 +7,2 @@ cache: IMicroGraphQLCache;

fetch(input: RequestInfo, init?: RequestInit | undefined): Promise<Response>;
hash: ObjectHasher;
}

@@ -23,15 +21,26 @@ export interface IMicroGraphQLError {

}
export interface IMicroGraphQLQueryOptions<TQueryVariables> {
export interface IMicroGraphQLQueryOptions<TQueryVariables extends {
[key: string]: unknown;
}> {
skipCache?: boolean;
variables?: TQueryVariables;
}
export interface IMicroGraphQLSubscriptionOptions<TQueryVariables = unknown> extends IMicroGraphQLQueryOptions<TQueryVariables> {
export interface IMicroGraphQLSubscriptionOptions<TQueryVariables extends {
[key: string]: unknown;
}> extends IMicroGraphQLQueryOptions<TQueryVariables> {
query: string;
}
export interface IMicroGraphQLClient {
cache?: IMicroGraphQLCache;
hash: ObjectHasher;
cache: IMicroGraphQLCache;
ssr?: boolean;
query<TData, TQueryVariables>(query: string, options?: IMicroGraphQLQueryOptions<TQueryVariables>): Promise<IMicroGraphQLResult<TData>>;
subscribe: <TData, TQueryVariables>(options: IMicroGraphQLSubscriptionOptions<TQueryVariables>, subscription: (data: IMicroGraphQLResult<TData>) => void) => () => void;
query<TData extends {
[key: string]: any;
}, TQueryVariables extends {
[key: string]: any;
}>(query: string, options?: IMicroGraphQLQueryOptions<TQueryVariables>): Promise<IMicroGraphQLResult<TData>>;
subscribe: <TData extends {
[key: string]: any;
}, TQueryVariables extends {
[key: string]: any;
}>(options: IMicroGraphQLSubscriptionOptions<TQueryVariables>, subscription: (data: IMicroGraphQLResult<TData>) => void) => () => void;
resolveQueries(): Promise<void>;

@@ -42,3 +51,3 @@ }

export declare const queryKeyError = "error creating a unique key for the query";
export declare function createClient({ url, cache, ssr, fetch, hash }: IMicroGraphQLConfig): IMicroGraphQLClient;
export declare function createClient({ url, cache, ssr, fetch }: IMicroGraphQLConfig): IMicroGraphQLClient;
//# sourceMappingURL=client.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7E,IAAI,EAAE,YAAY,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB,CAAC,KAAK;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB,CAAC,eAAe;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,gCAAgC,CAAC,eAAe,GAAG,OAAO,CAC1E,SAAQ,yBAAyB,CAAC,eAAe,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IACnC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,KAAK,EAAE,eAAe,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,yBAAyB,CAAC,eAAe,CAAC,GAClD,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,eAAe,EACjC,OAAO,EAAE,gCAAgC,CAAC,eAAe,CAAC,EAC1D,YAAY,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,KAAK,IAAI,KACpD,MAAM,IAAI,CAAC;IAChB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,qBAAa,oBAAqB,SAAQ,KAAK;CAAG;AAElD,eAAO,MAAM,aAAa,8CAA8C,CAAC;AAEzE,wBAAgB,YAAY,CAAC,EAC5B,GAAG,EACH,KAAK,EACL,GAAG,EACH,KAAK,EACL,IAAI,EACJ,EAAE,mBAAmB,GAAG,mBAAmB,CAiH3C"}
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG7C,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB,CAAC,KAAK;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB,CAAC,eAAe,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE;IAC5F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,gCAAgC,CAChD,eAAe,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAElD,SAAQ,yBAAyB,CAAC,eAAe,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IAGd,KAAK,CAAC,KAAK,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,eAAe,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EACzF,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,yBAAyB,CAAC,eAAe,CAAC,GAClD,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IAGvC,SAAS,EAAE,CAAC,KAAK,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,eAAe,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAC/F,OAAO,EAAE,gCAAgC,CAAC,eAAe,CAAC,EAC1D,YAAY,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,KAAK,IAAI,KACpD,MAAM,IAAI,CAAC;IAChB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,qBAAa,oBAAqB,SAAQ,KAAK;CAAG;AAElD,eAAO,MAAM,aAAa,8CAA8C,CAAC;AAEzE,wBAAgB,YAAY,CAAC,EAC5B,GAAG,EACH,KAAK,EACL,GAAG,EACH,KAAK,EACL,EAAE,mBAAmB,GAAG,mBAAmB,CA8G3C"}
"use strict";
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable import/extensions */
Object.defineProperty(exports, "__esModule", { value: true });
const hash_1 = require("./hash");
class MicroGraphQLKeyError extends Error {

@@ -8,4 +10,3 @@ }

exports.queryKeyError = 'error creating a unique key for the query';
function createClient({ url, cache, ssr, fetch, hash }) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function createClient({ url, cache, ssr, fetch }) {
const subscriptions = new Map();

@@ -15,3 +16,2 @@ const queries = {};

cache,
hash,
ssr,

@@ -21,8 +21,6 @@ resolveQueries: async () => {

},
// eslint-disable-next-line max-len
subscribe: (options, subscription) => {
const key = hash({ query: options.query, variables: options.variables });
if (!key) {
throw new MicroGraphQLKeyError(exports.queryKeyError);
}
const cached = cache.tryGet(key);
const query = cache.prepareQuery(options.query);
const cached = cache.tryGet(query, options.variables);
if (cached.success) {

@@ -34,2 +32,3 @@ subscription({

}
const key = hash_1.objectHash({ query, variables: options.variables });
const subs = subscriptions.get(key) || [];

@@ -43,7 +42,4 @@ subs.push(subscription);

},
query: async (query, options) => {
const key = hash({ query, variables: options && options.variables });
if (!key) {
throw new MicroGraphQLKeyError(exports.queryKeyError);
}
// eslint-disable-next-line max-len
query: async (inputQuery, options) => {
const { skipCache } = {

@@ -53,9 +49,13 @@ skipCache: false,

};
const cachedResult = !skipCache && cache.tryGet(key);
if (!skipCache && cachedResult && cachedResult.success) {
return {
loading: false,
data: cachedResult.data
};
const query = cache.prepareQuery(inputQuery);
if (!skipCache) {
const cachedResult = !skipCache && cache.tryGet(query, options && options.variables);
if (cachedResult.success) {
return {
loading: false,
data: cachedResult.data
};
}
}
const key = hash_1.objectHash({ query, variables: options && options.variables });
const subs = subscriptions.get(key);

@@ -80,3 +80,3 @@ if (subs) {

if (json.data) {
cache.trySet(key, json.data);
cache.trySet(query, options && options.variables, json.data);
}

@@ -83,0 +83,0 @@ return {

@@ -1,1 +0,1 @@

{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";AAAA,sCAAsC;;AAkDtC,MAAa,oBAAqB,SAAQ,KAAK;CAAG;AAAlD,oDAAkD;AAErC,QAAA,aAAa,GAAG,2CAA2C,CAAC;AAEzE,SAAgB,YAAY,CAAC,EAC5B,GAAG,EACH,KAAK,EACL,GAAG,EACH,KAAK,EACL,IAAI,EACiB;IACrB,8DAA8D;IAC9D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAgE,CAAC;IAE9F,MAAM,OAAO,GAA6D,EAAE,CAAC;IAE7E,OAAO;QACN,KAAK;QACL,IAAI;QACJ,GAAG;QACH,cAAc,EAAE,KAAK,IAAmB,EAAE;YACzC,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,SAAS,EAAE,CACV,OAA0D,EAC1D,YAAwD,EACzC,EAAE;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAEzE,IAAI,CAAC,GAAG,EAAE;gBACT,MAAM,IAAI,oBAAoB,CAAC,qBAAa,CAAC,CAAC;aAC9C;YAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAQ,GAAG,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,OAAO,EAAE;gBACnB,YAAY,CAAC;oBACZ,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,MAAM,CAAC,IAAI;iBACjB,CAAC,CAAC;aACH;YAED,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACxB,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAE7B,OAAO,GAAS,EAAE;gBACjB,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;gBAC7C,aAAa,CAAC,GAAG,CAChB,GAAG,EACH,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAC5C,CAAC;YACH,CAAC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,KAAK,EACX,KAAa,EACb,OAAoD,EACd,EAAE;YACxC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAErE,IAAI,CAAC,GAAG,EAAE;gBACT,MAAM,IAAI,oBAAoB,CAAC,qBAAa,CAAC,CAAC;aAC9C;YAED,MAAM,EAAE,SAAS,EAAE,GAA+C;gBACjE,SAAS,EAAE,KAAK;gBAChB,GAAG,OAAO;aACV,CAAC;YAEF,MAAM,YAAY,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAQ,GAAG,CAAC,CAAC;YAE5D,IAAI,CAAC,SAAS,IAAI,YAAY,IAAI,YAAY,CAAC,OAAO,EAAE;gBACvD,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,YAAY,CAAC,IAAI;iBACvB,CAAC;aACF;YAED,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEpC,IAAI,IAAI,EAAE;gBACT,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;oBACvB,OAAO,EAAE,IAAI;iBACb,CAAC,CAAC,CAAC;aACJ;YAED,MAAM,aAAa,GAAG,CAAC,KAAK,IAAyC,EAAE;gBACtE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBACjC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACR,cAAc,EAAE,kBAAkB;qBAClC;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACpB,KAAK;wBACL,SAAS,EAAE,OAAO,IAAI,OAAO,CAAC,SAAS;qBACvC,CAAC;iBACF,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA+B,CAAC;gBAEnE,IAAI,IAAI,CAAC,IAAI,EAAE;oBACd,KAAK,CAAC,MAAM,CAAQ,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;iBACpC;gBAED,OAAO;oBACN,MAAM,EAAE,SAAS;oBACjB,GAAG,IAAI;oBACP,OAAO,EAAE,KAAK;iBACd,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;YAEL,IAAI,GAAG,EAAE;gBACR,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;aAC7B;YAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YAEnC,IAAI,IAAI,EAAE;gBACT,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;aACjC;YAED,OAAO,MAAM,CAAC;QACf,CAAC;KACD,CAAC;AACH,CAAC;AAvHD,oCAuHC"}
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}

@@ -7,5 +7,5 @@ export declare function sortObjectKeys<T extends {

}) => string | null;
export declare function objectHash(obj?: null | {
export declare function objectHash(obj: {
[key: string]: unknown;
}): string | null;
}): string;
//# sourceMappingURL=hash.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAOjF;AAED,oBAAY,YAAY,GAAG,CAC1B,GAAG,CAAC,EAAE,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,KACnC,MAAM,GAAG,IAAI,CAAC;AAEnB,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAUjF"}
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAOjF;AAED,oBAAY,YAAY,GAAG,CAC1B,GAAG,CAAC,EAAE,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,KACnC,MAAM,GAAG,IAAI,CAAC;AAEnB,wBAAgB,UAAU,CAAC,GAAG,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,MAAM,CAMlE"}

@@ -12,5 +12,2 @@ "use strict";

function objectHash(obj) {
if (!obj) {
return null;
}
const sorted = sortObjectKeys(obj);

@@ -17,0 +14,0 @@ const json = JSON.stringify(sorted);

@@ -1,1 +0,1 @@

{"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":";;AAAA,SAAgB,cAAc,CAAuC,MAAS;IAC7E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,OAAQ,EAAe,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACvE,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACd,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,CAAC;AAPD,wCAOC;AAMD,SAAgB,UAAU,CAAC,GAAuC;IACjE,IAAI,CAAC,GAAG,EAAE;QACT,OAAO,IAAI,CAAC;KACZ;IAED,MAAM,MAAM,GAAY,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEpC,qBAAqB;IACrB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAVD,gCAUC"}
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":";;AAAA,SAAgB,cAAc,CAAuC,MAAS;IAC7E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,OAAQ,EAAe,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACvE,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACd,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,CAAC;AAPD,wCAOC;AAMD,SAAgB,UAAU,CAAC,GAA+B;IACzD,MAAM,MAAM,GAAY,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEpC,qBAAqB;IACrB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAND,gCAMC"}
export * from './client';
export * from './cache';
export * from './gql';
export * from './hash';
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC"}

@@ -9,3 +9,2 @@ "use strict";

__export(require("./gql"));
__export(require("./hash"));
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,8BAAyB;AACzB,6BAAwB;AACxB,2BAAsB;AACtB,4BAAuB"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,8BAAyB;AACzB,6BAAwB;AACxB,2BAAsB"}
{
"name": "@micro-graphql/core",
"version": "0.0.6",
"version": "0.1.0",
"license": "MIT",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

@@ -0,1 +1,3 @@

import { objectHash } from './hash';
export interface IMicroGraphQLCacheResult<TValue> {

@@ -7,6 +9,14 @@ data?: TValue;

export interface IMicroGraphQLCache {
tryGet<TValue>(key: string): IMicroGraphQLCacheResult<TValue>;
trySet<TValue>(key: string, data?: TValue): boolean;
tryGet<TValue>(
query: string,
variables: { [key: string]: unknown } | undefined
): IMicroGraphQLCacheResult<TValue>;
trySet<TValue>(
query: string,
variables: { [key: string]: unknown } | undefined,
data?: TValue
): boolean;
stringify(): string;
restore(data: string): void;
prepareQuery(query: string): string;
}

@@ -18,3 +28,8 @@

return {
tryGet: <TValue>(key: string): IMicroGraphQLCacheResult<TValue> => {
tryGet: <TValue>(
query: string,
variables: { [key: string]: unknown } | undefined
): IMicroGraphQLCacheResult<TValue> => {
const key = objectHash({ query, variables });
const success = key in cache;

@@ -28,3 +43,9 @@ const data = success ? cache[key] : undefined;

},
trySet: <TValue>(key: string, data?: TValue): boolean => {
trySet: <TValue>(
query: string,
variables: { [key: string]: unknown } | undefined,
data?: TValue
): boolean => {
const key = objectHash({ query, variables });
cache[key] = data;

@@ -39,4 +60,7 @@

cache = JSON.parse(data);
},
prepareQuery(query: string): string {
return query;
}
};
}

@@ -0,5 +1,6 @@

/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable import/extensions */
import { IMicroGraphQLCache } from './cache';
import { ObjectHasher } from './hash';
import { objectHash } from './hash';

@@ -11,3 +12,2 @@ export interface IMicroGraphQLConfig {

fetch(input: RequestInfo, init?: RequestInit | undefined): Promise<Response>;
hash: ObjectHasher;
}

@@ -27,3 +27,3 @@

export interface IMicroGraphQLQueryOptions<TQueryVariables> {
export interface IMicroGraphQLQueryOptions<TQueryVariables extends { [key: string]: unknown }> {
skipCache?: boolean;

@@ -33,3 +33,5 @@ variables?: TQueryVariables;

export interface IMicroGraphQLSubscriptionOptions<TQueryVariables = unknown>
export interface IMicroGraphQLSubscriptionOptions<
TQueryVariables extends { [key: string]: unknown }
>
extends IMicroGraphQLQueryOptions<TQueryVariables> {

@@ -40,10 +42,13 @@ query: string;

export interface IMicroGraphQLClient {
cache?: IMicroGraphQLCache;
hash: ObjectHasher;
cache: IMicroGraphQLCache;
ssr?: boolean;
query<TData, TQueryVariables>(
// eslint-disable-next-line max-len
// eslint-disable-next-line @typescript-eslint/no-explicit-any
query<TData extends { [key: string]: any }, TQueryVariables extends { [key: string]: any }>(
query: string,
options?: IMicroGraphQLQueryOptions<TQueryVariables>
): Promise<IMicroGraphQLResult<TData>>;
subscribe: <TData, TQueryVariables>(
// eslint-disable-next-line max-len
// eslint-disable-next-line @typescript-eslint/no-explicit-any
subscribe: <TData extends { [key: string]: any }, TQueryVariables extends { [key: string]: any }>(
options: IMicroGraphQLSubscriptionOptions<TQueryVariables>,

@@ -63,6 +68,4 @@ subscription: (data: IMicroGraphQLResult<TData>) => void

ssr,
fetch,
hash
fetch
}: IMicroGraphQLConfig): IMicroGraphQLClient {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const subscriptions = new Map<string, Array<(data: IMicroGraphQLResult<any> & {}) => void>>();

@@ -74,3 +77,2 @@

cache,
hash,
ssr,

@@ -80,13 +82,10 @@ resolveQueries: async (): Promise<void> => {

},
subscribe: <TData, TQueryVariables>(
// eslint-disable-next-line max-len
subscribe: <TData extends { [key: string]: any }, TQueryVariables extends { [key: string]: any }>(
options: IMicroGraphQLSubscriptionOptions<TQueryVariables>,
subscription: (data: IMicroGraphQLResult<TData>) => void
): (() => void) => {
const key = hash({ query: options.query, variables: options.variables });
const query = cache.prepareQuery(options.query);
if (!key) {
throw new MicroGraphQLKeyError(queryKeyError);
}
const cached = cache.tryGet<TData>(key);
const cached = cache.tryGet<TData>(query, options.variables);
if (cached.success) {

@@ -99,2 +98,4 @@ subscription({

const key = objectHash({ query, variables: options.variables });
const subs = subscriptions.get(key) || [];

@@ -112,12 +113,7 @@ subs.push(subscription);

},
query: async <TData, TQueryVariables = unknown>(
query: string,
// eslint-disable-next-line max-len
query: async <TData extends { [key: string]: any }, TQueryVariables extends { [key: string]: any }>(
inputQuery: string,
options?: IMicroGraphQLQueryOptions<TQueryVariables>
): Promise<IMicroGraphQLResult<TData>> => {
const key = hash({ query, variables: options && options.variables });
if (!key) {
throw new MicroGraphQLKeyError(queryKeyError);
}
const { skipCache }: IMicroGraphQLQueryOptions<TQueryVariables> = {

@@ -128,11 +124,16 @@ skipCache: false,

const cachedResult = !skipCache && cache.tryGet<TData>(key);
const query = cache.prepareQuery(inputQuery);
if (!skipCache) {
const cachedResult = !skipCache && cache.tryGet<TData>(query, options && options.variables);
if (!skipCache && cachedResult && cachedResult.success) {
return {
loading: false,
data: cachedResult.data
};
if (cachedResult.success) {
return {
loading: false,
data: cachedResult.data
};
}
}
const key = objectHash({ query, variables: options && options.variables });
const subs = subscriptions.get(key);

@@ -161,3 +162,3 @@

if (json.data) {
cache.trySet<TData>(key, json.data);
cache.trySet<TData>(query, options && options.variables, json.data);
}

@@ -164,0 +165,0 @@

@@ -14,7 +14,3 @@ export function sortObjectKeys<T extends { [key: string]: unknown }>(object: T): T {

export function objectHash(obj?: null | { [key: string]: unknown }): string | null {
if (!obj) {
return null;
}
export function objectHash(obj: { [key: string]: unknown }): string {
const sorted: unknown = sortObjectKeys(obj);

@@ -21,0 +17,0 @@ const json = JSON.stringify(sorted);

export * from './client';
export * from './cache';
export * from './gql';
export * from './hash';
/* eslint-disable import/extensions */
import { createCache, IMicroGraphQLCache } from '../src';
import {
createCache,
IMicroGraphQLCache,
gql,
frag
} from '../src';
const fragment = frag`
fragment TestFrag on Film {
title
}
`;
const query = gql`
query TestQuery($id: ID) {
film(filmID: $id) {
id
${fragment}
}
}
`;
const variables = { id: 'abc' };
describe('cache', () => {

@@ -12,3 +34,3 @@ let cache: IMicroGraphQLCache;

it('returns success as false and undefined data for unset key', () => {
const cached = cache.tryGet('unknown');
const cached = cache.tryGet(query, variables);
expect(cached).toBeTruthy();

@@ -22,4 +44,4 @@ expect(cached.success).toBe(false);

cache.trySet('key', data);
const cached = cache.tryGet('key');
cache.trySet(query, variables, data);
const cached = cache.tryGet(query, variables);
expect(cached).toBeTruthy();

@@ -33,3 +55,3 @@ expect(cached.success).toBe(true);

cache.trySet('key', data);
cache.trySet(query, variables, data);
const stringified = cache.stringify();

@@ -40,3 +62,3 @@

const cached = cache.tryGet('key');
const cached = cache.tryGet(query, variables);
expect(cached).toBeTruthy();

@@ -46,3 +68,3 @@ expect(cached.success).toBe(true);

const restoredCached = cache.tryGet('key');
const restoredCached = cache.tryGet(query, variables);
expect(restoredCached).toBeTruthy();

@@ -49,0 +71,0 @@ expect(restoredCached.success).toBe(true);

@@ -8,5 +8,4 @@ /* eslint-disable import/no-extraneous-dependencies */

IMicroGraphQLResult,
objectHash,
queryKeyError,
IMicroGraphQLCacheResult
IMicroGraphQLCacheResult,
IMicroGraphQLConfig
} from '../src';

@@ -38,4 +37,3 @@

// eslint-disable-next-line @typescript-eslint/no-explicit-any
let options: any;
let options: IMicroGraphQLConfig;
beforeEach(() => {

@@ -49,3 +47,2 @@ global.fetch.resetMocks();

fetch: global.fetch,
hash: objectHash,
url: 'https://swapi-graphql.netlify.com/.netlify/functions/index',

@@ -56,16 +53,52 @@ cache: createCache()

it('throws if fails to hash query', async () => {
it('can return cached result with prepare query', async () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const cached: any = {};
const client = createClient({
...options,
hash: () => null
cache: {
tryGet: <TValue>(): IMicroGraphQLCacheResult<TValue> => ({
success: true,
data: cached
}),
trySet: (): boolean => false,
restore: jest.fn(),
stringify: jest.fn(),
prepareQuery: (q: string): string => q
}
});
try {
await client.query<IQueryResult, unknown>(query, { variables });
expect(false).toBe(true);
} catch (err) {
expect(err.message).toEqual(queryKeyError);
}
const result = await client.query<IQueryResult, {}>(query, {
variables
});
expect(result).toBeTruthy();
expect(result.data).toBe(cached);
});
it('can skip cached result with prepare query', async () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const cached: any = {};
const client = createClient({
...options,
cache: {
tryGet: <TValue>(): IMicroGraphQLCacheResult<TValue> => ({
success: true,
data: cached
}),
trySet: (): boolean => false,
restore: jest.fn(),
stringify: jest.fn(),
prepareQuery: (q: string): string => q
}
});
const result = await client.query<IQueryResult, {}>(query, {
variables,
skipCache: true
});
expect(result).toBeTruthy();
});
it('can return cached result', async () => {

@@ -84,7 +117,8 @@ // eslint-disable-next-line @typescript-eslint/no-explicit-any

restore: jest.fn(),
stringify: jest.fn()
stringify: jest.fn(),
prepareQuery: (q: string): string => q
}
});
const result = await client.query<IQueryResult, unknown>(query, {
const result = await client.query<IQueryResult, {}>(query, {
variables

@@ -100,2 +134,3 @@ });

let prepared = false;
const client = createClient({

@@ -110,3 +145,7 @@ ...options,

restore: jest.fn(),
stringify: jest.fn()
stringify: jest.fn(),
prepareQuery: (q: string): string => {
prepared = true;
return q;
}
}

@@ -117,3 +156,3 @@ });

let result: any;
client.subscribe<IQueryResult, unknown>({
client.subscribe<IQueryResult, {}>({
query,

@@ -126,2 +165,3 @@ variables

expect(result.data).toBe(cached);
expect(prepared).toBe(true);
});

@@ -136,7 +176,7 @@

const result = await client.query<IQueryResult, unknown>(query, {
const result = await client.query<IQueryResult, {}>(query, {
variables
});
expect(result.data).toBeUndefined();
expect(client.cache!.tryGet(client.hash({ query, variables }) as string).success).toBe(false);
expect(client.cache!.tryGet(query, variables).success).toBe(false);
});

@@ -147,3 +187,3 @@

const result = await client.query<IQueryResult, unknown>(query, {
const result = await client.query<IQueryResult, {}>(query, {
variables

@@ -157,3 +197,3 @@ });

const result = client.query<IQueryResult, unknown>(query, {
const result = client.query<IQueryResult, {}>(query, {
variables

@@ -173,3 +213,3 @@ });

const result = await client.query<IQueryResult, unknown>(query, {
const result = await client.query<IQueryResult, {}>(query, {
variables

@@ -179,3 +219,3 @@ });

const secondResult = await client.query<IQueryResult, unknown>(query, {
const secondResult = await client.query<IQueryResult, {}>(query, {
variables

@@ -192,3 +232,3 @@ });

const result = await client.query<IQueryResult, unknown>(query, {
const result = await client.query<IQueryResult, {}>(query, {
variables

@@ -198,3 +238,3 @@ });

const secondResult = await client.query<IQueryResult, unknown>(query, {
const secondResult = await client.query<IQueryResult, {}>(query, {
skipCache: true,

@@ -207,18 +247,2 @@ variables

it('throws if fails to hash query on subscription', async () => {
const client = createClient({
...options,
hash: () => null
});
try {
client.subscribe({ query, variables }, () => {
expect(false).toBe(true);
});
expect(false).toBe(true);
} catch (err) {
expect(err.message).toEqual(queryKeyError);
}
});
it('can receive subscription value', async () => {

@@ -232,3 +256,3 @@ const client = createClient({

let dataFromSubscription: IMicroGraphQLResult<IQueryResult>;
const unsubscribe = client.subscribe<IQueryResult, unknown>(
const unsubscribe = client.subscribe<IQueryResult, {}>(
{ query, variables },

@@ -241,3 +265,3 @@ data => {

const result = await client.query<IQueryResult, unknown>(query, {
const result = await client.query<IQueryResult, {}>(query, {
variables

@@ -250,3 +274,3 @@ });

const secondResult = await client.query<IQueryResult, unknown>(query, {
const secondResult = await client.query<IQueryResult, {}>(query, {
skipCache: true,

@@ -253,0 +277,0 @@ variables

/* eslint-disable import/extensions */
import { objectHash, sortObjectKeys } from '../src';
import { objectHash, sortObjectKeys } from '../src/hash';

@@ -18,7 +18,2 @@ describe('hash', () => {

describe('objectHash', () => {
it('returns null for falsey input', () => {
expect(objectHash(null)).toBeNull();
expect(objectHash(undefined)).toBeNull();
});
it('hashes object reliably', () => {

@@ -25,0 +20,0 @@ const input = {

Sorry, the diff of this file is not supported yet