@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,99 @@
1
+ import { assert } from './util.js';
2
+ function typeMemberToHoverText(member) {
3
+ let code = member.name;
4
+ if (member.optional) {
5
+ code += '?';
6
+ }
7
+ code += ': ' + member.type.toFeatherString();
8
+ return code;
9
+ }
10
+ export function typeToHoverDetails(type) {
11
+ const lines = [];
12
+ if (type.isFunction) {
13
+ if (type.self) {
14
+ lines.push(`*@self* \`${type.self.toFeatherString()}\``);
15
+ }
16
+ for (const param of type.listParameters()) {
17
+ if (param?.def && param.description) {
18
+ lines.push(`*@param* \`${param.name}\` - ${param.description}`);
19
+ }
20
+ }
21
+ }
22
+ else if (type.kind === 'Struct') {
23
+ const members = type
24
+ .listMembers()
25
+ .filter((x) => x.name !== 'self' && x.def)
26
+ .sort((a, b) => {
27
+ // underscore-prefixed should be sorted last
28
+ const a_prefix_count = a.name?.match(/^_+/)?.[0]?.length || 0;
29
+ const b_prefix_count = b.name?.match(/^_+/)?.[0]?.length || 0;
30
+ if (a_prefix_count !== b_prefix_count) {
31
+ return a_prefix_count - b_prefix_count;
32
+ }
33
+ return a.name
34
+ ?.toLocaleLowerCase?.()
35
+ .localeCompare(b.name?.toLocaleLowerCase?.());
36
+ });
37
+ if (members.length) {
38
+ let code = '```ts\n{\n';
39
+ let i = 0;
40
+ for (const member of members) {
41
+ code += ` ${member.name}: ${member.type.toFeatherString()},\n`;
42
+ i++;
43
+ if (i > 19) {
44
+ code += ' // ... and more!\n';
45
+ break;
46
+ }
47
+ }
48
+ code += '}\n```';
49
+ lines.push(code);
50
+ }
51
+ }
52
+ else if (type.kind === 'Enum') {
53
+ const members = type.listMembers().filter((x) => x.def);
54
+ if (members.length) {
55
+ let code = '```ts\n{\n';
56
+ let i = 0;
57
+ for (const member of members) {
58
+ code += ` ${member.name},\n`;
59
+ i++;
60
+ if (i > 19) {
61
+ code += ' // ... and more!\n';
62
+ break;
63
+ }
64
+ }
65
+ code += '}\n```';
66
+ lines.push(code);
67
+ }
68
+ }
69
+ return lines.join('\n\n');
70
+ }
71
+ export function typeToHoverText(type) {
72
+ let code = '';
73
+ if (type.isFunction) {
74
+ code = `function ${type.name || ''}(`;
75
+ const params = type.listParameters();
76
+ for (let i = 0; i < params.length; i++) {
77
+ const param = params[i];
78
+ assert(param, 'Param is undefined');
79
+ if (i > 0) {
80
+ code += ', ';
81
+ }
82
+ code += typeMemberToHoverText(param);
83
+ }
84
+ code += ')';
85
+ if (type.isConstructor) {
86
+ code += ` constructor`;
87
+ }
88
+ code += `: ${type.isConstructor
89
+ ? type.self.toFeatherString()
90
+ : type.returns?.type.length
91
+ ? type.returns.toFeatherString()
92
+ : 'Undefined'}`;
93
+ }
94
+ else {
95
+ code += type.toFeatherString();
96
+ }
97
+ return code;
98
+ }
99
+ //# sourceMappingURL=types.hover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.hover.js","sourceRoot":"","sources":["../src/types.hover.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,457 @@
1
+ import { arrayWrapped } from '@bscotch/utility';
2
+ import { typeToFeatherString } from './jsdoc.feather.js';
3
+ import { Flags } from './signifiers.flags.js';
4
+ import { Signifier } from './signifiers.js';
5
+ import { getTypes, narrows } from './types.checks.js';
6
+ import { typeFromFeatherString, } from './types.feather.js';
7
+ import { typeToHoverDetails, typeToHoverText } from './types.hover.js';
8
+ import { assert, ok } from './util.js';
9
+ /**
10
+ * A stable entity that represents a type. It should be used
11
+ * as the referenced container for any type information, so
12
+ * that the types can be changed within the container without
13
+ * breaking references.
14
+ */
15
+ export class TypeStore extends Flags {
16
+ $tag = 'TypeStore';
17
+ _types = [];
18
+ constructor() {
19
+ super();
20
+ }
21
+ /** If this store has only one type, its kind. Else throws. */
22
+ get kind() {
23
+ if (this.type.length === 0) {
24
+ return 'Undefined';
25
+ }
26
+ else if (this.type.length > 1) {
27
+ return 'Mixed';
28
+ }
29
+ return this.type[0].kind;
30
+ }
31
+ get type() {
32
+ return [...this._types];
33
+ }
34
+ set type(types) {
35
+ this._types = arrayWrapped(types);
36
+ }
37
+ get hasTypes() {
38
+ return this._types.length > 0;
39
+ }
40
+ get constructs() {
41
+ return this.type
42
+ .map((t) => (t.isConstructor ? t.self : undefined))
43
+ .filter((x) => !!x);
44
+ }
45
+ get items() {
46
+ return this.type.map((t) => t.items).filter((x) => !!x);
47
+ }
48
+ get returns() {
49
+ return this.type.map((t) => t.returns).filter((x) => !!x);
50
+ }
51
+ /**
52
+ * Should be used sparingly, since it means we're adding types in multiple steps instead of all at once.
53
+ */
54
+ addType(type) {
55
+ this.type = [...this.type, ...arrayWrapped(type)];
56
+ return this;
57
+ }
58
+ narrows(other) {
59
+ return narrows(this, other);
60
+ }
61
+ toFeatherString() {
62
+ const typeStrings = [
63
+ ...new Set(this.type.map((t) => t.toFeatherString())),
64
+ ].sort((a, b) => a.localeCompare(b));
65
+ return typeStrings.join('|') || 'Any';
66
+ }
67
+ }
68
+ const typeFlags = {
69
+ READONLY: 1 << 0,
70
+ GENERIC: 1 << 1,
71
+ CONSTRUCTOR: 1 << 2,
72
+ };
73
+ export class Type {
74
+ _kind;
75
+ $tag = 'Type';
76
+ // Some types have names. It only counts as a name if it
77
+ // cannot be parsed into types given the name alone.
78
+ // E.g. `Array<String>` is not a name, but `Struct.MyStruct`
79
+ // results in the name `MyStruct`.
80
+ name = undefined;
81
+ description = undefined;
82
+ /** Signifiers associated with this type. */
83
+ _signifier = undefined;
84
+ /**
85
+ * If set, then this Type is treated as a subset of the parent.
86
+ * It will only "match" another type if that type is in its
87
+ * parent somewhere. Useful for struct/constructor inheritence, as well
88
+ * as for e.g. representing a subset of Real constants in a type. */
89
+ _extends = undefined;
90
+ _derived = undefined;
91
+ flags = 0;
92
+ /** Named members of Structs and Enums */
93
+ _members = undefined;
94
+ /** Types of the items found in arrays and various ds types, or the fallback type found in Structs */
95
+ items = undefined;
96
+ // Applicable to Functions
97
+ /**
98
+ * For functions, the local variables declared within the function.
99
+ * A subset of these will be parameters, which are also signifiers.
100
+ */
101
+ local = undefined;
102
+ /**
103
+ * If this is a constructor function, then this is the
104
+ * type of the struct that it constructs.
105
+ * Otherwise it's the self-context of the function */
106
+ self = undefined;
107
+ returns = undefined;
108
+ constructor(_kind) {
109
+ this._kind = _kind;
110
+ }
111
+ setFlag(flag, value) {
112
+ if (value) {
113
+ this.flags |= flag;
114
+ }
115
+ else {
116
+ this.flags &= ~flag;
117
+ }
118
+ }
119
+ getFlag(flag) {
120
+ return !!(this.flags & flag);
121
+ }
122
+ /**
123
+ * Native and primitive types are typically read-only once
124
+ * they've been defined. This property should be set once a type
125
+ * is intended to be immutable.
126
+ */
127
+ get isReadonly() {
128
+ return this.getFlag(typeFlags.READONLY);
129
+ }
130
+ set isReadonly(value) {
131
+ this.setFlag(typeFlags.READONLY, value);
132
+ }
133
+ /**
134
+ * If this is a type used as a generic, then this will be true
135
+ */
136
+ get isGeneric() {
137
+ return this.getFlag(typeFlags.GENERIC);
138
+ }
139
+ set isGeneric(value) {
140
+ this.setFlag(typeFlags.GENERIC, value);
141
+ }
142
+ get isConstructor() {
143
+ return this.getFlag(typeFlags.CONSTRUCTOR);
144
+ }
145
+ set isConstructor(value) {
146
+ this.setFlag(typeFlags.CONSTRUCTOR, value);
147
+ }
148
+ get kind() {
149
+ return this._kind;
150
+ }
151
+ set kind(newKind) {
152
+ ok(this._kind === 'Unknown' || this._kind === newKind, 'Cannot change type kind');
153
+ this._kind = newKind;
154
+ }
155
+ get signifier() {
156
+ return this._signifier || this.extends?.signifier;
157
+ }
158
+ set signifier(signifier) {
159
+ // assert(!this._signifier, 'Cannot change type signifier');
160
+ this._signifier = signifier;
161
+ }
162
+ get extends() {
163
+ return this._extends;
164
+ }
165
+ set extends(type) {
166
+ const oldParent = this._extends;
167
+ this._extends = type;
168
+ oldParent?._derived?.delete(this);
169
+ if (this._extends) {
170
+ this._extends._derived ||= new Set();
171
+ this._extends._derived.add(this);
172
+ }
173
+ }
174
+ listDerived(recursive = false) {
175
+ if (!this._derived) {
176
+ return [];
177
+ }
178
+ const derived = [...this._derived];
179
+ if (recursive) {
180
+ for (const child of this._derived) {
181
+ derived.push(...child.listDerived(true));
182
+ }
183
+ }
184
+ return derived;
185
+ }
186
+ get canBeSelf() {
187
+ return ['Struct', 'Id.Instance', 'Asset.GMObject'].includes(this.kind);
188
+ }
189
+ /** If this type narrows `other` type, returns `true` */
190
+ narrows(other) {
191
+ return narrows(this, other);
192
+ }
193
+ /** Get this type as a Feather-compatible string */
194
+ toFeatherString() {
195
+ return typeToFeatherString(this);
196
+ }
197
+ get code() {
198
+ return typeToHoverText(this);
199
+ }
200
+ get details() {
201
+ return typeToHoverDetails(this);
202
+ }
203
+ get isFunction() {
204
+ return this.kind === 'Function';
205
+ }
206
+ setReturnType(type) {
207
+ this.returns ||= new TypeStore();
208
+ const types = getTypes(type);
209
+ this.returns.type = types;
210
+ return this;
211
+ }
212
+ /** Prefer `setReturnType` where possible */
213
+ addReturnType(type) {
214
+ ok(this.isFunction, `Cannot add return type to ${this.kind}`);
215
+ this.returns ||= new TypeStore();
216
+ this.returns.addType(type);
217
+ return this;
218
+ }
219
+ listParameters() {
220
+ // Get the subset of local members that are parameters,
221
+ // and sort them by their index.
222
+ const params = this.local
223
+ ?.listMembers(true)
224
+ .filter((m) => m.parameter && typeof m.idx === 'number') || [];
225
+ // Instead of sorting by index, we want to guarantee that the index positions
226
+ // *actually match*.
227
+ const sorted = Array(params.length);
228
+ for (const param of params) {
229
+ sorted[param.idx] = param;
230
+ }
231
+ return sorted;
232
+ }
233
+ getParameter(nameOrIdx) {
234
+ const params = this.listParameters();
235
+ if (typeof nameOrIdx === 'string') {
236
+ return params.find((p) => p?.name === nameOrIdx);
237
+ }
238
+ return params[nameOrIdx];
239
+ }
240
+ /** A parameter is a special type of local variable. */
241
+ addParameter(idx, nameOrParam, options) {
242
+ assert(this.isFunction, `Cannot add param to ${this.kind} type`);
243
+ const name = typeof nameOrParam === 'string' ? nameOrParam : nameOrParam.name;
244
+ let param = this.local?.getMember(name, true);
245
+ const existingAtThisIndex = this.getParameter(idx);
246
+ // Create the signifier if we need to
247
+ if (!param) {
248
+ this.local ||= Type.Struct;
249
+ param = this.local.addMember(nameOrParam);
250
+ assert(param.parent === this.local, 'Param incorrectly added -- has the wrong parent');
251
+ }
252
+ // Handle positional conflicts. If there is a param at this index already,
253
+ // unset its index so that it doesn't conflict with this one.
254
+ if (existingAtThisIndex && existingAtThisIndex !== param) {
255
+ existingAtThisIndex.idx = undefined;
256
+ }
257
+ param.idx = idx;
258
+ param.local = true;
259
+ param.parameter = true;
260
+ param.optional = options?.optional || name === '...';
261
+ if (options?.type) {
262
+ param.setType(options.type);
263
+ }
264
+ return param;
265
+ }
266
+ truncateParameters(count) {
267
+ this.listParameters().forEach((p) => {
268
+ if (p?.idx !== undefined && p.idx >= count) {
269
+ p.idx = undefined;
270
+ }
271
+ });
272
+ }
273
+ totalMembers(excludeParents = false) {
274
+ if (this.kind === 'Id.Instance' || this.kind === 'Asset.GMObject') {
275
+ return this.extends?.totalMembers(excludeParents) || 0;
276
+ }
277
+ if (excludeParents || !this.extends) {
278
+ return this._members?.size || 0;
279
+ }
280
+ return ((this._members?.size || 0) + this.extends.totalMembers(excludeParents));
281
+ }
282
+ listMembers(excludeParents = false) {
283
+ // Handle pass-through types
284
+ if (this.kind === 'Id.Instance' || this.kind === 'Asset.GMObject') {
285
+ return this.extends?.listMembers(excludeParents) || [];
286
+ }
287
+ const members = this._members?.values() || [];
288
+ if (excludeParents || !this.extends) {
289
+ return [...members];
290
+ }
291
+ return [...members, ...this.extends.listMembers()];
292
+ }
293
+ getMember(name, excludeParents = false) {
294
+ // Handle pass-through types
295
+ if (this.kind === 'Id.Instance' || this.kind === 'Asset.GMObject') {
296
+ return this.extends?.getMember(name, excludeParents);
297
+ }
298
+ if (excludeParents) {
299
+ return this._members?.get(name);
300
+ }
301
+ return this._members?.get(name) || this.extends?.getMember(name);
302
+ }
303
+ /** For container types that have named members, like Structs and Enums */
304
+ addMember(newMember, options) {
305
+ // If this is a Id.Instance or Asset.GMObject type, then we want to add
306
+ // the member to the parent Struct instead.
307
+ if (this.kind === 'Id.Instance' || this.kind === 'Asset.GMObject') {
308
+ return this.extends?.addMember(newMember, options);
309
+ }
310
+ // If this is an immutable type, then we can't add members to it.
311
+ if (this.isReadonly) {
312
+ return;
313
+ }
314
+ const type = options?.type;
315
+ const name = typeof newMember === 'string' ? newMember : newMember.name;
316
+ const signifierArg = typeof newMember === 'string' ? undefined : newMember;
317
+ // Only add if this doesn't exist on *any parent*
318
+ const existing = this.getMember(name, false);
319
+ assert(!existing ||
320
+ !signifierArg ||
321
+ existing === signifierArg ||
322
+ signifierArg.override ||
323
+ options?.override, `Cannot replace existing member "${name}" with new member of the same name`);
324
+ const existingOnThis = this.getMember(name, true);
325
+ let member;
326
+ if (signifierArg?.override || (signifierArg && options?.override)) {
327
+ // Then we want to override the existing member
328
+ member = signifierArg;
329
+ }
330
+ else {
331
+ // Then we want to preferentially use the existing member
332
+ member = existing || signifierArg;
333
+ if (!member) {
334
+ member = new Signifier(this, name);
335
+ member.override = !!options?.override;
336
+ member.writable = options?.writable ?? true;
337
+ if (type) {
338
+ member.setType(type);
339
+ }
340
+ }
341
+ }
342
+ if (member !== existing) {
343
+ this._members ??= new Map();
344
+ // If the existing member has no def, then replace it
345
+ // and transfer its refs
346
+ if (existingOnThis) {
347
+ for (const ref of existingOnThis.refs) {
348
+ ref.item = member;
349
+ ref.isDef = false; // Definition must come from rootmost
350
+ member.refs.add(ref);
351
+ ref.file.dirty = true;
352
+ }
353
+ }
354
+ this._members.set(member.name, member);
355
+ // Ensure that all children of this parent are referencing
356
+ // the same root-most member.
357
+ this.replaceMemberInChildren(member);
358
+ }
359
+ return member;
360
+ }
361
+ replaceMemberInChildren(member) {
362
+ for (const child of this.listDerived()) {
363
+ const toReplace = child._members?.get(member.name);
364
+ if (toReplace?.override) {
365
+ // Then we skip this and all descendents of it
366
+ continue;
367
+ }
368
+ if (toReplace) {
369
+ // Remove from the child
370
+ child._members.delete(member.name);
371
+ // Inherit its refs
372
+ for (const ref of toReplace.refs) {
373
+ ref.item = member;
374
+ ref.isDef = false; // Definition must come from rootmost
375
+ member.refs.add(ref);
376
+ ref.file.dirty = true;
377
+ }
378
+ }
379
+ // Continue down the tree
380
+ child.replaceMemberInChildren(member);
381
+ }
382
+ }
383
+ removeMember(name) {
384
+ const member = this.getMember(name, true);
385
+ if (!member) {
386
+ return;
387
+ }
388
+ this._members.delete(name);
389
+ // Flag all referencing files as dirty
390
+ for (const ref of member.refs) {
391
+ ref.file.dirty = true;
392
+ }
393
+ }
394
+ /**
395
+ * For container types that have non-named members, like arrays and DsTypes.
396
+ * Can also be used for default Struct values. */
397
+ addItemType(type) {
398
+ this.items ||= new TypeStore();
399
+ this.items.addType(type);
400
+ return this;
401
+ }
402
+ /**
403
+ * For container types that have non-named members, like arrays and DsTypes.
404
+ * Can also be used for default Struct values. */
405
+ setItemType(type) {
406
+ this.items ||= new TypeStore();
407
+ this.items.type = type;
408
+ return this;
409
+ }
410
+ /**
411
+ * Create a derived type: of the same kind, pointing to
412
+ * this type as its parent. */
413
+ derive() {
414
+ const derived = new Type(this.kind);
415
+ derived.extends = this;
416
+ derived.name = this.name;
417
+ return derived;
418
+ }
419
+ named(name) {
420
+ this.name = name;
421
+ return this;
422
+ }
423
+ describe(description) {
424
+ this.description = description;
425
+ return this;
426
+ }
427
+ genericize() {
428
+ this.isGeneric = true;
429
+ return this;
430
+ }
431
+ /** Given a Feather-compatible type string, get a fully parsed type. */
432
+ static fromFeatherString(typeString, knownTypes, addMissing) {
433
+ return typeFromFeatherString(typeString, knownTypes, addMissing);
434
+ }
435
+ static get Any() {
436
+ return new Type('Any');
437
+ }
438
+ static get Real() {
439
+ return new Type('Real');
440
+ }
441
+ static get String() {
442
+ return new Type('String');
443
+ }
444
+ static get Bool() {
445
+ return new Type('Bool');
446
+ }
447
+ static get Undefined() {
448
+ return new Type('Undefined');
449
+ }
450
+ static get Struct() {
451
+ return new Type('Struct');
452
+ }
453
+ static get Function() {
454
+ return new Type('Function');
455
+ }
456
+ }
457
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type WithablePrimitiveName = (typeof withableTypes)[number];
2
+ export declare const withableTypes: readonly ["Struct", "Asset.GMObject", "Id.Instance"];
3
+ export declare const utilityTypes: readonly ["InstanceType", "ObjectType", "StaticType"];
4
+ export declare const withableTypesLower: Lowercase<WithablePrimitiveName>[];
5
+ /** Base types, like Array, Real, Struct, etc */
6
+ export type BaseName = (typeof baseNames)[number];
7
+ export declare const baseNames: readonly ["Array", "Bool", "Enum", "Function", "Pointer", "Real", "String", "Struct", "Undefined", "ArgumentIdentity"];
8
+ export type PrimitiveName = (typeof primitiveNames)[number];
9
+ export declare const primitiveNames: readonly ["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"];
10
+ //# sourceMappingURL=types.primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.primitives.d.ts","sourceRoot":"","sources":["../src/types.primitives.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AACnE,eAAO,MAAM,aAAa,sDAIhB,CAAC;AAEX,eAAO,MAAM,YAAY,uDAIf,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAE1B,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC;AAExC,gDAAgD;AAChD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAClD,eAAO,MAAM,SAAS,wHAWZ,CAAC;AAGX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5D,eAAO,MAAM,cAAc,4lCA6DjB,CAAC"}