@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,57 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { computeAssetDeps, importAssets } from './modules.js';
|
|
3
|
+
import { Project } from './project.js';
|
|
4
|
+
import { resetSandbox } from './test.lib.js';
|
|
5
|
+
import { assert } from './util.js';
|
|
6
|
+
import { assertThrowsAsync } from './util.test.js';
|
|
7
|
+
describe('Modules', function () {
|
|
8
|
+
it('can compute intra-project dependencies', async function () {
|
|
9
|
+
const projectDir = 'samples/project';
|
|
10
|
+
const project = await Project.initialize(projectDir);
|
|
11
|
+
assert(project);
|
|
12
|
+
const deps = computeAssetDeps(project);
|
|
13
|
+
assert(deps.size > 0, 'No dependencies found');
|
|
14
|
+
// o_object refers to a lot of stuff
|
|
15
|
+
const o_object = [...deps.keys()].find((a) => a.name === 'o_object');
|
|
16
|
+
assert(o_object, 'o_object not found');
|
|
17
|
+
const o_object_deps = deps.get(o_object);
|
|
18
|
+
assert(o_object_deps, 'o_object deps not found');
|
|
19
|
+
assert(o_object_deps.length > 0, 'o_object has no deps');
|
|
20
|
+
assert(o_object_deps[0].requiredBy.name === 'o_object', 'o_object deps are wrong');
|
|
21
|
+
});
|
|
22
|
+
it('can perform a simple import', async function () {
|
|
23
|
+
const targetProject = await resetSandbox();
|
|
24
|
+
const project = await Project.initialize('samples/project');
|
|
25
|
+
assert(project);
|
|
26
|
+
await assertThrowsAsync(async () => {
|
|
27
|
+
await importAssets(project, targetProject, {
|
|
28
|
+
sourceAsset: 'o_child1_child',
|
|
29
|
+
});
|
|
30
|
+
}, 'Missing dependency not caught');
|
|
31
|
+
await importAssets(project, targetProject, {
|
|
32
|
+
sourceAsset: 'o_child1_child',
|
|
33
|
+
onMissingDependency: 'skip',
|
|
34
|
+
});
|
|
35
|
+
expect(targetProject.getAssetByName('o_child1_child')).to.exist;
|
|
36
|
+
});
|
|
37
|
+
it('can perform a deep import', async function () {
|
|
38
|
+
const targetProject = await resetSandbox();
|
|
39
|
+
const project = await Project.initialize('samples/project');
|
|
40
|
+
assert(project);
|
|
41
|
+
const results = await importAssets(project, targetProject, {
|
|
42
|
+
sourceAsset: 'o_child1_child',
|
|
43
|
+
onMissingDependency: 'include',
|
|
44
|
+
});
|
|
45
|
+
expect(results.errors).to.be.empty;
|
|
46
|
+
expect(results.skipped).to.be.empty;
|
|
47
|
+
expect(results.updated).to.be.empty;
|
|
48
|
+
expect(results.created).to.have.lengthOf(3);
|
|
49
|
+
expect(targetProject.getAssetByName('o_child1_child')).to.exist;
|
|
50
|
+
expect(targetProject.getAssetByName('o_child1')).to.exist;
|
|
51
|
+
expect(targetProject.getAssetByName('o_parent')).to.exist;
|
|
52
|
+
});
|
|
53
|
+
xit('can identify import conflicts', async function () {
|
|
54
|
+
// TODO: Add a "conflicted-target" project that has the various sorts of conflicts we can test against.
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=modules.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.test.js","sourceRoot":"","sources":["../src/modules.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,QAAQ,CAAC,SAAS,EAAE;IAClB,EAAE,CAAC,wCAAwC,EAAE,KAAK;QAChD,MAAM,UAAU,GAAG,iBAAiB,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,CAAC;QAEhB,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,uBAAuB,CAAC,CAAC;QAE/C,oCAAoC;QACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACzD,MAAM,CACJ,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,UAAU,EAC/C,yBAAyB,CAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK;QACrC,MAAM,aAAa,GAAG,MAAM,YAAY,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,CAAC;QAEhB,MAAM,iBAAiB,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE;gBACzC,WAAW,EAAE,gBAAgB;aAC9B,CAAC,CAAC;QACL,CAAC,EAAE,+BAA+B,CAAC,CAAC;QAEpC,MAAM,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE;YACzC,WAAW,EAAE,gBAAgB;YAC7B,mBAAmB,EAAE,MAAM;SAC5B,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK;QACnC,MAAM,aAAa,GAAG,MAAM,YAAY,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,CAAC;QAEhB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE;YACzD,WAAW,EAAE,gBAAgB;YAC7B,mBAAmB,EAAE,SAAS;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAChE,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC1D,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,+BAA+B,EAAE,KAAK;QACxC,uGAAuG;IACzG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type YyResourceType } from '@bscotch/yy';
|
|
2
|
+
export interface ImportAction {
|
|
3
|
+
action: 'create' | 'replace';
|
|
4
|
+
/** Name of the asset */
|
|
5
|
+
asset: string;
|
|
6
|
+
/** The folder in the target where this asset would live */
|
|
7
|
+
targetFolder: string;
|
|
8
|
+
}
|
|
9
|
+
interface RequirementBase {
|
|
10
|
+
requiredBy: {
|
|
11
|
+
name: string;
|
|
12
|
+
kind: YyResourceType;
|
|
13
|
+
};
|
|
14
|
+
requirement: {
|
|
15
|
+
name: string;
|
|
16
|
+
kind: YyResourceType;
|
|
17
|
+
};
|
|
18
|
+
relationship: 'parent' | 'child' | 'ref' | 'code';
|
|
19
|
+
}
|
|
20
|
+
export interface AssetDependency extends RequirementBase {
|
|
21
|
+
relationship: 'parent' | 'child' | 'ref';
|
|
22
|
+
}
|
|
23
|
+
export interface CodeDependency extends RequirementBase {
|
|
24
|
+
relationship: 'code';
|
|
25
|
+
signifier: string;
|
|
26
|
+
/** Where the signifier was defined */
|
|
27
|
+
def: {
|
|
28
|
+
file: string;
|
|
29
|
+
line: number;
|
|
30
|
+
column: number;
|
|
31
|
+
};
|
|
32
|
+
/** Where the signifier was referenced */
|
|
33
|
+
ref: {
|
|
34
|
+
file: string;
|
|
35
|
+
line: number;
|
|
36
|
+
column: number;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export type Dependency = AssetDependency | CodeDependency;
|
|
40
|
+
export interface ImportModuleOptions {
|
|
41
|
+
/**
|
|
42
|
+
* The folder in the source project to import from. Either
|
|
43
|
+
* this or sourceAsset can be specified.
|
|
44
|
+
*/
|
|
45
|
+
sourceFolder?: string;
|
|
46
|
+
/**
|
|
47
|
+
* The asset in the source project to import from. Either
|
|
48
|
+
* this or sourceFolder can be specified.
|
|
49
|
+
*/
|
|
50
|
+
sourceAsset?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Folder to import into. Defaults to `sourceFolder`.
|
|
53
|
+
*/
|
|
54
|
+
targetFolder?: string;
|
|
55
|
+
/**
|
|
56
|
+
* By default all resources are imported, but
|
|
57
|
+
* you can specify a subset here.
|
|
58
|
+
*/
|
|
59
|
+
types?: YyResourceType[];
|
|
60
|
+
/**
|
|
61
|
+
* A "missing dependency" is one that is neither in the target project
|
|
62
|
+
* nor in the `sourceFolder` of the source project, but that is referenced
|
|
63
|
+
* by an asset in `sourceFolder`. (For example, a sprite or parent object
|
|
64
|
+
* referenced by an object).
|
|
65
|
+
*
|
|
66
|
+
* If set to 'error', the import will abort if there are any missing deps.
|
|
67
|
+
*
|
|
68
|
+
* If set to 'skip', the import will proceed without the missing dependencies.
|
|
69
|
+
*
|
|
70
|
+
* If set to 'include', the missing deps will be included in the import and also
|
|
71
|
+
* placed in the `targetProject`'s `targetFolder`.
|
|
72
|
+
*
|
|
73
|
+
* @default 'error'
|
|
74
|
+
*/
|
|
75
|
+
onMissingDependency?: 'error' | 'skip' | 'include';
|
|
76
|
+
}
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=modules.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.types.d.ts","sourceRoot":"","sources":["../src/modules.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,eAAe;IACvB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,cAAc,CAAC;KACtB,CAAC;IACF,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,cAAc,CAAC;KACtB,CAAC;IACF,YAAY,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;CACnD;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,YAAY,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;CAC1C;AAED,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,yCAAyC;IACzC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD;AAED,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,cAAc,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CACpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.types.js","sourceRoot":"","sources":["../src/modules.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.util.d.ts","sourceRoot":"","sources":["../src/modules.util.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ;CAKjD;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAIf"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class StitchImportError extends Error {
|
|
2
|
+
constructor(message, asserter) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'StitchImportError';
|
|
5
|
+
Error.captureStackTrace(this, asserter || this.constructor);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export function assertStitchImportClaim(claim, message) {
|
|
9
|
+
if (!claim) {
|
|
10
|
+
throw new StitchImportError(message, assertStitchImportClaim);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=modules.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.util.js","sourceRoot":"","sources":["../src/modules.util.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe,EAAE,QAAmB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAU,EACV,OAAe;IAEf,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
|
package/dist/parser.d.ts
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { CstParser, type CstNode, type ILexingResult } from 'chevrotain';
|
|
2
|
+
import type { GmlVisitor } from '../gml-cst.js';
|
|
3
|
+
import type { JsdocSummary } from './jsdoc.js';
|
|
4
|
+
import type { GmlParseError } from './project.diagnostics.js';
|
|
5
|
+
import type { Reference, ReferenceableType } from './project.location.js';
|
|
6
|
+
import type { Signifier } from './signifiers.js';
|
|
7
|
+
import type { Type, TypeStore } from './types.js';
|
|
8
|
+
export interface GmlParsed {
|
|
9
|
+
lexed: ILexingResult;
|
|
10
|
+
cst: CstNode;
|
|
11
|
+
errors: GmlParseError[];
|
|
12
|
+
}
|
|
13
|
+
export declare class GmlParser extends CstParser {
|
|
14
|
+
/** Parse GML Code, e.g. from a file. */
|
|
15
|
+
parse(code: string): GmlParsed;
|
|
16
|
+
readonly lexer: import("chevrotain").Lexer;
|
|
17
|
+
readonly file: import("chevrotain").ParserMethod<[], CstNode>;
|
|
18
|
+
optionallyConsumeSemicolon(): void;
|
|
19
|
+
readonly statements: import("chevrotain").ParserMethod<[], CstNode>;
|
|
20
|
+
readonly statement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
21
|
+
readonly jsdoc: import("chevrotain").ParserMethod<[], CstNode>;
|
|
22
|
+
readonly jsdocGml: import("chevrotain").ParserMethod<[], CstNode>;
|
|
23
|
+
readonly jsdocJs: import("chevrotain").ParserMethod<[], CstNode>;
|
|
24
|
+
readonly stringLiteral: import("chevrotain").ParserMethod<[], CstNode>;
|
|
25
|
+
readonly multilineDoubleStringLiteral: import("chevrotain").ParserMethod<[], CstNode>;
|
|
26
|
+
readonly multilineSingleStringLiteral: import("chevrotain").ParserMethod<[], CstNode>;
|
|
27
|
+
readonly templateLiteral: import("chevrotain").ParserMethod<[], CstNode>;
|
|
28
|
+
readonly repeatStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
29
|
+
readonly returnStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
30
|
+
readonly ifStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
31
|
+
readonly elseIfStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
32
|
+
readonly elseStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
33
|
+
readonly blockableStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
34
|
+
readonly blockableStatements: import("chevrotain").ParserMethod<[], CstNode>;
|
|
35
|
+
readonly blockStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
36
|
+
readonly expressionStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
37
|
+
readonly expression: import("chevrotain").ParserMethod<[], CstNode>;
|
|
38
|
+
readonly binaryExpression: import("chevrotain").ParserMethod<[], CstNode>;
|
|
39
|
+
readonly ternaryExpression: import("chevrotain").ParserMethod<[], CstNode>;
|
|
40
|
+
readonly primaryExpression: import("chevrotain").ParserMethod<[], CstNode>;
|
|
41
|
+
readonly identifier: import("chevrotain").ParserMethod<[], CstNode>;
|
|
42
|
+
readonly identifierAccessor: import("chevrotain").ParserMethod<[], CstNode>;
|
|
43
|
+
readonly parenthesizedExpression: import("chevrotain").ParserMethod<[], CstNode>;
|
|
44
|
+
readonly accessorSuffixes: import("chevrotain").ParserMethod<[], CstNode>;
|
|
45
|
+
readonly dotAccessSuffix: import("chevrotain").ParserMethod<[], CstNode>;
|
|
46
|
+
readonly arrayAccessSuffix: import("chevrotain").ParserMethod<[], CstNode>;
|
|
47
|
+
readonly structAccessorSuffix: import("chevrotain").ParserMethod<[], CstNode>;
|
|
48
|
+
readonly listAccessorSuffix: import("chevrotain").ParserMethod<[], CstNode>;
|
|
49
|
+
readonly mapAccessorSuffix: import("chevrotain").ParserMethod<[], CstNode>;
|
|
50
|
+
readonly gridAccessorSuffix: import("chevrotain").ParserMethod<[], CstNode>;
|
|
51
|
+
readonly arrayMutationAccessorSuffix: import("chevrotain").ParserMethod<[], CstNode>;
|
|
52
|
+
readonly functionArguments: import("chevrotain").ParserMethod<[], CstNode>;
|
|
53
|
+
readonly functionArgument: import("chevrotain").ParserMethod<[], CstNode>;
|
|
54
|
+
readonly emptyStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
55
|
+
readonly enumStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
56
|
+
readonly enumMember: import("chevrotain").ParserMethod<[], CstNode>;
|
|
57
|
+
readonly constructorSuffix: import("chevrotain").ParserMethod<[], CstNode>;
|
|
58
|
+
readonly functionExpression: import("chevrotain").ParserMethod<[], CstNode>;
|
|
59
|
+
readonly functionStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
60
|
+
readonly functionParameters: import("chevrotain").ParserMethod<[], CstNode>;
|
|
61
|
+
readonly functionParameter: import("chevrotain").ParserMethod<[], CstNode>;
|
|
62
|
+
readonly macroStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
63
|
+
readonly forStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
64
|
+
readonly globalVarDeclarationsStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
65
|
+
readonly globalVarDeclarations: import("chevrotain").ParserMethod<[], CstNode>;
|
|
66
|
+
readonly globalVarDeclaration: import("chevrotain").ParserMethod<[], CstNode>;
|
|
67
|
+
readonly localVarDeclarationsStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
68
|
+
readonly localVarDeclarations: import("chevrotain").ParserMethod<[], CstNode>;
|
|
69
|
+
readonly localVarDeclaration: import("chevrotain").ParserMethod<[], CstNode>;
|
|
70
|
+
readonly staticVarDeclarationStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
71
|
+
readonly staticVarDeclaration: import("chevrotain").ParserMethod<[], CstNode>;
|
|
72
|
+
readonly variableAssignmentStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
73
|
+
readonly variableAssignment: import("chevrotain").ParserMethod<[], CstNode>;
|
|
74
|
+
readonly assignment: import("chevrotain").ParserMethod<[], CstNode>;
|
|
75
|
+
readonly assignmentRightHandSide: import("chevrotain").ParserMethod<[], CstNode>;
|
|
76
|
+
readonly arrayLiteral: import("chevrotain").ParserMethod<[], CstNode>;
|
|
77
|
+
readonly structLiteral: import("chevrotain").ParserMethod<[], CstNode>;
|
|
78
|
+
readonly structLiteralEntry: import("chevrotain").ParserMethod<[], CstNode>;
|
|
79
|
+
readonly whileStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
80
|
+
readonly doUntilStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
81
|
+
readonly switchStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
82
|
+
readonly caseStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
83
|
+
readonly defaultStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
84
|
+
readonly breakStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
85
|
+
readonly continueStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
86
|
+
readonly exitStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
87
|
+
readonly withStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
88
|
+
readonly tryStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
89
|
+
readonly catchStatement: import("chevrotain").ParserMethod<[], CstNode>;
|
|
90
|
+
constructor();
|
|
91
|
+
static jsonify(cst: CstNode): string;
|
|
92
|
+
}
|
|
93
|
+
export type NodeContextKind = 'withCondition' | 'withBody' | 'functionParam' | 'functionArg' | 'functionBody' | 'functionReturn' | 'functionStatement' | 'template' | 'arrayMember' | 'assignment';
|
|
94
|
+
export interface Docs {
|
|
95
|
+
type: Type[];
|
|
96
|
+
jsdoc: JsdocSummary;
|
|
97
|
+
}
|
|
98
|
+
export interface VisitorContext {
|
|
99
|
+
/** We're processing a static variable declaration */
|
|
100
|
+
isStatic?: boolean;
|
|
101
|
+
/** While processing a function expression or struct literal, the signifier may come from an assignment operation. */
|
|
102
|
+
signifier?: Signifier;
|
|
103
|
+
/** While processing a function expression, we may have expected type information for the value */
|
|
104
|
+
type?: TypeStore;
|
|
105
|
+
/** While processing `method()` calls, we may find the self-context
|
|
106
|
+
* of the function in the second argument.
|
|
107
|
+
*/
|
|
108
|
+
self?: Type;
|
|
109
|
+
docs?: Docs;
|
|
110
|
+
/** Helpful to get general info about the context of the current node. */
|
|
111
|
+
ctxKindStack: NodeContextKind[];
|
|
112
|
+
/** If we're in a function, the return statement values we've found */
|
|
113
|
+
returns?: (Type | TypeStore)[];
|
|
114
|
+
}
|
|
115
|
+
export declare function withCtxKind<T extends NodeContextKind>(ctx: VisitorContext, kind: T): VisitorContext;
|
|
116
|
+
export declare const parser: GmlParser;
|
|
117
|
+
export declare const GmlVisitorBase: new (...args: any[]) => GmlVisitor<VisitorContext, undefined | void | Type | (Type | TypeStore)[] | TypeStore | {
|
|
118
|
+
item: ReferenceableType;
|
|
119
|
+
ref: Reference;
|
|
120
|
+
}>;
|
|
121
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|