@contember/bindx-client
Advanced tools
| export { querySpecToGraphQl, unwrapPaginateResult, type QuerySpecContext } from './querySpecToGraphQl.js'; | ||
| export { buildTypedArgs, buildListArgs, buildGetArgs, buildCreateArgs, buildUpdateArgs, buildUpsertArgs, buildDeleteArgs } from './buildTypedArgs.js'; | ||
| export { mutationFragments, buildMutationSelection } from './mutationFragments.js'; | ||
| export { mutationFragments, buildMutationSelection, buildNodeSelectionFromMutationData } from './mutationFragments.js'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACzG,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrJ,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACzG,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrJ,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,kCAAkC,EAAE,MAAM,wBAAwB,CAAA"} |
@@ -1,6 +0,2 @@ | ||
| import { GraphQlFragment } from '@contember/graphql-builder'; | ||
| /** | ||
| * Standard GraphQL fragments for Contember mutation responses. | ||
| * These are fixed parts of the Contember Content API schema. | ||
| */ | ||
| import { GraphQlFragment, type GraphQlSelectionSet } from '@contember/graphql-builder'; | ||
| export declare const mutationFragments: Record<string, GraphQlFragment>; | ||
@@ -11,3 +7,10 @@ /** | ||
| */ | ||
| export declare function buildMutationSelection(operation: 'create' | 'update' | 'upsert' | 'delete', nodeSelection?: import('@contember/graphql-builder').GraphQlSelectionSet): import('@contember/graphql-builder').GraphQlSelectionSet; | ||
| export declare function buildMutationSelection(operation: 'create' | 'update' | 'upsert' | 'delete', nodeSelection?: GraphQlSelectionSet): GraphQlSelectionSet; | ||
| /** | ||
| * Builds a GraphQL node selection set from mutation data. | ||
| * Recursively traverses create/update operations to request `id` and scalar | ||
| * fields at each nesting level. Scalar fields are needed for content-based | ||
| * matching of nested entity IDs after persist. | ||
| */ | ||
| export declare function buildNodeSelectionFromMutationData(data: Record<string, unknown>): GraphQlSelectionSet; | ||
| //# sourceMappingURL=mutationFragments.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"mutationFragments.d.ts","sourceRoot":"","sources":["../../src/graphql/mutationFragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,eAAe,EAAgD,MAAM,4BAA4B,CAAA;AAExH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA+B7D,CAAA;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACpD,aAAa,CAAC,EAAE,OAAO,4BAA4B,EAAE,mBAAmB,GACtE,OAAO,4BAA4B,EAAE,mBAAmB,CAmB1D"} | ||
| {"version":3,"file":"mutationFragments.d.ts","sourceRoot":"","sources":["../../src/graphql/mutationFragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,eAAe,EAGf,KAAK,mBAAmB,EACxB,MAAM,4BAA4B,CAAA;AAEnC,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA+B7D,CAAA;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACpD,aAAa,CAAC,EAAE,mBAAmB,GACjC,mBAAmB,CAmBrB;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CACjD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,mBAAmB,CAkBrB"} |
+1
-1
@@ -32,3 +32,3 @@ /** | ||
| export { buildTypedArgs, buildListArgs, buildGetArgs, buildCreateArgs, buildUpdateArgs, buildUpsertArgs, buildDeleteArgs } from './graphql/index.js'; | ||
| export { mutationFragments, buildMutationSelection } from './graphql/index.js'; | ||
| export { mutationFragments, buildMutationSelection, buildNodeSelectionFromMutationData } from './graphql/index.js'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} |
+1
-1
| { | ||
| "name": "@contember/bindx-client", | ||
| "version": "0.1.30", | ||
| "version": "0.1.31", | ||
| "description": "Type-safe content client for Contember — schema, selection builder, query builder, and GraphQL execution", | ||
@@ -5,0 +5,0 @@ "type": "module", |
| export { querySpecToGraphQl, unwrapPaginateResult, type QuerySpecContext } from './querySpecToGraphQl.js' | ||
| export { buildTypedArgs, buildListArgs, buildGetArgs, buildCreateArgs, buildUpdateArgs, buildUpsertArgs, buildDeleteArgs } from './buildTypedArgs.js' | ||
| export { mutationFragments, buildMutationSelection } from './mutationFragments.js' | ||
| export { mutationFragments, buildMutationSelection, buildNodeSelectionFromMutationData } from './mutationFragments.js' |
@@ -1,7 +0,9 @@ | ||
| import { GraphQlField, GraphQlFragment, GraphQlFragmentSpread, GraphQlInlineFragment } from '@contember/graphql-builder' | ||
| import { | ||
| GraphQlField, | ||
| GraphQlFragment, | ||
| GraphQlFragmentSpread, | ||
| GraphQlInlineFragment, | ||
| type GraphQlSelectionSet, | ||
| } from '@contember/graphql-builder' | ||
| /** | ||
| * Standard GraphQL fragments for Contember mutation responses. | ||
| * These are fixed parts of the Contember Content API schema. | ||
| */ | ||
| export const mutationFragments: Record<string, GraphQlFragment> = { | ||
@@ -46,5 +48,5 @@ MutationError: new GraphQlFragment('MutationError', '_MutationError', [ | ||
| operation: 'create' | 'update' | 'upsert' | 'delete', | ||
| nodeSelection?: import('@contember/graphql-builder').GraphQlSelectionSet, | ||
| ): import('@contember/graphql-builder').GraphQlSelectionSet { | ||
| const items: import('@contember/graphql-builder').GraphQlSelectionSet = [ | ||
| nodeSelection?: GraphQlSelectionSet, | ||
| ): GraphQlSelectionSet { | ||
| const items: GraphQlSelectionSet = [ | ||
| new GraphQlField(null, 'ok'), | ||
@@ -68,1 +70,100 @@ new GraphQlField(null, 'errorMessage'), | ||
| } | ||
| /** | ||
| * Builds a GraphQL node selection set from mutation data. | ||
| * Recursively traverses create/update operations to request `id` and scalar | ||
| * fields at each nesting level. Scalar fields are needed for content-based | ||
| * matching of nested entity IDs after persist. | ||
| */ | ||
| export function buildNodeSelectionFromMutationData( | ||
| data: Record<string, unknown>, | ||
| ): GraphQlSelectionSet { | ||
| const fields: GraphQlSelectionSet = [new GraphQlField(null, 'id')] | ||
| for (const [fieldName, value] of Object.entries(data)) { | ||
| if (value === null || value === undefined) continue | ||
| if (Array.isArray(value)) { | ||
| const nested = buildSelectionFromOps(value) | ||
| if (nested) fields.push(new GraphQlField(null, fieldName, {}, nested)) | ||
| } else if (typeof value === 'object') { | ||
| const nested = buildSelectionFromCreateOrUpdate(value as Record<string, unknown>) | ||
| if (nested) fields.push(new GraphQlField(null, fieldName, {}, nested)) | ||
| } else { | ||
| fields.push(new GraphQlField(null, fieldName)) | ||
| } | ||
| } | ||
| return fields | ||
| } | ||
| /** | ||
| * Extracts the inner data from a create or update operation and recurses. | ||
| */ | ||
| function buildSelectionFromCreateOrUpdate( | ||
| op: Record<string, unknown>, | ||
| ): GraphQlSelectionSet | undefined { | ||
| if ('create' in op && typeof op['create'] === 'object' && op['create'] !== null) { | ||
| return buildNodeSelectionFromMutationData(op['create'] as Record<string, unknown>) | ||
| } | ||
| if ('update' in op && typeof op['update'] === 'object' && op['update'] !== null) { | ||
| const update = op['update'] as Record<string, unknown> | ||
| const data = ('data' in update ? update['data'] : update) as Record<string, unknown> | ||
| return buildNodeSelectionFromMutationData(data) | ||
| } | ||
| return undefined | ||
| } | ||
| /** | ||
| * Merges selections from all create/update operations in a hasMany array. | ||
| * Collects the union of scalar + relation fields across all operations. | ||
| */ | ||
| function buildSelectionFromOps(ops: unknown[]): GraphQlSelectionSet | undefined { | ||
| const scalarFields = new Set<string>() | ||
| const nestedFields = new Map<string, Record<string, unknown>>() | ||
| let hasOps = false | ||
| for (const item of ops) { | ||
| if (typeof item !== 'object' || item === null) continue | ||
| const op = item as Record<string, unknown> | ||
| const innerData = | ||
| ('create' in op && typeof op['create'] === 'object' && op['create'] !== null) | ||
| ? op['create'] as Record<string, unknown> | ||
| : ('update' in op && typeof op['update'] === 'object' && op['update'] !== null) | ||
| ? (() => { const u = op['update'] as Record<string, unknown>; return ('data' in u ? u['data'] : u) as Record<string, unknown> })() | ||
| : null | ||
| if (!innerData) continue | ||
| hasOps = true | ||
| for (const [key, value] of Object.entries(innerData)) { | ||
| if (value === null || value === undefined) continue | ||
| if (typeof value === 'object') { | ||
| nestedFields.set(key, value as Record<string, unknown>) | ||
| } else { | ||
| scalarFields.add(key) | ||
| } | ||
| } | ||
| } | ||
| if (!hasOps) return undefined | ||
| const fields: GraphQlSelectionSet = [new GraphQlField(null, 'id')] | ||
| for (const fieldName of scalarFields) { | ||
| fields.push(new GraphQlField(null, fieldName)) | ||
| } | ||
| for (const [fieldName, value] of nestedFields) { | ||
| if (Array.isArray(value)) { | ||
| const nested = buildSelectionFromOps(value) | ||
| if (nested) fields.push(new GraphQlField(null, fieldName, {}, nested)) | ||
| } else { | ||
| const nested = buildSelectionFromCreateOrUpdate(value as Record<string, unknown>) | ||
| if (nested) fields.push(new GraphQlField(null, fieldName, {}, nested)) | ||
| } | ||
| } | ||
| return fields | ||
| } |
+1
-1
@@ -134,2 +134,2 @@ /** | ||
| export { buildTypedArgs, buildListArgs, buildGetArgs, buildCreateArgs, buildUpdateArgs, buildUpsertArgs, buildDeleteArgs } from './graphql/index.js' | ||
| export { mutationFragments, buildMutationSelection } from './graphql/index.js' | ||
| export { mutationFragments, buildMutationSelection, buildNodeSelectionFromMutationData } from './graphql/index.js' |
232454
1.6%4922
1.84%