@fluid-experimental/property-changeset 0.58.1001 → 0.58.2001
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/changeset.d.ts.map +1 -1
- package/dist/changeset.js +1 -18
- package/dist/changeset.js.map +1 -1
- package/dist/changeset_operations/array.d.ts.map +1 -1
- package/dist/changeset_operations/array.js +0 -3
- package/dist/changeset_operations/array.js.map +1 -1
- package/dist/changeset_operations/arrayChangesetIterator.d.ts +4 -4
- package/dist/changeset_operations/arrayChangesetIterator.d.ts.map +1 -1
- package/dist/changeset_operations/arrayChangesetIterator.js +1 -5
- package/dist/changeset_operations/arrayChangesetIterator.js.map +1 -1
- package/dist/changeset_operations/changesetConflictTypes.d.ts.map +1 -1
- package/dist/changeset_operations/changesetConflictTypes.js +0 -1
- package/dist/changeset_operations/changesetConflictTypes.js.map +1 -1
- package/dist/changeset_operations/indexedCollection.d.ts.map +1 -1
- package/dist/changeset_operations/indexedCollection.js +1 -3
- package/dist/changeset_operations/indexedCollection.js.map +1 -1
- package/dist/changeset_operations/isEmptyChangeset.js.map +1 -1
- package/dist/changeset_operations/operationTypes.js +0 -1
- package/dist/changeset_operations/operationTypes.js.map +1 -1
- package/dist/helpers/typeidHelper.d.ts.map +1 -1
- package/dist/helpers/typeidHelper.js +4 -5
- package/dist/helpers/typeidHelper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pathHelper.d.ts +2 -2
- package/dist/pathHelper.d.ts.map +1 -1
- package/dist/pathHelper.js +0 -2
- package/dist/pathHelper.js.map +1 -1
- package/dist/rebase.js +0 -1
- package/dist/rebase.js.map +1 -1
- package/dist/templateValidator.d.ts +3 -3
- package/dist/templateValidator.d.ts.map +1 -1
- package/dist/templateValidator.js +10 -12
- package/dist/templateValidator.js.map +1 -1
- package/dist/test/array.spec.js +56 -56
- package/dist/test/array.spec.js.map +1 -1
- package/dist/test/pathHelper.spec.js +14 -14
- package/dist/test/pathHelper.spec.js.map +1 -1
- package/dist/test/schemaValidator.js +2 -8
- package/dist/test/schemaValidator.js.map +1 -1
- package/dist/test/schemas/badBothPropertiesAndTypeid.js +3 -3
- package/dist/test/schemas/badBothPropertiesAndTypeid.js.map +1 -1
- package/dist/test/schemas/badInvalidSemverInTypeid.js +9 -9
- package/dist/test/schemas/badInvalidSemverInTypeid.js.map +1 -1
- package/dist/test/schemas/badMissingSemverInTypeid.js +9 -9
- package/dist/test/schemas/badMissingSemverInTypeid.js.map +1 -1
- package/dist/test/schemas/badNestedProperties.js +9 -9
- package/dist/test/schemas/badNestedProperties.js.map +1 -1
- package/dist/test/schemas/badPrimitiveTypeid.js +5 -5
- package/dist/test/schemas/badPrimitiveTypeid.js.map +1 -1
- package/dist/test/schemas/badVersionedTypeid.js +9 -9
- package/dist/test/schemas/badVersionedTypeid.js.map +1 -1
- package/dist/test/schemas/goodColorPalette.js +2 -2
- package/dist/test/schemas/goodColorPalette.js.map +1 -1
- package/dist/test/schemas/goodDraftAsVersion.js +2 -2
- package/dist/test/schemas/goodDraftAsVersion.js.map +1 -1
- package/dist/test/schemas/goodPointId.js +9 -9
- package/dist/test/schemas/goodPointId.js.map +1 -1
- package/dist/test/schemas/goodReferenceAndRegular.js +2 -2
- package/dist/test/schemas/goodReferenceAndRegular.js.map +1 -1
- package/dist/test/schemas/goodReservedTypes.js +4 -4
- package/dist/test/schemas/goodReservedTypes.js.map +1 -1
- package/dist/test/schemas/goodUIBorder.js +7 -7
- package/dist/test/schemas/goodUIBorder.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +23 -23
- package/dist/test/validator/templateValidator.spec.js +27 -27
- package/dist/test/validator/templateValidator.spec.js.map +1 -1
- package/dist/test/validator/typeidHelper.spec.js +2 -2
- package/dist/test/validator/typeidHelper.spec.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +2 -4
- package/dist/utils.js.map +1 -1
- package/lib/changeset.js +1 -18
- package/lib/changeset.js.map +1 -1
- package/lib/changeset_operations/array.js +0 -3
- package/lib/changeset_operations/array.js.map +1 -1
- package/lib/changeset_operations/arrayChangesetIterator.js +1 -5
- package/lib/changeset_operations/arrayChangesetIterator.js.map +1 -1
- package/lib/changeset_operations/changesetConflictTypes.js +0 -1
- package/lib/changeset_operations/changesetConflictTypes.js.map +1 -1
- package/lib/changeset_operations/indexedCollection.js +1 -3
- package/lib/changeset_operations/indexedCollection.js.map +1 -1
- package/lib/changeset_operations/isEmptyChangeset.js.map +1 -1
- package/lib/changeset_operations/operationTypes.js +0 -1
- package/lib/changeset_operations/operationTypes.js.map +1 -1
- package/lib/helpers/typeidHelper.js +4 -5
- package/lib/helpers/typeidHelper.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/pathHelper.js +0 -2
- package/lib/pathHelper.js.map +1 -1
- package/lib/rebase.js +0 -1
- package/lib/rebase.js.map +1 -1
- package/lib/templateValidator.js +10 -12
- package/lib/templateValidator.js.map +1 -1
- package/lib/utils.js +2 -4
- package/lib/utils.js.map +1 -1
- package/package.json +8 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.spec.js","sourceRoot":"","sources":["../../src/test/array.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-unused-expressions */\n/**\n * @fileoverview Tests for the array changeset operations\n */\nimport isEmpty from \"lodash/isEmpty\";\nimport isNumber from \"lodash/isNumber\";\nimport {copy as cloneDeep} from \"fastest-json-copy\";\nimport range from \"lodash/range\";\n\n\nimport { ChangeSet, SerializedChangeSet } from \"../changeset\";\nimport { expect, assert } from \"chai\";\n\ndescribe(\"Array Operations\", function() {\n let guidCounter = 1;\n\n const generateNamedEntities = (count, offsets?, type?) => range(count).map((i) => {\n const offsetShift = offsets !== undefined ? offsets.shift() : undefined;\n const id = offsetShift !== undefined ? guidCounter - offsetShift : guidCounter++;\n if (type === undefined) {\n return {\n String: {\n guid: `00000000-0000-0000-0000-${(`000000000000${id}`).substr(-12)}`,\n },\n typeid: \"test:namedEntry-1.0.0\",\n };\n } else if (type === \"number\") {\n return id;\n }\n });\n\n function createArrayCS(arrayOperations, baseOperation?, type?): SerializedChangeSet {\n baseOperation = baseOperation || \"modify\";\n type = type || \"array<test:namedEntry-1.0.0>\";\n return {\n [baseOperation]: {\n [type]: {\n array: arrayOperations,\n },\n },\n };\n }\n\n function getArrayCS(CS): SerializedChangeSet {\n if (CS instanceof ChangeSet) {\n CS = CS.getSerializedChangeSet();\n }\n if (isEmpty(CS)) {\n return {};\n }\n const first = (x) => Object.values(x)[0];\n return first(first(first(CS)));\n }\n\n it(\"Avoid merging of adjacent remove operations with an insert in between\", () => {\n // This test creates a condition where there are two adjacent removes, with an insert\n // in between. Those two removes must not be merged when applying the two changesets\n // as otherwise overlapping ranges would be created in the result, which are not allowed\n // by the spec\n const op1 = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [1, generateNamedEntities(1)],\n ],\n });\n\n const op2 = createArrayCS({\n remove: [\n [0, generateNamedEntities(2)],\n ],\n });\n\n const result = new ChangeSet(op1);\n result.applyChangeSet(op2);\n\n // We expect the two ranges to be non overlapping\n const arrayCS = result.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n const removeStart = arrayCS.remove[0][0];\n const removeEnd = arrayCS.remove[0][0] + arrayCS.remove[0][1].length;\n const insertStart = arrayCS.insert[0][0];\n\n expect(insertStart <= removeStart || insertStart >= removeEnd).to.be.true;\n });\n\n it(\"Rebasing with a base changeset containing adjacent removes and inserts\", () => {\n const base = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const rebaseCS = createArrayCS({\n insert: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const conflicts = [];\n const CS = new ChangeSet(base);\n CS._rebaseChangeSet(rebaseCS, conflicts);\n\n // We expect the rebase to keep the insert at position 0. The base changeSet contains an\n // insert at position 3. There is also a remove within the same CS, which causes both\n // inserts to be with respect to the same position in the resulting array, but we have\n // to keep the order of the inserts, since we can only guarantee the distributivity of\n // the rebase this way. The CS above could have been generated by a combination of a\n // I(1,3) followed by a R(0,1). If the rebase CS would have been rebased separately\n // with respect to those two CS, it would have remained a I(0,3).\n expect((rebaseCS as SerializedChangeSet).modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(0);\n });\n\n for (const i of [0, 3]) {\n it(`Rebasing an insert behind a remove insert base changeset with insert position ${i}`, () => {\n const base = createArrayCS({\n insert: [\n [i, generateNamedEntities(3)],\n ],\n remove: [\n [0, generateNamedEntities(3)],\n ],\n });\n const rebaseCS = createArrayCS({\n insert: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const originalRebaseCS = cloneDeep(rebaseCS);\n const conflicts = [];\n const applyAfterMetaInformation = new Map();\n const CS = new ChangeSet(base);\n CS._rebaseChangeSet(rebaseCS, conflicts, { applyAfterMetaInformation });\n\n // Whether the insert in the rebaseCS is moved depends on the insert in the base CS. If the base CS\n // is the result of an I(3, 3) followed by a R(0,3), it would not be moved since the insert in the baseCS\n // is behind the insert in the rebase CS. Otherwise, if it is an I(0, 0) our rebase rules would move it\n // to index 3 behind the other insert\n expect(rebaseCS.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(i === 0 ? 3 : 0);\n\n const combinedCS = new ChangeSet(originalRebaseCS);\n combinedCS.toInverseChangeSet();\n combinedCS.applyChangeSet(base);\n combinedCS.applyChangeSet(rebaseCS, { applyAfterMetaInformation });\n\n const finalCs = combinedCS.getSerializedChangeSet();\n // The insert above should cancel out. If the original insert was at position 0, we moved the rebased\n // insert behind the original insert. This means the original insert should now be at position 0,\n // before the insert that canceled out. Otherwise, it should be at position 4 (behind the removed\n // range, as it was in the original CS, but now shifted by 1).\n expect(finalCs.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(i === 0 ? 0 : 4);\n });\n }\n\n it(\"Inserts should happen at the beginning of a remove range\", () => {\n const op1 = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [1, generateNamedEntities(1)],\n ],\n });\n const op2 = createArrayCS({\n insert: [\n [4, generateNamedEntities(2)],\n ],\n });\n\n const combinedCS = new ChangeSet(op1);\n combinedCS.applyChangeSet(op2);\n\n const arrayCS = combinedCS.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n expect(arrayCS.insert.length).to.equal(1);\n });\n\n function testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState) {\n const conflicts = [];\n const rebaseMetaInformation = new Map();\n const originalRebaseChangeSet = cloneDeep(localBranchChangeSet);\n const deltaChangeSet = new ChangeSet(cloneDeep(localBranchChangeSet));\n deltaChangeSet.toInverseChangeSet();\n\n const rebaseChangeSet = cloneDeep(localBranchChangeSet);\n new ChangeSet(baseChangeSet)._rebaseChangeSet(rebaseChangeSet, conflicts, {\n applyAfterMetaInformation: rebaseMetaInformation,\n });\n\n deltaChangeSet.applyChangeSet(baseChangeSet);\n validateChangeSet(deltaChangeSet);\n const copiedRebaseChangeSet = cloneDeep(rebaseChangeSet);\n deltaChangeSet.applyChangeSet(rebaseChangeSet, {\n applyAfterMetaInformation: rebaseMetaInformation,\n });\n validateChangeSet(deltaChangeSet);\n\n // This path first walks onto the local branch (applying the original changeset from the local branch)\n // and then the delta to the new tip (going back one step, and then forward again)\n const deltaPath = new ChangeSet(cloneDeep(baseState));\n deltaPath.applyChangeSet(originalRebaseChangeSet);\n deltaPath.applyChangeSet(deltaChangeSet);\n\n // This computes the same state, but not starting from the local branch, but from the base commit itself\n const directPath = new ChangeSet(cloneDeep(baseState));\n directPath.applyChangeSet(baseChangeSet);\n directPath.applyChangeSet(rebaseChangeSet);\n expect(deltaPath.getSerializedChangeSet()).to.deep.equal(directPath.getSerializedChangeSet());\n\n // Make sure, the rebase changeset was not modified in the apply operation above\n expect(copiedRebaseChangeSet).to.deep.equal(rebaseChangeSet);\n\n return deltaChangeSet;\n }\n\n function runTestApplyingReverseAndRebasedChangesetForIndependentModifications(baseInsertPositions,\n rebasedInsertPositions,\n baseOperation = \"insert\",\n baseCount = 1) {\n\n const createInserts = (positions, count) => positions.map((x) => [\n x,\n generateNamedEntities(count),\n ]);\n\n const baseChangeSet = createArrayCS({\n [baseOperation]: createInserts(baseInsertPositions, baseCount),\n });\n\n const localBranchChangeSet = createArrayCS({\n insert: createInserts(rebasedInsertPositions, 1),\n });\n\n // Test whether the created changeset computes the same result as applying\n // the base and rebase changeset to the base state\n const baseState = createArrayCS({\n insert: createInserts([0], 20),\n });\n const deltaChangeSet = testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState);\n\n // Make sure the delta changeset does not contain any other operations than the inserts from the base state\n const arrayChangeSet = deltaChangeSet.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n\n expect(arrayChangeSet[baseOperation].length).to.equal(baseInsertPositions.length);\n for (let i = 0; i < baseInsertPositions.length; i++) {\n expect(arrayChangeSet[baseOperation][i][1].length).to.equal(baseCount);\n }\n expect(arrayChangeSet).to.not.have.property(baseOperation === \"insert\" ? \"remove\" : \"insert\");\n }\n\n describe(\"Rebase test applying the reverse, base and then rebased changeset\", () => {\n for (const basePositions of [\n [0], [1], [2], [5], [13], [0, 2], [0, 5], [0, 5, 13],\n ]) {\n for (const rebasePositions of [\n [0], [1], [5, 9], [5, 9, 12],\n ]) {\n it(`with base positions ${basePositions} and rebase positions ${rebasePositions}`, () => {\n runTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n basePositions,\n rebasePositions,\n );\n });\n }\n }\n });\n\n describe(\"Rebase test applying the reverse, base and then rebased changeset2\", () => {\n it(`with removes in the base`, () => {\n runTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n [0], [2],\n \"remove\",\n 2,\n );\n });\n });\n\n function testRebaseDistributivity(baseChangesets, rebaseChangeSet, base) {\n // First rebase with each CS independently\n const rebasedCS1 = cloneDeep(rebaseChangeSet);\n for (const baseChangeSet of baseChangesets) {\n const conflicts = [];\n (new ChangeSet(baseChangeSet))._rebaseChangeSet(rebasedCS1, conflicts);\n validateChangeSet(rebasedCS1);\n }\n\n // Now rebase with respect to the squashed base ChangeSets\n const squashedBaseChangeSets = new ChangeSet();\n for (const baseChangeSet of baseChangesets) {\n squashedBaseChangeSets.applyChangeSet(baseChangeSet);\n }\n\n // Test whether squashed base changes are consistent\n const directApplication = new ChangeSet(cloneDeep(base));\n for (const baseChangeSet of baseChangesets) {\n directApplication.applyChangeSet(baseChangeSet);\n }\n const squashApplication = new ChangeSet(cloneDeep(base));\n squashApplication.applyChangeSet(squashedBaseChangeSets);\n expect(directApplication.getSerializedChangeSet()).to.deep.equal(\n squashApplication.getSerializedChangeSet(),\n );\n\n const conflicts2 = [];\n const rebasedCS2 = cloneDeep(rebaseChangeSet);\n (new ChangeSet(squashedBaseChangeSets))._rebaseChangeSet(rebasedCS2, conflicts2);\n validateChangeSet(rebasedCS2);\n\n expect(rebasedCS1).to.deep.equal(rebasedCS2);\n\n return testRebasedApplies(cloneDeep(rebaseChangeSet), squashedBaseChangeSets, base);\n }\n\n describe(\"Rebase Distributivity\", () => {\n describe(\"Multiple inserts in a remove range\", () => {\n for (const insertPosition of [0, 1, 3, 5, 7, 12]) {\n it(`Position ${insertPosition}`, () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [1, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [6, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [9, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(4)],\n [7, generateNamedEntities(2)],\n [10, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [insertPosition, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n }\n });\n it(\"Rebasing an insert with respect to a remove + insert\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"remove + insert at start of array\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"Rebased remove that cancels out\", () => {\n const deltacS = testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ]\n }),\n ],\n createArrayCS({\n remove: [\n [1, generateNamedEntities(2)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n const arrayCS = getArrayCS(deltacS);\n expect(arrayCS.insert[0][1].length).to.equal(3);\n expect(arrayCS.remove[0][1].length).to.equal(1);\n });\n it(\"Insert in between two removes 1\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [2, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(2)],\n ]\n }),\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(2)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [1, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"Insert in between two removes 2\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [4, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(2)],\n ]\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"Inserts in between three removes\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [4, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [6, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(2)],\n ]\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"Adjacent remove with insert at the beginning of the remove range\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [1, generateNamedEntities(2)],\n ]\n }),\n ],\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1, [3])],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"Remove operation that cancels out\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [8, generateNamedEntities(2)],\n ]\n }),\n createArrayCS({\n insert: [\n [8, generateNamedEntities(1)],\n ]\n }),\n ],\n createArrayCS({\n remove: [\n [8, generateNamedEntities(1, [3])],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ]\n }),\n );\n });\n it(\"Remove operation that cancels out 2\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [8, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n // [8, generateNamedEntities(1)],\n [8, generateNamedEntities(1)],\n [17, generateNamedEntities(1)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [8, generateNamedEntities(1, [3])],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ]\n }),\n );\n });\n it(\"Remove operation that cancels out in the middle of a range\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ]\n }),\n ],\n createArrayCS({\n remove: [\n [3, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ]\n }),\n );\n });\n });\n\n function validateChangeSet(CS) {\n const arrayCS = getArrayCS(CS);\n\n const insertPositions = new Set();\n if (arrayCS.insert) {\n arrayCS.insert.forEach((x) => insertPositions.add(x[0]));\n }\n for (const type of [\"insert\", \"modify\", \"remove\"]) {\n const changes = arrayCS[type];\n\n // Make sure the entries are sorted\n if (changes !== undefined) {\n let lastIndex = -5;\n let lastLength = 0;\n for (const entry of changes) {\n // Ranges should not be adjacent. However, they might be interrupted, if there is an insert\n // inside the range\n let indexOffset = 1;\n if (type === \"remove\" || type === \"modify\") {\n indexOffset = lastLength;\n if (!insertPositions.has(lastIndex + indexOffset)) {\n indexOffset += 1;\n }\n }\n assert(entry[0] >= lastIndex + indexOffset, \"Changeset operations are not sorted or not merged\");\n lastIndex = entry[0];\n lastLength = !isNumber(entry[1]) ? entry[1].length : entry[1];\n\n // Inserts must not lie within modify or remove ranges\n if (type === \"remove\" || type === \"modify\") {\n insertPositions.forEach(\n (i) => assert(i <= lastIndex || i >= lastIndex + lastLength, `Insert within ${type} range.`),\n );\n }\n }\n }\n }\n }\n\n function testApplyAssociativity(base, operations, customValidator?) {\n const combinedCS = new ChangeSet();\n operations.forEach(combinedCS.applyChangeSet.bind(combinedCS));\n validateChangeSet(combinedCS);\n\n // Individually apply the operations\n const separateApplysResult = new ChangeSet(cloneDeep(base));\n operations.forEach(separateApplysResult.applyChangeSet.bind(separateApplysResult));\n validateChangeSet(separateApplysResult);\n\n // And apply the combined CS\n const combinedApplyResult = new ChangeSet(cloneDeep(base));\n combinedApplyResult.applyChangeSet(combinedCS);\n\n if (customValidator !== undefined) {\n customValidator(combinedCS, separateApplysResult, combinedApplyResult);\n }\n\n expect(separateApplysResult.getSerializedChangeSet())\n .to.deep.equal(combinedApplyResult.getSerializedChangeSet());\n }\n\n describe(\"Apply Associativity\", () => {\n it(\"insert + remove + insert\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }, \"insert\");\n\n const ops = [\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(2, [1, 3])],\n ],\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(1)],\n ],\n }),\n ];\n\n testApplyAssociativity(initial, ops);\n });\n\n describe(\"Inserting into a remove range with deletes on both sides\", () => {\n for (const additionalInserts of [\"\", \" with insert at the beginning\", \" with insert at the end\"]) {\n const offset = additionalInserts === \" with insert at the beginning\" ? 2 : 0;\n for (const i of range(1, 9)) {\n it(`at postion ${i + offset}${additionalInserts}`, () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n let initialInserts = [];\n let finalInserts = [];\n if (additionalInserts === \" with insert at the beginning\") {\n initialInserts = [\n [0, generateNamedEntities(2, undefined, \"number\")],\n ];\n }\n if (additionalInserts === \" with insert at the end\") {\n finalInserts = [\n [10, generateNamedEntities(2, undefined, \"number\")],\n ];\n }\n const ops = [createArrayCS({\n insert: [\n ...initialInserts, [\n 2,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n [\n 7,\n generateNamedEntities(3, undefined, \"number\"),\n ],\n ...finalInserts,\n ],\n remove: [\n [\n 2,\n generateNamedEntities(5, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n insert: [\n [\n i + offset,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops, (combinedCS) => {\n const arrayCS = getArrayCS(combinedCS);\n expect(arrayCS.insert.length).to.equal((i >= 2 && i < 8 ? 2 : 3) +\n (additionalInserts !== \"\" ? 1 : 0));\n\n const insertOffset = additionalInserts == \" with insert at the beginning\" ? 1 : 0;\n if (i >= 2 && i <= 4) {\n expect(arrayCS.insert[0 + insertOffset][1].length).to.equal(4);\n expect(arrayCS.insert[1 + insertOffset][1].length).to.equal(3);\n }\n if (i > 4 && i < 8) {\n expect(arrayCS.insert[0 + insertOffset][1].length).to.equal(2);\n expect(arrayCS.insert[1 + insertOffset][1].length).to.equal(5);\n }\n });\n });\n }\n }\n });\n\n it(\"remove overlapping insert and remove ranges\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(1, undefined, \"number\")],\n [1, generateNamedEntities(1, undefined, \"number\")],\n [4, generateNamedEntities(6, undefined, \"number\")],\n ],\n remove: [\n [1, generateNamedEntities(1, undefined, \"number\")],\n [2, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [\n 0,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Overlapping remove / insert\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(2, undefined, \"number\")],\n ],\n remove: [\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(2, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Removing multiple inserts and removes\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [1, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(4, undefined, \"number\")],\n ],\n remove: [\n [0, generateNamedEntities(1, undefined, \"number\")],\n [1, generateNamedEntities(3, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(6, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Removing insert/removes at the end\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(2, undefined, \"number\")],\n [1, generateNamedEntities(1, undefined, \"number\")],\n [4, generateNamedEntities(4, undefined, \"number\")],\n ],\n remove: [\n [1, generateNamedEntities(3, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [6, generateNamedEntities(2, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Insert with overlapping remove\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ],\n insert: [\n [1, generateNamedEntities(3)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Failed case\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(7)],\n ],\n }),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(1)],\n ],\n insert: [\n [1, generateNamedEntities(2)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Failed case\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(5)],\n ],\n }),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ],\n insert: [\n [5, generateNamedEntities(3)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n });\n\n describe(\"Apply with removes in both changesets\", () => {\n for (const startInsertA of [true, false]) {\n for (const startInsertB of [true, false]) {\n for (const removeInsertA of [true, false]) {\n for (const removeInsertB of [true, false]) {\n for (const removeInsideInsertB of [\"adjacent\", \"separate\", false]) {\n const insertNames = [];\n if (startInsertA) {\n insertNames.push(\"at start of A\");\n }\n if (startInsertB) {\n insertNames.push(\"at start of B\");\n }\n if (removeInsertA) {\n insertNames.push(\"before remove in A\");\n }\n if (removeInsertB) {\n insertNames.push(\"before remove in B\");\n }\n if (removeInsideInsertB) {\n insertNames.push(`inside remove range in B (${removeInsideInsertB})`);\n }\n let title = \"with \";\n if (insertNames.length === 0) {\n title += \"no inserts\";\n } else {\n title += `inserts ${insertNames.join(\", \")}`;\n }\n it(title, () => {\n const insertsA = [];\n const insertsB = [];\n let offset = 0;\n if (startInsertA) {\n insertsA.push([0, generateNamedEntities(1)]);\n offset += 1;\n }\n if (removeInsertA) {\n insertsA.push([5, generateNamedEntities(1)]);\n offset += 1;\n }\n\n let removesB = [\n [5 + offset, generateNamedEntities(3)],\n ];\n if (startInsertB) {\n insertsB.push([0, generateNamedEntities(1)]);\n }\n if (removeInsertB) {\n insertsB.push([5 + offset, generateNamedEntities(1)]);\n }\n if (removeInsideInsertB) {\n const removeOffset = removeInsideInsertB === \"separate\" ? 1 : 0;\n\n insertsB.push([6 + offset + removeOffset, generateNamedEntities(1)]);\n removesB = [\n [5 + offset + removeOffset, generateNamedEntities(1)],\n [6 + offset + removeOffset, generateNamedEntities(1)],\n ];\n }\n const CS1 = createArrayCS({\n insert: insertsA,\n remove: [\n [5, generateNamedEntities(3)],\n ],\n });\n const CS2 = createArrayCS({\n insert: insertsB,\n remove: removesB,\n });\n\n const CS = new ChangeSet(CS1);\n CS.applyChangeSet(CS2);\n validateChangeSet(CS.getSerializedChangeSet());\n });\n }\n }\n }\n }\n }\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"array.spec.js","sourceRoot":"","sources":["../../src/test/array.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAEH,0CAA0C;AAC1C;;GAEG;AACH,6DAAqC;AACrC,+DAAuC;AACvC,yDAAoD;AACpD,yDAAiC;AAEjC,+BAAsC;AACtC,4CAA8D;AAE9D,QAAQ,CAAC,kBAAkB,EAAE;IACzB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,OAAQ,EAAE,IAAK,EAAE,EAAE,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7E,MAAM,WAAW,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,MAAM,EAAE,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACjF,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,OAAO;gBACH,MAAM,EAAE;oBACJ,IAAI,EAAE,2BAA2B,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;iBACvE;gBACD,MAAM,EAAE,uBAAuB;aAClC,CAAC;SACL;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;YAC1B,OAAO,EAAE,CAAC;SACb;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,aAAa,CAAC,eAAe,EAAE,aAAc,EAAE,IAAK;QACzD,aAAa,GAAG,aAAa,IAAI,QAAQ,CAAC;QAC1C,IAAI,GAAG,IAAI,IAAI,8BAA8B,CAAC;QAC9C,OAAO;YACH,CAAC,aAAa,CAAC,EAAE;gBACb,CAAC,IAAI,CAAC,EAAE;oBACJ,KAAK,EAAE,eAAe;iBACzB;aACJ;SACJ,CAAC;IACN,CAAC;IAED,SAAS,UAAU,CAAC,EAAE;QAClB,IAAI,EAAE,YAAY,qBAAS,EAAE;YACzB,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE,CAAC;SACpC;QACD,IAAI,iBAAO,CAAC,EAAE,CAAC,EAAE;YACb,OAAO,EAAE,CAAC;SACb;QACD,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC7E,qFAAqF;QACrF,oFAAoF;QACpF,wFAAwF;QACxF,cAAc;QACd,MAAM,GAAG,GAAG,aAAa,CAAC;YACtB,MAAM,EAAE;gBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAChC;YACD,MAAM,EAAE;gBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAChC;SACJ,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,aAAa,CAAC;YACtB,MAAM,EAAE;gBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAChC;SACJ,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,qBAAS,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE3B,iDAAiD;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC;QAC7F,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,aAAM,CAAC,WAAW,IAAI,WAAW,IAAI,WAAW,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAC9E,MAAM,IAAI,GAAG,aAAa,CAAC;YACvB,MAAM,EAAE;gBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAChC;YACD,MAAM,EAAE;gBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAChC;SACJ,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,aAAa,CAAC;YAC3B,MAAM,EAAE;gBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAChC;SACJ,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEzC,wFAAwF;QACxF,qFAAqF;QACrF,sFAAsF;QACtF,sFAAsF;QACtF,oFAAoF;QACpF,mFAAmF;QACnF,iEAAiE;QACjE,aAAM,CAAE,QAAgC,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpH,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACpB,EAAE,CAAC,iFAAiF,CAAC,EAAE,EAAE,GAAG,EAAE;YAC1F,MAAM,IAAI,GAAG,aAAa,CAAC;gBACvB,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;gBACD,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,aAAa,CAAC;gBAC3B,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,CAAC,CAAC;YAEH,MAAM,gBAAgB,GAAG,wBAAS,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;YAC5C,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,CAAC;YAC/B,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAExE,mGAAmG;YACnG,yGAAyG;YACzG,uGAAuG;YACvG,qCAAqC;YACrC,aAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAErG,MAAM,UAAU,GAAG,IAAI,qBAAS,CAAC,gBAAgB,CAAC,CAAC;YACnD,UAAU,CAAC,kBAAkB,EAAE,CAAC;YAChC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAChC,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,EAAE,CAAC;YACpD,qGAAqG;YACrG,iGAAiG;YACjG,iGAAiG;YACjG,8DAA8D;YAC9D,aAAM,CAAC,OAAO,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,CAAC,CAAC,CAAC;KACN;IAED,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAChE,MAAM,GAAG,GAAG,aAAa,CAAC;YACtB,MAAM,EAAE;gBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAChC;YACD,MAAM,EAAE;gBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAChC;SACJ,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC;YACtB,MAAM,EAAE;gBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAChC;SACJ,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,qBAAS,CAAC,GAAG,CAAC,CAAC;QACtC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE/B,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC;QACjG,aAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,SAAS,kBAAkB,CAAC,oBAAoB,EAAE,aAAa,EAAE,SAAS;QACtE,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;QACxC,MAAM,uBAAuB,GAAG,wBAAS,CAAC,oBAAoB,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,IAAI,qBAAS,CAAC,wBAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACtE,cAAc,CAAC,kBAAkB,EAAE,CAAC;QAEpC,MAAM,eAAe,GAAG,wBAAS,CAAC,oBAAoB,CAAC,CAAC;QACxD,IAAI,qBAAS,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,eAAe,EAAE,SAAS,EAAE;YACtE,yBAAyB,EAAE,qBAAqB;SACnD,CAAC,CAAC;QAEH,cAAc,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC7C,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAClC,MAAM,qBAAqB,GAAG,wBAAS,CAAC,eAAe,CAAC,CAAC;QACzD,cAAc,CAAC,cAAc,CAAC,eAAe,EAAE;YAC3C,yBAAyB,EAAE,qBAAqB;SACnD,CAAC,CAAC;QACH,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAElC,sGAAsG;QACtG,kFAAkF;QAClF,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC,wBAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,SAAS,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;QAClD,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAEzC,wGAAwG;QACxG,MAAM,UAAU,GAAG,IAAI,qBAAS,CAAC,wBAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACzC,UAAU,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QAC3C,aAAM,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAE9F,gFAAgF;QAChF,aAAM,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7D,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,SAAS,oEAAoE,CAAC,mBAAmB,EAC7F,sBAAsB,EACtB,aAAa,GAAG,QAAQ,EACxB,SAAS,GAAG,CAAC;QAEb,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7D,CAAC;YACD,qBAAqB,CAAC,KAAK,CAAC;SAC/B,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,aAAa,CAAC;YAChC,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,mBAAmB,EAAE,SAAS,CAAC;SACjE,CAAC,CAAC;QAEH,MAAM,oBAAoB,GAAG,aAAa,CAAC;YACvC,MAAM,EAAE,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC;SACnD,CAAC,CAAC;QAEH,0EAA0E;QAC1E,kDAAkD;QAClD,MAAM,SAAS,GAAG,aAAa,CAAC;YAC5B,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SACjC,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAE1F,2GAA2G;QAC3G,MAAM,cAAc,GAAG,cAAc,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC;QAE5G,aAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,aAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;SAC1E;QACD,aAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClG,CAAC;IAED,QAAQ,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC/E,KAAK,MAAM,aAAa,IAAI;YACxB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;SACvD,EAAE;YACC,KAAK,MAAM,eAAe,IAAI;gBAC1B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;aAC/B,EAAE;gBACC,EAAE,CAAC,uBAAuB,aAAa,yBAAyB,eAAe,EAAE,EAAE,GAAG,EAAE;oBACpF,oEAAoE,CAChE,aAAa,EACb,eAAe,CAClB,CAAC;gBACN,CAAC,CAAC,CAAC;aACN;SACJ;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAChF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAChC,oEAAoE,CAChE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACR,QAAQ,EACR,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,SAAS,wBAAwB,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI;QACnE,0CAA0C;QAC1C,MAAM,UAAU,GAAG,wBAAS,CAAC,eAAe,CAAC,CAAC;QAC9C,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;YACxC,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,CAAC,IAAI,qBAAS,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACvE,iBAAiB,CAAC,UAAU,CAAC,CAAC;SACjC;QAED,0DAA0D;QAC1D,MAAM,sBAAsB,GAAG,IAAI,qBAAS,EAAE,CAAC;QAC/C,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;YACxC,sBAAsB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;SACxD;QAED,oDAAoD;QACpD,MAAM,iBAAiB,GAAG,IAAI,qBAAS,CAAC,wBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;YACxC,iBAAiB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;SACnD;QACD,MAAM,iBAAiB,GAAG,IAAI,qBAAS,CAAC,wBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,iBAAiB,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;QACzD,aAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAC5D,iBAAiB,CAAC,sBAAsB,EAAE,CAC7C,CAAC;QAEF,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,wBAAS,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC,IAAI,qBAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACjF,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE9B,aAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE7C,OAAO,kBAAkB,CAAC,wBAAS,CAAC,eAAe,CAAC,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;IACxF,CAAC;IAED,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACnC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAChD,KAAK,MAAM,cAAc,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC9C,EAAE,CAAC,YAAY,cAAc,EAAE,EAAE,GAAG,EAAE;oBAClC,wBAAwB,CAAC;wBACrB,aAAa,CAAC;4BACV,MAAM,EAAE;gCACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;6BAChC;yBACJ,CAAC;wBACF,aAAa,CAAC;4BACV,MAAM,EAAE;gCACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;6BAChC;yBACJ,CAAC;wBACF,aAAa,CAAC;4BACV,MAAM,EAAE;gCACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;6BAChC;yBACJ,CAAC;wBACF,aAAa,CAAC;4BACV,MAAM,EAAE;gCACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;gCAC7B,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;gCAC7B,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;6BACjC;yBACJ,CAAC;qBACL,EACG,aAAa,CAAC;wBACV,MAAM,EAAE;4BACJ,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;yBAC7C;qBACJ,CAAC,EACF,aAAa,CAAC;wBACV,MAAM,EAAE;4BACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;yBACjC;qBACJ,CAAC,CACL,CAAC;gBACN,CAAC,CAAC,CAAC;aACN;QACL,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC5D,wBAAwB,CAAC;gBACrB,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;YACF,wBAAwB,CAAC;gBACrB,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YACzC,wBAAwB,CAAC;gBACrB,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACvC,MAAM,OAAO,GAAG,wBAAwB,CAAC;gBACrC,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;YACF,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YACpC,aAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChD,aAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACvC,wBAAwB,CAAC;gBACrB,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACvC,wBAAwB,CAAC;gBACrB,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YACxC,wBAAwB,CAAC;gBACrB,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YACxE,wBAAwB,CAAC;gBACrB,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YACzC,wBAAwB,CAAC;gBACrB,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC3C,wBAAwB,CAAC;gBACrB,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,iCAAiC;wBACjC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;wBAC7B,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBACjC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YAClE,wBAAwB,CAAC;gBACrB,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,EACG,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,CAAC,EACF,aAAa,CAAC;gBACV,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,CAAC,CACL,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,SAAS,iBAAiB,CAAC,EAAE;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAE/B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5D;QACD,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;YAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAE9B,mCAAmC;YACnC,IAAI,OAAO,KAAK,SAAS,EAAE;gBACvB,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;gBACnB,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;oBACzB,2FAA2F;oBAC3F,mBAAmB;oBACnB,IAAI,WAAW,GAAG,CAAC,CAAC;oBACpB,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACxC,WAAW,GAAG,UAAU,CAAC;wBACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,EAAE;4BAC/C,WAAW,IAAI,CAAC,CAAC;yBACpB;qBACJ;oBACD,aAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,WAAW,EAAE,mDAAmD,CAAC,CAAC;oBACjG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrB,UAAU,GAAG,CAAC,kBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAE9D,sDAAsD;oBACtD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACxC,eAAe,CAAC,OAAO,CACnB,CAAC,CAAC,EAAE,EAAE,CAAC,aAAM,CAAC,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,UAAU,EAAE,iBAAiB,IAAI,SAAS,CAAC,CAC/F,CAAC;qBACL;iBACJ;aACJ;SACJ;IACL,CAAC;IAED,SAAS,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAgB;QAC9D,MAAM,UAAU,GAAG,IAAI,qBAAS,EAAE,CAAC;QACnC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/D,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE9B,oCAAoC;QACpC,MAAM,oBAAoB,GAAG,IAAI,qBAAS,CAAC,wBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACnF,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;QAExC,4BAA4B;QAC5B,MAAM,mBAAmB,GAAG,IAAI,qBAAS,CAAC,wBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,mBAAmB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,eAAe,KAAK,SAAS,EAAE;YAC/B,eAAe,CAAC,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;SAC1E;QAED,aAAM,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,CAAC;aAChD,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAChC,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC1B,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ,EAAE,QAAQ,CAAC,CAAC;YAEb,MAAM,GAAG,GAAG;gBACR,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;qBACxC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACL,CAAC;YAEF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;YACtE,KAAK,MAAM,iBAAiB,IAAI,CAAC,EAAE,EAAE,+BAA+B,EAAE,yBAAyB,CAAC,EAAE;gBAC9F,MAAM,MAAM,GAAG,iBAAiB,KAAK,+BAA+B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7E,KAAK,MAAM,CAAC,IAAI,eAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oBACzB,EAAE,CAAC,cAAc,CAAC,GAAG,MAAM,GAAG,iBAAiB,EAAE,EAAE,GAAG,EAAE;wBACpD,MAAM,OAAO,GAAG,aAAa,CAAC;4BAC1B,MAAM,EAAE;gCACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;6BACtD;yBACJ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;wBAE/B,IAAI,cAAc,GAAG,EAAE,CAAC;wBACxB,IAAI,YAAY,GAAG,EAAE,CAAC;wBACtB,IAAI,iBAAiB,KAAK,+BAA+B,EAAE;4BACvD,cAAc,GAAG;gCACb,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;6BACrD,CAAC;yBACL;wBACD,IAAI,iBAAiB,KAAK,yBAAyB,EAAE;4BACjD,YAAY,GAAG;gCACX,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;6BACtD,CAAC;yBACL;wBACD,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC;gCACvB,MAAM,EAAE;oCACJ,GAAG,cAAc,EAAE;wCACf,CAAC;wCACD,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;qCAChD;oCACD;wCACI,CAAC;wCACD,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;qCAChD;oCACD,GAAG,YAAY;iCAClB;gCACD,MAAM,EAAE;oCACJ;wCACI,CAAC;wCACD,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;qCAChD;iCACJ;6BACJ,EAAE,SAAS,EAAE,gBAAgB,CAAC;4BAC/B,aAAa,CAAC;gCACV,MAAM,EAAE;oCACJ;wCACI,CAAC,GAAG,MAAM;wCACV,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;qCAChD;iCACJ;6BACJ,EAAE,SAAS,EAAE,gBAAgB,CAAC;yBAC9B,CAAC;wBACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE;4BAChD,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;4BACvC,aAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC5D,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAExC,MAAM,YAAY,GAAG,iBAAiB,IAAI,+BAA+B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAClF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gCAClB,aAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC/D,aAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;6BAClE;4BACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gCAChB,aAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC/D,aAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;6BAClE;wBACL,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;iBACN;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACnD,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC1B,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;iBACtD;aACJ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAE/B,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC;oBACvB,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;oBACD,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;iBACJ,EAAE,SAAS,EAAE,gBAAgB,CAAC;gBAC/B,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ;4BACI,CAAC;4BACD,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;yBAChD;qBACJ;iBACJ,EAAE,SAAS,EAAE,gBAAgB,CAAC;aAC9B,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACnC,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC1B,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;iBACtD;aACJ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAE/B,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC;oBACvB,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;oBACD,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;iBACJ,EAAE,SAAS,EAAE,gBAAgB,CAAC;gBAC/B,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;iBACJ,EAAE,SAAS,EAAE,gBAAgB,CAAC;aAC9B,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC1B,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;iBACtD;aACJ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAE/B,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC;oBACvB,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;oBACD,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;iBACJ,EAAE,SAAS,EAAE,gBAAgB,CAAC;gBAC/B,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;iBACJ,EAAE,SAAS,EAAE,gBAAgB,CAAC;aAC9B,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC1C,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC1B,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;iBACtD;aACJ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAE/B,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC;oBACvB,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;oBACD,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;iBACJ,EAAE,SAAS,EAAE,gBAAgB,CAAC;gBAC/B,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACrD;iBACJ,EAAE,SAAS,EAAE,gBAAgB,CAAC;aAC9B,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACtC,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC1B,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,EAAE,QAAQ,CAAC,CAAC;YAEb,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC;oBACvB,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;oBACD,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACD,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACnB,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC1B,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,EAAE,QAAQ,CAAC,CAAC;YAEb,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC;oBACvB,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;oBACD,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACD,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACnB,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC1B,MAAM,EAAE;oBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;iBACjC;aACJ,EAAE,QAAQ,CAAC,CAAC;YAEb,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC;oBACvB,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;gBACF,aAAa,CAAC;oBACV,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;oBACD,MAAM,EAAE;wBACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAChC;iBACJ,CAAC;aACD,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACnD,KAAK,MAAM,YAAY,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YACtC,KAAK,MAAM,YAAY,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;gBACtC,KAAK,MAAM,aAAa,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;oBACvC,KAAK,MAAM,aAAa,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;wBACvC,KAAK,MAAM,mBAAmB,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;4BAC/D,MAAM,WAAW,GAAG,EAAE,CAAC;4BACvB,IAAI,YAAY,EAAE;gCACd,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;6BACrC;4BACD,IAAI,YAAY,EAAE;gCACd,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;6BACrC;4BACD,IAAI,aAAa,EAAE;gCACf,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;6BAC1C;4BACD,IAAI,aAAa,EAAE;gCACf,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;6BAC1C;4BACD,IAAI,mBAAmB,EAAE;gCACrB,WAAW,CAAC,IAAI,CAAC,6BAA6B,mBAAmB,GAAG,CAAC,CAAC;6BACzE;4BACD,IAAI,KAAK,GAAG,OAAO,CAAC;4BACpB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;gCAC1B,KAAK,IAAI,YAAY,CAAC;6BACzB;iCAAM;gCACH,KAAK,IAAI,WAAW,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;6BAChD;4BACD,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gCACX,MAAM,QAAQ,GAAG,EAAE,CAAC;gCACpB,MAAM,QAAQ,GAAG,EAAE,CAAC;gCACpB,IAAI,MAAM,GAAG,CAAC,CAAC;gCACf,IAAI,YAAY,EAAE;oCACd,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC7C,MAAM,IAAI,CAAC,CAAC;iCACf;gCACD,IAAI,aAAa,EAAE;oCACf,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC7C,MAAM,IAAI,CAAC,CAAC;iCACf;gCAED,IAAI,QAAQ,GAAG;oCACX,CAAC,CAAC,GAAG,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;iCACzC,CAAC;gCACF,IAAI,YAAY,EAAE;oCACd,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iCAChD;gCACD,IAAI,aAAa,EAAE;oCACf,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iCACzD;gCACD,IAAI,mBAAmB,EAAE;oCACrB,MAAM,YAAY,GAAG,mBAAmB,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCAEhE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCACrE,QAAQ,GAAG;wCACP,CAAC,CAAC,GAAG,MAAM,GAAG,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;wCACrD,CAAC,CAAC,GAAG,MAAM,GAAG,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qCACxD,CAAC;iCACL;gCACD,MAAM,GAAG,GAAG,aAAa,CAAC;oCACtB,MAAM,EAAE,QAAQ;oCAChB,MAAM,EAAE;wCACJ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qCAChC;iCACJ,CAAC,CAAC;gCACH,MAAM,GAAG,GAAG,aAAa,CAAC;oCACtB,MAAM,EAAE,QAAQ;oCAChB,MAAM,EAAE,QAAQ;iCACnB,CAAC,CAAC;gCAEH,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,GAAG,CAAC,CAAC;gCAC9B,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gCACvB,iBAAiB,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,CAAC;4BACnD,CAAC,CAAC,CAAC;yBACN;qBACJ;iBACJ;aACJ;SACJ;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-unused-expressions */\n/**\n * @fileoverview Tests for the array changeset operations\n */\nimport isEmpty from \"lodash/isEmpty\";\nimport isNumber from \"lodash/isNumber\";\nimport {copy as cloneDeep} from \"fastest-json-copy\";\nimport range from \"lodash/range\";\n\nimport { expect, assert } from \"chai\";\nimport { ChangeSet, SerializedChangeSet } from \"../changeset\";\n\ndescribe(\"Array Operations\", function() {\n let guidCounter = 1;\n\n const generateNamedEntities = (count, offsets?, type?) => range(count).map((i) => {\n const offsetShift = offsets !== undefined ? offsets.shift() : undefined;\n const id = offsetShift !== undefined ? guidCounter - offsetShift : guidCounter++;\n if (type === undefined) {\n return {\n String: {\n guid: `00000000-0000-0000-0000-${(`000000000000${id}`).substr(-12)}`,\n },\n typeid: \"test:namedEntry-1.0.0\",\n };\n } else if (type === \"number\") {\n return id;\n }\n });\n\n function createArrayCS(arrayOperations, baseOperation?, type?): SerializedChangeSet {\n baseOperation = baseOperation || \"modify\";\n type = type || \"array<test:namedEntry-1.0.0>\";\n return {\n [baseOperation]: {\n [type]: {\n array: arrayOperations,\n },\n },\n };\n }\n\n function getArrayCS(CS): SerializedChangeSet {\n if (CS instanceof ChangeSet) {\n CS = CS.getSerializedChangeSet();\n }\n if (isEmpty(CS)) {\n return {};\n }\n const first = (x) => Object.values(x)[0];\n return first(first(first(CS)));\n }\n\n it(\"Avoid merging of adjacent remove operations with an insert in between\", () => {\n // This test creates a condition where there are two adjacent removes, with an insert\n // in between. Those two removes must not be merged when applying the two changesets\n // as otherwise overlapping ranges would be created in the result, which are not allowed\n // by the spec\n const op1 = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [1, generateNamedEntities(1)],\n ],\n });\n\n const op2 = createArrayCS({\n remove: [\n [0, generateNamedEntities(2)],\n ],\n });\n\n const result = new ChangeSet(op1);\n result.applyChangeSet(op2);\n\n // We expect the two ranges to be non overlapping\n const arrayCS = result.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n const removeStart = arrayCS.remove[0][0];\n const removeEnd = arrayCS.remove[0][0] + arrayCS.remove[0][1].length;\n const insertStart = arrayCS.insert[0][0];\n\n expect(insertStart <= removeStart || insertStart >= removeEnd).to.be.true;\n });\n\n it(\"Rebasing with a base changeset containing adjacent removes and inserts\", () => {\n const base = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const rebaseCS = createArrayCS({\n insert: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const conflicts = [];\n const CS = new ChangeSet(base);\n CS._rebaseChangeSet(rebaseCS, conflicts);\n\n // We expect the rebase to keep the insert at position 0. The base changeSet contains an\n // insert at position 3. There is also a remove within the same CS, which causes both\n // inserts to be with respect to the same position in the resulting array, but we have\n // to keep the order of the inserts, since we can only guarantee the distributivity of\n // the rebase this way. The CS above could have been generated by a combination of a\n // I(1,3) followed by a R(0,1). If the rebase CS would have been rebased separately\n // with respect to those two CS, it would have remained a I(0,3).\n expect((rebaseCS as SerializedChangeSet).modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(0);\n });\n\n for (const i of [0, 3]) {\n it(`Rebasing an insert behind a remove insert base changeset with insert position ${i}`, () => {\n const base = createArrayCS({\n insert: [\n [i, generateNamedEntities(3)],\n ],\n remove: [\n [0, generateNamedEntities(3)],\n ],\n });\n const rebaseCS = createArrayCS({\n insert: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const originalRebaseCS = cloneDeep(rebaseCS);\n const conflicts = [];\n const applyAfterMetaInformation = new Map();\n const CS = new ChangeSet(base);\n CS._rebaseChangeSet(rebaseCS, conflicts, { applyAfterMetaInformation });\n\n // Whether the insert in the rebaseCS is moved depends on the insert in the base CS. If the base CS\n // is the result of an I(3, 3) followed by a R(0,3), it would not be moved since the insert in the baseCS\n // is behind the insert in the rebase CS. Otherwise, if it is an I(0, 0) our rebase rules would move it\n // to index 3 behind the other insert\n expect(rebaseCS.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(i === 0 ? 3 : 0);\n\n const combinedCS = new ChangeSet(originalRebaseCS);\n combinedCS.toInverseChangeSet();\n combinedCS.applyChangeSet(base);\n combinedCS.applyChangeSet(rebaseCS, { applyAfterMetaInformation });\n\n const finalCs = combinedCS.getSerializedChangeSet();\n // The insert above should cancel out. If the original insert was at position 0, we moved the rebased\n // insert behind the original insert. This means the original insert should now be at position 0,\n // before the insert that canceled out. Otherwise, it should be at position 4 (behind the removed\n // range, as it was in the original CS, but now shifted by 1).\n expect(finalCs.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(i === 0 ? 0 : 4);\n });\n }\n\n it(\"Inserts should happen at the beginning of a remove range\", () => {\n const op1 = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [1, generateNamedEntities(1)],\n ],\n });\n const op2 = createArrayCS({\n insert: [\n [4, generateNamedEntities(2)],\n ],\n });\n\n const combinedCS = new ChangeSet(op1);\n combinedCS.applyChangeSet(op2);\n\n const arrayCS = combinedCS.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n expect(arrayCS.insert.length).to.equal(1);\n });\n\n function testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState) {\n const conflicts = [];\n const rebaseMetaInformation = new Map();\n const originalRebaseChangeSet = cloneDeep(localBranchChangeSet);\n const deltaChangeSet = new ChangeSet(cloneDeep(localBranchChangeSet));\n deltaChangeSet.toInverseChangeSet();\n\n const rebaseChangeSet = cloneDeep(localBranchChangeSet);\n new ChangeSet(baseChangeSet)._rebaseChangeSet(rebaseChangeSet, conflicts, {\n applyAfterMetaInformation: rebaseMetaInformation,\n });\n\n deltaChangeSet.applyChangeSet(baseChangeSet);\n validateChangeSet(deltaChangeSet);\n const copiedRebaseChangeSet = cloneDeep(rebaseChangeSet);\n deltaChangeSet.applyChangeSet(rebaseChangeSet, {\n applyAfterMetaInformation: rebaseMetaInformation,\n });\n validateChangeSet(deltaChangeSet);\n\n // This path first walks onto the local branch (applying the original changeset from the local branch)\n // and then the delta to the new tip (going back one step, and then forward again)\n const deltaPath = new ChangeSet(cloneDeep(baseState));\n deltaPath.applyChangeSet(originalRebaseChangeSet);\n deltaPath.applyChangeSet(deltaChangeSet);\n\n // This computes the same state, but not starting from the local branch, but from the base commit itself\n const directPath = new ChangeSet(cloneDeep(baseState));\n directPath.applyChangeSet(baseChangeSet);\n directPath.applyChangeSet(rebaseChangeSet);\n expect(deltaPath.getSerializedChangeSet()).to.deep.equal(directPath.getSerializedChangeSet());\n\n // Make sure, the rebase changeset was not modified in the apply operation above\n expect(copiedRebaseChangeSet).to.deep.equal(rebaseChangeSet);\n\n return deltaChangeSet;\n }\n\n function runTestApplyingReverseAndRebasedChangesetForIndependentModifications(baseInsertPositions,\n rebasedInsertPositions,\n baseOperation = \"insert\",\n baseCount = 1,\n ) {\n const createInserts = (positions, count) => positions.map((x) => [\n x,\n generateNamedEntities(count),\n ]);\n\n const baseChangeSet = createArrayCS({\n [baseOperation]: createInserts(baseInsertPositions, baseCount),\n });\n\n const localBranchChangeSet = createArrayCS({\n insert: createInserts(rebasedInsertPositions, 1),\n });\n\n // Test whether the created changeset computes the same result as applying\n // the base and rebase changeset to the base state\n const baseState = createArrayCS({\n insert: createInserts([0], 20),\n });\n const deltaChangeSet = testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState);\n\n // Make sure the delta changeset does not contain any other operations than the inserts from the base state\n const arrayChangeSet = deltaChangeSet.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n\n expect(arrayChangeSet[baseOperation].length).to.equal(baseInsertPositions.length);\n for (let i = 0; i < baseInsertPositions.length; i++) {\n expect(arrayChangeSet[baseOperation][i][1].length).to.equal(baseCount);\n }\n expect(arrayChangeSet).to.not.have.property(baseOperation === \"insert\" ? \"remove\" : \"insert\");\n }\n\n describe(\"Rebase test applying the reverse, base and then rebased changeset\", () => {\n for (const basePositions of [\n [0], [1], [2], [5], [13], [0, 2], [0, 5], [0, 5, 13],\n ]) {\n for (const rebasePositions of [\n [0], [1], [5, 9], [5, 9, 12],\n ]) {\n it(`with base positions ${basePositions} and rebase positions ${rebasePositions}`, () => {\n runTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n basePositions,\n rebasePositions,\n );\n });\n }\n }\n });\n\n describe(\"Rebase test applying the reverse, base and then rebased changeset2\", () => {\n it(`with removes in the base`, () => {\n runTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n [0], [2],\n \"remove\",\n 2,\n );\n });\n });\n\n function testRebaseDistributivity(baseChangesets, rebaseChangeSet, base) {\n // First rebase with each CS independently\n const rebasedCS1 = cloneDeep(rebaseChangeSet);\n for (const baseChangeSet of baseChangesets) {\n const conflicts = [];\n (new ChangeSet(baseChangeSet))._rebaseChangeSet(rebasedCS1, conflicts);\n validateChangeSet(rebasedCS1);\n }\n\n // Now rebase with respect to the squashed base ChangeSets\n const squashedBaseChangeSets = new ChangeSet();\n for (const baseChangeSet of baseChangesets) {\n squashedBaseChangeSets.applyChangeSet(baseChangeSet);\n }\n\n // Test whether squashed base changes are consistent\n const directApplication = new ChangeSet(cloneDeep(base));\n for (const baseChangeSet of baseChangesets) {\n directApplication.applyChangeSet(baseChangeSet);\n }\n const squashApplication = new ChangeSet(cloneDeep(base));\n squashApplication.applyChangeSet(squashedBaseChangeSets);\n expect(directApplication.getSerializedChangeSet()).to.deep.equal(\n squashApplication.getSerializedChangeSet(),\n );\n\n const conflicts2 = [];\n const rebasedCS2 = cloneDeep(rebaseChangeSet);\n (new ChangeSet(squashedBaseChangeSets))._rebaseChangeSet(rebasedCS2, conflicts2);\n validateChangeSet(rebasedCS2);\n\n expect(rebasedCS1).to.deep.equal(rebasedCS2);\n\n return testRebasedApplies(cloneDeep(rebaseChangeSet), squashedBaseChangeSets, base);\n }\n\n describe(\"Rebase Distributivity\", () => {\n describe(\"Multiple inserts in a remove range\", () => {\n for (const insertPosition of [0, 1, 3, 5, 7, 12]) {\n it(`Position ${insertPosition}`, () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [1, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [6, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [9, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(4)],\n [7, generateNamedEntities(2)],\n [10, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [insertPosition, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n }\n });\n it(\"Rebasing an insert with respect to a remove + insert\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"remove + insert at start of array\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"Rebased remove that cancels out\", () => {\n const deltacS = testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [1, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n const arrayCS = getArrayCS(deltacS);\n expect(arrayCS.insert[0][1].length).to.equal(3);\n expect(arrayCS.remove[0][1].length).to.equal(1);\n });\n it(\"Insert in between two removes 1\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [2, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [1, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"Insert in between two removes 2\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [4, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"Inserts in between three removes\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [4, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [6, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"Adjacent remove with insert at the beginning of the remove range\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [1, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1, [3])],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"Remove operation that cancels out\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [8, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n insert: [\n [8, generateNamedEntities(1)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [8, generateNamedEntities(1, [3])],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ],\n }),\n );\n });\n it(\"Remove operation that cancels out 2\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [8, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n // [8, generateNamedEntities(1)],\n [8, generateNamedEntities(1)],\n [17, generateNamedEntities(1)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [8, generateNamedEntities(1, [3])],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ],\n }),\n );\n });\n it(\"Remove operation that cancels out in the middle of a range\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [3, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ],\n }),\n );\n });\n });\n\n function validateChangeSet(CS) {\n const arrayCS = getArrayCS(CS);\n\n const insertPositions = new Set();\n if (arrayCS.insert) {\n arrayCS.insert.forEach((x) => insertPositions.add(x[0]));\n }\n for (const type of [\"insert\", \"modify\", \"remove\"]) {\n const changes = arrayCS[type];\n\n // Make sure the entries are sorted\n if (changes !== undefined) {\n let lastIndex = -5;\n let lastLength = 0;\n for (const entry of changes) {\n // Ranges should not be adjacent. However, they might be interrupted, if there is an insert\n // inside the range\n let indexOffset = 1;\n if (type === \"remove\" || type === \"modify\") {\n indexOffset = lastLength;\n if (!insertPositions.has(lastIndex + indexOffset)) {\n indexOffset += 1;\n }\n }\n assert(entry[0] >= lastIndex + indexOffset, \"Changeset operations are not sorted or not merged\");\n lastIndex = entry[0];\n lastLength = !isNumber(entry[1]) ? entry[1].length : entry[1];\n\n // Inserts must not lie within modify or remove ranges\n if (type === \"remove\" || type === \"modify\") {\n insertPositions.forEach(\n (i) => assert(i <= lastIndex || i >= lastIndex + lastLength, `Insert within ${type} range.`),\n );\n }\n }\n }\n }\n }\n\n function testApplyAssociativity(base, operations, customValidator?) {\n const combinedCS = new ChangeSet();\n operations.forEach(combinedCS.applyChangeSet.bind(combinedCS));\n validateChangeSet(combinedCS);\n\n // Individually apply the operations\n const separateApplysResult = new ChangeSet(cloneDeep(base));\n operations.forEach(separateApplysResult.applyChangeSet.bind(separateApplysResult));\n validateChangeSet(separateApplysResult);\n\n // And apply the combined CS\n const combinedApplyResult = new ChangeSet(cloneDeep(base));\n combinedApplyResult.applyChangeSet(combinedCS);\n\n if (customValidator !== undefined) {\n customValidator(combinedCS, separateApplysResult, combinedApplyResult);\n }\n\n expect(separateApplysResult.getSerializedChangeSet())\n .to.deep.equal(combinedApplyResult.getSerializedChangeSet());\n }\n\n describe(\"Apply Associativity\", () => {\n it(\"insert + remove + insert\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }, \"insert\");\n\n const ops = [\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(2, [1, 3])],\n ],\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(1)],\n ],\n }),\n ];\n\n testApplyAssociativity(initial, ops);\n });\n\n describe(\"Inserting into a remove range with deletes on both sides\", () => {\n for (const additionalInserts of [\"\", \" with insert at the beginning\", \" with insert at the end\"]) {\n const offset = additionalInserts === \" with insert at the beginning\" ? 2 : 0;\n for (const i of range(1, 9)) {\n it(`at postion ${i + offset}${additionalInserts}`, () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n let initialInserts = [];\n let finalInserts = [];\n if (additionalInserts === \" with insert at the beginning\") {\n initialInserts = [\n [0, generateNamedEntities(2, undefined, \"number\")],\n ];\n }\n if (additionalInserts === \" with insert at the end\") {\n finalInserts = [\n [10, generateNamedEntities(2, undefined, \"number\")],\n ];\n }\n const ops = [createArrayCS({\n insert: [\n ...initialInserts, [\n 2,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n [\n 7,\n generateNamedEntities(3, undefined, \"number\"),\n ],\n ...finalInserts,\n ],\n remove: [\n [\n 2,\n generateNamedEntities(5, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n insert: [\n [\n i + offset,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops, (combinedCS) => {\n const arrayCS = getArrayCS(combinedCS);\n expect(arrayCS.insert.length).to.equal((i >= 2 && i < 8 ? 2 : 3) +\n (additionalInserts !== \"\" ? 1 : 0));\n\n const insertOffset = additionalInserts == \" with insert at the beginning\" ? 1 : 0;\n if (i >= 2 && i <= 4) {\n expect(arrayCS.insert[0 + insertOffset][1].length).to.equal(4);\n expect(arrayCS.insert[1 + insertOffset][1].length).to.equal(3);\n }\n if (i > 4 && i < 8) {\n expect(arrayCS.insert[0 + insertOffset][1].length).to.equal(2);\n expect(arrayCS.insert[1 + insertOffset][1].length).to.equal(5);\n }\n });\n });\n }\n }\n });\n\n it(\"remove overlapping insert and remove ranges\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(1, undefined, \"number\")],\n [1, generateNamedEntities(1, undefined, \"number\")],\n [4, generateNamedEntities(6, undefined, \"number\")],\n ],\n remove: [\n [1, generateNamedEntities(1, undefined, \"number\")],\n [2, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [\n 0,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Overlapping remove / insert\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(2, undefined, \"number\")],\n ],\n remove: [\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(2, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Removing multiple inserts and removes\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [1, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(4, undefined, \"number\")],\n ],\n remove: [\n [0, generateNamedEntities(1, undefined, \"number\")],\n [1, generateNamedEntities(3, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(6, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Removing insert/removes at the end\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(2, undefined, \"number\")],\n [1, generateNamedEntities(1, undefined, \"number\")],\n [4, generateNamedEntities(4, undefined, \"number\")],\n ],\n remove: [\n [1, generateNamedEntities(3, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [6, generateNamedEntities(2, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Insert with overlapping remove\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ],\n insert: [\n [1, generateNamedEntities(3)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Failed case\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(7)],\n ],\n }),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(1)],\n ],\n insert: [\n [1, generateNamedEntities(2)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Failed case\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(5)],\n ],\n }),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ],\n insert: [\n [5, generateNamedEntities(3)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n });\n\n describe(\"Apply with removes in both changesets\", () => {\n for (const startInsertA of [true, false]) {\n for (const startInsertB of [true, false]) {\n for (const removeInsertA of [true, false]) {\n for (const removeInsertB of [true, false]) {\n for (const removeInsideInsertB of [\"adjacent\", \"separate\", false]) {\n const insertNames = [];\n if (startInsertA) {\n insertNames.push(\"at start of A\");\n }\n if (startInsertB) {\n insertNames.push(\"at start of B\");\n }\n if (removeInsertA) {\n insertNames.push(\"before remove in A\");\n }\n if (removeInsertB) {\n insertNames.push(\"before remove in B\");\n }\n if (removeInsideInsertB) {\n insertNames.push(`inside remove range in B (${removeInsideInsertB})`);\n }\n let title = \"with \";\n if (insertNames.length === 0) {\n title += \"no inserts\";\n } else {\n title += `inserts ${insertNames.join(\", \")}`;\n }\n it(title, () => {\n const insertsA = [];\n const insertsB = [];\n let offset = 0;\n if (startInsertA) {\n insertsA.push([0, generateNamedEntities(1)]);\n offset += 1;\n }\n if (removeInsertA) {\n insertsA.push([5, generateNamedEntities(1)]);\n offset += 1;\n }\n\n let removesB = [\n [5 + offset, generateNamedEntities(3)],\n ];\n if (startInsertB) {\n insertsB.push([0, generateNamedEntities(1)]);\n }\n if (removeInsertB) {\n insertsB.push([5 + offset, generateNamedEntities(1)]);\n }\n if (removeInsideInsertB) {\n const removeOffset = removeInsideInsertB === \"separate\" ? 1 : 0;\n\n insertsB.push([6 + offset + removeOffset, generateNamedEntities(1)]);\n removesB = [\n [5 + offset + removeOffset, generateNamedEntities(1)],\n [6 + offset + removeOffset, generateNamedEntities(1)],\n ];\n }\n const CS1 = createArrayCS({\n insert: insertsA,\n remove: [\n [5, generateNamedEntities(3)],\n ],\n });\n const CS2 = createArrayCS({\n insert: insertsB,\n remove: removesB,\n });\n\n const CS = new ChangeSet(CS1);\n CS.applyChangeSet(CS2);\n validateChangeSet(CS.getSerializedChangeSet());\n });\n }\n }\n }\n }\n }\n });\n});\n"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
/* eslint-disable no-unused-expressions*/
|
|
6
|
+
/* eslint-disable no-unused-expressions */
|
|
7
7
|
/**
|
|
8
8
|
* @fileoverview In this file, we will test the path helper
|
|
9
9
|
* functions described in /src/properties/path_helper.js
|
|
@@ -22,7 +22,7 @@ describe('PathHelper', function () {
|
|
|
22
22
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('test.test2', types)).to.deep.equal(['test', 'test2']);
|
|
23
23
|
chai_1.expect(types).to.deep.equal([
|
|
24
24
|
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
25
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
|
|
25
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
26
26
|
]);
|
|
27
27
|
chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('.test2'); }).to.throw();
|
|
28
28
|
chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('test2.'); }).to.throw();
|
|
@@ -51,7 +51,7 @@ describe('PathHelper', function () {
|
|
|
51
51
|
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
52
52
|
pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
|
|
53
53
|
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
54
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN
|
|
54
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
|
|
55
55
|
]);
|
|
56
56
|
chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('[test]parameter'); }).to.throw();
|
|
57
57
|
});
|
|
@@ -67,15 +67,15 @@ describe('PathHelper', function () {
|
|
|
67
67
|
chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);
|
|
68
68
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('"test1".test2', types)).to.deep.equal(['test1', 'test2']);
|
|
69
69
|
chai_1.expect(types).to.deep.equal([
|
|
70
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
|
|
70
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
71
71
|
]);
|
|
72
72
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('"test1"."test2"', types)).to.deep.equal(['test1', 'test2']);
|
|
73
73
|
chai_1.expect(types).to.deep.equal([
|
|
74
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
|
|
74
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
75
75
|
]);
|
|
76
76
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('test1."test2"', types)).to.deep.equal(['test1', 'test2']);
|
|
77
77
|
chai_1.expect(types).to.deep.equal([
|
|
78
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
|
|
78
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
79
79
|
]);
|
|
80
80
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('test1["test2"]', types)).to.deep.equal(['test1', 'test2']);
|
|
81
81
|
chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);
|
|
@@ -95,11 +95,11 @@ describe('PathHelper', function () {
|
|
|
95
95
|
chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN]);
|
|
96
96
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('test*', types)).to.deep.equal(['test', '*']);
|
|
97
97
|
chai_1.expect(types).to.deep.equal([
|
|
98
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN
|
|
98
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,
|
|
99
99
|
]);
|
|
100
100
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('*.test', types)).to.deep.equal(['*', 'test']);
|
|
101
101
|
chai_1.expect(types).to.deep.equal([
|
|
102
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
|
|
102
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
103
103
|
]);
|
|
104
104
|
chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('*test', types); }).to.throw();
|
|
105
105
|
chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('test*test', types); }).to.throw();
|
|
@@ -109,7 +109,7 @@ describe('PathHelper', function () {
|
|
|
109
109
|
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
110
110
|
pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,
|
|
111
111
|
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
112
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN
|
|
112
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,
|
|
113
113
|
]);
|
|
114
114
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('/*', types)).to.deep.equal(['/', '*']);
|
|
115
115
|
chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.PATH_ROOT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN]);
|
|
@@ -121,13 +121,13 @@ describe('PathHelper', function () {
|
|
|
121
121
|
chai_1.expect(types).to.deep.equal([
|
|
122
122
|
pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
|
|
123
123
|
pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,
|
|
124
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
|
|
124
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
125
125
|
]);
|
|
126
126
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('[test]*[test2]', types)).to.deep.equal(['test', '*', 'test2']);
|
|
127
127
|
chai_1.expect(types).to.deep.equal([
|
|
128
128
|
pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
|
|
129
129
|
pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,
|
|
130
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN
|
|
130
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
|
|
131
131
|
]);
|
|
132
132
|
chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('[test]*test', types); }).to.throw();
|
|
133
133
|
chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('"'); }).to.throw();
|
|
@@ -139,16 +139,16 @@ describe('PathHelper', function () {
|
|
|
139
139
|
let types = [];
|
|
140
140
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('../test', types)).to.deep.equal(['../', 'test']);
|
|
141
141
|
chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,
|
|
142
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
|
|
142
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
143
143
|
]);
|
|
144
144
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('../../../test', types)).to.deep.equal(['../', '../', '../', 'test']);
|
|
145
145
|
chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,
|
|
146
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
|
|
146
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
|
|
147
147
|
]);
|
|
148
148
|
chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('../../test[0].test2[key]', types)).to.deep.equal(['../', '../', 'test', '0', 'test2', 'key']);
|
|
149
149
|
chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,
|
|
150
150
|
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
|
|
151
|
-
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN
|
|
151
|
+
pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
|
|
152
152
|
]);
|
|
153
153
|
chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('/../test2'); }).to.throw();
|
|
154
154
|
});
|