@fluid-experimental/property-changeset 2.0.0-internal.1.2.0.93071 → 2.0.0-internal.1.2.2

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.
Files changed (57) hide show
  1. package/dist/changeset.d.ts.map +1 -1
  2. package/dist/changeset.js +3 -6
  3. package/dist/changeset.js.map +1 -1
  4. package/dist/changeset_operations/array.d.ts +31 -0
  5. package/dist/changeset_operations/array.d.ts.map +1 -1
  6. package/dist/changeset_operations/array.js +52 -47
  7. package/dist/changeset_operations/array.js.map +1 -1
  8. package/dist/changeset_operations/indexedCollection.d.ts +12 -14
  9. package/dist/changeset_operations/indexedCollection.d.ts.map +1 -1
  10. package/dist/changeset_operations/indexedCollection.js +13 -14
  11. package/dist/changeset_operations/indexedCollection.js.map +1 -1
  12. package/dist/helpers/typeidHelper.d.ts +6 -6
  13. package/dist/helpers/typeidHelper.d.ts.map +1 -1
  14. package/dist/helpers/typeidHelper.js +16 -26
  15. package/dist/helpers/typeidHelper.js.map +1 -1
  16. package/dist/pathHelper.d.ts +1 -1
  17. package/dist/pathHelper.d.ts.map +1 -1
  18. package/dist/pathHelper.js +50 -52
  19. package/dist/pathHelper.js.map +1 -1
  20. package/dist/templateValidator.d.ts +58 -26
  21. package/dist/templateValidator.d.ts.map +1 -1
  22. package/dist/templateValidator.js +64 -38
  23. package/dist/templateValidator.js.map +1 -1
  24. package/dist/test/array.spec.js +3 -6
  25. package/dist/test/array.spec.js.map +1 -1
  26. package/dist/test/pathHelper.spec.js +2 -4
  27. package/dist/test/pathHelper.spec.js.map +1 -1
  28. package/dist/test/reversibleCs.spec.js +2 -4
  29. package/dist/test/reversibleCs.spec.js.map +1 -1
  30. package/dist/test/tsconfig.tsbuildinfo +1 -1
  31. package/dist/test/validator/templateValidator.spec.js +5 -10
  32. package/dist/test/validator/templateValidator.spec.js.map +1 -1
  33. package/dist/utils.d.ts +131 -103
  34. package/dist/utils.d.ts.map +1 -1
  35. package/dist/utils.js +160 -167
  36. package/dist/utils.js.map +1 -1
  37. package/dist/validationResultBuilder.d.ts +2 -4
  38. package/dist/validationResultBuilder.d.ts.map +1 -1
  39. package/dist/validationResultBuilder.js +1 -7
  40. package/dist/validationResultBuilder.js.map +1 -1
  41. package/lib/changeset.js +3 -6
  42. package/lib/changeset.js.map +1 -1
  43. package/lib/changeset_operations/array.js +52 -47
  44. package/lib/changeset_operations/array.js.map +1 -1
  45. package/lib/changeset_operations/indexedCollection.js +13 -14
  46. package/lib/changeset_operations/indexedCollection.js.map +1 -1
  47. package/lib/helpers/typeidHelper.js +16 -26
  48. package/lib/helpers/typeidHelper.js.map +1 -1
  49. package/lib/pathHelper.js +50 -52
  50. package/lib/pathHelper.js.map +1 -1
  51. package/lib/templateValidator.js +64 -38
  52. package/lib/templateValidator.js.map +1 -1
  53. package/lib/utils.js +160 -167
  54. package/lib/utils.js.map +1 -1
  55. package/lib/validationResultBuilder.js +1 -7
  56. package/lib/validationResultBuilder.js.map +1 -1
  57. package/package.json +3 -3
@@ -1 +1 @@
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,yDAAsD;AACtD,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,IAAA,eAAK,EAAC,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,IAAA,iBAAO,EAAC,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,IAAA,aAAM,EAAC,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,IAAA,aAAM,EAAE,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,IAAA,wBAAS,EAAC,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,IAAA,aAAM,EAAC,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,IAAA,aAAM,EAAC,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,IAAA,aAAM,EAAC,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,IAAA,wBAAS,EAAC,oBAAoB,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,IAAI,qBAAS,CAAC,IAAA,wBAAS,EAAC,oBAAoB,CAAC,CAAC,CAAC;QACtE,cAAc,CAAC,kBAAkB,EAAE,CAAC;QAEpC,MAAM,eAAe,GAAG,IAAA,wBAAS,EAAC,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,IAAA,wBAAS,EAAC,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,IAAA,wBAAS,EAAC,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,IAAA,wBAAS,EAAC,SAAS,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACzC,UAAU,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QAC3C,IAAA,aAAM,EAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAE9F,gFAAgF;QAChF,IAAA,aAAM,EAAC,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,IAAA,aAAM,EAAC,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,IAAA,aAAM,EAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;SAC1E;QACD,IAAA,aAAM,EAAC,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,IAAA,wBAAS,EAAC,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,IAAA,wBAAS,EAAC,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,IAAA,wBAAS,EAAC,IAAI,CAAC,CAAC,CAAC;QACzD,iBAAiB,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;QACzD,IAAA,aAAM,EAAC,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,IAAA,wBAAS,EAAC,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,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE7C,OAAO,kBAAkB,CAAC,IAAA,wBAAS,EAAC,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,IAAA,aAAM,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChD,IAAA,aAAM,EAAC,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,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,WAAW,EAAE,mDAAmD,CAAC,CAAC;oBACjG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrB,UAAU,GAAG,CAAC,IAAA,kBAAQ,EAAC,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,IAAA,aAAM,EAAC,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,IAAA,wBAAS,EAAC,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,IAAA,wBAAS,EAAC,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,IAAA,aAAM,EAAC,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,IAAA,eAAK,EAAC,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,IAAA,aAAM,EAAC,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,IAAA,aAAM,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC/D,IAAA,aAAM,EAAC,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,IAAA,aAAM,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC/D,IAAA,aAAM,EAAC,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"]}
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\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 title += insertNames.length === 0\n ? \"no inserts\"\n : `inserts ${insertNames.join(\", \")}`;\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,12 +3,10 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  /**
8
- * @fileoverview In this file, we will test the path helper
9
- * functions described in /src/properties/path_helper.js
8
+ * @fileoverview In this file, we will test the path helper functions described in /src/properties/path_helper.js
10
9
  */
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
10
  const chai_1 = require("chai");
13
11
  const pathHelper_1 = require("../pathHelper");
14
12
  describe('PathHelper', function () {
@@ -1 +1 @@
1
- {"version":3,"file":"pathHelper.spec.js","sourceRoot":"","sources":["../../src/test/pathHelper.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/* eslint-disable no-unused-expressions */\n/**\n * @fileoverview In this file, we will test the path helper\n * functions described in /src/properties/path_helper.js\n */\n\nimport { expect } from 'chai';\nimport { PathHelper } from \"../pathHelper\";\n\ndescribe('PathHelper', function() {\n describe('tokenizePathString', function() {\n it('should work for simple paths separated by dots', function() {\n let types = [];\n expect(PathHelper.tokenizePathString('', types)).to.deep.equal([]);\n expect(types).to.deep.equal([]);\n\n expect(PathHelper.tokenizePathString('test', types)).to.deep.equal(['test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('test.test2', types)).to.deep.equal(['test', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(function() { PathHelper.tokenizePathString('.test2'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('test2.'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('.'); }).to.throw();\n });\n\n it('should work for arrays', function() {\n let types = [];\n expect(PathHelper.tokenizePathString('[test]', types)).to.deep.equal(['test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('[test][test2]', types)).to.deep.equal(['test', 'test2']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.ARRAY_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(function() { PathHelper.tokenizePathString('['); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('[abcd'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString(']'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('[abcd]]'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('[]'); }).to.throw();\n });\n\n it('should work for combinations of arrays and paths separated by dots', function() {\n let types = [];\n expect(PathHelper.tokenizePathString('map[test]', types)).to.deep.equal(['map', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('[test].parameter', types)).to.deep.equal(['test', 'parameter']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.ARRAY_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('map[test].parameter[test2]', types)).to.deep.equal(\n ['map', 'test', 'parameter', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n ]);\n\n expect(function() { PathHelper.tokenizePathString('[test]parameter'); }).to.throw();\n });\n\n it('should work for quoted tokens', function() {\n let types = [];\n expect(PathHelper.tokenizePathString('\"test\"', types)).to.deep.equal(['test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"te\\\\\"st\"', types)).to.deep.equal(['te\"st']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"te\\\\\\\\st\"', types)).to.deep.equal(['te\\\\st']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"\"', types)).to.deep.equal(['']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"test1\".test2', types)).to.deep.equal(['test1', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('\"test1\".\"test2\"', types)).to.deep.equal(['test1', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('test1.\"test2\"', types)).to.deep.equal(['test1', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('test1[\"test2\"]', types)).to.deep.equal(['test1', 'test2']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"test1\"[\"test2\"]', types)).to.deep.equal(['test1', 'test2']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"\"[\"\"]', types)).to.deep.equal(['', '']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"/\"', types)).to.deep.equal(['/']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('/', types)).to.deep.equal(['/']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_ROOT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('/test', types)).to.deep.equal(['/', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_ROOT_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('/[test]', types)).to.deep.equal(['/', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_ROOT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('*', types)).to.deep.equal(['*']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN]);\n\n expect(PathHelper.tokenizePathString('test*', types)).to.deep.equal(['test', '*']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('*.test', types)).to.deep.equal(['*', 'test']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(function() { PathHelper.tokenizePathString('*test', types); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('test*test', types); }).to.throw();\n\n expect(PathHelper.tokenizePathString('*.test*.test2*', types)).to.deep.equal(['*', 'test', '*', 'test2', '*']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('/*', types)).to.deep.equal(['/', '*']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_ROOT_TOKEN, PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN]);\n\n expect(PathHelper.tokenizePathString('*[test]', types)).to.deep.equal(['*', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('[test]*', types)).to.deep.equal(['test', '*']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.ARRAY_TOKEN, PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN]);\n\n expect(PathHelper.tokenizePathString('[test]*.test2', types)).to.deep.equal(['test', '*', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('[test]*[test2]', types)).to.deep.equal(['test', '*', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n ]);\n\n expect(function() { PathHelper.tokenizePathString('[test]*test', types); }).to.throw();\n\n expect(function() { PathHelper.tokenizePathString('\"'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('test\"'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('\"tests'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('\"\\\\a\"'); }).to.throw();\n });\n\n it('should work for relative paths', function() {\n let types = [];\n expect(PathHelper.tokenizePathString('../test', types)).to.deep.equal(['../', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('../../../test', types)).to.deep.equal(['../', '../', '../', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,\n PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('../../test[0].test2[key]', types)).to.deep.equal(\n ['../', '../', 'test', '0', 'test2', 'key']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n ]);\n\n expect(function() { PathHelper.tokenizePathString('/../test2'); }).to.throw();\n });\n });\n\n describe('quotePathSegment', function() {\n it('should quote simple strings', function() {\n expect(PathHelper.quotePathSegment('test')).to.equal('\"test\"');\n expect(JSON.parse(PathHelper.quotePathSegment('test'))).to.equal('test');\n });\n it('should correctly quote strings with a quotation mark', function() {\n expect(PathHelper.quotePathSegment('\"')).to.equal('\"\\\\\"\"');\n expect(JSON.parse(PathHelper.quotePathSegment('\"'))).to.equal('\"');\n });\n it('should correctly quote strings with a backslash', function() {\n expect(PathHelper.quotePathSegment('\\\\')).to.equal('\"\\\\\\\\\"');\n expect(JSON.parse(PathHelper.quotePathSegment('\\\\'))).to.equal('\\\\');\n });\n\n it('should work for paths with multiple occurrences of the test string', function() {\n expect(PathHelper.quotePathSegment('test\"property\"')).to.equal('\"test\\\\\"property\\\\\"\"');\n expect(PathHelper.quotePathSegment('test\\\\property\\\\')).to.equal('\"test\\\\\\\\property\\\\\\\\\"');\n expect(PathHelper.quotePathSegment('test\"\\\\property\\\\\"')).to.equal('\"test\\\\\"\\\\\\\\property\\\\\\\\\\\\\"\"');\n });\n });\n\n describe('quotePathSegmentIfNeeded', function() {\n it('should quote all required strings', function() {\n expect(PathHelper.quotePathSegmentIfNeeded('.')).to.equal('\".\"');\n expect(PathHelper.quotePathSegmentIfNeeded('\"')).to.equal('\"\\\\\"\"');\n expect(PathHelper.quotePathSegmentIfNeeded('\\\\')).to.equal('\"\\\\\\\\\"');\n expect(PathHelper.quotePathSegmentIfNeeded('[')).to.equal('\"[\"');\n expect(PathHelper.quotePathSegmentIfNeeded(']')).to.equal('\"]\"');\n expect(PathHelper.quotePathSegmentIfNeeded('')).to.equal('\"\"');\n expect(PathHelper.quotePathSegmentIfNeeded('/')).to.equal('\"/\"');\n expect(PathHelper.quotePathSegmentIfNeeded('*')).to.equal('\"*\"');\n });\n\n it('should not quote other strings', function() {\n expect(PathHelper.quotePathSegmentIfNeeded('abcd')).to.equal('abcd');\n expect(PathHelper.quotePathSegmentIfNeeded('test_string')).to.equal('test_string');\n });\n });\n\n describe('unquotePathSegment', function() {\n it('should unquote simple strings', function() {\n expect(PathHelper.unquotePathSegment('\"test\"')).to.equal('test');\n });\n\n it('should correctly unquote strings with a quotation mark', function() {\n expect(PathHelper.unquotePathSegment('\"\\\\\"\"')).to.equal('\"');\n });\n\n it('should correctly unquote strings with a backslash', function() {\n expect(PathHelper.unquotePathSegment('\"\\\\\\\\\"')).to.equal('\\\\');\n });\n\n it('should work with empty strings', function() {\n expect(PathHelper.unquotePathSegment('')).to.equal('');\n });\n\n it('should throw on non strings', function() {\n // @ts-ignore\n expect(() => PathHelper.unquotePathSegment(5)).to.throw();\n });\n\n it('should work for paths with multiple occurrences of the test string', function() {\n expect(PathHelper.unquotePathSegment('\"test\\\\\"property\\\\\"\"')).to.equal('test\"property\"');\n expect(PathHelper.unquotePathSegment('\"test\\\\\\\\property\\\\\\\\\"')).to.equal('test\\\\property\\\\');\n expect(PathHelper.unquotePathSegment('\"test\\\\\"\\\\\\\\property\\\\\\\\\\\\\"\"')).to.equal('test\"\\\\property\\\\\"');\n });\n });\n\n describe('convertAbsolutePathToCanonical', function() {\n it('should remove leading /', function() {\n expect(PathHelper.convertAbsolutePathToCanonical('/a.b.c')).to.equal('a.b.c');\n });\n\n it('should throw on ../', function() {\n expect(() => PathHelper.convertAbsolutePathToCanonical('../a.b.c')).to.throw('../');\n });\n\n it('should throw on *', function() {\n expect(() => PathHelper.convertAbsolutePathToCanonical('/a.b.c*')).to.throw('*');\n });\n\n it('should replace square brackets by periods', function() {\n expect(PathHelper.convertAbsolutePathToCanonical('/a.b[c]')).to.equal('a.b.c');\n expect(PathHelper.convertAbsolutePathToCanonical('/a[b].c')).to.equal('a.b.c');\n });\n\n it('should keep properly escaped property names', function() {\n expect(PathHelper.convertAbsolutePathToCanonical('\".\"')).to.equal('\".\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"\\\\\"\"')).to.equal('\"\\\\\"\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"\\\\\\\\\"')).to.equal('\"\\\\\\\\\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"[\"')).to.equal('\"[\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"]\"')).to.equal('\"]\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"\"')).to.equal('\"\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"/\"')).to.equal('\"/\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"*\"')).to.equal('\"*\"');\n });\n\n it('should properly unescape unusually escaped property names', function() {\n expect(PathHelper.convertAbsolutePathToCanonical('\"a\".\"b\"')).to.equal('a.b');\n expect(PathHelper.convertAbsolutePathToCanonical('\"a\"[b][\"c\"]')).to.equal('a.b.c');\n });\n\n it('should not modify simple paths', function() {\n expect(PathHelper.convertAbsolutePathToCanonical('a.b.c.d')).to.equal('a.b.c.d');\n expect(PathHelper.convertAbsolutePathToCanonical('test_string')).to.equal('test_string');\n });\n });\n\n describe('getPathCoverage', function() {\n this.timeout(500);\n let paths;\n\n it('should succeed if property is included in a path 1', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('a.b', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.FULLY_COVERED);\n expect(res.pathList).to.deep.equal(['a.b']);\n });\n\n it('should succeed if property is included in a path 2', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('a.b.c', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.FULLY_COVERED);\n expect(res.pathList).to.deep.equal(['a.b']);\n });\n\n it('should succeed if property is included in a path 3', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('a.b.c.d', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.FULLY_COVERED);\n expect(res.pathList).to.deep.equal(['a.b']);\n });\n\n it('should fail if property is not included in any path 1', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('b', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.UNCOVERED);\n expect(res.pathList).to.deep.equal([]);\n });\n\n it('should fail if property is not included in any path 2', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('b.f.g', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.UNCOVERED);\n expect(res.pathList).to.deep.equal([]);\n });\n\n it('should fail if property is not included in any path but have common root 1', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('a.h', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.UNCOVERED);\n expect(res.pathList).to.deep.equal([]);\n });\n\n it('should fail if property is not included in any path but have common root 2', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('a.i.j', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.UNCOVERED);\n expect(res.pathList).to.deep.equal([]);\n });\n\n it('should succeed if path goes through the property 1', function() {\n paths = ['a.b.c', 'a.b.d', 'z'];\n const res = PathHelper.getPathCoverage('a.b', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.PARTLY_COVERED);\n expect(res.pathList).to.deep.equal(['a.b.c', 'a.b.d']);\n });\n\n it('should succeed if path goes through the property 2', function() {\n paths = ['z', 'a.b.c', 'a.b.d'];\n const res = PathHelper.getPathCoverage('a.b', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.PARTLY_COVERED);\n expect(res.pathList).to.deep.equal(['a.b.c', 'a.b.d']);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"pathHelper.spec.js","sourceRoot":"","sources":["../../src/test/pathHelper.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/**\n * @fileoverview In this file, we will test the path helper functions described in /src/properties/path_helper.js\n */\n\nimport { expect } from 'chai';\nimport { PathHelper } from \"../pathHelper\";\n\ndescribe('PathHelper', function() {\n describe('tokenizePathString', function() {\n it('should work for simple paths separated by dots', function() {\n let types = [];\n expect(PathHelper.tokenizePathString('', types)).to.deep.equal([]);\n expect(types).to.deep.equal([]);\n\n expect(PathHelper.tokenizePathString('test', types)).to.deep.equal(['test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('test.test2', types)).to.deep.equal(['test', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(function() { PathHelper.tokenizePathString('.test2'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('test2.'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('.'); }).to.throw();\n });\n\n it('should work for arrays', function() {\n let types = [];\n expect(PathHelper.tokenizePathString('[test]', types)).to.deep.equal(['test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('[test][test2]', types)).to.deep.equal(['test', 'test2']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.ARRAY_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(function() { PathHelper.tokenizePathString('['); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('[abcd'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString(']'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('[abcd]]'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('[]'); }).to.throw();\n });\n\n it('should work for combinations of arrays and paths separated by dots', function() {\n let types = [];\n expect(PathHelper.tokenizePathString('map[test]', types)).to.deep.equal(['map', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('[test].parameter', types)).to.deep.equal(['test', 'parameter']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.ARRAY_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('map[test].parameter[test2]', types)).to.deep.equal(\n ['map', 'test', 'parameter', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n ]);\n\n expect(function() { PathHelper.tokenizePathString('[test]parameter'); }).to.throw();\n });\n\n it('should work for quoted tokens', function() {\n let types = [];\n expect(PathHelper.tokenizePathString('\"test\"', types)).to.deep.equal(['test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"te\\\\\"st\"', types)).to.deep.equal(['te\"st']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"te\\\\\\\\st\"', types)).to.deep.equal(['te\\\\st']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"\"', types)).to.deep.equal(['']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"test1\".test2', types)).to.deep.equal(['test1', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('\"test1\".\"test2\"', types)).to.deep.equal(['test1', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('test1.\"test2\"', types)).to.deep.equal(['test1', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('test1[\"test2\"]', types)).to.deep.equal(['test1', 'test2']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"test1\"[\"test2\"]', types)).to.deep.equal(['test1', 'test2']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"\"[\"\"]', types)).to.deep.equal(['', '']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('\"/\"', types)).to.deep.equal(['/']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('/', types)).to.deep.equal(['/']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_ROOT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('/test', types)).to.deep.equal(['/', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_ROOT_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);\n\n expect(PathHelper.tokenizePathString('/[test]', types)).to.deep.equal(['/', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_ROOT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('*', types)).to.deep.equal(['*']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN]);\n\n expect(PathHelper.tokenizePathString('test*', types)).to.deep.equal(['test', '*']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('*.test', types)).to.deep.equal(['*', 'test']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(function() { PathHelper.tokenizePathString('*test', types); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('test*test', types); }).to.throw();\n\n expect(PathHelper.tokenizePathString('*.test*.test2*', types)).to.deep.equal(['*', 'test', '*', 'test2', '*']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('/*', types)).to.deep.equal(['/', '*']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.PATH_ROOT_TOKEN, PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN]);\n\n expect(PathHelper.tokenizePathString('*[test]', types)).to.deep.equal(['*', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);\n\n expect(PathHelper.tokenizePathString('[test]*', types)).to.deep.equal(['test', '*']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.ARRAY_TOKEN, PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN]);\n\n expect(PathHelper.tokenizePathString('[test]*.test2', types)).to.deep.equal(['test', '*', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('[test]*[test2]', types)).to.deep.equal(['test', '*', 'test2']);\n expect(types).to.deep.equal([\n PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,\n PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n ]);\n\n expect(function() { PathHelper.tokenizePathString('[test]*test', types); }).to.throw();\n\n expect(function() { PathHelper.tokenizePathString('\"'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('test\"'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('\"tests'); }).to.throw();\n expect(function() { PathHelper.tokenizePathString('\"\\\\a\"'); }).to.throw();\n });\n\n it('should work for relative paths', function() {\n let types = [];\n expect(PathHelper.tokenizePathString('../test', types)).to.deep.equal(['../', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('../../../test', types)).to.deep.equal(['../', '../', '../', 'test']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,\n PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,\n ]);\n\n expect(PathHelper.tokenizePathString('../../test[0].test2[key]', types)).to.deep.equal(\n ['../', '../', 'test', '0', 'test2', 'key']);\n expect(types).to.deep.equal([PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, PathHelper.TOKEN_TYPES.ARRAY_TOKEN,\n ]);\n\n expect(function() { PathHelper.tokenizePathString('/../test2'); }).to.throw();\n });\n });\n\n describe('quotePathSegment', function() {\n it('should quote simple strings', function() {\n expect(PathHelper.quotePathSegment('test')).to.equal('\"test\"');\n expect(JSON.parse(PathHelper.quotePathSegment('test'))).to.equal('test');\n });\n it('should correctly quote strings with a quotation mark', function() {\n expect(PathHelper.quotePathSegment('\"')).to.equal('\"\\\\\"\"');\n expect(JSON.parse(PathHelper.quotePathSegment('\"'))).to.equal('\"');\n });\n it('should correctly quote strings with a backslash', function() {\n expect(PathHelper.quotePathSegment('\\\\')).to.equal('\"\\\\\\\\\"');\n expect(JSON.parse(PathHelper.quotePathSegment('\\\\'))).to.equal('\\\\');\n });\n\n it('should work for paths with multiple occurrences of the test string', function() {\n expect(PathHelper.quotePathSegment('test\"property\"')).to.equal('\"test\\\\\"property\\\\\"\"');\n expect(PathHelper.quotePathSegment('test\\\\property\\\\')).to.equal('\"test\\\\\\\\property\\\\\\\\\"');\n expect(PathHelper.quotePathSegment('test\"\\\\property\\\\\"')).to.equal('\"test\\\\\"\\\\\\\\property\\\\\\\\\\\\\"\"');\n });\n });\n\n describe('quotePathSegmentIfNeeded', function() {\n it('should quote all required strings', function() {\n expect(PathHelper.quotePathSegmentIfNeeded('.')).to.equal('\".\"');\n expect(PathHelper.quotePathSegmentIfNeeded('\"')).to.equal('\"\\\\\"\"');\n expect(PathHelper.quotePathSegmentIfNeeded('\\\\')).to.equal('\"\\\\\\\\\"');\n expect(PathHelper.quotePathSegmentIfNeeded('[')).to.equal('\"[\"');\n expect(PathHelper.quotePathSegmentIfNeeded(']')).to.equal('\"]\"');\n expect(PathHelper.quotePathSegmentIfNeeded('')).to.equal('\"\"');\n expect(PathHelper.quotePathSegmentIfNeeded('/')).to.equal('\"/\"');\n expect(PathHelper.quotePathSegmentIfNeeded('*')).to.equal('\"*\"');\n });\n\n it('should not quote other strings', function() {\n expect(PathHelper.quotePathSegmentIfNeeded('abcd')).to.equal('abcd');\n expect(PathHelper.quotePathSegmentIfNeeded('test_string')).to.equal('test_string');\n });\n });\n\n describe('unquotePathSegment', function() {\n it('should unquote simple strings', function() {\n expect(PathHelper.unquotePathSegment('\"test\"')).to.equal('test');\n });\n\n it('should correctly unquote strings with a quotation mark', function() {\n expect(PathHelper.unquotePathSegment('\"\\\\\"\"')).to.equal('\"');\n });\n\n it('should correctly unquote strings with a backslash', function() {\n expect(PathHelper.unquotePathSegment('\"\\\\\\\\\"')).to.equal('\\\\');\n });\n\n it('should work with empty strings', function() {\n expect(PathHelper.unquotePathSegment('')).to.equal('');\n });\n\n it('should throw on non strings', function() {\n // @ts-ignore\n expect(() => PathHelper.unquotePathSegment(5)).to.throw();\n });\n\n it('should work for paths with multiple occurrences of the test string', function() {\n expect(PathHelper.unquotePathSegment('\"test\\\\\"property\\\\\"\"')).to.equal('test\"property\"');\n expect(PathHelper.unquotePathSegment('\"test\\\\\\\\property\\\\\\\\\"')).to.equal('test\\\\property\\\\');\n expect(PathHelper.unquotePathSegment('\"test\\\\\"\\\\\\\\property\\\\\\\\\\\\\"\"')).to.equal('test\"\\\\property\\\\\"');\n });\n });\n\n describe('convertAbsolutePathToCanonical', function() {\n it('should remove leading /', function() {\n expect(PathHelper.convertAbsolutePathToCanonical('/a.b.c')).to.equal('a.b.c');\n });\n\n it('should throw on ../', function() {\n expect(() => PathHelper.convertAbsolutePathToCanonical('../a.b.c')).to.throw('../');\n });\n\n it('should throw on *', function() {\n expect(() => PathHelper.convertAbsolutePathToCanonical('/a.b.c*')).to.throw('*');\n });\n\n it('should replace square brackets by periods', function() {\n expect(PathHelper.convertAbsolutePathToCanonical('/a.b[c]')).to.equal('a.b.c');\n expect(PathHelper.convertAbsolutePathToCanonical('/a[b].c')).to.equal('a.b.c');\n });\n\n it('should keep properly escaped property names', function() {\n expect(PathHelper.convertAbsolutePathToCanonical('\".\"')).to.equal('\".\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"\\\\\"\"')).to.equal('\"\\\\\"\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"\\\\\\\\\"')).to.equal('\"\\\\\\\\\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"[\"')).to.equal('\"[\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"]\"')).to.equal('\"]\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"\"')).to.equal('\"\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"/\"')).to.equal('\"/\"');\n expect(PathHelper.convertAbsolutePathToCanonical('\"*\"')).to.equal('\"*\"');\n });\n\n it('should properly unescape unusually escaped property names', function() {\n expect(PathHelper.convertAbsolutePathToCanonical('\"a\".\"b\"')).to.equal('a.b');\n expect(PathHelper.convertAbsolutePathToCanonical('\"a\"[b][\"c\"]')).to.equal('a.b.c');\n });\n\n it('should not modify simple paths', function() {\n expect(PathHelper.convertAbsolutePathToCanonical('a.b.c.d')).to.equal('a.b.c.d');\n expect(PathHelper.convertAbsolutePathToCanonical('test_string')).to.equal('test_string');\n });\n });\n\n describe('getPathCoverage', function() {\n this.timeout(500);\n let paths;\n\n it('should succeed if property is included in a path 1', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('a.b', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.FULLY_COVERED);\n expect(res.pathList).to.deep.equal(['a.b']);\n });\n\n it('should succeed if property is included in a path 2', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('a.b.c', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.FULLY_COVERED);\n expect(res.pathList).to.deep.equal(['a.b']);\n });\n\n it('should succeed if property is included in a path 3', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('a.b.c.d', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.FULLY_COVERED);\n expect(res.pathList).to.deep.equal(['a.b']);\n });\n\n it('should fail if property is not included in any path 1', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('b', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.UNCOVERED);\n expect(res.pathList).to.deep.equal([]);\n });\n\n it('should fail if property is not included in any path 2', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('b.f.g', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.UNCOVERED);\n expect(res.pathList).to.deep.equal([]);\n });\n\n it('should fail if property is not included in any path but have common root 1', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('a.h', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.UNCOVERED);\n expect(res.pathList).to.deep.equal([]);\n });\n\n it('should fail if property is not included in any path but have common root 2', function() {\n paths = ['a.b'];\n const res = PathHelper.getPathCoverage('a.i.j', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.UNCOVERED);\n expect(res.pathList).to.deep.equal([]);\n });\n\n it('should succeed if path goes through the property 1', function() {\n paths = ['a.b.c', 'a.b.d', 'z'];\n const res = PathHelper.getPathCoverage('a.b', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.PARTLY_COVERED);\n expect(res.pathList).to.deep.equal(['a.b.c', 'a.b.d']);\n });\n\n it('should succeed if path goes through the property 2', function() {\n paths = ['z', 'a.b.c', 'a.b.d'];\n const res = PathHelper.getPathCoverage('a.b', paths);\n expect(res.coverageExtent).to.equal(PathHelper.CoverageExtent.PARTLY_COVERED);\n expect(res.pathList).to.deep.equal(['a.b.c', 'a.b.d']);\n });\n });\n});\n"]}
@@ -1,13 +1,11 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
2
  /*!
4
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
5
4
  * Licensed under the MIT License.
6
5
  */
7
- /* eslint-disable no-unused-expressions */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
8
7
  /**
9
- * @fileoverview In this file, we will test the path helper
10
- * functions described in /src/properties/path_helper.js
8
+ * @fileoverview In this file, we will test the path helper functions described in /src/properties/path_helper.js
11
9
  */
12
10
  const fastest_json_copy_1 = require("fastest-json-copy");
13
11
  const changeset_1 = require("../changeset");