@bscotch/yy
Version:
Stringify, parse, read, and write GameMaker yy and yyp files.
56 lines • 2.12 kB
JavaScript
import { z } from 'zod';
import { yyParentSchema } from './YyBase.js';
import { nameField } from './utility.js';
export const yyExtensionStringTypeSchema = z
.literal(1)
.describe('Numeric index representing a string type.');
export const yyExtensionNumberTypeSchema = z
.literal(2)
.describe('Numeric index representing a double (real) type.');
export const yyExtensionValueTypeSchema = z.union([
yyExtensionStringTypeSchema,
yyExtensionNumberTypeSchema,
]);
const yyExtensionConstantSchema = z.object({
resourceType: z.literal('GMExtensionConstant').default('GMExtensionConstant'),
resourceVersion: z.string().default('1.0'),
name: z.string(),
hidden: z.boolean().default(false),
value: z
.string()
.describe('The raw text value of the macro. Must be parsed as code to get the actual value.'),
});
const yyExtensionFunctionSchema = z.object({
resourceType: z.literal('GMExtensionFunction').default('GMExtensionFunction'),
resourceVersion: z.string().default('1.0'),
name: z.string(),
externalName: z.string(),
documentation: z.string().default(''),
argCount: z.number().default(0),
args: z.array(yyExtensionValueTypeSchema).default([]),
help: z
.string()
.describe('The function signature as a string, manually provided.'),
hidden: z.boolean().default(false),
kind: z.number().default(4),
returnType: yyExtensionValueTypeSchema,
});
const yyExtensionFileSchema = z
.object({
resourceType: z.literal('GMExtensionFile'),
resourceVersion: z.string().default('1.0'),
constants: z.array(yyExtensionConstantSchema).default([]),
functions: z.array(yyExtensionFunctionSchema).default([]),
})
.passthrough();
export const yyExtensionSchema = z
.object({
[nameField]: z.string().optional(),
resourceType: z.literal('GMExtension').default('GMExtension'),
resourceVersion: z.string().default('1.2'),
name: z.string(),
files: z.array(yyExtensionFileSchema).default([]),
parent: yyParentSchema,
})
.passthrough();
//# sourceMappingURL=YyExtension.js.map