@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,185 @@
1
+ import { undent } from '@bscotch/utility';
2
+ import { expect } from 'chai';
3
+ import { parseFeatherTypeString } from './jsdoc.feather.js';
4
+ import { parseJsdoc } from './jsdoc.js';
5
+ const functionJsdoc = `
6
+ /// @desc This is a multiline
7
+ /// description.
8
+ /// @param {String} first - This is the first parameter
9
+ /// @param {Real} second This is the second parameter,
10
+ /// which spans multiple lines.
11
+ /// @param {Struct} [third] This parameter is optional
12
+ /// @param {Struct} [fourth = "bleh" ] This is optional and has a default value
13
+ /// @param {Bool} [...] And so is this one, but there can be as many as you want!
14
+ /// @returns {Struct} And here is a multiline
15
+ /// description of the return type.
16
+ /// @self Struct.AnotherConstructor
17
+ /// @deprecated`;
18
+ const functionJsdocJs = `
19
+ * @desc This is a multiline
20
+ * description.
21
+ @param {String} first This is the first parameter
22
+ * @param {Real} second - This is the second parameter,
23
+ * which spans multiple lines.
24
+ * @param {Struct} [third] This parameter is optional
25
+ * @param {Struct} [fourth = "bleh" ] This is optional and has a default value
26
+ * @param {Bool} [...] And so is this one, but there can be as many as you want!
27
+ * @returns {Struct} And here is a multiline
28
+ * description of the return type.
29
+ * @self Struct.AnotherConstructor
30
+ * @deprecated`;
31
+ describe('JSDocs', function () {
32
+ it('can parse Feather typestrings', function () {
33
+ const complexType = 'Array<string OR Array<Real>> or Struct.Hello or Id.Map<String,Real>';
34
+ const parsed = parseFeatherTypeString(complexType);
35
+ expect(parsed.kind).to.equal('union');
36
+ expect(parsed.types).to.have.lengthOf(3);
37
+ expect(parsed.types[0].kind).to.equal('type');
38
+ expect(parsed.types[0].name.content).to.equal('Array');
39
+ expect(parsed.types[0].of?.kind).to.equal('union');
40
+ expect(parsed.types[0].of?.types).to.have.lengthOf(2);
41
+ expect(parsed.types[0].of?.types[0].kind).to.equal('type');
42
+ expect(parsed.types[0].of?.types[0].name.content).to.equal('string');
43
+ expect(parsed.types[0].of?.types[1].kind).to.equal('type');
44
+ expect(parsed.types[0].of?.types[1].name.content).to.equal('Array');
45
+ expect(parsed.types[0].of?.types[1].of?.kind).to.equal('union');
46
+ expect(parsed.types[0].of?.types[1].of?.types).to.have.lengthOf(1);
47
+ expect(parsed.types[0].of?.types[1].of?.types[0].kind).to.equal('type');
48
+ expect(parsed.types[0].of?.types[1].of?.types[0].name.content).to.equal('Real');
49
+ expect(parsed.types[1].kind).to.equal('type');
50
+ expect(parsed.types[1].name.content).to.equal('Struct.Hello');
51
+ expect(parsed.types[2].kind).to.equal('type');
52
+ expect(parsed.types[2].name.content).to.equal('Id.Map');
53
+ expect(parsed.types[2].of?.kind).to.equal('union');
54
+ expect(parsed.types[2].of?.types).to.have.lengthOf(2);
55
+ expect(parsed.types[2].of?.types[0].kind).to.equal('type');
56
+ expect(parsed.types[2].of?.types[0].name.content).to.equal('String');
57
+ expect(parsed.types[2].of?.types[1].kind).to.equal('type');
58
+ expect(parsed.types[2].of?.types[1].name.content).to.equal('Real');
59
+ });
60
+ it('can parse GML-style Function JSDocs', function () {
61
+ const jsdoc = functionJsdoc;
62
+ const parsed = parseJsdoc(jsdoc);
63
+ expect(parsed.kind).to.equal('function');
64
+ expect(parsed.deprecated).to.equal(true);
65
+ expect(parsed.self?.content).to.equal('Struct.AnotherConstructor');
66
+ expect(parsed.description).to.equal('This is a multiline\ndescription.');
67
+ expect(parsed.params).to.have.lengthOf(5);
68
+ expect(parsed.params[0].name?.content).to.equal('first');
69
+ expect(parsed.params[0].type?.content).to.equal('String');
70
+ expect(parsed.params[0].description).to.equal('This is the first parameter');
71
+ expect(parsed.params[1].name?.content).to.equal('second');
72
+ expect(parsed.params[1].type?.content).to.equal('Real');
73
+ expect(parsed.params[1].description).to.equal('This is the second parameter,\nwhich spans multiple lines.');
74
+ expect(parsed.params[2].name?.content).to.equal('third');
75
+ expect(parsed.params[2].type?.content).to.equal('Struct');
76
+ expect(parsed.params[2].optional).to.equal(true);
77
+ expect(parsed.params[2].description).to.equal('This parameter is optional');
78
+ expect(parsed.params[3].name?.content).to.equal('fourth');
79
+ expect(parsed.params[3].type?.content).to.equal('Struct');
80
+ expect(parsed.params[3].optional).to.equal(true);
81
+ expect(parsed.params[3].description).to.equal('This is optional and has a default value');
82
+ expect(parsed.params[4].name?.content).to.equal('...');
83
+ expect(parsed.params[4].type?.content).to.equal('Bool');
84
+ expect(parsed.params[4].optional).to.equal(true);
85
+ expect(parsed.params[4].description).to.equal('And so is this one, but there can be as many as you want!');
86
+ });
87
+ it('can parse JS-style Function JSDocs', function () {
88
+ const jsdoc = functionJsdocJs;
89
+ const parsed = parseJsdoc(jsdoc);
90
+ expect(parsed.kind).to.equal('function');
91
+ expect(parsed.deprecated).to.equal(true);
92
+ expect(parsed.self?.content).to.equal('Struct.AnotherConstructor');
93
+ expect(parsed.description).to.equal('This is a multiline\ndescription.');
94
+ expect(parsed.params).to.have.lengthOf(5);
95
+ expect(parsed.params[0].name?.content).to.equal('first');
96
+ expect(parsed.params[0].type?.content).to.equal('String');
97
+ expect(parsed.params[0].description).to.equal('This is the first parameter');
98
+ expect(parsed.params[1].name?.content).to.equal('second');
99
+ expect(parsed.params[1].type?.content).to.equal('Real');
100
+ expect(parsed.params[1].description).to.equal('This is the second parameter,\nwhich spans multiple lines.');
101
+ expect(parsed.params[2].name?.content).to.equal('third');
102
+ expect(parsed.params[2].type?.content).to.equal('Struct');
103
+ expect(parsed.params[2].optional).to.equal(true);
104
+ expect(parsed.params[2].description).to.equal('This parameter is optional');
105
+ expect(parsed.params[3].name?.content).to.equal('fourth');
106
+ expect(parsed.params[3].type?.content).to.equal('Struct');
107
+ expect(parsed.params[3].optional).to.equal(true);
108
+ expect(parsed.params[3].description).to.equal('This is optional and has a default value');
109
+ expect(parsed.params[4].name?.content).to.equal('...');
110
+ expect(parsed.params[4].type?.content).to.equal('Bool');
111
+ expect(parsed.params[4].optional).to.equal(true);
112
+ expect(parsed.params[4].description).to.equal('And so is this one, but there can be as many as you want!');
113
+ });
114
+ it('can parse a GML type tag', function () {
115
+ const jsdoc = '/// @type {String} - This is a string';
116
+ const parsed = parseJsdoc(jsdoc);
117
+ expect(parsed.kind).to.equal('type');
118
+ expect(parsed.type?.content).to.equal('String');
119
+ expect(parsed.description).to.equal('This is a string');
120
+ });
121
+ it('can parse a JS type tag', function () {
122
+ const jsdoc = '@type {String} This is a string';
123
+ const parsed = parseJsdoc(jsdoc);
124
+ expect(parsed.kind).to.equal('type');
125
+ expect(parsed.type?.content).to.equal('String');
126
+ expect(parsed.description).to.equal('This is a string');
127
+ });
128
+ it('can parse a self tag', function () {
129
+ const jsdoc = '/// @self Struct.Hello';
130
+ const parsed = parseJsdoc(jsdoc);
131
+ expect(parsed.kind).to.equal('self');
132
+ expect(parsed.self?.content).to.equal('Struct.Hello');
133
+ });
134
+ it('can parse template tags', function () {
135
+ const jsdoc = undent `
136
+ /// @template T
137
+ /// @template {String} U
138
+ /// @param {T} first
139
+ /// @returns {U}
140
+ `;
141
+ const parsed = parseJsdoc(jsdoc);
142
+ expect(parsed.kind).to.equal('function');
143
+ expect(parsed.templates).to.have.lengthOf(2);
144
+ expect(parsed.templates[0].name?.content).to.equal('T');
145
+ expect(parsed.templates[0].type).to.be.undefined;
146
+ expect(parsed.templates[1].name?.content).to.equal('U');
147
+ expect(parsed.templates[1].type?.content).to.equal('String');
148
+ expect(parsed.params).to.have.lengthOf(1);
149
+ expect(parsed.params[0].name?.content).to.equal('first');
150
+ expect(parsed.params[0].type?.content).to.equal('T');
151
+ expect(parsed.returns?.type?.content).to.equal('U');
152
+ });
153
+ it('can parse utility types', function () {
154
+ const jsdoc = undent `
155
+ /// @template {Asset.GMObject} T
156
+ /// @param {T} first
157
+ /// @returns {InstanceType<T>}
158
+ `;
159
+ const parsed = parseJsdoc(jsdoc);
160
+ expect(parsed.kind).to.equal('function');
161
+ expect(parsed.templates).to.have.lengthOf(1);
162
+ expect(parsed.templates[0].name?.content).to.equal('T');
163
+ expect(parsed.templates[0].type?.content).to.equal('Asset.GMObject');
164
+ expect(parsed.params).to.have.lengthOf(1);
165
+ expect(parsed.params[0].name?.content).to.equal('first');
166
+ expect(parsed.params[0].type?.content).to.equal('T');
167
+ expect(parsed.returns?.type?.content).to.equal('InstanceType<T>');
168
+ });
169
+ it('can identify typstring ranges', function () {
170
+ const jsdoc = '/// @type {X|Array<Struct.GlobalConstructor>|String}';
171
+ const parsed = parseJsdoc(jsdoc);
172
+ const ranges = parsed.typeRanges;
173
+ expect(ranges.length).to.equal(4);
174
+ for (const range of ranges) {
175
+ const startOffset = jsdoc.indexOf(range.content);
176
+ expect(range.start.offset).to.equal(startOffset);
177
+ expect(range.end.offset).to.equal(startOffset + range.content.length - 1);
178
+ expect(range.start.column).to.equal(startOffset + 1);
179
+ expect(range.end.column).to.equal(startOffset + range.content.length);
180
+ expect(range.start.line).to.equal(1);
181
+ expect(range.end.line).to.equal(1);
182
+ }
183
+ });
184
+ });
185
+ //# sourceMappingURL=jsdoc.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsdoc.test.js","sourceRoot":"","sources":["../src/jsdoc.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Lexer } from 'chevrotain';
2
+ export declare const GmlLexer: Lexer;
3
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../src/lexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAUnC,eAAO,MAAM,QAAQ,OASnB,CAAC"}
package/dist/lexer.js ADDED
@@ -0,0 +1,14 @@
1
+ import { Lexer } from 'chevrotain';
2
+ import { codeTokens } from './tokens.code.js';
3
+ import { multilineDoubleStringTokens, multilineSingleStringTokens, stringTokens, templateTokens, } from './tokens.strings.js';
4
+ export const GmlLexer = new Lexer({
5
+ defaultMode: 'code',
6
+ modes: {
7
+ code: codeTokens,
8
+ string: stringTokens,
9
+ multilineDoubleString: multilineDoubleStringTokens,
10
+ multilineSingleString: multilineSingleStringTokens,
11
+ template: templateTokens,
12
+ },
13
+ });
14
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../src/lexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,YAAY,EACZ,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC;IAChC,WAAW,EAAE,MAAM;IACnB,KAAK,EAAE;QACL,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,YAAY;QACpB,qBAAqB,EAAE,2BAA2B;QAClD,qBAAqB,EAAE,2BAA2B;QAClD,QAAQ,EAAE,cAAc;KACyB;CACpD,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lexer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.test.d.ts","sourceRoot":"","sources":["../src/lexer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ import { undent } from '@bscotch/utility';
2
+ import fs from 'fs/promises';
3
+ import { GmlLexer } from './lexer.js';
4
+ import { logger } from './logger.js';
5
+ describe('Lexer', function () {
6
+ it('can lex strings', function () {
7
+ const sample = undent `
8
+ "hello"
9
+ @"world"
10
+ @'singlez'
11
+ @"multi
12
+ line
13
+ one!"
14
+ `;
15
+ const result = GmlLexer.tokenize(sample);
16
+ if (result.errors.length) {
17
+ logger.dir(result, { depth: null });
18
+ throw new Error('Lexer failed to lex sample file: ' + sample);
19
+ }
20
+ });
21
+ it('can lex templates', function () {
22
+ const sample = '$"a template {woo+3}!"';
23
+ const result = GmlLexer.tokenize(sample);
24
+ if (result.errors.length) {
25
+ logger.dir(result, { depth: null });
26
+ throw new Error('Lexer failed to lex sample: ' + sample);
27
+ }
28
+ });
29
+ it('can lex GML style JSDocs', function () {
30
+ const sample = undent `
31
+ /// @description This is a description
32
+ /// @param {string} a
33
+ /// @param {number} b
34
+ /// @returns {string}
35
+ function myFunc(a, b) {}
36
+ `;
37
+ const result = GmlLexer.tokenize(sample);
38
+ if (result.errors.length) {
39
+ logger.dir(result, { depth: null });
40
+ throw new Error('Lexer failed to lex sample: ' + sample);
41
+ }
42
+ });
43
+ it('can lex JS style JSDocs', function () {
44
+ const sample = undent `
45
+ /**
46
+ * @description This is a description
47
+ * @param {string} a
48
+ * @param {number} b
49
+ * @returns {string}
50
+ */
51
+ function myFunc(a, b) {}
52
+ `;
53
+ const result = GmlLexer.tokenize(sample);
54
+ if (result.errors.length) {
55
+ logger.dir(result.errors, { depth: null });
56
+ throw new Error('Lexer failed to lex sample: ' + sample);
57
+ }
58
+ });
59
+ it('can lex sample files', async function () {
60
+ const samples = await fs.readdir('./samples');
61
+ for (const sample of samples) {
62
+ const filePath = `./samples/${sample}`;
63
+ if (await fs.stat(filePath).then((s) => s.isDirectory())) {
64
+ continue;
65
+ }
66
+ const code = await fs.readFile(filePath, 'utf-8');
67
+ const result = GmlLexer.tokenize(code);
68
+ if (result.errors.length) {
69
+ logger.dir(result, { depth: null });
70
+ throw new Error('Lexer failed to lex sample file: ' + filePath);
71
+ }
72
+ }
73
+ });
74
+ });
75
+ function logResult(result) {
76
+ logger.log(JSON.stringify(result.tokens, ['image', 'startOffset', 'tokenType', 'name', 'PUSH_MODE', 'POP_MODE'], 2));
77
+ }
78
+ //# sourceMappingURL=lexer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.test.js","sourceRoot":"","sources":["../src/lexer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ export interface ObjectEvent {
2
+ label: string;
3
+ name: string;
4
+ eventNum: number;
5
+ eventType: number;
6
+ group: string;
7
+ }
8
+ export type ObjectEventName = (typeof objectEvents)[number]['name'];
9
+ export type ObjectEventLabel = (typeof objectEvents)[number]['label'];
10
+ interface ObjectAlarmEvent<N extends number> extends ObjectEvent {
11
+ label: `Alarm ${N}`;
12
+ name: `Alarm_${N}`;
13
+ eventNum: N;
14
+ eventType: 2;
15
+ group: 'alarm';
16
+ }
17
+ /**
18
+ * Mapping of GameMaker filenames to their corresponding
19
+ * human-friendly event names.
20
+ */
21
+ export declare const objectEvents: readonly [{
22
+ readonly label: "Create";
23
+ readonly name: "Create_0";
24
+ readonly eventNum: 0;
25
+ readonly eventType: 0;
26
+ readonly group: "main";
27
+ }, {
28
+ readonly label: "Destroy";
29
+ readonly name: "Destroy_0";
30
+ readonly eventNum: 0;
31
+ readonly eventType: 1;
32
+ readonly group: "cleanup";
33
+ }, {
34
+ readonly label: "CleanUp";
35
+ readonly name: "CleanUp_0";
36
+ readonly eventNum: 0;
37
+ readonly eventType: 12;
38
+ readonly group: "cleanup";
39
+ }, {
40
+ readonly label: "Room Start";
41
+ readonly name: "Other_4";
42
+ readonly eventNum: 4;
43
+ readonly eventType: 7;
44
+ readonly group: "cleanup";
45
+ }, {
46
+ readonly label: "Room End";
47
+ readonly name: "Other_5";
48
+ readonly eventNum: 5;
49
+ readonly eventType: 7;
50
+ readonly group: "cleanup";
51
+ }, {
52
+ readonly label: "Game End";
53
+ readonly name: "Other_3";
54
+ readonly eventNum: 3;
55
+ readonly eventType: 7;
56
+ readonly group: "cleanup";
57
+ }, {
58
+ readonly label: "Pre-Draw";
59
+ readonly name: "Draw_76";
60
+ readonly eventNum: 76;
61
+ readonly eventType: 8;
62
+ readonly group: "draw";
63
+ }, {
64
+ readonly label: "Draw Begin";
65
+ readonly name: "Draw_72";
66
+ readonly eventNum: 72;
67
+ readonly eventType: 8;
68
+ readonly group: "draw";
69
+ }, {
70
+ readonly label: "Draw";
71
+ readonly name: "Draw_0";
72
+ readonly eventNum: 0;
73
+ readonly eventType: 8;
74
+ readonly group: "draw";
75
+ }, {
76
+ readonly label: "Draw End";
77
+ readonly name: "Draw_63";
78
+ readonly eventNum: 63;
79
+ readonly eventType: 8;
80
+ readonly group: "draw";
81
+ }, {
82
+ readonly label: "Post-Draw";
83
+ readonly name: "Draw_77";
84
+ readonly eventNum: 77;
85
+ readonly eventType: 8;
86
+ readonly group: "draw";
87
+ }, {
88
+ readonly label: "Draw GUI Begin";
89
+ readonly name: "Draw_74";
90
+ readonly eventNum: 74;
91
+ readonly eventType: 8;
92
+ readonly group: "draw-gui";
93
+ }, {
94
+ readonly label: "Draw GUI";
95
+ readonly name: "Draw_64";
96
+ readonly eventNum: 64;
97
+ readonly eventType: 8;
98
+ readonly group: "draw-gui";
99
+ }, {
100
+ readonly label: "Draw GUI End";
101
+ readonly name: "Draw_75";
102
+ readonly eventNum: 75;
103
+ readonly eventType: 8;
104
+ readonly group: "draw-gui";
105
+ }, {
106
+ readonly label: "Begin Step";
107
+ readonly name: "Step_1";
108
+ readonly eventNum: 1;
109
+ readonly eventType: 3;
110
+ readonly group: "step";
111
+ }, {
112
+ readonly label: "Step";
113
+ readonly name: "Step_0";
114
+ readonly eventNum: 0;
115
+ readonly eventType: 3;
116
+ readonly group: "step";
117
+ }, {
118
+ readonly label: "End Step";
119
+ readonly name: "Step_2";
120
+ readonly eventNum: 2;
121
+ readonly eventType: 3;
122
+ readonly group: "step";
123
+ }, ...({
124
+ label: string;
125
+ name: string;
126
+ eventNum: number;
127
+ eventType: number;
128
+ group: string;
129
+ } | ObjectAlarmEvent<number> | {
130
+ readonly label: "Animation Update";
131
+ readonly name: "Other_58";
132
+ readonly eventNum: 58;
133
+ readonly eventType: 7;
134
+ readonly group: "animation";
135
+ } | {
136
+ readonly label: "Animation Event";
137
+ readonly name: "Other_59";
138
+ readonly eventNum: 59;
139
+ readonly eventType: 7;
140
+ readonly group: "animation";
141
+ } | {
142
+ readonly label: "Async - HTTP";
143
+ readonly name: "Other_62";
144
+ readonly eventNum: 62;
145
+ readonly eventType: 7;
146
+ readonly group: "async";
147
+ } | {
148
+ readonly label: "Async - System";
149
+ readonly name: "Other_75";
150
+ readonly eventNum: 75;
151
+ readonly eventType: 7;
152
+ readonly group: "async";
153
+ } | {
154
+ readonly label: "Async - Social";
155
+ readonly name: "Other_70";
156
+ readonly eventNum: 70;
157
+ readonly eventType: 7;
158
+ readonly group: "async";
159
+ } | {
160
+ readonly label: "Async - Save/Load";
161
+ readonly name: "Other_72";
162
+ readonly eventNum: 72;
163
+ readonly eventType: 7;
164
+ readonly group: "async";
165
+ } | {
166
+ readonly label: "Async - Steam";
167
+ readonly name: "Other_69";
168
+ readonly eventNum: 69;
169
+ readonly eventType: 7;
170
+ readonly group: "async";
171
+ } | {
172
+ readonly label: "Async - Dialog";
173
+ readonly name: "Other_63";
174
+ readonly eventNum: 63;
175
+ readonly eventType: 7;
176
+ readonly group: "async";
177
+ } | {
178
+ readonly label: "Broadcast Message";
179
+ readonly name: "Other_76";
180
+ readonly eventNum: 76;
181
+ readonly eventType: 7;
182
+ readonly group: "broadcast message";
183
+ })[]];
184
+ /**
185
+ * Given a GameMaker object event filename, get its human-friendly name. */
186
+ export declare function getEventFromFilename(filename: string): ObjectEvent | undefined;
187
+ export declare function getEventFromLabel(label: string): ObjectEvent | undefined;
188
+ export declare function getEventFrom(eventNum: number, eventType: number): ObjectEvent | undefined;
189
+ export {};
190
+ //# sourceMappingURL=lib.objects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.objects.d.ts","sourceRoot":"","sources":["../src/lib.objects.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAEtE,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,WAAW;IAC9D,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IACnB,QAAQ,EAAE,CAAC,CAAC;IACZ,SAAS,EAAE,CAAC,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAqBD;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyLf,CAAC;AAGX;2EAC2E;AAC3E,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GACf,WAAW,GAAG,SAAS,CAkBzB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAaxE;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,WAAW,GAAG,SAAS,CAIzB"}