@ts-for-gir/lib 4.0.0-beta.4 → 4.0.0-beta.40

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 (541) hide show
  1. package/README.md +13 -1
  2. package/package.json +17 -31
  3. package/src/constants.ts +152 -0
  4. package/src/dependency-manager.ts +445 -0
  5. package/src/formatters/default.ts +7 -0
  6. package/src/formatters/formatter.ts +3 -0
  7. package/src/formatters/index.ts +3 -0
  8. package/src/formatters/json.ts +7 -0
  9. package/src/generators/generator.ts +65 -0
  10. package/src/generators/index.ts +2 -0
  11. package/src/generics/clutter.ts +80 -0
  12. package/src/generics/generify.ts +101 -0
  13. package/src/generics/gio.ts +91 -0
  14. package/src/generics/glib.ts +31 -0
  15. package/src/generics/gtk.ts +99 -0
  16. package/src/generics/meta.ts +50 -0
  17. package/src/generics/st.ts +206 -0
  18. package/src/generics/visitor.ts +484 -0
  19. package/src/gir/alias.ts +73 -0
  20. package/src/gir/callback.ts +79 -0
  21. package/src/gir/const.ts +73 -0
  22. package/src/gir/constructor.ts +91 -0
  23. package/src/gir/data.ts +12 -0
  24. package/src/gir/dependency-resolver.ts +81 -0
  25. package/src/gir/direct-allocation-constructor.ts +65 -0
  26. package/src/gir/enum-member.ts +51 -0
  27. package/src/gir/enum.ts +129 -0
  28. package/src/gir/error.ts +89 -0
  29. package/src/gir/function.ts +296 -0
  30. package/src/gir/generics.ts +66 -0
  31. package/src/gir/gir-complex-record.ts +7 -0
  32. package/src/gir/index.ts +25 -0
  33. package/src/gir/introspected-base.ts +104 -0
  34. package/src/gir/introspected-class-member.ts +15 -0
  35. package/src/gir/introspected-classes.ts +1521 -0
  36. package/src/gir/introspected-namespace-member.ts +24 -0
  37. package/src/gir/namespace.ts +76 -0
  38. package/src/gir/parameter.ts +199 -0
  39. package/src/gir/promisify.ts +209 -0
  40. package/src/gir/property.ts +203 -0
  41. package/src/gir/record.ts +488 -0
  42. package/src/gir/registry.ts +184 -0
  43. package/src/gir/signal.ts +246 -0
  44. package/src/gir-module.ts +759 -0
  45. package/src/gir.ts +893 -0
  46. package/src/index.ts +16 -0
  47. package/src/injections/gee08.ts +89 -0
  48. package/src/injections/gee1.ts +35 -0
  49. package/src/injections/gio.ts +707 -0
  50. package/src/injections/glib.ts +275 -0
  51. package/src/injections/gobject.ts +901 -0
  52. package/src/injections/gtk4.ts +23 -0
  53. package/src/injections/inject.ts +49 -0
  54. package/src/injections/shell.ts +49 -0
  55. package/src/injections/tracker1.ts +42 -0
  56. package/src/library-version.ts +50 -0
  57. package/src/logger.ts +104 -0
  58. package/src/messages.ts +57 -0
  59. package/src/templates/index.ts +1 -0
  60. package/src/templates/template-engine.ts +178 -0
  61. package/src/types/answer-version.ts +4 -0
  62. package/src/types/any-introspected-type.ts +5 -0
  63. package/src/types/class-function-types.ts +57 -0
  64. package/src/types/class-member.ts +5 -0
  65. package/src/types/class-parent.ts +14 -0
  66. package/src/types/class.ts +43 -0
  67. package/src/types/config-flags.ts +5 -0
  68. package/src/types/construct-name.ts +13 -0
  69. package/src/types/dependency-map.ts +4 -0
  70. package/src/types/dependency.ts +49 -0
  71. package/src/types/file-info.ts +14 -0
  72. package/src/types/format.ts +1 -0
  73. package/src/types/generator-constructor.ts +7 -0
  74. package/src/types/generics-config.ts +90 -0
  75. package/src/types/gir-any-element.ts +35 -0
  76. package/src/types/gir-module-interface.ts +22 -0
  77. package/src/types/gir-module-resolved.ts +32 -0
  78. package/src/types/gir-type-name.ts +20 -0
  79. package/src/types/index.ts +92 -0
  80. package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
  81. package/src/types/introspected.ts +18 -0
  82. package/src/types/local-name-check.ts +5 -0
  83. package/src/types/local-name-type.ts +1 -0
  84. package/src/types/local-name.ts +8 -0
  85. package/src/types/local-names.ts +5 -0
  86. package/src/types/metadata.ts +6 -0
  87. package/src/types/ns-loader.ts +6 -0
  88. package/src/types/options-base.ts +8 -0
  89. package/src/types/options-generation.ts +53 -0
  90. package/src/types/options-load.ts +6 -0
  91. package/src/types/options-transform.ts +5 -0
  92. package/src/types/output-format.ts +1 -0
  93. package/src/types/package-data-parsed.ts +28 -0
  94. package/src/types/package-data.ts +24 -0
  95. package/src/types/package-section-parsed.ts +9 -0
  96. package/src/types/parsed-gir.ts +5 -0
  97. package/src/types/parsed-package-data.ts +7 -0
  98. package/src/types/property-case.ts +1 -0
  99. package/src/types/resolve-type.ts +4 -0
  100. package/src/types/template-data.ts +8 -0
  101. package/src/types/template-options.ts +33 -0
  102. package/src/types/transformation-case.ts +9 -0
  103. package/src/types/transformations.ts +5 -0
  104. package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +14 -12
  105. package/src/types/ts-doc.ts +18 -0
  106. package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
  107. package/src/types/type-gir-class.ts +2 -0
  108. package/src/types/type-gir-element.ts +25 -0
  109. package/src/types/type-gir-enumeration-member.ts +2 -0
  110. package/{lib/types/type-gir-enumeration.d.ts → src/types/type-gir-enumeration.ts} +1 -1
  111. package/src/types/type-gir-function.ts +8 -0
  112. package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
  113. package/src/types/type-gir-method.ts +2 -0
  114. package/src/types/type-gir-parameter.ts +1 -0
  115. package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
  116. package/src/types/type-gir-variable.ts +1 -0
  117. package/src/types/type-ts-element.ts +13 -0
  118. package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
  119. package/src/types/type-ts-function.ts +1 -0
  120. package/src/types/type-ts-property.ts +1 -0
  121. package/src/types/user-config-load-result.ts +6 -0
  122. package/src/types/user-config.ts +58 -0
  123. package/src/util.ts +84 -0
  124. package/src/utils/conflicts/conflict-resolver.ts +122 -0
  125. package/src/utils/conflicts/function-conflict-detector.ts +139 -0
  126. package/src/utils/conflicts/index.ts +2 -0
  127. package/src/utils/conflicts.ts +627 -0
  128. package/src/utils/documentation.ts +61 -0
  129. package/src/utils/files.ts +71 -0
  130. package/src/utils/function-type-guards.ts +61 -0
  131. package/src/utils/generation.ts +69 -0
  132. package/src/utils/gir-parsing.ts +243 -0
  133. package/src/utils/girs.ts +113 -0
  134. package/src/utils/index.ts +14 -0
  135. package/src/utils/naming.ts +188 -0
  136. package/src/utils/numbers.ts +8 -0
  137. package/src/utils/objects.ts +129 -0
  138. package/src/utils/path.ts +7 -0
  139. package/src/utils/registry.ts +5 -0
  140. package/src/utils/strings.ts +134 -0
  141. package/src/utils/type-resolution.ts +116 -0
  142. package/src/utils/types.ts +247 -0
  143. package/src/validators/class.ts +324 -0
  144. package/src/validators/function-parameters.ts +52 -0
  145. package/src/validators/interface.ts +20 -0
  146. package/src/visitor.ts +58 -0
  147. package/lib/constants.d.ts +0 -26
  148. package/lib/constants.js +0 -28
  149. package/lib/constants.js.map +0 -1
  150. package/lib/dependency-manager.d.ts +0 -183
  151. package/lib/dependency-manager.js +0 -401
  152. package/lib/dependency-manager.js.map +0 -1
  153. package/lib/formatters/default.d.ts +0 -4
  154. package/lib/formatters/default.js +0 -7
  155. package/lib/formatters/default.js.map +0 -1
  156. package/lib/formatters/formatter.d.ts +0 -3
  157. package/lib/formatters/formatter.js +0 -3
  158. package/lib/formatters/formatter.js.map +0 -1
  159. package/lib/formatters/json.d.ts +0 -4
  160. package/lib/formatters/json.js +0 -7
  161. package/lib/formatters/json.js.map +0 -1
  162. package/lib/generators/dts/glib.d.ts +0 -2
  163. package/lib/generators/dts/glib.js +0 -514
  164. package/lib/generators/dts/glib.js.map +0 -1
  165. package/lib/generators/dts/gobject.d.ts +0 -2
  166. package/lib/generators/dts/gobject.js +0 -117
  167. package/lib/generators/dts/gobject.js.map +0 -1
  168. package/lib/generators/dts-inline.d.ts +0 -8
  169. package/lib/generators/dts-inline.js +0 -59
  170. package/lib/generators/dts-inline.js.map +0 -1
  171. package/lib/generators/dts-modules.d.ts +0 -8
  172. package/lib/generators/dts-modules.js +0 -100
  173. package/lib/generators/dts-modules.js.map +0 -1
  174. package/lib/generators/dts.d.ts +0 -45
  175. package/lib/generators/dts.js +0 -682
  176. package/lib/generators/dts.js.map +0 -1
  177. package/lib/generators/generator.d.ts +0 -45
  178. package/lib/generators/generator.js +0 -9
  179. package/lib/generators/generator.js.map +0 -1
  180. package/lib/generators/index.d.ts +0 -5
  181. package/lib/generators/index.js +0 -6
  182. package/lib/generators/index.js.map +0 -1
  183. package/lib/generators/json.d.ts +0 -256
  184. package/lib/generators/json.js +0 -869
  185. package/lib/generators/json.js.map +0 -1
  186. package/lib/generics/clutter.d.ts +0 -26
  187. package/lib/generics/clutter.js +0 -49
  188. package/lib/generics/clutter.js.map +0 -1
  189. package/lib/generics/generify.d.ts +0 -2
  190. package/lib/generics/generify.js +0 -39
  191. package/lib/generics/generify.js.map +0 -1
  192. package/lib/generics/gio.d.ts +0 -7
  193. package/lib/generics/gio.js +0 -51
  194. package/lib/generics/gio.js.map +0 -1
  195. package/lib/generics/glib.d.ts +0 -7
  196. package/lib/generics/glib.js +0 -18
  197. package/lib/generics/glib.js.map +0 -1
  198. package/lib/generics/meta.d.ts +0 -21
  199. package/lib/generics/meta.js +0 -26
  200. package/lib/generics/meta.js.map +0 -1
  201. package/lib/generics/st.d.ts +0 -16
  202. package/lib/generics/st.js +0 -92
  203. package/lib/generics/st.js.map +0 -1
  204. package/lib/generics/visitor.d.ts +0 -20
  205. package/lib/generics/visitor.js +0 -255
  206. package/lib/generics/visitor.js.map +0 -1
  207. package/lib/gir/alias.d.ts +0 -24
  208. package/lib/gir/alias.js +0 -43
  209. package/lib/gir/alias.js.map +0 -1
  210. package/lib/gir/base.d.ts +0 -62
  211. package/lib/gir/base.js +0 -95
  212. package/lib/gir/base.js.map +0 -1
  213. package/lib/gir/class.d.ts +0 -189
  214. package/lib/gir/class.js +0 -1131
  215. package/lib/gir/class.js.map +0 -1
  216. package/lib/gir/const.d.ts +0 -25
  217. package/lib/gir/const.js +0 -43
  218. package/lib/gir/const.js.map +0 -1
  219. package/lib/gir/enum.d.ts +0 -45
  220. package/lib/gir/enum.js +0 -164
  221. package/lib/gir/enum.js.map +0 -1
  222. package/lib/gir/function.d.ts +0 -199
  223. package/lib/gir/function.js +0 -683
  224. package/lib/gir/function.js.map +0 -1
  225. package/lib/gir/generics.d.ts +0 -5
  226. package/lib/gir/generics.js +0 -57
  227. package/lib/gir/generics.js.map +0 -1
  228. package/lib/gir/namespace.d.ts +0 -21
  229. package/lib/gir/namespace.js +0 -57
  230. package/lib/gir/namespace.js.map +0 -1
  231. package/lib/gir/nodes.d.ts +0 -11
  232. package/lib/gir/nodes.js +0 -12
  233. package/lib/gir/nodes.js.map +0 -1
  234. package/lib/gir/property.d.ts +0 -60
  235. package/lib/gir/property.js +0 -128
  236. package/lib/gir/property.js.map +0 -1
  237. package/lib/gir/registry.d.ts +0 -51
  238. package/lib/gir/registry.js +0 -144
  239. package/lib/gir/registry.js.map +0 -1
  240. package/lib/gir/signal.d.ts +0 -33
  241. package/lib/gir/signal.js +0 -165
  242. package/lib/gir/signal.js.map +0 -1
  243. package/lib/gir/util.d.ts +0 -49
  244. package/lib/gir/util.js +0 -559
  245. package/lib/gir/util.js.map +0 -1
  246. package/lib/gir-module.d.ts +0 -112
  247. package/lib/gir-module.js +0 -570
  248. package/lib/gir-module.js.map +0 -1
  249. package/lib/gir.d.ts +0 -253
  250. package/lib/gir.js +0 -642
  251. package/lib/gir.js.map +0 -1
  252. package/lib/index.d.ts +0 -14
  253. package/lib/index.js +0 -17
  254. package/lib/index.js.map +0 -1
  255. package/lib/injections/gee08.d.ts +0 -7
  256. package/lib/injections/gee08.js +0 -68
  257. package/lib/injections/gee08.js.map +0 -1
  258. package/lib/injections/gee1.d.ts +0 -7
  259. package/lib/injections/gee1.js +0 -28
  260. package/lib/injections/gee1.js.map +0 -1
  261. package/lib/injections/gio.d.ts +0 -7
  262. package/lib/injections/gio.js +0 -431
  263. package/lib/injections/gio.js.map +0 -1
  264. package/lib/injections/glib.d.ts +0 -7
  265. package/lib/injections/glib.js +0 -204
  266. package/lib/injections/glib.js.map +0 -1
  267. package/lib/injections/gobject.d.ts +0 -7
  268. package/lib/injections/gobject.js +0 -479
  269. package/lib/injections/gobject.js.map +0 -1
  270. package/lib/injections/inject.d.ts +0 -4
  271. package/lib/injections/inject.js +0 -28
  272. package/lib/injections/inject.js.map +0 -1
  273. package/lib/injections/tracker1.d.ts +0 -7
  274. package/lib/injections/tracker1.js +0 -30
  275. package/lib/injections/tracker1.js.map +0 -1
  276. package/lib/library-version.d.ts +0 -10
  277. package/lib/library-version.js +0 -45
  278. package/lib/library-version.js.map +0 -1
  279. package/lib/logger.d.ts +0 -36
  280. package/lib/logger.js +0 -134
  281. package/lib/logger.js.map +0 -1
  282. package/lib/messages.d.ts +0 -26
  283. package/lib/messages.js +0 -42
  284. package/lib/messages.js.map +0 -1
  285. package/lib/registry.d.ts +0 -8
  286. package/lib/registry.js +0 -12
  287. package/lib/registry.js.map +0 -1
  288. package/lib/transformation.d.ts +0 -181
  289. package/lib/transformation.js +0 -480
  290. package/lib/transformation.js.map +0 -1
  291. package/lib/types/answer-version.d.ts +0 -4
  292. package/lib/types/answer-version.js +0 -2
  293. package/lib/types/answer-version.js.map +0 -1
  294. package/lib/types/class-parent.d.ts +0 -13
  295. package/lib/types/class-parent.js +0 -2
  296. package/lib/types/class-parent.js.map +0 -1
  297. package/lib/types/config-flags.d.ts +0 -4
  298. package/lib/types/config-flags.js +0 -2
  299. package/lib/types/config-flags.js.map +0 -1
  300. package/lib/types/construct-name.d.ts +0 -1
  301. package/lib/types/construct-name.js +0 -2
  302. package/lib/types/construct-name.js.map +0 -1
  303. package/lib/types/dependency-map.d.ts +0 -4
  304. package/lib/types/dependency-map.js +0 -2
  305. package/lib/types/dependency-map.js.map +0 -1
  306. package/lib/types/dependency.d.ts +0 -42
  307. package/lib/types/dependency.js +0 -2
  308. package/lib/types/dependency.js.map +0 -1
  309. package/lib/types/file-info.d.ts +0 -14
  310. package/lib/types/file-info.js +0 -2
  311. package/lib/types/file-info.js.map +0 -1
  312. package/lib/types/format.d.ts +0 -1
  313. package/lib/types/format.js +0 -2
  314. package/lib/types/format.js.map +0 -1
  315. package/lib/types/gir-alias-element.d.ts +0 -4
  316. package/lib/types/gir-alias-element.js +0 -2
  317. package/lib/types/gir-alias-element.js.map +0 -1
  318. package/lib/types/gir-annotation.d.ts +0 -9
  319. package/lib/types/gir-annotation.js +0 -2
  320. package/lib/types/gir-annotation.js.map +0 -1
  321. package/lib/types/gir-any-element.d.ts +0 -2
  322. package/lib/types/gir-any-element.js +0 -2
  323. package/lib/types/gir-any-element.js.map +0 -1
  324. package/lib/types/gir-bitfield-element.d.ts +0 -6
  325. package/lib/types/gir-bitfield-element.js +0 -2
  326. package/lib/types/gir-bitfield-element.js.map +0 -1
  327. package/lib/types/gir-callable-param-element.d.ts +0 -4
  328. package/lib/types/gir-callable-param-element.js +0 -2
  329. package/lib/types/gir-callable-param-element.js.map +0 -1
  330. package/lib/types/gir-callable-params.d.ts +0 -7
  331. package/lib/types/gir-callable-params.js +0 -2
  332. package/lib/types/gir-callable-params.js.map +0 -1
  333. package/lib/types/gir-callable-return.d.ts +0 -5
  334. package/lib/types/gir-callable-return.js +0 -2
  335. package/lib/types/gir-callable-return.js.map +0 -1
  336. package/lib/types/gir-callback-element.d.ts +0 -6
  337. package/lib/types/gir-callback-element.js +0 -2
  338. package/lib/types/gir-callback-element.js.map +0 -1
  339. package/lib/types/gir-class-element.d.ts +0 -17
  340. package/lib/types/gir-class-element.js +0 -2
  341. package/lib/types/gir-class-element.js.map +0 -1
  342. package/lib/types/gir-constant-element.d.ts +0 -4
  343. package/lib/types/gir-constant-element.js +0 -2
  344. package/lib/types/gir-constant-element.js.map +0 -1
  345. package/lib/types/gir-constructor-element.d.ts +0 -6
  346. package/lib/types/gir-constructor-element.js +0 -2
  347. package/lib/types/gir-constructor-element.js.map +0 -1
  348. package/lib/types/gir-enum-element.d.ts +0 -6
  349. package/lib/types/gir-enum-element.js +0 -2
  350. package/lib/types/gir-enum-element.js.map +0 -1
  351. package/lib/types/gir-field-element.d.ts +0 -5
  352. package/lib/types/gir-field-element.js +0 -2
  353. package/lib/types/gir-field-element.js.map +0 -1
  354. package/lib/types/gir-function-element.d.ts +0 -6
  355. package/lib/types/gir-function-element.js +0 -2
  356. package/lib/types/gir-function-element.js.map +0 -1
  357. package/lib/types/gir-instance-parameter.d.ts +0 -8
  358. package/lib/types/gir-instance-parameter.js +0 -2
  359. package/lib/types/gir-instance-parameter.js.map +0 -1
  360. package/lib/types/gir-interface-element.d.ts +0 -16
  361. package/lib/types/gir-interface-element.js +0 -2
  362. package/lib/types/gir-interface-element.js.map +0 -1
  363. package/lib/types/gir-member-element.d.ts +0 -5
  364. package/lib/types/gir-member-element.js +0 -2
  365. package/lib/types/gir-member-element.js.map +0 -1
  366. package/lib/types/gir-method-element.d.ts +0 -7
  367. package/lib/types/gir-method-element.js +0 -2
  368. package/lib/types/gir-method-element.js.map +0 -1
  369. package/lib/types/gir-module-resolved-by.d.ts +0 -15
  370. package/lib/types/gir-module-resolved-by.js +0 -2
  371. package/lib/types/gir-module-resolved-by.js.map +0 -1
  372. package/lib/types/gir-modules-grouped-map.d.ts +0 -4
  373. package/lib/types/gir-modules-grouped-map.js +0 -2
  374. package/lib/types/gir-modules-grouped-map.js.map +0 -1
  375. package/lib/types/gir-modules-grouped.d.ts +0 -12
  376. package/lib/types/gir-modules-grouped.js +0 -2
  377. package/lib/types/gir-modules-grouped.js.map +0 -1
  378. package/lib/types/gir-namespace.d.ts +0 -27
  379. package/lib/types/gir-namespace.js +0 -2
  380. package/lib/types/gir-namespace.js.map +0 -1
  381. package/lib/types/gir-property-element.d.ts +0 -4
  382. package/lib/types/gir-property-element.js +0 -2
  383. package/lib/types/gir-property-element.js.map +0 -1
  384. package/lib/types/gir-record-element.d.ts +0 -10
  385. package/lib/types/gir-record-element.js +0 -2
  386. package/lib/types/gir-record-element.js.map +0 -1
  387. package/lib/types/gir-repository.d.ts +0 -5
  388. package/lib/types/gir-repository.js +0 -2
  389. package/lib/types/gir-repository.js.map +0 -1
  390. package/lib/types/gir-signal.d.ts +0 -10
  391. package/lib/types/gir-signal.js +0 -2
  392. package/lib/types/gir-signal.js.map +0 -1
  393. package/lib/types/gir-type-name.d.ts +0 -2
  394. package/lib/types/gir-type-name.js +0 -2
  395. package/lib/types/gir-type-name.js.map +0 -1
  396. package/lib/types/gir-union-element.d.ts +0 -9
  397. package/lib/types/gir-union-element.js +0 -2
  398. package/lib/types/gir-union-element.js.map +0 -1
  399. package/lib/types/gir-unparsed-number.d.ts +0 -2
  400. package/lib/types/gir-unparsed-number.js +0 -2
  401. package/lib/types/gir-unparsed-number.js.map +0 -1
  402. package/lib/types/gir-virtual-method.d.ts +0 -6
  403. package/lib/types/gir-virtual-method.js +0 -2
  404. package/lib/types/gir-virtual-method.js.map +0 -1
  405. package/lib/types/index.d.ts +0 -79
  406. package/lib/types/index.js +0 -80
  407. package/lib/types/index.js.map +0 -1
  408. package/lib/types/inheritance-table.js +0 -2
  409. package/lib/types/inheritance-table.js.map +0 -1
  410. package/lib/types/local-name-check.d.ts +0 -4
  411. package/lib/types/local-name-check.js +0 -2
  412. package/lib/types/local-name-check.js.map +0 -1
  413. package/lib/types/local-name-type.d.ts +0 -1
  414. package/lib/types/local-name-type.js +0 -2
  415. package/lib/types/local-name-type.js.map +0 -1
  416. package/lib/types/local-name.d.ts +0 -7
  417. package/lib/types/local-name.js +0 -2
  418. package/lib/types/local-name.js.map +0 -1
  419. package/lib/types/local-names.d.ts +0 -4
  420. package/lib/types/local-names.js +0 -2
  421. package/lib/types/local-names.js.map +0 -1
  422. package/lib/types/metadata.d.ts +0 -8
  423. package/lib/types/metadata.js +0 -2
  424. package/lib/types/metadata.js.map +0 -1
  425. package/lib/types/options-base.d.ts +0 -4
  426. package/lib/types/options-base.js +0 -2
  427. package/lib/types/options-base.js.map +0 -1
  428. package/lib/types/options-generation.d.ts +0 -33
  429. package/lib/types/options-generation.js +0 -2
  430. package/lib/types/options-generation.js.map +0 -1
  431. package/lib/types/options-load.d.ts +0 -5
  432. package/lib/types/options-load.js +0 -2
  433. package/lib/types/options-load.js.map +0 -1
  434. package/lib/types/options-transform.d.ts +0 -4
  435. package/lib/types/options-transform.js +0 -2
  436. package/lib/types/options-transform.js.map +0 -1
  437. package/lib/types/output-format.d.ts +0 -1
  438. package/lib/types/output-format.js +0 -2
  439. package/lib/types/output-format.js.map +0 -1
  440. package/lib/types/package-data-parsed.d.ts +0 -28
  441. package/lib/types/package-data-parsed.js +0 -2
  442. package/lib/types/package-data-parsed.js.map +0 -1
  443. package/lib/types/package-data.d.ts +0 -23
  444. package/lib/types/package-data.js +0 -2
  445. package/lib/types/package-data.js.map +0 -1
  446. package/lib/types/package-section-parsed.d.ts +0 -8
  447. package/lib/types/package-section-parsed.js +0 -2
  448. package/lib/types/package-section-parsed.js.map +0 -1
  449. package/lib/types/parsed-gir.d.ts +0 -5
  450. package/lib/types/parsed-gir.js +0 -2
  451. package/lib/types/parsed-gir.js.map +0 -1
  452. package/lib/types/parsed-package-data.d.ts +0 -6
  453. package/lib/types/parsed-package-data.js +0 -2
  454. package/lib/types/parsed-package-data.js.map +0 -1
  455. package/lib/types/part-of-class.d.ts +0 -7
  456. package/lib/types/part-of-class.js +0 -2
  457. package/lib/types/part-of-class.js.map +0 -1
  458. package/lib/types/part-of-module.d.ts +0 -6
  459. package/lib/types/part-of-module.js +0 -2
  460. package/lib/types/part-of-module.js.map +0 -1
  461. package/lib/types/property-case.d.ts +0 -1
  462. package/lib/types/property-case.js +0 -2
  463. package/lib/types/property-case.js.map +0 -1
  464. package/lib/types/resolve-type.d.ts +0 -4
  465. package/lib/types/resolve-type.js +0 -6
  466. package/lib/types/resolve-type.js.map +0 -1
  467. package/lib/types/template-data.d.ts +0 -7
  468. package/lib/types/template-data.js +0 -2
  469. package/lib/types/template-data.js.map +0 -1
  470. package/lib/types/transformation-case.d.ts +0 -1
  471. package/lib/types/transformation-case.js +0 -2
  472. package/lib/types/transformation-case.js.map +0 -1
  473. package/lib/types/transformations.d.ts +0 -4
  474. package/lib/types/transformations.js +0 -2
  475. package/lib/types/transformations.js.map +0 -1
  476. package/lib/types/ts-doc-tag.js +0 -2
  477. package/lib/types/ts-doc-tag.js.map +0 -1
  478. package/lib/types/ts-doc.d.ts +0 -16
  479. package/lib/types/ts-doc.js +0 -2
  480. package/lib/types/ts-doc.js.map +0 -1
  481. package/lib/types/type-gir-alias.js +0 -2
  482. package/lib/types/type-gir-alias.js.map +0 -1
  483. package/lib/types/type-gir-class.d.ts +0 -2
  484. package/lib/types/type-gir-class.js +0 -2
  485. package/lib/types/type-gir-class.js.map +0 -1
  486. package/lib/types/type-gir-element.d.ts +0 -3
  487. package/lib/types/type-gir-element.js +0 -2
  488. package/lib/types/type-gir-element.js.map +0 -1
  489. package/lib/types/type-gir-enumeration-member.d.ts +0 -2
  490. package/lib/types/type-gir-enumeration-member.js +0 -2
  491. package/lib/types/type-gir-enumeration-member.js.map +0 -1
  492. package/lib/types/type-gir-enumeration.js +0 -2
  493. package/lib/types/type-gir-enumeration.js.map +0 -1
  494. package/lib/types/type-gir-function.d.ts +0 -1
  495. package/lib/types/type-gir-function.js +0 -2
  496. package/lib/types/type-gir-function.js.map +0 -1
  497. package/lib/types/type-gir-interface.js +0 -2
  498. package/lib/types/type-gir-interface.js.map +0 -1
  499. package/lib/types/type-gir-method.d.ts +0 -2
  500. package/lib/types/type-gir-method.js +0 -2
  501. package/lib/types/type-gir-method.js.map +0 -1
  502. package/lib/types/type-gir-parameter.d.ts +0 -1
  503. package/lib/types/type-gir-parameter.js +0 -2
  504. package/lib/types/type-gir-parameter.js.map +0 -1
  505. package/lib/types/type-gir-property.js +0 -2
  506. package/lib/types/type-gir-property.js.map +0 -1
  507. package/lib/types/type-gir-variable.d.ts +0 -1
  508. package/lib/types/type-gir-variable.js +0 -2
  509. package/lib/types/type-gir-variable.js.map +0 -1
  510. package/lib/types/type-ts-element.d.ts +0 -3
  511. package/lib/types/type-ts-element.js +0 -2
  512. package/lib/types/type-ts-element.js.map +0 -1
  513. package/lib/types/type-ts-enumeration-member.js +0 -2
  514. package/lib/types/type-ts-enumeration-member.js.map +0 -1
  515. package/lib/types/type-ts-function.d.ts +0 -1
  516. package/lib/types/type-ts-function.js +0 -2
  517. package/lib/types/type-ts-function.js.map +0 -1
  518. package/lib/types/type-ts-property.d.ts +0 -1
  519. package/lib/types/type-ts-property.js +0 -2
  520. package/lib/types/type-ts-property.js.map +0 -1
  521. package/lib/types/user-config-load-result.d.ts +0 -6
  522. package/lib/types/user-config-load-result.js +0 -2
  523. package/lib/types/user-config-load-result.js.map +0 -1
  524. package/lib/types/user-config.d.ts +0 -35
  525. package/lib/types/user-config.js +0 -2
  526. package/lib/types/user-config.js.map +0 -1
  527. package/lib/util.d.ts +0 -20
  528. package/lib/util.js +0 -67
  529. package/lib/util.js.map +0 -1
  530. package/lib/utils.d.ts +0 -268
  531. package/lib/utils.js +0 -417
  532. package/lib/utils.js.map +0 -1
  533. package/lib/validators/class.d.ts +0 -7
  534. package/lib/validators/class.js +0 -217
  535. package/lib/validators/class.js.map +0 -1
  536. package/lib/validators/interface.d.ts +0 -5
  537. package/lib/validators/interface.js +0 -16
  538. package/lib/validators/interface.js.map +0 -1
  539. package/lib/visitor.d.ts +0 -35
  540. package/lib/visitor.js +0 -29
  541. package/lib/visitor.js.map +0 -1
@@ -0,0 +1,188 @@
1
+ import { RESERVED_NAMESPACE_NAMES } from "../constants.ts";
2
+ import { isFirstCharNumeric, upperCamelCase } from "./strings.ts";
3
+
4
+ // Reserved words for identifier sanitization
5
+ const reservedWords = [
6
+ "abstract",
7
+ "arguments",
8
+ "await",
9
+ "boolean",
10
+ "break",
11
+ "byte",
12
+ "case",
13
+ "catch",
14
+ "char",
15
+ "class",
16
+ "const",
17
+ "continue",
18
+ "constructor", // This isn't technically reserved, but it's problematic.
19
+ "debugger",
20
+ "default",
21
+ "delete",
22
+ "do",
23
+ "else",
24
+ "enum",
25
+ "eval",
26
+ "export",
27
+ "extends",
28
+ "false",
29
+ "final",
30
+ "finally",
31
+ "for",
32
+ "function",
33
+ "goto",
34
+ "if",
35
+ "implements",
36
+ "import",
37
+ "in",
38
+ "instanceof",
39
+ "interface",
40
+ "let",
41
+ "native",
42
+ "new",
43
+ "null",
44
+ "package",
45
+ "private",
46
+ "protected",
47
+ "public",
48
+ "return",
49
+ "short",
50
+ "static",
51
+ "super",
52
+ "switch",
53
+ "synchronized",
54
+ "this",
55
+ "throw",
56
+ "throws",
57
+ "transient",
58
+ "true",
59
+ "try",
60
+ "typeof",
61
+ "var",
62
+ "void",
63
+ "volatile",
64
+ "while",
65
+ "with",
66
+ "yield",
67
+ ];
68
+
69
+ // Map to store sanitized identifiers
70
+ export const SanitizedIdentifiers = new Map<string, string>();
71
+
72
+ /**
73
+ * Transform a package name to import name format (lowercase)
74
+ * @param packageName The package name to transform
75
+ * @returns The transformed import name
76
+ */
77
+ export function transformImportName(packageName: string): string {
78
+ return packageName.toLowerCase();
79
+ }
80
+
81
+ /**
82
+ * Transform a module namespace name to the proper format
83
+ * Handles numeric names and reserved namespace names
84
+ * @param name The namespace name to transform
85
+ * @returns The transformed namespace name
86
+ */
87
+ export function transformModuleNamespaceName(name: string): string {
88
+ // Handle numeric names - prepend 'TODO_' if name starts with a number
89
+ name = transformNumericName(name);
90
+
91
+ // Convert to upperCamelCase
92
+ name = upperCamelCase(name);
93
+
94
+ // Handle reserved namespace names
95
+ if (RESERVED_NAMESPACE_NAMES[name]) {
96
+ name = `${name}_`;
97
+ }
98
+
99
+ return name;
100
+ }
101
+
102
+ /**
103
+ * Transform names starting with numbers by prepending 'TODO_'
104
+ * In JavaScript there can be no variables, methods, class names or enum names that start with a number
105
+ * @param name The name to transform
106
+ * @returns The transformed name
107
+ */
108
+ function transformNumericName(name: string): string {
109
+ if (isFirstCharNumeric(name)) {
110
+ name = `TODO_${name}`;
111
+ }
112
+ return name;
113
+ }
114
+
115
+ /**
116
+ * Sanitize identifier name to be valid JavaScript identifier
117
+ * @param namespace The namespace for the identifier (can be null)
118
+ * @param name The name to sanitize
119
+ * @returns The sanitized identifier name
120
+ */
121
+ export function sanitizeIdentifierName(namespace: string | null, name: string): string {
122
+ // This is a unique case where the name is "empty".
123
+ if (name === "") {
124
+ return "''";
125
+ }
126
+
127
+ let sanitized_name = name.replace(/[^A-z0-9_]/gi, "_");
128
+
129
+ if (reservedWords.includes(sanitized_name)) {
130
+ sanitized_name = `__${sanitized_name}`;
131
+ }
132
+
133
+ if (sanitized_name.match(/^[^A-z_]/) != null) {
134
+ sanitized_name = `__${sanitized_name}`;
135
+ }
136
+
137
+ if (namespace && sanitized_name !== name) {
138
+ SanitizedIdentifiers.set(`${namespace}.${name}`, `${namespace}.${sanitized_name}`);
139
+ }
140
+
141
+ return sanitized_name;
142
+ }
143
+
144
+ /**
145
+ * Sanitize namespace name - fix broken namespacing in some GIRs
146
+ * @param namespace The namespace to sanitize
147
+ * @returns The sanitized namespace
148
+ */
149
+ export function sanitizeNamespace(namespace: string): string {
150
+ if (namespace === "Tracker_Vala") {
151
+ return "Tracker";
152
+ }
153
+
154
+ return namespace;
155
+ }
156
+
157
+ /**
158
+ * Sanitize member names for safe usage
159
+ * @param name The member name to sanitize
160
+ * @returns The sanitized member name
161
+ */
162
+ export function sanitizeMemberName(name: string): string {
163
+ // This is a unique case where the name is "empty".
164
+ if (name === "") {
165
+ return "''";
166
+ }
167
+
168
+ return name.replace(/[^A-z0-9_]/gi, "_");
169
+ }
170
+
171
+ /**
172
+ * Check if a name would be invalid as JavaScript identifier
173
+ * @param name The name to check
174
+ * @returns True if the name would be invalid
175
+ */
176
+ export function isInvalid(name: string): boolean {
177
+ if (reservedWords.includes(name)) {
178
+ return true;
179
+ }
180
+
181
+ const sanitized = sanitizeMemberName(name);
182
+
183
+ if (sanitized.match(/^[^A-z_]/) != null) {
184
+ return true;
185
+ }
186
+
187
+ return false;
188
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Checking whether a string is numeric
3
+ * @param str The string to check
4
+ * @returns Whether the string is numeric or not
5
+ */
6
+ export const isNumeric = (str: string): boolean => {
7
+ return !Number.isNaN(Number(str) - parseFloat(str));
8
+ };
@@ -0,0 +1,129 @@
1
+ import lodash from "lodash";
2
+
3
+ export { inspect } from "node:util";
4
+
5
+ /**
6
+ * Performs a deep comparison between two values to determine if they are
7
+ * equivalent.
8
+ *
9
+ * **Note:** This method supports comparing arrays, array buffers, booleans,
10
+ * date objects, error objects, maps, numbers, `Object` objects, regexes,
11
+ * sets, strings, symbols, and typed arrays. `Object` objects are compared
12
+ * by their own, not inherited, enumerable properties. Functions and DOM
13
+ * nodes are **not** supported.
14
+ *
15
+ * @category Lang
16
+ * @param value The value to compare.
17
+ * @param other The other value to compare.
18
+ * @returns Returns `true` if the values are equivalent, else `false`.
19
+ * @example
20
+ *
21
+ * var object = { 'user': 'fred' };
22
+ * var other = { 'user': 'fred' };
23
+ *
24
+ * _.isEqual(object, other);
25
+ * // => true
26
+ *
27
+ * object === other;
28
+ * // => false
29
+ */
30
+ export const isEqual = lodash.isEqual;
31
+
32
+ /**
33
+ * Creates an array of values by running each element in collection through iteratee. The iteratee is
34
+ * invoked with three arguments: (value, index|key, collection).
35
+ *
36
+ * Many lodash methods are guarded to work as iteratees for methods like _.every, _.filter, _.map, _.mapValues,
37
+ * _.reject, and _.some.
38
+ *
39
+ * The guarded methods are:
40
+ * ary, callback, chunk, clone, create, curry, curryRight, drop, dropRight, every, fill, flatten, invert, max,
41
+ * min, parseInt, slice, sortBy, take, takeRight, template, trim, trimLeft, trimRight, trunc, random, range,
42
+ * sample, some, sum, uniq, and words
43
+ *
44
+ * @param collection The collection to iterate over.
45
+ * @param iteratee The function invoked per iteration.
46
+ * @return Returns the new mapped array.
47
+ */
48
+ export const map = lodash.map;
49
+
50
+ /**
51
+ * Iterates over elements of collection, returning the first element predicate returns truthy for.
52
+ * The predicate is invoked with three arguments: (value, index|key, collection).
53
+ *
54
+ * @param collection The collection to search.
55
+ * @param predicate The function invoked per iteration.
56
+ * @param fromIndex The index to search from.
57
+ * @return Returns the matched element, else undefined.
58
+ */
59
+ export const find = lodash.find;
60
+
61
+ /**
62
+ * Recursively merges own and inherited enumerable properties of source
63
+ * objects into the destination object, skipping source properties that resolve
64
+ * to `undefined`. Array and plain object properties are merged recursively.
65
+ * Other objects and value types are overridden by assignment. Source objects
66
+ * are applied from left to right. Subsequent sources overwrite property
67
+ * assignments of previous sources.
68
+ *
69
+ * **Note:** This method mutates `object`.
70
+ *
71
+ * @category Object
72
+ * @param object The destination object.
73
+ * @param [sources] The source objects.
74
+ * @returns Returns `object`.
75
+ * @example
76
+ *
77
+ * var users = {
78
+ * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
79
+ * };
80
+ *
81
+ * var ages = {
82
+ * 'data': [{ 'age': 36 }, { 'age': 40 }]
83
+ * };
84
+ *
85
+ * _.merge(users, ages);
86
+ * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
87
+ */
88
+ export const merge = lodash.merge;
89
+
90
+ /**
91
+ * Creates a shallow clone of value.
92
+ *
93
+ * Note: This method is loosely based on the structured clone algorithm and supports cloning arrays,
94
+ * array buffers, booleans, date objects, maps, numbers, Object objects, regex's, sets, strings, symbols,
95
+ * and typed arrays. The own enumerable properties of arguments objects are cloned as plain objects. An empty
96
+ * object is returned for not cloneable values such as error objects, functions, DOM nodes, and WeakMaps.
97
+ *
98
+ * @param value The value to clone.
99
+ * @return Returns the cloned value.
100
+ */
101
+ export const clone = lodash.clone;
102
+
103
+ /**
104
+ * This method is like clone except that it recursively clones value.
105
+ *
106
+ * @param value The value to recursively clone.
107
+ * @return Returns the deep cloned value.
108
+ */
109
+ export const cloneDeep = lodash.cloneDeep;
110
+
111
+ /**
112
+ * Checking whether some variable is iterable
113
+ * @see https://stackoverflow.com/a/32538867
114
+ * @param obj Variable to check for iterable
115
+ * @returns Whether the variable is iterable or not
116
+ */
117
+ export const isIterable = (obj: unknown[]): boolean => {
118
+ return obj != null && typeof obj[Symbol.iterator] === "function";
119
+ };
120
+
121
+ /**
122
+ * Union (a ∪ b): create a set that contains the elements of both set a and set b.
123
+ * See https://2ality.com/2015/01/es6-set-operations.html#union
124
+ * @param target
125
+ * @param source
126
+ */
127
+ export const union = <T>(target: Set<T> | T[], source: Set<T> | T[]): Set<T> => {
128
+ return new Set<T>([...target, ...source]);
129
+ };
@@ -0,0 +1,7 @@
1
+ import { dirname, resolve } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+
4
+ // Get __filename on ESM
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ // Get __dirname on ESM, resolve to the root directory of this package
7
+ export const __dirname = resolve(dirname(__filename), "../.."); // TODO: Bundled this must be '..' but unbundled it must be '../..'
@@ -0,0 +1,5 @@
1
+ import { SanitizedIdentifiers } from "./naming.ts";
2
+
3
+ export function getSanitizedIdentifiers(): ReadonlyMap<string, string> {
4
+ return SanitizedIdentifiers;
5
+ }
@@ -0,0 +1,134 @@
1
+ import { isNumeric } from "./numbers.ts";
2
+
3
+ /**
4
+ * Removes line breaks and consecutive white spaces from a given string
5
+ * @param str
6
+ * @returns
7
+ */
8
+ export const cleanString = (str: string) => {
9
+ str = str.replace(/\r?\n|\r/g, " ");
10
+ str = str.replace(/\s+/g, " ");
11
+ return str.trim();
12
+ };
13
+
14
+ /**
15
+ * Get the first character of a string
16
+ * @param str The string to get the first character from
17
+ * @returns The first character
18
+ */
19
+ export const getFirstChar = (str: string): string => {
20
+ return str.charAt(0);
21
+ };
22
+
23
+ /**
24
+ * Get the last character of a string
25
+ * @param str The string to get the last character from
26
+ * @returns The last character
27
+ */
28
+ export const getLastChar = (str: string): string => {
29
+ return str.charAt(str.length - 1);
30
+ };
31
+
32
+ /**
33
+ * Check if the first character of a string is numeric
34
+ * @param str The string to check
35
+ * @returns Whether the first character is numeric or not
36
+ */
37
+ export const isFirstCharNumeric = (str: string): boolean => {
38
+ return isNumeric(getFirstChar(str));
39
+ };
40
+
41
+ /**
42
+ * Convert a string to camelCase, keeps the first alphabet character as it is.
43
+ * @param str The string to convert
44
+ * @returns The converted string
45
+ */
46
+ export const camelCase = (str: string): string => {
47
+ return str
48
+ .replace(/\s(.)|(\s|-|_|\.)(.)/g, (a) => {
49
+ return a.toUpperCase();
50
+ })
51
+ .replace(/(\s|-|_|\.)/g, "");
52
+ };
53
+
54
+ /**
55
+ * Convert a string to `lowerCamelCase`
56
+ * @param str The string to convert
57
+ * @returns The converted string
58
+ */
59
+ export const lowerCamelCase = (str: string): string => {
60
+ str = camelCase(str);
61
+ str = getFirstChar(str).toLowerCase() + str.slice(1);
62
+ return str;
63
+ };
64
+
65
+ /**
66
+ * Convert a string to `PascalCase`
67
+ * @param str The string to convert
68
+ * @returns The converted string
69
+ */
70
+ export const pascalCase = (str: string): string => {
71
+ str = camelCase(str);
72
+ str = getFirstChar(str).toUpperCase() + str.slice(1);
73
+ return str;
74
+ };
75
+
76
+ /** Alias for {@link pascalCase} */
77
+ export const upperCamelCase = pascalCase;
78
+
79
+ /**
80
+ * Convert a string to `snake_case`
81
+ * @param str The string to convert
82
+ * @returns The converted string
83
+ */
84
+ export const snakeCase = (str: string): string => {
85
+ return str
86
+ .replace(/([a-z])([A-Z])/g, "$1-$2") // replace camelCase with hyphen-case
87
+ .replace(/[^a-zA-Z0-9-]+/g, "_") // replace non-alphanumeric characters with underscore
88
+ .replace(/^_+|_+$/g, "") // remove any leading or trailing underscores
89
+ .toLowerCase();
90
+ };
91
+
92
+ /**
93
+ * Convert a string to `kebab-case`
94
+ * @param str The string to convert
95
+ * @returns The converted string
96
+ */
97
+ export const kebabCase = (str: string): string => {
98
+ return str
99
+ .replace(/([a-z])([A-Z])/g, "$1-$2") // replace camelCase with hyphen-case
100
+ .replace(/[^a-zA-Z0-9-]+/g, "-") // replace non-alphanumeric characters with hyphen
101
+ .replace(/^-+|-+$/g, "") // remove any leading or trailing hyphens
102
+ .toLowerCase();
103
+ };
104
+
105
+ /** Alias for {@link kebabCase} */
106
+ export const slugCase = kebabCase;
107
+
108
+ export const underscores = (str: string): string => {
109
+ return str.replace(/-|_/g, "_");
110
+ };
111
+
112
+ /**
113
+ * Add indents to a string
114
+ * @param indents The number of indents
115
+ * @param spaceForIndent The number of spaces for each indent
116
+ * @returns The indented string
117
+ */
118
+ export const generateIndent = (indents = 1, spaceForIndent = 4): string => {
119
+ return " ".repeat(indents * spaceForIndent);
120
+ };
121
+
122
+ /**
123
+ * Merge a large array of strings by using a smaller chunk size
124
+ * @param target The target array to merge into
125
+ * @param source The source array to merge from
126
+ * @param chunkSize The size of the chunks to merge
127
+ * @returns The merged array
128
+ */
129
+ export const mergeLargeStringArray = (target: string[], source: string[], chunkSize: number = 1000): string[] => {
130
+ for (let i = 0; i < source.length; i += chunkSize) {
131
+ target.push(...source.slice(i, i + chunkSize));
132
+ }
133
+ return target;
134
+ };
@@ -0,0 +1,116 @@
1
+ import type { IntrospectedBaseClass } from "../gir/introspected-classes.ts";
2
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
3
+ import { AnyType, GenericType, ThisType, type TypeExpression, TypeIdentifier } from "../gir.ts";
4
+ import { TwoKeyMap } from "../util.ts";
5
+
6
+ /**
7
+ * Resolves a class identifier.
8
+ *
9
+ * If the identifier is a class type it is returned,
10
+ * otherwise `null`.
11
+ *
12
+ * @param namespace
13
+ * @param type
14
+ */
15
+ export function resolveTypeIdentifier(
16
+ namespace: IntrospectedNamespace,
17
+ type: TypeIdentifier,
18
+ ): IntrospectedBaseClass | null {
19
+ const ns = type.namespace;
20
+ const name = type.name;
21
+
22
+ const resolved_ns = namespace.assertInstalledImport(ns);
23
+
24
+ const pclass = resolved_ns.getClass(name);
25
+ if (pclass) {
26
+ return pclass;
27
+ } else {
28
+ return null;
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Checks if two type expressions are in conflict (not equal)
34
+ * @param a
35
+ * @param b
36
+ */
37
+ function isTypeConflict(a: TypeExpression, b: TypeExpression) {
38
+ return !a.equals(b) || !b.equals(a);
39
+ }
40
+
41
+ /**
42
+ * Checks if a given type expression in the context of a given this type
43
+ * is a subtype (compatible with) of another type expression in the context
44
+ * of a parent type.
45
+ *
46
+ * @param namespace
47
+ * @param thisType
48
+ * @param parentThisType
49
+ * @param potentialSubtype
50
+ * @param parentType
51
+ */
52
+ export function isSubtypeOf(
53
+ namespace: IntrospectedNamespace,
54
+ thisType: TypeIdentifier,
55
+ parentThisType: TypeIdentifier,
56
+ potentialSubtype: TypeExpression,
57
+ parentType: TypeExpression,
58
+ ) {
59
+ if (!isTypeConflict(potentialSubtype, parentType)) {
60
+ return true;
61
+ }
62
+
63
+ const unwrappedSubtype = potentialSubtype.unwrap();
64
+ let unwrappedParent = parentType.unwrap();
65
+
66
+ if (
67
+ (potentialSubtype.equals(ThisType) && unwrappedParent.equals(thisType)) ||
68
+ (parentType.equals(ThisType) && unwrappedSubtype.equals(parentThisType))
69
+ ) {
70
+ return true;
71
+ }
72
+
73
+ if (unwrappedParent instanceof GenericType && unwrappedParent.identifier !== "T") {
74
+ // Technically there could be a conflicting generic, but most generic types should specify a replacement for type checking.
75
+ // "T" denotes a local function generic in the current implementation, those can't be ignored.
76
+ if (!unwrappedParent.replacedType) {
77
+ return true;
78
+ }
79
+
80
+ // Use the generic replaced type as a stand-in.
81
+ unwrappedParent = unwrappedParent.replacedType;
82
+ }
83
+
84
+ if (!(unwrappedSubtype instanceof TypeIdentifier) || !(unwrappedParent instanceof TypeIdentifier)) {
85
+ return false;
86
+ }
87
+
88
+ const resolutions =
89
+ namespace.parent.subtypes.get(unwrappedSubtype.name, unwrappedSubtype.namespace) ??
90
+ new TwoKeyMap<string, string, boolean>();
91
+ const resolution = resolutions.get(unwrappedParent.name, unwrappedParent.namespace);
92
+
93
+ if (typeof resolution === "boolean") {
94
+ return resolution;
95
+ }
96
+
97
+ const resolved = resolveTypeIdentifier(namespace, unwrappedSubtype);
98
+
99
+ if (!resolved) {
100
+ return false;
101
+ }
102
+ const parentResolution = resolved.resolveParents();
103
+
104
+ // This checks that the two types have the same form, regardless of identifier (e.g. A | null and B | null)
105
+ const isStructurallySubtype = potentialSubtype.rewrap(AnyType).equals(parentType.rewrap(AnyType));
106
+
107
+ const isSubtype =
108
+ isStructurallySubtype &&
109
+ parentResolution.node.someParent((t: IntrospectedBaseClass) => t.getType().equals(unwrappedParent));
110
+
111
+ resolutions.set(unwrappedParent.name, unwrappedParent.namespace, isSubtype);
112
+
113
+ namespace.parent.subtypes.set(unwrappedSubtype.name, unwrappedSubtype.namespace, resolutions);
114
+
115
+ return isSubtype;
116
+ }