@colijnit/sharedcomponents 1.0.30 → 1.0.31

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 (130) hide show
  1. package/README.md +24 -24
  2. package/bundles/colijnit-sharedcomponents.umd.js +757 -1889
  3. package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
  4. package/colijnit-sharedcomponents.d.ts +40 -29
  5. package/colijnit-sharedcomponents.metadata.json +1 -1
  6. package/esm2015/colijnit-sharedcomponents.js +41 -30
  7. package/esm2015/lib/components/date-planning/date-planning.component.js +6 -4
  8. package/esm2015/lib/components/docsign/component/signature/signature.component.js +3 -3
  9. package/esm2015/lib/components/docsign/component/signatures/signatures.component.js +7 -7
  10. package/esm2015/lib/components/docsign/docsign.component.js +5 -5
  11. package/esm2015/lib/components/layout-switcher/layout-switcher.component.js +3 -3
  12. package/esm2015/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.js +57 -0
  13. package/esm2015/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.js +19 -0
  14. package/esm2015/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.js +76 -0
  15. package/esm2015/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.js +21 -0
  16. package/esm2015/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.js +59 -0
  17. package/esm2015/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.js +23 -0
  18. package/esm2015/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.js +50 -0
  19. package/esm2015/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.js +26 -0
  20. package/esm2015/lib/components/send-method-dialog/model/email-address-viewmodel.js +7 -0
  21. package/esm2015/lib/components/send-method-dialog/send-method-dialog.component.js +162 -251
  22. package/esm2015/lib/components/send-method-dialog/send-method-dialog.module.js +12 -13
  23. package/esm2015/lib/components/send-method-dialog/service/send-method.service.js +59 -0
  24. package/esm2015/lib/components/stock/stock-information-grid/stock-information-grid.component.js +7 -8
  25. package/esm2015/lib/enum/icon.enum.js +6 -1
  26. package/esm2015/lib/model/icon-svg.js +7 -2
  27. package/esm2015/lib/model/send-method.js +8 -0
  28. package/esm2015/lib/model/time-window.bo.js +4 -4
  29. package/esm2015/lib/pipe/array-number.pipe.js +1 -1
  30. package/esm2015/lib/service/icon-cache.service.js +1 -1
  31. package/esm2015/lib/service/shared-connector.service.js +91 -121
  32. package/esm2015/lib/service/shared.service.js +11 -1
  33. package/esm2015/lib/service/stock.service.js +19 -36
  34. package/fesm2015/colijnit-sharedcomponents.js +768 -1868
  35. package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
  36. package/lib/components/circular-gauge/style/_layout.scss +0 -2
  37. package/lib/components/circular-gauge/style/_theme.scss +0 -2
  38. package/lib/components/circular-gauge/style/material.scss +1 -0
  39. package/lib/components/date-planning/date-planning.component.d.ts +3 -2
  40. package/lib/components/date-planning/style/_layout.scss +2 -4
  41. package/lib/components/date-planning/style/_theme.scss +2 -4
  42. package/lib/components/docsign/component/signature/style/_layout.scss +2 -4
  43. package/lib/components/docsign/component/signature/style/_theme.scss +2 -4
  44. package/lib/components/docsign/component/signature/style/material.scss +1 -3
  45. package/lib/components/docsign/component/signatures/style/_layout.scss +3 -5
  46. package/lib/components/docsign/component/signatures/style/_theme.scss +2 -4
  47. package/lib/components/docsign/component/signatures/style/material.scss +1 -2
  48. package/lib/components/docsign/style/_layout.scss +3 -5
  49. package/lib/components/docsign/style/_theme.scss +2 -4
  50. package/lib/components/docsign/style/material.scss +1 -0
  51. package/lib/components/layout-switcher/style/_layout.scss +2 -4
  52. package/lib/components/layout-switcher/style/_theme.scss +2 -4
  53. package/lib/components/layout-switcher/style/material.scss +1 -0
  54. package/lib/components/linear-gauge/style/_layout.scss +0 -2
  55. package/lib/components/linear-gauge/style/_theme.scss +0 -2
  56. package/lib/components/linear-gauge/style/material.scss +1 -0
  57. package/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.d.ts +13 -0
  58. package/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.d.ts +2 -0
  59. package/lib/components/send-method-dialog/components/layout-selection/style/_layout.scss +34 -0
  60. package/lib/components/send-method-dialog/components/layout-selection/style/_material-definition.scss +19 -0
  61. package/lib/components/send-method-dialog/components/layout-selection/style/_theme.scss +17 -0
  62. package/lib/components/send-method-dialog/components/layout-selection/style/material.scss +4 -0
  63. package/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.d.ts +18 -0
  64. package/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.d.ts +2 -0
  65. package/lib/components/send-method-dialog/components/printer-selection/style/_layout.scss +59 -0
  66. package/lib/components/send-method-dialog/components/printer-selection/style/_material-definition.scss +39 -0
  67. package/lib/components/send-method-dialog/components/printer-selection/style/_theme.scss +23 -0
  68. package/lib/components/send-method-dialog/components/printer-selection/style/material.scss +4 -0
  69. package/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.d.ts +14 -0
  70. package/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.d.ts +2 -0
  71. package/lib/components/send-method-dialog/components/send-method-email/style/_layout.scss +21 -0
  72. package/lib/components/send-method-dialog/components/send-method-email/style/_material-definition.scss +8 -0
  73. package/lib/components/send-method-dialog/components/send-method-email/style/_theme.scss +5 -0
  74. package/lib/components/send-method-dialog/components/send-method-email/style/material.scss +4 -0
  75. package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.d.ts +10 -0
  76. package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.d.ts +2 -0
  77. package/lib/components/send-method-dialog/components/send-method-printer/style/_layout.scss +17 -0
  78. package/lib/components/send-method-dialog/components/send-method-printer/style/_material-definition.scss +5 -0
  79. package/lib/components/send-method-dialog/components/send-method-printer/style/_theme.scss +5 -0
  80. package/lib/components/send-method-dialog/components/send-method-printer/style/material.scss +4 -0
  81. package/lib/components/send-method-dialog/model/email-address-viewmodel.d.ts +5 -0
  82. package/lib/components/send-method-dialog/send-method-dialog.component.d.ts +53 -61
  83. package/lib/components/send-method-dialog/service/send-method.service.d.ts +23 -0
  84. package/lib/components/send-method-dialog/style/_layout.scss +44 -184
  85. package/lib/components/send-method-dialog/style/_material-definition.scss +30 -1
  86. package/lib/components/send-method-dialog/style/_theme.scss +31 -5
  87. package/lib/components/send-method-dialog/style/material.scss +5 -0
  88. package/lib/components/statusbar/style/_layout.scss +0 -2
  89. package/lib/components/statusbar/style/_theme.scss +0 -2
  90. package/lib/components/statusbar/style/material.scss +1 -0
  91. package/lib/components/stock/style/_layout.scss +0 -2
  92. package/lib/components/stock/style/_theme.scss +0 -3
  93. package/lib/components/stock/style/material.scss +1 -0
  94. package/lib/enum/icon.enum.d.ts +5 -0
  95. package/lib/model/send-method.d.ts +7 -0
  96. package/lib/model/time-window.bo.d.ts +1 -1
  97. package/lib/service/icon-cache.service.d.ts +1 -1
  98. package/lib/service/shared-connector.service.d.ts +21 -29
  99. package/lib/service/shared.service.d.ts +4 -0
  100. package/lib/service/stock.service.d.ts +1 -12
  101. package/lib/style/_variables.scss +5 -1
  102. package/package.json +6 -6
  103. package/esm2015/lib/components/send-method-dialog/enums/send-option.js +0 -8
  104. package/esm2015/lib/factory/business-object-factory.js +0 -120
  105. package/esm2015/lib/factory/decorators/boolean.decorator.js +0 -102
  106. package/esm2015/lib/factory/decorators/complex-array.decorator.js +0 -55
  107. package/esm2015/lib/factory/decorators/complex-field.decorator.js +0 -57
  108. package/esm2015/lib/factory/decorators/date-field.decorator.js +0 -36
  109. package/esm2015/lib/factory/decorators/string-number.decorator.js +0 -43
  110. package/esm2015/lib/model/business-object.js +0 -81
  111. package/esm2015/lib/utils/array-utils.js +0 -202
  112. package/esm2015/lib/utils/check-precision-and-scale-result.js +0 -2
  113. package/esm2015/lib/utils/check-within-stepped-bounds-result.js +0 -2
  114. package/esm2015/lib/utils/is-nill.function.js +0 -5
  115. package/esm2015/lib/utils/number-utils.js +0 -390
  116. package/esm2015/lib/utils/object-utils.js +0 -278
  117. package/lib/components/send-method-dialog/enums/send-option.d.ts +0 -6
  118. package/lib/factory/business-object-factory.d.ts +0 -23
  119. package/lib/factory/decorators/boolean.decorator.d.ts +0 -43
  120. package/lib/factory/decorators/complex-array.decorator.d.ts +0 -25
  121. package/lib/factory/decorators/complex-field.decorator.d.ts +0 -25
  122. package/lib/factory/decorators/date-field.decorator.d.ts +0 -17
  123. package/lib/factory/decorators/string-number.decorator.d.ts +0 -22
  124. package/lib/model/business-object.d.ts +0 -7
  125. package/lib/utils/array-utils.d.ts +0 -63
  126. package/lib/utils/check-precision-and-scale-result.d.ts +0 -4
  127. package/lib/utils/check-within-stepped-bounds-result.d.ts +0 -8
  128. package/lib/utils/is-nill.function.d.ts +0 -1
  129. package/lib/utils/number-utils.d.ts +0 -125
  130. package/lib/utils/object-utils.d.ts +0 -40
@@ -1,81 +0,0 @@
1
- /**
2
- * This type represents the concept of a business object ID type. ID's of business objects can be a primary number, a simple string or a
3
- * object for a composite key.
4
- *
5
- * Simply to prevent type declarations of 'number | string | Object' for BO ID data all over the application.
6
- */
7
- import { MapPropertyDecorator } from "@colijnit/articleapi/build/factory/decorators/map-property.decorator";
8
- import { BooleanTextDecorator } from "@colijnit/articleapi/build/factory/decorators/boolean.decorator";
9
- import { JsonFieldFieldDecorator } from "@colijnit/articleapi/build/factory/decorators/json.decorator";
10
- import { ComplexArrayDecorator } from "@colijnit/articleapi/build/factory/decorators/complex-array.decorator";
11
- export class BusinessObject {
12
- constructor() {
13
- }
14
- // Overridable. Returns the ID of the model. Concrete model classes often override this method to provide their specific ID getter.
15
- getId() {
16
- return this.id;
17
- }
18
- setOwnMappedPropsFromRawData(rawData = {}) {
19
- if (!rawData) {
20
- return;
21
- }
22
- Object.keys(this).forEach((key) => {
23
- // check if property needs to be mapped
24
- if (MapPropertyDecorator.IsMapProperty(this, key)) {
25
- const mapKeys = MapPropertyDecorator.GetMapProperty(this, key).split(",");
26
- const len = mapKeys.length;
27
- for (let i = 0; i < len; i++) {
28
- // eslint-disable-next-line
29
- const mapKey = mapKeys[i].trim();
30
- const objProp = rawData[mapKey];
31
- let decorated = false;
32
- if (rawData.hasOwnProperty(mapKey)) {
33
- if (BooleanTextDecorator.IsBooleanTextField(this, key)) {
34
- this[key] = BooleanTextDecorator.GetLogicalBooleanValue(objProp);
35
- decorated = true;
36
- }
37
- if (JsonFieldFieldDecorator.IsJsonField(this, key)) {
38
- this[key] = JsonFieldFieldDecorator.StringAsJson(objProp);
39
- decorated = true;
40
- }
41
- if (ComplexArrayDecorator.IsComplexArray(this, key)) {
42
- const arrayClass = ComplexArrayDecorator.GetComplexArrayType(this, key);
43
- // eslint-disable-next-line
44
- const origArray = this[key];
45
- // eslint-disable-next-line
46
- const newArray = [];
47
- // eslint-disable-next-line @typescript-eslint/prefer-for-of
48
- for (let j = 0; j < origArray.length; j++) {
49
- // eslint-disable-next-line
50
- const item = new arrayClass(origArray[j]);
51
- newArray.push(item);
52
- }
53
- this[key] = newArray;
54
- }
55
- else {
56
- if (!decorated) {
57
- this[key] = objProp;
58
- }
59
- }
60
- break;
61
- }
62
- }
63
- }
64
- else {
65
- if (rawData.hasOwnProperty(key)) {
66
- const objProp = rawData[key];
67
- if (BooleanTextDecorator.IsBooleanTextField(this, key)) {
68
- this[key] = BooleanTextDecorator.GetLogicalBooleanValue(objProp);
69
- }
70
- else if (JsonFieldFieldDecorator.IsJsonField(this, key)) {
71
- this[key] = JsonFieldFieldDecorator.StringAsJson(objProp);
72
- }
73
- else {
74
- this[key] = objProp;
75
- }
76
- }
77
- }
78
- });
79
- }
80
- }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzaW5lc3Mtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL21vZGVsL2J1c2luZXNzLW9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNFQUFzRSxDQUFDO0FBQzFHLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBQ3JHLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBQ3JHLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVFQUF1RSxDQUFDO0FBSTVHLE1BQU0sT0FBZ0IsY0FBYztJQVNoQztJQUNBLENBQUM7SUFORCxtSUFBbUk7SUFDNUgsS0FBSztRQUNSLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBS1MsNEJBQTRCLENBQUMsVUFBZSxFQUFFO1FBQ3BELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlCLHVDQUF1QztZQUN2QyxJQUFJLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQy9DLE1BQU0sT0FBTyxHQUFhLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixNQUFNLEdBQUcsR0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNwQywyQkFBMkI7b0JBQ3pCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxPQUFPLEdBQVEsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNyQyxJQUFJLFNBQVMsR0FBWSxLQUFLLENBQUM7b0JBQy9CLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDaEMsSUFBSSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7NEJBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFDakUsU0FBUyxHQUFHLElBQUksQ0FBQzt5QkFDcEI7d0JBQ0QsSUFBSSx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFOzRCQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUMxRCxTQUFTLEdBQUcsSUFBSSxDQUFDO3lCQUNwQjt3QkFDRCxJQUFJLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7NEJBQ2pELE1BQU0sVUFBVSxHQUFRLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDL0UsMkJBQTJCOzRCQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzlCLDJCQUEyQjs0QkFDekIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDOzRCQUN0Qiw0REFBNEQ7NEJBQzFELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dDQUN6QywyQkFBMkI7Z0NBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzZCQUN2Qjs0QkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO3lCQUN4Qjs2QkFBTTs0QkFDSCxJQUFJLENBQUMsU0FBUyxFQUFFO2dDQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7NkJBQ3ZCO3lCQUNKO3dCQUNELE1BQU07cUJBQ1Q7aUJBQ0o7YUFDSjtpQkFBTTtnQkFDSCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzdCLE1BQU0sT0FBTyxHQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0JBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDcEU7eUJBQU0sSUFBSSx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO3dCQUN2RCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUM3RDt5QkFBTTt3QkFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO3FCQUN2QjtpQkFDSjthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVGhpcyB0eXBlIHJlcHJlc2VudHMgdGhlIGNvbmNlcHQgb2YgYSBidXNpbmVzcyBvYmplY3QgSUQgdHlwZS4gSUQncyBvZiBidXNpbmVzcyBvYmplY3RzIGNhbiBiZSBhIHByaW1hcnkgbnVtYmVyLCBhIHNpbXBsZSBzdHJpbmcgb3IgYVxyXG4gKiBvYmplY3QgZm9yIGEgY29tcG9zaXRlIGtleS5cclxuICpcclxuICogU2ltcGx5IHRvIHByZXZlbnQgdHlwZSBkZWNsYXJhdGlvbnMgb2YgJ251bWJlciB8IHN0cmluZyB8IE9iamVjdCcgZm9yIEJPIElEIGRhdGEgYWxsIG92ZXIgdGhlIGFwcGxpY2F0aW9uLlxyXG4gKi9cclxuaW1wb3J0IHtNYXBQcm9wZXJ0eURlY29yYXRvcn0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2ZhY3RvcnkvZGVjb3JhdG9ycy9tYXAtcHJvcGVydHkuZGVjb3JhdG9yXCI7XHJcbmltcG9ydCB7Qm9vbGVhblRleHREZWNvcmF0b3J9IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9mYWN0b3J5L2RlY29yYXRvcnMvYm9vbGVhbi5kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHtKc29uRmllbGRGaWVsZERlY29yYXRvcn0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2ZhY3RvcnkvZGVjb3JhdG9ycy9qc29uLmRlY29yYXRvclwiO1xyXG5pbXBvcnQge0NvbXBsZXhBcnJheURlY29yYXRvcn0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2ZhY3RvcnkvZGVjb3JhdG9ycy9jb21wbGV4LWFycmF5LmRlY29yYXRvclwiO1xyXG5cclxuZXhwb3J0IHR5cGUgQnVzaW5lc3NPYmplY3RJRFR5cGUgPSBudW1iZXIgfCBzdHJpbmcgfCBPYmplY3Q7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnVzaW5lc3NPYmplY3Qge1xyXG4gICAgLy8gVGhlIElEIG9mIHRoZSBtb2RlbC5cclxuICAgIHB1YmxpYyBpZDogQnVzaW5lc3NPYmplY3RJRFR5cGU7XHJcblxyXG4gICAgLy8gT3ZlcnJpZGFibGUuIFJldHVybnMgdGhlIElEIG9mIHRoZSBtb2RlbC4gQ29uY3JldGUgbW9kZWwgY2xhc3NlcyBvZnRlbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIHRoZWlyIHNwZWNpZmljIElEIGdldHRlci5cclxuICAgIHB1YmxpYyBnZXRJZCgpOiBCdXNpbmVzc09iamVjdElEVHlwZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldE93bk1hcHBlZFByb3BzRnJvbVJhd0RhdGEocmF3RGF0YTogYW55ID0ge30pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXJhd0RhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcHJvcGVydHkgbmVlZHMgdG8gYmUgbWFwcGVkXHJcbiAgICAgICAgICAgIGlmIChNYXBQcm9wZXJ0eURlY29yYXRvci5Jc01hcFByb3BlcnR5KHRoaXMsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hcEtleXM6IHN0cmluZ1tdID0gTWFwUHJvcGVydHlEZWNvcmF0b3IuR2V0TWFwUHJvcGVydHkodGhpcywga2V5KS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IG1hcEtleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcEtleSA9IG1hcEtleXNbaV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9ialByb3A6IGFueSA9IHJhd0RhdGFbbWFwS2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVjb3JhdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhd0RhdGEuaGFzT3duUHJvcGVydHkobWFwS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQm9vbGVhblRleHREZWNvcmF0b3IuSXNCb29sZWFuVGV4dEZpZWxkKHRoaXMsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IEJvb2xlYW5UZXh0RGVjb3JhdG9yLkdldExvZ2ljYWxCb29sZWFuVmFsdWUob2JqUHJvcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKc29uRmllbGRGaWVsZERlY29yYXRvci5Jc0pzb25GaWVsZCh0aGlzLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBKc29uRmllbGRGaWVsZERlY29yYXRvci5TdHJpbmdBc0pzb24ob2JqUHJvcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDb21wbGV4QXJyYXlEZWNvcmF0b3IuSXNDb21wbGV4QXJyYXkodGhpcywga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyYXlDbGFzczogYW55ID0gQ29tcGxleEFycmF5RGVjb3JhdG9yLkdldENvbXBsZXhBcnJheVR5cGUodGhpcywga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdBcnJheSA9IHRoaXNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0FycmF5ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9yaWdBcnJheS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IGFycmF5Q2xhc3Mob3JpZ0FycmF5W2pdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBcnJheS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXldID0gbmV3QXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlY29yYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG9ialByb3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJhd0RhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9ialByb3A6IGFueSA9IHJhd0RhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQm9vbGVhblRleHREZWNvcmF0b3IuSXNCb29sZWFuVGV4dEZpZWxkKHRoaXMsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXldID0gQm9vbGVhblRleHREZWNvcmF0b3IuR2V0TG9naWNhbEJvb2xlYW5WYWx1ZShvYmpQcm9wKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEpzb25GaWVsZEZpZWxkRGVjb3JhdG9yLklzSnNvbkZpZWxkKHRoaXMsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXldID0gSnNvbkZpZWxkRmllbGREZWNvcmF0b3IuU3RyaW5nQXNKc29uKG9ialByb3ApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG9ialByb3A7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -1,202 +0,0 @@
1
- import { ObjectUtils } from "./object-utils";
2
- import { NumberUtils } from "./number-utils";
3
- import { isNill } from "./is-nill.function";
4
- import { notNill } from "./function/not-nill.function";
5
- export class ArrayUtils {
6
- /**
7
- * Returns whether at least one element in given array could be found by given finder function.
8
- *
9
- * @param {T[]} array
10
- * @param {(element: T) => boolean} finder A finder function that takes an element of the array and returns a boolean that represents
11
- * the 'found status' for that element; whether it should have been found or not.
12
- */
13
- static ContainsAnElementFoundBy(array, finder) {
14
- if (!array || !finder) {
15
- return false;
16
- }
17
- return notNill(this.Find(array, finder));
18
- }
19
- /**
20
- * Cross-browser Array.find() function. Returns the first item in given array for which the foundBy function returns true. Returns
21
- * undefined when none was found.
22
- *
23
- * Example usage:
24
- * const foundItem: BusinessObject = ArrayUtils.Find<BusinessObject>(modelArray, (modelItem: BusinessObject) => <br>
25
- * (return modelItem.getId() === '1')
26
- * * });
27
- *
28
- * @param array The array with items to search in.
29
- * @param foundBy The finder function applied on each items of the array, when that returns true, the item is considered found.
30
- */
31
- static Find(array, foundBy) {
32
- if (!array || !foundBy) {
33
- return undefined;
34
- }
35
- for (let i = 0, len = array.length; i < len; i++) {
36
- const itemCur = array[i];
37
- if (foundBy(itemCur)) {
38
- return itemCur;
39
- }
40
- }
41
- return undefined;
42
- }
43
- // @returns empty array when nothing found, otherwise array with found items
44
- static FindAll(array, foundBy) {
45
- const answer = [];
46
- if (!array || !foundBy) {
47
- return answer;
48
- }
49
- for (let i = 0, len = array.length; i < len; i++) {
50
- const itemCur = array[i];
51
- if (foundBy(itemCur)) {
52
- answer.push(itemCur);
53
- }
54
- }
55
- return answer;
56
- }
57
- // returns a simple clone of given array, using array.slice(0)
58
- static CloneArray(array) {
59
- let answer = [];
60
- if (array) {
61
- answer = array.slice(0);
62
- }
63
- return answer;
64
- }
65
- /**
66
- * Returns a 'semi deep clone' of given array. Its first-level members are object-shallow-cloned (optionally with a strongly typed constructor),
67
- * or just as plain object (see param arrayItemsClass).
68
- * @param array
69
- * @param arrayItemsClass If provided, the cloned array's first-level items will be strongly typed to / constructed as this class. Otherwise
70
- * it'll be a plain object.
71
- * @param deepClone Set to true if array items contain FUNCTIONS that need to be cloned..
72
- * @returns {Array} semi-deep clone of given array
73
- */
74
- static CloneArrayAndItsItems(array, arrayItemsClass, deepClone = false) {
75
- const cloneArray = [];
76
- if (array) {
77
- for (let i = 0, len = array.length; i < len; i++) {
78
- if (deepClone) {
79
- cloneArray.push(ObjectUtils.GetDeepClone(array[i]));
80
- }
81
- else {
82
- cloneArray.push(ObjectUtils.GetShallowClone(array[i], arrayItemsClass));
83
- }
84
- }
85
- }
86
- else {
87
- return [];
88
- }
89
- return cloneArray;
90
- }
91
- /**
92
- * Removes element at given index from given array. Doesn't just set it to null like JavaScripts standard 'delete' does, but really
93
- * removes the element using splice().
94
- *
95
- * @param {number} index
96
- * @param {any[]} array in-out
97
- * @returns {boolean} True if and only if the element on given index is succesfully removed from given array.
98
- */
99
- static RemoveElementAtIndex(index, array) {
100
- if (NumberUtils.IsNaN(index) || index < 0 || !Array.isArray(array) || array.length === 0) {
101
- return false;
102
- }
103
- if (index in array) {
104
- array.splice(index, 1);
105
- return true;
106
- }
107
- else {
108
- return false;
109
- }
110
- }
111
- /**
112
- * Removes given element from given array. Doesn't just set it to null like JavaScripts standard 'delete' does, but really removes the
113
- * element using splice(). Also works on associative arrays.
114
- *
115
- * @param {T} element The element to remove.
116
- * @param {T[]} array The array to remove the element from.
117
- * @returns {boolean} True iff given element was truly successfully removed from given array.
118
- */
119
- static RemoveElement(element, array) {
120
- if (!Array.isArray(array)) {
121
- return false;
122
- }
123
- const index = array.indexOf(element);
124
- return ArrayUtils.RemoveElementAtIndex(index, array);
125
- }
126
- // Checks if given array is defined, and is an array, and has length > 0, and, optionally checks that the first element is of type given clazz.
127
- static IsArrayWithElements(arrayToCheck, classItemsMustBeInstanceOf) {
128
- if (isNill(arrayToCheck)) {
129
- return false;
130
- }
131
- if (Array.isArray(arrayToCheck) && arrayToCheck.length > 0) {
132
- if (classItemsMustBeInstanceOf) {
133
- return arrayToCheck[0] instanceof classItemsMustBeInstanceOf;
134
- }
135
- else {
136
- return true;
137
- }
138
- }
139
- else {
140
- return false;
141
- }
142
- }
143
- // Removes all elements from given array for which given filter function holds true. Returns true if at least one removed, else false.
144
- static RemoveElementsByFilter(array, filterFunction) {
145
- if (!ArrayUtils.IsArrayWithElements(array) || !filterFunction) {
146
- return false;
147
- }
148
- let atLeastOneRemoved = false;
149
- const len = array.length;
150
- for (let i = len - 1; i >= 0; i--) {
151
- const item = array[i];
152
- if (filterFunction.call(this, item) === true) {
153
- array.splice(i, 1);
154
- atLeastOneRemoved = true;
155
- }
156
- }
157
- return atLeastOneRemoved;
158
- }
159
- static MoveElement(element, toIndex, array) {
160
- if (!Array.isArray(array) || isNill(toIndex)) {
161
- return false;
162
- }
163
- const fromIndex = array.indexOf(element);
164
- const toIndexCorrected = NumberUtils.GetNearestNumberWithinBounds(toIndex, 0, array.length - 1);
165
- if (fromIndex === -1 || array[toIndexCorrected] === element) {
166
- // element did not exist in given array, or already existed on given toIndex
167
- return false;
168
- }
169
- array.splice(toIndexCorrected, 0, array.splice(fromIndex, 1)[0]);
170
- return true;
171
- }
172
- // PRE: elements exists in given array. POST: given elementToPlace has a lower index than given afterThisElement. Array is in-out manipulated.
173
- static PlaceElementAfterOther(array, elementToPlace, afterThisElement) {
174
- if (array) {
175
- const afterThisElIdx = array.indexOf(afterThisElement);
176
- const elToPlaceIdx = array.indexOf(elementToPlace);
177
- if (afterThisElIdx >= elToPlaceIdx) {
178
- ArrayUtils.MoveElement(elementToPlace, afterThisElIdx + 1, array);
179
- }
180
- }
181
- }
182
- /**
183
- * Returns max value from all resulting values from applying given itemValueFunction to all items of given array.
184
- * @param array
185
- * @param itemValueFunction The function applied to each array item that gives it a numerical value. The max num val found is returned.
186
- */
187
- static GetMaxCalculatedValue(array, itemValueFunction) {
188
- if (!array || !itemValueFunction) {
189
- return NaN;
190
- }
191
- let max = undefined;
192
- const len = array.length;
193
- for (let i = 0; i < len; i++) {
194
- const valueCur = itemValueFunction.call(this);
195
- if (valueCur > max) {
196
- max = valueCur;
197
- }
198
- }
199
- return max;
200
- }
201
- }
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvdXRpbHMvYXJyYXktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRXJELE1BQU0sT0FBTyxVQUFVO0lBQ25COzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBSSxLQUFVLEVBQUUsTUFBK0I7UUFDakYsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUksS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBSSxLQUFVLEVBQUUsT0FBNkI7UUFDM0QsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNwQixPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBVyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUQsTUFBTSxPQUFPLEdBQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFHO2dCQUNuQixPQUFPLE9BQU8sQ0FBQzthQUNsQjtT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LEtBQVUsRUFBRSxpQkFBc0M7UUFDdkYsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ2hDLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFFRCxJQUFJLEdBQUcsR0FBVyxTQUFTLENBQUM7UUFFNUIsTUFBTSxHQUFHLEdBQVcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sUUFBUSxHQUFXLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxJQUFJLFFBQVEsR0FBRyxHQUFHLEVBQUU7Z0JBQ2xCLEdBQUcsR0FBRyxRQUFRLENBQUM7YUFDaEI7U0FDRjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4vb2JqZWN0LXV0aWxzXCI7XHJcbmltcG9ydCB7TnVtYmVyVXRpbHN9IGZyb20gXCIuL251bWJlci11dGlsc1wiO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSBcIi4vaXMtbmlsbC5mdW5jdGlvblwiO1xyXG5pbXBvcnQge25vdE5pbGx9IGZyb20gXCIuL2Z1bmN0aW9uL25vdC1uaWxsLmZ1bmN0aW9uXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQXJyYXlVdGlscyB7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgd2hldGhlciBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiBnaXZlbiBhcnJheSBjb3VsZCBiZSBmb3VuZCBieSBnaXZlbiBmaW5kZXIgZnVuY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtUW119IGFycmF5XHJcbiAgICAgKiBAcGFyYW0geyhlbGVtZW50OiBUKSA9PiBib29sZWFufSBmaW5kZXIgQSBmaW5kZXIgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBlbGVtZW50IG9mIHRoZSBhcnJheSBhbmQgcmV0dXJucyBhIGJvb2xlYW4gdGhhdCByZXByZXNlbnRzXHJcbiAgICAgKiB0aGUgJ2ZvdW5kIHN0YXR1cycgZm9yIHRoYXQgZWxlbWVudDsgd2hldGhlciBpdCBzaG91bGQgaGF2ZSBiZWVuIGZvdW5kIG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBDb250YWluc0FuRWxlbWVudEZvdW5kQnk8VD4oYXJyYXk6IFRbXSwgZmluZGVyOiAoZWxlbWVudDogVCkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghYXJyYXkgfHwgIWZpbmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbm90TmlsbCh0aGlzLkZpbmQ8VD4oYXJyYXksIGZpbmRlcikpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3Jvc3MtYnJvd3NlciBBcnJheS5maW5kKCkgZnVuY3Rpb24uIFJldHVybnMgdGhlIGZpcnN0IGl0ZW0gaW4gZ2l2ZW4gYXJyYXkgZm9yIHdoaWNoIHRoZSBmb3VuZEJ5IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZS4gUmV0dXJuc1xyXG4gICAgICogdW5kZWZpbmVkIHdoZW4gbm9uZSB3YXMgZm91bmQuXHJcbiAgICAgKlxyXG4gICAgICogRXhhbXBsZSB1c2FnZTpcclxuICAgICAqIGNvbnN0IGZvdW5kSXRlbTogQnVzaW5lc3NPYmplY3QgPSBBcnJheVV0aWxzLkZpbmQ8QnVzaW5lc3NPYmplY3Q+KG1vZGVsQXJyYXksIChtb2RlbEl0ZW06IEJ1c2luZXNzT2JqZWN0KSA9PiA8YnI+XHJcbiAgICAgKiAgICAgKHJldHVybiBtb2RlbEl0ZW0uZ2V0SWQoKSA9PT0gJzEnKVxyXG4gICAgICogICAqIH0pO1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhcnJheSBUaGUgYXJyYXkgd2l0aCBpdGVtcyB0byBzZWFyY2ggaW4uXHJcbiAgICAgKiBAcGFyYW0gZm91bmRCeSBUaGUgZmluZGVyIGZ1bmN0aW9uIGFwcGxpZWQgb24gZWFjaCBpdGVtcyBvZiB0aGUgYXJyYXksIHdoZW4gdGhhdCByZXR1cm5zIHRydWUsIHRoZSBpdGVtIGlzIGNvbnNpZGVyZWQgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgRmluZDxUPihhcnJheTogVFtdLCBmb3VuZEJ5OiAoaXRlbTogVCkgPT4gYm9vbGVhbik6IFQge1xyXG4gICAgICAgIGlmICghYXJyYXkgfHwgIWZvdW5kQnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIGxlbjogbnVtYmVyID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbUN1cjogVCA9IGFycmF5W2ldO1xyXG4gICAgICAgICAgICBpZiAoZm91bmRCeShpdGVtQ3VyKSApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtQ3VyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQHJldHVybnMgZW1wdHkgYXJyYXkgd2hlbiBub3RoaW5nIGZvdW5kLCBvdGhlcndpc2UgYXJyYXkgd2l0aCBmb3VuZCBpdGVtc1xyXG4gICAgcHVibGljIHN0YXRpYyBGaW5kQWxsPFQ+KGFycmF5OiBUW10sIGZvdW5kQnk6IChpdGVtOiBUKSA9PiBib29sZWFuKTogVFtdIHtcclxuICAgICAgICBjb25zdCBhbnN3ZXI6IFRbXSA9IFtdO1xyXG4gICAgICAgIGlmICghYXJyYXkgfHwgIWZvdW5kQnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIGxlbjogbnVtYmVyID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbUN1cjogVCA9IGFycmF5W2ldO1xyXG4gICAgICAgICAgICBpZiAoZm91bmRCeShpdGVtQ3VyKSkge1xyXG4gICAgICAgICAgICAgICAgYW5zd2VyLnB1c2goaXRlbUN1cik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXR1cm5zIGEgc2ltcGxlIGNsb25lIG9mIGdpdmVuIGFycmF5LCB1c2luZyBhcnJheS5zbGljZSgwKVxyXG4gICAgcHVibGljIHN0YXRpYyBDbG9uZUFycmF5PFQ+KGFycmF5OiBUW10pOiBUW10ge1xyXG4gICAgICAgIGxldCBhbnN3ZXI6IFRbXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoYXJyYXkpIHtcclxuICAgICAgICAgICAgYW5zd2VyID0gYXJyYXkuc2xpY2UoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhICdzZW1pIGRlZXAgY2xvbmUnIG9mIGdpdmVuIGFycmF5LiBJdHMgZmlyc3QtbGV2ZWwgbWVtYmVycyBhcmUgb2JqZWN0LXNoYWxsb3ctY2xvbmVkIChvcHRpb25hbGx5IHdpdGggYSBzdHJvbmdseSB0eXBlZCBjb25zdHJ1Y3RvciksXHJcbiAgICAgKiBvciBqdXN0IGFzIHBsYWluIG9iamVjdCAoc2VlIHBhcmFtIGFycmF5SXRlbXNDbGFzcykuXHJcbiAgICAgKiBAcGFyYW0gYXJyYXlcclxuICAgICAqIEBwYXJhbSBhcnJheUl0ZW1zQ2xhc3MgSWYgcHJvdmlkZWQsIHRoZSBjbG9uZWQgYXJyYXkncyBmaXJzdC1sZXZlbCBpdGVtcyB3aWxsIGJlIHN0cm9uZ2x5IHR5cGVkIHRvIC8gY29uc3RydWN0ZWQgYXMgdGhpcyBjbGFzcy4gT3RoZXJ3aXNlXHJcbiAgICAgKiBpdCdsbCBiZSBhIHBsYWluIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBkZWVwQ2xvbmUgU2V0IHRvIHRydWUgaWYgYXJyYXkgaXRlbXMgY29udGFpbiBGVU5DVElPTlMgdGhhdCBuZWVkIHRvIGJlIGNsb25lZC4uXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IHNlbWktZGVlcCBjbG9uZSBvZiBnaXZlbiBhcnJheVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIENsb25lQXJyYXlBbmRJdHNJdGVtczxUPihhcnJheTogVFtdLCBhcnJheUl0ZW1zQ2xhc3M/OiBhbnksIGRlZXBDbG9uZTogYm9vbGVhbiA9IGZhbHNlKTogVFtdIHtcclxuICAgICAgICBjb25zdCBjbG9uZUFycmF5OiBUW10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIGxlbjogbnVtYmVyID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZWVwQ2xvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbG9uZUFycmF5LnB1c2goT2JqZWN0VXRpbHMuR2V0RGVlcENsb25lKGFycmF5W2ldKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lQXJyYXkucHVzaChPYmplY3RVdGlscy5HZXRTaGFsbG93Q2xvbmUoYXJyYXlbaV0sIGFycmF5SXRlbXNDbGFzcykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNsb25lQXJyYXk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGVsZW1lbnQgYXQgZ2l2ZW4gaW5kZXggZnJvbSBnaXZlbiBhcnJheS4gRG9lc24ndCBqdXN0IHNldCBpdCB0byBudWxsIGxpa2UgSmF2YVNjcmlwdHMgc3RhbmRhcmQgJ2RlbGV0ZScgZG9lcywgYnV0IHJlYWxseVxyXG4gICAgICogcmVtb3ZlcyB0aGUgZWxlbWVudCB1c2luZyBzcGxpY2UoKS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgICAqIEBwYXJhbSB7YW55W119IGFycmF5IGluLW91dFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGVsZW1lbnQgb24gZ2l2ZW4gaW5kZXggaXMgc3VjY2VzZnVsbHkgcmVtb3ZlZCBmcm9tIGdpdmVuIGFycmF5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFJlbW92ZUVsZW1lbnRBdEluZGV4KGluZGV4OiBudW1iZXIsIGFycmF5OiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChOdW1iZXJVdGlscy5Jc05hTihpbmRleCkgfHwgaW5kZXggPCAwIHx8ICFBcnJheS5pc0FycmF5KGFycmF5KSB8fCBhcnJheS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGluZGV4IGluIGFycmF5KSB7XHJcbiAgICAgICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGdpdmVuIGVsZW1lbnQgZnJvbSBnaXZlbiBhcnJheS4gRG9lc24ndCBqdXN0IHNldCBpdCB0byBudWxsIGxpa2UgSmF2YVNjcmlwdHMgc3RhbmRhcmQgJ2RlbGV0ZScgZG9lcywgYnV0IHJlYWxseSByZW1vdmVzIHRoZVxyXG4gICAgICogZWxlbWVudCB1c2luZyBzcGxpY2UoKS4gQWxzbyB3b3JrcyBvbiBhc3NvY2lhdGl2ZSBhcnJheXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtUfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIHJlbW92ZS5cclxuICAgICAqIEBwYXJhbSB7VFtdfSBhcnJheSBUaGUgYXJyYXkgdG8gcmVtb3ZlIHRoZSBlbGVtZW50IGZyb20uXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZmYgZ2l2ZW4gZWxlbWVudCB3YXMgdHJ1bHkgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbSBnaXZlbiBhcnJheS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBSZW1vdmVFbGVtZW50PFQ+KGVsZW1lbnQ6IFQsIGFycmF5OiBUW10pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBhcnJheS5pbmRleE9mKGVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBBcnJheVV0aWxzLlJlbW92ZUVsZW1lbnRBdEluZGV4KGluZGV4LCBhcnJheSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tzIGlmIGdpdmVuIGFycmF5IGlzIGRlZmluZWQsIGFuZCBpcyBhbiBhcnJheSwgYW5kIGhhcyBsZW5ndGggPiAwLCBhbmQsIG9wdGlvbmFsbHkgY2hlY2tzIHRoYXQgdGhlIGZpcnN0IGVsZW1lbnQgaXMgb2YgdHlwZSBnaXZlbiBjbGF6ei5cclxuICAgIHB1YmxpYyBzdGF0aWMgSXNBcnJheVdpdGhFbGVtZW50czxUPihhcnJheVRvQ2hlY2s6IFRbXSwgY2xhc3NJdGVtc011c3RCZUluc3RhbmNlT2Y/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoaXNOaWxsKGFycmF5VG9DaGVjaykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXlUb0NoZWNrKSAmJiBhcnJheVRvQ2hlY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoY2xhc3NJdGVtc011c3RCZUluc3RhbmNlT2YpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVRvQ2hlY2tbMF0gaW5zdGFuY2VvZiBjbGFzc0l0ZW1zTXVzdEJlSW5zdGFuY2VPZjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmVzIGFsbCBlbGVtZW50cyBmcm9tIGdpdmVuIGFycmF5IGZvciB3aGljaCBnaXZlbiBmaWx0ZXIgZnVuY3Rpb24gaG9sZHMgdHJ1ZS4gUmV0dXJucyB0cnVlIGlmIGF0IGxlYXN0IG9uZSByZW1vdmVkLCBlbHNlIGZhbHNlLlxyXG4gICAgcHVibGljIHN0YXRpYyBSZW1vdmVFbGVtZW50c0J5RmlsdGVyKGFycmF5OiBhbnlbXSwgZmlsdGVyRnVuY3Rpb246IChpdGVtOiBhbnkpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIUFycmF5VXRpbHMuSXNBcnJheVdpdGhFbGVtZW50cyhhcnJheSkgfHwgIWZpbHRlckZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhdExlYXN0T25lUmVtb3ZlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IGFycmF5Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtOiBhbnkgPSBhcnJheVtpXTtcclxuICAgICAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uLmNhbGwodGhpcywgaXRlbSkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIGF0TGVhc3RPbmVSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF0TGVhc3RPbmVSZW1vdmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgTW92ZUVsZW1lbnQ8VD4oZWxlbWVudDogVCwgdG9JbmRleDogbnVtYmVyLCBhcnJheTogVFtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSB8fCBpc05pbGwodG9JbmRleCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZnJvbUluZGV4OiBudW1iZXIgPSBhcnJheS5pbmRleE9mKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IHRvSW5kZXhDb3JyZWN0ZWQ6IG51bWJlciA9IE51bWJlclV0aWxzLkdldE5lYXJlc3ROdW1iZXJXaXRoaW5Cb3VuZHModG9JbmRleCwgMCwgYXJyYXkubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgaWYgKGZyb21JbmRleCA9PT0gLTEgfHwgYXJyYXlbdG9JbmRleENvcnJlY3RlZF0gPT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgLy8gZWxlbWVudCBkaWQgbm90IGV4aXN0IGluIGdpdmVuIGFycmF5LCBvciBhbHJlYWR5IGV4aXN0ZWQgb24gZ2l2ZW4gdG9JbmRleFxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFycmF5LnNwbGljZSh0b0luZGV4Q29ycmVjdGVkLCAwLCBhcnJheS5zcGxpY2UoZnJvbUluZGV4LCAxKVswXSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUFJFOiBlbGVtZW50cyBleGlzdHMgaW4gZ2l2ZW4gYXJyYXkuIFBPU1Q6IGdpdmVuIGVsZW1lbnRUb1BsYWNlIGhhcyBhIGxvd2VyIGluZGV4IHRoYW4gZ2l2ZW4gYWZ0ZXJUaGlzRWxlbWVudC4gQXJyYXkgaXMgaW4tb3V0IG1hbmlwdWxhdGVkLlxyXG4gICAgcHVibGljIHN0YXRpYyBQbGFjZUVsZW1lbnRBZnRlck90aGVyKGFycmF5OiBhbnlbXSwgZWxlbWVudFRvUGxhY2U6IGFueSwgYWZ0ZXJUaGlzRWxlbWVudDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGFycmF5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyVGhpc0VsSWR4OiBudW1iZXIgPSBhcnJheS5pbmRleE9mKGFmdGVyVGhpc0VsZW1lbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBlbFRvUGxhY2VJZHg6IG51bWJlciA9IGFycmF5LmluZGV4T2YoZWxlbWVudFRvUGxhY2UpO1xyXG4gICAgICAgICAgICBpZiAoYWZ0ZXJUaGlzRWxJZHggPj0gZWxUb1BsYWNlSWR4KSB7XHJcbiAgICAgICAgICAgICAgICBBcnJheVV0aWxzLk1vdmVFbGVtZW50KGVsZW1lbnRUb1BsYWNlLCBhZnRlclRoaXNFbElkeCArIDEsIGFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBtYXggdmFsdWUgZnJvbSBhbGwgcmVzdWx0aW5nIHZhbHVlcyBmcm9tIGFwcGx5aW5nIGdpdmVuIGl0ZW1WYWx1ZUZ1bmN0aW9uIHRvIGFsbCBpdGVtcyBvZiBnaXZlbiBhcnJheS5cclxuICAgKiBAcGFyYW0gYXJyYXlcclxuICAgKiBAcGFyYW0gaXRlbVZhbHVlRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIGFwcGxpZWQgdG8gZWFjaCBhcnJheSBpdGVtIHRoYXQgZ2l2ZXMgaXQgYSBudW1lcmljYWwgdmFsdWUuIFRoZSBtYXggbnVtIHZhbCBmb3VuZCBpcyByZXR1cm5lZC5cclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIEdldE1heENhbGN1bGF0ZWRWYWx1ZTxUPihhcnJheTogVFtdLCBpdGVtVmFsdWVGdW5jdGlvbjogKGl0ZW06IFQpID0+IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoIWFycmF5IHx8ICFpdGVtVmFsdWVGdW5jdGlvbikge1xyXG4gICAgICByZXR1cm4gTmFOO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtYXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IGFycmF5Lmxlbmd0aDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBjb25zdCB2YWx1ZUN1cjogbnVtYmVyID0gaXRlbVZhbHVlRnVuY3Rpb24uY2FsbCh0aGlzKTtcclxuICAgICAgaWYgKHZhbHVlQ3VyID4gbWF4KSB7XHJcbiAgICAgICAgbWF4ID0gdmFsdWVDdXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stcHJlY2lzaW9uLWFuZC1zY2FsZS1yZXN1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvdXRpbHMvY2hlY2stcHJlY2lzaW9uLWFuZC1zY2FsZS1yZXN1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIE91dHB1dCBvYmplY3Qgc2hhcGUgZm9yIE51bWJlclV0aWxzLkNoZWNrUHJlY2lzaW9uQW5kU2NhbGUoKS5cclxuZXhwb3J0IGludGVyZmFjZSBDaGVja1ByZWNpc2lvbkFuZFNjYWxlUmVzdWx0IHtcclxuICAgIGlzT2s6IGJvb2xlYW47XHJcbiAgICBuZWFyZXN0T2tOcj86IG51bWJlcjtcclxufVxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2std2l0aGluLXN0ZXBwZWQtYm91bmRzLXJlc3VsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZGNvbXBvbmVudHMvc3JjL2xpYi91dGlscy9jaGVjay13aXRoaW4tc3RlcHBlZC1ib3VuZHMtcmVzdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogT3V0cHV0IG9iamVjdCBzaGFwZSBmb3IgTnVtYmVyVXRpbHMuQ2hlY2tXaXRoaW5TdGVwcGVkQm91bmRzKCkuIEZvciBlZmZpY2llbmN5LCB0aGlzIG1ldGhvZCBhbHNvIHJldHVybnMgdGhlIGZvdW5kIHJlbWFpbmRlciBpZiB0aGUgZ2l2ZW5cclxuICogbnVtYmVyIHdhcyBOT1Qgd2l0aGluIHRoZSBzcGVjaWZpZWQgc3RlcHBlZCBib3VuZHMuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrV2l0aGluU3RlcHBlZEJvdW5kc1Jlc3VsdCB7XHJcbiAgICBpc09rOiBib29sZWFuO1xyXG4gICAgcmVtYWluZGVyPzogbnVtYmVyO1xyXG59XHJcbiJdfQ==
@@ -1,5 +0,0 @@
1
- // @returns true iff given value equals null or equals undefined
2
- export function isNill(value) {
3
- return value === null || value === undefined;
4
- }
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtbmlsbC5mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZGNvbXBvbmVudHMvc3JjL2xpYi91dGlscy9pcy1uaWxsLmZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdFQUFnRTtBQUNoRSxNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQVU7SUFDN0IsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEByZXR1cm5zIHRydWUgaWZmIGdpdmVuIHZhbHVlIGVxdWFscyBudWxsIG9yIGVxdWFscyB1bmRlZmluZWRcclxuZXhwb3J0IGZ1bmN0aW9uIGlzTmlsbCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcclxufSJdfQ==