@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,533 @@
|
|
|
1
|
+
import { Pathy } from '@bscotch/pathy';
|
|
2
|
+
import { type StitchConfig } from '@bscotch/stitch-config';
|
|
3
|
+
import { type Yyp, type YypFolder, type YypResource } from '@bscotch/yy';
|
|
4
|
+
import { EventEmitter } from 'events';
|
|
5
|
+
import { ImportModuleOptions } from './modules.types.js';
|
|
6
|
+
import { Asset } from './project.asset.js';
|
|
7
|
+
import { Code } from './project.code.js';
|
|
8
|
+
import { Diagnostic } from './project.diagnostics.js';
|
|
9
|
+
import { Native } from './project.native.js';
|
|
10
|
+
import { Signifier } from './signifiers.js';
|
|
11
|
+
import { StructType, Type } from './types.js';
|
|
12
|
+
export { setLogger, type Logger } from './logger.js';
|
|
13
|
+
export interface SymbolInfo {
|
|
14
|
+
native: boolean;
|
|
15
|
+
symbol: Signifier | Type;
|
|
16
|
+
}
|
|
17
|
+
export interface DiagnosticsEventPayload {
|
|
18
|
+
filePath: string;
|
|
19
|
+
code?: Code;
|
|
20
|
+
diagnostics: Diagnostic[];
|
|
21
|
+
}
|
|
22
|
+
export type OnDiagnostics = (diagnostics: DiagnosticsEventPayload) => void;
|
|
23
|
+
export interface ProjectOptions {
|
|
24
|
+
/**
|
|
25
|
+
* Register a callback to run when diagnostics are emitted.
|
|
26
|
+
* If not provided, a callback can be registered after
|
|
27
|
+
* initialization, but will not receive any diagnostics
|
|
28
|
+
* from the initial parse.
|
|
29
|
+
*/
|
|
30
|
+
onDiagnostics?: OnDiagnostics;
|
|
31
|
+
/**
|
|
32
|
+
* If registered, this callback will be used to report
|
|
33
|
+
* when progress has been made towards loading the project.
|
|
34
|
+
*/
|
|
35
|
+
onLoadProgress?: (increment: number, message?: string) => void;
|
|
36
|
+
settings?: {
|
|
37
|
+
/**
|
|
38
|
+
* Symbols starting with these prefixes that are not declared
|
|
39
|
+
* in the coded will be treated as global symbols. This is
|
|
40
|
+
* useful for ensuring globals created by extensions will not
|
|
41
|
+
* show up as being undeclared.
|
|
42
|
+
*/
|
|
43
|
+
autoDeclareGlobalsPrefixes?: string[];
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export declare class Project {
|
|
47
|
+
readonly yypPath: Pathy<any>;
|
|
48
|
+
readonly options?: ProjectOptions | undefined;
|
|
49
|
+
yyp: Yyp;
|
|
50
|
+
/** Until this resolves, assume that this.yyp is not yet read */
|
|
51
|
+
yypWaiter?: Promise<any>;
|
|
52
|
+
config: StitchConfig;
|
|
53
|
+
readonly assets: Map<string, Asset<"animcurves" | "extensions" | "fonts" | "notes" | "objects" | "particles" | "paths" | "rooms" | "scripts" | "sequences" | "shaders" | "sounds" | "sprites" | "tilesets" | "timelines">>;
|
|
54
|
+
/**
|
|
55
|
+
* Store the "native" functions, constants, and enums on
|
|
56
|
+
* a per-project basis, but separately from the project-specific
|
|
57
|
+
* symbols. The native symbols and types are loaded from the spec,
|
|
58
|
+
* so they can vary between projects. */
|
|
59
|
+
native: Native;
|
|
60
|
+
helpLinks: {
|
|
61
|
+
[method: string]: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* When resolved, the GML spec has been loaded and the
|
|
65
|
+
* `native` property has been populated.
|
|
66
|
+
*/
|
|
67
|
+
nativeWaiter?: Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* The type of the 'global' struct, which contains all globalvars
|
|
70
|
+
* and globally defined functions. */
|
|
71
|
+
self: StructType;
|
|
72
|
+
/**
|
|
73
|
+
* The `global` symbol, which has type `self`. */
|
|
74
|
+
symbol: Signifier;
|
|
75
|
+
/**
|
|
76
|
+
* Non-native global types, which can be referenced in JSDocs
|
|
77
|
+
* and in a symbol's types. */
|
|
78
|
+
readonly types: Map<string, Type<"Array" | "Bool" | "Enum" | "Function" | "Pointer" | "Real" | "String" | "Struct" | "Undefined" | "ArgumentIdentity" | "Any" | "Asset.GMAnimCurve" | "Asset.GMAudioGroup" | "Asset.GMFont" | "Asset.GMObject" | "Asset.GMParticleSystem" | "Asset.GMPath" | "Asset.GMRoom" | "Asset.GMScript" | "Asset.GMSequence" | "Asset.GMShader" | "Asset.GMSound" | "Asset.GMSprite" | "Asset.GMTileSet" | "Asset.GMTimeline" | "Asset.Script" | "Id.AudioEmitter" | "Id.AudioListener" | "Id.AudioSyncGroup" | "Id.BackgroundElement" | "Id.BinaryFile" | "Id.Buffer" | "Id.Camera" | "Id.DsGrid" | "Id.DsList" | "Id.DsMap" | "Id.DsPriority" | "Id.DsQueue" | "Id.DsStack" | "Id.ExternalCall" | "Id.Gif" | "Id.Instance" | "Id.Layer" | "Id.MpGrid" | "Id.ParticleEmitter" | "Id.ParticleSystem" | "Id.ParticleType" | "Id.PhysicsIndex" | "Id.PhysicsParticleGroup" | "Id.Sampler" | "Id.SequenceElement" | "Id.Socket" | "Id.Sound" | "Id.SpriteElement" | "Id.Surface" | "Id.TextFile" | "Id.Texture" | "Id.TileElementId" | "Id.TileMapElement" | "Id.TimeSource" | "Id.Uniform" | "Id.VertexBuffer" | "Id.VertexFormat" | "Mixed" | "EnumMember" | "Unknown" | "Never" | "InstanceType" | "ObjectType" | "StaticType">>;
|
|
79
|
+
protected emitter: EventEmitter<[never]>;
|
|
80
|
+
/** Code that needs to be reprocessed, for one reason or another. */
|
|
81
|
+
protected dirtyFiles: Set<Code>;
|
|
82
|
+
protected constructor(yypPath: Pathy<any>, options?: ProjectOptions | undefined);
|
|
83
|
+
/**
|
|
84
|
+
* @internal For tracking changed code files that will need to be re-parsed.
|
|
85
|
+
*/
|
|
86
|
+
queueDirtyFileUpdate(code: Code): void;
|
|
87
|
+
/**
|
|
88
|
+
* @internal Drain the queue of dirty files, updating their diagnostics
|
|
89
|
+
*/
|
|
90
|
+
drainDirtyFileUpdateQueue(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Update the YYP file to list a specific GameMaker IDE version.
|
|
93
|
+
* Note that the GameMaker IDE will overwrite this with whatever
|
|
94
|
+
* its own version is -- this feature is useful for external tools
|
|
95
|
+
* like Stitch that can manage multiple GameMaker IDE versions.
|
|
96
|
+
*/
|
|
97
|
+
setIdeVersion(version: string): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* The current version of the GameMaker IDE listed in
|
|
100
|
+
* this project's YYP file. This is the GameMaker version that
|
|
101
|
+
* the project was last opened with.
|
|
102
|
+
*/
|
|
103
|
+
get ideVersion(): string;
|
|
104
|
+
/**
|
|
105
|
+
* The directory in which the project lives.
|
|
106
|
+
*/
|
|
107
|
+
get dir(): Pathy;
|
|
108
|
+
/**
|
|
109
|
+
* Get the Stitch config for this project, which defines
|
|
110
|
+
* various settings that may impact rule around adding
|
|
111
|
+
* assets, parsing logs, etc.
|
|
112
|
+
*/
|
|
113
|
+
get stitchConfig(): Pathy<import("zod").objectOutputType<{
|
|
114
|
+
$schema: import("zod").ZodDefault<import("zod").ZodLiteral<"https://raw.githubusercontent.com/bscotch/stitch/develop/packages/config/schemas/stitch.config.schema.json">>;
|
|
115
|
+
textureGroupAssignments: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
116
|
+
audioGroupAssignments: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
117
|
+
runtimeVersion: import("zod").ZodOptional<import("zod").ZodString>;
|
|
118
|
+
newSpriteRules: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
119
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
120
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
121
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
122
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
123
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
124
|
+
}, import("zod").ZodTypeAny, "passthrough">>>;
|
|
125
|
+
newSoundRules: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
126
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
127
|
+
defaults: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
|
|
128
|
+
mono: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
129
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
130
|
+
mono?: boolean | undefined;
|
|
131
|
+
}, {
|
|
132
|
+
mono?: boolean | undefined;
|
|
133
|
+
}>>>;
|
|
134
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
135
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
136
|
+
defaults: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
|
|
137
|
+
mono: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
138
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
139
|
+
mono?: boolean | undefined;
|
|
140
|
+
}, {
|
|
141
|
+
mono?: boolean | undefined;
|
|
142
|
+
}>>>;
|
|
143
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
144
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
145
|
+
defaults: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
|
|
146
|
+
mono: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
147
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
148
|
+
mono?: boolean | undefined;
|
|
149
|
+
}, {
|
|
150
|
+
mono?: boolean | undefined;
|
|
151
|
+
}>>>;
|
|
152
|
+
}, import("zod").ZodTypeAny, "passthrough">>>;
|
|
153
|
+
gameConsoleStyle: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
154
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
155
|
+
lines: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
156
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
157
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
158
|
+
pattern: import("zod").ZodString;
|
|
159
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
160
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
161
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
162
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
163
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
164
|
+
pattern: import("zod").ZodString;
|
|
165
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
166
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
167
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
168
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
169
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
170
|
+
pattern: import("zod").ZodString;
|
|
171
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
172
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
173
|
+
}, import("zod").ZodTypeAny, "passthrough">>, "many">>;
|
|
174
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
175
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
176
|
+
lines: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
177
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
178
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
179
|
+
pattern: import("zod").ZodString;
|
|
180
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
181
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
182
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
183
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
184
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
185
|
+
pattern: import("zod").ZodString;
|
|
186
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
187
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
188
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
189
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
190
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
191
|
+
pattern: import("zod").ZodString;
|
|
192
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
193
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
194
|
+
}, import("zod").ZodTypeAny, "passthrough">>, "many">>;
|
|
195
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
196
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
197
|
+
lines: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
198
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
199
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
200
|
+
pattern: import("zod").ZodString;
|
|
201
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
202
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
203
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
204
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
205
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
206
|
+
pattern: import("zod").ZodString;
|
|
207
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
208
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
209
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
210
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
211
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
212
|
+
pattern: import("zod").ZodString;
|
|
213
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
214
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
215
|
+
}, import("zod").ZodTypeAny, "passthrough">>, "many">>;
|
|
216
|
+
}, import("zod").ZodTypeAny, "passthrough">>>;
|
|
217
|
+
}, import("zod").ZodTypeAny, "passthrough">>;
|
|
218
|
+
/** List the names of the GameMaker configs defined by this project. */
|
|
219
|
+
get configs(): string[];
|
|
220
|
+
/** List the project's "datafiles" (a.k.a. "Included Files"), in the same format as they appear in the YYP file. */
|
|
221
|
+
get datafiles(): {
|
|
222
|
+
name: string;
|
|
223
|
+
resourceType: "GMIncludedFile";
|
|
224
|
+
resourceVersion: string;
|
|
225
|
+
CopyToMask: bigint;
|
|
226
|
+
filePath: string;
|
|
227
|
+
ConfigValues?: Record<string, {
|
|
228
|
+
CopyToMask: string;
|
|
229
|
+
}> | undefined;
|
|
230
|
+
}[];
|
|
231
|
+
/** List the Folders in this project, normalized to regular POSIX paths
|
|
232
|
+
* @example ['my/folder', 'my/other/folder']
|
|
233
|
+
*/
|
|
234
|
+
get folders(): string[];
|
|
235
|
+
/**
|
|
236
|
+
* Run a callback when diagnostics are emitted. Returns an unsubscribe function. */
|
|
237
|
+
onDiagnostics(callback: OnDiagnostics): () => void;
|
|
238
|
+
/** @internal Method that can be called after some code has been parsed to report diagnostics to listeners. */
|
|
239
|
+
emitDiagnostics(code: Code | string, diagnostics: Diagnostic[]): void;
|
|
240
|
+
/**
|
|
241
|
+
* Since GameMaker assets are global they must have unique names independent of their type. Find an asset give it's name. Note that this is case-insensitive!
|
|
242
|
+
* @param name The name of the asset to find, case-insensitive.
|
|
243
|
+
*/
|
|
244
|
+
getAssetByName<Assert extends boolean>(name: string | undefined, options?: {
|
|
245
|
+
assertExists: Assert;
|
|
246
|
+
}): Assert extends true ? Asset : Asset | undefined;
|
|
247
|
+
/**
|
|
248
|
+
* @param name The name of the asset to find and remove, case-insensitive.
|
|
249
|
+
*/
|
|
250
|
+
removeAssetByName(name: string | undefined): Promise<void>;
|
|
251
|
+
getAsset(path: Pathy<any>): Asset | undefined;
|
|
252
|
+
getGmlFile(path: Pathy<any>): Code | undefined;
|
|
253
|
+
/** Normalize path information for a datafile ("Included File") */
|
|
254
|
+
parseIncludedFilePath(filePath: string, name?: string): {
|
|
255
|
+
filePath: string;
|
|
256
|
+
name: string;
|
|
257
|
+
};
|
|
258
|
+
findIncludedFile(filePath: string, name?: string): {
|
|
259
|
+
name: string;
|
|
260
|
+
resourceType: "GMIncludedFile";
|
|
261
|
+
resourceVersion: string;
|
|
262
|
+
CopyToMask: bigint;
|
|
263
|
+
filePath: string;
|
|
264
|
+
ConfigValues?: Record<string, {
|
|
265
|
+
CopyToMask: string;
|
|
266
|
+
}> | undefined;
|
|
267
|
+
} | undefined;
|
|
268
|
+
/**
|
|
269
|
+
* Ensure that the included files listed in the YYP exactly match
|
|
270
|
+
* the files in the `datafiles` directory.
|
|
271
|
+
*/
|
|
272
|
+
syncIncludedFiles(): Promise<void>;
|
|
273
|
+
/** @internal Load an Asset instance into the project's data model. For use by methods that load the project, add assets, etc. */
|
|
274
|
+
registerAsset(resource: Asset): void;
|
|
275
|
+
/**
|
|
276
|
+
* @param from The name of the asset to rename, case-insensitive.
|
|
277
|
+
* @param to The new name for the asset, which must be a valid identifier that doesn't already have an associated asset. The name will be set in the provided casing, but must be unique case-insensitively.
|
|
278
|
+
*/
|
|
279
|
+
renameAsset(from: string, to: string): Promise<void>;
|
|
280
|
+
renameSignifier(signifier: Signifier, newName: string): Promise<void>;
|
|
281
|
+
import(fromProject: Project | string, options?: ImportModuleOptions): Promise<{
|
|
282
|
+
created: string[];
|
|
283
|
+
updated: string[];
|
|
284
|
+
errors: string[];
|
|
285
|
+
skipped: string[];
|
|
286
|
+
}>;
|
|
287
|
+
duplicateAsset(sourceName: string, newPath: string): Promise<Asset<"animcurves" | "extensions" | "fonts" | "notes" | "objects" | "particles" | "paths" | "rooms" | "scripts" | "sequences" | "shaders" | "sounds" | "sprites" | "tilesets" | "timelines">>;
|
|
288
|
+
/**
|
|
289
|
+
* Create a new sound asset. Will not do anything if the asset by this name already exists (but will log an error).
|
|
290
|
+
* @param newSoundPath The POSIX-style path within the asset tree where you want this sound to be created, where the last component is the name of the sound asset.
|
|
291
|
+
* @param fromFile The path to the source sound file to copy into the new asset's directory.
|
|
292
|
+
* @example project.createSound('folder/of/sounds/snd_my_new_sound', 'path/to/sound.mp3');
|
|
293
|
+
*/
|
|
294
|
+
createSound(newSoundPath: string, fromFile: string | Pathy): Promise<Asset<"animcurves" | "extensions" | "fonts" | "notes" | "objects" | "particles" | "paths" | "rooms" | "scripts" | "sequences" | "shaders" | "sounds" | "sprites" | "tilesets" | "timelines"> | undefined>;
|
|
295
|
+
/**
|
|
296
|
+
* Create a new room asset. Will not do anything if the asset by this name already exists (but will log an error).
|
|
297
|
+
* @param newRoomPath The POSIX-style path within the asset tree where you want this asset to be created, where the last component is the name of the asset.
|
|
298
|
+
* @example project.createRoom('folder/of/rooms/rm_my_room');
|
|
299
|
+
*/
|
|
300
|
+
createRoom(newRoomPath: string): Promise<Asset<'rooms'> | undefined>;
|
|
301
|
+
/**
|
|
302
|
+
* Create a new sprite asset. Will not do anything if the asset by this name already exists (but will log an error).
|
|
303
|
+
* @param newSpritePath The POSIX-style path within the asset tree where you want this asset to be created, where the last component is the name of the asset.
|
|
304
|
+
* @param fromImageFile Path to a source PNG image to use as the first frame of the sprite.
|
|
305
|
+
* @example project.createSprite('folder/of/sprites/sp_my_sprite', 'path/to/sprite.png');
|
|
306
|
+
*/
|
|
307
|
+
createSprite(newSpritePath: string, fromImageFile: string | Pathy): Promise<Asset<'sprites'> | undefined>;
|
|
308
|
+
/**
|
|
309
|
+
* Add an object to the yyp file. The string can include separators,
|
|
310
|
+
* in which case folders will be ensured up to the final component.
|
|
311
|
+
* @param newObjectName The POSIX-style path within the asset tree where you want this asset to be created, where the last component is the name of the asset.
|
|
312
|
+
*/
|
|
313
|
+
createObject(newObjectName: string): Promise<Asset<'objects'> | undefined>;
|
|
314
|
+
createShader(path: string): Promise<Asset<'shaders'> | undefined>;
|
|
315
|
+
/**
|
|
316
|
+
* Add a script to the yyp file. The path string can include separators,
|
|
317
|
+
* in which case folders will be ensured up to the final component.
|
|
318
|
+
*/
|
|
319
|
+
createScript(path: string): Promise<Asset<'scripts'> | undefined>;
|
|
320
|
+
protected parseNewAssetPath(path: string): Promise<{
|
|
321
|
+
folder: {
|
|
322
|
+
name: string;
|
|
323
|
+
resourceType: "GMFolder";
|
|
324
|
+
resourceVersion: string;
|
|
325
|
+
folderPath: string;
|
|
326
|
+
tags?: string[] | undefined;
|
|
327
|
+
order?: number | undefined;
|
|
328
|
+
};
|
|
329
|
+
name: string;
|
|
330
|
+
} | undefined>;
|
|
331
|
+
/**
|
|
332
|
+
* Given the path to a yy file for an asset, ensure
|
|
333
|
+
* it has an entry in the yyp file. */
|
|
334
|
+
addAssetToYyp(yyPath: string, options?: {
|
|
335
|
+
skipSave?: boolean;
|
|
336
|
+
}): Promise<YypResource>;
|
|
337
|
+
protected parseFolderPath(path: string | string[]): {
|
|
338
|
+
parts: string[];
|
|
339
|
+
full: string;
|
|
340
|
+
prefix: string;
|
|
341
|
+
};
|
|
342
|
+
listAssetsInFolder(path: string | string[], options?: {
|
|
343
|
+
recursive: boolean;
|
|
344
|
+
}): Asset<"animcurves" | "extensions" | "fonts" | "notes" | "objects" | "particles" | "paths" | "rooms" | "scripts" | "sequences" | "shaders" | "sounds" | "sprites" | "tilesets" | "timelines">[];
|
|
345
|
+
/**
|
|
346
|
+
* Delete a folder recursively. Only allowed if there are no assets
|
|
347
|
+
* in this or any subfolder.
|
|
348
|
+
*/
|
|
349
|
+
deleteFolder(path: string | string[]): Promise<void>;
|
|
350
|
+
/**
|
|
351
|
+
* Rename an existing folder. Allows for renaming any part of
|
|
352
|
+
* the path (useful both "moving" and "renaming" a folder).
|
|
353
|
+
* Array inputs are interpreted as pre-split paths. If the new
|
|
354
|
+
* name matches an existing folder, it will in effect be "merged"
|
|
355
|
+
* with that existing folder.
|
|
356
|
+
*
|
|
357
|
+
* Returns the list of folders and assets that are now in a new
|
|
358
|
+
* location. */
|
|
359
|
+
renameFolder(oldPath: string | string[], newPath: string | string[]): Promise<{
|
|
360
|
+
movedFolders: [from: {
|
|
361
|
+
name: string;
|
|
362
|
+
resourceType: "GMFolder";
|
|
363
|
+
resourceVersion: string;
|
|
364
|
+
folderPath: string;
|
|
365
|
+
tags?: string[] | undefined;
|
|
366
|
+
order?: number | undefined;
|
|
367
|
+
}, to: {
|
|
368
|
+
name: string;
|
|
369
|
+
resourceType: "GMFolder";
|
|
370
|
+
resourceVersion: string;
|
|
371
|
+
folderPath: string;
|
|
372
|
+
tags?: string[] | undefined;
|
|
373
|
+
order?: number | undefined;
|
|
374
|
+
} | undefined][];
|
|
375
|
+
movedAssets: Asset<"animcurves" | "extensions" | "fonts" | "notes" | "objects" | "particles" | "paths" | "rooms" | "scripts" | "sequences" | "shaders" | "sounds" | "sprites" | "tilesets" | "timelines">[];
|
|
376
|
+
} | undefined>;
|
|
377
|
+
/**
|
|
378
|
+
* Add a folder to the yyp file. The string can include separators,
|
|
379
|
+
* in which case nested folders will be created. If an array is provided,
|
|
380
|
+
* it is interpreted as a pre-split path. */
|
|
381
|
+
createFolder(path: string | string[], options?: {
|
|
382
|
+
skipSave?: boolean;
|
|
383
|
+
}): Promise<YypFolder | undefined>;
|
|
384
|
+
saveYyp(): Promise<void>;
|
|
385
|
+
/**
|
|
386
|
+
* The name of a resource, *in lower case*, from
|
|
387
|
+
* a path. This is used as the key for looking up resources.
|
|
388
|
+
*
|
|
389
|
+
* The path can be to the asset's folder, or to any file within
|
|
390
|
+
* that folder.
|
|
391
|
+
*/
|
|
392
|
+
assetNameFromPath(path: Pathy<any>): string;
|
|
393
|
+
/**
|
|
394
|
+
* When first creating an instance, we need to get all project file
|
|
395
|
+
* content into memory for fast access. In particular, we need all
|
|
396
|
+
* yyp, yy, and gml files for scripts and objects. For other asset types
|
|
397
|
+
* we just need their names and yyp filepaths.
|
|
398
|
+
*
|
|
399
|
+
* Can be called at any time -- will only operate on new assets.
|
|
400
|
+
*
|
|
401
|
+
* Returns the list of added assets. Assets are instanced and registered but their
|
|
402
|
+
* code is not parsed!
|
|
403
|
+
*/
|
|
404
|
+
protected loadAssets(options?: ProjectOptions): Promise<Asset[]>;
|
|
405
|
+
protected loadHelpLinks(): Promise<void>;
|
|
406
|
+
reloadConfig(): Promise<import("zod").objectOutputType<{
|
|
407
|
+
$schema: import("zod").ZodDefault<import("zod").ZodLiteral<"https://raw.githubusercontent.com/bscotch/stitch/develop/packages/config/schemas/stitch.config.schema.json">>;
|
|
408
|
+
textureGroupAssignments: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
409
|
+
audioGroupAssignments: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
410
|
+
runtimeVersion: import("zod").ZodOptional<import("zod").ZodString>;
|
|
411
|
+
newSpriteRules: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
412
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
413
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
414
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
415
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
416
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
417
|
+
}, import("zod").ZodTypeAny, "passthrough">>>;
|
|
418
|
+
newSoundRules: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
419
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
420
|
+
defaults: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
|
|
421
|
+
mono: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
422
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
423
|
+
mono?: boolean | undefined;
|
|
424
|
+
}, {
|
|
425
|
+
mono?: boolean | undefined;
|
|
426
|
+
}>>>;
|
|
427
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
428
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
429
|
+
defaults: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
|
|
430
|
+
mono: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
431
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
432
|
+
mono?: boolean | undefined;
|
|
433
|
+
}, {
|
|
434
|
+
mono?: boolean | undefined;
|
|
435
|
+
}>>>;
|
|
436
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
437
|
+
allowedNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
438
|
+
defaults: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
|
|
439
|
+
mono: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
440
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
441
|
+
mono?: boolean | undefined;
|
|
442
|
+
}, {
|
|
443
|
+
mono?: boolean | undefined;
|
|
444
|
+
}>>>;
|
|
445
|
+
}, import("zod").ZodTypeAny, "passthrough">>>;
|
|
446
|
+
gameConsoleStyle: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
447
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
448
|
+
lines: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
449
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
450
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
451
|
+
pattern: import("zod").ZodString;
|
|
452
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
453
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
454
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
455
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
456
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
457
|
+
pattern: import("zod").ZodString;
|
|
458
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
459
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
460
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
461
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
462
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
463
|
+
pattern: import("zod").ZodString;
|
|
464
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
465
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
466
|
+
}, import("zod").ZodTypeAny, "passthrough">>, "many">>;
|
|
467
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
468
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
469
|
+
lines: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
470
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
471
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
472
|
+
pattern: import("zod").ZodString;
|
|
473
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
474
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
475
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
476
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
477
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
478
|
+
pattern: import("zod").ZodString;
|
|
479
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
480
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
481
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
482
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
483
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
484
|
+
pattern: import("zod").ZodString;
|
|
485
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
486
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
487
|
+
}, import("zod").ZodTypeAny, "passthrough">>, "many">>;
|
|
488
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
489
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
490
|
+
lines: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
491
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
492
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
493
|
+
pattern: import("zod").ZodString;
|
|
494
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
495
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
496
|
+
}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
|
|
497
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
498
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
499
|
+
pattern: import("zod").ZodString;
|
|
500
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
501
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
502
|
+
}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
|
|
503
|
+
base: import("zod").ZodOptional<import("zod").ZodString>;
|
|
504
|
+
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
505
|
+
pattern: import("zod").ZodString;
|
|
506
|
+
caseSensitive: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
507
|
+
styles: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
508
|
+
}, import("zod").ZodTypeAny, "passthrough">>, "many">>;
|
|
509
|
+
}, import("zod").ZodTypeAny, "passthrough">>>;
|
|
510
|
+
}, import("zod").ZodTypeAny, "passthrough">>;
|
|
511
|
+
getWindowsName(): Promise<string | undefined>;
|
|
512
|
+
/**
|
|
513
|
+
* Load the GML spec for the project's runtime version, falling
|
|
514
|
+
* back on the included spec if necessary.
|
|
515
|
+
*/
|
|
516
|
+
protected loadGmlSpec(): Promise<void>;
|
|
517
|
+
/**
|
|
518
|
+
* Call to reload the project's yyp file (e.g. because it has changed
|
|
519
|
+
* on disk) and add/remove any resources.
|
|
520
|
+
*/
|
|
521
|
+
reloadYyp(): Promise<void>;
|
|
522
|
+
/**
|
|
523
|
+
* @internal
|
|
524
|
+
* Initialize a collection of new assets by parsing their GML */
|
|
525
|
+
initiallyParseAssetCode(assets: Asset[]): void;
|
|
526
|
+
protected initialize(options?: ProjectOptions): Promise<void>;
|
|
527
|
+
/**
|
|
528
|
+
* Create a new project instance and initialize it.
|
|
529
|
+
*/
|
|
530
|
+
static initialize(yypPath: string, options?: ProjectOptions): Promise<Project>;
|
|
531
|
+
static readonly fallbackGmlSpecPath: Pathy<unknown>;
|
|
532
|
+
}
|
|
533
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { IRecognitionException, IToken } from 'chevrotain';
|
|
2
|
+
import type { IRange, Range } from './project.location.js';
|
|
3
|
+
export type GmlParseError = IRecognitionException & {
|
|
4
|
+
previousToken?: IToken;
|
|
5
|
+
};
|
|
6
|
+
export type DiagnosticSeverity = 'error' | 'warning' | 'info';
|
|
7
|
+
export interface DiagnosticCollections {
|
|
8
|
+
GLOBAL_SELF: Diagnostic[];
|
|
9
|
+
INVALID_OPERATION: Diagnostic[];
|
|
10
|
+
JSDOC_MISMATCH: Diagnostic[];
|
|
11
|
+
MISSING_EVENT_INHERITED: Diagnostic[];
|
|
12
|
+
MISSING_REQUIRED_ARGUMENT: Diagnostic[];
|
|
13
|
+
SYNTAX_ERROR: Diagnostic[];
|
|
14
|
+
TOO_MANY_ARGUMENTS: Diagnostic[];
|
|
15
|
+
UNDECLARED_VARIABLE_REFERENCE: Diagnostic[];
|
|
16
|
+
UNDECLARED_GLOBAL_REFERENCE: Diagnostic[];
|
|
17
|
+
JSDOC: Diagnostic[];
|
|
18
|
+
UNUSED: Diagnostic[];
|
|
19
|
+
}
|
|
20
|
+
export type DiagnosticCollectionName = keyof DiagnosticCollections;
|
|
21
|
+
export declare class Diagnostic {
|
|
22
|
+
readonly message: string;
|
|
23
|
+
readonly location: IRange;
|
|
24
|
+
readonly severity: DiagnosticSeverity;
|
|
25
|
+
readonly payload?: any;
|
|
26
|
+
readonly $tag = "diagnostic";
|
|
27
|
+
constructor(message: string, location: IRange, severity?: DiagnosticSeverity, payload?: any);
|
|
28
|
+
static warn(message: string, location: Range, payload?: any): Diagnostic;
|
|
29
|
+
static error(message: string, location: Range, payload?: any): Diagnostic;
|
|
30
|
+
static info(message: string, location: Range, payload?: any): Diagnostic;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=project.diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.diagnostics.d.ts","sourceRoot":"","sources":["../src/project.diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,MAAM,aAAa,GAAG,qBAAqB,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/E,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAChC,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,uBAAuB,EAAE,UAAU,EAAE,CAAC;IACtC,yBAAyB,EAAE,UAAU,EAAE,CAAC;IACxC,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,kBAAkB,EAAE,UAAU,EAAE,CAAC;IACjC,6BAA6B,EAAE,UAAU,EAAE,CAAC;IAC5C,2BAA2B,EAAE,UAAU,EAAE,CAAC;IAC1C,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AACD,MAAM,MAAM,wBAAwB,GAAG,MAAM,qBAAqB,CAAC;AAEnE,qBAAa,UAAU;IAInB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG;IANxB,QAAQ,CAAC,IAAI,gBAAgB;gBAGlB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,kBAA8B,EACxC,OAAO,CAAC,EAAE,GAAG;IAGxB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG;IAI3D,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG;IAI5D,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG;CAG5D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class Diagnostic {
|
|
2
|
+
message;
|
|
3
|
+
location;
|
|
4
|
+
severity;
|
|
5
|
+
payload;
|
|
6
|
+
$tag = 'diagnostic';
|
|
7
|
+
constructor(message, location, severity = 'warning', payload) {
|
|
8
|
+
this.message = message;
|
|
9
|
+
this.location = location;
|
|
10
|
+
this.severity = severity;
|
|
11
|
+
this.payload = payload;
|
|
12
|
+
}
|
|
13
|
+
static warn(message, location, payload) {
|
|
14
|
+
return new Diagnostic(message, location, 'warning', payload);
|
|
15
|
+
}
|
|
16
|
+
static error(message, location, payload) {
|
|
17
|
+
return new Diagnostic(message, location, 'error', payload);
|
|
18
|
+
}
|
|
19
|
+
static info(message, location, payload) {
|
|
20
|
+
return new Diagnostic(message, location, 'info', payload);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=project.diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.diagnostics.js","sourceRoot":"","sources":["../src/project.diagnostics.ts"],"names":[],"mappings":"AAqBA,MAAM,OAAO,UAAU;IAIV;IACA;IACA;IACA;IANF,IAAI,GAAG,YAAY,CAAC;IAE7B,YACW,OAAe,EACf,QAAgB,EAChB,WAA+B,SAAS,EACxC,OAAa;QAHb,YAAO,GAAP,OAAO,CAAQ;QACf,aAAQ,GAAR,QAAQ,CAAQ;QAChB,aAAQ,GAAR,QAAQ,CAAgC;QACxC,YAAO,GAAP,OAAO,CAAM;IACrB,CAAC;IAEJ,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,QAAe,EAAE,OAAa;QACzD,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,QAAe,EAAE,OAAa;QAC1D,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,QAAe,EAAE,OAAa;QACzD,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF"}
|