{"version":3,"sources":["jsdelivr-header.js","webpack:///webpack/bootstrap","webpack:///common/jsonc-parser/impl/edit.ts","webpack:///common/jsonc-parser/impl/format.ts","webpack:///common/jsonc-parser/impl/parser.ts","webpack:///common/jsonc-parser/impl/scanner.ts","webpack:///common/jsonc-parser/main.ts","webpack:///src/components/CustomSettings/CustomSettings.tsx","webpack:///src/components/CustomSettings/index.ts","webpack:///src/components/CustomSettings/styles.ts","webpack:///src/components/DefaultSettings/DefaultSettings.tsx","webpack:///src/components/DefaultSettings/index.ts","webpack:///src/components/HelperPopup/HelperPopup.tsx","webpack:///src/components/HelperPopup/index.ts","webpack:///src/components/UserCustomSettings/UserCustomSettings.tsx","webpack:///src/components/UserCustomSettings/index.ts","webpack:///src/components/WorkspaceCustomSettings/WorkspaceCustomSettings.tsx","webpack:///src/components/WorkspaceCustomSettings/index.ts","webpack:///src/containers/CustomJsonEditor/CustomJsonEditor.tsx","webpack:///src/containers/CustomJsonEditor/index.ts","webpack:///src/containers/index.ts","webpack:///src/core/index.ts","webpack:///src/core/interface.ts","webpack:///src/graphql/index.ts","webpack:///src/graphql/mutations/index.ts","webpack:///src/graphql/mutations/saveUserSettings.gql","webpack:///src/graphql/mutations/saveWorkspaceSettings.gql","webpack:///src/graphql/queries/defaultPreferences.gql","webpack:///src/graphql/queries/index.ts","webpack:///src/graphql/queries/userPrefValue.gql","webpack:///src/graphql/queries/userPreferences.gql","webpack:///src/graphql/queries/userSettings.gql","webpack:///src/graphql/queries/workspacePrefValue.gql","webpack:///src/index.ts","webpack:///src/module.ts","webpack:///src/reducers/actions/index.ts","webpack:///src/reducers/actions/jsonEditor.ts","webpack:///src/reducers/constants/actionTypes.ts","webpack:///src/reducers/index.ts","webpack:///src/reducers/reducers/index.ts","webpack:///src/reducers/reducers/jsonEditor.ts","webpack:///src/utils/index.ts","webpack:///src/utils/parser.ts","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"@common-stack/client-react\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"@files-stack/client-redux\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"@files-stack/graphql-gql\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"@workbench-stack/monaco-browser\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"classnames\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"lodash\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"react\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"react-apollo\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"react-click-outside\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"react-dimensions\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"react-fela\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"react-redux\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"react-resizable\"","/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/webpack:/external \"reselect\""],"names":[],"mappings":"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","file":"/npm/@files-stack/preferences-module-browser@0.0.55-1/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@files-stack/preferences-module-browser@0.0.55-1/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Edit, FormattingOptions, ParseError, Node, JSONPath, Segment } from '../main';\nimport { format, isEOL } from './format';\nimport { parseTree, findNodeAtLocation } from './parser';\n\nexport function removeProperty(text: string, path: JSONPath, formattingOptions: FormattingOptions): Edit[] {\n\treturn setProperty(text, path, void 0, formattingOptions);\n}\n\nexport function setProperty(text: string, path: JSONPath, value: any, formattingOptions: FormattingOptions, getInsertionIndex?: (properties: string[]) => number): Edit[] {\n\tlet errors: ParseError[] = [];\n\tlet root = parseTree(text, errors);\n\tlet parent: Node | undefined = void 0;\n\n\tlet lastSegment: Segment | undefined = void 0;\n\twhile (path.length > 0) {\n\t\tlastSegment = path.pop();\n\t\tparent = findNodeAtLocation(root, path);\n\t\tif (parent === void 0 && value !== void 0) {\n\t\t\tif (typeof lastSegment === 'string') {\n\t\t\t\tvalue = { [lastSegment]: value };\n\t\t\t} else {\n\t\t\t\tvalue = [value];\n\t\t\t}\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!parent) {\n\t\t// empty document\n\t\tif (value === void 0) { // delete\n\t\t\tthrow new Error('Can not delete in empty document');\n\t\t}\n\t\treturn withFormatting(text, { offset: root ? root.offset : 0, length: root ? root.length : 0, content: JSON.stringify(value) }, formattingOptions);\n\t} else if (parent.type === 'object' && typeof lastSegment === 'string' && Array.isArray(parent.children)) {\n\t\tlet existing = findNodeAtLocation(parent, [lastSegment]);\n\t\tif (existing !== void 0) {\n\t\t\tif (value === void 0) { // delete\n\t\t\t\tif (!existing.parent) {\n\t\t\t\t\tthrow new Error('Malformed AST');\n\t\t\t\t}\n\t\t\t\tlet propertyIndex = parent.children.indexOf(existing.parent);\n\t\t\t\tlet removeBegin: number;\n\t\t\t\tlet removeEnd = existing.parent.offset + existing.parent.length;\n\t\t\t\tif (propertyIndex > 0) {\n\t\t\t\t\t// remove the comma of the previous node\n\t\t\t\t\tlet previous = parent.children[propertyIndex - 1];\n\t\t\t\t\tremoveBegin = previous.offset + previous.length;\n\t\t\t\t} else {\n\t\t\t\t\tremoveBegin = parent.offset + 1;\n\t\t\t\t\tif (parent.children.length > 1) {\n\t\t\t\t\t\t// remove the comma of the next node\n\t\t\t\t\t\tlet next = parent.children[1];\n\t\t\t\t\t\tremoveEnd = next.offset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn withFormatting(text, { offset: removeBegin, length: removeEnd - removeBegin, content: '' }, formattingOptions);\n\t\t\t} else {\n\t\t\t\t// set value of existing property\n\t\t\t\treturn withFormatting(text, { offset: existing.offset, length: existing.length, content: JSON.stringify(value) }, formattingOptions);\n\t\t\t}\n\t\t} else {\n\t\t\tif (value === void 0) { // delete\n\t\t\t\treturn []; // property does not exist, nothing to do\n\t\t\t}\n\t\t\tlet newProperty = `${JSON.stringify(lastSegment)}: ${JSON.stringify(value)}`;\n\t\t\tlet index = getInsertionIndex ? getInsertionIndex(parent.children.map(p => p.children![0].value)) : parent.children.length;\n\t\t\tlet edit: Edit;\n\t\t\tif (index > 0) {\n\t\t\t\tlet previous = parent.children[index - 1];\n\t\t\t\tedit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n\t\t\t} else if (parent.children.length === 0) {\n\t\t\t\tedit = { offset: parent.offset + 1, length: 0, content: newProperty };\n\t\t\t} else {\n\t\t\t\tedit = { offset: parent.offset + 1, length: 0, content: newProperty + ',' };\n\t\t\t}\n\t\t\treturn withFormatting(text, edit, formattingOptions);\n\t\t}\n\t} else if (parent.type === 'array' && typeof lastSegment === 'number' && Array.isArray(parent.children)) {\n\t\tlet insertIndex = lastSegment;\n\t\tif (insertIndex === -1) {\n\t\t\t// Insert\n\t\t\tlet newProperty = `${JSON.stringify(value)}`;\n\t\t\tlet edit: Edit;\n\t\t\tif (parent.children.length === 0) {\n\t\t\t\tedit = { offset: parent.offset + 1, length: 0, content: newProperty };\n\t\t\t} else {\n\t\t\t\tlet previous = parent.children[parent.children.length - 1];\n\t\t\t\tedit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n\t\t\t}\n\t\t\treturn withFormatting(text, edit, formattingOptions);\n\t\t} else {\n\t\t\tif (value === void 0 && parent.children.length >= 0) {\n\t\t\t\t//Removal\n\t\t\t\tlet removalIndex = lastSegment;\n\t\t\t\tlet toRemove = parent.children[removalIndex];\n\t\t\t\tlet edit: Edit;\n\t\t\t\tif (parent.children.length === 1) {\n\t\t\t\t\t// only item\n\t\t\t\t\tedit = { offset: parent.offset + 1, length: parent.length - 2, content: '' };\n\t\t\t\t} else if (parent.children.length - 1 === removalIndex) {\n\t\t\t\t\t// last item\n\t\t\t\t\tlet previous = parent.children[removalIndex - 1];\n\t\t\t\t\tlet offset = previous.offset + previous.length;\n\t\t\t\t\tlet parentEndOffset = parent.offset + parent.length;\n\t\t\t\t\tedit = { offset, length: parentEndOffset - 2 - offset, content: '' };\n\t\t\t\t} else {\n\t\t\t\t\tedit = { offset: toRemove.offset, length: parent.children[removalIndex + 1].offset - toRemove.offset, content: '' };\n\t\t\t\t}\n\t\t\t\treturn withFormatting(text, edit, formattingOptions);\n\t\t\t} else {\n\t\t\t\tthrow new Error('Array modification not supported yet');\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthrow new Error(`Can not add ${typeof lastSegment !== 'number' ? 'index' : 'property'} to parent of type ${parent.type}`);\n\t}\n}\n\nfunction withFormatting(text: string, edit: Edit, formattingOptions: FormattingOptions): Edit[] {\n\t// apply the edit\n\tlet newText = applyEdit(text, edit);\n\n\t// format the new text\n\tlet begin = edit.offset;\n\tlet end = edit.offset + edit.content.length;\n\tif (edit.length === 0 || edit.content.length === 0) { // insert or remove\n\t\twhile (begin > 0 && !isEOL(newText, begin - 1)) {\n\t\t\tbegin--;\n\t\t}\n\t\twhile (end < newText.length && !isEOL(newText, end)) {\n\t\t\tend++;\n\t\t}\n\t}\n\n\tlet edits = format(newText, { offset: begin, length: end - begin }, formattingOptions);\n\n\t// apply the formatting edits and track the begin and end offsets of the changes\n\tfor (let i = edits.length - 1; i >= 0; i--) {\n\t\tlet edit = edits[i];\n\t\tnewText = applyEdit(newText, edit);\n\t\tbegin = Math.min(begin, edit.offset);\n\t\tend = Math.max(end, edit.offset + edit.length);\n\t\tend += edit.content.length - edit.length;\n\t}\n\t// create a single edit with all changes\n\tlet editLength = text.length - (newText.length - end) - begin;\n\treturn [{ offset: begin, length: editLength, content: newText.substring(begin, end) }];\n}\n\nexport function applyEdit(text: string, edit: Edit): string {\n\treturn text.substring(0, edit.offset) + edit.content + text.substring(edit.offset + edit.length);\n}\n\nexport function isWS(text: string, offset: number) {\n\treturn '\\r\\n \\t'.indexOf(text.charAt(offset)) !== -1;\n}","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { Range, FormattingOptions, Edit, SyntaxKind, ScanError} from '../main';\nimport { createScanner } from './scanner';\n\nexport function format(documentText: string, range: Range | undefined, options: FormattingOptions): Edit[] {\n\tlet initialIndentLevel: number;\n\tlet formatText: string;\n\tlet formatTextStart: number;\n\tlet rangeStart: number;\n\tlet rangeEnd: number;\n\tif (range) {\n\t\trangeStart = range.offset;\n\t\trangeEnd = rangeStart + range.length;\n\n\t\tformatTextStart = rangeStart;\n\t\twhile (formatTextStart > 0 && !isEOL(documentText, formatTextStart - 1)) {\n\t\t\tformatTextStart--;\n\t\t}\n\t\tlet endOffset = rangeEnd;\n\t\twhile (endOffset < documentText.length && !isEOL(documentText, endOffset)) {\n\t\t\tendOffset++;\n\t\t}\n\t\tformatText = documentText.substring(formatTextStart, endOffset);\n\t\tinitialIndentLevel = computeIndentLevel(formatText, options);\n\t} else {\n\t\tformatText = documentText;\n\t\tinitialIndentLevel = 0;\n\t\tformatTextStart = 0;\n\t\trangeStart = 0;\n\t\trangeEnd = documentText.length;\n\t}\n\tlet eol = getEOL(options, documentText);\n\n\tlet lineBreak = false;\n\tlet indentLevel = 0;\n\tlet indentValue: string;\n\tif (options.insertSpaces) {\n\t\tindentValue = repeat(' ', options.tabSize || 4);\n\t} else {\n\t\tindentValue = '\\t';\n\t}\n\n\tlet scanner = createScanner(formatText, false);\n\tlet hasError = false;\n\n\tfunction newLineAndIndent(): string {\n\t\treturn eol + repeat(indentValue, initialIndentLevel + indentLevel);\n\t}\n\tfunction scanNext(): SyntaxKind {\n\t\tlet token = scanner.scan();\n\t\tlineBreak = false;\n\t\twhile (token === SyntaxKind.Trivia || token === SyntaxKind.LineBreakTrivia) {\n\t\t\tlineBreak = lineBreak || (token === SyntaxKind.LineBreakTrivia);\n\t\t\ttoken = scanner.scan();\n\t\t}\n\t\thasError = token === SyntaxKind.Unknown || scanner.getTokenError() !== ScanError.None;\n\t\treturn token;\n\t}\n\tlet editOperations: Edit[] = [];\n\tfunction addEdit(text: string, startOffset: number, endOffset: number) {\n\t\tif (!hasError && startOffset < rangeEnd && endOffset > rangeStart && documentText.substring(startOffset, endOffset) !== text) {\n\t\t\teditOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });\n\t\t}\n\t}\n\n\tlet firstToken = scanNext();\n\n\tif (firstToken !== SyntaxKind.EOF) {\n\t\tlet firstTokenStart = scanner.getTokenOffset() + formatTextStart;\n\t\tlet initialIndent = repeat(indentValue, initialIndentLevel);\n\t\taddEdit(initialIndent, formatTextStart, firstTokenStart);\n\t}\n\n\twhile (firstToken !== SyntaxKind.EOF) {\n\t\tlet firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n\t\tlet secondToken = scanNext();\n\n\t\tlet replaceContent = '';\n\t\twhile (!lineBreak && (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia)) {\n\t\t\t// comments on the same line: keep them on the same line, but ignore them otherwise\n\t\t\tlet commentTokenStart = scanner.getTokenOffset() + formatTextStart;\n\t\t\taddEdit(' ', firstTokenEnd, commentTokenStart);\n\t\t\tfirstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n\t\t\treplaceContent = secondToken === SyntaxKind.LineCommentTrivia ? newLineAndIndent() : '';\n\t\t\tsecondToken = scanNext();\n\t\t}\n\n\t\tif (secondToken === SyntaxKind.CloseBraceToken) {\n\t\t\tif (firstToken !== SyntaxKind.OpenBraceToken) {\n\t\t\t\tindentLevel--;\n\t\t\t\treplaceContent = newLineAndIndent();\n\t\t\t}\n\t\t} else if (secondToken === SyntaxKind.CloseBracketToken) {\n\t\t\tif (firstToken !== SyntaxKind.OpenBracketToken) {\n\t\t\t\tindentLevel--;\n\t\t\t\treplaceContent = newLineAndIndent();\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (firstToken) {\n\t\t\t\tcase SyntaxKind.OpenBracketToken:\n\t\t\t\tcase SyntaxKind.OpenBraceToken:\n\t\t\t\t\tindentLevel++;\n\t\t\t\t\treplaceContent = newLineAndIndent();\n\t\t\t\t\tbreak;\n\t\t\t\tcase SyntaxKind.CommaToken:\n\t\t\t\tcase SyntaxKind.LineCommentTrivia:\n\t\t\t\t\treplaceContent = newLineAndIndent();\n\t\t\t\t\tbreak;\n\t\t\t\tcase SyntaxKind.BlockCommentTrivia:\n\t\t\t\t\tif (lineBreak) {\n\t\t\t\t\t\treplaceContent = newLineAndIndent();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// symbol following comment on the same line: keep on same line, separate with ' '\n\t\t\t\t\t\treplaceContent = ' ';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase SyntaxKind.ColonToken:\n\t\t\t\t\treplaceContent = ' ';\n\t\t\t\t\tbreak;\n\t\t\t\tcase SyntaxKind.StringLiteral:\n\t\t\t\t\tif (secondToken === SyntaxKind.ColonToken) {\n\t\t\t\t\t\treplaceContent = '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t// fall through\n\t\t\t\tcase SyntaxKind.NullKeyword:\n\t\t\t\tcase SyntaxKind.TrueKeyword:\n\t\t\t\tcase SyntaxKind.FalseKeyword:\n\t\t\t\tcase SyntaxKind.NumericLiteral:\n\t\t\t\tcase SyntaxKind.CloseBraceToken:\n\t\t\t\tcase SyntaxKind.CloseBracketToken:\n\t\t\t\t\tif (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia) {\n\t\t\t\t\t\treplaceContent = ' ';\n\t\t\t\t\t} else if (secondToken !== SyntaxKind.CommaToken && secondToken !== SyntaxKind.EOF) {\n\t\t\t\t\t\thasError = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase SyntaxKind.Unknown:\n\t\t\t\t\thasError = true;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (lineBreak && (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia)) {\n\t\t\t\treplaceContent = newLineAndIndent();\n\t\t\t}\n\n\t\t}\n\t\tlet secondTokenStart = scanner.getTokenOffset() + formatTextStart;\n\t\taddEdit(replaceContent, firstTokenEnd, secondTokenStart);\n\t\tfirstToken = secondToken;\n\t}\n\treturn editOperations;\n}\n\nfunction repeat(s: string, count: number): string {\n\tlet result = '';\n\tfor (let i = 0; i < count; i++) {\n\t\tresult += s;\n\t}\n\treturn result;\n}\n\nfunction computeIndentLevel(content: string, options: FormattingOptions): number {\n\tlet i = 0;\n\tlet nChars = 0;\n\tlet tabSize = options.tabSize || 4;\n\twhile (i < content.length) {\n\t\tlet ch = content.charAt(i);\n\t\tif (ch === ' ') {\n\t\t\tnChars++;\n\t\t} else if (ch === '\\t') {\n\t\t\tnChars += tabSize;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\treturn Math.floor(nChars / tabSize);\n}\n\nfunction getEOL(options: FormattingOptions, text: string): string {\n\tfor (let i = 0; i < text.length; i++) {\n\t\tlet ch = text.charAt(i);\n\t\tif (ch === '\\r') {\n\t\t\tif (i + 1 < text.length && text.charAt(i + 1) === '\\n') {\n\t\t\t\treturn '\\r\\n';\n\t\t\t}\n\t\t\treturn '\\r';\n\t\t} else if (ch === '\\n') {\n\t\t\treturn '\\n';\n\t\t}\n\t}\n\treturn (options && options.eol) || '\\n';\n}\n\nexport function isEOL(text: string, offset: number) {\n\treturn '\\r\\n'.indexOf(text.charAt(offset)) !== -1;\n}","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { createScanner } from './scanner';\nimport {\n\tScanError, SyntaxKind, Node, NodeType, Edit, JSONPath, FormattingOptions,\n\tModificationOptions, ParseError, ParseErrorCode, Location, Segment, ParseOptions, JSONVisitor\n} from '../main';\n\ninterface NodeImpl extends Node {\n\ttype: NodeType;\n\tvalue?: any;\n\toffset: number;\n\tlength: number;\n\tcolonOffset?: number;\n\tparent?: NodeImpl;\n\tchildren?: NodeImpl[];\n}\n\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport function getLocation(text: string, position: number): Location {\n\tlet segments: Segment[] = []; // strings or numbers\n\tlet earlyReturnException = new Object();\n\tlet previousNode: NodeImpl | undefined = void 0;\n\tconst previousNodeInst: NodeImpl = {\n\t\tvalue: {},\n\t\toffset: 0,\n\t\tlength: 0,\n\t\ttype: 'object',\n\t\tparent: void 0\n\t};\n\tlet isAtPropertyKey = false;\n\tfunction setPreviousNode(value: string, offset: number, length: number, type: NodeType) {\n\t\tpreviousNodeInst.value = value;\n\t\tpreviousNodeInst.offset = offset;\n\t\tpreviousNodeInst.length = length;\n\t\tpreviousNodeInst.type = type;\n\t\tpreviousNodeInst.colonOffset = void 0;\n\t\tpreviousNode = previousNodeInst;\n\t}\n\ttry {\n\n\t\tvisit(text, {\n\t\t\tonObjectBegin: (offset: number, length: number) => {\n\t\t\t\tif (position <= offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tpreviousNode = void 0;\n\t\t\t\tisAtPropertyKey = position > offset;\n\t\t\t\tsegments.push(''); // push a placeholder (will be replaced)\n\t\t\t},\n\t\t\tonObjectProperty: (name: string, offset: number, length: number) => {\n\t\t\t\tif (position < offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tsetPreviousNode(name, offset, length, 'property');\n\t\t\t\tsegments[segments.length - 1] = name;\n\t\t\t\tif (position <= offset + length) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonObjectEnd: (offset: number, length: number) => {\n\t\t\t\tif (position <= offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tpreviousNode = void 0;\n\t\t\t\tsegments.pop();\n\t\t\t},\n\t\t\tonArrayBegin: (offset: number, length: number) => {\n\t\t\t\tif (position <= offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tpreviousNode = void 0;\n\t\t\t\tsegments.push(0);\n\t\t\t},\n\t\t\tonArrayEnd: (offset: number, length: number) => {\n\t\t\t\tif (position <= offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tpreviousNode = void 0;\n\t\t\t\tsegments.pop();\n\t\t\t},\n\t\t\tonLiteralValue: (value: any, offset: number, length: number) => {\n\t\t\t\tif (position < offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tsetPreviousNode(value, offset, length, getLiteralNodeType(value));\n\n\t\t\t\tif (position <= offset + length) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonSeparator: (sep: string, offset: number, length: number) => {\n\t\t\t\tif (position <= offset) {\n\t\t\t\t\tthrow earlyReturnException;\n\t\t\t\t}\n\t\t\t\tif (sep === ':' && previousNode && previousNode.type === 'property') {\n\t\t\t\t\tpreviousNode.colonOffset = offset;\n\t\t\t\t\tisAtPropertyKey = false;\n\t\t\t\t\tpreviousNode = void 0;\n\t\t\t\t} else if (sep === ',') {\n\t\t\t\t\tlet last = segments[segments.length - 1];\n\t\t\t\t\tif (typeof last === 'number') {\n\t\t\t\t\t\tsegments[segments.length - 1] = last + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tisAtPropertyKey = true;\n\t\t\t\t\t\tsegments[segments.length - 1] = '';\n\t\t\t\t\t}\n\t\t\t\t\tpreviousNode = void 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} catch (e) {\n\t\tif (e !== earlyReturnException) {\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\treturn {\n\t\tpath: segments,\n\t\tpreviousNode,\n\t\tisAtPropertyKey,\n\t\tmatches: (pattern: Segment[]) => {\n\t\t\tlet k = 0;\n\t\t\tfor (let i = 0; k < pattern.length && i < segments.length; i++) {\n\t\t\t\tif (pattern[k] === segments[i] || pattern[k] === '*') {\n\t\t\t\t\tk++;\n\t\t\t\t} else if (pattern[k] !== '**') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn k === pattern.length;\n\t\t}\n\t};\n}\n\n\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore always check the errors list to find out if the input was valid.\n */\nexport function parse(text: string, errors: ParseError[] = [], options?: ParseOptions): any {\n\tlet currentProperty: string | null = null;\n\tlet currentParent: any = [];\n\tlet previousParents: any[] = [];\n\n\tfunction onValue(value: any) {\n\t\tif (Array.isArray(currentParent)) {\n\t\t\t(<any[]>currentParent).push(value);\n\t\t} else if (currentProperty) {\n\t\t\tcurrentParent[currentProperty] = value;\n\t\t}\n\t}\n\n\tlet visitor: JSONVisitor = {\n\t\tonObjectBegin: () => {\n\t\t\tlet object = {};\n\t\t\tonValue(object);\n\t\t\tpreviousParents.push(currentParent);\n\t\t\tcurrentParent = object;\n\t\t\tcurrentProperty = null;\n\t\t},\n\t\tonObjectProperty: (name: string) => {\n\t\t\tcurrentProperty = name;\n\t\t},\n\t\tonObjectEnd: () => {\n\t\t\tcurrentParent = previousParents.pop();\n\t\t},\n\t\tonArrayBegin: () => {\n\t\t\tlet array: any[] = [];\n\t\t\tonValue(array);\n\t\t\tpreviousParents.push(currentParent);\n\t\t\tcurrentParent = array;\n\t\t\tcurrentProperty = null;\n\t\t},\n\t\tonArrayEnd: () => {\n\t\t\tcurrentParent = previousParents.pop();\n\t\t},\n\t\tonLiteralValue: onValue,\n\t\tonError: (error: ParseErrorCode, offset: number, length: number) => {\n\t\t\terrors.push({ error, offset, length });\n\t\t}\n\t};\n\tvisit(text, visitor, options);\n\treturn currentParent[0];\n}\n\n\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport function parseTree(text: string, errors: ParseError[] = [], options?: ParseOptions): Node {\n\tlet currentParent: NodeImpl = { type: 'array', offset: -1, length: -1, children: [], parent: void 0 }; // artificial root\n\n\tfunction ensurePropertyComplete(endOffset: number) {\n\t\tif (currentParent.type === 'property') {\n\t\t\tcurrentParent.length = endOffset - currentParent.offset;\n\t\t\tcurrentParent = currentParent.parent!;\n\t\t}\n\t}\n\n\tfunction onValue(valueNode: Node): Node {\n\t\tcurrentParent.children!.push(valueNode);\n\t\treturn valueNode;\n\t}\n\n\tlet visitor: JSONVisitor = {\n\t\tonObjectBegin: (offset: number) => {\n\t\t\tcurrentParent = onValue({ type: 'object', offset, length: -1, parent: currentParent, children: [] });\n\t\t},\n\t\tonObjectProperty: (name: string, offset: number, length: number) => {\n\t\t\tcurrentParent = onValue({ type: 'property', offset, length: -1, parent: currentParent, children: [] });\n\t\t\tcurrentParent.children!.push({ type: 'string', value: name, offset, length, parent: currentParent });\n\t\t},\n\t\tonObjectEnd: (offset: number, length: number) => {\n\t\t\tcurrentParent.length = offset + length - currentParent.offset;\n\t\t\tcurrentParent = currentParent.parent!;\n\t\t\tensurePropertyComplete(offset + length);\n\t\t},\n\t\tonArrayBegin: (offset: number, length: number) => {\n\t\t\tcurrentParent = onValue({ type: 'array', offset, length: -1, parent: currentParent, children: [] });\n\t\t},\n\t\tonArrayEnd: (offset: number, length: number) => {\n\t\t\tcurrentParent.length = offset + length - currentParent.offset;\n\t\t\tcurrentParent = currentParent.parent!;\n\t\t\tensurePropertyComplete(offset + length);\n\t\t},\n\t\tonLiteralValue: (value: any, offset: number, length: number) => {\n\t\t\tonValue({ type: getLiteralNodeType(value), offset, length, parent: currentParent, value });\n\t\t\tensurePropertyComplete(offset + length);\n\t\t},\n\t\tonSeparator: (sep: string, offset: number, length: number) => {\n\t\t\tif (currentParent.type === 'property') {\n\t\t\t\tif (sep === ':') {\n\t\t\t\t\tcurrentParent.colonOffset = offset;\n\t\t\t\t} else if (sep === ',') {\n\t\t\t\t\tensurePropertyComplete(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonError: (error: ParseErrorCode, offset: number, length: number) => {\n\t\t\terrors.push({ error, offset, length });\n\t\t}\n\t};\n\tvisit(text, visitor, options);\n\n\tlet result = currentParent.children![0];\n\tif (result) {\n\t\tdelete result.parent;\n\t}\n\treturn result;\n}\n\n/**\n * Finds the node at the given path in a JSON DOM.\n */\nexport function findNodeAtLocation(root: Node, path: JSONPath): Node | undefined {\n\tif (!root) {\n\t\treturn void 0;\n\t}\n\tlet node = root;\n\tfor (let segment of path) {\n\t\tif (typeof segment === 'string') {\n\t\t\tif (node.type !== 'object' || !Array.isArray(node.children)) {\n\t\t\t\treturn void 0;\n\t\t\t}\n\t\t\tlet found = false;\n\t\t\tfor (let propertyNode of node.children) {\n\t\t\t\tif (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment) {\n\t\t\t\t\tnode = propertyNode.children[1];\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\treturn void 0;\n\t\t\t}\n\t\t} else {\n\t\t\tlet index = <number>segment;\n\t\t\tif (node.type !== 'array' || index < 0 || !Array.isArray(node.children) || index >= node.children.length) {\n\t\t\t\treturn void 0;\n\t\t\t}\n\t\t\tnode = node.children[index];\n\t\t}\n\t}\n\treturn node;\n}\n\n/**\n * Gets the JSON path of the given JSON DOM node\n */\nexport function getNodePath(node: Node): JSONPath {\n\tif (!node.parent || !node.parent.children) {\n\t\treturn [];\n\t}\n\tlet path = getNodePath(node.parent);\n\tif (node.parent.type === 'property') {\n\t\tlet key = node.parent.children[0].value\n\t\tpath.push(key);\n\t} else if (node.parent.type === 'array') {\n\t\tlet index = node.parent.children.indexOf(node);\n\t\tif (index !== -1) {\n\t\t\tpath.push(index);\n\t\t}\n\t}\n\treturn path;\n}\n\n/**\n * Evaluates the JavaScript object of the given JSON DOM node \n */\nexport function getNodeValue(node: Node): any {\n\tswitch (node.type) {\n\t\tcase 'array':\n\t\t\treturn node.children!.map(getNodeValue);\n\t\tcase 'object':\n\t\t\tlet obj = Object.create(null);\n\t\t\tfor (let prop of node.children!) {\n\t\t\t\tlet valueNode = prop.children![1];\n\t\t\t\tif (valueNode) {\n\t\t\t\t\tobj[prop.children![0].value] = getNodeValue(valueNode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\tcase 'null':\n\t\tcase 'string':\n\t\tcase 'number':\n\t\tcase 'boolean':\n\t\t\treturn node.value;\n\t\tdefault:\n\t\t\treturn void 0;\n\t}\n\n}\n\nexport function contains(node: Node, offset: number, includeRightBound = false): boolean {\n\treturn (offset >= node.offset && offset < (node.offset + node.length)) || includeRightBound && (offset === (node.offset + node.length));\n}\n\n/**\n * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\nexport function findNodeAtOffset(node: Node, offset: number, includeRightBound = false): Node | undefined {\n\tif (contains(node, offset, includeRightBound)) {\n\t\tlet children = node.children;\n\t\tif (Array.isArray(children)) {\n\t\t\tfor (let i = 0; i < children.length && children[i].offset <= offset; i++) {\n\t\t\t\tlet item = findNodeAtOffset(children[i], offset, includeRightBound);\n\t\t\t\tif (item) {\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn node;\n\t}\n\treturn void 0;\n}\n\n\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport function visit(text: string, visitor: JSONVisitor, options?: ParseOptions): any {\n\n\tlet _scanner = createScanner(text, false);\n\n\tfunction toNoArgVisit(visitFunction?: (offset: number, length: number) => void): () => void {\n\t\treturn visitFunction ? () => visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength()) : () => true;\n\t}\n\tfunction toOneArgVisit<T>(visitFunction?: (arg: T, offset: number, length: number) => void): (arg: T) => void {\n\t\treturn visitFunction ? (arg: T) => visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength()) : () => true;\n\t}\n\n\tlet onObjectBegin = toNoArgVisit(visitor.onObjectBegin),\n\t\tonObjectProperty = toOneArgVisit(visitor.onObjectProperty),\n\t\tonObjectEnd = toNoArgVisit(visitor.onObjectEnd),\n\t\tonArrayBegin = toNoArgVisit(visitor.onArrayBegin),\n\t\tonArrayEnd = toNoArgVisit(visitor.onArrayEnd),\n\t\tonLiteralValue = toOneArgVisit(visitor.onLiteralValue),\n\t\tonSeparator = toOneArgVisit(visitor.onSeparator),\n\t\tonComment = toNoArgVisit(visitor.onComment),\n\t\tonError = toOneArgVisit(visitor.onError);\n\n\tlet disallowComments = options && options.disallowComments;\n\tlet allowTrailingComma = options && options.allowTrailingComma;\n\tfunction scanNext(): SyntaxKind {\n\t\twhile (true) {\n\t\t\tlet token = _scanner.scan();\n\t\t\tswitch (_scanner.getTokenError()) {\n\t\t\t\tcase ScanError.InvalidUnicode:\n\t\t\t\t\thandleError(ParseErrorCode.InvalidUnicode);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ScanError.InvalidEscapeCharacter:\n\t\t\t\t\thandleError(ParseErrorCode.InvalidEscapeCharacter);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ScanError.UnexpectedEndOfNumber:\n\t\t\t\t\thandleError(ParseErrorCode.UnexpectedEndOfNumber);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ScanError.UnexpectedEndOfComment:\n\t\t\t\t\tif (!disallowComments) {\n\t\t\t\t\t\thandleError(ParseErrorCode.UnexpectedEndOfComment);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase ScanError.UnexpectedEndOfString:\n\t\t\t\t\thandleError(ParseErrorCode.UnexpectedEndOfString);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ScanError.InvalidCharacter:\n\t\t\t\t\thandleError(ParseErrorCode.InvalidCharacter);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tswitch (token) {\n\t\t\t\tcase SyntaxKind.LineCommentTrivia:\n\t\t\t\tcase SyntaxKind.BlockCommentTrivia:\n\t\t\t\t\tif (disallowComments) {\n\t\t\t\t\t\thandleError(ParseErrorCode.InvalidCommentToken);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonComment();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase SyntaxKind.Unknown:\n\t\t\t\t\thandleError(ParseErrorCode.InvalidSymbol);\n\t\t\t\t\tbreak;\n\t\t\t\tcase SyntaxKind.Trivia:\n\t\t\t\tcase SyntaxKind.LineBreakTrivia:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn token;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleError(error: ParseErrorCode, skipUntilAfter: SyntaxKind[] = [], skipUntil: SyntaxKind[] = []): void {\n\t\tonError(error);\n\t\tif (skipUntilAfter.length + skipUntil.length > 0) {\n\t\t\tlet token = _scanner.getToken();\n\t\t\twhile (token !== SyntaxKind.EOF) {\n\t\t\t\tif (skipUntilAfter.indexOf(token) !== -1) {\n\t\t\t\t\tscanNext();\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (skipUntil.indexOf(token) !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\ttoken = scanNext();\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction parseString(isValue: boolean): boolean {\n\t\tlet value = _scanner.getTokenValue();\n\t\tif (isValue) {\n\t\t\tonLiteralValue(value);\n\t\t} else {\n\t\t\tonObjectProperty(value);\n\t\t}\n\t\tscanNext();\n\t\treturn true;\n\t}\n\n\tfunction parseLiteral(): boolean {\n\t\tswitch (_scanner.getToken()) {\n\t\t\tcase SyntaxKind.NumericLiteral:\n\t\t\t\tlet value = 0;\n\t\t\t\ttry {\n\t\t\t\t\tvalue = JSON.parse(_scanner.getTokenValue());\n\t\t\t\t\tif (typeof value !== 'number') {\n\t\t\t\t\t\thandleError(ParseErrorCode.InvalidNumberFormat);\n\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\thandleError(ParseErrorCode.InvalidNumberFormat);\n\t\t\t\t}\n\t\t\t\tonLiteralValue(value);\n\t\t\t\tbreak;\n\t\t\tcase SyntaxKind.NullKeyword:\n\t\t\t\tonLiteralValue(null);\n\t\t\t\tbreak;\n\t\t\tcase SyntaxKind.TrueKeyword:\n\t\t\t\tonLiteralValue(true);\n\t\t\t\tbreak;\n\t\t\tcase SyntaxKind.FalseKeyword:\n\t\t\t\tonLiteralValue(false);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t\tscanNext();\n\t\treturn true;\n\t}\n\n\tfunction parseProperty(): boolean {\n\t\tif (_scanner.getToken() !== SyntaxKind.StringLiteral) {\n\t\t\thandleError(ParseErrorCode.PropertyNameExpected, [], [SyntaxKind.CloseBraceToken, SyntaxKind.CommaToken]);\n\t\t\treturn false;\n\t\t}\n\t\tparseString(false);\n\t\tif (_scanner.getToken() === SyntaxKind.ColonToken) {\n\t\t\tonSeparator(':');\n\t\t\tscanNext(); // consume colon\n\n\t\t\tif (!parseValue()) {\n\t\t\t\thandleError(ParseErrorCode.ValueExpected, [], [SyntaxKind.CloseBraceToken, SyntaxKind.CommaToken]);\n\t\t\t}\n\t\t} else {\n\t\t\thandleError(ParseErrorCode.ColonExpected, [], [SyntaxKind.CloseBraceToken, SyntaxKind.CommaToken]);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction parseObject(): boolean {\n\t\tonObjectBegin();\n\t\tscanNext(); // consume open brace\n\n\t\tlet needsComma = false;\n\t\twhile (_scanner.getToken() !== SyntaxKind.CloseBraceToken && _scanner.getToken() !== SyntaxKind.EOF) {\n\t\t\tif (_scanner.getToken() === SyntaxKind.CommaToken) {\n\t\t\t\tif (!needsComma) {\n\t\t\t\t\thandleError(ParseErrorCode.ValueExpected, [], []);\n\t\t\t\t}\n\t\t\t\tonSeparator(',');\n\t\t\t\tscanNext(); // consume comma\n\t\t\t\tif (_scanner.getToken() === SyntaxKind.CloseBraceToken && allowTrailingComma) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (needsComma) {\n\t\t\t\thandleError(ParseErrorCode.CommaExpected, [], []);\n\t\t\t}\n\t\t\tif (!parseProperty()) {\n\t\t\t\thandleError(ParseErrorCode.ValueExpected, [], [SyntaxKind.CloseBraceToken, SyntaxKind.CommaToken]);\n\t\t\t}\n\t\t\tneedsComma = true;\n\t\t}\n\t\tonObjectEnd();\n\t\tif (_scanner.getToken() !== SyntaxKind.CloseBraceToken) {\n\t\t\thandleError(ParseErrorCode.CloseBraceExpected, [SyntaxKind.CloseBraceToken], []);\n\t\t} else {\n\t\t\tscanNext(); // consume close brace\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction parseArray(): boolean {\n\t\tonArrayBegin();\n\t\tscanNext(); // consume open bracket\n\n\t\tlet needsComma = false;\n\t\twhile (_scanner.getToken() !== SyntaxKind.CloseBracketToken && _scanner.getToken() !== SyntaxKind.EOF) {\n\t\t\tif (_scanner.getToken() === SyntaxKind.CommaToken) {\n\t\t\t\tif (!needsComma) {\n\t\t\t\t\thandleError(ParseErrorCode.ValueExpected, [], []);\n\t\t\t\t}\n\t\t\t\tonSeparator(',');\n\t\t\t\tscanNext(); // consume comma\n\t\t\t\tif (_scanner.getToken() === SyntaxKind.CloseBracketToken && allowTrailingComma) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (needsComma) {\n\t\t\t\thandleError(ParseErrorCode.CommaExpected, [], []);\n\t\t\t}\n\t\t\tif (!parseValue()) {\n\t\t\t\thandleError(ParseErrorCode.ValueExpected, [], [SyntaxKind.CloseBracketToken, SyntaxKind.CommaToken]);\n\t\t\t}\n\t\t\tneedsComma = true;\n\t\t}\n\t\tonArrayEnd();\n\t\tif (_scanner.getToken() !== SyntaxKind.CloseBracketToken) {\n\t\t\thandleError(ParseErrorCode.CloseBracketExpected, [SyntaxKind.CloseBracketToken], []);\n\t\t} else {\n\t\t\tscanNext(); // consume close bracket\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction parseValue(): boolean {\n\t\tswitch (_scanner.getToken()) {\n\t\t\tcase SyntaxKind.OpenBracketToken:\n\t\t\t\treturn parseArray();\n\t\t\tcase SyntaxKind.OpenBraceToken:\n\t\t\t\treturn parseObject();\n\t\t\tcase SyntaxKind.StringLiteral:\n\t\t\t\treturn parseString(true);\n\t\t\tdefault:\n\t\t\t\treturn parseLiteral();\n\t\t}\n\t}\n\n\tscanNext();\n\tif (_scanner.getToken() === SyntaxKind.EOF) {\n\t\treturn true;\n\t}\n\tif (!parseValue()) {\n\t\thandleError(ParseErrorCode.ValueExpected, [], []);\n\t\treturn false;\n\t}\n\tif (_scanner.getToken() !== SyntaxKind.EOF) {\n\t\thandleError(ParseErrorCode.EndOfFileExpected, [], []);\n\t}\n\treturn true;\n}\n\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport function stripComments(text: string, replaceCh?: string): string {\n\n\tlet _scanner = createScanner(text),\n\t\tparts: string[] = [],\n\t\tkind: SyntaxKind,\n\t\toffset = 0,\n\t\tpos: number;\n\n\tdo {\n\t\tpos = _scanner.getPosition();\n\t\tkind = _scanner.scan();\n\t\tswitch (kind) {\n\t\t\tcase SyntaxKind.LineCommentTrivia:\n\t\t\tcase SyntaxKind.BlockCommentTrivia:\n\t\t\tcase SyntaxKind.EOF:\n\t\t\t\tif (offset !== pos) {\n\t\t\t\t\tparts.push(text.substring(offset, pos));\n\t\t\t\t}\n\t\t\t\tif (replaceCh !== void 0) {\n\t\t\t\t\tparts.push(_scanner.getTokenValue().replace(/[^\\r\\n]/g, replaceCh));\n\t\t\t\t}\n\t\t\t\toffset = _scanner.getPosition();\n\t\t\t\tbreak;\n\t\t}\n\t} while (kind !== SyntaxKind.EOF);\n\n\treturn parts.join('');\n}\n\nfunction getLiteralNodeType(value: any): NodeType {\n\tswitch (typeof value) {\n\t\tcase 'boolean': return 'boolean';\n\t\tcase 'number': return 'number';\n\t\tcase 'string': return 'string';\n\t\tdefault: return 'null';\n\t}\n}","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { ScanError, SyntaxKind, JSONScanner } from '../main';\n\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport function createScanner(text: string, ignoreTrivia: boolean = false): JSONScanner {\n\n\tlet pos = 0,\n\t\tlen = text.length,\n\t\tvalue: string = '',\n\t\ttokenOffset = 0,\n\t\ttoken: SyntaxKind = SyntaxKind.Unknown,\n\t\tscanError: ScanError = ScanError.None;\n\n\tfunction scanHexDigits(count: number, exact?: boolean): number {\n\t\tlet digits = 0;\n\t\tlet value = 0;\n\t\twhile (digits < count || !exact) {\n\t\t\tlet ch = text.charCodeAt(pos);\n\t\t\tif (ch >= CharacterCodes._0 && ch <= CharacterCodes._9) {\n\t\t\t\tvalue = value * 16 + ch - CharacterCodes._0;\n\t\t\t}\n\t\t\telse if (ch >= CharacterCodes.A && ch <= CharacterCodes.F) {\n\t\t\t\tvalue = value * 16 + ch - CharacterCodes.A + 10;\n\t\t\t}\n\t\t\telse if (ch >= CharacterCodes.a && ch <= CharacterCodes.f) {\n\t\t\t\tvalue = value * 16 + ch - CharacterCodes.a + 10;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tpos++;\n\t\t\tdigits++;\n\t\t}\n\t\tif (digits < count) {\n\t\t\tvalue = -1;\n\t\t}\n\t\treturn value;\n\t}\n\n\tfunction setPosition(newPosition: number) {\n\t\tpos = newPosition;\n\t\tvalue = '';\n\t\ttokenOffset = 0;\n\t\ttoken = SyntaxKind.Unknown;\n\t\tscanError = ScanError.None;\n\t}\n\n\tfunction scanNumber(): string {\n\t\tlet start = pos;\n\t\tif (text.charCodeAt(pos) === CharacterCodes._0) {\n\t\t\tpos++;\n\t\t} else {\n\t\t\tpos++;\n\t\t\twhile (pos < text.length && isDigit(text.charCodeAt(pos))) {\n\t\t\t\tpos++;\n\t\t\t}\n\t\t}\n\t\tif (pos < text.length && text.charCodeAt(pos) === CharacterCodes.dot) {\n\t\t\tpos++;\n\t\t\tif (pos < text.length && isDigit(text.charCodeAt(pos))) {\n\t\t\t\tpos++;\n\t\t\t\twhile (pos < text.length && isDigit(text.charCodeAt(pos))) {\n\t\t\t\t\tpos++;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tscanError = ScanError.UnexpectedEndOfNumber;\n\t\t\t\treturn text.substring(start, pos);\n\t\t\t}\n\t\t}\n\t\tlet end = pos;\n\t\tif (pos < text.length && (text.charCodeAt(pos) === CharacterCodes.E || text.charCodeAt(pos) === CharacterCodes.e)) {\n\t\t\tpos++;\n\t\t\tif (pos < text.length && text.charCodeAt(pos) === CharacterCodes.plus || text.charCodeAt(pos) === CharacterCodes.minus) {\n\t\t\t\tpos++;\n\t\t\t}\n\t\t\tif (pos < text.length && isDigit(text.charCodeAt(pos))) {\n\t\t\t\tpos++;\n\t\t\t\twhile (pos < text.length && isDigit(text.charCodeAt(pos))) {\n\t\t\t\t\tpos++;\n\t\t\t\t}\n\t\t\t\tend = pos;\n\t\t\t} else {\n\t\t\t\tscanError = ScanError.UnexpectedEndOfNumber;\n\t\t\t}\n\t\t}\n\t\treturn text.substring(start, end);\n\t}\n\n\tfunction scanString(): string {\n\n\t\tlet result = '',\n\t\t\tstart = pos;\n\n\t\twhile (true) {\n\t\t\tif (pos >= len) {\n\t\t\t\tresult += text.substring(start, pos);\n\t\t\t\tscanError = ScanError.UnexpectedEndOfString;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet ch = text.charCodeAt(pos);\n\t\t\tif (ch === CharacterCodes.doubleQuote) {\n\t\t\t\tresult += text.substring(start, pos);\n\t\t\t\tpos++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (ch === CharacterCodes.backslash) {\n\t\t\t\tresult += text.substring(start, pos);\n\t\t\t\tpos++;\n\t\t\t\tif (pos >= len) {\n\t\t\t\t\tscanError = ScanError.UnexpectedEndOfString;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tch = text.charCodeAt(pos++);\n\t\t\t\tswitch (ch) {\n\t\t\t\t\tcase CharacterCodes.doubleQuote:\n\t\t\t\t\t\tresult += '\\\"';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.backslash:\n\t\t\t\t\t\tresult += '\\\\';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.slash:\n\t\t\t\t\t\tresult += '/';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.b:\n\t\t\t\t\t\tresult += '\\b';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.f:\n\t\t\t\t\t\tresult += '\\f';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.n:\n\t\t\t\t\t\tresult += '\\n';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.r:\n\t\t\t\t\t\tresult += '\\r';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.t:\n\t\t\t\t\t\tresult += '\\t';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CharacterCodes.u:\n\t\t\t\t\t\tlet ch = scanHexDigits(4, true);\n\t\t\t\t\t\tif (ch >= 0) {\n\t\t\t\t\t\t\tresult += String.fromCharCode(ch);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tscanError = ScanError.InvalidUnicode;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tscanError = ScanError.InvalidEscapeCharacter;\n\t\t\t\t}\n\t\t\t\tstart = pos;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch >= 0 && ch <= 0x1f) {\n\t\t\t\tif (isLineBreak(ch)) {\n\t\t\t\t\tresult += text.substring(start, pos);\n\t\t\t\t\tscanError = ScanError.UnexpectedEndOfString;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tscanError = ScanError.InvalidCharacter;\n\t\t\t\t\t// mark as error but continue with string\n\t\t\t\t}\n\t\t\t}\n\t\t\tpos++;\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction scanNext(): SyntaxKind {\n\n\t\tvalue = '';\n\t\tscanError = ScanError.None;\n\n\t\ttokenOffset = pos;\n\n\t\tif (pos >= len) {\n\t\t\t// at the end\n\t\t\ttokenOffset = len;\n\t\t\treturn token = SyntaxKind.EOF;\n\t\t}\n\n\t\tlet code = text.charCodeAt(pos);\n\t\t// trivia: whitespace\n\t\tif (isWhiteSpace(code)) {\n\t\t\tdo {\n\t\t\t\tpos++;\n\t\t\t\tvalue += String.fromCharCode(code);\n\t\t\t\tcode = text.charCodeAt(pos);\n\t\t\t} while (isWhiteSpace(code));\n\n\t\t\treturn token = SyntaxKind.Trivia;\n\t\t}\n\n\t\t// trivia: newlines\n\t\tif (isLineBreak(code)) {\n\t\t\tpos++;\n\t\t\tvalue += String.fromCharCode(code);\n\t\t\tif (code === CharacterCodes.carriageReturn && text.charCodeAt(pos) === CharacterCodes.lineFeed) {\n\t\t\t\tpos++;\n\t\t\t\tvalue += '\\n';\n\t\t\t}\n\t\t\treturn token = SyntaxKind.LineBreakTrivia;\n\t\t}\n\n\t\tswitch (code) {\n\t\t\t// tokens: []{}:,\n\t\t\tcase CharacterCodes.openBrace:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.OpenBraceToken;\n\t\t\tcase CharacterCodes.closeBrace:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.CloseBraceToken;\n\t\t\tcase CharacterCodes.openBracket:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.OpenBracketToken;\n\t\t\tcase CharacterCodes.closeBracket:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.CloseBracketToken;\n\t\t\tcase CharacterCodes.colon:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.ColonToken;\n\t\t\tcase CharacterCodes.comma:\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.CommaToken;\n\n\t\t\t// strings\n\t\t\tcase CharacterCodes.doubleQuote:\n\t\t\t\tpos++;\n\t\t\t\tvalue = scanString();\n\t\t\t\treturn token = SyntaxKind.StringLiteral;\n\n\t\t\t// comments\n\t\t\tcase CharacterCodes.slash:\n\t\t\t\tlet start = pos - 1;\n\t\t\t\t// Single-line comment\n\t\t\t\tif (text.charCodeAt(pos + 1) === CharacterCodes.slash) {\n\t\t\t\t\tpos += 2;\n\n\t\t\t\t\twhile (pos < len) {\n\t\t\t\t\t\tif (isLineBreak(text.charCodeAt(pos))) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpos++;\n\n\t\t\t\t\t}\n\t\t\t\t\tvalue = text.substring(start, pos);\n\t\t\t\t\treturn token = SyntaxKind.LineCommentTrivia;\n\t\t\t\t}\n\n\t\t\t\t// Multi-line comment\n\t\t\t\tif (text.charCodeAt(pos + 1) === CharacterCodes.asterisk) {\n\t\t\t\t\tpos += 2;\n\n\t\t\t\t\tlet commentClosed = false;\n\t\t\t\t\twhile (pos < len) {\n\t\t\t\t\t\tlet ch = text.charCodeAt(pos);\n\n\t\t\t\t\t\tif (ch === CharacterCodes.asterisk && (pos + 1 < len) && text.charCodeAt(pos + 1) === CharacterCodes.slash) {\n\t\t\t\t\t\t\tpos += 2;\n\t\t\t\t\t\t\tcommentClosed = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpos++;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!commentClosed) {\n\t\t\t\t\t\tpos++;\n\t\t\t\t\t\tscanError = ScanError.UnexpectedEndOfComment;\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = text.substring(start, pos);\n\t\t\t\t\treturn token = SyntaxKind.BlockCommentTrivia;\n\t\t\t\t}\n\t\t\t\t// just a single slash\n\t\t\t\tvalue += String.fromCharCode(code);\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.Unknown;\n\n\t\t\t// numbers\n\t\t\tcase CharacterCodes.minus:\n\t\t\t\tvalue += String.fromCharCode(code);\n\t\t\t\tpos++;\n\t\t\t\tif (pos === len || !isDigit(text.charCodeAt(pos))) {\n\t\t\t\t\treturn token = SyntaxKind.Unknown;\n\t\t\t\t}\n\t\t\t// found a minus, followed by a number so\n\t\t\t// we fall through to proceed with scanning\n\t\t\t// numbers\n\t\t\tcase CharacterCodes._0:\n\t\t\tcase CharacterCodes._1:\n\t\t\tcase CharacterCodes._2:\n\t\t\tcase CharacterCodes._3:\n\t\t\tcase CharacterCodes._4:\n\t\t\tcase CharacterCodes._5:\n\t\t\tcase CharacterCodes._6:\n\t\t\tcase CharacterCodes._7:\n\t\t\tcase CharacterCodes._8:\n\t\t\tcase CharacterCodes._9:\n\t\t\t\tvalue += scanNumber();\n\t\t\t\treturn token = SyntaxKind.NumericLiteral;\n\t\t\t// literals and unknown symbols\n\t\t\tdefault:\n\t\t\t\t// is a literal? Read the full word.\n\t\t\t\twhile (pos < len && isUnknownContentCharacter(code)) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tcode = text.charCodeAt(pos);\n\t\t\t\t}\n\t\t\t\tif (tokenOffset !== pos) {\n\t\t\t\t\tvalue = text.substring(tokenOffset, pos);\n\t\t\t\t\t// keywords: true, false, null\n\t\t\t\t\tswitch (value) {\n\t\t\t\t\t\tcase 'true': return token = SyntaxKind.TrueKeyword;\n\t\t\t\t\t\tcase 'false': return token = SyntaxKind.FalseKeyword;\n\t\t\t\t\t\tcase 'null': return token = SyntaxKind.NullKeyword;\n\t\t\t\t\t}\n\t\t\t\t\treturn token = SyntaxKind.Unknown;\n\t\t\t\t}\n\t\t\t\t// some\n\t\t\t\tvalue += String.fromCharCode(code);\n\t\t\t\tpos++;\n\t\t\t\treturn token = SyntaxKind.Unknown;\n\t\t}\n\t}\n\n\tfunction isUnknownContentCharacter(code: CharacterCodes) {\n\t\tif (isWhiteSpace(code) || isLineBreak(code)) {\n\t\t\treturn false;\n\t\t}\n\t\tswitch (code) {\n\t\t\tcase CharacterCodes.closeBrace:\n\t\t\tcase CharacterCodes.closeBracket:\n\t\t\tcase CharacterCodes.openBrace:\n\t\t\tcase CharacterCodes.openBracket:\n\t\t\tcase CharacterCodes.doubleQuote:\n\t\t\tcase CharacterCodes.colon:\n\t\t\tcase CharacterCodes.comma:\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\n\tfunction scanNextNonTrivia(): SyntaxKind {\n\t\tlet result: SyntaxKind;\n\t\tdo {\n\t\t\tresult = scanNext();\n\t\t} while (result >= SyntaxKind.LineCommentTrivia && result <= SyntaxKind.Trivia);\n\t\treturn result;\n\t}\n\n\treturn {\n\t\tsetPosition: setPosition,\n\t\tgetPosition: () => pos,\n\t\tscan: ignoreTrivia ? scanNextNonTrivia : scanNext,\n\t\tgetToken: () => token,\n\t\tgetTokenValue: () => value,\n\t\tgetTokenOffset: () => tokenOffset,\n\t\tgetTokenLength: () => pos - tokenOffset,\n\t\tgetTokenError: () => scanError\n\t};\n}\n\nfunction isWhiteSpace(ch: number): boolean {\n\treturn ch === CharacterCodes.space || ch === CharacterCodes.tab || ch === CharacterCodes.verticalTab || ch === CharacterCodes.formFeed ||\n\t\tch === CharacterCodes.nonBreakingSpace || ch === CharacterCodes.ogham || ch >= CharacterCodes.enQuad && ch <= CharacterCodes.zeroWidthSpace ||\n\t\tch === CharacterCodes.narrowNoBreakSpace || ch === CharacterCodes.mathematicalSpace || ch === CharacterCodes.ideographicSpace || ch === CharacterCodes.byteOrderMark;\n}\n\nfunction isLineBreak(ch: number): boolean {\n\treturn ch === CharacterCodes.lineFeed || ch === CharacterCodes.carriageReturn || ch === CharacterCodes.lineSeparator || ch === CharacterCodes.paragraphSeparator;\n}\n\nfunction isDigit(ch: number): boolean {\n\treturn ch >= CharacterCodes._0 && ch <= CharacterCodes._9;\n}\n\nconst enum CharacterCodes {\n\tnullCharacter = 0,\n\tmaxAsciiCharacter = 0x7F,\n\n\tlineFeed = 0x0A,              // \\n\n\tcarriageReturn = 0x0D,        // \\r\n\tlineSeparator = 0x2028,\n\tparagraphSeparator = 0x2029,\n\n\t// REVIEW: do we need to support this?  The scanner doesn't, but our IText does.  This seems\n\t// like an odd disparity?  (Or maybe it's completely fine for them to be different).\n\tnextLine = 0x0085,\n\n\t// Unicode 3.0 space characters\n\tspace = 0x0020,   // \" \"\n\tnonBreakingSpace = 0x00A0,   //\n\tenQuad = 0x2000,\n\temQuad = 0x2001,\n\tenSpace = 0x2002,\n\temSpace = 0x2003,\n\tthreePerEmSpace = 0x2004,\n\tfourPerEmSpace = 0x2005,\n\tsixPerEmSpace = 0x2006,\n\tfigureSpace = 0x2007,\n\tpunctuationSpace = 0x2008,\n\tthinSpace = 0x2009,\n\thairSpace = 0x200A,\n\tzeroWidthSpace = 0x200B,\n\tnarrowNoBreakSpace = 0x202F,\n\tideographicSpace = 0x3000,\n\tmathematicalSpace = 0x205F,\n\togham = 0x1680,\n\n\t_ = 0x5F,\n\t$ = 0x24,\n\n\t_0 = 0x30,\n\t_1 = 0x31,\n\t_2 = 0x32,\n\t_3 = 0x33,\n\t_4 = 0x34,\n\t_5 = 0x35,\n\t_6 = 0x36,\n\t_7 = 0x37,\n\t_8 = 0x38,\n\t_9 = 0x39,\n\n\ta = 0x61,\n\tb = 0x62,\n\tc = 0x63,\n\td = 0x64,\n\te = 0x65,\n\tf = 0x66,\n\tg = 0x67,\n\th = 0x68,\n\ti = 0x69,\n\tj = 0x6A,\n\tk = 0x6B,\n\tl = 0x6C,\n\tm = 0x6D,\n\tn = 0x6E,\n\to = 0x6F,\n\tp = 0x70,\n\tq = 0x71,\n\tr = 0x72,\n\ts = 0x73,\n\tt = 0x74,\n\tu = 0x75,\n\tv = 0x76,\n\tw = 0x77,\n\tx = 0x78,\n\ty = 0x79,\n\tz = 0x7A,\n\n\tA = 0x41,\n\tB = 0x42,\n\tC = 0x43,\n\tD = 0x44,\n\tE = 0x45,\n\tF = 0x46,\n\tG = 0x47,\n\tH = 0x48,\n\tI = 0x49,\n\tJ = 0x4A,\n\tK = 0x4B,\n\tL = 0x4C,\n\tM = 0x4D,\n\tN = 0x4E,\n\tO = 0x4F,\n\tP = 0x50,\n\tQ = 0x51,\n\tR = 0x52,\n\tS = 0x53,\n\tT = 0x54,\n\tU = 0x55,\n\tV = 0x56,\n\tW = 0x57,\n\tX = 0x58,\n\tY = 0x59,\n\tZ = 0x5a,\n\n\tampersand = 0x26,             // &\n\tasterisk = 0x2A,              // *\n\tat = 0x40,                    // @\n\tbackslash = 0x5C,             // \\\n\tbar = 0x7C,                   // |\n\tcaret = 0x5E,                 // ^\n\tcloseBrace = 0x7D,            // }\n\tcloseBracket = 0x5D,          // ]\n\tcloseParen = 0x29,            // )\n\tcolon = 0x3A,                 // :\n\tcomma = 0x2C,                 // ,\n\tdot = 0x2E,                   // .\n\tdoubleQuote = 0x22,           // \"\n\tequals = 0x3D,                // =\n\texclamation = 0x21,           // !\n\tgreaterThan = 0x3E,           // >\n\tlessThan = 0x3C,              // <\n\tminus = 0x2D,                 // -\n\topenBrace = 0x7B,             // {\n\topenBracket = 0x5B,           // [\n\topenParen = 0x28,             // (\n\tpercent = 0x25,               // %\n\tplus = 0x2B,                  // +\n\tquestion = 0x3F,              // ?\n\tsemicolon = 0x3B,             // ;\n\tsingleQuote = 0x27,           // '\n\tslash = 0x2F,                 // /\n\ttilde = 0x7E,                 // ~\n\n\tbackspace = 0x08,             // \\b\n\tformFeed = 0x0C,              // \\f\n\tbyteOrderMark = 0xFEFF,\n\ttab = 0x09,                   // \\t\n\tverticalTab = 0x0B,           // \\v\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport * as formatter from './impl/format';\nimport * as edit from './impl/edit';\nimport * as scanner from './impl/scanner';\nimport * as parser from './impl/parser';\n\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport const createScanner: (text: string, ignoreTrivia?: boolean) => JSONScanner = scanner.createScanner;\n\nexport const enum ScanError {\n\tNone = 0,\n\tUnexpectedEndOfComment = 1,\n\tUnexpectedEndOfString = 2,\n\tUnexpectedEndOfNumber = 3,\n\tInvalidUnicode = 4,\n\tInvalidEscapeCharacter = 5,\n\tInvalidCharacter = 6\n}\n\nexport const enum SyntaxKind {\n\tOpenBraceToken = 1,\n\tCloseBraceToken = 2,\n\tOpenBracketToken = 3,\n\tCloseBracketToken = 4,\n\tCommaToken = 5,\n\tColonToken = 6,\n\tNullKeyword = 7,\n\tTrueKeyword = 8,\n\tFalseKeyword = 9,\n\tStringLiteral = 10,\n\tNumericLiteral = 11,\n\tLineCommentTrivia = 12,\n\tBlockCommentTrivia = 13,\n\tLineBreakTrivia = 14,\n\tTrivia = 15,\n\tUnknown = 16,\n\tEOF = 17\n}\n\n/**\n * The scanner object, representing a JSON scanner at a position in the input string.\n */\nexport interface JSONScanner {\n\t/**\n\t * Sets the scan position to a new offset. A call to 'scan' is needed to get the first token.\n\t */\n\tsetPosition(pos: number): void;\n\t/**\n\t * Read the next token. Returns the token code.\n\t */\n\tscan(): SyntaxKind;\n\t/**\n\t * Returns the current scan position, which is after the last read token.\n\t */\n\tgetPosition(): number;\n\t/**\n\t * Returns the last read token.\n\t */\n\tgetToken(): SyntaxKind;\n\t/**\n\t * Returns the last read token value. The value for strings is the decoded string content. For numbers its of type number, for boolean it's true or false.\n\t */\n\tgetTokenValue(): string;\n\t/**\n\t * The start offset of the last read token.\n\t */\n\tgetTokenOffset(): number;\n\t/**\n\t * The length of the last read token.\n\t */\n\tgetTokenLength(): number;\n\t/**\n\t * An error code of the last scan.\n\t */\n\tgetTokenError(): ScanError;\n}\n\n\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport const getLocation: (text: string, position: number) => Location = parser.getLocation;\n\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore always check the errors list to find out if the input was valid.\n */\nexport const parse: (text: string, errors?: ParseError[], options?: ParseOptions) => any = parser.parse;\n\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport const parseTree: (text: string, errors?: ParseError[], options?: ParseOptions) => Node = parser.parseTree;\n\n/**\n * Finds the node at the given path in a JSON DOM.\n */\nexport const findNodeAtLocation: (root: Node, path: JSONPath) => Node | undefined = parser.findNodeAtLocation;\n\n/**\n * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\nexport const findNodeAtOffset: (root: Node, offset: number, includeRightBound?: boolean) => Node | undefined = parser.findNodeAtOffset;\n\n/**\n * Gets the JSON path of the given JSON DOM node\n */\nexport const getNodePath: (node: Node) => JSONPath = parser.getNodePath;\n\n/**\n * Evaluates the JavaScript object of the given JSON DOM node \n */\nexport const getNodeValue: (node: Node) => any = parser.getNodeValue;\n\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport const visit: (text: string, visitor: JSONVisitor, options?: ParseOptions) => any = parser.visit;\n\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport const stripComments: (text: string, replaceCh?: string) => string = parser.stripComments;\n\nexport interface ParseError {\n\terror: ParseErrorCode;\n\toffset: number;\n\tlength: number;\n}\n\nexport const enum ParseErrorCode {\n\tInvalidSymbol = 1,\n\tInvalidNumberFormat = 2,\n\tPropertyNameExpected = 3,\n\tValueExpected = 4,\n\tColonExpected = 5,\n\tCommaExpected = 6,\n\tCloseBraceExpected = 7,\n\tCloseBracketExpected = 8,\n\tEndOfFileExpected = 9,\n\tInvalidCommentToken = 10,\n\tUnexpectedEndOfComment = 11,\n\tUnexpectedEndOfString = 12,\n\tUnexpectedEndOfNumber = 13,\n\tInvalidUnicode = 14,\n\tInvalidEscapeCharacter = 15,\n\tInvalidCharacter = 16\n}\n\nexport type NodeType = 'object' | 'array' | 'property' | 'string' | 'number' | 'boolean' | 'null';\n\nexport interface Node {\n\treadonly type: NodeType;\n\treadonly value?: any;\n\treadonly offset: number;\n\treadonly length: number;\n\treadonly colonOffset?: number;\n\treadonly parent?: Node;\n\treadonly children?: Node[];\n}\n\nexport type Segment = string | number;\nexport type JSONPath = Segment[];\n\nexport interface Location {\n\t/**\n\t * The previous property key or literal value (string, number, boolean or null) or undefined.\n\t */\n\tpreviousNode?: Node;\n\t/**\n\t * The path describing the location in the JSON document. The path consists of a sequence strings\n\t * representing an object property or numbers for array indices.\n\t */\n\tpath: JSONPath;\n\t/**\n\t * Matches the locations path against a pattern consisting of strings (for properties) and numbers (for array indices).\n\t * '*' will match a single segment, of any property name or index.\n\t * '**' will match a sequece of segments or no segment, of any property name or index.\n\t */\n\tmatches: (patterns: JSONPath) => boolean;\n\t/**\n\t * If set, the location's offset is at a property key.\n\t */\n\tisAtPropertyKey: boolean;\n}\n\nexport interface ParseOptions {\n\tdisallowComments?: boolean;\n\tallowTrailingComma?: boolean;\n}\n\nexport interface JSONVisitor {\n\t/**\n\t * Invoked when an open brace is encountered and an object is started. The offset and length represent the location of the open brace.\n\t */\n\tonObjectBegin?: (offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when a property is encountered. The offset and length represent the location of the property name.\n\t */\n\tonObjectProperty?: (property: string, offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when a closing brace is encountered and an object is completed. The offset and length represent the location of the closing brace.\n\t */\n\tonObjectEnd?: (offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when an open bracket is encountered. The offset and length represent the location of the open bracket.\n\t */\n\tonArrayBegin?: (offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when a closing bracket is encountered. The offset and length represent the location of the closing bracket.\n\t */\n\tonArrayEnd?: (offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when a literal value is encountered. The offset and length represent the location of the literal value.\n\t */\n\tonLiteralValue?: (value: any, offset: number, length: number) => void;\n\n\t/**\n\t * Invoked when a comma or colon separator is encountered. The offset and length represent the location of the separator.\n\t */\n\tonSeparator?: (character: string, offset: number, length: number) => void;\n\n\t/**\n\t * When comments are allowed, invoked when a line or block comment is encountered. The offset and length represent the location of the comment.\n\t */\n\tonComment?: (offset: number, length: number) => void;\n\n\t/**\n\t * Invoked on an error.\n\t */\n\tonError?: (error: ParseErrorCode, offset: number, length: number) => void;\n}\n\n/**\n * Represents a text modification\n */\nexport interface Edit {\n\t/**\n\t * The start offset of the modification.\n\t */\n\toffset: number;\n\t/**\n\t * The length of the modification. Must not be negative. Empty length represents an *insert*.\n\t */\n\tlength: number;\n\t/**\n\t * The new content. Empty content represents a *remove*.\n\t */\n\tcontent: string;\n}\n\n/**\n * A text range in the document\n*/\nexport interface Range {\n\t/**\n\t * The start offset of the range. \n\t */\n\toffset: number;\n\t/**\n\t * The length of the range. Must not be negative.  \n\t */\n\tlength: number;\n}\n\nexport interface FormattingOptions {\n\t/**\n\t * If indentation is based on spaces (`insertSpaces` = true), then what is the number of spaces that make an indent?\n\t */\n\ttabSize?: number;\n\t/**\n\t * Is indentation based on spaces?\n\t */\n\tinsertSpaces?: boolean;\n\t/**\n\t * The default 'end of line' character. If not set, '\\n' is used as default.\n\t */\n\teol?: string;\n}\n\n/**\n * Computes the edits needed to format a JSON document. \n * \n * @param documentText The input text \n * @param range The range to format or `undefined` to format the full content\n * @param options The formatting options\n * @returns A list of edit operations describing the formatting changes to the original document. Edits can be either inserts, replacements or\n * removals of text segments. All offsets refer to the original state of the document. No two edits must change or remove the same range of\n * text in the original document. However, multiple edits can have\n * the same offset, for example multiple inserts, or an insert followed by a remove or replace. The order in the array defines which edit is applied first.\n * To apply edits to an input, you can use `applyEdits`\n */\nexport function format(documentText: string, range: Range | undefined, options: FormattingOptions): Edit[] {\n\treturn formatter.format(documentText, range, options);\n}\n\n/** \n * Options used when computing the modification edits\n */\nexport interface ModificationOptions {\n\t/**\n\t * Formatting options\n\t*/\n\tformattingOptions: FormattingOptions;\n\t/**\n\t * Optional fucntion to define the insertion index given an existing list of properties.\n\t */\n\tgetInsertionIndex?: (properties: string[]) => number;\n}\n\n/**\n * Computes the edits needed to modify a value in the JSON document.\n * \n * @param documentText The input text \n * @param path The path of the value to change. The path represents either to the document root, a property or an array item.\n * If the path points to an non-existing property or item, it will be created. \n * @param value The new value for the specified property or item. If the value is undefined,\n * the property or item will be removed.\n * @param options Options\n * @returns A list of edit operations describing the formatting changes to the original document. Edits can be either inserts, replacements or\n * removals of text segments. All offsets refer to the original state of the document. No two edits must change or remove the same range of\n * text in the original document. However, multiple edits can have\n * the same offset, for example multiple inserts, or an insert followed by a remove or replace. The order in the array defines which edit is applied first.\n * To apply edits to an input, you can use `applyEdits`\n */\nexport function modify(text: string, path: JSONPath, value: any, options: ModificationOptions): Edit[] {\n\treturn edit.setProperty(text, path, value, options.formattingOptions, options.getInsertionIndex);\n}\n\n/**\n * Applies edits to a input string.\n */\nexport function applyEdits(text: string, edits: Edit[]): string {\n\tfor (let i = edits.length - 1; i >= 0; i--) {\n\t\ttext = edit.applyEdit(text, edits[i]);\n\t}\n\treturn text;\n}","import * as React from 'react';\nimport * as redux from 'redux';\nimport * as classNames from 'classnames';\nimport { connect as fela, withTheme } from 'react-fela';\n\nimport { SettingsTypes } from '../../core';\n\nimport { USER_SETTINGS_QUERY, USER_PREFERENCES_QUERY } from '../../graphql';\nimport { insertNewContent, checkExist } from '../../utils';\nimport * as componentStyles from './styles';\nimport { parse } from '../../../../common/jsonc-parser/main';\n\nimport WorkspaceCustomSettings from '../WorkspaceCustomSettings';\nimport UserCustomSettings from '../UserCustomSettings';\n\nexport type ICustomSettingsApiProps = {\n    userPref?: any;\n    saveMutate: (args: any) => any\n    updateConfigMutate: () => void\n};\n\nexport type ICustomSettingsStateProps = {\n    activeId: number;\n    newLine: string;\n    rootPath: string;\n};\n\nexport type ICustomSettingsDispatchProps = {\n    setActiveJsonEditor: (editorId: number) => void;\n    change: (changed: boolean) => void;\n    setNewLine: (content) => void;\n};\n\nexport type ICustomSettingsOwnProps = {\n    styles: any;\n    onKeyDown: any;\n    client: any;\n    content: any;\n    onChange: any;\n};\n\nexport type ICustomSettingsState = {\n    prefs: any;\n};\n\nexport type ICustomSettings = ICustomSettingsApiProps & ICustomSettingsStateProps & \nICustomSettingsDispatchProps & ICustomSettingsOwnProps;\n\n\nclass CustomSettingsView extends React.Component<ICustomSettings, ICustomSettingsState> {\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            prefs: null,\n        };\n    }\n\n    public componentWillMount() {\n        const { userPref } = this.props;\n        if (userPref) {\n            this.setState({ prefs: userPref.prefs });\n        }\n    }\n\n    public componentWillReceiveProps(nextProps) {\n        const { userPref, newLine } = nextProps;\n        const { userPref: userPrevPrefs, setNewLine } = this.props;\n\n        if (userPref !== userPrevPrefs) {\n            this.setState({ prefs: userPref.prefs });\n        }\n\n        if (newLine) {\n            const { prefs } = this.state;\n            setNewLine(null);\n            let newContent = '';\n            if (prefs) {\n                let value = prefs.newValue && prefs.newValue !== '' ? prefs.newValue : prefs.content;\n                const checked = checkExist(value, newLine);\n                if (!checked) {\n                    newContent = insertNewContent(value, newLine);\n                } else {\n                    newContent = checked.value;\n                }\n\n                this.onChange(newContent);\n            } else {\n                newContent = `{\\n${newLine}\\n}`;\n                this.props.change(true);\n                this.setState({ prefs: { newValue: newContent } });\n            }\n        }\n    }\n\n    private onChange = (newValue) => {\n        const { prefs } = this.state;\n        if (!prefs.newValue || prefs.newValue && prefs.newValue === '') {\n            this.props.change(true);\n        }\n\n        this.setState({ prefs: { ...prefs, newValue: newValue } });\n    }\n\n    private onUserSettings = () => {\n        this.props.setActiveJsonEditor(SettingsTypes.USER);\n    }\n\n    private onWorkSpaceSettings = () => {\n        this.props.setActiveJsonEditor(SettingsTypes.WORKSPACE);\n    }\n\n    private onKeyDown = (e) => {\n        const { onKeyDown, client, rootPath } = this.props;\n\n        const { prefs } = this.state;\n        let charCode = String.fromCharCode(e.which).toLowerCase();\n\n        if ((e.metaKey || e.ctrlKey) && charCode === 's') {\n            e.preventDefault();\n            onKeyDown(e, {update: this.props.updateConfigMutate});\n            const user = '1';\n            if (prefs.newValue) {\n                this.props.saveMutate({ variables: { content: prefs.newValue, user } });\n                this.setState({ prefs: { ...this.state.prefs, content: prefs.newValue, newValue: '' } });\n                let userSettings = {\n                    data: null,\n                    __typename: 'UserSettings',\n                };\n                try {\n                    const savedSettings = client.readQuery({\n                        query: USER_SETTINGS_QUERY,\n                        variables: { user, rootpath: rootPath },\n                    });\n                    userSettings = savedSettings.userSettings;\n                } catch (err) {\n                    // console.log('err', err);\n                }\n\n                const settings = parse(prefs.newValue);\n                userSettings.data = JSON.stringify(settings);\n                client.writeQuery({\n                    query: USER_SETTINGS_QUERY,\n                    variables: { user, rootpath: rootPath },\n                    data: { userSettings },\n                });\n\n                client.writeQuery({\n                    query: USER_PREFERENCES_QUERY,\n                    data: {\n                        userPreferences: {\n                            prefs: {\n                                content: prefs.newValue,\n                                user,\n                                __typename: 'IUserPreferences',\n                            },\n                            __typename: 'UserPreferencesRes',\n                        },\n                    },\n                });\n            }\n        }\n\n    }\n\n    public render() {\n        const { styles, activeId, content, onChange, userPref } = this.props;\n        const { prefs } = this.state;\n        return (\n            <div className={styles.container} onKeyDown={this.onKeyDown}>\n                <div className={styles.tabWrapper}>\n                    <div\n                        className={activeId === 0 ? classNames(styles.activeTab, styles.tab) : styles.tab}\n                        onClick={this.onUserSettings}\n                    >\n                        user serttings\n                    </div>\n                    <div\n                        className={activeId === 1 ? classNames(styles.activeTab, styles.tab) : styles.tab}\n                        onClick={this.onWorkSpaceSettings}\n                    >\n                        workspace settings\n                    </div>\n                </div>\n                {activeId === 0 &&\n                    <UserCustomSettings\n                        prefs={prefs}\n                        onChange={this.onChange}\n                    />}\n                {activeId === 1 &&\n                    <WorkspaceCustomSettings\n                        content={content}\n                        onChange={onChange}\n                    />}\n            </div>\n        );\n    }\n}\n\nexport const CustomSettings: any = fela({\n    container: () => componentStyles.container(),\n    tabWrapper: () => componentStyles.tabWrapper(),\n    tab: ({ theme }) => componentStyles.tab(theme),\n    activeTab: ({ theme }) => componentStyles.activeTab(theme),\n})(withTheme(CustomSettingsView));\n","import { connect } from 'react-redux';\nimport { graphql, compose, withApollo } from 'react-apollo';\nimport { createSelector } from 'reselect';\nimport { setActiveJsonEditor, setNewLineAction } from '../../reducers';\nimport { changeEditAction } from '@files-stack/client-redux';\nimport { USER_PREFERENCES_QUERY, SAVE_USER_SETTINGS_MUTATE, SAVE_WORKSPACE_SETTINGS_MUTATE } from '../../graphql';\nimport {\n    CustomSettings, ICustomSettingsApiProps, ICustomSettingsStateProps, \n    ICustomSettingsDispatchProps, ICustomSettings,\n} from './CustomSettings';\n\nconst CustomSettingsWithData: React.ComponentClass<ICustomSettings> | React.StatelessComponent<{}> = compose(\n    graphql<ICustomSettingsApiProps, any, {}, {}>(USER_PREFERENCES_QUERY, {\n        props: createSelector(\n            ({ ownProps, data }) => data,\n            (data) => ({ userPref: data.userPreferences }),\n        ),\n    }),\n    graphql<ICustomSettingsApiProps, any, {}, {}>(SAVE_USER_SETTINGS_MUTATE, { name: 'saveMutate' }),\n    graphql<ICustomSettingsApiProps, any, {}, {}>(SAVE_WORKSPACE_SETTINGS_MUTATE, { name: 'updateConfigMutate' }),\n)(withApollo(CustomSettings));\n\nconst mapStateToProps = (state: any): ICustomSettingsStateProps => ({\n    activeId: state.preferences.active,\n    newLine: state.preferences.newLine,\n    rootPath: state['@files/rootpath'],\n});\n\nconst mapDispatchToProps = (dispatch): ICustomSettingsDispatchProps => ({\n    setActiveJsonEditor: (editorId: number) => dispatch(setActiveJsonEditor(editorId)),\n    change: (changed: boolean) => dispatch(changeEditAction(changed)),\n    setNewLine: (content: string) => dispatch(setNewLineAction(content)),\n});\n\nconst CustomSettingsEnhanced: any = connect(mapStateToProps, mapDispatchToProps)(CustomSettingsWithData);\n\nexport default CustomSettingsEnhanced;\n","const colors = {\n    light: {\n        colorActive: 'rgb(66, 66, 66)',\n        borderBottomColorActive: 'rgba(128, 128, 128, 0.35)',\n        outlineActive: '1px solid transparent',\n        colorTab: '#424242',\n        opacityTab: '0.7',\n    },\n    dark: {\n        colorActive: '#e7e7e7',\n        borderBottomColorActive: 'rgba(128, 128, 128, 0.35)',\n        outlineActive: '1px solid transparent',\n        colorTab: '#e7e7e7',\n        opacityTab: '0.5',\n    },\n    hc: {\n        colorActive: '#e7e7e7',\n        borderBottomColorActive: 'rgb(243, 133, 24)',\n        outlineActive: '1px solid rgb(243, 133, 24)',\n        colorTab: '#e7e7e7',\n        opacityTab: '0.5',\n    },\n};\n\nexport const container = () => ({\n        height: '100%',\n});\n\nexport const tabWrapper = () => ({\n    display: 'flex',\n    textTransform: 'uppercase',\n});\n\nexport const tab = (theme) => ({\n    marginLeft: '33px',\n    marginRight: '5px',\n    cursor: 'pointer',\n    textOverflow: 'ellipsis',\n    fontSize: '11px',\n    color: colors[theme.name].colorTab,\n    opacity: colors[theme.name].opacityTab,\n    borderWidth: '1px',\n    borderStyle: 'solid',\n    borderColor: 'transparent',\n    padding: '3px 0',\n});\n\nexport const activeTab = (theme) => ({\n    color: colors[theme.name].colorActive,\n    borderBottomColor: colors[theme.name].borderBottomColorActive,\n    opacity: '1!important',\n    outline: colors[theme.name].outlineActive,\n});\n","import * as React from 'react';\nimport { connect as fela, withTheme } from 'react-fela';\nimport { Resizable } from 'react-resizable';\n\nimport { MonacoLoader } from '@workbench-stack/monaco-browser';\n\nimport { getContent, getDeltaDecorations, addCategories, getPrefsList } from '../../utils';\n\nimport HelperPopup from '../HelperPopup';\n\nexport type IDefaultSettingsStateProps = {\n    activeId: number;\n    width: number;\n};\n\nexport type IDefaultSettingsDispatchProps = {\n    resizeWidth: (width) => void;\n};\n\nexport type IDefaultSettingsOwnProps = {\n    styles: any;\n    defaultPrefs: any;\n    client: any;\n    editorFile: any;\n    editorContent: any;\n    theme: any;\n};\n\nexport type IDefaultSettingsState = {\n    test: number,\n    openHint: boolean,\n    currentHint: any,\n    hintPosition: any,\n};\n\nexport type IDefaultSettings = IDefaultSettingsStateProps & IDefaultSettingsDispatchProps & IDefaultSettingsOwnProps;\n\nclass DefaultSettingsView extends React.Component<IDefaultSettings, IDefaultSettingsState> {\n    private monaco: any;\n    private editor: any;\n    private viewZone: number[];\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            test: 0,\n            openHint: false,\n            currentHint: null,\n            hintPosition: null,\n        };\n    }\n\n    private onResizeStop = (e, { size: { width } }) => {\n        if (width >= 200 && width <= 700) {\n            this.props.resizeWidth(width);\n        }\n    }\n\n    private onResize = (e, { size: { width } }) => {\n        if (width >= 200 && width <= 500) {\n            this.props.resizeWidth(width);\n        }\n    }\n\n    private editorDidMount = (editor, monaco) => {\n        editor.onDidScrollChange(e => {\n            const { openHint } = this.state;\n            if (openHint && e.scrollTopChanged) {\n                this.onHintHide();\n            }\n        });\n\n        editor.onMouseDown(e => {\n            const { defaultPrefs } = this.props;\n            const { openHint } = this.state;\n            if (openHint) {\n                this.onHintHide();\n            } else if (e.target.element.className === 'cgmr line-hint' ||\n                e.target.element.parentElement.className === 'margin-view-overlays' ||\n                e.target.element.parentElement.className === 'margin-view-overlays focused') {\n                const line = e.target.position.lineNumber;\n                const prefIndex = Math.ceil(line / 3);\n                const prefsList = getPrefsList(defaultPrefs);\n                if (line % 3 !== 0 && prefIndex <= prefsList.length) {\n                    this.setState({\n                        currentHint: prefsList[Math.ceil(line / 3) - 1],\n                        openHint: true,\n                        hintPosition: e.event.posy,\n                    });\n                } else {\n                    this.onHintHide();\n                }\n            }\n        });\n\n        this.monaco = monaco;\n        this.editor = editor;\n\n    }\n\n    private onHintHide = () => {\n        this.setState({\n            currentHint: null,\n            openHint: false,\n            hintPosition: null,\n        });\n    }\n\n    public render() {\n        const { styles, defaultPrefs, width, client, editorFile, activeId, editorContent, theme } = this.props;\n        const { test, currentHint, openHint, hintPosition } = this.state;\n\n        const editorOptions = {\n            selectOnLineNumbers: false,\n            readOnly: true,\n            wordWrap: 'bounded',\n            automaticLayout: true,\n            minimap: {\n                enabled: false,\n            },\n            lineNumbers: 'off',\n            glyphMargin: true,\n            theme: 'vs-dark',\n        };\n        setTimeout(() => {\n            if (!test) {\n                this.setState({ test: 1 });\n            }\n        }, 1500);\n        if (!test) { return <div />; }\n        const value = defaultPrefs ? getContent(defaultPrefs) : '';\n        if (theme) { editorOptions.theme = theme.className; }\n\n        if (this.monaco) {\n            const decorations = this.editor.deltaDecorations(\n                [], getDeltaDecorations(this.monaco, this.props.defaultPrefs));\n\n            this.viewZone = addCategories(defaultPrefs, this.editor, this.viewZone);\n        }\n\n        return (\n            <Resizable\n                id={'defaultSettings'}\n                axis={'x'}\n                height={Infinity}\n                width={width}\n                className={styles.resizable}\n                onResize={this.onResize}\n                onResizeStop={this.onResizeStop}\n            >\n                <div className={styles.container}>\n                    <MonacoLoader\n                        width=\"100%\"\n                        height=\"100%\"\n                        language=\"jsonc2\"\n                        value={value}\n                        options={editorOptions}\n                        uri=\"static/path\"\n                        enableLanguageService={true}\n                        editorDidMount={this.editorDidMount}\n                    />\n                    <HelperPopup\n                        preference={currentHint}\n                        onHideHints={this.onHintHide}\n                        open={openHint}\n                        client={client}\n                        editorFile={editorFile}\n                        activeId={activeId}\n                        hintPosition={hintPosition}\n                        editorContent={editorContent}\n                    />\n                </div>\n            </Resizable>\n        );\n\n    }\n}\n\nexport const DefaultSettings: any = fela<any, any>({\n    container: () => ({\n        height: '100%',\n        '& .line-hint': {\n            background: `url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cstyle%3E.icon-canvas-transparent{opacity:0;fill:%232d2d30}.icon-vs-out{fill:%232d2d30}.icon-vs-bg{fill:%23c5c5c5}%3C/style%3E%3Cpath class='icon-canvas-transparent' d='M16 16H0V0h16v16z' id='canvas'/%3E%3Cpath class='icon-vs-bg' d='M14.598 4.25L12.91 6l-3-3 1.688-1.75 3 3zM8.91 4l-7 7 3 3 7-7-3-3zM1 12.09V15h2.91L1 12.09z' id='iconBg'/%3E%3C/svg%3E\") 50% no-repeat`,\n        },\n        '& .widget-title': {\n            background: 'gray',\n            padding: '0 10px',\n        },\n    }),\n    resizable: () => ({\n        position: 'relative',\n        '> .react-resizable-handle': {\n            position: 'absolute',\n            width: '20px',\n            height: '100%',\n            top: 0,\n            right: 0,\n            padding: '0 3px 3px 0',\n            boxSizing: 'border-box',\n            cursor: 'col-resize',\n        },\n    }),\n})(withTheme(DefaultSettingsView));\n\n","import { connect } from 'react-redux';\n\nimport { resizeWidthAction } from '../../reducers';\n\nimport {DefaultSettings, IDefaultSettingsStateProps, IDefaultSettingsDispatchProps} from './DefaultSettings';\n\nconst mapStateToProps = (state: any): IDefaultSettingsStateProps => ({\n    activeId: state.preferences.active,\n    width: state.preferences.width,\n});\n\nconst mapDispatchToProps = (dispatch): IDefaultSettingsDispatchProps => ({\n    resizeWidth: (width: number) => dispatch(resizeWidthAction(width)),\n});\n\nconst DefaultSettingsWithDataEnhanced: any = connect(mapStateToProps, mapDispatchToProps)(DefaultSettings);\n\nexport default DefaultSettingsWithDataEnhanced;\n","import * as React from 'react';\nimport { connect as fela } from 'react-fela';\nimport * as enhanceWithClickOutside from 'react-click-outside';\nimport { map, isEqual } from 'lodash';\n\nimport { CHANGED_CONTENT_QUERY } from '@files-stack/graphql-gql';\n\nimport {\n  getHints,\n  insertNewContent,\n  change1,\n  change2,\n  checkExist,\n  change4,\n} from '../../utils';\n\nconst COPY_TO_SETTINGS = 'Copy to settings';\n\nexport type IHelperPopupStateProps = {\n  rootPath: string;\n};\n\nexport type IHelperPopupDispatchProps = {\n  change: (changed: boolean) => void;\n  setNewLine: (content) => void;\n};\n\nexport type IHelperPopupOwnProps = {\n  styles: any;\n  client: any;\n  editorFile: any;\n  editorContent: any;\n  preference: any;\n  activeId: number;\n  onHideHints: any;\n  open: boolean;\n};\n\nexport type IHelperPopup = IHelperPopupStateProps &\n  IHelperPopupDispatchProps &\n  IHelperPopupOwnProps;\n\nclass HelperPopupView extends React.Component<IHelperPopup, {}> {\n  // private handleClickOutside() {\n  //     console.log('gere');\n  //     const { open, onHideHints } = this.props;\n  //     if (open) {\n  //         onHideHints();\n  //     }\n  // }\n\n  private mergeEvent(a, b) {\n    const changes = [].concat(a.changes).concat(b.changes);\n    const versionId = b.versionId;\n    const isUndoing = a.isUndoing || b.isUndoing;\n    const isRedoing = a.isRedoing || b.isRedoing;\n\n    return { changes, versionId, isUndoing, isRedoing };\n  }\n\n  private onListItemSelect = value => {\n    const {\n      client,\n      editorFile,\n      editorContent,\n      rootPath,\n      preference,\n      activeId,\n      setNewLine,\n      onHideHints,\n    } = this.props;\n\n    let insertedValue = value;\n    if ((!preference.enum || !preference.enum.length) && preference.type === 'string') {\n      insertedValue = preference.default;\n    } else if (preference.type === 'object') {\n        insertedValue = preference.default.replace(/\\\"/g, `'`);\n    }\n    const insertedStr = `    \"${preference.name}\": \"${insertedValue}\",`;\n\n    if (activeId === 1) {\n      let newValue, changedEvent, changedEventCurrent;\n      const resource = `${rootPath}/.cdecode`;\n      const checked = checkExist(editorContent.newValue, insertedStr);\n      if (!checked) {\n        newValue = insertNewContent(editorContent.newValue, insertedStr);\n\n        const editorArr = editorContent.newValue.split('\\n');\n        const startLineNumber = editorArr.length;\n        const startColumnNumber = editorArr[editorArr.length - 2].length;\n\n        changedEventCurrent = this.mergeEvent(\n          change1(startLineNumber, startColumnNumber),\n          change2(insertedStr, startLineNumber),\n        );\n      } else {\n        newValue = checked.value;\n        const startLineNumber = checked.checkedIndex + 1;\n        changedEventCurrent = change4(\n          insertedStr,\n          startLineNumber,\n          checked.oldLength,\n        );\n      }\n      if (!editorFile.changed) {\n        this.props.change(true);\n      }\n\n      changedEvent = editorContent.changedEvent\n        ? this.mergeEvent(editorContent.changedEvent, changedEventCurrent)\n        : changedEventCurrent;\n      try {\n        const { changedContent } = client.readQuery({\n          query: CHANGED_CONTENT_QUERY,\n          variables: { resource },\n        });\n\n        changedContent.resource = resource;\n        changedContent.changedEvent = changedEvent;\n        changedContent.value = newValue;\n\n        client.writeQuery({\n          query: CHANGED_CONTENT_QUERY,\n          variables: { resource },\n          data: { changedContent },\n        });\n      } catch (exception) {\n        // console.log(exception);\n      }\n    } else if (activeId === 0) {\n      setNewLine(insertedStr);\n    }\n    onHideHints();\n  }\n\n  private renderPopupList = preference => {\n    const { styles } = this.props;\n    let hinstList = [COPY_TO_SETTINGS];\n    if (preference.type !== 'object') {\n      hinstList = getHints(preference);\n    }\n\n    return map(hinstList, (item, index) => {\n      return (\n        <div\n          key={index}\n          className={styles.listItem}\n          onClick={() => this.onListItemSelect(item)}\n        >\n          {item}\n        </div>\n      );\n    });\n  }\n\n  public render() {\n    const { styles, open, preference } = this.props;\n    if (!open) {\n      return null;\n    }\n\n    return (\n      <div className={styles.popup}>{this.renderPopupList(preference)}</div>\n    );\n  }\n}\n\nexport const HelperPopup: any = fela<any, any>({\n  popup: ({ hintPosition }) => ({\n    padding: '10px 0',\n    left: '10px',\n    borderRadius: '8px',\n    background: 'gray',\n    zIndex: 1,\n    top: hintPosition ? `${hintPosition - 80}px` : '10px',\n    fontSize: '12px',\n    position: 'absolute',\n  }),\n  listItem: () => ({\n    cursor: 'pointer',\n    padding: '2px 10px',\n    ':hover': {\n      background: 'blue',\n    },\n  }),\n})(enhanceWithClickOutside(HelperPopupView));\n","import { connect } from 'react-redux';\nimport { graphql, compose, withApollo } from 'react-apollo';\nimport { createSelector } from 'reselect';\n\nimport { resizeWidthAction, setNewLineAction } from '../../reducers';\nimport { changeEditAction } from '@files-stack/client-redux';\n\nimport { HelperPopup, IHelperPopupStateProps, IHelperPopupDispatchProps } from './HelperPopup';\n\nconst mapStateToProps = (state: any): IHelperPopupStateProps => ({\n    rootPath: state['@files/rootpath'],\n});\n\nconst mapDispatchToProps = (dispatch): IHelperPopupDispatchProps => ({\n    change: (changed: boolean) => dispatch(changeEditAction(changed)),\n    setNewLine: (content: string) => dispatch(setNewLineAction(content)),\n});\n\nconst HelperPopupEnhanced: any = connect(mapStateToProps, mapDispatchToProps)(HelperPopup);\n\nexport default HelperPopupEnhanced;\n","import * as React from 'react';\nimport { connect as fela, withTheme } from 'react-fela';\n\nimport { MonacoLoader } from '@workbench-stack/monaco-browser';\n\nexport type IUserCustomSettingsOwnProps = {\n    styles: any;\n    prefs: any;\n    theme: any;\n    activeId: number;\n    onChange: any;\n};\n\nexport type IUserCustomSettings = IUserCustomSettingsOwnProps;\n\nclass UserCustomSettingsView extends React.Component<IUserCustomSettings, {}> {\n    private monaco: any;\n    private editor: any;\n\n    public componentWillReceiveProps(nextProps) {\n        const { theme, activeEditorId, prefs } = nextProps;\n        const { prefs: prevPrefs } = this.props;\n\n        if (theme !== this.props.theme) {\n            if (this.monaco && this.monaco.editor) {\n                this.monaco.editor.setTheme(theme.className);\n            }\n        }\n    }\n\n    private editorDidMount = (editor, monaco) => {\n        monaco.languages.registerCodeLensProvider('jsonc', {\n            provideCodeLenses: function (model, token) {\n                return [\n                    {\n                        range: {\n                            startLineNumber: 1,\n                            startColumn: 1,\n                            endLineNumber: 2,\n                            endColumn: 1,\n                        },\n                        id: 'TitleJsonc',\n                        command: {\n                            title: 'Place your settings here to overwrite the Default Settings',\n                        },\n                    },\n                ];\n            },\n            resolveCodeLens: function (model, codeLens, token) {\n                return codeLens;\n            },\n        });\n\n        this.monaco = monaco;\n        this.editor = editor;\n    }\n\n    public render() {\n        const { styles, activeId, theme, prefs, onChange } = this.props;\n\n        const editorOptions = {\n            selectOnLineNumbers: false,\n            readOnly: false,\n            theme: 'vs-dark',\n            automaticLayout: true,\n        };\n\n        if (theme) { editorOptions.theme = theme.className; }\n\n        let value = '{\\n}';\n        if (prefs) {\n            value = prefs.newValue && prefs.newValue !== '' ? prefs.newValue : prefs.content;\n        }\n\n        return (\n            <div className={styles.container}>\n                <MonacoLoader\n                    width=\"100%\"\n                    height=\"100%\"\n                    language=\"jsonc\"\n                    value={value}\n                    options={editorOptions}\n                    onChange={onChange}\n                    uri={'test/uri'}\n                    enableLanguageService={true}\n                    editorDidMount={this.editorDidMount}\n                />\n            </div>\n        );\n    }\n}\n\nexport const UserCustomSettings: any = fela({\n    container: () => ({\n        height: '100%',\n    }),\n})(withTheme(UserCustomSettingsView));\n","import { connect } from 'react-redux';\nimport { graphql, compose } from 'react-apollo';\nimport { createSelector } from 'reselect';\n\nimport {UserCustomSettings} from './UserCustomSettings';\n\nconst mapStateToProps = (state: any) => ({\n});\n\nconst mapDispatchToProps = dispatch => ({\n});\n\nconst WorkspaceCustomSettingsEnhanced: any = connect(mapStateToProps, mapDispatchToProps)(UserCustomSettings);\n\nexport default WorkspaceCustomSettingsEnhanced;\n","import * as React from 'react';\nimport { connect as fela, withTheme } from 'react-fela';\n\nimport { MonacoLoader } from '@workbench-stack/monaco-browser';\n\nexport type IWorkspaceCustomSettingsState = {\n    content: any;\n};\n\nexport type IWorkspaceCustomSettingsOwnProps = {\n    styles: any;\n    content: any;\n    theme: any;\n    activeId: number;\n    onChange: any;\n};\n\nexport type IWorkspaceCustomSettings =  IWorkspaceCustomSettingsOwnProps;\n\nclass WorkspaceCustomSettingsView extends React.Component<IWorkspaceCustomSettings, IWorkspaceCustomSettingsState> {\n    private monaco: any;\n    private editor: any;\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            content: null,\n        };\n    }\n\n    public componentWillMount() {\n        const { content } = this.props;\n        if (content) {\n            this.setState({ content });\n        }\n    }\n\n    public componentWillReceiveProps(nextProps) {\n        const { theme, activeEditorId, content } = nextProps;\n        const { content: prevContent } = this.props;\n    \n        if (theme !== this.props.theme) {\n          if (this.monaco && this.monaco.editor) {\n            this.monaco.editor.setTheme(theme.className);\n          }\n        }\n    \n        if (content.newValue !== prevContent.newValue) {\n          this.setState({ content });\n        }\n    }\n\n    private editorDidMount = (editor, monaco) => {\n        // monaco.languages.registerCodeLensProvider('jsonc', {\n        //     provideCodeLenses: function (model, token) {\n        //         return [\n        //             {\n        //                 range: {\n        //                     startLineNumber: 1,\n        //                     startColumn: 1,\n        //                     endLineNumber: 2,\n        //                     endColumn: 1,\n        //                 },\n        //                 id: 'TitleJsonc',\n        //                 command: {\n        //                     title: 'Place your settings here to overwrite the Default Settings',\n        //                 },\n        //             },\n        //         ];\n        //     },\n        //     resolveCodeLens: function (model, codeLens, token) {\n        //         return codeLens;\n        //     },\n        // });\n\n        this.monaco = monaco;\n        this.editor = editor;\n    }\n\n    public render() {\n        const { styles, activeId, theme, onChange } = this.props;\n        const { content } = this.state;\n\n        const editorOptions = {\n            selectOnLineNumbers: false,\n            readOnly: false,\n            theme: 'vs-dark',\n            automaticLayout: true,\n        };\n\n        if (theme) { editorOptions.theme = theme.className; }\n\n        let value = content ? content.newValue : '';\n        const uri = content.resource ? content.resource.replace('file://', '') : '';\n\n        return (\n            <div className={styles.container}>\n                <MonacoLoader\n                    width=\"100%\"\n                    height=\"100%\"\n                    language=\"jsonc\"\n                    value={value}\n                    options={editorOptions}\n                    onChange={onChange}\n                    uri={uri}\n                    enableLanguageService={true}\n                    editorDidMount={this.editorDidMount}\n                />\n            </div>\n        );\n    }\n}\n\nexport const WorkspaceCustomSettings: any = fela({\n    container: () => ({\n        height: '100%',\n        marginTop: '10px',\n    }),\n})(withTheme(WorkspaceCustomSettingsView));\n","import { connect } from 'react-redux';\nimport { graphql, compose } from 'react-apollo';\nimport { createSelector } from 'reselect';\nimport { setActiveJsonEditor } from '../../reducers';\n\nimport { USER_PREFERENCES_QUERY } from '../../graphql';\nimport {WorkspaceCustomSettings} from './WorkspaceCustomSettings';\n\nconst mapStateToProps = (state: any) => ({\n\n});\n\nconst mapDispatchToProps = dispatch => ({\n  \n});\n\nconst WorkspaceCustomSettingsEnhanced: any = connect(mapStateToProps, mapDispatchToProps)(WorkspaceCustomSettings);\n\nexport default WorkspaceCustomSettingsEnhanced;\n","import * as React from 'react';\n\nimport { connect as fela } from 'react-fela';\nimport * as Dimensions from 'react-dimensions';\n\nimport DefaultSettings from '../../components/DefaultSettings';\nimport CustomSettings from '../../components/CustomSettings';\n\nexport type ICustomJsonEditorApiProps = {\n    defaultPrefs?: any;\n};\n\nexport type ICustomJsonEditorStateProps = {\n    defaultSettingsWidth: number;\n};\n\nexport type ICustomJsonEditorDispatchProps = {\n    resizeWidth: (width: number) => any;\n};\n\nexport type ICustomJsonEditorOwnProps = {\n    containerWidth: number;\n    styles: any;\n    content: any;\n    client: any;\n    editorFile: any;\n    onKeyDown: any;\n    onChange: any;\n};\n\nexport type ICustomJsonEditorState = {\n    search: string;\n    defaultPrefs: any;\n};\n\nexport type ICustomJsonEditor = ICustomJsonEditorApiProps & ICustomJsonEditorStateProps &\n    ICustomJsonEditorDispatchProps & ICustomJsonEditorOwnProps;\n\n\nclass CustomJsonEditor extends React.Component<ICustomJsonEditor, ICustomJsonEditorState> {\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            search: null,\n            defaultPrefs: null,\n        };\n    }\n\n    public componentWillMount() {\n        if (this.props.defaultPrefs) {\n            this.setState({ defaultPrefs: this.props.defaultPrefs.preferences });\n        }\n    }\n\n    public componentWillReceiveProps(nextProps) {\n        if (nextProps.defaultPrefs !== this.props.defaultPrefs) {\n            this.setState({ defaultPrefs: nextProps.defaultPrefs.preferences });\n        }\n    }\n\n    public componentDidMount() {\n        this.props.resizeWidth(this.props.containerWidth / 2);\n    }\n\n    private onChange = (e) => {\n        let defaultPrefs;\n        if (e.target.value === '') {\n            defaultPrefs = this.props.defaultPrefs.preferences;\n        } else {\n            defaultPrefs = this.props.defaultPrefs.preferences.filter(el => {\n                return el.name.toLowerCase().indexOf(e.target.value) !== -1;\n            });\n        }\n        this.setState({ search: e.target.value, defaultPrefs });\n    }\n\n    public render() {\n        const { styles, onKeyDown, content, onChange, editorFile, client } = this.props;\n        const { defaultPrefs } = this.state;\n        return (\n            <div className={styles.container}>\n                <div className={styles.searchWrapper}>\n                    <input placeholder=\"Search Settings\" className={styles.search} onChange={this.onChange} />\n                </div>\n                <div className={styles.settings}>\n                    <div className={styles.left}>\n                        <DefaultSettings\n                            editorContent={content}\n                            editorFile={editorFile}\n                            defaultPrefs={defaultPrefs}\n                            client={client}\n                        />\n                    </div>\n                    <div className={styles.right}>\n                        <CustomSettings\n                            onKeyDown={onKeyDown}\n                            content={content}\n                            onChange={onChange}\n                        />\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default Dimensions()(fela<any, any>({\n    container: () => ({\n        width: '100%',\n        height: '100%',\n    }),\n    settings: () => ({\n        display: 'flex',\n        height: '100%',\n    }),\n    left: ({ defaultSettingsWidth }) => ({\n        height: '100%',\n        width: `${defaultSettingsWidth}px`,\n    }),\n    right: ({ defaultSettingsWidth }) => ({\n        height: '100%',\n        width: `calc(100% - ${defaultSettingsWidth}px)`,\n    }),\n    search: () => ({\n        width: '100%',\n    }),\n    searchWrapper: () => ({\n        padding: '20px',\n    }),\n})(CustomJsonEditor));\n","import { connect } from 'react-redux';\nimport { graphql, compose, withApollo } from 'react-apollo';\nimport { createSelector } from 'reselect';\n\nimport { DEFAULT_PREFERENCE_QUERY } from '../../graphql';\nimport { resizeWidthAction } from '../../reducers';\n\nimport CustomJsonEditor, {ICustomJsonEditorStateProps, \n    ICustomJsonEditorDispatchProps, ICustomJsonEditorApiProps, ICustomJsonEditor} from './CustomJsonEditor';\n\nconst CustomJsonEditorWithData: React.ComponentClass<ICustomJsonEditor> | React.StatelessComponent<{}> = compose(\n    graphql<ICustomJsonEditorApiProps, any, {}, {}>(DEFAULT_PREFERENCE_QUERY, {\n        props: createSelector(\n            ({ ownProps, data }) => data,\n            (data) => ({ defaultPrefs: data.defaultPreferences}),\n        ),\n    }),\n)(withApollo(CustomJsonEditor));\n\nconst mapStateToProps = (state: any): ICustomJsonEditorStateProps => ({\n    defaultSettingsWidth: state.preferences.width,\n});\nconst mapDispatchToProps = (dispatch): ICustomJsonEditorDispatchProps => ({\n    resizeWidth: (width: number) => dispatch(resizeWidthAction(width)),\n});\n\nconst CustomJsonEditorEnhanced: any = connect(mapStateToProps, mapDispatchToProps)(CustomJsonEditorWithData);\n\nexport default CustomJsonEditorEnhanced;\n","export { default as CustomJsonEditorEnhanced } from './CustomJsonEditor';\n","export * from './interface';\n","export enum SettingsTypes {\n    USER,\n    WORKSPACE,\n}\n","export * from './mutations';\nexport * from './queries';\n","export const SAVE_USER_SETTINGS_MUTATE = require('./saveUserSettings');\nexport const SAVE_WORKSPACE_SETTINGS_MUTATE = require('./saveWorkspaceSettings');\n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"mutation\",\"name\":{\"kind\":\"Name\",\"value\":\"saveUserSettings\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"content\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"saveUserSettings\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"content\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"content\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":134}};\n    doc.loc.source = {\"body\":\"mutation saveUserSettings($content: String, $user: String) {\\n    saveUserSettings(content: $content, user: $user) {\\n        id\\n    }\\n}\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set(opRefs);\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n\n    module.exports = doc;\n    \n        module.exports[\"saveUserSettings\"] = oneQuery(doc, \"saveUserSettings\");\n        \n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"mutation\",\"name\":{\"kind\":\"Name\",\"value\":\"saveWorkspaceSettings\"},\"variableDefinitions\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"saveWorkspaceSettings\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"updated\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":84}};\n    doc.loc.source = {\"body\":\"mutation saveWorkspaceSettings {\\n    saveWorkspaceSettings {\\n        updated\\n    }\\n}\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set(opRefs);\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n\n    module.exports = doc;\n    \n        module.exports[\"saveWorkspaceSettings\"] = oneQuery(doc, \"saveWorkspaceSettings\");\n        \n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"DefaultPreferences\"},\"variableDefinitions\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"defaultPreferences\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"preferences\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"type\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"data\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"type\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"default\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"description\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"categoryType\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"settings\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"enum\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"enumDescriptions\"},\"arguments\":[],\"directives\":[]}]}}]}}]}}]}}],\"loc\":{\"start\":0,\"end\":249}};\n    doc.loc.source = {\"body\":\"query DefaultPreferences {\\n  defaultPreferences {\\n    preferences {\\n      type\\n      data {\\n        name\\n        type\\n        default\\n        description\\n        categoryType\\n        settings\\n        enum\\n        enumDescriptions\\n      }\\n    }\\n  }\\n}\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set(opRefs);\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n\n    module.exports = doc;\n    \n        module.exports[\"DefaultPreferences\"] = oneQuery(doc, \"DefaultPreferences\");\n        \n","export const USER_PREFERENCES_QUERY = require('./userPreferences');\nexport const USER_PREFERENCES_VALUE_QUERY = require('./userPrefValue');\nexport const USER_SETTINGS_QUERY = require('./userSettings');\nexport const WORKSPACE_PREFERENCE_VALUE_QUERY = require('./workspacePrefValue');\nexport const DEFAULT_PREFERENCE_QUERY = require('./defaultPreferences');\n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"UserPrefValue\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"userPrefValue\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"value\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":111}};\n    doc.loc.source = {\"body\":\"query UserPrefValue($name: String, $user: String) {\\n  userPrefValue(name: $name, user: $user) {\\n    value\\n  }\\n}\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set(opRefs);\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n\n    module.exports = doc;\n    \n        module.exports[\"UserPrefValue\"] = oneQuery(doc, \"UserPrefValue\");\n        \n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"UserPreferences\"},\"variableDefinitions\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"userPreferences\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"prefs\"},\"arguments\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"content\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"},\"arguments\":[],\"directives\":[]}]}}]}}]}}],\"loc\":{\"start\":0,\"end\":95}};\n    doc.loc.source = {\"body\":\"query UserPreferences {\\n  userPreferences{\\n    prefs {\\n        content\\n        user\\n    }\\n  }\\n}\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set(opRefs);\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n\n    module.exports = doc;\n    \n        module.exports[\"UserPreferences\"] = oneQuery(doc, \"UserPreferences\");\n        \n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"UserPreferenceSettings\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"rootpath\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"userSettings\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"user\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"rootpath\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"rootpath\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"data\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":130}};\n    doc.loc.source = {\"body\":\"query UserPreferenceSettings($user: String, $rootpath: String) {\\n  userSettings(user: $user, rootpath: $rootpath) {\\n    data\\n  }\\n}\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set(opRefs);\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n\n    module.exports = doc;\n    \n        module.exports[\"UserPreferenceSettings\"] = oneQuery(doc, \"UserPreferenceSettings\");\n        \n","\n    var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"WorkspacePrefValue\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"rootPath\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"workspacePrefValue\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"rootPath\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"rootPath\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"value\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":133}};\n    doc.loc.source = {\"body\":\"query WorkspacePrefValue($rootPath: String, $name: String) {\\n  workspacePrefValue(rootPath: $rootPath, name: $name) {\\n    value\\n  }\\n}\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n  \n\n    var names = {};\n    function unique(defs) {\n      return defs.filter(\n        function(def) {\n          if (def.kind !== 'FragmentDefinition') return true;\n          var name = def.name.value\n          if (names[name]) {\n            return false;\n          } else {\n            names[name] = true;\n            return true;\n          }\n        }\n      )\n    }\n  \n\n    // Collect any fragment/type references from a node, adding them to the refs Set\n    function collectFragmentReferences(node, refs) {\n      if (node.kind === \"FragmentSpread\") {\n        refs.add(node.name.value);\n      } else if (node.kind === \"VariableDefinition\") {\n        var type = node.type;\n        if (type.kind === \"NamedType\") {\n          refs.add(type.name.value);\n        }\n      }\n\n      if (node.selectionSet) {\n        node.selectionSet.selections.forEach(function(selection) {\n          collectFragmentReferences(selection, refs);\n        });\n      }\n\n      if (node.variableDefinitions) {\n        node.variableDefinitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n\n      if (node.definitions) {\n        node.definitions.forEach(function(def) {\n          collectFragmentReferences(def, refs);\n        });\n      }\n    }\n\n    var definitionRefs = {};\n    (function extractReferences() {\n      doc.definitions.forEach(function(def) {\n        if (def.name) {\n          var refs = new Set();\n          collectFragmentReferences(def, refs);\n          definitionRefs[def.name.value] = refs;\n        }\n      });\n    })();\n\n    function findOperation(doc, name) {\n      for (var i = 0; i < doc.definitions.length; i++) {\n        var element = doc.definitions[i];\n        if (element.name && element.name.value == name) {\n          return element;\n        }\n      }\n    }\n\n    function oneQuery(doc, operationName) {\n      // Copy the DocumentNode, but clear out the definitions\n      var newDoc = {\n        kind: doc.kind,\n        definitions: [findOperation(doc, operationName)]\n      };\n      if (doc.hasOwnProperty(\"loc\")) {\n        newDoc.loc = doc.loc;\n      }\n\n      // Now, for the operation we're running, find any fragments referenced by\n      // it or the fragments it references\n      var opRefs = definitionRefs[operationName] || new Set();\n      var allRefs = new Set();\n      var newRefs = new Set(opRefs);\n      while (newRefs.size > 0) {\n        var prevRefs = newRefs;\n        newRefs = new Set();\n\n        prevRefs.forEach(function(refName) {\n          if (!allRefs.has(refName)) {\n            allRefs.add(refName);\n            var childRefs = definitionRefs[refName] || new Set();\n            childRefs.forEach(function(childRef) {\n              newRefs.add(childRef);\n            });\n          }\n        });\n      }\n\n      allRefs.forEach(function(refName) {\n        var op = findOperation(doc, refName);\n        if (op) {\n          newDoc.definitions.push(op);\n        }\n      });\n\n      return newDoc;\n    }\n\n    module.exports = doc;\n    \n        module.exports[\"WorkspacePrefValue\"] = oneQuery(doc, \"WorkspacePrefValue\");\n        \n","import preferences from './module';\nimport { Feature } from '@common-stack/client-react';\n\nexport * from './containers';\nexport * from './graphql';\n\nexport default new Feature(preferences);\n","import {preferencesReducer} from './reducers';\n\nimport { Feature } from '@common-stack/client-react';\n\nexport default new Feature({\n  reducer: { preferences: preferencesReducer },\n  dataIdFromObject: {\n    'UserSettings': (result) => result.__typename + ':' + result.resource,\n  },\n});\n","export * from './jsonEditor';","import { JSON_EDITOR_ACTION_TYPES } from '../constants/actionTypes';\nexport const setActiveJsonEditor = (active) => (dispatch, getState) => {\n    dispatch({\n        type: JSON_EDITOR_ACTION_TYPES.SET_ACTIVE,\n        payload: active,\n    });\n};\n\nexport const resizeWidthAction = (width) => (dispatch, getState) => {\n    dispatch({\n        type: JSON_EDITOR_ACTION_TYPES.SET_WIDTH,\n        payload: width,\n    });\n};\n\nexport const setNewLineAction = (newLine) => (dispatch, getState) => {\n    dispatch({\n        type: JSON_EDITOR_ACTION_TYPES.SET_NEW_LINE,\n        payload: newLine,\n    });\n};\n","export const JSON_EDITOR_ACTION_TYPES = {\n    SET_ACTIVE: 'json-editor/SET_ACTIVE',\n    SET_WIDTH: 'json-editor/SET_WIDTH',\n    SET_NEW_LINE: 'json-editor/SET_NEW_LINE',\n};\n","export * from './reducers';\nexport * from './actions';\n","export { default as preferencesReducer } from './jsonEditor';\n","import {SettingsTypes} from '../../core';\nimport { JSON_EDITOR_ACTION_TYPES } from '../constants/actionTypes';\n\n\n\nconst defaultState = {\n    active: SettingsTypes.USER,\n};\n\nconst reducer = (state = defaultState, action) => {\n    const { type, payload } = action;\n\n    switch (type) {\n        case JSON_EDITOR_ACTION_TYPES.SET_ACTIVE:\n            return { ...state, active: payload };\n        case JSON_EDITOR_ACTION_TYPES.SET_WIDTH:\n            return { ...state, width: payload };\n        case JSON_EDITOR_ACTION_TYPES.SET_NEW_LINE:\n            return { ...state, newLine: payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","export * from './parser';\n","import { map, isPlainObject } from 'lodash';\nimport { parse } from '../../../common/jsonc-parser/main';\n\nexport const getContent = (settingsArray) => {\n    let value = '';\n    settingsArray.forEach(settings => {\n        settings.data.forEach(el => {\n            value += `//${el.description}\\n`;\n            if (el.type === 'object') {\n                value += `\"${el.name}\": \"${el.default.replace(/\\\"/g, `'`)}\"\\n\\n`;\n            } else {\n                value += `\"${el.name}\": \"${el.default}\"\\n\\n`;\n            } \n        });\n    });\n\n    return value;\n};\n\nexport const findEditorLines = (domContent, settingsArr) => {\n    const settings = this.transform(settingsArr);\n    let settingsIndex = 0;\n    let contentName = 'description';\n    return map(domContent, (content, index) => {\n        if (settingsIndex < settings.length) {\n            const normaliseStr = settings[settingsIndex][contentName].replace(/\\s+/g, ' ');\n            const normaliseSubStr = content.replace(/\\s+/g, ' ');\n            const substrIndex = normaliseStr.indexOf(normaliseSubStr);\n            if (substrIndex === -1 || contentName === 'empty') {\n                settingsIndex++;\n            }\n            let res;\n            if (contentName === 'empty') {\n                res = { index: -1, content, display: false, i: index };\n            } else {\n                res = { index: settingsIndex, content, display: false, i: index };\n            }\n\n            if (substrIndex === -1 || substrIndex + normaliseSubStr.length === normaliseStr.length) {\n                if (contentName === 'description') {\n                    contentName = 'option';\n                } else if (contentName === 'option') {\n                    contentName = 'empty';\n                } else if (contentName === 'empty') {\n                    contentName = 'description';\n                }\n            }\n\n            return res;\n        } else {\n            return { index: -1, content, display: false, i: index };\n        }\n\n    });\n};\n\n\nexport const transform = (settingsArr) => {\n    return map(settingsArr, item => {\n        return { description: `//${item.description}`, option: `\"${item.name}\": \"${item.default}\"`, empty: '\\n' };\n    });\n};\n\nexport const getHints = (settings) => {\n    if (settings.type === 'boolean') {\n        return ['true', 'false'];\n    } else if (settings.type === 'string' && settings.enum && settings.enum.length) {\n        return settings.enum;\n    } else if (settings.type === 'string' && (!settings.enum || !settings.enum.length)) {\n        return ['Copy to settings'];\n    } else if (settings.type === 'number') {\n        return ['Copy to settings'];\n    }\n};\n\nexport const insertNewContent = (content, newLine) => {\n    const contentArray = content.split('\\n');\n    contentArray.pop();\n    contentArray.push(newLine);\n    contentArray.push('}');\n    return contentArray.join('\\n');\n};\n\nexport const change1 = (startLineNumber, column) => {\n    return {\n        changes: [{\n            range: {\n                endColumn: column + 1,\n                endLineNumber: startLineNumber - 1,\n                startColumn: column + 1,\n                startLineNumber: startLineNumber - 1,\n            },\n            rangeLength: 0,\n            text: '\\n    ',\n        }],\n        eol: '\\n',\n        isFlush: false,\n        isRedoing: false,\n        isUndoing: false,\n        versionId: 2,\n    };\n};\n\nexport const change2 = (insertedStr, startLineNumber) => {\n    return {\n        changes: [{\n            range: {\n                endColumn: 1,\n                endLineNumber: startLineNumber,\n                startColumn: 1,\n                startLineNumber: startLineNumber,\n            },\n            rangeLength: 0,\n            text: insertedStr,\n        }],\n        eol: '\\n',\n        isFlush: false,\n        isRedoing: false,\n        isUndoing: false,\n        versionId: 3,\n    };\n};\n\nexport const change4 = (insertedStr, startLineNumber, oldLength) => {\n    return {\n        changes: [{\n            range: {\n                endColumn: oldLength + 1,\n                endLineNumber: startLineNumber,\n                startColumn: 1,\n                startLineNumber: startLineNumber,\n            },\n            rangeLength: oldLength - 4,\n            text: insertedStr,\n        }],\n        eol: '\\n',\n        isFlush: false,\n        isRedoing: false,\n        isUndoing: false,\n        versionId: 3,\n    };\n};\n\nexport const countSettingsLength = (preferences) => {\n    let length = 0;\n    if (!preferences) {\n        return length;\n    }\n    preferences.forEach(el => {\n        length += el.data.length;\n    });\n    return length;\n};\n\nexport const getDeltaDecorations = (monaco, preferences) => {\n    const preferencesLength = countSettingsLength(preferences);\n    const deltaDecoration = [];\n    for (let i = 0; i < preferencesLength * 3; i = i + 3) {\n        deltaDecoration.push({\n            range: new monaco.Range(i + 2, 1, i + 2, 1),\n            options: {\n                glyphMarginClassName: 'line-hint',\n            },\n        });\n    }\n    return deltaDecoration;\n};\n\nexport const checkExist = (content, newLine) => {\n    const key = parse(newLine);\n    const jsonContent = parse(content);\n    const value = jsonContent[key];\n    let checkedIndex = 0;\n    let oldLength = 0;\n\n    if (value !== null && value !== undefined) {\n        const lines = content.split('\\n');\n        const newArr = map(lines, (el, index) => {\n            if (el.indexOf(value) !== -1) {\n                checkedIndex = index;\n                oldLength = el.length;\n                return newLine;\n            }\n            return el;\n        });\n        return { value: newArr.join('\\n'), checkedIndex, oldLength };\n    }\n    return false;\n};\n\nexport const addCategories = (prefs, editor, viewZones) => {\n    let position = 0;\n    const viewZoneNew = [];\n    prefs.forEach(key => {\n        let domNode = document.createElement('div');\n        domNode.className = 'widget-title';\n        domNode.innerHTML = key.type.charAt(0).toUpperCase() + key.type.substr(1);\n\n        const some = editor.changeViewZones(zones => {\n            if (viewZones) {\n                viewZones.forEach(el => zones.removeZone(el));\n            }\n            const res = zones.addZone({ afterLineNumber: position, domNode });\n            viewZoneNew.push(res);\n        });\n        position += 3 * key.data.length;\n    });\n    return viewZoneNew;\n};\n\n\nexport const getPrefsList = (prefs) => {\n    let list = [];\n\n    prefs.forEach(el => {\n        list = [...list, ...el.data];\n    });\n    return list;\n};\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null]}