@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,143 @@
1
+ import { pathy } from '@bscotch/pathy';
2
+ import { undent } from '@bscotch/utility';
3
+ import { expect } from 'chai';
4
+ import dotenv from 'dotenv';
5
+ import fs from 'fs/promises';
6
+ import { logger } from './logger.js';
7
+ import { GmlParser } from './parser.js';
8
+ import { Type } from './types.js';
9
+ import { ok } from './util.js';
10
+ dotenv.config();
11
+ function showErrors(parser, filepath) {
12
+ const errors = Array.isArray(parser) ? parser : parser.errors;
13
+ if (!errors.length)
14
+ return;
15
+ logger.error(errors.map((e) => ({
16
+ loc: `${filepath || ''}:${e.token.startLine}:${e.token.startColumn}`,
17
+ msg: e.message,
18
+ token: e.token.image,
19
+ resynced: e.resyncedTokens.map((t) => ({
20
+ image: t.image,
21
+ startLine: t.startLine,
22
+ startColumn: t.startColumn,
23
+ })),
24
+ })));
25
+ }
26
+ describe('Parser', function () {
27
+ it('can get types from typestrings', function () {
28
+ expect(Type.fromFeatherString('Array', new Map(), false)[0].kind).to.equal('Array');
29
+ const stringArray = Type.fromFeatherString('Array<string>', new Map(), false)[0];
30
+ expect(stringArray.kind).to.equal('Array');
31
+ expect(stringArray.items.kind).to.equal('String');
32
+ const dsMap = Type.fromFeatherString('Id.DsMap[String,Real]', new Map(), false)[0];
33
+ expect(dsMap.kind).to.equal('Id.DsMap');
34
+ const dsMapItems = dsMap.items.type;
35
+ expect(dsMapItems.length).to.equal(2);
36
+ expect(dsMapItems[0].kind).to.equal('String');
37
+ expect(dsMapItems[1].kind).to.equal('Real');
38
+ });
39
+ it('can parse cross-referencing types', function () {
40
+ const knownTypes = new Map();
41
+ const arrayOfStructs = Type.fromFeatherString('Array<Struct.Hello>', knownTypes, true)[0];
42
+ knownTypes.set('Struct.Hello', arrayOfStructs.items.type[0]);
43
+ const structType = Type.fromFeatherString('Struct.Hello', knownTypes, false)[0];
44
+ ok(knownTypes.get('Struct.Hello') === structType);
45
+ expect(arrayOfStructs.kind).to.equal('Array');
46
+ expect(arrayOfStructs.items.kind).to.equal('Struct');
47
+ ok(arrayOfStructs.items.type[0] === structType);
48
+ expect(arrayOfStructs.items.type[0].name).to.equal('Hello');
49
+ });
50
+ it('can parse complex typestrings', function () {
51
+ const complexType = Type.fromFeatherString('Array<string OR Array<Real>>|Struct.Hello OR Id.DsMap[String,Real]', new Map(), true);
52
+ const [arrayType, structType, dsMapType] = complexType;
53
+ expect(complexType.length).to.equal(3);
54
+ expect(arrayType.kind).to.equal('Array');
55
+ const arrayItems = arrayType.items.type;
56
+ expect(arrayItems.length).to.equal(2);
57
+ expect(arrayItems[0].kind).to.equal('String');
58
+ expect(arrayItems[1].kind).to.equal('Array');
59
+ expect(arrayItems[1].items.kind).to.equal('Real');
60
+ expect(structType.kind).to.equal('Struct');
61
+ expect(structType.name).to.equal('Hello');
62
+ expect(dsMapType.kind).to.equal('Id.DsMap');
63
+ const dsMapItems = dsMapType.items.type;
64
+ expect(dsMapItems.length).to.equal(2);
65
+ expect(dsMapItems[0].kind).to.equal('String');
66
+ expect(dsMapItems[1].kind).to.equal('Real');
67
+ });
68
+ it('can parse simple expressions', function () {
69
+ const parser = new GmlParser();
70
+ const { cst } = parser.parse('(1 + 2 * 3) + (hello / (world || undefined))');
71
+ expect(parser.errors.length).to.equal(0);
72
+ expect(cst).to.exist;
73
+ });
74
+ it('can get errors for invalid simple expressions', function () {
75
+ const parser = new GmlParser();
76
+ const { cst, errors } = parser.parse('(1 + 2 * 3) + hello / world || undefined +');
77
+ expect(parser.errors.length).to.equal(1);
78
+ expect(errors.length).to.equal(1);
79
+ });
80
+ it('can parse complex expressions', function () {
81
+ const parser = new GmlParser();
82
+ const { cst } = parser.parse('1 + 2 * 3 + hello / world[no+true] || undefined + (1 + 2 * 3 + hello / world || undefined ^^ functionCall(10+3,undefined,,))');
83
+ expect(parser.errors.length).to.equal(0);
84
+ expect(cst).to.exist;
85
+ // logger.log(
86
+ // GmlParser.jsonify(
87
+ // // @ts-expect-error
88
+ // cst!.children.statement[0].children.expressionStatement[0].children
89
+ // .expression[0],
90
+ // ),
91
+ // );
92
+ });
93
+ it('can parse GML style JSDocs', function () {
94
+ const parser = new GmlParser();
95
+ const { cst } = parser.parse(undent `
96
+ /// @description This is a description
97
+ /// @param {string} a
98
+ /// @param {number} b
99
+ /// @returns {string}
100
+ function myFunc(a, b) {}
101
+ `);
102
+ showErrors(parser);
103
+ expect(parser.errors.length).to.equal(0);
104
+ expect(cst).to.exist;
105
+ });
106
+ it('can parse sample files', async function () {
107
+ const parser = new GmlParser();
108
+ const samples = await fs.readdir('./samples');
109
+ for (const sample of samples) {
110
+ // logger.log('Parsing', sample);
111
+ if (!sample.endsWith('.gml')) {
112
+ continue;
113
+ }
114
+ const filePath = `./samples/${sample}`;
115
+ const code = await fs.readFile(filePath, 'utf-8');
116
+ const { cst } = parser.parse(code);
117
+ showErrors(parser, filePath);
118
+ expect(cst).to.exist;
119
+ expect(parser.errors).to.have.length(0);
120
+ // logger.log(cst);
121
+ }
122
+ });
123
+ xit('can parse sample project', async function () {
124
+ const projectDir = process.env.GML_PARSER_SAMPLE_PROJECT_DIR;
125
+ expect(projectDir, 'A dotenv file should provide a path to a full sample project, as env var GML_PARSER_SAMPLE_PROJECT_DIR').to.exist;
126
+ const dir = pathy(projectDir);
127
+ const files = await dir.listChildrenRecursively({
128
+ includeExtension: ['.gml'],
129
+ });
130
+ expect(files.length).to.be.greaterThan(0);
131
+ const parser = new GmlParser();
132
+ for (let i = 0; i < files.length; i++) {
133
+ const file = files[i];
134
+ const code = await file.read();
135
+ const { cst } = parser.parse(code);
136
+ showErrors(parser, file.absolute);
137
+ expect(cst).to.exist;
138
+ expect(parser.errors).to.have.length(0);
139
+ // logger.log(cst);
140
+ }
141
+ });
142
+ });
143
+ //# sourceMappingURL=parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../src/parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { CstNode, IToken } from 'chevrotain';
2
+ import type { AccessorSuffixesCstChildren, AccessorSuffixesCstNode, AssignmentCstChildren, AssignmentCstNode, AssignmentRightHandSideCstChildren, AssignmentRightHandSideCstNode, FunctionArgumentCstNode, FunctionArgumentsCstNode, IdentifierCstChildren, IdentifierCstNode, MultilineDoubleStringLiteralCstChildren, MultilineSingleStringLiteralCstChildren, StringLiteralCstChildren } from '../gml-cst.js';
3
+ /** Right-hand side from the CST, normalized via `rhsFrom` */
4
+ export type Rhs = AssignmentCstNode[] | AssignmentCstNode | AssignmentRightHandSideCstNode[] | AssignmentRightHandSideCstNode | AssignmentRightHandSideCstChildren | AssignmentCstChildren | undefined;
5
+ export declare function rhsFrom(item: Rhs): AssignmentRightHandSideCstChildren | undefined;
6
+ export declare function functionFromRhs(rhs: Rhs): import("../gml-cst.js").FunctionExpressionCstChildren | undefined;
7
+ export declare function structLiteralFromRhs(rhs: Rhs): import("../gml-cst.js").StructLiteralCstChildren | undefined;
8
+ export declare function arrayLiteralFromRhs(rhs: Rhs): import("../gml-cst.js").ArrayLiteralCstChildren | undefined;
9
+ export type IdentifierSource = IdentifierCstChildren | IdentifierCstNode | IdentifierCstNode[] | {
10
+ identifier: IdentifierCstNode[];
11
+ } | {
12
+ children: {
13
+ identifier: IdentifierCstNode[];
14
+ };
15
+ };
16
+ type AccessorSuffixName = keyof AccessorSuffixesCstChildren;
17
+ export type SortedAccessorSuffix<T extends AccessorSuffixName = AccessorSuffixName> = Required<AccessorSuffixesCstChildren>[T][0];
18
+ export declare function isEmpty(obj: {}): boolean;
19
+ export declare function sortedFunctionCallParts(node: FunctionArgumentsCstNode): (IToken | FunctionArgumentCstNode)[];
20
+ export declare function stringLiteralAsString(children: StringLiteralCstChildren | MultilineSingleStringLiteralCstChildren | MultilineDoubleStringLiteralCstChildren): string;
21
+ export declare function sortChildren(records: Record<string, (IToken | CstNode)[]>): (IToken | CstNode)[];
22
+ export declare function sortedAccessorSuffixes(suffixNodes: AccessorSuffixesCstNode[] | undefined): SortedAccessorSuffix[];
23
+ export declare function identifierFrom(nodes: IdentifierSource): {
24
+ token: IToken;
25
+ type: keyof IdentifierCstChildren;
26
+ name: string;
27
+ } | undefined;
28
+ export {};
29
+ //# sourceMappingURL=parser.utility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.utility.d.ts","sourceRoot":"","sources":["../src/parser.utility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EACV,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,kCAAkC,EAClC,8BAA8B,EAC9B,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,uCAAuC,EACvC,uCAAuC,EACvC,wBAAwB,EACzB,MAAM,eAAe,CAAC;AAGvB,6DAA6D;AAC7D,MAAM,MAAM,GAAG,GACX,iBAAiB,EAAE,GACnB,iBAAiB,GACjB,8BAA8B,EAAE,GAChC,8BAA8B,GAC9B,kCAAkC,GAClC,qBAAqB,GACrB,SAAS,CAAC;AAEd,wBAAgB,OAAO,CACrB,IAAI,EAAE,GAAG,GACR,kCAAkC,GAAG,SAAS,CAqBhD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,qEAEvC;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,gEAE5C;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,+DAG3C;AAED,MAAM,MAAM,gBAAgB,GACxB,qBAAqB,GACrB,iBAAiB,GACjB,iBAAiB,EAAE,GACnB;IAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA;CAAE,GACnC;IAAE,QAAQ,EAAE;QAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAEtD,KAAK,kBAAkB,GAAG,MAAM,2BAA2B,CAAC;AAC5D,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,IAC/C,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhD,wBAAgB,OAAO,CAAC,GAAG,EAAE,EAAE,WAE9B;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,wBAAwB,GAC7B,CAAC,MAAM,GAAG,uBAAuB,CAAC,EAAE,CAWtC;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EACJ,wBAAwB,GACxB,uCAAuC,GACvC,uCAAuC,GAC1C,MAAM,CAgBR;AAMD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,GAC5C,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAOtB;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,uBAAuB,EAAE,GAAG,SAAS,GACjD,oBAAoB,EAAE,CAgBxB;AAWD,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAClD;IACE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,qBAAqB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;CACd,GACD,SAAS,CAmBZ"}
@@ -0,0 +1,125 @@
1
+ import { keysOf } from '@bscotch/utility';
2
+ import { isArray, ok } from './util.js';
3
+ export function rhsFrom(item) {
4
+ if (item === undefined) {
5
+ return;
6
+ }
7
+ if (isArray(item)) {
8
+ return rhsFrom(item[0]?.children);
9
+ }
10
+ if ('name' in item) {
11
+ if (item.name === 'assignmentRightHandSide') {
12
+ return item.children;
13
+ }
14
+ else if (item.name == 'assignment') {
15
+ return rhsFrom(item.children);
16
+ }
17
+ else {
18
+ // Unexpected item type
19
+ return undefined;
20
+ }
21
+ }
22
+ if ('assignmentRightHandSide' in item) {
23
+ return item.assignmentRightHandSide[0].children;
24
+ }
25
+ return item;
26
+ }
27
+ export function functionFromRhs(rhs) {
28
+ return rhsFrom(rhs)?.functionExpression?.[0].children;
29
+ }
30
+ export function structLiteralFromRhs(rhs) {
31
+ return rhsFrom(rhs)?.structLiteral?.[0].children;
32
+ }
33
+ export function arrayLiteralFromRhs(rhs) {
34
+ return rhsFrom(rhs)?.expression?.[0].children.primaryExpression?.[0].children
35
+ .arrayLiteral?.[0]?.children;
36
+ }
37
+ export function isEmpty(obj) {
38
+ return Object.keys(obj).length === 0;
39
+ }
40
+ export function sortedFunctionCallParts(node) {
41
+ return [
42
+ node.children.StartParen[0],
43
+ ...(node.children.functionArgument || []),
44
+ ...(node.children.Comma || []),
45
+ node.children.EndParen[0],
46
+ ].sort((a, b) => {
47
+ const aLocation = ('location' in a ? a.location : a);
48
+ const bLocation = ('location' in b ? b.location : b);
49
+ return aLocation.startOffset - bLocation.startOffset;
50
+ });
51
+ }
52
+ export function stringLiteralAsString(children) {
53
+ const start = 'StringStart' in children
54
+ ? children.StringStart[0].image
55
+ : 'MultilineSingleStringStart' in children
56
+ ? children.MultilineSingleStringStart[0].image
57
+ : children.MultilineDoubleStringStart[0].image;
58
+ const end = 'StringEnd' in children
59
+ ? children.StringEnd[0].image
60
+ : 'MultilineSingleStringEnd' in children
61
+ ? children.MultilineSingleStringEnd[0].image
62
+ : children.MultilineDoubleStringEnd[0].image;
63
+ return `${start}${(children.Substring || [])
64
+ .map((s) => s.image)
65
+ .join('')}${end}`;
66
+ }
67
+ function getStartOffset(node) {
68
+ return 'startOffset' in node ? node.startOffset : node.location.startOffset;
69
+ }
70
+ export function sortChildren(records) {
71
+ const sorted = [];
72
+ for (const key of keysOf(records)) {
73
+ sorted.push(...records[key]);
74
+ }
75
+ sorted.sort((a, b) => getStartOffset(a) - getStartOffset(b));
76
+ return sorted;
77
+ }
78
+ export function sortedAccessorSuffixes(suffixNodes) {
79
+ // Convert into a flat array of suffixes, sorted by their position in the source code.
80
+ const sorted = [];
81
+ if (!suffixNodes) {
82
+ return sorted;
83
+ }
84
+ for (const node of suffixNodes) {
85
+ const { children } = node;
86
+ const suffixKinds = keysOf(children);
87
+ for (const kind of suffixKinds) {
88
+ ok(children[kind].length === 1);
89
+ sorted.push(children[kind][0]);
90
+ }
91
+ }
92
+ sorted.sort((a, b) => a.location.startOffset - b.location.startOffset);
93
+ return sorted;
94
+ }
95
+ const identifierCstNames = [
96
+ 'All',
97
+ 'Global',
98
+ 'Identifier',
99
+ 'Noone',
100
+ 'Other',
101
+ 'Self',
102
+ ];
103
+ export function identifierFrom(nodes) {
104
+ let node;
105
+ if (Array.isArray(nodes)) {
106
+ node = nodes[0];
107
+ }
108
+ else if ('children' in nodes && 'identifier' in nodes.children) {
109
+ node = nodes.children.identifier[0];
110
+ }
111
+ else if ('identifier' in nodes) {
112
+ node = nodes.identifier[0];
113
+ }
114
+ else {
115
+ node = nodes;
116
+ }
117
+ const children = 'children' in node ? node.children : node;
118
+ const type = identifierCstNames.find((name) => children[name]);
119
+ if (!type) {
120
+ return;
121
+ }
122
+ const token = children[type][0];
123
+ return { token, type, name: token.image };
124
+ }
125
+ //# sourceMappingURL=parser.utility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.utility.js","sourceRoot":"","sources":["../src/parser.utility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import { Pathy } from '@bscotch/pathy';
2
+ import { YyDataStrict, YyResourceType, YySchemas, YypResource } from '@bscotch/yy';
3
+ import type { ObjectEvent, ObjectEventName } from './lib.objects.js';
4
+ import { Code } from './project.code.js';
5
+ import { Project } from './project.js';
6
+ import { Signifier } from './signifiers.js';
7
+ import { StructType, Type } from './types.js';
8
+ export declare function isAssetOfKind<T extends YyResourceType>(asset: any, kind: T): asset is Asset<T>;
9
+ export declare function assertIsAssetOfKind<T extends YyResourceType>(asset: any, kind: T): asserts asset is Asset<T>;
10
+ export declare class Asset<T extends YyResourceType = YyResourceType> {
11
+ readonly project: Project;
12
+ readonly resource: YypResource;
13
+ readonly $tag = "Asset";
14
+ readonly assetKind: T;
15
+ readonly gmlFiles: Map<string, Code>;
16
+ yy: YyDataStrict<T>;
17
+ readonly yyPath: Pathy<YySchemas[T]>;
18
+ readonly signifier: Signifier;
19
+ /** For objects, their instance type. */
20
+ instanceType: Type<'Id.Instance'> | undefined;
21
+ assetType: Type<Asset['assetTypeKind']>;
22
+ variables: StructType | undefined;
23
+ nativeVariables: StructType | undefined;
24
+ /** For objects, their parent */
25
+ protected _parent: Asset<'objects'> | undefined;
26
+ protected initalized: {
27
+ globals: boolean;
28
+ locals: boolean;
29
+ };
30
+ protected constructor(project: Project, resource: YypResource, yyPath: Pathy);
31
+ get typeName(): string;
32
+ get instanceTypeName(): string;
33
+ saveYy(): Promise<void>;
34
+ get isScript(): boolean;
35
+ get isObject(): boolean;
36
+ get isSound(): boolean;
37
+ get isRoom(): boolean;
38
+ get isSprite(): boolean;
39
+ get isSpineSprite(): boolean;
40
+ get soundFile(): Pathy<Buffer>;
41
+ get sprite(): Asset<'sprites'> | undefined;
42
+ set sprite(sprite: Asset<'sprites'> | undefined);
43
+ get children(): Asset<'objects'>[];
44
+ get parent(): Asset<'objects'> | undefined;
45
+ set parent(parent: Asset<'objects'> | undefined);
46
+ /**
47
+ * Get the entire parent heirarchy, with immediate first
48
+ * and most-distant last
49
+ */
50
+ get parents(): Asset<'objects'>[];
51
+ /**
52
+ * Get the first GML file belonging to this resource.
53
+ * For scripts, this is the *only* GML file.*/
54
+ get gmlFile(): Code;
55
+ get gmlFilesArray(): Code[];
56
+ getEventByName(name: ObjectEventName): Code | undefined;
57
+ get shaderPaths(): T extends 'shaders' ? {
58
+ [K in 'vertex' | 'fragment']: Pathy<string>;
59
+ } : undefined;
60
+ get roomInstances(): {
61
+ instanceId: string;
62
+ object: Asset<'objects'>;
63
+ }[];
64
+ get frameIds(): string[];
65
+ get framePaths(): Pathy<Buffer>[];
66
+ get spinePaths(): {
67
+ json: Pathy<unknown>;
68
+ atlas: Pathy<unknown>;
69
+ } | undefined;
70
+ /**
71
+ * During an Object asset rename, we need to ensure that all references to the
72
+ * old name are updated to the new name. This includes the object's name in rooms.
73
+ */
74
+ renameRoomInstanceObjects(oldObjectName: string, newObjectName: string): Promise<void>;
75
+ removeRoomInstance(instanceId: string): Promise<void>;
76
+ reorganizeRoomInstances(instanceIds: string[]): Promise<void>;
77
+ addRoomInstance(obj: Asset<'objects'>, x?: number, y?: number): Promise<void>;
78
+ get folder(): string;
79
+ /**
80
+ * Check if this asset is in the given asset group ("folder").
81
+ * @param path E.g. `my/folder/of/stuff`
82
+ */
83
+ isInFolder(path: string): boolean;
84
+ /** Move to a different, *existing* folder. */
85
+ moveToFolder(path: string): Promise<void>;
86
+ /**
87
+ * Re-order the existing frames of a sprite.
88
+ * Any frames not included in the new order will be deleted.
89
+ */
90
+ reorganizeFrames(newFrameIdOrder: string[]): Promise<void>;
91
+ deleteFrames(frameIds: string[]): Promise<void>;
92
+ addFrames(sourceImages: Pathy[]): Promise<void>;
93
+ createEvent(eventInfo: ObjectEvent): Promise<Code | undefined>;
94
+ readYy(): Promise<YyDataStrict<T>>;
95
+ get dir(): Pathy<unknown>;
96
+ get name(): string;
97
+ /**
98
+ * Reprocess an existing file after it has been modified.
99
+ */
100
+ reloadFile(path: Pathy, virtualContent?: string): Promise<void>;
101
+ getGmlFile(path: Pathy): Code | undefined;
102
+ protected updateParent(): void;
103
+ updateGlobals(initial?: boolean): void;
104
+ updateAllSymbols(initial?: boolean): void;
105
+ updateDiagnostics(): void;
106
+ protected addGmlFile(path: Pathy<string>): Code;
107
+ reload(): Promise<void>;
108
+ onRemove(): Promise<void>;
109
+ protected addObjectFile(children: Pathy<string>[]): void;
110
+ protected addScriptFile(children: Pathy<string>[]): void;
111
+ protected initiallyReadAndParseGml(): Promise<any[]>;
112
+ get assetTypeKind(): "Any" | "Asset.GMFont" | "Asset.GMObject" | "Asset.GMPath" | "Asset.GMRoom" | "Asset.GMScript" | "Asset.GMShader" | "Asset.GMSound" | "Asset.GMSprite" | "Asset.GMTimeline";
113
+ static from<T extends YyResourceType>(project: Project, resource: YypResource): Promise<Asset<T> | undefined>;
114
+ }
115
+ //# sourceMappingURL=project.asset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.asset.d.ts","sourceRoot":"","sources":["../src/project.asset.ts"],"names":[],"mappings":"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"}