@bscotch/stitch-config 0.4.0 → 0.5.0

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/README.md CHANGED
@@ -9,3 +9,34 @@ The `stitch.config.json` file is used for configuration options that:
9
9
  - Are specific to the project (i.e. not general configuration)
10
10
  - Must be followed by all collaborators on that project
11
11
  - Are not machine-dependent nor user-dependent
12
+
13
+ It should therefore be tracked in your project's Git history.
14
+
15
+ ## Usage
16
+
17
+ ### Programmatic
18
+
19
+ You can import the schemas from the main entrypoint:
20
+
21
+ ```ts
22
+ import { stitchConfigSchema } from '@bscotch/stitch-config';
23
+ ```
24
+
25
+ And a few GameMaker project-management functions from the 'projects' entrypoint:
26
+
27
+ ```ts
28
+ import {
29
+ findProjectConfigPath,
30
+ ensureProjectConfig, // Initialize a config file
31
+ loadProjectConfig,
32
+ saveProjectConfig,
33
+ applyGroupAssignments, // Apply texture group and audio group assignments from a config to its project
34
+ } from '@bscotch/stitch-config/project';
35
+ ```
36
+
37
+ ### CLI
38
+
39
+ If you install globally you can use the CLI via `stitch-config`. Otherwise you can call it in a local install with `npx stitch-config`.
40
+
41
+ - `stitch-config init <yypFile>`: Ensure a Stitch config file exists for the target project
42
+ - `stitch-config sync-groups <yypFile>`: The Stitch config allows specifying audio and texture group assignment rules. This command updates the sprites and sounds to follow those rules.
package/dist/cli.d.mts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.mts","sourceRoot":"","sources":["../src/cli.mts"],"names":[],"mappings":""}
package/dist/cli.mjs ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import { applyGroupAssignments, ensureProjectConfig } from './project.js';
3
+ const [command, ...args] = process.argv.slice(2);
4
+ if (command === 'init') {
5
+ const [yypFile] = args;
6
+ if (!yypFile || askingForHelp(yypFile)) {
7
+ console.error('Usage: stitch-config init <yypFile>');
8
+ console.error('\nEnsures that a Stitch Config file exists for the target project.');
9
+ process.exit(1);
10
+ }
11
+ await ensureProjectConfig(yypFile);
12
+ }
13
+ else if (command === 'sync-groups') {
14
+ const [yypFile] = args;
15
+ if (!yypFile || askingForHelp(yypFile)) {
16
+ console.error('Usage: stitch-config sync-groups <yypFile>');
17
+ console.error('\nUpdate Sprites and Sounds so that their texture/audio groups match what the config says they should have.');
18
+ process.exit(1);
19
+ }
20
+ await applyGroupAssignments(yypFile);
21
+ }
22
+ else {
23
+ console.error(`Unknown command: ${command}`);
24
+ console.error(`Available commands: init, sync-groups`);
25
+ process.exit(1);
26
+ }
27
+ function askingForHelp(arg) {
28
+ return ['-h', '--help', 'help'].includes(arg);
29
+ }
30
+ //# sourceMappingURL=cli.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.mjs","sourceRoot":"","sources":["../src/cli.mts"],"names":[],"mappings":";AACA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE1E,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CACX,oEAAoE,CACrE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;KAAM,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;IACrC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO,CAAC,KAAK,CACX,6GAA6G,CAC9G,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type StitchConfig } from './schema.ts';
2
+ /**
3
+ * Ensure that any texture/audio group assignments set in the config
4
+ * (if found) are being applied to the appropriate assets.
5
+ */
6
+ export declare function applyGroupAssignments(yypPath: string): Promise<void>;
7
+ export declare function ensureProjectConfig(yypPath: string): Promise<void>;
8
+ /**
9
+ * Given a path to a GameMaker project's YYP file, load
10
+ * its Stitch Config file if it has one. Else return an
11
+ * empty config.
12
+ */
13
+ export declare function loadProjectConfig(yypPath: string): Promise<StitchConfig>;
14
+ export declare function saveProjectConfig(yypPath: string, config: StitchConfig): Promise<void>;
15
+ /**
16
+ * Given a path to a GameMaker project's YYP file, get
17
+ * the path to where its config file should be. Asserts
18
+ * existence of the yyp file.
19
+ */
20
+ export declare function findProjectConfigPath(yypPath: string): Promise<{
21
+ filename: string;
22
+ fullpath: string;
23
+ parent: string;
24
+ ext: `.${string}`;
25
+ }>;
26
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,iBAoE1D;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxE;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,CAcvB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,iBAQ5E;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM;;;;;GAK1D"}
@@ -0,0 +1,117 @@
1
+ import { ensureGroups, joinPaths, listYyFiles, parsePath, Yy, } from '@bscotch/yy';
2
+ import { ok } from 'node:assert';
3
+ import fsp from 'node:fs/promises';
4
+ import { stitchConfigFilename, stitchConfigSchema, } from "./schema.js";
5
+ /**
6
+ * Ensure that any texture/audio group assignments set in the config
7
+ * (if found) are being applied to the appropriate assets.
8
+ */
9
+ export async function applyGroupAssignments(yypPath) {
10
+ const config = await loadProjectConfig(yypPath);
11
+ for (const kind of ['audio', 'texture']) {
12
+ // Make sure the group exists in the YYP file
13
+ const groupNames = Object.values(config[`${kind}GroupAssignments`] || {});
14
+ if (!groupNames.length)
15
+ continue;
16
+ await ensureGroups(yypPath, kind, groupNames);
17
+ // For each folder in the assignment config, find all matching
18
+ // resources and update their group. They apply by specificy, so
19
+ // can sort them by *longest* folder and apply the first match.
20
+ const assignments = Object.entries(config[`${kind}GroupAssignments`] || {});
21
+ // Sort by folder length
22
+ assignments.sort((a, b) => b[0].length - a[0].length);
23
+ const resourceParentFolder = joinPaths(parsePath(yypPath).parent, kind === 'audio' ? 'sounds' : 'sprites');
24
+ const yys = await listYyFiles(resourceParentFolder);
25
+ // Try to allow for some parallelization since we have to read a LOT
26
+ // of files.
27
+ const waits = [];
28
+ for (const yyFile of yys) {
29
+ waits.push(Yy.read(yyFile.path, kind === 'audio' ? 'sounds' : 'sprites').then(async (yy) => {
30
+ // Start from the *end* of the assignments and apply the first
31
+ // that matches (if any)
32
+ for (const [targetFolder, targetGroup] of assignments) {
33
+ const inFolder = yy.parent.path.replace(/^folders[/\\](.*)\.yy$/, '$1');
34
+ const isMatch = inFolder === targetFolder ||
35
+ inFolder.startsWith(`${targetFolder}/`);
36
+ if (!isMatch)
37
+ continue;
38
+ // Update the assigned group if it's different
39
+ if (kind === 'audio') {
40
+ const yySound = yy;
41
+ if (yySound.audioGroupId.name !== targetGroup) {
42
+ yySound.audioGroupId = {
43
+ name: targetGroup,
44
+ path: `audiogroups/${targetGroup}`,
45
+ };
46
+ await Yy.write(yyFile.path, yySound, 'sounds');
47
+ }
48
+ }
49
+ else {
50
+ const yySprite = yy;
51
+ if (yySprite.textureGroupId.name !== targetGroup) {
52
+ yySprite.textureGroupId = {
53
+ name: targetGroup,
54
+ path: `texturegroups/${targetGroup}`,
55
+ };
56
+ await Yy.write(yyFile.path, yySprite, 'sprites');
57
+ }
58
+ }
59
+ // No need to keep going if we got a match!
60
+ break;
61
+ }
62
+ }));
63
+ }
64
+ await Promise.allSettled(waits);
65
+ }
66
+ }
67
+ export async function ensureProjectConfig(yypPath) {
68
+ const configPath = await findProjectConfigPath(yypPath);
69
+ if (!(await fileExists(configPath.fullpath))) {
70
+ await saveProjectConfig(yypPath, stitchConfigSchema.parse({}));
71
+ }
72
+ }
73
+ /**
74
+ * Given a path to a GameMaker project's YYP file, load
75
+ * its Stitch Config file if it has one. Else return an
76
+ * empty config.
77
+ */
78
+ export async function loadProjectConfig(yypPath) {
79
+ const configPath = await findProjectConfigPath(yypPath);
80
+ if (!(await fileExists(configPath.fullpath))) {
81
+ return stitchConfigSchema.parse({});
82
+ }
83
+ try {
84
+ const raw = await fsp.readFile(configPath.fullpath, 'utf8');
85
+ return stitchConfigSchema.parse(JSON.parse(raw));
86
+ }
87
+ catch (err) {
88
+ console.error('Failed to load existing Stitch config. Check for syntax and content errors.');
89
+ throw err;
90
+ }
91
+ }
92
+ export async function saveProjectConfig(yypPath, config) {
93
+ const configPath = await findProjectConfigPath(yypPath);
94
+ config = stitchConfigSchema.parse(config);
95
+ await fsp.writeFile(configPath.fullpath, JSON.stringify(config, null, 2), 'utf8');
96
+ }
97
+ /**
98
+ * Given a path to a GameMaker project's YYP file, get
99
+ * the path to where its config file should be. Asserts
100
+ * existence of the yyp file.
101
+ */
102
+ export async function findProjectConfigPath(yypPath) {
103
+ ok(yypPath.endsWith('.yyp'), 'Target file must be a .yyp');
104
+ ok(await fileExists(yypPath), 'yyp file not found');
105
+ const configFile = joinPaths(parsePath(yypPath).parent, stitchConfigFilename);
106
+ return parsePath(configFile);
107
+ }
108
+ async function fileExists(path) {
109
+ try {
110
+ await fsp.access(path);
111
+ return true;
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ }
117
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts CHANGED
@@ -1,33 +1,25 @@
1
1
  import { z } from 'zod';
2
+ export declare const stitchConfigFilename = "stitch.config.json";
3
+ /**
4
+ * Workaround for Zod4 Record<string,string> failing
5
+ * when a field name matches "constructor"
6
+ * (See https://github.com/colinhacks/zod/issues/5066)
7
+ */
8
+ export type PermissiveStringRecord = z.infer<typeof permissiveStringRecord>;
9
+ export declare const permissiveStringRecord: z.ZodObject<{}, z.core.$catchall<z.ZodString>>;
2
10
  export declare const jsonSchemaUrl = "https://raw.githubusercontent.com/bscotch/stitch/develop/packages/config/schemas/stitch.config.schema.json";
3
11
  export type NewSoundDefaults = z.infer<typeof newSoundDefaultsSchema>;
4
12
  export declare const newSoundDefaultsSchema: z.ZodObject<{
5
13
  mono: z.ZodOptional<z.ZodBoolean>;
6
- }, "strip", z.ZodTypeAny, {
7
- mono?: boolean | undefined;
8
- }, {
9
- mono?: boolean | undefined;
10
- }>;
14
+ }, z.core.$strip>;
11
15
  export type GameConsoleLineStyle = z.infer<typeof gameConsoleLineStyleSchema>;
12
16
  export declare const gameConsoleLineStyleSchema: z.ZodObject<{
13
17
  base: z.ZodOptional<z.ZodString>;
14
18
  description: z.ZodOptional<z.ZodString>;
15
19
  pattern: z.ZodString;
16
20
  caseSensitive: z.ZodOptional<z.ZodBoolean>;
17
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
18
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
19
- base: z.ZodOptional<z.ZodString>;
20
- description: z.ZodOptional<z.ZodString>;
21
- pattern: z.ZodString;
22
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
23
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
24
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
25
- base: z.ZodOptional<z.ZodString>;
26
- description: z.ZodOptional<z.ZodString>;
27
- pattern: z.ZodString;
28
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
29
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
30
- }, z.ZodTypeAny, "passthrough">>;
21
+ styles: z.ZodOptional<z.ZodObject<{}, z.core.$catchall<z.ZodString>>>;
22
+ }, z.core.$loose>;
31
23
  export type GameConsoleStyle = z.infer<typeof gameConsoleStyleSchema>;
32
24
  export declare const gameConsoleStyleSchema: z.ZodObject<{
33
25
  base: z.ZodOptional<z.ZodString>;
@@ -36,312 +28,24 @@ export declare const gameConsoleStyleSchema: z.ZodObject<{
36
28
  description: z.ZodOptional<z.ZodString>;
37
29
  pattern: z.ZodString;
38
30
  caseSensitive: z.ZodOptional<z.ZodBoolean>;
39
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
40
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
41
- base: z.ZodOptional<z.ZodString>;
42
- description: z.ZodOptional<z.ZodString>;
43
- pattern: z.ZodString;
44
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
45
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
46
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
47
- base: z.ZodOptional<z.ZodString>;
48
- description: z.ZodOptional<z.ZodString>;
49
- pattern: z.ZodString;
50
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
51
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
52
- }, z.ZodTypeAny, "passthrough">>, "many">>;
53
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
54
- base: z.ZodOptional<z.ZodString>;
55
- lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
56
- base: z.ZodOptional<z.ZodString>;
57
- description: z.ZodOptional<z.ZodString>;
58
- pattern: z.ZodString;
59
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
60
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
61
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
62
- base: z.ZodOptional<z.ZodString>;
63
- description: z.ZodOptional<z.ZodString>;
64
- pattern: z.ZodString;
65
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
66
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
67
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
68
- base: z.ZodOptional<z.ZodString>;
69
- description: z.ZodOptional<z.ZodString>;
70
- pattern: z.ZodString;
71
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
72
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
73
- }, z.ZodTypeAny, "passthrough">>, "many">>;
74
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
75
- base: z.ZodOptional<z.ZodString>;
76
- lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
77
- base: z.ZodOptional<z.ZodString>;
78
- description: z.ZodOptional<z.ZodString>;
79
- pattern: z.ZodString;
80
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
81
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
82
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
83
- base: z.ZodOptional<z.ZodString>;
84
- description: z.ZodOptional<z.ZodString>;
85
- pattern: z.ZodString;
86
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
87
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
88
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
89
- base: z.ZodOptional<z.ZodString>;
90
- description: z.ZodOptional<z.ZodString>;
91
- pattern: z.ZodString;
92
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
93
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
94
- }, z.ZodTypeAny, "passthrough">>, "many">>;
95
- }, z.ZodTypeAny, "passthrough">>;
31
+ styles: z.ZodOptional<z.ZodObject<{}, z.core.$catchall<z.ZodString>>>;
32
+ }, z.core.$loose>>>;
33
+ }, z.core.$loose>;
96
34
  export type StitchConfig = z.infer<typeof stitchConfigSchema>;
97
35
  export declare const stitchConfigSchema: z.ZodObject<{
98
- $schema: z.ZodDefault<z.ZodLiteral<"https://raw.githubusercontent.com/bscotch/stitch/develop/packages/config/schemas/stitch.config.schema.json">>;
99
- textureGroupAssignments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
100
- audioGroupAssignments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
101
- runtimeVersion: z.ZodOptional<z.ZodString>;
102
- newSpriteRules: z.ZodOptional<z.ZodObject<{
103
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
104
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
105
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
106
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
107
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
108
- }, z.ZodTypeAny, "passthrough">>>;
109
- newSoundRules: z.ZodOptional<z.ZodObject<{
110
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
111
- defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
112
- mono: z.ZodOptional<z.ZodBoolean>;
113
- }, "strip", z.ZodTypeAny, {
114
- mono?: boolean | undefined;
115
- }, {
116
- mono?: boolean | undefined;
117
- }>>>;
118
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
119
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
120
- defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
121
- mono: z.ZodOptional<z.ZodBoolean>;
122
- }, "strip", z.ZodTypeAny, {
123
- mono?: boolean | undefined;
124
- }, {
125
- mono?: boolean | undefined;
126
- }>>>;
127
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
128
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
129
- defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
130
- mono: z.ZodOptional<z.ZodBoolean>;
131
- }, "strip", z.ZodTypeAny, {
132
- mono?: boolean | undefined;
133
- }, {
134
- mono?: boolean | undefined;
135
- }>>>;
136
- }, z.ZodTypeAny, "passthrough">>>;
137
- gameConsoleStyle: z.ZodOptional<z.ZodObject<{
138
- base: z.ZodOptional<z.ZodString>;
139
- lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
140
- base: z.ZodOptional<z.ZodString>;
141
- description: z.ZodOptional<z.ZodString>;
142
- pattern: z.ZodString;
143
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
144
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
145
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
146
- base: z.ZodOptional<z.ZodString>;
147
- description: z.ZodOptional<z.ZodString>;
148
- pattern: z.ZodString;
149
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
150
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
151
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
152
- base: z.ZodOptional<z.ZodString>;
153
- description: z.ZodOptional<z.ZodString>;
154
- pattern: z.ZodString;
155
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
156
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
157
- }, z.ZodTypeAny, "passthrough">>, "many">>;
158
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
159
- base: z.ZodOptional<z.ZodString>;
160
- lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
161
- base: z.ZodOptional<z.ZodString>;
162
- description: z.ZodOptional<z.ZodString>;
163
- pattern: z.ZodString;
164
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
165
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
166
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
167
- base: z.ZodOptional<z.ZodString>;
168
- description: z.ZodOptional<z.ZodString>;
169
- pattern: z.ZodString;
170
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
171
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
172
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
173
- base: z.ZodOptional<z.ZodString>;
174
- description: z.ZodOptional<z.ZodString>;
175
- pattern: z.ZodString;
176
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
177
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
178
- }, z.ZodTypeAny, "passthrough">>, "many">>;
179
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
180
- base: z.ZodOptional<z.ZodString>;
181
- lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
182
- base: z.ZodOptional<z.ZodString>;
183
- description: z.ZodOptional<z.ZodString>;
184
- pattern: z.ZodString;
185
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
186
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
187
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
188
- base: z.ZodOptional<z.ZodString>;
189
- description: z.ZodOptional<z.ZodString>;
190
- pattern: z.ZodString;
191
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
192
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
193
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
194
- base: z.ZodOptional<z.ZodString>;
195
- description: z.ZodOptional<z.ZodString>;
196
- pattern: z.ZodString;
197
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
198
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
199
- }, z.ZodTypeAny, "passthrough">>, "many">>;
200
- }, z.ZodTypeAny, "passthrough">>>;
201
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
202
- $schema: z.ZodDefault<z.ZodLiteral<"https://raw.githubusercontent.com/bscotch/stitch/develop/packages/config/schemas/stitch.config.schema.json">>;
203
- textureGroupAssignments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
204
- audioGroupAssignments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
205
- runtimeVersion: z.ZodOptional<z.ZodString>;
206
- newSpriteRules: z.ZodOptional<z.ZodObject<{
207
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
208
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
209
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
210
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
211
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
212
- }, z.ZodTypeAny, "passthrough">>>;
213
- newSoundRules: z.ZodOptional<z.ZodObject<{
214
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
215
- defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
216
- mono: z.ZodOptional<z.ZodBoolean>;
217
- }, "strip", z.ZodTypeAny, {
218
- mono?: boolean | undefined;
219
- }, {
220
- mono?: boolean | undefined;
221
- }>>>;
222
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
223
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
224
- defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
225
- mono: z.ZodOptional<z.ZodBoolean>;
226
- }, "strip", z.ZodTypeAny, {
227
- mono?: boolean | undefined;
228
- }, {
229
- mono?: boolean | undefined;
230
- }>>>;
231
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
232
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
233
- defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
234
- mono: z.ZodOptional<z.ZodBoolean>;
235
- }, "strip", z.ZodTypeAny, {
236
- mono?: boolean | undefined;
237
- }, {
238
- mono?: boolean | undefined;
239
- }>>>;
240
- }, z.ZodTypeAny, "passthrough">>>;
241
- gameConsoleStyle: z.ZodOptional<z.ZodObject<{
242
- base: z.ZodOptional<z.ZodString>;
243
- lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
244
- base: z.ZodOptional<z.ZodString>;
245
- description: z.ZodOptional<z.ZodString>;
246
- pattern: z.ZodString;
247
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
248
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
249
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
250
- base: z.ZodOptional<z.ZodString>;
251
- description: z.ZodOptional<z.ZodString>;
252
- pattern: z.ZodString;
253
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
254
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
255
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
256
- base: z.ZodOptional<z.ZodString>;
257
- description: z.ZodOptional<z.ZodString>;
258
- pattern: z.ZodString;
259
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
260
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
261
- }, z.ZodTypeAny, "passthrough">>, "many">>;
262
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
263
- base: z.ZodOptional<z.ZodString>;
264
- lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
265
- base: z.ZodOptional<z.ZodString>;
266
- description: z.ZodOptional<z.ZodString>;
267
- pattern: z.ZodString;
268
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
269
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
270
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
271
- base: z.ZodOptional<z.ZodString>;
272
- description: z.ZodOptional<z.ZodString>;
273
- pattern: z.ZodString;
274
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
275
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
276
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
277
- base: z.ZodOptional<z.ZodString>;
278
- description: z.ZodOptional<z.ZodString>;
279
- pattern: z.ZodString;
280
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
281
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
282
- }, z.ZodTypeAny, "passthrough">>, "many">>;
283
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
284
- base: z.ZodOptional<z.ZodString>;
285
- lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
286
- base: z.ZodOptional<z.ZodString>;
287
- description: z.ZodOptional<z.ZodString>;
288
- pattern: z.ZodString;
289
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
290
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
291
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
292
- base: z.ZodOptional<z.ZodString>;
293
- description: z.ZodOptional<z.ZodString>;
294
- pattern: z.ZodString;
295
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
296
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
297
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
298
- base: z.ZodOptional<z.ZodString>;
299
- description: z.ZodOptional<z.ZodString>;
300
- pattern: z.ZodString;
301
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
302
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
303
- }, z.ZodTypeAny, "passthrough">>, "many">>;
304
- }, z.ZodTypeAny, "passthrough">>>;
305
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
306
- $schema: z.ZodDefault<z.ZodLiteral<"https://raw.githubusercontent.com/bscotch/stitch/develop/packages/config/schemas/stitch.config.schema.json">>;
307
- textureGroupAssignments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
308
- audioGroupAssignments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
36
+ $schema: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"https://raw.githubusercontent.com/bscotch/stitch/develop/packages/config/schemas/stitch.config.schema.json">>>;
37
+ textureGroupAssignments: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
38
+ audioGroupAssignments: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
309
39
  runtimeVersion: z.ZodOptional<z.ZodString>;
310
40
  newSpriteRules: z.ZodOptional<z.ZodObject<{
311
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
312
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
313
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
314
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
315
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
316
- }, z.ZodTypeAny, "passthrough">>>;
41
+ allowedNames: z.ZodOptional<z.ZodArray<z.ZodString>>;
42
+ }, z.core.$loose>>;
317
43
  newSoundRules: z.ZodOptional<z.ZodObject<{
318
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
319
- defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
320
- mono: z.ZodOptional<z.ZodBoolean>;
321
- }, "strip", z.ZodTypeAny, {
322
- mono?: boolean | undefined;
323
- }, {
324
- mono?: boolean | undefined;
325
- }>>>;
326
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
327
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
44
+ allowedNames: z.ZodOptional<z.ZodArray<z.ZodString>>;
328
45
  defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
329
46
  mono: z.ZodOptional<z.ZodBoolean>;
330
- }, "strip", z.ZodTypeAny, {
331
- mono?: boolean | undefined;
332
- }, {
333
- mono?: boolean | undefined;
334
- }>>>;
335
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
336
- allowedNames: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
337
- defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
338
- mono: z.ZodOptional<z.ZodBoolean>;
339
- }, "strip", z.ZodTypeAny, {
340
- mono?: boolean | undefined;
341
- }, {
342
- mono?: boolean | undefined;
343
- }>>>;
344
- }, z.ZodTypeAny, "passthrough">>>;
47
+ }, z.core.$strip>>>;
48
+ }, z.core.$loose>>;
345
49
  gameConsoleStyle: z.ZodOptional<z.ZodObject<{
346
50
  base: z.ZodOptional<z.ZodString>;
347
51
  lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -349,62 +53,8 @@ export declare const stitchConfigSchema: z.ZodObject<{
349
53
  description: z.ZodOptional<z.ZodString>;
350
54
  pattern: z.ZodString;
351
55
  caseSensitive: z.ZodOptional<z.ZodBoolean>;
352
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
353
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
354
- base: z.ZodOptional<z.ZodString>;
355
- description: z.ZodOptional<z.ZodString>;
356
- pattern: z.ZodString;
357
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
358
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
359
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
360
- base: z.ZodOptional<z.ZodString>;
361
- description: z.ZodOptional<z.ZodString>;
362
- pattern: z.ZodString;
363
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
364
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
365
- }, z.ZodTypeAny, "passthrough">>, "many">>;
366
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
367
- base: z.ZodOptional<z.ZodString>;
368
- lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
369
- base: z.ZodOptional<z.ZodString>;
370
- description: z.ZodOptional<z.ZodString>;
371
- pattern: z.ZodString;
372
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
373
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
374
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
375
- base: z.ZodOptional<z.ZodString>;
376
- description: z.ZodOptional<z.ZodString>;
377
- pattern: z.ZodString;
378
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
379
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
380
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
381
- base: z.ZodOptional<z.ZodString>;
382
- description: z.ZodOptional<z.ZodString>;
383
- pattern: z.ZodString;
384
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
385
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
386
- }, z.ZodTypeAny, "passthrough">>, "many">>;
387
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
388
- base: z.ZodOptional<z.ZodString>;
389
- lines: z.ZodOptional<z.ZodArray<z.ZodObject<{
390
- base: z.ZodOptional<z.ZodString>;
391
- description: z.ZodOptional<z.ZodString>;
392
- pattern: z.ZodString;
393
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
394
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
395
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
396
- base: z.ZodOptional<z.ZodString>;
397
- description: z.ZodOptional<z.ZodString>;
398
- pattern: z.ZodString;
399
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
400
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
401
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
402
- base: z.ZodOptional<z.ZodString>;
403
- description: z.ZodOptional<z.ZodString>;
404
- pattern: z.ZodString;
405
- caseSensitive: z.ZodOptional<z.ZodBoolean>;
406
- styles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
407
- }, z.ZodTypeAny, "passthrough">>, "many">>;
408
- }, z.ZodTypeAny, "passthrough">>>;
409
- }, z.ZodTypeAny, "passthrough">>;
56
+ styles: z.ZodOptional<z.ZodObject<{}, z.core.$catchall<z.ZodString>>>;
57
+ }, z.core.$loose>>>;
58
+ }, z.core.$loose>>;
59
+ }, z.core.$loose>;
410
60
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,aAAa,+GACoF,CAAC;AAE/G,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,eAAO,MAAM,sBAAsB;;;;;;EAOjC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;gCA8BvB,CAAC;AAEjB,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAkBhC,CAAC;AAEJ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAgD5B,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC5E,eAAO,MAAM,sBAAsB,gDAAoC,CAAC;AAQxE,eAAO,MAAM,aAAa,+GACoF,CAAC;AAE/G,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,eAAO,MAAM,sBAAsB;;iBAOjC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,eAAO,MAAM,0BAA0B;;;;;;iBA2BrC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,eAAO,MAAM,sBAAsB;;;;;;;;;iBAiBhC,CAAC;AAEJ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;iBA6C5B,CAAC"}
package/dist/schema.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import { z } from 'zod';
2
+ export const stitchConfigFilename = 'stitch.config.json';
3
+ export const permissiveStringRecord = z.object({}).catchall(z.string());
2
4
  const allowedNames = z
3
5
  .array(z.string())
4
6
  .optional()
@@ -10,8 +12,7 @@ export const newSoundDefaultsSchema = z.object({
10
12
  .optional()
11
13
  .describe('Whether to default new sounds to mono. When not set, the default is stereo.'),
12
14
  });
13
- export const gameConsoleLineStyleSchema = z
14
- .object({
15
+ export const gameConsoleLineStyleSchema = z.looseObject({
15
16
  base: z
16
17
  .string()
17
18
  .optional()
@@ -27,14 +28,12 @@ export const gameConsoleLineStyleSchema = z
27
28
  .boolean()
28
29
  .optional()
29
30
  .describe('If true, the pattern will be treated as case-sensitive. Default is false.'),
30
- styles: z
31
- .record(z.string().describe('CSS string to apply to this capture group.'))
31
+ styles: permissiveStringRecord
32
32
  .optional()
33
33
  .describe("A map of CSS styles to apply to named capture groups in the line, as a CSS string (e.g. 'color: #808080')."),
34
- })
35
- .passthrough();
34
+ });
36
35
  export const gameConsoleStyleSchema = z
37
- .object({
36
+ .looseObject({
38
37
  base: z
39
38
  .string()
40
39
  .optional()
@@ -44,41 +43,37 @@ export const gameConsoleStyleSchema = z
44
43
  .optional()
45
44
  .describe("An array of style rules to apply to lines of the game's STDOUT/STDERR. The first matching rule is used for a given line."),
46
45
  })
47
- .passthrough()
48
46
  .describe("Styling rules for the game's STDOUT/STDERR for compatible runners");
49
47
  export const stitchConfigSchema = z
50
- .object({
51
- $schema: z.literal(jsonSchemaUrl).default(jsonSchemaUrl),
48
+ .looseObject({
49
+ $schema: z.literal(jsonSchemaUrl).optional().default(jsonSchemaUrl),
52
50
  textureGroupAssignments: z
53
- .record(z.string())
54
- .default({})
55
- .describe('A map of resource tree paths to texture groups name. Supported Stitch utilities will use this to assign sprites in those paths (recursively) to the specified texture group.'),
51
+ .record(z.string(), z.string())
52
+ .optional()
53
+ .describe('A map of resource tree paths to texture group names. Supported Stitch utilities will use this to assign sprites in those paths (recursively) to the specified texture group. The most specific match is the on that gets applied.'),
56
54
  audioGroupAssignments: z
57
- .record(z.string())
58
- .default({})
59
- .describe('A map of resource tree paths to audio groups name. Supported Stitch utilities will use this to assign sounds in those paths (recursively) to the specified audio group.'),
55
+ .record(z.string(), z.string())
56
+ .optional()
57
+ .describe('A map of resource tree paths to audio group names. Supported Stitch utilities will use this to assign sounds in those paths (recursively) to the specified audio group. The most specific match is the on that gets applied.'),
60
58
  runtimeVersion: z
61
59
  .string()
62
60
  .optional()
63
61
  .describe('When set, supported Stitch utilities will preferentially use this GameMaker runtime version.'),
64
62
  newSpriteRules: z
65
- .object({ allowedNames })
66
- .passthrough()
63
+ .looseObject({ allowedNames })
67
64
  .optional()
68
65
  .describe('Rules for creating new sprite resources, followed by supported Stitch utilities.'),
69
66
  newSoundRules: z
70
- .object({
67
+ .looseObject({
71
68
  allowedNames,
72
69
  defaults: z
73
- .record(newSoundDefaultsSchema)
70
+ .record(z.string(), newSoundDefaultsSchema)
74
71
  .optional()
75
72
  .describe('Default properties for new sound assets, by name pattern. E.g. `{".*":{ mono: true}}` defaults all new sounds to mono. The first matching pattern is used.'),
76
73
  })
77
- .passthrough()
78
74
  .optional()
79
75
  .describe('Rules for creating new sound resources, followed by supported Stitch utilities.'),
80
76
  gameConsoleStyle: gameConsoleStyleSchema.optional(),
81
77
  })
82
- .passthrough()
83
78
  .describe('Stitch configuration schema. Stitch utilities may support subsets of this configuration.');
84
79
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,YAAY,GAAG,CAAC;KACnB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACjB,QAAQ,EAAE;KACV,QAAQ,CACP,8FAA8F,CAC/F,CAAC;AACJ,MAAM,CAAC,MAAM,aAAa,GACxB,4GAA4G,CAAC;AAG/G,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,CAAC;SACJ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,6EAA6E,CAC9E;CACJ,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sFAAsF,CACvF;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;IACjE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CACP,sMAAsM,CACvM;IACH,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,2EAA2E,CAC5E;IACH,MAAM,EAAE,CAAC;SACN,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CAAC;SACzE,QAAQ,EAAE;SACV,QAAQ,CACP,4GAA4G,CAC7G;CACJ,CAAC;KACD,WAAW,EAAE,CAAC;AAGjB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,2EAA2E,CAC5E;IACH,KAAK,EAAE,CAAC;SACL,KAAK,CAAC,0BAA0B,CAAC;SACjC,QAAQ,EAAE;SACV,QAAQ,CACP,0HAA0H,CAC3H;CACJ,CAAC;KACD,WAAW,EAAE;KACb,QAAQ,CACP,mEAAmE,CACpE,CAAC;AAGJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IACxD,uBAAuB,EAAE,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAClB,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CACP,8KAA8K,CAC/K;IACH,qBAAqB,EAAE,CAAC;SACrB,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAClB,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CACP,yKAAyK,CAC1K;IACH,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,8FAA8F,CAC/F;IACH,cAAc,EAAE,CAAC;SACd,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;SACxB,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,CACP,kFAAkF,CACnF;IACH,aAAa,EAAE,CAAC;SACb,MAAM,CAAC;QACN,YAAY;QACZ,QAAQ,EAAE,CAAC;aACR,MAAM,CAAC,sBAAsB,CAAC;aAC9B,QAAQ,EAAE;aACV,QAAQ,CACP,4JAA4J,CAC7J;KACJ,CAAC;SACD,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,CACP,iFAAiF,CAClF;IACH,gBAAgB,EAAE,sBAAsB,CAAC,QAAQ,EAAE;CACpD,CAAC;KACD,WAAW,EAAE;KACb,QAAQ,CACP,0FAA0F,CAC3F,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bscotch/stitch-config",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Schemas and utilities for the stitch.config.json file.",
5
5
  "keywords": [
6
6
  "stitch",
@@ -14,20 +14,35 @@
14
14
  },
15
15
  "license": "MIT",
16
16
  "type": "module",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ },
22
+ "./project": {
23
+ "types": "./dist/project.d.ts",
24
+ "import": "./dist/project.js"
25
+ }
26
+ },
17
27
  "main": "dist/index.js",
28
+ "bin": {
29
+ "stitch-config": "./dist/cli.mjs"
30
+ },
18
31
  "dependencies": {
19
- "zod": "3.22.4"
32
+ "zod": "4.0.15",
33
+ "@bscotch/yy": "2.6.0"
20
34
  },
21
35
  "devDependencies": {
36
+ "@bscotch/pathy": "^2.12.1",
22
37
  "source-map-support": "0.5.21",
23
- "typescript": "5.3.3",
24
- "zod-to-json-schema": "3.21.4"
38
+ "typescript": "5.9.2"
25
39
  },
26
40
  "publishConfig": {
27
41
  "access": "public"
28
42
  },
29
43
  "scripts": {
30
44
  "build": "tsc --build && node scripts/update-schemas.mjs",
45
+ "test": "node --test src/**/*.test.ts",
31
46
  "watch": "tsc --build --watch"
32
47
  }
33
48
  }