@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.
- package/LICENSE.md +29 -0
- package/README.md +151 -0
- package/assets/GmlSpec.xml +11419 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/jsdoc.d.ts +79 -0
- package/dist/jsdoc.d.ts.map +1 -0
- package/dist/jsdoc.feather.d.ts +23 -0
- package/dist/jsdoc.feather.d.ts.map +1 -0
- package/dist/jsdoc.feather.js +143 -0
- package/dist/jsdoc.feather.js.map +1 -0
- package/dist/jsdoc.js +468 -0
- package/dist/jsdoc.js.map +1 -0
- package/dist/jsdoc.test.d.ts +2 -0
- package/dist/jsdoc.test.d.ts.map +1 -0
- package/dist/jsdoc.test.js +185 -0
- package/dist/jsdoc.test.js.map +1 -0
- package/dist/lexer.d.ts +3 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +14 -0
- package/dist/lexer.js.map +1 -0
- package/dist/lexer.test.d.ts +2 -0
- package/dist/lexer.test.d.ts.map +1 -0
- package/dist/lexer.test.js +78 -0
- package/dist/lexer.test.js.map +1 -0
- package/dist/lib.objects.d.ts +190 -0
- package/dist/lib.objects.d.ts.map +1 -0
- package/dist/lib.objects.js +242 -0
- package/dist/lib.objects.js.map +1 -0
- package/dist/logger.d.ts +13 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +14 -0
- package/dist/logger.js.map +1 -0
- package/dist/modules.d.ts +19 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +320 -0
- package/dist/modules.js.map +1 -0
- package/dist/modules.test.d.ts +2 -0
- package/dist/modules.test.d.ts.map +1 -0
- package/dist/modules.test.js +57 -0
- package/dist/modules.test.js.map +1 -0
- package/dist/modules.types.d.ts +78 -0
- package/dist/modules.types.d.ts.map +1 -0
- package/dist/modules.types.js +2 -0
- package/dist/modules.types.js.map +1 -0
- package/dist/modules.util.d.ts +5 -0
- package/dist/modules.util.d.ts.map +1 -0
- package/dist/modules.util.js +13 -0
- package/dist/modules.util.js.map +1 -0
- package/dist/parser.d.ts +121 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +571 -0
- package/dist/parser.js.map +1 -0
- package/dist/parser.test.d.ts +2 -0
- package/dist/parser.test.d.ts.map +1 -0
- package/dist/parser.test.js +143 -0
- package/dist/parser.test.js.map +1 -0
- package/dist/parser.utility.d.ts +29 -0
- package/dist/parser.utility.d.ts.map +1 -0
- package/dist/parser.utility.js +125 -0
- package/dist/parser.utility.js.map +1 -0
- package/dist/project.asset.d.ts +115 -0
- package/dist/project.asset.d.ts.map +1 -0
- package/dist/project.asset.js +802 -0
- package/dist/project.asset.js.map +1 -0
- package/dist/project.code.d.ts +130 -0
- package/dist/project.code.d.ts.map +1 -0
- package/dist/project.code.js +570 -0
- package/dist/project.code.js.map +1 -0
- package/dist/project.d.ts +533 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.diagnostics.d.ts +32 -0
- package/dist/project.diagnostics.d.ts.map +1 -0
- package/dist/project.diagnostics.js +23 -0
- package/dist/project.diagnostics.js.map +1 -0
- package/dist/project.js +1216 -0
- package/dist/project.js.map +1 -0
- package/dist/project.location.d.ts +133 -0
- package/dist/project.location.d.ts.map +1 -0
- package/dist/project.location.js +219 -0
- package/dist/project.location.js.map +1 -0
- package/dist/project.native.d.ts +26 -0
- package/dist/project.native.d.ts.map +1 -0
- package/dist/project.native.js +321 -0
- package/dist/project.native.js.map +1 -0
- package/dist/project.spec.d.ts +1298 -0
- package/dist/project.spec.d.ts.map +1 -0
- package/dist/project.spec.js +263 -0
- package/dist/project.spec.js.map +1 -0
- package/dist/project.test.d.ts +2 -0
- package/dist/project.test.d.ts.map +1 -0
- package/dist/project.test.js +633 -0
- package/dist/project.test.js.map +1 -0
- package/dist/shaderDefaults.d.ts +3 -0
- package/dist/shaderDefaults.d.ts.map +1 -0
- package/dist/shaderDefaults.js +32 -0
- package/dist/shaderDefaults.js.map +1 -0
- package/dist/signifiers.d.ts +54 -0
- package/dist/signifiers.d.ts.map +1 -0
- package/dist/signifiers.flags.d.ts +38 -0
- package/dist/signifiers.flags.d.ts.map +1 -0
- package/dist/signifiers.flags.js +131 -0
- package/dist/signifiers.flags.js.map +1 -0
- package/dist/signifiers.js +117 -0
- package/dist/signifiers.js.map +1 -0
- package/dist/spine.d.ts +28 -0
- package/dist/spine.d.ts.map +1 -0
- package/dist/spine.js +64 -0
- package/dist/spine.js.map +1 -0
- package/dist/spine.test.d.ts +2 -0
- package/dist/spine.test.d.ts.map +1 -0
- package/dist/spine.test.js +420 -0
- package/dist/spine.test.js.map +1 -0
- package/dist/spine.types.d.ts +89 -0
- package/dist/spine.types.d.ts.map +1 -0
- package/dist/spine.types.js +2 -0
- package/dist/spine.types.js.map +1 -0
- package/dist/test.lib.d.ts +3 -0
- package/dist/test.lib.d.ts.map +1 -0
- package/dist/test.lib.js +16 -0
- package/dist/test.lib.js.map +1 -0
- package/dist/tokens.categories.d.ts +22 -0
- package/dist/tokens.categories.d.ts.map +1 -0
- package/dist/tokens.categories.js +78 -0
- package/dist/tokens.categories.js.map +1 -0
- package/dist/tokens.code.d.ts +2 -0
- package/dist/tokens.code.d.ts.map +1 -0
- package/dist/tokens.code.js +523 -0
- package/dist/tokens.code.js.map +1 -0
- package/dist/tokens.d.ts +130 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +13 -0
- package/dist/tokens.js.map +1 -0
- package/dist/tokens.lib.d.ts +15 -0
- package/dist/tokens.lib.d.ts.map +1 -0
- package/dist/tokens.lib.js +12 -0
- package/dist/tokens.lib.js.map +1 -0
- package/dist/tokens.shared.d.ts +4 -0
- package/dist/tokens.shared.d.ts.map +1 -0
- package/dist/tokens.shared.js +35 -0
- package/dist/tokens.shared.js.map +1 -0
- package/dist/tokens.strings.d.ts +5 -0
- package/dist/tokens.strings.d.ts.map +1 -0
- package/dist/tokens.strings.js +111 -0
- package/dist/tokens.strings.js.map +1 -0
- package/dist/types.checks.d.ts +50 -0
- package/dist/types.checks.d.ts.map +1 -0
- package/dist/types.checks.js +246 -0
- package/dist/types.checks.js.map +1 -0
- package/dist/types.d.ts +152 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.feather.d.ts +21 -0
- package/dist/types.feather.d.ts.map +1 -0
- package/dist/types.feather.js +156 -0
- package/dist/types.feather.js.map +1 -0
- package/dist/types.hover.d.ts +4 -0
- package/dist/types.hover.d.ts.map +1 -0
- package/dist/types.hover.js +99 -0
- package/dist/types.hover.js.map +1 -0
- package/dist/types.js +457 -0
- package/dist/types.js.map +1 -0
- package/dist/types.primitives.d.ts +10 -0
- package/dist/types.primitives.d.ts.map +1 -0
- package/dist/types.primitives.js +88 -0
- package/dist/types.primitives.js.map +1 -0
- package/dist/types.sprites.d.ts +8 -0
- package/dist/types.sprites.d.ts.map +1 -0
- package/dist/types.sprites.js +417 -0
- package/dist/types.sprites.js.map +1 -0
- package/dist/types.test.d.ts +2 -0
- package/dist/types.test.d.ts.map +1 -0
- package/dist/types.test.js +62 -0
- package/dist/types.test.js.map +1 -0
- package/dist/util.d.ts +50 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +168 -0
- package/dist/util.js.map +1 -0
- package/dist/util.test.d.ts +3 -0
- package/dist/util.test.d.ts.map +1 -0
- package/dist/util.test.js +63 -0
- package/dist/util.test.js.map +1 -0
- package/dist/visitor.assign.d.ts +24 -0
- package/dist/visitor.assign.d.ts.map +1 -0
- package/dist/visitor.assign.js +112 -0
- package/dist/visitor.assign.js.map +1 -0
- package/dist/visitor.d.ts +89 -0
- package/dist/visitor.d.ts.map +1 -0
- package/dist/visitor.functionExpression.d.ts +7 -0
- package/dist/visitor.functionExpression.d.ts.map +1 -0
- package/dist/visitor.functionExpression.js +216 -0
- package/dist/visitor.functionExpression.js.map +1 -0
- package/dist/visitor.globals.d.ts +59 -0
- package/dist/visitor.globals.d.ts.map +1 -0
- package/dist/visitor.globals.js +271 -0
- package/dist/visitor.globals.js.map +1 -0
- package/dist/visitor.identifierAccessor.d.ts +6 -0
- package/dist/visitor.identifierAccessor.d.ts.map +1 -0
- package/dist/visitor.identifierAccessor.js +381 -0
- package/dist/visitor.identifierAccessor.js.map +1 -0
- package/dist/visitor.js +605 -0
- package/dist/visitor.js.map +1 -0
- package/dist/visitor.processor.d.ts +66 -0
- package/dist/visitor.processor.d.ts.map +1 -0
- package/dist/visitor.processor.js +147 -0
- package/dist/visitor.processor.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { pathy } from '@bscotch/pathy';
|
|
2
|
+
import { GameMakerIde, GameMakerLauncher } from '@bscotch/stitch-launcher';
|
|
3
|
+
import { ok } from 'node:assert';
|
|
4
|
+
import { readFile } from 'node:fs/promises';
|
|
5
|
+
import { parseStringPromise } from 'xml2js';
|
|
6
|
+
import { parseJsdoc } from './jsdoc.js';
|
|
7
|
+
import { logger } from './logger.js';
|
|
8
|
+
import { gmlSpecSchema } from './project.spec.js';
|
|
9
|
+
import { Signifier } from './signifiers.js';
|
|
10
|
+
import { typeFromParsedJsdocs } from './types.feather.js';
|
|
11
|
+
import { Type } from './types.js';
|
|
12
|
+
import { addSpriteInfoStruct } from './types.sprites.js';
|
|
13
|
+
import { StitchParserError, assert } from './util.js';
|
|
14
|
+
export class Native {
|
|
15
|
+
globalSelf;
|
|
16
|
+
types;
|
|
17
|
+
specs;
|
|
18
|
+
objectInstanceBase;
|
|
19
|
+
constructor(globalSelf, types) {
|
|
20
|
+
this.globalSelf = globalSelf;
|
|
21
|
+
this.types = types;
|
|
22
|
+
}
|
|
23
|
+
load() {
|
|
24
|
+
assert(this.specs.length, 'No specs to load!');
|
|
25
|
+
// Prepare the base object instance type.
|
|
26
|
+
this.objectInstanceBase = new Type('Struct');
|
|
27
|
+
const idInstance = new Type('Id.Instance');
|
|
28
|
+
this.types.set('Id.Instance', idInstance);
|
|
29
|
+
idInstance.extends = this.objectInstanceBase;
|
|
30
|
+
const assetGmObject = new Type('Asset.GMObject');
|
|
31
|
+
assetGmObject.extends = this.objectInstanceBase;
|
|
32
|
+
this.types.set('Asset.GMObject', assetGmObject);
|
|
33
|
+
// The `throw` function is not in the spec, so add it manually.
|
|
34
|
+
const throwsType = new Type('Function').named('throw');
|
|
35
|
+
throwsType.addParameter(0, 'message', { type: Type.Any, optional: false });
|
|
36
|
+
const throws = new Signifier(this.globalSelf, 'throw', throwsType);
|
|
37
|
+
this.globalSelf.addMember(throws);
|
|
38
|
+
this.types.set('Function.throw', throwsType);
|
|
39
|
+
throws.def = {};
|
|
40
|
+
throws.native = 'Base';
|
|
41
|
+
// The `static_get` function just returns a blank Struct type instead
|
|
42
|
+
// of inferring the static struct from the argument. This function
|
|
43
|
+
// replaces that signature to make it more useful.
|
|
44
|
+
const staticGetType = typeFromParsedJsdocs(parseJsdoc(`
|
|
45
|
+
/// @template {Function|Struct} T
|
|
46
|
+
/// @param {T} target
|
|
47
|
+
/// @returns {StaticType<T>}
|
|
48
|
+
`), this.types, false)[0];
|
|
49
|
+
staticGetType.named('static_get');
|
|
50
|
+
const staticGet = new Signifier(this.globalSelf, 'static_get', staticGetType);
|
|
51
|
+
this.globalSelf.addMember(staticGet);
|
|
52
|
+
this.types.set('Function.static_get', staticGetType);
|
|
53
|
+
staticGet.def = {};
|
|
54
|
+
staticGet.native = 'Base';
|
|
55
|
+
// The `display_get_frequency` function is not in the spec, so add it manually.
|
|
56
|
+
const displayGetFrequencyType = new Type('Function').named('display_get_frequency');
|
|
57
|
+
displayGetFrequencyType.addReturnType(Type.Real);
|
|
58
|
+
const displayGetFrequency = new Signifier(this.globalSelf, 'display_get_frequency', displayGetFrequencyType);
|
|
59
|
+
this.globalSelf.addMember(displayGetFrequency);
|
|
60
|
+
this.types.set('Function.display_get_frequency', displayGetFrequencyType);
|
|
61
|
+
displayGetFrequency.def = {};
|
|
62
|
+
displayGetFrequency.native = 'Base';
|
|
63
|
+
// Process all of the found specs
|
|
64
|
+
for (const spec of this.specs) {
|
|
65
|
+
logger.info(`Loading spec for module ${spec.module}`);
|
|
66
|
+
this.loadConstants(spec);
|
|
67
|
+
this.loadVariables(spec);
|
|
68
|
+
this.loadStructs(spec);
|
|
69
|
+
this.loadFunctions(spec);
|
|
70
|
+
}
|
|
71
|
+
// Update the base instance type using instance variables.
|
|
72
|
+
for (const member of this.globalSelf.listMembers()) {
|
|
73
|
+
if (member.instance) {
|
|
74
|
+
this.objectInstanceBase.addMember(member);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
this.objectInstanceBase.isReadonly = true;
|
|
78
|
+
// Have the base Id.Instance and Asset.GmObject types
|
|
79
|
+
// use the object instance base as their parent, and make them readonly.
|
|
80
|
+
idInstance.isReadonly = true;
|
|
81
|
+
assetGmObject.isReadonly = true;
|
|
82
|
+
}
|
|
83
|
+
loadVariables(spec) {
|
|
84
|
+
for (const variable of spec.variables) {
|
|
85
|
+
assert(variable, 'Variable must be defined');
|
|
86
|
+
const type = Type.fromFeatherString(variable.type, this.types, true);
|
|
87
|
+
const symbol = new Signifier(this.globalSelf, variable.name, type)
|
|
88
|
+
.describe(variable.description)
|
|
89
|
+
.deprecate(variable.deprecated);
|
|
90
|
+
symbol.writable = variable.writable;
|
|
91
|
+
symbol.native = variable.module;
|
|
92
|
+
symbol.global = !variable.instance;
|
|
93
|
+
symbol.instance = variable.instance;
|
|
94
|
+
this.globalSelf.addMember(symbol);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
loadFunctions(spec) {
|
|
98
|
+
for (const func of spec.functions) {
|
|
99
|
+
const existing = this.globalSelf.getMember(func.name);
|
|
100
|
+
if (existing) {
|
|
101
|
+
logger.warn(`Native function ${func.name} already exists, skipping.`);
|
|
102
|
+
if (!existing.description && func.description) {
|
|
103
|
+
existing.describe(func.description);
|
|
104
|
+
}
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const typeName = `Function.${func.name}`;
|
|
108
|
+
// Need a type and a symbol for each function.
|
|
109
|
+
const functionType = (this.types.get(typeName) || new Type('Function').named(func.name)).describe(func.description);
|
|
110
|
+
this.types.set(typeName, functionType);
|
|
111
|
+
// Create a new generic type for this function (in particular, to be re-used by types that contain it!)
|
|
112
|
+
const genericType = new Type('ArgumentIdentity');
|
|
113
|
+
genericType.isGeneric = true;
|
|
114
|
+
const generics = { ArgumentIdentity: [genericType] };
|
|
115
|
+
const usesGenerics = func.parameters?.some((param) => param.name.includes('ArgumentIdentity')) || func.returnType?.includes('ArgumentIdentity');
|
|
116
|
+
const addGenericToContainer = (typeString) => {
|
|
117
|
+
if (!usesGenerics)
|
|
118
|
+
return typeString;
|
|
119
|
+
const replaced = typeString.replace(/^(id.ds[a-z]+|array)(<\w+>)?/i, `$1<ArgumentIdentity>`);
|
|
120
|
+
return replaced;
|
|
121
|
+
};
|
|
122
|
+
// Add parameters to the type.
|
|
123
|
+
assert(func.parameters, 'Function must have parameters');
|
|
124
|
+
for (let i = 0; i < func.parameters.length; i++) {
|
|
125
|
+
const param = func.parameters[i];
|
|
126
|
+
assert(param, 'Parameter must be defined');
|
|
127
|
+
const paramType = Type.fromFeatherString(addGenericToContainer(param.type), [generics, this.types], true);
|
|
128
|
+
functionType
|
|
129
|
+
.addParameter(i, param.name, {
|
|
130
|
+
type: paramType,
|
|
131
|
+
optional: param.optional,
|
|
132
|
+
})
|
|
133
|
+
.describe(param.description);
|
|
134
|
+
}
|
|
135
|
+
// Add return type to the type.
|
|
136
|
+
functionType.addReturnType(Type.fromFeatherString(addGenericToContainer(func.returnType), [generics, this.types], true));
|
|
137
|
+
const symbol = new Signifier(this.globalSelf, func.name, functionType).deprecate(func.deprecated);
|
|
138
|
+
symbol.writable = false;
|
|
139
|
+
symbol.native = func.module;
|
|
140
|
+
functionType.signifier = symbol;
|
|
141
|
+
this.globalSelf.addMember(symbol);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
loadConstants(spec) {
|
|
145
|
+
// Handle the constants.
|
|
146
|
+
// Each constant value represents a unique expression
|
|
147
|
+
// of its type (e.g. it's not just a Real, it's the Real
|
|
148
|
+
// value 7 or whatever). Unlike the structs section of
|
|
149
|
+
// the spec, which are *only* used for types, constants
|
|
150
|
+
// are referenceabled in the code. Therefore we need
|
|
151
|
+
// a unique symbol and type for each constant value,
|
|
152
|
+
// along with a type that collects all of those types.
|
|
153
|
+
// First group them all by "class". The empty-string
|
|
154
|
+
// class represents the absence of a class.
|
|
155
|
+
const constantsByClass = new Map();
|
|
156
|
+
for (const constant of spec.constants) {
|
|
157
|
+
const klass = constant.class || '';
|
|
158
|
+
constantsByClass.set(klass, constantsByClass.get(klass) || []);
|
|
159
|
+
constantsByClass.get(klass).push(constant);
|
|
160
|
+
}
|
|
161
|
+
// Then create a type for each class and a symbol for each constant.
|
|
162
|
+
for (const [klass, constants] of constantsByClass) {
|
|
163
|
+
if (!klass) {
|
|
164
|
+
for (const constant of constants) {
|
|
165
|
+
assert(constant, 'Constant must be defined');
|
|
166
|
+
const symbol = this.globalSelf.getMember(constant.name) ||
|
|
167
|
+
new Signifier(this.globalSelf, constant.name, Type.fromFeatherString(constant.type, this.types, true)).describe(constant.description);
|
|
168
|
+
symbol.writable = false;
|
|
169
|
+
symbol.native = constant.module;
|
|
170
|
+
this.globalSelf.addMember(symbol);
|
|
171
|
+
}
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
// Figure out what types are in use by this class.
|
|
175
|
+
const typeNames = new Set();
|
|
176
|
+
for (const constant of constants) {
|
|
177
|
+
assert(constant, 'Constant must be defined');
|
|
178
|
+
typeNames.add(constant.type);
|
|
179
|
+
}
|
|
180
|
+
ok(typeNames.size, `Class ${klass} has no types`);
|
|
181
|
+
// Create the base type for the class.
|
|
182
|
+
const classTypeName = `Constant.${klass}`;
|
|
183
|
+
const typeString = [...typeNames.values()].join('|');
|
|
184
|
+
const classType = this.types.get(classTypeName) ||
|
|
185
|
+
Type.fromFeatherString(typeString, this.types, true)[0].named(klass);
|
|
186
|
+
this.types.set(classTypeName, classType);
|
|
187
|
+
// Create symbols for each class member.
|
|
188
|
+
for (const constant of constants) {
|
|
189
|
+
const symbol = this.globalSelf.getMember(constant.name) ||
|
|
190
|
+
new Signifier(this.globalSelf, constant.name).describe(constant.description);
|
|
191
|
+
symbol.writable = false;
|
|
192
|
+
symbol.native = constant.module;
|
|
193
|
+
symbol.setType(classType);
|
|
194
|
+
const typeName = `${classTypeName}.${constant.name}`;
|
|
195
|
+
this.types.set(typeName, classType);
|
|
196
|
+
this.globalSelf.addMember(symbol);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
loadStructs(spec) {
|
|
201
|
+
// Create struct types. Each one extends the base Struct type.
|
|
202
|
+
addSpriteInfoStruct(this.types);
|
|
203
|
+
for (const struct of spec.structures) {
|
|
204
|
+
if (!struct.name) {
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
const typeName = `Struct.${struct.name}`;
|
|
208
|
+
const structType = this.types.get(typeName) || new Type('Struct').named(struct.name);
|
|
209
|
+
ok(!structType.listMembers().length, `Type ${typeName} already exists`);
|
|
210
|
+
this.types.set(typeName, structType);
|
|
211
|
+
for (const prop of struct.properties) {
|
|
212
|
+
if (prop && !structType.getMember(prop.name)) {
|
|
213
|
+
const type = Type.fromFeatherString(prop.type, this.types, true);
|
|
214
|
+
structType
|
|
215
|
+
.addMember(prop.name, { type, writable: prop.writable })
|
|
216
|
+
.describe(prop.description);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Set all native structs as read-only
|
|
221
|
+
for (const struct of spec.structures) {
|
|
222
|
+
if (!struct.name) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
const typeName = `Struct.${struct.name}`;
|
|
226
|
+
const structType = this.types.get(typeName);
|
|
227
|
+
ok(structType, `Type ${typeName} does not exist`);
|
|
228
|
+
structType.isReadonly = true;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
static async from(filePaths, globalSelf, types) {
|
|
232
|
+
filePaths = filePaths || [Native.fallbackGmlSpecPath];
|
|
233
|
+
const parsed = (await Promise.all(filePaths.map((path) => {
|
|
234
|
+
try {
|
|
235
|
+
return Native.parse(path.absolute);
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
logger.error(err);
|
|
239
|
+
}
|
|
240
|
+
return;
|
|
241
|
+
}))).filter((x) => !!x);
|
|
242
|
+
const native = new Native(globalSelf, types);
|
|
243
|
+
native.specs = parsed;
|
|
244
|
+
// Ensure the base module is always first
|
|
245
|
+
native.specs.sort((a, b) => {
|
|
246
|
+
if (a.module.toLowerCase() === 'base') {
|
|
247
|
+
return -1;
|
|
248
|
+
}
|
|
249
|
+
else if (b.module.toLowerCase() === 'base') {
|
|
250
|
+
return 1;
|
|
251
|
+
}
|
|
252
|
+
return 0;
|
|
253
|
+
});
|
|
254
|
+
native.load();
|
|
255
|
+
return native;
|
|
256
|
+
}
|
|
257
|
+
static async parse(specFilePath) {
|
|
258
|
+
const specRaw = await readFile(specFilePath, 'utf8');
|
|
259
|
+
const asJson = await parseStringPromise(specRaw.replace('\ufeff', ''), {
|
|
260
|
+
trim: true,
|
|
261
|
+
normalize: true,
|
|
262
|
+
emptyTag() {
|
|
263
|
+
return {};
|
|
264
|
+
},
|
|
265
|
+
// Prevent surprises if modules provide single entries
|
|
266
|
+
explicitArray: true,
|
|
267
|
+
}); // Prevent possible errors: "Non-white space before first tag"
|
|
268
|
+
try {
|
|
269
|
+
return gmlSpecSchema.parse(asJson);
|
|
270
|
+
}
|
|
271
|
+
catch (zodError) {
|
|
272
|
+
const err = new StitchParserError(`Error parsing spec file "${specFilePath}"`);
|
|
273
|
+
err.cause = zodError;
|
|
274
|
+
logger.error(err);
|
|
275
|
+
throw err;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
static fallbackGmlSpecPath = pathy(import.meta.url).resolveTo('../../assets/GmlSpec.xml');
|
|
279
|
+
static async findHelpLinksFile(ideVersion) {
|
|
280
|
+
const ides = await GameMakerIde.listInstalled();
|
|
281
|
+
const ide = ides.find((ide) => ide.version === ideVersion) || ides[0];
|
|
282
|
+
return ide?.directory.join('RoboHelp/helpdocs_keywords.json');
|
|
283
|
+
}
|
|
284
|
+
static async listSpecFiles(options) {
|
|
285
|
+
if (!options.runtimeVersion && options.ideVersion) {
|
|
286
|
+
logger.warn('No stitch config found, looking up runtime version');
|
|
287
|
+
// Look up the runtime version that matches the project's IDE version.
|
|
288
|
+
const usingRelease = await GameMakerIde.findRelease({
|
|
289
|
+
ideVersion: options.ideVersion,
|
|
290
|
+
});
|
|
291
|
+
options.runtimeVersion = usingRelease?.runtime.version;
|
|
292
|
+
}
|
|
293
|
+
if (options.runtimeVersion) {
|
|
294
|
+
// Find the locally installed runtime folder
|
|
295
|
+
const installedRuntime = await GameMakerLauncher.findInstalledRuntime({
|
|
296
|
+
version: options.runtimeVersion,
|
|
297
|
+
});
|
|
298
|
+
if (installedRuntime) {
|
|
299
|
+
logger.info(`Looking for spec files in "${installedRuntime.directory?.absolute}"`);
|
|
300
|
+
const specs = await pathy(installedRuntime.directory).listChildrenRecursively({
|
|
301
|
+
filter(path) {
|
|
302
|
+
return path.basename === 'GmlSpec.xml' || undefined;
|
|
303
|
+
},
|
|
304
|
+
maxDepth: 3,
|
|
305
|
+
});
|
|
306
|
+
if (specs.length) {
|
|
307
|
+
return specs;
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
logger.warn('Found runtime, but could not find any GmlSpec.xml files!');
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
logger.warn(`Could not find runtime version ${options.runtimeVersion} locally!`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
logger.warn('Falling back to default GmlSpec.xml included with Stitch.');
|
|
318
|
+
return [Native.fallbackGmlSpecPath];
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=project.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.native.js","sourceRoot":"","sources":["../src/project.native.ts"],"names":[],"mappings":"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"}
|