brighterscript 0.66.0-alpha.3 → 0.66.0-alpha.5

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 (198) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/BusyStatusTracker.d.ts +31 -0
  3. package/dist/BusyStatusTracker.js +83 -0
  4. package/dist/BusyStatusTracker.js.map +1 -0
  5. package/dist/DiagnosticMessages.d.ts +6 -1
  6. package/dist/DiagnosticMessages.js +5 -0
  7. package/dist/DiagnosticMessages.js.map +1 -1
  8. package/dist/LanguageServer.d.ts +18 -0
  9. package/dist/LanguageServer.js +126 -57
  10. package/dist/LanguageServer.js.map +1 -1
  11. package/dist/Logger.d.ts +1 -1
  12. package/dist/Logger.js.map +1 -1
  13. package/dist/Program.d.ts +3 -8
  14. package/dist/Program.js +13 -55
  15. package/dist/Program.js.map +1 -1
  16. package/dist/ProgramBuilder.js +14 -2
  17. package/dist/ProgramBuilder.js.map +1 -1
  18. package/dist/Scope.d.ts +1 -13
  19. package/dist/Scope.js +10 -65
  20. package/dist/Scope.js.map +1 -1
  21. package/dist/SymbolTable.d.ts +12 -10
  22. package/dist/SymbolTable.js +33 -24
  23. package/dist/SymbolTable.js.map +1 -1
  24. package/dist/Throttler.d.ts +12 -0
  25. package/dist/Throttler.js +39 -0
  26. package/dist/Throttler.js.map +1 -1
  27. package/dist/astUtils/creators.js +5 -3
  28. package/dist/astUtils/creators.js.map +1 -1
  29. package/dist/astUtils/reflection.d.ts +3 -1
  30. package/dist/astUtils/reflection.js +12 -1
  31. package/dist/astUtils/reflection.js.map +1 -1
  32. package/dist/astUtils/reflection.spec.js +2 -1
  33. package/dist/astUtils/reflection.spec.js.map +1 -1
  34. package/dist/bscPlugin/CallExpressionInfo.d.ts +3 -3
  35. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  36. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +39 -1
  37. package/dist/bscPlugin/completions/CompletionsProcessor.js +305 -3
  38. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  39. package/dist/bscPlugin/completions/CompletionsProcessor.spec.d.ts +1 -0
  40. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1369 -0
  41. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  42. package/dist/bscPlugin/hover/HoverProcessor.d.ts +9 -4
  43. package/dist/bscPlugin/hover/HoverProcessor.js +64 -67
  44. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  45. package/dist/bscPlugin/hover/HoverProcessor.spec.js +107 -4
  46. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  47. package/dist/bscPlugin/validation/BrsFileValidator.js +18 -15
  48. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  49. package/dist/bscPlugin/validation/ScopeValidator.d.ts +10 -1
  50. package/dist/bscPlugin/validation/ScopeValidator.js +85 -42
  51. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  52. package/dist/bscPlugin/validation/ScopeValidator.spec.js +307 -0
  53. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
  54. package/dist/cli.js +9 -1
  55. package/dist/cli.js.map +1 -1
  56. package/dist/deferred.d.ts +1 -1
  57. package/dist/deferred.js.map +1 -1
  58. package/dist/diagnosticUtils.d.ts +7 -2
  59. package/dist/diagnosticUtils.js +43 -15
  60. package/dist/diagnosticUtils.js.map +1 -1
  61. package/dist/files/BrsFile.Class.spec.js +10 -8
  62. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  63. package/dist/files/BrsFile.d.ts +3 -20
  64. package/dist/files/BrsFile.js +7 -355
  65. package/dist/files/BrsFile.js.map +1 -1
  66. package/dist/files/BrsFile.spec.js +2 -248
  67. package/dist/files/BrsFile.spec.js.map +1 -1
  68. package/dist/files/XmlFile.d.ts +1 -6
  69. package/dist/files/XmlFile.js +0 -13
  70. package/dist/files/XmlFile.js.map +1 -1
  71. package/dist/files/XmlFile.spec.js +0 -36
  72. package/dist/files/XmlFile.spec.js.map +1 -1
  73. package/dist/globalCallables.js +9 -1
  74. package/dist/globalCallables.js.map +1 -1
  75. package/dist/index.d.ts +2 -0
  76. package/dist/index.js +2 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/interfaces.d.ts +12 -1
  79. package/dist/interfaces.js.map +1 -1
  80. package/dist/lexer/Lexer.d.ts +12 -0
  81. package/dist/lexer/Lexer.js +27 -2
  82. package/dist/lexer/Lexer.js.map +1 -1
  83. package/dist/lexer/Lexer.spec.js +40 -0
  84. package/dist/lexer/Lexer.spec.js.map +1 -1
  85. package/dist/lexer/Token.d.ts +4 -0
  86. package/dist/lexer/Token.js.map +1 -1
  87. package/dist/lexer/TokenKind.d.ts +4 -0
  88. package/dist/lexer/TokenKind.js +10 -1
  89. package/dist/lexer/TokenKind.js.map +1 -1
  90. package/dist/parser/AstNode.d.ts +8 -1
  91. package/dist/parser/AstNode.js +16 -0
  92. package/dist/parser/AstNode.js.map +1 -1
  93. package/dist/parser/Expression.d.ts +16 -1
  94. package/dist/parser/Expression.js +43 -1
  95. package/dist/parser/Expression.js.map +1 -1
  96. package/dist/parser/Parser.d.ts +7 -0
  97. package/dist/parser/Parser.js +46 -6
  98. package/dist/parser/Parser.js.map +1 -1
  99. package/dist/parser/Parser.spec.js +327 -3
  100. package/dist/parser/Parser.spec.js.map +1 -1
  101. package/dist/parser/SGTypes.d.ts +1 -1
  102. package/dist/parser/Statement.d.ts +16 -3
  103. package/dist/parser/Statement.js +53 -15
  104. package/dist/parser/Statement.js.map +1 -1
  105. package/dist/parser/tests/Parser.spec.js +2 -1
  106. package/dist/parser/tests/Parser.spec.js.map +1 -1
  107. package/dist/parser/tests/controlFlow/For.spec.js +16 -8
  108. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  109. package/dist/parser/tests/controlFlow/ForEach.spec.js +12 -6
  110. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  111. package/dist/parser/tests/controlFlow/While.spec.js +8 -4
  112. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  113. package/dist/parser/tests/expression/Call.spec.js +4 -4
  114. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  115. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +13 -13
  116. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  117. package/dist/parser/tests/statement/ConstStatement.spec.js +0 -33
  118. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  119. package/dist/parser/tests/statement/Enum.spec.js +1 -257
  120. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  121. package/dist/parser/tests/statement/PrintStatement.spec.js +6 -3
  122. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  123. package/dist/parser/tests/statement/ReturnStatement.spec.js +5 -3
  124. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  125. package/dist/parser/tests/statement/Set.spec.js +26 -13
  126. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  127. package/dist/roku-types/data.json +158 -137
  128. package/dist/roku-types/index.d.ts +3 -38
  129. package/dist/types/ArrayType.d.ts +3 -1
  130. package/dist/types/ArrayType.js +42 -6
  131. package/dist/types/ArrayType.js.map +1 -1
  132. package/dist/types/ArrayType.spec.js +21 -2
  133. package/dist/types/ArrayType.spec.js.map +1 -1
  134. package/dist/types/BooleanType.js +5 -1
  135. package/dist/types/BooleanType.js.map +1 -1
  136. package/dist/types/BscType.d.ts +6 -2
  137. package/dist/types/BscType.js +20 -4
  138. package/dist/types/BscType.js.map +1 -1
  139. package/dist/types/BuiltInInterfaceAdder.d.ts +15 -0
  140. package/dist/types/BuiltInInterfaceAdder.js +93 -0
  141. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  142. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  143. package/dist/types/BuiltInInterfaceAdder.spec.js +109 -0
  144. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  145. package/dist/types/ClassType.d.ts +4 -0
  146. package/dist/types/ClassType.js +25 -1
  147. package/dist/types/ClassType.js.map +1 -1
  148. package/dist/types/DoubleType.d.ts +1 -1
  149. package/dist/types/DoubleType.js +5 -1
  150. package/dist/types/DoubleType.js.map +1 -1
  151. package/dist/types/DynamicType.js +2 -0
  152. package/dist/types/DynamicType.js.map +1 -1
  153. package/dist/types/EnumType.d.ts +1 -0
  154. package/dist/types/EnumType.js +6 -1
  155. package/dist/types/EnumType.js.map +1 -1
  156. package/dist/types/FloatType.d.ts +1 -1
  157. package/dist/types/FloatType.js +5 -1
  158. package/dist/types/FloatType.js.map +1 -1
  159. package/dist/types/FunctionType.js +5 -1
  160. package/dist/types/FunctionType.js.map +1 -1
  161. package/dist/types/IntegerType.d.ts +1 -1
  162. package/dist/types/IntegerType.js +5 -1
  163. package/dist/types/IntegerType.js.map +1 -1
  164. package/dist/types/InterfaceType.js +2 -1
  165. package/dist/types/InterfaceType.js.map +1 -1
  166. package/dist/types/InvalidType.d.ts +1 -1
  167. package/dist/types/InvalidType.js +5 -1
  168. package/dist/types/InvalidType.js.map +1 -1
  169. package/dist/types/LongIntegerType.d.ts +1 -1
  170. package/dist/types/LongIntegerType.js +5 -1
  171. package/dist/types/LongIntegerType.js.map +1 -1
  172. package/dist/types/ObjectType.js +2 -0
  173. package/dist/types/ObjectType.js.map +1 -1
  174. package/dist/types/ReferenceType.d.ts +12 -0
  175. package/dist/types/ReferenceType.js +69 -12
  176. package/dist/types/ReferenceType.js.map +1 -1
  177. package/dist/types/ReferenceType.spec.js +15 -0
  178. package/dist/types/ReferenceType.spec.js.map +1 -1
  179. package/dist/types/StringType.d.ts +1 -1
  180. package/dist/types/StringType.js +4 -0
  181. package/dist/types/StringType.js.map +1 -1
  182. package/dist/types/TypedFunctionType.js +9 -2
  183. package/dist/types/TypedFunctionType.js.map +1 -1
  184. package/dist/types/UnionType.d.ts +2 -0
  185. package/dist/types/UnionType.js +22 -1
  186. package/dist/types/UnionType.js.map +1 -1
  187. package/dist/types/UnionType.spec.js +43 -17
  188. package/dist/types/UnionType.spec.js.map +1 -1
  189. package/dist/types/VoidType.d.ts +1 -1
  190. package/dist/types/VoidType.js +5 -1
  191. package/dist/types/VoidType.js.map +1 -1
  192. package/dist/types/helpers.d.ts +1 -0
  193. package/dist/types/helpers.js +18 -3
  194. package/dist/types/helpers.js.map +1 -1
  195. package/dist/util.d.ts +10 -2
  196. package/dist/util.js +82 -6
  197. package/dist/util.js.map +1 -1
  198. package/package.json +2 -2
@@ -404,7 +404,7 @@ export declare const nodes: {
404
404
  name: string;
405
405
  url: string;
406
406
  };
407
- "key defintion file": {
407
+ "key definition file": {
408
408
  description: string;
409
409
  events: any[];
410
410
  fields: any[];
@@ -862,25 +862,6 @@ export declare const nodes: {
862
862
  name: string;
863
863
  url: string;
864
864
  };
865
- rsgpalette: {
866
- availableSince: string;
867
- description: string;
868
- events: any[];
869
- extends: {
870
- name: string;
871
- url: string;
872
- };
873
- fields: {
874
- accessPermission: string;
875
- default: string;
876
- description: string;
877
- name: string;
878
- type: string;
879
- }[];
880
- interfaces: any[];
881
- name: string;
882
- url: string;
883
- };
884
865
  scene: {
885
866
  description: string;
886
867
  events: any[];
@@ -1557,10 +1538,6 @@ export declare const nodes: {
1557
1538
  zoomrowlist: {
1558
1539
  description: string;
1559
1540
  events: any[];
1560
- extends: {
1561
- name: string;
1562
- url: string;
1563
- };
1564
1541
  fields: any[];
1565
1542
  interfaces: any[];
1566
1543
  name: string;
@@ -1611,7 +1588,6 @@ export declare const components: {
1611
1588
  roarray: {
1612
1589
  constructors: {
1613
1590
  params: {
1614
- default: any;
1615
1591
  isRequired: boolean;
1616
1592
  name: string;
1617
1593
  type: string;
@@ -2214,22 +2190,14 @@ export declare const components: {
2214
2190
  url: string;
2215
2191
  };
2216
2192
  roregistrysection: {
2217
- constructors: ({
2218
- params: {
2219
- default: any;
2220
- isRequired: boolean;
2221
- name: string;
2222
- type: string;
2223
- }[];
2224
- returnType: string;
2225
- } | {
2193
+ constructors: {
2226
2194
  params: {
2227
2195
  isRequired: boolean;
2228
2196
  name: string;
2229
2197
  type: string;
2230
2198
  }[];
2231
2199
  returnType: string;
2232
- })[];
2200
+ }[];
2233
2201
  description: string;
2234
2202
  events: any[];
2235
2203
  interfaces: {
@@ -3453,16 +3421,13 @@ export declare const interfaces: {
3453
3421
  url: string;
3454
3422
  }[];
3455
3423
  methods: {
3456
- description: string;
3457
3424
  name: string;
3458
3425
  params: {
3459
3426
  default: any;
3460
- description: string;
3461
3427
  isRequired: boolean;
3462
3428
  name: string;
3463
3429
  type: string;
3464
3430
  }[];
3465
- returnDescription: string;
3466
3431
  returnType: string;
3467
3432
  }[];
3468
3433
  name: string;
@@ -4,8 +4,10 @@ export declare class ArrayType extends BscType {
4
4
  constructor(...innerTypes: BscType[]);
5
5
  readonly kind = BscTypeKind.ArrayType;
6
6
  innerTypes: BscType[];
7
- isTypeCompatible(targetType: BscType): boolean;
7
+ get defaultType(): BscType;
8
+ isTypeCompatible(targetType: BscType): any;
8
9
  toString(): string;
9
10
  toTypeString(): string;
10
11
  isEqual(targetType: BscType): boolean;
12
+ addBuiltInInterfaces(): void;
11
13
  }
@@ -4,6 +4,11 @@ exports.ArrayType = void 0;
4
4
  const reflection_1 = require("../astUtils/reflection");
5
5
  const BscType_1 = require("./BscType");
6
6
  const BscTypeKind_1 = require("./BscTypeKind");
7
+ const BuiltInInterfaceAdder_1 = require("./BuiltInInterfaceAdder");
8
+ const DynamicType_1 = require("./DynamicType");
9
+ const IntegerType_1 = require("./IntegerType");
10
+ const UnionType_1 = require("./UnionType");
11
+ const helpers_1 = require("./helpers");
7
12
  class ArrayType extends BscType_1.BscType {
8
13
  constructor(...innerTypes) {
9
14
  super();
@@ -11,6 +16,16 @@ class ArrayType extends BscType_1.BscType {
11
16
  this.innerTypes = [];
12
17
  this.innerTypes = innerTypes;
13
18
  }
19
+ get defaultType() {
20
+ var _a, _b;
21
+ if (((_a = this.innerTypes) === null || _a === void 0 ? void 0 : _a.length) === 0) {
22
+ return DynamicType_1.DynamicType.instance;
23
+ }
24
+ else if (((_b = this.innerTypes) === null || _b === void 0 ? void 0 : _b.length) === 1) {
25
+ return this.innerTypes[0];
26
+ }
27
+ return (0, helpers_1.getUniqueType)(this.innerTypes, UnionType_1.unionTypeFactory);
28
+ }
14
29
  isTypeCompatible(targetType) {
15
30
  if ((0, reflection_1.isDynamicType)(targetType)) {
16
31
  return true;
@@ -18,22 +33,21 @@ class ArrayType extends BscType_1.BscType {
18
33
  else if ((0, reflection_1.isObjectType)(targetType)) {
19
34
  return true;
20
35
  }
21
- else if (!(0, reflection_1.isArrayType)(targetType)) {
22
- return false;
23
- }
24
- if (this.isEqual(targetType)) {
36
+ else if ((0, helpers_1.isUnionTypeCompatible)(this, targetType)) {
25
37
  return true;
26
38
  }
39
+ else if ((0, reflection_1.isArrayType)(targetType)) {
40
+ return this.defaultType.isTypeCompatible(targetType.defaultType);
41
+ }
27
42
  return false;
28
43
  }
29
44
  toString() {
30
- return `Array<${this.innerTypes.map((x) => x.toString()).join(' | ')}>`;
45
+ return `Array<${this.defaultType.toString()}>`;
31
46
  }
32
47
  toTypeString() {
33
48
  return 'object';
34
49
  }
35
50
  isEqual(targetType) {
36
- //TODO: figure out array type equality later
37
51
  if ((0, reflection_1.isArrayType)(targetType)) {
38
52
  if (targetType.innerTypes.length !== this.innerTypes.length) {
39
53
  return false;
@@ -47,6 +61,28 @@ class ArrayType extends BscType_1.BscType {
47
61
  }
48
62
  return false;
49
63
  }
64
+ addBuiltInInterfaces() {
65
+ if (!this.hasAddedBuiltInInterfaces) {
66
+ const overrideMap = new Map();
67
+ const defaultType = this.defaultType;
68
+ overrideMap
69
+ // ifArray
70
+ .set('peek', { returnType: defaultType })
71
+ .set('pop', { returnType: defaultType })
72
+ .set('push', { parameterTypes: [defaultType] })
73
+ .set('shift', { returnType: defaultType })
74
+ .set('unshift', { parameterTypes: [defaultType] })
75
+ .set('append', { parameterTypes: [this] })
76
+ // ifArrayGet
77
+ .set('get', { returnType: defaultType })
78
+ // ifArraySet
79
+ .set('get', { parameterTypes: [IntegerType_1.IntegerType.instance, defaultType] })
80
+ //ifEnum
81
+ .set('next', { returnType: defaultType });
82
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(this, overrideMap);
83
+ }
84
+ this.hasAddedBuiltInInterfaces = true;
85
+ }
50
86
  }
51
87
  exports.ArrayType = ArrayType;
52
88
  //# sourceMappingURL=ArrayType.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayType.js","sourceRoot":"","sources":["../../src/types/ArrayType.ts"],"names":[],"mappings":";;;AAAA,uDAAkF;AAClF,uCAAoC;AACpC,+CAA4C;AAE5C,MAAa,SAAU,SAAQ,iBAAO;IAClC,YAAY,GAAG,UAAqB;QAChC,KAAK,EAAE,CAAC;QAII,SAAI,GAAG,yBAAW,CAAC,SAAS,CAAC;QAEtC,eAAU,GAAc,EAAE,CAAC;QAL9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAMM,gBAAgB,CAAC,UAAmB;QAEvC,IAAI,IAAA,0BAAa,EAAC,UAAU,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,IAAA,yBAAY,EAAC,UAAU,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,CAAC,IAAA,wBAAW,EAAC,UAAU,CAAC,EAAE;YACjC,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,QAAQ;QACX,OAAO,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC5E,CAAC;IAEM,YAAY;QACf,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,OAAO,CAAC,UAAmB;QAC9B,4CAA4C;QAC5C,IAAI,IAAA,wBAAW,EAAC,UAAU,CAAC,EAAE;YACzB,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gBACzD,OAAO,KAAK,CAAC;aAChB;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;oBACvD,OAAO,KAAK,CAAC;iBAChB;aACJ;YACD,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAhDD,8BAgDC"}
1
+ {"version":3,"file":"ArrayType.js","sourceRoot":"","sources":["../../src/types/ArrayType.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,10 @@ const ArrayType_1 = require("./ArrayType");
5
5
  const DynamicType_1 = require("./DynamicType");
6
6
  const BooleanType_1 = require("./BooleanType");
7
7
  const StringType_1 = require("./StringType");
8
+ const SymbolTable_1 = require("../SymbolTable");
9
+ const TypedFunctionType_1 = require("./TypedFunctionType");
10
+ const testHelpers_spec_1 = require("../testHelpers.spec");
11
+ const IntegerType_1 = require("./IntegerType");
8
12
  describe('ArrayType', () => {
9
13
  it('is equivalent to array types', () => {
10
14
  (0, chai_config_spec_1.expect)(new ArrayType_1.ArrayType().isTypeCompatible(new ArrayType_1.ArrayType())).to.be.true;
@@ -22,8 +26,23 @@ describe('ArrayType', () => {
22
26
  (0, chai_config_spec_1.expect)(new ArrayType_1.ArrayType().isTypeCompatible(new ArrayType_1.ArrayType())).to.be.true;
23
27
  });
24
28
  describe('toString', () => {
25
- it('prints inner types', () => {
26
- (0, chai_config_spec_1.expect)(new ArrayType_1.ArrayType(new BooleanType_1.BooleanType(), new StringType_1.StringType()).toString()).to.eql('Array<boolean | string>');
29
+ it('prints default type', () => {
30
+ (0, chai_config_spec_1.expect)(new ArrayType_1.ArrayType(new BooleanType_1.BooleanType(), new StringType_1.StringType()).toString()).to.eql('Array<boolean or string>');
31
+ });
32
+ });
33
+ describe('built in interfaces', () => {
34
+ it('adds built in interfaces', () => {
35
+ const myArray = new ArrayType_1.ArrayType();
36
+ (0, testHelpers_spec_1.expectTypeToBe)(myArray.getMemberType('push', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
37
+ (0, testHelpers_spec_1.expectTypeToBe)(myArray.getMemberType('sort', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
38
+ (0, testHelpers_spec_1.expectTypeToBe)(myArray.getMemberType('next', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
39
+ });
40
+ it('correctly sets types for typed array', () => {
41
+ const myArray = new ArrayType_1.ArrayType(IntegerType_1.IntegerType.instance);
42
+ const popType = myArray.getMemberType('pop', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
43
+ (0, testHelpers_spec_1.expectTypeToBe)(popType.returnType, IntegerType_1.IntegerType);
44
+ const pushType = myArray.getMemberType('push', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
45
+ (0, testHelpers_spec_1.expectTypeToBe)(pushType.params[0].type, IntegerType_1.IntegerType);
27
46
  });
28
47
  });
29
48
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayType.spec.js","sourceRoot":"","sources":["../../src/types/ArrayType.spec.ts"],"names":[],"mappings":";;AAAA,0DAA6C;AAE7C,2CAAwC;AACxC,+CAA4C;AAC5C,+CAA4C;AAC5C,6CAA0C;AAE1C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,IAAA,yBAAM,EAAC,IAAI,qBAAS,EAAE,CAAC,gBAAgB,CAAC,IAAI,qBAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACrE,IAAA,yBAAM,EAAC,IAAI,qBAAS,EAAE,CAAC,gBAAgB,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,IAAA,yBAAM,EAAC,IAAI,qBAAS,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,qBAAS,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvG,IAAA,yBAAM,EAAC,IAAI,qBAAS,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,qBAAS,CAAC,IAAI,uBAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC3G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,IAAA,yBAAM,EAAC,IAAI,qBAAS,EAAE,CAAC,OAAO,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC9B,IAAA,yBAAM,EAAC,IAAI,qBAAS,EAAE,CAAC,gBAAgB,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACxE,IAAA,yBAAM,EAAC,IAAI,qBAAS,EAAE,CAAC,gBAAgB,CAAC,IAAI,qBAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC1B,IAAA,yBAAM,EAAC,IAAI,qBAAS,CAAC,IAAI,yBAAW,EAAE,EAAE,IAAI,uBAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAC5G,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ArrayType.spec.js","sourceRoot":"","sources":["../../src/types/ArrayType.spec.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ exports.BooleanType = void 0;
4
4
  const reflection_1 = require("../astUtils/reflection");
5
5
  const BscType_1 = require("./BscType");
6
6
  const BscTypeKind_1 = require("./BscTypeKind");
7
+ const helpers_1 = require("./helpers");
8
+ const BuiltInInterfaceAdder_1 = require("./BuiltInInterfaceAdder");
7
9
  class BooleanType extends BscType_1.BscType {
8
10
  constructor(typeText) {
9
11
  super();
@@ -13,7 +15,8 @@ class BooleanType extends BscType_1.BscType {
13
15
  isTypeCompatible(targetType) {
14
16
  return ((0, reflection_1.isBooleanType)(targetType) ||
15
17
  (0, reflection_1.isDynamicType)(targetType) ||
16
- (0, reflection_1.isObjectType)(targetType));
18
+ (0, reflection_1.isObjectType)(targetType) ||
19
+ (0, helpers_1.isUnionTypeCompatible)(this, targetType));
17
20
  }
18
21
  toString() {
19
22
  var _a;
@@ -28,4 +31,5 @@ class BooleanType extends BscType_1.BscType {
28
31
  }
29
32
  exports.BooleanType = BooleanType;
30
33
  BooleanType.instance = new BooleanType('boolean');
34
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.primitiveTypeInstanceCache.set('boolean', BooleanType.instance);
31
35
  //# sourceMappingURL=BooleanType.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BooleanType.js","sourceRoot":"","sources":["../../src/types/BooleanType.ts"],"names":[],"mappings":";;;AAAA,uDAAoF;AACpF,uCAAoC;AACpC,+CAA4C;AAE5C,MAAa,WAAY,SAAQ,iBAAO;IACpC,YACW,QAAiB;QAExB,KAAK,EAAE,CAAC;QAFD,aAAQ,GAAR,QAAQ,CAAS;QAKZ,SAAI,GAAG,yBAAW,CAAC,WAAW,CAAC;IAF/C,CAAC;IAMM,gBAAgB,CAAC,UAAmB;QACvC,OAAO,CACH,IAAA,0BAAa,EAAC,UAAU,CAAC;YACzB,IAAA,0BAAa,EAAC,UAAU,CAAC;YACzB,IAAA,yBAAY,EAAC,UAAU,CAAC,CAC3B,CAAC;IACN,CAAC;IAEM,QAAQ;;QACX,OAAO,MAAA,IAAI,CAAC,QAAQ,mCAAI,SAAS,CAAC;IACtC,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,UAAmB;QACvB,OAAO,IAAA,0BAAa,EAAC,UAAU,CAAC,CAAC;IACrC,CAAC;;AA7BL,kCA8BC;AArBiB,oBAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"BooleanType.js","sourceRoot":"","sources":["../../src/types/BooleanType.ts"],"names":[],"mappings":";;;AAAA,uDAAoF;AACpF,uCAAoC;AACpC,+CAA4C;AAC5C,uCAAkD;AAClD,mEAAgE;AAEhE,MAAa,WAAY,SAAQ,iBAAO;IACpC,YACW,QAAiB;QAExB,KAAK,EAAE,CAAC;QAFD,aAAQ,GAAR,QAAQ,CAAS;QAKZ,SAAI,GAAG,yBAAW,CAAC,WAAW,CAAC;IAF/C,CAAC;IAMM,gBAAgB,CAAC,UAAmB;QACvC,OAAO,CACH,IAAA,0BAAa,EAAC,UAAU,CAAC;YACzB,IAAA,0BAAa,EAAC,UAAU,CAAC;YACzB,IAAA,yBAAY,EAAC,UAAU,CAAC;YACxB,IAAA,+BAAqB,EAAC,IAAI,EAAE,UAAU,CAAC,CAC1C,CAAC;IACN,CAAC;IAEM,QAAQ;;QACX,OAAO,MAAA,IAAI,CAAC,QAAQ,mCAAI,SAAS,CAAC;IACtC,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,UAAmB;QACvB,OAAO,IAAA,0BAAa,EAAC,UAAU,CAAC,CAAC;IACrC,CAAC;;AA9BL,kCA+BC;AAtBiB,oBAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;AAwBxD,6CAAqB,CAAC,0BAA0B,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC"}
@@ -1,15 +1,18 @@
1
1
  import type { GetSymbolTypeOptions, SymbolTableProvider } from '../SymbolTable';
2
- import type { Range } from 'vscode-languageserver';
3
2
  import type { SymbolTypeFlag } from '../SymbolTable';
4
3
  import { SymbolTable } from '../SymbolTable';
4
+ import type { ExtraSymbolData } from '../interfaces';
5
5
  export declare abstract class BscType {
6
6
  readonly memberTable: SymbolTable;
7
7
  protected __identifier: string;
8
+ protected hasAddedBuiltInInterfaces: boolean;
8
9
  constructor(name?: string);
9
10
  pushMemberProvider(provider: SymbolTableProvider): void;
10
11
  popMemberProvider(): void;
11
- addMember(name: string, range: Range, type: BscType, flags: SymbolTypeFlag): void;
12
+ getBuiltInMemberTable(): SymbolTable;
13
+ addMember(name: string, data: ExtraSymbolData, type: BscType, flags: SymbolTypeFlag): void;
12
14
  getMemberType(name: string, options: GetSymbolTypeOptions): BscType;
15
+ getMemberTable(): SymbolTable;
13
16
  isResolvable(): boolean;
14
17
  /**
15
18
  * Check if this type can be assigned to the target type
@@ -26,4 +29,5 @@ export declare abstract class BscType {
26
29
  toTypeString(): string;
27
30
  isEqual(targetType: BscType): boolean;
28
31
  checkCompatibilityBasedOnMembers(targetType: BscType, flags: SymbolTypeFlag): boolean;
32
+ addBuiltInInterfaces(): void;
29
33
  }
@@ -2,8 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BscType = void 0;
4
4
  const SymbolTable_1 = require("../SymbolTable");
5
+ const BuiltInInterfaceAdder_1 = require("./BuiltInInterfaceAdder");
5
6
  class BscType {
6
7
  constructor(name = '') {
8
+ this.hasAddedBuiltInInterfaces = false;
7
9
  this.__identifier = `${this.constructor.name}${name ? ': ' + name : ''}`;
8
10
  this.memberTable = new SymbolTable_1.SymbolTable(this.__identifier);
9
11
  }
@@ -13,12 +15,19 @@ class BscType {
13
15
  popMemberProvider() {
14
16
  this.memberTable.popParentProvider();
15
17
  }
16
- addMember(name, range, type, flags) {
17
- this.memberTable.addSymbol(name, range, type, flags);
18
+ getBuiltInMemberTable() {
19
+ return this.memberTable;
20
+ }
21
+ addMember(name, data, type, flags) {
22
+ this.memberTable.addSymbol(name, data, type, flags);
18
23
  }
19
24
  getMemberType(name, options) {
25
+ this.addBuiltInInterfaces();
20
26
  return this.memberTable.getSymbolType(name, options);
21
27
  }
28
+ getMemberTable() {
29
+ return this.memberTable;
30
+ }
22
31
  isResolvable() {
23
32
  return true;
24
33
  }
@@ -47,11 +56,12 @@ class BscType {
47
56
  throw new Error('Method not implemented.');
48
57
  }
49
58
  checkCompatibilityBasedOnMembers(targetType, flags) {
50
- var _a;
59
+ var _a, _b;
51
60
  let isSuperSet = true;
52
61
  const targetSymbols = (_a = targetType.memberTable) === null || _a === void 0 ? void 0 : _a.getAllSymbols(flags);
53
62
  for (const targetSymbol of targetSymbols) {
54
- const myTypesOfTargetSymbol = this.memberTable.getSymbolTypes(targetSymbol.name, flags);
63
+ const myTypesOfTargetSymbol = (_b = this.memberTable
64
+ .getSymbolTypes(targetSymbol.name, { flags: flags })) === null || _b === void 0 ? void 0 : _b.map(symbol => symbol.type);
55
65
  isSuperSet = isSuperSet && myTypesOfTargetSymbol && myTypesOfTargetSymbol.length > 0 &&
56
66
  myTypesOfTargetSymbol.reduce((acc, myTypeOfTarget) => {
57
67
  return acc && myTypeOfTarget.isTypeCompatible(targetSymbol.type);
@@ -62,6 +72,12 @@ class BscType {
62
72
  }
63
73
  return isSuperSet;
64
74
  }
75
+ addBuiltInInterfaces() {
76
+ if (!this.hasAddedBuiltInInterfaces) {
77
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(this);
78
+ }
79
+ this.hasAddedBuiltInInterfaces = true;
80
+ }
65
81
  }
66
82
  exports.BscType = BscType;
67
83
  //# sourceMappingURL=BscType.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BscType.js","sourceRoot":"","sources":["../../src/types/BscType.ts"],"names":[],"mappings":";;;AAGA,gDAA6C;AAE7C,MAAsB,OAAO;IAKzB,YAAY,IAAI,GAAG,EAAE;QACjB,IAAI,CAAC,YAAY,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACzE,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED,kBAAkB,CAAC,QAA6B;QAC5C,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,iBAAiB;QACb,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;IACzC,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,KAAY,EAAE,IAAa,EAAE,KAAqB;QACtE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,OAA6B;QACrD,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,UAAmB;QAC9B,OAAO,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,UAAmB;QAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACD,QAAQ;QACJ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACD,YAAY;QACR,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,UAAmB;QACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAGD,gCAAgC,CAAC,UAAmB,EAAE,KAAqB;;QACvE,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,MAAM,aAAa,GAAG,MAAA,UAAU,CAAC,WAAW,0CAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QACnE,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;YACtC,MAAM,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxF,UAAU,GAAG,UAAU,IAAI,qBAAqB,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC;gBAChF,qBAAqB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE;oBACjD,OAAO,GAAG,IAAI,cAAc,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACrE,CAAC,EAAE,IAAI,CAAC,CAAC;YACb,IAAI,CAAC,UAAU,EAAE;gBACb,OAAO,KAAK,CAAC;aAChB;SACJ;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ;AAzED,0BAyEC"}
1
+ {"version":3,"file":"BscType.js","sourceRoot":"","sources":["../../src/types/BscType.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Cache } from '../Cache';
2
+ import type { TypedFunctionType } from './TypedFunctionType';
3
+ import type { BscType } from './BscType';
4
+ export interface BuiltInInterfaceOverride {
5
+ type?: BscType;
6
+ parameterTypes?: BscType[];
7
+ returnType?: BscType;
8
+ }
9
+ export declare class BuiltInInterfaceAdder {
10
+ static readonly primitiveTypeInstanceCache: Cache<string, BscType>;
11
+ static typedFunctionFactory: (type: BscType) => TypedFunctionType;
12
+ static addBuiltInInterfacesToType(thisType: BscType, overrides?: Map<string, BuiltInInterfaceOverride>): void;
13
+ private static getPrimitiveType;
14
+ static getMatchingRokuComponent(theType: BscType): any;
15
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BuiltInInterfaceAdder = void 0;
4
+ const roku_types_1 = require("../roku-types");
5
+ const Cache_1 = require("../Cache");
6
+ const SymbolTable_1 = require("../SymbolTable");
7
+ const reflection_1 = require("../astUtils/reflection");
8
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
9
+ class BuiltInInterfaceAdder {
10
+ static addBuiltInInterfacesToType(thisType, overrides) {
11
+ var _a, _b, _c;
12
+ const componentName = this.getMatchingRokuComponent(thisType);
13
+ if (!componentName) {
14
+ // No component matches the given type
15
+ return;
16
+ }
17
+ const memberTable = thisType.getBuiltInMemberTable();
18
+ if (!memberTable) {
19
+ // no memberTable to add to
20
+ // this could be because it's a class that has a parent
21
+ // the original ancestor should get the built ins
22
+ return;
23
+ }
24
+ const builtInComponent = roku_types_1.components[componentName.toLowerCase()];
25
+ if (!builtInComponent) {
26
+ throw new Error(`Unknown Roku component '${componentName}'`);
27
+ }
28
+ if (!this.typedFunctionFactory) {
29
+ throw new Error(`Unable to build typed functions - no typed function factory`);
30
+ }
31
+ for (const iface of builtInComponent.interfaces) {
32
+ const lowerIfaceName = iface.name.toLowerCase();
33
+ for (const method of roku_types_1.interfaces[lowerIfaceName].methods) {
34
+ const override = overrides === null || overrides === void 0 ? void 0 : overrides.get(method.name.toLowerCase());
35
+ const returnType = (_a = override === null || override === void 0 ? void 0 : override.returnType) !== null && _a !== void 0 ? _a : this.getPrimitiveType(method.returnType);
36
+ const methodFuncType = this.typedFunctionFactory(returnType);
37
+ methodFuncType.name = method.name;
38
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
39
+ for (let i = 0; i < method.params.length; i++) {
40
+ const param = method.params[i];
41
+ const paramType = (_c = (_b = override === null || override === void 0 ? void 0 : override.parameterTypes) === null || _b === void 0 ? void 0 : _b[i]) !== null && _c !== void 0 ? _c : this.getPrimitiveType(param.type);
42
+ methodFuncType.addParameter(param.name, paramType, !param.isRequired);
43
+ }
44
+ memberTable.addSymbol(method.name, { description: method.description, completionPriority: 1 }, methodFuncType, SymbolTable_1.SymbolTypeFlag.runtime);
45
+ }
46
+ }
47
+ }
48
+ static getPrimitiveType(typeName) {
49
+ const returnType = this.primitiveTypeInstanceCache.get(typeName.toLowerCase());
50
+ if (!returnType) {
51
+ throw new Error(`Unable to find type instance '${typeName}'`);
52
+ }
53
+ return returnType;
54
+ }
55
+ static getMatchingRokuComponent(theType) {
56
+ if ((0, reflection_1.isStringType)(theType)) {
57
+ return 'roString';
58
+ }
59
+ else if ((0, reflection_1.isIntegerType)(theType)) {
60
+ return 'roInt';
61
+ }
62
+ else if ((0, reflection_1.isBooleanType)(theType)) {
63
+ return 'roBoolean';
64
+ }
65
+ else if ((0, reflection_1.isFloatType)(theType)) {
66
+ return 'roFloat';
67
+ }
68
+ else if ((0, reflection_1.isDoubleType)(theType)) {
69
+ return 'roDouble';
70
+ }
71
+ else if ((0, reflection_1.isLongIntegerType)(theType)) {
72
+ return 'roLongInteger';
73
+ }
74
+ else if ((0, reflection_1.isInvalidType)(theType)) {
75
+ return 'roInvalid';
76
+ }
77
+ else if ((0, reflection_1.isCallableType)(theType)) {
78
+ return 'roFunction';
79
+ }
80
+ else if ((0, reflection_1.isClassType)(theType)) {
81
+ return 'roAssociativeArray';
82
+ }
83
+ else if ((0, reflection_1.isArrayType)(theType)) {
84
+ return 'roArray';
85
+ }
86
+ else if ((0, reflection_1.isEnumMemberType)(theType)) {
87
+ return this.getMatchingRokuComponent(theType.underlyingType);
88
+ }
89
+ }
90
+ }
91
+ exports.BuiltInInterfaceAdder = BuiltInInterfaceAdder;
92
+ BuiltInInterfaceAdder.primitiveTypeInstanceCache = new Cache_1.Cache();
93
+ //# sourceMappingURL=BuiltInInterfaceAdder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuiltInInterfaceAdder.js","sourceRoot":"","sources":["../../src/types/BuiltInInterfaceAdder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const BuiltInInterfaceAdder_1 = require("./BuiltInInterfaceAdder");
4
+ const StringType_1 = require("./StringType");
5
+ const testHelpers_spec_1 = require("../testHelpers.spec");
6
+ const IntegerType_1 = require("./IntegerType");
7
+ const SymbolTable_1 = require("../SymbolTable");
8
+ const TypedFunctionType_1 = require("./TypedFunctionType");
9
+ const BooleanType_1 = require("./BooleanType");
10
+ const FunctionType_1 = require("./FunctionType");
11
+ const DoubleType_1 = require("./DoubleType");
12
+ const DynamicType_1 = require("./DynamicType");
13
+ const ClassType_1 = require("./ClassType");
14
+ const ArrayType_1 = require("./ArrayType");
15
+ const chai_1 = require("chai");
16
+ const EnumType_1 = require("./EnumType");
17
+ describe('BuiltInInterfaceAdder', () => {
18
+ it('should add members to StringType', () => {
19
+ const myType = new StringType_1.StringType();
20
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
21
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('trim', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
22
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('split', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
23
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getString', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
24
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('replace', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
25
+ });
26
+ it('should have correct types for string members', () => {
27
+ const myType = new StringType_1.StringType();
28
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
29
+ const leftType = myType.getMemberType('left', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
30
+ (0, testHelpers_spec_1.expectTypeToBe)(leftType, TypedFunctionType_1.TypedFunctionType);
31
+ const leftFuncType = leftType;
32
+ (0, chai_1.expect)(leftFuncType.params.length).to.equal(1);
33
+ (0, testHelpers_spec_1.expectTypeToBe)(leftFuncType.params[0].type, IntegerType_1.IntegerType);
34
+ (0, testHelpers_spec_1.expectTypeToBe)(leftFuncType.returnType, StringType_1.StringType);
35
+ });
36
+ it('should add members to IntegerType', () => {
37
+ const myType = new IntegerType_1.IntegerType();
38
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
39
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('toStr', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
40
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getInt', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
41
+ });
42
+ it('should add members to BooleanType', () => {
43
+ const myType = new BooleanType_1.BooleanType();
44
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
45
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('toStr', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
46
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getBoolean', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
47
+ });
48
+ it('should add members to DoubleType', () => {
49
+ const myType = new DoubleType_1.DoubleType();
50
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
51
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('toStr', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
52
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getDouble', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
53
+ });
54
+ it('should add members to FunctionType', () => {
55
+ const myType = new FunctionType_1.FunctionType();
56
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
57
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('toStr', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
58
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getSub', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
59
+ });
60
+ it('should add members to TypedFunctionType', () => {
61
+ const myType = new TypedFunctionType_1.TypedFunctionType(DynamicType_1.DynamicType.instance);
62
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
63
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('toStr', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
64
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getSub', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
65
+ });
66
+ it('should add members to ArrayType', () => {
67
+ const myType = new ArrayType_1.ArrayType();
68
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
69
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('push', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
70
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getEntry', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
71
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('join', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
72
+ });
73
+ it('should add members to ClassType', () => {
74
+ const myType = new ClassType_1.ClassType('Klass');
75
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
76
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('clear', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
77
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('lookUp', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
78
+ });
79
+ it('should allow classes to override built in members', () => {
80
+ const myType = new ClassType_1.ClassType('Klass');
81
+ myType.addMember('clear', null, new BooleanType_1.BooleanType(), SymbolTable_1.SymbolTypeFlag.runtime);
82
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
83
+ (0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('clear', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), BooleanType_1.BooleanType);
84
+ });
85
+ it('should only add built ins to original ancestor', () => {
86
+ const sup = new ClassType_1.ClassType('SuperKlass');
87
+ const sub = new ClassType_1.ClassType('Klass', sup);
88
+ sup.addMember('clear', null, new BooleanType_1.BooleanType(), SymbolTable_1.SymbolTypeFlag.runtime);
89
+ BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(sub);
90
+ (0, testHelpers_spec_1.expectTypeToBe)(sub.getMemberType('clear', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), BooleanType_1.BooleanType);
91
+ });
92
+ it('should respect overrides', () => {
93
+ const myArray = new ArrayType_1.ArrayType(IntegerType_1.IntegerType.instance);
94
+ const popType = myArray.getMemberType('pop', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
95
+ (0, testHelpers_spec_1.expectTypeToBe)(popType.returnType, IntegerType_1.IntegerType);
96
+ const pushType = myArray.getMemberType('push', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
97
+ (0, testHelpers_spec_1.expectTypeToBe)(pushType.params[0].type, IntegerType_1.IntegerType);
98
+ });
99
+ it('works with enums', () => {
100
+ const myEnum = new EnumType_1.EnumType('myEnum', StringType_1.StringType.instance);
101
+ const myEnumMember = new EnumType_1.EnumMemberType('myEnum', 'member', StringType_1.StringType.instance);
102
+ myEnum.addMember('member', {}, myEnumMember, SymbolTable_1.SymbolTypeFlag.runtime);
103
+ const enumTrim = myEnum.getMemberType('trim', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
104
+ (0, chai_1.expect)(enumTrim).to.be.undefined;
105
+ const memberTrim = myEnumMember.getMemberType('trim', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
106
+ (0, testHelpers_spec_1.expectTypeToBe)(memberTrim, TypedFunctionType_1.TypedFunctionType);
107
+ });
108
+ });
109
+ //# sourceMappingURL=BuiltInInterfaceAdder.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuiltInInterfaceAdder.spec.js","sourceRoot":"","sources":["../../src/types/BuiltInInterfaceAdder.spec.ts"],"names":[],"mappings":"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"}