updates readme for new api

This commit is contained in:
Scott Tolinski 2021-10-26 13:13:50 -06:00
parent fe8e6ba618
commit e6548a895d
12 changed files with 176 additions and 259 deletions

View file

@ -75,7 +75,7 @@ This also gives us a `get` function for queries based on the query name. ie `get
// Cache becomes populated with data available for SSR
import { user } from './UserQueries.gGenerated.graphql'
// $: console.log($user) //data available for ssr
// $: console.log($user.user) //data available for ssr
</script>
```
@ -89,9 +89,9 @@ It's a Svelte Writable Store. So after a mutation you can quickly and easily man
```javascript
import { user, someMutation } from "./UserQueries.gGenerated.graphql";
$user = null; // clears the cache
$user.user = null; // clears the cache
$user = await someMutation({ variables }); // if this returns the correct data
$user.user = await someMutation({ variables }); // if this returns the correct data
```
### Q? Can't you update the cache magically for me after a mutation?

View file

@ -1,8 +1,9 @@
import { visit, concatAST, Kind, } from "graphql";
import "@graphql-codegen/plugin-helpers";
import { ClientSideBaseVisitor } from "@graphql-codegen/visitor-plugin-common";
import { ClientSideBaseVisitor, } from "@graphql-codegen/visitor-plugin-common";
import pascalCase from "just-pascal-case";
export const plugin = (schema, documents, config) => {
console.log("🛠️ Codegen Starting");
const allAst = concatAST(documents.map((d) => d.document));
const allFragments = [
...allAst.definitions.filter((d) => d.kind === Kind.FRAGMENT_DEFINITION).map((fragmentDef) => ({
@ -13,7 +14,7 @@ export const plugin = (schema, documents, config) => {
})),
...(config.externalFragments || []),
];
const visitor = new ClientSideBaseVisitor(schema, allFragments, {}, { documentVariableSuffix: "Doc" }, documents);
const visitor = new ClientSideBaseVisitor(schema, allFragments, config, { documentVariableSuffix: "Doc" }, documents);
const visitorResult = visit(allAst, { leave: visitor });
const operations = allAst.definitions.filter((d) => d.kind === Kind.OPERATION_DEFINITION);
const defaultTypes = `
@ -27,6 +28,7 @@ type SubscribeWrapperArgs<T> = {
variables?: T,
}
interface CacheFunctionOptions {
update?: boolean
}
@ -35,20 +37,18 @@ interface CacheFunctionOptions {
const ops = operations
.map((o) => {
var _a;
console.log("o", o.selectionSet.selections);
if (o) {
console.log("o", o);
const name = ((_a = o === null || o === void 0 ? void 0 : o.name) === null || _a === void 0 ? void 0 : _a.value) || "";
// const dsl = `export const ${pascalCase(op.name.value)}Doc = gql\`
// ${documents.find((d) => d.rawSDL.includes(`${op.operation} ${op.name.value}`)).rawSDL}\``
const op = `${pascalCase(name)}${pascalCase(o.operation)}`;
const pascalName = pascalCase(name);
const opv = `${op}Variables`;
let operations = "";
if (o.operation === "query") {
operations += `
export const ${name}Store = writable()
export const ${name} = writable<${op}>()
export const ${name} = ({ variables, fetch}: FetchWrapperArgs<${opv}>):
export const fetch${pascalName} = ({ variables, fetch}: FetchWrapperArgs<${opv}>):
Promise<GFetchReturnWithErrors<${op}>> =>
g.fetch<${op}>({
queries: [{ query: ${pascalName}Doc, variables }],
@ -56,29 +56,17 @@ export const ${name} = ({ variables, fetch}: FetchWrapperArgs<${opv}>):
})
// Cached
export async function get${pascalCase(name)}({ fetch, variables }: GGetParameters<${opv}>, options?: CacheFunctionOptions) {
// Cached
export async function get${pascalName}({ fetch, variables }: GGetParameters<${opv}>, options?: CacheFunctionOptions) {
const data = await g.fetch<${op}>({
queries: [{ query: ${pascalName}Doc, variables }],
fetch
})
await ${name}Store.set({ ...data})
await gQuery(${name}, { query: ${name}, variables }, options)
await ${name}.set({ ...data, error: data?.error, gQueryStatus: 'LOADED' })
return data
}
`;
// If config is set to have subscription query, also write the
if (config.subscriptionQuery) {
operations += `
export const ${name}Subscribe = ({ variables }: SubscribeWrapperArgs<${opv}>):
Readable<GFetchReturnWithErrors<${op}>> =>
g.oFetch<${op}>({
queries: [{ query: ${pascalName}Doc, variables }]
})
`;
}
}
else if (o.operation === "mutation") {
operations += `
@ -95,41 +83,13 @@ Promise<GFetchReturnWithErrors<${op}>> =>
})
.join("\n");
const imports = [
`import type { Readable } from "svelte/store"`,
`import { writable } from "svelte/store"`,
`import type { Writable } from "svelte/store"`,
`import { g } from '${config.gPath}'`,
`import type { GFetchReturnWithErrors, GGetParameters } from '@leveluptuts/g-query'`,
`import { gQuery } from '@leveluptuts/g-query'`,
`import gql from "graphql-tag"`,
];
// let schemaInputs = getCachedDocumentNodeFromSchema(schema).definitions.filter((d) => {
// return d.kind === 'InputObjectTypeDefinition'
// })
// let inputs = schemaInputs
// .map((d) => {
// console.log('/* START */')
// // @ts-ignore
// console.log('NAME: ', d.fields[0].name.value)
// // @ts-ignore
// let isReq = d.fields[0]?.type?.kind === 'NonNullType'
// console.log('REQUIRED: ', isReq ? '✅' : '❌')
// // @ts-ignore
// console.log('TYPE: ', isReq ? d.fields[0]?.type?.type?.name?.value : d.fields[0]?.type?.name?.value)
// // @ts-ignore
// // @ts-ignore
// console.log('d.fields[0]', d.fields[0]?.type)
// console.log('/* END */')
// console.log('')
// return `
// const inputName = {
// ${d.fields[0].name.value}: ${isReq ? d.fields[0]?.type?.type?.name?.value : d.fields[0]?.type?.name?.value}
// }
// `
// })
// .join('\n')
// console.log('inputs', inputs)
return {
prepend: imports,
prepend: [...imports, ...visitor.getImports()],
content: [
defaultTypes,
visitor.fragments,
@ -138,4 +98,7 @@ Promise<GFetchReturnWithErrors<${op}>> =>
].join("\n"),
};
};
// TODO
// - add option to force update of cache. ie getUserTutorials({update: true})
// if update.true is not set, then it will only update if the cache is empty
//# sourceMappingURL=codegen.js.map

View file

@ -1 +1 @@
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["codegen.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["codegen.ts"],"names":[],"mappings":"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"}

View file

@ -7,7 +7,10 @@ import {
OperationDefinitionNode,
} from "graphql";
import { Types, PluginFunction } from "@graphql-codegen/plugin-helpers";
import { ClientSideBaseVisitor } from "@graphql-codegen/visitor-plugin-common";
import {
ClientSideBaseVisitor,
LoadedFragment,
} from "@graphql-codegen/visitor-plugin-common";
import pascalCase from "just-pascal-case";
export const plugin: PluginFunction<any> = (
@ -15,9 +18,11 @@ export const plugin: PluginFunction<any> = (
documents: Types.DocumentFile[],
config
) => {
console.log("🛠️ Codegen Starting");
const allAst = concatAST(documents.map((d) => d.document));
const allFragments = [
const allFragments: LoadedFragment[] = [
...(
allAst.definitions.filter(
(d) => d.kind === Kind.FRAGMENT_DEFINITION
@ -34,7 +39,7 @@ export const plugin: PluginFunction<any> = (
const visitor = new ClientSideBaseVisitor(
schema,
allFragments,
{},
config,
{ documentVariableSuffix: "Doc" },
documents
);
@ -55,6 +60,7 @@ type SubscribeWrapperArgs<T> = {
variables?: T,
}
interface CacheFunctionOptions {
update?: boolean
}
@ -64,9 +70,8 @@ interface CacheFunctionOptions {
const ops = operations
.map((o) => {
if (o) {
console.log("o", o);
const name = o?.name?.value || "";
// const dsl = `export const ${pascalCase(op.name.value)}Doc = gql\`
// ${documents.find((d) => d.rawSDL.includes(`${op.operation} ${op.name.value}`)).rawSDL}\``
const op = `${pascalCase(name)}${pascalCase(o.operation)}`;
const pascalName = pascalCase(name);
const opv = `${op}Variables`;
@ -74,9 +79,9 @@ interface CacheFunctionOptions {
if (o.operation === "query") {
operations += `
export const ${name}Store = writable()
export const ${name} = writable<${op}>()
export const ${name} = ({ variables, fetch}: FetchWrapperArgs<${opv}>):
export const fetch${pascalName} = ({ variables, fetch}: FetchWrapperArgs<${opv}>):
Promise<GFetchReturnWithErrors<${op}>> =>
g.fetch<${op}>({
queries: [{ query: ${pascalName}Doc, variables }],
@ -85,28 +90,16 @@ export const ${name} = ({ variables, fetch}: FetchWrapperArgs<${opv}>):
// Cached
export async function get${pascalCase(
name
)}({ fetch, variables }: GGetParameters<${opv}>, options?: CacheFunctionOptions) {
export async function get${pascalName}({ fetch, variables }: GGetParameters<${opv}>, options?: CacheFunctionOptions) {
const data = await g.fetch<${op}>({
queries: [{ query: ${pascalName}Doc, variables }],
fetch
})
await ${name}Store.set({ ...data})
await gQuery(${name}, { query: ${name}, variables }, options)
await ${name}.set({ ...data, error: data?.error, gQueryStatus: 'LOADED' })
return data
}
`;
// If config is set to have subscription query, also write the
if (config.subscriptionQuery) {
operations += `
export const ${name}Subscribe = ({ variables }: SubscribeWrapperArgs<${opv}>):
Readable<GFetchReturnWithErrors<${op}>> =>
g.oFetch<${op}>({
queries: [{ query: ${pascalName}Doc, variables }]
})
`;
}
} else if (o.operation === "mutation") {
operations += `
export const ${name} = ({ variables }: SubscribeWrapperArgs<${opv}>):
@ -124,16 +117,14 @@ Promise<GFetchReturnWithErrors<${op}>> =>
.join("\n");
const imports = [
`import type { Readable } from "svelte/store"`,
`import { writable } from "svelte/store"`,
`import type { Writable } from "svelte/store"`,
`import { g } from '${config.gPath}'`,
`import type { GFetchReturnWithErrors, GGetParameters } from '@leveluptuts/g-query'`,
`import { gQuery } from '@leveluptuts/g-query'`,
`import gql from "graphql-tag"`,
];
return {
prepend: imports,
prepend: [...imports, ...visitor.getImports()],
content: [
defaultTypes,
visitor.fragments,
@ -142,3 +133,6 @@ Promise<GFetchReturnWithErrors<${op}>> =>
].join("\n"),
};
};
// TODO
// - add option to force update of cache. ie getUserTutorials({update: true})
// if update.true is not set, then it will only update if the cache is empty

View file

@ -1,6 +1,5 @@
import { generate } from "@graphql-codegen/cli";
const outputFile = "gquery.generated.ts";
const fileRegex = /\.(graphql)$/;
const fileRegex = /\.(graphql)$/; // not used, will be for the vite rerun
export default function levelupViteCodegen(options) {
if (!options.schema) {
throw new Error("No schema provided");
@ -12,30 +11,39 @@ export default function levelupViteCodegen(options) {
throw new Error("No gPath directory specified. gPath is where you've initialized the 'g' client");
}
const { schema, output, gPath } = options;
console.log("running plugin");
return {
name: "levelup-vite-codegen",
name: "g-query-codegen",
async buildStart() {
try {
const generatedFiles = await generate({
// *1. Remove all .gGenerated files
// TODO: Find and remove all .gGenerated files
// *2. Generate
await generate({
schema,
documents: "./src/**/*.graphql",
generates: {
[`${process.cwd()}/${output}/gquery-types.generated.ts`]: {
// * Generates the types for your schema
[`${process.cwd()}/${output}/types.gGenerated.ts`]: {
plugins: ["typescript"],
},
// * Generates near file .ts files for your fetch functions
[`${process.cwd()}/${output}`]: {
config: {
useTypeImports: true,
gPath,
importDocumentNodeExternallyFrom: "near-operation-file",
inlineFragmentTypes: "combine",
},
preset: "near-operation-file",
presetConfig: {
extension: ".generated.ts",
extension: ".gGenerated.ts",
folder: "./",
baseTypesPath: `gquery-types.generated.ts`,
baseTypesPath: `types.gGenerated.ts`,
},
plugins: [
"typescript-operations",
"@leveluptuts/g-query/codegen-plugin",
"@leveluptuts/g-query/codegen-plugin", // g-query codegen plugin.
],
},
},

View file

@ -1 +1 @@
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,MAAM,UAAU,GAAG,qBAAqB,CAAC;AACzC,MAAM,SAAS,GAAG,cAAc,CAAC;AAEjC,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,OAAO;IAChD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;KACvC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;KAClD;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QAClB,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;KACH;IAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1C,OAAO;QACL,IAAI,EAAE,sBAAsB;QAE5B,KAAK,CAAC,UAAU;YACd,IAAI;gBACF,MAAM,cAAc,GAAG,MAAM,QAAQ,CACnC;oBACE,MAAM;oBACN,SAAS,EAAE,oBAAoB;oBAC/B,SAAS,EAAE;wBACT,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,MAAM,4BAA4B,CAAC,EAAE;4BACxD,OAAO,EAAE,CAAC,YAAY,CAAC;yBACxB;wBACD,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC,EAAE;4BAC9B,MAAM,EAAE;gCACN,KAAK;6BACN;4BACD,MAAM,EAAE,qBAAqB;4BAC7B,YAAY,EAAE;gCACZ,SAAS,EAAE,eAAe;gCAC1B,MAAM,EAAE,IAAI;gCACZ,aAAa,EAAE,2BAA2B;6BAC3C;4BACD,OAAO,EAAE;gCACP,uBAAuB;gCACvB,qCAAqC;6BACtC;yBACF;qBACF;iBACF,EACD,IAAI,CACL,CAAC;aACH;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CACT,0FAA0F,CAC3F,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,uFAAuF,CACxF,CAAC;aACH;YACD,OAAO;QACT,CAAC;QAED,SAAS,CAAC,GAAG,EAAE,EAAE,IAAG,CAAC;KACtB,CAAC;AACJ,CAAC"}
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,uCAAuC;AAEzE,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,OAAO;IAChD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;KACvC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;KAClD;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QAClB,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;KACH;IAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,CAAC,UAAU;YACd,IAAI;gBACF,qCAAqC;gBACrC,8CAA8C;gBAC9C,iBAAiB;gBAEjB,MAAM,QAAQ,CACZ;oBACE,MAAM;oBACN,SAAS,EAAE,oBAAoB;oBAC/B,SAAS,EAAE;wBACT,wCAAwC;wBACxC,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,MAAM,sBAAsB,CAAC,EAAE;4BAClD,OAAO,EAAE,CAAC,YAAY,CAAC;yBACxB;wBACD,2DAA2D;wBAC3D,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC,EAAE;4BAC9B,MAAM,EAAE;gCACN,cAAc,EAAE,IAAI;gCACpB,KAAK;gCACL,gCAAgC,EAAE,qBAAqB;gCACvD,mBAAmB,EAAE,SAAS;6BAC/B;4BACD,MAAM,EAAE,qBAAqB;4BAC7B,YAAY,EAAE;gCACZ,SAAS,EAAE,gBAAgB;gCAC3B,MAAM,EAAE,IAAI;gCACZ,aAAa,EAAE,qBAAqB;6BACrC;4BACD,OAAO,EAAE;gCACP,uBAAuB;gCACvB,qCAAqC,EAAE,0BAA0B;6BAClE;yBACF;qBACF;iBACF,EACD,IAAI,CACL,CAAC;aACH;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CACT,0FAA0F,CAC3F,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,uFAAuF,CACxF,CAAC;aACH;YACD,OAAO;QACT,CAAC;QAED,SAAS,CAAC,GAAG,EAAE,EAAE,IAAG,CAAC;KACtB,CAAC;AACJ,CAAC"}

View file

@ -16,10 +16,15 @@ export default function levelupViteCodegen(options) {
const { schema, output, gPath } = options;
console.log("running plugin");
return {
name: "g-query-codegen",
async buildStart() {
try {
// *1. Remove all .gGenerated files
// TODO: Find and remove all .gGenerated files
// *2. Generate
await generate(
{
schema,
@ -32,7 +37,10 @@ export default function levelupViteCodegen(options) {
// * Generates near file .ts files for your fetch functions
[`${process.cwd()}/${output}`]: {
config: {
useTypeImports: true,
gPath,
importDocumentNodeExternallyFrom: "near-operation-file",
inlineFragmentTypes: "combine",
},
preset: "near-operation-file",
presetConfig: {

10
dist/gFetch.d.ts vendored
View file

@ -1,5 +1,4 @@
import { DefinitionNode, DocumentNode } from "graphql";
import type { Readable } from "svelte/store";
export declare type GFetchQueryDefault = {
errors?: string[];
};
@ -51,13 +50,6 @@ export declare type GFetchReturnWithErrors<T> = Spread<[T, GFetchQueryDefault]>;
export declare class GFetch extends Object {
path: string;
constructor(options: ApolloClientOptions);
fetch<T>({ queries, fetch, }: gFetchProperties): Promise<GFetchReturnWithErrors<T>>;
oFetch<F>({ queries, }: {
queries: GFetchQueries[];
}): Readable<GFetchReturnWithErrors<F>>;
private unsubscribe;
private makeSubscribe;
private fetchDataForSubscription;
fetch<T>({ queries, fetch, }?: gFetchProperties | {}): Promise<GFetchReturnWithErrors<T>>;
}
export declare const data: import("svelte/store").Writable<unknown>;
export {};

125
dist/gFetch.js vendored
View file

@ -1,5 +1,5 @@
import { Kind, print, } from "graphql";
import { readable, writable } from "svelte/store";
import "svelte/store";
import { formatDocument as addTypenameToDocument } from "./utils/format";
// This function accepts a graphql document and returns a string to be used
// in fetch calls
@ -21,23 +21,6 @@ export const stringifyDocument = (node) => {
let str = (typeof node !== "string" ? print(node) : node)
.replace(/([\s,]|#[^\n\r]+)+/g, " ")
.trim();
// if (typeof node !== "string") {
// const operationName = "definitions" in node && getOperationName(node);
// if (operationName) {
// str = `# ${operationName}\n${str}`;
// }
// if (!node.loc) {
// (node as WritableLocation).loc = {
// start: 0,
// end: str.length,
// source: {
// body: str,
// name: "gql",
// locationOffset: { line: 1, column: 1 },
// },
// } as Location;
// }
// }
return str;
};
export class GFetch extends Object {
@ -46,16 +29,10 @@ export class GFetch extends Object {
const { path } = options;
this.path = path;
this.fetch = this.fetch.bind(this);
this.oFetch = this.oFetch.bind(this);
}
// * gFetch
// This is a fetcher that returns a promise that resolves to a graphql response
async fetch({ queries, fetch, }) {
// Get all the queries and transform the docs into strings
// Fetching gql require them to be strings.
if (!fetch && window) {
fetch = window.fetch;
}
async fetch({ queries, fetch, } = {}) {
let document = addTypenameToDocument(queries[0].query);
let documentString = stringifyDocument(document);
const newQueries = {
@ -77,56 +54,58 @@ export class GFetch extends Object {
...data.data,
};
}
// * ogFetch
// This function is a fetcher that returns a svelte readable subscription
// This is to be used for client side fetching of data
oFetch({ queries, }) {
// 1. Build the store and initialize it as empty and error free
const initial = new Map();
// Creates a store that will be used to subscribe to the data
const store = readable(initial, this.makeSubscribe(initial, queries));
return store;
}
// A dummy function that is used to make subscribe happy.
unsubscribe() {
// Nothing to do in this case
}
// Part of ogFetch
// Designed this way to work will with Svelte's readable store
makeSubscribe(data, queries) {
// Create a closure with access to the
// initial data and initialization arguments
return (set) => {
// 3. This won't get executed until the store has
// its first subscriber. Kick off retrieval.
this.fetchDataForSubscription(data, set, queries);
// We're not waiting for the response.
// Return the unsubscribe function which doesn't do
// do anything here (but is part of the stores protocol).
return this.unsubscribe;
};
}
// Part of ogFetch
// Runs gFetch and updates subscription
async fetchDataForSubscription(data, set, queries) {
try {
// Dispatch the request for the users
// This code is ONLY run client side, so fetch comes globally from the browser
const response = await this.fetch({ queries, fetch });
set(response);
}
catch (error) {
// 6b. if there is a fetch error - deal with it
// and let observers know
data.error = error;
set(data);
}
}
}
export const data = writable();
// * ogFetch
// This function is a fetcher that returns a svelte readable subscription
// This is to be used for client side fetching of data
// public oFetch<F>({
// queries,
// }: {
// queries: GFetchQueries[];
// }): Readable<GFetchReturnWithErrors<F>> {
// // 1. Build the store and initialize it as empty and error free
// const initial = new Map();
// // Creates a store that will be used to subscribe to the data
// const store = readable(initial, this.makeSubscribe(initial, queries));
// return store as unknown as Readable<GFetchReturnWithErrors<F>>;
// }
// // A dummy function that is used to make subscribe happy.
// private unsubscribe() {
// // Nothing to do in this case
// }
// // Part of ogFetch
// // Designed this way to work will with Svelte's readable store
// private makeSubscribe(data, queries) {
// // Create a closure with access to the
// // initial data and initialization arguments
// return (set) => {
// // 3. This won't get executed until the store has
// // its first subscriber. Kick off retrieval.
// this.fetchDataForSubscription(data, set, queries);
// // We're not waiting for the response.
// // Return the unsubscribe function which doesn't do
// // do anything here (but is part of the stores protocol).
// return this.unsubscribe;
// };
// }
// // Part of ogFetch
// // Runs gFetch and updates subscription
// private async fetchDataForSubscription(data, set, queries: GFetchQueries[]) {
// try {
// // Dispatch the request for the users
// // This code is ONLY run client side, so fetch comes globally from the browser
// const response = await this.fetch({ queries, fetch });
// set(response);
// } catch (error) {
// // 6b. if there is a fetch error - deal with it
// // and let observers know
// data.error = error;
// set(data);
// }
// }
// }
// export const data = writable();
// ! IDEAS
// Mutations should take care of updating a generated writeable.
// updateTutorial()
// $tutorial is auto updated site wide
// Devtools based on svelte toy
//# sourceMappingURL=gFetch.js.map

2
dist/gFetch.js.map vendored
View file

@ -1 +1 @@
{"version":3,"file":"gFetch.js","sourceRoot":"","sources":["../src/gFetch.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"gFetch.js","sourceRoot":"","sources":["../src/gFetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,IAAI,EAEJ,KAAK,GACN,MAAM,SAAS,CAAC;AACjB,OAAmC,cAAc,CAAC;AAElD,OAAO,EAAE,cAAc,IAAI,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAkDzE,2EAA2E;AAC3E,iBAAiB;AACjB,MAAM,UAAU,WAAW,CAAC,GAAiB;IAC3C,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAsB,EAAE;IAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,EAAE;YACxD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;SACxB;KACF;AACH,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAA4C,EACpC,EAAE;IACV,IAAI,GAAG,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACtD,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC;SACnC,IAAI,EAAE,CAAC;IACV,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AA0BF,MAAM,OAAO,MAAO,SAAQ,MAAM;IAGhC,YAAY,OAA4B;QACtC,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,WAAW;IACX,+EAA+E;IACxE,KAAK,CAAC,KAAK,CAAI,EACpB,OAAO,EACP,KAAK,MACoB,EAAE;QAC3B,IAAI,QAAQ,GAAiB,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrE,IAAI,cAAc,GAAW,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG;YACjB,GAAG,OAAO,CAAC,CAAC,CAAC;YACb,KAAK,EAAE,cAAc;SACtB,CAAC;QAEF,2DAA2D;QAC3D,gCAAgC;QAChC,wCAAwC;QACxC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;YACjC,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,SAAS;YACtB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;SACjC,CAAC,CAAC;QAEH,qCAAqC;QACrC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAE9B,OAAO;YACL,GAAG,IAAI,CAAC,IAAI;SACgB,CAAC;IACjC,CAAC;CACF;AAED,YAAY;AACZ,yEAAyE;AACzE,sDAAsD;AACtD,uBAAuB;AACvB,eAAe;AACf,SAAS;AACT,gCAAgC;AAChC,8CAA8C;AAC9C,sEAAsE;AACtE,iCAAiC;AACjC,oEAAoE;AACpE,6EAA6E;AAC7E,sEAAsE;AACtE,MAAM;AAEN,8DAA8D;AAC9D,4BAA4B;AAC5B,oCAAoC;AACpC,MAAM;AAEN,uBAAuB;AACvB,mEAAmE;AACnE,2CAA2C;AAC3C,6CAA6C;AAC7C,mDAAmD;AACnD,wBAAwB;AACxB,0DAA0D;AAC1D,qDAAqD;AACrD,2DAA2D;AAE3D,+CAA+C;AAC/C,4DAA4D;AAC5D,kEAAkE;AAClE,iCAAiC;AACjC,SAAS;AACT,MAAM;AAEN,uBAAuB;AACvB,4CAA4C;AAC5C,kFAAkF;AAClF,YAAY;AACZ,8CAA8C;AAC9C,uFAAuF;AACvF,+DAA+D;AAC/D,uBAAuB;AACvB,wBAAwB;AACxB,wDAAwD;AACxD,kCAAkC;AAClC,4BAA4B;AAC5B,mBAAmB;AACnB,QAAQ;AACR,MAAM;AACN,IAAI;AAEJ,kCAAkC;AAElC,UAAU;AACV,gEAAgE;AAChE,sCAAsC"}

View file

@ -47,5 +47,5 @@
},
"type": "module",
"types": "./dist/index.d.ts",
"version": "0.0.5"
"version": "0.0.6"
}

View file

@ -86,26 +86,6 @@ export const stringifyDocument = (
let str = (typeof node !== "string" ? print(node) : node)
.replace(/([\s,]|#[^\n\r]+)+/g, " ")
.trim();
// if (typeof node !== "string") {
// const operationName = "definitions" in node && getOperationName(node);
// if (operationName) {
// str = `# ${operationName}\n${str}`;
// }
// if (!node.loc) {
// (node as WritableLocation).loc = {
// start: 0,
// end: str.length,
// source: {
// body: str,
// name: "gql",
// locationOffset: { line: 1, column: 1 },
// },
// } as Location;
// }
// }
return str;
};
@ -141,7 +121,6 @@ export class GFetch extends Object {
const { path } = options;
this.path = path;
this.fetch = this.fetch.bind(this);
this.oFetch = this.oFetch.bind(this);
}
// * gFetch
@ -149,12 +128,7 @@ export class GFetch extends Object {
public async fetch<T>({
queries,
fetch,
}: gFetchProperties): Promise<GFetchReturnWithErrors<T>> {
// Get all the queries and transform the docs into strings
// Fetching gql require them to be strings.
if (!fetch && window) {
fetch = window.fetch;
}
}: gFetchProperties | {} = {}): Promise<GFetchReturnWithErrors<T>> {
let document: DocumentNode = addTypenameToDocument(queries[0].query);
let documentString: string = stringifyDocument(document);
const newQueries = {
@ -179,65 +153,64 @@ export class GFetch extends Object {
...data.data,
} as GFetchReturnWithErrors<T>;
}
// * ogFetch
// This function is a fetcher that returns a svelte readable subscription
// This is to be used for client side fetching of data
public oFetch<F>({
queries,
}: {
queries: GFetchQueries[];
}): Readable<GFetchReturnWithErrors<F>> {
// 1. Build the store and initialize it as empty and error free
const initial = new Map();
// Creates a store that will be used to subscribe to the data
const store = readable(initial, this.makeSubscribe(initial, queries));
return store as unknown as Readable<GFetchReturnWithErrors<F>>;
}
// A dummy function that is used to make subscribe happy.
private unsubscribe() {
// Nothing to do in this case
}
// Part of ogFetch
// Designed this way to work will with Svelte's readable store
private makeSubscribe(data, queries) {
// Create a closure with access to the
// initial data and initialization arguments
return (set) => {
// 3. This won't get executed until the store has
// its first subscriber. Kick off retrieval.
this.fetchDataForSubscription(data, set, queries);
// We're not waiting for the response.
// Return the unsubscribe function which doesn't do
// do anything here (but is part of the stores protocol).
return this.unsubscribe;
};
}
// Part of ogFetch
// Runs gFetch and updates subscription
private async fetchDataForSubscription(data, set, queries: GFetchQueries[]) {
try {
// Dispatch the request for the users
// This code is ONLY run client side, so fetch comes globally from the browser
const response = await this.fetch({ queries, fetch });
set(response);
} catch (error) {
// 6b. if there is a fetch error - deal with it
// and let observers know
data.error = error;
set(data);
}
}
}
export const data = writable();
// * ogFetch
// This function is a fetcher that returns a svelte readable subscription
// This is to be used for client side fetching of data
// public oFetch<F>({
// queries,
// }: {
// queries: GFetchQueries[];
// }): Readable<GFetchReturnWithErrors<F>> {
// // 1. Build the store and initialize it as empty and error free
// const initial = new Map();
// // Creates a store that will be used to subscribe to the data
// const store = readable(initial, this.makeSubscribe(initial, queries));
// return store as unknown as Readable<GFetchReturnWithErrors<F>>;
// }
// // A dummy function that is used to make subscribe happy.
// private unsubscribe() {
// // Nothing to do in this case
// }
// // Part of ogFetch
// // Designed this way to work will with Svelte's readable store
// private makeSubscribe(data, queries) {
// // Create a closure with access to the
// // initial data and initialization arguments
// return (set) => {
// // 3. This won't get executed until the store has
// // its first subscriber. Kick off retrieval.
// this.fetchDataForSubscription(data, set, queries);
// // We're not waiting for the response.
// // Return the unsubscribe function which doesn't do
// // do anything here (but is part of the stores protocol).
// return this.unsubscribe;
// };
// }
// // Part of ogFetch
// // Runs gFetch and updates subscription
// private async fetchDataForSubscription(data, set, queries: GFetchQueries[]) {
// try {
// // Dispatch the request for the users
// // This code is ONLY run client side, so fetch comes globally from the browser
// const response = await this.fetch({ queries, fetch });
// set(response);
// } catch (error) {
// // 6b. if there is a fetch error - deal with it
// // and let observers know
// data.error = error;
// set(data);
// }
// }
// }
// export const data = writable();
// ! IDEAS
// Mutations should take care of updating a generated writeable.
// updateTutorial()
// $tutorial is auto updated site wide
// Devtools based on svelte toy