@labdigital/commercetools-mock 0.5.16 → 0.5.19

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.
@@ -1 +1 @@
1
- {"version":3,"file":"commercetools-mock.cjs.development.js","sources":["../src/lib/expandParser.ts","../src/lib/haversine.ts","../src/lib/predicateParser.ts","../src/exceptions.ts","../src/storage.ts","../src/oauth/store.ts","../src/oauth/helpers.ts","../src/oauth/server.ts","../src/helpers.ts","../src/projectAPI.ts","../src/lib/proxy.ts","../src/constants.ts","../src/services/abstract.ts","../src/repositories/errors.ts","../src/repositories/abstract.ts","../src/repositories/helpers.ts","../src/repositories/cart-discount.ts","../src/services/cart-discount.ts","../src/repositories/cart.ts","../src/services/cart.ts","../src/repositories/category.ts","../src/services/category.ts","../src/repositories/channel.ts","../src/services/channel.ts","../src/repositories/customer-group.ts","../src/services/customer-group.ts","../src/repositories/customer.ts","../src/services/customer.ts","../src/repositories/custom-object.ts","../src/services/custom-object.ts","../src/repositories/discount-code.ts","../src/services/discount-code.ts","../src/repositories/extension.ts","../src/services/extension.ts","../src/repositories/inventory-entry.ts","../src/services/inventory-entry.ts","../src/services/my-cart.ts","../src/repositories/payment.ts","../src/services/my-payment.ts","../src/repositories/order.ts","../src/services/order.ts","../src/services/payment.ts","../src/lib/filterParser.ts","../src/repositories/product-projection.ts","../src/services/product-projection.ts","../src/repositories/product.ts","../src/services/product.ts","../src/repositories/product-type.ts","../src/services/product-type.ts","../src/lib/masking.ts","../src/repositories/project.ts","../src/services/project.ts","../src/repositories/shipping-method.ts","../src/services/shipping-method.ts","../src/repositories/shopping-list.ts","../src/services/shopping-list.ts","../src/repositories/state.ts","../src/services/state.ts","../src/repositories/store.ts","../src/services/store.ts","../src/repositories/subscription.ts","../src/services/subscription.ts","../src/repositories/tax-category.ts","../src/services/tax-category.ts","../src/repositories/type.ts","../src/services/type.ts","../src/repositories/zone.ts","../src/services/zone.ts","../src/ctMock.ts"],"sourcesContent":["/**\n * This module implements the reference expansion as imeplemented by\n * commercetools.\n *\n * See https://docs.commercetools.com/api/general-concepts#reference-expansion\n *\n * TODO: implement support for multi-dimensional array\n */\ntype ExpandResult = {\n element: string\n index?: string | number\n rest?: string\n}\n\nexport const parseExpandClause = (clause: string): ExpandResult => {\n const result: ExpandResult = {\n element: clause,\n index: undefined,\n rest: undefined,\n }\n\n const pos = clause.indexOf('.')\n if (pos > 0) {\n result.element = clause.substring(0, pos)\n result.rest = clause.substring(pos + 1)\n }\n\n const match = result.element.match(/\\[([^\\]+])]/)\n if (match) {\n result.index = match[1] === '*' ? '*' : parseInt(match[1], 10)\n result.element = result.element.substring(0, match.index)\n }\n return result\n}\n","export type Location = {\n latitude: number\n longitude: number\n}\n\n/**\n * Returns the distance between src and dst as meters\n */\nexport const haversineDistance = (src: Location, dst: Location) => {\n const RADIUS_OF_EARTH_IN_KM = 6371\n const toRadian = (deg: number) => deg * (Math.PI / 180)\n\n const dLat = toRadian(dst.latitude - src.latitude)\n const dLon = toRadian(dst.longitude - src.longitude)\n\n var a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRadian(src.latitude)) *\n Math.cos(toRadian(dst.latitude)) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\n return RADIUS_OF_EARTH_IN_KM * c * 1000\n}\n","/**\n * This module implements the commercetools query predicate filter expression.\n * Support should be 100% complete.\n *\n * See https://docs.commercetools.com/api/predicates/query\n */\nimport perplex from 'perplex'\nimport { ITokenPosition, Parser } from 'pratt'\nimport { haversineDistance } from './haversine'\n\nexport class PredicateError {\n message: string\n\n constructor(message: string) {\n this.message = message\n }\n}\n\ntype MatchFunc = (target: any, variables: VariableMap) => boolean\ntype VariableMap = {\n [key: string]: any\n}\n\nexport const matchesPredicate = (\n predicate: string | string[] | undefined,\n target: any,\n variables?: VariableMap\n): boolean => {\n if (!predicate) {\n return true\n }\n\n if (Array.isArray(predicate)) {\n return predicate.every(item => {\n const func = generateMatchFunc(item)\n return func(target, variables || {})\n })\n } else {\n const func = generateMatchFunc(predicate)\n return func(target, variables || {})\n }\n}\n\nexport const parseQueryExpression = (\n predicate: string | string[]\n): MatchFunc => {\n if (Array.isArray(predicate)) {\n const callbacks = predicate.map(item => generateMatchFunc(item))\n return (target: any, variables: VariableMap) => {\n return callbacks.every(callback => callback(target, variables))\n }\n } else {\n return generateMatchFunc(predicate)\n }\n}\n\ntype Symbol = {\n type: 'var' | 'boolean' | 'string' | 'float' | 'int' | 'identifier'\n value: any\n pos?: ITokenPosition\n}\n\nconst validateSymbol = (val: Symbol) => {\n if (!val.type) {\n throw new PredicateError('Internal error')\n }\n\n if (val.type === 'identifier') {\n const char = val.value.charAt(0)\n const line = val.pos?.start.line\n const column = val.pos?.start.column\n\n throw new PredicateError(\n `Invalid input '${char}', expected input parameter or primitive value (line ${line}, column ${column})`\n )\n }\n}\n\nconst resolveSymbol = (val: Symbol, vars: VariableMap): any => {\n if (val.type === 'var') {\n if (!(val.value in vars)) {\n throw new PredicateError(`Missing parameter value for ${val.value}`)\n }\n return vars[val.value]\n }\n\n return val.value\n}\n\nconst resolveValue = (obj: any, val: Symbol): any => {\n if (val.type !== 'identifier') {\n throw new PredicateError('Internal error')\n }\n\n if (!(val.value in obj)) {\n if (Array.isArray(obj)) {\n return Object.values(obj)\n .filter(v => val.value in v)\n .map(v => v[val.value])\n }\n throw new PredicateError(`The field '${val.value}' does not exist.`)\n }\n\n return obj[val.value]\n}\n\nconst getLexer = (value: string) => {\n return new perplex(value)\n\n .token('AND', /and(?![-_a-z0-9]+)/i)\n .token('OR', /or(?![-_a-z0-9]+)/i)\n .token('NOT', /not(?![-_a-z0-9]+)/i)\n\n .token('WITHIN', /within(?![-_a-z0-9]+)/i)\n .token('IN', /in(?![-_a-z0-9]+)/i)\n .token('MATCHES_IGNORE_CASE', /matches\\s+ignore\\s+case(?![-_a-z0-9]+)/i)\n .token('CONTAINS', /contains(?![-_a-z0-9]+)/i)\n .token('ALL', /all(?![-_a-z0-9]+)/i)\n .token('ANY', /any(?![-_a-z0-9]+)/i)\n .token('EMPTY', /empty(?![-_a-z0-9]+)/i)\n .token('IS', /is(?![-_a-z0-9]+)/i)\n .token('DEFINED', /defined(?![-_a-z0-9]+)/i)\n\n .token('FLOAT', /\\d+\\.\\d+/)\n .token('INT', /\\d+/)\n .token('VARIABLE', /:([-_A-Za-z0-9]+)/)\n .token('IDENTIFIER', /[-_A-Za-z0-9]+/)\n .token('STRING', /\"((?:\\\\.|[^\"\\\\])*)\"/)\n .token('STRING', /'((?:\\\\.|[^'\\\\])*)'/)\n\n .token('COMMA', ',')\n .token('(', '(')\n .token(')', ')')\n .token('>=', '>=')\n .token('<=', '<=')\n .token('>', '>')\n .token('<', '<')\n .token('!=', '!=')\n .token('=', '=')\n .token('\"', '\"')\n .token('WS', /\\s+/, true) // skip\n}\n\n/**\n * This function converts a query expression in to a callable which returns a\n * boolean to indicate if the given object matches or not.\n *\n * This currently parses the predicate each time it is called, but it should be\n * straight-forward to add a query cache (lru-cache)\n */\nconst generateMatchFunc = (predicate: string): MatchFunc => {\n const lexer = getLexer(predicate)\n const parser = new Parser(lexer)\n .builder()\n .nud('IDENTIFIER', 100, t => {\n return {\n type: 'identifier',\n value: t.token.match,\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('VARIABLE', 100, t => {\n return {\n type: 'var',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('STRING', 100, t => {\n return {\n type: 'string',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('INT', 1, t => {\n return {\n type: 'int',\n value: parseInt(t.token.match, 10),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('FLOAT', 1, t => {\n return {\n type: 'float',\n value: parseFloat(t.token.match),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('NOT', 100, ({ bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return !expr(obj)\n }\n })\n .nud('EMPTY', 10, ({ bp }) => {\n return 'empty'\n })\n .nud('DEFINED', 10, ({ bp }) => {\n return 'defined'\n })\n\n .led('AND', 5, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return left(obj) && expr(obj)\n }\n })\n .led('OR', 5, ({ left, token, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n return left(obj, vars) || expr(obj, vars)\n }\n })\n .led('COMMA', 1, ({ left, token, bp }) => {\n const expr: any = parser.parse({ terminals: [bp - 1] })\n if (Array.isArray(expr)) {\n return [left, ...expr]\n } else {\n return [left, expr]\n }\n })\n .nud('(', 100, t => {\n const expr: any = parser.parse({ terminals: [')'] })\n return expr\n })\n .led('(', 100, ({ left, bp }) => {\n const expr = parser.parse()\n lexer.expect(')')\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (value) {\n return expr(value)\n }\n return false\n }\n })\n .bp(')', 0)\n .led('=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const resolvedValue = resolveValue(obj, left)\n const resolvedSymbol = resolveSymbol(expr, vars)\n if (Array.isArray(resolvedValue)) {\n return !!resolvedValue.some(elem => elem === resolvedSymbol)\n }\n return resolvedValue === resolvedSymbol\n }\n })\n .led('!=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n return resolveValue(obj, left) !== resolveSymbol(expr, vars)\n }\n })\n .led('>', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) > resolveSymbol(expr, vars)\n }\n })\n .led('>=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) >= resolveSymbol(expr, vars)\n }\n })\n .led('<', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) < resolveSymbol(expr, vars)\n }\n })\n .led('<=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) <= resolveSymbol(expr, vars)\n }\n })\n .led('IS', 20, ({ left, bp }) => {\n let invert = false\n\n // Peek if this is a `is not` statement\n const next = lexer.peek()\n if (next.type === 'NOT') {\n invert = true\n lexer.next()\n }\n\n const expr: any = parser.parse({ terminals: [bp - 1] })\n\n switch (expr) {\n case 'empty': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length === 0\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length !== 0\n }\n }\n }\n case 'defined': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val !== undefined\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val === undefined\n }\n }\n }\n default: {\n throw new Error('Unexpected')\n }\n }\n })\n .led('IN', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n let symbols = expr\n if (!Array.isArray(symbols)) {\n symbols = [expr]\n }\n\n const inValues = symbols.map((item: Symbol) =>\n resolveSymbol(item, vars)\n )\n return inValues.includes(resolveValue(obj, left))\n }\n })\n .led('MATCHES_IGNORE_CASE', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const value = resolveValue(obj, left)\n const other = resolveSymbol(expr, vars)\n\n if (typeof value != 'string') {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n return value.toLowerCase() === other.toLowerCase()\n }\n })\n .led('WITHIN', 20, ({ left, bp }) => {\n const type = lexer.next()\n\n if (type.match !== 'circle') {\n throw new PredicateError(\n `Invalid input '${type.match}', expected circle`\n )\n }\n\n lexer.expect('(')\n const expr = parser.parse({ terminals: [')'] })\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (!value) return false\n\n const maxDistance = resolveSymbol(expr[2], vars)\n const distance = haversineDistance(\n {\n longitude: value[0],\n latitude: value[1],\n },\n {\n longitude: resolveSymbol(expr[0], vars),\n latitude: resolveSymbol(expr[1], vars),\n }\n )\n return distance <= maxDistance\n }\n })\n .led('CONTAINS', 20, ({ left, bp }) => {\n const keyword = lexer.next()\n\n let expr = parser.parse()\n if (!Array.isArray(expr)) {\n expr = [expr]\n }\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n\n if (!Array.isArray(value)) {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n\n const array = expr.map((item: Symbol) => resolveSymbol(item, vars))\n if (keyword.type === 'ALL') {\n return array.every((item: any) => value.includes(item))\n } else {\n return array.some((item: any) => value.includes(item))\n }\n }\n })\n\n .build()\n\n const result = parser.parse()\n\n if (typeof result !== 'function') {\n const lines = predicate.split('\\n')\n const column = lines[lines.length - 1].length\n\n throw new PredicateError(\n `Unexpected end of input, expected SphereIdentifierChar, comparison ` +\n `operator, not, in, contains, is, within or matches` +\n ` (line ${lines.length}, column ${column})`\n )\n }\n return result\n}\n","export abstract class BaseError {\n abstract message: string\n}\n\nexport class CommercetoolsError<T extends BaseError> extends Error {\n info: T\n statusCode: number\n\n constructor(info: T, statusCode = 400) {\n super(info.message)\n this.info = info\n this.statusCode = statusCode || 500\n }\n}\n\nexport interface InvalidRequestError {\n readonly code: 'invalid_request'\n readonly message: string\n}\n","import assert from 'assert'\nimport {\n BaseResource,\n Cart,\n Category,\n Customer,\n CustomObject,\n InventoryEntry,\n Order,\n PagedQueryResponse,\n QueryParam,\n Reference,\n ResourceIdentifier,\n Product,\n Store,\n Type,\n Payment,\n Project,\n State,\n TaxCategory,\n ShippingMethod,\n ProductType,\n InvalidInputError,\n ProductProjection,\n ShoppingList,\n Extension,\n CartDiscount,\n CustomerGroup,\n DiscountCode,\n Zone,\n Channel,\n Subscription,\n} from '@commercetools/platform-sdk'\nimport { parseExpandClause } from './lib/expandParser'\nimport { RepositoryTypes, ResourceMap, Writable } from './types'\nimport { parseQueryExpression } from './lib/predicateParser'\nimport { CommercetoolsError } from './exceptions'\n\ntype GetParams = {\n expand?: string[]\n}\n\ntype QueryParams = {\n expand?: string | string[]\n sort?: string | string[]\n limit?: number\n offset?: number\n withTotal?: boolean\n where?: string | string[]\n [key: string]: QueryParam\n}\n\nexport abstract class AbstractStorage {\n abstract clear(): void\n\n abstract assertStorage(typeId: RepositoryTypes): void\n\n abstract all(projectKey: string, typeId: RepositoryTypes): Array<BaseResource>\n\n abstract add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes]\n ): void\n\n abstract get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract addProject(projectKey: string): Project\n abstract getProject(projectKey: string): Project\n abstract saveProject(project: Project): Project\n\n abstract delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): BaseResource | null\n\n abstract query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse\n\n abstract getByResourceIdentifier(\n projectKey: string,\n identifier: ResourceIdentifier\n ): BaseResource | undefined\n}\n\ntype ProjectStorage = Partial<\n {\n [index in RepositoryTypes]: Map<string, BaseResource>\n }\n>\n\nexport class InMemoryStorage extends AbstractStorage {\n protected resources: {\n [projectKey: string]: ProjectStorage\n } = {}\n\n protected projects: {\n [projectKey: string]: Project\n } = {}\n\n private forProjectKey(projectKey: string) {\n this.addProject(projectKey)\n\n let projectStorage = this.resources[projectKey]\n if (!projectStorage) {\n projectStorage = this.resources[projectKey] = {\n cart: new Map<string, Cart>(),\n 'cart-discount': new Map<string, CartDiscount>(),\n category: new Map<string, Category>(),\n channel: new Map<string, Channel>(),\n customer: new Map<string, Customer>(),\n 'customer-group': new Map<string, CustomerGroup>(),\n 'discount-code': new Map<string, DiscountCode>(),\n extension: new Map<string, Extension>(),\n 'inventory-entry': new Map<string, InventoryEntry>(),\n 'key-value-document': new Map<string, CustomObject>(),\n order: new Map<string, Order>(),\n payment: new Map<string, Payment>(),\n 'product-type': new Map<string, ProductType>(),\n product: new Map<string, Product>(),\n 'product-selection': new Map<string, any>(),\n 'product-projection': new Map<string, ProductProjection>(),\n 'shipping-method': new Map<string, ShippingMethod>(),\n state: new Map<string, State>(),\n store: new Map<string, Store>(),\n 'shopping-list': new Map<string, ShoppingList>(),\n subscription: new Map<string, Subscription>(),\n 'tax-category': new Map<string, TaxCategory>(),\n type: new Map<string, Type>(),\n zone: new Map<string, Zone>(),\n }\n }\n return projectStorage\n }\n\n clear() {\n for (const [, projectStorage] of Object.entries(this.resources)) {\n for (const [, value] of Object.entries(projectStorage)) {\n value?.clear()\n }\n }\n }\n\n assertStorage(typeId: RepositoryTypes) {}\n\n all(projectKey: string, typeId: RepositoryTypes) {\n const store = this.forProjectKey(projectKey)[typeId]\n if (store) {\n return Array.from(store.values())\n }\n return []\n }\n\n add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes],\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] {\n this.forProjectKey(projectKey)[typeId]?.set(obj.id, obj)\n\n const resource = this.get(projectKey, typeId, obj.id, params)\n assert(resource, `resource of type ${typeId} with id ${obj.id} not created`)\n return resource\n }\n\n get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const resource = this.forProjectKey(projectKey)[typeId]?.get(id)\n if (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\n }\n\n getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n const resources: any[] = Array.from(store.values())\n const resource = resources.find(e => e.key === key)\n if (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\n }\n\n delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n const resource = this.get(projectKey, typeId, id)\n\n if (resource) {\n this.forProjectKey(projectKey)[typeId]?.delete(id)\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return resource\n }\n\n query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n let resources = Array.from(store.values())\n\n // Apply predicates\n if (params.where) {\n try {\n const filterFunc = parseQueryExpression(params.where)\n resources = resources.filter(resource => filterFunc(resource, {}))\n } catch (err) {\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message: (err as any).message,\n },\n 400\n )\n }\n }\n\n // Get the total before slicing the array\n const totalResources = resources.length\n\n // Apply offset, limit\n const offset = params.offset || 0\n const limit = params.limit || 20\n resources = resources.slice(offset, offset + limit)\n\n // Expand the resources\n if (params.expand !== undefined) {\n resources = resources.map(resource => {\n return this.expand(projectKey, resource, params.expand)\n })\n }\n\n return {\n count: totalResources,\n total: resources.length,\n offset: offset,\n limit: limit,\n results: resources,\n }\n }\n\n getByResourceIdentifier<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n identifier: ResourceIdentifier\n ): ResourceMap[RepositoryTypes] | undefined {\n if (identifier.id) {\n const resource = this.get(projectKey, identifier.typeId, identifier.id)\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n console.error(\n `No resource found with typeId=${identifier.typeId}, id=${identifier.id}`\n )\n return undefined\n }\n\n if (identifier.key) {\n const store = this.forProjectKey(projectKey)[identifier.typeId]\n\n if (store) {\n // TODO: BaseResource has no key attribute, but the subclasses should\n // have them all.\n const resource = Array.from(store.values()).find(\n // @ts-ignore\n r => r.key === identifier.key\n )\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n } else {\n throw new Error(\n `No storage found for resource type: ${identifier.typeId}`\n )\n }\n }\n return undefined\n }\n\n addProject = (projectKey: string): Project => {\n if (!this.projects[projectKey]) {\n this.projects[projectKey] = {\n key: projectKey,\n name: '',\n countries: [],\n currencies: [],\n languages: [],\n createdAt: '2018-10-04T11:32:12.603Z',\n trialUntil: '2018-12',\n carts: {\n countryTaxRateFallbackEnabled: false,\n deleteDaysAfterLastModification: 90,\n },\n messages: { enabled: false, deleteDaysAfterCreation: 15 },\n shippingRateInputType: undefined,\n externalOAuth: undefined,\n searchIndexing: {\n products: {\n status: 'Deactivated',\n },\n orders: {\n status: 'Deactivated',\n },\n },\n version: 1,\n }\n }\n return this.projects[projectKey]\n }\n\n saveProject = (project: Project): Project => {\n this.projects[project.key] = project\n return project\n }\n\n getProject = (projectKey: string): Project => {\n return this.addProject(projectKey)\n }\n\n private expand = <T>(\n projectKey: string,\n obj: T,\n clause: undefined | string | string[]\n ): T => {\n if (!clause) return obj\n const newObj = JSON.parse(JSON.stringify(obj))\n if (Array.isArray(clause)) {\n clause.forEach(c => {\n this._resolveResource(projectKey, newObj, c)\n })\n } else {\n this._resolveResource(projectKey, newObj, clause)\n }\n return newObj\n }\n\n private _resolveResource = (projectKey: string, obj: any, expand: string) => {\n const params = parseExpandClause(expand)\n\n if (!params.index) {\n const reference = obj[params.element]\n if (reference === undefined) {\n return\n }\n this._resolveReference(projectKey, reference, params.rest)\n } else if (params.index === '*') {\n const reference = obj[params.element]\n if (reference === undefined || !Array.isArray(reference)) return\n reference.forEach((itemRef: Writable<Reference>) => {\n this._resolveReference(projectKey, itemRef, params.rest)\n })\n } else {\n const reference = obj[params.element][params.index]\n if (reference === undefined) return\n this._resolveReference(projectKey, reference, params.rest)\n }\n }\n\n private _resolveReference(\n projectKey: string,\n reference: any,\n expand: string | undefined\n ) {\n if (reference === undefined) return\n\n if (\n reference.typeId !== undefined &&\n (reference.id !== undefined || reference.key !== undefined)\n ) {\n // @ts-ignore\n reference.obj = this.getByResourceIdentifier(projectKey, {\n typeId: reference.typeId,\n id: reference.id,\n key: reference.key,\n } as ResourceIdentifier)\n if (expand) {\n this._resolveResource(projectKey, reference.obj, expand)\n }\n } else {\n if (expand) {\n this._resolveResource(projectKey, reference, expand)\n }\n }\n }\n}\n","import { randomBytes } from 'crypto'\n\ntype Token = {\n access_token: string\n token_type: 'Bearer'\n expires_in: number\n scope: string\n}\n\nexport class OAuth2Store {\n tokens: Token[] = []\n validate: Boolean = true\n\n constructor(validate: Boolean = true) {\n this.validate = validate\n }\n\n getClientToken(clientId: string, clientSecret: string, scope?: string) {\n const token: Token = {\n access_token: randomBytes(16).toString('base64'),\n token_type: 'Bearer',\n expires_in: 172800,\n scope: scope || 'todo',\n }\n this.tokens.push(token)\n return token\n }\n\n validateToken(token: string) {\n if (!this.validate) return true\n\n const foundToken = this.tokens.find(t => t.access_token === token)\n if (foundToken) {\n return true\n }\n return false\n }\n}\n","import { Request } from 'express'\n\nexport const getBearerToken = (request: Request): string | undefined => {\n const authHeader = request.header('Authorization')\n const match = authHeader?.match(/^Bearer\\s(?<token>[^\\s]+)$/)\n if (match) {\n return match.groups?.token\n }\n return undefined\n}\n","import auth from 'basic-auth'\nimport bodyParser from 'body-parser'\nimport express, { NextFunction, Request, Response } from 'express'\nimport {\n AccessDeniedError,\n InvalidTokenError,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError, InvalidRequestError } from '../exceptions'\nimport { InvalidClientError, UnsupportedGrantType } from './errors'\nimport { OAuth2Store } from './store'\nimport { getBearerToken } from './helpers'\n\nexport class OAuth2Server {\n store: OAuth2Store\n\n constructor(options: { enabled: boolean; validate: boolean }) {\n this.store = new OAuth2Store(options.validate)\n }\n\n createRouter() {\n const router = express.Router()\n router.use(bodyParser.urlencoded({ extended: true }))\n router.post('/token', this.tokenHandler.bind(this))\n return router\n }\n\n createMiddleware() {\n return async (request: Request, response: Response, next: NextFunction) => {\n const token = getBearerToken(request)\n if (!token) {\n next(\n new CommercetoolsError<AccessDeniedError>(\n {\n code: 'access_denied',\n message:\n 'This endpoint requires an access token. You can get one from the authorization server.',\n },\n 401\n )\n )\n }\n\n if (!token || !this.store.validateToken(token)) {\n next(\n new CommercetoolsError<InvalidTokenError>(\n {\n code: 'invalid_token',\n message: 'invalid_token',\n },\n 401\n )\n )\n }\n\n next()\n }\n }\n async tokenHandler(request: Request, response: Response, next: NextFunction) {\n const authHeader = request.header('Authorization')\n if (!authHeader) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 401\n )\n )\n }\n const credentials = auth.parse(authHeader)\n if (!credentials) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 400\n )\n )\n }\n\n const grantType = request.query.grant_type || request.body.grant_type\n if (!grantType) {\n return next(\n new CommercetoolsError<InvalidRequestError>(\n {\n code: 'invalid_request',\n message: 'Missing required parameter: grant_type.',\n },\n 400\n )\n )\n }\n\n if (grantType === 'client_credentials') {\n const token = this.store.getClientToken(\n credentials.name,\n credentials.pass,\n request.query.scope?.toString()\n )\n return response.status(200).send(token)\n } else {\n return next(\n new CommercetoolsError<UnsupportedGrantType>(\n {\n code: 'unsupported_grant_type',\n message: `Invalid parameter: grant_type: Invalid grant type: ${grantType}`,\n },\n 400\n )\n )\n }\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\n\nexport const getBaseResourceProperties = () => {\n return {\n id: uuidv4(),\n createdAt: new Date().toISOString(),\n lastModifiedAt: new Date().toISOString(),\n version: 0,\n }\n}\n","import { getBaseResourceProperties } from './helpers'\nimport { AbstractStorage } from './storage'\nimport { RepositoryMap, ResourceMap, Services } from './types'\n\nexport class ProjectAPI {\n private projectKey: string\n private _storage: AbstractStorage\n private _services: Services\n\n constructor(\n projectKey: string,\n services: Services,\n storage: AbstractStorage\n ) {\n this.projectKey = projectKey\n this._storage = storage\n this._services = services\n }\n\n add<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId | 'custom-object',\n resource: ResourceMap[ReferenceTypeId]\n ) {\n //@ts-ignore\n if (typeId === 'custom-object') typeId = 'key-value-document'\n\n const parsedTypeId = typeId as ReferenceTypeId\n\n const service = this._services[parsedTypeId]\n if (service) {\n this._storage.add(this.projectKey, parsedTypeId, {\n ...getBaseResourceProperties(),\n ...resource,\n })\n } else {\n throw new Error(`Service for ${typeId} not implemented yet`)\n }\n }\n\n get<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId,\n id: string\n ): ResourceMap[ReferenceTypeId] {\n return this._storage.get(\n this.projectKey,\n typeId,\n id,\n {}\n ) as ResourceMap[ReferenceTypeId]\n }\n\n // TODO: Not sure if we want to expose this...\n getRepository<ReferenceTypeId extends keyof RepositoryMap>(\n typeId: ReferenceTypeId\n ): RepositoryMap[ReferenceTypeId] {\n const service = this._services[typeId]\n if (service !== undefined) {\n return service.repository as RepositoryMap[ReferenceTypeId]\n }\n throw new Error('No such repository')\n }\n}\n","export const copyHeaders = (headers: Record<string, string>) => {\n const validHeaders = ['accept', 'host', 'authorization']\n const result: Record<string, string> = {}\n\n Object.entries(headers).forEach(([key, value]) => {\n if (validHeaders.includes(key.toLowerCase())) {\n result[key] = value\n }\n })\n\n return result\n}\n","export const DEFAULT_API_HOSTNAME = /^https:\\/\\/api\\..*?\\.commercetools.com:443$/\nexport const DEFAULT_AUTH_HOSTNAME = /^https:\\/\\/auth\\..*?\\.commercetools.com:443$/\n","import { Update } from '@commercetools/platform-sdk'\nimport { ParsedQs } from 'qs'\nimport { Request, Response, Router } from 'express'\nimport { AbstractResourceRepository } from '../repositories/abstract'\n\nexport default abstract class AbstractService {\n protected abstract getBasePath(): string\n public abstract repository: AbstractResourceRepository\n\n createStatusCode = 201\n\n constructor(parent: Router) {\n this.registerRoutes(parent)\n }\n\n extraRoutes(router: Router) {}\n\n registerRoutes(parent: Router) {\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n // Bind this first since the `/:id` routes are currently a bit to greedy\n this.extraRoutes(router)\n\n router.get('/', this.get.bind(this))\n router.get('/key=:key', this.getWithKey.bind(this)) // same thing goes for the key routes\n router.get('/:id', this.getWithId.bind(this))\n\n router.delete('/key=:key', this.deletewithKey.bind(this))\n router.delete('/:id', this.deletewithId.bind(this))\n\n router.post('/', this.post.bind(this))\n router.post('/key=:key', this.postWithKey.bind(this))\n router.post('/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n get(request: Request, response: Response) {\n const result = this.repository.query(request.params.projectKey, {\n expand: this._parseParam(request.query.expand),\n where: this._parseParam(request.query.where),\n })\n return response.status(200).send(result)\n }\n\n getWithId(request: Request, response: Response) {\n const result = this._expandWithId(request, request.params['id'])\n if (!result) {\n return response.status(404).send()\n }\n console.log(JSON.stringify(result, null, 4))\n return response.status(200).send(result)\n }\n\n getWithKey(request: Request, response: Response) {\n const result = this.repository.getByKey(\n request.params.projectKey,\n request.params['key'],\n { expand: this._parseParam(request.query.expand) }\n )\n if (!result) return response.status(404).send()\n return response.status(200).send(result)\n }\n\n deletewithId(request: Request, response: Response) {\n const result = this.repository.delete(\n request.params.projectKey,\n request.params['id'],\n {\n expand: this._parseParam(request.query.expand),\n }\n )\n if (!result) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(result)\n }\n\n deletewithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n post(request: Request, response: Response) {\n const draft = request.body\n const resource = this.repository.create(request.params.projectKey, draft)\n const result = this._expandWithId(request, resource.id)\n return response.status(this.createStatusCode).send(result)\n }\n\n postWithId(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const resource = this.repository.get(\n request.params.projectKey,\n request.params['id']\n )\n if (!resource) {\n return response.status(404).send('Not found')\n }\n\n if (resource.version !== updateRequest.version) {\n return response.status(409).send('Concurrent modification')\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n resource,\n updateRequest.actions\n )\n\n const result = this._expandWithId(request, updatedResource.id)\n return response.status(200).send(result)\n }\n\n postWithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n protected _expandWithId(request: Request, resourceId: string) {\n const result = this.repository.get(request.params.projectKey, resourceId, {\n expand: this._parseParam(request.query.expand),\n })\n return result\n }\n\n // No idea what i'm doing\n private _parseParam(\n value: string | ParsedQs | string[] | ParsedQs[] | undefined\n ): string[] | undefined {\n if (Array.isArray(value)) {\n // @ts-ignore\n return value\n } else if (value !== undefined) {\n return [`${value}`]\n }\n return undefined\n }\n}\n","import {\n BaseResource,\n ConcurrentModificationError,\n Project,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\n\nexport const checkConcurrentModification = (\n resource: BaseResource | Project,\n expectedVersion: number\n) => {\n if (resource.version === expectedVersion) return\n\n const identifier = (<BaseResource>resource).id\n ? (<BaseResource>resource).id\n : (<Project>resource).key\n\n throw new CommercetoolsError<ConcurrentModificationError>(\n {\n message: `Object ${identifier} has a different version than expected. Expected: ${expectedVersion} - Actual: ${resource.version}.`,\n currentVersion: resource.version,\n code: 'ConcurrentModification',\n },\n 409\n )\n}\n","import { RepositoryTypes } from './../types'\nimport deepEqual from 'deep-equal'\n\nimport {\n BaseResource,\n InvalidOperationError,\n Project,\n UpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\n\nexport type QueryParams = {\n expand?: string[]\n where?: string[]\n}\n\nexport type GetParams = {\n expand?: string[]\n}\n\nexport abstract class AbstractRepository {\n protected _storage: AbstractStorage\n protected actions: Partial<\n Record<any, (projectKey: string, resource: any, action: any) => void>\n > = {}\n\n constructor(storage: AbstractStorage) {\n this._storage = storage\n }\n\n abstract save(projectKey: string, resource: BaseResource | Project): void\n\n processUpdateActions(\n projectKey: string,\n resource: BaseResource | Project,\n actions: UpdateAction[]\n ): BaseResource {\n // Deep-copy\n const modifiedResource = JSON.parse(JSON.stringify(resource))\n\n actions.forEach(action => {\n const updateFunc = this.actions[action.action]\n if (!updateFunc) {\n console.error(`No mock implemented for update action ${action.action}`)\n return\n }\n updateFunc(projectKey, modifiedResource, action)\n })\n\n if (!deepEqual(modifiedResource, resource)) {\n this.save(projectKey, modifiedResource)\n }\n return modifiedResource\n }\n}\n\nexport abstract class AbstractResourceRepository extends AbstractRepository {\n abstract create(projectKey: string, draft: any): BaseResource\n abstract getTypeId(): RepositoryTypes\n\n constructor(storage: AbstractStorage) {\n super(storage)\n this._storage.assertStorage(this.getTypeId())\n }\n\n query(projectKey: string, params: QueryParams = {}) {\n return this._storage.query(projectKey, this.getTypeId(), {\n expand: params.expand,\n where: params.where,\n })\n }\n\n get(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.get(projectKey, this.getTypeId(), id, params)\n }\n\n getByKey(\n projectKey: string,\n key: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.getByKey(projectKey, this.getTypeId(), key, params)\n }\n\n delete(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.delete(projectKey, this.getTypeId(), id, params)\n }\n\n save(projectKey: string, resource: BaseResource) {\n const current = this.get(projectKey, resource.id)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.add(projectKey, this.getTypeId(), resource as any)\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n CustomFields,\n CustomFieldsDraft,\n Money,\n Price,\n PriceDraft,\n Reference,\n ResourceIdentifier,\n Store,\n StoreKeyReference,\n StoreResourceIdentifier,\n Type,\n TypedMoney,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\n\nexport const createCustomFields = (\n draft: CustomFieldsDraft | undefined,\n projectKey: string,\n storage: AbstractStorage\n): CustomFields | undefined => {\n if (!draft) return undefined\n if (!draft.type) return undefined\n if (!draft.type.typeId) return undefined\n if (!draft.fields) return undefined\n\n const typeResource = storage.getByResourceIdentifier(\n projectKey,\n draft.type\n ) as Type\n\n if (!typeResource) {\n throw new Error(\n `No type '${draft.type.typeId}' with id=${draft.type.id} or key=${draft.type.key}`\n )\n }\n\n return {\n type: {\n typeId: draft.type.typeId,\n id: typeResource.id,\n },\n fields: draft.fields,\n }\n}\n\nexport const createPrice = (draft: PriceDraft): Price => {\n return {\n id: uuidv4(),\n value: createTypedMoney(draft.value),\n }\n}\n\nexport const createTypedMoney = (value: Money): TypedMoney => {\n return {\n type: 'centPrecision',\n fractionDigits: 2,\n ...value,\n }\n}\n\nexport const resolveStoreReference = (\n ref: StoreResourceIdentifier | undefined,\n projectKey: string,\n storage: AbstractStorage\n): StoreKeyReference | undefined => {\n if (!ref) return undefined\n const resource = storage.getByResourceIdentifier(projectKey, ref)\n if (!resource) {\n throw new Error('No such store')\n }\n\n const store = resource as Store\n return {\n typeId: 'store',\n key: store.key,\n }\n}\n\nexport const getReferenceFromResourceIdentifier = <T extends Reference>(\n resourceIdentifier: ResourceIdentifier,\n projectKey: string,\n storage: AbstractStorage\n): T => {\n const resource = storage.getByResourceIdentifier(\n projectKey,\n resourceIdentifier\n )\n if (!resource)\n throw new Error(\n `resource type ${resourceIdentifier.typeId} with id ${resourceIdentifier.id} and key ${resourceIdentifier.key} not found`\n )\n\n return ({\n typeId: resourceIdentifier.typeId,\n id: resource?.id,\n } as unknown) as T\n}\n","import {\n CartDiscount,\n CartDiscountChangeIsActiveAction,\n CartDiscountChangeSortOrderAction,\n CartDiscountDraft,\n CartDiscountSetDescriptionAction,\n CartDiscountSetKeyAction,\n CartDiscountSetValidFromAction,\n CartDiscountSetValidFromAndUntilAction,\n CartDiscountSetValidUntilAction,\n CartDiscountUpdateAction,\n CartDiscountValueAbsolute,\n CartDiscountValueDraft,\n CartDiscountValueFixed,\n CartDiscountValueGiftLineItem,\n CartDiscountValueRelative,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createTypedMoney } from './helpers'\n\nexport class CartDiscountRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart-discount'\n }\n\n create(projectKey: string, draft: CartDiscountDraft): CartDiscount {\n const resource: CartDiscount = {\n ...getBaseResourceProperties(),\n key: draft.key,\n description: draft.description,\n cartPredicate: draft.cartPredicate,\n isActive: draft.isActive || false,\n name: draft.name,\n references: [],\n target: draft.target,\n requiresDiscountCode: draft.requiresDiscountCode || false,\n sortOrder: draft.sortOrder,\n stackingMode: draft.stackingMode || 'Stacking',\n validFrom: draft.validFrom,\n validUntil: draft.validUntil,\n value: this.transformValueDraft(draft.value),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private transformValueDraft(value: CartDiscountValueDraft) {\n switch (value.type) {\n case 'absolute': {\n return {\n type: 'absolute',\n money: value.money.map(createTypedMoney),\n } as CartDiscountValueAbsolute\n }\n case 'fixed': {\n return {\n type: 'fixed',\n money: value.money.map(createTypedMoney),\n } as CartDiscountValueFixed\n }\n case 'giftLineItem': {\n return {\n ...value,\n } as CartDiscountValueGiftLineItem\n }\n case 'relative': {\n return {\n ...value,\n } as CartDiscountValueRelative\n }\n }\n\n return value\n }\n\n actions: Partial<\n Record<\n CartDiscountUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<CartDiscount>,\n action: any\n ) => void\n >\n > = {\n setKey: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { key }: CartDiscountSetKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { description }: CartDiscountSetDescriptionAction\n ) => {\n resource.description = description\n },\n setValidFrom: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validFrom }: CartDiscountSetValidFromAction\n ) => {\n resource.validFrom = validFrom\n },\n setValidUntil: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validUntil }: CartDiscountSetValidUntilAction\n ) => {\n resource.validUntil = validUntil\n },\n setValidFromAndUntil: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validFrom, validUntil }: CartDiscountSetValidFromAndUntilAction\n ) => {\n resource.validFrom = validFrom\n resource.validUntil = validUntil\n },\n changeSortOrder: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { sortOrder }: CartDiscountChangeSortOrderAction\n ) => {\n resource.sortOrder = sortOrder\n },\n changeIsActive: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { isActive }: CartDiscountChangeIsActiveAction\n ) => {\n resource.isActive = isActive\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { CartDiscountRepository } from '../repositories/cart-discount'\n\nexport class CartDiscountService extends AbstractService {\n public repository: CartDiscountRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartDiscountRepository(storage)\n }\n\n getBasePath() {\n return 'cart-discounts'\n }\n}\n","import {\n Cart,\n CartAddLineItemAction,\n CartDraft,\n CartRemoveLineItemAction,\n CartSetBillingAddressAction,\n CartSetCountryAction,\n CartSetCustomerEmailAction,\n CartSetCustomFieldAction,\n CartSetCustomTypeAction,\n CartSetLocaleAction,\n CartSetShippingAddressAction,\n GeneralError,\n LineItem,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { v4 as uuidv4 } from 'uuid'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class CartRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart'\n }\n\n create(projectKey: string, draft: CartDraft): Cart {\n const resource: Cart = {\n ...getBaseResourceProperties(),\n cartState: 'Active',\n lineItems: [],\n customLineItems: [],\n totalPrice: {\n type: 'centPrecision',\n centAmount: 0,\n currencyCode: draft.currency,\n fractionDigits: 0,\n },\n taxMode: 'Platform',\n taxRoundingMode: 'HalfEven',\n taxCalculationMode: 'LineItemLevel',\n refusedGifts: [],\n origin: 'Customer',\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n getActiveCart(projectKey: string): Cart | undefined {\n // Get first active cart\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: [`cartState=\"Active\"`],\n })\n if (results.count > 0) {\n return results.results[0] as Cart\n }\n\n return\n }\n\n actions = {\n addLineItem: (\n projectKey: string,\n resource: Writable<Cart>,\n { productId, variantId, sku, quantity = 1 }: CartAddLineItemAction\n ) => {\n let product: Product | null = null\n let variant: ProductVariant | undefined\n\n if (productId && variantId) {\n // Fetch product and variant by ID\n product = this._storage.get(projectKey, 'product', productId, {})\n } else if (sku) {\n // Fetch product and variant by SKU\n const items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${sku}\"))) or masterData(current(variants(sku=\"${sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count === 1) {\n product = items.results[0]\n }\n }\n\n if (!product) {\n // Check if product is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: sku\n ? `A product containing a variant with SKU '${sku}' not found.`\n : `A product with ID '${productId}' not found.`,\n })\n }\n\n // Find matching variant\n variant = [\n product.masterData.current.masterVariant,\n ...product.masterData.current.variants,\n ].find(x => {\n if (sku) return x.sku === sku\n if (variantId) return x.id === variantId\n return false\n })\n\n if (!variant) {\n // Check if variant is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: sku\n ? `A variant with SKU '${sku}' for product '${product.id}' not found.`\n : `A variant with ID '${variantId}' for product '${product.id}' not found.`,\n })\n }\n\n const alreadyAdded = resource.lineItems.some(\n x => x.productId === product?.id && x.variant.id === variant?.id\n )\n if (alreadyAdded) {\n // increase quantity and update total price\n resource.lineItems.map(x => {\n if (x.productId === product?.id && x.variant.id === variant?.id) {\n x.quantity += quantity\n x.totalPrice.centAmount = calculateLineItemTotalPrice(x)\n }\n return x\n })\n } else {\n // add line item\n if (!variant.prices?.length) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product with ID '${productId}' doesn't have any prices.`,\n })\n }\n\n const price = variant.prices[0]\n resource.lineItems.push({\n id: uuidv4(),\n productId: product.id,\n productKey: product.key,\n name: product.masterData.current.name,\n productSlug: product.masterData.current.slug,\n productType: product.productType,\n variant,\n price: price,\n totalPrice: {\n ...price.value,\n centAmount: price.value.centAmount * quantity,\n },\n quantity,\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n priceMode: 'Platform',\n state: [],\n })\n }\n\n // Update cart total price\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\n },\n removeLineItem: (\n projectKey: string,\n resource: Writable<Cart>,\n { lineItemId, quantity }: CartRemoveLineItemAction\n ) => {\n const lineItem = resource.lineItems.find(x => x.id === lineItemId)\n if (!lineItem) {\n // Check if product is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A line item with ID '${lineItemId}' not found.`,\n })\n }\n\n const shouldDelete = !quantity || quantity >= lineItem.quantity\n if (shouldDelete) {\n // delete line item\n resource.lineItems = resource.lineItems.filter(x => x.id !== lineItemId)\n } else {\n // decrease quantity and update total price\n resource.lineItems.map(x => {\n if (x.id === lineItemId && quantity) {\n x.quantity -= quantity\n x.totalPrice.centAmount = calculateLineItemTotalPrice(x)\n }\n return x\n })\n }\n\n // Update cart total price\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Cart>,\n { address }: CartSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCountry: (\n projectKey: string,\n resource: Writable<Cart>,\n { country }: CartSetCountryAction\n ) => {\n resource.country = country\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Cart>,\n { email }: CartSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Cart,\n { name, value }: CartSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Cart>,\n { type, fields }: CartSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Cart>,\n { locale }: CartSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Cart>,\n { address }: CartSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n }\n}\n\nconst calculateLineItemTotalPrice = (lineItem: LineItem): number =>\n lineItem.price!.value.centAmount * lineItem.quantity\n\nconst calculateCartTotalPrice = (cart: Cart): number =>\n cart.lineItems.reduce((cur, item) => cur + item.totalPrice.centAmount, 0)\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CartRepository } from '../repositories/cart'\nimport { AbstractStorage } from '../storage'\n\nexport class CartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'carts'\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n Category,\n CategoryChangeAssetNameAction,\n CategoryChangeSlugAction,\n CategoryDraft,\n CategorySetAssetDescriptionAction,\n CategorySetAssetSourcesAction,\n CategorySetDescriptionAction,\n CategorySetKeyAction,\n CategorySetMetaDescriptionAction,\n CategorySetMetaKeywordsAction,\n CategorySetMetaTitleAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { createCustomFields } from './helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CategoryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'category'\n }\n\n create(projectKey: string, draft: CategoryDraft): Category {\n const resource: Category = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n slug: draft.slug,\n orderHint: draft.orderHint || '',\n parent: draft.parent\n ? { typeId: 'category', id: draft.parent.id! }\n : undefined,\n ancestors: [], // TODO\n assets:\n draft.assets?.map(d => {\n return {\n id: uuidv4(),\n name: d.name,\n description: d.description,\n sources: d.sources,\n tags: d.tags,\n key: d.key,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n }) || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeAssetName: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, name }: CategoryChangeAssetNameAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.name = name\n }\n if (assetKey && assetKey == asset.key) {\n asset.name = name\n }\n })\n },\n changeSlug: (\n projectKey: string,\n resource: Writable<Category>,\n { slug }: CategoryChangeSlugAction\n ) => {\n resource.slug = slug\n },\n setKey: (\n projectKey: string,\n resource: Writable<Category>,\n { key }: CategorySetKeyAction\n ) => {\n resource.key = key\n },\n setAssetDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, description }: CategorySetAssetDescriptionAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.description = description\n }\n if (assetKey && assetKey == asset.key) {\n asset.description = description\n }\n })\n },\n setAssetSources: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, sources }: CategorySetAssetSourcesAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.sources = sources\n }\n if (assetKey && assetKey == asset.key) {\n asset.sources = sources\n }\n })\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { description }: CategorySetDescriptionAction\n ) => {\n resource.description = description\n },\n setMetaDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { metaDescription }: CategorySetMetaDescriptionAction\n ) => {\n resource.metaDescription = metaDescription\n },\n setMetaKeywords: (\n projectKey: string,\n resource: Writable<Category>,\n { metaKeywords }: CategorySetMetaKeywordsAction\n ) => {\n resource.metaKeywords = metaKeywords\n },\n setMetaTitle: (\n projectKey: string,\n resource: Writable<Category>,\n { metaTitle }: CategorySetMetaTitleAction\n ) => {\n resource.metaTitle = metaTitle\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CategoryRepository } from '../repositories/category'\n\nexport class CategoryServices extends AbstractService {\n public repository: CategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CategoryRepository(storage)\n }\n\n getBasePath() {\n return 'categories'\n }\n}\n","import {\n Channel,\n ChannelDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ChannelRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'channel'\n }\n\n create(projectKey: string, draft: ChannelDraft): Channel {\n const resource: Channel = {\n ...getBaseResourceProperties(),\n key: draft.key,\n roles: draft.roles || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { ChannelRepository } from '../repositories/channel'\nimport { AbstractStorage } from '../storage'\n\nexport class ChannelService extends AbstractService {\n public repository: ChannelRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ChannelRepository(storage)\n }\n\n getBasePath() {\n return 'channels'\n }\n}\n","import {\n CustomerGroup,\n CustomerGroupChangeNameAction,\n CustomerGroupDraft,\n CustomerGroupSetKeyAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CustomerGroupRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerGroupDraft): CustomerGroup {\n const resource: CustomerGroup = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.groupName,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n setKey: (\n projectKey: string,\n resource: Writable<CustomerGroup>,\n { key }: CustomerGroupSetKeyAction\n ) => {\n resource.key = key\n },\n changeName: (\n projectKey: string,\n resource: Writable<CustomerGroup>,\n { name }: CustomerGroupChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerGroupRepository } from '../repositories/customer-group'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerGroupService extends AbstractService {\n public repository: CustomerGroupRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerGroupRepository(storage)\n }\n\n getBasePath() {\n return 'customer-groups'\n }\n}\n","import {\n Customer,\n CustomerDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CustomerRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerDraft): Customer {\n const resource: Customer = {\n ...getBaseResourceProperties(),\n email: draft.email,\n password: draft.password,\n isEmailVerified: draft.isEmailVerified || false,\n addresses: [],\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerRepository } from '../repositories/customer'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerService extends AbstractService {\n public repository: CustomerRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerRepository(storage)\n }\n\n getBasePath() {\n return 'customers'\n }\n}\n","import {\n CustomObject,\n CustomObjectDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { checkConcurrentModification } from './errors'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\n\nexport class CustomObjectRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'key-value-document'\n }\n\n create(projectKey: string, draft: Writable<CustomObjectDraft>): CustomObject {\n const current = this.getWithContainerAndKey(\n projectKey,\n draft.container,\n draft.key\n )\n\n const baseProperties = getBaseResourceProperties()\n if (current) {\n baseProperties.id = current.id\n\n if (!draft.version) {\n draft.version = current.version\n }\n\n checkConcurrentModification(current, draft.version)\n if (draft.value === current.value) {\n return current\n }\n\n baseProperties.version = current.version\n } else {\n if (draft.version) {\n baseProperties.version = draft.version\n }\n }\n\n const resource: CustomObject = {\n ...baseProperties,\n container: draft.container,\n key: draft.key,\n value: draft.value,\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n getWithContainerAndKey(projectKey: string, container: string, key: string) {\n const items = this._storage.all(projectKey, this.getTypeId()) as Array<\n CustomObject\n >\n return items.find(item => item.container === container && item.key === key)\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { CustomObjectRepository } from '../repositories/custom-object'\nimport { AbstractStorage } from '../storage'\nimport { CustomObjectDraft } from '@commercetools/platform-sdk'\n\nexport class CustomObjectService extends AbstractService {\n public repository: CustomObjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomObjectRepository(storage)\n }\n\n getBasePath() {\n return 'custom-objects'\n }\n\n extraRoutes(router: Router) {\n router.get('/:container/:key', this.getWithContainerAndKey.bind(this))\n router.post('/:container/:key', this.createWithContainerAndKey.bind(this))\n router.delete('/:container/:key', this.deleteWithContainerAndKey.bind(this))\n }\n\n getWithContainerAndKey(request: Request, response: Response) {\n const result = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!result) {\n return response.status(404).send('Not Found')\n }\n return response.status(200).send(result)\n }\n\n createWithContainerAndKey(request: Request, response: Response) {\n const draft: CustomObjectDraft = {\n ...request.body,\n key: request.params.key,\n container: request.params.container,\n }\n\n const result = this.repository.create(request.params.projectKey, draft)\n return response.status(200).send(result)\n }\n\n deleteWithContainerAndKey(request: Request, response: Response) {\n const current = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!current) {\n return response.status(404).send('Not Found')\n }\n\n const result = this.repository.delete(request.params.projectKey, current.id)\n\n return response.status(200).send(result)\n }\n}\n","import {\n CartDiscountReference,\n DiscountCode,\n DiscountCodeChangeCartDiscountsAction,\n DiscountCodeChangeIsActiveAction,\n DiscountCodeDraft,\n DiscountCodeSetCartPredicateAction,\n DiscountCodeSetDescriptionAction,\n DiscountCodeSetMaxApplicationsAction,\n DiscountCodeSetMaxApplicationsPerCustomerAction,\n DiscountCodeSetNameAction,\n DiscountCodeSetValidFromAction,\n DiscountCodeSetValidFromAndUntilAction,\n DiscountCodeSetValidUntilAction,\n DiscountCodeUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class DiscountCodeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart-discount'\n }\n\n create(projectKey: string, draft: DiscountCodeDraft): DiscountCode {\n console.log(draft)\n const resource: DiscountCode = {\n ...getBaseResourceProperties(),\n applicationVersion: 1,\n cartDiscounts: draft.cartDiscounts.map(\n (obj): CartDiscountReference => ({\n typeId: 'cart-discount',\n id: obj.id!,\n })\n ),\n cartPredicate: draft.cartPredicate,\n code: draft.code,\n description: draft.description,\n groups: draft.groups || [],\n isActive: draft.isActive || true,\n name: draft.name,\n references: [],\n validFrom: draft.validFrom,\n validUntil: draft.validUntil,\n maxApplications: draft.maxApplications,\n maxApplicationsPerCustomer: draft.maxApplicationsPerCustomer,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n DiscountCodeUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<DiscountCode>,\n action: any\n ) => void\n >\n > = {\n changeIsActive: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { isActive }: DiscountCodeChangeIsActiveAction\n ) => {\n resource.isActive = isActive\n },\n changeCartDiscounts: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { cartDiscounts }: DiscountCodeChangeCartDiscountsAction\n ) => {\n resource.cartDiscounts = cartDiscounts.map(\n (obj): CartDiscountReference => ({\n typeId: 'cart-discount',\n id: obj.id!,\n })\n )\n },\n setDescription: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { description }: DiscountCodeSetDescriptionAction\n ) => {\n resource.description = description\n },\n setCartPredicate: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { cartPredicate }: DiscountCodeSetCartPredicateAction\n ) => {\n resource.cartPredicate = cartPredicate\n },\n setName: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { name }: DiscountCodeSetNameAction\n ) => {\n resource.name = name\n },\n setMaxApplications: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { maxApplications }: DiscountCodeSetMaxApplicationsAction\n ) => {\n resource.maxApplications = maxApplications\n },\n setMaxApplicationsPerCustomer: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n {\n maxApplicationsPerCustomer,\n }: DiscountCodeSetMaxApplicationsPerCustomerAction\n ) => {\n resource.maxApplicationsPerCustomer = maxApplicationsPerCustomer\n },\n setValidFrom: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validFrom }: DiscountCodeSetValidFromAction\n ) => {\n resource.validFrom = validFrom\n },\n setValidUntil: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validUntil }: DiscountCodeSetValidUntilAction\n ) => {\n resource.validUntil = validUntil\n },\n setValidFromAndUntil: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validFrom, validUntil }: DiscountCodeSetValidFromAndUntilAction\n ) => {\n resource.validFrom = validFrom\n resource.validUntil = validUntil\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { DiscountCodeRepository } from '../repositories/discount-code'\n\nexport class DiscountCodeService extends AbstractService {\n public repository: DiscountCodeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new DiscountCodeRepository(storage)\n }\n\n getBasePath() {\n return 'discount-codes'\n }\n}\n","import {\n Extension,\n ExtensionChangeDestinationAction,\n ExtensionChangeTriggersAction,\n ExtensionDraft,\n ExtensionSetKeyAction,\n ExtensionSetTimeoutInMsAction,\n ExtensionUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ExtensionRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'extension'\n }\n\n create(projectKey: string, draft: ExtensionDraft): Extension {\n const resource: Extension = {\n ...getBaseResourceProperties(),\n key: draft.key,\n timeoutInMs: draft.timeoutInMs,\n destination: draft.destination,\n triggers: draft.triggers,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Record<\n ExtensionUpdateAction['action'],\n (projectKey: string, resource: Writable<Extension>, action: any) => void\n > = {\n setKey: (\n projectKey: string,\n resource: Writable<Extension>,\n { key }: ExtensionSetKeyAction\n ) => {\n resource.key = key\n },\n setTimeoutInMs: (\n projectKey: string,\n resource: Writable<Extension>,\n { timeoutInMs }: ExtensionSetTimeoutInMsAction\n ) => {\n resource.timeoutInMs = timeoutInMs\n },\n changeTriggers: (\n projectKey: string,\n resource: Writable<Extension>,\n { triggers }: ExtensionChangeTriggersAction\n ) => {\n resource.triggers = triggers\n },\n changeDestination: (\n projectKey: string,\n resource: Writable<Extension>,\n { destination }: ExtensionChangeDestinationAction\n ) => {\n resource.destination = destination\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ExtensionRepository } from '../repositories/extension'\n\nexport class ExtensionServices extends AbstractService {\n public repository: ExtensionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ExtensionRepository(storage)\n }\n\n getBasePath() {\n return 'extensions'\n }\n}\n","import {\n InventoryEntry,\n InventoryEntryChangeQuantityAction,\n InventoryEntryDraft,\n InventoryEntrySetCustomFieldAction,\n InventoryEntrySetCustomTypeAction,\n InventoryEntrySetExpectedDeliveryAction,\n InventoryEntrySetRestockableInDaysAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\n\nexport class InventoryEntryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'inventory-entry'\n }\n\n create(projectKey: string, draft: InventoryEntryDraft): InventoryEntry {\n const resource: InventoryEntry = {\n ...getBaseResourceProperties(),\n sku: draft.sku,\n quantityOnStock: draft.quantityOnStock,\n availableQuantity: draft.quantityOnStock,\n expectedDelivery: draft.expectedDelivery,\n restockableInDays: draft.restockableInDays,\n supplyChannel: {\n ...draft.supplyChannel,\n typeId: 'channel',\n id: draft.supplyChannel?.id ?? '',\n },\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeQuantity: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { quantity }: InventoryEntryChangeQuantityAction\n ) => {\n resource.quantityOnStock = quantity\n // don't know active reservations so just set to same value\n resource.availableQuantity = quantity\n },\n setExpectedDelivery: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { expectedDelivery }: InventoryEntrySetExpectedDeliveryAction\n ) => {\n resource.expectedDelivery = new Date(expectedDelivery!).toISOString()\n },\n setCustomField: (\n projectKey: string,\n resource: InventoryEntry,\n { name, value }: InventoryEntrySetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { type, fields }: InventoryEntrySetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setRestockableInDays: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { restockableInDays }: InventoryEntrySetRestockableInDaysAction\n ) => {\n resource.restockableInDays = restockableInDays\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { InventoryEntryRepository } from '../repositories/inventory-entry'\n\nexport class InventoryEntryService extends AbstractService {\n public repository: InventoryEntryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new InventoryEntryRepository(storage)\n }\n\n getBasePath() {\n return 'inventory'\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CartRepository } from '../repositories/cart'\n\nexport class MyCartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'me'\n }\n\n registerRoutes(parent: Router) {\n // Overwrite this function to be able to handle /me/active-cart path.\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n this.extraRoutes(router)\n\n router.get('/active-cart', this.activeCart.bind(this))\n router.get('/carts/', this.get.bind(this))\n router.get('/carts/:id', this.getWithId.bind(this))\n\n router.delete('/carts/:id', this.deletewithId.bind(this))\n\n router.post('/carts/', this.post.bind(this))\n router.post('/carts/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n activeCart(request: Request, response: Response) {\n const resource = this.repository.getActiveCart(request.params.projectKey)\n if (!resource) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(resource)\n }\n}\n","import {\n Payment,\n PaymentAddTransactionAction,\n PaymentDraft,\n PaymentSetCustomFieldAction,\n PaymentSetCustomTypeAction,\n ReferenceTypeId,\n StateReference,\n TransactionDraft,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport { getBaseResourceProperties } from '../helpers'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from '../types'\n\nexport class PaymentRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'payment'\n }\n\n create(projectKey: string, draft: PaymentDraft): Payment {\n const resource: Payment = {\n ...getBaseResourceProperties(),\n amountPlanned: createTypedMoney(draft.amountPlanned),\n paymentMethodInfo: draft.paymentMethodInfo!,\n paymentStatus: draft.paymentStatus\n ? {\n ...draft.paymentStatus,\n state: draft.paymentStatus.state\n ? getReferenceFromResourceIdentifier<StateReference>(\n draft.paymentStatus.state,\n projectKey,\n this._storage\n )\n : undefined,\n }\n : {},\n transactions: (draft.transactions || []).map(t =>\n this.transactionFromTransactionDraft(t, projectKey)\n ),\n interfaceInteractions: (draft.interfaceInteractions || []).map(\n interaction =>\n createCustomFields(interaction, projectKey, this._storage)!\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n transactionFromTransactionDraft = (\n draft: TransactionDraft,\n projectKey: string\n ) => ({\n ...draft,\n id: uuidv4(),\n amount: createTypedMoney(draft.amount),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n })\n\n actions = {\n setCustomField: (\n projectKey: string,\n resource: Payment,\n { name, value }: PaymentSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Payment>,\n { type, fields }: PaymentSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n addTransaction: (\n projectKey: string,\n resource: Writable<Payment>,\n { transaction }: PaymentAddTransactionAction\n ) => {\n resource.transactions = [\n ...resource.transactions,\n this.transactionFromTransactionDraft(transaction, projectKey),\n ]\n },\n // addInterfaceInteraction: () => {},\n // changeAmountPlanned: () => {},\n // changeTransactionInteractionId: () => {},\n // changeTransactionState: () => {},\n // changeTransactionTimestamp: () => {},\n // setAmountPaid: () => {},\n // setAmountRefunded: () => {},\n // setAnonymousId: () => {},\n // setAuthorization: () => {},\n // setCustomer: () => {},\n // setExternalId: () => {},\n // setInterfaceId: () => {},\n // setKey: () => {},\n // setMethodInfoInterface: () => {},\n // setMethodInfoMethod: () => {},\n // setMethodInfoName: () => {},\n // setStatusInterfaceCode: () => {},\n // setStatusInterfaceText: () => {},\n // transitionState: () => {},\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class MyPaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'me/payments'\n }\n}\n","import assert from 'assert'\nimport {\n Cart,\n CustomLineItem,\n CustomLineItemDraft,\n GeneralError,\n LineItem,\n LineItemImportDraft,\n Order,\n OrderAddPaymentAction,\n OrderChangeOrderStateAction,\n OrderChangePaymentStateAction,\n OrderFromCartDraft,\n OrderImportDraft,\n OrderSetBillingAddressAction,\n OrderSetCustomerEmailAction,\n OrderSetCustomFieldAction,\n OrderSetCustomTypeAction,\n OrderSetLocaleAction,\n OrderSetOrderNumberAction,\n OrderSetShippingAddressAction,\n OrderSetStoreAction,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n Store,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository, QueryParams } from './abstract'\nimport {\n createCustomFields,\n createPrice,\n createTypedMoney,\n resolveStoreReference,\n} from './helpers'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class OrderRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'order'\n }\n\n create(projectKey: string, draft: OrderFromCartDraft): Order {\n assert(draft.cart, 'draft.cart is missing')\n\n const cart = this._storage.getByResourceIdentifier(\n projectKey,\n draft.cart\n ) as Cart | null\n if (!cart) {\n throw new Error('Cannot find cart')\n }\n\n const resource: Order = {\n ...getBaseResourceProperties(),\n orderNumber: draft.orderNumber,\n orderState: 'Open',\n lineItems: [],\n customLineItems: [],\n totalPrice: cart.totalPrice,\n refusedGifts: [],\n origin: 'Customer',\n syncInfo: [],\n lastMessageSequenceNumber: 0,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n import(projectKey: string, draft: OrderImportDraft): Order {\n // TODO: Check if order with given orderNumber already exists\n assert(this, 'OrderRepository not valid')\n const resource: Order = {\n ...getBaseResourceProperties(),\n\n billingAddress: draft.billingAddress,\n shippingAddress: draft.shippingAddress,\n\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n customerEmail: draft.customerEmail,\n lastMessageSequenceNumber: 0,\n orderNumber: draft.orderNumber,\n orderState: draft.orderState || 'Open',\n origin: draft.origin || 'Customer',\n paymentState: draft.paymentState,\n refusedGifts: [],\n store: resolveStoreReference(draft.store, projectKey, this._storage),\n syncInfo: [],\n\n lineItems:\n draft.lineItems?.map(item =>\n this.lineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n customLineItems:\n draft.customLineItems?.map(item =>\n this.customLineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n\n totalPrice: {\n type: 'centPrecision',\n ...draft.totalPrice,\n fractionDigits: 2,\n },\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private lineItemFromImportDraft(\n projectKey: string,\n draft: LineItemImportDraft\n ): LineItem {\n let product: Product\n let variant: ProductVariant | undefined\n\n if (draft.variant.sku) {\n variant = {\n id: 0,\n sku: draft.variant.sku,\n }\n\n var items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${draft.variant.sku}\"))) or masterData(current(variants(sku=\"${draft.variant.sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count !== 1) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product containing a variant with SKU '${draft.variant.sku}' not found.`,\n })\n }\n\n product = items.results[0]\n if (product.masterData.current.masterVariant.sku === draft.variant.sku) {\n variant = product.masterData.current.masterVariant\n } else {\n variant = product.masterData.current.variants.find(\n v => v.sku === draft.variant.sku\n )\n }\n if (!variant) {\n throw new Error('Internal state error')\n }\n } else {\n throw new Error('No product found')\n }\n\n const lineItem: LineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n name: draft.name,\n price: createPrice(draft.price),\n priceMode: 'Platform',\n productId: product.id,\n productType: product.productType,\n quantity: draft.quantity,\n state: draft.state || [],\n taxRate: draft.taxRate,\n totalPrice: createTypedMoney(draft.price.value),\n variant: {\n id: variant.id,\n sku: variant.sku,\n price: createPrice(draft.price),\n },\n }\n\n return lineItem\n }\n\n private customLineItemFromImportDraft(\n projectKey: string,\n draft: CustomLineItemDraft\n ): CustomLineItem {\n const lineItem: CustomLineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n money: createTypedMoney(draft.money),\n name: draft.name,\n quantity: draft.quantity,\n slug: draft.slug,\n state: [],\n totalPrice: createTypedMoney(draft.money),\n }\n\n return lineItem\n }\n\n getWithOrderNumber(\n projectKey: string,\n orderNumber: string,\n params: QueryParams = {}\n ): Order | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n ...params,\n where: [`orderNumber=\"${orderNumber}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as Order\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate order numbers')\n }\n\n return\n }\n\n actions = {\n addPayment: (\n projectKey: string,\n resource: Writable<Order>,\n { payment }: OrderAddPaymentAction\n ) => {\n const resolvedPayment = this._storage.getByResourceIdentifier(\n projectKey,\n payment\n )\n if (!resolvedPayment) {\n throw new Error(`Payment ${payment.id} not found`)\n }\n\n if (!resource.paymentInfo) {\n resource.paymentInfo = {\n payments: [],\n }\n }\n\n resource.paymentInfo.payments.push({\n typeId: 'payment',\n id: payment.id!,\n })\n },\n changeOrderState: (\n projectKey: string,\n resource: Writable<Order>,\n { orderState }: OrderChangeOrderStateAction\n ) => {\n resource.orderState = orderState\n },\n changePaymentState: (\n projectKey: string,\n resource: Writable<Order>,\n { paymentState }: OrderChangePaymentStateAction\n ) => {\n resource.paymentState = paymentState\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Order>,\n { email }: OrderSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Order,\n { name, value }: OrderSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Order>,\n { type, fields }: OrderSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Order>,\n { locale }: OrderSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setOrderNumber: (\n projectKey: string,\n resource: Writable<Order>,\n { orderNumber }: OrderSetOrderNumberAction\n ) => {\n resource.orderNumber = orderNumber\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n setStore: (\n projectKey: string,\n resource: Writable<Order>,\n { store }: OrderSetStoreAction\n ) => {\n if (!store) return\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n store\n )\n if (!resolvedType) {\n throw new Error(`No store found with key=${store.key}`)\n }\n\n const storeReference = resolvedType as Store\n resource.store = {\n typeId: 'store',\n key: storeReference.key,\n }\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { OrderRepository } from '../repositories/order'\nimport { AbstractStorage } from '../storage'\n\nexport class OrderService extends AbstractService {\n public repository: OrderRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new OrderRepository(storage)\n }\n\n getBasePath() {\n return 'orders'\n }\n\n extraRoutes(router: Router) {\n router.post('/import', this.import.bind(this))\n router.get('/order-number=:orderNumber', this.getWithOrderNumber.bind(this))\n }\n\n import(request: Request, response: Response) {\n const importDraft = request.body\n const resource = this.repository.import(\n request.params.projectKey,\n importDraft\n )\n return response.status(200).send(resource)\n }\n\n getWithOrderNumber(request: Request, response: Response) {\n const resource = this.repository.getWithOrderNumber(\n request.params.projectKey,\n request.params.orderNumber,\n request.query\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class PaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'payments'\n }\n}\n","export const parseFilterExpression = (filter: string | string[]) => {\n if (typeof filter === 'object') {\n const filters = filter.map(parse)\n return filters.join(' and ')\n }\n return parse(filter)\n}\n\nconst parse = (filter: string) => {\n let parsed = filter.replace(/:/g, '=')\n\n do {\n parsed = parsed.replace(/(.*)\\.(.*)=(.*)$/g, '$1($2=$3)')\n } while (parsed.includes('.'))\n\n return parsed\n}\n","import { ParsedQs } from 'qs'\nimport {\n ProductDraft,\n ProductProjection,\n ProductVariant,\n ProductVariantDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { RepositoryTypes } from '../types'\nimport { parseFilterExpression } from '../lib/filterParser'\n\nexport class ProductProjectionRepository extends AbstractResourceRepository {\n getTypeId(): RepositoryTypes {\n return 'product-projection'\n }\n\n create(projectKey: string, draft: ProductDraft): ProductProjection {\n if (!draft.masterVariant) {\n throw new Error(\n `must provider mastervariant for product projection with key ${draft.key}`\n )\n }\n\n if (!draft.productType.id) {\n throw new Error(\n `must provider product type id for product projection with key ${draft.key}`\n )\n }\n\n const resource: ProductProjection = {\n ...getBaseResourceProperties(),\n name: draft.name,\n slug: draft.slug,\n categories: [],\n productType: { ...draft.productType, id: draft.productType.id! },\n masterVariant: variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants?.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }) ?? [],\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n search(projectKey: string, query: ParsedQs) {\n const filter = (query['filter.query'] ?? query.filter) as any\n const wherePredicate = filter ? parseFilterExpression(filter) : undefined\n\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: wherePredicate,\n }) //TODO: this is a partial implementation, but I don't really have the time to implement an actual search API right now\n\n return results\n }\n\n actions = {}\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n }\n}\n","import { ProductProjectionRepository } from './../repositories/product-projection'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class ProductProjectionService extends AbstractService {\n public repository: ProductProjectionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductProjectionRepository(storage)\n }\n\n getBasePath() {\n return 'product-projections'\n }\n\n extraRoutes(router: Router) {\n router.get('/search', this.search.bind(this))\n }\n\n search(request: Request, response: Response) {\n const resource = this.repository.search(\n request.params.projectKey,\n request.query\n )\n return response.status(200).send(resource)\n }\n}\n","import {\n Price,\n Product,\n ProductData,\n ProductDraft,\n ProductPublishAction,\n ProductSetAttributeAction,\n ProductVariant,\n ProductVariantDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from '../types'\n\nexport class ProductRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'product'\n }\n\n create(projectKey: string, draft: ProductDraft): Product {\n const productData = {\n name: draft.name,\n slug: draft.slug,\n categories: [],\n masterVariant:\n draft.masterVariant && variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants &&\n draft.variants.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }),\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n const resource: Product = {\n ...getBaseResourceProperties(),\n masterData: {\n // @ts-ignore\n current: draft.publish ? productData : undefined,\n // @ts-ignore\n staged: draft.publish ? undefined : productData,\n hasStagedChanges: draft.publish ?? true,\n published: draft.publish ?? false,\n },\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n actions = {\n publish: (\n projectKey: string,\n resource: Writable<Product>,\n { scope }: ProductPublishAction\n ) => {\n if (resource.masterData.staged) {\n resource.masterData.current = resource.masterData.staged\n // @ts-ignore\n resource.masterData.staged = undefined\n }\n resource.masterData.hasStagedChanges = false\n resource.masterData.published = true\n },\n setAttribute: (\n projectKey: string,\n resource: Writable<Product>,\n { variantId, sku, name, value, staged }: ProductSetAttributeAction\n ) => {\n const isStaged = staged !== undefined ? staged : false\n const productData = getProductData(resource, isStaged)\n const { variant, isMasterVariant, variantIndex } = getVariant(\n productData,\n variantId,\n sku\n )\n if (!variant) {\n throw new Error(\n `Variant with id ${variantId} or sku ${sku} not found on product ${resource.id}`\n )\n }\n\n if (!variant.attributes) {\n variant.attributes = []\n }\n\n const existingAttr = variant.attributes.find(attr => attr.name === name)\n if (existingAttr) {\n existingAttr.value = value\n } else {\n variant.attributes.push({\n name,\n value,\n })\n }\n if (isStaged) {\n resource.masterData.staged = productData\n if (isMasterVariant) {\n resource.masterData.staged.masterVariant = variant\n } else {\n resource.masterData.staged.variants[variantIndex] = variant\n }\n resource.masterData.hasStagedChanges = true\n } else {\n resource.masterData.current = productData\n if (isMasterVariant) {\n resource.masterData.current.masterVariant = variant\n } else {\n resource.masterData.current.variants[variantIndex] = variant\n }\n }\n },\n // 'setKey': () => {},\n // 'changeName': () => {},\n // 'setDescription': () => {},\n // 'changeSlug': () => {},\n // 'addVariant': () => {},\n // 'removeVariant': () => {},\n // 'changeMasterVariant': () => {},\n // 'addPrice': () => {},\n // 'setPrices': () => {},\n // 'changePrice': () => {},\n // 'removePrice': () => {},\n // 'setProductPriceCustomType': () => {},\n // 'setProductPriceCustomField': () => {},\n // 'setDiscountedPrice': () => {},\n // 'setAttributeInAllVariants': () => {},\n // 'addToCategory': () => {},\n // 'setCategoryOrderHint': () => {},\n // 'removeFromCategory': () => {},\n // 'setTaxCategory': () => {},\n // 'setSku': () => {},\n // 'setProductVariantKey': () => {},\n // 'addExternalImage': () => {},\n // 'moveImageToPosition': () => {},\n // 'removeImage': () => {},\n // 'setImageLabel': () => {},\n // 'addAsset': () => {},\n // 'removeAsset': () => {},\n // 'setAssetKey': () => {},\n // 'changeAssetOrder': () => {},\n // 'changeAssetName': () => {},\n // 'setAssetDescription': () => {},\n // 'setAssetTags': () => {},\n // 'setAssetSources': () => {},\n // 'setAssetCustomType': () => {},\n // 'setAssetCustomField': () => {},\n // 'setSearchKeywords': () => {},\n // 'setMetaTitle': () => {},\n // 'setMetaDescription': () => {},\n // 'setMetaKeywords': () => {},\n // 'revertStagedChanges': () => {},\n // 'revertStagedVariantChanges': () => {},\n // 'unpublish': () => {},\n // 'transitionState': () => {},\n }\n}\n\nconst getProductData = (product: Product, staged: boolean) => {\n if (!staged && product.masterData.current) {\n return product.masterData.current\n }\n return product.masterData.staged\n}\n\ninterface VariantResult {\n variant: Writable<ProductVariant> | undefined\n isMasterVariant: boolean\n variantIndex: number\n}\n\nconst getVariant = (\n productData: ProductData,\n variantId?: number,\n sku?: string\n): VariantResult => {\n const variants = [productData.masterVariant, ...productData.variants]\n const foundVariant = variants.find((variant: ProductVariant) => {\n if (variantId) {\n return variant.id === variantId\n }\n if (sku) {\n return variant.sku === sku\n }\n return false\n })\n\n const isMasterVariant = foundVariant === productData.masterVariant\n return {\n variant: foundVariant,\n isMasterVariant,\n variantIndex:\n !isMasterVariant && foundVariant\n ? productData.variants.indexOf(foundVariant)\n : -1,\n }\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n prices: variant?.prices as Price[],\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProductRepository } from '../repositories/product'\n\nexport class ProductService extends AbstractService {\n public repository: ProductRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductRepository(storage)\n }\n\n getBasePath() {\n return 'products'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport {\n AttributeDefinition,\n AttributeDefinitionDraft,\n AttributeType,\n ProductType,\n ProductTypeChangeLabelAction,\n ProductTypeChangeLocalizedEnumValueLabelAction,\n ProductTypeDraft,\n ProductTypeUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\n\nexport class ProductTypeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'product-type'\n }\n\n create(projectKey: string, draft: ProductTypeDraft): ProductType {\n const resource: ProductType = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n description: draft.description,\n attributes: (draft.attributes ?? []).map(a =>\n this.attributeDefinitionFromAttributeDefinitionDraft(projectKey, a)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n attributeDefinitionFromAttributeDefinitionDraft = (\n _projectKey: string,\n draft: AttributeDefinitionDraft\n ): AttributeDefinition => ({\n ...draft,\n attributeConstraint: draft.attributeConstraint ?? 'None',\n inputHint: draft.inputHint ?? 'SingleLine',\n isSearchable: draft.isSearchable ?? true,\n })\n\n getWithKey(projectKey: string, key: string): ProductType | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as ProductType\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate product type key')\n }\n\n return\n }\n\n actions: Partial<\n Record<\n ProductTypeUpdateAction['action'],\n (projectKey: string, resource: Writable<ProductType>, action: any) => void\n >\n > = {\n changeLocalizedEnumValueLabel: (\n projectKey: string,\n resource: Writable<ProductType>,\n {\n attributeName,\n newValue,\n }: ProductTypeChangeLocalizedEnumValueLabelAction\n ) => {\n const updateAttributeType = (type: Writable<AttributeType>) => {\n switch (type.name) {\n case 'lenum':\n type.values.forEach(v => {\n if (v.key == newValue.key) {\n v.label = newValue.label\n }\n })\n return\n case 'set':\n updateAttributeType(type.elementType)\n return\n }\n }\n\n resource.attributes?.forEach(value => {\n if (value.name == attributeName) {\n updateAttributeType(value.type)\n }\n })\n },\n changeLabel: (\n projectKey: string,\n resource: Writable<ProductType>,\n { attributeName, label }: ProductTypeChangeLabelAction\n ) => {\n resource.attributes?.forEach(value => {\n if (value.name == attributeName) {\n value.label = label\n }\n })\n },\n }\n}\n","import { ProductTypeRepository } from '../repositories/product-type'\nimport AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ProductTypeService extends AbstractService {\n public repository: ProductTypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductTypeRepository(storage)\n }\n\n getBasePath() {\n return 'product-types'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import { json } from 'express'\n\nexport const maskSecretValue = <T>(resource: T, path: string): T => {\n const parts = path.split('.')\n const clone = JSON.parse(JSON.stringify(resource))\n let val = clone\n\n const target = parts.pop()\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n val = val[part]\n\n if (val == undefined) {\n return resource\n }\n }\n\n if (val && target && val[target]) {\n val[target] = '****'\n }\n return clone\n}\n","import {\n Project,\n ProjectChangeCartsConfigurationAction,\n ProjectChangeCountriesAction,\n ProjectChangeCountryTaxRateFallbackEnabledAction,\n ProjectChangeCurrenciesAction,\n ProjectChangeLanguagesAction,\n ProjectChangeMessagesEnabledAction,\n ProjectChangeNameAction,\n ProjectChangeOrderSearchStatusAction,\n ProjectChangeProductSearchIndexingEnabledAction,\n ProjectSetExternalOAuthAction,\n ProjectSetShippingRateInputTypeAction,\n ProjectUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { InvalidOperationError } from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\nimport { AbstractRepository } from './abstract'\nimport { maskSecretValue } from '../lib/masking'\n\nexport class ProjectRepository extends AbstractRepository {\n get(projectKey: string): Project | null {\n const data = this._storage.getProject(projectKey)\n const resource = this._storage.getProject(projectKey)\n const masked = maskSecretValue<Project>(\n resource,\n 'externalOAuth.authorizationHeader'\n )\n return masked\n }\n\n save(projectKey: string, resource: Project) {\n const current = this.get(projectKey)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.saveProject(resource)\n }\n\n actions: Partial<\n Record<\n ProjectUpdateAction['action'],\n (projectKey: string, resource: Writable<Project>, action: any) => void\n >\n > = {\n changeName: (\n projectKey: string,\n resource: Writable<Project>,\n { name }: ProjectChangeNameAction\n ) => {\n resource.name = name\n },\n changeCurrencies: (\n projectKey: string,\n resource: Writable<Project>,\n { currencies }: ProjectChangeCurrenciesAction\n ) => {\n resource.currencies = currencies\n },\n changeCountries: (\n projectKey: string,\n resource: Writable<Project>,\n { countries }: ProjectChangeCountriesAction\n ) => {\n resource.countries = countries\n },\n changeLanguages: (\n projectKey: string,\n resource: Writable<Project>,\n { languages }: ProjectChangeLanguagesAction\n ) => {\n resource.languages = languages\n },\n changeMessagesEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n { messagesEnabled }: ProjectChangeMessagesEnabledAction\n ) => {\n resource.messages.enabled = messagesEnabled\n },\n changeProductSearchIndexingEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n { enabled }: ProjectChangeProductSearchIndexingEnabledAction\n ) => {\n if (!resource.searchIndexing?.products) {\n throw new Error('Invalid project state')\n }\n resource.searchIndexing.products.status = enabled\n ? 'Activated'\n : 'Deactivated'\n resource.searchIndexing.products.lastModifiedAt = new Date().toISOString()\n },\n changeOrderSearchStatus: (\n projectKey: string,\n resource: Writable<Project>,\n { status }: ProjectChangeOrderSearchStatusAction\n ) => {\n if (!resource.searchIndexing?.orders) {\n throw new Error('Invalid project state')\n }\n resource.searchIndexing.orders.status = status\n resource.searchIndexing.orders.lastModifiedAt = new Date().toISOString()\n },\n setShippingRateInputType: (\n projectKey: string,\n resource: Writable<Project>,\n { shippingRateInputType }: ProjectSetShippingRateInputTypeAction\n ) => {\n resource.shippingRateInputType = shippingRateInputType\n },\n setExternalOAuth: (\n projectKey: string,\n resource: Writable<Project>,\n { externalOAuth }: ProjectSetExternalOAuthAction\n ) => {\n resource.externalOAuth = externalOAuth\n },\n changeCountryTaxRateFallbackEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n {\n countryTaxRateFallbackEnabled,\n }: ProjectChangeCountryTaxRateFallbackEnabledAction\n ) => {\n resource.carts.countryTaxRateFallbackEnabled = countryTaxRateFallbackEnabled\n },\n changeCartsConfiguration: (\n projectKey: string,\n resource: Writable<Project>,\n { cartsConfiguration }: ProjectChangeCartsConfigurationAction\n ) => {\n console.log(cartsConfiguration)\n resource.carts = cartsConfiguration || {\n countryTaxRateFallbackEnabled: false,\n deleteDaysAfterLastModification: 90,\n }\n },\n }\n}\n","import { Router } from 'express'\nimport { Request, Response } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProjectRepository } from '../repositories/project'\nimport { Update } from '@commercetools/platform-sdk'\n\nexport class ProjectService {\n public repository: ProjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n this.repository = new ProjectRepository(storage)\n this.registerRoutes(parent)\n }\n\n registerRoutes(parent: Router) {\n parent.get('', this.get.bind(this))\n parent.post('', this.post.bind(this))\n }\n\n get(request: Request, response: Response) {\n const projectKey = request.params.projectKey\n const project = this.repository.get(projectKey)\n return response.status(200).send(project)\n }\n\n post(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const project = this.repository.get(request.params.projectKey)\n\n if (!project) {\n return response.status(404).send({})\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n project,\n updateRequest.actions\n )\n\n return response.status(200).send({})\n }\n}\n","import {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport {\n ReferenceTypeId,\n ShippingMethod,\n ShippingMethodAddShippingRateAction,\n ShippingMethodAddZoneAction,\n ShippingMethodChangeIsDefaultAction,\n ShippingMethodChangeNameAction,\n ShippingMethodDraft,\n ShippingMethodRemoveZoneAction,\n ShippingMethodSetDescriptionAction,\n ShippingMethodSetKeyAction,\n ShippingMethodSetLocalizedDescriptionAction,\n ShippingMethodSetPredicateAction,\n ShippingMethodUpdateAction,\n ShippingRate,\n ShippingRateDraft,\n ZoneRate,\n ZoneRateDraft,\n ZoneReference,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\nimport { _ } from 'ajv'\nimport deepEqual from 'deep-equal'\n\nexport class ShippingMethodRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'shipping-method'\n }\n\n create(projectKey: string, draft: ShippingMethodDraft): ShippingMethod {\n const resource: ShippingMethod = {\n ...getBaseResourceProperties(),\n ...draft,\n taxCategory: getReferenceFromResourceIdentifier(\n draft.taxCategory,\n projectKey,\n this._storage\n ),\n zoneRates: draft.zoneRates?.map(z =>\n this._transformZoneRateDraft(projectKey, z)\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private _transformZoneRateDraft = (\n projectKey: string,\n draft: ZoneRateDraft\n ): ZoneRate => ({\n ...draft,\n zone: getReferenceFromResourceIdentifier<ZoneReference>(\n draft.zone,\n projectKey,\n this._storage\n ),\n shippingRates: draft.shippingRates?.map(this._transformShippingRate),\n })\n\n private _transformShippingRate = (rate: ShippingRateDraft): ShippingRate => {\n return {\n price: createTypedMoney(rate.price),\n freeAbove: rate.freeAbove && createTypedMoney(rate.freeAbove),\n tiers: rate.tiers || [],\n }\n }\n\n actions: Partial<\n Record<\n ShippingMethodUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n action: any\n ) => void\n >\n > = {\n addShippingRate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { shippingRate, zone }: ShippingMethodAddShippingRateAction\n ) => {\n const rate = this._transformShippingRate(shippingRate)\n\n resource.zoneRates.forEach(zoneRate => {\n if (zoneRate.zone.id == zone.id) {\n zoneRate.shippingRates.push(rate)\n return\n }\n })\n resource.zoneRates.push({\n zone: {\n typeId: 'zone',\n id: zone.id!,\n },\n shippingRates: [rate],\n })\n },\n removeShippingRate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { shippingRate, zone }: ShippingMethodAddShippingRateAction\n ) => {\n const rate = this._transformShippingRate(shippingRate)\n\n resource.zoneRates.forEach(zoneRate => {\n if (zoneRate.zone.id == zone.id) {\n zoneRate.shippingRates = zoneRate.shippingRates.filter(otherRate => {\n return !deepEqual(rate, otherRate)\n })\n }\n })\n },\n addZone: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { zone }: ShippingMethodAddZoneAction\n ) => {\n const zoneReference = getReferenceFromResourceIdentifier<ZoneReference>(\n zone,\n projectKey,\n this._storage\n )\n\n if (resource.zoneRates === undefined) {\n resource.zoneRates = []\n }\n\n resource.zoneRates.push({\n zone: zoneReference,\n shippingRates: [],\n })\n },\n removeZone: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { zone }: ShippingMethodRemoveZoneAction\n ) => {\n resource.zoneRates = resource.zoneRates.filter(zoneRate => {\n return zoneRate.zone.id !== zone.id\n })\n },\n setKey: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { key }: ShippingMethodSetKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { description }: ShippingMethodSetDescriptionAction\n ) => {\n resource.description = description\n },\n setLocalizedDescription: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { localizedDescription }: ShippingMethodSetLocalizedDescriptionAction\n ) => {\n resource.localizedDescription = localizedDescription\n },\n setPredicate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { predicate }: ShippingMethodSetPredicateAction\n ) => {\n resource.predicate = predicate\n },\n changeIsDefault: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { isDefault }: ShippingMethodChangeIsDefaultAction\n ) => {\n resource.isDefault = isDefault\n },\n changeName: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { name }: ShippingMethodChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import { ShippingMethodRepository } from '../repositories/shipping-method'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ShippingMethodService extends AbstractService {\n public repository: ShippingMethodRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShippingMethodRepository(storage)\n }\n\n getBasePath() {\n return 'shipping-methods'\n }\n}\n","import {\n CustomerReference,\n ReferenceTypeId,\n ShoppingList,\n ShoppingListDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport {\n createCustomFields,\n getReferenceFromResourceIdentifier,\n} from './helpers'\n\nexport class ShoppingListRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'shopping-list'\n }\n create(projectKey: string, draft: ShoppingListDraft): ShoppingList {\n // const product =\n\n const resource: ShoppingList = {\n ...getBaseResourceProperties(),\n ...draft,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n textLineItems: [],\n lineItems: draft.lineItems?.map(e => ({\n ...getBaseResourceProperties(),\n ...e,\n addedAt: e.addedAt ?? '',\n productId: e.productId ?? '',\n name: {},\n quantity: e.quantity ?? 1,\n productType: { typeId: 'product-type', id: '' },\n custom: createCustomFields(e.custom, projectKey, this._storage),\n })),\n customer: draft.customer\n ? getReferenceFromResourceIdentifier<CustomerReference>(\n draft.customer,\n projectKey,\n this._storage\n )\n : undefined,\n store: draft.store?.key\n ? { typeId: 'store', key: draft.store.key! }\n : undefined,\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import { ShoppingListRepository } from './../repositories/shopping-list'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ShoppingListService extends AbstractService {\n public repository: ShoppingListRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShoppingListRepository(storage)\n }\n\n getBasePath() {\n return 'shopping-lists'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport { getReferenceFromResourceIdentifier } from './helpers'\nimport {\n ReferenceTypeId,\n State,\n StateChangeKeyAction,\n StateDraft,\n StateSetDescriptionAction,\n StateSetNameAction,\n StateSetRolesAction,\n StateUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\n\nexport class StateRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'state'\n }\n\n create(projectKey: string, draft: StateDraft): State {\n const resource: State = {\n ...getBaseResourceProperties(),\n ...draft,\n builtIn: false,\n initial: draft.initial || false,\n transitions: (draft.transitions || []).map(t =>\n getReferenceFromResourceIdentifier(t, projectKey, this._storage)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n StateUpdateAction['action'],\n (projectKey: string, resource: Writable<State>, action: any) => void\n >\n > = {\n changeKey: (\n projectKey: string,\n resource: Writable<State>,\n { key }: StateChangeKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<State>,\n { description }: StateSetDescriptionAction\n ) => {\n resource.description = description\n },\n setName: (\n projectKey: string,\n resource: Writable<State>,\n { name }: StateSetNameAction\n ) => {\n resource.name = name\n },\n setRoles: (\n projectKey: string,\n resource: Writable<State>,\n { roles }: StateSetRolesAction\n ) => {\n resource.roles = roles\n },\n }\n}\n","import { StateRepository } from '../repositories/state'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class StateService extends AbstractService {\n public repository: StateRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StateRepository(storage)\n }\n\n getBasePath() {\n return 'states'\n }\n}\n","import {\n Store,\n StoreDraft,\n ReferenceTypeId,\n StoreUpdateAction,\n StoreSetNameAction,\n ChannelReference,\n StoreSetDistributionChannelsAction,\n ChannelResourceIdentifier,\n StoreSetLanguagesAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { getReferenceFromResourceIdentifier } from './helpers'\n\nexport class StoreRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'store'\n }\n\n create(projectKey: string, draft: StoreDraft): Store {\n const resource: Store = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n languages: draft.languages,\n distributionChannels: this.transformChannels(\n projectKey,\n draft.distributionChannels\n ),\n supplyChannels: this.transformChannels(projectKey, draft.supplyChannels),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private transformChannels(\n projectKey: string,\n channels?: ChannelResourceIdentifier[]\n ) {\n if (!channels) return []\n\n return channels.map(ref =>\n getReferenceFromResourceIdentifier<ChannelReference>(\n ref,\n projectKey,\n this._storage\n )\n )\n }\n\n actions: Partial<\n Record<\n StoreUpdateAction['action'],\n (projectKey: string, resource: Writable<Store>, action: any) => void\n >\n > = {\n setName: (\n projectKey: string,\n resource: Writable<Store>,\n { name }: StoreSetNameAction\n ) => {\n resource.name = name\n },\n setDistributionChannels: (\n projectKey: string,\n resource: Writable<Store>,\n { distributionChannels }: StoreSetDistributionChannelsAction\n ) => {\n resource.distributionChannels = this.transformChannels(\n projectKey,\n distributionChannels\n )\n },\n setLanguages: (\n projectKey: string,\n resource: Writable<Store>,\n { languages }: StoreSetLanguagesAction\n ) => {\n resource.languages = languages\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { StoreRepository } from '../repositories/store'\nimport { AbstractStorage } from '../storage'\n\nexport class StoreService extends AbstractService {\n public repository: StoreRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StoreRepository(storage)\n }\n\n getBasePath() {\n return 'stores'\n }\n}\n","import {\n InvalidInputError,\n ReferenceTypeId,\n Subscription,\n SubscriptionDraft,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class SubscriptionRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'subscription'\n }\n create(projectKey: string, draft: SubscriptionDraft): Subscription {\n // TODO: We could actually test this here by using the aws sdk. For now\n // hardcode a failed check when account id is 0000000000\n if (draft.destination.type == 'SQS') {\n const queueURL = new URL(draft.destination.queueUrl)\n const accountId = queueURL.pathname.split('/')[1]\n if (accountId == '0000000000') {\n const dest = draft.destination\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message:\n 'A test message could not be delivered to this destination: ' +\n `SQS ${dest.queueUrl} in ${dest.region} for ${dest.accessKey}. ` +\n 'Please make sure your destination is correctly configured.',\n },\n 400\n )\n }\n }\n\n const resource: Subscription = {\n ...getBaseResourceProperties(),\n changes: draft.changes || [],\n destination: draft.destination,\n format: draft.format || {\n type: 'Platform',\n },\n key: draft.key,\n messages: draft.messages || [],\n status: 'Healthy',\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { SubscriptionRepository } from '../repositories/subscription'\n\nexport class SubscriptionService extends AbstractService {\n public repository: SubscriptionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new SubscriptionRepository(storage)\n }\n\n getBasePath() {\n return 'subscriptions'\n }\n}\n","import {\n ReferenceTypeId,\n TaxCategory,\n TaxCategoryAddTaxRateAction,\n TaxCategoryChangeNameAction,\n TaxCategoryDraft,\n TaxCategoryRemoveTaxRateAction,\n TaxCategoryReplaceTaxRateAction,\n TaxCategorySetDescriptionAction,\n TaxCategorySetKeyAction,\n TaxCategoryUpdateAction,\n TaxRate,\n TaxRateDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from 'types'\n\nexport class TaxCategoryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'tax-category'\n }\n\n create(projectKey: string, draft: TaxCategoryDraft): TaxCategory {\n const resource: TaxCategory = {\n ...getBaseResourceProperties(),\n ...draft,\n rates: draft.rates?.map(this.taxRateFromTaxRateDraft) || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private taxRateFromTaxRateDraft = (draft: TaxRateDraft): TaxRate => ({\n ...draft,\n id: uuidv4(),\n amount: draft.amount || 0,\n })\n\n getWithKey(projectKey: string, key: string): TaxCategory | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as TaxCategory\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate tax category key')\n }\n\n return\n }\n\n actions: Partial<\n Record<\n TaxCategoryUpdateAction['action'],\n (projectKey: string, resource: Writable<TaxCategory>, action: any) => void\n >\n > = {\n addTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRate }: TaxCategoryAddTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n resource.rates.push(this.taxRateFromTaxRateDraft(taxRate))\n },\n removeTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRateId }: TaxCategoryRemoveTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n resource.rates = resource.rates.filter(taxRate => {\n return taxRate.id !== taxRateId\n })\n },\n replaceTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRateId, taxRate }: TaxCategoryReplaceTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n\n const taxRateObj = this.taxRateFromTaxRateDraft(taxRate)\n for (let i = 0; i < resource.rates.length; i++) {\n const rate = resource.rates[i]\n if (rate.id == taxRateId) {\n resource.rates[i] = taxRateObj\n }\n }\n },\n setDescription: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { description }: TaxCategorySetDescriptionAction\n ) => {\n resource.description = description\n },\n setKey: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { key }: TaxCategorySetKeyAction\n ) => {\n resource.key = key\n },\n changeName: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { name }: TaxCategoryChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import { TaxCategoryRepository } from '../repositories/tax-category'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class TaxCategoryService extends AbstractService {\n public repository: TaxCategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TaxCategoryRepository(storage)\n }\n\n getBasePath() {\n return 'tax-categories'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import {\n Type,\n TypeDraft,\n ReferenceTypeId,\n TypeUpdateAction,\n FieldDefinition,\n TypeSetDescriptionAction,\n TypeChangeNameAction,\n TypeAddFieldDefinitionAction,\n TypeChangeEnumValueLabelAction,\n TypeAddEnumValueAction,\n TypeChangeFieldDefinitionOrderAction,\n TypeRemoveFieldDefinitionAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class TypeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'type'\n }\n\n create(projectKey: string, draft: TypeDraft): Type {\n const resource: Type = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n resourceTypeIds: draft.resourceTypeIds,\n fieldDefinitions: draft.fieldDefinitions || [],\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n actions: Partial<\n Record<\n TypeUpdateAction['action'],\n (projectKey: string, resource: Writable<Type>, action: any) => void\n >\n > = {\n addFieldDefinition: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldDefinition }: TypeAddFieldDefinitionAction\n ) => {\n resource.fieldDefinitions.push(fieldDefinition)\n },\n removeFieldDefinition: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName }: TypeRemoveFieldDefinitionAction\n ) => {\n resource.fieldDefinitions = resource.fieldDefinitions.filter(f => {\n return f.name !== fieldName\n })\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Type>,\n { description }: TypeSetDescriptionAction\n ) => {\n resource.description = description\n },\n changeName: (\n projectKey: string,\n resource: Writable<Type>,\n { name }: TypeChangeNameAction\n ) => {\n resource.name = name\n },\n changeFieldDefinitionOrder: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldNames }: TypeChangeFieldDefinitionOrderAction\n ) => {\n const fields = new Map(\n resource.fieldDefinitions.map(item => [item.name, item])\n )\n const result: FieldDefinition[] = []\n let current = resource.fieldDefinitions\n\n fieldNames.forEach(fieldName => {\n const field = fields.get(fieldName)\n if (field === undefined) {\n throw new Error('New field')\n }\n result.push(field)\n\n // Remove from current items\n current = current.filter(f => {\n return f.name !== fieldName\n })\n })\n\n resource.fieldDefinitions = result\n // Add fields which were not specified in the order as last items. Not\n // sure if this follows commercetools\n resource.fieldDefinitions.push(...current)\n },\n addEnumValue: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName, value }: TypeAddEnumValueAction\n ) => {\n resource.fieldDefinitions.forEach(field => {\n if (field.name == fieldName) {\n // TODO, should be done better i suppose\n if (field.type.name == 'Enum') {\n field.type.values.push(value)\n } else if (\n field.type.name == 'Set' &&\n field.type.elementType.name == 'Enum'\n ) {\n field.type.elementType.values.push(value)\n } else {\n throw new Error('Type is not a Enum (or Set of Enum)')\n }\n }\n })\n },\n changeEnumValueLabel: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName, value }: TypeChangeEnumValueLabelAction\n ) => {\n resource.fieldDefinitions.forEach(field => {\n if (field.name == fieldName) {\n // TODO, should be done better i suppose\n if (field.type.name == 'Enum') {\n field.type.values.forEach(v => {\n if (v.key == value.key) {\n v.label = value.label\n }\n })\n } else if (\n field.type.name == 'Set' &&\n field.type.elementType.name == 'Enum'\n ) {\n field.type.elementType.values.forEach(v => {\n if (v.key == value.key) {\n v.label = value.label\n }\n })\n } else {\n throw new Error('Type is not a Enum (or Set of Enum)')\n }\n }\n })\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { TypeRepository } from '../repositories/type'\nimport { AbstractStorage } from '../storage'\n\nexport class TypeService extends AbstractService {\n public repository: TypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TypeRepository(storage)\n }\n\n getBasePath() {\n return 'types'\n }\n}\n","import {\n ReferenceTypeId,\n Zone,\n ZoneAddLocationAction,\n ZoneChangeNameAction,\n ZoneDraft,\n ZoneRemoveLocationAction,\n ZoneSetDescriptionAction,\n ZoneSetKeyAction,\n ZoneUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ZoneRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'zone'\n }\n\n create(projectKey: string, draft: ZoneDraft): Zone {\n const resource: Zone = {\n ...getBaseResourceProperties(),\n key: draft.key,\n locations: draft.locations || [],\n name: draft.name,\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n ZoneUpdateAction['action'],\n (projectKey: string, resource: Writable<Zone>, action: any) => void\n >\n > = {\n addLocation: (\n projectKey: string,\n resource: Writable<Zone>,\n { location }: ZoneAddLocationAction\n ) => {\n resource.locations.push(location)\n },\n removeLocation: (\n projectKey: string,\n resource: Writable<Zone>,\n { location }: ZoneRemoveLocationAction\n ) => {\n resource.locations = resource.locations.filter(loc => {\n return !(loc.country == location.country && loc.state == location.state)\n })\n },\n changeName: (\n projectKey: string,\n resource: Writable<Zone>,\n { name }: ZoneChangeNameAction\n ) => {\n resource.name = name\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Zone>,\n { description }: ZoneSetDescriptionAction\n ) => {\n resource.description = description\n },\n setKey: (\n projectKey: string,\n resource: Writable<Zone>,\n { key }: ZoneSetKeyAction\n ) => {\n resource.key = key\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { ZoneRepository } from '../repositories/zone'\n\nexport class ZoneService extends AbstractService {\n public repository: ZoneRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ZoneRepository(storage)\n }\n\n getBasePath() {\n return 'zones'\n }\n}\n","import nock from 'nock'\nimport express, { NextFunction, Request, Response } from 'express'\nimport supertest from 'supertest'\nimport morgan from 'morgan'\nimport { AbstractStorage, InMemoryStorage } from './storage'\nimport { Services } from './types'\nimport { CommercetoolsError } from './exceptions'\nimport { OAuth2Server } from './oauth/server'\nimport { ProjectAPI } from './projectAPI'\nimport { copyHeaders } from './lib/proxy'\nimport { DEFAULT_API_HOSTNAME, DEFAULT_AUTH_HOSTNAME } from './constants'\n\n// Services\nimport { CartDiscountService } from './services/cart-discount'\nimport { CartService } from './services/cart'\nimport { CategoryServices } from './services/category'\nimport { ChannelService } from './services/channel'\nimport { CustomerGroupService } from './services/customer-group'\nimport { CustomerService } from './services/customer'\nimport { CustomObjectService } from './services/custom-object'\nimport { DiscountCodeService } from './services/discount-code'\nimport { ExtensionServices } from './services/extension'\nimport { InventoryEntryService } from './services/inventory-entry'\nimport { MyCartService } from './services/my-cart'\nimport { MyPaymentService } from './services/my-payment'\nimport { OrderService } from './services/order'\nimport { PaymentService } from './services/payment'\nimport { ProductProjectionService } from './services/product-projection'\nimport { ProductService } from './services/product'\nimport { ProductTypeService } from './services/product-type'\nimport { ProjectService } from './services/project'\nimport { ShippingMethodService } from './services/shipping-method'\nimport { ShoppingListService } from './services/shopping-list'\nimport { StateService } from './services/state'\nimport { StoreService } from './services/store'\nimport { SubscriptionService } from './services/subscription'\nimport { TaxCategoryService } from './services/tax-category'\nimport { TypeService } from './services/type'\nimport { ZoneService } from './services/zone'\n\nexport type CommercetoolsMockOptions = {\n validateCredentials: boolean\n enableAuthentication: boolean\n defaultProjectKey: string | undefined\n apiHost: RegExp | string\n authHost: RegExp | string\n silent: boolean\n}\n\ntype AppOptions = { silent?: boolean }\n\nconst DEFAULT_OPTIONS: CommercetoolsMockOptions = {\n enableAuthentication: false,\n validateCredentials: false,\n defaultProjectKey: undefined,\n apiHost: DEFAULT_API_HOSTNAME,\n authHost: DEFAULT_AUTH_HOSTNAME,\n silent: false,\n}\n\nexport class CommercetoolsMock {\n public app: express.Express\n public options: CommercetoolsMockOptions\n\n private _storage: AbstractStorage\n private _oauth2: OAuth2Server\n private _nockScopes: {\n auth: nock.Scope | undefined\n api: nock.Scope | undefined\n } = { auth: undefined, api: undefined }\n private _services: Services\n private _projectService?: ProjectService\n\n constructor(options: Partial<CommercetoolsMockOptions> = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options }\n this._services = {}\n this._projectService = undefined\n\n this._storage = new InMemoryStorage()\n this._oauth2 = new OAuth2Server({\n enabled: this.options.enableAuthentication,\n validate: this.options.validateCredentials,\n })\n\n this.app = this.createApp({ silent: this.options.silent })\n }\n\n start() {\n // Order is important here when the hostnames match\n this.mockAuthHost()\n this.mockApiHost()\n }\n\n stop() {\n this._nockScopes.auth?.persist(false)\n this._nockScopes.auth = undefined\n\n this._nockScopes.api?.persist(false)\n this._nockScopes.api = undefined\n }\n\n clear() {\n this._storage.clear()\n }\n\n project(projectKey?: string) {\n if (!projectKey && !this.options.defaultProjectKey) {\n throw new Error('No projectKey passed and no default set')\n }\n\n return new ProjectAPI(\n projectKey || this.options.defaultProjectKey!,\n this._services,\n this._storage\n )\n }\n\n runServer(port: number = 3000, options?: AppOptions) {\n const app = this.createApp(options)\n const server = app.listen(port, () => {\n console.log(`Mock server listening at http://localhost:${port}`)\n })\n server.keepAliveTimeout = 60 * 1000\n }\n\n private createApp(options?: AppOptions): express.Express {\n const app = express()\n\n const projectRouter = express.Router({ mergeParams: true })\n projectRouter.use(express.json())\n\n if (!options?.silent) {\n app.use(morgan('tiny'))\n }\n app.use('/oauth', this._oauth2.createRouter())\n\n // Only enable auth middleware if we have enabled this\n if (this.options.enableAuthentication) {\n app.use('/:projectKey', this._oauth2.createMiddleware(), projectRouter)\n } else {\n app.use('/:projectKey', projectRouter)\n }\n\n this._projectService = new ProjectService(projectRouter, this._storage)\n\n this._services = {\n category: new CategoryServices(projectRouter, this._storage),\n cart: new CartService(projectRouter, this._storage),\n 'cart-discount': new CartDiscountService(projectRouter, this._storage),\n customer: new CustomerService(projectRouter, this._storage),\n channel: new ChannelService(projectRouter, this._storage),\n 'customer-group': new CustomerGroupService(projectRouter, this._storage),\n 'discount-code': new DiscountCodeService(projectRouter, this._storage),\n extension: new ExtensionServices(projectRouter, this._storage),\n 'inventory-entry': new InventoryEntryService(\n projectRouter,\n this._storage\n ),\n 'key-value-document': new CustomObjectService(\n projectRouter,\n this._storage\n ),\n order: new OrderService(projectRouter, this._storage),\n payment: new PaymentService(projectRouter, this._storage),\n 'my-cart': new MyCartService(projectRouter, this._storage),\n 'my-payment': new MyPaymentService(projectRouter, this._storage),\n 'shipping-method': new ShippingMethodService(\n projectRouter,\n this._storage\n ),\n 'product-type': new ProductTypeService(projectRouter, this._storage),\n product: new ProductService(projectRouter, this._storage),\n 'product-projection': new ProductProjectionService(\n projectRouter,\n this._storage\n ),\n 'shopping-list': new ShoppingListService(projectRouter, this._storage),\n state: new StateService(projectRouter, this._storage),\n store: new StoreService(projectRouter, this._storage),\n subscription: new SubscriptionService(projectRouter, this._storage),\n 'tax-category': new TaxCategoryService(projectRouter, this._storage),\n type: new TypeService(projectRouter, this._storage),\n zone: new ZoneService(projectRouter, this._storage),\n }\n\n app.use((err: Error, req: Request, resp: Response, next: NextFunction) => {\n if (err instanceof CommercetoolsError) {\n return resp.status(err.statusCode).send({\n statusCode: err.statusCode,\n message: err.message,\n errors: [err.info],\n })\n } else {\n console.error(err)\n return resp.status(500).send({\n error: err.message,\n })\n }\n })\n\n return app\n }\n\n private mockApiHost() {\n const app = this.app\n\n this._nockScopes.api = nock(this.options.apiHost)\n .persist()\n .get(/.*/)\n .reply(async function(uri) {\n const response = await supertest(app)\n .get(uri)\n .set(copyHeaders(this.req.headers))\n return [response.status, response.body]\n })\n .post(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n .delete(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .delete(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n }\n\n private mockAuthHost() {\n const app = this.app\n\n this._nockScopes.auth = nock(this.options.authHost)\n .persist()\n .post(/^\\/oauth\\/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri + '?' + body)\n .set(copyHeaders(this.req.headers))\n .send()\n return [response.status, response.body]\n })\n }\n}\n"],"names":["parseExpandClause","clause","result","element","index","undefined","rest","pos","indexOf","substring","match","parseInt","haversineDistance","src","dst","RADIUS_OF_EARTH_IN_KM","toRadian","deg","Math","PI","dLat","latitude","dLon","longitude","a","sin","cos","c","atan2","sqrt","PredicateError","constructor","message","parseQueryExpression","predicate","Array","isArray","callbacks","map","item","generateMatchFunc","target","variables","every","callback","validateSymbol","val","type","char","value","charAt","line","start","column","resolveSymbol","vars","resolveValue","obj","Object","values","filter","v","getLexer","perplex","token","lexer","parser","Parser","builder","nud","t","strpos","groups","parseFloat","bp","expr","parse","terminals","led","left","expect","resolvedValue","resolvedSymbol","some","elem","invert","next","peek","length","Error","symbols","inValues","includes","other","toLowerCase","maxDistance","distance","keyword","array","build","lines","split","CommercetoolsError","info","statusCode","AbstractStorage","InMemoryStorage","projectKey","projects","key","name","countries","currencies","languages","createdAt","trialUntil","carts","countryTaxRateFallbackEnabled","deleteDaysAfterLastModification","messages","enabled","deleteDaysAfterCreation","shippingRateInputType","externalOAuth","searchIndexing","products","status","orders","version","project","addProject","newObj","JSON","stringify","forEach","_resolveResource","expand","params","reference","_resolveReference","itemRef","forProjectKey","projectStorage","resources","cart","Map","category","channel","customer","extension","order","payment","product","state","store","subscription","zone","clear","entries","assertStorage","typeId","all","from","add","set","id","resource","get","assert","getByKey","find","e","delete","query","where","filterFunc","err","code","totalResources","offset","limit","slice","count","total","results","getByResourceIdentifier","identifier","console","error","r","OAuth2Store","validate","getClientToken","clientId","clientSecret","scope","access_token","randomBytes","toString","token_type","expires_in","tokens","push","validateToken","foundToken","getBearerToken","request","authHeader","header","OAuth2Server","options","createRouter","router","express","Router","use","bodyParser","urlencoded","extended","post","tokenHandler","bind","createMiddleware","response","credentials","auth","grantType","grant_type","body","pass","send","getBaseResourceProperties","uuidv4","Date","toISOString","lastModifiedAt","ProjectAPI","services","storage","_storage","_services","parsedTypeId","service","getRepository","repository","copyHeaders","headers","validHeaders","DEFAULT_API_HOSTNAME","DEFAULT_AUTH_HOSTNAME","AbstractService","parent","registerRoutes","extraRoutes","basePath","getBasePath","mergeParams","getWithKey","getWithId","deletewithKey","deletewithId","postWithKey","postWithId","_parseParam","_expandWithId","log","draft","create","createStatusCode","updateRequest","updatedResource","processUpdateActions","actions","resourceId","checkConcurrentModification","expectedVersion","currentVersion","AbstractRepository","modifiedResource","action","updateFunc","deepEqual","save","AbstractResourceRepository","getTypeId","current","createCustomFields","fields","typeResource","createPrice","createTypedMoney","fractionDigits","resolveStoreReference","ref","getReferenceFromResourceIdentifier","resourceIdentifier","CartDiscountRepository","setKey","setDescription","description","setValidFrom","validFrom","setValidUntil","validUntil","setValidFromAndUntil","changeSortOrder","sortOrder","changeIsActive","isActive","cartPredicate","references","requiresDiscountCode","stackingMode","transformValueDraft","money","CartDiscountService","CartRepository","addLineItem","productId","variantId","sku","quantity","variant","items","masterData","masterVariant","variants","x","alreadyAdded","lineItems","totalPrice","centAmount","calculateLineItemTotalPrice","prices","price","productKey","productSlug","slug","productType","discountedPricePerQuantity","lineItemMode","priceMode","calculateCartTotalPrice","removeLineItem","lineItemId","lineItem","shouldDelete","setBillingAddress","address","billingAddress","setCountry","country","setCustomerEmail","email","customerEmail","setCustomField","custom","setCustomType","resolvedType","setLocale","locale","setShippingAddress","shippingAddress","cartState","customLineItems","currencyCode","currency","taxMode","taxRoundingMode","taxCalculationMode","refusedGifts","origin","getActiveCart","reduce","cur","CartService","CategoryRepository","changeAssetName","assetId","assetKey","assets","asset","changeSlug","setAssetDescription","setAssetSources","sources","setMetaDescription","metaDescription","setMetaKeywords","metaKeywords","setMetaTitle","metaTitle","orderHint","ancestors","d","tags","CategoryServices","ChannelRepository","roles","ChannelService","CustomerGroupRepository","changeName","groupName","CustomerGroupService","CustomerRepository","password","isEmailVerified","addresses","CustomerService","CustomObjectRepository","getWithContainerAndKey","container","baseProperties","CustomObjectService","createWithContainerAndKey","deleteWithContainerAndKey","DiscountCodeRepository","changeCartDiscounts","cartDiscounts","setCartPredicate","setName","setMaxApplications","maxApplications","setMaxApplicationsPerCustomer","maxApplicationsPerCustomer","applicationVersion","DiscountCodeService","ExtensionRepository","setTimeoutInMs","timeoutInMs","changeTriggers","triggers","changeDestination","destination","ExtensionServices","InventoryEntryRepository","changeQuantity","quantityOnStock","availableQuantity","setExpectedDelivery","expectedDelivery","setRestockableInDays","restockableInDays","supplyChannel","InventoryEntryService","MyCartService","activeCart","PaymentRepository","amount","addTransaction","transaction","transactions","transactionFromTransactionDraft","amountPlanned","paymentMethodInfo","paymentStatus","interfaceInteractions","interaction","MyPaymentService","OrderRepository","addPayment","resolvedPayment","paymentInfo","payments","changeOrderState","orderState","changePaymentState","paymentState","setOrderNumber","orderNumber","setStore","storeReference","syncInfo","lastMessageSequenceNumber","import","lineItemFromImportDraft","customLineItemFromImportDraft","taxRate","getWithOrderNumber","OrderService","importDraft","PaymentService","parseFilterExpression","filters","join","parsed","replace","ProductProjectionRepository","categories","variantFromDraft","searchKeywords","search","wherePredicate","attributes","ProductProjectionService","ProductRepository","publish","staged","hasStagedChanges","published","setAttribute","isStaged","productData","getProductData","isMasterVariant","variantIndex","getVariant","existingAttr","attr","foundVariant","ProductService","ProductTypeRepository","_projectKey","attributeConstraint","inputHint","isSearchable","changeLocalizedEnumValueLabel","attributeName","newValue","updateAttributeType","label","elementType","changeLabel","attributeDefinitionFromAttributeDefinitionDraft","ProductTypeService","maskSecretValue","path","parts","clone","pop","i","part","ProjectRepository","changeCurrencies","changeCountries","changeLanguages","changeMessagesEnabled","messagesEnabled","changeProductSearchIndexingEnabled","changeOrderSearchStatus","setShippingRateInputType","setExternalOAuth","changeCountryTaxRateFallbackEnabled","changeCartsConfiguration","cartsConfiguration","data","getProject","masked","saveProject","ProjectService","ShippingMethodRepository","shippingRates","_transformShippingRate","rate","freeAbove","tiers","addShippingRate","shippingRate","zoneRates","zoneRate","removeShippingRate","otherRate","addZone","zoneReference","removeZone","setLocalizedDescription","localizedDescription","setPredicate","changeIsDefault","isDefault","taxCategory","z","_transformZoneRateDraft","ShippingMethodService","ShoppingListRepository","textLineItems","addedAt","ShoppingListService","StateRepository","changeKey","setRoles","builtIn","initial","transitions","StateService","StoreRepository","setDistributionChannels","distributionChannels","transformChannels","setLanguages","supplyChannels","channels","StoreService","SubscriptionRepository","queueURL","URL","queueUrl","accountId","pathname","dest","region","accessKey","changes","format","SubscriptionService","TaxCategoryRepository","addTaxRate","rates","taxRateFromTaxRateDraft","removeTaxRate","taxRateId","replaceTaxRate","taxRateObj","TaxCategoryService","TypeRepository","addFieldDefinition","fieldDefinition","fieldDefinitions","removeFieldDefinition","fieldName","f","changeFieldDefinitionOrder","fieldNames","field","addEnumValue","changeEnumValueLabel","resourceTypeIds","TypeService","ZoneRepository","addLocation","location","locations","removeLocation","loc","ZoneService","DEFAULT_OPTIONS","enableAuthentication","validateCredentials","defaultProjectKey","apiHost","authHost","silent","CommercetoolsMock","api","_projectService","_oauth2","app","createApp","mockAuthHost","mockApiHost","stop","_nockScopes","persist","runServer","port","server","listen","keepAliveTimeout","projectRouter","json","morgan","req","resp","errors","nock","reply","uri","supertest"],"mappings":";;;;;;;;;;;;;;;;;;;;AAcO,MAAMA,iBAAiB,GAAIC,MAAD;AAC/B,QAAMC,MAAM,GAAiB;AAC3BC,IAAAA,OAAO,EAAEF,MADkB;AAE3BG,IAAAA,KAAK,EAAEC,SAFoB;AAG3BC,IAAAA,IAAI,EAAED;AAHqB,GAA7B;AAMA,QAAME,GAAG,GAAGN,MAAM,CAACO,OAAP,CAAe,GAAf,CAAZ;;AACA,MAAID,GAAG,GAAG,CAAV,EAAa;AACXL,IAAAA,MAAM,CAACC,OAAP,GAAiBF,MAAM,CAACQ,SAAP,CAAiB,CAAjB,EAAoBF,GAApB,CAAjB;AACAL,IAAAA,MAAM,CAACI,IAAP,GAAcL,MAAM,CAACQ,SAAP,CAAiBF,GAAG,GAAG,CAAvB,CAAd;AACD;;AAED,QAAMG,KAAK,GAAGR,MAAM,CAACC,OAAP,CAAeO,KAAf,CAAqB,aAArB,CAAd;;AACA,MAAIA,KAAJ,EAAW;AACTR,IAAAA,MAAM,CAACE,KAAP,GAAeM,KAAK,CAAC,CAAD,CAAL,KAAa,GAAb,GAAmB,GAAnB,GAAyBC,QAAQ,CAACD,KAAK,CAAC,CAAD,CAAN,EAAW,EAAX,CAAhD;AACAR,IAAAA,MAAM,CAACC,OAAP,GAAiBD,MAAM,CAACC,OAAP,CAAeM,SAAf,CAAyB,CAAzB,EAA4BC,KAAK,CAACN,KAAlC,CAAjB;AACD;;AACD,SAAOF,MAAP;AACD,CAnBM;;ACTP;;;AAGA,AAAO,MAAMU,iBAAiB,GAAG,CAACC,GAAD,EAAgBC,GAAhB;AAC/B,QAAMC,qBAAqB,GAAG,IAA9B;;AACA,QAAMC,QAAQ,GAAIC,GAAD,IAAiBA,GAAG,IAAIC,IAAI,CAACC,EAAL,GAAU,GAAd,CAArC;;AAEA,QAAMC,IAAI,GAAGJ,QAAQ,CAACF,GAAG,CAACO,QAAJ,GAAeR,GAAG,CAACQ,QAApB,CAArB;AACA,QAAMC,IAAI,GAAGN,QAAQ,CAACF,GAAG,CAACS,SAAJ,GAAgBV,GAAG,CAACU,SAArB,CAArB;AAEA,MAAIC,CAAC,GACHN,IAAI,CAACO,GAAL,CAASL,IAAI,GAAG,CAAhB,IAAqBF,IAAI,CAACO,GAAL,CAASL,IAAI,GAAG,CAAhB,CAArB,GACAF,IAAI,CAACQ,GAAL,CAASV,QAAQ,CAACH,GAAG,CAACQ,QAAL,CAAjB,IACEH,IAAI,CAACQ,GAAL,CAASV,QAAQ,CAACF,GAAG,CAACO,QAAL,CAAjB,CADF,GAEEH,IAAI,CAACO,GAAL,CAASH,IAAI,GAAG,CAAhB,CAFF,GAGEJ,IAAI,CAACO,GAAL,CAASH,IAAI,GAAG,CAAhB,CALJ;AAMA,MAAIK,CAAC,GAAG,IAAIT,IAAI,CAACU,KAAL,CAAWV,IAAI,CAACW,IAAL,CAAUL,CAAV,CAAX,EAAyBN,IAAI,CAACW,IAAL,CAAU,IAAIL,CAAd,CAAzB,CAAZ;AACA,SAAOT,qBAAqB,GAAGY,CAAxB,GAA4B,IAAnC;AACD,CAfM;;ACRP;;;;;;AAMA,MAIaG;AAGXC,EAAAA,YAAYC;AACV,SAAKA,OAAL,GAAeA,OAAf;AACD;;;AAQH,AAoBO,MAAMC,oBAAoB,GAC/BC,SADkC;AAGlC,MAAIC,KAAK,CAACC,OAAN,CAAcF,SAAd,CAAJ,EAA8B;AAC5B,UAAMG,SAAS,GAAGH,SAAS,CAACI,GAAV,CAAcC,IAAI,IAAIC,iBAAiB,CAACD,IAAD,CAAvC,CAAlB;AACA,WAAO,CAACE,MAAD,EAAcC,SAAd;AACL,aAAOL,SAAS,CAACM,KAAV,CAAgBC,QAAQ,IAAIA,QAAQ,CAACH,MAAD,EAASC,SAAT,CAApC,CAAP;AACD,KAFD;AAGD,GALD,MAKO;AACL,WAAOF,iBAAiB,CAACN,SAAD,CAAxB;AACD;AACF,CAXM;;AAmBP,MAAMW,cAAc,GAAIC,GAAD;AACrB,MAAI,CAACA,GAAG,CAACC,IAAT,EAAe;AACb,UAAM,IAAIjB,cAAJ,CAAmB,gBAAnB,CAAN;AACD;;AAED,MAAIgB,GAAG,CAACC,IAAJ,KAAa,YAAjB,EAA+B;AAAA;;AAC7B,UAAMC,IAAI,GAAGF,GAAG,CAACG,KAAJ,CAAUC,MAAV,CAAiB,CAAjB,CAAb;AACA,UAAMC,IAAI,eAAGL,GAAG,CAACvC,GAAP,qBAAG,SAAS6C,KAAT,CAAeD,IAA5B;AACA,UAAME,MAAM,gBAAGP,GAAG,CAACvC,GAAP,qBAAG,UAAS6C,KAAT,CAAeC,MAA9B;AAEA,UAAM,IAAIvB,cAAJ,mBACckB,4DAA4DG,gBAAgBE,SAD1F,CAAN;AAGD;AACF,CAdD;;AAgBA,MAAMC,aAAa,GAAG,CAACR,GAAD,EAAcS,IAAd;AACpB,MAAIT,GAAG,CAACC,IAAJ,KAAa,KAAjB,EAAwB;AACtB,QAAI,EAAED,GAAG,CAACG,KAAJ,IAAaM,IAAf,CAAJ,EAA0B;AACxB,YAAM,IAAIzB,cAAJ,gCAAkDgB,GAAG,CAACG,OAAtD,CAAN;AACD;;AACD,WAAOM,IAAI,CAACT,GAAG,CAACG,KAAL,CAAX;AACD;;AAED,SAAOH,GAAG,CAACG,KAAX;AACD,CATD;;AAWA,MAAMO,YAAY,GAAG,CAACC,GAAD,EAAWX,GAAX;AACnB,MAAIA,GAAG,CAACC,IAAJ,KAAa,YAAjB,EAA+B;AAC7B,UAAM,IAAIjB,cAAJ,CAAmB,gBAAnB,CAAN;AACD;;AAED,MAAI,EAAEgB,GAAG,CAACG,KAAJ,IAAaQ,GAAf,CAAJ,EAAyB;AACvB,QAAItB,KAAK,CAACC,OAAN,CAAcqB,GAAd,CAAJ,EAAwB;AACtB,aAAOC,MAAM,CAACC,MAAP,CAAcF,GAAd,EACJG,MADI,CACGC,CAAC,IAAIf,GAAG,CAACG,KAAJ,IAAaY,CADrB,EAEJvB,GAFI,CAEAuB,CAAC,IAAIA,CAAC,CAACf,GAAG,CAACG,KAAL,CAFN,CAAP;AAGD;;AACD,UAAM,IAAInB,cAAJ,eAAiCgB,GAAG,CAACG,wBAArC,CAAN;AACD;;AAED,SAAOQ,GAAG,CAACX,GAAG,CAACG,KAAL,CAAV;AACD,CAfD;;AAiBA,MAAMa,QAAQ,GAAIb,KAAD;AACf,SAAO,IAAIc,OAAJ,CAAYd,KAAZ,EAEJe,KAFI,CAEE,KAFF,EAES,qBAFT,EAGJA,KAHI,CAGE,IAHF,EAGQ,oBAHR,EAIJA,KAJI,CAIE,KAJF,EAIS,qBAJT,EAMJA,KANI,CAME,QANF,EAMY,wBANZ,EAOJA,KAPI,CAOE,IAPF,EAOQ,oBAPR,EAQJA,KARI,CAQE,qBARF,EAQyB,yCARzB,EASJA,KATI,CASE,UATF,EASc,0BATd,EAUJA,KAVI,CAUE,KAVF,EAUS,qBAVT,EAWJA,KAXI,CAWE,KAXF,EAWS,qBAXT,EAYJA,KAZI,CAYE,OAZF,EAYW,uBAZX,EAaJA,KAbI,CAaE,IAbF,EAaQ,oBAbR,EAcJA,KAdI,CAcE,SAdF,EAca,yBAdb,EAgBJA,KAhBI,CAgBE,OAhBF,EAgBW,UAhBX,EAiBJA,KAjBI,CAiBE,KAjBF,EAiBS,KAjBT,EAkBJA,KAlBI,CAkBE,UAlBF,EAkBc,mBAlBd,EAmBJA,KAnBI,CAmBE,YAnBF,EAmBgB,gBAnBhB,EAoBJA,KApBI,CAoBE,QApBF,EAoBY,qBApBZ,EAqBJA,KArBI,CAqBE,QArBF,EAqBY,qBArBZ,EAuBJA,KAvBI,CAuBE,OAvBF,EAuBW,GAvBX,EAwBJA,KAxBI,CAwBE,GAxBF,EAwBO,GAxBP,EAyBJA,KAzBI,CAyBE,GAzBF,EAyBO,GAzBP,EA0BJA,KA1BI,CA0BE,IA1BF,EA0BQ,IA1BR,EA2BJA,KA3BI,CA2BE,IA3BF,EA2BQ,IA3BR,EA4BJA,KA5BI,CA4BE,GA5BF,EA4BO,GA5BP,EA6BJA,KA7BI,CA6BE,GA7BF,EA6BO,GA7BP,EA8BJA,KA9BI,CA8BE,IA9BF,EA8BQ,IA9BR,EA+BJA,KA/BI,CA+BE,GA/BF,EA+BO,GA/BP,EAgCJA,KAhCI,CAgCE,GAhCF,EAgCO,GAhCP,EAiCJA,KAjCI,CAiCE,IAjCF,EAiCQ,KAjCR,EAiCe,IAjCf,CAAP;AAkCD,CAnCD;AAqCA;;;;;;;;;AAOA,MAAMxB,iBAAiB,GAAIN,SAAD;AACxB,QAAM+B,KAAK,GAAGH,QAAQ,CAAC5B,SAAD,CAAtB;AACA,QAAMgC,MAAM,GAAG,IAAIC,YAAJ,CAAWF,KAAX,EACZG,OADY,GAEZC,GAFY,CAER,YAFQ,EAEM,GAFN,EAEWC,CAAC;AACvB,WAAO;AACLvB,MAAAA,IAAI,EAAE,YADD;AAELE,MAAAA,KAAK,EAAEqB,CAAC,CAACN,KAAF,CAAQtD,KAFV;AAGLH,MAAAA,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;AAHA,KAAP;AAKD,GARY,EASZF,GATY,CASR,UATQ,EASI,GATJ,EASSC,CAAC;AACrB,WAAO;AACLvB,MAAAA,IAAI,EAAE,KADD;AAEL;AACAE,MAAAA,KAAK,EAAEqB,CAAC,CAACN,KAAF,CAAQQ,MAAR,CAAe,CAAf,CAHF;AAILjE,MAAAA,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;AAJA,KAAP;AAMD,GAhBY,EAiBZF,GAjBY,CAiBR,QAjBQ,EAiBE,GAjBF,EAiBOC,CAAC;AACnB,WAAO;AACLvB,MAAAA,IAAI,EAAE,QADD;AAEL;AACAE,MAAAA,KAAK,EAAEqB,CAAC,CAACN,KAAF,CAAQQ,MAAR,CAAe,CAAf,CAHF;AAILjE,MAAAA,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;AAJA,KAAP;AAMD,GAxBY,EAyBZF,GAzBY,CAyBR,KAzBQ,EAyBD,CAzBC,EAyBEC,CAAC;AACd,WAAO;AACLvB,MAAAA,IAAI,EAAE,KADD;AAELE,MAAAA,KAAK,EAAEtC,QAAQ,CAAC2D,CAAC,CAACN,KAAF,CAAQtD,KAAT,EAAgB,EAAhB,CAFV;AAGLH,MAAAA,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;AAHA,KAAP;AAKD,GA/BY,EAgCZF,GAhCY,CAgCR,OAhCQ,EAgCC,CAhCD,EAgCIC,CAAC;AAChB,WAAO;AACLvB,MAAAA,IAAI,EAAE,OADD;AAELE,MAAAA,KAAK,EAAEwB,UAAU,CAACH,CAAC,CAACN,KAAF,CAAQtD,KAAT,CAFZ;AAGLH,MAAAA,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;AAHA,KAAP;AAKD,GAtCY,EAuCZF,GAvCY,CAuCR,KAvCQ,EAuCD,GAvCC,EAuCI,CAAC;AAAEK,IAAAA;AAAF,GAAD;AACf,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA,WAAQjB,GAAD;AACL,aAAO,CAACkB,IAAI,CAAClB,GAAD,CAAZ;AACD,KAFD;AAGD,GA5CY,EA6CZY,GA7CY,CA6CR,OA7CQ,EA6CC,EA7CD,EA6CK,CAAC;AAAEK,IAAAA;AAAF,GAAD;AAChB,WAAO,OAAP;AACD,GA/CY,EAgDZL,GAhDY,CAgDR,SAhDQ,EAgDG,EAhDH,EAgDO,CAAC;AAAEK,IAAAA;AAAF,GAAD;AAClB,WAAO,SAAP;AACD,GAlDY,EAoDZI,GApDY,CAoDR,KApDQ,EAoDD,CApDC,EAoDE,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACb,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA,WAAQjB,GAAD;AACL,aAAOsB,IAAI,CAACtB,GAAD,CAAJ,IAAakB,IAAI,CAAClB,GAAD,CAAxB;AACD,KAFD;AAGD,GAzDY,EA0DZqB,GA1DY,CA0DR,IA1DQ,EA0DF,CA1DE,EA0DC,CAAC;AAAEC,IAAAA,IAAF;AAAQf,IAAAA,KAAR;AAAeU,IAAAA;AAAf,GAAD;AACZ,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA,WAAO,CAACjB,GAAD,EAAWF,IAAX;AACL,aAAOwB,IAAI,CAACtB,GAAD,EAAMF,IAAN,CAAJ,IAAmBoB,IAAI,CAAClB,GAAD,EAAMF,IAAN,CAA9B;AACD,KAFD;AAGD,GA/DY,EAgEZuB,GAhEY,CAgER,OAhEQ,EAgEC,CAhED,EAgEI,CAAC;AAAEC,IAAAA,IAAF;AAAQf,IAAAA,KAAR;AAAeU,IAAAA;AAAf,GAAD;AACf,UAAMC,IAAI,GAAQT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAlB;;AACA,QAAIvC,KAAK,CAACC,OAAN,CAAcuC,IAAd,CAAJ,EAAyB;AACvB,aAAO,CAACI,IAAD,EAAO,GAAGJ,IAAV,CAAP;AACD,KAFD,MAEO;AACL,aAAO,CAACI,IAAD,EAAOJ,IAAP,CAAP;AACD;AACF,GAvEY,EAwEZN,GAxEY,CAwER,GAxEQ,EAwEH,GAxEG,EAwEEC,CAAC;AACd,UAAMK,IAAI,GAAQT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAAC,GAAD;AAAb,KAAb,CAAlB;AACA,WAAOF,IAAP;AACD,GA3EY,EA4EZG,GA5EY,CA4ER,GA5EQ,EA4EH,GA5EG,EA4EE,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACb,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,EAAb;AACAX,IAAAA,KAAK,CAACe,MAAN,CAAa,GAAb;AACA,WAAO,CAACvB,GAAD,EAAWF,IAAX;AACL,YAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;;AACA,UAAI9B,KAAJ,EAAW;AACT,eAAO0B,IAAI,CAAC1B,KAAD,CAAX;AACD;;AACD,aAAO,KAAP;AACD,KAND;AAOD,GAtFY,EAuFZyB,EAvFY,CAuFT,GAvFS,EAuFJ,CAvFI,EAwFZI,GAxFY,CAwFR,GAxFQ,EAwFH,EAxFG,EAwFC,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACZ,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA7B,IAAAA,cAAc,CAAC8B,IAAD,CAAd;AAEA,WAAO,CAAClB,GAAD,EAAWF,IAAX;AACL,YAAM0B,aAAa,GAAGzB,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAlC;AACA,YAAMG,cAAc,GAAG5B,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAApC;;AACA,UAAIpB,KAAK,CAACC,OAAN,CAAc6C,aAAd,CAAJ,EAAkC;AAChC,eAAO,CAAC,CAACA,aAAa,CAACE,IAAd,CAAmBC,IAAI,IAAIA,IAAI,KAAKF,cAApC,CAAT;AACD;;AACD,aAAOD,aAAa,KAAKC,cAAzB;AACD,KAPD;AAQD,GApGY,EAqGZJ,GArGY,CAqGR,IArGQ,EAqGF,EArGE,EAqGE,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACb,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA7B,IAAAA,cAAc,CAAC8B,IAAD,CAAd;AAEA,WAAO,CAAClB,GAAD,EAAWF,IAAX;AACL,aAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,KAA4BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAAhD;AACD,KAFD;AAGD,GA5GY,EA6GZuB,GA7GY,CA6GR,GA7GQ,EA6GH,EA7GG,EA6GC,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACZ,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA7B,IAAAA,cAAc,CAAC8B,IAAD,CAAd;AAEA,WAAO,CAAClB,GAAD,EAAWF,IAAX;AACL,aAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,GAA0BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA9C;AACD,KAFD;AAGD,GApHY,EAqHZuB,GArHY,CAqHR,IArHQ,EAqHF,EArHE,EAqHE,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACb,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA7B,IAAAA,cAAc,CAAC8B,IAAD,CAAd;AAEA,WAAO,CAAClB,GAAD,EAAWF,IAAX;AACL,aAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,IAA2BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA/C;AACD,KAFD;AAGD,GA5HY,EA6HZuB,GA7HY,CA6HR,GA7HQ,EA6HH,EA7HG,EA6HC,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACZ,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA7B,IAAAA,cAAc,CAAC8B,IAAD,CAAd;AAEA,WAAO,CAAClB,GAAD,EAAWF,IAAX;AACL,aAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,GAA0BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA9C;AACD,KAFD;AAGD,GApIY,EAqIZuB,GArIY,CAqIR,IArIQ,EAqIF,EArIE,EAqIE,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACb,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA7B,IAAAA,cAAc,CAAC8B,IAAD,CAAd;AAEA,WAAO,CAAClB,GAAD,EAAWF,IAAX;AACL,aAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,IAA2BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA/C;AACD,KAFD;AAGD,GA5IY,EA6IZuB,GA7IY,CA6IR,IA7IQ,EA6IF,EA7IE,EA6IE,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACb,QAAIW,MAAM,GAAG,KAAb;;AAGA,UAAMC,IAAI,GAAGrB,KAAK,CAACsB,IAAN,EAAb;;AACA,QAAID,IAAI,CAACvC,IAAL,KAAc,KAAlB,EAAyB;AACvBsC,MAAAA,MAAM,GAAG,IAAT;AACApB,MAAAA,KAAK,CAACqB,IAAN;AACD;;AAED,UAAMX,IAAI,GAAQT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAlB;;AAEA,YAAQC,IAAR;AACE,WAAK,OAAL;AAAc;AACZ,cAAI,CAACU,MAAL,EAAa;AACX,mBAAO,CAAC5B,GAAD,EAAWF,IAAX;AACL,oBAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;AACA,qBAAOjC,GAAG,CAAC0C,MAAJ,KAAe,CAAtB;AACD,aAHD;AAID,WALD,MAKO;AACL,mBAAO,CAAC/B,GAAD,EAAWF,IAAX;AACL,oBAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;AACA,qBAAOjC,GAAG,CAAC0C,MAAJ,KAAe,CAAtB;AACD,aAHD;AAID;AACF;;AACD,WAAK,SAAL;AAAgB;AACd,cAAI,CAACH,MAAL,EAAa;AACX,mBAAO,CAAC5B,GAAD,EAAWF,IAAX;AACL,oBAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;AACA,qBAAOjC,GAAG,KAAKzC,SAAf;AACD,aAHD;AAID,WALD,MAKO;AACL,mBAAO,CAACoD,GAAD,EAAWF,IAAX;AACL,oBAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;AACA,qBAAOjC,GAAG,KAAKzC,SAAf;AACD,aAHD;AAID;AACF;;AACD;AAAS;AACP,gBAAM,IAAIoF,KAAJ,CAAU,YAAV,CAAN;AACD;AA7BH;AA+BD,GAxLY,EAyLZX,GAzLY,CAyLR,IAzLQ,EAyLF,EAzLE,EAyLE,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACb,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA,WAAO,CAACjB,GAAD,EAAWF,IAAX;AACL,UAAImC,OAAO,GAAGf,IAAd;;AACA,UAAI,CAACxC,KAAK,CAACC,OAAN,CAAcsD,OAAd,CAAL,EAA6B;AAC3BA,QAAAA,OAAO,GAAG,CAACf,IAAD,CAAV;AACD;;AAED,YAAMgB,QAAQ,GAAGD,OAAO,CAACpD,GAAR,CAAaC,IAAD,IAC3Be,aAAa,CAACf,IAAD,EAAOgB,IAAP,CADE,CAAjB;AAGA,aAAOoC,QAAQ,CAACC,QAAT,CAAkBpC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA9B,CAAP;AACD,KAVD;AAWD,GAtMY,EAuMZD,GAvMY,CAuMR,qBAvMQ,EAuMe,EAvMf,EAuMmB,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AAC9B,UAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;AAAb,KAAb,CAAb;AACA7B,IAAAA,cAAc,CAAC8B,IAAD,CAAd;AAEA,WAAO,CAAClB,GAAD,EAAWF,IAAX;AACL,YAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;AACA,YAAMc,KAAK,GAAGvC,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA3B;;AAEA,UAAI,OAAON,KAAP,IAAgB,QAApB,EAA8B;AAC5B,cAAM,IAAInB,cAAJ,eACUiD,IAAI,CAAC9B,0CADf,CAAN;AAGD;;AACD,aAAOA,KAAK,CAAC6C,WAAN,OAAwBD,KAAK,CAACC,WAAN,EAA/B;AACD,KAVD;AAWD,GAtNY,EAuNZhB,GAvNY,CAuNR,QAvNQ,EAuNE,EAvNF,EAuNM,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACjB,UAAM3B,IAAI,GAAGkB,KAAK,CAACqB,IAAN,EAAb;;AAEA,QAAIvC,IAAI,CAACrC,KAAL,KAAe,QAAnB,EAA6B;AAC3B,YAAM,IAAIoB,cAAJ,mBACciB,IAAI,CAACrC,yBADnB,CAAN;AAGD;;AAEDuD,IAAAA,KAAK,CAACe,MAAN,CAAa,GAAb;AACA,UAAML,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;AAAEC,MAAAA,SAAS,EAAE,CAAC,GAAD;AAAb,KAAb,CAAb;AAEA,WAAO,CAACpB,GAAD,EAAWF,IAAX;AACL,YAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;AACA,UAAI,CAAC9B,KAAL,EAAY,OAAO,KAAP;AAEZ,YAAM8C,WAAW,GAAGzC,aAAa,CAACqB,IAAI,CAAC,CAAD,CAAL,EAAUpB,IAAV,CAAjC;AACA,YAAMyC,QAAQ,GAAGpF,iBAAiB,CAChC;AACEW,QAAAA,SAAS,EAAE0B,KAAK,CAAC,CAAD,CADlB;AAEE5B,QAAAA,QAAQ,EAAE4B,KAAK,CAAC,CAAD;AAFjB,OADgC,EAKhC;AACE1B,QAAAA,SAAS,EAAE+B,aAAa,CAACqB,IAAI,CAAC,CAAD,CAAL,EAAUpB,IAAV,CAD1B;AAEElC,QAAAA,QAAQ,EAAEiC,aAAa,CAACqB,IAAI,CAAC,CAAD,CAAL,EAAUpB,IAAV;AAFzB,OALgC,CAAlC;AAUA,aAAOyC,QAAQ,IAAID,WAAnB;AACD,KAhBD;AAiBD,GApPY,EAqPZjB,GArPY,CAqPR,UArPQ,EAqPI,EArPJ,EAqPQ,CAAC;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAD;AACnB,UAAMuB,OAAO,GAAGhC,KAAK,CAACqB,IAAN,EAAhB;AAEA,QAAIX,IAAI,GAAGT,MAAM,CAACU,KAAP,EAAX;;AACA,QAAI,CAACzC,KAAK,CAACC,OAAN,CAAcuC,IAAd,CAAL,EAA0B;AACxBA,MAAAA,IAAI,GAAG,CAACA,IAAD,CAAP;AACD;;AAED,WAAO,CAAClB,GAAD,EAAWF,IAAX;AACL,YAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;;AAEA,UAAI,CAAC5C,KAAK,CAACC,OAAN,CAAca,KAAd,CAAL,EAA2B;AACzB,cAAM,IAAInB,cAAJ,eACUiD,IAAI,CAAC9B,0CADf,CAAN;AAGD;;AAED,YAAMiD,KAAK,GAAGvB,IAAI,CAACrC,GAAL,CAAUC,IAAD,IAAkBe,aAAa,CAACf,IAAD,EAAOgB,IAAP,CAAxC,CAAd;;AACA,UAAI0C,OAAO,CAAClD,IAAR,KAAiB,KAArB,EAA4B;AAC1B,eAAOmD,KAAK,CAACvD,KAAN,CAAaJ,IAAD,IAAeU,KAAK,CAAC2C,QAAN,CAAerD,IAAf,CAA3B,CAAP;AACD,OAFD,MAEO;AACL,eAAO2D,KAAK,CAACf,IAAN,CAAY5C,IAAD,IAAeU,KAAK,CAAC2C,QAAN,CAAerD,IAAf,CAA1B,CAAP;AACD;AACF,KAfD;AAgBD,GA7QY,EA+QZ4D,KA/QY,EAAf;AAiRA,QAAMjG,MAAM,GAAGgE,MAAM,CAACU,KAAP,EAAf;;AAEA,MAAI,OAAO1E,MAAP,KAAkB,UAAtB,EAAkC;AAChC,UAAMkG,KAAK,GAAGlE,SAAS,CAACmE,KAAV,CAAgB,IAAhB,CAAd;AACA,UAAMhD,MAAM,GAAG+C,KAAK,CAACA,KAAK,CAACZ,MAAN,GAAe,CAAhB,CAAL,CAAwBA,MAAvC;AAEA,UAAM,IAAI1D,cAAJ,sEACJ,uDAAA,aAEYsE,KAAK,CAACZ,kBAAkBnC,SAHhC,CAAN;AAKD;;AACD,SAAOnD,MAAP;AACD,CAhSD;;MClJaoG,2BAAgDb;AAI3D1D,EAAAA,YAAYwE,MAASC,UAAU,GAAG;AAChC,UAAMD,IAAI,CAACvE,OAAX;AACA,SAAKuE,IAAL,GAAYA,IAAZ;AACA,SAAKC,UAAL,GAAkBA,UAAU,IAAI,GAAhC;AACD;;;;MCwCmBC;AAwDtB,MAAaC,wBAAwBD;AAArC1E,EAAAA;;AACY,kBAAA,GAEN,EAFM;AAIA,iBAAA,GAEN,EAFM;;AA0NV,mBAAA,GAAc4E,UAAD;AACX,UAAI,CAAC,KAAKC,QAAL,CAAcD,UAAd,CAAL,EAAgC;AAC9B,aAAKC,QAAL,CAAcD,UAAd,IAA4B;AAC1BE,UAAAA,GAAG,EAAEF,UADqB;AAE1BG,UAAAA,IAAI,EAAE,EAFoB;AAG1BC,UAAAA,SAAS,EAAE,EAHe;AAI1BC,UAAAA,UAAU,EAAE,EAJc;AAK1BC,UAAAA,SAAS,EAAE,EALe;AAM1BC,UAAAA,SAAS,EAAE,0BANe;AAO1BC,UAAAA,UAAU,EAAE,SAPc;AAQ1BC,UAAAA,KAAK,EAAE;AACLC,YAAAA,6BAA6B,EAAE,KAD1B;AAELC,YAAAA,+BAA+B,EAAE;AAF5B,WARmB;AAY1BC,UAAAA,QAAQ,EAAE;AAAEC,YAAAA,OAAO,EAAE,KAAX;AAAkBC,YAAAA,uBAAuB,EAAE;AAA3C,WAZgB;AAa1BC,UAAAA,qBAAqB,EAAErH,SAbG;AAc1BsH,UAAAA,aAAa,EAAEtH,SAdW;AAe1BuH,UAAAA,cAAc,EAAE;AACdC,YAAAA,QAAQ,EAAE;AACRC,cAAAA,MAAM,EAAE;AADA,aADI;AAIdC,YAAAA,MAAM,EAAE;AACND,cAAAA,MAAM,EAAE;AADF;AAJM,WAfU;AAuB1BE,UAAAA,OAAO,EAAE;AAvBiB,SAA5B;AAyBD;;AACD,aAAO,KAAKpB,QAAL,CAAcD,UAAd,CAAP;AACD,KA7BD;;AA+BA,oBAAA,GAAesB,OAAD;AACZ,WAAKrB,QAAL,CAAcqB,OAAO,CAACpB,GAAtB,IAA6BoB,OAA7B;AACA,aAAOA,OAAP;AACD,KAHD;;AAKA,mBAAA,GAActB,UAAD;AACX,aAAO,KAAKuB,UAAL,CAAgBvB,UAAhB,CAAP;AACD,KAFD;;AAIQ,eAAA,GAAS,CACfA,UADe,EAEflD,GAFe,EAGfxD,MAHe;AAKf,UAAI,CAACA,MAAL,EAAa,OAAOwD,GAAP;AACb,YAAM0E,MAAM,GAAGC,IAAI,CAACxD,KAAL,CAAWwD,IAAI,CAACC,SAAL,CAAe5E,GAAf,CAAX,CAAf;;AACA,UAAItB,KAAK,CAACC,OAAN,CAAcnC,MAAd,CAAJ,EAA2B;AACzBA,QAAAA,MAAM,CAACqI,OAAP,CAAe3G,CAAC;AACd,eAAK4G,gBAAL,CAAsB5B,UAAtB,EAAkCwB,MAAlC,EAA0CxG,CAA1C;AACD,SAFD;AAGD,OAJD,MAIO;AACL,aAAK4G,gBAAL,CAAsB5B,UAAtB,EAAkCwB,MAAlC,EAA0ClI,MAA1C;AACD;;AACD,aAAOkI,MAAP;AACD,KAfO;;AAiBA,yBAAA,GAAmB,CAACxB,UAAD,EAAqBlD,GAArB,EAA+B+E,MAA/B;AACzB,YAAMC,MAAM,GAAGzI,iBAAiB,CAACwI,MAAD,CAAhC;;AAEA,UAAI,CAACC,MAAM,CAACrI,KAAZ,EAAmB;AACjB,cAAMsI,SAAS,GAAGjF,GAAG,CAACgF,MAAM,CAACtI,OAAR,CAArB;;AACA,YAAIuI,SAAS,KAAKrI,SAAlB,EAA6B;AAC3B;AACD;;AACD,aAAKsI,iBAAL,CAAuBhC,UAAvB,EAAmC+B,SAAnC,EAA8CD,MAAM,CAACnI,IAArD;AACD,OAND,MAMO,IAAImI,MAAM,CAACrI,KAAP,KAAiB,GAArB,EAA0B;AAC/B,cAAMsI,SAAS,GAAGjF,GAAG,CAACgF,MAAM,CAACtI,OAAR,CAArB;AACA,YAAIuI,SAAS,KAAKrI,SAAd,IAA2B,CAAC8B,KAAK,CAACC,OAAN,CAAcsG,SAAd,CAAhC,EAA0D;AAC1DA,QAAAA,SAAS,CAACJ,OAAV,CAAmBM,OAAD;AAChB,eAAKD,iBAAL,CAAuBhC,UAAvB,EAAmCiC,OAAnC,EAA4CH,MAAM,CAACnI,IAAnD;AACD,SAFD;AAGD,OANM,MAMA;AACL,cAAMoI,SAAS,GAAGjF,GAAG,CAACgF,MAAM,CAACtI,OAAR,CAAH,CAAoBsI,MAAM,CAACrI,KAA3B,CAAlB;AACA,YAAIsI,SAAS,KAAKrI,SAAlB,EAA6B;;AAC7B,aAAKsI,iBAAL,CAAuBhC,UAAvB,EAAmC+B,SAAnC,EAA8CD,MAAM,CAACnI,IAArD;AACD;AACF,KApBO;AAgDT;;AA/TSuI,EAAAA,aAAa,CAAClC,UAAD;AACnB,SAAKuB,UAAL,CAAgBvB,UAAhB;AAEA,QAAImC,cAAc,GAAG,KAAKC,SAAL,CAAepC,UAAf,CAArB;;AACA,QAAI,CAACmC,cAAL,EAAqB;AACnBA,MAAAA,cAAc,GAAG,KAAKC,SAAL,CAAepC,UAAf,IAA6B;AAC5CqC,QAAAA,IAAI,EAAE,IAAIC,GAAJ,EADsC;AAE5C,yBAAiB,IAAIA,GAAJ,EAF2B;AAG5CC,QAAAA,QAAQ,EAAE,IAAID,GAAJ,EAHkC;AAI5CE,QAAAA,OAAO,EAAE,IAAIF,GAAJ,EAJmC;AAK5CG,QAAAA,QAAQ,EAAE,IAAIH,GAAJ,EALkC;AAM5C,0BAAkB,IAAIA,GAAJ,EAN0B;AAO5C,yBAAiB,IAAIA,GAAJ,EAP2B;AAQ5CI,QAAAA,SAAS,EAAE,IAAIJ,GAAJ,EARiC;AAS5C,2BAAmB,IAAIA,GAAJ,EATyB;AAU5C,8BAAsB,IAAIA,GAAJ,EAVsB;AAW5CK,QAAAA,KAAK,EAAE,IAAIL,GAAJ,EAXqC;AAY5CM,QAAAA,OAAO,EAAE,IAAIN,GAAJ,EAZmC;AAa5C,wBAAgB,IAAIA,GAAJ,EAb4B;AAc5CO,QAAAA,OAAO,EAAE,IAAIP,GAAJ,EAdmC;AAe5C,6BAAqB,IAAIA,GAAJ,EAfuB;AAgB5C,8BAAsB,IAAIA,GAAJ,EAhBsB;AAiB5C,2BAAmB,IAAIA,GAAJ,EAjByB;AAkB5CQ,QAAAA,KAAK,EAAE,IAAIR,GAAJ,EAlBqC;AAmB5CS,QAAAA,KAAK,EAAE,IAAIT,GAAJ,EAnBqC;AAoB5C,yBAAiB,IAAIA,GAAJ,EApB2B;AAqB5CU,QAAAA,YAAY,EAAE,IAAIV,GAAJ,EArB8B;AAsB5C,wBAAgB,IAAIA,GAAJ,EAtB4B;AAuB5ClG,QAAAA,IAAI,EAAE,IAAIkG,GAAJ,EAvBsC;AAwB5CW,QAAAA,IAAI,EAAE,IAAIX,GAAJ;AAxBsC,OAA9C;AA0BD;;AACD,WAAOH,cAAP;AACD;;AAEDe,EAAAA,KAAK;AACH,SAAK,MAAM,GAAGf,cAAH,CAAX,IAAiCpF,MAAM,CAACoG,OAAP,CAAe,KAAKf,SAApB,CAAjC,EAAiE;AAC/D,WAAK,MAAM,GAAG9F,KAAH,CAAX,IAAwBS,MAAM,CAACoG,OAAP,CAAehB,cAAf,CAAxB,EAAwD;AACtD7F,QAAAA,KAAK,QAAL,YAAAA,KAAK,CAAE4G,KAAP;AACD;AACF;AACF;;AAEDE,EAAAA,aAAa,CAACC,MAAD;;AAEbC,EAAAA,GAAG,CAACtD,UAAD,EAAqBqD,MAArB;AACD,UAAMN,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAd;;AACA,QAAIN,KAAJ,EAAW;AACT,aAAOvH,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,CAAP;AACD;;AACD,WAAO,EAAP;AACD;;AAEDwG,EAAAA,GAAG,CACDxD,UADC,EAEDqD,MAFC,EAGDvG,GAHC,EAIDgF,SAAoB,EAJnB;;;AAMD,kCAAKI,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,4CAAwCI,GAAxC,CAA4C3G,GAAG,CAAC4G,EAAhD,EAAoD5G,GAApD;AAEA,UAAM6G,QAAQ,GAAG,KAAKC,GAAL,CAAS5D,UAAT,EAAqBqD,MAArB,EAA6BvG,GAAG,CAAC4G,EAAjC,EAAqC5B,MAArC,CAAjB;AACA+B,IAAAA,MAAM,CAACF,QAAD,sBAA+BN,kBAAkBvG,GAAG,CAAC4G,gBAArD,CAAN;AACA,WAAOC,QAAP;AACD;;AAEDC,EAAAA,GAAG,CACD5D,UADC,EAEDqD,MAFC,EAGDK,EAHC,EAID5B,SAAoB,EAJnB;;;AAMD,UAAM6B,QAAQ,6BAAG,KAAKzB,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAH,qBAAG,uBAAwCO,GAAxC,CAA4CF,EAA5C,CAAjB;;AACA,QAAIC,QAAJ,EAAc;AACZ,aAAO,KAAK9B,MAAL,CACL7B,UADK,EAEL2D,QAFK,EAGL7B,MAAM,CAACD,MAHF,CAAP;AAKD;;AACD,WAAO,IAAP;AACD;;AAEDiC,EAAAA,QAAQ,CACN9D,UADM,EAENqD,MAFM,EAGNnD,GAHM,EAIN4B,SAAoB,EAJd;AAMN,UAAMiB,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAd;;AACA,QAAI,CAACN,KAAL,EAAY;AACV,YAAM,IAAIjE,KAAJ,CAAU,SAAV,CAAN;AACD;;AAED,UAAMsD,SAAS,GAAU5G,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,CAAzB;AACA,UAAM2G,QAAQ,GAAGvB,SAAS,CAAC2B,IAAV,CAAeC,CAAC,IAAIA,CAAC,CAAC9D,GAAF,KAAUA,GAA9B,CAAjB;;AACA,QAAIyD,QAAJ,EAAc;AACZ,aAAO,KAAK9B,MAAL,CACL7B,UADK,EAEL2D,QAFK,EAGL7B,MAAM,CAACD,MAHF,CAAP;AAKD;;AACD,WAAO,IAAP;AACD;;AAEDoC,EAAAA,MAAM,CACJjE,UADI,EAEJqD,MAFI,EAGJK,EAHI,EAIJ5B,SAAoB,EAJhB;AAMJ,UAAM6B,QAAQ,GAAG,KAAKC,GAAL,CAAS5D,UAAT,EAAqBqD,MAArB,EAA6BK,EAA7B,CAAjB;;AAEA,QAAIC,QAAJ,EAAc;AAAA;;AACZ,qCAAKzB,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,6CAAwCY,MAAxC,CAA+CP,EAA/C;AACA,aAAO,KAAK7B,MAAL,CACL7B,UADK,EAEL2D,QAFK,EAGL7B,MAAM,CAACD,MAHF,CAAP;AAKD;;AACD,WAAO8B,QAAP;AACD;;AAEDO,EAAAA,KAAK,CACHlE,UADG,EAEHqD,MAFG,EAGHvB,MAHG;AAKH,UAAMiB,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAd;;AACA,QAAI,CAACN,KAAL,EAAY;AACV,YAAM,IAAIjE,KAAJ,CAAU,SAAV,CAAN;AACD;;AAED,QAAIsD,SAAS,GAAG5G,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,CAAhB;;AAGA,QAAI8E,MAAM,CAACqC,KAAX,EAAkB;AAChB,UAAI;AACF,cAAMC,UAAU,GAAG9I,oBAAoB,CAACwG,MAAM,CAACqC,KAAR,CAAvC;AACA/B,QAAAA,SAAS,GAAGA,SAAS,CAACnF,MAAV,CAAiB0G,QAAQ,IAAIS,UAAU,CAACT,QAAD,EAAW,EAAX,CAAvC,CAAZ;AACD,OAHD,CAGE,OAAOU,GAAP,EAAY;AACZ,cAAM,IAAI1E,kBAAJ,CACJ;AACE2E,UAAAA,IAAI,EAAE,cADR;AAEEjJ,UAAAA,OAAO,EAAGgJ,GAAW,CAAChJ;AAFxB,SADI,EAKJ,GALI,CAAN;AAOD;AACF;;;AAGD,UAAMkJ,cAAc,GAAGnC,SAAS,CAACvD,MAAjC;;AAGA,UAAM2F,MAAM,GAAG1C,MAAM,CAAC0C,MAAP,IAAiB,CAAhC;AACA,UAAMC,KAAK,GAAG3C,MAAM,CAAC2C,KAAP,IAAgB,EAA9B;AACArC,IAAAA,SAAS,GAAGA,SAAS,CAACsC,KAAV,CAAgBF,MAAhB,EAAwBA,MAAM,GAAGC,KAAjC,CAAZ;;AAGA,QAAI3C,MAAM,CAACD,MAAP,KAAkBnI,SAAtB,EAAiC;AAC/B0I,MAAAA,SAAS,GAAGA,SAAS,CAACzG,GAAV,CAAcgI,QAAQ;AAChC,eAAO,KAAK9B,MAAL,CAAY7B,UAAZ,EAAwB2D,QAAxB,EAAkC7B,MAAM,CAACD,MAAzC,CAAP;AACD,OAFW,CAAZ;AAGD;;AAED,WAAO;AACL8C,MAAAA,KAAK,EAAEJ,cADF;AAELK,MAAAA,KAAK,EAAExC,SAAS,CAACvD,MAFZ;AAGL2F,MAAAA,MAAM,EAAEA,MAHH;AAILC,MAAAA,KAAK,EAAEA,KAJF;AAKLI,MAAAA,OAAO,EAAEzC;AALJ,KAAP;AAOD;;AAED0C,EAAAA,uBAAuB,CACrB9E,UADqB,EAErB+E,UAFqB;AAIrB,QAAIA,UAAU,CAACrB,EAAf,EAAmB;AACjB,YAAMC,QAAQ,GAAG,KAAKC,GAAL,CAAS5D,UAAT,EAAqB+E,UAAU,CAAC1B,MAAhC,EAAwC0B,UAAU,CAACrB,EAAnD,CAAjB;;AACA,UAAIC,QAAJ,EAAc;AACZ,eAAOA,QAAP;AACD;;AACDqB,MAAAA,OAAO,CAACC,KAAR,kCACmCF,UAAU,CAAC1B,cAAc0B,UAAU,CAACrB,IADvE;AAGA,aAAOhK,SAAP;AACD;;AAED,QAAIqL,UAAU,CAAC7E,GAAf,EAAoB;AAClB,YAAM6C,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+B+E,UAAU,CAAC1B,MAA1C,CAAd;;AAEA,UAAIN,KAAJ,EAAW;AACT;AACA;AACA,cAAMY,QAAQ,GAAGnI,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,EAA2B+G,IAA3B;AAEfmB,QAAAA,CAAC,IAAIA,CAAC,CAAChF,GAAF,KAAU6E,UAAU,CAAC7E,GAFX,CAAjB;;AAIA,YAAIyD,QAAJ,EAAc;AACZ,iBAAOA,QAAP;AACD;AACF,OAVD,MAUO;AACL,cAAM,IAAI7E,KAAJ,wCACmCiG,UAAU,CAAC1B,QAD9C,CAAN;AAGD;AACF;;AACD,WAAO3J,SAAP;AACD;;AAiFOsI,EAAAA,iBAAiB,CACvBhC,UADuB,EAEvB+B,SAFuB,EAGvBF,MAHuB;AAKvB,QAAIE,SAAS,KAAKrI,SAAlB,EAA6B;;AAE7B,QACEqI,SAAS,CAACsB,MAAV,KAAqB3J,SAArB,KACCqI,SAAS,CAAC2B,EAAV,KAAiBhK,SAAjB,IAA8BqI,SAAS,CAAC7B,GAAV,KAAkBxG,SADjD,CADF,EAGE;AACA;AACAqI,MAAAA,SAAS,CAACjF,GAAV,GAAgB,KAAKgI,uBAAL,CAA6B9E,UAA7B,EAAyC;AACvDqD,QAAAA,MAAM,EAAEtB,SAAS,CAACsB,MADqC;AAEvDK,QAAAA,EAAE,EAAE3B,SAAS,CAAC2B,EAFyC;AAGvDxD,QAAAA,GAAG,EAAE6B,SAAS,CAAC7B;AAHwC,OAAzC,CAAhB;;AAKA,UAAI2B,MAAJ,EAAY;AACV,aAAKD,gBAAL,CAAsB5B,UAAtB,EAAkC+B,SAAS,CAACjF,GAA5C,EAAiD+E,MAAjD;AACD;AACF,KAbD,MAaO;AACL,UAAIA,MAAJ,EAAY;AACV,aAAKD,gBAAL,CAAsB5B,UAAtB,EAAkC+B,SAAlC,EAA6CF,MAA7C;AACD;AACF;AACF;;;;MC1aUsD;AAIX/J,EAAAA,YAAYgK,WAAoB;AAHhC,eAAA,GAAkB,EAAlB;AACA,iBAAA,GAAoB,IAApB;AAGE,SAAKA,QAAL,GAAgBA,QAAhB;AACD;;AAEDC,EAAAA,cAAc,CAACC,QAAD,EAAmBC,YAAnB,EAAyCC,KAAzC;AACZ,UAAMnI,KAAK,GAAU;AACnBoI,MAAAA,YAAY,EAAEC,kBAAW,CAAC,EAAD,CAAX,CAAgBC,QAAhB,CAAyB,QAAzB,CADK;AAEnBC,MAAAA,UAAU,EAAE,QAFO;AAGnBC,MAAAA,UAAU,EAAE,MAHO;AAInBL,MAAAA,KAAK,EAAEA,KAAK,IAAI;AAJG,KAArB;AAMA,SAAKM,MAAL,CAAYC,IAAZ,CAAiB1I,KAAjB;AACA,WAAOA,KAAP;AACD;;AAED2I,EAAAA,aAAa,CAAC3I,KAAD;AACX,QAAI,CAAC,KAAK+H,QAAV,EAAoB,OAAO,IAAP;AAEpB,UAAMa,UAAU,GAAG,KAAKH,MAAL,CAAY/B,IAAZ,CAAiBpG,CAAC,IAAIA,CAAC,CAAC8H,YAAF,KAAmBpI,KAAzC,CAAnB;;AACA,QAAI4I,UAAJ,EAAgB;AACd,aAAO,IAAP;AACD;;AACD,WAAO,KAAP;AACD;;;;AClCI,MAAMC,cAAc,GAAIC,OAAD;AAC5B,QAAMC,UAAU,GAAGD,OAAO,CAACE,MAAR,CAAe,eAAf,CAAnB;AACA,QAAMtM,KAAK,GAAGqM,UAAH,oBAAGA,UAAU,CAAErM,KAAZ,CAAkB,4BAAlB,CAAd;;AACA,MAAIA,KAAJ,EAAW;AAAA;;AACT,4BAAOA,KAAK,CAAC8D,MAAb,qBAAO,cAAcR,KAArB;AACD;;AACD,SAAO3D,SAAP;AACD,CAPM;;MCUM4M;AAGXlL,EAAAA,YAAYmL;AACV,SAAKxD,KAAL,GAAa,IAAIoC,WAAJ,CAAgBoB,OAAO,CAACnB,QAAxB,CAAb;AACD;;AAEDoB,EAAAA,YAAY;AACV,UAAMC,MAAM,GAAGC,gBAAO,CAACC,MAAR,EAAf;AACAF,IAAAA,MAAM,CAACG,GAAP,CAAWC,UAAU,CAACC,UAAX,CAAsB;AAAEC,MAAAA,QAAQ,EAAE;AAAZ,KAAtB,CAAX;AACAN,IAAAA,MAAM,CAACO,IAAP,CAAY,QAAZ,EAAsB,KAAKC,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAAtB;AACA,WAAOT,MAAP;AACD;;AAEDU,EAAAA,gBAAgB;AACd,WAAO,OAAOhB,OAAP,EAAyBiB,QAAzB,EAA6CzI,IAA7C;AACL,YAAMtB,KAAK,GAAG6I,cAAc,CAACC,OAAD,CAA5B;;AACA,UAAI,CAAC9I,KAAL,EAAY;AACVsB,QAAAA,IAAI,CACF,IAAIgB,kBAAJ,CACE;AACE2E,UAAAA,IAAI,EAAE,eADR;AAEEjJ,UAAAA,OAAO,EACL;AAHJ,SADF,EAME,GANF,CADE,CAAJ;AAUD;;AAED,UAAI,CAACgC,KAAD,IAAU,CAAC,KAAK0F,KAAL,CAAWiD,aAAX,CAAyB3I,KAAzB,CAAf,EAAgD;AAC9CsB,QAAAA,IAAI,CACF,IAAIgB,kBAAJ,CACE;AACE2E,UAAAA,IAAI,EAAE,eADR;AAEEjJ,UAAAA,OAAO,EAAE;AAFX,SADF,EAKE,GALF,CADE,CAAJ;AASD;;AAEDsD,MAAAA,IAAI;AACL,KA5BD;AA6BD;;AACiB,QAAZsI,YAAY,CAACd,OAAD,EAAmBiB,QAAnB,EAAuCzI,IAAvC;AAChB,UAAMyH,UAAU,GAAGD,OAAO,CAACE,MAAR,CAAe,eAAf,CAAnB;;AACA,QAAI,CAACD,UAAL,EAAiB;AACf,aAAOzH,IAAI,CACT,IAAIgB,kBAAJ,CACE;AACE2E,QAAAA,IAAI,EAAE,gBADR;AAEEjJ,QAAAA,OAAO,EACL;AAHJ,OADF,EAME,GANF,CADS,CAAX;AAUD;;AACD,UAAMgM,WAAW,GAAGC,IAAI,CAACrJ,KAAL,CAAWmI,UAAX,CAApB;;AACA,QAAI,CAACiB,WAAL,EAAkB;AAChB,aAAO1I,IAAI,CACT,IAAIgB,kBAAJ,CACE;AACE2E,QAAAA,IAAI,EAAE,gBADR;AAEEjJ,QAAAA,OAAO,EACL;AAHJ,OADF,EAME,GANF,CADS,CAAX;AAUD;;AAED,UAAMkM,SAAS,GAAGpB,OAAO,CAACjC,KAAR,CAAcsD,UAAd,IAA4BrB,OAAO,CAACsB,IAAR,CAAaD,UAA3D;;AACA,QAAI,CAACD,SAAL,EAAgB;AACd,aAAO5I,IAAI,CACT,IAAIgB,kBAAJ,CACE;AACE2E,QAAAA,IAAI,EAAE,iBADR;AAEEjJ,QAAAA,OAAO,EAAE;AAFX,OADF,EAKE,GALF,CADS,CAAX;AASD;;AAED,QAAIkM,SAAS,KAAK,oBAAlB,EAAwC;AAAA;;AACtC,YAAMlK,KAAK,GAAG,KAAK0F,KAAL,CAAWsC,cAAX,CACZgC,WAAW,CAAClH,IADA,EAEZkH,WAAW,CAACK,IAFA,0BAGZvB,OAAO,CAACjC,KAAR,CAAcsB,KAHF,qBAGZ,qBAAqBG,QAArB,EAHY,CAAd;AAKA,aAAOyB,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BtK,KAA1B,CAAP;AACD,KAPD,MAOO;AACL,aAAOsB,IAAI,CACT,IAAIgB,kBAAJ,CACE;AACE2E,QAAAA,IAAI,EAAE,wBADR;AAEEjJ,QAAAA,OAAO,wDAAwDkM;AAFjE,OADF,EAKE,GALF,CADS,CAAX;AASD;AACF;;;;MClHUK,yBAAyB,GAAG;AACvC,SAAO;AACLlE,IAAAA,EAAE,EAAEmE,OAAM,EADL;AAELtH,IAAAA,SAAS,EAAE,IAAIuH,IAAJ,GAAWC,WAAX,EAFN;AAGLC,IAAAA,cAAc,EAAE,IAAIF,IAAJ,GAAWC,WAAX,EAHX;AAIL1G,IAAAA,OAAO,EAAE;AAJJ,GAAP;AAMD,CAPM;;MCEM4G;AAKX7M,EAAAA,YACE4E,YACAkI,UACAC;AAEA,SAAKnI,UAAL,GAAkBA,UAAlB;AACA,SAAKoI,QAAL,GAAgBD,OAAhB;AACA,SAAKE,SAAL,GAAiBH,QAAjB;AACD;;AAED1E,EAAAA,GAAG,CACDH,MADC,EAEDM,QAFC;AAID;AACA,QAAIN,MAAM,KAAK,eAAf,EAAgCA,MAAM,GAAG,oBAAT;AAEhC,UAAMiF,YAAY,GAAGjF,MAArB;AAEA,UAAMkF,OAAO,GAAG,KAAKF,SAAL,CAAeC,YAAf,CAAhB;;AACA,QAAIC,OAAJ,EAAa;AACX,WAAKH,QAAL,CAAc5E,GAAd,CAAkB,KAAKxD,UAAvB,EAAmCsI,YAAnC,EAAiD,EAC/C,GAAGV,yBAAyB,EADmB;AAE/C,WAAGjE;AAF4C,OAAjD;AAID,KALD,MAKO;AACL,YAAM,IAAI7E,KAAJ,gBAAyBuE,4BAAzB,CAAN;AACD;AACF;;AAEDO,EAAAA,GAAG,CACDP,MADC,EAEDK,EAFC;AAID,WAAO,KAAK0E,QAAL,CAAcxE,GAAd,CACL,KAAK5D,UADA,EAELqD,MAFK,EAGLK,EAHK,EAIL,EAJK,CAAP;AAMD;;;AAGD8E,EAAAA,aAAa,CACXnF,MADW;AAGX,UAAMkF,OAAO,GAAG,KAAKF,SAAL,CAAehF,MAAf,CAAhB;;AACA,QAAIkF,OAAO,KAAK7O,SAAhB,EAA2B;AACzB,aAAO6O,OAAO,CAACE,UAAf;AACD;;AACD,UAAM,IAAI3J,KAAJ,CAAU,oBAAV,CAAN;AACD;;;;AC5DI,MAAM4J,WAAW,GAAIC,OAAD;AACzB,QAAMC,YAAY,GAAG,CAAC,QAAD,EAAW,MAAX,EAAmB,eAAnB,CAArB;AACA,QAAMrP,MAAM,GAA2B,EAAvC;AAEAwD,EAAAA,MAAM,CAACoG,OAAP,CAAewF,OAAf,EAAwBhH,OAAxB,CAAgC,CAAC,CAACzB,GAAD,EAAM5D,KAAN,CAAD;AAC9B,QAAIsM,YAAY,CAAC3J,QAAb,CAAsBiB,GAAG,CAACf,WAAJ,EAAtB,CAAJ,EAA8C;AAC5C5F,MAAAA,MAAM,CAAC2G,GAAD,CAAN,GAAc5D,KAAd;AACD;AACF,GAJD;AAMA,SAAO/C,MAAP;AACD,CAXM;;ACAA,MAAMsP,oBAAoB,GAAG,6CAA7B;AACP,AAAO,MAAMC,qBAAqB,GAAG,8CAA9B;;MCIuBC;AAM5B3N,EAAAA,YAAY4N;AAFZ,yBAAA,GAAmB,GAAnB;AAGE,SAAKC,cAAL,CAAoBD,MAApB;AACD;;AAEDE,EAAAA,WAAW,CAACzC,MAAD;;AAEXwC,EAAAA,cAAc,CAACD,MAAD;AACZ,UAAMG,QAAQ,GAAG,KAAKC,WAAL,EAAjB;AACA,UAAM3C,MAAM,GAAGE,cAAM,CAAC;AAAE0C,MAAAA,WAAW,EAAE;AAAf,KAAD,CAArB;;AAGA,SAAKH,WAAL,CAAiBzC,MAAjB;AAEAA,IAAAA,MAAM,CAAC7C,GAAP,CAAW,GAAX,EAAgB,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAAhB;AACAT,IAAAA,MAAM,CAAC7C,GAAP,CAAW,WAAX,EAAwB,KAAK0F,UAAL,CAAgBpC,IAAhB,CAAqB,IAArB,CAAxB;;AACAT,IAAAA,MAAM,CAAC7C,GAAP,CAAW,MAAX,EAAmB,KAAK2F,SAAL,CAAerC,IAAf,CAAoB,IAApB,CAAnB;AAEAT,IAAAA,MAAM,CAACxC,MAAP,CAAc,WAAd,EAA2B,KAAKuF,aAAL,CAAmBtC,IAAnB,CAAwB,IAAxB,CAA3B;AACAT,IAAAA,MAAM,CAACxC,MAAP,CAAc,MAAd,EAAsB,KAAKwF,YAAL,CAAkBvC,IAAlB,CAAuB,IAAvB,CAAtB;AAEAT,IAAAA,MAAM,CAACO,IAAP,CAAY,GAAZ,EAAiB,KAAKA,IAAL,CAAUE,IAAV,CAAe,IAAf,CAAjB;AACAT,IAAAA,MAAM,CAACO,IAAP,CAAY,WAAZ,EAAyB,KAAK0C,WAAL,CAAiBxC,IAAjB,CAAsB,IAAtB,CAAzB;AACAT,IAAAA,MAAM,CAACO,IAAP,CAAY,MAAZ,EAAoB,KAAK2C,UAAL,CAAgBzC,IAAhB,CAAqB,IAArB,CAApB;AAEA8B,IAAAA,MAAM,CAACpC,GAAP,KAAeuC,UAAf,EAA2B1C,MAA3B;AACD;;AAED7C,EAAAA,GAAG,CAACuC,OAAD,EAAmBiB,QAAnB;AACD,UAAM7N,MAAM,GAAG,KAAKkP,UAAL,CAAgBvE,KAAhB,CAAsBiC,OAAO,CAACrE,MAAR,CAAe9B,UAArC,EAAiD;AAC9D6B,MAAAA,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B,CADsD;AAE9DsC,MAAAA,KAAK,EAAE,KAAKyF,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcC,KAA/B;AAFuD,KAAjD,CAAf;AAIA,WAAOiD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;AACD;;AAEDgQ,EAAAA,SAAS,CAACpD,OAAD,EAAmBiB,QAAnB;AACP,UAAM7N,MAAM,GAAG,KAAKsQ,aAAL,CAAmB1D,OAAnB,EAA4BA,OAAO,CAACrE,MAAR,CAAe,IAAf,CAA5B,CAAf;;AACA,QAAI,CAACvI,MAAL,EAAa;AACX,aAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,EAAP;AACD;;AACD3C,IAAAA,OAAO,CAAC8E,GAAR,CAAYrI,IAAI,CAACC,SAAL,CAAenI,MAAf,EAAuB,IAAvB,EAA6B,CAA7B,CAAZ;AACA,WAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;AACD;;AAED+P,EAAAA,UAAU,CAACnD,OAAD,EAAmBiB,QAAnB;AACR,UAAM7N,MAAM,GAAG,KAAKkP,UAAL,CAAgB3E,QAAhB,CACbqC,OAAO,CAACrE,MAAR,CAAe9B,UADF,EAEbmG,OAAO,CAACrE,MAAR,CAAe,KAAf,CAFa,EAGb;AAAED,MAAAA,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B;AAAV,KAHa,CAAf;AAKA,QAAI,CAACtI,MAAL,EAAa,OAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,EAAP;AACb,WAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;AACD;;AAEDkQ,EAAAA,YAAY,CAACtD,OAAD,EAAmBiB,QAAnB;AACV,UAAM7N,MAAM,GAAG,KAAKkP,UAAL,CAAgBxE,MAAhB,CACbkC,OAAO,CAACrE,MAAR,CAAe9B,UADF,EAEbmG,OAAO,CAACrE,MAAR,CAAe,IAAf,CAFa,EAGb;AACED,MAAAA,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B;AADV,KAHa,CAAf;;AAOA,QAAI,CAACtI,MAAL,EAAa;AACX,aAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;AACD;;AACD,WAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;AACD;;AAEDiQ,EAAAA,aAAa,CAACrD,OAAD,EAAmBiB,QAAnB;AACX,WAAOA,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,iBAA1B,CAAP;AACD;;AAEDX,EAAAA,IAAI,CAACb,OAAD,EAAmBiB,QAAnB;AACF,UAAM2C,KAAK,GAAG5D,OAAO,CAACsB,IAAtB;AACA,UAAM9D,QAAQ,GAAG,KAAK8E,UAAL,CAAgBuB,MAAhB,CAAuB7D,OAAO,CAACrE,MAAR,CAAe9B,UAAtC,EAAkD+J,KAAlD,CAAjB;;AACA,UAAMxQ,MAAM,GAAG,KAAKsQ,aAAL,CAAmB1D,OAAnB,EAA4BxC,QAAQ,CAACD,EAArC,CAAf;;AACA,WAAO0D,QAAQ,CAACjG,MAAT,CAAgB,KAAK8I,gBAArB,EAAuCtC,IAAvC,CAA4CpO,MAA5C,CAAP;AACD;;AAEDoQ,EAAAA,UAAU,CAACxD,OAAD,EAAmBiB,QAAnB;AACR,UAAM8C,aAAa,GAAW/D,OAAO,CAACsB,IAAtC;AACA,UAAM9D,QAAQ,GAAG,KAAK8E,UAAL,CAAgB7E,GAAhB,CACfuC,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe,IAAf,CAFe,CAAjB;;AAIA,QAAI,CAAC6B,QAAL,EAAe;AACb,aAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;AACD;;AAED,QAAIhE,QAAQ,CAACtC,OAAT,KAAqB6I,aAAa,CAAC7I,OAAvC,EAAgD;AAC9C,aAAO+F,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,yBAA1B,CAAP;AACD;;AAED,UAAMwC,eAAe,GAAG,KAAK1B,UAAL,CAAgB2B,oBAAhB,CACtBjE,OAAO,CAACrE,MAAR,CAAe9B,UADO,EAEtB2D,QAFsB,EAGtBuG,aAAa,CAACG,OAHQ,CAAxB;;AAMA,UAAM9Q,MAAM,GAAG,KAAKsQ,aAAL,CAAmB1D,OAAnB,EAA4BgE,eAAe,CAACzG,EAA5C,CAAf;;AACA,WAAO0D,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;AACD;;AAEDmQ,EAAAA,WAAW,CAACvD,OAAD,EAAmBiB,QAAnB;AACT,WAAOA,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,iBAA1B,CAAP;AACD;;AAESkC,EAAAA,aAAa,CAAC1D,OAAD,EAAmBmE,UAAnB;AACrB,UAAM/Q,MAAM,GAAG,KAAKkP,UAAL,CAAgB7E,GAAhB,CAAoBuC,OAAO,CAACrE,MAAR,CAAe9B,UAAnC,EAA+CsK,UAA/C,EAA2D;AACxEzI,MAAAA,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B;AADgE,KAA3D,CAAf;AAGA,WAAOtI,MAAP;AACD;;;AAGOqQ,EAAAA,WAAW,CACjBtN,KADiB;AAGjB,QAAId,KAAK,CAACC,OAAN,CAAca,KAAd,CAAJ,EAA0B;AACxB;AACA,aAAOA,KAAP;AACD,KAHD,MAGO,IAAIA,KAAK,KAAK5C,SAAd,EAAyB;AAC9B,aAAO,IAAI4C,OAAJ,CAAP;AACD;;AACD,WAAO5C,SAAP;AACD;;;;ACjII,MAAM6Q,2BAA2B,GAAG,CACzC5G,QADyC,EAEzC6G,eAFyC;AAIzC,MAAI7G,QAAQ,CAACtC,OAAT,KAAqBmJ,eAAzB,EAA0C;AAE1C,QAAMzF,UAAU,GAAkBpB,QAAS,CAACD,EAAV,GACfC,QAAS,CAACD,EADK,GAEpBC,QAAS,CAACzD,GAFxB;AAIA,QAAM,IAAIP,kBAAJ,CACJ;AACEtE,IAAAA,OAAO,YAAY0J,+DAA+DyF,6BAA6B7G,QAAQ,CAACtC,UAD1H;AAEEoJ,IAAAA,cAAc,EAAE9G,QAAQ,CAACtC,OAF3B;AAGEiD,IAAAA,IAAI,EAAE;AAHR,GADI,EAMJ,GANI,CAAN;AAQD,CAlBM;;MCeeoG;AAMpBtP,EAAAA,YAAY+M;AAJF,gBAAA,GAEN,EAFM;AAKR,SAAKC,QAAL,GAAgBD,OAAhB;AACD;;AAIDiC,EAAAA,oBAAoB,CAClBpK,UADkB,EAElB2D,QAFkB,EAGlB0G,OAHkB;AAKlB;AACA,UAAMM,gBAAgB,GAAGlJ,IAAI,CAACxD,KAAL,CAAWwD,IAAI,CAACC,SAAL,CAAeiC,QAAf,CAAX,CAAzB;AAEA0G,IAAAA,OAAO,CAAC1I,OAAR,CAAgBiJ,MAAM;AACpB,YAAMC,UAAU,GAAG,KAAKR,OAAL,CAAaO,MAAM,CAACA,MAApB,CAAnB;;AACA,UAAI,CAACC,UAAL,EAAiB;AACf7F,QAAAA,OAAO,CAACC,KAAR,0CAAuD2F,MAAM,CAACA,QAA9D;AACA;AACD;;AACDC,MAAAA,UAAU,CAAC7K,UAAD,EAAa2K,gBAAb,EAA+BC,MAA/B,CAAV;AACD,KAPD;;AASA,QAAI,CAACE,SAAS,CAACH,gBAAD,EAAmBhH,QAAnB,CAAd,EAA4C;AAC1C,WAAKoH,IAAL,CAAU/K,UAAV,EAAsB2K,gBAAtB;AACD;;AACD,WAAOA,gBAAP;AACD;;;AAGH,MAAsBK,mCAAmCN;AAIvDtP,EAAAA,YAAY+M;AACV,UAAMA,OAAN;;AACA,SAAKC,QAAL,CAAchF,aAAd,CAA4B,KAAK6H,SAAL,EAA5B;AACD;;AAED/G,EAAAA,KAAK,CAAClE,UAAD,EAAqB8B,SAAsB,EAA3C;AACH,WAAO,KAAKsG,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;AACvDpJ,MAAAA,MAAM,EAAEC,MAAM,CAACD,MADwC;AAEvDsC,MAAAA,KAAK,EAAErC,MAAM,CAACqC;AAFyC,KAAlD,CAAP;AAID;;AAEDP,EAAAA,GAAG,CACD5D,UADC,EAED0D,EAFC,EAGD5B,SAAoB,EAHnB;AAKD,WAAO,KAAKsG,QAAL,CAAcxE,GAAd,CAAkB5D,UAAlB,EAA8B,KAAKiL,SAAL,EAA9B,EAAgDvH,EAAhD,EAAoD5B,MAApD,CAAP;AACD;;AAEDgC,EAAAA,QAAQ,CACN9D,UADM,EAENE,GAFM,EAGN4B,SAAoB,EAHd;AAKN,WAAO,KAAKsG,QAAL,CAActE,QAAd,CAAuB9D,UAAvB,EAAmC,KAAKiL,SAAL,EAAnC,EAAqD/K,GAArD,EAA0D4B,MAA1D,CAAP;AACD;;AAEDmC,EAAAA,MAAM,CACJjE,UADI,EAEJ0D,EAFI,EAGJ5B,SAAoB,EAHhB;AAKJ,WAAO,KAAKsG,QAAL,CAAcnE,MAAd,CAAqBjE,UAArB,EAAiC,KAAKiL,SAAL,EAAjC,EAAmDvH,EAAnD,EAAuD5B,MAAvD,CAAP;AACD;;AAEDiJ,EAAAA,IAAI,CAAC/K,UAAD,EAAqB2D,QAArB;AACF,UAAMuH,OAAO,GAAG,KAAKtH,GAAL,CAAS5D,UAAT,EAAqB2D,QAAQ,CAACD,EAA9B,CAAhB;;AAEA,QAAIwH,OAAJ,EAAa;AACXX,MAAAA,2BAA2B,CAACW,OAAD,EAAUvH,QAAQ,CAACtC,OAAnB,CAA3B;AACD,KAFD,MAEO;AACL,UAAIsC,QAAQ,CAACtC,OAAT,KAAqB,CAAzB,EAA4B;AAC1B,cAAM,IAAI1B,kBAAJ,CACJ;AACE2E,UAAAA,IAAI,EAAE,kBADR;AAEEjJ,UAAAA,OAAO,EAAE;AAFX,SADI,EAKJ,GALI,CAAN;AAOD;AACF;;;AAGDsI,IAAAA,QAAQ,CAACtC,OAAT,IAAoB,CAApB;;AACA,SAAK+G,QAAL,CAAc5E,GAAd,CAAkBxD,UAAlB,EAA8B,KAAKiL,SAAL,EAA9B,EAAgDtH,QAAhD;AACD;;;;ACrGI,MAAMwH,kBAAkB,GAAG,CAChCpB,KADgC,EAEhC/J,UAFgC,EAGhCmI,OAHgC;AAKhC,MAAI,CAAC4B,KAAL,EAAY,OAAOrQ,SAAP;AACZ,MAAI,CAACqQ,KAAK,CAAC3N,IAAX,EAAiB,OAAO1C,SAAP;AACjB,MAAI,CAACqQ,KAAK,CAAC3N,IAAN,CAAWiH,MAAhB,EAAwB,OAAO3J,SAAP;AACxB,MAAI,CAACqQ,KAAK,CAACqB,MAAX,EAAmB,OAAO1R,SAAP;AAEnB,QAAM2R,YAAY,GAAGlD,OAAO,CAACrD,uBAAR,CACnB9E,UADmB,EAEnB+J,KAAK,CAAC3N,IAFa,CAArB;;AAKA,MAAI,CAACiP,YAAL,EAAmB;AACjB,UAAM,IAAIvM,KAAJ,aACQiL,KAAK,CAAC3N,IAAN,CAAWiH,mBAAmB0G,KAAK,CAAC3N,IAAN,CAAWsH,aAAaqG,KAAK,CAAC3N,IAAN,CAAW8D,KADzE,CAAN;AAGD;;AAED,SAAO;AACL9D,IAAAA,IAAI,EAAE;AACJiH,MAAAA,MAAM,EAAE0G,KAAK,CAAC3N,IAAN,CAAWiH,MADf;AAEJK,MAAAA,EAAE,EAAE2H,YAAY,CAAC3H;AAFb,KADD;AAKL0H,IAAAA,MAAM,EAAErB,KAAK,CAACqB;AALT,GAAP;AAOD,CA5BM;AA8BP,AAAO,MAAME,WAAW,GAAIvB,KAAD;AACzB,SAAO;AACLrG,IAAAA,EAAE,EAAEmE,OAAM,EADL;AAELvL,IAAAA,KAAK,EAAEiP,gBAAgB,CAACxB,KAAK,CAACzN,KAAP;AAFlB,GAAP;AAID,CALM;AAOP,AAAO,MAAMiP,gBAAgB,GAAIjP,KAAD;AAC9B,SAAO;AACLF,IAAAA,IAAI,EAAE,eADD;AAELoP,IAAAA,cAAc,EAAE,CAFX;AAGL,OAAGlP;AAHE,GAAP;AAKD,CANM;AAQP,AAAO,MAAMmP,qBAAqB,GAAG,CACnCC,GADmC,EAEnC1L,UAFmC,EAGnCmI,OAHmC;AAKnC,MAAI,CAACuD,GAAL,EAAU,OAAOhS,SAAP;AACV,QAAMiK,QAAQ,GAAGwE,OAAO,CAACrD,uBAAR,CAAgC9E,UAAhC,EAA4C0L,GAA5C,CAAjB;;AACA,MAAI,CAAC/H,QAAL,EAAe;AACb,UAAM,IAAI7E,KAAJ,CAAU,eAAV,CAAN;AACD;;AAED,QAAMiE,KAAK,GAAGY,QAAd;AACA,SAAO;AACLN,IAAAA,MAAM,EAAE,OADH;AAELnD,IAAAA,GAAG,EAAE6C,KAAK,CAAC7C;AAFN,GAAP;AAID,CAhBM;AAkBP,AAAO,MAAMyL,kCAAkC,GAAG,CAChDC,kBADgD,EAEhD5L,UAFgD,EAGhDmI,OAHgD;AAKhD,QAAMxE,QAAQ,GAAGwE,OAAO,CAACrD,uBAAR,CACf9E,UADe,EAEf4L,kBAFe,CAAjB;AAIA,MAAI,CAACjI,QAAL,EACE,MAAM,IAAI7E,KAAJ,kBACa8M,kBAAkB,CAACvI,kBAAkBuI,kBAAkB,CAAClI,cAAckI,kBAAkB,CAAC1L,eADtG,CAAN;AAIF,SAAQ;AACNmD,IAAAA,MAAM,EAAEuI,kBAAkB,CAACvI,MADrB;AAENK,IAAAA,EAAE,EAAEC,QAAF,oBAAEA,QAAQ,CAAED;AAFR,GAAR;AAID,CAlBM;;MCzDMmI,+BAA+Bb;AAA5C5P,EAAAA;;AAuDE,gBAAA,GASI;AACF0Q,MAAAA,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;AAAEzD,QAAAA;AAAF,OAHM;AAKNyD,QAAAA,QAAQ,CAACzD,GAAT,GAAeA,GAAf;AACD,OAPC;AAQF6L,MAAAA,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;AAAEqI,QAAAA;AAAF,OAHc;AAKdrI,QAAAA,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;AACD,OAdC;AAeFC,MAAAA,YAAY,EAAE,CACZjM,UADY,EAEZ2D,QAFY,EAGZ;AAAEuI,QAAAA;AAAF,OAHY;AAKZvI,QAAAA,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;AACD,OArBC;AAsBFC,MAAAA,aAAa,EAAE,CACbnM,UADa,EAEb2D,QAFa,EAGb;AAAEyI,QAAAA;AAAF,OAHa;AAKbzI,QAAAA,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;AACD,OA5BC;AA6BFC,MAAAA,oBAAoB,EAAE,CACpBrM,UADoB,EAEpB2D,QAFoB,EAGpB;AAAEuI,QAAAA,SAAF;AAAaE,QAAAA;AAAb,OAHoB;AAKpBzI,QAAAA,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;AACAvI,QAAAA,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;AACD,OApCC;AAqCFE,MAAAA,eAAe,EAAE,CACftM,UADe,EAEf2D,QAFe,EAGf;AAAE4I,QAAAA;AAAF,OAHe;AAKf5I,QAAAA,QAAQ,CAAC4I,SAAT,GAAqBA,SAArB;AACD,OA3CC;AA4CFC,MAAAA,cAAc,EAAE,CACdxM,UADc,EAEd2D,QAFc,EAGd;AAAE8I,QAAAA;AAAF,OAHc;AAKd9I,QAAAA,QAAQ,CAAC8I,QAAT,GAAoBA,QAApB;AACD;AAlDC,KATJ;AA6DD;;AAnHCxB,EAAAA,SAAS;AACP,WAAO,eAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;AAE7B1H,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAFkB;AAG7B8L,MAAAA,WAAW,EAAEjC,KAAK,CAACiC,WAHU;AAI7BU,MAAAA,aAAa,EAAE3C,KAAK,CAAC2C,aAJQ;AAK7BD,MAAAA,QAAQ,EAAE1C,KAAK,CAAC0C,QAAN,IAAkB,KALC;AAM7BtM,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IANiB;AAO7BwM,MAAAA,UAAU,EAAE,EAPiB;AAQ7B7Q,MAAAA,MAAM,EAAEiO,KAAK,CAACjO,MARe;AAS7B8Q,MAAAA,oBAAoB,EAAE7C,KAAK,CAAC6C,oBAAN,IAA8B,KATvB;AAU7BL,MAAAA,SAAS,EAAExC,KAAK,CAACwC,SAVY;AAW7BM,MAAAA,YAAY,EAAE9C,KAAK,CAAC8C,YAAN,IAAsB,UAXP;AAY7BX,MAAAA,SAAS,EAAEnC,KAAK,CAACmC,SAZY;AAa7BE,MAAAA,UAAU,EAAErC,KAAK,CAACqC,UAbW;AAc7B9P,MAAAA,KAAK,EAAE,KAAKwQ,mBAAL,CAAyB/C,KAAK,CAACzN,KAA/B;AAdsB,KAA/B;AAgBA,SAAKyO,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;AAEOmJ,EAAAA,mBAAmB,CAACxQ,KAAD;AACzB,YAAQA,KAAK,CAACF,IAAd;AACE,WAAK,UAAL;AAAiB;AACf,iBAAO;AACLA,YAAAA,IAAI,EAAE,UADD;AAEL2Q,YAAAA,KAAK,EAAEzQ,KAAK,CAACyQ,KAAN,CAAYpR,GAAZ,CAAgB4P,gBAAhB;AAFF,WAAP;AAID;;AACD,WAAK,OAAL;AAAc;AACZ,iBAAO;AACLnP,YAAAA,IAAI,EAAE,OADD;AAEL2Q,YAAAA,KAAK,EAAEzQ,KAAK,CAACyQ,KAAN,CAAYpR,GAAZ,CAAgB4P,gBAAhB;AAFF,WAAP;AAID;;AACD,WAAK,cAAL;AAAqB;AACnB,iBAAO,EACL,GAAGjP;AADE,WAAP;AAGD;;AACD,WAAK,UAAL;AAAiB;AACf,iBAAO,EACL,GAAGA;AADE,WAAP;AAGD;AAtBH;;AAyBA,WAAOA,KAAP;AACD;;;;MCvEU0Q,4BAA4BjE;AAGvC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIoD,sBAAJ,CAA2B1D,OAA3B,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,gBAAP;AACD;;;;MCWU6D,uBAAuBjC;AAApC5P,EAAAA;;AAwCE,gBAAA,GAAU;AACR8R,MAAAA,WAAW,EAAE,CACXlN,UADW,EAEX2D,QAFW,EAGX;AAAEwJ,QAAAA,SAAF;AAAaC,QAAAA,SAAb;AAAwBC,QAAAA,GAAxB;AAA6BC,QAAAA,QAAQ,GAAG;AAAxC,OAHW;AAKX,YAAIzK,OAAO,GAAmB,IAA9B;AACA,YAAI0K,OAAJ;;AAEA,YAAIJ,SAAS,IAAIC,SAAjB,EAA4B;AAC1B;AACAvK,UAAAA,OAAO,GAAG,KAAKuF,QAAL,CAAcxE,GAAd,CAAkB5D,UAAlB,EAA8B,SAA9B,EAAyCmN,SAAzC,EAAoD,EAApD,CAAV;AACD,SAHD,MAGO,IAAIE,GAAJ,EAAS;AACd;AACA,gBAAMG,KAAK,GAAG,KAAKpF,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,SAAhC,EAA2C;AACvDmE,YAAAA,KAAK,EAAE,0CACoCkJ,+CAA+CA,SADnF;AADgD,WAA3C,CAAd;;AAMA,cAAIG,KAAK,CAAC7I,KAAN,KAAgB,CAApB,EAAuB;AACrB9B,YAAAA,OAAO,GAAG2K,KAAK,CAAC3I,OAAN,CAAc,CAAd,CAAV;AACD;AACF;;AAED,YAAI,CAAChC,OAAL,EAAc;AACZ;AACA,gBAAM,IAAIlD,kBAAJ,CAAqC;AACzC2E,YAAAA,IAAI,EAAE,SADmC;AAEzCjJ,YAAAA,OAAO,EAAEgS,GAAG,+CACoCA,iBADpC,yBAEcF;AAJe,WAArC,CAAN;AAMD;;;AAGDI,QAAAA,OAAO,GAAG,CACR1K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BwC,aADnB,EAER,GAAG7K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2ByC,QAFtB,EAGR5J,IAHQ,CAGH6J,CAAC;AACN,cAAIP,GAAJ,EAAS,OAAOO,CAAC,CAACP,GAAF,KAAUA,GAAjB;AACT,cAAID,SAAJ,EAAe,OAAOQ,CAAC,CAAClK,EAAF,KAAS0J,SAAhB;AACf,iBAAO,KAAP;AACD,SAPS,CAAV;;AASA,YAAI,CAACG,OAAL,EAAc;AACZ;AACA,gBAAM,IAAI5N,kBAAJ,CAAqC;AACzC2E,YAAAA,IAAI,EAAE,SADmC;AAEzCjJ,YAAAA,OAAO,EAAEgS,GAAG,0BACeA,qBAAqBxK,OAAO,CAACa,gBAD5C,yBAEc0J,2BAA2BvK,OAAO,CAACa;AAJpB,WAArC,CAAN;AAMD;;AAED,cAAMmK,YAAY,GAAGlK,QAAQ,CAACmK,SAAT,CAAmBtP,IAAnB,CACnBoP,CAAC;AAAA;;AAAA,iBAAIA,CAAC,CAACT,SAAF,kBAAgBtK,OAAhB,qBAAgB,SAASa,EAAzB,KAA+BkK,CAAC,CAACL,OAAF,CAAU7J,EAAV,kBAAiB6J,OAAjB,qBAAiB,SAAS7J,EAA1B,CAAnC;AAAA,SADkB,CAArB;;AAGA,YAAImK,YAAJ,EAAkB;AAChB;AACAlK,UAAAA,QAAQ,CAACmK,SAAT,CAAmBnS,GAAnB,CAAuBiS,CAAC;;;AACtB,gBAAIA,CAAC,CAACT,SAAF,mBAAgBtK,OAAhB,qBAAgB,UAASa,EAAzB,KAA+BkK,CAAC,CAACL,OAAF,CAAU7J,EAAV,mBAAiB6J,OAAjB,qBAAiB,UAAS7J,EAA1B,CAAnC,EAAiE;AAC/DkK,cAAAA,CAAC,CAACN,QAAF,IAAcA,QAAd;AACAM,cAAAA,CAAC,CAACG,UAAF,CAAaC,UAAb,GAA0BC,2BAA2B,CAACL,CAAD,CAArD;AACD;;AACD,mBAAOA,CAAP;AACD,WAND;AAOD,SATD,MASO;AAAA;;AACL;AACA,cAAI,qBAACL,OAAO,CAACW,MAAT,aAAC,gBAAgBrP,MAAjB,CAAJ,EAA6B;AAC3B,kBAAM,IAAIc,kBAAJ,CAAqC;AACzC2E,cAAAA,IAAI,EAAE,SADmC;AAEzCjJ,cAAAA,OAAO,wBAAwB8R;AAFU,aAArC,CAAN;AAID;;AAED,gBAAMgB,KAAK,GAAGZ,OAAO,CAACW,MAAR,CAAe,CAAf,CAAd;AACAvK,UAAAA,QAAQ,CAACmK,SAAT,CAAmB/H,IAAnB,CAAwB;AACtBrC,YAAAA,EAAE,EAAEmE,OAAM,EADY;AAEtBsF,YAAAA,SAAS,EAAEtK,OAAO,CAACa,EAFG;AAGtB0K,YAAAA,UAAU,EAAEvL,OAAO,CAAC3C,GAHE;AAItBC,YAAAA,IAAI,EAAE0C,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2B/K,IAJX;AAKtBkO,YAAAA,WAAW,EAAExL,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BoD,IALlB;AAMtBC,YAAAA,WAAW,EAAE1L,OAAO,CAAC0L,WANC;AAOtBhB,YAAAA,OAPsB;AAQtBY,YAAAA,KAAK,EAAEA,KARe;AAStBJ,YAAAA,UAAU,EAAE,EACV,GAAGI,KAAK,CAAC7R,KADC;AAEV0R,cAAAA,UAAU,EAAEG,KAAK,CAAC7R,KAAN,CAAY0R,UAAZ,GAAyBV;AAF3B,aATU;AAatBA,YAAAA,QAbsB;AActBkB,YAAAA,0BAA0B,EAAE,EAdN;AAetBC,YAAAA,YAAY,EAAE,UAfQ;AAgBtBC,YAAAA,SAAS,EAAE,UAhBW;AAiBtB5L,YAAAA,KAAK,EAAE;AAjBe,WAAxB;AAmBD;;;AAGDa,QAAAA,QAAQ,CAACoK,UAAT,CAAoBC,UAApB,GAAiCW,uBAAuB,CAAChL,QAAD,CAAxD;AACD,OApGO;AAqGRiL,MAAAA,cAAc,EAAE,CACd5O,UADc,EAEd2D,QAFc,EAGd;AAAEkL,QAAAA,UAAF;AAAcvB,QAAAA;AAAd,OAHc;AAKd,cAAMwB,QAAQ,GAAGnL,QAAQ,CAACmK,SAAT,CAAmB/J,IAAnB,CAAwB6J,CAAC,IAAIA,CAAC,CAAClK,EAAF,KAASmL,UAAtC,CAAjB;;AACA,YAAI,CAACC,QAAL,EAAe;AACb;AACA,gBAAM,IAAInP,kBAAJ,CAAqC;AACzC2E,YAAAA,IAAI,EAAE,SADmC;AAEzCjJ,YAAAA,OAAO,0BAA0BwT;AAFQ,WAArC,CAAN;AAID;;AAED,cAAME,YAAY,GAAG,CAACzB,QAAD,IAAaA,QAAQ,IAAIwB,QAAQ,CAACxB,QAAvD;;AACA,YAAIyB,YAAJ,EAAkB;AAChB;AACApL,UAAAA,QAAQ,CAACmK,SAAT,GAAqBnK,QAAQ,CAACmK,SAAT,CAAmB7Q,MAAnB,CAA0B2Q,CAAC,IAAIA,CAAC,CAAClK,EAAF,KAASmL,UAAxC,CAArB;AACD,SAHD,MAGO;AACL;AACAlL,UAAAA,QAAQ,CAACmK,SAAT,CAAmBnS,GAAnB,CAAuBiS,CAAC;AACtB,gBAAIA,CAAC,CAAClK,EAAF,KAASmL,UAAT,IAAuBvB,QAA3B,EAAqC;AACnCM,cAAAA,CAAC,CAACN,QAAF,IAAcA,QAAd;AACAM,cAAAA,CAAC,CAACG,UAAF,CAAaC,UAAb,GAA0BC,2BAA2B,CAACL,CAAD,CAArD;AACD;;AACD,mBAAOA,CAAP;AACD,WAND;AAOD;;;AAGDjK,QAAAA,QAAQ,CAACoK,UAAT,CAAoBC,UAApB,GAAiCW,uBAAuB,CAAChL,QAAD,CAAxD;AACD,OApIO;AAqIRqL,MAAAA,iBAAiB,EAAE,CACjBhP,UADiB,EAEjB2D,QAFiB,EAGjB;AAAEsL,QAAAA;AAAF,OAHiB;AAKjBtL,QAAAA,QAAQ,CAACuL,cAAT,GAA0BD,OAA1B;AACD,OA3IO;AA4IRE,MAAAA,UAAU,EAAE,CACVnP,UADU,EAEV2D,QAFU,EAGV;AAAEyL,QAAAA;AAAF,OAHU;AAKVzL,QAAAA,QAAQ,CAACyL,OAAT,GAAmBA,OAAnB;AACD,OAlJO;AAmJRC,MAAAA,gBAAgB,EAAE,CAChBrP,UADgB,EAEhB2D,QAFgB,EAGhB;AAAE2L,QAAAA;AAAF,OAHgB;AAKhB3L,QAAAA,QAAQ,CAAC4L,aAAT,GAAyBD,KAAzB;AACD,OAzJO;AA0JRE,MAAAA,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;AAAExD,QAAAA,IAAF;AAAQ7D,QAAAA;AAAR,OAHc;AAKd,YAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;AACpB,gBAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;AACD;;AACD6E,QAAAA,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;AACD,OAnKO;AAoKRoT,MAAAA,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;AAAEvH,QAAAA,IAAF;AAAQgP,QAAAA;AAAR,OAHa;AAKb,YAAI,CAAChP,IAAL,EAAW;AACTuH,UAAAA,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;AACD,SAFD,MAEO;AACL,gBAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;AAIA,cAAI,CAACuT,YAAL,EAAmB;AACjB,kBAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;AACD;;AAEDuH,UAAAA,QAAQ,CAAC8L,MAAT,GAAkB;AAChBrT,YAAAA,IAAI,EAAE;AACJiH,cAAAA,MAAM,EAAE,MADJ;AAEJK,cAAAA,EAAE,EAAEiM,YAAY,CAACjM;AAFb,aADU;AAKhB0H,YAAAA,MAAM,EAAEA,MAAM,IAAI;AALF,WAAlB;AAOD;AACF,OA5LO;AA6LRwE,MAAAA,SAAS,EAAE,CACT5P,UADS,EAET2D,QAFS,EAGT;AAAEkM,QAAAA;AAAF,OAHS;AAKTlM,QAAAA,QAAQ,CAACkM,MAAT,GAAkBA,MAAlB;AACD,OAnMO;AAoMRC,MAAAA,kBAAkB,EAAE,CAClB9P,UADkB,EAElB2D,QAFkB,EAGlB;AAAEsL,QAAAA;AAAF,OAHkB;AAKlBtL,QAAAA,QAAQ,CAACoM,eAAT,GAA2Bd,OAA3B;AACD;AA1MO,KAAV;AA4MD;;AAnPChE,EAAAA,SAAS;AACP,WAAO,MAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAS,EACrB,GAAGiE,yBAAyB,EADP;AAErBoI,MAAAA,SAAS,EAAE,QAFU;AAGrBlC,MAAAA,SAAS,EAAE,EAHU;AAIrBmC,MAAAA,eAAe,EAAE,EAJI;AAKrBlC,MAAAA,UAAU,EAAE;AACV3R,QAAAA,IAAI,EAAE,eADI;AAEV4R,QAAAA,UAAU,EAAE,CAFF;AAGVkC,QAAAA,YAAY,EAAEnG,KAAK,CAACoG,QAHV;AAIV3E,QAAAA,cAAc,EAAE;AAJN,OALS;AAWrB4E,MAAAA,OAAO,EAAE,UAXY;AAYrBC,MAAAA,eAAe,EAAE,UAZI;AAarBC,MAAAA,kBAAkB,EAAE,eAbC;AAcrBC,MAAAA,YAAY,EAAE,EAdO;AAerBC,MAAAA,MAAM,EAAE,UAfa;AAgBrBf,MAAAA,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;AAhBL,KAAvB;AAkBA,SAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;AAED8M,EAAAA,aAAa,CAACzQ,UAAD;AACX;AACA,UAAM6E,OAAO,GAAG,KAAKuD,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;AAChE9G,MAAAA,KAAK,EAAE,qBAAA;AADyD,KAAlD,CAAhB;;AAGA,QAAIU,OAAO,CAACF,KAAR,GAAgB,CAApB,EAAuB;AACrB,aAAOE,OAAO,CAACA,OAAR,CAAgB,CAAhB,CAAP;AACD;;AAED;AACD;;;;AAgNH,MAAMoJ,2BAA2B,GAAIa,QAAD,IAClCA,QAAQ,CAACX,KAAT,CAAgB7R,KAAhB,CAAsB0R,UAAtB,GAAmCc,QAAQ,CAACxB,QAD9C;;AAGA,MAAMqB,uBAAuB,GAAItM,IAAD,IAC9BA,IAAI,CAACyL,SAAL,CAAe4C,MAAf,CAAsB,CAACC,GAAD,EAAM/U,IAAN,KAAe+U,GAAG,GAAG/U,IAAI,CAACmS,UAAL,CAAgBC,UAA3D,EAAuE,CAAvE,CADF;;MC9Qa4C,oBAAoB7H;AAG/B3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIwE,cAAJ,CAAmB9E,OAAnB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,OAAP;AACD;;;;MCKUyH,2BAA2B7F;AAAxC5P,EAAAA;;AAiCE,gBAAA,GAAU;AACR0V,MAAAA,eAAe,EAAE,CACf9Q,UADe,EAEf2D,QAFe,EAGf;AAAEoN,QAAAA,OAAF;AAAWC,QAAAA,QAAX;AAAqB7Q,QAAAA;AAArB,OAHe;;;AAKf,4BAAAwD,QAAQ,CAACsN,MAAT,sCAAiBtP,OAAjB,CAAyBuP,KAAK;AAC5B,cAAIH,OAAO,IAAIA,OAAO,IAAIG,KAAK,CAACxN,EAAhC,EAAoC;AAClCwN,YAAAA,KAAK,CAAC/Q,IAAN,GAAaA,IAAb;AACD;;AACD,cAAI6Q,QAAQ,IAAIA,QAAQ,IAAIE,KAAK,CAAChR,GAAlC,EAAuC;AACrCgR,YAAAA,KAAK,CAAC/Q,IAAN,GAAaA,IAAb;AACD;AACF,SAPD;AAQD,OAdO;AAeRgR,MAAAA,UAAU,EAAE,CACVnR,UADU,EAEV2D,QAFU,EAGV;AAAE2K,QAAAA;AAAF,OAHU;AAKV3K,QAAAA,QAAQ,CAAC2K,IAAT,GAAgBA,IAAhB;AACD,OArBO;AAsBRxC,MAAAA,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;AAAEzD,QAAAA;AAAF,OAHM;AAKNyD,QAAAA,QAAQ,CAACzD,GAAT,GAAeA,GAAf;AACD,OA5BO;AA6BRkR,MAAAA,mBAAmB,EAAE,CACnBpR,UADmB,EAEnB2D,QAFmB,EAGnB;AAAEoN,QAAAA,OAAF;AAAWC,QAAAA,QAAX;AAAqBhF,QAAAA;AAArB,OAHmB;;;AAKnB,6BAAArI,QAAQ,CAACsN,MAAT,uCAAiBtP,OAAjB,CAAyBuP,KAAK;AAC5B,cAAIH,OAAO,IAAIA,OAAO,IAAIG,KAAK,CAACxN,EAAhC,EAAoC;AAClCwN,YAAAA,KAAK,CAAClF,WAAN,GAAoBA,WAApB;AACD;;AACD,cAAIgF,QAAQ,IAAIA,QAAQ,IAAIE,KAAK,CAAChR,GAAlC,EAAuC;AACrCgR,YAAAA,KAAK,CAAClF,WAAN,GAAoBA,WAApB;AACD;AACF,SAPD;AAQD,OA1CO;AA2CRqF,MAAAA,eAAe,EAAE,CACfrR,UADe,EAEf2D,QAFe,EAGf;AAAEoN,QAAAA,OAAF;AAAWC,QAAAA,QAAX;AAAqBM,QAAAA;AAArB,OAHe;;;AAKf,6BAAA3N,QAAQ,CAACsN,MAAT,uCAAiBtP,OAAjB,CAAyBuP,KAAK;AAC5B,cAAIH,OAAO,IAAIA,OAAO,IAAIG,KAAK,CAACxN,EAAhC,EAAoC;AAClCwN,YAAAA,KAAK,CAACI,OAAN,GAAgBA,OAAhB;AACD;;AACD,cAAIN,QAAQ,IAAIA,QAAQ,IAAIE,KAAK,CAAChR,GAAlC,EAAuC;AACrCgR,YAAAA,KAAK,CAACI,OAAN,GAAgBA,OAAhB;AACD;AACF,SAPD;AAQD,OAxDO;AAyDRvF,MAAAA,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;AAAEqI,QAAAA;AAAF,OAHc;AAKdrI,QAAAA,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;AACD,OA/DO;AAgERuF,MAAAA,kBAAkB,EAAE,CAClBvR,UADkB,EAElB2D,QAFkB,EAGlB;AAAE6N,QAAAA;AAAF,OAHkB;AAKlB7N,QAAAA,QAAQ,CAAC6N,eAAT,GAA2BA,eAA3B;AACD,OAtEO;AAuERC,MAAAA,eAAe,EAAE,CACfzR,UADe,EAEf2D,QAFe,EAGf;AAAE+N,QAAAA;AAAF,OAHe;AAKf/N,QAAAA,QAAQ,CAAC+N,YAAT,GAAwBA,YAAxB;AACD,OA7EO;AA8ERC,MAAAA,YAAY,EAAE,CACZ3R,UADY,EAEZ2D,QAFY,EAGZ;AAAEiO,QAAAA;AAAF,OAHY;AAKZjO,QAAAA,QAAQ,CAACiO,SAAT,GAAqBA,SAArB;AACD;AApFO,KAAV;AAsFD;;AAtHC3G,EAAAA,SAAS;AACP,WAAO,UAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;AACJ,UAAMpG,QAAQ,GAAa,EACzB,GAAGiE,yBAAyB,EADH;AAEzB1H,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAFc;AAGzBC,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IAHa;AAIzBmO,MAAAA,IAAI,EAAEvE,KAAK,CAACuE,IAJa;AAKzBuD,MAAAA,SAAS,EAAE9H,KAAK,CAAC8H,SAAN,IAAmB,EALL;AAMzB7I,MAAAA,MAAM,EAAEe,KAAK,CAACf,MAAN,GACJ;AAAE3F,QAAAA,MAAM,EAAE,UAAV;AAAsBK,QAAAA,EAAE,EAAEqG,KAAK,CAACf,MAAN,CAAatF;AAAvC,OADI,GAEJhK,SARqB;AASzBoY,MAAAA,SAAS,EAAE,EATc;AAUzBb,MAAAA,MAAM,EACJ,kBAAAlH,KAAK,CAACkH,MAAN,mCAActV,GAAd,CAAkBoW,CAAC;AACjB,eAAO;AACLrO,UAAAA,EAAE,EAAEmE,OAAM,EADL;AAEL1H,UAAAA,IAAI,EAAE4R,CAAC,CAAC5R,IAFH;AAGL6L,UAAAA,WAAW,EAAE+F,CAAC,CAAC/F,WAHV;AAILsF,UAAAA,OAAO,EAAES,CAAC,CAACT,OAJN;AAKLU,UAAAA,IAAI,EAAED,CAAC,CAACC,IALH;AAML9R,UAAAA,GAAG,EAAE6R,CAAC,CAAC7R,GANF;AAOLuP,UAAAA,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;AAPrB,SAAP;AASD,OAVD,MAUM;AArBiB,KAA3B;AAuBA,SAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MC9CUsO,yBAAyBlJ;AAGpC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIoI,kBAAJ,CAAuB1I,OAAvB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,YAAP;AACD;;;;MCPU8I,0BAA0BlH;AACrCC,EAAAA,SAAS;AACP,WAAO,SAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAY,EACxB,GAAGiE,yBAAyB,EADJ;AAExB1H,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAFa;AAGxBiS,MAAAA,KAAK,EAAEpI,KAAK,CAACoI,KAAN,IAAe;AAHE,KAA1B;AAKA,SAAKpH,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MChBUyO,uBAAuBrJ;AAGlC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIyJ,iBAAJ,CAAsB/J,OAAtB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,UAAP;AACD;;;;MCJUiJ,gCAAgCrH;AAA7C5P,EAAAA;;AAcE,gBAAA,GAAU;AACR0Q,MAAAA,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;AAAEzD,QAAAA;AAAF,OAHM;AAKNyD,QAAAA,QAAQ,CAACzD,GAAT,GAAeA,GAAf;AACD,OAPO;AAQRoS,MAAAA,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;AAAExD,QAAAA;AAAF,OAHU;AAKVwD,QAAAA,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;AACD;AAdO,KAAV;AAgBD;;AA7BC8K,EAAAA,SAAS;AACP,WAAO,UAAP;AACD;;AACDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAkB,EAC9B,GAAGiE,yBAAyB,EADE;AAE9B1H,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAFmB;AAG9BC,MAAAA,IAAI,EAAE4J,KAAK,CAACwI;AAHkB,KAAhC;AAKA,SAAKxH,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MClBU6O,6BAA6BzJ;AAGxC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAI4J,uBAAJ,CAA4BlK,OAA5B,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,iBAAP;AACD;;;;MCPUqJ,2BAA2BzH;AACtCC,EAAAA,SAAS;AACP,WAAO,UAAP;AACD;;AACDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAa,EACzB,GAAGiE,yBAAyB,EADH;AAEzB0H,MAAAA,KAAK,EAAEvF,KAAK,CAACuF,KAFY;AAGzBoD,MAAAA,QAAQ,EAAE3I,KAAK,CAAC2I,QAHS;AAIzBC,MAAAA,eAAe,EAAE5I,KAAK,CAAC4I,eAAN,IAAyB,KAJjB;AAKzBC,MAAAA,SAAS,EAAE;AALc,KAA3B;AAOA,SAAK7H,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MCjBUkP,wBAAwB9J;AAGnC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIgK,kBAAJ,CAAuBtK,OAAvB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,WAAP;AACD;;;;MCLU0J,+BAA+B9H;AAC1CC,EAAAA,SAAS;AACP,WAAO,oBAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMmB,OAAO,GAAG,KAAK6H,sBAAL,CACd/S,UADc,EAEd+J,KAAK,CAACiJ,SAFQ,EAGdjJ,KAAK,CAAC7J,GAHQ,CAAhB;AAMA,UAAM+S,cAAc,GAAGrL,yBAAyB,EAAhD;;AACA,QAAIsD,OAAJ,EAAa;AACX+H,MAAAA,cAAc,CAACvP,EAAf,GAAoBwH,OAAO,CAACxH,EAA5B;;AAEA,UAAI,CAACqG,KAAK,CAAC1I,OAAX,EAAoB;AAClB0I,QAAAA,KAAK,CAAC1I,OAAN,GAAgB6J,OAAO,CAAC7J,OAAxB;AACD;;AAEDkJ,MAAAA,2BAA2B,CAACW,OAAD,EAAUnB,KAAK,CAAC1I,OAAhB,CAA3B;;AACA,UAAI0I,KAAK,CAACzN,KAAN,KAAgB4O,OAAO,CAAC5O,KAA5B,EAAmC;AACjC,eAAO4O,OAAP;AACD;;AAED+H,MAAAA,cAAc,CAAC5R,OAAf,GAAyB6J,OAAO,CAAC7J,OAAjC;AACD,KAbD,MAaO;AACL,UAAI0I,KAAK,CAAC1I,OAAV,EAAmB;AACjB4R,QAAAA,cAAc,CAAC5R,OAAf,GAAyB0I,KAAK,CAAC1I,OAA/B;AACD;AACF;;AAED,UAAMsC,QAAQ,GAAiB,EAC7B,GAAGsP,cAD0B;AAE7BD,MAAAA,SAAS,EAAEjJ,KAAK,CAACiJ,SAFY;AAG7B9S,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAHkB;AAI7B5D,MAAAA,KAAK,EAAEyN,KAAK,CAACzN;AAJgB,KAA/B;AAOA,SAAKyO,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;AAEDoP,EAAAA,sBAAsB,CAAC/S,UAAD,EAAqBgT,SAArB,EAAwC9S,GAAxC;AACpB,UAAMsN,KAAK,GAAG,KAAKpF,QAAL,CAAc9E,GAAd,CAAkBtD,UAAlB,EAA8B,KAAKiL,SAAL,EAA9B,CAAd;;AAGA,WAAOuC,KAAK,CAACzJ,IAAN,CAAWnI,IAAI,IAAIA,IAAI,CAACoX,SAAL,KAAmBA,SAAnB,IAAgCpX,IAAI,CAACsE,GAAL,KAAaA,GAAhE,CAAP;AACD;;;;MCpDUgT,4BAA4BnK;AAGvC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIqK,sBAAJ,CAA2B3K,OAA3B,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,gBAAP;AACD;;AAEDF,EAAAA,WAAW,CAACzC,MAAD;AACTA,IAAAA,MAAM,CAAC7C,GAAP,CAAW,kBAAX,EAA+B,KAAKmP,sBAAL,CAA4B7L,IAA5B,CAAiC,IAAjC,CAA/B;AACAT,IAAAA,MAAM,CAACO,IAAP,CAAY,kBAAZ,EAAgC,KAAKmM,yBAAL,CAA+BjM,IAA/B,CAAoC,IAApC,CAAhC;AACAT,IAAAA,MAAM,CAACxC,MAAP,CAAc,kBAAd,EAAkC,KAAKmP,yBAAL,CAA+BlM,IAA/B,CAAoC,IAApC,CAAlC;AACD;;AAED6L,EAAAA,sBAAsB,CAAC5M,OAAD,EAAmBiB,QAAnB;AACpB,UAAM7N,MAAM,GAAG,KAAKkP,UAAL,CAAgBsK,sBAAhB,CACb5M,OAAO,CAACrE,MAAR,CAAe9B,UADF,EAEbmG,OAAO,CAACrE,MAAR,CAAekR,SAFF,EAGb7M,OAAO,CAACrE,MAAR,CAAe5B,GAHF,CAAf;;AAMA,QAAI,CAAC3G,MAAL,EAAa;AACX,aAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;AACD;;AACD,WAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;AACD;;AAED4Z,EAAAA,yBAAyB,CAAChN,OAAD,EAAmBiB,QAAnB;AACvB,UAAM2C,KAAK,GAAsB,EAC/B,GAAG5D,OAAO,CAACsB,IADoB;AAE/BvH,MAAAA,GAAG,EAAEiG,OAAO,CAACrE,MAAR,CAAe5B,GAFW;AAG/B8S,MAAAA,SAAS,EAAE7M,OAAO,CAACrE,MAAR,CAAekR;AAHK,KAAjC;AAMA,UAAMzZ,MAAM,GAAG,KAAKkP,UAAL,CAAgBuB,MAAhB,CAAuB7D,OAAO,CAACrE,MAAR,CAAe9B,UAAtC,EAAkD+J,KAAlD,CAAf;AACA,WAAO3C,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;AACD;;AAED6Z,EAAAA,yBAAyB,CAACjN,OAAD,EAAmBiB,QAAnB;AACvB,UAAM8D,OAAO,GAAG,KAAKzC,UAAL,CAAgBsK,sBAAhB,CACd5M,OAAO,CAACrE,MAAR,CAAe9B,UADD,EAEdmG,OAAO,CAACrE,MAAR,CAAekR,SAFD,EAGd7M,OAAO,CAACrE,MAAR,CAAe5B,GAHD,CAAhB;;AAMA,QAAI,CAACgL,OAAL,EAAc;AACZ,aAAO9D,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;AACD;;AAED,UAAMpO,MAAM,GAAG,KAAKkP,UAAL,CAAgBxE,MAAhB,CAAuBkC,OAAO,CAACrE,MAAR,CAAe9B,UAAtC,EAAkDkL,OAAO,CAACxH,EAA1D,CAAf;AAEA,WAAO0D,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;AACD;;;;MCzCU8Z,+BAA+BrI;AAA5C5P,EAAAA;;AAgCE,gBAAA,GASI;AACFoR,MAAAA,cAAc,EAAE,CACdxM,UADc,EAEd2D,QAFc,EAGd;AAAE8I,QAAAA;AAAF,OAHc;AAKd9I,QAAAA,QAAQ,CAAC8I,QAAT,GAAoBA,QAApB;AACD,OAPC;AAQF6G,MAAAA,mBAAmB,EAAE,CACnBtT,UADmB,EAEnB2D,QAFmB,EAGnB;AAAE4P,QAAAA;AAAF,OAHmB;AAKnB5P,QAAAA,QAAQ,CAAC4P,aAAT,GAAyBA,aAAa,CAAC5X,GAAd,CACtBmB,GAAD,KAAiC;AAC/BuG,UAAAA,MAAM,EAAE,eADuB;AAE/BK,UAAAA,EAAE,EAAE5G,GAAG,CAAC4G;AAFuB,SAAjC,CADuB,CAAzB;AAMD,OAnBC;AAoBFqI,MAAAA,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;AAAEqI,QAAAA;AAAF,OAHc;AAKdrI,QAAAA,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;AACD,OA1BC;AA2BFwH,MAAAA,gBAAgB,EAAE,CAChBxT,UADgB,EAEhB2D,QAFgB,EAGhB;AAAE+I,QAAAA;AAAF,OAHgB;AAKhB/I,QAAAA,QAAQ,CAAC+I,aAAT,GAAyBA,aAAzB;AACD,OAjCC;AAkCF+G,MAAAA,OAAO,EAAE,CACPzT,UADO,EAEP2D,QAFO,EAGP;AAAExD,QAAAA;AAAF,OAHO;AAKPwD,QAAAA,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;AACD,OAxCC;AAyCFuT,MAAAA,kBAAkB,EAAE,CAClB1T,UADkB,EAElB2D,QAFkB,EAGlB;AAAEgQ,QAAAA;AAAF,OAHkB;AAKlBhQ,QAAAA,QAAQ,CAACgQ,eAAT,GAA2BA,eAA3B;AACD,OA/CC;AAgDFC,MAAAA,6BAA6B,EAAE,CAC7B5T,UAD6B,EAE7B2D,QAF6B,EAG7B;AACEkQ,QAAAA;AADF,OAH6B;AAO7BlQ,QAAAA,QAAQ,CAACkQ,0BAAT,GAAsCA,0BAAtC;AACD,OAxDC;AAyDF5H,MAAAA,YAAY,EAAE,CACZjM,UADY,EAEZ2D,QAFY,EAGZ;AAAEuI,QAAAA;AAAF,OAHY;AAKZvI,QAAAA,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;AACD,OA/DC;AAgEFC,MAAAA,aAAa,EAAE,CACbnM,UADa,EAEb2D,QAFa,EAGb;AAAEyI,QAAAA;AAAF,OAHa;AAKbzI,QAAAA,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;AACD,OAtEC;AAuEFC,MAAAA,oBAAoB,EAAE,CACpBrM,UADoB,EAEpB2D,QAFoB,EAGpB;AAAEuI,QAAAA,SAAF;AAAaE,QAAAA;AAAb,OAHoB;AAKpBzI,QAAAA,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;AACAvI,QAAAA,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;AACD;AA9EC,KATJ;AAyFD;;AAxHCnB,EAAAA,SAAS;AACP,WAAO,eAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ/E,IAAAA,OAAO,CAAC8E,GAAR,CAAYC,KAAZ;AACA,UAAMpG,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;AAE7BkM,MAAAA,kBAAkB,EAAE,CAFS;AAG7BP,MAAAA,aAAa,EAAExJ,KAAK,CAACwJ,aAAN,CAAoB5X,GAApB,CACZmB,GAAD,KAAiC;AAC/BuG,QAAAA,MAAM,EAAE,eADuB;AAE/BK,QAAAA,EAAE,EAAE5G,GAAG,CAAC4G;AAFuB,OAAjC,CADa,CAHc;AAS7BgJ,MAAAA,aAAa,EAAE3C,KAAK,CAAC2C,aATQ;AAU7BpI,MAAAA,IAAI,EAAEyF,KAAK,CAACzF,IAViB;AAW7B0H,MAAAA,WAAW,EAAEjC,KAAK,CAACiC,WAXU;AAY7BnO,MAAAA,MAAM,EAAEkM,KAAK,CAAClM,MAAN,IAAgB,EAZK;AAa7B4O,MAAAA,QAAQ,EAAE1C,KAAK,CAAC0C,QAAN,IAAkB,IAbC;AAc7BtM,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IAdiB;AAe7BwM,MAAAA,UAAU,EAAE,EAfiB;AAgB7BT,MAAAA,SAAS,EAAEnC,KAAK,CAACmC,SAhBY;AAiB7BE,MAAAA,UAAU,EAAErC,KAAK,CAACqC,UAjBW;AAkB7BuH,MAAAA,eAAe,EAAE5J,KAAK,CAAC4J,eAlBM;AAmB7BE,MAAAA,0BAA0B,EAAE9J,KAAK,CAAC8J;AAnBL,KAA/B;AAqBA,SAAK9I,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MC9CUoQ,4BAA4BhL;AAGvC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAI4K,sBAAJ,CAA2BlL,OAA3B,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,gBAAP;AACD;;;;MCDU4K,4BAA4BhJ;AAAzC5P,EAAAA;;AAiBE,gBAAA,GAGI;AACF0Q,MAAAA,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;AAAEzD,QAAAA;AAAF,OAHM;AAKNyD,QAAAA,QAAQ,CAACzD,GAAT,GAAeA,GAAf;AACD,OAPC;AAQF+T,MAAAA,cAAc,EAAE,CACdjU,UADc,EAEd2D,QAFc,EAGd;AAAEuQ,QAAAA;AAAF,OAHc;AAKdvQ,QAAAA,QAAQ,CAACuQ,WAAT,GAAuBA,WAAvB;AACD,OAdC;AAeFC,MAAAA,cAAc,EAAE,CACdnU,UADc,EAEd2D,QAFc,EAGd;AAAEyQ,QAAAA;AAAF,OAHc;AAKdzQ,QAAAA,QAAQ,CAACyQ,QAAT,GAAoBA,QAApB;AACD,OArBC;AAsBFC,MAAAA,iBAAiB,EAAE,CACjBrU,UADiB,EAEjB2D,QAFiB,EAGjB;AAAE2Q,QAAAA;AAAF,OAHiB;AAKjB3Q,QAAAA,QAAQ,CAAC2Q,WAAT,GAAuBA,WAAvB;AACD;AA5BC,KAHJ;AAiCD;;AAjDCrJ,EAAAA,SAAS;AACP,WAAO,WAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAc,EAC1B,GAAGiE,yBAAyB,EADF;AAE1B1H,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAFe;AAG1BgU,MAAAA,WAAW,EAAEnK,KAAK,CAACmK,WAHO;AAI1BI,MAAAA,WAAW,EAAEvK,KAAK,CAACuK,WAJO;AAK1BF,MAAAA,QAAQ,EAAErK,KAAK,CAACqK;AALU,KAA5B;AAOA,SAAKrJ,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MCxBU4Q,0BAA0BxL;AAGrC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIuL,mBAAJ,CAAwB7L,OAAxB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,YAAP;AACD;;;;MCAUoL,iCAAiCxJ;AAA9C5P,EAAAA;;AAwBE,gBAAA,GAAU;AACRqZ,MAAAA,cAAc,EAAE,CACdzU,UADc,EAEd2D,QAFc,EAGd;AAAE2J,QAAAA;AAAF,OAHc;AAKd3J,QAAAA,QAAQ,CAAC+Q,eAAT,GAA2BpH,QAA3B;;AAEA3J,QAAAA,QAAQ,CAACgR,iBAAT,GAA6BrH,QAA7B;AACD,OATO;AAURsH,MAAAA,mBAAmB,EAAE,CACnB5U,UADmB,EAEnB2D,QAFmB,EAGnB;AAAEkR,QAAAA;AAAF,OAHmB;AAKnBlR,QAAAA,QAAQ,CAACkR,gBAAT,GAA4B,IAAI/M,IAAJ,CAAS+M,gBAAT,EAA4B9M,WAA5B,EAA5B;AACD,OAhBO;AAiBRyH,MAAAA,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;AAAExD,QAAAA,IAAF;AAAQ7D,QAAAA;AAAR,OAHc;AAKd,YAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;AACpB,gBAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;AACD;;AACD6E,QAAAA,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;AACD,OA1BO;AA2BRoT,MAAAA,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;AAAEvH,QAAAA,IAAF;AAAQgP,QAAAA;AAAR,OAHa;AAKb,YAAI,CAAChP,IAAL,EAAW;AACTuH,UAAAA,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;AACD,SAFD,MAEO;AACL,gBAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;AAIA,cAAI,CAACuT,YAAL,EAAmB;AACjB,kBAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;AACD;;AAEDuH,UAAAA,QAAQ,CAAC8L,MAAT,GAAkB;AAChBrT,YAAAA,IAAI,EAAE;AACJiH,cAAAA,MAAM,EAAE,MADJ;AAEJK,cAAAA,EAAE,EAAEiM,YAAY,CAACjM;AAFb,aADU;AAKhB0H,YAAAA,MAAM,EAAEA,MAAM,IAAI;AALF,WAAlB;AAOD;AACF,OAnDO;AAoDR0J,MAAAA,oBAAoB,EAAE,CACpB9U,UADoB,EAEpB2D,QAFoB,EAGpB;AAAEoR,QAAAA;AAAF,OAHoB;AAKpBpR,QAAAA,QAAQ,CAACoR,iBAAT,GAA6BA,iBAA7B;AACD;AA1DO,KAAV;AA4DD;;AAnFC9J,EAAAA,SAAS;AACP,WAAO,iBAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;AACJ,UAAMpG,QAAQ,GAAmB,EAC/B,GAAGiE,yBAAyB,EADG;AAE/ByF,MAAAA,GAAG,EAAEtD,KAAK,CAACsD,GAFoB;AAG/BqH,MAAAA,eAAe,EAAE3K,KAAK,CAAC2K,eAHQ;AAI/BC,MAAAA,iBAAiB,EAAE5K,KAAK,CAAC2K,eAJM;AAK/BG,MAAAA,gBAAgB,EAAE9K,KAAK,CAAC8K,gBALO;AAM/BE,MAAAA,iBAAiB,EAAEhL,KAAK,CAACgL,iBANM;AAO/BC,MAAAA,aAAa,EAAE,EACb,GAAGjL,KAAK,CAACiL,aADI;AAEb3R,QAAAA,MAAM,EAAE,SAFK;AAGbK,QAAAA,EAAE,mDAAEqG,KAAK,CAACiL,aAAR,qBAAE,qBAAqBtR,EAAvB,oCAA6B;AAHlB,OAPgB;AAY/B+L,MAAAA,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;AAZK,KAAjC;AAcA,SAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MChCUsR,8BAA8BlM;AAGzC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAI+L,wBAAJ,CAA6BrM,OAA7B,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,WAAP;AACD;;;;MCVU8L,sBAAsBnM;AAGjC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIwE,cAAJ,CAAmB9E,OAAnB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,IAAP;AACD;;AAEDH,EAAAA,cAAc,CAACD,MAAD;AACZ;AACA,UAAMG,QAAQ,GAAG,KAAKC,WAAL,EAAjB;AACA,UAAM3C,MAAM,GAAGE,cAAM,CAAC;AAAE0C,MAAAA,WAAW,EAAE;AAAf,KAAD,CAArB;AAEA,SAAKH,WAAL,CAAiBzC,MAAjB;AAEAA,IAAAA,MAAM,CAAC7C,GAAP,CAAW,cAAX,EAA2B,KAAKuR,UAAL,CAAgBjO,IAAhB,CAAqB,IAArB,CAA3B;AACAT,IAAAA,MAAM,CAAC7C,GAAP,CAAW,SAAX,EAAsB,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAAtB;AACAT,IAAAA,MAAM,CAAC7C,GAAP,CAAW,YAAX,EAAyB,KAAK2F,SAAL,CAAerC,IAAf,CAAoB,IAApB,CAAzB;AAEAT,IAAAA,MAAM,CAACxC,MAAP,CAAc,YAAd,EAA4B,KAAKwF,YAAL,CAAkBvC,IAAlB,CAAuB,IAAvB,CAA5B;AAEAT,IAAAA,MAAM,CAACO,IAAP,CAAY,SAAZ,EAAuB,KAAKA,IAAL,CAAUE,IAAV,CAAe,IAAf,CAAvB;AACAT,IAAAA,MAAM,CAACO,IAAP,CAAY,YAAZ,EAA0B,KAAK2C,UAAL,CAAgBzC,IAAhB,CAAqB,IAArB,CAA1B;AAEA8B,IAAAA,MAAM,CAACpC,GAAP,KAAeuC,UAAf,EAA2B1C,MAA3B;AACD;;AAED0O,EAAAA,UAAU,CAAChP,OAAD,EAAmBiB,QAAnB;AACR,UAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBgI,aAAhB,CAA8BtK,OAAO,CAACrE,MAAR,CAAe9B,UAA7C,CAAjB;;AACA,QAAI,CAAC2D,QAAL,EAAe;AACb,aAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;AACD;;AACD,WAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;AACD;;;;MCtBUyR,0BAA0BpK;AAAvC5P,EAAAA;;;AAoCE,wCAAA,GAAkC,CAChC2O,KADgC,EAEhC/J,UAFgC,MAG5B,EACJ,GAAG+J,KADC;AAEJrG,MAAAA,EAAE,EAAEmE,OAAM,EAFN;AAGJwN,MAAAA,MAAM,EAAE9J,gBAAgB,CAACxB,KAAK,CAACsL,MAAP,CAHpB;AAIJ5F,MAAAA,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;AAJtB,KAH4B,CAAlC;;AAUA,gBAAA,GAAU;AACRoH,MAAAA,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;AAAExD,QAAAA,IAAF;AAAQ7D,QAAAA;AAAR,OAHc;AAKd,YAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;AACpB,gBAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;AACD;;AAED6E,QAAAA,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;AACD,OAXO;AAYRoT,MAAAA,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;AAAEvH,QAAAA,IAAF;AAAQgP,QAAAA;AAAR,OAHa;AAKb,YAAI,CAAChP,IAAL,EAAW;AACTuH,UAAAA,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;AACD,SAFD,MAEO;AACL,gBAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;AAIA,cAAI,CAACuT,YAAL,EAAmB;AACjB,kBAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;AACD;;AAEDuH,UAAAA,QAAQ,CAAC8L,MAAT,GAAkB;AAChBrT,YAAAA,IAAI,EAAE;AACJiH,cAAAA,MAAM,EAAE,MADJ;AAEJK,cAAAA,EAAE,EAAEiM,YAAY,CAACjM;AAFb,aADU;AAKhB0H,YAAAA,MAAM,EAAEA,MAAM,IAAI;AALF,WAAlB;AAOD;AACF,OApCO;AAqCRkK,MAAAA,cAAc,EAAE,CACdtV,UADc,EAEd2D,QAFc,EAGd;AAAE4R,QAAAA;AAAF,OAHc;AAKd5R,QAAAA,QAAQ,CAAC6R,YAAT,GAAwB,CACtB,GAAG7R,QAAQ,CAAC6R,YADU,EAEtB,KAAKC,+BAAL,CAAqCF,WAArC,EAAkDvV,UAAlD,CAFsB,CAAxB;AAID;AA9CO,KAAV;AAmED;;AAhHCiL,EAAAA,SAAS;AACP,WAAO,SAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAY,EACxB,GAAGiE,yBAAyB,EADJ;AAExB8N,MAAAA,aAAa,EAAEnK,gBAAgB,CAACxB,KAAK,CAAC2L,aAAP,CAFP;AAGxBC,MAAAA,iBAAiB,EAAE5L,KAAK,CAAC4L,iBAHD;AAIxBC,MAAAA,aAAa,EAAE7L,KAAK,CAAC6L,aAAN,GACX,EACE,GAAG7L,KAAK,CAAC6L,aADX;AAEE9S,QAAAA,KAAK,EAAEiH,KAAK,CAAC6L,aAAN,CAAoB9S,KAApB,GACH6I,kCAAkC,CAChC5B,KAAK,CAAC6L,aAAN,CAAoB9S,KADY,EAEhC9C,UAFgC,EAGhC,KAAKoI,QAH2B,CAD/B,GAMH1O;AARN,OADW,GAWX,EAfoB;AAgBxB8b,MAAAA,YAAY,EAAE,CAACzL,KAAK,CAACyL,YAAN,IAAsB,EAAvB,EAA2B7Z,GAA3B,CAA+BgC,CAAC,IAC5C,KAAK8X,+BAAL,CAAqC9X,CAArC,EAAwCqC,UAAxC,CADY,CAhBU;AAmBxB6V,MAAAA,qBAAqB,EAAE,CAAC9L,KAAK,CAAC8L,qBAAN,IAA+B,EAAhC,EAAoCla,GAApC,CACrBma,WAAW,IACT3K,kBAAkB,CAAC2K,WAAD,EAAc9V,UAAd,EAA0B,KAAKoI,QAA/B,CAFC,CAnBC;AAuBxBqH,MAAAA,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;AAvBF,KAA1B;AA0BA,SAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MCjDUoS,yBAAyBhN;AAGpC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAI2M,iBAAJ,CAAsBjN,OAAtB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,aAAP;AACD;;;;MCwBU4M,wBAAwBhL;AAArC5P,EAAAA;;AAgLE,gBAAA,GAAU;AACR6a,MAAAA,UAAU,EAAE,CACVjW,UADU,EAEV2D,QAFU,EAGV;AAAEf,QAAAA;AAAF,OAHU;AAKV,cAAMsT,eAAe,GAAG,KAAK9N,QAAL,CAActD,uBAAd,CACtB9E,UADsB,EAEtB4C,OAFsB,CAAxB;;AAIA,YAAI,CAACsT,eAAL,EAAsB;AACpB,gBAAM,IAAIpX,KAAJ,YAAqB8D,OAAO,CAACc,cAA7B,CAAN;AACD;;AAED,YAAI,CAACC,QAAQ,CAACwS,WAAd,EAA2B;AACzBxS,UAAAA,QAAQ,CAACwS,WAAT,GAAuB;AACrBC,YAAAA,QAAQ,EAAE;AADW,WAAvB;AAGD;;AAEDzS,QAAAA,QAAQ,CAACwS,WAAT,CAAqBC,QAArB,CAA8BrQ,IAA9B,CAAmC;AACjC1C,UAAAA,MAAM,EAAE,SADyB;AAEjCK,UAAAA,EAAE,EAAEd,OAAO,CAACc;AAFqB,SAAnC;AAID,OAxBO;AAyBR2S,MAAAA,gBAAgB,EAAE,CAChBrW,UADgB,EAEhB2D,QAFgB,EAGhB;AAAE2S,QAAAA;AAAF,OAHgB;AAKhB3S,QAAAA,QAAQ,CAAC2S,UAAT,GAAsBA,UAAtB;AACD,OA/BO;AAgCRC,MAAAA,kBAAkB,EAAE,CAClBvW,UADkB,EAElB2D,QAFkB,EAGlB;AAAE6S,QAAAA;AAAF,OAHkB;AAKlB7S,QAAAA,QAAQ,CAAC6S,YAAT,GAAwBA,YAAxB;AACD,OAtCO;AAuCRxH,MAAAA,iBAAiB,EAAE,CACjBhP,UADiB,EAEjB2D,QAFiB,EAGjB;AAAEsL,QAAAA;AAAF,OAHiB;AAKjBtL,QAAAA,QAAQ,CAACuL,cAAT,GAA0BD,OAA1B;AACD,OA7CO;AA8CRI,MAAAA,gBAAgB,EAAE,CAChBrP,UADgB,EAEhB2D,QAFgB,EAGhB;AAAE2L,QAAAA;AAAF,OAHgB;AAKhB3L,QAAAA,QAAQ,CAAC4L,aAAT,GAAyBD,KAAzB;AACD,OApDO;AAqDRE,MAAAA,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;AAAExD,QAAAA,IAAF;AAAQ7D,QAAAA;AAAR,OAHc;AAKd,YAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;AACpB,gBAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;AACD;;AACD6E,QAAAA,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;AACD,OA9DO;AA+DRoT,MAAAA,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;AAAEvH,QAAAA,IAAF;AAAQgP,QAAAA;AAAR,OAHa;AAKb,YAAI,CAAChP,IAAL,EAAW;AACTuH,UAAAA,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;AACD,SAFD,MAEO;AACL,gBAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;AAIA,cAAI,CAACuT,YAAL,EAAmB;AACjB,kBAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;AACD;;AAEDuH,UAAAA,QAAQ,CAAC8L,MAAT,GAAkB;AAChBrT,YAAAA,IAAI,EAAE;AACJiH,cAAAA,MAAM,EAAE,MADJ;AAEJK,cAAAA,EAAE,EAAEiM,YAAY,CAACjM;AAFb,aADU;AAKhB0H,YAAAA,MAAM,EAAEA,MAAM,IAAI;AALF,WAAlB;AAOD;AACF,OAvFO;AAwFRwE,MAAAA,SAAS,EAAE,CACT5P,UADS,EAET2D,QAFS,EAGT;AAAEkM,QAAAA;AAAF,OAHS;AAKTlM,QAAAA,QAAQ,CAACkM,MAAT,GAAkBA,MAAlB;AACD,OA9FO;AA+FR4G,MAAAA,cAAc,EAAE,CACdzW,UADc,EAEd2D,QAFc,EAGd;AAAE+S,QAAAA;AAAF,OAHc;AAKd/S,QAAAA,QAAQ,CAAC+S,WAAT,GAAuBA,WAAvB;AACD,OArGO;AAsGR5G,MAAAA,kBAAkB,EAAE,CAClB9P,UADkB,EAElB2D,QAFkB,EAGlB;AAAEsL,QAAAA;AAAF,OAHkB;AAKlBtL,QAAAA,QAAQ,CAACoM,eAAT,GAA2Bd,OAA3B;AACD,OA5GO;AA6GR0H,MAAAA,QAAQ,EAAE,CACR3W,UADQ,EAER2D,QAFQ,EAGR;AAAEZ,QAAAA;AAAF,OAHQ;AAKR,YAAI,CAACA,KAAL,EAAY;;AACZ,cAAM4M,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB+C,KAFmB,CAArB;;AAIA,YAAI,CAAC4M,YAAL,EAAmB;AACjB,gBAAM,IAAI7Q,KAAJ,4BAAqCiE,KAAK,CAAC7C,KAA3C,CAAN;AACD;;AAED,cAAM0W,cAAc,GAAGjH,YAAvB;AACAhM,QAAAA,QAAQ,CAACZ,KAAT,GAAiB;AACfM,UAAAA,MAAM,EAAE,OADO;AAEfnD,UAAAA,GAAG,EAAE0W,cAAc,CAAC1W;AAFL,SAAjB;AAID;AAhIO,KAAV;AAkID;;AAjTC+K,EAAAA,SAAS;AACP,WAAO,OAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJlG,IAAAA,MAAM,CAACkG,KAAK,CAAC1H,IAAP,EAAa,uBAAb,CAAN;;AAEA,UAAMA,IAAI,GAAG,KAAK+F,QAAL,CAActD,uBAAd,CACX9E,UADW,EAEX+J,KAAK,CAAC1H,IAFK,CAAb;;AAIA,QAAI,CAACA,IAAL,EAAW;AACT,YAAM,IAAIvD,KAAJ,CAAU,kBAAV,CAAN;AACD;;AAED,UAAM6E,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;AAEtB8O,MAAAA,WAAW,EAAE3M,KAAK,CAAC2M,WAFG;AAGtBJ,MAAAA,UAAU,EAAE,MAHU;AAItBxI,MAAAA,SAAS,EAAE,EAJW;AAKtBmC,MAAAA,eAAe,EAAE,EALK;AAMtBlC,MAAAA,UAAU,EAAE1L,IAAI,CAAC0L,UANK;AAOtBwC,MAAAA,YAAY,EAAE,EAPQ;AAQtBC,MAAAA,MAAM,EAAE,UARc;AAStBqG,MAAAA,QAAQ,EAAE,EATY;AAUtBC,MAAAA,yBAAyB,EAAE;AAVL,KAAxB;AAYA,SAAK/L,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;AAEDoT,EAAAA,MAAM,CAAC/W,UAAD,EAAqB+J,KAArB;;;AACJ;AACAlG,IAAAA,MAAM,CAAC,IAAD,EAAO,2BAAP,CAAN;AACA,UAAMF,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;AAGtBsH,MAAAA,cAAc,EAAEnF,KAAK,CAACmF,cAHA;AAItBa,MAAAA,eAAe,EAAEhG,KAAK,CAACgG,eAJD;AAMtBN,MAAAA,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CANJ;AAOtBmH,MAAAA,aAAa,EAAExF,KAAK,CAACwF,aAPC;AAQtBuH,MAAAA,yBAAyB,EAAE,CARL;AAStBJ,MAAAA,WAAW,EAAE3M,KAAK,CAAC2M,WATG;AAUtBJ,MAAAA,UAAU,EAAEvM,KAAK,CAACuM,UAAN,IAAoB,MAVV;AAWtB9F,MAAAA,MAAM,EAAEzG,KAAK,CAACyG,MAAN,IAAgB,UAXF;AAYtBgG,MAAAA,YAAY,EAAEzM,KAAK,CAACyM,YAZE;AAatBjG,MAAAA,YAAY,EAAE,EAbQ;AActBxN,MAAAA,KAAK,EAAE0I,qBAAqB,CAAC1B,KAAK,CAAChH,KAAP,EAAc/C,UAAd,EAA0B,KAAKoI,QAA/B,CAdN;AAetByO,MAAAA,QAAQ,EAAE,EAfY;AAiBtB/I,MAAAA,SAAS,EACP,qBAAA/D,KAAK,CAAC+D,SAAN,sCAAiBnS,GAAjB,CAAqBC,IAAI,IACvB,KAAKob,uBAAL,CAA6B9P,IAA7B,CAAkC,IAAlC,EAAwClH,UAAxC,EAAoDpE,IAApD,CADF,MAEK,EApBe;AAqBtBqU,MAAAA,eAAe,EACb,0BAAAlG,KAAK,CAACkG,eAAN,2CAAuBtU,GAAvB,CAA2BC,IAAI,IAC7B,KAAKqb,6BAAL,CAAmC/P,IAAnC,CAAwC,IAAxC,EAA8ClH,UAA9C,EAA0DpE,IAA1D,CADF,MAEK,EAxBe;AA0BtBmS,MAAAA,UAAU,EAAE;AACV3R,QAAAA,IAAI,EAAE,eADI;AAEV,WAAG2N,KAAK,CAACgE,UAFC;AAGVvC,QAAAA,cAAc,EAAE;AAHN;AA1BU,KAAxB;AAgCA,SAAKT,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;AAEOqT,EAAAA,uBAAuB,CAC7BhX,UAD6B,EAE7B+J,KAF6B;AAI7B,QAAIlH,OAAJ;AACA,QAAI0K,OAAJ;;AAEA,QAAIxD,KAAK,CAACwD,OAAN,CAAcF,GAAlB,EAAuB;AACrBE,MAAAA,OAAO,GAAG;AACR7J,QAAAA,EAAE,EAAE,CADI;AAER2J,QAAAA,GAAG,EAAEtD,KAAK,CAACwD,OAAN,CAAcF;AAFX,OAAV;;AAKA,UAAIG,KAAK,GAAG,KAAKpF,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,SAAhC,EAA2C;AACrDmE,QAAAA,KAAK,EAAE,0CACoC4F,KAAK,CAACwD,OAAN,CAAcF,+CAA+CtD,KAAK,CAACwD,OAAN,CAAcF,SAD/G;AAD8C,OAA3C,CAAZ;;AAMA,UAAIG,KAAK,CAAC7I,KAAN,KAAgB,CAApB,EAAuB;AACrB,cAAM,IAAIhF,kBAAJ,CAAqC;AACzC2E,UAAAA,IAAI,EAAE,SADmC;AAEzCjJ,UAAAA,OAAO,8CAA8C0O,KAAK,CAACwD,OAAN,CAAcF;AAF1B,SAArC,CAAN;AAID;;AAEDxK,MAAAA,OAAO,GAAG2K,KAAK,CAAC3I,OAAN,CAAc,CAAd,CAAV;;AACA,UAAIhC,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BwC,aAA3B,CAAyCL,GAAzC,KAAiDtD,KAAK,CAACwD,OAAN,CAAcF,GAAnE,EAAwE;AACtEE,QAAAA,OAAO,GAAG1K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BwC,aAArC;AACD,OAFD,MAEO;AACLH,QAAAA,OAAO,GAAG1K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2ByC,QAA3B,CAAoC5J,IAApC,CACR7G,CAAC,IAAIA,CAAC,CAACmQ,GAAF,KAAUtD,KAAK,CAACwD,OAAN,CAAcF,GADrB,CAAV;AAGD;;AACD,UAAI,CAACE,OAAL,EAAc;AACZ,cAAM,IAAIzO,KAAJ,CAAU,sBAAV,CAAN;AACD;AACF,KA9BD,MA8BO;AACL,YAAM,IAAIA,KAAJ,CAAU,kBAAV,CAAN;AACD;;AAED,UAAMgQ,QAAQ,GAAa,EACzB,GAAGlH,yBAAyB,EADH;AAEzB6H,MAAAA,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CAFD;AAGzBoG,MAAAA,0BAA0B,EAAE,EAHH;AAIzBC,MAAAA,YAAY,EAAE,UAJW;AAKzBtO,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IALa;AAMzBgO,MAAAA,KAAK,EAAE7C,WAAW,CAACvB,KAAK,CAACoE,KAAP,CANO;AAOzBO,MAAAA,SAAS,EAAE,UAPc;AAQzBvB,MAAAA,SAAS,EAAEtK,OAAO,CAACa,EARM;AASzB6K,MAAAA,WAAW,EAAE1L,OAAO,CAAC0L,WATI;AAUzBjB,MAAAA,QAAQ,EAAEvD,KAAK,CAACuD,QAVS;AAWzBxK,MAAAA,KAAK,EAAEiH,KAAK,CAACjH,KAAN,IAAe,EAXG;AAYzBoU,MAAAA,OAAO,EAAEnN,KAAK,CAACmN,OAZU;AAazBnJ,MAAAA,UAAU,EAAExC,gBAAgB,CAACxB,KAAK,CAACoE,KAAN,CAAY7R,KAAb,CAbH;AAczBiR,MAAAA,OAAO,EAAE;AACP7J,QAAAA,EAAE,EAAE6J,OAAO,CAAC7J,EADL;AAEP2J,QAAAA,GAAG,EAAEE,OAAO,CAACF,GAFN;AAGPc,QAAAA,KAAK,EAAE7C,WAAW,CAACvB,KAAK,CAACoE,KAAP;AAHX;AAdgB,KAA3B;AAqBA,WAAOW,QAAP;AACD;;AAEOmI,EAAAA,6BAA6B,CACnCjX,UADmC,EAEnC+J,KAFmC;AAInC,UAAM+E,QAAQ,GAAmB,EAC/B,GAAGlH,yBAAyB,EADG;AAE/B6H,MAAAA,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CAFK;AAG/BoG,MAAAA,0BAA0B,EAAE,EAHG;AAI/BzB,MAAAA,KAAK,EAAExB,gBAAgB,CAACxB,KAAK,CAACgD,KAAP,CAJQ;AAK/B5M,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IALmB;AAM/BmN,MAAAA,QAAQ,EAAEvD,KAAK,CAACuD,QANe;AAO/BgB,MAAAA,IAAI,EAAEvE,KAAK,CAACuE,IAPmB;AAQ/BxL,MAAAA,KAAK,EAAE,EARwB;AAS/BiL,MAAAA,UAAU,EAAExC,gBAAgB,CAACxB,KAAK,CAACgD,KAAP;AATG,KAAjC;AAYA,WAAO+B,QAAP;AACD;;AAEDqI,EAAAA,kBAAkB,CAChBnX,UADgB,EAEhB0W,WAFgB,EAGhB5U,SAAsB,EAHN;AAKhB,UAAMvI,MAAM,GAAG,KAAK6O,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD,EAC/D,GAAGnJ,MAD4D;AAE/DqC,MAAAA,KAAK,EAAE,iBAAiBuS,cAAjB;AAFwD,KAAlD,CAAf;;AAIA,QAAInd,MAAM,CAACoL,KAAP,KAAiB,CAArB,EAAwB;AACtB,aAAOpL,MAAM,CAACsL,OAAP,CAAe,CAAf,CAAP;AACD;;;AAGD,QAAItL,MAAM,CAACoL,KAAP,GAAe,CAAnB,EAAsB;AACpB,YAAM,IAAI7F,KAAJ,CAAU,yBAAV,CAAN;AACD;;AAED;AACD;;;;MChNUsY,qBAAqBrO;AAGhC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIuN,eAAJ,CAAoB7N,OAApB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,QAAP;AACD;;AAEDF,EAAAA,WAAW,CAACzC,MAAD;AACTA,IAAAA,MAAM,CAACO,IAAP,CAAY,SAAZ,EAAuB,KAAK+P,MAAL,CAAY7P,IAAZ,CAAiB,IAAjB,CAAvB;AACAT,IAAAA,MAAM,CAAC7C,GAAP,CAAW,4BAAX,EAAyC,KAAKuT,kBAAL,CAAwBjQ,IAAxB,CAA6B,IAA7B,CAAzC;AACD;;AAED6P,EAAAA,MAAM,CAAC5Q,OAAD,EAAmBiB,QAAnB;AACJ,UAAMiQ,WAAW,GAAGlR,OAAO,CAACsB,IAA5B;AACA,UAAM9D,QAAQ,GAAG,KAAK8E,UAAL,CAAgBsO,MAAhB,CACf5Q,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfqX,WAFe,CAAjB;AAIA,WAAOjQ,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;AACD;;AAEDwT,EAAAA,kBAAkB,CAAChR,OAAD,EAAmBiB,QAAnB;AAChB,UAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgB0O,kBAAhB,CACfhR,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe4U,WAFA,EAGfvQ,OAAO,CAACjC,KAHO,CAAjB;;AAKA,QAAIP,QAAJ,EAAc;AACZ,aAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;AACD;;AACD,WAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;AACD;;;;MCpCU2P,uBAAuBvO;AAGlC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAI2M,iBAAJ,CAAsBjN,OAAtB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,UAAP;AACD;;;;ACfI,MAAMmO,qBAAqB,GAAIta,MAAD;AACnC,MAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC;AAC9B,UAAMua,OAAO,GAAGva,MAAM,CAACtB,GAAP,CAAWsC,KAAX,CAAhB;AACA,WAAOuZ,OAAO,CAACC,IAAR,CAAa,OAAb,CAAP;AACD;;AACD,SAAOxZ,KAAK,CAAChB,MAAD,CAAZ;AACD,CANM;;AAQP,MAAMgB,KAAK,GAAIhB,MAAD;AACZ,MAAIya,MAAM,GAAGza,MAAM,CAAC0a,OAAP,CAAe,IAAf,EAAqB,GAArB,CAAb;;AAEA,KAAG;AACDD,IAAAA,MAAM,GAAGA,MAAM,CAACC,OAAP,CAAe,mBAAf,EAAoC,WAApC,CAAT;AACD,GAFD,QAESD,MAAM,CAACzY,QAAP,CAAgB,GAAhB,CAFT;;AAIA,SAAOyY,MAAP;AACD,CARD;;MCIaE,oCAAoC5M;AAAjD5P,EAAAA;;AAkDE,gBAAA,GAAU,EAAV;AACD;;AAlDC6P,EAAAA,SAAS;AACP,WAAO,oBAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;AACJ,QAAI,CAACA,KAAK,CAAC2D,aAAX,EAA0B;AACxB,YAAM,IAAI5O,KAAJ,gEAC2DiL,KAAK,CAAC7J,KADjE,CAAN;AAGD;;AAED,QAAI,CAAC6J,KAAK,CAACwE,WAAN,CAAkB7K,EAAvB,EAA2B;AACzB,YAAM,IAAI5E,KAAJ,kEAC6DiL,KAAK,CAAC7J,KADnE,CAAN;AAGD;;AAED,UAAMyD,QAAQ,GAAsB,EAClC,GAAGiE,yBAAyB,EADM;AAElCzH,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IAFsB;AAGlCmO,MAAAA,IAAI,EAAEvE,KAAK,CAACuE,IAHsB;AAIlCuJ,MAAAA,UAAU,EAAE,EAJsB;AAKlCtJ,MAAAA,WAAW,EAAE,EAAE,GAAGxE,KAAK,CAACwE,WAAX;AAAwB7K,QAAAA,EAAE,EAAEqG,KAAK,CAACwE,WAAN,CAAkB7K;AAA9C,OALqB;AAMlCgK,MAAAA,aAAa,EAAEoK,gBAAgB,CAAC,CAAD,EAAI/N,KAAK,CAAC2D,aAAV,CANG;AAOlCC,MAAAA,QAAQ,4CACN5D,KAAK,CAAC4D,QADA,qBACN,gBAAgBhS,GAAhB,CAAoB,CAAC4R,OAAD,EAAU9T,KAAV;AAClB,eAAOqe,gBAAgB,CAACre,KAAK,GAAG,CAAT,EAAY8T,OAAZ,CAAvB;AACD,OAFD,CADM,kCAGA,EAV0B;AAYlC;AACAwK,MAAAA,cAAc,EAAEhO,KAAK,CAACgO;AAbY,KAApC;AAgBA,SAAKhN,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AAEA,WAAOA,QAAP;AACD;;AAEDqU,EAAAA,MAAM,CAAChY,UAAD,EAAqBkE,KAArB;;;AACJ,UAAMjH,MAAM,yBAAIiH,KAAK,CAAC,cAAD,CAAT,iCAA6BA,KAAK,CAACjH,MAA/C;AACA,UAAMgb,cAAc,GAAGhb,MAAM,GAAGsa,qBAAqB,CAACta,MAAD,CAAxB,GAAmCvD,SAAhE;;AAEA,UAAMmL,OAAO,GAAG,KAAKuD,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;AAChE9G,MAAAA,KAAK,EAAE8T;AADyD,KAAlD,CAAhB;;;AAIA,WAAOpT,OAAP;AACD;;;;AAKH,MAAMiT,gBAAgB,GAAG,CACvB1K,SADuB,EAEvBG,OAFuB;AAIvB,SAAO;AACL7J,IAAAA,EAAE,EAAE0J,SADC;AAELC,IAAAA,GAAG,EAAEE,OAAF,oBAAEA,OAAO,CAAEF,GAFT;AAGL6K,IAAAA,UAAU,EAAE3K,OAAF,oBAAEA,OAAO,CAAE2K;AAHhB,GAAP;AAKD,CATD;;MC5DaC,iCAAiCpP;AAG5C3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAImP,2BAAJ,CAAgCzP,OAAhC,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,qBAAP;AACD;;AAEDF,EAAAA,WAAW,CAACzC,MAAD;AACTA,IAAAA,MAAM,CAAC7C,GAAP,CAAW,SAAX,EAAsB,KAAKoU,MAAL,CAAY9Q,IAAZ,CAAiB,IAAjB,CAAtB;AACD;;AAED8Q,EAAAA,MAAM,CAAC7R,OAAD,EAAmBiB,QAAnB;AACJ,UAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBuP,MAAhB,CACf7R,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACjC,KAFO,CAAjB;AAIA,WAAOkD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;AACD;;;;MCZUyU,0BAA0BpN;AAAvC5P,EAAAA;;AAuCE,gBAAA,GAAU;AACRid,MAAAA,OAAO,EAAE,CACPrY,UADO,EAEP2D,QAFO,EAGP;AAAE6B,QAAAA;AAAF,OAHO;AAKP,YAAI7B,QAAQ,CAAC8J,UAAT,CAAoB6K,MAAxB,EAAgC;AAC9B3U,UAAAA,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,GAA8BvH,QAAQ,CAAC8J,UAAT,CAAoB6K,MAAlD,CAD8B;;AAG9B3U,UAAAA,QAAQ,CAAC8J,UAAT,CAAoB6K,MAApB,GAA6B5e,SAA7B;AACD;;AACDiK,QAAAA,QAAQ,CAAC8J,UAAT,CAAoB8K,gBAApB,GAAuC,KAAvC;AACA5U,QAAAA,QAAQ,CAAC8J,UAAT,CAAoB+K,SAApB,GAAgC,IAAhC;AACD,OAbO;AAcRC,MAAAA,YAAY,EAAE,CACZzY,UADY,EAEZ2D,QAFY,EAGZ;AAAEyJ,QAAAA,SAAF;AAAaC,QAAAA,GAAb;AAAkBlN,QAAAA,IAAlB;AAAwB7D,QAAAA,KAAxB;AAA+Bgc,QAAAA;AAA/B,OAHY;AAKZ,cAAMI,QAAQ,GAAGJ,MAAM,KAAK5e,SAAX,GAAuB4e,MAAvB,GAAgC,KAAjD;AACA,cAAMK,WAAW,GAAGC,cAAc,CAACjV,QAAD,EAAW+U,QAAX,CAAlC;AACA,cAAM;AAAEnL,UAAAA,OAAF;AAAWsL,UAAAA,eAAX;AAA4BC,UAAAA;AAA5B,YAA6CC,UAAU,CAC3DJ,WAD2D,EAE3DvL,SAF2D,EAG3DC,GAH2D,CAA7D;;AAKA,YAAI,CAACE,OAAL,EAAc;AACZ,gBAAM,IAAIzO,KAAJ,oBACesO,oBAAoBC,4BAA4B1J,QAAQ,CAACD,IADxE,CAAN;AAGD;;AAED,YAAI,CAAC6J,OAAO,CAAC2K,UAAb,EAAyB;AACvB3K,UAAAA,OAAO,CAAC2K,UAAR,GAAqB,EAArB;AACD;;AAED,cAAMc,YAAY,GAAGzL,OAAO,CAAC2K,UAAR,CAAmBnU,IAAnB,CAAwBkV,IAAI,IAAIA,IAAI,CAAC9Y,IAAL,KAAcA,IAA9C,CAArB;;AACA,YAAI6Y,YAAJ,EAAkB;AAChBA,UAAAA,YAAY,CAAC1c,KAAb,GAAqBA,KAArB;AACD,SAFD,MAEO;AACLiR,UAAAA,OAAO,CAAC2K,UAAR,CAAmBnS,IAAnB,CAAwB;AACtB5F,YAAAA,IADsB;AAEtB7D,YAAAA;AAFsB,WAAxB;AAID;;AACD,YAAIoc,QAAJ,EAAc;AACZ/U,UAAAA,QAAQ,CAAC8J,UAAT,CAAoB6K,MAApB,GAA6BK,WAA7B;;AACA,cAAIE,eAAJ,EAAqB;AACnBlV,YAAAA,QAAQ,CAAC8J,UAAT,CAAoB6K,MAApB,CAA2B5K,aAA3B,GAA2CH,OAA3C;AACD,WAFD,MAEO;AACL5J,YAAAA,QAAQ,CAAC8J,UAAT,CAAoB6K,MAApB,CAA2B3K,QAA3B,CAAoCmL,YAApC,IAAoDvL,OAApD;AACD;;AACD5J,UAAAA,QAAQ,CAAC8J,UAAT,CAAoB8K,gBAApB,GAAuC,IAAvC;AACD,SARD,MAQO;AACL5U,UAAAA,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,GAA8ByN,WAA9B;;AACA,cAAIE,eAAJ,EAAqB;AACnBlV,YAAAA,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,CAA4BwC,aAA5B,GAA4CH,OAA5C;AACD,WAFD,MAEO;AACL5J,YAAAA,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,CAA4ByC,QAA5B,CAAqCmL,YAArC,IAAqDvL,OAArD;AACD;AACF;AACF;AA7DO,KAAV;AA0GD;;AAhJCtC,EAAAA,SAAS;AACP,WAAO,SAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;AACJ,UAAM4O,WAAW,GAAG;AAClBxY,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IADM;AAElBmO,MAAAA,IAAI,EAAEvE,KAAK,CAACuE,IAFM;AAGlBuJ,MAAAA,UAAU,EAAE,EAHM;AAIlBnK,MAAAA,aAAa,EACX3D,KAAK,CAAC2D,aAAN,IAAuBoK,kBAAgB,CAAC,CAAD,EAAI/N,KAAK,CAAC2D,aAAV,CALvB;AAMlBC,MAAAA,QAAQ,EACN5D,KAAK,CAAC4D,QAAN,IACA5D,KAAK,CAAC4D,QAAN,CAAehS,GAAf,CAAmB,CAAC4R,OAAD,EAAU9T,KAAV;AACjB,eAAOqe,kBAAgB,CAACre,KAAK,GAAG,CAAT,EAAY8T,OAAZ,CAAvB;AACD,OAFD,CARgB;AAYlB;AACAwK,MAAAA,cAAc,EAAEhO,KAAK,CAACgO;AAbJ,KAApB;AAgBA,UAAMpU,QAAQ,GAAY,EACxB,GAAGiE,yBAAyB,EADJ;AAExB6F,MAAAA,UAAU,EAAE;AACV;AACAvC,QAAAA,OAAO,EAAEnB,KAAK,CAACsO,OAAN,GAAgBM,WAAhB,GAA8Bjf,SAF7B;AAGV;AACA4e,QAAAA,MAAM,EAAEvO,KAAK,CAACsO,OAAN,GAAgB3e,SAAhB,GAA4Bif,WAJ1B;AAKVJ,QAAAA,gBAAgB,oBAAExO,KAAK,CAACsO,OAAR,6BAAmB,IALzB;AAMVG,QAAAA,SAAS,qBAAEzO,KAAK,CAACsO,OAAR,8BAAmB;AANlB;AAFY,KAA1B;AAYA,SAAKtN,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AAEA,WAAOA,QAAP;AACD;;;;AA8GH,MAAMiV,cAAc,GAAG,CAAC/V,OAAD,EAAmByV,MAAnB;AACrB,MAAI,CAACA,MAAD,IAAWzV,OAAO,CAAC4K,UAAR,CAAmBvC,OAAlC,EAA2C;AACzC,WAAOrI,OAAO,CAAC4K,UAAR,CAAmBvC,OAA1B;AACD;;AACD,SAAOrI,OAAO,CAAC4K,UAAR,CAAmB6K,MAA1B;AACD,CALD;;AAaA,MAAMS,UAAU,GAAG,CACjBJ,WADiB,EAEjBvL,SAFiB,EAGjBC,GAHiB;AAKjB,QAAMM,QAAQ,GAAG,CAACgL,WAAW,CAACjL,aAAb,EAA4B,GAAGiL,WAAW,CAAChL,QAA3C,CAAjB;AACA,QAAMuL,YAAY,GAAGvL,QAAQ,CAAC5J,IAAT,CAAewJ,OAAD;AACjC,QAAIH,SAAJ,EAAe;AACb,aAAOG,OAAO,CAAC7J,EAAR,KAAe0J,SAAtB;AACD;;AACD,QAAIC,GAAJ,EAAS;AACP,aAAOE,OAAO,CAACF,GAAR,KAAgBA,GAAvB;AACD;;AACD,WAAO,KAAP;AACD,GARoB,CAArB;AAUA,QAAMwL,eAAe,GAAGK,YAAY,KAAKP,WAAW,CAACjL,aAArD;AACA,SAAO;AACLH,IAAAA,OAAO,EAAE2L,YADJ;AAELL,IAAAA,eAFK;AAGLC,IAAAA,YAAY,EACV,CAACD,eAAD,IAAoBK,YAApB,GACIP,WAAW,CAAChL,QAAZ,CAAqB9T,OAArB,CAA6Bqf,YAA7B,CADJ,GAEI,CAAC;AANF,GAAP;AAQD,CAzBD;;AA2BA,MAAMpB,kBAAgB,GAAG,CACvB1K,SADuB,EAEvBG,OAFuB;AAIvB,SAAO;AACL7J,IAAAA,EAAE,EAAE0J,SADC;AAELC,IAAAA,GAAG,EAAEE,OAAF,oBAAEA,OAAO,CAAEF,GAFT;AAGL6K,IAAAA,UAAU,EAAE3K,OAAF,oBAAEA,OAAO,CAAE2K,UAHhB;AAILhK,IAAAA,MAAM,EAAEX,OAAF,oBAAEA,OAAO,CAAEW;AAJZ,GAAP;AAMD,CAVD;;MCrMaiL,uBAAuBpQ;AAGlC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAI2P,iBAAJ,CAAsBjQ,OAAtB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,UAAP;AACD;;;;MCAUgQ,8BAA8BpO;AAA3C5P,EAAAA;;;AAoBE,wDAAA,GAAkD,CAChDie,WADgD,EAEhDtP,KAFgD;AAAA;;AAAA,aAGvB,EACzB,GAAGA,KADsB;AAEzBuP,QAAAA,mBAAmB,2BAAEvP,KAAK,CAACuP,mBAAR,oCAA+B,MAFzB;AAGzBC,QAAAA,SAAS,sBAAExP,KAAK,CAACwP,SAAR,+BAAqB,YAHL;AAIzBC,QAAAA,YAAY,yBAAEzP,KAAK,CAACyP,YAAR,kCAAwB;AAJX,OAHuB;AAAA,KAAlD;;AA0BA,gBAAA,GAKI;AACFC,MAAAA,6BAA6B,EAAE,CAC7BzZ,UAD6B,EAE7B2D,QAF6B,EAG7B;AACE+V,QAAAA,aADF;AAEEC,QAAAA;AAFF,OAH6B;;;AAQ7B,cAAMC,mBAAmB,GAAIxd,IAAD;AAC1B,kBAAQA,IAAI,CAAC+D,IAAb;AACE,iBAAK,OAAL;AACE/D,cAAAA,IAAI,CAACY,MAAL,CAAY2E,OAAZ,CAAoBzE,CAAC;AACnB,oBAAIA,CAAC,CAACgD,GAAF,IAASyZ,QAAQ,CAACzZ,GAAtB,EAA2B;AACzBhD,kBAAAA,CAAC,CAAC2c,KAAF,GAAUF,QAAQ,CAACE,KAAnB;AACD;AACF,eAJD;AAKA;;AACF,iBAAK,KAAL;AACED,cAAAA,mBAAmB,CAACxd,IAAI,CAAC0d,WAAN,CAAnB;AACA;AAVJ;AAYD,SAbD;;AAeA,gCAAAnW,QAAQ,CAACuU,UAAT,0CAAqBvW,OAArB,CAA6BrF,KAAK;AAChC,cAAIA,KAAK,CAAC6D,IAAN,IAAcuZ,aAAlB,EAAiC;AAC/BE,YAAAA,mBAAmB,CAACtd,KAAK,CAACF,IAAP,CAAnB;AACD;AACF,SAJD;AAKD,OA7BC;AA8BF2d,MAAAA,WAAW,EAAE,CACX/Z,UADW,EAEX2D,QAFW,EAGX;AAAE+V,QAAAA,aAAF;AAAiBG,QAAAA;AAAjB,OAHW;;;AAKX,iCAAAlW,QAAQ,CAACuU,UAAT,2CAAqBvW,OAArB,CAA6BrF,KAAK;AAChC,cAAIA,KAAK,CAAC6D,IAAN,IAAcuZ,aAAlB,EAAiC;AAC/Bpd,YAAAA,KAAK,CAACud,KAAN,GAAcA,KAAd;AACD;AACF,SAJD;AAKD;AAxCC,KALJ;AA+CD;;AA5FC5O,EAAAA,SAAS;AACP,WAAO,cAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;AACJ,UAAMpG,QAAQ,GAAgB,EAC5B,GAAGiE,yBAAyB,EADA;AAE5B1H,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAFiB;AAG5BC,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IAHgB;AAI5B6L,MAAAA,WAAW,EAAEjC,KAAK,CAACiC,WAJS;AAK5BkM,MAAAA,UAAU,EAAE,sBAACnO,KAAK,CAACmO,UAAP,gCAAqB,EAArB,EAAyBvc,GAAzB,CAA6Bd,CAAC,IACxC,KAAKmf,+CAAL,CAAqDha,UAArD,EAAiEnF,CAAjE,CADU;AALgB,KAA9B;AAUA,SAAKkQ,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;AAYD2F,EAAAA,UAAU,CAACtJ,UAAD,EAAqBE,GAArB;AACR,UAAM3G,MAAM,GAAG,KAAK6O,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;AAC/D9G,MAAAA,KAAK,EAAE,SAASjE,MAAT;AADwD,KAAlD,CAAf;;AAGA,QAAI3G,MAAM,CAACoL,KAAP,KAAiB,CAArB,EAAwB;AACtB,aAAOpL,MAAM,CAACsL,OAAP,CAAe,CAAf,CAAP;AACD;;;AAGD,QAAItL,MAAM,CAACoL,KAAP,GAAe,CAAnB,EAAsB;AACpB,YAAM,IAAI7F,KAAJ,CAAU,4BAAV,CAAN;AACD;;AAED;AACD;;;;MCtDUmb,2BAA2BlR;AAGtC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAI2Q,qBAAJ,CAA0BjR,OAA1B,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,eAAP;AACD;;AAEDF,EAAAA,WAAW,CAACzC,MAAD;AACTA,IAAAA,MAAM,CAAC7C,GAAP,CAAW,WAAX,EAAwB,KAAK0F,UAAL,CAAgBpC,IAAhB,CAAqB,IAArB,CAAxB;AACD;;AAEDoC,EAAAA,UAAU,CAACnD,OAAD,EAAmBiB,QAAnB;AACR,UAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBa,UAAhB,CACfnD,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe5B,GAFA,CAAjB;;AAIA,QAAIyD,QAAJ,EAAc;AACZ,aAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;AACD;;AACD,WAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;AACD;;;;AC5BI,MAAMuS,eAAe,GAAG,CAAIvW,QAAJ,EAAiBwW,IAAjB;AAC7B,QAAMC,KAAK,GAAGD,IAAI,CAACza,KAAL,CAAW,GAAX,CAAd;AACA,QAAM2a,KAAK,GAAG5Y,IAAI,CAACxD,KAAL,CAAWwD,IAAI,CAACC,SAAL,CAAeiC,QAAf,CAAX,CAAd;AACA,MAAIxH,GAAG,GAAGke,KAAV;AAEA,QAAMve,MAAM,GAAGse,KAAK,CAACE,GAAN,EAAf;;AACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,KAAK,CAACvb,MAA1B,EAAkC0b,CAAC,EAAnC,EAAuC;AACrC,UAAMC,IAAI,GAAGJ,KAAK,CAACG,CAAD,CAAlB;AACApe,IAAAA,GAAG,GAAGA,GAAG,CAACqe,IAAD,CAAT;;AAEA,QAAIre,GAAG,IAAIzC,SAAX,EAAsB;AACpB,aAAOiK,QAAP;AACD;AACF;;AAED,MAAIxH,GAAG,IAAIL,MAAP,IAAiBK,GAAG,CAACL,MAAD,CAAxB,EAAkC;AAChCK,IAAAA,GAAG,CAACL,MAAD,CAAH,GAAc,MAAd;AACD;;AACD,SAAOue,KAAP;AACD,CAnBM;;MCoBMI,0BAA0B/P;AAAvCtP,EAAAA;;AAiCE,gBAAA,GAKI;AACFkX,MAAAA,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;AAAExD,QAAAA;AAAF,OAHU;AAKVwD,QAAAA,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;AACD,OAPC;AAQFua,MAAAA,gBAAgB,EAAE,CAChB1a,UADgB,EAEhB2D,QAFgB,EAGhB;AAAEtD,QAAAA;AAAF,OAHgB;AAKhBsD,QAAAA,QAAQ,CAACtD,UAAT,GAAsBA,UAAtB;AACD,OAdC;AAeFsa,MAAAA,eAAe,EAAE,CACf3a,UADe,EAEf2D,QAFe,EAGf;AAAEvD,QAAAA;AAAF,OAHe;AAKfuD,QAAAA,QAAQ,CAACvD,SAAT,GAAqBA,SAArB;AACD,OArBC;AAsBFwa,MAAAA,eAAe,EAAE,CACf5a,UADe,EAEf2D,QAFe,EAGf;AAAErD,QAAAA;AAAF,OAHe;AAKfqD,QAAAA,QAAQ,CAACrD,SAAT,GAAqBA,SAArB;AACD,OA5BC;AA6BFua,MAAAA,qBAAqB,EAAE,CACrB7a,UADqB,EAErB2D,QAFqB,EAGrB;AAAEmX,QAAAA;AAAF,OAHqB;AAKrBnX,QAAAA,QAAQ,CAAC/C,QAAT,CAAkBC,OAAlB,GAA4Bia,eAA5B;AACD,OAnCC;AAoCFC,MAAAA,kCAAkC,EAAE,CAClC/a,UADkC,EAElC2D,QAFkC,EAGlC;AAAE9C,QAAAA;AAAF,OAHkC;;;AAKlC,YAAI,2BAAC8C,QAAQ,CAAC1C,cAAV,aAAC,sBAAyBC,QAA1B,CAAJ,EAAwC;AACtC,gBAAM,IAAIpC,KAAJ,CAAU,uBAAV,CAAN;AACD;;AACD6E,QAAAA,QAAQ,CAAC1C,cAAT,CAAwBC,QAAxB,CAAiCC,MAAjC,GAA0CN,OAAO,GAC7C,WAD6C,GAE7C,aAFJ;AAGA8C,QAAAA,QAAQ,CAAC1C,cAAT,CAAwBC,QAAxB,CAAiC8G,cAAjC,GAAkD,IAAIF,IAAJ,GAAWC,WAAX,EAAlD;AACD,OAhDC;AAiDFiT,MAAAA,uBAAuB,EAAE,CACvBhb,UADuB,EAEvB2D,QAFuB,EAGvB;AAAExC,QAAAA;AAAF,OAHuB;;;AAKvB,YAAI,4BAACwC,QAAQ,CAAC1C,cAAV,aAAC,uBAAyBG,MAA1B,CAAJ,EAAsC;AACpC,gBAAM,IAAItC,KAAJ,CAAU,uBAAV,CAAN;AACD;;AACD6E,QAAAA,QAAQ,CAAC1C,cAAT,CAAwBG,MAAxB,CAA+BD,MAA/B,GAAwCA,MAAxC;AACAwC,QAAAA,QAAQ,CAAC1C,cAAT,CAAwBG,MAAxB,CAA+B4G,cAA/B,GAAgD,IAAIF,IAAJ,GAAWC,WAAX,EAAhD;AACD,OA3DC;AA4DFkT,MAAAA,wBAAwB,EAAE,CACxBjb,UADwB,EAExB2D,QAFwB,EAGxB;AAAE5C,QAAAA;AAAF,OAHwB;AAKxB4C,QAAAA,QAAQ,CAAC5C,qBAAT,GAAiCA,qBAAjC;AACD,OAlEC;AAmEFma,MAAAA,gBAAgB,EAAE,CAChBlb,UADgB,EAEhB2D,QAFgB,EAGhB;AAAE3C,QAAAA;AAAF,OAHgB;AAKhB2C,QAAAA,QAAQ,CAAC3C,aAAT,GAAyBA,aAAzB;AACD,OAzEC;AA0EFma,MAAAA,mCAAmC,EAAE,CACnCnb,UADmC,EAEnC2D,QAFmC,EAGnC;AACEjD,QAAAA;AADF,OAHmC;AAOnCiD,QAAAA,QAAQ,CAAClD,KAAT,CAAeC,6BAAf,GAA+CA,6BAA/C;AACD,OAlFC;AAmFF0a,MAAAA,wBAAwB,EAAE,CACxBpb,UADwB,EAExB2D,QAFwB,EAGxB;AAAE0X,QAAAA;AAAF,OAHwB;AAKxBrW,QAAAA,OAAO,CAAC8E,GAAR,CAAYuR,kBAAZ;AACA1X,QAAAA,QAAQ,CAAClD,KAAT,GAAiB4a,kBAAkB,IAAI;AACrC3a,UAAAA,6BAA6B,EAAE,KADM;AAErCC,UAAAA,+BAA+B,EAAE;AAFI,SAAvC;AAID;AA7FC,KALJ;AAoGD;;AApICiD,EAAAA,GAAG,CAAC5D,UAAD;AACD,UAAMsb,IAAI,GAAG,KAAKlT,QAAL,CAAcmT,UAAd,CAAyBvb,UAAzB,CAAb;;AACA,UAAM2D,QAAQ,GAAG,KAAKyE,QAAL,CAAcmT,UAAd,CAAyBvb,UAAzB,CAAjB;;AACA,UAAMwb,MAAM,GAAGtB,eAAe,CAC5BvW,QAD4B,EAE5B,mCAF4B,CAA9B;AAIA,WAAO6X,MAAP;AACD;;AAEDzQ,EAAAA,IAAI,CAAC/K,UAAD,EAAqB2D,QAArB;AACF,UAAMuH,OAAO,GAAG,KAAKtH,GAAL,CAAS5D,UAAT,CAAhB;;AAEA,QAAIkL,OAAJ,EAAa;AACXX,MAAAA,2BAA2B,CAACW,OAAD,EAAUvH,QAAQ,CAACtC,OAAnB,CAA3B;AACD,KAFD,MAEO;AACL,UAAIsC,QAAQ,CAACtC,OAAT,KAAqB,CAAzB,EAA4B;AAC1B,cAAM,IAAI1B,kBAAJ,CACJ;AACE2E,UAAAA,IAAI,EAAE,kBADR;AAEEjJ,UAAAA,OAAO,EAAE;AAFX,SADI,EAKJ,GALI,CAAN;AAOD;AACF;;;AAGDsI,IAAAA,QAAQ,CAACtC,OAAT,IAAoB,CAApB;;AACA,SAAK+G,QAAL,CAAcqT,WAAd,CAA0B9X,QAA1B;AACD;;;;MC/CU+X;AAGXtgB,EAAAA,YAAY4N,QAAgBb;AAC1B,SAAKM,UAAL,GAAkB,IAAIgS,iBAAJ,CAAsBtS,OAAtB,CAAlB;AACA,SAAKc,cAAL,CAAoBD,MAApB;AACD;;AAEDC,EAAAA,cAAc,CAACD,MAAD;AACZA,IAAAA,MAAM,CAACpF,GAAP,CAAW,EAAX,EAAe,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAAf;AACA8B,IAAAA,MAAM,CAAChC,IAAP,CAAY,EAAZ,EAAgB,KAAKA,IAAL,CAAUE,IAAV,CAAe,IAAf,CAAhB;AACD;;AAEDtD,EAAAA,GAAG,CAACuC,OAAD,EAAmBiB,QAAnB;AACD,UAAMpH,UAAU,GAAGmG,OAAO,CAACrE,MAAR,CAAe9B,UAAlC;AACA,UAAMsB,OAAO,GAAG,KAAKmH,UAAL,CAAgB7E,GAAhB,CAAoB5D,UAApB,CAAhB;AACA,WAAOoH,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BrG,OAA1B,CAAP;AACD;;AAED0F,EAAAA,IAAI,CAACb,OAAD,EAAmBiB,QAAnB;AACF,UAAM8C,aAAa,GAAW/D,OAAO,CAACsB,IAAtC;AACA,UAAMnG,OAAO,GAAG,KAAKmH,UAAL,CAAgB7E,GAAhB,CAAoBuC,OAAO,CAACrE,MAAR,CAAe9B,UAAnC,CAAhB;;AAEA,QAAI,CAACsB,OAAL,EAAc;AACZ,aAAO8F,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,EAA1B,CAAP;AACD;;AAED,UAAMwC,eAAe,GAAG,KAAK1B,UAAL,CAAgB2B,oBAAhB,CACtBjE,OAAO,CAACrE,MAAR,CAAe9B,UADO,EAEtBsB,OAFsB,EAGtB4I,aAAa,CAACG,OAHQ,CAAxB;AAMA,WAAOjD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,EAA1B,CAAP;AACD;;;;MCTUgU,iCAAiC3Q;AAA9C5P,EAAAA;;;AAuBU,gCAAA,GAA0B,CAChC4E,UADgC,EAEhC+J,KAFgC;AAAA;;AAAA,aAGlB,EACd,GAAGA,KADW;AAEd9G,QAAAA,IAAI,EAAE0I,kCAAkC,CACtC5B,KAAK,CAAC9G,IADgC,EAEtCjD,UAFsC,EAGtC,KAAKoI,QAHiC,CAF1B;AAOdwT,QAAAA,aAAa,0BAAE7R,KAAK,CAAC6R,aAAR,qBAAE,qBAAqBjgB,GAArB,CAAyB,KAAKkgB,sBAA9B;AAPD,OAHkB;AAAA,KAA1B;;AAaA,+BAAA,GAA0BC,IAAD;AAC/B,aAAO;AACL3N,QAAAA,KAAK,EAAE5C,gBAAgB,CAACuQ,IAAI,CAAC3N,KAAN,CADlB;AAEL4N,QAAAA,SAAS,EAAED,IAAI,CAACC,SAAL,IAAkBxQ,gBAAgB,CAACuQ,IAAI,CAACC,SAAN,CAFxC;AAGLC,QAAAA,KAAK,EAAEF,IAAI,CAACE,KAAL,IAAc;AAHhB,OAAP;AAKD,KANO;;AAQR,gBAAA,GASI;AACFC,MAAAA,eAAe,EAAE,CACfjc,UADe,EAEf2D,QAFe,EAGf;AAAEuY,QAAAA,YAAF;AAAgBjZ,QAAAA;AAAhB,OAHe;AAKf,cAAM6Y,IAAI,GAAG,KAAKD,sBAAL,CAA4BK,YAA5B,CAAb;;AAEAvY,QAAAA,QAAQ,CAACwY,SAAT,CAAmBxa,OAAnB,CAA2Bya,QAAQ;AACjC,cAAIA,QAAQ,CAACnZ,IAAT,CAAcS,EAAd,IAAoBT,IAAI,CAACS,EAA7B,EAAiC;AAC/B0Y,YAAAA,QAAQ,CAACR,aAAT,CAAuB7V,IAAvB,CAA4B+V,IAA5B;AACA;AACD;AACF,SALD;AAMAnY,QAAAA,QAAQ,CAACwY,SAAT,CAAmBpW,IAAnB,CAAwB;AACtB9C,UAAAA,IAAI,EAAE;AACJI,YAAAA,MAAM,EAAE,MADJ;AAEJK,YAAAA,EAAE,EAAET,IAAI,CAACS;AAFL,WADgB;AAKtBkY,UAAAA,aAAa,EAAE,CAACE,IAAD;AALO,SAAxB;AAOD,OArBC;AAsBFO,MAAAA,kBAAkB,EAAE,CAClBrc,UADkB,EAElB2D,QAFkB,EAGlB;AAAEuY,QAAAA,YAAF;AAAgBjZ,QAAAA;AAAhB,OAHkB;AAKlB,cAAM6Y,IAAI,GAAG,KAAKD,sBAAL,CAA4BK,YAA5B,CAAb;;AAEAvY,QAAAA,QAAQ,CAACwY,SAAT,CAAmBxa,OAAnB,CAA2Bya,QAAQ;AACjC,cAAIA,QAAQ,CAACnZ,IAAT,CAAcS,EAAd,IAAoBT,IAAI,CAACS,EAA7B,EAAiC;AAC/B0Y,YAAAA,QAAQ,CAACR,aAAT,GAAyBQ,QAAQ,CAACR,aAAT,CAAuB3e,MAAvB,CAA8Bqf,SAAS;AAC9D,qBAAO,CAACxR,SAAS,CAACgR,IAAD,EAAOQ,SAAP,CAAjB;AACD,aAFwB,CAAzB;AAGD;AACF,SAND;AAOD,OApCC;AAqCFC,MAAAA,OAAO,EAAE,CACPvc,UADO,EAEP2D,QAFO,EAGP;AAAEV,QAAAA;AAAF,OAHO;AAKP,cAAMuZ,aAAa,GAAG7Q,kCAAkC,CACtD1I,IADsD,EAEtDjD,UAFsD,EAGtD,KAAKoI,QAHiD,CAAxD;;AAMA,YAAIzE,QAAQ,CAACwY,SAAT,KAAuBziB,SAA3B,EAAsC;AACpCiK,UAAAA,QAAQ,CAACwY,SAAT,GAAqB,EAArB;AACD;;AAEDxY,QAAAA,QAAQ,CAACwY,SAAT,CAAmBpW,IAAnB,CAAwB;AACtB9C,UAAAA,IAAI,EAAEuZ,aADgB;AAEtBZ,UAAAA,aAAa,EAAE;AAFO,SAAxB;AAID,OAxDC;AAyDFa,MAAAA,UAAU,EAAE,CACVzc,UADU,EAEV2D,QAFU,EAGV;AAAEV,QAAAA;AAAF,OAHU;AAKVU,QAAAA,QAAQ,CAACwY,SAAT,GAAqBxY,QAAQ,CAACwY,SAAT,CAAmBlf,MAAnB,CAA0Bmf,QAAQ;AACrD,iBAAOA,QAAQ,CAACnZ,IAAT,CAAcS,EAAd,KAAqBT,IAAI,CAACS,EAAjC;AACD,SAFoB,CAArB;AAGD,OAjEC;AAkEFoI,MAAAA,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;AAAEzD,QAAAA;AAAF,OAHM;AAKNyD,QAAAA,QAAQ,CAACzD,GAAT,GAAeA,GAAf;AACD,OAxEC;AAyEF6L,MAAAA,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;AAAEqI,QAAAA;AAAF,OAHc;AAKdrI,QAAAA,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;AACD,OA/EC;AAgFF0Q,MAAAA,uBAAuB,EAAE,CACvB1c,UADuB,EAEvB2D,QAFuB,EAGvB;AAAEgZ,QAAAA;AAAF,OAHuB;AAKvBhZ,QAAAA,QAAQ,CAACgZ,oBAAT,GAAgCA,oBAAhC;AACD,OAtFC;AAuFFC,MAAAA,YAAY,EAAE,CACZ5c,UADY,EAEZ2D,QAFY,EAGZ;AAAEpI,QAAAA;AAAF,OAHY;AAKZoI,QAAAA,QAAQ,CAACpI,SAAT,GAAqBA,SAArB;AACD,OA7FC;AA8FFshB,MAAAA,eAAe,EAAE,CACf7c,UADe,EAEf2D,QAFe,EAGf;AAAEmZ,QAAAA;AAAF,OAHe;AAKfnZ,QAAAA,QAAQ,CAACmZ,SAAT,GAAqBA,SAArB;AACD,OApGC;AAqGFxK,MAAAA,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;AAAExD,QAAAA;AAAF,OAHU;AAKVwD,QAAAA,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;AACD;AA3GC,KATJ;AAsHD;;AAjKC8K,EAAAA,SAAS;AACP,WAAO,iBAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;AACJ,UAAMpG,QAAQ,GAAmB,EAC/B,GAAGiE,yBAAyB,EADG;AAE/B,SAAGmC,KAF4B;AAG/BgT,MAAAA,WAAW,EAAEpR,kCAAkC,CAC7C5B,KAAK,CAACgT,WADuC,EAE7C/c,UAF6C,EAG7C,KAAKoI,QAHwC,CAHhB;AAQ/B+T,MAAAA,SAAS,sBAAEpS,KAAK,CAACoS,SAAR,qBAAE,iBAAiBxgB,GAAjB,CAAqBqhB,CAAC,IAC/B,KAAKC,uBAAL,CAA6Bjd,UAA7B,EAAyCgd,CAAzC,CADS,CARoB;AAW/BvN,MAAAA,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;AAXK,KAAjC;AAaA,SAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MC/CUuZ,8BAA8BnU;AAGzC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIkT,wBAAJ,CAA6BxT,OAA7B,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,kBAAP;AACD;;;;MCFU+T,+BAA+BnS;AAC1CC,EAAAA,SAAS;AACP,WAAO,eAAP;AACD;;AACDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;AACJ;AAEA,UAAMpG,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;AAE7B,SAAGmC,KAF0B;AAG7B0F,MAAAA,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CAHG;AAI7BgV,MAAAA,aAAa,EAAE,EAJc;AAK7BtP,MAAAA,SAAS,sBAAE/D,KAAK,CAAC+D,SAAR,qBAAE,iBAAiBnS,GAAjB,CAAqBqI,CAAC;AAAA;;AAAA,eAAK,EACpC,GAAG4D,yBAAyB,EADQ;AAEpC,aAAG5D,CAFiC;AAGpCqZ,UAAAA,OAAO,gBAAErZ,CAAC,CAACqZ,OAAJ,yBAAe,EAHc;AAIpClQ,UAAAA,SAAS,kBAAEnJ,CAAC,CAACmJ,SAAJ,2BAAiB,EAJU;AAKpChN,UAAAA,IAAI,EAAE,EAL8B;AAMpCmN,UAAAA,QAAQ,iBAAEtJ,CAAC,CAACsJ,QAAJ,0BAAgB,CANY;AAOpCiB,UAAAA,WAAW,EAAE;AAAElL,YAAAA,MAAM,EAAE,cAAV;AAA0BK,YAAAA,EAAE,EAAE;AAA9B,WAPuB;AAQpC+L,UAAAA,MAAM,EAAEtE,kBAAkB,CAACnH,CAAC,CAACyL,MAAH,EAAWzP,UAAX,EAAuB,KAAKoI,QAA5B;AARU,SAAL;AAAA,OAAtB,CALkB;AAe7B3F,MAAAA,QAAQ,EAAEsH,KAAK,CAACtH,QAAN,GACNkJ,kCAAkC,CAChC5B,KAAK,CAACtH,QAD0B,EAEhCzC,UAFgC,EAGhC,KAAKoI,QAH2B,CAD5B,GAMN1O,SArByB;AAsB7BqJ,MAAAA,KAAK,EAAE,gBAAAgH,KAAK,CAAChH,KAAN,0BAAa7C,GAAb,GACH;AAAEmD,QAAAA,MAAM,EAAE,OAAV;AAAmBnD,QAAAA,GAAG,EAAE6J,KAAK,CAAChH,KAAN,CAAY7C;AAApC,OADG,GAEHxG;AAxByB,KAA/B;AA0BA,SAAKqR,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MC3CU2Z,4BAA4BvU;AAGvC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAI0U,sBAAJ,CAA2BhV,OAA3B,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,gBAAP;AACD;;;;MCAUmU,wBAAwBvS;AAArC5P,EAAAA;;AAoBE,gBAAA,GAKI;AACFoiB,MAAAA,SAAS,EAAE,CACTxd,UADS,EAET2D,QAFS,EAGT;AAAEzD,QAAAA;AAAF,OAHS;AAKTyD,QAAAA,QAAQ,CAACzD,GAAT,GAAeA,GAAf;AACD,OAPC;AAQF6L,MAAAA,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;AAAEqI,QAAAA;AAAF,OAHc;AAKdrI,QAAAA,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;AACD,OAdC;AAeFyH,MAAAA,OAAO,EAAE,CACPzT,UADO,EAEP2D,QAFO,EAGP;AAAExD,QAAAA;AAAF,OAHO;AAKPwD,QAAAA,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;AACD,OArBC;AAsBFsd,MAAAA,QAAQ,EAAE,CACRzd,UADQ,EAER2D,QAFQ,EAGR;AAAEwO,QAAAA;AAAF,OAHQ;AAKRxO,QAAAA,QAAQ,CAACwO,KAAT,GAAiBA,KAAjB;AACD;AA5BC,KALJ;AAmCD;;AAtDClH,EAAAA,SAAS;AACP,WAAO,OAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;AAEtB,SAAGmC,KAFmB;AAGtB2T,MAAAA,OAAO,EAAE,KAHa;AAItBC,MAAAA,OAAO,EAAE5T,KAAK,CAAC4T,OAAN,IAAiB,KAJJ;AAKtBC,MAAAA,WAAW,EAAE,CAAC7T,KAAK,CAAC6T,WAAN,IAAqB,EAAtB,EAA0BjiB,GAA1B,CAA8BgC,CAAC,IAC1CgO,kCAAkC,CAAChO,CAAD,EAAIqC,UAAJ,EAAgB,KAAKoI,QAArB,CADvB;AALS,KAAxB;AAUA,SAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MC5BUka,qBAAqB9U;AAGhC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAI8U,eAAJ,CAAoBpV,OAApB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,QAAP;AACD;;;;MCCU0U,wBAAwB9S;AAArC5P,EAAAA;;AAoCE,gBAAA,GAKI;AACFqY,MAAAA,OAAO,EAAE,CACPzT,UADO,EAEP2D,QAFO,EAGP;AAAExD,QAAAA;AAAF,OAHO;AAKPwD,QAAAA,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;AACD,OAPC;AAQF4d,MAAAA,uBAAuB,EAAE,CACvB/d,UADuB,EAEvB2D,QAFuB,EAGvB;AAAEqa,QAAAA;AAAF,OAHuB;AAKvBra,QAAAA,QAAQ,CAACqa,oBAAT,GAAgC,KAAKC,iBAAL,CAC9Bje,UAD8B,EAE9Bge,oBAF8B,CAAhC;AAID,OAjBC;AAkBFE,MAAAA,YAAY,EAAE,CACZle,UADY,EAEZ2D,QAFY,EAGZ;AAAErD,QAAAA;AAAF,OAHY;AAKZqD,QAAAA,QAAQ,CAACrD,SAAT,GAAqBA,SAArB;AACD;AAxBC,KALJ;AA+BD;;AAlEC2K,EAAAA,SAAS;AACP,WAAO,OAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;AAEtB1H,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAFW;AAGtBC,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IAHU;AAItBG,MAAAA,SAAS,EAAEyJ,KAAK,CAACzJ,SAJK;AAKtB0d,MAAAA,oBAAoB,EAAE,KAAKC,iBAAL,CACpBje,UADoB,EAEpB+J,KAAK,CAACiU,oBAFc,CALA;AAStBG,MAAAA,cAAc,EAAE,KAAKF,iBAAL,CAAuBje,UAAvB,EAAmC+J,KAAK,CAACoU,cAAzC;AATM,KAAxB;AAWA,SAAKpT,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;AAEOsa,EAAAA,iBAAiB,CACvBje,UADuB,EAEvBoe,QAFuB;AAIvB,QAAI,CAACA,QAAL,EAAe,OAAO,EAAP;AAEf,WAAOA,QAAQ,CAACziB,GAAT,CAAa+P,GAAG,IACrBC,kCAAkC,CAChCD,GADgC,EAEhC1L,UAFgC,EAGhC,KAAKoI,QAH2B,CAD7B,CAAP;AAOD;;;;MC7CUiW,qBAAqBtV;AAGhC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIqV,eAAJ,CAAoB3V,OAApB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,QAAP;AACD;;;;MCLUkV,+BAA+BtT;AAC1CC,EAAAA,SAAS;AACP,WAAO,cAAP;AACD;;AACDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ;AACA;AACA,QAAIA,KAAK,CAACuK,WAAN,CAAkBlY,IAAlB,IAA0B,KAA9B,EAAqC;AACnC,YAAMmiB,QAAQ,GAAG,IAAIC,GAAJ,CAAQzU,KAAK,CAACuK,WAAN,CAAkBmK,QAA1B,CAAjB;AACA,YAAMC,SAAS,GAAGH,QAAQ,CAACI,QAAT,CAAkBjf,KAAlB,CAAwB,GAAxB,EAA6B,CAA7B,CAAlB;;AACA,UAAIgf,SAAS,IAAI,YAAjB,EAA+B;AAC7B,cAAME,IAAI,GAAG7U,KAAK,CAACuK,WAAnB;AACA,cAAM,IAAI3U,kBAAJ,CACJ;AACE2E,UAAAA,IAAI,EAAE,cADR;AAEEjJ,UAAAA,OAAO,EACL,uEACOujB,IAAI,CAACH,eAAeG,IAAI,CAACC,cAAcD,IAAI,CAACE,aADnD,GAEA;AALJ,SADI,EAQJ,GARI,CAAN;AAUD;AACF;;AAED,UAAMnb,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;AAE7BmX,MAAAA,OAAO,EAAEhV,KAAK,CAACgV,OAAN,IAAiB,EAFG;AAG7BzK,MAAAA,WAAW,EAAEvK,KAAK,CAACuK,WAHU;AAI7B0K,MAAAA,MAAM,EAAEjV,KAAK,CAACiV,MAAN,IAAgB;AACtB5iB,QAAAA,IAAI,EAAE;AADgB,OAJK;AAO7B8D,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAPkB;AAQ7BU,MAAAA,QAAQ,EAAEmJ,KAAK,CAACnJ,QAAN,IAAkB,EARC;AAS7BO,MAAAA,MAAM,EAAE;AATqB,KAA/B;AAWA,SAAK4J,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MC3CUsb,4BAA4BlW;AAGvC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAI6V,sBAAJ,CAA2BnW,OAA3B,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,eAAP;AACD;;;;MCIU8V,8BAA8BlU;AAA3C5P,EAAAA;;;AAeU,gCAAA,GAA2B2O,KAAD,KAAmC,EACnE,GAAGA,KADgE;AAEnErG,MAAAA,EAAE,EAAEmE,OAAM,EAFyD;AAGnEwN,MAAAA,MAAM,EAAEtL,KAAK,CAACsL,MAAN,IAAgB;AAH2C,KAAnC,CAA1B;;AAsBR,gBAAA,GAKI;AACF8J,MAAAA,UAAU,EAAE,CACVnf,UADU,EAEV2D,QAFU,EAGV;AAAEuT,QAAAA;AAAF,OAHU;AAKV,YAAIvT,QAAQ,CAACyb,KAAT,KAAmB1lB,SAAvB,EAAkC;AAChCiK,UAAAA,QAAQ,CAACyb,KAAT,GAAiB,EAAjB;AACD;;AACDzb,QAAAA,QAAQ,CAACyb,KAAT,CAAerZ,IAAf,CAAoB,KAAKsZ,uBAAL,CAA6BnI,OAA7B,CAApB;AACD,OAVC;AAWFoI,MAAAA,aAAa,EAAE,CACbtf,UADa,EAEb2D,QAFa,EAGb;AAAE4b,QAAAA;AAAF,OAHa;AAKb,YAAI5b,QAAQ,CAACyb,KAAT,KAAmB1lB,SAAvB,EAAkC;AAChCiK,UAAAA,QAAQ,CAACyb,KAAT,GAAiB,EAAjB;AACD;;AACDzb,QAAAA,QAAQ,CAACyb,KAAT,GAAiBzb,QAAQ,CAACyb,KAAT,CAAeniB,MAAf,CAAsBia,OAAO;AAC5C,iBAAOA,OAAO,CAACxT,EAAR,KAAe6b,SAAtB;AACD,SAFgB,CAAjB;AAGD,OAtBC;AAuBFC,MAAAA,cAAc,EAAE,CACdxf,UADc,EAEd2D,QAFc,EAGd;AAAE4b,QAAAA,SAAF;AAAarI,QAAAA;AAAb,OAHc;AAKd,YAAIvT,QAAQ,CAACyb,KAAT,KAAmB1lB,SAAvB,EAAkC;AAChCiK,UAAAA,QAAQ,CAACyb,KAAT,GAAiB,EAAjB;AACD;;AAED,cAAMK,UAAU,GAAG,KAAKJ,uBAAL,CAA6BnI,OAA7B,CAAnB;;AACA,aAAK,IAAIqD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG5W,QAAQ,CAACyb,KAAT,CAAevgB,MAAnC,EAA2C0b,CAAC,EAA5C,EAAgD;AAC9C,gBAAMuB,IAAI,GAAGnY,QAAQ,CAACyb,KAAT,CAAe7E,CAAf,CAAb;;AACA,cAAIuB,IAAI,CAACpY,EAAL,IAAW6b,SAAf,EAA0B;AACxB5b,YAAAA,QAAQ,CAACyb,KAAT,CAAe7E,CAAf,IAAoBkF,UAApB;AACD;AACF;AACF,OAvCC;AAwCF1T,MAAAA,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;AAAEqI,QAAAA;AAAF,OAHc;AAKdrI,QAAAA,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;AACD,OA9CC;AA+CFF,MAAAA,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;AAAEzD,QAAAA;AAAF,OAHM;AAKNyD,QAAAA,QAAQ,CAACzD,GAAT,GAAeA,GAAf;AACD,OArDC;AAsDFoS,MAAAA,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;AAAExD,QAAAA;AAAF,OAHU;AAKVwD,QAAAA,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;AACD;AA5DC,KALJ;AAmED;;AAvGC8K,EAAAA,SAAS;AACP,WAAO,cAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;AACJ,UAAMpG,QAAQ,GAAgB,EAC5B,GAAGiE,yBAAyB,EADA;AAE5B,SAAGmC,KAFyB;AAG5BqV,MAAAA,KAAK,EAAE,iBAAArV,KAAK,CAACqV,KAAN,kCAAazjB,GAAb,CAAiB,KAAK0jB,uBAAtB,MAAkD;AAH7B,KAA9B;AAKA,SAAKtU,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;AAQD2F,EAAAA,UAAU,CAACtJ,UAAD,EAAqBE,GAArB;AACR,UAAM3G,MAAM,GAAG,KAAK6O,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;AAC/D9G,MAAAA,KAAK,EAAE,SAASjE,MAAT;AADwD,KAAlD,CAAf;;AAGA,QAAI3G,MAAM,CAACoL,KAAP,KAAiB,CAArB,EAAwB;AACtB,aAAOpL,MAAM,CAACsL,OAAP,CAAe,CAAf,CAAP;AACD;;;AAGD,QAAItL,MAAM,CAACoL,KAAP,GAAe,CAAnB,EAAsB;AACpB,YAAM,IAAI7F,KAAJ,CAAU,4BAAV,CAAN;AACD;;AAED;AACD;;;;MCjDU4gB,2BAA2B3W;AAGtC3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIyW,qBAAJ,CAA0B/W,OAA1B,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,gBAAP;AACD;;AAEDF,EAAAA,WAAW,CAACzC,MAAD;AACTA,IAAAA,MAAM,CAAC7C,GAAP,CAAW,WAAX,EAAwB,KAAK0F,UAAL,CAAgBpC,IAAhB,CAAqB,IAArB,CAAxB;AACD;;AAEDoC,EAAAA,UAAU,CAACnD,OAAD,EAAmBiB,QAAnB;AACR,UAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBa,UAAhB,CACfnD,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe5B,GAFA,CAAjB;;AAIA,QAAIyD,QAAJ,EAAc;AACZ,aAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;AACD;;AACD,WAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;AACD;;;;MCZUgY,uBAAuB3U;AAApC5P,EAAAA;;AAiBE,gBAAA,GAKI;AACFwkB,MAAAA,kBAAkB,EAAE,CAClB5f,UADkB,EAElB2D,QAFkB,EAGlB;AAAEkc,QAAAA;AAAF,OAHkB;AAKlBlc,QAAAA,QAAQ,CAACmc,gBAAT,CAA0B/Z,IAA1B,CAA+B8Z,eAA/B;AACD,OAPC;AAQFE,MAAAA,qBAAqB,EAAE,CACrB/f,UADqB,EAErB2D,QAFqB,EAGrB;AAAEqc,QAAAA;AAAF,OAHqB;AAKrBrc,QAAAA,QAAQ,CAACmc,gBAAT,GAA4Bnc,QAAQ,CAACmc,gBAAT,CAA0B7iB,MAA1B,CAAiCgjB,CAAC;AAC5D,iBAAOA,CAAC,CAAC9f,IAAF,KAAW6f,SAAlB;AACD,SAF2B,CAA5B;AAGD,OAhBC;AAiBFjU,MAAAA,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;AAAEqI,QAAAA;AAAF,OAHc;AAKdrI,QAAAA,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;AACD,OAvBC;AAwBFsG,MAAAA,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;AAAExD,QAAAA;AAAF,OAHU;AAKVwD,QAAAA,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;AACD,OA9BC;AA+BF+f,MAAAA,0BAA0B,EAAE,CAC1BlgB,UAD0B,EAE1B2D,QAF0B,EAG1B;AAAEwc,QAAAA;AAAF,OAH0B;AAK1B,cAAM/U,MAAM,GAAG,IAAI9I,GAAJ,CACbqB,QAAQ,CAACmc,gBAAT,CAA0BnkB,GAA1B,CAA8BC,IAAI,IAAI,CAACA,IAAI,CAACuE,IAAN,EAAYvE,IAAZ,CAAtC,CADa,CAAf;AAGA,cAAMrC,MAAM,GAAsB,EAAlC;AACA,YAAI2R,OAAO,GAAGvH,QAAQ,CAACmc,gBAAvB;AAEAK,QAAAA,UAAU,CAACxe,OAAX,CAAmBqe,SAAS;AAC1B,gBAAMI,KAAK,GAAGhV,MAAM,CAACxH,GAAP,CAAWoc,SAAX,CAAd;;AACA,cAAII,KAAK,KAAK1mB,SAAd,EAAyB;AACvB,kBAAM,IAAIoF,KAAJ,CAAU,WAAV,CAAN;AACD;;AACDvF,UAAAA,MAAM,CAACwM,IAAP,CAAYqa,KAAZ;;AAGAlV,UAAAA,OAAO,GAAGA,OAAO,CAACjO,MAAR,CAAegjB,CAAC;AACxB,mBAAOA,CAAC,CAAC9f,IAAF,KAAW6f,SAAlB;AACD,WAFS,CAAV;AAGD,SAXD;AAaArc,QAAAA,QAAQ,CAACmc,gBAAT,GAA4BvmB,MAA5B;AAEA;;AACAoK,QAAAA,QAAQ,CAACmc,gBAAT,CAA0B/Z,IAA1B,CAA+B,GAAGmF,OAAlC;AACD,OA3DC;AA4DFmV,MAAAA,YAAY,EAAE,CACZrgB,UADY,EAEZ2D,QAFY,EAGZ;AAAEqc,QAAAA,SAAF;AAAa1jB,QAAAA;AAAb,OAHY;AAKZqH,QAAAA,QAAQ,CAACmc,gBAAT,CAA0Bne,OAA1B,CAAkCye,KAAK;AACrC,cAAIA,KAAK,CAACjgB,IAAN,IAAc6f,SAAlB,EAA6B;AAC3B;AACA,gBAAII,KAAK,CAAChkB,IAAN,CAAW+D,IAAX,IAAmB,MAAvB,EAA+B;AAC7BigB,cAAAA,KAAK,CAAChkB,IAAN,CAAWY,MAAX,CAAkB+I,IAAlB,CAAuBzJ,KAAvB;AACD,aAFD,MAEO,IACL8jB,KAAK,CAAChkB,IAAN,CAAW+D,IAAX,IAAmB,KAAnB,IACAigB,KAAK,CAAChkB,IAAN,CAAW0d,WAAX,CAAuB3Z,IAAvB,IAA+B,MAF1B,EAGL;AACAigB,cAAAA,KAAK,CAAChkB,IAAN,CAAW0d,WAAX,CAAuB9c,MAAvB,CAA8B+I,IAA9B,CAAmCzJ,KAAnC;AACD,aALM,MAKA;AACL,oBAAM,IAAIwC,KAAJ,CAAU,qCAAV,CAAN;AACD;AACF;AACF,SAdD;AAeD,OAhFC;AAiFFwhB,MAAAA,oBAAoB,EAAE,CACpBtgB,UADoB,EAEpB2D,QAFoB,EAGpB;AAAEqc,QAAAA,SAAF;AAAa1jB,QAAAA;AAAb,OAHoB;AAKpBqH,QAAAA,QAAQ,CAACmc,gBAAT,CAA0Bne,OAA1B,CAAkCye,KAAK;AACrC,cAAIA,KAAK,CAACjgB,IAAN,IAAc6f,SAAlB,EAA6B;AAC3B;AACA,gBAAII,KAAK,CAAChkB,IAAN,CAAW+D,IAAX,IAAmB,MAAvB,EAA+B;AAC7BigB,cAAAA,KAAK,CAAChkB,IAAN,CAAWY,MAAX,CAAkB2E,OAAlB,CAA0BzE,CAAC;AACzB,oBAAIA,CAAC,CAACgD,GAAF,IAAS5D,KAAK,CAAC4D,GAAnB,EAAwB;AACtBhD,kBAAAA,CAAC,CAAC2c,KAAF,GAAUvd,KAAK,CAACud,KAAhB;AACD;AACF,eAJD;AAKD,aAND,MAMO,IACLuG,KAAK,CAAChkB,IAAN,CAAW+D,IAAX,IAAmB,KAAnB,IACAigB,KAAK,CAAChkB,IAAN,CAAW0d,WAAX,CAAuB3Z,IAAvB,IAA+B,MAF1B,EAGL;AACAigB,cAAAA,KAAK,CAAChkB,IAAN,CAAW0d,WAAX,CAAuB9c,MAAvB,CAA8B2E,OAA9B,CAAsCzE,CAAC;AACrC,oBAAIA,CAAC,CAACgD,GAAF,IAAS5D,KAAK,CAAC4D,GAAnB,EAAwB;AACtBhD,kBAAAA,CAAC,CAAC2c,KAAF,GAAUvd,KAAK,CAACud,KAAhB;AACD;AACF,eAJD;AAKD,aATM,MASA;AACL,oBAAM,IAAI/a,KAAJ,CAAU,qCAAV,CAAN;AACD;AACF;AACF,SAtBD;AAuBD;AA7GC,KALJ;AAoHD;;AApICmM,EAAAA,SAAS;AACP,WAAO,MAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAS,EACrB,GAAGiE,yBAAyB,EADP;AAErB1H,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAFU;AAGrBC,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IAHS;AAIrBogB,MAAAA,eAAe,EAAExW,KAAK,CAACwW,eAJF;AAKrBT,MAAAA,gBAAgB,EAAE/V,KAAK,CAAC+V,gBAAN,IAA0B,EALvB;AAMrB9T,MAAAA,WAAW,EAAEjC,KAAK,CAACiC;AANE,KAAvB;AAQA,SAAKjB,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MC7BU6c,oBAAoBzX;AAG/B3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIkX,cAAJ,CAAmBxX,OAAnB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,OAAP;AACD;;;;MCAUqX,uBAAuBzV;AAApC5P,EAAAA;;AAiBE,gBAAA,GAKI;AACFslB,MAAAA,WAAW,EAAE,CACX1gB,UADW,EAEX2D,QAFW,EAGX;AAAEgd,QAAAA;AAAF,OAHW;AAKXhd,QAAAA,QAAQ,CAACid,SAAT,CAAmB7a,IAAnB,CAAwB4a,QAAxB;AACD,OAPC;AAQFE,MAAAA,cAAc,EAAE,CACd7gB,UADc,EAEd2D,QAFc,EAGd;AAAEgd,QAAAA;AAAF,OAHc;AAKdhd,QAAAA,QAAQ,CAACid,SAAT,GAAqBjd,QAAQ,CAACid,SAAT,CAAmB3jB,MAAnB,CAA0B6jB,GAAG;AAChD,iBAAO,EAAEA,GAAG,CAAC1R,OAAJ,IAAeuR,QAAQ,CAACvR,OAAxB,IAAmC0R,GAAG,CAAChe,KAAJ,IAAa6d,QAAQ,CAAC7d,KAA3D,CAAP;AACD,SAFoB,CAArB;AAGD,OAhBC;AAiBFwP,MAAAA,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;AAAExD,QAAAA;AAAF,OAHU;AAKVwD,QAAAA,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;AACD,OAvBC;AAwBF4L,MAAAA,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;AAAEqI,QAAAA;AAAF,OAHc;AAKdrI,QAAAA,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;AACD,OA9BC;AA+BFF,MAAAA,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;AAAEzD,QAAAA;AAAF,OAHM;AAKNyD,QAAAA,QAAQ,CAACzD,GAAT,GAAeA,GAAf;AACD;AArCC,KALJ;AA4CD;;AA5DC+K,EAAAA,SAAS;AACP,WAAO,MAAP;AACD;;AAEDjB,EAAAA,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;AACJ,UAAMpG,QAAQ,GAAS,EACrB,GAAGiE,yBAAyB,EADP;AAErB1H,MAAAA,GAAG,EAAE6J,KAAK,CAAC7J,GAFU;AAGrB0gB,MAAAA,SAAS,EAAE7W,KAAK,CAAC6W,SAAN,IAAmB,EAHT;AAIrBzgB,MAAAA,IAAI,EAAE4J,KAAK,CAAC5J,IAJS;AAKrB6L,MAAAA,WAAW,EAAEjC,KAAK,CAACiC;AALE,KAAvB;AAOA,SAAKjB,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;AACA,WAAOA,QAAP;AACD;;;;MCzBUod,oBAAoBhY;AAG/B3N,EAAAA,YAAY4N,QAAgBb;AAC1B,UAAMa,MAAN;AACA,SAAKP,UAAL,GAAkB,IAAIgY,cAAJ,CAAmBtY,OAAnB,CAAlB;AACD;;AAEDiB,EAAAA,WAAW;AACT,WAAO,OAAP;AACD;;;;ACoCH,MAAM4X,eAAe,GAA6B;AAChDC,EAAAA,oBAAoB,EAAE,KAD0B;AAEhDC,EAAAA,mBAAmB,EAAE,KAF2B;AAGhDC,EAAAA,iBAAiB,EAAEznB,SAH6B;AAIhD0nB,EAAAA,OAAO,EAAEvY,oBAJuC;AAKhDwY,EAAAA,QAAQ,EAAEvY,qBALsC;AAMhDwY,EAAAA,MAAM,EAAE;AANwC,CAAlD;AASA,MAAaC;AAaXnmB,EAAAA,YAAYmL,UAA6C;AAPjD,oBAAA,GAGJ;AAAEe,MAAAA,IAAI,EAAE5N,SAAR;AAAmB8nB,MAAAA,GAAG,EAAE9nB;AAAxB,KAHI;AAQN,SAAK6M,OAAL,GAAe,EAAE,GAAGya,eAAL;AAAsB,SAAGza;AAAzB,KAAf;AACA,SAAK8B,SAAL,GAAiB,EAAjB;AACA,SAAKoZ,eAAL,GAAuB/nB,SAAvB;AAEA,SAAK0O,QAAL,GAAgB,IAAIrI,eAAJ,EAAhB;AACA,SAAK2hB,OAAL,GAAe,IAAIpb,YAAJ,CAAiB;AAC9BzF,MAAAA,OAAO,EAAE,KAAK0F,OAAL,CAAa0a,oBADQ;AAE9B7b,MAAAA,QAAQ,EAAE,KAAKmB,OAAL,CAAa2a;AAFO,KAAjB,CAAf;AAKA,SAAKS,GAAL,GAAW,KAAKC,SAAL,CAAe;AAAEN,MAAAA,MAAM,EAAE,KAAK/a,OAAL,CAAa+a;AAAvB,KAAf,CAAX;AACD;;AAED7kB,EAAAA,KAAK;AACH;AACA,SAAKolB,YAAL;AACA,SAAKC,WAAL;AACD;;AAEDC,EAAAA,IAAI;;;AACF,kCAAKC,WAAL,CAAiB1a,IAAjB,2CAAuB2a,OAAvB,CAA+B,KAA/B;AACA,SAAKD,WAAL,CAAiB1a,IAAjB,GAAwB5N,SAAxB;AAEA,kCAAKsoB,WAAL,CAAiBR,GAAjB,2CAAsBS,OAAtB,CAA8B,KAA9B;AACA,SAAKD,WAAL,CAAiBR,GAAjB,GAAuB9nB,SAAvB;AACD;;AAEDwJ,EAAAA,KAAK;AACH,SAAKkF,QAAL,CAAclF,KAAd;AACD;;AAED5B,EAAAA,OAAO,CAACtB,UAAD;AACL,QAAI,CAACA,UAAD,IAAe,CAAC,KAAKuG,OAAL,CAAa4a,iBAAjC,EAAoD;AAClD,YAAM,IAAIriB,KAAJ,CAAU,yCAAV,CAAN;AACD;;AAED,WAAO,IAAImJ,UAAJ,CACLjI,UAAU,IAAI,KAAKuG,OAAL,CAAa4a,iBADtB,EAEL,KAAK9Y,SAFA,EAGL,KAAKD,QAHA,CAAP;AAKD;;AAED8Z,EAAAA,SAAS,CAACC,OAAe,IAAhB,EAAsB5b,OAAtB;AACP,UAAMob,GAAG,GAAG,KAAKC,SAAL,CAAerb,OAAf,CAAZ;AACA,UAAM6b,MAAM,GAAGT,GAAG,CAACU,MAAJ,CAAWF,IAAX,EAAiB;AAC9Bnd,MAAAA,OAAO,CAAC8E,GAAR,8CAAyDqY,MAAzD;AACD,KAFc,CAAf;AAGAC,IAAAA,MAAM,CAACE,gBAAP,GAA0B,KAAK,IAA/B;AACD;;AAEOV,EAAAA,SAAS,CAACrb,OAAD;AACf,UAAMob,GAAG,GAAGjb,gBAAO,EAAnB;AAEA,UAAM6b,aAAa,GAAG7b,gBAAO,CAACC,MAAR,CAAe;AAAE0C,MAAAA,WAAW,EAAE;AAAf,KAAf,CAAtB;AACAkZ,IAAAA,aAAa,CAAC3b,GAAd,CAAkBF,gBAAO,CAAC8b,IAAR,EAAlB;;AAEA,QAAI,EAACjc,OAAD,YAACA,OAAO,CAAE+a,MAAV,CAAJ,EAAsB;AACpBK,MAAAA,GAAG,CAAC/a,GAAJ,CAAQ6b,MAAM,CAAC,MAAD,CAAd;AACD;;AACDd,IAAAA,GAAG,CAAC/a,GAAJ,CAAQ,QAAR,EAAkB,KAAK8a,OAAL,CAAalb,YAAb,EAAlB;;AAGA,QAAI,KAAKD,OAAL,CAAa0a,oBAAjB,EAAuC;AACrCU,MAAAA,GAAG,CAAC/a,GAAJ,CAAQ,cAAR,EAAwB,KAAK8a,OAAL,CAAava,gBAAb,EAAxB,EAAyDob,aAAzD;AACD,KAFD,MAEO;AACLZ,MAAAA,GAAG,CAAC/a,GAAJ,CAAQ,cAAR,EAAwB2b,aAAxB;AACD;;AAED,SAAKd,eAAL,GAAuB,IAAI/F,cAAJ,CAAmB6G,aAAnB,EAAkC,KAAKna,QAAvC,CAAvB;AAEA,SAAKC,SAAL,GAAiB;AACf9F,MAAAA,QAAQ,EAAE,IAAI0P,gBAAJ,CAAqBsQ,aAArB,EAAoC,KAAKna,QAAzC,CADK;AAEf/F,MAAAA,IAAI,EAAE,IAAIuO,WAAJ,CAAgB2R,aAAhB,EAA+B,KAAKna,QAApC,CAFS;AAGf,uBAAiB,IAAI4E,mBAAJ,CAAwBuV,aAAxB,EAAuC,KAAKna,QAA5C,CAHF;AAIf3F,MAAAA,QAAQ,EAAE,IAAIoQ,eAAJ,CAAoB0P,aAApB,EAAmC,KAAKna,QAAxC,CAJK;AAKf5F,MAAAA,OAAO,EAAE,IAAI4P,cAAJ,CAAmBmQ,aAAnB,EAAkC,KAAKna,QAAvC,CALM;AAMf,wBAAkB,IAAIoK,oBAAJ,CAAyB+P,aAAzB,EAAwC,KAAKna,QAA7C,CANH;AAOf,uBAAiB,IAAI2L,mBAAJ,CAAwBwO,aAAxB,EAAuC,KAAKna,QAA5C,CAPF;AAQf1F,MAAAA,SAAS,EAAE,IAAI6R,iBAAJ,CAAsBgO,aAAtB,EAAqC,KAAKna,QAA1C,CARI;AASf,yBAAmB,IAAI6M,qBAAJ,CACjBsN,aADiB,EAEjB,KAAKna,QAFY,CATJ;AAaf,4BAAsB,IAAI8K,mBAAJ,CACpBqP,aADoB,EAEpB,KAAKna,QAFe,CAbP;AAiBfzF,MAAAA,KAAK,EAAE,IAAIyU,YAAJ,CAAiBmL,aAAjB,EAAgC,KAAKna,QAArC,CAjBQ;AAkBfxF,MAAAA,OAAO,EAAE,IAAI0U,cAAJ,CAAmBiL,aAAnB,EAAkC,KAAKna,QAAvC,CAlBM;AAmBf,iBAAW,IAAI8M,aAAJ,CAAkBqN,aAAlB,EAAiC,KAAKna,QAAtC,CAnBI;AAoBf,oBAAc,IAAI2N,gBAAJ,CAAqBwM,aAArB,EAAoC,KAAKna,QAAzC,CApBC;AAqBf,yBAAmB,IAAI8U,qBAAJ,CACjBqF,aADiB,EAEjB,KAAKna,QAFY,CArBJ;AAyBf,sBAAgB,IAAI6R,kBAAJ,CAAuBsI,aAAvB,EAAsC,KAAKna,QAA3C,CAzBD;AA0BfvF,MAAAA,OAAO,EAAE,IAAIsW,cAAJ,CAAmBoJ,aAAnB,EAAkC,KAAKna,QAAvC,CA1BM;AA2Bf,4BAAsB,IAAI+P,wBAAJ,CACpBoK,aADoB,EAEpB,KAAKna,QAFe,CA3BP;AA+Bf,uBAAiB,IAAIkV,mBAAJ,CAAwBiF,aAAxB,EAAuC,KAAKna,QAA5C,CA/BF;AAgCftF,MAAAA,KAAK,EAAE,IAAI+a,YAAJ,CAAiB0E,aAAjB,EAAgC,KAAKna,QAArC,CAhCQ;AAiCfrF,MAAAA,KAAK,EAAE,IAAIsb,YAAJ,CAAiBkE,aAAjB,EAAgC,KAAKna,QAArC,CAjCQ;AAkCfpF,MAAAA,YAAY,EAAE,IAAIic,mBAAJ,CAAwBsD,aAAxB,EAAuC,KAAKna,QAA5C,CAlCC;AAmCf,sBAAgB,IAAIsX,kBAAJ,CAAuB6C,aAAvB,EAAsC,KAAKna,QAA3C,CAnCD;AAoCfhM,MAAAA,IAAI,EAAE,IAAIokB,WAAJ,CAAgB+B,aAAhB,EAA+B,KAAKna,QAApC,CApCS;AAqCfnF,MAAAA,IAAI,EAAE,IAAI8d,WAAJ,CAAgBwB,aAAhB,EAA+B,KAAKna,QAApC;AArCS,KAAjB;AAwCAuZ,IAAAA,GAAG,CAAC/a,GAAJ,CAAQ,CAACvC,GAAD,EAAaqe,GAAb,EAA2BC,IAA3B,EAA2ChkB,IAA3C;AACN,UAAI0F,GAAG,YAAY1E,kBAAnB,EAAuC;AACrC,eAAOgjB,IAAI,CAACxhB,MAAL,CAAYkD,GAAG,CAACxE,UAAhB,EAA4B8H,IAA5B,CAAiC;AACtC9H,UAAAA,UAAU,EAAEwE,GAAG,CAACxE,UADsB;AAEtCxE,UAAAA,OAAO,EAAEgJ,GAAG,CAAChJ,OAFyB;AAGtCunB,UAAAA,MAAM,EAAE,CAACve,GAAG,CAACzE,IAAL;AAH8B,SAAjC,CAAP;AAKD,OAND,MAMO;AACLoF,QAAAA,OAAO,CAACC,KAAR,CAAcZ,GAAd;AACA,eAAOse,IAAI,CAACxhB,MAAL,CAAY,GAAZ,EAAiBwG,IAAjB,CAAsB;AAC3B1C,UAAAA,KAAK,EAAEZ,GAAG,CAAChJ;AADgB,SAAtB,CAAP;AAGD;AACF,KAbD;AAeA,WAAOsmB,GAAP;AACD;;AAEOG,EAAAA,WAAW;AACjB,UAAMH,GAAG,GAAG,KAAKA,GAAjB;AAEA,SAAKK,WAAL,CAAiBR,GAAjB,GAAuBqB,IAAI,CAAC,KAAKtc,OAAL,CAAa6a,OAAd,CAAJ,CACpBa,OADoB,GAEpBre,GAFoB,CAEhB,IAFgB,EAGpBkf,KAHoB,CAGd,gBAAeC,GAAf;AACL,YAAM3b,QAAQ,GAAG,MAAM4b,SAAS,CAACrB,GAAD,CAAT,CACpB/d,GADoB,CAChBmf,GADgB,EAEpBtf,GAFoB,CAEhBiF,WAAW,CAAC,KAAKga,GAAL,CAAS/Z,OAAV,CAFK,CAAvB;AAGA,aAAO,CAACvB,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;AACD,KARoB,EASpBT,IAToB,CASf,IATe,EAUpB8b,KAVoB,CAUd,gBAAeC,GAAf,EAAoBtb,IAApB;AACL,YAAML,QAAQ,GAAG,MAAM4b,SAAS,CAACrB,GAAD,CAAT,CACpB3a,IADoB,CACf+b,GADe,EAEpBtf,GAFoB,CAEhBiF,WAAW,CAAC,KAAKga,GAAL,CAAS/Z,OAAV,CAFK,EAGpBhB,IAHoB,CAGfF,IAHe,CAAvB;AAIA,aAAO,CAACL,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;AACD,KAhBoB,EAiBpBxD,MAjBoB,CAiBb,IAjBa,EAkBpB6e,KAlBoB,CAkBd,gBAAeC,GAAf,EAAoBtb,IAApB;AACL,YAAML,QAAQ,GAAG,MAAM4b,SAAS,CAACrB,GAAD,CAAT,CACpB1d,MADoB,CACb8e,GADa,EAEpBtf,GAFoB,CAEhBiF,WAAW,CAAC,KAAKga,GAAL,CAAS/Z,OAAV,CAFK,EAGpBhB,IAHoB,CAGfF,IAHe,CAAvB;AAIA,aAAO,CAACL,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;AACD,KAxBoB,CAAvB;AAyBD;;AAEOoa,EAAAA,YAAY;AAClB,UAAMF,GAAG,GAAG,KAAKA,GAAjB;AAEA,SAAKK,WAAL,CAAiB1a,IAAjB,GAAwBub,IAAI,CAAC,KAAKtc,OAAL,CAAa8a,QAAd,CAAJ,CACrBY,OADqB,GAErBjb,IAFqB,CAEhB,cAFgB,EAGrB8b,KAHqB,CAGf,gBAAeC,GAAf,EAAoBtb,IAApB;AACL,YAAML,QAAQ,GAAG,MAAM4b,SAAS,CAACrB,GAAD,CAAT,CACpB3a,IADoB,CACf+b,GAAG,GAAG,GAAN,GAAYtb,IADG,EAEpBhE,GAFoB,CAEhBiF,WAAW,CAAC,KAAKga,GAAL,CAAS/Z,OAAV,CAFK,EAGpBhB,IAHoB,EAAvB;AAIA,aAAO,CAACP,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;AACD,KATqB,CAAxB;AAUD;;;;;;;"}
1
+ {"version":3,"file":"commercetools-mock.cjs.development.js","sources":["../src/lib/expandParser.ts","../src/lib/haversine.ts","../src/lib/predicateParser.ts","../src/exceptions.ts","../src/storage.ts","../src/oauth/store.ts","../src/oauth/helpers.ts","../src/oauth/server.ts","../src/helpers.ts","../src/projectAPI.ts","../src/lib/proxy.ts","../src/constants.ts","../src/services/abstract.ts","../src/repositories/errors.ts","../src/repositories/abstract.ts","../src/repositories/helpers.ts","../src/repositories/cart-discount.ts","../src/services/cart-discount.ts","../src/repositories/cart.ts","../src/services/cart.ts","../src/repositories/category.ts","../src/services/category.ts","../src/repositories/channel.ts","../src/services/channel.ts","../src/repositories/customer-group.ts","../src/services/customer-group.ts","../src/repositories/customer.ts","../src/services/customer.ts","../src/repositories/custom-object.ts","../src/services/custom-object.ts","../src/repositories/discount-code.ts","../src/services/discount-code.ts","../src/repositories/extension.ts","../src/services/extension.ts","../src/repositories/inventory-entry.ts","../src/services/inventory-entry.ts","../src/services/my-cart.ts","../src/repositories/payment.ts","../src/services/my-payment.ts","../src/repositories/order.ts","../src/services/order.ts","../src/services/payment.ts","../src/lib/filterParser.ts","../src/repositories/product-projection.ts","../src/services/product-projection.ts","../src/repositories/product.ts","../src/services/product.ts","../src/repositories/product-type.ts","../src/services/product-type.ts","../src/lib/masking.ts","../src/repositories/project.ts","../src/services/project.ts","../src/repositories/shipping-method.ts","../src/services/shipping-method.ts","../src/repositories/shopping-list.ts","../src/services/shopping-list.ts","../src/repositories/state.ts","../src/services/state.ts","../src/repositories/store.ts","../src/services/store.ts","../src/repositories/subscription.ts","../src/services/subscription.ts","../src/repositories/tax-category.ts","../src/services/tax-category.ts","../src/repositories/type.ts","../src/services/type.ts","../src/repositories/zone.ts","../src/services/zone.ts","../src/services/my-customer.ts","../src/ctMock.ts"],"sourcesContent":["/**\n * This module implements the reference expansion as imeplemented by\n * commercetools.\n *\n * See https://docs.commercetools.com/api/general-concepts#reference-expansion\n *\n * TODO: implement support for multi-dimensional array\n */\ntype ExpandResult = {\n element: string\n index?: string | number\n rest?: string\n}\n\nexport const parseExpandClause = (clause: string): ExpandResult => {\n const result: ExpandResult = {\n element: clause,\n index: undefined,\n rest: undefined,\n }\n\n const pos = clause.indexOf('.')\n if (pos > 0) {\n result.element = clause.substring(0, pos)\n result.rest = clause.substring(pos + 1)\n }\n\n const match = result.element.match(/\\[([^\\]+])]/)\n if (match) {\n result.index = match[1] === '*' ? '*' : parseInt(match[1], 10)\n result.element = result.element.substring(0, match.index)\n }\n return result\n}\n","export type Location = {\n latitude: number\n longitude: number\n}\n\n/**\n * Returns the distance between src and dst as meters\n */\nexport const haversineDistance = (src: Location, dst: Location) => {\n const RADIUS_OF_EARTH_IN_KM = 6371\n const toRadian = (deg: number) => deg * (Math.PI / 180)\n\n const dLat = toRadian(dst.latitude - src.latitude)\n const dLon = toRadian(dst.longitude - src.longitude)\n\n var a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRadian(src.latitude)) *\n Math.cos(toRadian(dst.latitude)) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\n return RADIUS_OF_EARTH_IN_KM * c * 1000\n}\n","/**\n * This module implements the commercetools query predicate filter expression.\n * Support should be 100% complete.\n *\n * See https://docs.commercetools.com/api/predicates/query\n */\nimport perplex from 'perplex'\nimport { ITokenPosition, Parser } from 'pratt'\nimport { haversineDistance } from './haversine'\n\nexport class PredicateError {\n message: string\n\n constructor(message: string) {\n this.message = message\n }\n}\n\ntype MatchFunc = (target: any, variables: VariableMap) => boolean\ntype VariableMap = {\n [key: string]: any\n}\n\nexport const matchesPredicate = (\n predicate: string | string[] | undefined,\n target: any,\n variables?: VariableMap\n): boolean => {\n if (!predicate) {\n return true\n }\n\n if (Array.isArray(predicate)) {\n return predicate.every(item => {\n const func = generateMatchFunc(item)\n return func(target, variables || {})\n })\n } else {\n const func = generateMatchFunc(predicate)\n return func(target, variables || {})\n }\n}\n\nexport const parseQueryExpression = (\n predicate: string | string[]\n): MatchFunc => {\n if (Array.isArray(predicate)) {\n const callbacks = predicate.map(item => generateMatchFunc(item))\n return (target: any, variables: VariableMap) => {\n return callbacks.every(callback => callback(target, variables))\n }\n } else {\n return generateMatchFunc(predicate)\n }\n}\n\ntype Symbol = {\n type: 'var' | 'boolean' | 'string' | 'float' | 'int' | 'identifier'\n value: any\n pos?: ITokenPosition\n}\n\nconst validateSymbol = (val: Symbol) => {\n if (!val.type) {\n throw new PredicateError('Internal error')\n }\n\n if (val.type === 'identifier') {\n const char = val.value.charAt(0)\n const line = val.pos?.start.line\n const column = val.pos?.start.column\n\n throw new PredicateError(\n `Invalid input '${char}', expected input parameter or primitive value (line ${line}, column ${column})`\n )\n }\n}\n\nconst resolveSymbol = (val: Symbol, vars: VariableMap): any => {\n if (val.type === 'var') {\n if (!(val.value in vars)) {\n throw new PredicateError(`Missing parameter value for ${val.value}`)\n }\n return vars[val.value]\n }\n\n return val.value\n}\n\nconst resolveValue = (obj: any, val: Symbol): any => {\n if (val.type !== 'identifier') {\n throw new PredicateError('Internal error')\n }\n\n if (!(val.value in obj)) {\n if (Array.isArray(obj)) {\n return Object.values(obj)\n .filter(v => val.value in v)\n .map(v => v[val.value])\n }\n throw new PredicateError(`The field '${val.value}' does not exist.`)\n }\n\n return obj[val.value]\n}\n\nconst getLexer = (value: string) => {\n return new perplex(value)\n\n .token('AND', /and(?![-_a-z0-9]+)/i)\n .token('OR', /or(?![-_a-z0-9]+)/i)\n .token('NOT', /not(?![-_a-z0-9]+)/i)\n\n .token('WITHIN', /within(?![-_a-z0-9]+)/i)\n .token('IN', /in(?![-_a-z0-9]+)/i)\n .token('MATCHES_IGNORE_CASE', /matches\\s+ignore\\s+case(?![-_a-z0-9]+)/i)\n .token('CONTAINS', /contains(?![-_a-z0-9]+)/i)\n .token('ALL', /all(?![-_a-z0-9]+)/i)\n .token('ANY', /any(?![-_a-z0-9]+)/i)\n .token('EMPTY', /empty(?![-_a-z0-9]+)/i)\n .token('IS', /is(?![-_a-z0-9]+)/i)\n .token('DEFINED', /defined(?![-_a-z0-9]+)/i)\n\n .token('FLOAT', /\\d+\\.\\d+/)\n .token('INT', /\\d+/)\n .token('VARIABLE', /:([-_A-Za-z0-9]+)/)\n .token('IDENTIFIER', /[-_A-Za-z0-9]+/)\n .token('STRING', /\"((?:\\\\.|[^\"\\\\])*)\"/)\n .token('STRING', /'((?:\\\\.|[^'\\\\])*)'/)\n\n .token('COMMA', ',')\n .token('(', '(')\n .token(')', ')')\n .token('>=', '>=')\n .token('<=', '<=')\n .token('>', '>')\n .token('<', '<')\n .token('!=', '!=')\n .token('=', '=')\n .token('\"', '\"')\n .token('WS', /\\s+/, true) // skip\n}\n\n/**\n * This function converts a query expression in to a callable which returns a\n * boolean to indicate if the given object matches or not.\n *\n * This currently parses the predicate each time it is called, but it should be\n * straight-forward to add a query cache (lru-cache)\n */\nconst generateMatchFunc = (predicate: string): MatchFunc => {\n const lexer = getLexer(predicate)\n const parser = new Parser(lexer)\n .builder()\n .nud('IDENTIFIER', 100, t => {\n return {\n type: 'identifier',\n value: t.token.match,\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('VARIABLE', 100, t => {\n return {\n type: 'var',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('STRING', 100, t => {\n return {\n type: 'string',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('INT', 1, t => {\n return {\n type: 'int',\n value: parseInt(t.token.match, 10),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('FLOAT', 1, t => {\n return {\n type: 'float',\n value: parseFloat(t.token.match),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('NOT', 100, ({ bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return !expr(obj)\n }\n })\n .nud('EMPTY', 10, ({ bp }) => {\n return 'empty'\n })\n .nud('DEFINED', 10, ({ bp }) => {\n return 'defined'\n })\n\n .led('AND', 5, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return left(obj) && expr(obj)\n }\n })\n .led('OR', 5, ({ left, token, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n return left(obj, vars) || expr(obj, vars)\n }\n })\n .led('COMMA', 1, ({ left, token, bp }) => {\n const expr: any = parser.parse({ terminals: [bp - 1] })\n if (Array.isArray(expr)) {\n return [left, ...expr]\n } else {\n return [left, expr]\n }\n })\n .nud('(', 100, t => {\n const expr: any = parser.parse({ terminals: [')'] })\n return expr\n })\n .led('(', 100, ({ left, bp }) => {\n const expr = parser.parse()\n lexer.expect(')')\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (value) {\n return expr(value)\n }\n return false\n }\n })\n .bp(')', 0)\n .led('=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const resolvedValue = resolveValue(obj, left)\n const resolvedSymbol = resolveSymbol(expr, vars)\n if (Array.isArray(resolvedValue)) {\n return !!resolvedValue.some(elem => elem === resolvedSymbol)\n }\n return resolvedValue === resolvedSymbol\n }\n })\n .led('!=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n return resolveValue(obj, left) !== resolveSymbol(expr, vars)\n }\n })\n .led('>', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) > resolveSymbol(expr, vars)\n }\n })\n .led('>=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) >= resolveSymbol(expr, vars)\n }\n })\n .led('<', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) < resolveSymbol(expr, vars)\n }\n })\n .led('<=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) <= resolveSymbol(expr, vars)\n }\n })\n .led('IS', 20, ({ left, bp }) => {\n let invert = false\n\n // Peek if this is a `is not` statement\n const next = lexer.peek()\n if (next.type === 'NOT') {\n invert = true\n lexer.next()\n }\n\n const expr: any = parser.parse({ terminals: [bp - 1] })\n\n switch (expr) {\n case 'empty': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length === 0\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length !== 0\n }\n }\n }\n case 'defined': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val !== undefined\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val === undefined\n }\n }\n }\n default: {\n throw new Error('Unexpected')\n }\n }\n })\n .led('IN', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n let symbols = expr\n if (!Array.isArray(symbols)) {\n symbols = [expr]\n }\n\n const inValues = symbols.map((item: Symbol) =>\n resolveSymbol(item, vars)\n )\n return inValues.includes(resolveValue(obj, left))\n }\n })\n .led('MATCHES_IGNORE_CASE', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const value = resolveValue(obj, left)\n const other = resolveSymbol(expr, vars)\n\n if (typeof value != 'string') {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n return value.toLowerCase() === other.toLowerCase()\n }\n })\n .led('WITHIN', 20, ({ left, bp }) => {\n const type = lexer.next()\n\n if (type.match !== 'circle') {\n throw new PredicateError(\n `Invalid input '${type.match}', expected circle`\n )\n }\n\n lexer.expect('(')\n const expr = parser.parse({ terminals: [')'] })\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (!value) return false\n\n const maxDistance = resolveSymbol(expr[2], vars)\n const distance = haversineDistance(\n {\n longitude: value[0],\n latitude: value[1],\n },\n {\n longitude: resolveSymbol(expr[0], vars),\n latitude: resolveSymbol(expr[1], vars),\n }\n )\n return distance <= maxDistance\n }\n })\n .led('CONTAINS', 20, ({ left, bp }) => {\n const keyword = lexer.next()\n\n let expr = parser.parse()\n if (!Array.isArray(expr)) {\n expr = [expr]\n }\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n\n if (!Array.isArray(value)) {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n\n const array = expr.map((item: Symbol) => resolveSymbol(item, vars))\n if (keyword.type === 'ALL') {\n return array.every((item: any) => value.includes(item))\n } else {\n return array.some((item: any) => value.includes(item))\n }\n }\n })\n\n .build()\n\n const result = parser.parse()\n\n if (typeof result !== 'function') {\n const lines = predicate.split('\\n')\n const column = lines[lines.length - 1].length\n\n throw new PredicateError(\n `Unexpected end of input, expected SphereIdentifierChar, comparison ` +\n `operator, not, in, contains, is, within or matches` +\n ` (line ${lines.length}, column ${column})`\n )\n }\n return result\n}\n","export abstract class BaseError {\n abstract message: string\n}\n\nexport class CommercetoolsError<T extends BaseError> extends Error {\n info: T\n statusCode: number\n\n constructor(info: T, statusCode = 400) {\n super(info.message)\n this.info = info\n this.statusCode = statusCode || 500\n }\n}\n\nexport interface InvalidRequestError {\n readonly code: 'invalid_request'\n readonly message: string\n}\n","import assert from 'assert'\nimport {\n BaseResource,\n Cart,\n Category,\n Customer,\n CustomObject,\n InventoryEntry,\n Order,\n PagedQueryResponse,\n QueryParam,\n Reference,\n ResourceIdentifier,\n Product,\n Store,\n Type,\n Payment,\n Project,\n State,\n TaxCategory,\n ShippingMethod,\n ProductType,\n InvalidInputError,\n ProductProjection,\n ShoppingList,\n Extension,\n CartDiscount,\n CustomerGroup,\n DiscountCode,\n Zone,\n Channel,\n Subscription,\n} from '@commercetools/platform-sdk'\nimport { parseExpandClause } from './lib/expandParser'\nimport { RepositoryTypes, ResourceMap, Writable } from './types'\nimport { parseQueryExpression } from './lib/predicateParser'\nimport { CommercetoolsError } from './exceptions'\n\ntype GetParams = {\n expand?: string[]\n}\n\ntype QueryParams = {\n expand?: string | string[]\n sort?: string | string[]\n limit?: number\n offset?: number\n withTotal?: boolean\n where?: string | string[]\n [key: string]: QueryParam\n}\n\nexport abstract class AbstractStorage {\n abstract clear(): void\n\n abstract assertStorage(typeId: RepositoryTypes): void\n\n abstract all(projectKey: string, typeId: RepositoryTypes): Array<BaseResource>\n\n abstract add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes]\n ): void\n\n abstract get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract addProject(projectKey: string): Project\n abstract getProject(projectKey: string): Project\n abstract saveProject(project: Project): Project\n\n abstract delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): BaseResource | null\n\n abstract query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse\n\n abstract getByResourceIdentifier(\n projectKey: string,\n identifier: ResourceIdentifier\n ): BaseResource | undefined\n}\n\ntype ProjectStorage = Partial<\n {\n [index in RepositoryTypes]: Map<string, BaseResource>\n }\n>\n\nexport class InMemoryStorage extends AbstractStorage {\n protected resources: {\n [projectKey: string]: ProjectStorage\n } = {}\n\n protected projects: {\n [projectKey: string]: Project\n } = {}\n\n private forProjectKey(projectKey: string) {\n this.addProject(projectKey)\n\n let projectStorage = this.resources[projectKey]\n if (!projectStorage) {\n projectStorage = this.resources[projectKey] = {\n cart: new Map<string, Cart>(),\n 'cart-discount': new Map<string, CartDiscount>(),\n category: new Map<string, Category>(),\n channel: new Map<string, Channel>(),\n customer: new Map<string, Customer>(),\n 'customer-group': new Map<string, CustomerGroup>(),\n 'discount-code': new Map<string, DiscountCode>(),\n extension: new Map<string, Extension>(),\n 'inventory-entry': new Map<string, InventoryEntry>(),\n 'key-value-document': new Map<string, CustomObject>(),\n order: new Map<string, Order>(),\n payment: new Map<string, Payment>(),\n 'product-type': new Map<string, ProductType>(),\n product: new Map<string, Product>(),\n 'product-selection': new Map<string, any>(),\n 'product-projection': new Map<string, ProductProjection>(),\n 'shipping-method': new Map<string, ShippingMethod>(),\n state: new Map<string, State>(),\n store: new Map<string, Store>(),\n 'shopping-list': new Map<string, ShoppingList>(),\n subscription: new Map<string, Subscription>(),\n 'tax-category': new Map<string, TaxCategory>(),\n type: new Map<string, Type>(),\n zone: new Map<string, Zone>(),\n }\n }\n return projectStorage\n }\n\n clear() {\n for (const [, projectStorage] of Object.entries(this.resources)) {\n for (const [, value] of Object.entries(projectStorage)) {\n value?.clear()\n }\n }\n }\n\n assertStorage(typeId: RepositoryTypes) {}\n\n all(projectKey: string, typeId: RepositoryTypes) {\n const store = this.forProjectKey(projectKey)[typeId]\n if (store) {\n return Array.from(store.values())\n }\n return []\n }\n\n add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes],\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] {\n this.forProjectKey(projectKey)[typeId]?.set(obj.id, obj)\n\n const resource = this.get(projectKey, typeId, obj.id, params)\n assert(resource, `resource of type ${typeId} with id ${obj.id} not created`)\n return resource\n }\n\n get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const resource = this.forProjectKey(projectKey)[typeId]?.get(id)\n if (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\n }\n\n getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n const resources: any[] = Array.from(store.values())\n const resource = resources.find(e => e.key === key)\n if (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\n }\n\n delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n const resource = this.get(projectKey, typeId, id)\n\n if (resource) {\n this.forProjectKey(projectKey)[typeId]?.delete(id)\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return resource\n }\n\n query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n let resources = Array.from(store.values())\n\n // Apply predicates\n if (params.where) {\n try {\n const filterFunc = parseQueryExpression(params.where)\n resources = resources.filter(resource => filterFunc(resource, {}))\n } catch (err) {\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message: (err as any).message,\n },\n 400\n )\n }\n }\n\n // Get the total before slicing the array\n const totalResources = resources.length\n\n // Apply offset, limit\n const offset = params.offset || 0\n const limit = params.limit || 20\n resources = resources.slice(offset, offset + limit)\n\n // Expand the resources\n if (params.expand !== undefined) {\n resources = resources.map(resource => {\n return this.expand(projectKey, resource, params.expand)\n })\n }\n\n return {\n count: totalResources,\n total: resources.length,\n offset: offset,\n limit: limit,\n results: resources,\n }\n }\n\n getByResourceIdentifier<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n identifier: ResourceIdentifier\n ): ResourceMap[RepositoryTypes] | undefined {\n if (identifier.id) {\n const resource = this.get(projectKey, identifier.typeId, identifier.id)\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n console.error(\n `No resource found with typeId=${identifier.typeId}, id=${identifier.id}`\n )\n return undefined\n }\n\n if (identifier.key) {\n const store = this.forProjectKey(projectKey)[identifier.typeId]\n\n if (store) {\n // TODO: BaseResource has no key attribute, but the subclasses should\n // have them all.\n const resource = Array.from(store.values()).find(\n // @ts-ignore\n r => r.key === identifier.key\n )\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n } else {\n throw new Error(\n `No storage found for resource type: ${identifier.typeId}`\n )\n }\n }\n return undefined\n }\n\n addProject = (projectKey: string): Project => {\n if (!this.projects[projectKey]) {\n this.projects[projectKey] = {\n key: projectKey,\n name: '',\n countries: [],\n currencies: [],\n languages: [],\n createdAt: '2018-10-04T11:32:12.603Z',\n trialUntil: '2018-12',\n carts: {\n countryTaxRateFallbackEnabled: false,\n deleteDaysAfterLastModification: 90,\n },\n messages: { enabled: false, deleteDaysAfterCreation: 15 },\n shippingRateInputType: undefined,\n externalOAuth: undefined,\n searchIndexing: {\n products: {\n status: 'Deactivated',\n },\n orders: {\n status: 'Deactivated',\n },\n },\n version: 1,\n }\n }\n return this.projects[projectKey]\n }\n\n saveProject = (project: Project): Project => {\n this.projects[project.key] = project\n return project\n }\n\n getProject = (projectKey: string): Project => {\n return this.addProject(projectKey)\n }\n\n private expand = <T>(\n projectKey: string,\n obj: T,\n clause: undefined | string | string[]\n ): T => {\n if (!clause) return obj\n const newObj = JSON.parse(JSON.stringify(obj))\n if (Array.isArray(clause)) {\n clause.forEach(c => {\n this._resolveResource(projectKey, newObj, c)\n })\n } else {\n this._resolveResource(projectKey, newObj, clause)\n }\n return newObj\n }\n\n private _resolveResource = (projectKey: string, obj: any, expand: string) => {\n const params = parseExpandClause(expand)\n\n if (!params.index) {\n const reference = obj[params.element]\n if (reference === undefined) {\n return\n }\n this._resolveReference(projectKey, reference, params.rest)\n } else if (params.index === '*') {\n const reference = obj[params.element]\n if (reference === undefined || !Array.isArray(reference)) return\n reference.forEach((itemRef: Writable<Reference>) => {\n this._resolveReference(projectKey, itemRef, params.rest)\n })\n } else {\n const reference = obj[params.element][params.index]\n if (reference === undefined) return\n this._resolveReference(projectKey, reference, params.rest)\n }\n }\n\n private _resolveReference(\n projectKey: string,\n reference: any,\n expand: string | undefined\n ) {\n if (reference === undefined) return\n\n if (\n reference.typeId !== undefined &&\n (reference.id !== undefined || reference.key !== undefined)\n ) {\n // @ts-ignore\n reference.obj = this.getByResourceIdentifier(projectKey, {\n typeId: reference.typeId,\n id: reference.id,\n key: reference.key,\n } as ResourceIdentifier)\n if (expand) {\n this._resolveResource(projectKey, reference.obj, expand)\n }\n } else {\n if (expand) {\n this._resolveResource(projectKey, reference, expand)\n }\n }\n }\n}\n","import { randomBytes } from 'crypto'\n\ntype Token = {\n access_token: string\n token_type: 'Bearer'\n expires_in: number\n scope: string\n}\n\nexport class OAuth2Store {\n tokens: Token[] = []\n validate: Boolean = true\n\n constructor(validate: Boolean = true) {\n this.validate = validate\n }\n\n getClientToken(clientId: string, clientSecret: string, scope?: string) {\n const token: Token = {\n access_token: randomBytes(16).toString('base64'),\n token_type: 'Bearer',\n expires_in: 172800,\n scope: scope || 'todo',\n }\n this.tokens.push(token)\n return token\n }\n\n validateToken(token: string) {\n if (!this.validate) return true\n\n const foundToken = this.tokens.find(t => t.access_token === token)\n if (foundToken) {\n return true\n }\n return false\n }\n}\n","import { Request } from 'express'\n\nexport const getBearerToken = (request: Request): string | undefined => {\n const authHeader = request.header('Authorization')\n const match = authHeader?.match(/^Bearer\\s(?<token>[^\\s]+)$/)\n if (match) {\n return match.groups?.token\n }\n return undefined\n}\n","import auth from 'basic-auth'\nimport bodyParser from 'body-parser'\nimport express, { NextFunction, Request, Response } from 'express'\nimport {\n AccessDeniedError,\n InvalidTokenError,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError, InvalidRequestError } from '../exceptions'\nimport { InvalidClientError, UnsupportedGrantType } from './errors'\nimport { OAuth2Store } from './store'\nimport { getBearerToken } from './helpers'\n\nexport class OAuth2Server {\n store: OAuth2Store\n\n constructor(options: { enabled: boolean; validate: boolean }) {\n this.store = new OAuth2Store(options.validate)\n }\n\n createRouter() {\n const router = express.Router()\n router.use(bodyParser.urlencoded({ extended: true }))\n router.post('/token', this.tokenHandler.bind(this))\n return router\n }\n\n createMiddleware() {\n return async (request: Request, response: Response, next: NextFunction) => {\n const token = getBearerToken(request)\n if (!token) {\n next(\n new CommercetoolsError<AccessDeniedError>(\n {\n code: 'access_denied',\n message:\n 'This endpoint requires an access token. You can get one from the authorization server.',\n },\n 401\n )\n )\n }\n\n if (!token || !this.store.validateToken(token)) {\n next(\n new CommercetoolsError<InvalidTokenError>(\n {\n code: 'invalid_token',\n message: 'invalid_token',\n },\n 401\n )\n )\n }\n\n next()\n }\n }\n async tokenHandler(request: Request, response: Response, next: NextFunction) {\n const authHeader = request.header('Authorization')\n if (!authHeader) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 401\n )\n )\n }\n const credentials = auth.parse(authHeader)\n if (!credentials) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 400\n )\n )\n }\n\n const grantType = request.query.grant_type || request.body.grant_type\n if (!grantType) {\n return next(\n new CommercetoolsError<InvalidRequestError>(\n {\n code: 'invalid_request',\n message: 'Missing required parameter: grant_type.',\n },\n 400\n )\n )\n }\n\n if (grantType === 'client_credentials') {\n const token = this.store.getClientToken(\n credentials.name,\n credentials.pass,\n request.query.scope?.toString()\n )\n return response.status(200).send(token)\n } else {\n return next(\n new CommercetoolsError<UnsupportedGrantType>(\n {\n code: 'unsupported_grant_type',\n message: `Invalid parameter: grant_type: Invalid grant type: ${grantType}`,\n },\n 400\n )\n )\n }\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\n\nexport const getBaseResourceProperties = () => {\n return {\n id: uuidv4(),\n createdAt: new Date().toISOString(),\n lastModifiedAt: new Date().toISOString(),\n version: 0,\n }\n}\n","import { getBaseResourceProperties } from './helpers'\nimport { AbstractStorage } from './storage'\nimport { RepositoryMap, ResourceMap, Services } from './types'\n\nexport class ProjectAPI {\n private projectKey: string\n private _storage: AbstractStorage\n private _services: Services\n\n constructor(\n projectKey: string,\n services: Services,\n storage: AbstractStorage\n ) {\n this.projectKey = projectKey\n this._storage = storage\n this._services = services\n }\n\n add<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId | 'custom-object',\n resource: ResourceMap[ReferenceTypeId]\n ) {\n //@ts-ignore\n if (typeId === 'custom-object') typeId = 'key-value-document'\n\n const parsedTypeId = typeId as ReferenceTypeId\n\n const service = this._services[parsedTypeId]\n if (service) {\n this._storage.add(this.projectKey, parsedTypeId, {\n ...getBaseResourceProperties(),\n ...resource,\n })\n } else {\n throw new Error(`Service for ${typeId} not implemented yet`)\n }\n }\n\n get<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId,\n id: string\n ): ResourceMap[ReferenceTypeId] {\n return this._storage.get(\n this.projectKey,\n typeId,\n id,\n {}\n ) as ResourceMap[ReferenceTypeId]\n }\n\n // TODO: Not sure if we want to expose this...\n getRepository<ReferenceTypeId extends keyof RepositoryMap>(\n typeId: ReferenceTypeId\n ): RepositoryMap[ReferenceTypeId] {\n const service = this._services[typeId]\n if (service !== undefined) {\n return service.repository as RepositoryMap[ReferenceTypeId]\n }\n throw new Error('No such repository')\n }\n}\n","export const copyHeaders = (headers: Record<string, string>) => {\n const validHeaders = ['accept', 'host', 'authorization']\n const result: Record<string, string> = {}\n\n Object.entries(headers).forEach(([key, value]) => {\n if (validHeaders.includes(key.toLowerCase())) {\n result[key] = value\n }\n })\n\n return result\n}\n","export const DEFAULT_API_HOSTNAME = /^https:\\/\\/api\\..*?\\.commercetools.com:443$/\nexport const DEFAULT_AUTH_HOSTNAME = /^https:\\/\\/auth\\..*?\\.commercetools.com:443$/\n","import { Update } from '@commercetools/platform-sdk'\nimport { ParsedQs } from 'qs'\nimport { Request, Response, Router } from 'express'\nimport { AbstractResourceRepository } from '../repositories/abstract'\n\nexport default abstract class AbstractService {\n protected abstract getBasePath(): string\n public abstract repository: AbstractResourceRepository\n\n createStatusCode = 201\n\n constructor(parent: Router) {\n this.registerRoutes(parent)\n }\n\n extraRoutes(router: Router) {}\n\n registerRoutes(parent: Router) {\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n // Bind this first since the `/:id` routes are currently a bit to greedy\n this.extraRoutes(router)\n\n router.get('/', this.get.bind(this))\n router.get('/key=:key', this.getWithKey.bind(this)) // same thing goes for the key routes\n router.get('/:id', this.getWithId.bind(this))\n\n router.delete('/key=:key', this.deletewithKey.bind(this))\n router.delete('/:id', this.deletewithId.bind(this))\n\n router.post('/', this.post.bind(this))\n router.post('/key=:key', this.postWithKey.bind(this))\n router.post('/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n get(request: Request, response: Response) {\n const limit = this._parseParam(request.query.limit)\n const offset = this._parseParam(request.query.offset)\n\n const result = this.repository.query(request.params.projectKey, {\n expand: this._parseParam(request.query.expand),\n where: this._parseParam(request.query.where),\n limit: limit !== undefined ? Number(limit) : undefined,\n offset: offset !== undefined ? Number(offset) : undefined,\n })\n return response.status(200).send(result)\n }\n\n getWithId(request: Request, response: Response) {\n const result = this._expandWithId(request, request.params['id'])\n if (!result) {\n return response.status(404).send()\n }\n return response.status(200).send(result)\n }\n\n getWithKey(request: Request, response: Response) {\n const result = this.repository.getByKey(\n request.params.projectKey,\n request.params['key'],\n { expand: this._parseParam(request.query.expand) }\n )\n if (!result) return response.status(404).send()\n return response.status(200).send(result)\n }\n\n deletewithId(request: Request, response: Response) {\n const result = this.repository.delete(\n request.params.projectKey,\n request.params['id'],\n {\n expand: this._parseParam(request.query.expand),\n }\n )\n if (!result) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(result)\n }\n\n deletewithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n post(request: Request, response: Response) {\n const draft = request.body\n const resource = this.repository.create(request.params.projectKey, draft)\n const result = this._expandWithId(request, resource.id)\n return response.status(this.createStatusCode).send(result)\n }\n\n postWithId(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const resource = this.repository.get(\n request.params.projectKey,\n request.params['id']\n )\n if (!resource) {\n return response.status(404).send('Not found')\n }\n\n if (resource.version !== updateRequest.version) {\n return response.status(409).send('Concurrent modification')\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n resource,\n updateRequest.actions\n )\n\n const result = this._expandWithId(request, updatedResource.id)\n return response.status(200).send(result)\n }\n\n postWithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n protected _expandWithId(request: Request, resourceId: string) {\n const result = this.repository.get(request.params.projectKey, resourceId, {\n expand: this._parseParam(request.query.expand),\n })\n return result\n }\n\n // No idea what i'm doing\n private _parseParam(\n value: string | ParsedQs | string[] | ParsedQs[] | undefined\n ): string[] | undefined {\n if (Array.isArray(value)) {\n // @ts-ignore\n return value\n } else if (value !== undefined) {\n return [`${value}`]\n }\n return undefined\n }\n}\n","import {\n BaseResource,\n ConcurrentModificationError,\n Project,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\n\nexport const checkConcurrentModification = (\n resource: BaseResource | Project,\n expectedVersion: number\n) => {\n if (resource.version === expectedVersion) return\n\n const identifier = (<BaseResource>resource).id\n ? (<BaseResource>resource).id\n : (<Project>resource).key\n\n throw new CommercetoolsError<ConcurrentModificationError>(\n {\n message: `Object ${identifier} has a different version than expected. Expected: ${expectedVersion} - Actual: ${resource.version}.`,\n currentVersion: resource.version,\n code: 'ConcurrentModification',\n },\n 409\n )\n}\n","import { RepositoryTypes } from './../types'\nimport deepEqual from 'deep-equal'\n\nimport {\n BaseResource,\n InvalidOperationError,\n Project,\n UpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\n\nexport type QueryParams = {\n expand?: string[]\n where?: string[]\n offset?: number\n limit?: number\n}\n\nexport type GetParams = {\n expand?: string[]\n}\n\nexport abstract class AbstractRepository {\n protected _storage: AbstractStorage\n protected actions: Partial<\n Record<any, (projectKey: string, resource: any, action: any) => void>\n > = {}\n\n constructor(storage: AbstractStorage) {\n this._storage = storage\n }\n\n abstract save(projectKey: string, resource: BaseResource | Project): void\n\n processUpdateActions(\n projectKey: string,\n resource: BaseResource | Project,\n actions: UpdateAction[]\n ): BaseResource {\n // Deep-copy\n const modifiedResource = JSON.parse(JSON.stringify(resource))\n\n actions.forEach(action => {\n const updateFunc = this.actions[action.action]\n if (!updateFunc) {\n console.error(`No mock implemented for update action ${action.action}`)\n return\n }\n updateFunc(projectKey, modifiedResource, action)\n })\n\n if (!deepEqual(modifiedResource, resource)) {\n this.save(projectKey, modifiedResource)\n }\n return modifiedResource\n }\n}\n\nexport abstract class AbstractResourceRepository extends AbstractRepository {\n abstract create(projectKey: string, draft: any): BaseResource\n abstract getTypeId(): RepositoryTypes\n\n constructor(storage: AbstractStorage) {\n super(storage)\n this._storage.assertStorage(this.getTypeId())\n }\n\n query(projectKey: string, params: QueryParams = {}) {\n return this._storage.query(projectKey, this.getTypeId(), {\n expand: params.expand,\n where: params.where,\n offset: params.offset,\n limit: params.limit,\n })\n }\n\n get(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.get(projectKey, this.getTypeId(), id, params)\n }\n\n getByKey(\n projectKey: string,\n key: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.getByKey(projectKey, this.getTypeId(), key, params)\n }\n\n delete(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.delete(projectKey, this.getTypeId(), id, params)\n }\n\n save(projectKey: string, resource: BaseResource) {\n const current = this.get(projectKey, resource.id)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.add(projectKey, this.getTypeId(), resource as any)\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n CustomFields,\n CustomFieldsDraft,\n Money,\n Price,\n PriceDraft,\n Reference,\n ResourceIdentifier,\n Store,\n StoreKeyReference,\n StoreResourceIdentifier,\n Type,\n TypedMoney,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\n\nexport const createCustomFields = (\n draft: CustomFieldsDraft | undefined,\n projectKey: string,\n storage: AbstractStorage\n): CustomFields | undefined => {\n if (!draft) return undefined\n if (!draft.type) return undefined\n if (!draft.type.typeId) return undefined\n if (!draft.fields) return undefined\n\n const typeResource = storage.getByResourceIdentifier(\n projectKey,\n draft.type\n ) as Type\n\n if (!typeResource) {\n throw new Error(\n `No type '${draft.type.typeId}' with id=${draft.type.id} or key=${draft.type.key}`\n )\n }\n\n return {\n type: {\n typeId: draft.type.typeId,\n id: typeResource.id,\n },\n fields: draft.fields,\n }\n}\n\nexport const createPrice = (draft: PriceDraft): Price => {\n return {\n id: uuidv4(),\n value: createTypedMoney(draft.value),\n }\n}\n\nexport const createTypedMoney = (value: Money): TypedMoney => {\n return {\n type: 'centPrecision',\n fractionDigits: 2,\n ...value,\n }\n}\n\nexport const resolveStoreReference = (\n ref: StoreResourceIdentifier | undefined,\n projectKey: string,\n storage: AbstractStorage\n): StoreKeyReference | undefined => {\n if (!ref) return undefined\n const resource = storage.getByResourceIdentifier(projectKey, ref)\n if (!resource) {\n throw new Error('No such store')\n }\n\n const store = resource as Store\n return {\n typeId: 'store',\n key: store.key,\n }\n}\n\nexport const getReferenceFromResourceIdentifier = <T extends Reference>(\n resourceIdentifier: ResourceIdentifier,\n projectKey: string,\n storage: AbstractStorage\n): T => {\n const resource = storage.getByResourceIdentifier(\n projectKey,\n resourceIdentifier\n )\n if (!resource)\n throw new Error(\n `resource type ${resourceIdentifier.typeId} with id ${resourceIdentifier.id} and key ${resourceIdentifier.key} not found`\n )\n\n return ({\n typeId: resourceIdentifier.typeId,\n id: resource?.id,\n } as unknown) as T\n}\n","import {\n CartDiscount,\n CartDiscountChangeIsActiveAction,\n CartDiscountChangeSortOrderAction,\n CartDiscountDraft,\n CartDiscountSetDescriptionAction,\n CartDiscountSetKeyAction,\n CartDiscountSetValidFromAction,\n CartDiscountSetValidFromAndUntilAction,\n CartDiscountSetValidUntilAction,\n CartDiscountUpdateAction,\n CartDiscountValueAbsolute,\n CartDiscountValueDraft,\n CartDiscountValueFixed,\n CartDiscountValueGiftLineItem,\n CartDiscountValueRelative,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createTypedMoney } from './helpers'\n\nexport class CartDiscountRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart-discount'\n }\n\n create(projectKey: string, draft: CartDiscountDraft): CartDiscount {\n const resource: CartDiscount = {\n ...getBaseResourceProperties(),\n key: draft.key,\n description: draft.description,\n cartPredicate: draft.cartPredicate,\n isActive: draft.isActive || false,\n name: draft.name,\n references: [],\n target: draft.target,\n requiresDiscountCode: draft.requiresDiscountCode || false,\n sortOrder: draft.sortOrder,\n stackingMode: draft.stackingMode || 'Stacking',\n validFrom: draft.validFrom,\n validUntil: draft.validUntil,\n value: this.transformValueDraft(draft.value),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private transformValueDraft(value: CartDiscountValueDraft) {\n switch (value.type) {\n case 'absolute': {\n return {\n type: 'absolute',\n money: value.money.map(createTypedMoney),\n } as CartDiscountValueAbsolute\n }\n case 'fixed': {\n return {\n type: 'fixed',\n money: value.money.map(createTypedMoney),\n } as CartDiscountValueFixed\n }\n case 'giftLineItem': {\n return {\n ...value,\n } as CartDiscountValueGiftLineItem\n }\n case 'relative': {\n return {\n ...value,\n } as CartDiscountValueRelative\n }\n }\n\n return value\n }\n\n actions: Partial<\n Record<\n CartDiscountUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<CartDiscount>,\n action: any\n ) => void\n >\n > = {\n setKey: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { key }: CartDiscountSetKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { description }: CartDiscountSetDescriptionAction\n ) => {\n resource.description = description\n },\n setValidFrom: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validFrom }: CartDiscountSetValidFromAction\n ) => {\n resource.validFrom = validFrom\n },\n setValidUntil: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validUntil }: CartDiscountSetValidUntilAction\n ) => {\n resource.validUntil = validUntil\n },\n setValidFromAndUntil: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validFrom, validUntil }: CartDiscountSetValidFromAndUntilAction\n ) => {\n resource.validFrom = validFrom\n resource.validUntil = validUntil\n },\n changeSortOrder: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { sortOrder }: CartDiscountChangeSortOrderAction\n ) => {\n resource.sortOrder = sortOrder\n },\n changeIsActive: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { isActive }: CartDiscountChangeIsActiveAction\n ) => {\n resource.isActive = isActive\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { CartDiscountRepository } from '../repositories/cart-discount'\n\nexport class CartDiscountService extends AbstractService {\n public repository: CartDiscountRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartDiscountRepository(storage)\n }\n\n getBasePath() {\n return 'cart-discounts'\n }\n}\n","import {\n Cart,\n CartAddLineItemAction,\n CartDraft,\n CartRemoveLineItemAction,\n CartSetBillingAddressAction,\n CartSetCountryAction,\n CartSetCustomerEmailAction,\n CartSetCustomFieldAction,\n CartSetCustomTypeAction,\n CartSetLocaleAction,\n CartSetShippingAddressAction,\n GeneralError,\n LineItem,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { v4 as uuidv4 } from 'uuid'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class CartRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart'\n }\n\n create(projectKey: string, draft: CartDraft): Cart {\n const resource: Cart = {\n ...getBaseResourceProperties(),\n cartState: 'Active',\n lineItems: [],\n customLineItems: [],\n totalPrice: {\n type: 'centPrecision',\n centAmount: 0,\n currencyCode: draft.currency,\n fractionDigits: 0,\n },\n taxMode: 'Platform',\n taxRoundingMode: 'HalfEven',\n taxCalculationMode: 'LineItemLevel',\n refusedGifts: [],\n origin: 'Customer',\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n getActiveCart(projectKey: string): Cart | undefined {\n // Get first active cart\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: [`cartState=\"Active\"`],\n })\n if (results.count > 0) {\n return results.results[0] as Cart\n }\n\n return\n }\n\n actions = {\n addLineItem: (\n projectKey: string,\n resource: Writable<Cart>,\n { productId, variantId, sku, quantity = 1 }: CartAddLineItemAction\n ) => {\n let product: Product | null = null\n let variant: ProductVariant | undefined\n\n if (productId && variantId) {\n // Fetch product and variant by ID\n product = this._storage.get(projectKey, 'product', productId, {})\n } else if (sku) {\n // Fetch product and variant by SKU\n const items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${sku}\"))) or masterData(current(variants(sku=\"${sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count === 1) {\n product = items.results[0]\n }\n }\n\n if (!product) {\n // Check if product is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: sku\n ? `A product containing a variant with SKU '${sku}' not found.`\n : `A product with ID '${productId}' not found.`,\n })\n }\n\n // Find matching variant\n variant = [\n product.masterData.current.masterVariant,\n ...product.masterData.current.variants,\n ].find(x => {\n if (sku) return x.sku === sku\n if (variantId) return x.id === variantId\n return false\n })\n\n if (!variant) {\n // Check if variant is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: sku\n ? `A variant with SKU '${sku}' for product '${product.id}' not found.`\n : `A variant with ID '${variantId}' for product '${product.id}' not found.`,\n })\n }\n\n const alreadyAdded = resource.lineItems.some(\n x => x.productId === product?.id && x.variant.id === variant?.id\n )\n if (alreadyAdded) {\n // increase quantity and update total price\n resource.lineItems.map(x => {\n if (x.productId === product?.id && x.variant.id === variant?.id) {\n x.quantity += quantity\n x.totalPrice.centAmount = calculateLineItemTotalPrice(x)\n }\n return x\n })\n } else {\n // add line item\n if (!variant.prices?.length) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product with ID '${productId}' doesn't have any prices.`,\n })\n }\n\n const price = variant.prices[0]\n resource.lineItems.push({\n id: uuidv4(),\n productId: product.id,\n productKey: product.key,\n name: product.masterData.current.name,\n productSlug: product.masterData.current.slug,\n productType: product.productType,\n variant,\n price: price,\n totalPrice: {\n ...price.value,\n centAmount: price.value.centAmount * quantity,\n },\n quantity,\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n priceMode: 'Platform',\n state: [],\n })\n }\n\n // Update cart total price\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\n },\n removeLineItem: (\n projectKey: string,\n resource: Writable<Cart>,\n { lineItemId, quantity }: CartRemoveLineItemAction\n ) => {\n const lineItem = resource.lineItems.find(x => x.id === lineItemId)\n if (!lineItem) {\n // Check if product is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A line item with ID '${lineItemId}' not found.`,\n })\n }\n\n const shouldDelete = !quantity || quantity >= lineItem.quantity\n if (shouldDelete) {\n // delete line item\n resource.lineItems = resource.lineItems.filter(x => x.id !== lineItemId)\n } else {\n // decrease quantity and update total price\n resource.lineItems.map(x => {\n if (x.id === lineItemId && quantity) {\n x.quantity -= quantity\n x.totalPrice.centAmount = calculateLineItemTotalPrice(x)\n }\n return x\n })\n }\n\n // Update cart total price\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Cart>,\n { address }: CartSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCountry: (\n projectKey: string,\n resource: Writable<Cart>,\n { country }: CartSetCountryAction\n ) => {\n resource.country = country\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Cart>,\n { email }: CartSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Cart,\n { name, value }: CartSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Cart>,\n { type, fields }: CartSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Cart>,\n { locale }: CartSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Cart>,\n { address }: CartSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n }\n}\n\nconst calculateLineItemTotalPrice = (lineItem: LineItem): number =>\n lineItem.price!.value.centAmount * lineItem.quantity\n\nconst calculateCartTotalPrice = (cart: Cart): number =>\n cart.lineItems.reduce((cur, item) => cur + item.totalPrice.centAmount, 0)\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CartRepository } from '../repositories/cart'\nimport { AbstractStorage } from '../storage'\n\nexport class CartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'carts'\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n Category,\n CategoryChangeAssetNameAction,\n CategoryChangeSlugAction,\n CategoryDraft,\n CategorySetAssetDescriptionAction,\n CategorySetAssetSourcesAction,\n CategorySetDescriptionAction,\n CategorySetKeyAction,\n CategorySetMetaDescriptionAction,\n CategorySetMetaKeywordsAction,\n CategorySetMetaTitleAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { createCustomFields } from './helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CategoryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'category'\n }\n\n create(projectKey: string, draft: CategoryDraft): Category {\n const resource: Category = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n slug: draft.slug,\n orderHint: draft.orderHint || '',\n externalId: draft.externalId || '',\n parent: draft.parent\n ? { typeId: 'category', id: draft.parent.id! }\n : undefined,\n ancestors: [], // TODO\n assets:\n draft.assets?.map(d => {\n return {\n id: uuidv4(),\n name: d.name,\n description: d.description,\n sources: d.sources,\n tags: d.tags,\n key: d.key,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n }) || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeAssetName: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, name }: CategoryChangeAssetNameAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.name = name\n }\n if (assetKey && assetKey == asset.key) {\n asset.name = name\n }\n })\n },\n changeSlug: (\n projectKey: string,\n resource: Writable<Category>,\n { slug }: CategoryChangeSlugAction\n ) => {\n resource.slug = slug\n },\n setKey: (\n projectKey: string,\n resource: Writable<Category>,\n { key }: CategorySetKeyAction\n ) => {\n resource.key = key\n },\n setAssetDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, description }: CategorySetAssetDescriptionAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.description = description\n }\n if (assetKey && assetKey == asset.key) {\n asset.description = description\n }\n })\n },\n setAssetSources: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, sources }: CategorySetAssetSourcesAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.sources = sources\n }\n if (assetKey && assetKey == asset.key) {\n asset.sources = sources\n }\n })\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { description }: CategorySetDescriptionAction\n ) => {\n resource.description = description\n },\n setMetaDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { metaDescription }: CategorySetMetaDescriptionAction\n ) => {\n resource.metaDescription = metaDescription\n },\n setMetaKeywords: (\n projectKey: string,\n resource: Writable<Category>,\n { metaKeywords }: CategorySetMetaKeywordsAction\n ) => {\n resource.metaKeywords = metaKeywords\n },\n setMetaTitle: (\n projectKey: string,\n resource: Writable<Category>,\n { metaTitle }: CategorySetMetaTitleAction\n ) => {\n resource.metaTitle = metaTitle\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CategoryRepository } from '../repositories/category'\n\nexport class CategoryServices extends AbstractService {\n public repository: CategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CategoryRepository(storage)\n }\n\n getBasePath() {\n return 'categories'\n }\n}\n","import {\n Channel,\n ChannelDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ChannelRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'channel'\n }\n\n create(projectKey: string, draft: ChannelDraft): Channel {\n const resource: Channel = {\n ...getBaseResourceProperties(),\n key: draft.key,\n roles: draft.roles || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { ChannelRepository } from '../repositories/channel'\nimport { AbstractStorage } from '../storage'\n\nexport class ChannelService extends AbstractService {\n public repository: ChannelRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ChannelRepository(storage)\n }\n\n getBasePath() {\n return 'channels'\n }\n}\n","import {\n CustomerGroup,\n CustomerGroupChangeNameAction,\n CustomerGroupDraft,\n CustomerGroupSetKeyAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CustomerGroupRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerGroupDraft): CustomerGroup {\n const resource: CustomerGroup = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.groupName,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n setKey: (\n projectKey: string,\n resource: Writable<CustomerGroup>,\n { key }: CustomerGroupSetKeyAction\n ) => {\n resource.key = key\n },\n changeName: (\n projectKey: string,\n resource: Writable<CustomerGroup>,\n { name }: CustomerGroupChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerGroupRepository } from '../repositories/customer-group'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerGroupService extends AbstractService {\n public repository: CustomerGroupRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerGroupRepository(storage)\n }\n\n getBasePath() {\n return 'customer-groups'\n }\n}\n","import {\n Customer,\n CustomerDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CustomerRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerDraft): Customer {\n const resource: Customer = {\n ...getBaseResourceProperties(),\n email: draft.email,\n password: Buffer.from(draft.password).toString('base64'),\n isEmailVerified: draft.isEmailVerified || false,\n addresses: [],\n }\n this.save(projectKey, resource)\n return resource\n }\n getMe(projectKey: string): Customer | undefined {\n const results = this._storage.query(projectKey, this.getTypeId(), {}) // grab the first customer you can find\n if (results.count > 0) {\n return results.results[0] as Customer\n }\n\n return\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerRepository } from '../repositories/customer'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerService extends AbstractService {\n public repository: CustomerRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerRepository(storage)\n }\n\n getBasePath() {\n return 'customers'\n }\n}\n","import {\n CustomObject,\n CustomObjectDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { checkConcurrentModification } from './errors'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\n\nexport class CustomObjectRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'key-value-document'\n }\n\n create(projectKey: string, draft: Writable<CustomObjectDraft>): CustomObject {\n const current = this.getWithContainerAndKey(\n projectKey,\n draft.container,\n draft.key\n )\n\n const baseProperties = getBaseResourceProperties()\n if (current) {\n baseProperties.id = current.id\n\n if (!draft.version) {\n draft.version = current.version\n }\n\n checkConcurrentModification(current, draft.version)\n if (draft.value === current.value) {\n return current\n }\n\n baseProperties.version = current.version\n } else {\n if (draft.version) {\n baseProperties.version = draft.version\n }\n }\n\n const resource: CustomObject = {\n ...baseProperties,\n container: draft.container,\n key: draft.key,\n value: draft.value,\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n getWithContainerAndKey(projectKey: string, container: string, key: string) {\n const items = this._storage.all(projectKey, this.getTypeId()) as Array<\n CustomObject\n >\n return items.find(item => item.container === container && item.key === key)\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { CustomObjectRepository } from '../repositories/custom-object'\nimport { AbstractStorage } from '../storage'\nimport { CustomObjectDraft } from '@commercetools/platform-sdk'\n\nexport class CustomObjectService extends AbstractService {\n public repository: CustomObjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomObjectRepository(storage)\n }\n\n getBasePath() {\n return 'custom-objects'\n }\n\n extraRoutes(router: Router) {\n router.get('/:container/:key', this.getWithContainerAndKey.bind(this))\n router.post('/:container/:key', this.createWithContainerAndKey.bind(this))\n router.delete('/:container/:key', this.deleteWithContainerAndKey.bind(this))\n }\n\n getWithContainerAndKey(request: Request, response: Response) {\n const result = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!result) {\n return response.status(404).send('Not Found')\n }\n return response.status(200).send(result)\n }\n\n createWithContainerAndKey(request: Request, response: Response) {\n const draft: CustomObjectDraft = {\n ...request.body,\n key: request.params.key,\n container: request.params.container,\n }\n\n const result = this.repository.create(request.params.projectKey, draft)\n return response.status(200).send(result)\n }\n\n deleteWithContainerAndKey(request: Request, response: Response) {\n const current = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!current) {\n return response.status(404).send('Not Found')\n }\n\n const result = this.repository.delete(request.params.projectKey, current.id)\n\n return response.status(200).send(result)\n }\n}\n","import {\n CartDiscountReference,\n DiscountCode,\n DiscountCodeChangeCartDiscountsAction,\n DiscountCodeChangeIsActiveAction,\n DiscountCodeDraft,\n DiscountCodeSetCartPredicateAction,\n DiscountCodeSetDescriptionAction,\n DiscountCodeSetMaxApplicationsAction,\n DiscountCodeSetMaxApplicationsPerCustomerAction,\n DiscountCodeSetNameAction,\n DiscountCodeSetValidFromAction,\n DiscountCodeSetValidFromAndUntilAction,\n DiscountCodeSetValidUntilAction,\n DiscountCodeUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class DiscountCodeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart-discount'\n }\n\n create(projectKey: string, draft: DiscountCodeDraft): DiscountCode {\n const resource: DiscountCode = {\n ...getBaseResourceProperties(),\n applicationVersion: 1,\n cartDiscounts: draft.cartDiscounts.map(\n (obj): CartDiscountReference => ({\n typeId: 'cart-discount',\n id: obj.id!,\n })\n ),\n cartPredicate: draft.cartPredicate,\n code: draft.code,\n description: draft.description,\n groups: draft.groups || [],\n isActive: draft.isActive || true,\n name: draft.name,\n references: [],\n validFrom: draft.validFrom,\n validUntil: draft.validUntil,\n maxApplications: draft.maxApplications,\n maxApplicationsPerCustomer: draft.maxApplicationsPerCustomer,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n DiscountCodeUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<DiscountCode>,\n action: any\n ) => void\n >\n > = {\n changeIsActive: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { isActive }: DiscountCodeChangeIsActiveAction\n ) => {\n resource.isActive = isActive\n },\n changeCartDiscounts: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { cartDiscounts }: DiscountCodeChangeCartDiscountsAction\n ) => {\n resource.cartDiscounts = cartDiscounts.map(\n (obj): CartDiscountReference => ({\n typeId: 'cart-discount',\n id: obj.id!,\n })\n )\n },\n setDescription: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { description }: DiscountCodeSetDescriptionAction\n ) => {\n resource.description = description\n },\n setCartPredicate: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { cartPredicate }: DiscountCodeSetCartPredicateAction\n ) => {\n resource.cartPredicate = cartPredicate\n },\n setName: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { name }: DiscountCodeSetNameAction\n ) => {\n resource.name = name\n },\n setMaxApplications: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { maxApplications }: DiscountCodeSetMaxApplicationsAction\n ) => {\n resource.maxApplications = maxApplications\n },\n setMaxApplicationsPerCustomer: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n {\n maxApplicationsPerCustomer,\n }: DiscountCodeSetMaxApplicationsPerCustomerAction\n ) => {\n resource.maxApplicationsPerCustomer = maxApplicationsPerCustomer\n },\n setValidFrom: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validFrom }: DiscountCodeSetValidFromAction\n ) => {\n resource.validFrom = validFrom\n },\n setValidUntil: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validUntil }: DiscountCodeSetValidUntilAction\n ) => {\n resource.validUntil = validUntil\n },\n setValidFromAndUntil: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validFrom, validUntil }: DiscountCodeSetValidFromAndUntilAction\n ) => {\n resource.validFrom = validFrom\n resource.validUntil = validUntil\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { DiscountCodeRepository } from '../repositories/discount-code'\n\nexport class DiscountCodeService extends AbstractService {\n public repository: DiscountCodeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new DiscountCodeRepository(storage)\n }\n\n getBasePath() {\n return 'discount-codes'\n }\n}\n","import {\n Extension,\n ExtensionChangeDestinationAction,\n ExtensionChangeTriggersAction,\n ExtensionDraft,\n ExtensionSetKeyAction,\n ExtensionSetTimeoutInMsAction,\n ExtensionUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ExtensionRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'extension'\n }\n\n create(projectKey: string, draft: ExtensionDraft): Extension {\n const resource: Extension = {\n ...getBaseResourceProperties(),\n key: draft.key,\n timeoutInMs: draft.timeoutInMs,\n destination: draft.destination,\n triggers: draft.triggers,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Record<\n ExtensionUpdateAction['action'],\n (projectKey: string, resource: Writable<Extension>, action: any) => void\n > = {\n setKey: (\n projectKey: string,\n resource: Writable<Extension>,\n { key }: ExtensionSetKeyAction\n ) => {\n resource.key = key\n },\n setTimeoutInMs: (\n projectKey: string,\n resource: Writable<Extension>,\n { timeoutInMs }: ExtensionSetTimeoutInMsAction\n ) => {\n resource.timeoutInMs = timeoutInMs\n },\n changeTriggers: (\n projectKey: string,\n resource: Writable<Extension>,\n { triggers }: ExtensionChangeTriggersAction\n ) => {\n resource.triggers = triggers\n },\n changeDestination: (\n projectKey: string,\n resource: Writable<Extension>,\n { destination }: ExtensionChangeDestinationAction\n ) => {\n resource.destination = destination\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ExtensionRepository } from '../repositories/extension'\n\nexport class ExtensionServices extends AbstractService {\n public repository: ExtensionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ExtensionRepository(storage)\n }\n\n getBasePath() {\n return 'extensions'\n }\n}\n","import {\n InventoryEntry,\n InventoryEntryChangeQuantityAction,\n InventoryEntryDraft,\n InventoryEntrySetCustomFieldAction,\n InventoryEntrySetCustomTypeAction,\n InventoryEntrySetExpectedDeliveryAction,\n InventoryEntrySetRestockableInDaysAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\n\nexport class InventoryEntryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'inventory-entry'\n }\n\n create(projectKey: string, draft: InventoryEntryDraft): InventoryEntry {\n const resource: InventoryEntry = {\n ...getBaseResourceProperties(),\n sku: draft.sku,\n quantityOnStock: draft.quantityOnStock,\n availableQuantity: draft.quantityOnStock,\n expectedDelivery: draft.expectedDelivery,\n restockableInDays: draft.restockableInDays,\n supplyChannel: {\n ...draft.supplyChannel,\n typeId: 'channel',\n id: draft.supplyChannel?.id ?? '',\n },\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeQuantity: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { quantity }: InventoryEntryChangeQuantityAction\n ) => {\n resource.quantityOnStock = quantity\n // don't know active reservations so just set to same value\n resource.availableQuantity = quantity\n },\n setExpectedDelivery: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { expectedDelivery }: InventoryEntrySetExpectedDeliveryAction\n ) => {\n resource.expectedDelivery = new Date(expectedDelivery!).toISOString()\n },\n setCustomField: (\n projectKey: string,\n resource: InventoryEntry,\n { name, value }: InventoryEntrySetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { type, fields }: InventoryEntrySetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setRestockableInDays: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { restockableInDays }: InventoryEntrySetRestockableInDaysAction\n ) => {\n resource.restockableInDays = restockableInDays\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { InventoryEntryRepository } from '../repositories/inventory-entry'\n\nexport class InventoryEntryService extends AbstractService {\n public repository: InventoryEntryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new InventoryEntryRepository(storage)\n }\n\n getBasePath() {\n return 'inventory'\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CartRepository } from '../repositories/cart'\n\nexport class MyCartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'me'\n }\n\n registerRoutes(parent: Router) {\n // Overwrite this function to be able to handle /me/active-cart path.\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n this.extraRoutes(router)\n\n router.get('/active-cart', this.activeCart.bind(this))\n router.get('/carts/', this.get.bind(this))\n router.get('/carts/:id', this.getWithId.bind(this))\n\n router.delete('/carts/:id', this.deletewithId.bind(this))\n\n router.post('/carts/', this.post.bind(this))\n router.post('/carts/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n activeCart(request: Request, response: Response) {\n const resource = this.repository.getActiveCart(request.params.projectKey)\n if (!resource) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(resource)\n }\n}\n","import {\n Payment,\n PaymentAddTransactionAction,\n PaymentChangeTransactionStateAction,\n PaymentDraft,\n PaymentSetCustomFieldAction,\n PaymentSetCustomTypeAction,\n PaymentTransitionStateAction,\n ReferenceTypeId,\n State,\n StateReference,\n Transaction,\n TransactionDraft,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport { getBaseResourceProperties } from '../helpers'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from '../types'\n\nexport class PaymentRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'payment'\n }\n\n create(projectKey: string, draft: PaymentDraft): Payment {\n const resource: Payment = {\n ...getBaseResourceProperties(),\n amountPlanned: createTypedMoney(draft.amountPlanned),\n paymentMethodInfo: draft.paymentMethodInfo!,\n paymentStatus: draft.paymentStatus\n ? {\n ...draft.paymentStatus,\n state: draft.paymentStatus.state\n ? getReferenceFromResourceIdentifier<StateReference>(\n draft.paymentStatus.state,\n projectKey,\n this._storage\n )\n : undefined,\n }\n : {},\n transactions: (draft.transactions || []).map(t =>\n this.transactionFromTransactionDraft(t, projectKey)\n ),\n interfaceInteractions: (draft.interfaceInteractions || []).map(\n interaction =>\n createCustomFields(interaction, projectKey, this._storage)!\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n transactionFromTransactionDraft = (\n draft: TransactionDraft,\n projectKey: string\n ) => ({\n ...draft,\n id: uuidv4(),\n amount: createTypedMoney(draft.amount),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n })\n\n actions = {\n setCustomField: (\n projectKey: string,\n resource: Payment,\n { name, value }: PaymentSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Payment>,\n { type, fields }: PaymentSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n addTransaction: (\n projectKey: string,\n resource: Writable<Payment>,\n { transaction }: PaymentAddTransactionAction\n ) => {\n resource.transactions = [\n ...resource.transactions,\n this.transactionFromTransactionDraft(transaction, projectKey),\n ]\n },\n changeTransactionState: (\n _projectKey: string,\n resource: Writable<Payment>,\n { transactionId, state }: PaymentChangeTransactionStateAction\n ) => {\n const index = resource.transactions.findIndex(\n (e: Transaction) => e.id === transactionId\n )\n const updatedTransaction: Transaction = {\n ...resource.transactions[index],\n state,\n }\n resource.transactions[index] = updatedTransaction\n },\n transitionState: (\n projectKey: string,\n resource: Writable<Payment>,\n { state }: PaymentTransitionStateAction\n ) => {\n const stateObj = this._storage.getByResourceIdentifier(\n projectKey,\n state\n ) as State | null\n\n if (!stateObj) {\n throw new Error(`State ${state} not found`)\n }\n\n resource.paymentStatus.state = {\n typeId: 'state',\n id: stateObj.id,\n obj: stateObj,\n }\n },\n // addInterfaceInteraction: () => {},\n // changeAmountPlanned: () => {},\n // changeTransactionInteractionId: () => {},\n // changeTransactionTimestamp: () => {},\n // setAmountPaid: () => {},\n // setAmountRefunded: () => {},\n // setAnonymousId: () => {},\n // setAuthorization: () => {},\n // setCustomer: () => {},\n // setExternalId: () => {},\n // setInterfaceId: () => {},\n // setKey: () => {},\n // setMethodInfoInterface: () => {},\n // setMethodInfoMethod: () => {},\n // setMethodInfoName: () => {},\n // setStatusInterfaceCode: () => {},\n // setStatusInterfaceText: () => {},\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class MyPaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'me/payments'\n }\n}\n","import assert from 'assert'\nimport {\n Cart,\n CustomLineItem,\n CustomLineItemDraft,\n GeneralError,\n LineItem,\n LineItemImportDraft,\n Order,\n OrderAddPaymentAction,\n OrderChangeOrderStateAction,\n OrderChangePaymentStateAction,\n OrderFromCartDraft,\n OrderImportDraft,\n OrderSetBillingAddressAction,\n OrderSetCustomerEmailAction,\n OrderSetCustomFieldAction,\n OrderSetCustomTypeAction,\n OrderSetLocaleAction,\n OrderSetOrderNumberAction,\n OrderSetShippingAddressAction,\n OrderSetStoreAction,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n Store,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository, QueryParams } from './abstract'\nimport {\n createCustomFields,\n createPrice,\n createTypedMoney,\n resolveStoreReference,\n} from './helpers'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class OrderRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'order'\n }\n\n create(projectKey: string, draft: OrderFromCartDraft): Order {\n assert(draft.cart, 'draft.cart is missing')\n\n const cart = this._storage.getByResourceIdentifier(\n projectKey,\n draft.cart\n ) as Cart | null\n if (!cart) {\n throw new Error('Cannot find cart')\n }\n\n const resource: Order = {\n ...getBaseResourceProperties(),\n orderNumber: draft.orderNumber,\n orderState: 'Open',\n lineItems: [],\n customLineItems: [],\n totalPrice: cart.totalPrice,\n refusedGifts: [],\n origin: 'Customer',\n syncInfo: [],\n lastMessageSequenceNumber: 0,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n import(projectKey: string, draft: OrderImportDraft): Order {\n // TODO: Check if order with given orderNumber already exists\n assert(this, 'OrderRepository not valid')\n const resource: Order = {\n ...getBaseResourceProperties(),\n\n billingAddress: draft.billingAddress,\n shippingAddress: draft.shippingAddress,\n\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n customerEmail: draft.customerEmail,\n lastMessageSequenceNumber: 0,\n orderNumber: draft.orderNumber,\n orderState: draft.orderState || 'Open',\n origin: draft.origin || 'Customer',\n paymentState: draft.paymentState,\n refusedGifts: [],\n store: resolveStoreReference(draft.store, projectKey, this._storage),\n syncInfo: [],\n\n lineItems:\n draft.lineItems?.map(item =>\n this.lineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n customLineItems:\n draft.customLineItems?.map(item =>\n this.customLineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n\n totalPrice: {\n type: 'centPrecision',\n ...draft.totalPrice,\n fractionDigits: 2,\n },\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private lineItemFromImportDraft(\n projectKey: string,\n draft: LineItemImportDraft\n ): LineItem {\n let product: Product\n let variant: ProductVariant | undefined\n\n if (draft.variant.sku) {\n variant = {\n id: 0,\n sku: draft.variant.sku,\n }\n\n var items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${draft.variant.sku}\"))) or masterData(current(variants(sku=\"${draft.variant.sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count !== 1) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product containing a variant with SKU '${draft.variant.sku}' not found.`,\n })\n }\n\n product = items.results[0]\n if (product.masterData.current.masterVariant.sku === draft.variant.sku) {\n variant = product.masterData.current.masterVariant\n } else {\n variant = product.masterData.current.variants.find(\n v => v.sku === draft.variant.sku\n )\n }\n if (!variant) {\n throw new Error('Internal state error')\n }\n } else {\n throw new Error('No product found')\n }\n\n const lineItem: LineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n name: draft.name,\n price: createPrice(draft.price),\n priceMode: 'Platform',\n productId: product.id,\n productType: product.productType,\n quantity: draft.quantity,\n state: draft.state || [],\n taxRate: draft.taxRate,\n totalPrice: createTypedMoney(draft.price.value),\n variant: {\n id: variant.id,\n sku: variant.sku,\n price: createPrice(draft.price),\n },\n }\n\n return lineItem\n }\n\n private customLineItemFromImportDraft(\n projectKey: string,\n draft: CustomLineItemDraft\n ): CustomLineItem {\n const lineItem: CustomLineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n money: createTypedMoney(draft.money),\n name: draft.name,\n quantity: draft.quantity,\n slug: draft.slug,\n state: [],\n totalPrice: createTypedMoney(draft.money),\n }\n\n return lineItem\n }\n\n getWithOrderNumber(\n projectKey: string,\n orderNumber: string,\n params: QueryParams = {}\n ): Order | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n ...params,\n where: [`orderNumber=\"${orderNumber}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as Order\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate order numbers')\n }\n\n return\n }\n\n actions = {\n addPayment: (\n projectKey: string,\n resource: Writable<Order>,\n { payment }: OrderAddPaymentAction\n ) => {\n const resolvedPayment = this._storage.getByResourceIdentifier(\n projectKey,\n payment\n )\n if (!resolvedPayment) {\n throw new Error(`Payment ${payment.id} not found`)\n }\n\n if (!resource.paymentInfo) {\n resource.paymentInfo = {\n payments: [],\n }\n }\n\n resource.paymentInfo.payments.push({\n typeId: 'payment',\n id: payment.id!,\n })\n },\n changeOrderState: (\n projectKey: string,\n resource: Writable<Order>,\n { orderState }: OrderChangeOrderStateAction\n ) => {\n resource.orderState = orderState\n },\n changePaymentState: (\n projectKey: string,\n resource: Writable<Order>,\n { paymentState }: OrderChangePaymentStateAction\n ) => {\n resource.paymentState = paymentState\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Order>,\n { email }: OrderSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Order,\n { name, value }: OrderSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Order>,\n { type, fields }: OrderSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Order>,\n { locale }: OrderSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setOrderNumber: (\n projectKey: string,\n resource: Writable<Order>,\n { orderNumber }: OrderSetOrderNumberAction\n ) => {\n resource.orderNumber = orderNumber\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n setStore: (\n projectKey: string,\n resource: Writable<Order>,\n { store }: OrderSetStoreAction\n ) => {\n if (!store) return\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n store\n )\n if (!resolvedType) {\n throw new Error(`No store found with key=${store.key}`)\n }\n\n const storeReference = resolvedType as Store\n resource.store = {\n typeId: 'store',\n key: storeReference.key,\n }\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { OrderRepository } from '../repositories/order'\nimport { AbstractStorage } from '../storage'\n\nexport class OrderService extends AbstractService {\n public repository: OrderRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new OrderRepository(storage)\n }\n\n getBasePath() {\n return 'orders'\n }\n\n extraRoutes(router: Router) {\n router.post('/import', this.import.bind(this))\n router.get('/order-number=:orderNumber', this.getWithOrderNumber.bind(this))\n }\n\n import(request: Request, response: Response) {\n const importDraft = request.body\n const resource = this.repository.import(\n request.params.projectKey,\n importDraft\n )\n return response.status(200).send(resource)\n }\n\n getWithOrderNumber(request: Request, response: Response) {\n const resource = this.repository.getWithOrderNumber(\n request.params.projectKey,\n request.params.orderNumber,\n request.query\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class PaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'payments'\n }\n}\n","export const parseFilterExpression = (filter: string | string[]) => {\n if (typeof filter === 'object') {\n const filters = filter.map(parse)\n return filters.join(' and ')\n }\n return parse(filter)\n}\n\nconst parse = (filter: string) => {\n let parsed = filter.replace(/:/g, '=')\n\n do {\n parsed = parsed.replace(/(.*)\\.(.*)=(.*)$/g, '$1($2=$3)')\n } while (parsed.includes('.'))\n\n return parsed\n}\n","import { ParsedQs } from 'qs'\nimport {\n ProductDraft,\n ProductProjection,\n ProductVariant,\n ProductVariantDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { RepositoryTypes } from '../types'\nimport { parseFilterExpression } from '../lib/filterParser'\n\nexport class ProductProjectionRepository extends AbstractResourceRepository {\n getTypeId(): RepositoryTypes {\n return 'product-projection'\n }\n\n create(projectKey: string, draft: ProductDraft): ProductProjection {\n if (!draft.masterVariant) {\n throw new Error(\n `must provider mastervariant for product projection with key ${draft.key}`\n )\n }\n\n if (!draft.productType.id) {\n throw new Error(\n `must provider product type id for product projection with key ${draft.key}`\n )\n }\n\n const resource: ProductProjection = {\n ...getBaseResourceProperties(),\n name: draft.name,\n slug: draft.slug,\n categories: [],\n productType: { ...draft.productType, id: draft.productType.id! },\n masterVariant: variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants?.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }) ?? [],\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n search(projectKey: string, query: ParsedQs) {\n const filter = (query['filter.query'] ?? query.filter) as any\n const wherePredicate = filter ? parseFilterExpression(filter) : undefined\n\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: wherePredicate,\n offset: query.offset ? Number(query.offset) : undefined,\n limit: query.limit ? Number(query.limit) : undefined,\n }) //TODO: this is a partial implementation, but I don't really have the time to implement an actual search API right now\n\n return results\n }\n\n actions = {}\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n }\n}\n","import { ProductProjectionRepository } from './../repositories/product-projection'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class ProductProjectionService extends AbstractService {\n public repository: ProductProjectionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductProjectionRepository(storage)\n }\n\n getBasePath() {\n return 'product-projections'\n }\n\n extraRoutes(router: Router) {\n router.get('/search', this.search.bind(this))\n }\n\n search(request: Request, response: Response) {\n const resource = this.repository.search(\n request.params.projectKey,\n request.query\n )\n return response.status(200).send(resource)\n }\n}\n","import {\n Price,\n Product,\n ProductData,\n ProductDraft,\n ProductPublishAction,\n ProductSetAttributeAction,\n ProductVariant,\n ProductVariantDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from '../types'\n\nexport class ProductRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'product'\n }\n\n create(projectKey: string, draft: ProductDraft): Product {\n const productData = {\n name: draft.name,\n slug: draft.slug,\n categories: [],\n masterVariant:\n draft.masterVariant && variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants &&\n draft.variants.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }),\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n const resource: Product = {\n ...getBaseResourceProperties(),\n masterData: {\n // @ts-ignore\n current: draft.publish ? productData : undefined,\n // @ts-ignore\n staged: draft.publish ? undefined : productData,\n hasStagedChanges: draft.publish ?? true,\n published: draft.publish ?? false,\n },\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n actions = {\n publish: (\n projectKey: string,\n resource: Writable<Product>,\n { scope }: ProductPublishAction\n ) => {\n if (resource.masterData.staged) {\n resource.masterData.current = resource.masterData.staged\n // @ts-ignore\n resource.masterData.staged = undefined\n }\n resource.masterData.hasStagedChanges = false\n resource.masterData.published = true\n },\n setAttribute: (\n projectKey: string,\n resource: Writable<Product>,\n { variantId, sku, name, value, staged }: ProductSetAttributeAction\n ) => {\n const isStaged = staged !== undefined ? staged : false\n const productData = getProductData(resource, isStaged)\n const { variant, isMasterVariant, variantIndex } = getVariant(\n productData,\n variantId,\n sku\n )\n if (!variant) {\n throw new Error(\n `Variant with id ${variantId} or sku ${sku} not found on product ${resource.id}`\n )\n }\n\n if (!variant.attributes) {\n variant.attributes = []\n }\n\n const existingAttr = variant.attributes.find(attr => attr.name === name)\n if (existingAttr) {\n existingAttr.value = value\n } else {\n variant.attributes.push({\n name,\n value,\n })\n }\n if (isStaged) {\n resource.masterData.staged = productData\n if (isMasterVariant) {\n resource.masterData.staged.masterVariant = variant\n } else {\n resource.masterData.staged.variants[variantIndex] = variant\n }\n resource.masterData.hasStagedChanges = true\n } else {\n resource.masterData.current = productData\n if (isMasterVariant) {\n resource.masterData.current.masterVariant = variant\n } else {\n resource.masterData.current.variants[variantIndex] = variant\n }\n }\n },\n // 'setKey': () => {},\n // 'changeName': () => {},\n // 'setDescription': () => {},\n // 'changeSlug': () => {},\n // 'addVariant': () => {},\n // 'removeVariant': () => {},\n // 'changeMasterVariant': () => {},\n // 'addPrice': () => {},\n // 'setPrices': () => {},\n // 'changePrice': () => {},\n // 'removePrice': () => {},\n // 'setProductPriceCustomType': () => {},\n // 'setProductPriceCustomField': () => {},\n // 'setDiscountedPrice': () => {},\n // 'setAttributeInAllVariants': () => {},\n // 'addToCategory': () => {},\n // 'setCategoryOrderHint': () => {},\n // 'removeFromCategory': () => {},\n // 'setTaxCategory': () => {},\n // 'setSku': () => {},\n // 'setProductVariantKey': () => {},\n // 'addExternalImage': () => {},\n // 'moveImageToPosition': () => {},\n // 'removeImage': () => {},\n // 'setImageLabel': () => {},\n // 'addAsset': () => {},\n // 'removeAsset': () => {},\n // 'setAssetKey': () => {},\n // 'changeAssetOrder': () => {},\n // 'changeAssetName': () => {},\n // 'setAssetDescription': () => {},\n // 'setAssetTags': () => {},\n // 'setAssetSources': () => {},\n // 'setAssetCustomType': () => {},\n // 'setAssetCustomField': () => {},\n // 'setSearchKeywords': () => {},\n // 'setMetaTitle': () => {},\n // 'setMetaDescription': () => {},\n // 'setMetaKeywords': () => {},\n // 'revertStagedChanges': () => {},\n // 'revertStagedVariantChanges': () => {},\n // 'unpublish': () => {},\n // 'transitionState': () => {},\n }\n}\n\nconst getProductData = (product: Product, staged: boolean) => {\n if (!staged && product.masterData.current) {\n return product.masterData.current\n }\n return product.masterData.staged\n}\n\ninterface VariantResult {\n variant: Writable<ProductVariant> | undefined\n isMasterVariant: boolean\n variantIndex: number\n}\n\nconst getVariant = (\n productData: ProductData,\n variantId?: number,\n sku?: string\n): VariantResult => {\n const variants = [productData.masterVariant, ...productData.variants]\n const foundVariant = variants.find((variant: ProductVariant) => {\n if (variantId) {\n return variant.id === variantId\n }\n if (sku) {\n return variant.sku === sku\n }\n return false\n })\n\n const isMasterVariant = foundVariant === productData.masterVariant\n return {\n variant: foundVariant,\n isMasterVariant,\n variantIndex:\n !isMasterVariant && foundVariant\n ? productData.variants.indexOf(foundVariant)\n : -1,\n }\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n prices: variant?.prices as Price[],\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProductRepository } from '../repositories/product'\n\nexport class ProductService extends AbstractService {\n public repository: ProductRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductRepository(storage)\n }\n\n getBasePath() {\n return 'products'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport {\n AttributeDefinition,\n AttributeDefinitionDraft,\n AttributeType,\n ProductType,\n ProductTypeChangeLabelAction,\n ProductTypeChangeLocalizedEnumValueLabelAction,\n ProductTypeDraft,\n ProductTypeUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\n\nexport class ProductTypeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'product-type'\n }\n\n create(projectKey: string, draft: ProductTypeDraft): ProductType {\n const resource: ProductType = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n description: draft.description,\n attributes: (draft.attributes ?? []).map(a =>\n this.attributeDefinitionFromAttributeDefinitionDraft(projectKey, a)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n attributeDefinitionFromAttributeDefinitionDraft = (\n _projectKey: string,\n draft: AttributeDefinitionDraft\n ): AttributeDefinition => ({\n ...draft,\n attributeConstraint: draft.attributeConstraint ?? 'None',\n inputHint: draft.inputHint ?? 'SingleLine',\n isSearchable: draft.isSearchable ?? true,\n })\n\n getWithKey(projectKey: string, key: string): ProductType | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as ProductType\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate product type key')\n }\n\n return\n }\n\n actions: Partial<\n Record<\n ProductTypeUpdateAction['action'],\n (projectKey: string, resource: Writable<ProductType>, action: any) => void\n >\n > = {\n changeLocalizedEnumValueLabel: (\n projectKey: string,\n resource: Writable<ProductType>,\n {\n attributeName,\n newValue,\n }: ProductTypeChangeLocalizedEnumValueLabelAction\n ) => {\n const updateAttributeType = (type: Writable<AttributeType>) => {\n switch (type.name) {\n case 'lenum':\n type.values.forEach(v => {\n if (v.key == newValue.key) {\n v.label = newValue.label\n }\n })\n return\n case 'set':\n updateAttributeType(type.elementType)\n return\n }\n }\n\n resource.attributes?.forEach(value => {\n if (value.name == attributeName) {\n updateAttributeType(value.type)\n }\n })\n },\n changeLabel: (\n projectKey: string,\n resource: Writable<ProductType>,\n { attributeName, label }: ProductTypeChangeLabelAction\n ) => {\n resource.attributes?.forEach(value => {\n if (value.name == attributeName) {\n value.label = label\n }\n })\n },\n }\n}\n","import { ProductTypeRepository } from '../repositories/product-type'\nimport AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ProductTypeService extends AbstractService {\n public repository: ProductTypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductTypeRepository(storage)\n }\n\n getBasePath() {\n return 'product-types'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import { json } from 'express'\n\nexport const maskSecretValue = <T>(resource: T, path: string): T => {\n const parts = path.split('.')\n const clone = JSON.parse(JSON.stringify(resource))\n let val = clone\n\n const target = parts.pop()\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n val = val[part]\n\n if (val == undefined) {\n return resource\n }\n }\n\n if (val && target && val[target]) {\n val[target] = '****'\n }\n return clone\n}\n","import {\n Project,\n ProjectChangeCartsConfigurationAction,\n ProjectChangeCountriesAction,\n ProjectChangeCountryTaxRateFallbackEnabledAction,\n ProjectChangeCurrenciesAction,\n ProjectChangeLanguagesAction,\n ProjectChangeMessagesEnabledAction,\n ProjectChangeNameAction,\n ProjectChangeOrderSearchStatusAction,\n ProjectChangeProductSearchIndexingEnabledAction,\n ProjectSetExternalOAuthAction,\n ProjectSetShippingRateInputTypeAction,\n ProjectUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { InvalidOperationError } from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\nimport { AbstractRepository } from './abstract'\nimport { maskSecretValue } from '../lib/masking'\n\nexport class ProjectRepository extends AbstractRepository {\n get(projectKey: string): Project | null {\n const data = this._storage.getProject(projectKey)\n const resource = this._storage.getProject(projectKey)\n const masked = maskSecretValue<Project>(\n resource,\n 'externalOAuth.authorizationHeader'\n )\n return masked\n }\n\n save(projectKey: string, resource: Project) {\n const current = this.get(projectKey)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.saveProject(resource)\n }\n\n actions: Partial<\n Record<\n ProjectUpdateAction['action'],\n (projectKey: string, resource: Writable<Project>, action: any) => void\n >\n > = {\n changeName: (\n projectKey: string,\n resource: Writable<Project>,\n { name }: ProjectChangeNameAction\n ) => {\n resource.name = name\n },\n changeCurrencies: (\n projectKey: string,\n resource: Writable<Project>,\n { currencies }: ProjectChangeCurrenciesAction\n ) => {\n resource.currencies = currencies\n },\n changeCountries: (\n projectKey: string,\n resource: Writable<Project>,\n { countries }: ProjectChangeCountriesAction\n ) => {\n resource.countries = countries\n },\n changeLanguages: (\n projectKey: string,\n resource: Writable<Project>,\n { languages }: ProjectChangeLanguagesAction\n ) => {\n resource.languages = languages\n },\n changeMessagesEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n { messagesEnabled }: ProjectChangeMessagesEnabledAction\n ) => {\n resource.messages.enabled = messagesEnabled\n },\n changeProductSearchIndexingEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n { enabled }: ProjectChangeProductSearchIndexingEnabledAction\n ) => {\n if (!resource.searchIndexing?.products) {\n throw new Error('Invalid project state')\n }\n resource.searchIndexing.products.status = enabled\n ? 'Activated'\n : 'Deactivated'\n resource.searchIndexing.products.lastModifiedAt = new Date().toISOString()\n },\n changeOrderSearchStatus: (\n projectKey: string,\n resource: Writable<Project>,\n { status }: ProjectChangeOrderSearchStatusAction\n ) => {\n if (!resource.searchIndexing?.orders) {\n throw new Error('Invalid project state')\n }\n resource.searchIndexing.orders.status = status\n resource.searchIndexing.orders.lastModifiedAt = new Date().toISOString()\n },\n setShippingRateInputType: (\n projectKey: string,\n resource: Writable<Project>,\n { shippingRateInputType }: ProjectSetShippingRateInputTypeAction\n ) => {\n resource.shippingRateInputType = shippingRateInputType\n },\n setExternalOAuth: (\n projectKey: string,\n resource: Writable<Project>,\n { externalOAuth }: ProjectSetExternalOAuthAction\n ) => {\n resource.externalOAuth = externalOAuth\n },\n changeCountryTaxRateFallbackEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n {\n countryTaxRateFallbackEnabled,\n }: ProjectChangeCountryTaxRateFallbackEnabledAction\n ) => {\n resource.carts.countryTaxRateFallbackEnabled = countryTaxRateFallbackEnabled\n },\n changeCartsConfiguration: (\n projectKey: string,\n resource: Writable<Project>,\n { cartsConfiguration }: ProjectChangeCartsConfigurationAction\n ) => {\n resource.carts = cartsConfiguration || {\n countryTaxRateFallbackEnabled: false,\n deleteDaysAfterLastModification: 90,\n }\n },\n }\n}\n","import { Router } from 'express'\nimport { Request, Response } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProjectRepository } from '../repositories/project'\nimport { Update } from '@commercetools/platform-sdk'\n\nexport class ProjectService {\n public repository: ProjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n this.repository = new ProjectRepository(storage)\n this.registerRoutes(parent)\n }\n\n registerRoutes(parent: Router) {\n parent.get('', this.get.bind(this))\n parent.post('', this.post.bind(this))\n }\n\n get(request: Request, response: Response) {\n const projectKey = request.params.projectKey\n const project = this.repository.get(projectKey)\n return response.status(200).send(project)\n }\n\n post(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const project = this.repository.get(request.params.projectKey)\n\n if (!project) {\n return response.status(404).send({})\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n project,\n updateRequest.actions\n )\n\n return response.status(200).send({})\n }\n}\n","import {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport {\n ReferenceTypeId,\n ShippingMethod,\n ShippingMethodAddShippingRateAction,\n ShippingMethodAddZoneAction,\n ShippingMethodChangeIsDefaultAction,\n ShippingMethodChangeNameAction,\n ShippingMethodDraft,\n ShippingMethodRemoveZoneAction,\n ShippingMethodSetDescriptionAction,\n ShippingMethodSetKeyAction,\n ShippingMethodSetLocalizedDescriptionAction,\n ShippingMethodSetPredicateAction,\n ShippingMethodUpdateAction,\n ShippingRate,\n ShippingRateDraft,\n ZoneRate,\n ZoneRateDraft,\n ZoneReference,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\nimport { _ } from 'ajv'\nimport deepEqual from 'deep-equal'\n\nexport class ShippingMethodRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'shipping-method'\n }\n\n create(projectKey: string, draft: ShippingMethodDraft): ShippingMethod {\n const resource: ShippingMethod = {\n ...getBaseResourceProperties(),\n ...draft,\n taxCategory: getReferenceFromResourceIdentifier(\n draft.taxCategory,\n projectKey,\n this._storage\n ),\n zoneRates: draft.zoneRates?.map(z =>\n this._transformZoneRateDraft(projectKey, z)\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private _transformZoneRateDraft = (\n projectKey: string,\n draft: ZoneRateDraft\n ): ZoneRate => ({\n ...draft,\n zone: getReferenceFromResourceIdentifier<ZoneReference>(\n draft.zone,\n projectKey,\n this._storage\n ),\n shippingRates: draft.shippingRates?.map(this._transformShippingRate),\n })\n\n private _transformShippingRate = (rate: ShippingRateDraft): ShippingRate => {\n return {\n price: createTypedMoney(rate.price),\n freeAbove: rate.freeAbove && createTypedMoney(rate.freeAbove),\n tiers: rate.tiers || [],\n }\n }\n\n actions: Partial<\n Record<\n ShippingMethodUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n action: any\n ) => void\n >\n > = {\n addShippingRate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { shippingRate, zone }: ShippingMethodAddShippingRateAction\n ) => {\n const rate = this._transformShippingRate(shippingRate)\n\n resource.zoneRates.forEach(zoneRate => {\n if (zoneRate.zone.id == zone.id) {\n zoneRate.shippingRates.push(rate)\n return\n }\n })\n resource.zoneRates.push({\n zone: {\n typeId: 'zone',\n id: zone.id!,\n },\n shippingRates: [rate],\n })\n },\n removeShippingRate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { shippingRate, zone }: ShippingMethodAddShippingRateAction\n ) => {\n const rate = this._transformShippingRate(shippingRate)\n\n resource.zoneRates.forEach(zoneRate => {\n if (zoneRate.zone.id == zone.id) {\n zoneRate.shippingRates = zoneRate.shippingRates.filter(otherRate => {\n return !deepEqual(rate, otherRate)\n })\n }\n })\n },\n addZone: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { zone }: ShippingMethodAddZoneAction\n ) => {\n const zoneReference = getReferenceFromResourceIdentifier<ZoneReference>(\n zone,\n projectKey,\n this._storage\n )\n\n if (resource.zoneRates === undefined) {\n resource.zoneRates = []\n }\n\n resource.zoneRates.push({\n zone: zoneReference,\n shippingRates: [],\n })\n },\n removeZone: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { zone }: ShippingMethodRemoveZoneAction\n ) => {\n resource.zoneRates = resource.zoneRates.filter(zoneRate => {\n return zoneRate.zone.id !== zone.id\n })\n },\n setKey: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { key }: ShippingMethodSetKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { description }: ShippingMethodSetDescriptionAction\n ) => {\n resource.description = description\n },\n setLocalizedDescription: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { localizedDescription }: ShippingMethodSetLocalizedDescriptionAction\n ) => {\n resource.localizedDescription = localizedDescription\n },\n setPredicate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { predicate }: ShippingMethodSetPredicateAction\n ) => {\n resource.predicate = predicate\n },\n changeIsDefault: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { isDefault }: ShippingMethodChangeIsDefaultAction\n ) => {\n resource.isDefault = isDefault\n },\n changeName: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { name }: ShippingMethodChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import { ShippingMethodRepository } from '../repositories/shipping-method'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class ShippingMethodService extends AbstractService {\n public repository: ShippingMethodRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShippingMethodRepository(storage)\n this.registerRoutes(parent)\n }\n\n getBasePath() {\n return 'shipping-methods'\n }\n\n extraRoutes(parent: Router) {\n parent.get('/matching-cart', this.get.bind(this))\n }\n}\n","import {\n CustomerReference,\n ReferenceTypeId,\n ShoppingList,\n ShoppingListDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport {\n createCustomFields,\n getReferenceFromResourceIdentifier,\n} from './helpers'\n\nexport class ShoppingListRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'shopping-list'\n }\n create(projectKey: string, draft: ShoppingListDraft): ShoppingList {\n // const product =\n\n const resource: ShoppingList = {\n ...getBaseResourceProperties(),\n ...draft,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n textLineItems: [],\n lineItems: draft.lineItems?.map(e => ({\n ...getBaseResourceProperties(),\n ...e,\n addedAt: e.addedAt ?? '',\n productId: e.productId ?? '',\n name: {},\n quantity: e.quantity ?? 1,\n productType: { typeId: 'product-type', id: '' },\n custom: createCustomFields(e.custom, projectKey, this._storage),\n })),\n customer: draft.customer\n ? getReferenceFromResourceIdentifier<CustomerReference>(\n draft.customer,\n projectKey,\n this._storage\n )\n : undefined,\n store: draft.store?.key\n ? { typeId: 'store', key: draft.store.key! }\n : undefined,\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import { ShoppingListRepository } from './../repositories/shopping-list'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ShoppingListService extends AbstractService {\n public repository: ShoppingListRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShoppingListRepository(storage)\n }\n\n getBasePath() {\n return 'shopping-lists'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport { getReferenceFromResourceIdentifier } from './helpers'\nimport {\n ReferenceTypeId,\n State,\n StateChangeKeyAction,\n StateDraft,\n StateSetDescriptionAction,\n StateSetNameAction,\n StateSetRolesAction,\n StateUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\n\nexport class StateRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'state'\n }\n\n create(projectKey: string, draft: StateDraft): State {\n const resource: State = {\n ...getBaseResourceProperties(),\n ...draft,\n builtIn: false,\n initial: draft.initial || false,\n transitions: (draft.transitions || []).map(t =>\n getReferenceFromResourceIdentifier(t, projectKey, this._storage)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n StateUpdateAction['action'],\n (projectKey: string, resource: Writable<State>, action: any) => void\n >\n > = {\n changeKey: (\n projectKey: string,\n resource: Writable<State>,\n { key }: StateChangeKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<State>,\n { description }: StateSetDescriptionAction\n ) => {\n resource.description = description\n },\n setName: (\n projectKey: string,\n resource: Writable<State>,\n { name }: StateSetNameAction\n ) => {\n resource.name = name\n },\n setRoles: (\n projectKey: string,\n resource: Writable<State>,\n { roles }: StateSetRolesAction\n ) => {\n resource.roles = roles\n },\n }\n}\n","import { StateRepository } from '../repositories/state'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class StateService extends AbstractService {\n public repository: StateRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StateRepository(storage)\n }\n\n getBasePath() {\n return 'states'\n }\n}\n","import {\n Store,\n StoreDraft,\n ReferenceTypeId,\n StoreUpdateAction,\n StoreSetNameAction,\n ChannelReference,\n StoreSetDistributionChannelsAction,\n ChannelResourceIdentifier,\n StoreSetLanguagesAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { getReferenceFromResourceIdentifier } from './helpers'\n\nexport class StoreRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'store'\n }\n\n create(projectKey: string, draft: StoreDraft): Store {\n const resource: Store = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n languages: draft.languages,\n distributionChannels: this.transformChannels(\n projectKey,\n draft.distributionChannels\n ),\n supplyChannels: this.transformChannels(projectKey, draft.supplyChannels),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private transformChannels(\n projectKey: string,\n channels?: ChannelResourceIdentifier[]\n ) {\n if (!channels) return []\n\n return channels.map(ref =>\n getReferenceFromResourceIdentifier<ChannelReference>(\n ref,\n projectKey,\n this._storage\n )\n )\n }\n\n actions: Partial<\n Record<\n StoreUpdateAction['action'],\n (projectKey: string, resource: Writable<Store>, action: any) => void\n >\n > = {\n setName: (\n projectKey: string,\n resource: Writable<Store>,\n { name }: StoreSetNameAction\n ) => {\n resource.name = name\n },\n setDistributionChannels: (\n projectKey: string,\n resource: Writable<Store>,\n { distributionChannels }: StoreSetDistributionChannelsAction\n ) => {\n resource.distributionChannels = this.transformChannels(\n projectKey,\n distributionChannels\n )\n },\n setLanguages: (\n projectKey: string,\n resource: Writable<Store>,\n { languages }: StoreSetLanguagesAction\n ) => {\n resource.languages = languages\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { StoreRepository } from '../repositories/store'\nimport { AbstractStorage } from '../storage'\n\nexport class StoreService extends AbstractService {\n public repository: StoreRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StoreRepository(storage)\n }\n\n getBasePath() {\n return 'stores'\n }\n}\n","import {\n InvalidInputError,\n ReferenceTypeId,\n Subscription,\n SubscriptionDraft,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class SubscriptionRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'subscription'\n }\n create(projectKey: string, draft: SubscriptionDraft): Subscription {\n // TODO: We could actually test this here by using the aws sdk. For now\n // hardcode a failed check when account id is 0000000000\n if (draft.destination.type == 'SQS') {\n const queueURL = new URL(draft.destination.queueUrl)\n const accountId = queueURL.pathname.split('/')[1]\n if (accountId == '0000000000') {\n const dest = draft.destination\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message:\n 'A test message could not be delivered to this destination: ' +\n `SQS ${dest.queueUrl} in ${dest.region} for ${dest.accessKey}. ` +\n 'Please make sure your destination is correctly configured.',\n },\n 400\n )\n }\n }\n\n const resource: Subscription = {\n ...getBaseResourceProperties(),\n changes: draft.changes || [],\n destination: draft.destination,\n format: draft.format || {\n type: 'Platform',\n },\n key: draft.key,\n messages: draft.messages || [],\n status: 'Healthy',\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { SubscriptionRepository } from '../repositories/subscription'\n\nexport class SubscriptionService extends AbstractService {\n public repository: SubscriptionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new SubscriptionRepository(storage)\n }\n\n getBasePath() {\n return 'subscriptions'\n }\n}\n","import {\n ReferenceTypeId,\n TaxCategory,\n TaxCategoryAddTaxRateAction,\n TaxCategoryChangeNameAction,\n TaxCategoryDraft,\n TaxCategoryRemoveTaxRateAction,\n TaxCategoryReplaceTaxRateAction,\n TaxCategorySetDescriptionAction,\n TaxCategorySetKeyAction,\n TaxCategoryUpdateAction,\n TaxRate,\n TaxRateDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from 'types'\n\nexport class TaxCategoryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'tax-category'\n }\n\n create(projectKey: string, draft: TaxCategoryDraft): TaxCategory {\n const resource: TaxCategory = {\n ...getBaseResourceProperties(),\n ...draft,\n rates: draft.rates?.map(this.taxRateFromTaxRateDraft) || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private taxRateFromTaxRateDraft = (draft: TaxRateDraft): TaxRate => ({\n ...draft,\n id: uuidv4(),\n amount: draft.amount || 0,\n })\n\n getWithKey(projectKey: string, key: string): TaxCategory | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as TaxCategory\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate tax category key')\n }\n\n return\n }\n\n actions: Partial<\n Record<\n TaxCategoryUpdateAction['action'],\n (projectKey: string, resource: Writable<TaxCategory>, action: any) => void\n >\n > = {\n addTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRate }: TaxCategoryAddTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n resource.rates.push(this.taxRateFromTaxRateDraft(taxRate))\n },\n removeTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRateId }: TaxCategoryRemoveTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n resource.rates = resource.rates.filter(taxRate => {\n return taxRate.id !== taxRateId\n })\n },\n replaceTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRateId, taxRate }: TaxCategoryReplaceTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n\n const taxRateObj = this.taxRateFromTaxRateDraft(taxRate)\n for (let i = 0; i < resource.rates.length; i++) {\n const rate = resource.rates[i]\n if (rate.id == taxRateId) {\n resource.rates[i] = taxRateObj\n }\n }\n },\n setDescription: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { description }: TaxCategorySetDescriptionAction\n ) => {\n resource.description = description\n },\n setKey: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { key }: TaxCategorySetKeyAction\n ) => {\n resource.key = key\n },\n changeName: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { name }: TaxCategoryChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import { TaxCategoryRepository } from '../repositories/tax-category'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class TaxCategoryService extends AbstractService {\n public repository: TaxCategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TaxCategoryRepository(storage)\n }\n\n getBasePath() {\n return 'tax-categories'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import {\n Type,\n TypeDraft,\n ReferenceTypeId,\n TypeUpdateAction,\n FieldDefinition,\n TypeSetDescriptionAction,\n TypeChangeNameAction,\n TypeAddFieldDefinitionAction,\n TypeChangeEnumValueLabelAction,\n TypeAddEnumValueAction,\n TypeChangeFieldDefinitionOrderAction,\n TypeRemoveFieldDefinitionAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class TypeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'type'\n }\n\n create(projectKey: string, draft: TypeDraft): Type {\n const resource: Type = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n resourceTypeIds: draft.resourceTypeIds,\n fieldDefinitions: draft.fieldDefinitions || [],\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n actions: Partial<\n Record<\n TypeUpdateAction['action'],\n (projectKey: string, resource: Writable<Type>, action: any) => void\n >\n > = {\n addFieldDefinition: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldDefinition }: TypeAddFieldDefinitionAction\n ) => {\n resource.fieldDefinitions.push(fieldDefinition)\n },\n removeFieldDefinition: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName }: TypeRemoveFieldDefinitionAction\n ) => {\n resource.fieldDefinitions = resource.fieldDefinitions.filter(f => {\n return f.name !== fieldName\n })\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Type>,\n { description }: TypeSetDescriptionAction\n ) => {\n resource.description = description\n },\n changeName: (\n projectKey: string,\n resource: Writable<Type>,\n { name }: TypeChangeNameAction\n ) => {\n resource.name = name\n },\n changeFieldDefinitionOrder: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldNames }: TypeChangeFieldDefinitionOrderAction\n ) => {\n const fields = new Map(\n resource.fieldDefinitions.map(item => [item.name, item])\n )\n const result: FieldDefinition[] = []\n let current = resource.fieldDefinitions\n\n fieldNames.forEach(fieldName => {\n const field = fields.get(fieldName)\n if (field === undefined) {\n throw new Error('New field')\n }\n result.push(field)\n\n // Remove from current items\n current = current.filter(f => {\n return f.name !== fieldName\n })\n })\n\n resource.fieldDefinitions = result\n // Add fields which were not specified in the order as last items. Not\n // sure if this follows commercetools\n resource.fieldDefinitions.push(...current)\n },\n addEnumValue: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName, value }: TypeAddEnumValueAction\n ) => {\n resource.fieldDefinitions.forEach(field => {\n if (field.name == fieldName) {\n // TODO, should be done better i suppose\n if (field.type.name == 'Enum') {\n field.type.values.push(value)\n } else if (\n field.type.name == 'Set' &&\n field.type.elementType.name == 'Enum'\n ) {\n field.type.elementType.values.push(value)\n } else {\n throw new Error('Type is not a Enum (or Set of Enum)')\n }\n }\n })\n },\n changeEnumValueLabel: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName, value }: TypeChangeEnumValueLabelAction\n ) => {\n resource.fieldDefinitions.forEach(field => {\n if (field.name == fieldName) {\n // TODO, should be done better i suppose\n if (field.type.name == 'Enum') {\n field.type.values.forEach(v => {\n if (v.key == value.key) {\n v.label = value.label\n }\n })\n } else if (\n field.type.name == 'Set' &&\n field.type.elementType.name == 'Enum'\n ) {\n field.type.elementType.values.forEach(v => {\n if (v.key == value.key) {\n v.label = value.label\n }\n })\n } else {\n throw new Error('Type is not a Enum (or Set of Enum)')\n }\n }\n })\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { TypeRepository } from '../repositories/type'\nimport { AbstractStorage } from '../storage'\n\nexport class TypeService extends AbstractService {\n public repository: TypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TypeRepository(storage)\n }\n\n getBasePath() {\n return 'types'\n }\n}\n","import {\n ReferenceTypeId,\n Zone,\n ZoneAddLocationAction,\n ZoneChangeNameAction,\n ZoneDraft,\n ZoneRemoveLocationAction,\n ZoneSetDescriptionAction,\n ZoneSetKeyAction,\n ZoneUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ZoneRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'zone'\n }\n\n create(projectKey: string, draft: ZoneDraft): Zone {\n const resource: Zone = {\n ...getBaseResourceProperties(),\n key: draft.key,\n locations: draft.locations || [],\n name: draft.name,\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n ZoneUpdateAction['action'],\n (projectKey: string, resource: Writable<Zone>, action: any) => void\n >\n > = {\n addLocation: (\n projectKey: string,\n resource: Writable<Zone>,\n { location }: ZoneAddLocationAction\n ) => {\n resource.locations.push(location)\n },\n removeLocation: (\n projectKey: string,\n resource: Writable<Zone>,\n { location }: ZoneRemoveLocationAction\n ) => {\n resource.locations = resource.locations.filter(loc => {\n return !(loc.country == location.country && loc.state == location.state)\n })\n },\n changeName: (\n projectKey: string,\n resource: Writable<Zone>,\n { name }: ZoneChangeNameAction\n ) => {\n resource.name = name\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Zone>,\n { description }: ZoneSetDescriptionAction\n ) => {\n resource.description = description\n },\n setKey: (\n projectKey: string,\n resource: Writable<Zone>,\n { key }: ZoneSetKeyAction\n ) => {\n resource.key = key\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { ZoneRepository } from '../repositories/zone'\n\nexport class ZoneService extends AbstractService {\n public repository: ZoneRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ZoneRepository(storage)\n }\n\n getBasePath() {\n return 'zones'\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CustomerRepository } from '../repositories/customer'\n\nexport class MyCustomerService extends AbstractService {\n public repository: CustomerRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerRepository(storage)\n }\n\n getBasePath() {\n return 'me'\n }\n\n registerRoutes(parent: Router) {\n // Overwrite this function to be able to handle /me path.\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n this.extraRoutes(router)\n\n router.get('', this.getMe.bind(this))\n\n router.post('/signup', this.signUp.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n getMe(request: Request, response: Response) {\n const resource = this.repository.getMe(request.params.projectKey)\n if (!resource) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(resource)\n }\n\n signUp(request: Request, response: Response) {\n const draft = request.body\n const resource = this.repository.create(request.params.projectKey, draft)\n const result = this._expandWithId(request, resource.id)\n return response.status(this.createStatusCode).send({ customer: result })\n }\n}\n","import nock from 'nock'\nimport express, { NextFunction, Request, Response } from 'express'\nimport supertest from 'supertest'\nimport morgan from 'morgan'\nimport { AbstractStorage, InMemoryStorage } from './storage'\nimport { Services } from './types'\nimport { CommercetoolsError } from './exceptions'\nimport { OAuth2Server } from './oauth/server'\nimport { ProjectAPI } from './projectAPI'\nimport { copyHeaders } from './lib/proxy'\nimport { DEFAULT_API_HOSTNAME, DEFAULT_AUTH_HOSTNAME } from './constants'\n\n// Services\nimport { CartDiscountService } from './services/cart-discount'\nimport { CartService } from './services/cart'\nimport { CategoryServices } from './services/category'\nimport { ChannelService } from './services/channel'\nimport { CustomerGroupService } from './services/customer-group'\nimport { CustomerService } from './services/customer'\nimport { CustomObjectService } from './services/custom-object'\nimport { DiscountCodeService } from './services/discount-code'\nimport { ExtensionServices } from './services/extension'\nimport { InventoryEntryService } from './services/inventory-entry'\nimport { MyCartService } from './services/my-cart'\nimport { MyPaymentService } from './services/my-payment'\nimport { OrderService } from './services/order'\nimport { PaymentService } from './services/payment'\nimport { ProductProjectionService } from './services/product-projection'\nimport { ProductService } from './services/product'\nimport { ProductTypeService } from './services/product-type'\nimport { ProjectService } from './services/project'\nimport { ShippingMethodService } from './services/shipping-method'\nimport { ShoppingListService } from './services/shopping-list'\nimport { StateService } from './services/state'\nimport { StoreService } from './services/store'\nimport { SubscriptionService } from './services/subscription'\nimport { TaxCategoryService } from './services/tax-category'\nimport { TypeService } from './services/type'\nimport { ZoneService } from './services/zone'\nimport { MyCustomerService } from './services/my-customer'\n\nexport type CommercetoolsMockOptions = {\n validateCredentials: boolean\n enableAuthentication: boolean\n defaultProjectKey: string | undefined\n apiHost: RegExp | string\n authHost: RegExp | string\n silent: boolean\n}\n\ntype AppOptions = { silent?: boolean }\n\nconst DEFAULT_OPTIONS: CommercetoolsMockOptions = {\n enableAuthentication: false,\n validateCredentials: false,\n defaultProjectKey: undefined,\n apiHost: DEFAULT_API_HOSTNAME,\n authHost: DEFAULT_AUTH_HOSTNAME,\n silent: false,\n}\n\nexport class CommercetoolsMock {\n public app: express.Express\n public options: CommercetoolsMockOptions\n\n private _storage: AbstractStorage\n private _oauth2: OAuth2Server\n private _nockScopes: {\n auth: nock.Scope | undefined\n api: nock.Scope | undefined\n } = { auth: undefined, api: undefined }\n private _services: Services\n private _projectService?: ProjectService\n\n constructor(options: Partial<CommercetoolsMockOptions> = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options }\n this._services = {}\n this._projectService = undefined\n\n this._storage = new InMemoryStorage()\n this._oauth2 = new OAuth2Server({\n enabled: this.options.enableAuthentication,\n validate: this.options.validateCredentials,\n })\n\n this.app = this.createApp({ silent: this.options.silent })\n }\n\n start() {\n // Order is important here when the hostnames match\n this.mockAuthHost()\n this.mockApiHost()\n }\n\n stop() {\n this._nockScopes.auth?.persist(false)\n this._nockScopes.auth = undefined\n\n this._nockScopes.api?.persist(false)\n this._nockScopes.api = undefined\n }\n\n clear() {\n this._storage.clear()\n }\n\n project(projectKey?: string) {\n if (!projectKey && !this.options.defaultProjectKey) {\n throw new Error('No projectKey passed and no default set')\n }\n\n return new ProjectAPI(\n projectKey || this.options.defaultProjectKey!,\n this._services,\n this._storage\n )\n }\n\n runServer(port: number = 3000, options?: AppOptions) {\n const app = this.createApp(options)\n const server = app.listen(port, () => {\n console.log(`Mock server listening at http://localhost:${port}`)\n })\n server.keepAliveTimeout = 60 * 1000\n }\n\n private createApp(options?: AppOptions): express.Express {\n const app = express()\n\n const projectRouter = express.Router({ mergeParams: true })\n projectRouter.use(express.json())\n\n if (!options?.silent) {\n app.use(morgan('tiny'))\n }\n app.use('/oauth', this._oauth2.createRouter())\n\n // Only enable auth middleware if we have enabled this\n if (this.options.enableAuthentication) {\n app.use('/:projectKey', this._oauth2.createMiddleware(), projectRouter)\n } else {\n app.use('/:projectKey', projectRouter)\n }\n\n this._projectService = new ProjectService(projectRouter, this._storage)\n\n this._services = {\n category: new CategoryServices(projectRouter, this._storage),\n cart: new CartService(projectRouter, this._storage),\n 'cart-discount': new CartDiscountService(projectRouter, this._storage),\n customer: new CustomerService(projectRouter, this._storage),\n channel: new ChannelService(projectRouter, this._storage),\n 'customer-group': new CustomerGroupService(projectRouter, this._storage),\n 'discount-code': new DiscountCodeService(projectRouter, this._storage),\n extension: new ExtensionServices(projectRouter, this._storage),\n 'inventory-entry': new InventoryEntryService(\n projectRouter,\n this._storage\n ),\n 'key-value-document': new CustomObjectService(\n projectRouter,\n this._storage\n ),\n order: new OrderService(projectRouter, this._storage),\n payment: new PaymentService(projectRouter, this._storage),\n 'my-cart': new MyCartService(projectRouter, this._storage),\n 'my-customer': new MyCustomerService(projectRouter, this._storage),\n 'my-payment': new MyPaymentService(projectRouter, this._storage),\n 'shipping-method': new ShippingMethodService(\n projectRouter,\n this._storage\n ),\n 'product-type': new ProductTypeService(projectRouter, this._storage),\n product: new ProductService(projectRouter, this._storage),\n 'product-projection': new ProductProjectionService(\n projectRouter,\n this._storage\n ),\n 'shopping-list': new ShoppingListService(projectRouter, this._storage),\n state: new StateService(projectRouter, this._storage),\n store: new StoreService(projectRouter, this._storage),\n subscription: new SubscriptionService(projectRouter, this._storage),\n 'tax-category': new TaxCategoryService(projectRouter, this._storage),\n type: new TypeService(projectRouter, this._storage),\n zone: new ZoneService(projectRouter, this._storage),\n }\n\n app.use((err: Error, req: Request, resp: Response, next: NextFunction) => {\n if (err instanceof CommercetoolsError) {\n return resp.status(err.statusCode).send({\n statusCode: err.statusCode,\n message: err.message,\n errors: [err.info],\n })\n } else {\n console.error(err)\n return resp.status(500).send({\n error: err.message,\n })\n }\n })\n\n return app\n }\n\n private mockApiHost() {\n const app = this.app\n\n this._nockScopes.api = nock(this.options.apiHost)\n .persist()\n .get(/.*/)\n .reply(async function(uri) {\n const response = await supertest(app)\n .get(uri)\n .set(copyHeaders(this.req.headers))\n return [response.status, response.body]\n })\n .post(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n .delete(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .delete(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n }\n\n private mockAuthHost() {\n const app = this.app\n\n this._nockScopes.auth = nock(this.options.authHost)\n .persist()\n .post(/^\\/oauth\\/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri + '?' + body)\n .set(copyHeaders(this.req.headers))\n .send()\n return [response.status, response.body]\n })\n }\n}\n"],"names":["parseExpandClause","clause","result","element","index","undefined","rest","pos","indexOf","substring","match","parseInt","haversineDistance","src","dst","RADIUS_OF_EARTH_IN_KM","toRadian","deg","Math","PI","dLat","latitude","dLon","longitude","a","sin","cos","c","atan2","sqrt","PredicateError","constructor","message","parseQueryExpression","predicate","Array","isArray","callbacks","map","item","generateMatchFunc","target","variables","every","callback","validateSymbol","val","type","char","value","charAt","line","start","column","resolveSymbol","vars","resolveValue","obj","Object","values","filter","v","getLexer","perplex","token","lexer","parser","Parser","builder","nud","t","strpos","groups","parseFloat","bp","expr","parse","terminals","led","left","expect","resolvedValue","resolvedSymbol","some","elem","invert","next","peek","length","Error","symbols","inValues","includes","other","toLowerCase","maxDistance","distance","keyword","array","build","lines","split","CommercetoolsError","info","statusCode","AbstractStorage","InMemoryStorage","projectKey","projects","key","name","countries","currencies","languages","createdAt","trialUntil","carts","countryTaxRateFallbackEnabled","deleteDaysAfterLastModification","messages","enabled","deleteDaysAfterCreation","shippingRateInputType","externalOAuth","searchIndexing","products","status","orders","version","project","addProject","newObj","JSON","stringify","forEach","_resolveResource","expand","params","reference","_resolveReference","itemRef","forProjectKey","projectStorage","resources","cart","Map","category","channel","customer","extension","order","payment","product","state","store","subscription","zone","clear","entries","assertStorage","typeId","all","from","add","set","id","resource","get","assert","getByKey","find","e","delete","query","where","filterFunc","err","code","totalResources","offset","limit","slice","count","total","results","getByResourceIdentifier","identifier","console","error","r","OAuth2Store","validate","getClientToken","clientId","clientSecret","scope","access_token","randomBytes","toString","token_type","expires_in","tokens","push","validateToken","foundToken","getBearerToken","request","authHeader","header","OAuth2Server","options","createRouter","router","express","Router","use","bodyParser","urlencoded","extended","post","tokenHandler","bind","createMiddleware","response","credentials","auth","grantType","grant_type","body","pass","send","getBaseResourceProperties","uuidv4","Date","toISOString","lastModifiedAt","ProjectAPI","services","storage","_storage","_services","parsedTypeId","service","getRepository","repository","copyHeaders","headers","validHeaders","DEFAULT_API_HOSTNAME","DEFAULT_AUTH_HOSTNAME","AbstractService","parent","registerRoutes","extraRoutes","basePath","getBasePath","mergeParams","getWithKey","getWithId","deletewithKey","deletewithId","postWithKey","postWithId","_parseParam","Number","_expandWithId","draft","create","createStatusCode","updateRequest","updatedResource","processUpdateActions","actions","resourceId","checkConcurrentModification","expectedVersion","currentVersion","AbstractRepository","modifiedResource","action","updateFunc","deepEqual","save","AbstractResourceRepository","getTypeId","current","createCustomFields","fields","typeResource","createPrice","createTypedMoney","fractionDigits","resolveStoreReference","ref","getReferenceFromResourceIdentifier","resourceIdentifier","CartDiscountRepository","setKey","setDescription","description","setValidFrom","validFrom","setValidUntil","validUntil","setValidFromAndUntil","changeSortOrder","sortOrder","changeIsActive","isActive","cartPredicate","references","requiresDiscountCode","stackingMode","transformValueDraft","money","CartDiscountService","CartRepository","addLineItem","productId","variantId","sku","quantity","variant","items","masterData","masterVariant","variants","x","alreadyAdded","lineItems","totalPrice","centAmount","calculateLineItemTotalPrice","prices","price","productKey","productSlug","slug","productType","discountedPricePerQuantity","lineItemMode","priceMode","calculateCartTotalPrice","removeLineItem","lineItemId","lineItem","shouldDelete","setBillingAddress","address","billingAddress","setCountry","country","setCustomerEmail","email","customerEmail","setCustomField","custom","setCustomType","resolvedType","setLocale","locale","setShippingAddress","shippingAddress","cartState","customLineItems","currencyCode","currency","taxMode","taxRoundingMode","taxCalculationMode","refusedGifts","origin","getActiveCart","reduce","cur","CartService","CategoryRepository","changeAssetName","assetId","assetKey","assets","asset","changeSlug","setAssetDescription","setAssetSources","sources","setMetaDescription","metaDescription","setMetaKeywords","metaKeywords","setMetaTitle","metaTitle","orderHint","externalId","ancestors","d","tags","CategoryServices","ChannelRepository","roles","ChannelService","CustomerGroupRepository","changeName","groupName","CustomerGroupService","CustomerRepository","password","Buffer","isEmailVerified","addresses","getMe","CustomerService","CustomObjectRepository","getWithContainerAndKey","container","baseProperties","CustomObjectService","createWithContainerAndKey","deleteWithContainerAndKey","DiscountCodeRepository","changeCartDiscounts","cartDiscounts","setCartPredicate","setName","setMaxApplications","maxApplications","setMaxApplicationsPerCustomer","maxApplicationsPerCustomer","applicationVersion","DiscountCodeService","ExtensionRepository","setTimeoutInMs","timeoutInMs","changeTriggers","triggers","changeDestination","destination","ExtensionServices","InventoryEntryRepository","changeQuantity","quantityOnStock","availableQuantity","setExpectedDelivery","expectedDelivery","setRestockableInDays","restockableInDays","supplyChannel","InventoryEntryService","MyCartService","activeCart","PaymentRepository","amount","addTransaction","transaction","transactions","transactionFromTransactionDraft","changeTransactionState","_projectKey","transactionId","findIndex","updatedTransaction","transitionState","stateObj","paymentStatus","amountPlanned","paymentMethodInfo","interfaceInteractions","interaction","MyPaymentService","OrderRepository","addPayment","resolvedPayment","paymentInfo","payments","changeOrderState","orderState","changePaymentState","paymentState","setOrderNumber","orderNumber","setStore","storeReference","syncInfo","lastMessageSequenceNumber","import","lineItemFromImportDraft","customLineItemFromImportDraft","taxRate","getWithOrderNumber","OrderService","importDraft","PaymentService","parseFilterExpression","filters","join","parsed","replace","ProductProjectionRepository","categories","variantFromDraft","searchKeywords","search","wherePredicate","attributes","ProductProjectionService","ProductRepository","publish","staged","hasStagedChanges","published","setAttribute","isStaged","productData","getProductData","isMasterVariant","variantIndex","getVariant","existingAttr","attr","foundVariant","ProductService","ProductTypeRepository","attributeConstraint","inputHint","isSearchable","changeLocalizedEnumValueLabel","attributeName","newValue","updateAttributeType","label","elementType","changeLabel","attributeDefinitionFromAttributeDefinitionDraft","ProductTypeService","maskSecretValue","path","parts","clone","pop","i","part","ProjectRepository","changeCurrencies","changeCountries","changeLanguages","changeMessagesEnabled","messagesEnabled","changeProductSearchIndexingEnabled","changeOrderSearchStatus","setShippingRateInputType","setExternalOAuth","changeCountryTaxRateFallbackEnabled","changeCartsConfiguration","cartsConfiguration","data","getProject","masked","saveProject","ProjectService","ShippingMethodRepository","shippingRates","_transformShippingRate","rate","freeAbove","tiers","addShippingRate","shippingRate","zoneRates","zoneRate","removeShippingRate","otherRate","addZone","zoneReference","removeZone","setLocalizedDescription","localizedDescription","setPredicate","changeIsDefault","isDefault","taxCategory","z","_transformZoneRateDraft","ShippingMethodService","ShoppingListRepository","textLineItems","addedAt","ShoppingListService","StateRepository","changeKey","setRoles","builtIn","initial","transitions","StateService","StoreRepository","setDistributionChannels","distributionChannels","transformChannels","setLanguages","supplyChannels","channels","StoreService","SubscriptionRepository","queueURL","URL","queueUrl","accountId","pathname","dest","region","accessKey","changes","format","SubscriptionService","TaxCategoryRepository","addTaxRate","rates","taxRateFromTaxRateDraft","removeTaxRate","taxRateId","replaceTaxRate","taxRateObj","TaxCategoryService","TypeRepository","addFieldDefinition","fieldDefinition","fieldDefinitions","removeFieldDefinition","fieldName","f","changeFieldDefinitionOrder","fieldNames","field","addEnumValue","changeEnumValueLabel","resourceTypeIds","TypeService","ZoneRepository","addLocation","location","locations","removeLocation","loc","ZoneService","MyCustomerService","signUp","DEFAULT_OPTIONS","enableAuthentication","validateCredentials","defaultProjectKey","apiHost","authHost","silent","CommercetoolsMock","api","_projectService","_oauth2","app","createApp","mockAuthHost","mockApiHost","stop","_nockScopes","persist","runServer","port","server","listen","log","keepAliveTimeout","projectRouter","json","morgan","req","resp","errors","nock","reply","uri","supertest"],"mappings":"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"}