@bscotch/gml-parser 1.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/LICENSE.md +29 -0
  2. package/README.md +151 -0
  3. package/assets/GmlSpec.xml +11419 -0
  4. package/dist/index.d.ts +16 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +13 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/jsdoc.d.ts +79 -0
  9. package/dist/jsdoc.d.ts.map +1 -0
  10. package/dist/jsdoc.feather.d.ts +23 -0
  11. package/dist/jsdoc.feather.d.ts.map +1 -0
  12. package/dist/jsdoc.feather.js +143 -0
  13. package/dist/jsdoc.feather.js.map +1 -0
  14. package/dist/jsdoc.js +468 -0
  15. package/dist/jsdoc.js.map +1 -0
  16. package/dist/jsdoc.test.d.ts +2 -0
  17. package/dist/jsdoc.test.d.ts.map +1 -0
  18. package/dist/jsdoc.test.js +185 -0
  19. package/dist/jsdoc.test.js.map +1 -0
  20. package/dist/lexer.d.ts +3 -0
  21. package/dist/lexer.d.ts.map +1 -0
  22. package/dist/lexer.js +14 -0
  23. package/dist/lexer.js.map +1 -0
  24. package/dist/lexer.test.d.ts +2 -0
  25. package/dist/lexer.test.d.ts.map +1 -0
  26. package/dist/lexer.test.js +78 -0
  27. package/dist/lexer.test.js.map +1 -0
  28. package/dist/lib.objects.d.ts +190 -0
  29. package/dist/lib.objects.d.ts.map +1 -0
  30. package/dist/lib.objects.js +242 -0
  31. package/dist/lib.objects.js.map +1 -0
  32. package/dist/logger.d.ts +13 -0
  33. package/dist/logger.d.ts.map +1 -0
  34. package/dist/logger.js +14 -0
  35. package/dist/logger.js.map +1 -0
  36. package/dist/modules.d.ts +19 -0
  37. package/dist/modules.d.ts.map +1 -0
  38. package/dist/modules.js +320 -0
  39. package/dist/modules.js.map +1 -0
  40. package/dist/modules.test.d.ts +2 -0
  41. package/dist/modules.test.d.ts.map +1 -0
  42. package/dist/modules.test.js +57 -0
  43. package/dist/modules.test.js.map +1 -0
  44. package/dist/modules.types.d.ts +78 -0
  45. package/dist/modules.types.d.ts.map +1 -0
  46. package/dist/modules.types.js +2 -0
  47. package/dist/modules.types.js.map +1 -0
  48. package/dist/modules.util.d.ts +5 -0
  49. package/dist/modules.util.d.ts.map +1 -0
  50. package/dist/modules.util.js +13 -0
  51. package/dist/modules.util.js.map +1 -0
  52. package/dist/parser.d.ts +121 -0
  53. package/dist/parser.d.ts.map +1 -0
  54. package/dist/parser.js +571 -0
  55. package/dist/parser.js.map +1 -0
  56. package/dist/parser.test.d.ts +2 -0
  57. package/dist/parser.test.d.ts.map +1 -0
  58. package/dist/parser.test.js +143 -0
  59. package/dist/parser.test.js.map +1 -0
  60. package/dist/parser.utility.d.ts +29 -0
  61. package/dist/parser.utility.d.ts.map +1 -0
  62. package/dist/parser.utility.js +125 -0
  63. package/dist/parser.utility.js.map +1 -0
  64. package/dist/project.asset.d.ts +115 -0
  65. package/dist/project.asset.d.ts.map +1 -0
  66. package/dist/project.asset.js +802 -0
  67. package/dist/project.asset.js.map +1 -0
  68. package/dist/project.code.d.ts +130 -0
  69. package/dist/project.code.d.ts.map +1 -0
  70. package/dist/project.code.js +570 -0
  71. package/dist/project.code.js.map +1 -0
  72. package/dist/project.d.ts +533 -0
  73. package/dist/project.d.ts.map +1 -0
  74. package/dist/project.diagnostics.d.ts +32 -0
  75. package/dist/project.diagnostics.d.ts.map +1 -0
  76. package/dist/project.diagnostics.js +23 -0
  77. package/dist/project.diagnostics.js.map +1 -0
  78. package/dist/project.js +1216 -0
  79. package/dist/project.js.map +1 -0
  80. package/dist/project.location.d.ts +133 -0
  81. package/dist/project.location.d.ts.map +1 -0
  82. package/dist/project.location.js +219 -0
  83. package/dist/project.location.js.map +1 -0
  84. package/dist/project.native.d.ts +26 -0
  85. package/dist/project.native.d.ts.map +1 -0
  86. package/dist/project.native.js +321 -0
  87. package/dist/project.native.js.map +1 -0
  88. package/dist/project.spec.d.ts +1298 -0
  89. package/dist/project.spec.d.ts.map +1 -0
  90. package/dist/project.spec.js +263 -0
  91. package/dist/project.spec.js.map +1 -0
  92. package/dist/project.test.d.ts +2 -0
  93. package/dist/project.test.d.ts.map +1 -0
  94. package/dist/project.test.js +633 -0
  95. package/dist/project.test.js.map +1 -0
  96. package/dist/shaderDefaults.d.ts +3 -0
  97. package/dist/shaderDefaults.d.ts.map +1 -0
  98. package/dist/shaderDefaults.js +32 -0
  99. package/dist/shaderDefaults.js.map +1 -0
  100. package/dist/signifiers.d.ts +54 -0
  101. package/dist/signifiers.d.ts.map +1 -0
  102. package/dist/signifiers.flags.d.ts +38 -0
  103. package/dist/signifiers.flags.d.ts.map +1 -0
  104. package/dist/signifiers.flags.js +131 -0
  105. package/dist/signifiers.flags.js.map +1 -0
  106. package/dist/signifiers.js +117 -0
  107. package/dist/signifiers.js.map +1 -0
  108. package/dist/spine.d.ts +28 -0
  109. package/dist/spine.d.ts.map +1 -0
  110. package/dist/spine.js +64 -0
  111. package/dist/spine.js.map +1 -0
  112. package/dist/spine.test.d.ts +2 -0
  113. package/dist/spine.test.d.ts.map +1 -0
  114. package/dist/spine.test.js +420 -0
  115. package/dist/spine.test.js.map +1 -0
  116. package/dist/spine.types.d.ts +89 -0
  117. package/dist/spine.types.d.ts.map +1 -0
  118. package/dist/spine.types.js +2 -0
  119. package/dist/spine.types.js.map +1 -0
  120. package/dist/test.lib.d.ts +3 -0
  121. package/dist/test.lib.d.ts.map +1 -0
  122. package/dist/test.lib.js +16 -0
  123. package/dist/test.lib.js.map +1 -0
  124. package/dist/tokens.categories.d.ts +22 -0
  125. package/dist/tokens.categories.d.ts.map +1 -0
  126. package/dist/tokens.categories.js +78 -0
  127. package/dist/tokens.categories.js.map +1 -0
  128. package/dist/tokens.code.d.ts +2 -0
  129. package/dist/tokens.code.d.ts.map +1 -0
  130. package/dist/tokens.code.js +523 -0
  131. package/dist/tokens.code.js.map +1 -0
  132. package/dist/tokens.d.ts +130 -0
  133. package/dist/tokens.d.ts.map +1 -0
  134. package/dist/tokens.js +13 -0
  135. package/dist/tokens.js.map +1 -0
  136. package/dist/tokens.lib.d.ts +15 -0
  137. package/dist/tokens.lib.d.ts.map +1 -0
  138. package/dist/tokens.lib.js +12 -0
  139. package/dist/tokens.lib.js.map +1 -0
  140. package/dist/tokens.shared.d.ts +4 -0
  141. package/dist/tokens.shared.d.ts.map +1 -0
  142. package/dist/tokens.shared.js +35 -0
  143. package/dist/tokens.shared.js.map +1 -0
  144. package/dist/tokens.strings.d.ts +5 -0
  145. package/dist/tokens.strings.d.ts.map +1 -0
  146. package/dist/tokens.strings.js +111 -0
  147. package/dist/tokens.strings.js.map +1 -0
  148. package/dist/types.checks.d.ts +50 -0
  149. package/dist/types.checks.d.ts.map +1 -0
  150. package/dist/types.checks.js +246 -0
  151. package/dist/types.checks.js.map +1 -0
  152. package/dist/types.d.ts +152 -0
  153. package/dist/types.d.ts.map +1 -0
  154. package/dist/types.feather.d.ts +21 -0
  155. package/dist/types.feather.d.ts.map +1 -0
  156. package/dist/types.feather.js +156 -0
  157. package/dist/types.feather.js.map +1 -0
  158. package/dist/types.hover.d.ts +4 -0
  159. package/dist/types.hover.d.ts.map +1 -0
  160. package/dist/types.hover.js +99 -0
  161. package/dist/types.hover.js.map +1 -0
  162. package/dist/types.js +457 -0
  163. package/dist/types.js.map +1 -0
  164. package/dist/types.primitives.d.ts +10 -0
  165. package/dist/types.primitives.d.ts.map +1 -0
  166. package/dist/types.primitives.js +88 -0
  167. package/dist/types.primitives.js.map +1 -0
  168. package/dist/types.sprites.d.ts +8 -0
  169. package/dist/types.sprites.d.ts.map +1 -0
  170. package/dist/types.sprites.js +417 -0
  171. package/dist/types.sprites.js.map +1 -0
  172. package/dist/types.test.d.ts +2 -0
  173. package/dist/types.test.d.ts.map +1 -0
  174. package/dist/types.test.js +62 -0
  175. package/dist/types.test.js.map +1 -0
  176. package/dist/util.d.ts +50 -0
  177. package/dist/util.d.ts.map +1 -0
  178. package/dist/util.js +168 -0
  179. package/dist/util.js.map +1 -0
  180. package/dist/util.test.d.ts +3 -0
  181. package/dist/util.test.d.ts.map +1 -0
  182. package/dist/util.test.js +63 -0
  183. package/dist/util.test.js.map +1 -0
  184. package/dist/visitor.assign.d.ts +24 -0
  185. package/dist/visitor.assign.d.ts.map +1 -0
  186. package/dist/visitor.assign.js +112 -0
  187. package/dist/visitor.assign.js.map +1 -0
  188. package/dist/visitor.d.ts +89 -0
  189. package/dist/visitor.d.ts.map +1 -0
  190. package/dist/visitor.functionExpression.d.ts +7 -0
  191. package/dist/visitor.functionExpression.d.ts.map +1 -0
  192. package/dist/visitor.functionExpression.js +216 -0
  193. package/dist/visitor.functionExpression.js.map +1 -0
  194. package/dist/visitor.globals.d.ts +59 -0
  195. package/dist/visitor.globals.d.ts.map +1 -0
  196. package/dist/visitor.globals.js +271 -0
  197. package/dist/visitor.globals.js.map +1 -0
  198. package/dist/visitor.identifierAccessor.d.ts +6 -0
  199. package/dist/visitor.identifierAccessor.d.ts.map +1 -0
  200. package/dist/visitor.identifierAccessor.js +381 -0
  201. package/dist/visitor.identifierAccessor.js.map +1 -0
  202. package/dist/visitor.js +605 -0
  203. package/dist/visitor.js.map +1 -0
  204. package/dist/visitor.processor.d.ts +66 -0
  205. package/dist/visitor.processor.d.ts.map +1 -0
  206. package/dist/visitor.processor.js +147 -0
  207. package/dist/visitor.processor.js.map +1 -0
  208. package/package.json +63 -0
@@ -0,0 +1,246 @@
1
+ import { arrayWrapped, isArray } from '@bscotch/utility';
2
+ import { Type, TypeStore } from './types.js';
3
+ export function isTypeOfKind(item, kind) {
4
+ return isTypeInstance(item) && item.kind === kind;
5
+ }
6
+ export function isTypeStoreOfKind(item, kind) {
7
+ return isTypeStore(item) && item.kind === kind;
8
+ }
9
+ export function isTypeOrStoreOfKind(item, kind) {
10
+ return isTypeOfKind(item, kind) || isTypeStoreOfKind(item, kind);
11
+ }
12
+ /**
13
+ * Given some kind of type collection, find the first one matching
14
+ * a given kind.
15
+ */
16
+ export function getTypeOfKind(from, kind) {
17
+ if (!from)
18
+ return undefined;
19
+ const types = getTypes(from);
20
+ const kinds = arrayWrapped(kind);
21
+ return types.find((t) => kinds.includes(t.kind));
22
+ }
23
+ export function getTypesOfKind(from, kind) {
24
+ if (!from)
25
+ return [];
26
+ const types = getTypes(from);
27
+ const kinds = arrayWrapped(kind);
28
+ return types.filter((t) => kinds.includes(t.kind));
29
+ }
30
+ /** Get the typestore of item, if present. Else get the type on item. */
31
+ export function getTypeStoreOrType(item) {
32
+ if (isArray(item)) {
33
+ return item;
34
+ }
35
+ if (item.$tag === 'Sym') {
36
+ return item.type;
37
+ }
38
+ else if (item.$tag === 'TypeStore') {
39
+ return item;
40
+ }
41
+ return arrayWrapped(item);
42
+ }
43
+ export function getTypes(items) {
44
+ const types = [];
45
+ if (!items) {
46
+ return types;
47
+ }
48
+ for (const item of arrayWrapped(items)) {
49
+ if (item.$tag === 'Sym') {
50
+ types.push(...item.type.type);
51
+ }
52
+ else if (item.$tag === 'TypeStore') {
53
+ return [...item.type];
54
+ }
55
+ else {
56
+ types.push(item);
57
+ }
58
+ }
59
+ return types;
60
+ }
61
+ export function isTypeInstance(item) {
62
+ return item && '$tag' in item && item.$tag === 'Type';
63
+ }
64
+ export function isTypeStore(item) {
65
+ return item && '$tag' in item && item.$tag === 'TypeStore';
66
+ }
67
+ /**
68
+ * Returns `true` if `narrowed` is a subtype of `type`,
69
+ * meaning that it is a subset/narrowed/compatible/same type
70
+ * compared to otherType.
71
+ *
72
+ * Identical types also return `true`.
73
+ */
74
+ export function narrows(narrowType, broadType) {
75
+ // Convert to type arrays
76
+ const narrowTypes = getTypes(narrowType);
77
+ const broadTypes = getTypes(broadType);
78
+ // All "narrow" types must be a subtype of at least one "broad" type
79
+ return narrowTypes.every((narrow) => broadTypes.some((broad) => narrowsType(narrow, broad)));
80
+ }
81
+ /**
82
+ * Returns `true` if `narrowed` is a subtype of `type`,
83
+ * meaning that it is a subset/narrowed/compatible/same type
84
+ * compared to otherType.
85
+ *
86
+ * Identical types also return `true`.
87
+ */
88
+ function narrowsType(narrowType, broadType) {
89
+ if (narrowType === broadType) {
90
+ return true;
91
+ }
92
+ if (['Mixed', 'Any', 'Unknown'].includes(broadType.kind) ||
93
+ ['Mixed', 'Any'].includes(narrowType.kind)) {
94
+ // Then everyone is satisfied all of the time
95
+ return true;
96
+ }
97
+ if (broadType.kind !== narrowType.kind) {
98
+ return false;
99
+ }
100
+ // The subtype must have all of the same members, though it could also have others
101
+ for (const member of broadType.listMembers()) {
102
+ const matching = narrowType.getMember(member.name);
103
+ if (!matching) {
104
+ return false;
105
+ }
106
+ }
107
+ // Similarly, the subtype must have the same params (though it could have others)
108
+ for (const param of broadType.listParameters()) {
109
+ const matching = !param || narrowType.getParameter(param.idx);
110
+ if (!matching) {
111
+ return false;
112
+ }
113
+ }
114
+ // Check return type
115
+ if (broadType.returns &&
116
+ (!narrowType.returns || !narrows(narrowType.returns, broadType.returns))) {
117
+ return false;
118
+ }
119
+ // Check the constructs type
120
+ if (broadType.isConstructor &&
121
+ (!narrowType.isConstructor || !narrows(narrowType.self, broadType.self))) {
122
+ return false;
123
+ }
124
+ return true;
125
+ }
126
+ /**
127
+ * For types inferred from expressions, normalize away utility
128
+ * types like `InstanceType` and `ObjectType`, and perform any
129
+ * other type-normalization tasks. Returns a new TypeStore, so
130
+ * if maintaining reference links is essential this function should
131
+ * not be used.
132
+ */
133
+ export function normalizeType(inferred, knownTypes) {
134
+ const normalized = new TypeStore();
135
+ type: for (const type of getTypes(inferred)) {
136
+ if (type.kind === 'EnumMember') {
137
+ normalized.addType(type.signifier?.parent || type);
138
+ continue;
139
+ }
140
+ else {
141
+ for (const [utilityKind, defaultItemKind] of [
142
+ ['InstanceType', 'Id.Instance'],
143
+ ['ObjectType', 'Asset.GMObject'],
144
+ ['StaticType', 'Struct'],
145
+ ]) {
146
+ if (type.kind !== utilityKind)
147
+ continue;
148
+ if (!type.items?.type.length) {
149
+ normalized.addType(knownTypes.get(defaultItemKind) || new Type(defaultItemKind));
150
+ }
151
+ for (const itemType of getTypes(type.items || [])) {
152
+ // Try to convert the type.
153
+ const name = itemType.name
154
+ ? `${defaultItemKind}.${itemType.name}`
155
+ : defaultItemKind;
156
+ let type = knownTypes.get(name) ||
157
+ knownTypes.get(defaultItemKind) ||
158
+ new Type(defaultItemKind);
159
+ if (itemType.isGeneric) {
160
+ // Then extend the type to allow having a generic without mutating the original
161
+ type = type.derive().genericize().named(itemType.name);
162
+ }
163
+ if (utilityKind === 'StaticType') {
164
+ // TODO: Create a new type consisting of the type's static members
165
+ type = Type.Struct;
166
+ for (const member of itemType.listMembers()) {
167
+ if (member.static) {
168
+ type.addMember(member);
169
+ }
170
+ }
171
+ }
172
+ normalized.addType(type);
173
+ }
174
+ continue type; // so that the fall-through only happens if we didn't find a match
175
+ }
176
+ }
177
+ normalized.addType(type);
178
+ }
179
+ return normalized;
180
+ }
181
+ /**
182
+ * Given an expected type that might include generics, and an inferred
183
+ * type that should map onto it, update a generics map linking generics
184
+ * to inferred types by name.
185
+ */
186
+ export function updateGenericsMap(expected, inferred, knownTypes,
187
+ /** Map of generics by name to their *inferred type* */
188
+ generics = new Map()) {
189
+ const expectedTypes = getTypes(expected)
190
+ .map((t) => normalizeType(t, knownTypes).type)
191
+ .flat();
192
+ const inferredTypes = getTypes(inferred)
193
+ .map((t) => normalizeType(t, knownTypes).type)
194
+ .flat();
195
+ // The collection of 1 or more expected types is supposed
196
+ // to match up with the collection of 1 or more inferred types.
197
+ // For the overlap of compatible types we need to recurse through
198
+ // the types and their contained types (stored on the `items` property)
199
+ // to identify any generics specified in the expected types that we
200
+ // can resolve with the inferred types.
201
+ for (const expectedType of expectedTypes) {
202
+ let generic;
203
+ if (expectedType.isGeneric) {
204
+ const genericName = expectedType.name;
205
+ generic = generics.get(genericName) || new TypeStore();
206
+ generics.set(genericName, generic);
207
+ }
208
+ for (const inferredType of inferredTypes) {
209
+ if (narrowsType(inferredType, expectedType)) {
210
+ if (generic) {
211
+ // Then we can use this inferred type to resolve the generic
212
+ generic.addType(inferredType);
213
+ }
214
+ // Repeat on contained types, if there are any
215
+ if (inferredType.items?.hasTypes && expectedType.items?.hasTypes) {
216
+ updateGenericsMap(expectedType.items, inferredType.items, knownTypes, generics);
217
+ }
218
+ }
219
+ }
220
+ }
221
+ return generics;
222
+ }
223
+ export function replaceGenerics(startingType, knownTypes, generics) {
224
+ const startingTypes = getTypes(startingType);
225
+ // Recurse through the types and, if we find a generic, replace it!
226
+ // The complication is that we don't want to mutate the starting types, we need to replace them (or their containers!) with a new type. The easiest way to do this is to just create new types from the jump.
227
+ const replacedTypes = new TypeStore();
228
+ for (const startingType of startingTypes) {
229
+ const newTypes = startingType.isGeneric && generics.has(startingType.name)
230
+ ? generics.get(startingType.name)?.type
231
+ : [startingType];
232
+ for (const type of newTypes || []) {
233
+ const newType = type.derive();
234
+ if (type.items) {
235
+ newType.items = replaceGenerics(type.items, knownTypes, generics);
236
+ }
237
+ replacedTypes.addType(newType);
238
+ }
239
+ }
240
+ // Remove 'Any' types if there is something more specific
241
+ if (replacedTypes.type.find((t) => t.kind !== 'Any')) {
242
+ replacedTypes.type = replacedTypes.type.filter((t) => t.kind !== 'Any');
243
+ }
244
+ return replacedTypes;
245
+ }
246
+ //# sourceMappingURL=types.checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.checks.js","sourceRoot":"","sources":["../src/types.checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ import { Flags } from './signifiers.flags.js';
2
+ import { Signifier } from './signifiers.js';
3
+ import { type KnownOrGenerics, type KnownTypesMap } from './types.feather.js';
4
+ import { PrimitiveName, withableTypes } from './types.primitives.js';
5
+ export type AnyType = Type<'Any'>;
6
+ export type ArrayType = Type<'Array'>;
7
+ export type BoolType = Type<'Bool'>;
8
+ export type EnumType = Type<'Enum'>;
9
+ export type FunctionType = Type<'Function'>;
10
+ export type PointerType = Type<'Pointer'>;
11
+ export type RealType = Type<'Real'>;
12
+ export type StringType = Type<'String'>;
13
+ export type StructType = Type<'Struct'>;
14
+ export type UndefinedType = Type<'Undefined'>;
15
+ export type UnknownType = Type<'Unknown'>;
16
+ export type WithableType = Type<(typeof withableTypes)[number]>;
17
+ /**
18
+ * A stable entity that represents a type. It should be used
19
+ * as the referenced container for any type information, so
20
+ * that the types can be changed within the container without
21
+ * breaking references.
22
+ */
23
+ export declare class TypeStore<T extends PrimitiveName = PrimitiveName> extends Flags {
24
+ readonly $tag = "TypeStore";
25
+ protected _types: Type<T>[];
26
+ constructor();
27
+ /** If this store has only one type, its kind. Else throws. */
28
+ get kind(): "Array" | "Bool" | "Enum" | "Function" | "Pointer" | "Real" | "String" | "Struct" | "Undefined" | "ArgumentIdentity" | "Any" | "Asset.GMAnimCurve" | "Asset.GMAudioGroup" | "Asset.GMFont" | "Asset.GMObject" | "Asset.GMParticleSystem" | "Asset.GMPath" | "Asset.GMRoom" | "Asset.GMScript" | "Asset.GMSequence" | "Asset.GMShader" | "Asset.GMSound" | "Asset.GMSprite" | "Asset.GMTileSet" | "Asset.GMTimeline" | "Asset.Script" | "Id.AudioEmitter" | "Id.AudioListener" | "Id.AudioSyncGroup" | "Id.BackgroundElement" | "Id.BinaryFile" | "Id.Buffer" | "Id.Camera" | "Id.DsGrid" | "Id.DsList" | "Id.DsMap" | "Id.DsPriority" | "Id.DsQueue" | "Id.DsStack" | "Id.ExternalCall" | "Id.Gif" | "Id.Instance" | "Id.Layer" | "Id.MpGrid" | "Id.ParticleEmitter" | "Id.ParticleSystem" | "Id.ParticleType" | "Id.PhysicsIndex" | "Id.PhysicsParticleGroup" | "Id.Sampler" | "Id.SequenceElement" | "Id.Socket" | "Id.Sound" | "Id.SpriteElement" | "Id.Surface" | "Id.TextFile" | "Id.Texture" | "Id.TileElementId" | "Id.TileMapElement" | "Id.TimeSource" | "Id.Uniform" | "Id.VertexBuffer" | "Id.VertexFormat" | "Mixed" | "EnumMember" | "Unknown" | "Never" | "InstanceType" | "ObjectType" | "StaticType";
29
+ get type(): Type<T>[];
30
+ set type(types: Type<T> | Type<T>[] | undefined);
31
+ get hasTypes(): boolean;
32
+ get constructs(): StructType[];
33
+ get items(): TypeStore[];
34
+ get returns(): TypeStore[];
35
+ /**
36
+ * Should be used sparingly, since it means we're adding types in multiple steps instead of all at once.
37
+ */
38
+ addType(type: Type<T> | Type<T>[]): this;
39
+ narrows(other: TypeStore | Type | Type[]): boolean;
40
+ toFeatherString(): string;
41
+ }
42
+ export declare class Type<T extends PrimitiveName = PrimitiveName> {
43
+ protected _kind: T;
44
+ readonly $tag = "Type";
45
+ name: string | undefined;
46
+ description: string | undefined;
47
+ /** Signifiers associated with this type. */
48
+ _signifier: Signifier | undefined;
49
+ /**
50
+ * If set, then this Type is treated as a subset of the parent.
51
+ * It will only "match" another type if that type is in its
52
+ * parent somewhere. Useful for struct/constructor inheritence, as well
53
+ * as for e.g. representing a subset of Real constants in a type. */
54
+ protected _extends: Type | undefined;
55
+ protected _derived: Set<Type> | undefined;
56
+ protected flags: number;
57
+ /** Named members of Structs and Enums */
58
+ protected _members: Map<string, Signifier> | undefined;
59
+ /** Types of the items found in arrays and various ds types, or the fallback type found in Structs */
60
+ items: TypeStore | undefined;
61
+ /**
62
+ * For functions, the local variables declared within the function.
63
+ * A subset of these will be parameters, which are also signifiers.
64
+ */
65
+ local: Type<'Struct'> | undefined;
66
+ /**
67
+ * If this is a constructor function, then this is the
68
+ * type of the struct that it constructs.
69
+ * Otherwise it's the self-context of the function */
70
+ self: WithableType | undefined;
71
+ returns: TypeStore | undefined;
72
+ constructor(_kind: T);
73
+ protected setFlag(flag: number, value: boolean): void;
74
+ protected getFlag(flag: number): boolean;
75
+ /**
76
+ * Native and primitive types are typically read-only once
77
+ * they've been defined. This property should be set once a type
78
+ * is intended to be immutable.
79
+ */
80
+ get isReadonly(): boolean;
81
+ set isReadonly(value: boolean);
82
+ /**
83
+ * If this is a type used as a generic, then this will be true
84
+ */
85
+ get isGeneric(): boolean;
86
+ set isGeneric(value: boolean);
87
+ get isConstructor(): boolean;
88
+ set isConstructor(value: boolean);
89
+ get kind(): PrimitiveName;
90
+ set kind(newKind: PrimitiveName);
91
+ get signifier(): Signifier | undefined;
92
+ set signifier(signifier: Signifier);
93
+ get extends(): Type | undefined;
94
+ set extends(type: Type | undefined);
95
+ listDerived(recursive?: boolean): Type[];
96
+ get canBeSelf(): boolean;
97
+ /** If this type narrows `other` type, returns `true` */
98
+ narrows(other: Type | Type[] | TypeStore): boolean;
99
+ /** Get this type as a Feather-compatible string */
100
+ toFeatherString(): string;
101
+ get code(): string;
102
+ get details(): string;
103
+ get isFunction(): boolean;
104
+ setReturnType(type: Type | TypeStore | (Type | TypeStore)[]): this;
105
+ /** Prefer `setReturnType` where possible */
106
+ addReturnType(type: Type | Type[]): this;
107
+ listParameters(): (Signifier | undefined)[];
108
+ getParameter(name: string): Signifier | undefined;
109
+ getParameter(idx: number): Signifier | undefined;
110
+ /** A parameter is a special type of local variable. */
111
+ addParameter(idx: number, nameOrParam: string | Signifier, options?: {
112
+ type?: Type | Type[];
113
+ optional?: boolean;
114
+ }): Signifier;
115
+ truncateParameters(count: number): void;
116
+ totalMembers(excludeParents?: boolean): number;
117
+ listMembers(excludeParents?: boolean): Signifier[];
118
+ getMember(name: string, excludeParents?: boolean): Signifier | undefined;
119
+ /** For container types that have named members, like Structs and Enums */
120
+ addMember(newMember: Signifier | string, options?: {
121
+ type?: Type | Type[];
122
+ writable?: boolean;
123
+ override?: boolean;
124
+ }): Signifier | undefined;
125
+ protected replaceMemberInChildren(member: Signifier): void;
126
+ removeMember(name: string): void;
127
+ /**
128
+ * For container types that have non-named members, like arrays and DsTypes.
129
+ * Can also be used for default Struct values. */
130
+ addItemType(type: Type): this;
131
+ /**
132
+ * For container types that have non-named members, like arrays and DsTypes.
133
+ * Can also be used for default Struct values. */
134
+ setItemType(type: Type): this;
135
+ /**
136
+ * Create a derived type: of the same kind, pointing to
137
+ * this type as its parent. */
138
+ derive(): Type<T>;
139
+ named(name: string | undefined): this;
140
+ describe(description: string | undefined): this;
141
+ genericize(): this;
142
+ /** Given a Feather-compatible type string, get a fully parsed type. */
143
+ static fromFeatherString(typeString: string, knownTypes: KnownTypesMap | KnownOrGenerics[], addMissing: boolean): Type[];
144
+ static get Any(): Type<"Any">;
145
+ static get Real(): Type<"Real">;
146
+ static get String(): Type<"String">;
147
+ static get Bool(): Type<"Bool">;
148
+ static get Undefined(): Type<"Undefined">;
149
+ static get Struct(): Type<"Struct">;
150
+ static get Function(): Type<"Function">;
151
+ }
152
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type FeatherType, type FeatherTypeUnion } from './jsdoc.feather.js';
2
+ import type { JsdocSummary } from './jsdoc.js';
3
+ import { Type } from './types.js';
4
+ export type KnownTypesMap = Map<string, Type>;
5
+ export type GenericsMap = Record<string, Type[]>;
6
+ export type KnownOrGenerics = KnownTypesMap | GenericsMap;
7
+ export declare function typeFromFeatherString(typeString: string, knownTypes: KnownTypesMap | KnownOrGenerics[], addMissing: boolean): Type[];
8
+ /**
9
+ * Given a type identifier, get a parsed Type instance. Useful for
10
+ * the "leaves" of a type tree, e.g. "String" or "Struct.Mystruct".
11
+ * Only creates primitive types, e.g. "Struct.MyStruct" will return
12
+ * a plain `Type<"Struct">` instance.
13
+ *
14
+ * When knownTypes are provided, will return a known type by exact
15
+ * identifier match if it exists. Otherwise a new type instance will
16
+ * be created *and added to the knownTypes map*.
17
+ */
18
+ export declare function typeFromIdentifier(identifier: string, knownTypes: KnownTypesMap | KnownOrGenerics[], addMissing: boolean, __isRootRequest?: boolean): Type;
19
+ export declare function typeFromParsedJsdocs(jsdoc: JsdocSummary, knownTypes: Map<string, Type>, addMissing: boolean): Type[];
20
+ export declare function typeFromParsedFeatherString(node: FeatherTypeUnion | FeatherType, knownTypes: KnownTypesMap | KnownOrGenerics[], addMissing: boolean): Type[];
21
+ //# sourceMappingURL=types.feather.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.feather.d.ts","sourceRoot":"","sources":["../src/types.feather.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIlC,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,WAAW,CAAC;AAqB1D,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,aAAa,GAAG,eAAe,EAAE,EAC7C,UAAU,EAAE,OAAO,GAClB,IAAI,EAAE,CAGR;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,aAAa,GAAG,eAAe,EAAE,EAC7C,UAAU,EAAE,OAAO,EACnB,eAAe,UAAO,GACrB,IAAI,CA4CN;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAC7B,UAAU,EAAE,OAAO,GAClB,IAAI,EAAE,CA2ER;AACD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,gBAAgB,GAAG,WAAW,EACpC,UAAU,EAAE,aAAa,GAAG,eAAe,EAAE,EAC7C,UAAU,EAAE,OAAO,GAClB,IAAI,EAAE,CAyCR"}
@@ -0,0 +1,156 @@
1
+ import { arrayWrapped } from '@bscotch/utility';
2
+ import { parseFeatherTypeString, } from './jsdoc.feather.js';
3
+ import { Type } from './types.js';
4
+ import { primitiveNames } from './types.primitives.js';
5
+ import { ok } from './util.js';
6
+ function findInKnownOrGenerics(identifier, knownTypes) {
7
+ const collections = arrayWrapped(knownTypes);
8
+ for (const collection of collections) {
9
+ let found;
10
+ if (collection instanceof Map) {
11
+ found = collection.get(identifier);
12
+ }
13
+ else {
14
+ found = collection[identifier];
15
+ }
16
+ if (found) {
17
+ return arrayWrapped(found);
18
+ }
19
+ }
20
+ return;
21
+ }
22
+ export function typeFromFeatherString(typeString, knownTypes, addMissing) {
23
+ const parsed = parseFeatherTypeString(typeString);
24
+ return typeFromParsedFeatherString(parsed, knownTypes, addMissing);
25
+ }
26
+ /**
27
+ * Given a type identifier, get a parsed Type instance. Useful for
28
+ * the "leaves" of a type tree, e.g. "String" or "Struct.Mystruct".
29
+ * Only creates primitive types, e.g. "Struct.MyStruct" will return
30
+ * a plain `Type<"Struct">` instance.
31
+ *
32
+ * When knownTypes are provided, will return a known type by exact
33
+ * identifier match if it exists. Otherwise a new type instance will
34
+ * be created *and added to the knownTypes map*.
35
+ */
36
+ export function typeFromIdentifier(identifier, knownTypes, addMissing, __isRootRequest = true) {
37
+ ok(identifier.match(/^[A-Z][A-Z0-9._]*$/i), `Invalid type name ${identifier}`);
38
+ const normalizedName = identifier?.toLocaleLowerCase?.();
39
+ const isObjectType = ['asset.gmobject', 'id.instance'].includes(normalizedName);
40
+ const knownType = findInKnownOrGenerics(identifier, knownTypes)?.[0];
41
+ if (knownType && isObjectType) {
42
+ // Need a derived type to prevent mutation of the parent!
43
+ return knownType.derive();
44
+ }
45
+ else if (knownType) {
46
+ return knownType;
47
+ }
48
+ const primitiveType = primitiveNames.find((n) => n?.toLocaleLowerCase?.() === normalizedName);
49
+ if (primitiveType) {
50
+ return new Type(primitiveType);
51
+ }
52
+ if (identifier.match(/\./)) {
53
+ // Then we might still be able to get a base type.
54
+ const [baseType, ...nameParts] = identifier.split('.');
55
+ const type = typeFromIdentifier(baseType, knownTypes, addMissing, false);
56
+ if (__isRootRequest && type) {
57
+ // Then add to the known types map
58
+ const derivedTyped = type.derive().named(nameParts.join('.'));
59
+ // Types should only be auto-added when loading the native spec
60
+ if (addMissing) {
61
+ const map = arrayWrapped(knownTypes).find((collection) => collection instanceof Map);
62
+ map?.set(identifier, derivedTyped);
63
+ }
64
+ return derivedTyped;
65
+ }
66
+ return type;
67
+ }
68
+ return new Type('Undefined');
69
+ }
70
+ export function typeFromParsedJsdocs(jsdoc, knownTypes, addMissing) {
71
+ if (jsdoc.kind === 'description') {
72
+ // Then we have no type info.
73
+ return [];
74
+ }
75
+ else if (['type', 'instancevar', 'globalvar', 'localvar'].includes(jsdoc.kind)) {
76
+ // Then this was purely a type annotation. Create the type and
77
+ // add any metadata.
78
+ return typeFromFeatherString(jsdoc.type?.content || 'Any', knownTypes, addMissing);
79
+ }
80
+ else if (jsdoc.kind === 'self') {
81
+ // The self-type could be a function, in which case
82
+ // we want to use its "self" as the type instead of
83
+ // the function itself.
84
+ const matchingType = typeFromFeatherString(jsdoc.self?.content || 'Any', knownTypes, addMissing)
85
+ .map((t) => (t.kind === 'Function' ? t.self : t))
86
+ .filter((x) => !!x);
87
+ return matchingType;
88
+ }
89
+ else if (jsdoc.kind === 'function') {
90
+ const type = new Type('Function').describe(jsdoc.description);
91
+ let i = 0;
92
+ const generics = {};
93
+ for (const generic of jsdoc.templates || []) {
94
+ generics[generic.name.content] = typeFromFeatherString(generic.type?.content || 'Any', knownTypes, addMissing);
95
+ // Flag them all as generic, named after the generic name
96
+ for (const genericType of generics[generic.name.content]) {
97
+ genericType.isGeneric = true;
98
+ genericType.named(generic.name.content);
99
+ }
100
+ }
101
+ if (jsdoc.self) {
102
+ type.self = typeFromFeatherString(jsdoc.self.content, knownTypes, addMissing)[0];
103
+ }
104
+ if (jsdoc.returns && jsdoc.returns.type) {
105
+ const returnType = typeFromFeatherString(jsdoc.returns.type.content, [knownTypes, generics], addMissing);
106
+ type.addReturnType(returnType);
107
+ }
108
+ for (const param of jsdoc.params || []) {
109
+ const member = type.addParameter(i, param.name.content);
110
+ if (param.type) {
111
+ member.setType(typeFromFeatherString(param.type.content, [knownTypes, generics], addMissing));
112
+ }
113
+ i++;
114
+ member.optional = !!param.optional;
115
+ member.describe(param.description);
116
+ }
117
+ return [type];
118
+ }
119
+ return [];
120
+ }
121
+ export function typeFromParsedFeatherString(node, knownTypes, addMissing) {
122
+ if (node.kind === 'type') {
123
+ const identifier = node.name;
124
+ let type = typeFromIdentifier(identifier.content, knownTypes, addMissing);
125
+ if (node.of) {
126
+ const subtypes = typeFromParsedFeatherString(node.of, knownTypes, addMissing);
127
+ // Then we need to create a new type instead of mutating
128
+ // the one we found.
129
+ type = type.derive();
130
+ // While only some types are "containers", we can
131
+ // go ahead and add any contained types and worry
132
+ // about the consequences later. That way we don't
133
+ // need to keep updating this as we add more container
134
+ // types.
135
+ for (const subtype of subtypes) {
136
+ type.addItemType(subtype);
137
+ }
138
+ // TODO: Else create a diagnostic?
139
+ }
140
+ return [type];
141
+ }
142
+ else if (node.kind === 'union') {
143
+ const unionOf = node.types;
144
+ if (unionOf.length === 1) {
145
+ return typeFromParsedFeatherString(unionOf[0], knownTypes, addMissing);
146
+ }
147
+ const types = [];
148
+ for (const child of unionOf) {
149
+ const subtype = typeFromParsedFeatherString(child, knownTypes, addMissing);
150
+ types.push(...subtype);
151
+ }
152
+ return types;
153
+ }
154
+ throw new Error(`Unknown node type ${node['name']}`);
155
+ }
156
+ //# sourceMappingURL=types.feather.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.feather.js","sourceRoot":"","sources":["../src/types.feather.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Type } from './types.js';
2
+ export declare function typeToHoverDetails(type: Type): string;
3
+ export declare function typeToHoverText(type: Type): string;
4
+ //# sourceMappingURL=types.hover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.hover.d.ts","sourceRoot":"","sources":["../src/types.hover.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYvC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,UA0D5C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,UA4BzC"}