@theseam/ui-common 1.0.2-beta.15 → 1.0.2-beta.16

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.
@@ -551,14 +551,14 @@ const queryProcessingLink = new ApolloLink((operation, forward) => {
551
551
  *
552
552
  * @example
553
553
  * // Simple static mapping
554
- * const mapSorts = createSortsMapper<'id' | 'name'>({
554
+ * const mapSorts = createSortsMapper<MyRow>({
555
555
  * id: 'id',
556
556
  * name: 'name',
557
557
  * })
558
558
  *
559
559
  * @example
560
560
  * // Dynamic mapping with context access
561
- * const mapSorts = createSortsMapper<'id' | 'name' | 'computed'>({
561
+ * const mapSorts = createSortsMapper<MyRow>({
562
562
  * id: 'id',
563
563
  * name: 'name',
564
564
  * computed: (prop, context) =>
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-graphql.mjs","sources":["../../../projects/ui-common/graphql/apollo-links/log-query-link.ts","../../../projects/ui-common/graphql/models/direction.ts","../../../projects/ui-common/graphql/models/hints-kind.ts","../../../projects/ui-common/graphql/models/query-processing-config.ts","../../../projects/ui-common/graphql/models/variable.ts","../../../projects/ui-common/graphql/utils/contains-variable.ts","../../../projects/ui-common/graphql/utils/gql-var.ts","../../../projects/ui-common/graphql/utils/inline-variables.ts","../../../projects/ui-common/graphql/utils/parse-comments.ts","../../../projects/ui-common/graphql/utils/parse-hints.ts","../../../projects/ui-common/graphql/utils/remove-variable-definition.ts","../../../projects/ui-common/graphql/utils/remove-variable-definitions-not-defined.ts","../../../projects/ui-common/graphql/utils/remove-variable.ts","../../../projects/ui-common/graphql/utils/to-gql.ts","../../../projects/ui-common/graphql/utils/hints-tokens-containing-hint.ts","../../../projects/ui-common/graphql/hints/transformers/inline-variable.transformer.ts","../../../projects/ui-common/graphql/hints/transformers/remove-not-defined.transformer.ts","../../../projects/ui-common/graphql/hints/inline-variable.hint-def.ts","../../../projects/ui-common/graphql/hints/remove-not-defined.hint-def.ts","../../../projects/ui-common/graphql/hints/index.ts","../../../projects/ui-common/graphql/apollo-links/query-processing-link.ts","../../../projects/ui-common/graphql/datatable/create-sorts-mapper.ts","../../../projects/ui-common/graphql/datatable/get-page-info.ts","../../../projects/ui-common/graphql/datatable/create-page-info-observable.ts","../../../projects/ui-common/graphql/datatable/map-filter-states.ts","../../../projects/ui-common/graphql/datatable/map-page-info.ts","../../../projects/ui-common/graphql/datatable/datatable-helpers.ts","../../../projects/ui-common/graphql/datatable/datatable-graphql-query-ref.ts","../../../projects/ui-common/graphql/datatable/datatable-graphql.service.ts","../../../projects/ui-common/graphql/datatable/map-search-date-columns-data-filter-state-to-gql.ts","../../../projects/ui-common/graphql/datatable/map-search-numeric-columns-data-filter-state-to-gql.ts","../../../projects/ui-common/graphql/datatable/map-search-text-columns-data-filter-state-to-gql.ts","../../../projects/ui-common/graphql/testing/base-schema-fragment.ts","../../../projects/ui-common/graphql/testing/filter-where.ts","../../../projects/ui-common/graphql/testing/skip-and-take.ts","../../../projects/ui-common/graphql/testing/sort-items.ts","../../../projects/ui-common/graphql/testing/filtered-results.ts","../../../projects/ui-common/graphql/testing/mock-datatable.ts","../../../projects/ui-common/graphql/testing/check-records-have-value.ts","../../../projects/ui-common/graphql/testing/mock-graphql-link.ts","../../../projects/ui-common/graphql/testing/create-mock-apollo-testing-provider.ts","../../../projects/ui-common/graphql/testing/data/simple-gql-test-data.ts","../../../projects/ui-common/graphql/theseam-ui-common-graphql.ts"],"sourcesContent":["import { ApolloLink } from '@apollo/client/core'\nimport { print } from 'graphql'\n\nexport interface LogQueryLinkOptions {\n beforeStyles?: string\n afterStyles?: string\n}\n\n/**\n * Wraps an Apollo link and logs the operation state immediately before and\n * after the wrapped link processes it.\n *\n * Useful for inspecting what `queryProcessingLink` does to a query:\n *\n * ```ts\n * link: concat(\n * logQueryLink(queryProcessingLink),\n * httpLink,\n * )\n * ```\n *\n * The output uses `console.log` with optional CSS styles so each snapshot\n * is easy to distinguish in the browser console. Tree-shaking will remove\n * this from production builds when it is not imported.\n */\nexport function logQueryLink(\n inner: ApolloLink,\n options?: LogQueryLinkOptions,\n): ApolloLink {\n const beforeStyles = options?.beforeStyles ?? 'color: cyan'\n const afterStyles = options?.afterStyles ?? 'color: limegreen'\n\n const beforeLink = new ApolloLink((operation, forward) => {\n // eslint-disable-next-line no-console\n console.log(\n `%c~~~BEFORE\\n${print(operation.query)}\\n${JSON.stringify(operation.variables, null, 2)}`,\n beforeStyles,\n )\n return forward(operation)\n })\n\n const afterLink = new ApolloLink((operation, forward) => {\n // eslint-disable-next-line no-console\n console.log(\n `%c~~~AFTER\\n${print(operation.query)}\\n${JSON.stringify(operation.variables, null, 2)}`,\n afterStyles,\n )\n return forward(operation)\n })\n\n return ApolloLink.from([beforeLink, inner, afterLink])\n}\n","export class GQLDirection {\n constructor(public readonly direction: string) {}\n public static readonly ASC = new GQLDirection('ASC')\n public static readonly DESC = new GQLDirection('DESC')\n}\n","import { Kind } from 'graphql'\n\nexport enum HintsKind {\n OperationDefinition = Kind.OPERATION_DEFINITION,\n Field = Kind.FIELD,\n VariableDefinition = Kind.VARIABLE_DEFINITION,\n Variable = Kind.VARIABLE,\n Argument = Kind.ARGUMENT,\n}\n","export const DEFAULT_TO_REMOVE_ON_UNDEFINED = ['where', 'order']\n\nexport interface QueryProcessingVariablesConfig {\n removeIfNotDefined?: string[]\n removeIfNotUsed?: string[]\n inline?: string[]\n}\n\nexport interface QueryProcessingConfig {\n variables: QueryProcessingVariablesConfig\n\n /**\n * If skip and take are found, they will be removed\n */\n disablePaging?: boolean\n}\n","export class GQLVariable {\n constructor(\n public readonly name: string,\n public readonly type: string,\n ) {}\n}\n","import { BREAK, DocumentNode, ValueNode, visit } from 'graphql/language'\n\nexport function containsVariable(\n node: DocumentNode | ValueNode,\n variableName: string,\n) {\n let found = false\n\n visit(node, {\n Variable(variable) {\n if (variableName === variable.name.value) {\n found = true\n return BREAK\n }\n },\n })\n\n return found\n}\n","export function gqlVar(varName: string): { gqlVar: string } {\n return { gqlVar: `$${varName}` }\n}\n","import { isDevMode } from '@angular/core'\n\nimport { hasProperty } from '@theseam/ui-common/utils'\nimport { BREAK, DocumentNode, ValueNode, visit } from 'graphql'\n\nexport function inlineVariable(\n query: DocumentNode,\n variableName: string,\n variableValue: ValueNode,\n): DocumentNode {\n // return visit(query, {\n // VariableDefinition(node) {\n // if (variableName === node.variable.name.value) {\n // console.log(node)\n // // found = true\n // console.log('insert', variableValue)\n // // return BREAK\n\n // // node.defaultValue = variableValue\n // return {\n // ...node,\n // defaultValue: variableValue\n // }\n // }\n // }\n // })\n\n // console.log('~inlineVariable', variableName, variableValue)\n\n // TODO: Decide if this is a good solution.\n if (\n hasProperty(variableValue as any, 'value') &&\n (variableValue as any).value === 'undefined'\n ) {\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn(\n `Ignoring attempt to inline '${variableName}', because it is undefined.`,\n )\n }\n return visit(query, {\n SelectionSet(selectionSetNode) {\n return visit(selectionSetNode, {\n Variable(variableNode) {\n if (variableName === variableNode.name.value) {\n return null\n }\n },\n })\n },\n })\n }\n\n return visit(query, {\n SelectionSet(selectionSetNode) {\n return visit(selectionSetNode, {\n Variable(variableNode) {\n if (variableName === variableNode.name.value) {\n return variableValue\n }\n },\n })\n },\n })\n}\n","import { DocumentNode, Token } from 'graphql/language'\n\n// Based on Prettier's comment parsing.\n//\n// Source: https://github.com/prettier/prettier/blob/4e46f92b8648c7f25de62bfaf4368aa3f2e588d9/src/language-graphql/parser-graphql.js#L6\nexport function parseComments(ast: DocumentNode): Token[] {\n const comments: Token[] = []\n\n if (ast.loc === undefined) {\n return comments\n }\n\n const startToken = ast.loc.startToken\n let next = startToken.next\n while (next !== null && next.kind !== '<EOF>') {\n if (next.kind === 'Comment') {\n Object.assign(next, {\n // The Comment token's column starts _after_ the `#`,\n // but we need to make sure the node captures the `#`\n column: next.column - 1,\n })\n comments.push(next)\n }\n next = next.next\n }\n\n return comments\n}\n","import {\n ArgumentNode,\n BREAK,\n DocumentNode,\n FieldNode,\n OperationDefinitionNode,\n parse,\n Token,\n VariableDefinitionNode,\n VariableNode,\n visit,\n} from 'graphql'\n\nimport { notNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport { HintsKind, HintsToken } from '../models'\nimport { parseComments } from './parse-comments'\n\nexport const HINT_PREFIX_REGEX = /^\\s*@gql-hint:.+/\nexport const HINT_NAMES_CAPTURE_REGEX = /^\\s*@gql-hint:([a-zA-z-\\d\\s]+)$/\n\n/**\n * If AST loc has startToken prop then return same AST else reparse with config\n * to contain comments and loc at each node.\n */\nexport function parseAst(ast: DocumentNode): DocumentNode {\n if (ast.loc === undefined) {\n throw Error(`Expected AST to have loc.`)\n }\n\n if (ast.loc.startToken !== undefined) {\n return ast\n }\n\n return parse(ast.loc.source)\n}\n\nexport function isCommentToken(token: Token): boolean {\n return token.kind === 'Comment'\n}\n\nexport function isHintToken(token: Token): boolean {\n return (\n (isCommentToken(token) &&\n (token.value?.match(HINT_PREFIX_REGEX)?.length || 0) > 0) ||\n false\n )\n}\n\nexport function isInlineComment(token: Token): boolean {\n return (\n isCommentToken(token) &&\n token.prev !== null &&\n token.prev.line === token.line\n )\n}\n\nexport function hintNamesFromHintToken(token: Token): string[] {\n const grp = token.value?.match(HINT_NAMES_CAPTURE_REGEX)\n if (grp === null || grp === undefined || grp.length === 0) {\n return []\n }\n return grp[1]\n .split(' ')\n .map((x) => x.trim())\n .filter((x) => x.length > 0)\n}\n\nexport function getTokenAppliesTo(token: Token): Token | null {\n if (isInlineComment(token)) {\n return token.prev\n }\n\n let t = token.next\n if (t?.kind === '$' && t.next?.kind === 'Name') {\n t = t.next\n }\n return t\n}\n\nexport function createHintsToken(\n token: Token,\n node: HintsToken['node'],\n kind: HintsKind,\n): HintsToken {\n return {\n node,\n hints: hintNamesFromHintToken(token),\n kind,\n }\n}\n\nexport function getHintsToken(\n token: Token,\n ast: DocumentNode,\n): HintsToken | null {\n // console.log('getHintsToken', token)\n const appliesTo = getTokenAppliesTo(token)\n if (appliesTo === null) {\n return null\n }\n\n let appliesToNode: HintsToken | null = null\n visit(ast, {\n OperationDefinition(node: OperationDefinitionNode) {\n if (node.loc?.start === appliesTo.start) {\n appliesToNode = createHintsToken(\n token,\n node,\n HintsKind.OperationDefinition,\n )\n return BREAK\n }\n },\n VariableDefinition(node: VariableDefinitionNode) {\n if (node.variable.name.loc?.start === appliesTo.start) {\n appliesToNode = createHintsToken(\n token,\n node,\n HintsKind.VariableDefinition,\n )\n return BREAK\n }\n },\n Variable(node: VariableNode) {\n if (node.name.loc?.start === appliesTo.start) {\n appliesToNode = createHintsToken(token, node, HintsKind.Variable)\n return BREAK\n }\n },\n Argument(node: ArgumentNode) {\n if (node.name.loc?.start === appliesTo.start) {\n appliesToNode = createHintsToken(token, node, HintsKind.Argument)\n return BREAK\n }\n },\n Field(node: FieldNode) {\n if (node.name.loc?.start === appliesTo.start) {\n appliesToNode = createHintsToken(token, node, HintsKind.Field)\n return BREAK\n }\n },\n })\n return appliesToNode\n}\n\nexport function parseHints(ast: DocumentNode): HintsToken[] {\n const _ast = parseAst(ast)\n // console.log('_ast', _ast)\n return parseComments(_ast)\n .filter(isHintToken)\n .map((r) => getHintsToken(r, _ast))\n .filter(notNullOrUndefined)\n}\n","import { DocumentNode, visit } from 'graphql'\n\nexport function removeVariableDefinition(\n query: DocumentNode,\n variableName: string,\n): DocumentNode {\n return visit(query, {\n VariableDefinition: {\n enter(variable) {\n const name = variable.variable.name.value\n if (name === variableName) {\n return null\n }\n },\n },\n })\n}\n","import { Operation } from '@apollo/client'\nimport { DocumentNode, OperationDefinitionNode, visit } from 'graphql'\n\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nexport function removeVariableDefinitionsNotDefined(\n query: DocumentNode,\n node: OperationDefinitionNode,\n variables: Operation['variables'],\n) {\n return visit(query, {\n OperationDefinition(opDef) {\n if (opDef === node) {\n return visit(opDef, {\n VariableDefinition(varDef) {\n const name = varDef.variable.name.value\n if (isNullOrUndefined(variables[name])) {\n return null\n }\n },\n })\n }\n },\n })\n}\n","import { DocumentNode, visit } from 'graphql'\n\nexport function removeVariable(\n query: DocumentNode,\n variableName: string,\n): DocumentNode {\n return visit(query, {\n VariableDefinition: {\n enter(variable) {\n const name = variable.variable.name.value\n if (name === variableName) {\n return null\n }\n },\n },\n Argument: {\n enter(variable) {\n const name = variable.name.value\n if (name === variableName) {\n return null\n }\n },\n },\n })\n}\n","import { GQLDirection } from '../models'\n\n// Naive initial implementation. This is intended for dynamic values, such as\n// sorting and filtering. If you are defining a schema, use the gql template\n// function from 'apollo-angular'.\n//\n// TODO: Try to find a maintained library that will handle this. Ideally a\n// type-safe one, but that is becoming surprisingly harder to find than I\n// expected for GraphQL.\nexport function toGQL(json: any): string {\n // Handle primitive top-level values so callers can pass non-objects (e.g.\n // when inlining a String or Int variable directly into a query argument).\n if (json === null || json === undefined) {\n return 'null'\n }\n if (typeof json === 'string') {\n return `\"${json}\"`\n }\n if (typeof json === 'number' || typeof json === 'boolean') {\n return `${json}`\n }\n if (json instanceof GQLDirection) {\n return `${json.direction}`\n }\n if (Array.isArray(json)) {\n return `[${json.map((v) => toGQL(v)).join(',')}]`\n }\n\n const props: string[] = Object.keys(json).map((prop) => {\n const value = json[prop]\n let resultValue: string | undefined\n if (typeof value === 'string') {\n resultValue = `\"${value}\"`\n } else if (value instanceof GQLDirection) {\n resultValue = `${value.direction}`\n } else if (Array.isArray(value)) {\n resultValue = `[${value.map((v) => toGQL(v)).join(',')}]`\n } else if (typeof value === 'object') {\n if (Object.prototype.hasOwnProperty.call(value, 'gqlVar')) {\n resultValue = `${value.gqlVar}`\n } else {\n resultValue = toGQL(value)\n }\n } else {\n resultValue = `${value}`\n }\n if (typeof resultValue !== 'string') {\n throw Error(`Unexpected value.`)\n }\n return `${prop}: ${resultValue}`\n })\n return `{${props.join(', ')}}`\n}\n","import { HintsToken } from '../models'\n\nexport function hintsTokensContainingHint(\n hintsTokens: HintsToken[],\n hint: string,\n): HintsToken[] {\n return hintsTokens.filter((r) => r.hints.indexOf(hint) !== -1)\n}\n","import { parseValue, VariableDefinitionNode, VariableNode } from 'graphql'\n\nimport { withoutProperty } from '@theseam/ui-common/utils'\n\nimport {\n HintsKind,\n HintsToken,\n HintTransformer,\n HintTransformOperation,\n} from '../../models'\nimport { inlineVariable, removeVariableDefinition, toGQL } from '../../utils'\n\n/**\n * Inlines the variable's current value directly into the query AST and removes\n * the variable definition from the parameter list. The variable is also\n * removed from the operation's variables map so it is not sent to the server.\n *\n * Applies to VariableDefinition (comment above the `$var` in the parameter\n * list) or Variable (inline comment beside a `$var` usage in the query body).\n */\nexport const inlineVariableTransformer: HintTransformer = (\n operation: HintTransformOperation,\n hintsToken: HintsToken,\n): HintTransformOperation => {\n let varName: string | null = null\n\n if (hintsToken.kind === HintsKind.VariableDefinition) {\n varName = (hintsToken.node as VariableDefinitionNode).variable.name.value\n } else if (hintsToken.kind === HintsKind.Variable) {\n varName = (hintsToken.node as VariableNode).name.value\n }\n\n if (varName === null) {\n return operation\n }\n\n const varValue = operation.variables[varName]\n const newVariables = withoutProperty(operation.variables, varName)\n let query = removeVariableDefinition(operation.query, varName)\n query = inlineVariable(query, varName, parseValue(toGQL(varValue)))\n\n return { query, variables: newVariables }\n}\n","import { OperationDefinitionNode } from 'graphql'\n\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n HintsToken,\n HintTransformer,\n HintTransformOperation,\n} from '../../models'\nimport { removeVariable } from '../../utils'\n\n/**\n * Removes every variable from the query that is null or undefined in the\n * operation's variables map. Both the variable definition (from the parameter\n * list) and any argument usages in the query body are removed so the resulting\n * document remains valid.\n */\nexport const removeNotDefinedTransformer: HintTransformer = (\n operation: HintTransformOperation,\n hintsToken: HintsToken,\n): HintTransformOperation => {\n const operationNode = hintsToken.node as OperationDefinitionNode\n\n const undefinedVarNames = (operationNode.variableDefinitions ?? [])\n .filter((varDef) =>\n isNullOrUndefined(operation.variables[varDef.variable.name.value]),\n )\n .map((varDef) => varDef.variable.name.value)\n\n let query = operation.query\n for (const varName of undefinedVarNames) {\n query = removeVariable(query, varName)\n }\n\n return { query, variables: operation.variables }\n}\n","import { HintDefinition, HintsKind } from '../models'\nimport { inlineVariableTransformer } from './transformers/inline-variable.transformer'\n\n/**\n * Maps variable value to gql and inlines it into the query.\n */\nexport const inlineVariableHintDef: HintDefinition = {\n name: 'inline-variable',\n appliesTo: [HintsKind.Variable, HintsKind.VariableDefinition],\n transformer: inlineVariableTransformer,\n}\n","import { HintDefinition, HintsKind } from '../models'\nimport { removeNotDefinedTransformer } from './transformers/remove-not-defined.transformer'\n\n/**\n * Remove the variable from the query if it is not defined in the operation\n * variables.\n */\nexport const removeNotDefinedHintDef: HintDefinition = {\n name: 'remove-not-defined',\n appliesTo: [HintsKind.OperationDefinition],\n transformer: removeNotDefinedTransformer,\n}\n","// /**\n// * Remove the variable from the query if it is not defined in the operation\n// * variables.\n// *\n// * Applies to: OperationDefinition\n// */\n// export const GQL_HINT_REMOVE_NOT_DEFINED = 'remove-not-defined'\n\n// /**\n// * Maps variable value to gql and inlines it into the query.\n// *\n// * Applies to: Variable, VariableDefinition\n// */\n// export const GQL_HINT_INLINE_VARIABLE = 'inline-variable'\n\n// /**\n// * Remove variable definition from the query if it is not used by the operation.\n// *\n// * Applies to: VariableDefinition\n// */\n// // export const GQL_HINT_REMOVE_IF_NOT_USED = 'remove-if-not-used'\n\n// export const GQL_HINTS = [\n// // GQL_HINT_REMOVE_IF_NOT_USED,\n// GQL_HINT_REMOVE_NOT_DEFINED,\n// GQL_HINT_INLINE_VARIABLE\n// ]\n\nexport * from './transformers/inline-variable.transformer'\nexport * from './transformers/remove-not-defined.transformer'\n\nexport * from './inline-variable.hint-def'\nexport * from './remove-not-defined.hint-def'\n","import { ApolloLink } from '@apollo/client/core'\nimport { isNullOrUndefined, withoutProperty } from '@theseam/ui-common/utils'\nimport { parseValue } from 'graphql'\n\nimport { inlineVariableHintDef, removeNotDefinedHintDef } from '../hints'\nimport { QueryProcessingConfig } from '../models'\nimport {\n containsVariable,\n hintsTokensContainingHint,\n inlineVariable,\n parseAst,\n parseHints,\n removeVariable,\n removeVariableDefinition,\n toGQL,\n} from '../utils'\n\n/**\n * Apollo link that transforms GraphQL operations before they are sent.\n *\n * Two mechanisms are supported and can be combined freely:\n *\n * **Hint-based** — place `# @gql-hint: <name>` comments directly in the query.\n * Supported hints:\n * - `remove-not-defined` on the operation definition: removes every variable\n * whose value is null/undefined (definition + argument usage).\n * - `inline-variable` on a variable definition or usage: substitutes the\n * variable's current value directly into the query AST and removes it from\n * the variables map.\n *\n * **Config-based** — pass a `QueryProcessingConfig` via Apollo context under\n * the key `queryProcessingConfig`. Supported options:\n * - `variables.removeIfNotDefined`: remove named variables when null/undefined.\n * - `variables.removeIfNotUsed`: remove named variable definitions when the\n * variable is not referenced anywhere in the (possibly already-transformed)\n * query body.\n * - `variables.inline`: inline named variables into the query AST.\n *\n * Hints are applied first, then config-based processing.\n */\nexport const queryProcessingLink = new ApolloLink((operation, forward) => {\n const context = operation.getContext()\n const queryProcessingConfig: QueryProcessingConfig =\n context.queryProcessingConfig ?? {}\n\n // Reparse to ensure token/comment info is present for hint parsing.\n let _ast = parseAst(operation.query)\n const rules = parseHints(_ast)\n\n // ---- Hint: remove-not-defined ----------------------------------------\n for (const hintsToken of hintsTokensContainingHint(\n rules,\n removeNotDefinedHintDef.name,\n )) {\n const result = removeNotDefinedHintDef.transformer!(\n { query: _ast, variables: operation.variables },\n hintsToken,\n )\n _ast = result.query\n operation.variables = result.variables\n }\n\n // ---- Hint: inline-variable --------------------------------------------\n for (const hintsToken of hintsTokensContainingHint(\n rules,\n inlineVariableHintDef.name,\n )) {\n const result = inlineVariableHintDef.transformer!(\n { query: _ast, variables: operation.variables },\n hintsToken,\n )\n _ast = result.query\n operation.variables = result.variables\n }\n\n // ---- Config: removeIfNotDefined ---------------------------------------\n for (const varName of queryProcessingConfig?.variables?.removeIfNotDefined ??\n []) {\n if (isNullOrUndefined(operation.variables[varName])) {\n _ast = removeVariable(_ast, varName)\n }\n }\n\n // ---- Config: removeIfNotUsed -----------------------------------------\n // Intentionally runs after removeIfNotDefined so that variables which were\n // only referenced inside another (now-removed) variable can be cleaned up.\n for (const varName of queryProcessingConfig?.variables?.removeIfNotUsed ??\n []) {\n if (!containsVariable(_ast, varName)) {\n _ast = removeVariable(_ast, varName)\n }\n }\n\n // ---- Config: inline --------------------------------------------------\n for (const varName of queryProcessingConfig?.variables?.inline ?? []) {\n const varValue = operation.variables[varName]\n operation.variables = withoutProperty(operation.variables, varName)\n _ast = removeVariableDefinition(_ast, varName)\n _ast = inlineVariable(_ast, varName, parseValue(toGQL(varValue)))\n }\n\n operation.query = _ast\n\n return forward(operation)\n})\n","import { isDevMode } from '@angular/core'\n\nimport { SortItem } from '@theseam/ui-common/datatable'\n\nimport { SortsMapper, SortsMapperResult } from './datatable-helpers'\nimport { MapperContext } from './mapper-context'\n\n/**\n * A field mapping entry for {@link createSortsMapper}:\n *\n * - `string` – the GQL sort-field name to emit for this column\n * - `null` – column is not sortable; the sort item will be dropped\n * - `function` – `(prop, context) => string | null` for dynamic mapping\n * with access to {@link MapperContext}\n */\nexport type SortsMapperFieldEntry =\n | string\n | null\n | ((prop: string, context: MapperContext) => string | null)\n\n/**\n * A map from every column prop name in `TColumns` to its GQL sort field.\n *\n * Requiring every key at compile time provides exhaustiveness checking\n * without needing a switch statement.\n */\nexport type SortsMapperFieldMap<TColumns extends string> = {\n [K in TColumns]: SortsMapperFieldEntry\n}\n\n/**\n * Creates a {@link SortsMapper} from a declarative field-name map.\n *\n * Each key must correspond to a datatable column `prop` value. The value\n * controls how that column's sort is translated to a GQL sort object:\n *\n * - `string` – emits `{ [gqlField]: 'ASC' | 'DESC' }`\n * - `null` – column is not sortable; the sort item is dropped\n * - `function` – called with `(prop, context)` and may return a field\n * name or `null` to drop the item dynamically\n *\n * In dev mode an error is thrown when a sort item's `prop` is not present\n * in the map. In production the item is silently dropped.\n *\n * @example\n * // Simple static mapping\n * const mapSorts = createSortsMapper<'id' | 'name'>({\n * id: 'id',\n * name: 'name',\n * })\n *\n * @example\n * // Dynamic mapping with context access\n * const mapSorts = createSortsMapper<'id' | 'name' | 'computed'>({\n * id: 'id',\n * name: 'name',\n * computed: (prop, context) =>\n * context.extraVariables.useAlt ? 'altField' : prop,\n * })\n */\nexport function createSortsMapper<TColumns extends string>(\n fieldMap: SortsMapperFieldMap<TColumns>,\n): SortsMapper {\n return (sorts: SortItem[], context: MapperContext): SortsMapperResult => {\n const result: SortsMapperResult = []\n\n for (const s of sorts) {\n const prop = s?.prop as TColumns\n\n if (!(prop in fieldMap)) {\n if (isDevMode()) {\n throw new Error(\n `createSortsMapper: no mapping found for column prop \"${prop}\". ` +\n `Add an entry to the field map or set the value to null to ignore it.`,\n )\n }\n continue\n }\n\n const entry = fieldMap[prop]\n const dir = s?.dir?.toUpperCase()\n\n const gqlField =\n typeof entry === 'function' ? entry(prop, context) : entry\n\n if (gqlField === null) continue\n\n result.push({ [gqlField as string]: dir })\n }\n\n return result\n }\n}\n","import { TheSeamPageInfo } from '@theseam/ui-common/datatable'\n\nimport { GqlDatatableAccessor } from '../models/gql-datatable-accessor'\n\nexport const DEFAULT_PAGE_SIZE = 20\n\nexport function getPageInfo(\n datatable: GqlDatatableAccessor | null | undefined,\n defaultPageSize: number = DEFAULT_PAGE_SIZE,\n): TheSeamPageInfo {\n return {\n offset: datatable?.ngxDatatable?.offset ?? 0,\n pageSize: datatable?.ngxDatatable?.pageSize ?? defaultPageSize,\n limit: datatable?.ngxDatatable?.limit,\n count: datatable?.ngxDatatable?.count ?? 0,\n }\n}\n","import { EMPTY, merge, Observable, Subscriber } from 'rxjs'\nimport { auditTime, map, switchMap, tap } from 'rxjs/operators'\n\nimport { TheSeamPageInfo } from '@theseam/ui-common/datatable'\nimport { notNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport { GqlDatatableAccessor } from '../models/gql-datatable-accessor'\nimport { getPageInfo } from './get-page-info'\n\nexport function createPageInfoObservable(\n datatable$: Observable<GqlDatatableAccessor | null | undefined>,\n defaultPageSize: number = 20,\n): Observable<TheSeamPageInfo> {\n return new Observable<TheSeamPageInfo>(\n (subscriber: Subscriber<TheSeamPageInfo>) => {\n let prev: TheSeamPageInfo | null = null\n const handlePageInfo = (pageInfo: TheSeamPageInfo | null) => {\n if (!_isPageInfoSame(prev, pageInfo)) {\n if (pageInfo !== null) {\n subscriber.next(pageInfo)\n }\n prev = pageInfo\n }\n }\n\n const dtSub = datatable$\n .pipe(\n switchMap((dt) => {\n if (!notNullOrUndefined(dt)) {\n handlePageInfo(null)\n return EMPTY\n }\n\n handlePageInfo(getPageInfo(dt, defaultPageSize))\n\n // `page` does not emit when the page size changes (e.g. on\n // window resize). Merging the `resize` event is a workaround.\n const resize$ = dt.resize.pipe(\n auditTime(100),\n map(() => dt.pageInfo),\n )\n return merge(dt.page, resize$).pipe(tap((p) => handlePageInfo(p)))\n }),\n )\n .subscribe()\n\n return () => {\n dtSub.unsubscribe()\n }\n },\n )\n}\n\nfunction _isPageInfoSame(\n prev: TheSeamPageInfo | null,\n curr: TheSeamPageInfo | null,\n): boolean {\n if (\n prev?.offset === curr?.offset &&\n prev?.pageSize === curr?.pageSize &&\n prev?.limit === curr?.limit &&\n prev?.count === curr?.count\n ) {\n return true\n }\n return false\n}\n","import { isDevMode } from '@angular/core'\nimport { from, Observable } from 'rxjs'\nimport { concatMap, filter, take, toArray } from 'rxjs/operators'\n\nimport { DataFilterState } from '@theseam/ui-common/data-filters'\nimport {\n notNullOrUndefined,\n wrapIntoObservable,\n} from '@theseam/ui-common/utils'\n\nimport { MapperContext } from './mapper-context'\n\nexport interface FilterStateMapperVariables {\n [name: string]: any\n}\n\nexport interface FilterStateMapperFilter {\n and?: FilterStateMapperFilter[]\n or?: FilterStateMapperFilter[]\n [name: string]: any\n}\n\nexport type FilterStateMapperResult = {\n filter: FilterStateMapperFilter\n variables: FilterStateMapperVariables\n} | null\n\n/**\n * A filter input type constrained to the field names of `T`.\n *\n * Use this as the building block for {@link TypedFilterStateMapperResult}\n * when you want compile-time checking that filter conditions only reference\n * real fields in the corresponding GQL input type.\n *\n * @example\n * type MyFilter = TypedFilterInput<'id' | 'name'>\n * // { id?: any; name?: any }\n */\nexport type TypedFilterInput<T extends string | number | symbol> = {\n [name in T]?: any\n}\n\n/**\n * A type-safe alternative to {@link FilterStateMapperResult} that constrains\n * filter field names to the union `T`.\n *\n * The filter can be either a direct field-condition object or a combined\n * object with `or`/`and` arrays:\n *\n * ```ts\n * // Direct field condition\n * { filter: { status: { eq: 'active' } }, variables: {} }\n *\n * // Combined (OR)\n * { filter: { or: [{ id: { lt: 30 } }, { name: { contains: 'foo' } }] }, variables: {} }\n * ```\n *\n * Because TypeScript uses structural typing, a mapper that returns\n * `TypedFilterStateMapperResult<'id' | 'name'>` is assignable to the\n * untyped {@link FilterStateMapper} signature without any cast.\n */\nexport type TypedFilterStateMapperResult<T extends string | number | symbol> = {\n filter:\n | {\n or?: TypedFilterInput<T>[]\n and?: TypedFilterInput<T>[]\n }\n | TypedFilterInput<T>\n variables: FilterStateMapperVariables\n} | null\n\nexport type FilterStateMapper = (\n filterState: DataFilterState,\n context: MapperContext,\n) =>\n | FilterStateMapperResult\n | Promise<FilterStateMapperResult>\n | Observable<FilterStateMapperResult>\nexport interface FilterStateMappers {\n [filterName: string]: FilterStateMapper\n}\n\nfunction resolveMapper(\n filterState: DataFilterState,\n filterStateMappers: FilterStateMappers,\n context: MapperContext,\n): Observable<FilterStateMapperResult> {\n const mapper = filterStateMappers[filterState.name]\n if (!notNullOrUndefined(mapper)) {\n throw Error(`Mapper for filter '${filterState.name}' not found.`)\n }\n\n return wrapIntoObservable(mapper(filterState, context)).pipe(\n // Require each mapper to complete.\n take(1),\n )\n}\n\nfunction resolveMappers(\n filterStates: DataFilterState[],\n filterStateMappers: FilterStateMappers,\n context: MapperContext,\n): Observable<Exclude<FilterStateMapperResult, null>[]> {\n return from(filterStates).pipe(\n concatMap((filterState) =>\n resolveMapper(filterState, filterStateMappers, context),\n ),\n filter(notNullOrUndefined),\n toArray(),\n )\n}\n\n/**\n * Combines multiple active filter results with AND so that all conditions must\n * be satisfied simultaneously (e.g. a search filter AND a status filter).\n */\nfunction mergeFilters(\n filters: FilterStateMapperFilter[],\n): FilterStateMapperFilter {\n return { and: filters }\n}\n\n/**\n * Merges variable objects.\n *\n * NOTE: This does not try to deep merge, so if two objects define the same\n * variable then the last object's value will be in the merged object. *In\n * devMode an error will be thrown.*\n */\nfunction mergeVariables(\n variableObjects: FilterStateMapperVariables[],\n): FilterStateMapperVariables {\n const variables: FilterStateMapperVariables = {}\n\n for (const v of variableObjects) {\n const props = Object.keys(v)\n\n if (isDevMode()) {\n for (const p of props) {\n if (notNullOrUndefined(variables[p]) && variables[p] !== v[p]) {\n // eslint-disable-next-line no-console\n console.warn(\n `Multiple filters adding the same variable with a different result. This could cause unexpected results.`,\n )\n break\n }\n }\n }\n\n for (const p of props) {\n variables[p] = v[p]\n }\n }\n\n return variables\n}\n\nfunction isEmptyFilter(mapperFilter: FilterStateMapperFilter): boolean {\n return Object.keys(mapperFilter).length === 0\n}\n\nexport async function mapFilterStates(\n filterStates: DataFilterState[],\n filterStateMappers: FilterStateMappers,\n context: MapperContext,\n): Promise<FilterStateMapperResult> {\n const results: FilterStateMapperFilter[] =\n (await resolveMappers(\n filterStates,\n filterStateMappers,\n context,\n ).toPromise()) ?? []\n\n if (results.length === 0) {\n return null\n }\n\n const filters = results\n .map((r: any) => r.filter)\n .filter(notNullOrUndefined)\n .filter((mapperFilter) => !isEmptyFilter(mapperFilter))\n\n const variableObjs = results\n .map((r: any) => r.variables)\n .filter(notNullOrUndefined)\n\n return {\n filter: mergeFilters(filters),\n variables: mergeVariables(variableObjs),\n }\n}\n","import { TheSeamPageInfo } from '@theseam/ui-common/datatable'\n\nexport interface PageInfoMapperResult {\n skip: number\n take: number\n}\nexport type PageInfoMapper = (pageInfo: TheSeamPageInfo) => PageInfoMapperResult\n\n/**\n * Maps to a range that fetches the page before the current page, the current\n * page, and the page after the current page.\n */\nexport function mapPageInfo(pageInfo: TheSeamPageInfo): PageInfoMapperResult {\n const _skip = pageInfo.offset * pageInfo.pageSize\n\n const skipWithWindowOffset = _skip - pageInfo.pageSize\n const takeOffset = skipWithWindowOffset < 0 ? skipWithWindowOffset : 0\n\n return {\n skip: Math.max(skipWithWindowOffset, 0),\n take: Math.max(pageInfo.pageSize * 3 + takeOffset, 0),\n }\n}\n","import {\n combineLatest,\n defer,\n EMPTY,\n Observable,\n of,\n Subject,\n Subscription,\n} from 'rxjs'\nimport {\n auditTime,\n catchError,\n distinctUntilChanged,\n finalize,\n map,\n shareReplay,\n startWith,\n switchMap,\n tap,\n} from 'rxjs/operators'\n\nimport { wrapIntoObservable } from '@theseam/ui-common/utils'\nimport { SortItem } from '@theseam/ui-common/datatable'\n\nimport { GqlDatatableAccessor, EmptyObject } from '../models'\nimport { createPageInfoObservable } from './create-page-info-observable'\nimport { DatatableGraphQLQueryRef } from './datatable-graphql-query-ref'\nimport { FilterStateMappers, mapFilterStates } from './map-filter-states'\nimport { mapPageInfo } from './map-page-info'\nimport { MapperContext } from './mapper-context'\n\nexport type SortsMapperResult = { [name: string]: any }[]\nexport type SortsMapper = (\n sorts: SortItem[],\n context: MapperContext,\n) =>\n | SortsMapperResult\n | Promise<SortsMapperResult>\n | Observable<SortsMapperResult>\n\nexport function observeRowsWithGqlInputsHandling<\n TData,\n TRow,\n GqlVariables extends EmptyObject,\n>(\n queryRef: DatatableGraphQLQueryRef<TData, GqlVariables, TRow>,\n rows: Observable<TRow[]>,\n datatable:\n | Observable<GqlDatatableAccessor | undefined>\n | Promise<GqlDatatableAccessor | undefined>\n | GqlDatatableAccessor,\n extraVariables:\n | Observable<Partial<GqlVariables>>\n | Promise<Partial<GqlVariables>>\n | Partial<GqlVariables>,\n sortsMapper: SortsMapper,\n filterStateMappers: FilterStateMappers,\n): Observable<TRow[]> {\n const datatable$ = wrapIntoObservable(datatable)\n const extraVariables$ =\n wrapIntoObservable<Partial<GqlVariables>>(extraVariables)\n\n // Only emit page changes past the first when paging is enabled. When paging\n // is disabled, all data is already in the buffer so there is no need to\n // re-query on page changes.\n const pageInfo$ = defer(() => {\n let firstEmit = true\n return createPageInfoObservable(datatable$).pipe(\n switchMap((pageInfo) => {\n if (!firstEmit && _isPagingDisabled(queryRef)) {\n return EMPTY\n }\n firstEmit = false\n return of(pageInfo)\n }),\n map(mapPageInfo),\n )\n })\n\n // Combines extraVariables and pageInfo, then derives sorts and filter state.\n // auditTime(0) debounces rapid synchronous emissions (e.g. at startup) so\n // only one setVariables call is made per event-loop turn.\n const handleQueryInputs = combineLatest([extraVariables$, pageInfo$]).pipe(\n auditTime(0),\n switchMap(([_extraVariables, pageInfo]) => {\n const context: MapperContext = { extraVariables: _extraVariables }\n\n const sorts$ = _createSortsObservable(datatable$).pipe(\n switchMap((m) => wrapIntoObservable(sortsMapper(m, context))),\n )\n\n const filterInfo$ = _createFilterStatesObservable(datatable$).pipe(\n switchMap((x) => mapFilterStates(x, filterStateMappers, context)),\n // TODO: Remove when the datatable fixes the bug causing it to emit more than it should.\n distinctUntilChanged((x, y) => JSON.stringify(x) === JSON.stringify(y)),\n )\n\n return combineLatest([sorts$, filterInfo$]).pipe(\n map(([sorts, filterInfo]) => ({\n extraVariables: _extraVariables,\n pageInfo,\n sorts,\n filterInfo,\n })),\n )\n }),\n tap((v) => {\n queryRef.setVariables({\n ...(v.extraVariables || {}),\n ...v.pageInfo,\n ...(v.sorts.length > 0 ? { order: v.sorts } : {}),\n ...(v.filterInfo?.variables || {}),\n ...(v.filterInfo?.filter ? { where: v.filterInfo.filter } : {}),\n } as any)\n }),\n )\n\n return defer(() => {\n // Observe the optional refresh-button patch attached externally to the\n // datatable instance. When the user triggers a refresh, refetch the data.\n let refreshBtnSub: Subscription = Subscription.EMPTY\n refreshBtnSub = datatable$\n .pipe(\n switchMap((dt) => {\n if (!dt || !(dt as any).__refreshPatch) {\n return EMPTY\n }\n return (dt as any).__refreshPatch.refreshTriggered.pipe(\n tap(() => queryRef.refetch(undefined, true)),\n )\n }),\n )\n .subscribe()\n\n // Bridge query-input changes to row emissions via a Subject so that the\n // rows observable is only subscribed once (on the first input change) and\n // then continues to receive updates as the live query produces new data.\n const _emitted = new Subject<boolean>()\n const handlerSub = handleQueryInputs.subscribe(() => _emitted.next(true))\n\n return _emitted.pipe(\n distinctUntilChanged(),\n switchMap(() => rows),\n finalize(() => {\n handlerSub.unsubscribe()\n refreshBtnSub.unsubscribe()\n }),\n )\n }).pipe(\n catchError((err) => {\n // eslint-disable-next-line no-console\n console.error(err)\n return of([] as TRow[])\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n}\n\nfunction _createSortsObservable(\n datatable$: Observable<GqlDatatableAccessor | undefined>,\n) {\n // NOTE: There is a bug in our datatable wrapper that isn't propagating\n // external sorting changes to the wrapped datatable component, which we observe\n // sort events from. This workaround observes our wrapper's internal column\n // change events, which emit all changes to columns that our datatable tracks,\n // and reads sorts from our wrapper when externalSorting is enabled.\n const _observeSortsWorkaround = (\n dt: GqlDatatableAccessor,\n ): Observable<SortItem[]> => {\n if (!(dt as any)._columnsAlterationsManager) {\n // Fallback for environments (e.g. tests) where the internal manager\n // is not present.\n return dt.sort.pipe(\n map((v) => v.sorts),\n startWith(dt.sorts),\n )\n }\n return (dt as any)._columnsAlterationsManager.changes.pipe(\n map(() => (dt.externalSorting ? (dt as any)._sorts : dt.sorts)),\n startWith(dt.externalSorting ? (dt as any)._sorts : dt.sorts),\n )\n }\n\n return datatable$.pipe(\n switchMap((dt) => (dt ? _observeSortsWorkaround(dt) : of([]))),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n}\n\nfunction _createFilterStatesObservable(\n datatable$: Observable<GqlDatatableAccessor | undefined>,\n) {\n return datatable$.pipe(switchMap((dt) => (dt ? dt.filterStates : of([]))))\n}\n\nfunction _isPagingDisabled<TData, GqlVariables extends EmptyObject, TRow>(\n queryRef: DatatableGraphQLQueryRef<TData, GqlVariables, TRow>,\n): boolean {\n return queryRef.getQueryProcessingConfig()?.disablePaging ?? false\n}\n","import {\n BehaviorSubject,\n defer,\n from,\n isObservable,\n Observable,\n of,\n Subject,\n Subscriber,\n} from 'rxjs'\nimport {\n auditTime,\n filter,\n finalize,\n map,\n shareReplay,\n skip,\n startWith,\n switchMap,\n take,\n tap,\n} from 'rxjs/operators'\n\nimport {\n ApolloQueryResult,\n DocumentNode,\n NetworkStatus,\n TypedDocumentNode,\n} from '@apollo/client/core'\nimport {\n hasProperty,\n notNullOrUndefined,\n withoutProperties,\n} from '@theseam/ui-common/utils'\n\n// `isNetworkRequestInFlight` is only exported from the ES module subpath\n// `@apollo/client/core/networkStatus`, which can't be loaded by Jest's CJS\n// transform. Reimplementing it here keeps the logic accessible in tests.\nfunction isNetworkRequestInFlight(networkStatus?: NetworkStatus): boolean {\n return networkStatus ? networkStatus < NetworkStatus.ready : false\n}\nimport { QueryRef } from 'apollo-angular'\nimport { WatchQueryOptions } from 'apollo-angular'\nimport { GraphQLFormattedError } from 'graphql'\n\nimport { QueryProcessingConfig, EmptyObject } from '../models'\nimport { DEFAULT_PAGE_SIZE } from './get-page-info'\n\nexport interface DatatableGraphQLDataMapperResult<TRow = EmptyObject> {\n rows: TRow[]\n\n /**\n * If data is paged, this is the total number of unpaged rows.\n */\n totalCount?: number\n}\n\nexport type DatatableGraphQLDataMapper<TData, TRow = EmptyObject> = (\n data: TData,\n) =>\n | DatatableGraphQLDataMapperResult<TRow>\n | Promise<DatatableGraphQLDataMapperResult<TRow>>\n | Observable<DatatableGraphQLDataMapperResult<TRow>>\n\nexport type DatatableGraphQLVariables = {\n skip?: number\n take?: number\n} & EmptyObject\n\nexport type DatatableGraphQLErrorHandler = (\n error: readonly GraphQLFormattedError[],\n) => void\n\n/**\n * Maximum number of error recovery attempts before throwing.\n */\nexport const MAX_ERROR_RECOVERY_ATTEMPTS = 10\n\n/**\n * Partially wraps ApolloClient's QueryRef with datatable paging, loading\n * state, error handling, and debounced variable updates.\n */\nexport class DatatableGraphQLQueryRef<\n TData,\n TVariables extends DatatableGraphQLVariables = EmptyObject,\n TRow = EmptyObject,\n> {\n private readonly _variablesSubject = new BehaviorSubject<TVariables>(\n {} as TVariables,\n )\n private readonly _observingChangesSubject = new BehaviorSubject<boolean>(\n false,\n )\n private readonly _errorSubject = new Subject<\n readonly GraphQLFormattedError[]\n >()\n /**\n * Used to manually trigger a pending/loading state when we know a request is\n * coming but Apollo hasn't started it yet (e.g. after setVariables resolves to\n * a non-paging variable change while a request is already in-flight).\n */\n private readonly _manualPendingSubject = new BehaviorSubject<boolean>(false)\n private readonly _needToRequerySubject = new Subject<boolean>()\n\n /**\n * Temporary way of tracking total count when paging is disabled.\n */\n private _totalCount: number = DEFAULT_PAGE_SIZE\n\n private get _observingChanges(): boolean {\n return this._observingChangesSubject.value\n }\n private set _observingChanges(value: boolean) {\n this._observingChangesSubject.next(value)\n }\n\n private _variablesUpdatePending = false\n\n private readonly _valueChanges: Observable<ApolloQueryResult<TData>>\n\n public readonly loading$: Observable<boolean>\n\n /**\n * Emits whenever the query variables change.\n */\n public readonly variables$ = this._variablesSubject.asObservable()\n\n /**\n * Emits when a GraphQL error occurs.\n *\n * If nothing is subscribed to this, the `_defaultErrorHandler` is used\n * (if provided). Once subscribed, the subscriber is responsible for\n * handling the error.\n */\n public readonly error$ = this._errorSubject.asObservable()\n\n public get updatesPollDelay(): number {\n return this._updatesPollDelay\n }\n public get variablesUpdatePending(): boolean {\n return this._variablesUpdatePending\n }\n\n constructor(\n /** Original ApolloClient's QueryRef. */\n private readonly _queryRef: QueryRef<TData, TVariables>,\n /**\n * How long to wait (ms) before applying variable changes and refetching.\n */\n private readonly _updatesPollDelay: number = 500,\n /**\n * Default error handler used when no subscriber is listening to `error$`.\n */\n private readonly _defaultErrorHandler?: DatatableGraphQLErrorHandler,\n ) {\n this._variablesSubject.next(\n (this._queryRef as any).obsQuery.options.variables || {},\n )\n\n // Tracks whether the loading overlay should be held open until we know\n // whether the first response will trigger a follow-up requery (e.g. when\n // disablePaging is on and we first probe for totalCount). This prevents the\n // loading overlay from flickering off and back on.\n let hasEmittedTriggered = false\n const hasEmittedSubject = new BehaviorSubject<boolean>(false)\n\n const setHasEmitted = () => {\n if (hasEmittedTriggered) {\n return\n }\n hasEmittedTriggered = true\n const sub = this._needToRequerySubject.pipe(take(1)).subscribe(() => {\n hasEmittedSubject.next(true)\n sub.unsubscribe()\n })\n }\n\n this._valueChanges = defer(() => {\n let prev: Omit<TVariables, 'skip' | 'take'> | undefined\n const varChangesSub = this._variablesSubject\n .pipe(\n skip(1),\n tap(() => {\n this._variablesUpdatePending = true\n }),\n auditTime(this._updatesPollDelay),\n finalize(() => {\n // If the query stopped being observed before the debounce fired,\n // apply the pending variables now.\n if (this._variablesUpdatePending) {\n this.refetch()\n this._variablesUpdatePending = false\n }\n }),\n )\n .subscribe((variables) => {\n this._setVariablesImmediate(variables)\n const current = withoutProperties(this.getVariables(), [\n 'skip',\n 'take',\n ])\n const isVarsChanged =\n prev === undefined ||\n JSON.stringify(prev) !== JSON.stringify(current)\n prev = current as any\n this._variablesUpdatePending = false\n // When the non-paging variables change while Apollo is already\n // in setVariables state, manually signal a pending load so the\n // loading overlay doesn't disappear until the response arrives.\n if (\n isVarsChanged &&\n this._queryRef.getCurrentResult().networkStatus ===\n NetworkStatus.setVariables\n ) {\n this._manualPendingSubject.next(true)\n }\n })\n\n let repeatedErrors = 0\n this._observingChanges = true\n return this._queryRef.valueChanges.pipe(\n // Once a response lands (not in-flight), begin tracking whether the\n // initial load has truly completed (accounting for disablePaging requery).\n tap((v) =>\n !isNetworkRequestInFlight(v.networkStatus)\n ? setHasEmitted()\n : undefined,\n ),\n // Guard against infinite error loops when polling / retrying.\n tap((v) => {\n if (v.networkStatus === NetworkStatus.error) {\n repeatedErrors++\n if (repeatedErrors >= MAX_ERROR_RECOVERY_ATTEMPTS) {\n throw Error('Max error recovery attempts reached.')\n }\n } else if (v.networkStatus === NetworkStatus.ready) {\n repeatedErrors = 0\n }\n }),\n finalize(() => {\n varChangesSub.unsubscribe()\n this._observingChanges = false\n }),\n )\n }).pipe(shareReplay({ bufferSize: 1, refCount: true }))\n\n this.loading$ = this._observingChangesSubject.pipe(\n switchMap((observingChanges) => {\n if (!observingChanges) {\n return of(false)\n }\n\n return this._valueChanges.pipe(\n map((result) => result.loading),\n startWith(this._queryRef.getCurrentResult().loading),\n tap((loading) => {\n if (!loading) {\n this._manualPendingSubject.next(false)\n }\n }),\n // Swap the actual loading flag for the manual pending flag so that\n // we can hold the loading state open when needed.\n switchMap(() => this._manualPendingSubject),\n auditTime(0),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }),\n // Keep loading=true until we've confirmed the first full load cycle\n // (including any disablePaging requery).\n switchMap((v) =>\n hasEmittedSubject.pipe(map((hasEmitted) => (hasEmitted ? v : true))),\n ),\n )\n }\n\n public rows(\n mapper: DatatableGraphQLDataMapper<TData, TRow>,\n ): Observable<TRow[]> {\n return this._rowsObservable(mapper)\n }\n\n private _rowsObservable(\n mapper: DatatableGraphQLDataMapper<TData, TRow>,\n ): Observable<TRow[]> {\n return new Observable<TRow[]>((subscriber: Subscriber<TRow[]>) => {\n const rowsBufferSubject = new BehaviorSubject<TRow[]>([])\n\n const querySub = this._valueChanges\n .pipe(\n filter((result) => !isNetworkRequestInFlight(result.networkStatus)),\n switchMap((result) => {\n if (result.data === undefined) {\n return of()\n }\n\n // Capture the skip offset *before* any variable changes that the\n // mapper might trigger (e.g. patchVariables for disablePaging).\n const querySkip = this._getVariablesFromQueryRef().skip\n\n const _result = this._handleResult(result)\n return this._resolveRowMapper(mapper(_result.data)).pipe(\n tap((mapperResult) => {\n const needsToRequery =\n this._needsToRequeryWithAllRecords(mapperResult)\n if (needsToRequery) {\n this.patchVariables({ take: mapperResult.totalCount } as any)\n }\n this._needToRequerySubject.next(needsToRequery)\n\n if (hasProperty(mapperResult, 'totalCount')) {\n this._totalCount = mapperResult.totalCount\n }\n\n let rows = rowsBufferSubject.value || []\n\n const hasTotalCount =\n mapperResult.totalCount !== undefined &&\n mapperResult.totalCount !== null\n\n // If the rows buffer is not the same size as totalCount, create\n // a fresh buffer (sparse array — unfilled slots are undefined,\n // which is what checkRecordsHaveValue expects).\n if (hasTotalCount) {\n if (mapperResult.totalCount !== rows.length) {\n rows = new Array<TRow>(mapperResult.totalCount || 0)\n }\n\n let startIndex = querySkip ?? 0\n if (this.getQueryProcessingConfig()?.disablePaging) {\n startIndex = 0\n }\n\n // Insert rows into the correct buffer positions.\n for (let i = 0; i < mapperResult.rows.length; i++) {\n rows[startIndex + i] = mapperResult.rows[i]\n }\n\n rows = [...rows]\n } else {\n rows = [...mapperResult.rows]\n }\n\n // ngx-datatable does row lookups in a WeakMap and my assumption\n // is that the pre-allocated empty objects seem to be getting\n // recognized as the same object, so to avoid that, we add a\n // unique property to each row.\n rows = rows.map((v, i) => ({\n ...v,\n __dt_id: `row-${i}`,\n }))\n\n rowsBufferSubject.next(rows)\n }),\n )\n }),\n )\n .subscribe()\n\n const rowsSub = rowsBufferSubject.subscribe(subscriber)\n\n return () => {\n querySub.unsubscribe()\n rowsSub.unsubscribe()\n\n rowsBufferSubject.next([])\n rowsBufferSubject.complete()\n }\n })\n }\n\n /**\n * Reads the result and returns it unchanged if no errors.\n *\n * On errors: emits them via `error$` and replaces any `null` data properties\n * with an empty collection shape `{ items: [], totalCount: 0 }` so mapper\n * functions can run safely without special-casing the error path.\n */\n private _handleResult(\n result: ApolloQueryResult<TData>,\n ): ApolloQueryResult<TData> {\n if (!result.errors || result.errors.length === 0) return result\n\n this._emitError(result.errors)\n\n const defaultDataPropValue = { items: [], totalCount: 0 }\n const data = Object.keys(result.data as any).reduce((acc, key) => {\n ;(acc as any)[key] =\n (result.data as any)[key] === null\n ? defaultDataPropValue\n : (result.data as any)[key]\n return acc\n }, {} as TData)\n\n return { ...result, data }\n }\n\n private _needsToRequeryWithAllRecords(\n data: DatatableGraphQLDataMapperResult<TRow>,\n ): boolean {\n if (!this.getQueryProcessingConfig()?.disablePaging) {\n return false\n }\n\n return (\n hasProperty(data, 'totalCount') &&\n hasProperty(data, 'rows') &&\n Array.isArray(data.rows) &&\n data.totalCount > data.rows.length &&\n this._totalCount !== data.totalCount\n )\n }\n\n private _resolveRowMapper(\n mapperReturn: ReturnType<DatatableGraphQLDataMapper<TData, TRow>>,\n ): Observable<DatatableGraphQLDataMapperResult<TRow>> {\n if (isObservable(mapperReturn)) {\n return mapperReturn.pipe(take(1))\n }\n\n return from(Promise.resolve(mapperReturn))\n }\n\n public getVariables(): TVariables {\n return this._variablesSubject.value\n }\n\n private _setVariablesImmediate(\n variables: TVariables,\n ): Promise<void | ApolloQueryResult<TData>> {\n const _vars = this._withVariableOverrides(variables)\n return this._queryRef.setVariables(_vars || ({} as TVariables))\n }\n\n private _patchVariablesImmediate(\n variables: Partial<TVariables>,\n ): Promise<void | ApolloQueryResult<TData>> {\n const _variables = {\n ...this.getVariables(),\n ...variables,\n }\n\n const _vars = this._withVariableOverrides(_variables)\n return this._queryRef.setVariables(_vars || ({} as TVariables))\n }\n\n public setVariables(variables: TVariables): void {\n this._variablesSubject.next(variables)\n if (!this._observingChanges) {\n this._setVariablesImmediate(variables)\n }\n }\n\n public patchVariables(variables: Partial<TVariables>): void {\n const _variables = {\n ...this.getVariables(),\n ...variables,\n }\n\n this._variablesSubject.next(_variables)\n if (!this._observingChanges) {\n this._setVariablesImmediate(_variables)\n }\n }\n\n public refetch(\n variables?: TVariables,\n showLoading = false,\n ): Promise<ApolloQueryResult<TData>> {\n const _vars = this._withVariableOverrides(variables)\n if (showLoading) {\n this._manualPendingSubject.next(true)\n }\n // NOTE: There seems to be a bug causing Apollo to not emit changes unless\n // getCurrentResult() is called. This setTimeout is a workaround.\n setTimeout(() => this._queryRef.getCurrentResult())\n return this._queryRef.refetch(_vars)\n }\n\n public setQuery(\n query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n triggerRefetch: boolean = false,\n ): void {\n this._queryRef.setOptions({ query })\n if (triggerRefetch) {\n // Fake a variables update to share the debounce delay with setVariables.\n this.setVariables(this.getVariables())\n }\n }\n\n public getOptions(): WatchQueryOptions<TVariables, TData> | undefined {\n return (this._queryRef as any).obsQuery.options\n }\n\n public getQueryProcessingConfig(): QueryProcessingConfig | undefined {\n return this.getOptions()?.context?.queryProcessingConfig\n }\n\n /**\n * Returns the variables that were actually sent with the last request, read\n * directly from Apollo's observable query. This is more accurate than\n * `_variablesSubject.value` when variables can change between the debounce\n * firing and the response arriving.\n */\n private _getVariablesFromQueryRef(): TVariables {\n return (this._queryRef as any).obsQuery.variables\n }\n\n private _withVariableOverrides(\n variables?: TVariables,\n ): TVariables | undefined {\n if (\n !notNullOrUndefined(variables) &&\n !this.getQueryProcessingConfig()?.disablePaging\n ) {\n return undefined\n }\n\n const _vars = { ...(variables || {}) } as TVariables\n if (this.getQueryProcessingConfig()?.disablePaging) {\n _vars.take = this._totalCount\n }\n return _vars\n }\n\n private _emitError(error: readonly GraphQLFormattedError[]): void {\n this._errorSubject.next(error)\n if (this._defaultErrorHandler && !this._errorSubject.observed) {\n this._defaultErrorHandler(error)\n }\n }\n}\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core'\n\nimport { OperationVariables } from '@apollo/client/core/types'\nimport { Apollo } from 'apollo-angular'\nimport { WatchQueryOptions } from 'apollo-angular'\n\nimport { QueryProcessingConfig, EmptyObject } from '../models'\nimport {\n DatatableGraphQLQueryRef,\n DatatableGraphQLVariables,\n} from './datatable-graphql-query-ref'\n\n/**\n * NOTE: Any of ApolloClient's WatchQueryOptions properties can be set, but I\n * think our components should only be providing `query` and `variables`. The\n * rest should be common options shared by all our app's datatables. This may\n * change if it is determined to be too restrictive.\n */\nexport type DatatableQueryOptions<\n TVariables extends OperationVariables = OperationVariables,\n TData = any,\n> = Pick<WatchQueryOptions<TVariables, TData>, 'query'> &\n Pick<WatchQueryOptions<TVariables, TData>, 'variables'> &\n Pick<WatchQueryOptions<TVariables, TData>, 'context'>\n\nexport interface DatatableGraphqlServiceConfig {\n /**\n * Polling interval time in milliseconds.\n */\n pollingIntervalTime?: number\n}\n\nexport const DATATABLE_GRAPHQL_SERVICE_CONFIG =\n new InjectionToken<DatatableGraphqlServiceConfig>(\n 'DATATABLE_GRAPHQL_SERVICE_CONFIG',\n )\n\nconst _CONFIG_DEFAULTS: DatatableGraphqlServiceConfig = {\n pollingIntervalTime: 1 * 60 * 1000,\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DatatableGraphqlService {\n private readonly _config: DatatableGraphqlServiceConfig\n\n constructor(\n private readonly _apollo: Apollo,\n @Optional()\n @Inject(DATATABLE_GRAPHQL_SERVICE_CONFIG)\n _config?: DatatableGraphqlServiceConfig,\n ) {\n this._config = {\n ..._CONFIG_DEFAULTS,\n ...(_config || {}),\n }\n }\n\n public watchQuery<\n TData,\n TVariables extends DatatableGraphQLVariables = EmptyObject,\n TRow = EmptyObject,\n >(\n options: DatatableQueryOptions<TVariables>,\n queryProcessingConfig?: QueryProcessingConfig,\n ): DatatableGraphQLQueryRef<TData, TVariables, TRow> {\n const _options: WatchQueryOptions<TVariables, TData> = {\n useInitialLoading: true,\n ..._CONFIG_DEFAULTS,\n pollInterval: this._config.pollingIntervalTime,\n ...options,\n }\n\n if (queryProcessingConfig) {\n _options.context = {\n ...(_options.context || {}),\n queryProcessingConfig: {\n ...(_options.context?.queryProcessingConfig || {}),\n ...queryProcessingConfig,\n },\n }\n }\n\n const queryRef = this._apollo.watchQuery<TData, TVariables>(_options)\n\n return new DatatableGraphQLQueryRef(queryRef)\n }\n}\n","import {\n ColumnsDataFilterState,\n TheSeamColumnsDataFilterDateSearchFormState,\n TheSeamColumnsDataFilterDateSearchOptions,\n THESEAM_COLUMNS_DATA_FILTER_DATE_TEXT_SEARCH_TYPES,\n getFormattedDateForComparison,\n THESEAM_COLUMNS_DATA_FILTER_DATE_RANGE_SEARCH_TYPES,\n} from '@theseam/ui-common/datatable'\nimport { isNullOrUndefined, notNullOrUndefined } from '@theseam/ui-common/utils'\nimport { FilterStateMapperResult } from './map-filter-states'\nimport { MapperContext } from './mapper-context'\n\nexport const mapSearchDateColumnsDataFilterStateToGql = (\n filterState: ColumnsDataFilterState<\n TheSeamColumnsDataFilterDateSearchFormState,\n TheSeamColumnsDataFilterDateSearchOptions\n >,\n context: MapperContext<any>,\n): FilterStateMapperResult => {\n const formValue = filterState.state.formValue\n const options = filterState.state.options\n\n let filter = null\n\n if (\n isNullOrUndefined(filterState.state.prop) ||\n isNullOrUndefined(options) ||\n isNullOrUndefined(formValue) ||\n isNullOrUndefined(formValue.searchType)\n ) {\n return filter\n }\n\n if (\n THESEAM_COLUMNS_DATA_FILTER_DATE_TEXT_SEARCH_TYPES.includes(\n formValue.searchType,\n ) &&\n notNullOrUndefined(formValue.searchText)\n ) {\n const searchDate = getFormattedDateForComparison(\n formValue.searchText,\n options.dateType,\n true,\n )\n\n if (!isNaN(searchDate.valueOf())) {\n switch (formValue.searchType) {\n case 'eq': {\n let searchDateEnd\n if (options.dateType === 'datetime-local') {\n searchDateEnd = new Date(searchDate)\n searchDateEnd.setMinutes(searchDateEnd.getMinutes() + 1)\n } else if (options.dateType === 'date') {\n searchDateEnd = new Date(searchDate)\n searchDateEnd.setDate(searchDateEnd.getDate() + 1)\n }\n\n if (notNullOrUndefined(searchDateEnd)) {\n filter = {\n filter: {\n and: [\n {\n [filterState.state.prop]: { gte: searchDate.toISOString() },\n },\n {\n [filterState.state.prop]: {\n lt: searchDateEnd.toISOString(),\n },\n },\n ],\n },\n variables: {},\n }\n }\n\n break\n }\n case 'gt':\n case 'lte': {\n const comparator =\n formValue.searchType === 'gt'\n ? 'gte'\n : formValue.searchType === 'lte'\n ? 'lt'\n : null\n\n let searchDateEnd\n if (options.dateType === 'datetime-local') {\n searchDateEnd = new Date(searchDate)\n searchDateEnd.setMinutes(searchDateEnd.getMinutes() + 1)\n } else if (options.dateType === 'date') {\n searchDateEnd = new Date(searchDate)\n searchDateEnd.setDate(searchDateEnd.getDate() + 1)\n }\n\n if (\n notNullOrUndefined(comparator) &&\n notNullOrUndefined(searchDateEnd)\n ) {\n filter = {\n filter: {\n and: [\n {\n [filterState.state.prop]: {\n [comparator]: searchDateEnd.toISOString(),\n },\n },\n ],\n },\n variables: {},\n }\n }\n\n break\n }\n case 'lt':\n case 'gte': {\n filter = {\n filter: {\n and: [\n {\n [filterState.state.prop]: {\n [formValue.searchType]: searchDate.toISOString(),\n },\n },\n ],\n },\n variables: {},\n }\n\n break\n }\n default:\n break\n }\n }\n } else if (\n THESEAM_COLUMNS_DATA_FILTER_DATE_RANGE_SEARCH_TYPES.includes(\n formValue.searchType,\n ) &&\n notNullOrUndefined(formValue.fromText) &&\n notNullOrUndefined(formValue.toText)\n ) {\n const fromDate = getFormattedDateForComparison(\n formValue.fromText,\n options.dateType,\n true,\n )\n const toDate = getFormattedDateForComparison(\n formValue.toText,\n options.dateType,\n true,\n )\n\n if (!isNaN(fromDate.valueOf()) && !isNaN(toDate.valueOf())) {\n let toDateEnd\n if (options.dateType === 'datetime-local') {\n toDateEnd = new Date(toDate)\n toDateEnd.setMinutes(toDateEnd.getMinutes() + 1)\n } else if (options.dateType === 'date') {\n toDateEnd = new Date(toDate)\n toDateEnd.setDate(toDateEnd.getDate() + 1)\n }\n\n if (notNullOrUndefined(toDateEnd)) {\n if (formValue.searchType === 'between') {\n filter = {\n filter: {\n and: [\n { [filterState.state.prop]: { gte: fromDate.toISOString() } },\n { [filterState.state.prop]: { lt: toDateEnd.toISOString() } },\n ],\n },\n variables: {},\n }\n } else if (formValue.searchType === 'not-between') {\n filter = {\n filter: {\n or: [\n { [filterState.state.prop]: { lt: fromDate.toISOString() } },\n { [filterState.state.prop]: { gt: toDateEnd.toISOString() } },\n ],\n },\n variables: {},\n }\n }\n }\n }\n } else if (formValue.searchType === 'blank') {\n filter = {\n filter: {\n or: [{ [filterState.state.prop]: { eq: null } }],\n },\n variables: {},\n }\n } else if (formValue.searchType === 'not-blank') {\n filter = {\n filter: {\n and: [{ [filterState.state.prop]: { neq: null } }],\n },\n variables: {},\n }\n }\n\n return filter\n}\n","import {\n ColumnsDataFilterState,\n TheSeamColumnsDataFilterNumericSearchFormState,\n THESEAM_COLUMNS_DATA_FILTER_NUMERIC_TEXT_SEARCH_TYPES,\n THESEAM_COLUMNS_DATA_FILTER_NUMERIC_RANGE_SEARCH_TYPES,\n} from '@theseam/ui-common/datatable'\nimport { isNullOrUndefined, notNullOrUndefined } from '@theseam/ui-common/utils'\nimport { FilterStateMapperResult } from './map-filter-states'\nimport { MapperContext } from './mapper-context'\n\nexport const mapSearchNumericColumnsDataFilterStateToGql = (\n filterState: ColumnsDataFilterState<TheSeamColumnsDataFilterNumericSearchFormState>,\n context: MapperContext<any>,\n): FilterStateMapperResult => {\n let filter = null\n\n if (isNullOrUndefined(filterState.state.prop)) {\n return filter\n }\n\n if (\n notNullOrUndefined(filterState.state.formValue) &&\n notNullOrUndefined(filterState.state.formValue.searchType)\n ) {\n if (\n THESEAM_COLUMNS_DATA_FILTER_NUMERIC_TEXT_SEARCH_TYPES.includes(\n filterState.state.formValue.searchType,\n ) &&\n notNullOrUndefined(filterState.state.formValue.searchText)\n ) {\n const searchNumeric = parseFloat(filterState.state.formValue.searchText)\n\n if (!isNaN(searchNumeric)) {\n filter = {\n filter: {\n and: [\n {\n [filterState.state.prop]: {\n [filterState.state.formValue.searchType]: searchNumeric,\n },\n },\n ],\n },\n variables: {},\n }\n }\n } else if (\n THESEAM_COLUMNS_DATA_FILTER_NUMERIC_RANGE_SEARCH_TYPES.includes(\n filterState.state.formValue.searchType,\n ) &&\n notNullOrUndefined(filterState.state.formValue.fromText) &&\n notNullOrUndefined(filterState.state.formValue.toText)\n ) {\n const fromNumeric = parseFloat(filterState.state.formValue.fromText)\n\n const toNumeric = parseFloat(filterState.state.formValue.toText)\n\n if (!isNaN(fromNumeric) && !isNaN(toNumeric)) {\n if (filterState.state.formValue.searchType === 'between') {\n filter = {\n filter: {\n and: [\n { [filterState.state.prop]: { gte: fromNumeric } },\n { [filterState.state.prop]: { lte: toNumeric } },\n ],\n },\n variables: {},\n }\n } else if (filterState.state.formValue.searchType === 'not-between') {\n filter = {\n filter: {\n or: [\n { [filterState.state.prop]: { lt: fromNumeric } },\n { [filterState.state.prop]: { gt: toNumeric } },\n ],\n },\n variables: {},\n }\n }\n }\n } else if (filterState.state.formValue.searchType === 'blank') {\n filter = {\n filter: {\n or: [\n { [filterState.state.prop]: { eq: null } },\n { [filterState.state.prop]: { eq: '' } },\n ],\n },\n variables: {},\n }\n } else if (filterState.state.formValue.searchType === 'not-blank') {\n filter = {\n filter: {\n and: [\n { [filterState.state.prop]: { neq: null } },\n { [filterState.state.prop]: { neq: '' } },\n ],\n },\n variables: {},\n }\n }\n }\n\n return filter\n}\n","import {\n ColumnsDataFilterState,\n TheSeamColumnsDataFilterTextSearchFormState,\n THESEAM_COLUMNS_DATA_FILTER_TEXT_TEXT_SEARCH_TYPES,\n} from '@theseam/ui-common/datatable'\nimport { isNullOrUndefined, notNullOrUndefined } from '@theseam/ui-common/utils'\nimport { FilterStateMapperResult } from './map-filter-states'\nimport { MapperContext } from './mapper-context'\n\nexport const mapSearchTextColumnsDataFilterStateToGql = (\n filterState: ColumnsDataFilterState<TheSeamColumnsDataFilterTextSearchFormState>,\n context: MapperContext<any>,\n): FilterStateMapperResult => {\n let filter = null\n\n if (isNullOrUndefined(filterState.state.prop)) {\n return filter\n }\n\n if (\n notNullOrUndefined(filterState.state.formValue) &&\n notNullOrUndefined(filterState.state.formValue.searchType)\n ) {\n if (\n THESEAM_COLUMNS_DATA_FILTER_TEXT_TEXT_SEARCH_TYPES.includes(\n filterState.state.formValue.searchType,\n ) &&\n notNullOrUndefined(filterState.state.formValue.searchText)\n ) {\n filter = {\n filter: {\n and: [\n {\n [filterState.state.prop]: {\n [filterState.state.formValue.searchType]:\n filterState.state.formValue.searchText,\n },\n },\n ],\n },\n variables: {},\n }\n } else if (filterState.state.formValue.searchType === 'blank') {\n filter = {\n filter: {\n or: [\n { [filterState.state.prop]: { eq: null } },\n { [filterState.state.prop]: { eq: '' } },\n ],\n },\n variables: {},\n }\n } else if (filterState.state.formValue.searchType === 'not-blank') {\n filter = {\n filter: {\n and: [\n { [filterState.state.prop]: { neq: null } },\n { [filterState.state.prop]: { neq: '' } },\n ],\n },\n variables: {},\n }\n }\n }\n\n return filter\n}\n","import { gql } from 'apollo-angular'\n\nexport const baseSchemaFragment = gql`\n input ComparableInt32OperationFilterInput {\n eq: Int\n neq: Int\n in: [Int!]\n nin: [Int!]\n gt: Int\n ngt: Int\n gte: Int\n ngte: Int\n lt: Int\n nlt: Int\n lte: Int\n nlte: Int\n objectContains: String\n }\n\n input StringOperationFilterInput {\n and: [StringOperationFilterInput!]\n or: [StringOperationFilterInput!]\n eq: String\n neq: String\n contains: String\n ncontains: String\n in: [String]\n nin: [String]\n startsWith: String\n nstartsWith: String\n endsWith: String\n nendsWith: String\n objectContains: String\n }\n\n input ComparableDateTimeOffsetOperationFilterInput {\n eq: DateTime\n neq: DateTime\n in: [DateTime!]\n nin: [DateTime!]\n gt: DateTime\n ngt: DateTime\n gte: DateTime\n ngte: DateTime\n lt: DateTime\n nlt: DateTime\n lte: DateTime\n nlte: DateTime\n objectContains: String\n }\n\n input BooleanOperationFilterInput {\n eq: Boolean\n neq: Boolean\n objectContains: String\n }\n\n input ComparableNullableOfDateTimeOffsetOperationFilterInput {\n eq: DateTime\n neq: DateTime\n in: [DateTime]\n nin: [DateTime]\n gt: DateTime\n ngt: DateTime\n gte: DateTime\n ngte: DateTime\n lt: DateTime\n nlt: DateTime\n lte: DateTime\n nlte: DateTime\n objectContains: String\n }\n\n enum SortEnumType {\n ASC\n DESC\n }\n\n \"\"\"\n The \\`DateTime\\` scalar represents an ISO-8601 compliant date time type.\n \"\"\"\n scalar DateTime\n\n scalar Uuid\n\n \"\"\"\n The built-in \\`Decimal\\` scalar type.\n \"\"\"\n scalar Decimal\n\n \"\"\"\n The \\`Long\\` scalar type represents non-fractional signed whole 64-bit numeric values. Long can represent values between -(2^63) and 2^63 - 1.\n \"\"\"\n scalar Long\n\n \"\"\"\n Information about the offset pagination.\n \"\"\"\n type CollectionSegmentInfo {\n \"\"\"\n Indicates whether more items exist following the set defined by the clients arguments.\n \"\"\"\n hasNextPage: Boolean!\n\n \"\"\"\n Indicates whether more items exist prior the set defined by the clients arguments.\n \"\"\"\n hasPreviousPage: Boolean!\n }\n`\n","export type WhereArg = Record<string, any>\n\n/**\n * The set of leaf-level operator keys used by HotChocolate filter inputs\n * (e.g. StringOperationFilterInput, ComparableInt32OperationFilterInput).\n * Any key not in this set is treated as a field name, causing the evaluator\n * to recurse into `value[key]`.\n */\nconst OPERATOR_KEYS = new Set([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'ngt',\n 'ngte',\n 'nlt',\n 'nlte',\n 'in',\n 'nin',\n 'contains',\n 'ncontains',\n 'startsWith',\n 'nstartsWith',\n 'endsWith',\n 'nendsWith',\n 'objectContains',\n])\n\nfunction applyOperator(operator: string, value: any, operand: any): boolean {\n switch (operator) {\n case 'eq':\n return value === operand\n case 'neq':\n return value !== operand\n case 'gt':\n return value > operand\n case 'gte':\n return value >= operand\n case 'lt':\n return value < operand\n case 'lte':\n return value <= operand\n // Negated comparisons — logical complements of the above\n case 'ngt':\n return !(value > operand) // equivalent to lte\n case 'ngte':\n return !(value >= operand) // equivalent to lt\n case 'nlt':\n return !(value < operand) // equivalent to gte\n case 'nlte':\n return !(value <= operand) // equivalent to gt\n case 'in':\n return Array.isArray(operand) && operand.includes(value)\n case 'nin':\n return Array.isArray(operand) && !operand.includes(value)\n case 'contains':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n value.includes(operand)\n )\n case 'ncontains':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n !value.includes(operand)\n )\n case 'startsWith':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n value.startsWith(operand)\n )\n case 'nstartsWith':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n !value.startsWith(operand)\n )\n case 'endsWith':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n value.endsWith(operand)\n )\n case 'nendsWith':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n !value.endsWith(operand)\n )\n case 'objectContains': {\n // Custom Seam/HotChocolate operator: convert the field value to a string\n // and check if it contains the operand (case-insensitive, matching search UX).\n const strValue = value == null ? '' : String(value)\n const strOperand = operand == null ? '' : String(operand)\n return strValue.toLowerCase().includes(strOperand.toLowerCase())\n }\n default:\n throw new Error(`Unknown filter operator: \"${operator}\"`)\n }\n}\n\n/**\n * Recursively evaluates a HotChocolate-style filter against a value.\n *\n * Rules:\n * - `and` array: all sub-filters must pass (AND logic)\n * - `or` array: at least one sub-filter must pass (OR logic)\n * - Known operator keys (`eq`, `contains`, `gt`, ...): apply the operator to\n * the current `value`\n * - Any other key: treat as a field name; recurse with `value[key]` and the\n * nested filter\n * - All non-`and`/`or` conditions are implicitly ANDed together\n */\nfunction evaluateCondition(value: any, filter: any): boolean {\n if (filter === null || filter === undefined) {\n return true\n }\n\n if (Array.isArray(filter.and)) {\n if (!filter.and.every((f: any) => evaluateCondition(value, f))) {\n return false\n }\n }\n\n if (Array.isArray(filter.or)) {\n if (!filter.or.some((f: any) => evaluateCondition(value, f))) {\n return false\n }\n }\n\n for (const key of Object.keys(filter)) {\n if (key === 'and' || key === 'or') {\n continue\n }\n\n if (OPERATOR_KEYS.has(key)) {\n if (!applyOperator(key, value, filter[key])) {\n return false\n }\n } else {\n if (!evaluateCondition(value?.[key], filter[key])) {\n return false\n }\n }\n }\n\n return true\n}\n\n/**\n * Filters an array using a HotChocolate-style where clause.\n *\n * Top-level field conditions are implicitly ANDed. Use `and`/`or` arrays for\n * explicit logical grouping.\n *\n * @example\n * filterWhere(records, { name: { contains: 'foo' }, id: { gt: 5 } })\n * filterWhere(records, { or: [{ name: { eq: 'a' } }, { name: { eq: 'b' } }] })\n */\nexport function filterWhere<T>(data: T[], where: WhereArg): T[] {\n return data.filter((item) => evaluateCondition(item, where))\n}\n","export function skipAndTake<T>(data: T[], skip: number, take: number): T[] {\n if (skip < 0) {\n throw Error(`Invalid 'skip' value: ${skip}`)\n }\n\n // if (take > data.length) {\n // throw Error(`Invalid 'take' value: ${take}`)\n // }\n\n const tmp: T[] = []\n for (let i = skip; i < take + skip && i < data.length; i++) {\n tmp.push(data[i])\n }\n\n return tmp\n}\n","/**\n * A single sort clause in HotChocolate's order format.\n * Each object has exactly one key: the field name, with a value of 'ASC' or 'DESC'.\n *\n * @example { memberOrganizationName: 'ASC' }\n */\nexport type SortClause = Record<string, 'ASC' | 'DESC'>\n\n/**\n * Sorts an array by a HotChocolate-style `order` argument.\n *\n * Earlier entries in the array take higher sort precedence. When two records\n * are equal on all sort clauses they retain their original relative order\n * (stable sort).\n *\n * Handles strings (locale-aware), numbers/dates, booleans, and null/undefined\n * values (nulls sort last for both ASC and DESC).\n *\n * @example\n * sortItems(records, [{ name: 'ASC' }, { id: 'DESC' }])\n */\nexport function sortItems<T>(items: T[], order: SortClause[]): T[] {\n if (!order || order.length === 0) {\n return items\n }\n\n return [...items].sort((a, b) => {\n for (const clause of order) {\n const entries = Object.entries(clause)\n if (entries.length === 0) {\n continue\n }\n\n const [field, direction] = entries[0]\n const aVal = (a as any)[field]\n const bVal = (b as any)[field]\n\n // Nulls always sort last regardless of direction — check before inverting.\n const aNull = aVal == null\n const bNull = bVal == null\n if (aNull && bNull) continue\n if (aNull) return 1\n if (bNull) return -1\n\n const comparison = _compareNonNullValues(aVal, bVal)\n if (comparison !== 0) {\n return direction === 'DESC' ? -comparison : comparison\n }\n }\n\n return 0\n })\n}\n\nfunction _compareNonNullValues(a: any, b: any): number {\n if (typeof a === 'string' && typeof b === 'string') {\n return a.localeCompare(b)\n }\n\n if (a < b) return -1\n if (a > b) return 1\n return 0\n}\n","import { filterWhere, WhereArg } from './filter-where'\nimport { skipAndTake } from './skip-and-take'\nimport { sortItems, SortClause } from './sort-items'\n\nexport interface FilteredResultsPageInfo {\n hasNextPage: boolean\n hasPreviousPage: boolean\n}\n\nexport interface FilteredResults<T> {\n items: T[]\n pageInfo: FilteredResultsPageInfo\n totalCount: number\n}\n\nexport function filteredResults<T>(items: T[], args: any): FilteredResults<T> {\n let _items = items\n const where: WhereArg = args?.where\n if (where !== undefined) {\n _items = filterWhere(_items, where)\n }\n\n const order: SortClause[] = args?.order\n if (order !== undefined) {\n _items = sortItems(_items, order)\n }\n\n const totalCount = _items.length\n\n const skip = args?.skip ?? 0\n const take = args?.take ?? _items.length\n if (args?.skip !== undefined || args?.take !== undefined) {\n _items = skipAndTake(_items, skip, take)\n }\n\n const pageInfo: FilteredResultsPageInfo = {\n hasNextPage: skip + take < totalCount,\n hasPreviousPage: skip > 0,\n }\n\n return {\n items: _items,\n pageInfo,\n totalCount,\n }\n}\n","import { EventEmitter } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\n\nimport { DataFilterState } from '@theseam/ui-common/data-filters'\nimport {\n SortEvent,\n SortItem,\n TheSeamPageInfo,\n} from '@theseam/ui-common/datatable'\n\nimport { GqlDatatableAccessor } from '../models'\n\nexport class MockDatatable implements GqlDatatableAccessor {\n private readonly _filterStatesSubject = new BehaviorSubject<\n DataFilterState[]\n >([])\n\n private _sorts: SortItem[] = []\n private _rows: any[] = []\n private _offset = 0\n private _rowHeight = 50\n private _bodyHeight = 500\n private _scrolledPosV = 0\n\n page = new EventEmitter<TheSeamPageInfo>()\n resize = new EventEmitter<any>()\n externalSorting = false\n\n sort: EventEmitter<SortEvent> = new EventEmitter<SortEvent>()\n get sorts(): SortItem[] {\n return this._sorts\n }\n set sorts(value: SortItem[]) {\n this._sorts = value\n }\n\n get pageInfo(): TheSeamPageInfo {\n return this.ngxDatatable\n }\n\n public readonly filterStates: Observable<DataFilterState[]> =\n this._filterStatesSubject.asObservable()\n\n static pageDefaults(dt: any, defaultPageSize: number = 20): TheSeamPageInfo {\n return {\n offset: (dt as any).ngxDatatable?.offset ?? 0,\n pageSize: (dt as any).ngxDatatable?.pageSize ?? defaultPageSize,\n limit: (dt as any).ngxDatatable?.limit,\n count: (dt as any).ngxDatatable?.count ?? 0,\n }\n }\n\n get ngxDatatable(): {\n offset: number\n pageSize: number\n limit?: number\n count: number\n } {\n return {\n offset: this.getPage(),\n pageSize: this.getPageSize(),\n count: this._rows.length,\n }\n }\n\n setSorts(v: SortItem[]): void {\n this._sorts = v\n this.sort.emit({ sorts: this._sorts })\n }\n\n setFilterStates(v: DataFilterState[]): void {\n this._filterStatesSubject.next(v)\n }\n\n getNumPages(): number {\n if (this._rows.length === 0) {\n return 1\n }\n const t = Math.ceil(this._rows.length / this.getPageSize())\n if (t <= 0) {\n return 1\n }\n return t\n }\n\n _calcPage(): number {\n // This page calculation could most likely be simplified.\n const bodyHeight = this._rowHeight * this.getPageSize()\n const visibleHeight = this._bodyHeight + this._scrolledPosV\n const pages = Math.floor(visibleHeight / bodyHeight)\n const overflow = visibleHeight - pages * bodyHeight\n const page = overflow > 1 ? pages + 1 : pages\n return page - 1\n }\n\n _calcScrolledPosV(): number {\n return this._offset * this._rowHeight\n }\n\n getPage(): number {\n return this._offset\n }\n\n setPage(v: number): void {\n let _v = v\n if (_v === this.getPage()) {\n return\n }\n\n if (_v > this.getNumPages() - 1) {\n // Should this throw an error instead?\n _v = this.getNumPages() - 1\n }\n\n this._offset = _v\n this._scrolledPosV = this._calcScrolledPosV()\n this.page.emit(this.ngxDatatable)\n }\n\n getPageSize(): number {\n return Math.floor(this._bodyHeight / this._rowHeight)\n }\n\n setRows(v: any[]): void {\n this._rows = v\n }\n\n setScrolledPosV(v: number): void {\n if (this._scrolledPosV === v) {\n return\n }\n const pageBefore = this.getPage()\n this._scrolledPosV = v\n this._offset = this._calcPage()\n if (this.getPage() !== pageBefore) {\n this.page.emit(this.ngxDatatable)\n }\n }\n\n /**\n * Returns the height of a row.\n *\n * NOTE: This will not be accurate if your rows do not use a single fixed\n * height for each row.\n */\n getRowHeight() {\n return this._rowHeight\n }\n}\n","import { notNullOrUndefined } from '@theseam/ui-common/utils'\n\nexport function checkRecordsHaveValue(\n arr: any[] | null,\n indices: (number | [startIndex: number, endIndex: number])[],\n testValueCheckProp: string | null = 'name',\n onlyCheckProvidedIndices: boolean = false,\n): void {\n if (indices.length > 0 && !Array.isArray(arr)) {\n throw Error(`Records array should be defined.`)\n }\n\n if (!Array.isArray(arr)) {\n return\n }\n\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i]\n if (_isOneOfIndices(indices, i)) {\n if (!notNullOrUndefined(arr[i])) {\n throw Error(`Record at index '${i}' should be defined.`)\n }\n if (notNullOrUndefined(testValueCheckProp)) {\n const actualValue = item[testValueCheckProp]\n const expectedValue = `Item_${i}`\n if (actualValue !== expectedValue) {\n throw Error(\n `Record at index '${i}' should be '${expectedValue}', but is '${actualValue}'`,\n )\n }\n }\n } else {\n if (!onlyCheckProvidedIndices) {\n const isItemDefined = notNullOrUndefined(testValueCheckProp)\n ? notNullOrUndefined(item?.[testValueCheckProp])\n : notNullOrUndefined(item)\n if (isItemDefined) {\n throw Error(`Record at index '${i}' should not be defined.`)\n }\n }\n }\n }\n}\n\n/**\n * NOTE: This is a very niave implementation that could be improved.\n */\nfunction _isOneOfIndices(\n indices: (number | [startIndex: number, endIndex: number])[],\n index: number,\n): boolean {\n for (const r of indices) {\n if (Array.isArray(r)) {\n if (index >= r[0] && index <= r[1]) {\n return true\n }\n } else {\n if (index === r) {\n return true\n }\n }\n }\n\n return false\n}\n","import { ApolloLink, Observable, Operation } from '@apollo/client/core'\n\nexport interface MockGraphQLLinkOptions {\n resolve: (operation: Operation) => any\n delay?: number\n}\n\nexport function mockGraphQLLink(options: MockGraphQLLinkOptions) {\n return new ApolloLink((operation, forward) => {\n return new Observable((subscriber) => {\n const execute = () => {\n const response = options.resolve(operation)\n operation.setContext({ response })\n subscriber.next(response)\n subscriber.complete()\n }\n\n if (options.delay && options.delay > 0) {\n const timeoutId = setTimeout(execute, options.delay)\n return () => clearTimeout(timeoutId)\n }\n\n execute()\n return () => {}\n })\n })\n}\n","import { concat, InMemoryCache, Operation } from '@apollo/client'\nimport { provideApollo } from 'apollo-angular'\nimport { Provider } from '@angular/core'\n\nimport { queryProcessingLink } from '../apollo-links/query-processing-link'\nimport { mockGraphQLLink } from './mock-graphql-link'\n\nexport interface MockApolloTestingProviderOptions {\n resolve: (operation: Operation) => any\n delay?: number\n}\n\n/**\n * Creates Apollo providers configured like our apps, except with the Apollo\n * HttpLink replaced with a mock link that delegates to a `resolve` callback.\n * No GraphQL schema is required — the resolve function returns the response\n * directly, typically using `filteredResults` for sorting/filtering/paging.\n */\nexport function createMockApolloTestingProvider(\n options: MockApolloTestingProviderOptions,\n): Provider {\n return provideApollo(() => ({\n cache: new InMemoryCache(),\n link: concat(\n queryProcessingLink,\n mockGraphQLLink({\n resolve: options.resolve,\n delay: options.delay,\n }),\n ),\n defaultOptions: {\n watchQuery: {\n fetchPolicy: 'cache-and-network',\n errorPolicy: 'ignore',\n },\n query: {\n fetchPolicy: 'network-only',\n errorPolicy: 'all',\n },\n },\n }))\n}\n","import { gql } from 'apollo-angular'\n\nimport { filteredResults } from '../filtered-results'\n\nexport interface SimpleGqlTestRecord {\n id: number\n name: string\n}\n\nexport function createSimpleGqlTestRecord(num: number): SimpleGqlTestRecord {\n return { id: num, name: `Item_${num}` }\n}\n\nexport function createSimpleGqlTestRoot(numRecords: number) {\n const _records: SimpleGqlTestRecord[] = []\n for (let i = 0; i < numRecords; i++) {\n _records.push(createSimpleGqlTestRecord(i))\n }\n\n return {\n simpleGqlTestRecords: (args?: any) => filteredResults([..._records], args),\n }\n}\n\nexport const SIMPLE_GQL_TEST_QUERY = gql`\n query ExampleQuery(\n $skip: Int\n $take: Int\n $order: [SimpleGqlTestRecordSortInput!]\n $where: SimpleGqlTestRecordFilterInput\n ) {\n simpleGqlTestRecords(\n skip: $skip\n take: $take\n order: $order\n where: $where\n ) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`\n\n/**\n * Like {@link SIMPLE_GQL_TEST_QUERY} but includes `$search: String` for use\n * with search filters that inline a `gqlVar('search')` reference via\n * `queryProcessingConfig.variables.inline`.\n */\nexport const SIMPLE_GQL_TEST_SEARCH_QUERY = gql`\n query ExampleQuery(\n $skip: Int\n $take: Int\n $order: [SimpleGqlTestRecordSortInput!]\n $where: SimpleGqlTestRecordFilterInput\n $search: String\n ) {\n simpleGqlTestRecords(\n skip: $skip\n take: $take\n order: $order\n where: $where\n ) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface SimpleGqlTestExtraVariables {}\n\nexport interface SimpleGqlTestVariables extends SimpleGqlTestExtraVariables {\n skip?: number\n take?: number\n order?: Partial<Record<keyof SimpleGqlTestRecord, 'ASC' | 'DESC'>>[]\n where?: any\n search?: string\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["visit","BREAK","Observable"],"mappings":";;;;;;;;;;;;;AAQA;;;;;;;;;;;;;;;;AAgBG;AACG,SAAU,YAAY,CAC1B,KAAiB,EACjB,OAA6B,EAAA;AAE7B,IAAA,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,aAAa;AAC3D,IAAA,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,kBAAkB;IAE9D,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,CAAC,SAAS,EAAE,OAAO,KAAI;;QAEvD,OAAO,CAAC,GAAG,CACT,CAAA,aAAA,EAAgB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA,CAAE,EACzF,YAAY,CACb;AACD,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC;AAC3B,IAAA,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,CAAC,SAAS,EAAE,OAAO,KAAI;;QAEtD,OAAO,CAAC,GAAG,CACT,CAAA,YAAA,EAAe,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA,CAAE,EACxF,WAAW,CACZ;AACD,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC;AAC3B,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACxD;;MCnDa,YAAY,CAAA;AACK,IAAA,SAAA;AAA5B,IAAA,WAAA,CAA4B,SAAiB,EAAA;QAAjB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAW;IACzC,OAAgB,GAAG,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC;IAC7C,OAAgB,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC;;;ICD5C;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,qBAAA,CAAA,GAAA,qBAA+C;AAC/C,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAkB;AAClB,IAAA,SAAA,CAAA,oBAAA,CAAA,GAAA,oBAA6C;AAC7C,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,UAAwB;AACxB,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,UAAwB;AAC1B,CAAC,EANW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;;MCFR,8BAA8B,GAAG,CAAC,OAAO,EAAE,OAAO;;MCAlD,WAAW,CAAA;AAEJ,IAAA,IAAA;AACA,IAAA,IAAA;IAFlB,WAAA,CACkB,IAAY,EACZ,IAAY,EAAA;QADZ,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;IACnB;AACJ;;ACHK,SAAU,gBAAgB,CAC9B,IAA8B,EAC9B,YAAoB,EAAA;IAEpB,IAAI,KAAK,GAAG,KAAK;IAEjB,KAAK,CAAC,IAAI,EAAE;AACV,QAAA,QAAQ,CAAC,QAAQ,EAAA;YACf,IAAI,YAAY,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;gBACxC,KAAK,GAAG,IAAI;AACZ,gBAAA,OAAO,KAAK;YACd;QACF,CAAC;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,KAAK;AACd;;AClBM,SAAU,MAAM,CAAC,OAAe,EAAA;AACpC,IAAA,OAAO,EAAE,MAAM,EAAE,IAAI,OAAO,CAAA,CAAE,EAAE;AAClC;;SCGgB,cAAc,CAC5B,KAAmB,EACnB,YAAoB,EACpB,aAAwB,EAAA;;;;;;;;;;;;;;;;;;AAsBxB,IAAA,IACE,WAAW,CAAC,aAAoB,EAAE,OAAO,CAAC;AACzC,QAAA,aAAqB,CAAC,KAAK,KAAK,WAAW,EAC5C;QACA,IAAI,SAAS,EAAE,EAAE;;AAEf,YAAA,OAAO,CAAC,IAAI,CACV,+BAA+B,YAAY,CAAA,2BAAA,CAA6B,CACzE;QACH;QACA,OAAOA,OAAK,CAAC,KAAK,EAAE;AAClB,YAAA,YAAY,CAAC,gBAAgB,EAAA;gBAC3B,OAAOA,OAAK,CAAC,gBAAgB,EAAE;AAC7B,oBAAA,QAAQ,CAAC,YAAY,EAAA;wBACnB,IAAI,YAAY,KAAK,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE;AAC5C,4BAAA,OAAO,IAAI;wBACb;oBACF,CAAC;AACF,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,OAAOA,OAAK,CAAC,KAAK,EAAE;AAClB,QAAA,YAAY,CAAC,gBAAgB,EAAA;YAC3B,OAAOA,OAAK,CAAC,gBAAgB,EAAE;AAC7B,gBAAA,QAAQ,CAAC,YAAY,EAAA;oBACnB,IAAI,YAAY,KAAK,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE;AAC5C,wBAAA,OAAO,aAAa;oBACtB;gBACF,CAAC;AACF,aAAA,CAAC;QACJ,CAAC;AACF,KAAA,CAAC;AACJ;;AC9DA;AACA;AACA;AACM,SAAU,aAAa,CAAC,GAAiB,EAAA;IAC7C,MAAM,QAAQ,GAAY,EAAE;AAE5B,IAAA,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE;AACzB,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU;AACrC,IAAA,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI;IAC1B,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAC7C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC3B,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;;;AAGlB,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACxB,aAAA,CAAC;AACF,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACrB;AACA,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI;IAClB;AAEA,IAAA,OAAO,QAAQ;AACjB;;ACTO,MAAM,iBAAiB,GAAG;AAC1B,MAAM,wBAAwB,GAAG;AAExC;;;AAGG;AACG,SAAU,QAAQ,CAAC,GAAiB,EAAA;AACxC,IAAA,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE;AACzB,QAAA,MAAM,KAAK,CAAC,CAAA,yBAAA,CAA2B,CAAC;IAC1C;IAEA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE;AACpC,QAAA,OAAO,GAAG;IACZ;IAEA,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9B;AAEM,SAAU,cAAc,CAAC,KAAY,EAAA;AACzC,IAAA,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS;AACjC;AAEM,SAAU,WAAW,CAAC,KAAY,EAAA;AACtC,IAAA,QACE,CAAC,cAAc,CAAC,KAAK,CAAC;AACpB,QAAA,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AAC1D,QAAA,KAAK;AAET;AAEM,SAAU,eAAe,CAAC,KAAY,EAAA;AAC1C,IAAA,QACE,cAAc,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,IAAI,KAAK,IAAI;QACnB,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;AAElC;AAEM,SAAU,sBAAsB,CAAC,KAAY,EAAA;IACjD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,wBAAwB,CAAC;AACxD,IAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AACzD,QAAA,OAAO,EAAE;IACX;IACA,OAAO,GAAG,CAAC,CAAC;SACT,KAAK,CAAC,GAAG;SACT,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AACnB,SAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC;AAEM,SAAU,iBAAiB,CAAC,KAAY,EAAA;AAC5C,IAAA,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE;QAC1B,OAAO,KAAK,CAAC,IAAI;IACnB;AAEA,IAAA,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI;AAClB,IAAA,IAAI,CAAC,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE;AAC9C,QAAA,CAAC,GAAG,CAAC,CAAC,IAAI;IACZ;AACA,IAAA,OAAO,CAAC;AACV;SAEgB,gBAAgB,CAC9B,KAAY,EACZ,IAAwB,EACxB,IAAe,EAAA;IAEf,OAAO;QACL,IAAI;AACJ,QAAA,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC;QACpC,IAAI;KACL;AACH;AAEM,SAAU,aAAa,CAC3B,KAAY,EACZ,GAAiB,EAAA;;AAGjB,IAAA,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC;AAC1C,IAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,aAAa,GAAsB,IAAI;IAC3CA,OAAK,CAAC,GAAG,EAAE;AACT,QAAA,mBAAmB,CAAC,IAA6B,EAAA;YAC/C,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE;gBACvC,aAAa,GAAG,gBAAgB,CAC9B,KAAK,EACL,IAAI,EACJ,SAAS,CAAC,mBAAmB,CAC9B;AACD,gBAAA,OAAOC,OAAK;YACd;QACF,CAAC;AACD,QAAA,kBAAkB,CAAC,IAA4B,EAAA;AAC7C,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE;gBACrD,aAAa,GAAG,gBAAgB,CAC9B,KAAK,EACL,IAAI,EACJ,SAAS,CAAC,kBAAkB,CAC7B;AACD,gBAAA,OAAOA,OAAK;YACd;QACF,CAAC;AACD,QAAA,QAAQ,CAAC,IAAkB,EAAA;AACzB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE;gBAC5C,aAAa,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC;AACjE,gBAAA,OAAOA,OAAK;YACd;QACF,CAAC;AACD,QAAA,QAAQ,CAAC,IAAkB,EAAA;AACzB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE;gBAC5C,aAAa,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC;AACjE,gBAAA,OAAOA,OAAK;YACd;QACF,CAAC;AACD,QAAA,KAAK,CAAC,IAAe,EAAA;AACnB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE;gBAC5C,aAAa,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;AAC9D,gBAAA,OAAOA,OAAK;YACd;QACF,CAAC;AACF,KAAA,CAAC;AACF,IAAA,OAAO,aAAa;AACtB;AAEM,SAAU,UAAU,CAAC,GAAiB,EAAA;AAC1C,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;;IAE1B,OAAO,aAAa,CAAC,IAAI;SACtB,MAAM,CAAC,WAAW;AAClB,SAAA,GAAG,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC;SACjC,MAAM,CAAC,kBAAkB,CAAC;AAC/B;;ACvJM,SAAU,wBAAwB,CACtC,KAAmB,EACnB,YAAoB,EAAA;IAEpB,OAAOD,OAAK,CAAC,KAAK,EAAE;AAClB,QAAA,kBAAkB,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,EAAA;gBACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;AACzC,gBAAA,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,oBAAA,OAAO,IAAI;gBACb;YACF,CAAC;AACF,SAAA;AACF,KAAA,CAAC;AACJ;;SCXgB,mCAAmC,CACjD,KAAmB,EACnB,IAA6B,EAC7B,SAAiC,EAAA;IAEjC,OAAOA,OAAK,CAAC,KAAK,EAAE;AAClB,QAAA,mBAAmB,CAAC,KAAK,EAAA;AACvB,YAAA,IAAI,KAAK,KAAK,IAAI,EAAE;gBAClB,OAAOA,OAAK,CAAC,KAAK,EAAE;AAClB,oBAAA,kBAAkB,CAAC,MAAM,EAAA;wBACvB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;wBACvC,IAAI,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;AACtC,4BAAA,OAAO,IAAI;wBACb;oBACF,CAAC;AACF,iBAAA,CAAC;YACJ;QACF,CAAC;AACF,KAAA,CAAC;AACJ;;ACtBM,SAAU,cAAc,CAC5B,KAAmB,EACnB,YAAoB,EAAA;IAEpB,OAAOA,OAAK,CAAC,KAAK,EAAE;AAClB,QAAA,kBAAkB,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,EAAA;gBACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;AACzC,gBAAA,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,oBAAA,OAAO,IAAI;gBACb;YACF,CAAC;AACF,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,KAAK,CAAC,QAAQ,EAAA;AACZ,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK;AAChC,gBAAA,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,oBAAA,OAAO,IAAI;gBACb;YACF,CAAC;AACF,SAAA;AACF,KAAA,CAAC;AACJ;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACM,SAAU,KAAK,CAAC,IAAS,EAAA;;;IAG7B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AACvC,QAAA,OAAO,MAAM;IACf;AACA,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG;IACpB;IACA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE;QACzD,OAAO,CAAA,EAAG,IAAI,CAAA,CAAE;IAClB;AACA,IAAA,IAAI,IAAI,YAAY,YAAY,EAAE;AAChC,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,SAAS,EAAE;IAC5B;AACA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG;IACnD;AAEA,IAAA,MAAM,KAAK,GAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACrD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,WAA+B;AACnC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,WAAW,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG;QAC5B;AAAO,aAAA,IAAI,KAAK,YAAY,YAAY,EAAE;AACxC,YAAA,WAAW,GAAG,CAAA,EAAG,KAAK,CAAC,SAAS,EAAE;QACpC;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC/B,WAAW,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG;QAC3D;AAAO,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACpC,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;AACzD,gBAAA,WAAW,GAAG,CAAA,EAAG,KAAK,CAAC,MAAM,EAAE;YACjC;iBAAO;AACL,gBAAA,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;YAC5B;QACF;aAAO;AACL,YAAA,WAAW,GAAG,CAAA,EAAG,KAAK,CAAA,CAAE;QAC1B;AACA,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,YAAA,MAAM,KAAK,CAAC,CAAA,iBAAA,CAAmB,CAAC;QAClC;AACA,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,WAAW,EAAE;AAClC,IAAA,CAAC,CAAC;IACF,OAAO,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;AAChC;;AClDM,SAAU,yBAAyB,CACvC,WAAyB,EACzB,IAAY,EAAA;IAEZ,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE;;ACKA;;;;;;;AAOG;MACU,yBAAyB,GAAoB,CACxD,SAAiC,EACjC,UAAsB,KACI;IAC1B,IAAI,OAAO,GAAkB,IAAI;IAEjC,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,kBAAkB,EAAE;QACpD,OAAO,GAAI,UAAU,CAAC,IAA+B,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;IAC3E;SAAO,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,QAAQ,EAAE;QACjD,OAAO,GAAI,UAAU,CAAC,IAAqB,CAAC,IAAI,CAAC,KAAK;IACxD;AAEA,IAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,QAAA,OAAO,SAAS;IAClB;IAEA,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;IAC7C,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;IAClE,IAAI,KAAK,GAAG,wBAAwB,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;AAC9D,IAAA,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEnE,IAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE;AAC3C;;AC/BA;;;;;AAKG;MACU,2BAA2B,GAAoB,CAC1D,SAAiC,EACjC,UAAsB,KACI;AAC1B,IAAA,MAAM,aAAa,GAAG,UAAU,CAAC,IAA+B;IAEhE,MAAM,iBAAiB,GAAG,CAAC,aAAa,CAAC,mBAAmB,IAAI,EAAE;SAC/D,MAAM,CAAC,CAAC,MAAM,KACb,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEnE,SAAA,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAE9C,IAAA,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK;AAC3B,IAAA,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE;AACvC,QAAA,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;IACxC;IAEA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE;AAClD;;AChCA;;AAEG;AACI,MAAM,qBAAqB,GAAmB;AACnD,IAAA,IAAI,EAAE,iBAAiB;IACvB,SAAS,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,kBAAkB,CAAC;AAC7D,IAAA,WAAW,EAAE,yBAAyB;;;ACNxC;;;AAGG;AACI,MAAM,uBAAuB,GAAmB;AACrD,IAAA,IAAI,EAAE,oBAAoB;AAC1B,IAAA,SAAS,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC;AAC1C,IAAA,WAAW,EAAE,2BAA2B;;;ACV1C;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;ACTA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACI,MAAM,mBAAmB,GAAG,IAAI,UAAU,CAAC,CAAC,SAAS,EAAE,OAAO,KAAI;AACvE,IAAA,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE;AACtC,IAAA,MAAM,qBAAqB,GACzB,OAAO,CAAC,qBAAqB,IAAI,EAAE;;IAGrC,IAAI,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;AACpC,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;;AAG9B,IAAA,KAAK,MAAM,UAAU,IAAI,yBAAyB,CAChD,KAAK,EACL,uBAAuB,CAAC,IAAI,CAC7B,EAAE;QACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,WAAY,CACjD,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,EAC/C,UAAU,CACX;AACD,QAAA,IAAI,GAAG,MAAM,CAAC,KAAK;AACnB,QAAA,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;IACxC;;AAGA,IAAA,KAAK,MAAM,UAAU,IAAI,yBAAyB,CAChD,KAAK,EACL,qBAAqB,CAAC,IAAI,CAC3B,EAAE;QACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAY,CAC/C,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,EAC/C,UAAU,CACX;AACD,QAAA,IAAI,GAAG,MAAM,CAAC,KAAK;AACnB,QAAA,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;IACxC;;AAGA,IAAA,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,SAAS,EAAE,kBAAkB;AACxE,QAAA,EAAE,EAAE;QACJ,IAAI,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE;AACnD,YAAA,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC;QACtC;IACF;;;;AAKA,IAAA,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,SAAS,EAAE,eAAe;AACrE,QAAA,EAAE,EAAE;QACJ,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;AACpC,YAAA,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC;QACtC;IACF;;IAGA,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE,EAAE;QACpE,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7C,SAAS,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;AACnE,QAAA,IAAI,GAAG,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC;AAC9C,QAAA,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnE;AAEA,IAAA,SAAS,CAAC,KAAK,GAAG,IAAI;AAEtB,IAAA,OAAO,OAAO,CAAC,SAAS,CAAC;AAC3B,CAAC;;AC1ED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,iBAAiB,CAC/B,QAAuC,EAAA;AAEvC,IAAA,OAAO,CAAC,KAAiB,EAAE,OAAsB,KAAuB;QACtE,MAAM,MAAM,GAAsB,EAAE;AAEpC,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,MAAM,IAAI,GAAG,CAAC,EAAE,IAAgB;AAEhC,YAAA,IAAI,EAAE,IAAI,IAAI,QAAQ,CAAC,EAAE;gBACvB,IAAI,SAAS,EAAE,EAAE;AACf,oBAAA,MAAM,IAAI,KAAK,CACb,CAAA,qDAAA,EAAwD,IAAI,CAAA,GAAA,CAAK;AAC/D,wBAAA,CAAA,oEAAA,CAAsE,CACzE;gBACH;gBACA;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC5B,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;AAEjC,YAAA,MAAM,QAAQ,GACZ,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK;YAE5D,IAAI,QAAQ,KAAK,IAAI;gBAAE;YAEvB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAkB,GAAG,GAAG,EAAE,CAAC;QAC5C;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;;ACxFO,MAAM,iBAAiB,GAAG;SAEjB,WAAW,CACzB,SAAkD,EAClD,kBAA0B,iBAAiB,EAAA;IAE3C,OAAO;AACL,QAAA,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC5C,QAAA,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,IAAI,eAAe;AAC9D,QAAA,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK;AACrC,QAAA,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;KAC3C;AACH;;SCPgB,wBAAwB,CACtC,UAA+D,EAC/D,kBAA0B,EAAE,EAAA;AAE5B,IAAA,OAAO,IAAI,UAAU,CACnB,CAAC,UAAuC,KAAI;QAC1C,IAAI,IAAI,GAA2B,IAAI;AACvC,QAAA,MAAM,cAAc,GAAG,CAAC,QAAgC,KAAI;YAC1D,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;AACpC,gBAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,oBAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC3B;gBACA,IAAI,GAAG,QAAQ;YACjB;AACF,QAAA,CAAC;QAED,MAAM,KAAK,GAAG;AACX,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,EAAE,KAAI;AACf,YAAA,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE;gBAC3B,cAAc,CAAC,IAAI,CAAC;AACpB,gBAAA,OAAO,KAAK;YACd;YAEA,cAAc,CAAC,WAAW,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;;;YAIhD,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAC5B,SAAS,CAAC,GAAG,CAAC,EACd,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CACvB;YACD,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,EAAE;AAEd,QAAA,OAAO,MAAK;YACV,KAAK,CAAC,WAAW,EAAE;AACrB,QAAA,CAAC;AACH,IAAA,CAAC,CACF;AACH;AAEA,SAAS,eAAe,CACtB,IAA4B,EAC5B,IAA4B,EAAA;AAE5B,IAAA,IACE,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM;AAC7B,QAAA,IAAI,EAAE,QAAQ,KAAK,IAAI,EAAE,QAAQ;AACjC,QAAA,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK;AAC3B,QAAA,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,EAC3B;AACA,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,KAAK;AACd;;ACgBA,SAAS,aAAa,CACpB,WAA4B,EAC5B,kBAAsC,EACtC,OAAsB,EAAA;IAEtB,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC;AACnD,IAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;QAC/B,MAAM,KAAK,CAAC,CAAA,mBAAA,EAAsB,WAAW,CAAC,IAAI,CAAA,YAAA,CAAc,CAAC;IACnE;IAEA,OAAO,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI;;AAE1D,IAAA,IAAI,CAAC,CAAC,CAAC,CACR;AACH;AAEA,SAAS,cAAc,CACrB,YAA+B,EAC/B,kBAAsC,EACtC,OAAsB,EAAA;AAEtB,IAAA,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAC5B,SAAS,CAAC,CAAC,WAAW,KACpB,aAAa,CAAC,WAAW,EAAE,kBAAkB,EAAE,OAAO,CAAC,CACxD,EACD,MAAM,CAAC,kBAAkB,CAAC,EAC1B,OAAO,EAAE,CACV;AACH;AAEA;;;AAGG;AACH,SAAS,YAAY,CACnB,OAAkC,EAAA;AAElC,IAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;AACzB;AAEA;;;;;;AAMG;AACH,SAAS,cAAc,CACrB,eAA6C,EAAA;IAE7C,MAAM,SAAS,GAA+B,EAAE;AAEhD,IAAA,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAE5B,IAAI,SAAS,EAAE,EAAE;AACf,YAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,gBAAA,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;;AAE7D,oBAAA,OAAO,CAAC,IAAI,CACV,CAAA,uGAAA,CAAyG,CAC1G;oBACD;gBACF;YACF;QACF;AAEA,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB;IACF;AAEA,IAAA,OAAO,SAAS;AAClB;AAEA,SAAS,aAAa,CAAC,YAAqC,EAAA;IAC1D,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC;AAC/C;AAEO,eAAe,eAAe,CACnC,YAA+B,EAC/B,kBAAsC,EACtC,OAAsB,EAAA;AAEtB,IAAA,MAAM,OAAO,GACX,CAAC,MAAM,cAAc,CACnB,YAAY,EACZ,kBAAkB,EAClB,OAAO,CACR,CAAC,SAAS,EAAE,KAAK,EAAE;AAEtB,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,OAAO,GAAG;SACb,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,MAAM;SACxB,MAAM,CAAC,kBAAkB;AACzB,SAAA,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAEzD,MAAM,YAAY,GAAG;SAClB,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,SAAS;SAC3B,MAAM,CAAC,kBAAkB,CAAC;IAE7B,OAAO;AACL,QAAA,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC;AAC7B,QAAA,SAAS,EAAE,cAAc,CAAC,YAAY,CAAC;KACxC;AACH;;ACtLA;;;AAGG;AACG,SAAU,WAAW,CAAC,QAAyB,EAAA;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ;AAEjD,IAAA,MAAM,oBAAoB,GAAG,KAAK,GAAG,QAAQ,CAAC,QAAQ;AACtD,IAAA,MAAM,UAAU,GAAG,oBAAoB,GAAG,CAAC,GAAG,oBAAoB,GAAG,CAAC;IAEtE,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACvC,QAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC;KACtD;AACH;;ACkBM,SAAU,gCAAgC,CAK9C,QAA6D,EAC7D,IAAwB,EACxB,SAGwB,EACxB,cAGyB,EACzB,WAAwB,EACxB,kBAAsC,EAAA;AAEtC,IAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC;AAChD,IAAA,MAAM,eAAe,GACnB,kBAAkB,CAAwB,cAAc,CAAC;;;;AAK3D,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAK;QAC3B,IAAI,SAAS,GAAG,IAAI;AACpB,QAAA,OAAO,wBAAwB,CAAC,UAAU,CAAC,CAAC,IAAI,CAC9C,SAAS,CAAC,CAAC,QAAQ,KAAI;YACrB,IAAI,CAAC,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE;AAC7C,gBAAA,OAAO,KAAK;YACd;YACA,SAAS,GAAG,KAAK;AACjB,YAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;AACrB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,WAAW,CAAC,CACjB;AACH,IAAA,CAAC,CAAC;;;;IAKF,MAAM,iBAAiB,GAAG,aAAa,CAAC,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CACxE,SAAS,CAAC,CAAC,CAAC,EACZ,SAAS,CAAC,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC,KAAI;AACxC,QAAA,MAAM,OAAO,GAAkB,EAAE,cAAc,EAAE,eAAe,EAAE;QAElE,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC,IAAI,CACpD,SAAS,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAC9D;QAED,MAAM,WAAW,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC,IAAI,CAChE,SAAS,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;;QAEjE,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CACxE;QAED,OAAO,aAAa,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAC9C,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM;AAC5B,YAAA,cAAc,EAAE,eAAe;YAC/B,QAAQ;YACR,KAAK;YACL,UAAU;SACX,CAAC,CAAC,CACJ;AACH,IAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,KAAI;QACR,QAAQ,CAAC,YAAY,CAAC;AACpB,YAAA,IAAI,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC;YAC3B,GAAG,CAAC,CAAC,QAAQ;YACb,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;YACjD,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;AACzD,SAAA,CAAC;IACX,CAAC,CAAC,CACH;IAED,OAAO,KAAK,CAAC,MAAK;;;AAGhB,QAAA,IAAI,aAAa,GAAiB,YAAY,CAAC,KAAK;AACpD,QAAA,aAAa,GAAG;AACb,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,EAAE,KAAI;YACf,IAAI,CAAC,EAAE,IAAI,CAAE,EAAU,CAAC,cAAc,EAAE;AACtC,gBAAA,OAAO,KAAK;YACd;YACA,OAAQ,EAAU,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CACrD,GAAG,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAC7C;AACH,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,EAAE;;;;AAKd,QAAA,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAW;AACvC,QAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEzE,QAAA,OAAO,QAAQ,CAAC,IAAI,CAClB,oBAAoB,EAAE,EACtB,SAAS,CAAC,MAAM,IAAI,CAAC,EACrB,QAAQ,CAAC,MAAK;YACZ,UAAU,CAAC,WAAW,EAAE;YACxB,aAAa,CAAC,WAAW,EAAE;QAC7B,CAAC,CAAC,CACH;IACH,CAAC,CAAC,CAAC,IAAI,CACL,UAAU,CAAC,CAAC,GAAG,KAAI;;AAEjB,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,QAAA,OAAO,EAAE,CAAC,EAAY,CAAC;AACzB,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C;AACH;AAEA,SAAS,sBAAsB,CAC7B,UAAwD,EAAA;;;;;;AAOxD,IAAA,MAAM,uBAAuB,GAAG,CAC9B,EAAwB,KACE;AAC1B,QAAA,IAAI,CAAE,EAAU,CAAC,0BAA0B,EAAE;;;YAG3C,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CACjB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EACnB,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CACpB;QACH;QACA,OAAQ,EAAU,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,CACxD,GAAG,CAAC,OAAO,EAAE,CAAC,eAAe,GAAI,EAAU,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAC/D,SAAS,CAAC,EAAE,CAAC,eAAe,GAAI,EAAU,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAC9D;AACH,IAAA,CAAC;AAED,IAAA,OAAO,UAAU,CAAC,IAAI,CACpB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAC9D,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C;AACH;AAEA,SAAS,6BAA6B,CACpC,UAAwD,EAAA;AAExD,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E;AAEA,SAAS,iBAAiB,CACxB,QAA6D,EAAA;IAE7D,OAAO,QAAQ,CAAC,wBAAwB,EAAE,EAAE,aAAa,IAAI,KAAK;AACpE;;ACpKA;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,aAA6B,EAAA;AAC7D,IAAA,OAAO,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC,KAAK,GAAG,KAAK;AACpE;AAiCA;;AAEG;AACI,MAAM,2BAA2B,GAAG;AAE3C;;;AAGG;MACU,wBAAwB,CAAA;AA+DhB,IAAA,SAAA;AAIA,IAAA,iBAAA;AAIA,IAAA,oBAAA;AAlEF,IAAA,iBAAiB,GAAG,IAAI,eAAe,CACtD,EAAgB,CACjB;AACgB,IAAA,wBAAwB,GAAG,IAAI,eAAe,CAC7D,KAAK,CACN;AACgB,IAAA,aAAa,GAAG,IAAI,OAAO,EAEzC;AACH;;;;AAIG;AACc,IAAA,qBAAqB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC3D,IAAA,qBAAqB,GAAG,IAAI,OAAO,EAAW;AAE/D;;AAEG;IACK,WAAW,GAAW,iBAAiB;AAE/C,IAAA,IAAY,iBAAiB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK;IAC5C;IACA,IAAY,iBAAiB,CAAC,KAAc,EAAA;AAC1C,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3C;IAEQ,uBAAuB,GAAG,KAAK;AAEtB,IAAA,aAAa;AAEd,IAAA,QAAQ;AAExB;;AAEG;AACa,IAAA,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AAElE;;;;;;AAMG;AACa,IAAA,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AAE1D,IAAA,IAAW,gBAAgB,GAAA;QACzB,OAAO,IAAI,CAAC,iBAAiB;IAC/B;AACA,IAAA,IAAW,sBAAsB,GAAA;QAC/B,OAAO,IAAI,CAAC,uBAAuB;IACrC;AAEA,IAAA,WAAA;;IAEmB,SAAsC;AACvD;;AAEG;AACc,IAAA,iBAAA,GAA4B,GAAG;AAChD;;AAEG;IACc,oBAAmD,EAAA;QARnD,IAAA,CAAA,SAAS,GAAT,SAAS;QAIT,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAIjB,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;AAErC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACxB,IAAI,CAAC,SAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CACzD;;;;;QAMD,IAAI,mBAAmB,GAAG,KAAK;AAC/B,QAAA,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;QAE7D,MAAM,aAAa,GAAG,MAAK;YACzB,IAAI,mBAAmB,EAAE;gBACvB;YACF;YACA,mBAAmB,GAAG,IAAI;AAC1B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAClE,gBAAA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B,GAAG,CAAC,WAAW,EAAE;AACnB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAK;AAC9B,YAAA,IAAI,IAAmD;AACvD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC;iBACxB,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAK;AACP,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;AACrC,YAAA,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,EACjC,QAAQ,CAAC,MAAK;;;AAGZ,gBAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;oBAChC,IAAI,CAAC,OAAO,EAAE;AACd,oBAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;gBACtC;AACF,YAAA,CAAC,CAAC;AAEH,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;gBACtC,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;oBACrD,MAAM;oBACN,MAAM;AACP,iBAAA,CAAC;AACF,gBAAA,MAAM,aAAa,GACjB,IAAI,KAAK,SAAS;AAClB,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAClD,IAAI,GAAG,OAAc;AACrB,gBAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;;;;AAIpC,gBAAA,IACE,aAAa;AACb,oBAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,aAAa;wBAC7C,aAAa,CAAC,YAAY,EAC5B;AACA,oBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvC;AACF,YAAA,CAAC,CAAC;YAEJ,IAAI,cAAc,GAAG,CAAC;AACtB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI;;;AAGrC,YAAA,GAAG,CAAC,CAAC,CAAC,KACJ,CAAC,wBAAwB,CAAC,CAAC,CAAC,aAAa;kBACrC,aAAa;kBACb,SAAS,CACd;;AAED,YAAA,GAAG,CAAC,CAAC,CAAC,KAAI;gBACR,IAAI,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,KAAK,EAAE;AAC3C,oBAAA,cAAc,EAAE;AAChB,oBAAA,IAAI,cAAc,IAAI,2BAA2B,EAAE;AACjD,wBAAA,MAAM,KAAK,CAAC,sCAAsC,CAAC;oBACrD;gBACF;qBAAO,IAAI,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,KAAK,EAAE;oBAClD,cAAc,GAAG,CAAC;gBACpB;AACF,YAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAK;gBACZ,aAAa,CAAC,WAAW,EAAE;AAC3B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;YAChC,CAAC,CAAC,CACH;AACH,QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAEvD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAChD,SAAS,CAAC,CAAC,gBAAgB,KAAI;YAC7B,IAAI,CAAC,gBAAgB,EAAE;AACrB,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC;YAClB;AAEA,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAC5B,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,EAC/B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,EACpD,GAAG,CAAC,CAAC,OAAO,KAAI;gBACd,IAAI,CAAC,OAAO,EAAE;AACZ,oBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxC;AACF,YAAA,CAAC,CAAC;;;YAGF,SAAS,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,EAC3C,SAAS,CAAC,CAAC,CAAC,EACZ,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C;AACH,QAAA,CAAC,CAAC;;;AAGF,QAAA,SAAS,CAAC,CAAC,CAAC,KACV,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CACrE,CACF;IACH;AAEO,IAAA,IAAI,CACT,MAA+C,EAAA;AAE/C,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;IACrC;AAEQ,IAAA,eAAe,CACrB,MAA+C,EAAA;AAE/C,QAAA,OAAO,IAAI,UAAU,CAAS,CAAC,UAA8B,KAAI;AAC/D,YAAA,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AAEzD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;iBACnB,IAAI,CACH,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EACnE,SAAS,CAAC,CAAC,MAAM,KAAI;AACnB,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;oBAC7B,OAAO,EAAE,EAAE;gBACb;;;gBAIA,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC,IAAI;gBAEvD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAC1C,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACtD,GAAG,CAAC,CAAC,YAAY,KAAI;oBACnB,MAAM,cAAc,GAClB,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC;oBAClD,IAAI,cAAc,EAAE;wBAClB,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,EAAS,CAAC;oBAC/D;AACA,oBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC;AAE/C,oBAAA,IAAI,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE;AAC3C,wBAAA,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,UAAU;oBAC5C;AAEA,oBAAA,IAAI,IAAI,GAAG,iBAAiB,CAAC,KAAK,IAAI,EAAE;AAExC,oBAAA,MAAM,aAAa,GACjB,YAAY,CAAC,UAAU,KAAK,SAAS;AACrC,wBAAA,YAAY,CAAC,UAAU,KAAK,IAAI;;;;oBAKlC,IAAI,aAAa,EAAE;wBACjB,IAAI,YAAY,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE;4BAC3C,IAAI,GAAG,IAAI,KAAK,CAAO,YAAY,CAAC,UAAU,IAAI,CAAC,CAAC;wBACtD;AAEA,wBAAA,IAAI,UAAU,GAAG,SAAS,IAAI,CAAC;AAC/B,wBAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE,aAAa,EAAE;4BAClD,UAAU,GAAG,CAAC;wBAChB;;AAGA,wBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjD,4BAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC7C;AAEA,wBAAA,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;oBAClB;yBAAO;AACL,wBAAA,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC;oBAC/B;;;;;AAMA,oBAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;AACzB,wBAAA,GAAG,CAAC;wBACJ,OAAO,EAAE,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE;AACpB,qBAAA,CAAC,CAAC;AAEH,oBAAA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC9B,CAAC,CAAC,CACH;AACH,YAAA,CAAC,CAAC;AAEH,iBAAA,SAAS,EAAE;YAEd,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC;AAEvD,YAAA,OAAO,MAAK;gBACV,QAAQ,CAAC,WAAW,EAAE;gBACtB,OAAO,CAAC,WAAW,EAAE;AAErB,gBAAA,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,iBAAiB,CAAC,QAAQ,EAAE;AAC9B,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;AAMG;AACK,IAAA,aAAa,CACnB,MAAgC,EAAA;QAEhC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,MAAM;AAE/D,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QAE9B,MAAM,oBAAoB,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;AACzD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAW,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;YAC/D;YAAE,GAAW,CAAC,GAAG,CAAC;AACf,gBAAA,MAAM,CAAC,IAAY,CAAC,GAAG,CAAC,KAAK;AAC5B,sBAAE;AACF,sBAAG,MAAM,CAAC,IAAY,CAAC,GAAG,CAAC;AAC/B,YAAA,OAAO,GAAG;QACZ,CAAC,EAAE,EAAW,CAAC;AAEf,QAAA,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE;IAC5B;AAEQ,IAAA,6BAA6B,CACnC,IAA4C,EAAA;QAE5C,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,aAAa,EAAE;AACnD,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,QACE,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC;AAC/B,YAAA,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;AACzB,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AAClC,YAAA,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU;IAExC;AAEQ,IAAA,iBAAiB,CACvB,YAAiE,EAAA;AAEjE,QAAA,IAAI,YAAY,CAAC,YAAY,CAAC,EAAE;YAC9B,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC;QAEA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5C;IAEO,YAAY,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK;IACrC;AAEQ,IAAA,sBAAsB,CAC5B,SAAqB,EAAA;QAErB,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;QACpD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAK,EAAiB,CAAC;IACjE;AAEQ,IAAA,wBAAwB,CAC9B,SAA8B,EAAA;AAE9B,QAAA,MAAM,UAAU,GAAG;YACjB,GAAG,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,GAAG,SAAS;SACb;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAK,EAAiB,CAAC;IACjE;AAEO,IAAA,YAAY,CAAC,SAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;QACxC;IACF;AAEO,IAAA,cAAc,CAAC,SAA8B,EAAA;AAClD,QAAA,MAAM,UAAU,GAAG;YACjB,GAAG,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,GAAG,SAAS;SACb;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC;QACzC;IACF;AAEO,IAAA,OAAO,CACZ,SAAsB,EACtB,WAAW,GAAG,KAAK,EAAA;QAEnB,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;QACpD,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC;;;QAGA,UAAU,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC;AAEO,IAAA,QAAQ,CACb,KAA0D,EAC1D,cAAA,GAA0B,KAAK,EAAA;QAE/B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;QACpC,IAAI,cAAc,EAAE;;YAElB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACxC;IACF;IAEO,UAAU,GAAA;AACf,QAAA,OAAQ,IAAI,CAAC,SAAiB,CAAC,QAAQ,CAAC,OAAO;IACjD;IAEO,wBAAwB,GAAA;QAC7B,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,qBAAqB;IAC1D;AAEA;;;;;AAKG;IACK,yBAAyB,GAAA;AAC/B,QAAA,OAAQ,IAAI,CAAC,SAAiB,CAAC,QAAQ,CAAC,SAAS;IACnD;AAEQ,IAAA,sBAAsB,CAC5B,SAAsB,EAAA;AAEtB,QAAA,IACE,CAAC,kBAAkB,CAAC,SAAS,CAAC;AAC9B,YAAA,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,aAAa,EAC/C;AACA,YAAA,OAAO,SAAS;QAClB;QAEA,MAAM,KAAK,GAAG,EAAE,IAAI,SAAS,IAAI,EAAE,CAAC,EAAgB;AACpD,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE,aAAa,EAAE;AAClD,YAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW;QAC/B;AACA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,UAAU,CAAC,KAAuC,EAAA;AACxD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7D,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAClC;IACF;AACD;;MClfY,gCAAgC,GAC3C,IAAI,cAAc,CAChB,kCAAkC;AAGtC,MAAM,gBAAgB,GAAkC;AACtD,IAAA,mBAAmB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;CACnC;MAKY,uBAAuB,CAAA;AAIf,IAAA,OAAA;AAHF,IAAA,OAAO;IAExB,WAAA,CACmB,OAAe,EAGhC,OAAuC,EAAA;QAHtB,IAAA,CAAA,OAAO,GAAP,OAAO;QAKxB,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,GAAG,gBAAgB;AACnB,YAAA,IAAI,OAAO,IAAI,EAAE,CAAC;SACnB;IACH;IAEO,UAAU,CAKf,OAA0C,EAC1C,qBAA6C,EAAA;AAE7C,QAAA,MAAM,QAAQ,GAAyC;AACrD,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,GAAG,gBAAgB;AACnB,YAAA,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB;AAC9C,YAAA,GAAG,OAAO;SACX;QAED,IAAI,qBAAqB,EAAE;YACzB,QAAQ,CAAC,OAAO,GAAG;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;AAC3B,gBAAA,qBAAqB,EAAE;oBACrB,IAAI,QAAQ,CAAC,OAAO,EAAE,qBAAqB,IAAI,EAAE,CAAC;AAClD,oBAAA,GAAG,qBAAqB;AACzB,iBAAA;aACF;QACH;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAoB,QAAQ,CAAC;AAErE,QAAA,OAAO,IAAI,wBAAwB,CAAC,QAAQ,CAAC;IAC/C;AA3CW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,wCAMxB,gCAAgC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAN/B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAMI;;0BACA,MAAM;2BAAC,gCAAgC;;;MCtC/B,wCAAwC,GAAG,CACtD,WAGC,EACD,OAA2B,KACA;AAC3B,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS;AAC7C,IAAA,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO;IAEzC,IAAI,MAAM,GAAG,IAAI;AAEjB,IAAA,IACE,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;QACzC,iBAAiB,CAAC,OAAO,CAAC;QAC1B,iBAAiB,CAAC,SAAS,CAAC;AAC5B,QAAA,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,EACvC;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IACE,kDAAkD,CAAC,QAAQ,CACzD,SAAS,CAAC,UAAU,CACrB;AACD,QAAA,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,EACxC;AACA,QAAA,MAAM,UAAU,GAAG,6BAA6B,CAC9C,SAAS,CAAC,UAAU,EACpB,OAAO,CAAC,QAAQ,EAChB,IAAI,CACL;QAED,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE;AAChC,YAAA,QAAQ,SAAS,CAAC,UAAU;gBAC1B,KAAK,IAAI,EAAE;AACT,oBAAA,IAAI,aAAa;AACjB,oBAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB,EAAE;AACzC,wBAAA,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;wBACpC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;oBAC1D;AAAO,yBAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;AACtC,wBAAA,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;wBACpC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACpD;AAEA,oBAAA,IAAI,kBAAkB,CAAC,aAAa,CAAC,EAAE;AACrC,wBAAA,MAAM,GAAG;AACP,4BAAA,MAAM,EAAE;AACN,gCAAA,GAAG,EAAE;AACH,oCAAA;AACE,wCAAA,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,WAAW,EAAE,EAAE;AAC5D,qCAAA;AACD,oCAAA;AACE,wCAAA,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG;AACxB,4CAAA,EAAE,EAAE,aAAa,CAAC,WAAW,EAAE;AAChC,yCAAA;AACF,qCAAA;AACF,iCAAA;AACF,6BAAA;AACD,4BAAA,SAAS,EAAE,EAAE;yBACd;oBACH;oBAEA;gBACF;AACA,gBAAA,KAAK,IAAI;gBACT,KAAK,KAAK,EAAE;AACV,oBAAA,MAAM,UAAU,GACd,SAAS,CAAC,UAAU,KAAK;AACvB,0BAAE;AACF,0BAAE,SAAS,CAAC,UAAU,KAAK;AACzB,8BAAE;8BACA,IAAI;AAEZ,oBAAA,IAAI,aAAa;AACjB,oBAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB,EAAE;AACzC,wBAAA,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;wBACpC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;oBAC1D;AAAO,yBAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;AACtC,wBAAA,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;wBACpC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACpD;oBAEA,IACE,kBAAkB,CAAC,UAAU,CAAC;AAC9B,wBAAA,kBAAkB,CAAC,aAAa,CAAC,EACjC;AACA,wBAAA,MAAM,GAAG;AACP,4BAAA,MAAM,EAAE;AACN,gCAAA,GAAG,EAAE;AACH,oCAAA;AACE,wCAAA,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG;AACxB,4CAAA,CAAC,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE;AAC1C,yCAAA;AACF,qCAAA;AACF,iCAAA;AACF,6BAAA;AACD,4BAAA,SAAS,EAAE,EAAE;yBACd;oBACH;oBAEA;gBACF;AACA,gBAAA,KAAK,IAAI;gBACT,KAAK,KAAK,EAAE;AACV,oBAAA,MAAM,GAAG;AACP,wBAAA,MAAM,EAAE;AACN,4BAAA,GAAG,EAAE;AACH,gCAAA;AACE,oCAAA,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG;wCACxB,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE;AACjD,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA,SAAS,EAAE,EAAE;qBACd;oBAED;gBACF;AACA,gBAAA;oBACE;;QAEN;IACF;AAAO,SAAA,IACL,mDAAmD,CAAC,QAAQ,CAC1D,SAAS,CAAC,UAAU,CACrB;AACD,QAAA,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC;AACtC,QAAA,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,EACpC;AACA,QAAA,MAAM,QAAQ,GAAG,6BAA6B,CAC5C,SAAS,CAAC,QAAQ,EAClB,OAAO,CAAC,QAAQ,EAChB,IAAI,CACL;AACD,QAAA,MAAM,MAAM,GAAG,6BAA6B,CAC1C,SAAS,CAAC,MAAM,EAChB,OAAO,CAAC,QAAQ,EAChB,IAAI,CACL;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE;AAC1D,YAAA,IAAI,SAAS;AACb,YAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB,EAAE;AACzC,gBAAA,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;gBAC5B,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAClD;AAAO,iBAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;AACtC,gBAAA,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;gBAC5B,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5C;AAEA,YAAA,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE;AACjC,gBAAA,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE;AACtC,oBAAA,MAAM,GAAG;AACP,wBAAA,MAAM,EAAE;AACN,4BAAA,GAAG,EAAE;AACH,gCAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,EAAE;AAC7D,gCAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE;AAC9D,6BAAA;AACF,yBAAA;AACD,wBAAA,SAAS,EAAE,EAAE;qBACd;gBACH;AAAO,qBAAA,IAAI,SAAS,CAAC,UAAU,KAAK,aAAa,EAAE;AACjD,oBAAA,MAAM,GAAG;AACP,wBAAA,MAAM,EAAE;AACN,4BAAA,EAAE,EAAE;AACF,gCAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,EAAE;AAC5D,gCAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE;AAC9D,6BAAA;AACF,yBAAA;AACD,wBAAA,SAAS,EAAE,EAAE;qBACd;gBACH;YACF;QACF;IACF;AAAO,SAAA,IAAI,SAAS,CAAC,UAAU,KAAK,OAAO,EAAE;AAC3C,QAAA,MAAM,GAAG;AACP,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;AACjD,aAAA;AACD,YAAA,SAAS,EAAE,EAAE;SACd;IACH;AAAO,SAAA,IAAI,SAAS,CAAC,UAAU,KAAK,WAAW,EAAE;AAC/C,QAAA,MAAM,GAAG;AACP,YAAA,MAAM,EAAE;AACN,gBAAA,GAAG,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;AACnD,aAAA;AACD,YAAA,SAAS,EAAE,EAAE;SACd;IACH;AAEA,IAAA,OAAO,MAAM;AACf;;MCnMa,2CAA2C,GAAG,CACzD,WAAmF,EACnF,OAA2B,KACA;IAC3B,IAAI,MAAM,GAAG,IAAI;IAEjB,IAAI,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC7C,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IACE,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;QAC/C,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAC1D;QACA,IACE,qDAAqD,CAAC,QAAQ,CAC5D,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CACvC;YACD,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAC1D;AACA,YAAA,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;AAExE,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;AACzB,gBAAA,MAAM,GAAG;AACP,oBAAA,MAAM,EAAE;AACN,wBAAA,GAAG,EAAE;AACH,4BAAA;AACE,gCAAA,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG;oCACxB,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,GAAG,aAAa;AACxD,iCAAA;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACD,oBAAA,SAAS,EAAE,EAAE;iBACd;YACH;QACF;aAAO,IACL,sDAAsD,CAAC,QAAQ,CAC7D,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CACvC;YACD,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;YACxD,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EACtD;AACA,YAAA,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;AAEpE,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAEhE,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;gBAC5C,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE;AACxD,oBAAA,MAAM,GAAG;AACP,wBAAA,MAAM,EAAE;AACN,4BAAA,GAAG,EAAE;AACH,gCAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE;AAClD,gCAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;AACjD,6BAAA;AACF,yBAAA;AACD,wBAAA,SAAS,EAAE,EAAE;qBACd;gBACH;qBAAO,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,KAAK,aAAa,EAAE;AACnE,oBAAA,MAAM,GAAG;AACP,wBAAA,MAAM,EAAE;AACN,4BAAA,EAAE,EAAE;AACF,gCAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE;AACjD,gCAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;AAChD,6BAAA;AACF,yBAAA;AACD,wBAAA,SAAS,EAAE,EAAE;qBACd;gBACH;YACF;QACF;aAAO,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,EAAE;AAC7D,YAAA,MAAM,GAAG;AACP,gBAAA,MAAM,EAAE;AACN,oBAAA,EAAE,EAAE;AACF,wBAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;AAC1C,wBAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACzC,qBAAA;AACF,iBAAA;AACD,gBAAA,SAAS,EAAE,EAAE;aACd;QACH;aAAO,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,KAAK,WAAW,EAAE;AACjE,YAAA,MAAM,GAAG;AACP,gBAAA,MAAM,EAAE;AACN,oBAAA,GAAG,EAAE;AACH,wBAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;AAC3C,wBAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;AAC1C,qBAAA;AACF,iBAAA;AACD,gBAAA,SAAS,EAAE,EAAE;aACd;QACH;IACF;AAEA,IAAA,OAAO,MAAM;AACf;;MC/Fa,wCAAwC,GAAG,CACtD,WAAgF,EAChF,OAA2B,KACA;IAC3B,IAAI,MAAM,GAAG,IAAI;IAEjB,IAAI,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC7C,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IACE,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;QAC/C,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAC1D;QACA,IACE,kDAAkD,CAAC,QAAQ,CACzD,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CACvC;YACD,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAC1D;AACA,YAAA,MAAM,GAAG;AACP,gBAAA,MAAM,EAAE;AACN,oBAAA,GAAG,EAAE;AACH,wBAAA;AACE,4BAAA,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG;AACxB,gCAAA,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,GACrC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU;AACzC,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,SAAS,EAAE,EAAE;aACd;QACH;aAAO,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,EAAE;AAC7D,YAAA,MAAM,GAAG;AACP,gBAAA,MAAM,EAAE;AACN,oBAAA,EAAE,EAAE;AACF,wBAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;AAC1C,wBAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACzC,qBAAA;AACF,iBAAA;AACD,gBAAA,SAAS,EAAE,EAAE;aACd;QACH;aAAO,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,KAAK,WAAW,EAAE;AACjE,YAAA,MAAM,GAAG;AACP,gBAAA,MAAM,EAAE;AACN,oBAAA,GAAG,EAAE;AACH,wBAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;AAC3C,wBAAA,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;AAC1C,qBAAA;AACF,iBAAA;AACD,gBAAA,SAAS,EAAE,EAAE;aACd;QACH;IACF;AAEA,IAAA,OAAO,MAAM;AACf;;AChEO,MAAM,kBAAkB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACArC;;;;;AAKG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,IAAI;IACJ,KAAK;IACL,UAAU;IACV,WAAW;IACX,YAAY;IACZ,aAAa;IACb,UAAU;IACV,WAAW;IACX,gBAAgB;AACjB,CAAA,CAAC;AAEF,SAAS,aAAa,CAAC,QAAgB,EAAE,KAAU,EAAE,OAAY,EAAA;IAC/D,QAAQ,QAAQ;AACd,QAAA,KAAK,IAAI;YACP,OAAO,KAAK,KAAK,OAAO;AAC1B,QAAA,KAAK,KAAK;YACR,OAAO,KAAK,KAAK,OAAO;AAC1B,QAAA,KAAK,IAAI;YACP,OAAO,KAAK,GAAG,OAAO;AACxB,QAAA,KAAK,KAAK;YACR,OAAO,KAAK,IAAI,OAAO;AACzB,QAAA,KAAK,IAAI;YACP,OAAO,KAAK,GAAG,OAAO;AACxB,QAAA,KAAK,KAAK;YACR,OAAO,KAAK,IAAI,OAAO;;AAEzB,QAAA,KAAK,KAAK;YACR,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,CAAA;AAC3B,QAAA,KAAK,MAAM;YACT,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,CAAA;AAC5B,QAAA,KAAK,KAAK;YACR,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,CAAA;AAC3B,QAAA,KAAK,MAAM;YACT,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,CAAA;AAC5B,QAAA,KAAK,IAAI;AACP,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1D,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3D,QAAA,KAAK,UAAU;AACb,YAAA,QACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,OAAO,KAAK,QAAQ;AAC3B,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAE3B,QAAA,KAAK,WAAW;AACd,YAAA,QACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,OAAO,KAAK,QAAQ;AAC3B,gBAAA,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAE5B,QAAA,KAAK,YAAY;AACf,YAAA,QACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,OAAO,KAAK,QAAQ;AAC3B,gBAAA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;AAE7B,QAAA,KAAK,aAAa;AAChB,YAAA,QACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,OAAO,KAAK,QAAQ;AAC3B,gBAAA,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;AAE9B,QAAA,KAAK,UAAU;AACb,YAAA,QACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,OAAO,KAAK,QAAQ;AAC3B,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAE3B,QAAA,KAAK,WAAW;AACd,YAAA,QACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,OAAO,KAAK,QAAQ;AAC3B,gBAAA,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAE5B,KAAK,gBAAgB,EAAE;;;AAGrB,YAAA,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;AACnD,YAAA,MAAM,UAAU,GAAG,OAAO,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;AACzD,YAAA,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAClE;AACA,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAA,CAAA,CAAG,CAAC;;AAE/D;AAEA;;;;;;;;;;;AAWG;AACH,SAAS,iBAAiB,CAAC,KAAU,EAAE,MAAW,EAAA;IAChD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;AAC3C,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAM,KAAK,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;AAC9D,YAAA,OAAO,KAAK;QACd;IACF;IAEA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;QAC5B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;AAC5D,YAAA,OAAO,KAAK;QACd;IACF;IAEA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACrC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE;YACjC;QACF;AAEA,QAAA,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,gBAAA,OAAO,KAAK;YACd;QACF;aAAO;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AACjD,gBAAA,OAAO,KAAK;YACd;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;;;;;;;;AASG;AACG,SAAU,WAAW,CAAI,IAAS,EAAE,KAAe,EAAA;AACvD,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9D;;SCrKgB,WAAW,CAAI,IAAS,EAAE,IAAY,EAAE,IAAY,EAAA;AAClE,IAAA,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,QAAA,MAAM,KAAK,CAAC,CAAA,sBAAA,EAAyB,IAAI,CAAA,CAAE,CAAC;IAC9C;;;;IAMA,MAAM,GAAG,GAAQ,EAAE;IACnB,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB;AAEA,IAAA,OAAO,GAAG;AACZ;;ACPA;;;;;;;;;;;;AAYG;AACG,SAAU,SAAS,CAAI,KAAU,EAAE,KAAmB,EAAA;IAC1D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC9B,QAAA,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;YAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AACtC,YAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB;YACF;YAEA,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AACrC,YAAA,MAAM,IAAI,GAAI,CAAS,CAAC,KAAK,CAAC;AAC9B,YAAA,MAAM,IAAI,GAAI,CAAS,CAAC,KAAK,CAAC;;AAG9B,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI;AAC1B,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI;YAC1B,IAAI,KAAK,IAAI,KAAK;gBAAE;AACpB,YAAA,IAAI,KAAK;AAAE,gBAAA,OAAO,CAAC;AACnB,YAAA,IAAI,KAAK;gBAAE,OAAO,CAAC,CAAC;YAEpB,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC;AACpD,YAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AACpB,gBAAA,OAAO,SAAS,KAAK,MAAM,GAAG,CAAC,UAAU,GAAG,UAAU;YACxD;QACF;AAEA,QAAA,OAAO,CAAC;AACV,IAAA,CAAC,CAAC;AACJ;AAEA,SAAS,qBAAqB,CAAC,CAAM,EAAE,CAAM,EAAA;IAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAClD,QAAA,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3B;IAEA,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,CAAC;AACnB,IAAA,OAAO,CAAC;AACV;;AC/CM,SAAU,eAAe,CAAI,KAAU,EAAE,IAAS,EAAA;IACtD,IAAI,MAAM,GAAG,KAAK;AAClB,IAAA,MAAM,KAAK,GAAa,IAAI,EAAE,KAAK;AACnC,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,QAAA,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;IACrC;AAEA,IAAA,MAAM,KAAK,GAAiB,IAAI,EAAE,KAAK;AACvC,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,QAAA,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;IACnC;AAEA,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM;AAEhC,IAAA,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,MAAM;AACxC,IAAA,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE;QACxD,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;IAC1C;AAEA,IAAA,MAAM,QAAQ,GAA4B;AACxC,QAAA,WAAW,EAAE,IAAI,GAAG,IAAI,GAAG,UAAU;QACrC,eAAe,EAAE,IAAI,GAAG,CAAC;KAC1B;IAED,OAAO;AACL,QAAA,KAAK,EAAE,MAAM;QACb,QAAQ;QACR,UAAU;KACX;AACH;;MCjCa,aAAa,CAAA;AACP,IAAA,oBAAoB,GAAG,IAAI,eAAe,CAEzD,EAAE,CAAC;IAEG,MAAM,GAAe,EAAE;IACvB,KAAK,GAAU,EAAE;IACjB,OAAO,GAAG,CAAC;IACX,UAAU,GAAG,EAAE;IACf,WAAW,GAAG,GAAG;IACjB,aAAa,GAAG,CAAC;AAEzB,IAAA,IAAI,GAAG,IAAI,YAAY,EAAmB;AAC1C,IAAA,MAAM,GAAG,IAAI,YAAY,EAAO;IAChC,eAAe,GAAG,KAAK;AAEvB,IAAA,IAAI,GAA4B,IAAI,YAAY,EAAa;AAC7D,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IACA,IAAI,KAAK,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEgB,IAAA,YAAY,GAC1B,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;AAE1C,IAAA,OAAO,YAAY,CAAC,EAAO,EAAE,kBAA0B,EAAE,EAAA;QACvD,OAAO;AACL,YAAA,MAAM,EAAG,EAAU,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;AAC7C,YAAA,QAAQ,EAAG,EAAU,CAAC,YAAY,EAAE,QAAQ,IAAI,eAAe;AAC/D,YAAA,KAAK,EAAG,EAAU,CAAC,YAAY,EAAE,KAAK;AACtC,YAAA,KAAK,EAAG,EAAU,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC;SAC5C;IACH;AAEA,IAAA,IAAI,YAAY,GAAA;QAMd,OAAO;AACL,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;AACtB,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;AAC5B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;SACzB;IACH;AAEA,IAAA,QAAQ,CAAC,CAAa,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACxC;AAEA,IAAA,eAAe,CAAC,CAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,CAAC;QACV;AACA,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE;AACV,YAAA,OAAO,CAAC;QACV;AACA,QAAA,OAAO,CAAC;IACV;IAEA,SAAS,GAAA;;QAEP,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC;AACpD,QAAA,MAAM,QAAQ,GAAG,aAAa,GAAG,KAAK,GAAG,UAAU;AACnD,QAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK;QAC7C,OAAO,IAAI,GAAG,CAAC;IACjB;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU;IACvC;IAEA,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA,IAAA,OAAO,CAAC,CAAS,EAAA;QACf,IAAI,EAAE,GAAG,CAAC;AACV,QAAA,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,EAAE;YACzB;QACF;QAEA,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE;;AAE/B,YAAA,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAC7B;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IACnC;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;IACvD;AAEA,IAAA,OAAO,CAAC,CAAQ,EAAA;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;IAChB;AAEA,IAAA,eAAe,CAAC,CAAS,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE;YAC5B;QACF;AACA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,UAAU,EAAE;YACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QACnC;IACF;AAEA;;;;;AAKG;IACH,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,UAAU;IACxB;AACD;;AClJK,SAAU,qBAAqB,CACnC,GAAiB,EACjB,OAA4D,EAC5D,kBAAA,GAAoC,MAAM,EAC1C,wBAAA,GAAoC,KAAK,EAAA;AAEzC,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC7C,QAAA,MAAM,KAAK,CAAC,CAAA,gCAAA,CAAkC,CAAC;IACjD;IAEA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACvB;IACF;AAEA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE;YAC/B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AAC/B,gBAAA,MAAM,KAAK,CAAC,CAAA,iBAAA,EAAoB,CAAC,CAAA,oBAAA,CAAsB,CAAC;YAC1D;AACA,YAAA,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,EAAE;AAC1C,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAC5C,gBAAA,MAAM,aAAa,GAAG,CAAA,KAAA,EAAQ,CAAC,EAAE;AACjC,gBAAA,IAAI,WAAW,KAAK,aAAa,EAAE;oBACjC,MAAM,KAAK,CACT,CAAA,iBAAA,EAAoB,CAAC,CAAA,aAAA,EAAgB,aAAa,CAAA,WAAA,EAAc,WAAW,CAAA,CAAA,CAAG,CAC/E;gBACH;YACF;QACF;aAAO;YACL,IAAI,CAAC,wBAAwB,EAAE;AAC7B,gBAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,kBAAkB;sBACvD,kBAAkB,CAAC,IAAI,GAAG,kBAAkB,CAAC;AAC/C,sBAAE,kBAAkB,CAAC,IAAI,CAAC;gBAC5B,IAAI,aAAa,EAAE;AACjB,oBAAA,MAAM,KAAK,CAAC,CAAA,iBAAA,EAAoB,CAAC,CAAA,wBAAA,CAA0B,CAAC;gBAC9D;YACF;QACF;IACF;AACF;AAEA;;AAEG;AACH,SAAS,eAAe,CACtB,OAA4D,EAC5D,KAAa,EAAA;AAEb,IAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;AACvB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACpB,YAAA,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAClC,gBAAA,OAAO,IAAI;YACb;QACF;aAAO;AACL,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,gBAAA,OAAO,IAAI;YACb;QACF;IACF;AAEA,IAAA,OAAO,KAAK;AACd;;ACzDM,SAAU,eAAe,CAAC,OAA+B,EAAA;IAC7D,OAAO,IAAI,UAAU,CAAC,CAAC,SAAS,EAAE,OAAO,KAAI;AAC3C,QAAA,OAAO,IAAIE,YAAU,CAAC,CAAC,UAAU,KAAI;YACnC,MAAM,OAAO,GAAG,MAAK;gBACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;AAC3C,gBAAA,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;AAClC,gBAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACzB,UAAU,CAAC,QAAQ,EAAE;AACvB,YAAA,CAAC;YAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE;gBACtC,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC;AACpD,gBAAA,OAAO,MAAM,YAAY,CAAC,SAAS,CAAC;YACtC;AAEA,YAAA,OAAO,EAAE;AACT,YAAA,OAAO,MAAK,EAAE,CAAC;AACjB,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ;;ACdA;;;;;AAKG;AACG,SAAU,+BAA+B,CAC7C,OAAyC,EAAA;AAEzC,IAAA,OAAO,aAAa,CAAC,OAAO;QAC1B,KAAK,EAAE,IAAI,aAAa,EAAE;AAC1B,QAAA,IAAI,EAAE,MAAM,CACV,mBAAmB,EACnB,eAAe,CAAC;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;AACrB,SAAA,CAAC,CACH;AACD,QAAA,cAAc,EAAE;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,WAAW,EAAE,mBAAmB;AAChC,gBAAA,WAAW,EAAE,QAAQ;AACtB,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,WAAW,EAAE,cAAc;AAC3B,gBAAA,WAAW,EAAE,KAAK;AACnB,aAAA;AACF,SAAA;AACF,KAAA,CAAC,CAAC;AACL;;AChCM,SAAU,yBAAyB,CAAC,GAAW,EAAA;IACnD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,EAAE;AACzC;AAEM,SAAU,uBAAuB,CAAC,UAAkB,EAAA;IACxD,MAAM,QAAQ,GAA0B,EAAE;AAC1C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;QACnC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAC7C;IAEA,OAAO;AACL,QAAA,oBAAoB,EAAE,CAAC,IAAU,KAAK,eAAe,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,CAAC;KAC3E;AACH;AAEO,MAAM,qBAAqB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;AAsBxC;;;;AAIG;AACI,MAAM,4BAA4B,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;ACnD/C;;AAEG;;;;"}
1
+ {"version":3,"file":"theseam-ui-common-graphql.mjs","sources":["../../../projects/ui-common/graphql/apollo-links/log-query-link.ts","../../../projects/ui-common/graphql/models/direction.ts","../../../projects/ui-common/graphql/models/hints-kind.ts","../../../projects/ui-common/graphql/models/query-processing-config.ts","../../../projects/ui-common/graphql/models/variable.ts","../../../projects/ui-common/graphql/utils/contains-variable.ts","../../../projects/ui-common/graphql/utils/gql-var.ts","../../../projects/ui-common/graphql/utils/inline-variables.ts","../../../projects/ui-common/graphql/utils/parse-comments.ts","../../../projects/ui-common/graphql/utils/parse-hints.ts","../../../projects/ui-common/graphql/utils/remove-variable-definition.ts","../../../projects/ui-common/graphql/utils/remove-variable-definitions-not-defined.ts","../../../projects/ui-common/graphql/utils/remove-variable.ts","../../../projects/ui-common/graphql/utils/to-gql.ts","../../../projects/ui-common/graphql/utils/hints-tokens-containing-hint.ts","../../../projects/ui-common/graphql/hints/transformers/inline-variable.transformer.ts","../../../projects/ui-common/graphql/hints/transformers/remove-not-defined.transformer.ts","../../../projects/ui-common/graphql/hints/inline-variable.hint-def.ts","../../../projects/ui-common/graphql/hints/remove-not-defined.hint-def.ts","../../../projects/ui-common/graphql/hints/index.ts","../../../projects/ui-common/graphql/apollo-links/query-processing-link.ts","../../../projects/ui-common/graphql/datatable/create-sorts-mapper.ts","../../../projects/ui-common/graphql/datatable/get-page-info.ts","../../../projects/ui-common/graphql/datatable/create-page-info-observable.ts","../../../projects/ui-common/graphql/datatable/map-filter-states.ts","../../../projects/ui-common/graphql/datatable/map-page-info.ts","../../../projects/ui-common/graphql/datatable/datatable-helpers.ts","../../../projects/ui-common/graphql/datatable/datatable-graphql-query-ref.ts","../../../projects/ui-common/graphql/datatable/datatable-graphql.service.ts","../../../projects/ui-common/graphql/datatable/map-search-date-columns-data-filter-state-to-gql.ts","../../../projects/ui-common/graphql/datatable/map-search-numeric-columns-data-filter-state-to-gql.ts","../../../projects/ui-common/graphql/datatable/map-search-text-columns-data-filter-state-to-gql.ts","../../../projects/ui-common/graphql/testing/base-schema-fragment.ts","../../../projects/ui-common/graphql/testing/filter-where.ts","../../../projects/ui-common/graphql/testing/skip-and-take.ts","../../../projects/ui-common/graphql/testing/sort-items.ts","../../../projects/ui-common/graphql/testing/filtered-results.ts","../../../projects/ui-common/graphql/testing/mock-datatable.ts","../../../projects/ui-common/graphql/testing/check-records-have-value.ts","../../../projects/ui-common/graphql/testing/mock-graphql-link.ts","../../../projects/ui-common/graphql/testing/create-mock-apollo-testing-provider.ts","../../../projects/ui-common/graphql/testing/data/simple-gql-test-data.ts","../../../projects/ui-common/graphql/theseam-ui-common-graphql.ts"],"sourcesContent":["import { ApolloLink } from '@apollo/client/core'\nimport { print } from 'graphql'\n\nexport interface LogQueryLinkOptions {\n beforeStyles?: string\n afterStyles?: string\n}\n\n/**\n * Wraps an Apollo link and logs the operation state immediately before and\n * after the wrapped link processes it.\n *\n * Useful for inspecting what `queryProcessingLink` does to a query:\n *\n * ```ts\n * link: concat(\n * logQueryLink(queryProcessingLink),\n * httpLink,\n * )\n * ```\n *\n * The output uses `console.log` with optional CSS styles so each snapshot\n * is easy to distinguish in the browser console. Tree-shaking will remove\n * this from production builds when it is not imported.\n */\nexport function logQueryLink(\n inner: ApolloLink,\n options?: LogQueryLinkOptions,\n): ApolloLink {\n const beforeStyles = options?.beforeStyles ?? 'color: cyan'\n const afterStyles = options?.afterStyles ?? 'color: limegreen'\n\n const beforeLink = new ApolloLink((operation, forward) => {\n // eslint-disable-next-line no-console\n console.log(\n `%c~~~BEFORE\\n${print(operation.query)}\\n${JSON.stringify(operation.variables, null, 2)}`,\n beforeStyles,\n )\n return forward(operation)\n })\n\n const afterLink = new ApolloLink((operation, forward) => {\n // eslint-disable-next-line no-console\n console.log(\n `%c~~~AFTER\\n${print(operation.query)}\\n${JSON.stringify(operation.variables, null, 2)}`,\n afterStyles,\n )\n return forward(operation)\n })\n\n return ApolloLink.from([beforeLink, inner, afterLink])\n}\n","export class GQLDirection {\n constructor(public readonly direction: string) {}\n public static readonly ASC = new GQLDirection('ASC')\n public static readonly DESC = new GQLDirection('DESC')\n}\n","import { Kind } from 'graphql'\n\nexport enum HintsKind {\n OperationDefinition = Kind.OPERATION_DEFINITION,\n Field = Kind.FIELD,\n VariableDefinition = Kind.VARIABLE_DEFINITION,\n Variable = Kind.VARIABLE,\n Argument = Kind.ARGUMENT,\n}\n","export const DEFAULT_TO_REMOVE_ON_UNDEFINED = ['where', 'order']\n\nexport interface QueryProcessingVariablesConfig {\n removeIfNotDefined?: string[]\n removeIfNotUsed?: string[]\n inline?: string[]\n}\n\nexport interface QueryProcessingConfig {\n variables: QueryProcessingVariablesConfig\n\n /**\n * If skip and take are found, they will be removed\n */\n disablePaging?: boolean\n}\n","export class GQLVariable {\n constructor(\n public readonly name: string,\n public readonly type: string,\n ) {}\n}\n","import { BREAK, DocumentNode, ValueNode, visit } from 'graphql/language'\n\nexport function containsVariable(\n node: DocumentNode | ValueNode,\n variableName: string,\n) {\n let found = false\n\n visit(node, {\n Variable(variable) {\n if (variableName === variable.name.value) {\n found = true\n return BREAK\n }\n },\n })\n\n return found\n}\n","export function gqlVar(varName: string): { gqlVar: string } {\n return { gqlVar: `$${varName}` }\n}\n","import { isDevMode } from '@angular/core'\n\nimport { hasProperty } from '@theseam/ui-common/utils'\nimport { BREAK, DocumentNode, ValueNode, visit } from 'graphql'\n\nexport function inlineVariable(\n query: DocumentNode,\n variableName: string,\n variableValue: ValueNode,\n): DocumentNode {\n // return visit(query, {\n // VariableDefinition(node) {\n // if (variableName === node.variable.name.value) {\n // console.log(node)\n // // found = true\n // console.log('insert', variableValue)\n // // return BREAK\n\n // // node.defaultValue = variableValue\n // return {\n // ...node,\n // defaultValue: variableValue\n // }\n // }\n // }\n // })\n\n // console.log('~inlineVariable', variableName, variableValue)\n\n // TODO: Decide if this is a good solution.\n if (\n hasProperty(variableValue as any, 'value') &&\n (variableValue as any).value === 'undefined'\n ) {\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn(\n `Ignoring attempt to inline '${variableName}', because it is undefined.`,\n )\n }\n return visit(query, {\n SelectionSet(selectionSetNode) {\n return visit(selectionSetNode, {\n Variable(variableNode) {\n if (variableName === variableNode.name.value) {\n return null\n }\n },\n })\n },\n })\n }\n\n return visit(query, {\n SelectionSet(selectionSetNode) {\n return visit(selectionSetNode, {\n Variable(variableNode) {\n if (variableName === variableNode.name.value) {\n return variableValue\n }\n },\n })\n },\n })\n}\n","import { DocumentNode, Token } from 'graphql/language'\n\n// Based on Prettier's comment parsing.\n//\n// Source: https://github.com/prettier/prettier/blob/4e46f92b8648c7f25de62bfaf4368aa3f2e588d9/src/language-graphql/parser-graphql.js#L6\nexport function parseComments(ast: DocumentNode): Token[] {\n const comments: Token[] = []\n\n if (ast.loc === undefined) {\n return comments\n }\n\n const startToken = ast.loc.startToken\n let next = startToken.next\n while (next !== null && next.kind !== '<EOF>') {\n if (next.kind === 'Comment') {\n Object.assign(next, {\n // The Comment token's column starts _after_ the `#`,\n // but we need to make sure the node captures the `#`\n column: next.column - 1,\n })\n comments.push(next)\n }\n next = next.next\n }\n\n return comments\n}\n","import {\n ArgumentNode,\n BREAK,\n DocumentNode,\n FieldNode,\n OperationDefinitionNode,\n parse,\n Token,\n VariableDefinitionNode,\n VariableNode,\n visit,\n} from 'graphql'\n\nimport { notNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport { HintsKind, HintsToken } from '../models'\nimport { parseComments } from './parse-comments'\n\nexport const HINT_PREFIX_REGEX = /^\\s*@gql-hint:.+/\nexport const HINT_NAMES_CAPTURE_REGEX = /^\\s*@gql-hint:([a-zA-z-\\d\\s]+)$/\n\n/**\n * If AST loc has startToken prop then return same AST else reparse with config\n * to contain comments and loc at each node.\n */\nexport function parseAst(ast: DocumentNode): DocumentNode {\n if (ast.loc === undefined) {\n throw Error(`Expected AST to have loc.`)\n }\n\n if (ast.loc.startToken !== undefined) {\n return ast\n }\n\n return parse(ast.loc.source)\n}\n\nexport function isCommentToken(token: Token): boolean {\n return token.kind === 'Comment'\n}\n\nexport function isHintToken(token: Token): boolean {\n return (\n (isCommentToken(token) &&\n (token.value?.match(HINT_PREFIX_REGEX)?.length || 0) > 0) ||\n false\n )\n}\n\nexport function isInlineComment(token: Token): boolean {\n return (\n isCommentToken(token) &&\n token.prev !== null &&\n token.prev.line === token.line\n )\n}\n\nexport function hintNamesFromHintToken(token: Token): string[] {\n const grp = token.value?.match(HINT_NAMES_CAPTURE_REGEX)\n if (grp === null || grp === undefined || grp.length === 0) {\n return []\n }\n return grp[1]\n .split(' ')\n .map((x) => x.trim())\n .filter((x) => x.length > 0)\n}\n\nexport function getTokenAppliesTo(token: Token): Token | null {\n if (isInlineComment(token)) {\n return token.prev\n }\n\n let t = token.next\n if (t?.kind === '$' && t.next?.kind === 'Name') {\n t = t.next\n }\n return t\n}\n\nexport function createHintsToken(\n token: Token,\n node: HintsToken['node'],\n kind: HintsKind,\n): HintsToken {\n return {\n node,\n hints: hintNamesFromHintToken(token),\n kind,\n }\n}\n\nexport function getHintsToken(\n token: Token,\n ast: DocumentNode,\n): HintsToken | null {\n // console.log('getHintsToken', token)\n const appliesTo = getTokenAppliesTo(token)\n if (appliesTo === null) {\n return null\n }\n\n let appliesToNode: HintsToken | null = null\n visit(ast, {\n OperationDefinition(node: OperationDefinitionNode) {\n if (node.loc?.start === appliesTo.start) {\n appliesToNode = createHintsToken(\n token,\n node,\n HintsKind.OperationDefinition,\n )\n return BREAK\n }\n },\n VariableDefinition(node: VariableDefinitionNode) {\n if (node.variable.name.loc?.start === appliesTo.start) {\n appliesToNode = createHintsToken(\n token,\n node,\n HintsKind.VariableDefinition,\n )\n return BREAK\n }\n },\n Variable(node: VariableNode) {\n if (node.name.loc?.start === appliesTo.start) {\n appliesToNode = createHintsToken(token, node, HintsKind.Variable)\n return BREAK\n }\n },\n Argument(node: ArgumentNode) {\n if (node.name.loc?.start === appliesTo.start) {\n appliesToNode = createHintsToken(token, node, HintsKind.Argument)\n return BREAK\n }\n },\n Field(node: FieldNode) {\n if (node.name.loc?.start === appliesTo.start) {\n appliesToNode = createHintsToken(token, node, HintsKind.Field)\n return BREAK\n }\n },\n })\n return appliesToNode\n}\n\nexport function parseHints(ast: DocumentNode): HintsToken[] {\n const _ast = parseAst(ast)\n // console.log('_ast', _ast)\n return parseComments(_ast)\n .filter(isHintToken)\n .map((r) => getHintsToken(r, _ast))\n .filter(notNullOrUndefined)\n}\n","import { DocumentNode, visit } from 'graphql'\n\nexport function removeVariableDefinition(\n query: DocumentNode,\n variableName: string,\n): DocumentNode {\n return visit(query, {\n VariableDefinition: {\n enter(variable) {\n const name = variable.variable.name.value\n if (name === variableName) {\n return null\n }\n },\n },\n })\n}\n","import { Operation } from '@apollo/client'\nimport { DocumentNode, OperationDefinitionNode, visit } from 'graphql'\n\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nexport function removeVariableDefinitionsNotDefined(\n query: DocumentNode,\n node: OperationDefinitionNode,\n variables: Operation['variables'],\n) {\n return visit(query, {\n OperationDefinition(opDef) {\n if (opDef === node) {\n return visit(opDef, {\n VariableDefinition(varDef) {\n const name = varDef.variable.name.value\n if (isNullOrUndefined(variables[name])) {\n return null\n }\n },\n })\n }\n },\n })\n}\n","import { DocumentNode, visit } from 'graphql'\n\nexport function removeVariable(\n query: DocumentNode,\n variableName: string,\n): DocumentNode {\n return visit(query, {\n VariableDefinition: {\n enter(variable) {\n const name = variable.variable.name.value\n if (name === variableName) {\n return null\n }\n },\n },\n Argument: {\n enter(variable) {\n const name = variable.name.value\n if (name === variableName) {\n return null\n }\n },\n },\n })\n}\n","import { GQLDirection } from '../models'\n\n// Naive initial implementation. This is intended for dynamic values, such as\n// sorting and filtering. If you are defining a schema, use the gql template\n// function from 'apollo-angular'.\n//\n// TODO: Try to find a maintained library that will handle this. Ideally a\n// type-safe one, but that is becoming surprisingly harder to find than I\n// expected for GraphQL.\nexport function toGQL(json: any): string {\n // Handle primitive top-level values so callers can pass non-objects (e.g.\n // when inlining a String or Int variable directly into a query argument).\n if (json === null || json === undefined) {\n return 'null'\n }\n if (typeof json === 'string') {\n return `\"${json}\"`\n }\n if (typeof json === 'number' || typeof json === 'boolean') {\n return `${json}`\n }\n if (json instanceof GQLDirection) {\n return `${json.direction}`\n }\n if (Array.isArray(json)) {\n return `[${json.map((v) => toGQL(v)).join(',')}]`\n }\n\n const props: string[] = Object.keys(json).map((prop) => {\n const value = json[prop]\n let resultValue: string | undefined\n if (typeof value === 'string') {\n resultValue = `\"${value}\"`\n } else if (value instanceof GQLDirection) {\n resultValue = `${value.direction}`\n } else if (Array.isArray(value)) {\n resultValue = `[${value.map((v) => toGQL(v)).join(',')}]`\n } else if (typeof value === 'object') {\n if (Object.prototype.hasOwnProperty.call(value, 'gqlVar')) {\n resultValue = `${value.gqlVar}`\n } else {\n resultValue = toGQL(value)\n }\n } else {\n resultValue = `${value}`\n }\n if (typeof resultValue !== 'string') {\n throw Error(`Unexpected value.`)\n }\n return `${prop}: ${resultValue}`\n })\n return `{${props.join(', ')}}`\n}\n","import { HintsToken } from '../models'\n\nexport function hintsTokensContainingHint(\n hintsTokens: HintsToken[],\n hint: string,\n): HintsToken[] {\n return hintsTokens.filter((r) => r.hints.indexOf(hint) !== -1)\n}\n","import { parseValue, VariableDefinitionNode, VariableNode } from 'graphql'\n\nimport { withoutProperty } from '@theseam/ui-common/utils'\n\nimport {\n HintsKind,\n HintsToken,\n HintTransformer,\n HintTransformOperation,\n} from '../../models'\nimport { inlineVariable, removeVariableDefinition, toGQL } from '../../utils'\n\n/**\n * Inlines the variable's current value directly into the query AST and removes\n * the variable definition from the parameter list. The variable is also\n * removed from the operation's variables map so it is not sent to the server.\n *\n * Applies to VariableDefinition (comment above the `$var` in the parameter\n * list) or Variable (inline comment beside a `$var` usage in the query body).\n */\nexport const inlineVariableTransformer: HintTransformer = (\n operation: HintTransformOperation,\n hintsToken: HintsToken,\n): HintTransformOperation => {\n let varName: string | null = null\n\n if (hintsToken.kind === HintsKind.VariableDefinition) {\n varName = (hintsToken.node as VariableDefinitionNode).variable.name.value\n } else if (hintsToken.kind === HintsKind.Variable) {\n varName = (hintsToken.node as VariableNode).name.value\n }\n\n if (varName === null) {\n return operation\n }\n\n const varValue = operation.variables[varName]\n const newVariables = withoutProperty(operation.variables, varName)\n let query = removeVariableDefinition(operation.query, varName)\n query = inlineVariable(query, varName, parseValue(toGQL(varValue)))\n\n return { query, variables: newVariables }\n}\n","import { OperationDefinitionNode } from 'graphql'\n\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n HintsToken,\n HintTransformer,\n HintTransformOperation,\n} from '../../models'\nimport { removeVariable } from '../../utils'\n\n/**\n * Removes every variable from the query that is null or undefined in the\n * operation's variables map. Both the variable definition (from the parameter\n * list) and any argument usages in the query body are removed so the resulting\n * document remains valid.\n */\nexport const removeNotDefinedTransformer: HintTransformer = (\n operation: HintTransformOperation,\n hintsToken: HintsToken,\n): HintTransformOperation => {\n const operationNode = hintsToken.node as OperationDefinitionNode\n\n const undefinedVarNames = (operationNode.variableDefinitions ?? [])\n .filter((varDef) =>\n isNullOrUndefined(operation.variables[varDef.variable.name.value]),\n )\n .map((varDef) => varDef.variable.name.value)\n\n let query = operation.query\n for (const varName of undefinedVarNames) {\n query = removeVariable(query, varName)\n }\n\n return { query, variables: operation.variables }\n}\n","import { HintDefinition, HintsKind } from '../models'\nimport { inlineVariableTransformer } from './transformers/inline-variable.transformer'\n\n/**\n * Maps variable value to gql and inlines it into the query.\n */\nexport const inlineVariableHintDef: HintDefinition = {\n name: 'inline-variable',\n appliesTo: [HintsKind.Variable, HintsKind.VariableDefinition],\n transformer: inlineVariableTransformer,\n}\n","import { HintDefinition, HintsKind } from '../models'\nimport { removeNotDefinedTransformer } from './transformers/remove-not-defined.transformer'\n\n/**\n * Remove the variable from the query if it is not defined in the operation\n * variables.\n */\nexport const removeNotDefinedHintDef: HintDefinition = {\n name: 'remove-not-defined',\n appliesTo: [HintsKind.OperationDefinition],\n transformer: removeNotDefinedTransformer,\n}\n","// /**\n// * Remove the variable from the query if it is not defined in the operation\n// * variables.\n// *\n// * Applies to: OperationDefinition\n// */\n// export const GQL_HINT_REMOVE_NOT_DEFINED = 'remove-not-defined'\n\n// /**\n// * Maps variable value to gql and inlines it into the query.\n// *\n// * Applies to: Variable, VariableDefinition\n// */\n// export const GQL_HINT_INLINE_VARIABLE = 'inline-variable'\n\n// /**\n// * Remove variable definition from the query if it is not used by the operation.\n// *\n// * Applies to: VariableDefinition\n// */\n// // export const GQL_HINT_REMOVE_IF_NOT_USED = 'remove-if-not-used'\n\n// export const GQL_HINTS = [\n// // GQL_HINT_REMOVE_IF_NOT_USED,\n// GQL_HINT_REMOVE_NOT_DEFINED,\n// GQL_HINT_INLINE_VARIABLE\n// ]\n\nexport * from './transformers/inline-variable.transformer'\nexport * from './transformers/remove-not-defined.transformer'\n\nexport * from './inline-variable.hint-def'\nexport * from './remove-not-defined.hint-def'\n","import { ApolloLink } from '@apollo/client/core'\nimport { isNullOrUndefined, withoutProperty } from '@theseam/ui-common/utils'\nimport { parseValue } from 'graphql'\n\nimport { inlineVariableHintDef, removeNotDefinedHintDef } from '../hints'\nimport { QueryProcessingConfig } from '../models'\nimport {\n containsVariable,\n hintsTokensContainingHint,\n inlineVariable,\n parseAst,\n parseHints,\n removeVariable,\n removeVariableDefinition,\n toGQL,\n} from '../utils'\n\n/**\n * Apollo link that transforms GraphQL operations before they are sent.\n *\n * Two mechanisms are supported and can be combined freely:\n *\n * **Hint-based** — place `# @gql-hint: <name>` comments directly in the query.\n * Supported hints:\n * - `remove-not-defined` on the operation definition: removes every variable\n * whose value is null/undefined (definition + argument usage).\n * - `inline-variable` on a variable definition or usage: substitutes the\n * variable's current value directly into the query AST and removes it from\n * the variables map.\n *\n * **Config-based** — pass a `QueryProcessingConfig` via Apollo context under\n * the key `queryProcessingConfig`. Supported options:\n * - `variables.removeIfNotDefined`: remove named variables when null/undefined.\n * - `variables.removeIfNotUsed`: remove named variable definitions when the\n * variable is not referenced anywhere in the (possibly already-transformed)\n * query body.\n * - `variables.inline`: inline named variables into the query AST.\n *\n * Hints are applied first, then config-based processing.\n */\nexport const queryProcessingLink = new ApolloLink((operation, forward) => {\n const context = operation.getContext()\n const queryProcessingConfig: QueryProcessingConfig =\n context.queryProcessingConfig ?? {}\n\n // Reparse to ensure token/comment info is present for hint parsing.\n let _ast = parseAst(operation.query)\n const rules = parseHints(_ast)\n\n // ---- Hint: remove-not-defined ----------------------------------------\n for (const hintsToken of hintsTokensContainingHint(\n rules,\n removeNotDefinedHintDef.name,\n )) {\n const result = removeNotDefinedHintDef.transformer!(\n { query: _ast, variables: operation.variables },\n hintsToken,\n )\n _ast = result.query\n operation.variables = result.variables\n }\n\n // ---- Hint: inline-variable --------------------------------------------\n for (const hintsToken of hintsTokensContainingHint(\n rules,\n inlineVariableHintDef.name,\n )) {\n const result = inlineVariableHintDef.transformer!(\n { query: _ast, variables: operation.variables },\n hintsToken,\n )\n _ast = result.query\n operation.variables = result.variables\n }\n\n // ---- Config: removeIfNotDefined ---------------------------------------\n for (const varName of queryProcessingConfig?.variables?.removeIfNotDefined ??\n []) {\n if (isNullOrUndefined(operation.variables[varName])) {\n _ast = removeVariable(_ast, varName)\n }\n }\n\n // ---- Config: removeIfNotUsed -----------------------------------------\n // Intentionally runs after removeIfNotDefined so that variables which were\n // only referenced inside another (now-removed) variable can be cleaned up.\n for (const varName of queryProcessingConfig?.variables?.removeIfNotUsed ??\n []) {\n if (!containsVariable(_ast, varName)) {\n _ast = removeVariable(_ast, varName)\n }\n }\n\n // ---- Config: inline --------------------------------------------------\n for (const varName of queryProcessingConfig?.variables?.inline ?? []) {\n const varValue = operation.variables[varName]\n operation.variables = withoutProperty(operation.variables, varName)\n _ast = removeVariableDefinition(_ast, varName)\n _ast = inlineVariable(_ast, varName, parseValue(toGQL(varValue)))\n }\n\n operation.query = _ast\n\n return forward(operation)\n})\n","import { isDevMode } from '@angular/core'\n\nimport { SortItem } from '@theseam/ui-common/datatable'\n\nimport { SortsMapper, SortsMapperResult } from './datatable-helpers'\nimport { MapperContext } from './mapper-context'\n\n/**\n * A field mapping entry for {@link createSortsMapper}:\n *\n * - `string` – the GQL sort-field name to emit for this column\n * - `null` – column is not sortable; the sort item will be dropped\n * - `function` – `(prop, context) => string | null` for dynamic mapping\n * with access to {@link MapperContext}\n */\nexport type SortsMapperFieldEntry =\n | string\n | null\n | ((prop: string, context: MapperContext) => string | null)\n\n/**\n * A partial map from column prop names to their GQL sort fields.\n *\n * Each key must be a valid property of `TRow`, catching typos and\n * copy-paste errors at compile time. Only columns that actually need\n * sort mapping must be listed — unlisted columns are silently dropped\n * (or throw in dev mode).\n */\nexport type SortsMapperFieldMap<TRow extends Record<string, any>> = {\n [K in keyof TRow & string]?: SortsMapperFieldEntry\n}\n\n/**\n * Creates a {@link SortsMapper} from a declarative field-name map.\n *\n * Each key must correspond to a datatable column `prop` value. The value\n * controls how that column's sort is translated to a GQL sort object:\n *\n * - `string` – emits `{ [gqlField]: 'ASC' | 'DESC' }`\n * - `null` – column is not sortable; the sort item is dropped\n * - `function` – called with `(prop, context)` and may return a field\n * name or `null` to drop the item dynamically\n *\n * In dev mode an error is thrown when a sort item's `prop` is not present\n * in the map. In production the item is silently dropped.\n *\n * @example\n * // Simple static mapping\n * const mapSorts = createSortsMapper<MyRow>({\n * id: 'id',\n * name: 'name',\n * })\n *\n * @example\n * // Dynamic mapping with context access\n * const mapSorts = createSortsMapper<MyRow>({\n * id: 'id',\n * name: 'name',\n * computed: (prop, context) =>\n * context.extraVariables.useAlt ? 'altField' : prop,\n * })\n */\nexport function createSortsMapper<TRow extends Record<string, any>>(\n fieldMap: SortsMapperFieldMap<TRow>,\n): SortsMapper {\n return (sorts: SortItem[], context: MapperContext): SortsMapperResult => {\n const result: SortsMapperResult = []\n\n for (const s of sorts) {\n const prop = s?.prop as keyof TRow & string\n\n if (!(prop in fieldMap)) {\n if (isDevMode()) {\n throw new Error(\n `createSortsMapper: no mapping found for column prop \"${prop}\". ` +\n `Add an entry to the field map or set the value to null to ignore it.`,\n )\n }\n continue\n }\n\n const entry = fieldMap[prop]\n const dir = s?.dir?.toUpperCase()\n\n const gqlField =\n typeof entry === 'function' ? entry(prop, context) : entry\n\n if (gqlField === null) continue\n\n result.push({ [gqlField as string]: dir })\n }\n\n return result\n }\n}\n","import { TheSeamPageInfo } from '@theseam/ui-common/datatable'\n\nimport { GqlDatatableAccessor } from '../models/gql-datatable-accessor'\n\nexport const DEFAULT_PAGE_SIZE = 20\n\nexport function getPageInfo(\n datatable: GqlDatatableAccessor | null | undefined,\n defaultPageSize: number = DEFAULT_PAGE_SIZE,\n): TheSeamPageInfo {\n return {\n offset: datatable?.ngxDatatable?.offset ?? 0,\n pageSize: datatable?.ngxDatatable?.pageSize ?? defaultPageSize,\n limit: datatable?.ngxDatatable?.limit,\n count: datatable?.ngxDatatable?.count ?? 0,\n }\n}\n","import { EMPTY, merge, Observable, Subscriber } from 'rxjs'\nimport { auditTime, map, switchMap, tap } from 'rxjs/operators'\n\nimport { TheSeamPageInfo } from '@theseam/ui-common/datatable'\nimport { notNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport { GqlDatatableAccessor } from '../models/gql-datatable-accessor'\nimport { getPageInfo } from './get-page-info'\n\nexport function createPageInfoObservable(\n datatable$: Observable<GqlDatatableAccessor | null | undefined>,\n defaultPageSize: number = 20,\n): Observable<TheSeamPageInfo> {\n return new Observable<TheSeamPageInfo>(\n (subscriber: Subscriber<TheSeamPageInfo>) => {\n let prev: TheSeamPageInfo | null = null\n const handlePageInfo = (pageInfo: TheSeamPageInfo | null) => {\n if (!_isPageInfoSame(prev, pageInfo)) {\n if (pageInfo !== null) {\n subscriber.next(pageInfo)\n }\n prev = pageInfo\n }\n }\n\n const dtSub = datatable$\n .pipe(\n switchMap((dt) => {\n if (!notNullOrUndefined(dt)) {\n handlePageInfo(null)\n return EMPTY\n }\n\n handlePageInfo(getPageInfo(dt, defaultPageSize))\n\n // `page` does not emit when the page size changes (e.g. on\n // window resize). Merging the `resize` event is a workaround.\n const resize$ = dt.resize.pipe(\n auditTime(100),\n map(() => dt.pageInfo),\n )\n return merge(dt.page, resize$).pipe(tap((p) => handlePageInfo(p)))\n }),\n )\n .subscribe()\n\n return () => {\n dtSub.unsubscribe()\n }\n },\n )\n}\n\nfunction _isPageInfoSame(\n prev: TheSeamPageInfo | null,\n curr: TheSeamPageInfo | null,\n): boolean {\n if (\n prev?.offset === curr?.offset &&\n prev?.pageSize === curr?.pageSize &&\n prev?.limit === curr?.limit &&\n prev?.count === curr?.count\n ) {\n return true\n }\n return false\n}\n","import { isDevMode } from '@angular/core'\nimport { from, Observable } from 'rxjs'\nimport { concatMap, filter, take, toArray } from 'rxjs/operators'\n\nimport { DataFilterState } from '@theseam/ui-common/data-filters'\nimport {\n notNullOrUndefined,\n wrapIntoObservable,\n} from '@theseam/ui-common/utils'\n\nimport { MapperContext } from './mapper-context'\n\nexport interface FilterStateMapperVariables {\n [name: string]: any\n}\n\nexport interface FilterStateMapperFilter {\n and?: FilterStateMapperFilter[]\n or?: FilterStateMapperFilter[]\n [name: string]: any\n}\n\nexport type FilterStateMapperResult = {\n filter: FilterStateMapperFilter\n variables: FilterStateMapperVariables\n} | null\n\n/**\n * A filter input type constrained to the field names of `T`.\n *\n * Use this as the building block for {@link TypedFilterStateMapperResult}\n * when you want compile-time checking that filter conditions only reference\n * real fields in the corresponding GQL input type.\n *\n * @example\n * type MyFilter = TypedFilterInput<'id' | 'name'>\n * // { id?: any; name?: any }\n */\nexport type TypedFilterInput<T extends string | number | symbol> = {\n [name in T]?: any\n}\n\n/**\n * A type-safe alternative to {@link FilterStateMapperResult} that constrains\n * filter field names to the union `T`.\n *\n * The filter can be either a direct field-condition object or a combined\n * object with `or`/`and` arrays:\n *\n * ```ts\n * // Direct field condition\n * { filter: { status: { eq: 'active' } }, variables: {} }\n *\n * // Combined (OR)\n * { filter: { or: [{ id: { lt: 30 } }, { name: { contains: 'foo' } }] }, variables: {} }\n * ```\n *\n * Because TypeScript uses structural typing, a mapper that returns\n * `TypedFilterStateMapperResult<'id' | 'name'>` is assignable to the\n * untyped {@link FilterStateMapper} signature without any cast.\n */\nexport type TypedFilterStateMapperResult<T extends string | number | symbol> = {\n filter:\n | {\n or?: TypedFilterInput<T>[]\n and?: TypedFilterInput<T>[]\n }\n | TypedFilterInput<T>\n variables: FilterStateMapperVariables\n} | null\n\nexport type FilterStateMapper = (\n filterState: DataFilterState,\n context: MapperContext,\n) =>\n | FilterStateMapperResult\n | Promise<FilterStateMapperResult>\n | Observable<FilterStateMapperResult>\nexport interface FilterStateMappers {\n [filterName: string]: FilterStateMapper\n}\n\nfunction resolveMapper(\n filterState: DataFilterState,\n filterStateMappers: FilterStateMappers,\n context: MapperContext,\n): Observable<FilterStateMapperResult> {\n const mapper = filterStateMappers[filterState.name]\n if (!notNullOrUndefined(mapper)) {\n throw Error(`Mapper for filter '${filterState.name}' not found.`)\n }\n\n return wrapIntoObservable(mapper(filterState, context)).pipe(\n // Require each mapper to complete.\n take(1),\n )\n}\n\nfunction resolveMappers(\n filterStates: DataFilterState[],\n filterStateMappers: FilterStateMappers,\n context: MapperContext,\n): Observable<Exclude<FilterStateMapperResult, null>[]> {\n return from(filterStates).pipe(\n concatMap((filterState) =>\n resolveMapper(filterState, filterStateMappers, context),\n ),\n filter(notNullOrUndefined),\n toArray(),\n )\n}\n\n/**\n * Combines multiple active filter results with AND so that all conditions must\n * be satisfied simultaneously (e.g. a search filter AND a status filter).\n */\nfunction mergeFilters(\n filters: FilterStateMapperFilter[],\n): FilterStateMapperFilter {\n return { and: filters }\n}\n\n/**\n * Merges variable objects.\n *\n * NOTE: This does not try to deep merge, so if two objects define the same\n * variable then the last object's value will be in the merged object. *In\n * devMode an error will be thrown.*\n */\nfunction mergeVariables(\n variableObjects: FilterStateMapperVariables[],\n): FilterStateMapperVariables {\n const variables: FilterStateMapperVariables = {}\n\n for (const v of variableObjects) {\n const props = Object.keys(v)\n\n if (isDevMode()) {\n for (const p of props) {\n if (notNullOrUndefined(variables[p]) && variables[p] !== v[p]) {\n // eslint-disable-next-line no-console\n console.warn(\n `Multiple filters adding the same variable with a different result. This could cause unexpected results.`,\n )\n break\n }\n }\n }\n\n for (const p of props) {\n variables[p] = v[p]\n }\n }\n\n return variables\n}\n\nfunction isEmptyFilter(mapperFilter: FilterStateMapperFilter): boolean {\n return Object.keys(mapperFilter).length === 0\n}\n\nexport async function mapFilterStates(\n filterStates: DataFilterState[],\n filterStateMappers: FilterStateMappers,\n context: MapperContext,\n): Promise<FilterStateMapperResult> {\n const results: FilterStateMapperFilter[] =\n (await resolveMappers(\n filterStates,\n filterStateMappers,\n context,\n ).toPromise()) ?? []\n\n if (results.length === 0) {\n return null\n }\n\n const filters = results\n .map((r: any) => r.filter)\n .filter(notNullOrUndefined)\n .filter((mapperFilter) => !isEmptyFilter(mapperFilter))\n\n const variableObjs = results\n .map((r: any) => r.variables)\n .filter(notNullOrUndefined)\n\n return {\n filter: mergeFilters(filters),\n variables: mergeVariables(variableObjs),\n }\n}\n","import { TheSeamPageInfo } from '@theseam/ui-common/datatable'\n\nexport interface PageInfoMapperResult {\n skip: number\n take: number\n}\nexport type PageInfoMapper = (pageInfo: TheSeamPageInfo) => PageInfoMapperResult\n\n/**\n * Maps to a range that fetches the page before the current page, the current\n * page, and the page after the current page.\n */\nexport function mapPageInfo(pageInfo: TheSeamPageInfo): PageInfoMapperResult {\n const _skip = pageInfo.offset * pageInfo.pageSize\n\n const skipWithWindowOffset = _skip - pageInfo.pageSize\n const takeOffset = skipWithWindowOffset < 0 ? skipWithWindowOffset : 0\n\n return {\n skip: Math.max(skipWithWindowOffset, 0),\n take: Math.max(pageInfo.pageSize * 3 + takeOffset, 0),\n }\n}\n","import {\n combineLatest,\n defer,\n EMPTY,\n Observable,\n of,\n Subject,\n Subscription,\n} from 'rxjs'\nimport {\n auditTime,\n catchError,\n distinctUntilChanged,\n finalize,\n map,\n shareReplay,\n startWith,\n switchMap,\n tap,\n} from 'rxjs/operators'\n\nimport { wrapIntoObservable } from '@theseam/ui-common/utils'\nimport { SortItem } from '@theseam/ui-common/datatable'\n\nimport { GqlDatatableAccessor, EmptyObject } from '../models'\nimport { createPageInfoObservable } from './create-page-info-observable'\nimport { DatatableGraphQLQueryRef } from './datatable-graphql-query-ref'\nimport { FilterStateMappers, mapFilterStates } from './map-filter-states'\nimport { mapPageInfo } from './map-page-info'\nimport { MapperContext } from './mapper-context'\n\nexport type SortsMapperResult = { [name: string]: any }[]\nexport type SortsMapper = (\n sorts: SortItem[],\n context: MapperContext,\n) =>\n | SortsMapperResult\n | Promise<SortsMapperResult>\n | Observable<SortsMapperResult>\n\nexport function observeRowsWithGqlInputsHandling<\n TData,\n TRow,\n GqlVariables extends EmptyObject,\n>(\n queryRef: DatatableGraphQLQueryRef<TData, GqlVariables, TRow>,\n rows: Observable<TRow[]>,\n datatable:\n | Observable<GqlDatatableAccessor | undefined>\n | Promise<GqlDatatableAccessor | undefined>\n | GqlDatatableAccessor,\n extraVariables:\n | Observable<Partial<GqlVariables>>\n | Promise<Partial<GqlVariables>>\n | Partial<GqlVariables>,\n sortsMapper: SortsMapper,\n filterStateMappers: FilterStateMappers,\n): Observable<TRow[]> {\n const datatable$ = wrapIntoObservable(datatable)\n const extraVariables$ =\n wrapIntoObservable<Partial<GqlVariables>>(extraVariables)\n\n // Only emit page changes past the first when paging is enabled. When paging\n // is disabled, all data is already in the buffer so there is no need to\n // re-query on page changes.\n const pageInfo$ = defer(() => {\n let firstEmit = true\n return createPageInfoObservable(datatable$).pipe(\n switchMap((pageInfo) => {\n if (!firstEmit && _isPagingDisabled(queryRef)) {\n return EMPTY\n }\n firstEmit = false\n return of(pageInfo)\n }),\n map(mapPageInfo),\n )\n })\n\n // Combines extraVariables and pageInfo, then derives sorts and filter state.\n // auditTime(0) debounces rapid synchronous emissions (e.g. at startup) so\n // only one setVariables call is made per event-loop turn.\n const handleQueryInputs = combineLatest([extraVariables$, pageInfo$]).pipe(\n auditTime(0),\n switchMap(([_extraVariables, pageInfo]) => {\n const context: MapperContext = { extraVariables: _extraVariables }\n\n const sorts$ = _createSortsObservable(datatable$).pipe(\n switchMap((m) => wrapIntoObservable(sortsMapper(m, context))),\n )\n\n const filterInfo$ = _createFilterStatesObservable(datatable$).pipe(\n switchMap((x) => mapFilterStates(x, filterStateMappers, context)),\n // TODO: Remove when the datatable fixes the bug causing it to emit more than it should.\n distinctUntilChanged((x, y) => JSON.stringify(x) === JSON.stringify(y)),\n )\n\n return combineLatest([sorts$, filterInfo$]).pipe(\n map(([sorts, filterInfo]) => ({\n extraVariables: _extraVariables,\n pageInfo,\n sorts,\n filterInfo,\n })),\n )\n }),\n tap((v) => {\n queryRef.setVariables({\n ...(v.extraVariables || {}),\n ...v.pageInfo,\n ...(v.sorts.length > 0 ? { order: v.sorts } : {}),\n ...(v.filterInfo?.variables || {}),\n ...(v.filterInfo?.filter ? { where: v.filterInfo.filter } : {}),\n } as any)\n }),\n )\n\n return defer(() => {\n // Observe the optional refresh-button patch attached externally to the\n // datatable instance. When the user triggers a refresh, refetch the data.\n let refreshBtnSub: Subscription = Subscription.EMPTY\n refreshBtnSub = datatable$\n .pipe(\n switchMap((dt) => {\n if (!dt || !(dt as any).__refreshPatch) {\n return EMPTY\n }\n return (dt as any).__refreshPatch.refreshTriggered.pipe(\n tap(() => queryRef.refetch(undefined, true)),\n )\n }),\n )\n .subscribe()\n\n // Bridge query-input changes to row emissions via a Subject so that the\n // rows observable is only subscribed once (on the first input change) and\n // then continues to receive updates as the live query produces new data.\n const _emitted = new Subject<boolean>()\n const handlerSub = handleQueryInputs.subscribe(() => _emitted.next(true))\n\n return _emitted.pipe(\n distinctUntilChanged(),\n switchMap(() => rows),\n finalize(() => {\n handlerSub.unsubscribe()\n refreshBtnSub.unsubscribe()\n }),\n )\n }).pipe(\n catchError((err) => {\n // eslint-disable-next-line no-console\n console.error(err)\n return of([] as TRow[])\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n}\n\nfunction _createSortsObservable(\n datatable$: Observable<GqlDatatableAccessor | undefined>,\n) {\n // NOTE: There is a bug in our datatable wrapper that isn't propagating\n // external sorting changes to the wrapped datatable component, which we observe\n // sort events from. This workaround observes our wrapper's internal column\n // change events, which emit all changes to columns that our datatable tracks,\n // and reads sorts from our wrapper when externalSorting is enabled.\n const _observeSortsWorkaround = (\n dt: GqlDatatableAccessor,\n ): Observable<SortItem[]> => {\n if (!(dt as any)._columnsAlterationsManager) {\n // Fallback for environments (e.g. tests) where the internal manager\n // is not present.\n return dt.sort.pipe(\n map((v) => v.sorts),\n startWith(dt.sorts),\n )\n }\n return (dt as any)._columnsAlterationsManager.changes.pipe(\n map(() => (dt.externalSorting ? (dt as any)._sorts : dt.sorts)),\n startWith(dt.externalSorting ? (dt as any)._sorts : dt.sorts),\n )\n }\n\n return datatable$.pipe(\n switchMap((dt) => (dt ? _observeSortsWorkaround(dt) : of([]))),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n}\n\nfunction _createFilterStatesObservable(\n datatable$: Observable<GqlDatatableAccessor | undefined>,\n) {\n return datatable$.pipe(switchMap((dt) => (dt ? dt.filterStates : of([]))))\n}\n\nfunction _isPagingDisabled<TData, GqlVariables extends EmptyObject, TRow>(\n queryRef: DatatableGraphQLQueryRef<TData, GqlVariables, TRow>,\n): boolean {\n return queryRef.getQueryProcessingConfig()?.disablePaging ?? false\n}\n","import {\n BehaviorSubject,\n defer,\n from,\n isObservable,\n Observable,\n of,\n Subject,\n Subscriber,\n} from 'rxjs'\nimport {\n auditTime,\n filter,\n finalize,\n map,\n shareReplay,\n skip,\n startWith,\n switchMap,\n take,\n tap,\n} from 'rxjs/operators'\n\nimport {\n ApolloQueryResult,\n DocumentNode,\n NetworkStatus,\n TypedDocumentNode,\n} from '@apollo/client/core'\nimport {\n hasProperty,\n notNullOrUndefined,\n withoutProperties,\n} from '@theseam/ui-common/utils'\n\n// `isNetworkRequestInFlight` is only exported from the ES module subpath\n// `@apollo/client/core/networkStatus`, which can't be loaded by Jest's CJS\n// transform. Reimplementing it here keeps the logic accessible in tests.\nfunction isNetworkRequestInFlight(networkStatus?: NetworkStatus): boolean {\n return networkStatus ? networkStatus < NetworkStatus.ready : false\n}\nimport { QueryRef } from 'apollo-angular'\nimport { WatchQueryOptions } from 'apollo-angular'\nimport { GraphQLFormattedError } from 'graphql'\n\nimport { QueryProcessingConfig, EmptyObject } from '../models'\nimport { DEFAULT_PAGE_SIZE } from './get-page-info'\n\nexport interface DatatableGraphQLDataMapperResult<TRow = EmptyObject> {\n rows: TRow[]\n\n /**\n * If data is paged, this is the total number of unpaged rows.\n */\n totalCount?: number\n}\n\nexport type DatatableGraphQLDataMapper<TData, TRow = EmptyObject> = (\n data: TData,\n) =>\n | DatatableGraphQLDataMapperResult<TRow>\n | Promise<DatatableGraphQLDataMapperResult<TRow>>\n | Observable<DatatableGraphQLDataMapperResult<TRow>>\n\nexport type DatatableGraphQLVariables = {\n skip?: number\n take?: number\n} & EmptyObject\n\nexport type DatatableGraphQLErrorHandler = (\n error: readonly GraphQLFormattedError[],\n) => void\n\n/**\n * Maximum number of error recovery attempts before throwing.\n */\nexport const MAX_ERROR_RECOVERY_ATTEMPTS = 10\n\n/**\n * Partially wraps ApolloClient's QueryRef with datatable paging, loading\n * state, error handling, and debounced variable updates.\n */\nexport class DatatableGraphQLQueryRef<\n TData,\n TVariables extends DatatableGraphQLVariables = EmptyObject,\n TRow = EmptyObject,\n> {\n private readonly _variablesSubject = new BehaviorSubject<TVariables>(\n {} as TVariables,\n )\n private readonly _observingChangesSubject = new BehaviorSubject<boolean>(\n false,\n )\n private readonly _errorSubject = new Subject<\n readonly GraphQLFormattedError[]\n >()\n /**\n * Used to manually trigger a pending/loading state when we know a request is\n * coming but Apollo hasn't started it yet (e.g. after setVariables resolves to\n * a non-paging variable change while a request is already in-flight).\n */\n private readonly _manualPendingSubject = new BehaviorSubject<boolean>(false)\n private readonly _needToRequerySubject = new Subject<boolean>()\n\n /**\n * Temporary way of tracking total count when paging is disabled.\n */\n private _totalCount: number = DEFAULT_PAGE_SIZE\n\n private get _observingChanges(): boolean {\n return this._observingChangesSubject.value\n }\n private set _observingChanges(value: boolean) {\n this._observingChangesSubject.next(value)\n }\n\n private _variablesUpdatePending = false\n\n private readonly _valueChanges: Observable<ApolloQueryResult<TData>>\n\n public readonly loading$: Observable<boolean>\n\n /**\n * Emits whenever the query variables change.\n */\n public readonly variables$ = this._variablesSubject.asObservable()\n\n /**\n * Emits when a GraphQL error occurs.\n *\n * If nothing is subscribed to this, the `_defaultErrorHandler` is used\n * (if provided). Once subscribed, the subscriber is responsible for\n * handling the error.\n */\n public readonly error$ = this._errorSubject.asObservable()\n\n public get updatesPollDelay(): number {\n return this._updatesPollDelay\n }\n public get variablesUpdatePending(): boolean {\n return this._variablesUpdatePending\n }\n\n constructor(\n /** Original ApolloClient's QueryRef. */\n private readonly _queryRef: QueryRef<TData, TVariables>,\n /**\n * How long to wait (ms) before applying variable changes and refetching.\n */\n private readonly _updatesPollDelay: number = 500,\n /**\n * Default error handler used when no subscriber is listening to `error$`.\n */\n private readonly _defaultErrorHandler?: DatatableGraphQLErrorHandler,\n ) {\n this._variablesSubject.next(\n (this._queryRef as any).obsQuery.options.variables || {},\n )\n\n // Tracks whether the loading overlay should be held open until we know\n // whether the first response will trigger a follow-up requery (e.g. when\n // disablePaging is on and we first probe for totalCount). This prevents the\n // loading overlay from flickering off and back on.\n let hasEmittedTriggered = false\n const hasEmittedSubject = new BehaviorSubject<boolean>(false)\n\n const setHasEmitted = () => {\n if (hasEmittedTriggered) {\n return\n }\n hasEmittedTriggered = true\n const sub = this._needToRequerySubject.pipe(take(1)).subscribe(() => {\n hasEmittedSubject.next(true)\n sub.unsubscribe()\n })\n }\n\n this._valueChanges = defer(() => {\n let prev: Omit<TVariables, 'skip' | 'take'> | undefined\n const varChangesSub = this._variablesSubject\n .pipe(\n skip(1),\n tap(() => {\n this._variablesUpdatePending = true\n }),\n auditTime(this._updatesPollDelay),\n finalize(() => {\n // If the query stopped being observed before the debounce fired,\n // apply the pending variables now.\n if (this._variablesUpdatePending) {\n this.refetch()\n this._variablesUpdatePending = false\n }\n }),\n )\n .subscribe((variables) => {\n this._setVariablesImmediate(variables)\n const current = withoutProperties(this.getVariables(), [\n 'skip',\n 'take',\n ])\n const isVarsChanged =\n prev === undefined ||\n JSON.stringify(prev) !== JSON.stringify(current)\n prev = current as any\n this._variablesUpdatePending = false\n // When the non-paging variables change while Apollo is already\n // in setVariables state, manually signal a pending load so the\n // loading overlay doesn't disappear until the response arrives.\n if (\n isVarsChanged &&\n this._queryRef.getCurrentResult().networkStatus ===\n NetworkStatus.setVariables\n ) {\n this._manualPendingSubject.next(true)\n }\n })\n\n let repeatedErrors = 0\n this._observingChanges = true\n return this._queryRef.valueChanges.pipe(\n // Once a response lands (not in-flight), begin tracking whether the\n // initial load has truly completed (accounting for disablePaging requery).\n tap((v) =>\n !isNetworkRequestInFlight(v.networkStatus)\n ? setHasEmitted()\n : undefined,\n ),\n // Guard against infinite error loops when polling / retrying.\n tap((v) => {\n if (v.networkStatus === NetworkStatus.error) {\n repeatedErrors++\n if (repeatedErrors >= MAX_ERROR_RECOVERY_ATTEMPTS) {\n throw Error('Max error recovery attempts reached.')\n }\n } else if (v.networkStatus === NetworkStatus.ready) {\n repeatedErrors = 0\n }\n }),\n finalize(() => {\n varChangesSub.unsubscribe()\n this._observingChanges = false\n }),\n )\n }).pipe(shareReplay({ bufferSize: 1, refCount: true }))\n\n this.loading$ = this._observingChangesSubject.pipe(\n switchMap((observingChanges) => {\n if (!observingChanges) {\n return of(false)\n }\n\n return this._valueChanges.pipe(\n map((result) => result.loading),\n startWith(this._queryRef.getCurrentResult().loading),\n tap((loading) => {\n if (!loading) {\n this._manualPendingSubject.next(false)\n }\n }),\n // Swap the actual loading flag for the manual pending flag so that\n // we can hold the loading state open when needed.\n switchMap(() => this._manualPendingSubject),\n auditTime(0),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }),\n // Keep loading=true until we've confirmed the first full load cycle\n // (including any disablePaging requery).\n switchMap((v) =>\n hasEmittedSubject.pipe(map((hasEmitted) => (hasEmitted ? v : true))),\n ),\n )\n }\n\n public rows(\n mapper: DatatableGraphQLDataMapper<TData, TRow>,\n ): Observable<TRow[]> {\n return this._rowsObservable(mapper)\n }\n\n private _rowsObservable(\n mapper: DatatableGraphQLDataMapper<TData, TRow>,\n ): Observable<TRow[]> {\n return new Observable<TRow[]>((subscriber: Subscriber<TRow[]>) => {\n const rowsBufferSubject = new BehaviorSubject<TRow[]>([])\n\n const querySub = this._valueChanges\n .pipe(\n filter((result) => !isNetworkRequestInFlight(result.networkStatus)),\n switchMap((result) => {\n if (result.data === undefined) {\n return of()\n }\n\n // Capture the skip offset *before* any variable changes that the\n // mapper might trigger (e.g. patchVariables for disablePaging).\n const querySkip = this._getVariablesFromQueryRef().skip\n\n const _result = this._handleResult(result)\n return this._resolveRowMapper(mapper(_result.data)).pipe(\n tap((mapperResult) => {\n const needsToRequery =\n this._needsToRequeryWithAllRecords(mapperResult)\n if (needsToRequery) {\n this.patchVariables({ take: mapperResult.totalCount } as any)\n }\n this._needToRequerySubject.next(needsToRequery)\n\n if (hasProperty(mapperResult, 'totalCount')) {\n this._totalCount = mapperResult.totalCount\n }\n\n let rows = rowsBufferSubject.value || []\n\n const hasTotalCount =\n mapperResult.totalCount !== undefined &&\n mapperResult.totalCount !== null\n\n // If the rows buffer is not the same size as totalCount, create\n // a fresh buffer (sparse array — unfilled slots are undefined,\n // which is what checkRecordsHaveValue expects).\n if (hasTotalCount) {\n if (mapperResult.totalCount !== rows.length) {\n rows = new Array<TRow>(mapperResult.totalCount || 0)\n }\n\n let startIndex = querySkip ?? 0\n if (this.getQueryProcessingConfig()?.disablePaging) {\n startIndex = 0\n }\n\n // Insert rows into the correct buffer positions.\n for (let i = 0; i < mapperResult.rows.length; i++) {\n rows[startIndex + i] = mapperResult.rows[i]\n }\n\n rows = [...rows]\n } else {\n rows = [...mapperResult.rows]\n }\n\n // ngx-datatable does row lookups in a WeakMap and my assumption\n // is that the pre-allocated empty objects seem to be getting\n // recognized as the same object, so to avoid that, we add a\n // unique property to each row.\n rows = rows.map((v, i) => ({\n ...v,\n __dt_id: `row-${i}`,\n }))\n\n rowsBufferSubject.next(rows)\n }),\n )\n }),\n )\n .subscribe()\n\n const rowsSub = rowsBufferSubject.subscribe(subscriber)\n\n return () => {\n querySub.unsubscribe()\n rowsSub.unsubscribe()\n\n rowsBufferSubject.next([])\n rowsBufferSubject.complete()\n }\n })\n }\n\n /**\n * Reads the result and returns it unchanged if no errors.\n *\n * On errors: emits them via `error$` and replaces any `null` data properties\n * with an empty collection shape `{ items: [], totalCount: 0 }` so mapper\n * functions can run safely without special-casing the error path.\n */\n private _handleResult(\n result: ApolloQueryResult<TData>,\n ): ApolloQueryResult<TData> {\n if (!result.errors || result.errors.length === 0) return result\n\n this._emitError(result.errors)\n\n const defaultDataPropValue = { items: [], totalCount: 0 }\n const data = Object.keys(result.data as any).reduce((acc, key) => {\n ;(acc as any)[key] =\n (result.data as any)[key] === null\n ? defaultDataPropValue\n : (result.data as any)[key]\n return acc\n }, {} as TData)\n\n return { ...result, data }\n }\n\n private _needsToRequeryWithAllRecords(\n data: DatatableGraphQLDataMapperResult<TRow>,\n ): boolean {\n if (!this.getQueryProcessingConfig()?.disablePaging) {\n return false\n }\n\n return (\n hasProperty(data, 'totalCount') &&\n hasProperty(data, 'rows') &&\n Array.isArray(data.rows) &&\n data.totalCount > data.rows.length &&\n this._totalCount !== data.totalCount\n )\n }\n\n private _resolveRowMapper(\n mapperReturn: ReturnType<DatatableGraphQLDataMapper<TData, TRow>>,\n ): Observable<DatatableGraphQLDataMapperResult<TRow>> {\n if (isObservable(mapperReturn)) {\n return mapperReturn.pipe(take(1))\n }\n\n return from(Promise.resolve(mapperReturn))\n }\n\n public getVariables(): TVariables {\n return this._variablesSubject.value\n }\n\n private _setVariablesImmediate(\n variables: TVariables,\n ): Promise<void | ApolloQueryResult<TData>> {\n const _vars = this._withVariableOverrides(variables)\n return this._queryRef.setVariables(_vars || ({} as TVariables))\n }\n\n private _patchVariablesImmediate(\n variables: Partial<TVariables>,\n ): Promise<void | ApolloQueryResult<TData>> {\n const _variables = {\n ...this.getVariables(),\n ...variables,\n }\n\n const _vars = this._withVariableOverrides(_variables)\n return this._queryRef.setVariables(_vars || ({} as TVariables))\n }\n\n public setVariables(variables: TVariables): void {\n this._variablesSubject.next(variables)\n if (!this._observingChanges) {\n this._setVariablesImmediate(variables)\n }\n }\n\n public patchVariables(variables: Partial<TVariables>): void {\n const _variables = {\n ...this.getVariables(),\n ...variables,\n }\n\n this._variablesSubject.next(_variables)\n if (!this._observingChanges) {\n this._setVariablesImmediate(_variables)\n }\n }\n\n public refetch(\n variables?: TVariables,\n showLoading = false,\n ): Promise<ApolloQueryResult<TData>> {\n const _vars = this._withVariableOverrides(variables)\n if (showLoading) {\n this._manualPendingSubject.next(true)\n }\n // NOTE: There seems to be a bug causing Apollo to not emit changes unless\n // getCurrentResult() is called. This setTimeout is a workaround.\n setTimeout(() => this._queryRef.getCurrentResult())\n return this._queryRef.refetch(_vars)\n }\n\n public setQuery(\n query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n triggerRefetch: boolean = false,\n ): void {\n this._queryRef.setOptions({ query })\n if (triggerRefetch) {\n // Fake a variables update to share the debounce delay with setVariables.\n this.setVariables(this.getVariables())\n }\n }\n\n public getOptions(): WatchQueryOptions<TVariables, TData> | undefined {\n return (this._queryRef as any).obsQuery.options\n }\n\n public getQueryProcessingConfig(): QueryProcessingConfig | undefined {\n return this.getOptions()?.context?.queryProcessingConfig\n }\n\n /**\n * Returns the variables that were actually sent with the last request, read\n * directly from Apollo's observable query. This is more accurate than\n * `_variablesSubject.value` when variables can change between the debounce\n * firing and the response arriving.\n */\n private _getVariablesFromQueryRef(): TVariables {\n return (this._queryRef as any).obsQuery.variables\n }\n\n private _withVariableOverrides(\n variables?: TVariables,\n ): TVariables | undefined {\n if (\n !notNullOrUndefined(variables) &&\n !this.getQueryProcessingConfig()?.disablePaging\n ) {\n return undefined\n }\n\n const _vars = { ...(variables || {}) } as TVariables\n if (this.getQueryProcessingConfig()?.disablePaging) {\n _vars.take = this._totalCount\n }\n return _vars\n }\n\n private _emitError(error: readonly GraphQLFormattedError[]): void {\n this._errorSubject.next(error)\n if (this._defaultErrorHandler && !this._errorSubject.observed) {\n this._defaultErrorHandler(error)\n }\n }\n}\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core'\n\nimport { OperationVariables } from '@apollo/client/core/types'\nimport { Apollo } from 'apollo-angular'\nimport { WatchQueryOptions } from 'apollo-angular'\n\nimport { QueryProcessingConfig, EmptyObject } from '../models'\nimport {\n DatatableGraphQLQueryRef,\n DatatableGraphQLVariables,\n} from './datatable-graphql-query-ref'\n\n/**\n * NOTE: Any of ApolloClient's WatchQueryOptions properties can be set, but I\n * think our components should only be providing `query` and `variables`. The\n * rest should be common options shared by all our app's datatables. This may\n * change if it is determined to be too restrictive.\n */\nexport type DatatableQueryOptions<\n TVariables extends OperationVariables = OperationVariables,\n TData = any,\n> = Pick<WatchQueryOptions<TVariables, TData>, 'query'> &\n Pick<WatchQueryOptions<TVariables, TData>, 'variables'> &\n Pick<WatchQueryOptions<TVariables, TData>, 'context'>\n\nexport interface DatatableGraphqlServiceConfig {\n /**\n * Polling interval time in milliseconds.\n */\n pollingIntervalTime?: number\n}\n\nexport const DATATABLE_GRAPHQL_SERVICE_CONFIG =\n new InjectionToken<DatatableGraphqlServiceConfig>(\n 'DATATABLE_GRAPHQL_SERVICE_CONFIG',\n )\n\nconst _CONFIG_DEFAULTS: DatatableGraphqlServiceConfig = {\n pollingIntervalTime: 1 * 60 * 1000,\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DatatableGraphqlService {\n private readonly _config: DatatableGraphqlServiceConfig\n\n constructor(\n private readonly _apollo: Apollo,\n @Optional()\n @Inject(DATATABLE_GRAPHQL_SERVICE_CONFIG)\n _config?: DatatableGraphqlServiceConfig,\n ) {\n this._config = {\n ..._CONFIG_DEFAULTS,\n ...(_config || {}),\n }\n }\n\n public watchQuery<\n TData,\n TVariables extends DatatableGraphQLVariables = EmptyObject,\n TRow = EmptyObject,\n >(\n options: DatatableQueryOptions<TVariables>,\n queryProcessingConfig?: QueryProcessingConfig,\n ): DatatableGraphQLQueryRef<TData, TVariables, TRow> {\n const _options: WatchQueryOptions<TVariables, TData> = {\n useInitialLoading: true,\n ..._CONFIG_DEFAULTS,\n pollInterval: this._config.pollingIntervalTime,\n ...options,\n }\n\n if (queryProcessingConfig) {\n _options.context = {\n ...(_options.context || {}),\n queryProcessingConfig: {\n ...(_options.context?.queryProcessingConfig || {}),\n ...queryProcessingConfig,\n },\n }\n }\n\n const queryRef = this._apollo.watchQuery<TData, TVariables>(_options)\n\n return new DatatableGraphQLQueryRef(queryRef)\n }\n}\n","import {\n ColumnsDataFilterState,\n TheSeamColumnsDataFilterDateSearchFormState,\n TheSeamColumnsDataFilterDateSearchOptions,\n THESEAM_COLUMNS_DATA_FILTER_DATE_TEXT_SEARCH_TYPES,\n getFormattedDateForComparison,\n THESEAM_COLUMNS_DATA_FILTER_DATE_RANGE_SEARCH_TYPES,\n} from '@theseam/ui-common/datatable'\nimport { isNullOrUndefined, notNullOrUndefined } from '@theseam/ui-common/utils'\nimport { FilterStateMapperResult } from './map-filter-states'\nimport { MapperContext } from './mapper-context'\n\nexport const mapSearchDateColumnsDataFilterStateToGql = (\n filterState: ColumnsDataFilterState<\n TheSeamColumnsDataFilterDateSearchFormState,\n TheSeamColumnsDataFilterDateSearchOptions\n >,\n context: MapperContext<any>,\n): FilterStateMapperResult => {\n const formValue = filterState.state.formValue\n const options = filterState.state.options\n\n let filter = null\n\n if (\n isNullOrUndefined(filterState.state.prop) ||\n isNullOrUndefined(options) ||\n isNullOrUndefined(formValue) ||\n isNullOrUndefined(formValue.searchType)\n ) {\n return filter\n }\n\n if (\n THESEAM_COLUMNS_DATA_FILTER_DATE_TEXT_SEARCH_TYPES.includes(\n formValue.searchType,\n ) &&\n notNullOrUndefined(formValue.searchText)\n ) {\n const searchDate = getFormattedDateForComparison(\n formValue.searchText,\n options.dateType,\n true,\n )\n\n if (!isNaN(searchDate.valueOf())) {\n switch (formValue.searchType) {\n case 'eq': {\n let searchDateEnd\n if (options.dateType === 'datetime-local') {\n searchDateEnd = new Date(searchDate)\n searchDateEnd.setMinutes(searchDateEnd.getMinutes() + 1)\n } else if (options.dateType === 'date') {\n searchDateEnd = new Date(searchDate)\n searchDateEnd.setDate(searchDateEnd.getDate() + 1)\n }\n\n if (notNullOrUndefined(searchDateEnd)) {\n filter = {\n filter: {\n and: [\n {\n [filterState.state.prop]: { gte: searchDate.toISOString() },\n },\n {\n [filterState.state.prop]: {\n lt: searchDateEnd.toISOString(),\n },\n },\n ],\n },\n variables: {},\n }\n }\n\n break\n }\n case 'gt':\n case 'lte': {\n const comparator =\n formValue.searchType === 'gt'\n ? 'gte'\n : formValue.searchType === 'lte'\n ? 'lt'\n : null\n\n let searchDateEnd\n if (options.dateType === 'datetime-local') {\n searchDateEnd = new Date(searchDate)\n searchDateEnd.setMinutes(searchDateEnd.getMinutes() + 1)\n } else if (options.dateType === 'date') {\n searchDateEnd = new Date(searchDate)\n searchDateEnd.setDate(searchDateEnd.getDate() + 1)\n }\n\n if (\n notNullOrUndefined(comparator) &&\n notNullOrUndefined(searchDateEnd)\n ) {\n filter = {\n filter: {\n and: [\n {\n [filterState.state.prop]: {\n [comparator]: searchDateEnd.toISOString(),\n },\n },\n ],\n },\n variables: {},\n }\n }\n\n break\n }\n case 'lt':\n case 'gte': {\n filter = {\n filter: {\n and: [\n {\n [filterState.state.prop]: {\n [formValue.searchType]: searchDate.toISOString(),\n },\n },\n ],\n },\n variables: {},\n }\n\n break\n }\n default:\n break\n }\n }\n } else if (\n THESEAM_COLUMNS_DATA_FILTER_DATE_RANGE_SEARCH_TYPES.includes(\n formValue.searchType,\n ) &&\n notNullOrUndefined(formValue.fromText) &&\n notNullOrUndefined(formValue.toText)\n ) {\n const fromDate = getFormattedDateForComparison(\n formValue.fromText,\n options.dateType,\n true,\n )\n const toDate = getFormattedDateForComparison(\n formValue.toText,\n options.dateType,\n true,\n )\n\n if (!isNaN(fromDate.valueOf()) && !isNaN(toDate.valueOf())) {\n let toDateEnd\n if (options.dateType === 'datetime-local') {\n toDateEnd = new Date(toDate)\n toDateEnd.setMinutes(toDateEnd.getMinutes() + 1)\n } else if (options.dateType === 'date') {\n toDateEnd = new Date(toDate)\n toDateEnd.setDate(toDateEnd.getDate() + 1)\n }\n\n if (notNullOrUndefined(toDateEnd)) {\n if (formValue.searchType === 'between') {\n filter = {\n filter: {\n and: [\n { [filterState.state.prop]: { gte: fromDate.toISOString() } },\n { [filterState.state.prop]: { lt: toDateEnd.toISOString() } },\n ],\n },\n variables: {},\n }\n } else if (formValue.searchType === 'not-between') {\n filter = {\n filter: {\n or: [\n { [filterState.state.prop]: { lt: fromDate.toISOString() } },\n { [filterState.state.prop]: { gt: toDateEnd.toISOString() } },\n ],\n },\n variables: {},\n }\n }\n }\n }\n } else if (formValue.searchType === 'blank') {\n filter = {\n filter: {\n or: [{ [filterState.state.prop]: { eq: null } }],\n },\n variables: {},\n }\n } else if (formValue.searchType === 'not-blank') {\n filter = {\n filter: {\n and: [{ [filterState.state.prop]: { neq: null } }],\n },\n variables: {},\n }\n }\n\n return filter\n}\n","import {\n ColumnsDataFilterState,\n TheSeamColumnsDataFilterNumericSearchFormState,\n THESEAM_COLUMNS_DATA_FILTER_NUMERIC_TEXT_SEARCH_TYPES,\n THESEAM_COLUMNS_DATA_FILTER_NUMERIC_RANGE_SEARCH_TYPES,\n} from '@theseam/ui-common/datatable'\nimport { isNullOrUndefined, notNullOrUndefined } from '@theseam/ui-common/utils'\nimport { FilterStateMapperResult } from './map-filter-states'\nimport { MapperContext } from './mapper-context'\n\nexport const mapSearchNumericColumnsDataFilterStateToGql = (\n filterState: ColumnsDataFilterState<TheSeamColumnsDataFilterNumericSearchFormState>,\n context: MapperContext<any>,\n): FilterStateMapperResult => {\n let filter = null\n\n if (isNullOrUndefined(filterState.state.prop)) {\n return filter\n }\n\n if (\n notNullOrUndefined(filterState.state.formValue) &&\n notNullOrUndefined(filterState.state.formValue.searchType)\n ) {\n if (\n THESEAM_COLUMNS_DATA_FILTER_NUMERIC_TEXT_SEARCH_TYPES.includes(\n filterState.state.formValue.searchType,\n ) &&\n notNullOrUndefined(filterState.state.formValue.searchText)\n ) {\n const searchNumeric = parseFloat(filterState.state.formValue.searchText)\n\n if (!isNaN(searchNumeric)) {\n filter = {\n filter: {\n and: [\n {\n [filterState.state.prop]: {\n [filterState.state.formValue.searchType]: searchNumeric,\n },\n },\n ],\n },\n variables: {},\n }\n }\n } else if (\n THESEAM_COLUMNS_DATA_FILTER_NUMERIC_RANGE_SEARCH_TYPES.includes(\n filterState.state.formValue.searchType,\n ) &&\n notNullOrUndefined(filterState.state.formValue.fromText) &&\n notNullOrUndefined(filterState.state.formValue.toText)\n ) {\n const fromNumeric = parseFloat(filterState.state.formValue.fromText)\n\n const toNumeric = parseFloat(filterState.state.formValue.toText)\n\n if (!isNaN(fromNumeric) && !isNaN(toNumeric)) {\n if (filterState.state.formValue.searchType === 'between') {\n filter = {\n filter: {\n and: [\n { [filterState.state.prop]: { gte: fromNumeric } },\n { [filterState.state.prop]: { lte: toNumeric } },\n ],\n },\n variables: {},\n }\n } else if (filterState.state.formValue.searchType === 'not-between') {\n filter = {\n filter: {\n or: [\n { [filterState.state.prop]: { lt: fromNumeric } },\n { [filterState.state.prop]: { gt: toNumeric } },\n ],\n },\n variables: {},\n }\n }\n }\n } else if (filterState.state.formValue.searchType === 'blank') {\n filter = {\n filter: {\n or: [\n { [filterState.state.prop]: { eq: null } },\n { [filterState.state.prop]: { eq: '' } },\n ],\n },\n variables: {},\n }\n } else if (filterState.state.formValue.searchType === 'not-blank') {\n filter = {\n filter: {\n and: [\n { [filterState.state.prop]: { neq: null } },\n { [filterState.state.prop]: { neq: '' } },\n ],\n },\n variables: {},\n }\n }\n }\n\n return filter\n}\n","import {\n ColumnsDataFilterState,\n TheSeamColumnsDataFilterTextSearchFormState,\n THESEAM_COLUMNS_DATA_FILTER_TEXT_TEXT_SEARCH_TYPES,\n} from '@theseam/ui-common/datatable'\nimport { isNullOrUndefined, notNullOrUndefined } from '@theseam/ui-common/utils'\nimport { FilterStateMapperResult } from './map-filter-states'\nimport { MapperContext } from './mapper-context'\n\nexport const mapSearchTextColumnsDataFilterStateToGql = (\n filterState: ColumnsDataFilterState<TheSeamColumnsDataFilterTextSearchFormState>,\n context: MapperContext<any>,\n): FilterStateMapperResult => {\n let filter = null\n\n if (isNullOrUndefined(filterState.state.prop)) {\n return filter\n }\n\n if (\n notNullOrUndefined(filterState.state.formValue) &&\n notNullOrUndefined(filterState.state.formValue.searchType)\n ) {\n if (\n THESEAM_COLUMNS_DATA_FILTER_TEXT_TEXT_SEARCH_TYPES.includes(\n filterState.state.formValue.searchType,\n ) &&\n notNullOrUndefined(filterState.state.formValue.searchText)\n ) {\n filter = {\n filter: {\n and: [\n {\n [filterState.state.prop]: {\n [filterState.state.formValue.searchType]:\n filterState.state.formValue.searchText,\n },\n },\n ],\n },\n variables: {},\n }\n } else if (filterState.state.formValue.searchType === 'blank') {\n filter = {\n filter: {\n or: [\n { [filterState.state.prop]: { eq: null } },\n { [filterState.state.prop]: { eq: '' } },\n ],\n },\n variables: {},\n }\n } else if (filterState.state.formValue.searchType === 'not-blank') {\n filter = {\n filter: {\n and: [\n { [filterState.state.prop]: { neq: null } },\n { [filterState.state.prop]: { neq: '' } },\n ],\n },\n variables: {},\n }\n }\n }\n\n return filter\n}\n","import { gql } from 'apollo-angular'\n\nexport const baseSchemaFragment = gql`\n input ComparableInt32OperationFilterInput {\n eq: Int\n neq: Int\n in: [Int!]\n nin: [Int!]\n gt: Int\n ngt: Int\n gte: Int\n ngte: Int\n lt: Int\n nlt: Int\n lte: Int\n nlte: Int\n objectContains: String\n }\n\n input StringOperationFilterInput {\n and: [StringOperationFilterInput!]\n or: [StringOperationFilterInput!]\n eq: String\n neq: String\n contains: String\n ncontains: String\n in: [String]\n nin: [String]\n startsWith: String\n nstartsWith: String\n endsWith: String\n nendsWith: String\n objectContains: String\n }\n\n input ComparableDateTimeOffsetOperationFilterInput {\n eq: DateTime\n neq: DateTime\n in: [DateTime!]\n nin: [DateTime!]\n gt: DateTime\n ngt: DateTime\n gte: DateTime\n ngte: DateTime\n lt: DateTime\n nlt: DateTime\n lte: DateTime\n nlte: DateTime\n objectContains: String\n }\n\n input BooleanOperationFilterInput {\n eq: Boolean\n neq: Boolean\n objectContains: String\n }\n\n input ComparableNullableOfDateTimeOffsetOperationFilterInput {\n eq: DateTime\n neq: DateTime\n in: [DateTime]\n nin: [DateTime]\n gt: DateTime\n ngt: DateTime\n gte: DateTime\n ngte: DateTime\n lt: DateTime\n nlt: DateTime\n lte: DateTime\n nlte: DateTime\n objectContains: String\n }\n\n enum SortEnumType {\n ASC\n DESC\n }\n\n \"\"\"\n The \\`DateTime\\` scalar represents an ISO-8601 compliant date time type.\n \"\"\"\n scalar DateTime\n\n scalar Uuid\n\n \"\"\"\n The built-in \\`Decimal\\` scalar type.\n \"\"\"\n scalar Decimal\n\n \"\"\"\n The \\`Long\\` scalar type represents non-fractional signed whole 64-bit numeric values. Long can represent values between -(2^63) and 2^63 - 1.\n \"\"\"\n scalar Long\n\n \"\"\"\n Information about the offset pagination.\n \"\"\"\n type CollectionSegmentInfo {\n \"\"\"\n Indicates whether more items exist following the set defined by the clients arguments.\n \"\"\"\n hasNextPage: Boolean!\n\n \"\"\"\n Indicates whether more items exist prior the set defined by the clients arguments.\n \"\"\"\n hasPreviousPage: Boolean!\n }\n`\n","export type WhereArg = Record<string, any>\n\n/**\n * The set of leaf-level operator keys used by HotChocolate filter inputs\n * (e.g. StringOperationFilterInput, ComparableInt32OperationFilterInput).\n * Any key not in this set is treated as a field name, causing the evaluator\n * to recurse into `value[key]`.\n */\nconst OPERATOR_KEYS = new Set([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'ngt',\n 'ngte',\n 'nlt',\n 'nlte',\n 'in',\n 'nin',\n 'contains',\n 'ncontains',\n 'startsWith',\n 'nstartsWith',\n 'endsWith',\n 'nendsWith',\n 'objectContains',\n])\n\nfunction applyOperator(operator: string, value: any, operand: any): boolean {\n switch (operator) {\n case 'eq':\n return value === operand\n case 'neq':\n return value !== operand\n case 'gt':\n return value > operand\n case 'gte':\n return value >= operand\n case 'lt':\n return value < operand\n case 'lte':\n return value <= operand\n // Negated comparisons — logical complements of the above\n case 'ngt':\n return !(value > operand) // equivalent to lte\n case 'ngte':\n return !(value >= operand) // equivalent to lt\n case 'nlt':\n return !(value < operand) // equivalent to gte\n case 'nlte':\n return !(value <= operand) // equivalent to gt\n case 'in':\n return Array.isArray(operand) && operand.includes(value)\n case 'nin':\n return Array.isArray(operand) && !operand.includes(value)\n case 'contains':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n value.includes(operand)\n )\n case 'ncontains':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n !value.includes(operand)\n )\n case 'startsWith':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n value.startsWith(operand)\n )\n case 'nstartsWith':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n !value.startsWith(operand)\n )\n case 'endsWith':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n value.endsWith(operand)\n )\n case 'nendsWith':\n return (\n typeof value === 'string' &&\n typeof operand === 'string' &&\n !value.endsWith(operand)\n )\n case 'objectContains': {\n // Custom Seam/HotChocolate operator: convert the field value to a string\n // and check if it contains the operand (case-insensitive, matching search UX).\n const strValue = value == null ? '' : String(value)\n const strOperand = operand == null ? '' : String(operand)\n return strValue.toLowerCase().includes(strOperand.toLowerCase())\n }\n default:\n throw new Error(`Unknown filter operator: \"${operator}\"`)\n }\n}\n\n/**\n * Recursively evaluates a HotChocolate-style filter against a value.\n *\n * Rules:\n * - `and` array: all sub-filters must pass (AND logic)\n * - `or` array: at least one sub-filter must pass (OR logic)\n * - Known operator keys (`eq`, `contains`, `gt`, ...): apply the operator to\n * the current `value`\n * - Any other key: treat as a field name; recurse with `value[key]` and the\n * nested filter\n * - All non-`and`/`or` conditions are implicitly ANDed together\n */\nfunction evaluateCondition(value: any, filter: any): boolean {\n if (filter === null || filter === undefined) {\n return true\n }\n\n if (Array.isArray(filter.and)) {\n if (!filter.and.every((f: any) => evaluateCondition(value, f))) {\n return false\n }\n }\n\n if (Array.isArray(filter.or)) {\n if (!filter.or.some((f: any) => evaluateCondition(value, f))) {\n return false\n }\n }\n\n for (const key of Object.keys(filter)) {\n if (key === 'and' || key === 'or') {\n continue\n }\n\n if (OPERATOR_KEYS.has(key)) {\n if (!applyOperator(key, value, filter[key])) {\n return false\n }\n } else {\n if (!evaluateCondition(value?.[key], filter[key])) {\n return false\n }\n }\n }\n\n return true\n}\n\n/**\n * Filters an array using a HotChocolate-style where clause.\n *\n * Top-level field conditions are implicitly ANDed. Use `and`/`or` arrays for\n * explicit logical grouping.\n *\n * @example\n * filterWhere(records, { name: { contains: 'foo' }, id: { gt: 5 } })\n * filterWhere(records, { or: [{ name: { eq: 'a' } }, { name: { eq: 'b' } }] })\n */\nexport function filterWhere<T>(data: T[], where: WhereArg): T[] {\n return data.filter((item) => evaluateCondition(item, where))\n}\n","export function skipAndTake<T>(data: T[], skip: number, take: number): T[] {\n if (skip < 0) {\n throw Error(`Invalid 'skip' value: ${skip}`)\n }\n\n // if (take > data.length) {\n // throw Error(`Invalid 'take' value: ${take}`)\n // }\n\n const tmp: T[] = []\n for (let i = skip; i < take + skip && i < data.length; i++) {\n tmp.push(data[i])\n }\n\n return tmp\n}\n","/**\n * A single sort clause in HotChocolate's order format.\n * Each object has exactly one key: the field name, with a value of 'ASC' or 'DESC'.\n *\n * @example { memberOrganizationName: 'ASC' }\n */\nexport type SortClause = Record<string, 'ASC' | 'DESC'>\n\n/**\n * Sorts an array by a HotChocolate-style `order` argument.\n *\n * Earlier entries in the array take higher sort precedence. When two records\n * are equal on all sort clauses they retain their original relative order\n * (stable sort).\n *\n * Handles strings (locale-aware), numbers/dates, booleans, and null/undefined\n * values (nulls sort last for both ASC and DESC).\n *\n * @example\n * sortItems(records, [{ name: 'ASC' }, { id: 'DESC' }])\n */\nexport function sortItems<T>(items: T[], order: SortClause[]): T[] {\n if (!order || order.length === 0) {\n return items\n }\n\n return [...items].sort((a, b) => {\n for (const clause of order) {\n const entries = Object.entries(clause)\n if (entries.length === 0) {\n continue\n }\n\n const [field, direction] = entries[0]\n const aVal = (a as any)[field]\n const bVal = (b as any)[field]\n\n // Nulls always sort last regardless of direction — check before inverting.\n const aNull = aVal == null\n const bNull = bVal == null\n if (aNull && bNull) continue\n if (aNull) return 1\n if (bNull) return -1\n\n const comparison = _compareNonNullValues(aVal, bVal)\n if (comparison !== 0) {\n return direction === 'DESC' ? -comparison : comparison\n }\n }\n\n return 0\n })\n}\n\nfunction _compareNonNullValues(a: any, b: any): number {\n if (typeof a === 'string' && typeof b === 'string') {\n return a.localeCompare(b)\n }\n\n if (a < b) return -1\n if (a > b) return 1\n return 0\n}\n","import { filterWhere, WhereArg } from './filter-where'\nimport { skipAndTake } from './skip-and-take'\nimport { sortItems, SortClause } from './sort-items'\n\nexport interface FilteredResultsPageInfo {\n hasNextPage: boolean\n hasPreviousPage: boolean\n}\n\nexport interface FilteredResults<T> {\n items: T[]\n pageInfo: FilteredResultsPageInfo\n totalCount: number\n}\n\nexport function filteredResults<T>(items: T[], args: any): FilteredResults<T> {\n let _items = items\n const where: WhereArg = args?.where\n if (where !== undefined) {\n _items = filterWhere(_items, where)\n }\n\n const order: SortClause[] = args?.order\n if (order !== undefined) {\n _items = sortItems(_items, order)\n }\n\n const totalCount = _items.length\n\n const skip = args?.skip ?? 0\n const take = args?.take ?? _items.length\n if (args?.skip !== undefined || args?.take !== undefined) {\n _items = skipAndTake(_items, skip, take)\n }\n\n const pageInfo: FilteredResultsPageInfo = {\n hasNextPage: skip + take < totalCount,\n hasPreviousPage: skip > 0,\n }\n\n return {\n items: _items,\n pageInfo,\n totalCount,\n }\n}\n","import { EventEmitter } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\n\nimport { DataFilterState } from '@theseam/ui-common/data-filters'\nimport {\n SortEvent,\n SortItem,\n TheSeamPageInfo,\n} from '@theseam/ui-common/datatable'\n\nimport { GqlDatatableAccessor } from '../models'\n\nexport class MockDatatable implements GqlDatatableAccessor {\n private readonly _filterStatesSubject = new BehaviorSubject<\n DataFilterState[]\n >([])\n\n private _sorts: SortItem[] = []\n private _rows: any[] = []\n private _offset = 0\n private _rowHeight = 50\n private _bodyHeight = 500\n private _scrolledPosV = 0\n\n page = new EventEmitter<TheSeamPageInfo>()\n resize = new EventEmitter<any>()\n externalSorting = false\n\n sort: EventEmitter<SortEvent> = new EventEmitter<SortEvent>()\n get sorts(): SortItem[] {\n return this._sorts\n }\n set sorts(value: SortItem[]) {\n this._sorts = value\n }\n\n get pageInfo(): TheSeamPageInfo {\n return this.ngxDatatable\n }\n\n public readonly filterStates: Observable<DataFilterState[]> =\n this._filterStatesSubject.asObservable()\n\n static pageDefaults(dt: any, defaultPageSize: number = 20): TheSeamPageInfo {\n return {\n offset: (dt as any).ngxDatatable?.offset ?? 0,\n pageSize: (dt as any).ngxDatatable?.pageSize ?? defaultPageSize,\n limit: (dt as any).ngxDatatable?.limit,\n count: (dt as any).ngxDatatable?.count ?? 0,\n }\n }\n\n get ngxDatatable(): {\n offset: number\n pageSize: number\n limit?: number\n count: number\n } {\n return {\n offset: this.getPage(),\n pageSize: this.getPageSize(),\n count: this._rows.length,\n }\n }\n\n setSorts(v: SortItem[]): void {\n this._sorts = v\n this.sort.emit({ sorts: this._sorts })\n }\n\n setFilterStates(v: DataFilterState[]): void {\n this._filterStatesSubject.next(v)\n }\n\n getNumPages(): number {\n if (this._rows.length === 0) {\n return 1\n }\n const t = Math.ceil(this._rows.length / this.getPageSize())\n if (t <= 0) {\n return 1\n }\n return t\n }\n\n _calcPage(): number {\n // This page calculation could most likely be simplified.\n const bodyHeight = this._rowHeight * this.getPageSize()\n const visibleHeight = this._bodyHeight + this._scrolledPosV\n const pages = Math.floor(visibleHeight / bodyHeight)\n const overflow = visibleHeight - pages * bodyHeight\n const page = overflow > 1 ? pages + 1 : pages\n return page - 1\n }\n\n _calcScrolledPosV(): number {\n return this._offset * this._rowHeight\n }\n\n getPage(): number {\n return this._offset\n }\n\n setPage(v: number): void {\n let _v = v\n if (_v === this.getPage()) {\n return\n }\n\n if (_v > this.getNumPages() - 1) {\n // Should this throw an error instead?\n _v = this.getNumPages() - 1\n }\n\n this._offset = _v\n this._scrolledPosV = this._calcScrolledPosV()\n this.page.emit(this.ngxDatatable)\n }\n\n getPageSize(): number {\n return Math.floor(this._bodyHeight / this._rowHeight)\n }\n\n setRows(v: any[]): void {\n this._rows = v\n }\n\n setScrolledPosV(v: number): void {\n if (this._scrolledPosV === v) {\n return\n }\n const pageBefore = this.getPage()\n this._scrolledPosV = v\n this._offset = this._calcPage()\n if (this.getPage() !== pageBefore) {\n this.page.emit(this.ngxDatatable)\n }\n }\n\n /**\n * Returns the height of a row.\n *\n * NOTE: This will not be accurate if your rows do not use a single fixed\n * height for each row.\n */\n getRowHeight() {\n return this._rowHeight\n }\n}\n","import { notNullOrUndefined } from '@theseam/ui-common/utils'\n\nexport function checkRecordsHaveValue(\n arr: any[] | null,\n indices: (number | [startIndex: number, endIndex: number])[],\n testValueCheckProp: string | null = 'name',\n onlyCheckProvidedIndices: boolean = false,\n): void {\n if (indices.length > 0 && !Array.isArray(arr)) {\n throw Error(`Records array should be defined.`)\n }\n\n if (!Array.isArray(arr)) {\n return\n }\n\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i]\n if (_isOneOfIndices(indices, i)) {\n if (!notNullOrUndefined(arr[i])) {\n throw Error(`Record at index '${i}' should be defined.`)\n }\n if (notNullOrUndefined(testValueCheckProp)) {\n const actualValue = item[testValueCheckProp]\n const expectedValue = `Item_${i}`\n if (actualValue !== expectedValue) {\n throw Error(\n `Record at index '${i}' should be '${expectedValue}', but is '${actualValue}'`,\n )\n }\n }\n } else {\n if (!onlyCheckProvidedIndices) {\n const isItemDefined = notNullOrUndefined(testValueCheckProp)\n ? notNullOrUndefined(item?.[testValueCheckProp])\n : notNullOrUndefined(item)\n if (isItemDefined) {\n throw Error(`Record at index '${i}' should not be defined.`)\n }\n }\n }\n }\n}\n\n/**\n * NOTE: This is a very niave implementation that could be improved.\n */\nfunction _isOneOfIndices(\n indices: (number | [startIndex: number, endIndex: number])[],\n index: number,\n): boolean {\n for (const r of indices) {\n if (Array.isArray(r)) {\n if (index >= r[0] && index <= r[1]) {\n return true\n }\n } else {\n if (index === r) {\n return true\n }\n }\n }\n\n return false\n}\n","import { ApolloLink, Observable, Operation } from '@apollo/client/core'\n\nexport interface MockGraphQLLinkOptions {\n resolve: (operation: Operation) => any\n delay?: number\n}\n\nexport function mockGraphQLLink(options: MockGraphQLLinkOptions) {\n return new ApolloLink((operation, forward) => {\n return new Observable((subscriber) => {\n const execute = () => {\n const response = options.resolve(operation)\n operation.setContext({ response })\n subscriber.next(response)\n subscriber.complete()\n }\n\n if (options.delay && options.delay > 0) {\n const timeoutId = setTimeout(execute, options.delay)\n return () => clearTimeout(timeoutId)\n }\n\n execute()\n return () => {}\n })\n })\n}\n","import { concat, InMemoryCache, Operation } from '@apollo/client'\nimport { provideApollo } from 'apollo-angular'\nimport { Provider } from '@angular/core'\n\nimport { queryProcessingLink } from '../apollo-links/query-processing-link'\nimport { mockGraphQLLink } from './mock-graphql-link'\n\nexport interface MockApolloTestingProviderOptions {\n resolve: (operation: Operation) => any\n delay?: number\n}\n\n/**\n * Creates Apollo providers configured like our apps, except with the Apollo\n * HttpLink replaced with a mock link that delegates to a `resolve` callback.\n * No GraphQL schema is required — the resolve function returns the response\n * directly, typically using `filteredResults` for sorting/filtering/paging.\n */\nexport function createMockApolloTestingProvider(\n options: MockApolloTestingProviderOptions,\n): Provider {\n return provideApollo(() => ({\n cache: new InMemoryCache(),\n link: concat(\n queryProcessingLink,\n mockGraphQLLink({\n resolve: options.resolve,\n delay: options.delay,\n }),\n ),\n defaultOptions: {\n watchQuery: {\n fetchPolicy: 'cache-and-network',\n errorPolicy: 'ignore',\n },\n query: {\n fetchPolicy: 'network-only',\n errorPolicy: 'all',\n },\n },\n }))\n}\n","import { gql } from 'apollo-angular'\n\nimport { filteredResults } from '../filtered-results'\n\nexport interface SimpleGqlTestRecord {\n id: number\n name: string\n}\n\nexport function createSimpleGqlTestRecord(num: number): SimpleGqlTestRecord {\n return { id: num, name: `Item_${num}` }\n}\n\nexport function createSimpleGqlTestRoot(numRecords: number) {\n const _records: SimpleGqlTestRecord[] = []\n for (let i = 0; i < numRecords; i++) {\n _records.push(createSimpleGqlTestRecord(i))\n }\n\n return {\n simpleGqlTestRecords: (args?: any) => filteredResults([..._records], args),\n }\n}\n\nexport const SIMPLE_GQL_TEST_QUERY = gql`\n query ExampleQuery(\n $skip: Int\n $take: Int\n $order: [SimpleGqlTestRecordSortInput!]\n $where: SimpleGqlTestRecordFilterInput\n ) {\n simpleGqlTestRecords(\n skip: $skip\n take: $take\n order: $order\n where: $where\n ) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`\n\n/**\n * Like {@link SIMPLE_GQL_TEST_QUERY} but includes `$search: String` for use\n * with search filters that inline a `gqlVar('search')` reference via\n * `queryProcessingConfig.variables.inline`.\n */\nexport const SIMPLE_GQL_TEST_SEARCH_QUERY = gql`\n query ExampleQuery(\n $skip: Int\n $take: Int\n $order: [SimpleGqlTestRecordSortInput!]\n $where: SimpleGqlTestRecordFilterInput\n $search: String\n ) {\n simpleGqlTestRecords(\n skip: $skip\n take: $take\n order: $order\n where: $where\n ) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface SimpleGqlTestExtraVariables {}\n\nexport interface SimpleGqlTestVariables extends SimpleGqlTestExtraVariables {\n skip?: number\n take?: number\n order?: Partial<Record<keyof SimpleGqlTestRecord, 'ASC' | 'DESC'>>[]\n where?: any\n search?: string\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["visit","BREAK","Observable"],"mappings":"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"}
@@ -351,13 +351,15 @@ declare function observeRowsWithGqlInputsHandling<TData, TRow, GqlVariables exte
351
351
  */
352
352
  type SortsMapperFieldEntry = string | null | ((prop: string, context: MapperContext) => string | null);
353
353
  /**
354
- * A map from every column prop name in `TColumns` to its GQL sort field.
354
+ * A partial map from column prop names to their GQL sort fields.
355
355
  *
356
- * Requiring every key at compile time provides exhaustiveness checking
357
- * without needing a switch statement.
356
+ * Each key must be a valid property of `TRow`, catching typos and
357
+ * copy-paste errors at compile time. Only columns that actually need
358
+ * sort mapping must be listed — unlisted columns are silently dropped
359
+ * (or throw in dev mode).
358
360
  */
359
- type SortsMapperFieldMap<TColumns extends string> = {
360
- [K in TColumns]: SortsMapperFieldEntry;
361
+ type SortsMapperFieldMap<TRow extends Record<string, any>> = {
362
+ [K in keyof TRow & string]?: SortsMapperFieldEntry;
361
363
  };
362
364
  /**
363
365
  * Creates a {@link SortsMapper} from a declarative field-name map.
@@ -375,21 +377,21 @@ type SortsMapperFieldMap<TColumns extends string> = {
375
377
  *
376
378
  * @example
377
379
  * // Simple static mapping
378
- * const mapSorts = createSortsMapper<'id' | 'name'>({
380
+ * const mapSorts = createSortsMapper<MyRow>({
379
381
  * id: 'id',
380
382
  * name: 'name',
381
383
  * })
382
384
  *
383
385
  * @example
384
386
  * // Dynamic mapping with context access
385
- * const mapSorts = createSortsMapper<'id' | 'name' | 'computed'>({
387
+ * const mapSorts = createSortsMapper<MyRow>({
386
388
  * id: 'id',
387
389
  * name: 'name',
388
390
  * computed: (prop, context) =>
389
391
  * context.extraVariables.useAlt ? 'altField' : prop,
390
392
  * })
391
393
  */
392
- declare function createSortsMapper<TColumns extends string>(fieldMap: SortsMapperFieldMap<TColumns>): SortsMapper;
394
+ declare function createSortsMapper<TRow extends Record<string, any>>(fieldMap: SortsMapperFieldMap<TRow>): SortsMapper;
393
395
 
394
396
  /**
395
397
  * NOTE: Any of ApolloClient's WatchQueryOptions properties can be set, but I
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theseam/ui-common",
3
- "version": "1.0.2-beta.15",
3
+ "version": "1.0.2-beta.16",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^20.2.3",
6
6
  "@angular/common": "^20.3.0",