@m1212e/rumble 0.16.34 → 0.16.37
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/out/client/generate.cjs +1 -1
- package/out/client/generate.d.cts +3 -1
- package/out/client/generate.d.cts.map +1 -1
- package/out/client/generate.d.mts +3 -1
- package/out/client/generate.d.mts.map +1 -1
- package/out/client/generate.mjs +1 -1
- package/out/client.cjs +28 -18
- package/out/client.cjs.map +1 -1
- package/out/client.d.cts +12 -4
- package/out/client.d.cts.map +1 -1
- package/out/client.d.mts +12 -4
- package/out/client.d.mts.map +1 -1
- package/out/client.mjs +28 -18
- package/out/client.mjs.map +1 -1
- package/out/{generate-B6JGM5pc.mjs → generate-CwAZQRah.mjs} +10 -8
- package/out/generate-CwAZQRah.mjs.map +1 -0
- package/out/{generate-BjPxpUd6.cjs → generate-kjqygrmB.cjs} +10 -8
- package/out/generate-kjqygrmB.cjs.map +1 -0
- package/out/index.cjs +10 -9
- package/out/index.cjs.map +1 -1
- package/out/index.d.cts +3 -1
- package/out/index.d.cts.map +1 -1
- package/out/index.d.mts +3 -1
- package/out/index.d.mts.map +1 -1
- package/out/index.mjs +5 -4
- package/out/index.mjs.map +1 -1
- package/package.json +12 -12
- package/out/generate-B6JGM5pc.mjs.map +0 -1
- package/out/generate-BjPxpUd6.cjs.map +0 -1
package/out/client.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.mjs","names":["merge"],"sources":["../lib/client/request.ts","../lib/client/liveQuery.ts","../lib/client/mutation.ts","../lib/helpers/deepMap.ts","../lib/client/nativeDateExchange.ts","../lib/client/query.ts","../lib/client/subscription.ts"],"sourcesContent":["import type { Client } from \"@urql/core\";\nimport { capitalize } from \"es-toolkit\";\nimport type {\n IntrospectionField,\n IntrospectionInputValue,\n IntrospectionQuery,\n IntrospectionType,\n} from \"graphql\";\nimport { DateResolver, DateTimeISOResolver } from \"graphql-scalars\";\nimport { createSubscriber } from \"svelte/reactivity\";\nimport {\n empty,\n map,\n merge,\n pipe,\n share,\n take,\n toObservable,\n toPromise,\n} from \"wonka\";\nimport { lazy } from \"../helpers/lazy\";\n\n// TODO: this could use some refactoring and less type check disable (remove uses of any)\n// TODO: the client needs tests\n\nexport const argsKey = \"__args\";\n\nfunction makeOperationString({\n operationVerb,\n queryName,\n schema,\n input,\n}: {\n operationVerb: \"query\" | \"subscription\" | \"mutation\";\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n}) {\n const otwQueryName = `${capitalize(queryName)}${capitalize(operationVerb)}`;\n const field = schema.__schema.types\n .filter((t) => t.kind === \"OBJECT\")\n .find((t) => t.name === schema.__schema[`${operationVerb}Type`]!.name)!\n .fields.find((f) => f.name === queryName)!;\n const types = schema.__schema.types;\n\n const selectionString = input\n ? stringifySelection({ field, selection: input, types })\n : \"\";\n\n const argumentString = input?.[argsKey]\n ? stringifyArgumentObjectToGraphql({\n args: input[argsKey],\n fieldArgs: field.args,\n types,\n })\n : \"\";\n\n return `${operationVerb} ${otwQueryName} { ${queryName}${argumentString} ${selectionString}}`;\n}\n\nexport function makeGraphQLQueryRequest({\n queryName,\n schema,\n input,\n client,\n enableSubscription = false,\n forceReactivity,\n}: {\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n client: Client;\n enableSubscription?: boolean;\n forceReactivity?: boolean;\n}) {\n let currentData: any;\n const dataProxy = lazy(\n () =>\n new Proxy(currentData, {\n get(target, prop, receiver) {\n svelteSubscriber();\n const val = Reflect.get(currentData, prop, receiver);\n if (typeof val === \"function\") {\n return val.bind(currentData);\n }\n return val;\n },\n }),\n );\n\n const svelteSubscriber = createSubscriber((update) => {\n const unsub = observable.subscribe((d) => {\n update();\n });\n return () => unsub.unsubscribe();\n });\n\n const stream = pipe(\n merge([\n client.query(\n makeOperationString({\n operationVerb: \"query\",\n queryName,\n input,\n schema,\n }),\n {},\n ),\n enableSubscription\n ? client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName,\n input,\n schema,\n }),\n {},\n )\n : empty,\n ]),\n share,\n map((v: any) => {\n const data = v.data?.[queryName];\n if (!data && v.error) {\n throw v.error;\n }\n currentData = data;\n\n if (typeof data === \"object\" && data !== null) {\n return dataProxy();\n }\n\n return data;\n }),\n );\n\n const observable = toObservable(stream);\n const promise = toPromise(\n pipe(\n stream,\n take(1),\n map((data) => {\n if (typeof data === \"object\" && data !== null) {\n if (typeof forceReactivity === \"boolean\" && forceReactivity) {\n return observable;\n }\n Object.assign(data, observable);\n return data;\n }\n return data;\n }),\n ),\n );\n\n Object.assign(promise, observable);\n return promise;\n}\n\nexport function makeGraphQLMutationRequest({\n mutationName,\n input,\n client,\n schema,\n}: {\n mutationName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n}) {\n const response = pipe(\n client.mutation(\n makeOperationString({\n operationVerb: \"mutation\",\n queryName: mutationName,\n input,\n schema,\n }),\n {},\n ),\n map((v) => {\n const data = v.data?.[mutationName];\n if (!data && v.error) {\n throw v.error;\n }\n\n return data;\n }),\n );\n\n const observable = toObservable(response);\n const promise = toPromise(pipe(response, take(1)));\n Object.assign(promise, observable);\n\n return promise;\n}\n\nexport function makeGraphQLSubscriptionRequest({\n subscriptionName,\n input,\n client,\n schema,\n}: {\n subscriptionName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n}) {\n return pipe(\n client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName: subscriptionName,\n input,\n schema,\n }),\n {},\n ),\n map((v) => {\n const data = v.data?.[subscriptionName];\n if (!data && v.error) {\n throw v.error;\n }\n\n return data;\n }),\n toObservable,\n ) as any;\n}\n\nfunction stringifySelection({\n field,\n selection,\n types,\n}: {\n selection: Record<string, any>;\n field: IntrospectionField;\n types: readonly IntrospectionType[];\n}) {\n const ret = Object.entries(selection)\n .filter(([key]) => key !== argsKey)\n .reduce((acc, [key, value]) => {\n if (typeof value === \"object\") {\n let argsString = \"\";\n if (value[argsKey]) {\n let type = field.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n if (type.kind === \"LIST\") {\n type = type.ofType;\n }\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n const referenceObject = (types as any)\n .find((t: any) => t.name === (type as any).name)\n .fields.find((f: any) => f.name === key);\n\n argsString = stringifyArgumentObjectToGraphql({\n args: value[argsKey],\n types,\n fieldArgs: referenceObject.args,\n });\n }\n\n acc += `${key}${argsString} ${stringifySelection({\n field,\n selection: value,\n types,\n })}\n`;\n } else {\n if (typeof value === \"boolean\" && value) {\n acc += `${key}\n`;\n }\n }\n return acc;\n }, \"\");\n\n return `{\n${ret} }`;\n}\n\nfunction stringifyArgumentObjectToGraphql({\n args,\n fieldArgs,\n types,\n}: {\n args: Record<any, any>;\n fieldArgs: readonly IntrospectionInputValue[];\n types: readonly IntrospectionType[];\n}) {\n const entries = Object.entries(args);\n\n if (entries.length > 0) {\n return `(${entries\n .map(([key, value]) => {\n const gqlArg = fieldArgs.find((a) => a.name === key);\n\n if (!gqlArg) {\n throw new Error(\n `Argument ${key} not found in field args list ${JSON.stringify(fieldArgs.map((a) => a.name))}`,\n );\n }\n\n return `${key}: ${stringifyArgumentValue({ arg: value, gqlArg, types })}`;\n })\n .join(\", \")})`;\n }\n\n return \"\";\n}\n\nfunction stringifyArgumentValue({\n arg,\n gqlArg,\n types,\n}: {\n arg: any;\n gqlArg: IntrospectionInputValue;\n types: readonly IntrospectionType[];\n}): string {\n if (arg === null) {\n return \"null\";\n }\n\n if (Array.isArray(arg)) {\n return `[${arg\n .map((v) => {\n return stringifyArgumentValue({\n arg: v,\n types,\n gqlArg,\n });\n })\n .join(\", \")}]`;\n }\n\n const argtype = typeof arg;\n\n if (argtype === \"object\" && !(arg instanceof Date)) {\n let type = gqlArg.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n if (type.kind === \"LIST\") {\n type = type.ofType;\n }\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n // if (type.kind !== \"INPUT_OBJECT\") {\n // throw new Error(\"Expected an INPUT_OBJECT type\");\n // }\n\n const referenceInputObject = types.find(\n (t) => t.name === (type as any).name,\n );\n\n if (!referenceInputObject) {\n throw new Error(\n `Expected an INPUT_OBJECT hit in name based lookup for name ${(type as any).name} with arg ${JSON.stringify(arg)}`,\n );\n }\n\n if (referenceInputObject.kind !== \"INPUT_OBJECT\") {\n throw new Error(\"Expected an INPUT_OBJECT hit in named based lookup\");\n }\n\n return `{ ${Object.entries(arg)\n .map(([key, value]) => {\n const subArgType = referenceInputObject.inputFields.find(\n (t) => t.name === key,\n );\n\n if (!subArgType) {\n throw new Error(\n `Expected an INPUT_OBJECT hit in named based lookup for name ${key} with arg ${referenceInputObject.inputFields.map((f) => f.name).join(\", \")}`,\n );\n }\n\n return `${key}: ${stringifyArgumentValue({ arg: value, types, gqlArg: subArgType })}`;\n })\n .join(\", \")} }`;\n }\n\n let type = gqlArg.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n if (arg instanceof Date) {\n const name = (type as any).name;\n let value: string;\n switch (name) {\n case \"Date\":\n value = DateResolver.serialize(arg);\n break;\n case \"DateTime\":\n value = DateTimeISOResolver.serialize(arg);\n break;\n default:\n throw new Error(\n `Unrecognized date type ${name}, expected Date or DateTime`,\n );\n }\n return `\"${value}\"`;\n }\n\n switch (typeof arg) {\n case \"string\":\n return type.kind === \"ENUM\" ? arg : `\"${arg}\"`;\n case \"number\":\n return `${arg}`;\n case \"bigint\":\n return `${arg}`;\n case \"boolean\":\n return `${arg}`;\n case \"symbol\":\n throw new Error(\"Cannot stringify a symbol to send as gql arg\");\n case \"undefined\":\n return \"null\";\n case \"function\":\n throw new Error(\"Cannot stringify a function to send as gql arg\");\n }\n\n throw new Error(\"Cannot stringify an unknown type\");\n}\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { makeGraphQLQueryRequest } from \"./request\";\nimport type { QueryableObjectFromGeneratedTypes } from \"./types\";\n\nexport function makeLiveQuery<\n Query extends Record<string, any>,\n ForceReactivity extends boolean = false,\n>({\n urqlClient,\n availableSubscriptions,\n forceReactivity,\n schema,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n availableSubscriptions: Set<string>;\n forceReactivity?: ForceReactivity;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input: Record<string, any>) => {\n return makeGraphQLQueryRequest({\n queryName: prop as string,\n input,\n client: urqlClient,\n enableSubscription: availableSubscriptions.has(prop as string),\n forceReactivity,\n schema,\n });\n };\n },\n },\n ) as QueryableObjectFromGeneratedTypes<Query, ForceReactivity>;\n}\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { makeGraphQLMutationRequest } from \"./request\";\nimport type { QueryableObjectFromGeneratedTypes } from \"./types\";\n\nexport function makeMutation<Mutation extends Record<string, any>>({\n urqlClient,\n schema,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input: Record<string, any>) => {\n return makeGraphQLMutationRequest({\n mutationName: prop as string,\n input,\n client: urqlClient,\n schema,\n });\n };\n },\n },\n ) as QueryableObjectFromGeneratedTypes<Mutation, false>;\n}\n","/**\n * Recursively applies a mapping function to every value in a nested structure.\n *\n * This helper will traverse arrays and plain objects (objects with `constructor === Object`)\n * and apply the provided `fn` to any value that is not an array or a plain object.\n * - Arrays are mapped to new arrays (a fresh array is returned).\n * - Plain objects are traversed and their own enumerable properties are replaced in-place.\n * - Non-plain objects (e.g. Date, Map, Set, class instances, functions) are treated as leaves\n * and passed directly to `fn`.\n * - `null` and `undefined` are passed to `fn`.\n * - Circular references are detected using a `WeakSet`. When a circular reference is encountered,\n * the original reference is returned unchanged (it is not re-traversed or re-mapped).\n *\n * Note: Because plain objects are mutated in-place, callers who need immutability should first\n * clone the object graph or pass a deep-cloned input to avoid modifying the original.\n *\n * @param input - The value to traverse and map. May be any value (primitive, array, object, etc.).\n * @param fn - A function invoked for every non-array, non-plain-object value encountered.\n * Receives the current value and should return the mapped value.\n * @returns The transformed structure: arrays are returned as new arrays, plain objects are the\n * same object instances with their property values replaced, and other values are the\n * result of `fn`.\n *\n * @example\n * // Map all primitive values to their string representation:\n * // const result = mapValuesDeep({ a: 1, b: [2, { c: 3 }] }, v => String(v));\n * // result => { a: \"1\", b: [\"2\", { c: \"3\" }] }\n *\n * @remarks\n * - Only plain objects (constructed by `Object`) are recursively traversed. This avoids\n * unintentionally iterating internal structure of class instances or built-in collections.\n * - Circular structures are preserved by returning the original reference when detected.\n */\nexport function mapValuesDeep(input: any, fn: (value: any) => any) {\n const seen = new WeakSet();\n\n const recurse = (value: any): any => {\n if (Array.isArray(value)) {\n return value.map(recurse);\n }\n\n if (\n value !== null &&\n value !== undefined &&\n typeof value === \"object\" &&\n value.constructor === Object\n ) {\n if (seen.has(value)) return value;\n seen.add(value);\n for (const key of Object.keys(value)) {\n value[key] = recurse(value[key]);\n }\n return value;\n }\n\n return fn(value);\n };\n\n return recurse(input);\n}\n","import type { Exchange } from \"@urql/core\";\nimport { map, pipe } from \"wonka\";\nimport { mapValuesDeep } from \"../helpers/deepMap\";\n\nconst dateIsoRegex =\n /^\\d{4}-\\d{2}-\\d{2}(?:[Tt ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:[Zz]|[+-]\\d{2}:\\d{2})?)?$/;\n\nexport const nativeDateExchange: Exchange = ({ client, forward }) => {\n return (operations$) => {\n const operationResult$ = forward(operations$);\n\n return pipe(\n operationResult$,\n map((r) => {\n r.data = mapValuesDeep(r.data, (value) => {\n if (typeof value !== \"string\" || !dateIsoRegex.test(value)) {\n return value;\n }\n\n const date = Date.parse(value);\n if (!Number.isNaN(date)) {\n return new Date(date);\n }\n\n return value;\n });\n return r;\n }),\n );\n };\n};\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { makeGraphQLQueryRequest } from \"./request\";\nimport type { QueryableObjectFromGeneratedTypes } from \"./types\";\n\nexport function makeQuery<\n Query extends Record<string, any>,\n ForceReactivity extends boolean = false,\n>({\n urqlClient,\n forceReactivity,\n schema,\n}: {\n urqlClient: Client;\n forceReactivity?: ForceReactivity;\n schema: IntrospectionQuery;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input?: Record<string, any>) => {\n return makeGraphQLQueryRequest({\n queryName: prop as string,\n input,\n client: urqlClient,\n enableSubscription: false,\n forceReactivity,\n schema,\n });\n };\n },\n },\n ) as QueryableObjectFromGeneratedTypes<Query, ForceReactivity>;\n}\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { argsKey, makeGraphQLSubscriptionRequest } from \"./request\";\nimport type {\n ApplySelection,\n ObjectFieldSelection,\n Subscribeable,\n} from \"./types\";\nimport type { UnArray } from \"./utilTypes\";\n\nexport function makeSubscription<Subscription extends Record<string, any>>({\n urqlClient,\n schema,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input: Record<string, any>) => {\n return makeGraphQLSubscriptionRequest({\n subscriptionName: prop as string,\n input,\n client: urqlClient,\n schema,\n });\n };\n },\n },\n ) as SubscriptionObject<Subscription>;\n}\n\n// TODO use the query util types\n\nexport type SubscriptionObject<Q> = {\n [Key in keyof Q]: QueryableObjectField<Q[Key]>;\n};\n\ntype QueryableObjectField<T> = T extends (\n p: infer QueryArgs,\n) => infer QueryResponse\n ? <\n Selected extends QueryArgs extends Record<string, any>\n ? ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>> & {\n [argsKey]: QueryArgs;\n }\n : ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>>,\n >(\n s: Selected,\n ) => QueryResponse extends null\n ? Subscribeable<\n NonNullable<QueryResponse> extends Array<any>\n ? ApplySelection<UnArray<NonNullable<QueryResponse>>, Selected>[]\n : ApplySelection<UnArray<NonNullable<QueryResponse>>, Selected>\n > | null\n : Subscribeable<\n QueryResponse extends Array<any>\n ? ApplySelection<UnArray<QueryResponse>, Selected>[]\n : ApplySelection<UnArray<QueryResponse>, Selected>\n >\n : Subscribeable<T>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.mjs","names":["merge"],"sources":["../lib/client/request.ts","../lib/client/liveQuery.ts","../lib/client/mutation.ts","../lib/helpers/deepMap.ts","../lib/client/nativeDateExchange.ts","../lib/client/query.ts","../lib/client/subscription.ts"],"sourcesContent":["import type { Client } from \"@urql/core\";\nimport { capitalize } from \"es-toolkit\";\nimport type {\n IntrospectionField,\n IntrospectionInputValue,\n IntrospectionQuery,\n IntrospectionType,\n} from \"graphql\";\nimport { DateResolver, DateTimeISOResolver } from \"graphql-scalars\";\nimport { createSubscriber } from \"svelte/reactivity\";\nimport {\n empty,\n map,\n merge,\n pipe,\n share,\n take,\n toObservable,\n toPromise,\n} from \"wonka\";\nimport { lazy } from \"../helpers/lazy\";\n\n// TODO: this could use some refactoring and less type check disable (remove uses of any)\n// TODO: the client needs tests\n\nexport const argsKey = \"__args\";\n\nfunction makeOperationString({\n operationVerb,\n queryName,\n schema,\n input,\n autoIncludeIdField,\n}: {\n operationVerb: \"query\" | \"subscription\" | \"mutation\";\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n autoIncludeIdField?: string;\n}) {\n const otwQueryName = `${capitalize(queryName)}${capitalize(operationVerb)}`;\n const field = schema.__schema.types\n .filter((t) => t.kind === \"OBJECT\")\n .find((t) => t.name === schema.__schema[`${operationVerb}Type`]!.name)!\n .fields.find((f) => f.name === queryName)!;\n const types = schema.__schema.types;\n\n const selectionString = input\n ? stringifySelection({ field, selection: input, types, autoIncludeIdField })\n : \"\";\n\n const argumentString = input?.[argsKey]\n ? stringifyArgumentObjectToGraphql({\n args: input[argsKey],\n fieldArgs: field.args,\n types,\n })\n : \"\";\n\n return `${operationVerb} ${otwQueryName} { ${queryName}${argumentString} ${selectionString}}`;\n}\n\nexport function makeGraphQLQueryRequest({\n queryName,\n schema,\n input,\n client,\n enableSubscription = false,\n forceReactivity,\n autoIncludeIdField,\n}: {\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n client: Client;\n enableSubscription?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string;\n}) {\n let currentData: any;\n const dataProxy = lazy(\n () =>\n new Proxy(currentData, {\n get(target, prop, receiver) {\n svelteSubscriber();\n const val = Reflect.get(currentData, prop, receiver);\n if (typeof val === \"function\") {\n return val.bind(currentData);\n }\n return val;\n },\n }),\n );\n\n const svelteSubscriber = createSubscriber((update) => {\n const unsub = observable.subscribe((d) => {\n update();\n });\n return () => unsub.unsubscribe();\n });\n\n const stream = pipe(\n merge([\n client.query(\n makeOperationString({\n operationVerb: \"query\",\n queryName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n ),\n enableSubscription\n ? client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n )\n : empty,\n ]),\n share,\n map((v: any) => {\n const data = v.data?.[queryName];\n if (!data && v.error) {\n throw v.error;\n }\n currentData = data;\n\n if (typeof data === \"object\" && data !== null) {\n return dataProxy();\n }\n\n return data;\n }),\n );\n\n const observable = toObservable(stream);\n const promise = toPromise(\n pipe(\n stream,\n take(1),\n map((data) => {\n if (typeof data === \"object\" && data !== null) {\n if (typeof forceReactivity === \"boolean\" && forceReactivity) {\n return observable;\n }\n Object.assign(data, observable);\n return data;\n }\n return data;\n }),\n ),\n );\n\n Object.assign(promise, observable);\n return promise;\n}\n\nexport function makeGraphQLMutationRequest({\n mutationName,\n input,\n client,\n schema,\n autoIncludeIdField,\n}: {\n mutationName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n const response = pipe(\n client.mutation(\n makeOperationString({\n operationVerb: \"mutation\",\n queryName: mutationName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n ),\n map((v) => {\n const data = v.data?.[mutationName];\n if (!data && v.error) {\n throw v.error;\n }\n\n return data;\n }),\n );\n\n const observable = toObservable(response);\n const promise = toPromise(pipe(response, take(1)));\n Object.assign(promise, observable);\n\n return promise;\n}\n\nexport function makeGraphQLSubscriptionRequest({\n subscriptionName,\n input,\n client,\n schema,\n autoIncludeIdField,\n}: {\n subscriptionName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n return pipe(\n client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName: subscriptionName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n ),\n map((v) => {\n const data = v.data?.[subscriptionName];\n if (!data && v.error) {\n throw v.error;\n }\n\n return data;\n }),\n toObservable,\n ) as any;\n}\n\nfunction stringifySelection({\n field,\n selection,\n types,\n autoIncludeIdField,\n}: {\n selection: Record<string, any>;\n field: IntrospectionField;\n types: readonly IntrospectionType[];\n autoIncludeIdField?: string;\n}) {\n if (\n autoIncludeIdField &&\n typeof selection[autoIncludeIdField] === \"undefined\"\n ) {\n selection[autoIncludeIdField] = true;\n }\n\n const ret = Object.entries(selection)\n .filter(([key]) => key !== argsKey)\n .reduce((acc, [key, value]) => {\n if (typeof value === \"object\") {\n let argsString = \"\";\n if (value[argsKey]) {\n let type = field.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n if (type.kind === \"LIST\") {\n type = type.ofType;\n }\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n const referenceObject = (types as any)\n .find((t: any) => t.name === (type as any).name)\n .fields.find((f: any) => f.name === key);\n\n argsString = stringifyArgumentObjectToGraphql({\n args: value[argsKey],\n types,\n fieldArgs: referenceObject.args,\n });\n }\n\n acc += `${key}${argsString} ${stringifySelection({\n field,\n selection: value,\n types,\n })}\n`;\n } else {\n if (typeof value === \"boolean\" && value) {\n acc += `${key}\n`;\n }\n }\n return acc;\n }, \"\");\n\n return `{\n${ret} }`;\n}\n\nfunction stringifyArgumentObjectToGraphql({\n args,\n fieldArgs,\n types,\n}: {\n args: Record<any, any>;\n fieldArgs: readonly IntrospectionInputValue[];\n types: readonly IntrospectionType[];\n}) {\n const entries = Object.entries(args);\n\n if (entries.length > 0) {\n return `(${entries\n .map(([key, value]) => {\n const gqlArg = fieldArgs.find((a) => a.name === key);\n\n if (!gqlArg) {\n throw new Error(\n `Argument ${key} not found in field args list ${JSON.stringify(fieldArgs.map((a) => a.name))}`,\n );\n }\n\n return `${key}: ${stringifyArgumentValue({ arg: value, gqlArg, types })}`;\n })\n .join(\", \")})`;\n }\n\n return \"\";\n}\n\nfunction stringifyArgumentValue({\n arg,\n gqlArg,\n types,\n}: {\n arg: any;\n gqlArg: IntrospectionInputValue;\n types: readonly IntrospectionType[];\n}): string {\n if (arg === null) {\n return \"null\";\n }\n\n if (Array.isArray(arg)) {\n return `[${arg\n .map((v) => {\n return stringifyArgumentValue({\n arg: v,\n types,\n gqlArg,\n });\n })\n .join(\", \")}]`;\n }\n\n const argtype = typeof arg;\n\n if (argtype === \"object\" && !(arg instanceof Date)) {\n let type = gqlArg.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n if (type.kind === \"LIST\") {\n type = type.ofType;\n }\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n // if (type.kind !== \"INPUT_OBJECT\") {\n // throw new Error(\"Expected an INPUT_OBJECT type\");\n // }\n\n const referenceInputObject = types.find(\n (t) => t.name === (type as any).name,\n );\n\n if (!referenceInputObject) {\n throw new Error(\n `Expected an INPUT_OBJECT hit in name based lookup for name ${(type as any).name} with arg ${JSON.stringify(arg)}`,\n );\n }\n\n if (referenceInputObject.kind !== \"INPUT_OBJECT\") {\n throw new Error(\"Expected an INPUT_OBJECT hit in named based lookup\");\n }\n\n return `{ ${Object.entries(arg)\n .map(([key, value]) => {\n const subArgType = referenceInputObject.inputFields.find(\n (t) => t.name === key,\n );\n\n if (!subArgType) {\n throw new Error(\n `Expected an INPUT_OBJECT hit in named based lookup for name ${key} with arg ${referenceInputObject.inputFields.map((f) => f.name).join(\", \")}`,\n );\n }\n\n return `${key}: ${stringifyArgumentValue({ arg: value, types, gqlArg: subArgType })}`;\n })\n .join(\", \")} }`;\n }\n\n let type = gqlArg.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n if (arg instanceof Date) {\n const name = (type as any).name;\n let value: string;\n switch (name) {\n case \"Date\":\n value = DateResolver.serialize(arg);\n break;\n case \"DateTime\":\n value = DateTimeISOResolver.serialize(arg);\n break;\n default:\n throw new Error(\n `Unrecognized date type ${name}, expected Date or DateTime`,\n );\n }\n return `\"${value}\"`;\n }\n\n switch (typeof arg) {\n case \"string\":\n return type.kind === \"ENUM\" ? arg : `\"${arg}\"`;\n case \"number\":\n return `${arg}`;\n case \"bigint\":\n return `${arg}`;\n case \"boolean\":\n return `${arg}`;\n case \"symbol\":\n throw new Error(\"Cannot stringify a symbol to send as gql arg\");\n case \"undefined\":\n return \"null\";\n case \"function\":\n throw new Error(\"Cannot stringify a function to send as gql arg\");\n }\n\n throw new Error(\"Cannot stringify an unknown type\");\n}\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { makeGraphQLQueryRequest } from \"./request\";\nimport type { QueryableObjectFromGeneratedTypes } from \"./types\";\n\nexport function makeLiveQuery<\n Query extends Record<string, any>,\n ForceReactivity extends boolean = false,\n>({\n urqlClient,\n availableSubscriptions,\n forceReactivity,\n schema,\n autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n availableSubscriptions: Set<string>;\n forceReactivity?: ForceReactivity;\n autoIncludeIdField?: string;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input: Record<string, any>) => {\n return makeGraphQLQueryRequest({\n queryName: prop as string,\n input,\n client: urqlClient,\n enableSubscription: availableSubscriptions.has(prop as string),\n forceReactivity,\n schema,\n autoIncludeIdField,\n });\n };\n },\n },\n ) as QueryableObjectFromGeneratedTypes<Query, ForceReactivity>;\n}\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { makeGraphQLMutationRequest } from \"./request\";\nimport type { QueryableObjectFromGeneratedTypes } from \"./types\";\n\nexport function makeMutation<Mutation extends Record<string, any>>({\n urqlClient,\n schema,\n autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input: Record<string, any>) => {\n return makeGraphQLMutationRequest({\n mutationName: prop as string,\n input,\n client: urqlClient,\n schema,\n autoIncludeIdField,\n });\n };\n },\n },\n ) as QueryableObjectFromGeneratedTypes<Mutation, false>;\n}\n","/**\n * Recursively applies a mapping function to every value in a nested structure.\n *\n * This helper will traverse arrays and plain objects (objects with `constructor === Object`)\n * and apply the provided `fn` to any value that is not an array or a plain object.\n * - Arrays are mapped to new arrays (a fresh array is returned).\n * - Plain objects are traversed and their own enumerable properties are replaced in-place.\n * - Non-plain objects (e.g. Date, Map, Set, class instances, functions) are treated as leaves\n * and passed directly to `fn`.\n * - `null` and `undefined` are passed to `fn`.\n * - Circular references are detected using a `WeakSet`. When a circular reference is encountered,\n * the original reference is returned unchanged (it is not re-traversed or re-mapped).\n *\n * Note: Because plain objects are mutated in-place, callers who need immutability should first\n * clone the object graph or pass a deep-cloned input to avoid modifying the original.\n *\n * @param input - The value to traverse and map. May be any value (primitive, array, object, etc.).\n * @param fn - A function invoked for every non-array, non-plain-object value encountered.\n * Receives the current value and should return the mapped value.\n * @returns The transformed structure: arrays are returned as new arrays, plain objects are the\n * same object instances with their property values replaced, and other values are the\n * result of `fn`.\n *\n * @example\n * // Map all primitive values to their string representation:\n * // const result = mapValuesDeep({ a: 1, b: [2, { c: 3 }] }, v => String(v));\n * // result => { a: \"1\", b: [\"2\", { c: \"3\" }] }\n *\n * @remarks\n * - Only plain objects (constructed by `Object`) are recursively traversed. This avoids\n * unintentionally iterating internal structure of class instances or built-in collections.\n * - Circular structures are preserved by returning the original reference when detected.\n */\nexport function mapValuesDeep(input: any, fn: (value: any) => any) {\n const seen = new WeakSet();\n\n const recurse = (value: any): any => {\n if (Array.isArray(value)) {\n return value.map(recurse);\n }\n\n if (\n value !== null &&\n value !== undefined &&\n typeof value === \"object\" &&\n value.constructor === Object\n ) {\n if (seen.has(value)) return value;\n seen.add(value);\n for (const key of Object.keys(value)) {\n value[key] = recurse(value[key]);\n }\n return value;\n }\n\n return fn(value);\n };\n\n return recurse(input);\n}\n","import type { Exchange } from \"@urql/core\";\nimport { map, pipe } from \"wonka\";\nimport { mapValuesDeep } from \"../helpers/deepMap\";\n\nconst dateIsoRegex =\n /^\\d{4}-\\d{2}-\\d{2}(?:[Tt ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:[Zz]|[+-]\\d{2}:\\d{2})?)?$/;\n\nexport const nativeDateExchange: Exchange = ({ client, forward }) => {\n return (operations$) => {\n const operationResult$ = forward(operations$);\n\n return pipe(\n operationResult$,\n map((r) => {\n r.data = mapValuesDeep(r.data, (value) => {\n if (typeof value !== \"string\" || !dateIsoRegex.test(value)) {\n return value;\n }\n\n const date = Date.parse(value);\n if (!Number.isNaN(date)) {\n return new Date(date);\n }\n\n return value;\n });\n return r;\n }),\n );\n };\n};\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { makeGraphQLQueryRequest } from \"./request\";\nimport type { QueryableObjectFromGeneratedTypes } from \"./types\";\n\nexport function makeQuery<\n Query extends Record<string, any>,\n ForceReactivity extends boolean = false,\n>({\n urqlClient,\n forceReactivity,\n schema,\n autoIncludeIdField,\n}: {\n urqlClient: Client;\n forceReactivity?: ForceReactivity;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input?: Record<string, any>) => {\n return makeGraphQLQueryRequest({\n queryName: prop as string,\n input,\n client: urqlClient,\n enableSubscription: false,\n forceReactivity,\n schema,\n autoIncludeIdField,\n });\n };\n },\n },\n ) as QueryableObjectFromGeneratedTypes<Query, ForceReactivity>;\n}\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { argsKey, makeGraphQLSubscriptionRequest } from \"./request\";\nimport type {\n ApplySelection,\n ObjectFieldSelection,\n Subscribeable,\n} from \"./types\";\nimport type { UnArray } from \"./utilTypes\";\n\nexport function makeSubscription<Subscription extends Record<string, any>>({\n urqlClient,\n schema,\n autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input: Record<string, any>) => {\n return makeGraphQLSubscriptionRequest({\n subscriptionName: prop as string,\n input,\n client: urqlClient,\n schema,\n autoIncludeIdField,\n });\n };\n },\n },\n ) as SubscriptionObject<Subscription>;\n}\n\n// TODO use the query util types\n\nexport type SubscriptionObject<Q> = {\n [Key in keyof Q]: QueryableObjectField<Q[Key]>;\n};\n\ntype QueryableObjectField<T> = T extends (\n p: infer QueryArgs,\n) => infer QueryResponse\n ? <\n Selected extends QueryArgs extends Record<string, any>\n ? ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>> & {\n [argsKey]: QueryArgs;\n }\n : ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>>,\n >(\n s: Selected,\n ) => QueryResponse extends null\n ? Subscribeable<\n NonNullable<QueryResponse> extends Array<any>\n ? ApplySelection<UnArray<NonNullable<QueryResponse>>, Selected>[]\n : ApplySelection<UnArray<NonNullable<QueryResponse>>, Selected>\n > | null\n : Subscribeable<\n QueryResponse extends Array<any>\n ? ApplySelection<UnArray<QueryResponse>, Selected>[]\n : ApplySelection<UnArray<QueryResponse>, Selected>\n >\n : Subscribeable<T>;\n"],"mappings":"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"}
|
|
@@ -4,9 +4,10 @@ import { join } from "node:path";
|
|
|
4
4
|
import { getIntrospectedSchema, minifyIntrospectionQuery } from "@urql/introspection";
|
|
5
5
|
import { uneval } from "devalue";
|
|
6
6
|
//#region lib/client/generate/client.ts
|
|
7
|
-
function generateClient({ apiUrl, rumbleImportPath, useExternalUrqlClient, availableSubscriptions, schemaPath, forceReactivity }) {
|
|
7
|
+
function generateClient({ apiUrl, rumbleImportPath, useExternalUrqlClient, availableSubscriptions, schemaPath, forceReactivity, autoIncludeId }) {
|
|
8
8
|
const imports = [];
|
|
9
9
|
let code = "";
|
|
10
|
+
const idInclude = typeof autoIncludeId === "string" ? `\n autoIncludeIdField: '${autoIncludeId}'` : autoIncludeId === true ? `\n autoIncludeIdField: 'id'` : "";
|
|
10
11
|
if (typeof useExternalUrqlClient === "string") imports.push(`import { urqlClient } from "${useExternalUrqlClient}";`);
|
|
11
12
|
imports.push(`import { Client, fetchExchange } from '@urql/core';`);
|
|
12
13
|
imports.push(`import { cacheExchange } from '@urql/exchange-graphcache';`);
|
|
@@ -42,28 +43,28 @@ export const client = {
|
|
|
42
43
|
liveQuery: makeLiveQuery<Query${forceReactivityTypeString}>({
|
|
43
44
|
urqlClient,
|
|
44
45
|
availableSubscriptions: new Set([${availableSubscriptions.values().toArray().map((value) => `"${value}"`).join(", ")}]),
|
|
45
|
-
schema,${forceReactivityFieldString}
|
|
46
|
+
schema,${forceReactivityFieldString}${idInclude}
|
|
46
47
|
}),
|
|
47
48
|
/**
|
|
48
49
|
* A mutation that can be used to e.g. create, update or delete data.
|
|
49
50
|
*/
|
|
50
51
|
mutate: makeMutation<Mutation>({
|
|
51
52
|
urqlClient,
|
|
52
|
-
schema
|
|
53
|
+
schema,${idInclude}
|
|
53
54
|
}),
|
|
54
55
|
/**
|
|
55
56
|
* A continuous stream of results that updates when the server sends new data.
|
|
56
57
|
*/
|
|
57
58
|
subscribe: makeSubscription<Subscription>({
|
|
58
59
|
urqlClient,
|
|
59
|
-
schema
|
|
60
|
+
schema,${idInclude}
|
|
60
61
|
}),
|
|
61
62
|
/**
|
|
62
63
|
* A one-time fetch of data.
|
|
63
64
|
*/
|
|
64
65
|
query: makeQuery<Query${forceReactivityTypeString}>({
|
|
65
66
|
urqlClient,
|
|
66
|
-
schema,${forceReactivityFieldString}
|
|
67
|
+
schema,${forceReactivityFieldString}${idInclude}
|
|
67
68
|
}),
|
|
68
69
|
}`;
|
|
69
70
|
return {
|
|
@@ -168,7 +169,7 @@ function makeStringLiteralUnionFromEnum(enumType) {
|
|
|
168
169
|
}
|
|
169
170
|
//#endregion
|
|
170
171
|
//#region lib/client/generate/generate.ts
|
|
171
|
-
async function generateFromSchema({ outputPath, schema, rumbleImportPath = "@m1212e/rumble/client", apiUrl, useExternalUrqlClient = false, removeExisting = true, forceReactivity }) {
|
|
172
|
+
async function generateFromSchema({ outputPath, schema, rumbleImportPath = "@m1212e/rumble/client", apiUrl, useExternalUrqlClient = false, removeExisting = true, forceReactivity, autoIncludeIdField }) {
|
|
172
173
|
if (removeExisting) try {
|
|
173
174
|
await access(outputPath);
|
|
174
175
|
await rm(outputPath, {
|
|
@@ -199,7 +200,8 @@ export type ${key} = ${rep};
|
|
|
199
200
|
useExternalUrqlClient,
|
|
200
201
|
rumbleImportPath,
|
|
201
202
|
availableSubscriptions: new Set(Object.keys(schema.getSubscriptionType()?.getFields() || {})),
|
|
202
|
-
forceReactivity
|
|
203
|
+
forceReactivity,
|
|
204
|
+
autoIncludeId: autoIncludeIdField
|
|
203
205
|
});
|
|
204
206
|
imports.push(...c.imports);
|
|
205
207
|
code += c.code;
|
|
@@ -214,4 +216,4 @@ export const schema = ${uneval(minifyIntrospectionQuery(getIntrospectedSchema(sc
|
|
|
214
216
|
//#endregion
|
|
215
217
|
export { generateFromSchema as t };
|
|
216
218
|
|
|
217
|
-
//# sourceMappingURL=generate-
|
|
219
|
+
//# sourceMappingURL=generate-CwAZQRah.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-CwAZQRah.mjs","names":[],"sources":["../lib/client/generate/client.ts","../lib/client/generate/tsRepresentation.ts","../lib/client/generate/generate.ts"],"sourcesContent":["export function generateClient({\n apiUrl,\n rumbleImportPath,\n useExternalUrqlClient,\n availableSubscriptions,\n schemaPath,\n forceReactivity,\n autoIncludeId,\n}: {\n rumbleImportPath: string;\n useExternalUrqlClient: string | boolean;\n apiUrl?: string;\n availableSubscriptions: Set<string>;\n schemaPath: string;\n forceReactivity?: boolean;\n autoIncludeId?: string | boolean;\n}) {\n const imports: string[] = [];\n let code: string = \"\";\n\n const idInclude =\n typeof autoIncludeId === \"string\"\n ? `\\n autoIncludeIdField: '${autoIncludeId}'`\n : autoIncludeId === true\n ? `\\n autoIncludeIdField: 'id'`\n : \"\";\n\n if (typeof useExternalUrqlClient === \"string\") {\n imports.push(`import { urqlClient } from \"${useExternalUrqlClient}\";`);\n }\n\n imports.push(`import { Client, fetchExchange } from '@urql/core';`);\n imports.push(`import { cacheExchange } from '@urql/exchange-graphcache';`);\n imports.push(`import { nativeDateExchange } from '${rumbleImportPath}';`);\n imports.push(`import { schema } from '${schemaPath}';`);\n\n imports.push(\n `import { makeLiveQuery, makeMutation, makeSubscription, makeQuery } from '${rumbleImportPath}';`,\n );\n\n const forceReactivityFieldString =\n typeof forceReactivity === \"boolean\" && forceReactivity\n ? `\\n forceReactivity: true`\n : \"\";\n const forceReactivityTypeString =\n typeof forceReactivity === \"boolean\" && forceReactivity ? \", true\" : \"\";\n\n code += `\nexport const defaultOptions: ConstructorParameters<Client>[0] = {\n url: \"${apiUrl ?? \"PLEASE PROVIDE A URL WHEN GENERATING OR IMPORT AN EXTERNAL URQL CLIENT\"}\",\n fetchSubscriptions: true,\n exchanges: [cacheExchange({ schema }), nativeDateExchange, fetchExchange],\n fetchOptions: {\n credentials: \"include\",\n },\n requestPolicy: \"cache-and-network\",\n}\n`;\n\n if (!useExternalUrqlClient) {\n code += `\nconst urqlClient = new Client(defaultOptions);\n`;\n }\n\n code += `\nexport const client = {\n /**\n * A query and subscription combination. First queries and if exists, also subscribes to a subscription of the same name.\n * Combines the results of both, so the result is first the query result and then live updates from the subscription.\n * Assumes that the query and subscription return the same fields as per default when using the rumble query helpers.\n * If no subscription with the same name exists, this will just be a query.\n *\n * Internally, this does some magic to make the data reactive with Svelte's reactivity system. But it can be used with other frameworks as well.\n */\n liveQuery: makeLiveQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t availableSubscriptions: new Set([${availableSubscriptions\n .values()\n .toArray()\n .map((value) => `\"${value}\"`)\n .join(\", \")}]),\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n /**\n * A mutation that can be used to e.g. create, update or delete data.\n */\n mutate: makeMutation<Mutation>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A continuous stream of results that updates when the server sends new data.\n */\n subscribe: makeSubscription<Subscription>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A one-time fetch of data.\n */\n query: makeQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n}`;\n\n return {\n imports,\n code,\n };\n}\n","import {\n type GraphQLArgument,\n GraphQLEnumType,\n GraphQLInputObjectType,\n type GraphQLInputType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLOutputType,\n GraphQLScalarType,\n} from \"graphql\";\n\ntype GraphQLType =\n | GraphQLObjectType<any, any>\n | GraphQLEnumType\n | GraphQLInputObjectType\n | GraphQLScalarType;\n\nexport function makeTSRepresentation(model: GraphQLType) {\n if (model instanceof GraphQLObjectType) {\n return makeTSTypeFromObject(model);\n } else if (model instanceof GraphQLScalarType) {\n return mapGraphqlScalarToTSTypeString(model);\n } else if (model instanceof GraphQLEnumType) {\n return makeStringLiteralUnionFromEnum(model);\n } else if (model instanceof GraphQLInputObjectType) {\n return makeTSTypeFromInputObject(model);\n }\n\n throw new Error(`Unknown model type: ${model}`);\n}\n\nfunction makeTSTypeFromObject(model: GraphQLObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSObjectTypeField(value.type, value.args));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(([key, value]) => `${key}: ${value}`)\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSTypeFromInputObject(model: GraphQLInputObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSInputObjectTypeField(value.type));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(\n ([key, value]) =>\n `${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSObjectTypeField(\n returnType: GraphQLOutputType,\n args?: readonly GraphQLArgument[],\n) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null\";\n }\n\n const isRelationType = returnType instanceof GraphQLObjectType;\n\n const argsStringMap = new Map<string, string>();\n\n for (const arg of args ?? []) {\n argsStringMap.set(arg.name, stringifyTSObjectArg(arg.type));\n }\n\n if (isRelationType) {\n const makePOptional = argsStringMap\n .entries()\n .every(([, value]) => value.includes(\"| undefined\"));\n const argsString =\n (args ?? []).length > 0\n ? `p${makePOptional ? \"?\" : \"\"}: {\n ${argsStringMap\n .entries()\n .map(\n ([key, value]) =>\n ` ${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")}\n }`\n : \"\";\n\n return `(${argsString}) => ${returnTypeString}`;\n } else {\n return returnTypeString;\n }\n}\n\nfunction makeTSInputObjectTypeField(returnType: GraphQLInputType) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null | undefined\";\n } else if (isList) {\n returnTypeString += \" | undefined\";\n }\n\n return returnTypeString;\n}\n\nfunction stringifyTSObjectArg(arg: any) {\n let ret = \"unknown\";\n let isNullable = true;\n\n if (arg instanceof GraphQLNonNull) {\n isNullable = false;\n arg = arg.ofType;\n }\n\n if (\n arg instanceof GraphQLInputObjectType ||\n arg instanceof GraphQLScalarType\n ) {\n ret = arg.name;\n }\n\n if (isNullable) {\n ret += \" | null | undefined\"; // we also want undefined in args\n }\n\n return ret;\n}\n\nfunction mapGraphqlScalarToTSTypeString(arg: any) {\n switch (arg.name) {\n case \"ID\":\n return \"string\";\n case \"String\":\n return \"string\";\n case \"Boolean\":\n return \"boolean\";\n case \"Int\":\n return \"number\";\n case \"Float\":\n return \"number\";\n case \"Date\":\n return \"Date\";\n case \"DateTime\":\n return \"Date\";\n case \"JSON\":\n return \"any\";\n default:\n return \"unknown\";\n }\n}\n\nfunction makeStringLiteralUnionFromEnum(enumType: GraphQLEnumType) {\n return enumType\n .getValues()\n .map((value) => `\"${value.name}\"`)\n .join(\" | \");\n}\n","import { access, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n getIntrospectedSchema,\n minifyIntrospectionQuery,\n} from \"@urql/introspection\";\nimport { uneval } from \"devalue\";\nimport type { GraphQLSchema } from \"graphql\";\nimport { generateClient } from \"./client\";\nimport { makeTSRepresentation } from \"./tsRepresentation\";\n\nexport async function generateFromSchema({\n outputPath,\n schema,\n rumbleImportPath = \"@m1212e/rumble/client\",\n apiUrl,\n useExternalUrqlClient = false,\n removeExisting = true,\n forceReactivity,\n autoIncludeIdField,\n}: {\n schema: GraphQLSchema;\n outputPath: string;\n rumbleImportPath?: string;\n apiUrl?: string;\n useExternalUrqlClient?: boolean | string;\n removeExisting?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string | boolean;\n}) {\n if (removeExisting) {\n try {\n await access(outputPath);\n await rm(outputPath, { recursive: true, force: true });\n } catch (_error) {}\n }\n\n await mkdir(outputPath, { recursive: true });\n\n if (!outputPath.endsWith(\"/\")) {\n outputPath += \"/\";\n }\n\n const imports: string[] = [];\n let code = \"\";\n\n const typeMap = new Map<string, any>();\n for (const [key, object] of Object.entries(schema.getTypeMap())) {\n if (key.startsWith(\"__\")) continue;\n typeMap.set(key, object);\n }\n\n for (const [key, object] of typeMap.entries()) {\n const rep = makeTSRepresentation(object);\n\n if (rep === key) {\n continue;\n }\n\n code += `\nexport type ${key} = ${rep};\n\t\t`;\n }\n\n const schemaFileName = \"schema\";\n\n const c = generateClient({\n apiUrl,\n schemaPath: `./${schemaFileName}`,\n useExternalUrqlClient,\n rumbleImportPath,\n availableSubscriptions: new Set(\n Object.keys(schema.getSubscriptionType()?.getFields() || {}),\n ),\n forceReactivity,\n autoIncludeId: autoIncludeIdField,\n });\n\n imports.push(...c.imports);\n code += c.code;\n\n await Promise.all([\n writeFile(join(outputPath, \"client.ts\"), `${imports.join(\"\\n\")}\\n${code}`),\n writeFile(\n join(outputPath, `${schemaFileName}.ts`),\n `\nimport type { IntrospectionQuery } from \"graphql\";\nexport const schema = ${uneval(minifyIntrospectionQuery(getIntrospectedSchema(schema), { includeEnums: true, includeScalars: true, includeInputs: true }))} as IntrospectionQuery`,\n ),\n ]);\n}\n"],"mappings":"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"}
|
|
@@ -5,9 +5,10 @@ let node_path = require("node:path");
|
|
|
5
5
|
let _urql_introspection = require("@urql/introspection");
|
|
6
6
|
let devalue = require("devalue");
|
|
7
7
|
//#region lib/client/generate/client.ts
|
|
8
|
-
function generateClient({ apiUrl, rumbleImportPath, useExternalUrqlClient, availableSubscriptions, schemaPath, forceReactivity }) {
|
|
8
|
+
function generateClient({ apiUrl, rumbleImportPath, useExternalUrqlClient, availableSubscriptions, schemaPath, forceReactivity, autoIncludeId }) {
|
|
9
9
|
const imports = [];
|
|
10
10
|
let code = "";
|
|
11
|
+
const idInclude = typeof autoIncludeId === "string" ? `\n autoIncludeIdField: '${autoIncludeId}'` : autoIncludeId === true ? `\n autoIncludeIdField: 'id'` : "";
|
|
11
12
|
if (typeof useExternalUrqlClient === "string") imports.push(`import { urqlClient } from "${useExternalUrqlClient}";`);
|
|
12
13
|
imports.push(`import { Client, fetchExchange } from '@urql/core';`);
|
|
13
14
|
imports.push(`import { cacheExchange } from '@urql/exchange-graphcache';`);
|
|
@@ -43,28 +44,28 @@ export const client = {
|
|
|
43
44
|
liveQuery: makeLiveQuery<Query${forceReactivityTypeString}>({
|
|
44
45
|
urqlClient,
|
|
45
46
|
availableSubscriptions: new Set([${availableSubscriptions.values().toArray().map((value) => `"${value}"`).join(", ")}]),
|
|
46
|
-
schema,${forceReactivityFieldString}
|
|
47
|
+
schema,${forceReactivityFieldString}${idInclude}
|
|
47
48
|
}),
|
|
48
49
|
/**
|
|
49
50
|
* A mutation that can be used to e.g. create, update or delete data.
|
|
50
51
|
*/
|
|
51
52
|
mutate: makeMutation<Mutation>({
|
|
52
53
|
urqlClient,
|
|
53
|
-
schema
|
|
54
|
+
schema,${idInclude}
|
|
54
55
|
}),
|
|
55
56
|
/**
|
|
56
57
|
* A continuous stream of results that updates when the server sends new data.
|
|
57
58
|
*/
|
|
58
59
|
subscribe: makeSubscription<Subscription>({
|
|
59
60
|
urqlClient,
|
|
60
|
-
schema
|
|
61
|
+
schema,${idInclude}
|
|
61
62
|
}),
|
|
62
63
|
/**
|
|
63
64
|
* A one-time fetch of data.
|
|
64
65
|
*/
|
|
65
66
|
query: makeQuery<Query${forceReactivityTypeString}>({
|
|
66
67
|
urqlClient,
|
|
67
|
-
schema,${forceReactivityFieldString}
|
|
68
|
+
schema,${forceReactivityFieldString}${idInclude}
|
|
68
69
|
}),
|
|
69
70
|
}`;
|
|
70
71
|
return {
|
|
@@ -169,7 +170,7 @@ function makeStringLiteralUnionFromEnum(enumType) {
|
|
|
169
170
|
}
|
|
170
171
|
//#endregion
|
|
171
172
|
//#region lib/client/generate/generate.ts
|
|
172
|
-
async function generateFromSchema({ outputPath, schema, rumbleImportPath = "@m1212e/rumble/client", apiUrl, useExternalUrqlClient = false, removeExisting = true, forceReactivity }) {
|
|
173
|
+
async function generateFromSchema({ outputPath, schema, rumbleImportPath = "@m1212e/rumble/client", apiUrl, useExternalUrqlClient = false, removeExisting = true, forceReactivity, autoIncludeIdField }) {
|
|
173
174
|
if (removeExisting) try {
|
|
174
175
|
await (0, node_fs_promises.access)(outputPath);
|
|
175
176
|
await (0, node_fs_promises.rm)(outputPath, {
|
|
@@ -200,7 +201,8 @@ export type ${key} = ${rep};
|
|
|
200
201
|
useExternalUrqlClient,
|
|
201
202
|
rumbleImportPath,
|
|
202
203
|
availableSubscriptions: new Set(Object.keys(schema.getSubscriptionType()?.getFields() || {})),
|
|
203
|
-
forceReactivity
|
|
204
|
+
forceReactivity,
|
|
205
|
+
autoIncludeId: autoIncludeIdField
|
|
204
206
|
});
|
|
205
207
|
imports.push(...c.imports);
|
|
206
208
|
code += c.code;
|
|
@@ -220,4 +222,4 @@ Object.defineProperty(exports, "generateFromSchema", {
|
|
|
220
222
|
}
|
|
221
223
|
});
|
|
222
224
|
|
|
223
|
-
//# sourceMappingURL=generate-
|
|
225
|
+
//# sourceMappingURL=generate-kjqygrmB.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-kjqygrmB.cjs","names":["GraphQLObjectType","GraphQLScalarType","GraphQLEnumType","GraphQLInputObjectType","GraphQLList","GraphQLNonNull"],"sources":["../lib/client/generate/client.ts","../lib/client/generate/tsRepresentation.ts","../lib/client/generate/generate.ts"],"sourcesContent":["export function generateClient({\n apiUrl,\n rumbleImportPath,\n useExternalUrqlClient,\n availableSubscriptions,\n schemaPath,\n forceReactivity,\n autoIncludeId,\n}: {\n rumbleImportPath: string;\n useExternalUrqlClient: string | boolean;\n apiUrl?: string;\n availableSubscriptions: Set<string>;\n schemaPath: string;\n forceReactivity?: boolean;\n autoIncludeId?: string | boolean;\n}) {\n const imports: string[] = [];\n let code: string = \"\";\n\n const idInclude =\n typeof autoIncludeId === \"string\"\n ? `\\n autoIncludeIdField: '${autoIncludeId}'`\n : autoIncludeId === true\n ? `\\n autoIncludeIdField: 'id'`\n : \"\";\n\n if (typeof useExternalUrqlClient === \"string\") {\n imports.push(`import { urqlClient } from \"${useExternalUrqlClient}\";`);\n }\n\n imports.push(`import { Client, fetchExchange } from '@urql/core';`);\n imports.push(`import { cacheExchange } from '@urql/exchange-graphcache';`);\n imports.push(`import { nativeDateExchange } from '${rumbleImportPath}';`);\n imports.push(`import { schema } from '${schemaPath}';`);\n\n imports.push(\n `import { makeLiveQuery, makeMutation, makeSubscription, makeQuery } from '${rumbleImportPath}';`,\n );\n\n const forceReactivityFieldString =\n typeof forceReactivity === \"boolean\" && forceReactivity\n ? `\\n forceReactivity: true`\n : \"\";\n const forceReactivityTypeString =\n typeof forceReactivity === \"boolean\" && forceReactivity ? \", true\" : \"\";\n\n code += `\nexport const defaultOptions: ConstructorParameters<Client>[0] = {\n url: \"${apiUrl ?? \"PLEASE PROVIDE A URL WHEN GENERATING OR IMPORT AN EXTERNAL URQL CLIENT\"}\",\n fetchSubscriptions: true,\n exchanges: [cacheExchange({ schema }), nativeDateExchange, fetchExchange],\n fetchOptions: {\n credentials: \"include\",\n },\n requestPolicy: \"cache-and-network\",\n}\n`;\n\n if (!useExternalUrqlClient) {\n code += `\nconst urqlClient = new Client(defaultOptions);\n`;\n }\n\n code += `\nexport const client = {\n /**\n * A query and subscription combination. First queries and if exists, also subscribes to a subscription of the same name.\n * Combines the results of both, so the result is first the query result and then live updates from the subscription.\n * Assumes that the query and subscription return the same fields as per default when using the rumble query helpers.\n * If no subscription with the same name exists, this will just be a query.\n *\n * Internally, this does some magic to make the data reactive with Svelte's reactivity system. But it can be used with other frameworks as well.\n */\n liveQuery: makeLiveQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t availableSubscriptions: new Set([${availableSubscriptions\n .values()\n .toArray()\n .map((value) => `\"${value}\"`)\n .join(\", \")}]),\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n /**\n * A mutation that can be used to e.g. create, update or delete data.\n */\n mutate: makeMutation<Mutation>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A continuous stream of results that updates when the server sends new data.\n */\n subscribe: makeSubscription<Subscription>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A one-time fetch of data.\n */\n query: makeQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n}`;\n\n return {\n imports,\n code,\n };\n}\n","import {\n type GraphQLArgument,\n GraphQLEnumType,\n GraphQLInputObjectType,\n type GraphQLInputType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLOutputType,\n GraphQLScalarType,\n} from \"graphql\";\n\ntype GraphQLType =\n | GraphQLObjectType<any, any>\n | GraphQLEnumType\n | GraphQLInputObjectType\n | GraphQLScalarType;\n\nexport function makeTSRepresentation(model: GraphQLType) {\n if (model instanceof GraphQLObjectType) {\n return makeTSTypeFromObject(model);\n } else if (model instanceof GraphQLScalarType) {\n return mapGraphqlScalarToTSTypeString(model);\n } else if (model instanceof GraphQLEnumType) {\n return makeStringLiteralUnionFromEnum(model);\n } else if (model instanceof GraphQLInputObjectType) {\n return makeTSTypeFromInputObject(model);\n }\n\n throw new Error(`Unknown model type: ${model}`);\n}\n\nfunction makeTSTypeFromObject(model: GraphQLObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSObjectTypeField(value.type, value.args));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(([key, value]) => `${key}: ${value}`)\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSTypeFromInputObject(model: GraphQLInputObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSInputObjectTypeField(value.type));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(\n ([key, value]) =>\n `${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSObjectTypeField(\n returnType: GraphQLOutputType,\n args?: readonly GraphQLArgument[],\n) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null\";\n }\n\n const isRelationType = returnType instanceof GraphQLObjectType;\n\n const argsStringMap = new Map<string, string>();\n\n for (const arg of args ?? []) {\n argsStringMap.set(arg.name, stringifyTSObjectArg(arg.type));\n }\n\n if (isRelationType) {\n const makePOptional = argsStringMap\n .entries()\n .every(([, value]) => value.includes(\"| undefined\"));\n const argsString =\n (args ?? []).length > 0\n ? `p${makePOptional ? \"?\" : \"\"}: {\n ${argsStringMap\n .entries()\n .map(\n ([key, value]) =>\n ` ${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")}\n }`\n : \"\";\n\n return `(${argsString}) => ${returnTypeString}`;\n } else {\n return returnTypeString;\n }\n}\n\nfunction makeTSInputObjectTypeField(returnType: GraphQLInputType) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null | undefined\";\n } else if (isList) {\n returnTypeString += \" | undefined\";\n }\n\n return returnTypeString;\n}\n\nfunction stringifyTSObjectArg(arg: any) {\n let ret = \"unknown\";\n let isNullable = true;\n\n if (arg instanceof GraphQLNonNull) {\n isNullable = false;\n arg = arg.ofType;\n }\n\n if (\n arg instanceof GraphQLInputObjectType ||\n arg instanceof GraphQLScalarType\n ) {\n ret = arg.name;\n }\n\n if (isNullable) {\n ret += \" | null | undefined\"; // we also want undefined in args\n }\n\n return ret;\n}\n\nfunction mapGraphqlScalarToTSTypeString(arg: any) {\n switch (arg.name) {\n case \"ID\":\n return \"string\";\n case \"String\":\n return \"string\";\n case \"Boolean\":\n return \"boolean\";\n case \"Int\":\n return \"number\";\n case \"Float\":\n return \"number\";\n case \"Date\":\n return \"Date\";\n case \"DateTime\":\n return \"Date\";\n case \"JSON\":\n return \"any\";\n default:\n return \"unknown\";\n }\n}\n\nfunction makeStringLiteralUnionFromEnum(enumType: GraphQLEnumType) {\n return enumType\n .getValues()\n .map((value) => `\"${value.name}\"`)\n .join(\" | \");\n}\n","import { access, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n getIntrospectedSchema,\n minifyIntrospectionQuery,\n} from \"@urql/introspection\";\nimport { uneval } from \"devalue\";\nimport type { GraphQLSchema } from \"graphql\";\nimport { generateClient } from \"./client\";\nimport { makeTSRepresentation } from \"./tsRepresentation\";\n\nexport async function generateFromSchema({\n outputPath,\n schema,\n rumbleImportPath = \"@m1212e/rumble/client\",\n apiUrl,\n useExternalUrqlClient = false,\n removeExisting = true,\n forceReactivity,\n autoIncludeIdField,\n}: {\n schema: GraphQLSchema;\n outputPath: string;\n rumbleImportPath?: string;\n apiUrl?: string;\n useExternalUrqlClient?: boolean | string;\n removeExisting?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string | boolean;\n}) {\n if (removeExisting) {\n try {\n await access(outputPath);\n await rm(outputPath, { recursive: true, force: true });\n } catch (_error) {}\n }\n\n await mkdir(outputPath, { recursive: true });\n\n if (!outputPath.endsWith(\"/\")) {\n outputPath += \"/\";\n }\n\n const imports: string[] = [];\n let code = \"\";\n\n const typeMap = new Map<string, any>();\n for (const [key, object] of Object.entries(schema.getTypeMap())) {\n if (key.startsWith(\"__\")) continue;\n typeMap.set(key, object);\n }\n\n for (const [key, object] of typeMap.entries()) {\n const rep = makeTSRepresentation(object);\n\n if (rep === key) {\n continue;\n }\n\n code += `\nexport type ${key} = ${rep};\n\t\t`;\n }\n\n const schemaFileName = \"schema\";\n\n const c = generateClient({\n apiUrl,\n schemaPath: `./${schemaFileName}`,\n useExternalUrqlClient,\n rumbleImportPath,\n availableSubscriptions: new Set(\n Object.keys(schema.getSubscriptionType()?.getFields() || {}),\n ),\n forceReactivity,\n autoIncludeId: autoIncludeIdField,\n });\n\n imports.push(...c.imports);\n code += c.code;\n\n await Promise.all([\n writeFile(join(outputPath, \"client.ts\"), `${imports.join(\"\\n\")}\\n${code}`),\n writeFile(\n join(outputPath, `${schemaFileName}.ts`),\n `\nimport type { IntrospectionQuery } from \"graphql\";\nexport const schema = ${uneval(minifyIntrospectionQuery(getIntrospectedSchema(schema), { includeEnums: true, includeScalars: true, includeInputs: true }))} as IntrospectionQuery`,\n ),\n ]);\n}\n"],"mappings":"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"}
|
package/out/index.cjs
CHANGED
|
@@ -22,7 +22,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
22
22
|
}) : target, mod));
|
|
23
23
|
//#endregion
|
|
24
24
|
const require_lazy = require("./lazy-DT--QoPa.cjs");
|
|
25
|
-
const require_generate = require("./generate-
|
|
25
|
+
const require_generate = require("./generate-kjqygrmB.cjs");
|
|
26
26
|
let graphql = require("graphql");
|
|
27
27
|
let _escape_tech_graphql_armor = require("@escape.tech/graphql-armor");
|
|
28
28
|
let _graphql_yoga_plugin_disable_introspection = require("@graphql-yoga/plugin-disable-introspection");
|
|
@@ -35,17 +35,17 @@ let drizzle_orm = require("drizzle-orm");
|
|
|
35
35
|
let drizzle_orm_casing = require("drizzle-orm/casing");
|
|
36
36
|
let drizzle_orm_pg_core = require("drizzle-orm/pg-core");
|
|
37
37
|
let pluralize = require("pluralize");
|
|
38
|
-
pluralize = __toESM(pluralize);
|
|
38
|
+
pluralize = __toESM(pluralize, 1);
|
|
39
39
|
let drizzle_orm_mysql_core = require("drizzle-orm/mysql-core");
|
|
40
40
|
let drizzle_orm_sqlite_core = require("drizzle-orm/sqlite-core");
|
|
41
41
|
let _pothos_core = require("@pothos/core");
|
|
42
|
-
_pothos_core = __toESM(_pothos_core);
|
|
42
|
+
_pothos_core = __toESM(_pothos_core, 1);
|
|
43
43
|
let _pothos_plugin_drizzle = require("@pothos/plugin-drizzle");
|
|
44
|
-
_pothos_plugin_drizzle = __toESM(_pothos_plugin_drizzle);
|
|
44
|
+
_pothos_plugin_drizzle = __toESM(_pothos_plugin_drizzle, 1);
|
|
45
45
|
let _pothos_plugin_smart_subscriptions = require("@pothos/plugin-smart-subscriptions");
|
|
46
|
-
_pothos_plugin_smart_subscriptions = __toESM(_pothos_plugin_smart_subscriptions);
|
|
46
|
+
_pothos_plugin_smart_subscriptions = __toESM(_pothos_plugin_smart_subscriptions, 1);
|
|
47
47
|
let _pothos_plugin_tracing = require("@pothos/plugin-tracing");
|
|
48
|
-
_pothos_plugin_tracing = __toESM(_pothos_plugin_tracing);
|
|
48
|
+
_pothos_plugin_tracing = __toESM(_pothos_plugin_tracing, 1);
|
|
49
49
|
let graphql_scalars = require("graphql-scalars");
|
|
50
50
|
//#region lib/types/rumbleError.ts
|
|
51
51
|
/**
|
|
@@ -209,7 +209,7 @@ function mapNullFieldsToUndefined(obj) {
|
|
|
209
209
|
}
|
|
210
210
|
//#endregion
|
|
211
211
|
//#region package.json
|
|
212
|
-
var version = "0.16.
|
|
212
|
+
var version = "0.16.37";
|
|
213
213
|
//#endregion
|
|
214
214
|
//#region lib/helpers/mergeFilters.ts
|
|
215
215
|
function mergeFilters(filterA, filterB) {
|
|
@@ -736,7 +736,7 @@ const createWhereArgImplementer = ({ db, schemaBuilder, enumImplementer }) => {
|
|
|
736
736
|
//#endregion
|
|
737
737
|
//#region lib/client/client.ts
|
|
738
738
|
const clientCreatorImplementer = ({ builtSchema }) => {
|
|
739
|
-
const clientCreator = async ({ apiUrl, outputPath, rumbleImportPath, useExternalUrqlClient, removeExisting, forceReactivity }) => {
|
|
739
|
+
const clientCreator = async ({ apiUrl, outputPath, rumbleImportPath, useExternalUrqlClient, removeExisting, forceReactivity, autoIncludeIdField = false }) => {
|
|
740
740
|
if (process.env.NODE_ENV !== "development") console.warn(`Running rumble client generation in non development mode. Are you sure this is correct? Called from ${__filename} with arguments: ${JSON.stringify({
|
|
741
741
|
outputPath,
|
|
742
742
|
apiUrl,
|
|
@@ -751,7 +751,8 @@ const clientCreatorImplementer = ({ builtSchema }) => {
|
|
|
751
751
|
apiUrl,
|
|
752
752
|
useExternalUrqlClient,
|
|
753
753
|
removeExisting,
|
|
754
|
-
forceReactivity
|
|
754
|
+
forceReactivity,
|
|
755
|
+
autoIncludeIdField
|
|
755
756
|
});
|
|
756
757
|
};
|
|
757
758
|
return clientCreator;
|