forked from Shopify/js-buy-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.unoptimized.umd.js.map
1 lines (1 loc) · 173 KB
/
index.unoptimized.umd.js.map
1
{"version":3,"file":"index.unoptimized.umd.js","sources":["node_modules/graphql-js-client/index.es.js","src/config.js","src/resource.js","src/default-resolver.js","src/fetch-resources-for-products.js","src/paginators.js","src/product-helpers.js","src/product-resource.js","src/collection-resource.js","src/shop-resource.js","src/handle-checkout-mutation.js","src/checkout-resource.js","src/image-helpers.js","src/image-resource.js","src/client.js"],"sourcesContent":["/*\nThe MIT License (MIT)\nCopyright (c) 2016 Shopify Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\nOR OTHER DEALINGS IN THE SOFTWARE.\n\n\n*/\nfunction join() {\n for (var _len = arguments.length, fields = Array(_len), _key = 0; _key < _len; _key++) {\n fields[_key] = arguments[_key];\n }\n\n return fields.join(' ');\n}\n\nfunction isObject(value) {\n return Boolean(value) && Object.prototype.toString.call(value.valueOf()) === '[object Object]';\n}\n\nfunction deepFreezeCopyExcept(predicate, structure) {\n if (predicate(structure)) {\n return structure;\n } else if (isObject(structure)) {\n return Object.freeze(Object.keys(structure).reduce(function (copy, key) {\n copy[key] = deepFreezeCopyExcept(predicate, structure[key]);\n\n return copy;\n }, {}));\n } else if (Array.isArray(structure)) {\n return Object.freeze(structure.map(function (item) {\n return deepFreezeCopyExcept(predicate, item);\n }));\n } else {\n return structure;\n }\n}\n\nfunction schemaForType(typeBundle, typeName) {\n var typeSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n var type = typeBundle.types[typeName];\n\n if (type) {\n return type;\n } else if (typeSchema && typeSchema.kind === 'INTERFACE') {\n return typeSchema;\n }\n\n throw new Error('No type of ' + typeName + ' found in schema');\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n\n\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nvar VariableDefinition = function () {\n\n /**\n * This constructor should not be invoked directly.\n * Use the factory function {@link Client#variable} to create a VariableDefinition.\n *\n * @param {String} name The name of the variable.\n * @param {String} type The GraphQL type of the variable.\n * @param {*} [defaultValue] The default value of the variable.\n */\n function VariableDefinition(name, type, defaultValue) {\n classCallCheck(this, VariableDefinition);\n\n this.name = name;\n this.type = type;\n this.defaultValue = defaultValue;\n Object.freeze(this);\n }\n\n /**\n * Returns the GraphQL query string for the variable as an input value (e.g. `$variableName`).\n *\n * @return {String} The GraphQL query string for the variable as an input value.\n */\n\n\n createClass(VariableDefinition, [{\n key: 'toInputValueString',\n value: function toInputValueString() {\n return '$' + this.name;\n }\n\n /**\n * Returns the GraphQL query string for the variable (e.g. `$variableName:VariableType = defaultValue`).\n *\n * @return {String} The GraphQL query string for the variable.\n */\n\n }, {\n key: 'toString',\n value: function toString() {\n var defaultValueString = this.defaultValue ? ' = ' + formatInputValue(this.defaultValue) : '';\n\n return '$' + this.name + ':' + this.type + defaultValueString;\n }\n }]);\n return VariableDefinition;\n}();\n\nfunction isVariable(value) {\n return VariableDefinition.prototype.isPrototypeOf(value);\n}\n\nfunction variable(name, type, defaultValue) {\n return new VariableDefinition(name, type, defaultValue);\n}\n\nvar Enum = function () {\n\n /**\n * This constructor should not be invoked directly.\n * Use the factory function {@link Client#enum} to create an Enum.\n *\n * @param {String} key The key of the enum.\n */\n function Enum(key) {\n classCallCheck(this, Enum);\n\n this.key = key;\n }\n\n /**\n * Returns the GraphQL query string for the enum (e.g. `enumKey`).\n *\n * @return {String} The GraphQL query string for the enum.\n */\n\n\n createClass(Enum, [{\n key: \"toString\",\n value: function toString() {\n return this.key;\n }\n }, {\n key: \"valueOf\",\n value: function valueOf() {\n return this.key.valueOf();\n }\n }]);\n return Enum;\n}();\n\nvar enumFunction = (function (key) {\n return new Enum(key);\n});\n\nvar Scalar = function () {\n function Scalar(value) {\n classCallCheck(this, Scalar);\n\n this.value = value;\n }\n\n createClass(Scalar, [{\n key: \"toString\",\n value: function toString() {\n return this.value.toString();\n }\n }, {\n key: \"valueOf\",\n value: function valueOf() {\n return this.value.valueOf();\n }\n }, {\n key: \"unwrapped\",\n get: function get$$1() {\n return this.value;\n }\n }]);\n return Scalar;\n}();\n\nfunction formatInputValue(value) {\n if (VariableDefinition.prototype.isPrototypeOf(value)) {\n return value.toInputValueString();\n } else if (Enum.prototype.isPrototypeOf(value)) {\n return String(value);\n } else if (Scalar.prototype.isPrototypeOf(value)) {\n return JSON.stringify(value.valueOf());\n } else if (Array.isArray(value)) {\n return '[' + join.apply(undefined, toConsumableArray(value.map(formatInputValue))) + ']';\n } else if (isObject(value)) {\n return formatObject(value, '{', '}');\n } else {\n return JSON.stringify(value);\n }\n}\n\nfunction formatObject(value) {\n var openChar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var closeChar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n var argPairs = Object.keys(value).map(function (key) {\n return key + ': ' + formatInputValue(value[key]);\n });\n\n return '' + openChar + join.apply(undefined, toConsumableArray(argPairs)) + closeChar;\n}\n\nfunction formatArgs(args) {\n if (!Object.keys(args).length) {\n return '';\n }\n\n return ' (' + formatObject(args) + ')';\n}\n\nfunction formatDirectives(directives) {\n if (!Object.keys(directives).length) {\n return '';\n }\n\n var directiveStrings = Object.keys(directives).map(function (key) {\n var directiveArgs = directives[key];\n var arg = directiveArgs && Object.keys(directiveArgs).length ? '(' + formatObject(directiveArgs) + ')' : '';\n\n return '@' + key + arg;\n });\n\n return ' ' + join.apply(undefined, toConsumableArray(directiveStrings));\n}\n\n// eslint-disable-next-line no-empty-function\nvar noop = (function () {});\n\nvar Profiler = {\n trackTypeDependency: noop,\n trackFieldDependency: noop\n};\n\nvar trackTypeDependency = Profiler.trackTypeDependency;\nvar trackFieldDependency = Profiler.trackFieldDependency;\n\n\nfunction parseFieldCreationArgs(creationArgs) {\n var callback = noop;\n var options = {};\n var selectionSet = null;\n\n if (creationArgs.length === 2) {\n if (typeof creationArgs[1] === 'function') {\n var _creationArgs = slicedToArray(creationArgs, 2);\n\n options = _creationArgs[0];\n callback = _creationArgs[1];\n } else {\n var _creationArgs2 = slicedToArray(creationArgs, 2);\n\n options = _creationArgs2[0];\n selectionSet = _creationArgs2[1];\n }\n } else if (creationArgs.length === 1) {\n // SelectionSet is defined before this function is called since it's\n // called by SelectionSet\n // eslint-disable-next-line no-use-before-define\n if (SelectionSet.prototype.isPrototypeOf(creationArgs[0])) {\n selectionSet = creationArgs[0];\n } else if (typeof creationArgs[0] === 'function') {\n callback = creationArgs[0];\n } else {\n options = creationArgs[0];\n }\n }\n\n return { options: options, selectionSet: selectionSet, callback: callback };\n}\n\nvar emptyArgs = Object.freeze({});\nvar emptyDirectives = Object.freeze({});\n\nvar Field = function () {\n\n /**\n * This constructor should not be invoked directly.\n * Fields are added to a selection by {@link SelectionSetBuilder#add}, {@link SelectionSetBuilder#addConnection}\n * and {@link SelectionSetBuilder#addInlineFragmentOn}.\n *\n * @param {String} name The name of the field.\n * @param {Object} [options] An options object containing:\n * @param {Object} [options.args] Arguments for the field.\n * @param {String} [options.alias] An alias for the field.\n * @param {Object} [options.directives] Directives for the field.\n * @param {SelectionSet} selectionSet The selection set on the field.\n */\n function Field(name, options, selectionSet) {\n classCallCheck(this, Field);\n\n this.name = name;\n this.alias = options.alias || null;\n this.responseKey = this.alias || this.name;\n this.args = options.args ? deepFreezeCopyExcept(isVariable, options.args) : emptyArgs;\n this.directives = options.directives ? deepFreezeCopyExcept(isVariable, options.directives) : emptyDirectives;\n this.selectionSet = selectionSet;\n Object.freeze(this);\n }\n\n /**\n * Returns the GraphQL query string for the Field (e.g. `catAlias: cat(size: 'small') { name }` or `name`).\n *\n * @return {String} The GraphQL query string for the Field.\n */\n\n\n createClass(Field, [{\n key: 'toString',\n value: function toString() {\n var aliasPrefix = this.alias ? this.alias + ': ' : '';\n\n return '' + aliasPrefix + this.name + formatArgs(this.args) + formatDirectives(this.directives) + this.selectionSet;\n }\n }]);\n return Field;\n}();\n\n// This is an interface that defines a usage, and simplifies type checking\nvar Spread = function Spread() {\n classCallCheck(this, Spread);\n};\n\nvar InlineFragment = function (_Spread) {\n inherits(InlineFragment, _Spread);\n\n /**\n * This constructor should not be invoked directly.\n * Use the factory function {@link SelectionSetBuilder#addInlineFragmentOn} to create an InlineFragment.\n *\n * @param {String} typeName The type of the fragment.\n * @param {SelectionSet} selectionSet The selection set on the fragment.\n */\n function InlineFragment(typeName, selectionSet) {\n classCallCheck(this, InlineFragment);\n\n var _this = possibleConstructorReturn(this, (InlineFragment.__proto__ || Object.getPrototypeOf(InlineFragment)).call(this));\n\n _this.typeName = typeName;\n _this.selectionSet = selectionSet;\n Object.freeze(_this);\n return _this;\n }\n\n /**\n * Returns the GraphQL query string for the InlineFragment (e.g. `... on Cat { name }`).\n *\n * @return {String} The GraphQL query string for the InlineFragment.\n */\n\n\n createClass(InlineFragment, [{\n key: 'toString',\n value: function toString() {\n return '... on ' + this.typeName + this.selectionSet;\n }\n }]);\n return InlineFragment;\n}(Spread);\n\nvar FragmentSpread = function (_Spread2) {\n inherits(FragmentSpread, _Spread2);\n\n /**\n * This constructor should not be invoked directly.\n * Use the factory function {@link Document#defineFragment} to create a FragmentSpread.\n *\n * @param {FragmentDefinition} fragmentDefinition The corresponding fragment definition.\n */\n function FragmentSpread(fragmentDefinition) {\n classCallCheck(this, FragmentSpread);\n\n var _this2 = possibleConstructorReturn(this, (FragmentSpread.__proto__ || Object.getPrototypeOf(FragmentSpread)).call(this));\n\n _this2.name = fragmentDefinition.name;\n _this2.selectionSet = fragmentDefinition.selectionSet;\n Object.freeze(_this2);\n return _this2;\n }\n\n /**\n * Returns the GraphQL query string for the FragmentSpread (e.g. `...catName`).\n *\n * @return {String} The GraphQL query string for the FragmentSpread.\n */\n\n\n createClass(FragmentSpread, [{\n key: 'toString',\n value: function toString() {\n return '...' + this.name;\n }\n }, {\n key: 'toDefinition',\n value: function toDefinition() {\n // eslint-disable-next-line no-use-before-define\n return new FragmentDefinition(this.name, this.selectionSet.typeSchema.name, this.selectionSet);\n }\n }]);\n return FragmentSpread;\n}(Spread);\n\nvar FragmentDefinition = function () {\n\n /**\n * This constructor should not be invoked directly.\n * Use the factory function {@link Document#defineFragment} to create a FragmentDefinition on a {@link Document}.\n *\n * @param {String} name The name of the fragment definition.\n * @param {String} typeName The type of the fragment.\n */\n function FragmentDefinition(name, typeName, selectionSet) {\n classCallCheck(this, FragmentDefinition);\n\n this.name = name;\n this.typeName = typeName;\n this.selectionSet = selectionSet;\n this.spread = new FragmentSpread(this);\n Object.freeze(this);\n }\n\n /**\n * Returns the GraphQL query string for the FragmentDefinition (e.g. `fragment catName on Cat { name }`).\n *\n * @return {String} The GraphQL query string for the FragmentDefinition.\n */\n\n\n createClass(FragmentDefinition, [{\n key: 'toString',\n value: function toString() {\n return 'fragment ' + this.name + ' on ' + this.typeName + ' ' + this.selectionSet;\n }\n }]);\n return FragmentDefinition;\n}();\n\nfunction selectionsHaveIdField(selections) {\n return selections.some(function (fieldOrFragment) {\n if (Field.prototype.isPrototypeOf(fieldOrFragment)) {\n return fieldOrFragment.name === 'id';\n } else if (Spread.prototype.isPrototypeOf(fieldOrFragment) && fieldOrFragment.selectionSet.typeSchema.implementsNode) {\n return selectionsHaveIdField(fieldOrFragment.selectionSet.selections);\n }\n\n return false;\n });\n}\n\nfunction selectionsHaveTypenameField(selections) {\n return selections.some(function (fieldOrFragment) {\n if (Field.prototype.isPrototypeOf(fieldOrFragment)) {\n return fieldOrFragment.name === '__typename';\n } else if (Spread.prototype.isPrototypeOf(fieldOrFragment) && fieldOrFragment.selectionSet.typeSchema.implementsNode) {\n return selectionsHaveTypenameField(fieldOrFragment.selectionSet.selections);\n }\n\n return false;\n });\n}\n\nfunction indexSelectionsByResponseKey(selections) {\n function assignOrPush(obj, key, value) {\n if (Array.isArray(obj[key])) {\n obj[key].push(value);\n } else {\n obj[key] = [value];\n }\n }\n var unfrozenObject = selections.reduce(function (acc, selection) {\n if (selection.responseKey) {\n assignOrPush(acc, selection.responseKey, selection);\n } else {\n var responseKeys = Object.keys(selection.selectionSet.selectionsByResponseKey);\n\n responseKeys.forEach(function (responseKey) {\n assignOrPush(acc, responseKey, selection);\n });\n }\n\n return acc;\n }, {});\n\n Object.keys(unfrozenObject).forEach(function (key) {\n Object.freeze(unfrozenObject[key]);\n });\n\n return Object.freeze(unfrozenObject);\n}\n\n/**\n * Class that specifies the full selection of data to query.\n */\n\nvar SelectionSet = function () {\n\n /**\n * This constructor should not be invoked directly. SelectionSets are created when building queries/mutations.\n *\n * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.\n * @param {(Object|String)} type The type of the current selection.\n * @param {Function} builderFunction Callback function used to build the SelectionSet.\n * The callback takes a {@link SelectionSetBuilder} as its argument.\n */\n function SelectionSet(typeBundle, type, builderFunction) {\n classCallCheck(this, SelectionSet);\n\n\n if (typeof type === 'string') {\n this.typeSchema = schemaForType(typeBundle, type);\n } else {\n this.typeSchema = type;\n }\n\n trackTypeDependency(this.typeSchema.name);\n\n this.typeBundle = typeBundle;\n this.selections = [];\n if (builderFunction) {\n // eslint-disable-next-line no-use-before-define\n builderFunction(new SelectionSetBuilder(this.typeBundle, this.typeSchema, this.selections));\n }\n\n if (this.typeSchema.implementsNode || this.typeSchema.name === 'Node') {\n if (!selectionsHaveIdField(this.selections)) {\n this.selections.unshift(new Field('id', {}, new SelectionSet(typeBundle, 'ID')));\n }\n }\n\n if (this.typeSchema.kind === 'INTERFACE') {\n if (!selectionsHaveTypenameField(this.selections)) {\n this.selections.unshift(new Field('__typename', {}, new SelectionSet(typeBundle, 'String')));\n }\n }\n\n this.selectionsByResponseKey = indexSelectionsByResponseKey(this.selections);\n Object.freeze(this.selections);\n Object.freeze(this);\n }\n\n /**\n * Returns the GraphQL query string for the SelectionSet (e.g. `{ cat { name } }`).\n *\n * @return {String} The GraphQL query string for the SelectionSet.\n */\n\n\n createClass(SelectionSet, [{\n key: 'toString',\n value: function toString() {\n if (this.typeSchema.kind === 'SCALAR' || this.typeSchema.kind === 'ENUM') {\n return '';\n } else {\n return ' { ' + join(this.selections) + ' }';\n }\n }\n }]);\n return SelectionSet;\n}();\n\nvar SelectionSetBuilder = function () {\n\n /**\n * This constructor should not be invoked directly. SelectionSetBuilders are created when building queries/mutations.\n *\n * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.\n * @param {Object} typeSchema The schema object for the type of the current selection.\n * @param {Field[]} selections The fields on the current selection.\n */\n function SelectionSetBuilder(typeBundle, typeSchema, selections) {\n classCallCheck(this, SelectionSetBuilder);\n\n this.typeBundle = typeBundle;\n this.typeSchema = typeSchema;\n this.selections = selections;\n }\n\n createClass(SelectionSetBuilder, [{\n key: 'hasSelectionWithResponseKey',\n value: function hasSelectionWithResponseKey(responseKey) {\n return this.selections.some(function (field) {\n return field.responseKey === responseKey;\n });\n }\n\n /**\n * Adds a field to be queried on the current selection.\n *\n * @example\n * client.query((root) => {\n * root.add('cat', {args: {id: '123456'}, alias: 'meow'}, (cat) => {\n * cat.add('name');\n * });\n * });\n *\n * @param {SelectionSet|String} selectionOrFieldName The selection or name of the field to add.\n * @param {Object} [options] Options on the query including:\n * @param {Object} [options.args] Arguments on the query (e.g. `{id: '123456'}`).\n * @param {String} [options.alias] Alias for the field being added.\n * @param {Function|SelectionSet} [callbackOrSelectionSet] Either a callback which will be used to create a new {@link SelectionSet}, or an existing {@link SelectionSet}.\n */\n\n }, {\n key: 'add',\n value: function add(selectionOrFieldName) {\n var selection = void 0;\n\n if (Object.prototype.toString.call(selectionOrFieldName) === '[object String]') {\n trackFieldDependency(this.typeSchema.name, selectionOrFieldName);\n\n for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n\n selection = this.field.apply(this, [selectionOrFieldName].concat(rest));\n } else {\n if (Field.prototype.isPrototypeOf(selectionOrFieldName)) {\n trackFieldDependency(this.typeSchema.name, selectionOrFieldName.name);\n }\n\n selection = selectionOrFieldName;\n }\n\n if (selection.responseKey && this.hasSelectionWithResponseKey(selection.responseKey)) {\n throw new Error('The field name or alias \\'' + selection.responseKey + '\\' has already been added.');\n }\n this.selections.push(selection);\n }\n }, {\n key: 'field',\n value: function field(name) {\n for (var _len2 = arguments.length, creationArgs = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n creationArgs[_key2 - 1] = arguments[_key2];\n }\n\n var parsedArgs = parseFieldCreationArgs(creationArgs);\n var options = parsedArgs.options,\n callback = parsedArgs.callback;\n var selectionSet = parsedArgs.selectionSet;\n\n\n if (!selectionSet) {\n if (!this.typeSchema.fieldBaseTypes[name]) {\n throw new Error('No field of name \"' + name + '\" found on type \"' + this.typeSchema.name + '\" in schema');\n }\n\n var fieldBaseType = schemaForType(this.typeBundle, this.typeSchema.fieldBaseTypes[name]);\n\n selectionSet = new SelectionSet(this.typeBundle, fieldBaseType, callback);\n }\n\n return new Field(name, options, selectionSet);\n }\n\n /**\n * Creates an inline fragment.\n *\n * @access private\n * @param {String} typeName The type the inline fragment.\n * @param {Function|SelectionSet} [callbackOrSelectionSet] Either a callback which will be used to create a new {@link SelectionSet}, or an existing {@link SelectionSet}.\n * @return {InlineFragment} An inline fragment.\n */\n\n }, {\n key: 'inlineFragmentOn',\n value: function inlineFragmentOn(typeName) {\n var builderFunctionOrSelectionSet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n var selectionSet = void 0;\n\n if (SelectionSet.prototype.isPrototypeOf(builderFunctionOrSelectionSet)) {\n selectionSet = builderFunctionOrSelectionSet;\n } else {\n selectionSet = new SelectionSet(this.typeBundle, schemaForType(this.typeBundle, typeName), builderFunctionOrSelectionSet);\n }\n\n return new InlineFragment(typeName, selectionSet);\n }\n\n /**\n * Adds a field to be queried on the current selection.\n *\n * @access private\n * @param {String} name The name of the field to add to the query.\n * @param {Object} [options] Options on the query including:\n * @param {Object} [options.args] Arguments on the query (e.g. `{id: '123456'}`).\n * @param {String} [options.alias] Alias for the field being added.\n * @param {Function} [callback] Callback which will be used to create a new {@link SelectionSet} for the field added.\n */\n\n }, {\n key: 'addField',\n value: function addField(name) {\n for (var _len3 = arguments.length, creationArgs = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n creationArgs[_key3 - 1] = arguments[_key3];\n }\n\n this.add.apply(this, [name].concat(creationArgs));\n }\n\n /**\n * Adds a connection to be queried on the current selection.\n * This adds all the fields necessary for pagination.\n *\n * @example\n * client.query((root) => {\n * root.add('cat', (cat) => {\n * cat.addConnection('friends', {args: {first: 10}, alias: 'coolCats'}, (friends) => {\n * friends.add('name');\n * });\n * });\n * });\n *\n * @param {String} name The name of the connection to add to the query.\n * @param {Object} [options] Options on the query including:\n * @param {Object} [options.args] Arguments on the query (e.g. `{first: 10}`).\n * @param {String} [options.alias] Alias for the field being added.\n * @param {Function|SelectionSet} [callbackOrSelectionSet] Either a callback which will be used to create a new {@link SelectionSet}, or an existing {@link SelectionSet}.\n */\n\n }, {\n key: 'addConnection',\n value: function addConnection(name) {\n for (var _len4 = arguments.length, creationArgs = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n creationArgs[_key4 - 1] = arguments[_key4];\n }\n\n var _parseFieldCreationAr = parseFieldCreationArgs(creationArgs),\n options = _parseFieldCreationAr.options,\n callback = _parseFieldCreationAr.callback,\n selectionSet = _parseFieldCreationAr.selectionSet;\n\n this.add(name, options, function (connection) {\n connection.add('pageInfo', {}, function (pageInfo) {\n pageInfo.add('hasNextPage');\n pageInfo.add('hasPreviousPage');\n });\n connection.add('edges', {}, function (edges) {\n edges.add('cursor');\n edges.addField('node', {}, selectionSet || callback); // This is bad. Don't do this\n });\n });\n }\n\n /**\n * Adds an inline fragment on the current selection.\n *\n * @example\n * client.query((root) => {\n * root.add('animal', (animal) => {\n * animal.addInlineFragmentOn('cat', (cat) => {\n * cat.add('name');\n * });\n * });\n * });\n *\n * @param {String} typeName The name of the type of the inline fragment.\n * @param {Function|SelectionSet} [callbackOrSelectionSet] Either a callback which will be used to create a new {@link SelectionSet}, or an existing {@link SelectionSet}.\n */\n\n }, {\n key: 'addInlineFragmentOn',\n value: function addInlineFragmentOn(typeName) {\n var fieldTypeCb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n this.add(this.inlineFragmentOn(typeName, fieldTypeCb));\n }\n\n /**\n * Adds a fragment spread on the current selection.\n *\n * @example\n * client.query((root) => {\n * root.addFragment(catFragmentSpread);\n * });\n *\n * @param {FragmentSpread} fragmentSpread The fragment spread to add.\n */\n\n }, {\n key: 'addFragment',\n value: function addFragment(fragmentSpread) {\n this.add(fragmentSpread);\n }\n }]);\n return SelectionSetBuilder;\n}();\n\nfunction parseArgs(args) {\n var name = void 0;\n var variables = void 0;\n var selectionSetCallback = void 0;\n\n if (args.length === 3) {\n var _args = slicedToArray(args, 3);\n\n name = _args[0];\n variables = _args[1];\n selectionSetCallback = _args[2];\n } else if (args.length === 2) {\n if (Object.prototype.toString.call(args[0]) === '[object String]') {\n name = args[0];\n variables = null;\n } else if (Array.isArray(args[0])) {\n variables = args[0];\n name = null;\n }\n\n selectionSetCallback = args[1];\n } else {\n selectionSetCallback = args[0];\n name = null;\n }\n\n return { name: name, variables: variables, selectionSetCallback: selectionSetCallback };\n}\n\nvar VariableDefinitions = function () {\n function VariableDefinitions(variableDefinitions) {\n classCallCheck(this, VariableDefinitions);\n\n this.variableDefinitions = variableDefinitions ? [].concat(toConsumableArray(variableDefinitions)) : [];\n Object.freeze(this.variableDefinitions);\n Object.freeze(this);\n }\n\n createClass(VariableDefinitions, [{\n key: 'toString',\n value: function toString() {\n if (this.variableDefinitions.length === 0) {\n return '';\n }\n\n return ' (' + join(this.variableDefinitions) + ') ';\n }\n }]);\n return VariableDefinitions;\n}();\n\n/**\n * Base class for {@link Query} and {@link Mutation}.\n * @abstract\n */\n\n\nvar Operation = function () {\n\n /**\n * This constructor should not be invoked. The subclasses {@link Query} and {@link Mutation} should be used instead.\n */\n function Operation(typeBundle, operationType) {\n classCallCheck(this, Operation);\n\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var _parseArgs = parseArgs(args),\n name = _parseArgs.name,\n variables = _parseArgs.variables,\n selectionSetCallback = _parseArgs.selectionSetCallback;\n\n this.typeBundle = typeBundle;\n this.name = name;\n this.variableDefinitions = new VariableDefinitions(variables);\n this.operationType = operationType;\n if (operationType === 'query') {\n this.selectionSet = new SelectionSet(typeBundle, typeBundle.queryType, selectionSetCallback);\n this.typeSchema = schemaForType(typeBundle, typeBundle.queryType);\n } else {\n this.selectionSet = new SelectionSet(typeBundle, typeBundle.mutationType, selectionSetCallback);\n this.typeSchema = schemaForType(typeBundle, typeBundle.mutationType);\n }\n Object.freeze(this);\n }\n\n /**\n * Whether the operation is anonymous (i.e. has no name).\n */\n\n\n createClass(Operation, [{\n key: 'toString',\n\n\n /**\n * Returns the GraphQL query or mutation string (e.g. `query myQuery { cat { name } }`).\n *\n * @return {String} The GraphQL query or mutation string.\n */\n value: function toString() {\n var nameString = this.name ? ' ' + this.name : '';\n\n return '' + this.operationType + nameString + this.variableDefinitions + this.selectionSet;\n }\n }, {\n key: 'isAnonymous',\n get: function get$$1() {\n return !this.name;\n }\n }]);\n return Operation;\n}();\n\n/**\n * GraphQL Query class.\n * @extends Operation\n */\n\nvar Query = function (_Operation) {\n inherits(Query, _Operation);\n\n /**\n * This constructor should not be invoked directly.\n * Use the factory functions {@link Client#query} or {@link Document#addQuery} to create a Query.\n *\n * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.\n * @param {String} [name] A name for the query.\n * @param {Object[]} [variables] A list of variables in the query. See {@link Client#variable}.\n * @param {Function} selectionSetCallback The query builder callback.\n * A {@link SelectionSet} is created using this callback.\n */\n function Query(typeBundle) {\n var _ref;\n\n classCallCheck(this, Query);\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return possibleConstructorReturn(this, (_ref = Query.__proto__ || Object.getPrototypeOf(Query)).call.apply(_ref, [this, typeBundle, 'query'].concat(args)));\n }\n\n return Query;\n}(Operation);\n\n/**\n * GraphQL Mutation class.\n * @extends Operation\n */\n\nvar Mutation = function (_Operation) {\n inherits(Mutation, _Operation);\n\n /**\n * This constructor should not be invoked directly.\n * Use the factory functions {@link Client#mutation} or {@link Document#addMutation} to create a Mutation.\n *\n * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.\n * @param {String} [name] A name for the mutation.\n * @param {Object[]} [variables] A list of variables in the mutation. See {@link Client#variable}.\n * @param {Function} selectionSetCallback The mutation builder callback.\n * A {@link SelectionSet} is created using this callback.\n */\n function Mutation(typeBundle) {\n var _ref;\n\n classCallCheck(this, Mutation);\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return possibleConstructorReturn(this, (_ref = Mutation.__proto__ || Object.getPrototypeOf(Mutation)).call.apply(_ref, [this, typeBundle, 'mutation'].concat(args)));\n }\n\n return Mutation;\n}(Operation);\n\nfunction isAnonymous(operation) {\n return operation.isAnonymous;\n}\n\nfunction hasAnonymousOperations(operations) {\n return operations.some(isAnonymous);\n}\n\nfunction hasDuplicateOperationNames(operations) {\n var names = operations.map(function (operation) {\n return operation.name;\n });\n\n return names.reduce(function (hasDuplicates, name, index) {\n return hasDuplicates || names.indexOf(name) !== index;\n }, false);\n}\n\nfunction extractOperation(typeBundle, operationType) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (Operation.prototype.isPrototypeOf(args[0])) {\n return args[0];\n }\n\n if (operationType === 'query') {\n return new (Function.prototype.bind.apply(Query, [null].concat([typeBundle], args)))();\n } else {\n return new (Function.prototype.bind.apply(Mutation, [null].concat([typeBundle], args)))();\n }\n}\n\nfunction isInvalidOperationCombination(operations) {\n if (operations.length === 1) {\n return false;\n }\n\n return hasAnonymousOperations(operations) || hasDuplicateOperationNames(operations);\n}\n\nfunction fragmentNameIsNotUnique(existingDefinitions, name) {\n return existingDefinitions.some(function (definition) {\n return definition.name === name;\n });\n}\n\nvar Document = function () {\n\n /**\n * This constructor should not be invoked directly.\n * Use the factory function {@link Client#document} to create a Document.\n * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.\n */\n function Document(typeBundle) {\n classCallCheck(this, Document);\n\n this.typeBundle = typeBundle;\n this.definitions = [];\n }\n\n /**\n * Returns the GraphQL query string for the Document (e.g. `query queryOne { ... } query queryTwo { ... }`).\n *\n * @return {String} The GraphQL query string for the Document.\n */\n\n\n createClass(Document, [{\n key: 'toString',\n value: function toString() {\n return join(this.definitions);\n }\n\n /**\n * Adds an operation to the Document.\n *\n * @private\n * @param {String} operationType The type of the operation. Either 'query' or 'mutation'.\n * @param {(Operation|String)} [query|queryName] Either an instance of an operation\n * object, or the name of an operation. Both are optional.\n * @param {Object[]} [variables] A list of variables in the operation. See {@link Client#variable}.\n * @param {Function} [callback] The query builder callback. If an operation\n * instance is passed, this callback will be ignored.\n * A {@link SelectionSet} is created using this callback.\n */\n\n }, {\n key: 'addOperation',\n value: function addOperation(operationType) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n var operation = extractOperation.apply(undefined, [this.typeBundle, operationType].concat(args));\n\n if (isInvalidOperationCombination(this.operations.concat(operation))) {\n throw new Error('All operations must be uniquely named on a multi-operation document');\n }\n\n this.definitions.push(operation);\n }\n\n /**\n * Adds a query to the Document.\n *\n * @example\n * document.addQuery('myQuery', (root) => {\n * root.add('cat', (cat) => {\n * cat.add('name');\n * });\n * });\n *\n * @param {(Query|String)} [query|queryName] Either an instance of a query\n * object, or the name of a query. Both are optional.\n * @param {Object[]} [variables] A list of variables in the query. See {@link Client#variable}.\n * @param {Function} [callback] The query builder callback. If a query\n * instance is passed, this callback will be ignored.\n * A {@link SelectionSet} is created using this callback.\n */\n\n }, {\n key: 'addQuery',\n value: function addQuery() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.addOperation.apply(this, ['query'].concat(args));\n }\n\n /**\n * Adds a mutation to the Document.\n *\n * @example\n * const input = client.variable('input', 'CatCreateInput!');\n *\n * document.addMutation('myMutation', [input], (root) => {\n * root.add('catCreate', {args: {input}}, (catCreate) => {\n * catCreate.add('cat', (cat) => {\n * cat.add('name');\n * });\n * });\n * });\n *\n * @param {(Mutation|String)} [mutation|mutationName] Either an instance of a mutation\n * object, or the name of a mutation. Both are optional.\n * @param {Object[]} [variables] A list of variables in the mutation. See {@link Client#variable}.\n * @param {Function} [callback] The mutation builder callback. If a mutation\n * instance is passed, this callback will be ignored.\n * A {@link SelectionSet} is created using this callback.\n */\n\n }, {\n key: 'addMutation',\n value: function addMutation() {\n for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this.addOperation.apply(this, ['mutation'].concat(args));\n }\n\n /**\n * Defines a fragment on the Document.\n *\n * @param {String} name The name of the fragment.\n * @param {String} onType The type the fragment is on.\n * @param {Function} [builderFunction] The query builder callback.\n * A {@link SelectionSet} is created using this callback.\n * @return {FragmentSpread} A {@link FragmentSpread} to be used with {@link SelectionSetBuilder#addFragment}.\n */\n\n }, {\n key: 'defineFragment',\n value: function defineFragment(name, onType, builderFunction) {\n if (fragmentNameIsNotUnique(this.fragmentDefinitions, name)) {\n throw new Error('All fragments must be uniquely named on a multi-fragment document');\n }\n\n var selectionSet = new SelectionSet(this.typeBundle, onType, builderFunction);\n var fragment = new FragmentDefinition(name, onType, selectionSet);\n\n this.definitions.push(fragment);\n\n return fragment.spread;\n }\n\n /**\n * All operations ({@link Query} and {@link Mutation}) on the Document.\n */\n\n }, {\n key: 'operations',\n get: function get$$1() {\n return this.definitions.filter(function (definition) {\n return Operation.prototype.isPrototypeOf(definition);\n });\n }\n\n /**\n * All {@link FragmentDefinition}s on the Document.\n */\n\n }, {\n key: 'fragmentDefinitions',\n get: function get$$1() {\n return this.definitions.filter(function (definition) {\n return FragmentDefinition.prototype.isPrototypeOf(definition);\n });\n }\n }]);\n return Document;\n}();\n\n/**\n * The base class used when deserializing response data.\n * Provides rich features, like functions to generate queries to refetch a node or fetch the next page.\n *\n * @class\n */\nvar GraphModel =\n\n/**\n * @param {Object} attrs Attributes on the GraphModel.\n */\nfunction GraphModel(attrs) {\n var _this = this;\n\n classCallCheck(this, GraphModel);\n\n Object.defineProperty(this, 'attrs', { value: attrs, enumerable: false });\n\n Object.keys(this.attrs).filter(function (key) {\n return !(key in _this);\n }).forEach(function (key) {\n var descriptor = void 0;\n\n if (attrs[key] === null) {\n descriptor = {\n enumerable: true,\n get: function get$$1() {\n return null;\n }\n };\n } else {\n descriptor = {\n enumerable: true,\n get: function get$$1() {\n return this.attrs[key].valueOf();\n }\n };\n }\n Object.defineProperty(_this, key, descriptor);\n });\n};\n\n/**\n * A registry of classes used to deserialize the response data. Uses {@link GraphModel} by default.\n */\n\nvar ClassRegistry = function () {\n function ClassRegistry() {\n classCallCheck(this, ClassRegistry);\n\n this.classStore = {};\n }\n\n /**\n * Registers a class for a GraphQL type in the registry.\n *\n * @param {Class} constructor The constructor of the class.\n * @param {String} type The GraphQL type of the object to deserialize into the class.\n */\n\n\n createClass(ClassRegistry, [{\n key: 'registerClassForType',\n value: function registerClassForType(constructor, type) {\n this.classStore[type] = constructor;\n }\n\n /**\n * Unregisters a class for a GraphQL type in the registry.\n *\n * @param {String} type The GraphQL type to unregister.\n */\n\n }, {\n key: 'unregisterClassForType',\n value: function unregisterClassForType(type) {\n delete this.classStore[type];\n }\n\n /**\n * Returns the class for the given GraphQL type.\n *\n * @param {String} type The GraphQL type to look up.\n * @return {Class|GraphModel} The class for the given GraphQL type. Defaults to {@link GraphModel} if no class is registered for the GraphQL type.\n */\n\n }, {\n key: 'classForType',\n value: function classForType(type) {\n return this.classStore[type] || GraphModel;\n }\n }]);\n return ClassRegistry;\n}();\n\nfunction isValue(arg) {\n return Object.prototype.toString.call(arg) !== '[object Null]' && Object.prototype.toString.call(arg) !== '[object Undefined]';\n}\n\nfunction isNodeContext(context) {\n return context.selection.selectionSet.typeSchema.implementsNode;\n}\n\nfunction isConnection(context) {\n return context.selection.selectionSet.typeSchema.name.endsWith('Connection');\n}\n\nfunction nearestNode(context) {\n if (context == null) {\n return null;\n } else if (isNodeContext(context)) {\n return context;\n } else {\n return nearestNode(context.parent);\n }\n}\n\nfunction contextsFromRoot(context) {\n if (context.parent) {\n return contextsFromRoot(context.parent).concat(context);\n } else {\n return [context];\n }\n}\n\nfunction contextsFromNearestNode(context) {\n if (context.selection.selectionSet.typeSchema.implementsNode) {\n return [context];\n } else {\n return contextsFromNearestNode(context.parent).concat(context);\n }\n}\n\nfunction initializeDocumentAndVars(currentContext, contextChain) {\n var lastInChain = contextChain[contextChain.length - 1];\n var first = lastInChain.selection.args.first;\n var variableDefinitions = Object.keys(lastInChain.selection.args).filter(function (key) {\n return isVariable(lastInChain.selection.args[key]);\n }).map(function (key) {\n return lastInChain.selection.args[key];\n });\n\n var firstVar = variableDefinitions.find(function (definition) {\n return definition.name === 'first';\n });\n\n if (!firstVar) {\n if (isVariable(first)) {\n firstVar = first;\n } else {\n firstVar = variable('first', 'Int', first);\n variableDefinitions.push(firstVar);\n }\n }\n\n var document = new Document(currentContext.selection.selectionSet.typeBundle);\n\n return [document, variableDefinitions, firstVar];\n}\n\nfunction addNextFieldTo(currentSelection, contextChain, path, cursor) {\n // There are always at least two. When we start, it's the root context, and the first set\n var nextContext = contextChain.shift();\n\n path.push(nextContext.selection.responseKey);\n\n if (contextChain.length) {\n currentSelection.add(nextContext.selection.name, { alias: nextContext.selection.alias, args: nextContext.selection.args }, function (newSelection) {\n addNextFieldTo(newSelection, contextChain, path, cursor);\n });\n } else {\n var edgesField = nextContext.selection.selectionSet.selections.find(function (field) {\n return field.name === 'edges';\n });\n var nodeField = edgesField.selectionSet.selections.find(function (field) {\n return field.name === 'node';\n });\n var first = void 0;\n\n if (isVariable(nextContext.selection.args.first)) {\n first = nextContext.selection.args.first;\n } else {\n first = variable('first', 'Int', nextContext.selection.args.first);\n }\n\n var options = {\n alias: nextContext.selection.alias,\n args: Object.assign({}, nextContext.selection.args, { after: cursor, first: first })\n };\n\n currentSelection.addConnection(nextContext.selection.name, options, nodeField.selectionSet);\n }\n}\n\nfunction collectFragments(selections) {\n return selections.reduce(function (fragmentDefinitions, field) {\n if (FragmentSpread.prototype.isPrototypeOf(field)) {\n fragmentDefinitions.push(field.toDefinition());\n }\n\n fragmentDefinitions.push.apply(fragmentDefinitions, toConsumableArray(collectFragments(field.selectionSet.selections)));\n\n return fragmentDefinitions;\n }, []);\n}\n\nfunction nextPageQueryAndPath(context, cursor) {\n var nearestNodeContext = nearestNode(context);\n\n if (nearestNodeContext) {\n return function () {\n var _document$definitions;\n\n var path = [];\n var nodeType = nearestNodeContext.selection.selectionSet.typeSchema;\n var nodeId = nearestNodeContext.responseData.id;\n var contextChain = contextsFromNearestNode(context);\n\n var _initializeDocumentAn = initializeDocumentAndVars(context, contextChain),\n _initializeDocumentAn2 = slicedToArray(_initializeDocumentAn, 2),\n document = _initializeDocumentAn2[0],\n variableDefinitions = _initializeDocumentAn2[1];\n\n document.addQuery(variableDefinitions, function (root) {\n path.push('node');\n root.add('node', { args: { id: nodeId } }, function (node) {\n node.addInlineFragmentOn(nodeType.name, function (fragment) {\n addNextFieldTo(fragment, contextChain.slice(1), path, cursor);\n });\n });\n });\n\n var fragments = collectFragments(document.operations[0].selectionSet.selections);\n\n (_document$definitions = document.definitions).unshift.apply(_document$definitions, toConsumableArray(fragments));\n\n return [document, path];\n };\n } else {\n return function () {\n var _document$definitions2;\n\n var path = [];\n var contextChain = contextsFromRoot(context);\n\n var _initializeDocumentAn3 = initializeDocumentAndVars(context, contextChain),\n _initializeDocumentAn4 = slicedToArray(_initializeDocumentAn3, 2),\n document = _initializeDocumentAn4[0],\n variableDefinitions = _initializeDocumentAn4[1];\n\n document.addQuery(variableDefinitions, function (root) {\n addNextFieldTo(root, contextChain.slice(1), path, cursor);\n });\n\n var fragments = collectFragments(document.operations[0].selectionSet.selections);\n\n (_document$definitions2 = document.definitions).unshift.apply(_document$definitions2, toConsumableArray(fragments));\n\n return [document, path];\n };\n }\n}\n\nfunction hasNextPage$1(connection, edge) {\n if (edge !== connection.edges[connection.edges.length - 1]) {\n return new Scalar(true);\n }\n\n return connection.pageInfo.hasNextPage;\n}\n\nfunction hasPreviousPage(connection, edge) {\n if (edge !== connection.edges[0]) {\n return new Scalar(true);\n }\n\n return connection.pageInfo.hasPreviousPage;\n}\n\nfunction transformConnections(variableValues) {\n return function (context, value) {\n if (isConnection(context)) {\n if (!(value.pageInfo && value.pageInfo.hasOwnProperty('hasNextPage') && value.pageInfo.hasOwnProperty('hasPreviousPage'))) {\n throw new Error('Connections must include the selections \"pageInfo { hasNextPage, hasPreviousPage }\".');\n }\n\n return value.edges.map(function (edge) {\n return Object.assign(edge.node, {\n nextPageQueryAndPath: nextPageQueryAndPath(context, edge.cursor),\n hasNextPage: hasNextPage$1(value, edge),\n hasPreviousPage: hasPreviousPage(value, edge),\n variableValues: variableValues\n });\n });\n } else {\n return value;\n }\n };\n}\n\n/* eslint-disable no-warning-comments */\nvar DecodingContext = function () {\n function DecodingContext(selection, responseData) {\n var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n classCallCheck(this, DecodingContext);\n\n this.selection = selection;\n this.responseData = responseData;\n this.parent = parent;\n Object.freeze(this);\n }\n\n createClass(DecodingContext, [{\n key: 'contextForObjectProperty',\n value: function contextForObjectProperty(responseKey) {\n var nestedSelections = this.selection.selectionSet.selectionsByResponseKey[responseKey];\n var nextSelection = nestedSelections && nestedSelections[0];\n var nextContext = void 0;\n\n // fragment spreads operate inside the current context, so we recurse to get the proper\n // selection set, but retain the current response context\n if (Spread.prototype.isPrototypeOf(nextSelection)) {\n nextContext = new DecodingContext(nextSelection, this.responseData, this.parent);\n } else {\n nextContext = new DecodingContext(nextSelection, this.responseData[responseKey], this);\n }\n\n if (!nextSelection) {\n throw new Error('Unexpected response key \"' + responseKey + '\", not found in selection set: ' + this.selection.selectionSet);\n }\n\n if (Field.prototype.isPrototypeOf(nextSelection)) {\n return nextContext;\n } else {\n return nextContext.contextForObjectProperty(responseKey);\n }\n }\n }, {\n key: 'contextForArrayItem',\n value: function contextForArrayItem(item) {\n return new DecodingContext(this.selection, item, this.parent);\n }\n }]);\n return DecodingContext;\n}();\n\nfunction decodeArrayItems(context, transformers) {\n return context.responseData.map(function (item) {\n return decodeContext(context.contextForArrayItem(item), transformers);\n });\n}\n\nfunction decodeObjectValues(context, transformers) {\n return Object.keys(context.responseData).reduce(function (acc, responseKey) {\n acc[responseKey] = decodeContext(context.contextForObjectProperty(responseKey), transformers);\n\n return acc;\n }, {});\n}\n\nfunction runTransformers(transformers, context, value) {\n return transformers.reduce(function (acc, transformer) {\n return transformer(context, acc);\n }, value);\n}\n\nfunction decodeContext(context, transformers) {\n var value = context.responseData;\n\n if (Array.isArray(value)) {\n value = decodeArrayItems(context, transformers);\n } else if (isObject(value)) {\n value = decodeObjectValues(context, transformers);\n }\n\n return runTransformers(transformers, context, value);\n}\n\nfunction generateRefetchQueries(context, value) {\n if (isValue(value) && isNodeContext(context)) {\n value.refetchQuery = function () {\n return new Query(context.selection.selectionSet.typeBundle, function (root) {\n root.add('node', { args: { id: context.responseData.id } }, function (node) {\n node.addInlineFragmentOn(context.selection.selectionSet.typeSchema.name, context.selection.selectionSet);\n });\n });\n };\n }\n\n return value;\n}\n\nfunction transformPojosToClassesWithRegistry(classRegistry) {\n return function transformPojosToClasses(context, value) {\n if (isObject(value)) {\n var Klass = classRegistry.classForType(context.selection.selectionSet.typeSchema.name);\n\n return new Klass(value);\n } else {\n return value;\n }\n };\n}\n\nfunction transformScalars(context, value) {\n if (isValue(value)) {\n if (context.selection.selectionSet.typeSchema.kind === 'SCALAR') {\n return new Scalar(value);\n } else if (context.selection.selectionSet.typeSchema.kind === 'ENUM') {\n return new Enum(value);\n }\n }\n\n return value;\n}\n\nfunction recordTypeInformation(context, value) {\n var _context$selection$se = context.selection.selectionSet,\n typeBundle = _context$selection$se.typeBundle,\n typeSchema = _context$selection$se.typeSchema;\n\n\n if (isValue(value)) {\n if (value.__typename) {\n value.type = schemaForType(typeBundle, value.__typename, typeSchema);\n } else {\n value.type = typeSchema;\n }\n }\n\n return value;\n}\n\nfunction defaultTransformers(_ref) {\n var _ref$classRegistry = _ref.classRegistry,\n classRegistry = _ref$classRegistry === undefined ? new ClassRegistry() : _ref$classRegistry,\n variableValues = _ref.variableValues;\n\n return [transformScalars, generateRefetchQueries, transformConnections(variableValues), recordTypeInformation, transformPojosToClassesWithRegistry(classRegistry)];\n}\n\n/**\n * A function used to decode the response data.\n *\n * @function decode\n * @param {SelectionSet} selection The selection set used to query the response data.\n * @param {Object} responseData The response data returned.\n * @param {Object} [options] Options to use when decoding including:\n * @param {ClassRegistry} [options.classRegistry] A class registry to use when deserializing the data into classes.\n * @return {GraphModel} The decoded response data.\n */\nfunction decode(selection, responseData) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var transformers = options.transformers || defaultTransformers(options);\n var context = new DecodingContext(selection, responseData);\n\n return decodeContext(context, transformers);\n}\n\nfunction httpFetcher(url) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return function fetcher(graphQLParams, headers) {\n return fetch(url, _extends({\n body: JSON.stringify(graphQLParams),\n method: 'POST',\n mode: 'cors'\n }, options, {\n headers: _extends({\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n }, options.headers, headers)\n })).then(function (response) {\n var contentType = response.headers.get('content-type');\n\n if (contentType.indexOf('application/json') > -1) {\n return response.json();\n }\n\n return response.text().then(function (text) {\n return { text: text };\n });\n });\n };\n}\n\nfunction hasNextPage(paginatedModels) {\n return paginatedModels && paginatedModels.length && paginatedModels[paginatedModels.length - 1].hasNextPage;\n}\n\n/**\n * The Client class used to create and send GraphQL documents, fragments, queries and mutations.\n */\n\nvar Client = function () {\n\n /**\n * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.\n * @param {Object} options An options object. Must include either `url` and optional `fetcherOptions` OR a `fetcher` function.\n * @param {(String|Function)} options.url|fetcher Either the URL of the GraphQL API endpoint, or a custom fetcher function for further customization.\n * @param {Object} [options.fetcherOptions] Additional options to use with `fetch`, like headers. Do not specify this argument if `fetcher` is specified.\n * @param {ClassRegistry} [options.registry=new ClassRegistry()] A {@link ClassRegistry} used to decode the response data.\n */\n function Client(typeBundle, _ref) {\n var url = _ref.url,\n fetcherOptions = _ref.fetcherOptions,\n fetcher = _ref.fetcher,\n _ref$registry = _ref.registry,\n registry = _ref$registry === undefined ? new ClassRegistry() : _ref$registry;\n classCallCheck(this, Client);\n\n this.typeBundle = typeBundle;\n this.classRegistry = registry;\n\n if (url && fetcher) {\n throw new Error('Arguments not supported: supply either `url` and optional `fetcherOptions` OR use a `fetcher` function for further customization.');\n }\n\n if (url) {\n this.fetcher = httpFetcher(url, fetcherOptions);\n } else if (fetcher) {\n if (fetcherOptions) {\n throw new Error('Arguments not supported: when specifying your own `fetcher`, set options through it and not with `fetcherOptions`');\n }\n\n this.fetcher = fetcher;\n } else {\n throw new Error('Invalid arguments: one of `url` or `fetcher` is needed.');\n }\n }\n\n /**\n * Creates a GraphQL document.\n *\n * @example\n * const document = client.document();\n *\n * @return {Document} A GraphQL document.\n */\n\n\n createClass(Client, [{\n key: 'document',\n value: function document() {\n return new Document(this.typeBundle);\n }\n\n /**\n * Creates a GraphQL query.\n *\n * @example\n * const query = client.query('myQuery', (root) => {\n * root.add('cat', (cat) => {\n * cat.add('name');\n * });\n * });\n *\n * @param {String} [name] A name for the query.\n * @param {VariableDefinition[]} [variables] A list of variables in the query. See {@link Client#variable}.\n * @param {Function} selectionSetCallback The query builder callback.\n * A {@link SelectionSet} is created using this callback.\n * @return {Query} A GraphQL query.\n */\n\n }, {\n key: 'query',\n value: function query() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return new (Function.prototype.bind.apply(Query, [null].concat([this.typeBundle], args)))();\n }\n\n /**\n * Creates a GraphQL mutation.\n *\n * @example\n * const input = client.variable('input', 'CatCreateInput!');\n *\n * const mutation = client.mutation('myMutation', [input], (root) => {\n * root.add('catCreate', {args: {input}}, (catCreate) => {\n * catCreate.add('cat', (cat) => {\n * cat.add('name');\n * });\n * });\n * });\n *\n * @param {String} [name] A name for the mutation.\n * @param {VariableDefinition[]} [variables] A list of variables in the mutation. See {@link Client#variable}.\n * @param {Function} selectionSetCallback The mutation builder callback.\n * A {@link SelectionSet} is created using this callback.\n * @return {Mutation} A GraphQL mutation.\n */\n\n }, {\n key: 'mutation',\n value: function mutation() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return new (Function.prototype.bind.apply(Mutation, [null].concat([this.typeBundle], args)))();\n }\n\n /**\n * Sends a GraphQL operation (query or mutation) or a document.\n *\n * @example\n * client.send(query, {id: '12345'}).then((result) => {\n * // Do something with the returned result\n * console.log(result);\n * });\n *\n * @param {(Query|Mutation|Document|Function)} request The operation or document to send. If represented\n * as a function, it must return `Query`, `Mutation`, or `Document` and recieve the client as the only param.\n * @param {Object} [variableValues] The values for variables in the operation or document.\n * @param {Object} [otherProperties] Other properties to send with the query. For example, a custom operation name.\n * @param {Object} [headers] Additional headers to be applied on a request by request basis.\n * @return {Promise.<Object>} A promise resolving to an object containing the response data.\n */\n\n }, {\n key: 'send',\n value: function send(request) {\n var variableValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n var _this = this;\n\n var otherProperties = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var headers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var operationOrDocument = void 0;\n\n if (Function.prototype.isPrototypeOf(request)) {\n operationOrDocument = request(this);\n } else {\n operationOrDocument = request;\n }\n\n var graphQLParams = { query: operationOrDocument.toString() };\n\n if (variableValues) {\n graphQLParams.variables = variableValues;\n }\n\n Object.assign(graphQLParams, otherProperties);\n\n var operation = void 0;\n\n if (Operation.prototype.isPrototypeOf(operationOrDocument)) {\n operation = operationOrDocument;\n } else {\n var document = operationOrDocument;\n\n if (document.operations.length === 1) {\n operation = document.operations[0];\n } else if (otherProperties.operationName) {\n operation = document.operations.find(function (documentOperation) {\n return documentOperation.name === otherProperties.operationName;\n });\n } else {\n throw new Error('\\n A document must contain exactly one operation, or an operationName\\n must be specified. Example:\\n\\n client.send(document, null, {operationName: \\'myFancyQuery\\'});\\n ');\n }\n }\n\n return this.fetcher(graphQLParams, headers).then(function (response) {\n if (response.data) {\n response.model = decode(operation, response.data, {\n classRegistry: _this.classRegistry,\n variableValues: variableValues\n });\n }\n\n return response;\n });\n }\n\n /**\n * Fetches the next page of a paginated node or array of nodes.\n *\n * @example\n * client.fetchNextPage(node, {first: 10}).then((result) => {\n * // Do something with the next page\n * console.log(result);\n * });\n *\n * @param {(GraphModel|GraphModel[])} nodeOrNodes The node or list of nodes on which to fetch the next page.\n * @param {Object} [options] Options object containing:\n * @param {Integer} [options.first] The number of nodes to query on the next page. Defaults to the page size of the previous query.\n * @return {Promise.<GraphModel[]>} A promise resolving with the next page of {@link GraphModel}s.\n */\n\n }, {\n key: 'fetchNextPage',\n value: function fetchNextPage(nodeOrNodes, options) {\n var node = void 0;\n\n if (Array.isArray(nodeOrNodes)) {\n node = nodeOrNodes[nodeOrNodes.length - 1];\n } else {\n node = nodeOrNodes;\n }\n\n var _node$nextPageQueryAn = node.nextPageQueryAndPath(),\n _node$nextPageQueryAn2 = slicedToArray(_node$nextPageQueryAn, 2),\n query = _node$nextPageQueryAn2[0],\n path = _node$nextPageQueryAn2[1];\n\n var variableValues = void 0;\n\n if (node.variableValues || options) {\n variableValues = Object.assign({}, node.variableValues, options);\n }\n\n return this.send(query, variableValues).then(function (response) {\n response.model = path.reduce(function (object, key) {\n return object[key];\n }, response.model);\n\n return response;\n });\n }\n\n /**\n * Fetches all subsequent pages of a paginated array of nodes.\n *\n * @example\n * client.fetchAllPages(nodes, {pageSize: 20}).then((result) => {\n * // Do something with all the models\n * console.log(result);\n * });\n *\n * @param {GraphModel[]} paginatedModels The list of nodes on which to fetch all pages.\n * @param {Object} options Options object containing:\n * @param {Integer} options.pageSize The number of nodes to query on each page.\n * @return {Promise.<GraphModel[]>} A promise resolving with all pages of {@link GraphModel}s, including the original list.\n */\n\n }, {\n key: 'fetchAllPages',\n value: function fetchAllPages(paginatedModels, _ref2) {\n var _this2 = this;\n\n var pageSize = _ref2.pageSize;\n\n if (hasNextPage(paginatedModels)) {\n return this.fetchNextPage(paginatedModels, { first: pageSize }).then(function (_ref3) {\n var model = _ref3.model;\n\n var pages = paginatedModels.concat(model);\n\n return _this2.fetchAllPages(pages, { pageSize: pageSize });\n });\n }\n\n return Promise.resolve(paginatedModels);\n }\n\n /**\n * Refetches a {@link GraphModel} whose type implements `Node`.\n *\n * @example\n * client.refetch(node).then((result) => {\n * // Do something with the refetched node\n * console.log(result);\n * });\n *\n * @param {GraphModel} nodeType A {@link GraphModel} whose type implements `Node`.\n * @return {Promise.<GraphModel>} The refetched {@link GraphModel}.\n */\n\n }, {\n key: 'refetch',\n value: function refetch(nodeType) {\n if (!nodeType) {\n throw new Error('\\'client#refetch\\' must be called with a non-null instance of a Node.');\n } else if (!nodeType.type.implementsNode) {\n throw new Error('\\'client#refetch\\' must be called with a type that implements Node. Received ' + nodeType.type.name + '.');\n }\n\n return this.send(nodeType.refetchQuery()).then(function (_ref4) {\n var model = _ref4.model;\n return model.node;\n });\n }\n\n /**\n * Creates a variable to be used in a {@link Query} or {@link Mutation}.\n *\n * @example\n * const idVariable = client.variable('id', 'ID!', '12345');\n *\n * @param {String} name The name of the variable.\n * @param {String} type The GraphQL type of the variable.\n * @param {*} [defaultValue] The default value of the variable.\n * @return {VariableDefinition} A variable object that can be used in a {@link Query} or {@link Mutation}.\n */\n\n }, {\n key: 'variable',\n value: function variable$$1(name, type, defaultValue) {\n return variable(name, type, defaultValue);\n }\n\n /**\n * Creates an enum to be used in a {@link Query} or {@link Mutation}.\n *\n * @example\n * const titleEnum = client.enum('TITLE');\n *\n * @param {String} key The key of the enum.\n * @return {Enum} An enum object that can be used in a {@link Query} or {@link Mutation}.\n */\n\n }, {\n key: 'enum',\n value: function _enum(key) {\n return enumFunction(key);\n }\n }]);\n return Client;\n}();\n\nexport { ClassRegistry, GraphModel, decode };export default Client;\n//# sourceMappingURL=index.es.js.map\n","/**\n * The class used to configure the JS Buy SDK Client.\n * @class\n */\nclass Config {\n\n /**\n * Properties that must be set on initializations\n * @attribute requiredProperties\n * @default ['storefrontAccessToken', 'domain']\n * @type Array\n * @private\n */\n get requiredProperties() {\n return [\n 'storefrontAccessToken',\n 'domain'\n ];\n }\n\n /**\n * Deprecated properties that map directly to required properties\n * @attribute deprecatedProperties\n * @default {'accessToken': 'storefrontAccessToken', 'apiKey': 'storefrontAccessToken'}\n * @type Object\n * @private\n */\n get deprecatedProperties() {\n return {\n accessToken: 'storefrontAccessToken',\n apiKey: 'storefrontAccessToken'\n };\n }\n\n /**\n * @constructs Config\n * @param {Object} attrs An object specifying the configuration. Requires the following properties:\n * @param {String} attrs.storefrontAccessToken The {@link https://help.shopify.com/api/reference/storefront_access_token|Storefront access token} for the shop.\n * @param {String} attrs.domain The `myshopify` domain for the shop (e.g. `graphql.myshopify.com`).\n */\n constructor(attrs) {\n Object.keys(this.deprecatedProperties).forEach((key) => {\n if (!attrs.hasOwnProperty(key)) { return; }\n // eslint-disable-next-line no-console\n console.warn(`[ShopifyBuy] Config property ${key} is deprecated as of v1.0, please use ${this.deprecatedProperties[key]} instead.`);\n attrs[this.deprecatedProperties[key]] = attrs[key];\n });\n\n this.requiredProperties.forEach((key) => {\n if (attrs.hasOwnProperty(key)) {\n this[key] = attrs[key];\n } else {\n throw new Error(`new Config() requires the option '${key}'`);\n }\n });\n\n if (attrs.hasOwnProperty('apiVersion')) {\n this.apiVersion = attrs.apiVersion;\n } else {\n this.apiVersion = '2024-04';\n }\n\n if (attrs.hasOwnProperty('source')) {\n this.source = attrs.source;\n }\n\n if (attrs.hasOwnProperty('language')) {\n this.language = attrs.language;\n }\n }\n}\n\nexport default Config;\n","export default class Resource {\n constructor(client) {\n this.graphQLClient = client;\n }\n}\n","export const defaultErrors = [{message: 'an unknown error has occurred.'}];\n\nexport default function defaultResolver(path) {\n const keys = path.split('.');\n\n return function({model, errors}) {\n return new Promise((resolve, reject) => {\n try {\n const result = keys.reduce((ref, key) => {\n return ref[key];\n }, model);\n\n resolve(result);\n } catch (_) {\n if (errors) {\n reject(errors);\n } else {\n reject(defaultErrors);\n }\n }\n });\n };\n}\n","export default function fetchResourcesForProducts(productOrProduct, client) {\n const products = [].concat(productOrProduct);\n\n return Promise.all(products.reduce((promiseAcc, product) => {\n\n // If the graphql query doesn't find a match, skip fetching variants and images.\n if (product === null) {\n return promiseAcc;\n }\n\n // Fetch the rest of the images and variants for this product\n promiseAcc.push(client.fetchAllPages(product.images, {pageSize: 250}).then((images) => {\n product.attrs.images = images;\n }));\n\n promiseAcc.push(client.fetchAllPages(product.variants, {pageSize: 250}).then((variants) => {\n product.attrs.variants = variants;\n }));\n\n return promiseAcc;\n }, []));\n}\n","import fetchResourcesForProducts from './fetch-resources-for-products';\n\nexport function paginateProductConnectionsAndResolve(client) {\n return function(products) {\n return fetchResourcesForProducts(products, client).then(() => {\n return products;\n });\n };\n}\n\nexport function paginateCollectionsProductConnectionsAndResolve(client) {\n return function(collectionOrCollections) {\n const collections = [].concat(collectionOrCollections);\n\n return Promise.all(collections.reduce((promiseAcc, collection) => {\n return promiseAcc.concat(fetchResourcesForProducts(collection.products, client));\n }, [])).then(() => {\n return collectionOrCollections;\n });\n };\n}\n","/**\n * @namespace ProductHelpers\n */\nexport default {\n\n /**\n * Returns the variant of a product corresponding to the options given.\n *\n * @example\n * const selectedVariant = client.product.helpers.variantForOptions(product, {\n * size: \"Small\",\n * color: \"Red\"\n * });\n *\n * @memberof ProductHelpers\n * @method variantForOptions\n * @param {GraphModel} product The product to find the variant on. Must include `variants`.\n * @param {Object} options An object containing the options for the variant.\n * @return {GraphModel} The variant corresponding to the options given.\n */\n variantForOptions(product, options) {\n return product.variants.find((variant) => {\n return variant.selectedOptions.every((selectedOption) => {\n return options[selectedOption.name] === selectedOption.value.valueOf();\n });\n });\n }\n};\n","import Resource from './resource';\nimport defaultResolver from './default-resolver';\nimport {paginateProductConnectionsAndResolve} from './paginators';\nimport productHelpers from './product-helpers';\n\n// GraphQL\nimport productNodeQuery from './graphql/productNodeQuery.graphql';\nimport productNodesQuery from './graphql/productNodesQuery.graphql';\nimport productConnectionQuery from './graphql/productConnectionQuery.graphql';\nimport productByHandleQuery from './graphql/productByHandleQuery.graphql';\nimport productRecommendationsQuery from './graphql/productRecommendations.graphql';\n\n/**\n * The JS Buy SDK product resource\n * @class\n */\nclass ProductResource extends Resource {\n get helpers() {\n return productHelpers;\n }\n\n /**\n * Fetches all products on the shop.\n *\n * @example\n * client.product.fetchAll().then((products) => {\n * // Do something with the products\n * });\n *\n * @param {Int} [pageSize] The number of products to fetch per page\n * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the products.\n */\n fetchAll(first = 20) {\n return this.graphQLClient\n .send(productConnectionQuery, {first})\n .then(defaultResolver('products'))\n .then(paginateProductConnectionsAndResolve(this.graphQLClient));\n }\n\n /**\n * Fetches a single product by ID on the shop.\n *\n * @example\n * client.product.fetch('Xk9lM2JkNzFmNzIQ4NTIY4ZDFi9DaGVja291dC9lM2JkN==').then((product) => {\n * // Do something with the product\n * });\n *\n * @param {String} id The id of the product to fetch.\n * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the product.\n */\n fetch(id) {\n return this.graphQLClient\n .send(productNodeQuery, {id})\n .then(defaultResolver('node'))\n .then(paginateProductConnectionsAndResolve(this.graphQLClient));\n }\n\n /**\n * Fetches multiple products by ID on the shop.\n *\n * @example\n * const ids = ['Xk9lM2JkNzFmNzIQ4NTIY4ZDFi9DaGVja291dC9lM2JkN==', 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0Lzc4NTc5ODkzODQ='];\n * client.product.fetchMultiple(ids).then((products) => {\n * // Do something with the products\n * });\n *\n * @param {String[]} ids The ids of the products to fetch\n * @return {Promise|GraphModel[]} A promise resolving with a `GraphModel` of the product.\n */\n fetchMultiple(ids) {\n return this.graphQLClient\n .send(productNodesQuery, {ids})\n .then(defaultResolver('nodes'))\n .then(paginateProductConnectionsAndResolve(this.graphQLClient));\n }\n\n /**\n * Fetches a single product by handle on the shop.\n *\n * @example\n * client.product.fetchByHandle('my-product').then((product) => {\n * // Do something with the product\n * });\n *\n * @param {String} handle The handle of the product to fetch.\n * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the product.\n */\n fetchByHandle(handle) {\n return this.graphQLClient\n .send(productByHandleQuery, {handle})\n .then(defaultResolver('productByHandle'))\n .then(paginateProductConnectionsAndResolve(this.graphQLClient));\n }\n\n /**\n * Fetches all products on the shop that match the query.\n *\n * @example\n * client.product.fetchQuery({first: 20, sortKey: 'CREATED_AT', reverse: true}).then((products) => {\n * // Do something with the first 10 products sorted by title in ascending order\n * });\n *\n * @param {Object} [args] An object specifying the query data containing zero or more of:\n * @param {Int} [args.first=20] The relay `first` param. This specifies page size.\n * @param {String} [args.sortKey=ID] The key to sort results by. Available values are\n * documented as {@link https://help.shopify.com/api/storefront-api/reference/enum/productsortkeys|Product Sort Keys}.\n * @param {String} [args.query] A query string. See full documentation {@link https://help.shopify.com/api/storefront-api/reference/object/shop#products|here}\n * @param {Boolean} [args.reverse] Whether or not to reverse the sort order of the results\n * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the products.\n */\n fetchQuery({first = 20, sortKey = 'ID', query, reverse} = {}) {\n return this.graphQLClient\n .send(productConnectionQuery, {\n first,\n sortKey,\n query,\n reverse\n })\n .then(defaultResolver('products'))\n .then(paginateProductConnectionsAndResolve(this.graphQLClient));\n }\n\n /**\n * Find recommended products related to a given productId.\n * To learn more about how recommendations are generated, see https://shopify.dev/themes/product-merchandising/recommendations.\n *\n * @example\n * const productId 'Xk9lM2JkNzFmNzIQ4NTIY4ZDFi9DaGVja291dC9lM2JkN==';\n * client.product.fetchProductRecommendations(productId).then((products) => {\n * // Do something with the products\n * });\n *\n * @param {String} productId The id of the product to fetch.\n * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the products.\n */\n fetchRecommendations(productId) {\n return this.graphQLClient\n .send(productRecommendationsQuery, {productId})\n .then(defaultResolver('productRecommendations'))\n .then(paginateProductConnectionsAndResolve(this.graphQLClient));\n }\n}\n\nexport default ProductResource;\n","import Resource from './resource';\nimport defaultResolver from './default-resolver';\nimport {paginateCollectionsProductConnectionsAndResolve} from './paginators';\n\n// GraphQL\nimport collectionNodeQuery from './graphql/collectionNodeQuery.graphql';\nimport collectionNodeWithProductsQuery from './graphql/collectionNodeWithProductsQuery.graphql';\nimport collectionConnectionQuery from './graphql/collectionConnectionQuery.graphql';\nimport collectionConnectionWithProductsQuery from './graphql/collectionConnectionWithProductsQuery.graphql';\nimport collectionByHandleQuery from './graphql/collectionByHandleQuery.graphql';\n\n/**\n * The JS Buy SDK collection resource\n * @class\n */\nclass CollectionResource extends Resource {\n\n /**\n * Fetches all collections on the shop, not including products.\n * To fetch collections with products use [fetchAllsWithProducts]{@link Client#fetchAllsWithProducts}.\n *\n * @example\n * client.collection.fetchAll().then((collections) => {\n * // Do something with the collections\n * });\n *\n * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the collections.\n */\n fetchAll(first = 20) {\n return this.graphQLClient\n .send(collectionConnectionQuery, {first})\n .then(defaultResolver('collections'));\n }\n\n /**\n * Fetches all collections on the shop, including products.\n *\n * @example\n * client.collection.fetchAllWithProducts().then((collections) => {\n * // Do something with the collections\n * });\n *\n * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the collections.\n */\n fetchAllWithProducts({first = 20, productsFirst = 20} = {}) {\n return this.graphQLClient\n .send(collectionConnectionWithProductsQuery, {first, productsFirst})\n .then(defaultResolver('collections'))\n .then(paginateCollectionsProductConnectionsAndResolve(this.graphQLClient));\n }\n\n /**\n * Fetches a single collection by ID on the shop, not including products.\n * To fetch the collection with products use [fetchWithProducts]{@link Client#fetchWithProducts}.\n *\n * @example\n * client.collection.fetch('Xk9lM2JkNzFmNzIQ4NTIY4ZDFiZTUyZTUwNTE2MDNhZjg==').then((collection) => {\n * // Do something with the collection\n * });\n *\n * @param {String} id The id of the collection to fetch.\n * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the collection.\n */\n fetch(id) {\n return this.graphQLClient\n .send(collectionNodeQuery, {id})\n .then(defaultResolver('node'));\n }\n\n /**\n * Fetches a single collection by ID on the shop, including products.\n *\n * @example\n * client.collection.fetchWithProducts('Xk9lM2JkNzFmNzIQ4NTIY4ZDFiZTUyZTUwNTE2MDNhZjg==').then((collection) => {\n * // Do something with the collection\n * });\n *\n * @param {String} id The id of the collection to fetch.\n * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the collection.\n */\n fetchWithProducts(id, {productsFirst = 20} = {}) {\n return this.graphQLClient\n .send(collectionNodeWithProductsQuery, {id, productsFirst})\n .then(defaultResolver('node'))\n .then(paginateCollectionsProductConnectionsAndResolve(this.graphQLClient));\n }\n\n /**\n * Fetches a collection by handle on the shop.\n *\n * @example\n * client.collection.fetchByHandle('my-collection').then((collection) => {\n * // Do something with the collection\n * });\n *\n * @param {String} handle The handle of the collection to fetch.\n * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the collection.\n */\n fetchByHandle(handle) {\n return this.graphQLClient\n .send(collectionByHandleQuery, {handle})\n .then(defaultResolver('collectionByHandle'));\n }\n\n /**\n * Fetches all collections on the shop that match the query.\n *\n * @example\n * client.collection.fetchQuery({first: 20, sortKey: 'CREATED_AT', reverse: true}).then((collections) => {\n * // Do something with the first 10 collections sorted by title in ascending order\n * });\n *\n * @param {Object} [args] An object specifying the query data containing zero or more of:\n * @param {Int} [args.first=20] The relay `first` param. This specifies page size.\n * @param {String} [args.sortKey=ID] The key to sort results by. Available values are\n * documented as {@link https://help.shopify.com/api/storefront-api/reference/enum/collectionsortkeys|Collection Sort Keys}.\n * @param {String} [args.query] A query string. See full documentation {@link https://help.shopify.com/api/storefront-api/reference/object/shop#collections|here}\n * @param {Boolean} [args.reverse] Whether or not to reverse the sort order of the results\n * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the collections.\n */\n fetchQuery({first = 20, sortKey = 'ID', query, reverse} = {}) {\n return this.graphQLClient.send(collectionConnectionQuery, {\n first,\n sortKey,\n query,\n reverse\n }).then(defaultResolver('collections'));\n }\n}\nexport default CollectionResource;\n","import Resource from './resource';\nimport defaultResolver from './default-resolver';\n\n// GraphQL\nimport shopQuery from './graphql/shopQuery.graphql';\nimport shopPolicyQuery from './graphql/shopPolicyQuery.graphql';\n\n/**\n * The JS Buy SDK shop resource\n * @class\n */\nclass ShopResource extends Resource {\n\n /**\n * Fetches shop information (`currencyCode`, `description`, `moneyFormat`, `name`, and `primaryDomain`).\n * See the {@link https://help.shopify.com/api/storefront-api/reference/object/shop|Storefront API reference} for more information.\n *\n * @example\n * client.shop.fetchInfo().then((shop) => {\n * // Do something with the shop\n * });\n *\n * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the shop.\n */\n fetchInfo() {\n return this.graphQLClient\n .send(shopQuery)\n .then(defaultResolver('shop'));\n }\n\n /**\n * Fetches shop policies (privacy policy, terms of service and refund policy).\n *\n * @example\n * client.shop.fetchPolicies().then((shop) => {\n * // Do something with the shop\n * });\n *\n * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the shop.\n */\n fetchPolicies() {\n return this.graphQLClient\n .send(shopPolicyQuery)\n .then(defaultResolver('shop'));\n }\n}\n\nexport default ShopResource;\n","export default function handleCheckoutMutation(mutationRootKey, client) {\n return function({data = {}, errors, model = {}}) {\n const rootData = data[mutationRootKey];\n const rootModel = model[mutationRootKey];\n\n if (rootData && rootData.checkout) {\n return client.fetchAllPages(rootModel.checkout.lineItems, {pageSize: 250}).then((lineItems) => {\n rootModel.checkout.attrs.lineItems = lineItems;\n rootModel.checkout.errors = errors;\n rootModel.checkout.userErrors = rootModel.userErrors;\n\n return rootModel.checkout;\n });\n }\n\n if (errors && errors.length) {\n return Promise.reject(new Error(JSON.stringify(errors)));\n }\n\n if (rootData && rootData.checkoutUserErrors && rootData.checkoutUserErrors.length) {\n return Promise.reject(new Error(JSON.stringify(rootData.checkoutUserErrors)));\n }\n\n if (rootData && rootData.userErrors && rootData.userErrors.length) {\n return Promise.reject(new Error(JSON.stringify(rootData.userErrors)));\n }\n\n return Promise.reject(new Error(`The ${mutationRootKey} mutation failed due to an unknown error.`));\n };\n}\n","import Resource from './resource';\nimport defaultResolver from './default-resolver';\nimport handleCheckoutMutation from './handle-checkout-mutation';\n\n// GraphQL\nimport checkoutNodeQuery from './graphql/checkoutNodeQuery.graphql';\nimport checkoutCreateMutation from './graphql/checkoutCreateMutation.graphql';\nimport checkoutLineItemsAddMutation from './graphql/checkoutLineItemsAddMutation.graphql';\nimport checkoutLineItemsRemoveMutation from './graphql/checkoutLineItemsRemoveMutation.graphql';\nimport checkoutLineItemsReplaceMutation from './graphql/checkoutLineItemsReplaceMutation.graphql';\nimport checkoutLineItemsUpdateMutation from './graphql/checkoutLineItemsUpdateMutation.graphql';\nimport checkoutAttributesUpdateV2Mutation from './graphql/checkoutAttributesUpdateV2Mutation.graphql';\nimport checkoutDiscountCodeApplyV2Mutation from './graphql/checkoutDiscountCodeApplyV2Mutation.graphql';\nimport checkoutDiscountCodeRemoveMutation from './graphql/checkoutDiscountCodeRemoveMutation.graphql';\nimport checkoutGiftCardsAppendMutation from './graphql/checkoutGiftCardsAppendMutation.graphql';\nimport checkoutGiftCardRemoveV2Mutation from './graphql/checkoutGiftCardRemoveV2Mutation.graphql';\nimport checkoutEmailUpdateV2Mutation from './graphql/checkoutEmailUpdateV2Mutation.graphql';\nimport checkoutShippingAddressUpdateV2Mutation from './graphql/checkoutShippingAddressUpdateV2Mutation.graphql';\n\n/**\n * The JS Buy SDK checkout resource\n * @class\n */\nclass CheckoutResource extends Resource {\n\n /**\n * Fetches a checkout by ID.\n *\n * @example\n * client.checkout.fetch('FlZj9rZXlN5MDY4ZDFiZTUyZTUwNTE2MDNhZjg=').then((checkout) => {\n * // Do something with the checkout\n * });\n *\n * @param {String} id The id of the checkout to fetch.\n * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the checkout.\n */\n fetch(id) {\n return this.graphQLClient\n .send(checkoutNodeQuery, {id})\n .then(defaultResolver('node'))\n .then((checkout) => {\n if (!checkout) { return null; }\n\n return this.graphQLClient.fetchAllPages(checkout.lineItems, {pageSize: 250}).then((lineItems) => {\n checkout.attrs.lineItems = lineItems;\n\n return checkout;\n });\n });\n }\n\n /**\n * Creates a checkout.\n *\n * @example\n * const input = {\n * lineItems: [\n * {variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==', quantity: 5}\n * ]\n * };\n *\n * client.checkout.create(input).then((checkout) => {\n * // Do something with the newly created checkout\n * });\n *\n * @param {Object} [input] An input object containing zero or more of:\n * @param {String} [input.email] An email connected to the checkout.\n * @param {Object[]} [input.lineItems] A list of line items in the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/checkoutlineiteminput|Storefront API reference} for valid input fields for each line item.\n * @param {Object} [input.shippingAddress] A shipping address. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/mailingaddressinput|Storefront API reference} for valid input fields.\n * @param {String} [input.note] A note for the checkout.\n * @param {Object[]} [input.customAttributes] A list of custom attributes for the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/attributeinput|Storefront API reference} for valid input fields.\n * @param {String} [input.presentmentCurrencyCode ] A presentment currency code. See the {@link https://help.shopify.com/en/api/storefront-api/reference/enum/currencycode|Storefront API reference} for valid currency code values.\n * @return {Promise|GraphModel} A promise resolving with the created checkout.\n */\n create(input = {}) {\n return this.graphQLClient\n .send(checkoutCreateMutation, {input})\n .then(handleCheckoutMutation('checkoutCreate', this.graphQLClient));\n }\n\n /**\n * Replaces the value of checkout's custom attributes and/or note with values defined in the input\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n * const input = {customAttributes: [{key: \"MyKey\", value: \"MyValue\"}]};\n *\n * client.checkout.updateAttributes(checkoutId, input).then((checkout) => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to update.\n * @param {Object} [input] An input object containing zero or more of:\n * @param {Boolean} [input.allowPartialAddresses] An email connected to the checkout.\n * @param {Object[]} [input.customAttributes] A list of custom attributes for the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/attributeinput|Storefront API reference} for valid input fields.\n * @param {String} [input.note] A note for the checkout.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n updateAttributes(checkoutId, input = {}) {\n return this.graphQLClient\n .send(checkoutAttributesUpdateV2Mutation, {checkoutId, input})\n .then(handleCheckoutMutation('checkoutAttributesUpdateV2', this.graphQLClient));\n }\n\n /**\n * Replaces the value of checkout's email address\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n * const email = '[email protected]';\n *\n * client.checkout.updateEmail(checkoutId, email).then((checkout) => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to update.\n * @param {String} email The email address to apply to the checkout.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n updateEmail(checkoutId, email) {\n return this.graphQLClient\n .send(checkoutEmailUpdateV2Mutation, {checkoutId, email})\n .then(handleCheckoutMutation('checkoutEmailUpdateV2', this.graphQLClient));\n }\n\n /**\n * Adds line items to an existing checkout.\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n * const lineItems = [{variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==', quantity: 5}];\n *\n * client.checkout.addLineItems(checkoutId, lineItems).then((checkout) => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to add line items to.\n * @param {Object[]} lineItems A list of line items to add to the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/checkoutlineiteminput|Storefront API reference} for valid input fields for each line item.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n addLineItems(checkoutId, lineItems) {\n return this.graphQLClient\n .send(checkoutLineItemsAddMutation, {checkoutId, lineItems})\n .then(handleCheckoutMutation('checkoutLineItemsAdd', this.graphQLClient));\n }\n\n /**\n * Applies a discount to an existing checkout using a discount code.\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n * const discountCode = 'best-discount-ever';\n *\n * client.checkout.addDiscount(checkoutId, discountCode).then((checkout) => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to add discount to.\n * @param {String} discountCode The discount code to apply to the checkout.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n addDiscount(checkoutId, discountCode) {\n return this.graphQLClient\n .send(checkoutDiscountCodeApplyV2Mutation, {checkoutId, discountCode})\n .then(handleCheckoutMutation('checkoutDiscountCodeApplyV2', this.graphQLClient));\n }\n\n /**\n * Removes the applied discount from an existing checkout.\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n *\n * client.checkout.removeDiscount(checkoutId).then((checkout) => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to remove the discount from.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n removeDiscount(checkoutId) {\n return this.graphQLClient\n .send(checkoutDiscountCodeRemoveMutation, {checkoutId})\n .then(handleCheckoutMutation('checkoutDiscountCodeRemove', this.graphQLClient));\n }\n\n /**\n * Applies gift cards to an existing checkout using a list of gift card codes\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n * const giftCardCodes = ['6FD8853DAGAA949F'];\n *\n * client.checkout.addGiftCards(checkoutId, giftCardCodes).then((checkout) => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to add gift cards to.\n * @param {String[]} giftCardCodes The gift card codes to apply to the checkout.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n addGiftCards(checkoutId, giftCardCodes) {\n return this.graphQLClient\n .send(checkoutGiftCardsAppendMutation, {checkoutId, giftCardCodes})\n .then(handleCheckoutMutation('checkoutGiftCardsAppend', this.graphQLClient));\n }\n\n /**\n * Remove a gift card from an existing checkout\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n * const appliedGiftCardId = 'Z2lkOi8vc2hvcGlmeS9BcHBsaWVkR2lmdENhcmQvNDI4NTQ1ODAzMTI=';\n *\n * client.checkout.removeGiftCard(checkoutId, appliedGiftCardId).then((checkout) => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to add gift cards to.\n * @param {String} appliedGiftCardId The gift card id to remove from the checkout.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n removeGiftCard(checkoutId, appliedGiftCardId) {\n return this.graphQLClient\n .send(checkoutGiftCardRemoveV2Mutation, {checkoutId, appliedGiftCardId})\n .then(handleCheckoutMutation('checkoutGiftCardRemoveV2', this.graphQLClient));\n }\n\n /**\n * Removes line items from an existing checkout.\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n * const lineItemIds = ['TViZGE5Y2U1ZDFhY2FiMmM2YT9rZXk9NTc2YjBhODcwNWIxYzg0YjE5ZjRmZGQ5NjczNGVkZGU='];\n *\n * client.checkout.removeLineItems(checkoutId, lineItemIds).then((checkout) => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to remove line items from.\n * @param {String[]} lineItemIds A list of the ids of line items to remove from the checkout.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n removeLineItems(checkoutId, lineItemIds) {\n return this.graphQLClient\n .send(checkoutLineItemsRemoveMutation, {checkoutId, lineItemIds})\n .then(handleCheckoutMutation('checkoutLineItemsRemove', this.graphQLClient));\n }\n\n /**\n * Replace line items on an existing checkout.\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n * const lineItems = [{variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==', quantity: 5}];\n *\n * client.checkout.replaceLineItems(checkoutId, lineItems).then((checkout) => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to add line items to.\n * @param {Object[]} lineItems A list of line items to set on the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/checkoutlineiteminput|Storefront API reference} for valid input fields for each line item.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n replaceLineItems(checkoutId, lineItems) {\n return this.graphQLClient\n .send(checkoutLineItemsReplaceMutation, {checkoutId, lineItems})\n .then(handleCheckoutMutation('checkoutLineItemsReplace', this.graphQLClient));\n }\n\n /**\n * Updates line items on an existing checkout.\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n * const lineItems = [\n * {\n * id: 'TViZGE5Y2U1ZDFhY2FiMmM2YT9rZXk9NTc2YjBhODcwNWIxYzg0YjE5ZjRmZGQ5NjczNGVkZGU=',\n * quantity: 5,\n * variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg=='\n * }\n * ];\n *\n * client.checkout.updateLineItems(checkoutId, lineItems).then(checkout => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to update a line item on.\n * @param {Object[]} lineItems A list of line item information to update. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/checkoutlineitemupdateinput|Storefront API reference} for valid input fields for each line item.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n updateLineItems(checkoutId, lineItems) {\n return this.graphQLClient\n .send(checkoutLineItemsUpdateMutation, {checkoutId, lineItems})\n .then(handleCheckoutMutation('checkoutLineItemsUpdate', this.graphQLClient));\n }\n\n /**\n * Updates shipping address on an existing checkout.\n *\n * @example\n * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';\n * const shippingAddress = {\n * address1: 'Chestnut Street 92',\n * address2: 'Apartment 2',\n * city: 'Louisville',\n * company: null,\n * country: 'United States',\n * firstName: 'Bob',\n * lastName: 'Norman',\n * phone: '555-625-1199',\n * province: 'Kentucky',\n * zip: '40202'\n * };\n *\n * client.checkout.updateShippingAddress(checkoutId, shippingAddress).then(checkout => {\n * // Do something with the updated checkout\n * });\n *\n * @param {String} checkoutId The ID of the checkout to update shipping address.\n * @param {Object} shippingAddress A shipping address.\n * @return {Promise|GraphModel} A promise resolving with the updated checkout.\n */\n updateShippingAddress(checkoutId, shippingAddress) {\n return this.graphQLClient\n .send(checkoutShippingAddressUpdateV2Mutation, {checkoutId, shippingAddress})\n .then(handleCheckoutMutation('checkoutShippingAddressUpdateV2', this.graphQLClient));\n }\n}\n\nexport default CheckoutResource;\n","/**\n * @namespace ImageHelpers\n */\nexport default {\n\n /**\n * Generates the image src for a resized image with maximum dimensions `maxWidth` and `maxHeight`.\n * Images do not scale up.\n *\n * @example\n * const url = client.image.helpers.imageForSize(product.variants[0].image, {maxWidth: 50, maxHeight: 50});\n *\n * @memberof ImageHelpers\n * @method imageForSize\n * @param {Object} image The original image model to generate the image src for.\n * @param {Object} options An options object containing:\n * @param {Integer} options.maxWidth The maximum width for the image.\n * @param {Integer} options.maxHeight The maximum height for the image.\n * @return {String} The image src for the resized image.\n */\n imageForSize(image, {maxWidth, maxHeight}) {\n const splitUrl = image.src.split('?');\n const notQuery = splitUrl[0];\n const query = splitUrl[1] ? `?${splitUrl[1]}` : '';\n\n // Use the section before the query\n const imageTokens = notQuery.split('.');\n\n // Take the token before the file extension and append the dimensions\n const imagePathIndex = imageTokens.length - 2;\n\n imageTokens[imagePathIndex] = `${imageTokens[imagePathIndex]}_${maxWidth}x${maxHeight}`;\n\n return `${imageTokens.join('.')}${query}`;\n }\n};\n","import Resource from './resource';\nimport imageHelpers from './image-helpers';\n\n/**\n * The JS Buy SDK image resource\n * @class\n */\nclass ImageResource extends Resource {\n get helpers() {\n return imageHelpers;\n }\n}\n\nexport default ImageResource;\n","import GraphQLJSClient from './graphql-client';\nimport Config from './config';\nimport ProductResource from './product-resource';\nimport CollectionResource from './collection-resource';\nimport ShopResource from './shop-resource';\nimport CheckoutResource from './checkout-resource';\nimport ImageResource from './image-resource';\nimport {version} from '../package.json';\n\n// GraphQL\nimport types from '../schema.json';\n\n/**\n * The JS Buy SDK Client.\n * @class\n *\n * @property {ProductResource} product The property under which product fetching methods live.\n * @property {CollectionResource} collection The property under which collection fetching methods live.\n * @property {ShopResource} shop The property under which shop fetching methods live.\n * @property {CheckoutResource} checkout The property under which shop fetching and mutating methods live.\n * @property {ImageResource} image The property under which image helper methods live.\n */\nclass Client {\n\n /**\n * Primary entry point for building a new Client.\n */\n static buildClient(config, fetchFunction) {\n const newConfig = new Config(config);\n const client = new Client(newConfig, GraphQLJSClient, fetchFunction);\n\n client.config = newConfig;\n\n return client;\n }\n\n /**\n * @constructs Client\n * @param {Config} config An instance of {@link Config} used to configure the Client.\n */\n constructor(config, GraphQLClientClass = GraphQLJSClient, fetchFunction) {\n const url = `https://${config.domain}/api/${config.apiVersion}/graphql`;\n\n const headers = {\n 'X-SDK-Variant': 'javascript',\n 'X-SDK-Version': version,\n 'X-Shopify-Storefront-Access-Token': config.storefrontAccessToken\n };\n\n if (config.source) {\n headers['X-SDK-Variant-Source'] = config.source;\n }\n\n const languageHeader = config.language ? config.language : '*';\n\n headers['Accept-Language'] = languageHeader;\n\n if (fetchFunction) {\n headers['Content-Type'] = 'application/json';\n headers.Accept = 'application/json';\n\n this.graphQLClient = new GraphQLClientClass(types, {\n fetcher: function fetcher(graphQLParams) {\n return fetchFunction(url, {\n body: JSON.stringify(graphQLParams),\n method: 'POST',\n mode: 'cors',\n headers\n }).then((response) => response.json());\n }\n });\n } else {\n this.graphQLClient = new GraphQLClientClass(types, {\n url,\n fetcherOptions: {headers}\n });\n }\n\n this.product = new ProductResource(this.graphQLClient);\n this.collection = new CollectionResource(this.graphQLClient);\n this.shop = new ShopResource(this.graphQLClient);\n this.checkout = new CheckoutResource(this.graphQLClient);\n this.image = new ImageResource(this.graphQLClient);\n }\n\n /**\n * Fetches the next page of models\n *\n * @example\n * client.fetchNextPage(products).then((nextProducts) => {\n * // Do something with the products\n * });\n *\n * @param {models} [Array] The paginated set to fetch the next page of\n * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the type provided.\n */\n fetchNextPage(models) {\n return this.graphQLClient.fetchNextPage(models);\n }\n}\n\nexport default Client;\n"],"names":["join","_len","arguments","length","fields","Array","_key","isObject","value","Boolean","Object","prototype","toString","call","valueOf","deepFreezeCopyExcept","predicate","structure","freeze","keys","reduce","copy","key","isArray","map","item","schemaForType","typeBundle","typeName","typeSchema","undefined","type","types","kind","Error","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","_extends","assign","source","hasOwnProperty","inherits","subClass","superClass","create","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_i","Symbol","iterator","_s","next","done","push","err","toConsumableArray","arr2","from","VariableDefinition","name","defaultValue","toInputValueString","defaultValueString","formatInputValue","isVariable","isPrototypeOf","variable","Enum","enumFunction","Scalar","get$$1","String","JSON","stringify","apply","formatObject","openChar","closeChar","argPairs","formatArgs","args","formatDirectives","directives","directiveStrings","directiveArgs","arg","noop","Profiler","trackTypeDependency","trackFieldDependency","parseFieldCreationArgs","creationArgs","callback","options","selectionSet","_creationArgs","_creationArgs2","SelectionSet","emptyArgs","emptyDirectives","Field","alias","responseKey","aliasPrefix","Spread","InlineFragment","_Spread","_this","getPrototypeOf","FragmentSpread","_Spread2","fragmentDefinition","_this2","toDefinition","FragmentDefinition","spread","selectionsHaveIdField","selections","some","fieldOrFragment","implementsNode","selectionsHaveTypenameField","indexSelectionsByResponseKey","assignOrPush","obj","unfrozenObject","acc","selection","responseKeys","selectionsByResponseKey","forEach","builderFunction","SelectionSetBuilder","unshift","hasSelectionWithResponseKey","field","add","selectionOrFieldName","rest","concat","_len2","_key2","parsedArgs","fieldBaseTypes","fieldBaseType","inlineFragmentOn","builderFunctionOrSelectionSet","addField","_len3","_key3","addConnection","_len4","_key4","_parseFieldCreationAr","connection","pageInfo","edges","addInlineFragmentOn","fieldTypeCb","addFragment","fragmentSpread","parseArgs","variables","selectionSetCallback","_args","VariableDefinitions","variableDefinitions","Operation","operationType","_parseArgs","queryType","mutationType","nameString","Query","_Operation","_ref","Mutation","isAnonymous","operation","hasAnonymousOperations","operations","hasDuplicateOperationNames","names","hasDuplicates","index","indexOf","extractOperation","Function","bind","isInvalidOperationCombination","fragmentNameIsNotUnique","existingDefinitions","definition","Document","definitions","addOperation","addQuery","addMutation","defineFragment","onType","fragmentDefinitions","fragment","filter","GraphModel","attrs","ClassRegistry","classStore","registerClassForType","constructor","unregisterClassForType","classForType","isValue","isNodeContext","context","isConnection","endsWith","nearestNode","parent","contextsFromRoot","contextsFromNearestNode","initializeDocumentAndVars","currentContext","contextChain","lastInChain","first","firstVar","find","document","addNextFieldTo","currentSelection","path","cursor","nextContext","shift","newSelection","edgesField","nodeField","after","collectFragments","nextPageQueryAndPath","nearestNodeContext","_document$definitions","nodeType","nodeId","responseData","id","_initializeDocumentAn","_initializeDocumentAn2","root","node","slice","fragments","_document$definitions2","_initializeDocumentAn3","_initializeDocumentAn4","hasNextPage$1","edge","hasNextPage","hasPreviousPage","transformConnections","variableValues","DecodingContext","contextForObjectProperty","nestedSelections","nextSelection","contextForArrayItem","decodeArrayItems","transformers","decodeContext","decodeObjectValues","runTransformers","transformer","generateRefetchQueries","refetchQuery","transformPojosToClassesWithRegistry","classRegistry","transformPojosToClasses","Klass","transformScalars","recordTypeInformation","_context$selection$se","__typename","defaultTransformers","_ref$classRegistry","decode","httpFetcher","url","fetcher","graphQLParams","headers","fetch","then","response","contentType","get","json","text","paginatedModels","Client","fetcherOptions","_ref$registry","registry","query","mutation","send","request","otherProperties","operationOrDocument","operationName","documentOperation","data","model","fetchNextPage","nodeOrNodes","_node$nextPageQueryAn","_node$nextPageQueryAn2","object","fetchAllPages","_ref2","pageSize","_ref3","pages","Promise","resolve","refetch","_ref4","variable$$1","_enum","Config","deprecatedProperties","warn","requiredProperties","apiVersion","language","Resource","client","graphQLClient","defaultErrors","message","defaultResolver","split","errors","reject","result","ref","_","fetchResourcesForProducts","productOrProduct","products","all","promiseAcc","product","images","variants","paginateProductConnectionsAndResolve","paginateCollectionsProductConnectionsAndResolve","collectionOrCollections","collections","collection","variant","selectedOptions","every","selectedOption","ProductResource","productConnectionQuery","productNodeQuery","ids","productNodesQuery","handle","productByHandleQuery","sortKey","reverse","productId","productRecommendationsQuery","productHelpers","CollectionResource","collectionConnectionQuery","productsFirst","collectionConnectionWithProductsQuery","collectionNodeQuery","collectionNodeWithProductsQuery","collectionByHandleQuery","ShopResource","shopQuery","shopPolicyQuery","handleCheckoutMutation","mutationRootKey","rootData","rootModel","checkout","lineItems","userErrors","checkoutUserErrors","CheckoutResource","checkoutNodeQuery","input","checkoutCreateMutation","checkoutId","checkoutAttributesUpdateV2Mutation","email","checkoutEmailUpdateV2Mutation","checkoutLineItemsAddMutation","discountCode","checkoutDiscountCodeApplyV2Mutation","checkoutDiscountCodeRemoveMutation","giftCardCodes","checkoutGiftCardsAppendMutation","appliedGiftCardId","checkoutGiftCardRemoveV2Mutation","lineItemIds","checkoutLineItemsRemoveMutation","checkoutLineItemsReplaceMutation","checkoutLineItemsUpdateMutation","shippingAddress","checkoutShippingAddressUpdateV2Mutation","image","maxWidth","maxHeight","splitUrl","src","notQuery","imageTokens","imagePathIndex","ImageResource","imageHelpers","config","fetchFunction","newConfig","GraphQLJSClient","GraphQLClientClass","domain","version","storefrontAccessToken","languageHeader","Accept","shop","models"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACE5B;AACA,AAEA;;;;;;;;;;;IAUMpC;;;;;;;;gCAKe+H,QAAQC,eAAe;UAClCC,YAAY,IAAInG,MAAJ,CAAWiG,MAAX,CAAlB;UACM1F,SAAS,IAAIrC,MAAJ,CAAWiI,SAAX,EAAsBC,QAAtB,EAAuCF,aAAvC,CAAf;;aAEOD,MAAP,GAAgBE,SAAhB;;aAEO5F,MAAP;;;;;;;;;;kBAOU0F,MAAZ,EAAyE;QAArDI,kBAAqD,uEAAhCD,QAAgC;QAAfF,aAAe;;;QACjE5I,mBAAiB2I,OAAOK,MAAxB,aAAsCL,OAAO7F,UAA7C,aAAN;;QAEM3C,UAAU;uBACG,YADH;uBAEG8I,OAFH;2CAGuBN,OAAOO;KAH9C;;QAMIP,OAAO5Y,MAAX,EAAmB;cACT,sBAAR,IAAkC4Y,OAAO5Y,MAAzC;;;QAGIoZ,iBAAiBR,OAAO5F,QAAP,GAAkB4F,OAAO5F,QAAzB,GAAoC,GAA3D;;YAEQ,iBAAR,IAA6BoG,cAA7B;;QAEIP,aAAJ,EAAmB;cACT,cAAR,IAA0B,kBAA1B;cACQQ,MAAR,GAAiB,kBAAjB;;WAEKlG,aAAL,GAAqB,IAAI6F,kBAAJ,CAAuBra,KAAvB,EAA8B;iBACxC,SAASuR,OAAT,CAAiBC,aAAjB,EAAgC;iBAChC0I,cAAc5I,GAAd,EAAmB;kBAClBtN,KAAKC,SAAL,CAAeuN,aAAf,CADkB;oBAEhB,MAFgB;kBAGlB,MAHkB;;WAAnB,EAKJG,IALI,CAKC,UAACC,QAAD;mBAAcA,SAASG,IAAT,EAAd;WALD,CAAP;;OAFiB,CAArB;KAJF,MAcO;WACAyC,aAAL,GAAqB,IAAI6F,kBAAJ,CAAuBra,KAAvB,EAA8B;gBAAA;wBAEjC,EAACyR,gBAAD;OAFG,CAArB;;;SAMG8D,OAAL,GAAe,IAAIY,eAAJ,CAAoB,KAAK3B,aAAzB,CAAf;SACKsB,UAAL,GAAkB,IAAIiB,kBAAJ,CAAuB,KAAKvC,aAA5B,CAAlB;SACKmG,IAAL,GAAY,IAAIrD,YAAJ,CAAiB,KAAK9C,aAAtB,CAAZ;SACKqD,QAAL,GAAgB,IAAII,gBAAJ,CAAqB,KAAKzD,aAA1B,CAAhB;SACK+E,KAAL,GAAa,IAAIQ,aAAJ,CAAkB,KAAKvF,aAAvB,CAAb;;;;;;;;;;;;;;;;;;kCAcYoG,QAAQ;aACb,KAAKpG,aAAL,CAAmBxB,aAAnB,CAAiC4H,MAAjC,CAAP;;;;;;;;;;;;"}