@bscotch/gcdata 0.21.2 → 0.22.1

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.
Files changed (58) hide show
  1. package/dist/cl2.character.d.ts +4 -0
  2. package/dist/cl2.character.d.ts.map +1 -0
  3. package/dist/cl2.character.js +4 -0
  4. package/dist/cl2.character.js.map +1 -0
  5. package/dist/cl2.character.parse.d.ts +7 -0
  6. package/dist/cl2.character.parse.d.ts.map +1 -0
  7. package/dist/cl2.character.parse.js +352 -0
  8. package/dist/cl2.character.parse.js.map +1 -0
  9. package/dist/cl2.character.stringify.d.ts +4 -0
  10. package/dist/cl2.character.stringify.d.ts.map +1 -0
  11. package/dist/cl2.character.stringify.js +44 -0
  12. package/dist/cl2.character.stringify.js.map +1 -0
  13. package/dist/cl2.character.types.d.ts +31 -0
  14. package/dist/cl2.character.types.d.ts.map +1 -0
  15. package/dist/cl2.character.types.js +31 -0
  16. package/dist/cl2.character.types.js.map +1 -0
  17. package/dist/cl2.comfort.parse.d.ts.map +1 -1
  18. package/dist/cl2.comfort.parse.js +1 -0
  19. package/dist/cl2.comfort.parse.js.map +1 -1
  20. package/dist/cl2.quest.parse.d.ts.map +1 -1
  21. package/dist/cl2.quest.parse.js +2 -1
  22. package/dist/cl2.quest.parse.js.map +1 -1
  23. package/dist/cl2.quest.stringify.d.ts.map +1 -1
  24. package/dist/cl2.quest.stringify.js +4 -17
  25. package/dist/cl2.quest.stringify.js.map +1 -1
  26. package/dist/cl2.quest.types.d.ts.map +1 -1
  27. package/dist/cl2.quest.types.js +3 -6
  28. package/dist/cl2.quest.types.js.map +1 -1
  29. package/dist/cl2.shared.parse.d.ts +2 -1
  30. package/dist/cl2.shared.parse.d.ts.map +1 -1
  31. package/dist/cl2.shared.parse.js +11 -3
  32. package/dist/cl2.shared.parse.js.map +1 -1
  33. package/dist/cl2.shared.stringify.d.ts +8 -0
  34. package/dist/cl2.shared.stringify.d.ts.map +1 -0
  35. package/dist/cl2.shared.stringify.js +26 -0
  36. package/dist/cl2.shared.stringify.js.map +1 -0
  37. package/dist/cl2.shared.types.d.ts +13 -5
  38. package/dist/cl2.shared.types.d.ts.map +1 -1
  39. package/dist/cl2.shared.types.js +15 -2
  40. package/dist/cl2.shared.types.js.map +1 -1
  41. package/dist/cl2.storyline.parse.d.ts.map +1 -1
  42. package/dist/cl2.storyline.parse.js +1 -0
  43. package/dist/cl2.storyline.parse.js.map +1 -1
  44. package/dist/cl2.storyline.types.js +2 -2
  45. package/dist/cl2.storyline.types.js.map +1 -1
  46. package/dist/cl3.quest.stringify.d.ts +5 -0
  47. package/dist/cl3.quest.stringify.d.ts.map +1 -0
  48. package/dist/cl3.quest.stringify.js +154 -0
  49. package/dist/cl3.quest.stringify.js.map +1 -0
  50. package/dist/cl3.quest.types.d.ts +84 -0
  51. package/dist/cl3.quest.types.d.ts.map +1 -0
  52. package/dist/cl3.quest.types.js +33 -0
  53. package/dist/cl3.quest.types.js.map +1 -0
  54. package/dist/index.d.ts +1 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +1 -0
  57. package/dist/index.js.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ export { parseStringifiedCharacter, updateChangesFromParsedCharacter, } from './cl2.character.parse.js';
2
+ export { stringifyCharacter } from './cl2.character.stringify.js';
3
+ export { isCharacterMote, listCharacters, type CharacterUpdateResult, } from './cl2.character.types.js';
4
+ //# sourceMappingURL=cl2.character.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cl2.character.d.ts","sourceRoot":"","sources":["../src/cl2.character.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EACL,eAAe,EACf,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { parseStringifiedCharacter, updateChangesFromParsedCharacter, } from './cl2.character.parse.js';
2
+ export { stringifyCharacter } from './cl2.character.stringify.js';
3
+ export { isCharacterMote, listCharacters, } from './cl2.character.types.js';
4
+ //# sourceMappingURL=cl2.character.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cl2.character.js","sourceRoot":"","sources":["../src/cl2.character.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EACL,eAAe,EACf,cAAc,GAEf,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type CharacterUpdateResult } from './cl2.character.types.js';
2
+ import type { GameChanger } from './GameChanger.js';
3
+ export declare function parseStringifiedCharacter(text: string, packed: GameChanger, options?: {
4
+ checkSpelling?: boolean;
5
+ }): CharacterUpdateResult;
6
+ export declare function updateChangesFromParsedCharacter(parsed: CharacterUpdateResult['parsed'], moteId: string, packed: GameChanger): Promise<void>;
7
+ //# sourceMappingURL=cl2.character.parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cl2.character.parse.d.ts","sourceRoot":"","sources":["../src/cl2.character.parse.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAQlC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AASpD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,qBAAqB,CAmNvB;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CA0Kf"}
@@ -0,0 +1,352 @@
1
+ import { assert } from './assert.js';
2
+ import { linePatterns, } from './cl2.character.types.js';
3
+ import { isCommentLine, isStageLine, prepareParserHelpers, updateWipChangesFromParsed, } from './cl2.shared.parse.js';
4
+ import { npcSchemaId } from './cl2.shared.types.js';
5
+ import { bsArrayToArray, changedPosition, updateBsArrayOrder, } from './helpers.js';
6
+ export function parseStringifiedCharacter(text, packed, options = {}) {
7
+ const result = {
8
+ diagnostics: [],
9
+ hovers: [],
10
+ edits: [],
11
+ completions: [],
12
+ words: [],
13
+ parsed: {
14
+ comments: [],
15
+ idles: [],
16
+ },
17
+ };
18
+ const helpers = prepareParserHelpers(text, packed, {
19
+ ...options,
20
+ schemaId: npcSchemaId,
21
+ globalLabels: new Set(['Stage', 'Name', 'Idle Dialologue']),
22
+ }, result);
23
+ // Track where we are for context-dependent lines
24
+ /** True if we've hit the "Idle Dialogue" label */
25
+ let inIdles = false;
26
+ let lastIdleTopic;
27
+ let lastPhraseGroup;
28
+ for (const line of helpers.lines) {
29
+ const trace = [];
30
+ try {
31
+ const lineRange = helpers.currentLineRange;
32
+ // Is this just a blank line?
33
+ if (!line) {
34
+ if (inIdles) {
35
+ result.completions.push({
36
+ type: 'labels',
37
+ options: new Set('Topic'),
38
+ start: lineRange.start,
39
+ end: lineRange.end,
40
+ });
41
+ }
42
+ continue;
43
+ }
44
+ const parsedLine = helpers.parseCurrentLine(linePatterns);
45
+ if (!parsedLine)
46
+ continue;
47
+ let requiresEmoji;
48
+ // Work through each line type to add diagnostics and completions
49
+ const labelLower = parsedLine.label?.value?.toLowerCase();
50
+ const indicator = parsedLine.indicator?.value;
51
+ if (isCommentLine(parsedLine)) {
52
+ helpers.addComment(parsedLine);
53
+ }
54
+ else if (labelLower === 'name') {
55
+ result.parsed.name = parsedLine.text?.value?.trim();
56
+ if (!result.parsed.name) {
57
+ result.diagnostics.push({
58
+ message: `Character name required!`,
59
+ ...lineRange,
60
+ });
61
+ }
62
+ }
63
+ else if (isStageLine(parsedLine)) {
64
+ helpers.addStage(parsedLine);
65
+ }
66
+ else if (labelLower === 'idle dialogue') {
67
+ if (inIdles) {
68
+ result.diagnostics.push({
69
+ message: `Already in Idle Dialogue!`,
70
+ ...lineRange,
71
+ });
72
+ }
73
+ inIdles = true;
74
+ }
75
+ else if (labelLower === 'topic') {
76
+ // Then we're creating a new topic within the idle dialogue section
77
+ if (!inIdles) {
78
+ result.diagnostics.push({
79
+ message: `Topics must be within Idle Dialogue!`,
80
+ ...lineRange,
81
+ });
82
+ }
83
+ else {
84
+ lastIdleTopic = {
85
+ id: parsedLine.arrayTag?.value?.trim(),
86
+ name: parsedLine.text?.value?.trim(),
87
+ groups: [],
88
+ };
89
+ result.parsed.idles.push(lastIdleTopic);
90
+ // If we don't have a ':' separator, add it as an insert to help
91
+ if (!parsedLine.sep &&
92
+ parsedLine._hadArrayTag &&
93
+ parsedLine.arrayTag?.value) {
94
+ // Put it right after the array tag
95
+ result.edits.push({
96
+ newText: ': ',
97
+ start: parsedLine.arrayTag.end,
98
+ end: parsedLine.arrayTag.end,
99
+ });
100
+ }
101
+ }
102
+ }
103
+ else if (indicator === '\t') {
104
+ // Then we're starting a phrase group within a topic
105
+ if (!inIdles) {
106
+ result.diagnostics.push({
107
+ message: `Phrase Groups must be within a Topic!`,
108
+ ...lineRange,
109
+ });
110
+ }
111
+ else if (!lastIdleTopic) {
112
+ result.diagnostics.push({
113
+ message: `Phrase Groups must be within a Topic!`,
114
+ ...lineRange,
115
+ });
116
+ }
117
+ else {
118
+ lastPhraseGroup = {
119
+ id: parsedLine.arrayTag?.value?.trim(),
120
+ name: parsedLine.text?.value?.trim(),
121
+ phrases: [],
122
+ };
123
+ lastIdleTopic.groups.push(lastPhraseGroup);
124
+ // If we don't have a ' ' separator, add it as an insert to help
125
+ if (!parsedLine.sep &&
126
+ parsedLine._hadArrayTag &&
127
+ parsedLine.arrayTag?.value) {
128
+ // Put it right after the array tag
129
+ result.edits.push({
130
+ newText: ' ',
131
+ start: parsedLine.arrayTag.end,
132
+ end: parsedLine.arrayTag.end,
133
+ });
134
+ }
135
+ }
136
+ }
137
+ else if (indicator === '>') {
138
+ // Then we're adding a phrase to the current phrase group
139
+ if (!inIdles) {
140
+ result.diagnostics.push({
141
+ message: `Phrases must be within a Phrase Group!`,
142
+ ...lineRange,
143
+ });
144
+ }
145
+ else if (!lastIdleTopic) {
146
+ result.diagnostics.push({
147
+ message: `Phrases must be within a Phrase Group!`,
148
+ ...lineRange,
149
+ });
150
+ }
151
+ else if (!lastPhraseGroup) {
152
+ result.diagnostics.push({
153
+ message: `Phrases must be within a Phrase Group!`,
154
+ ...lineRange,
155
+ });
156
+ }
157
+ else {
158
+ const emoji = helpers.emojiIdFromName(parsedLine.emojiName?.value);
159
+ if (parsedLine.emojiGroup) {
160
+ // Emojis are optional. If we see a "group" (parentheses) then
161
+ // that changes to a requirement.
162
+ requiresEmoji = {
163
+ at: changedPosition(parsedLine.emojiGroup.start, {
164
+ characters: 1,
165
+ }),
166
+ options: helpers.emojis,
167
+ };
168
+ }
169
+ helpers.checkSpelling(parsedLine.text);
170
+ lastPhraseGroup.phrases.push({
171
+ id: parsedLine.arrayTag?.value?.trim(),
172
+ emoji,
173
+ text: parsedLine.text?.value?.trim(),
174
+ });
175
+ }
176
+ }
177
+ // fallthrough (error) case
178
+ else {
179
+ // Then we're in an error state on this line!
180
+ result.diagnostics.push({
181
+ message: `Unfamiliar syntax: ${line}`,
182
+ ...lineRange,
183
+ });
184
+ }
185
+ if (requiresEmoji) {
186
+ const where = {
187
+ start: requiresEmoji.at,
188
+ end: parsedLine.emojiGroup.end,
189
+ };
190
+ if (!parsedLine.emojiName?.value) {
191
+ result.completions.push({
192
+ type: 'motes',
193
+ options: requiresEmoji.options,
194
+ ...where,
195
+ });
196
+ }
197
+ else if (!helpers.emojiIdFromName(parsedLine.emojiName?.value)) {
198
+ result.diagnostics.push({
199
+ message: `Emoji "${parsedLine.emojiName?.value}" not found!`,
200
+ ...where,
201
+ });
202
+ }
203
+ }
204
+ }
205
+ catch (err) {
206
+ if (err instanceof Error) {
207
+ err.cause = trace;
208
+ }
209
+ throw err;
210
+ }
211
+ helpers.index += line.length;
212
+ }
213
+ return result;
214
+ }
215
+ export async function updateChangesFromParsedCharacter(parsed, moteId, packed) {
216
+ const _traceLogs = [];
217
+ const trace = (log) => _traceLogs.push(log);
218
+ trace(`Updating mote ${moteId}`);
219
+ try {
220
+ // We're always going to be computing ALL changes, so clear whatever
221
+ // we previously had.
222
+ packed.clearMoteChanges(moteId);
223
+ const moteWorking = packed.working.getMote(moteId);
224
+ const moteBase = packed.base.getMote(moteId);
225
+ assert(moteWorking, `Mote ${moteId} not found in working copy`);
226
+ const schema = packed.working.getSchema(moteWorking.schema_id);
227
+ assert(schema, `${moteWorking.schema_id} schema not found in working copy`);
228
+ assert(schema.name, 'Character mote must have a name pointer');
229
+ const updateMote = (path, value) => {
230
+ packed.updateMoteData(moteId, path, value);
231
+ };
232
+ updateMote('data/name/text', parsed.name);
233
+ updateWipChangesFromParsed(parsed, moteId, packed, trace);
234
+ // Add/Update IDLES
235
+ trace(`Updating idles`);
236
+ const parsedIdleIds = new Map();
237
+ for (const idle of parsed.idles) {
238
+ assert(idle.id, `Idle must have an ID`);
239
+ parsedIdleIds.set(idle.id, parsedIdleIds.get(idle.id) ?? new Map());
240
+ const parsedGroupIds = parsedIdleIds.get(idle.id);
241
+ const basePointer = `data/idle_text/${idle.id}`;
242
+ updateMote(`${basePointer}/element/name`, idle.name);
243
+ for (const group of idle.groups) {
244
+ assert(group.id, `Phrase Group must have an ID`);
245
+ parsedGroupIds.set(group.id, parsedGroupIds.get(group.id) ?? new Set());
246
+ const parsedPhraseIds = parsedGroupIds.get(group.id);
247
+ const groupPointer = `${basePointer}/element/phrase_groups/${group.id}`;
248
+ updateMote(`${groupPointer}/element/name`, group.name);
249
+ for (const phrase of group.phrases) {
250
+ assert(phrase.id, `Phrase must have an ID`);
251
+ parsedPhraseIds.add(phrase.id);
252
+ const phrasePointer = `${groupPointer}/element/phrases/${phrase.id}`;
253
+ updateMote(`${phrasePointer}/element/text/text`, phrase.text);
254
+ if (phrase.emoji) {
255
+ updateMote(`${phrasePointer}/element/emoji`, phrase.emoji);
256
+ }
257
+ }
258
+ }
259
+ }
260
+ // Delete legacy phrases/groups/idles
261
+ for (const existingIdle of bsArrayToArray(moteBase?.data.idle_text || {})) {
262
+ let isInParsed = parsedIdleIds.has(existingIdle.id);
263
+ if (!isInParsed) {
264
+ trace(`Deleting idle ${existingIdle.id}`);
265
+ updateMote(`data/idle_text/${existingIdle.id}`, null);
266
+ continue;
267
+ }
268
+ const parsedGroups = parsedIdleIds.get(existingIdle.id);
269
+ for (const existingGroup of bsArrayToArray(existingIdle.element?.phrase_groups || {})) {
270
+ isInParsed = parsedGroups.has(existingGroup.id);
271
+ if (!isInParsed) {
272
+ trace(`Deleting idle phrase group ${existingGroup.id}`);
273
+ updateMote(`data/idle_text/${existingIdle.id}/element/phrase_groups/${existingGroup.id}`, null);
274
+ continue;
275
+ }
276
+ const parsedPhrases = parsedGroups.get(existingGroup.id);
277
+ for (const existingPhrase of bsArrayToArray(existingGroup.element?.phrases || {})) {
278
+ isInParsed = parsedPhrases.has(existingPhrase.id);
279
+ if (!isInParsed) {
280
+ trace(`Deleting idle phrase ${existingPhrase.id}`);
281
+ updateMote(`data/idle_text/${existingIdle.id}/element/phrase_groups/${existingGroup.id}/element/phrases/${existingPhrase.id}`, null);
282
+ }
283
+ }
284
+ }
285
+ }
286
+ // Update idle order (and internal order) -- computed first!
287
+ const orderedIdles = parsed.idles.map((parsedIdle) => {
288
+ assert(parsedIdle.id, `Idle must have an ID`);
289
+ let idle = moteBase?.data.idle_text?.[parsedIdle.id];
290
+ if (!idle) {
291
+ idle = moteWorking.data.idle_text?.[parsedIdle.id];
292
+ assert(idle, `Idle ${parsedIdle.id} not found in base or working`);
293
+ // @ts-expect-error - order is a required field, but it'll be re-added
294
+ delete idle?.order;
295
+ }
296
+ const orderedGroups = parsedIdle.groups.map((parsedGroup) => {
297
+ assert(parsedGroup.id, `Group must have an ID`);
298
+ let group = idle.element?.phrase_groups?.[parsedGroup.id];
299
+ if (!group) {
300
+ group =
301
+ moteWorking?.data.idle_text?.[parsedIdle.id]?.element
302
+ ?.phrase_groups?.[parsedGroup.id];
303
+ assert(group, `Group ${parsedGroup.id} not found in idle ${parsedIdle.id}`);
304
+ // @ts-expect-error - order is a required field, but it'll be re-added
305
+ delete group?.order;
306
+ }
307
+ const orderedPhrases = parsedGroup.phrases.map((parsedPhrase) => {
308
+ assert(parsedPhrase.id, `Phrase must have an ID`);
309
+ let phrase = group.element?.phrases?.[parsedPhrase.id];
310
+ if (!phrase) {
311
+ phrase =
312
+ moteWorking?.data.idle_text?.[parsedIdle.id]?.element
313
+ ?.phrase_groups?.[parsedGroup.id]?.element?.phrases?.[parsedPhrase.id];
314
+ assert(phrase, `Phrase ${parsedPhrase.id} not found in group ${parsedGroup.id}`);
315
+ // @ts-expect-error - order is a required field, but it'll be re-added
316
+ delete phrase?.order;
317
+ }
318
+ return { ...phrase, id: parsedPhrase.id };
319
+ });
320
+ updateBsArrayOrder(orderedPhrases);
321
+ return { ...group, phrases: orderedPhrases, id: parsedGroup.id };
322
+ });
323
+ updateBsArrayOrder(orderedGroups);
324
+ return { ...idle, phraseGroups: orderedGroups, id: parsedIdle.id };
325
+ });
326
+ updateBsArrayOrder(orderedIdles);
327
+ // Now turn those order changes into mote updates
328
+ for (const orderedIdle of orderedIdles) {
329
+ trace(`Updating idle order ${orderedIdle.id} to ${orderedIdle.order}`);
330
+ updateMote(`data/idle_text/${orderedIdle.id}/order`, orderedIdle.order);
331
+ for (const orderedGroup of orderedIdle.phraseGroups) {
332
+ trace(`Updating idle group order ${orderedGroup.id} to ${orderedGroup.order}`);
333
+ updateMote(`data/idle_text/${orderedIdle.id}/element/phrase_groups/${orderedGroup.id}/order`, orderedGroup.order);
334
+ for (const orderedPhrase of orderedGroup.phrases) {
335
+ trace(`Updating idle phrase order ${orderedPhrase.id} to ${orderedPhrase.order}`);
336
+ updateMote(`data/idle_text/${orderedIdle.id}/element/phrase_groups/${orderedGroup.id}/element/phrases/${orderedPhrase.id}/order`, orderedPhrase.order);
337
+ }
338
+ }
339
+ }
340
+ trace(`Writing changes`);
341
+ await packed.writeChanges();
342
+ }
343
+ catch (err) {
344
+ console.error(err);
345
+ console.error(_traceLogs);
346
+ if (err instanceof Error) {
347
+ err.cause = _traceLogs;
348
+ }
349
+ throw err;
350
+ }
351
+ }
352
+ //# sourceMappingURL=cl2.character.parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cl2.character.parse.js","sourceRoot":"","sources":["../src/cl2.character.parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { GameChanger } from './GameChanger.js';
2
+ import type { CharacterMote } from './cl2.shared.types.js';
3
+ export declare function stringifyCharacter(mote: CharacterMote, packed: GameChanger): string;
4
+ //# sourceMappingURL=cl2.character.stringify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cl2.character.stringify.d.ts","sourceRoot":"","sources":["../src/cl2.character.stringify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,WAAW,GAClB,MAAM,CAuDR"}
@@ -0,0 +1,44 @@
1
+ import { emojiString } from './cl2.shared.stringify.js';
2
+ import { bsArrayToArray, toArrayTag } from './helpers.js';
3
+ export function stringifyCharacter(mote, packed) {
4
+ // METADATA
5
+ const blocks = [`Name: ${packed.working.getMoteName(mote)}`];
6
+ if (mote.data.wip?.staging) {
7
+ blocks.push(`Stage: ${mote.data.wip.staging}\n`);
8
+ }
9
+ else {
10
+ blocks.push('');
11
+ }
12
+ // NOTES
13
+ if (mote.data.wip?.notes) {
14
+ const comments = bsArrayToArray(mote.data.wip.notes);
15
+ if (comments.length) {
16
+ blocks.push(...bsArrayToArray(mote.data.wip.notes).map((c) => `//${toArrayTag(c.id)} ${c.element.text}`), '');
17
+ }
18
+ }
19
+ // IDLE DIALOGUE
20
+ blocks.push('Idle Dialogue:');
21
+ if (mote.data.idle_text) {
22
+ const idles = bsArrayToArray(mote.data.idle_text);
23
+ for (const idle of idles) {
24
+ // Each "Idle" consists of an internal "Topic" name,
25
+ // and list of "Phrase Groups". Write out the topic with
26
+ // its ID, like how we do Quest Clues.
27
+ blocks.push(`\nTopic${toArrayTag(idle)}: ${idle.element.name}`);
28
+ for (const phraseGroup of bsArrayToArray(idle.element.phrase_groups)) {
29
+ // Each phrase group has an internal name and a list of
30
+ // phrases. Treat it like Quest dialog, where the "speaker"
31
+ // line is instead the name of the phrase group.
32
+ blocks.push(`\n\t${toArrayTag(phraseGroup)} ${phraseGroup.element.name}`);
33
+ for (const phrase of bsArrayToArray(phraseGroup.element.phrases)) {
34
+ // Each phrase has an optional emoji and the text of the phrase.
35
+ // Write it out like Quest dialog, with the phrase group as the speaker.
36
+ const emojiStr = emojiString(phrase.element, packed);
37
+ blocks.push(`>${toArrayTag(phrase)} ${emojiStr ? emojiStr + ' ' : ''}${phrase.element.text.text}`);
38
+ }
39
+ }
40
+ }
41
+ }
42
+ return blocks.join('\n') + '\n';
43
+ }
44
+ //# sourceMappingURL=cl2.character.stringify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cl2.character.stringify.js","sourceRoot":"","sources":["../src/cl2.character.stringify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAChC,IAAmB,EACnB,MAAmB;IAEnB,WAAW;IACX,MAAM,MAAM,GAAa,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ;IACR,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CACT,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CACjD,EACD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE9B,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,oDAAoD;YACpD,wDAAwD;YACxD,sCAAsC;YACtC,MAAM,CAAC,IAAI,CAAC,UAAU,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAEhE,KAAK,MAAM,WAAW,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACrE,uDAAuD;gBACvD,2DAA2D;gBAC3D,gDAAgD;gBAChD,MAAM,CAAC,IAAI,CACT,OAAO,UAAU,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAC7D,CAAC;gBACF,KAAK,MAAM,MAAM,IAAI,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACjE,gEAAgE;oBAChE,wEAAwE;oBACxE,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBACrD,MAAM,CAAC,IAAI,CACT,IAAI,UAAU,CAAC,MAAM,CAAC,IACpB,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,EAC9B,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAC9B,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAClC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { Gcdata } from './GameChanger.js';
2
+ import { type BuddyData, type BuddyMote, type NpcData, type NpcMote, type ParserResult } from './cl2.shared.types.js';
3
+ import type { Mote } from './types.js';
4
+ export declare function listNpcs(gcData: Gcdata): NpcMote[];
5
+ export declare function listBuddies(gcData: Gcdata): BuddyMote[];
6
+ export declare function listCharacters(gcData: Gcdata): (BuddyMote | NpcMote)[];
7
+ export declare function isCharacterMote(mote: any): mote is Mote<Gcdata | BuddyData>;
8
+ export declare function isBuddyMote(mote: any): mote is Mote<BuddyData>;
9
+ export declare function isNpcMote(mote: any): mote is Mote<NpcData>;
10
+ export interface CharacterUpdateResult extends ParserResult<{
11
+ idles: ParsedTopic[];
12
+ }> {
13
+ }
14
+ export interface ParsedTopic {
15
+ id: string | undefined;
16
+ name: string | undefined;
17
+ groups: ParsedGroup[];
18
+ }
19
+ export interface ParsedGroup {
20
+ id: string | undefined;
21
+ name: string | undefined;
22
+ phrases: {
23
+ /** arrayId */
24
+ id: string | undefined;
25
+ /** MoteId for the Emoji */
26
+ emoji?: string;
27
+ text: string | undefined;
28
+ }[];
29
+ }
30
+ export declare const linePatterns: string[];
31
+ //# sourceMappingURL=cl2.character.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cl2.character.types.d.ts","sourceRoot":"","sources":["../src/cl2.character.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAML,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAElD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAEvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE,CAGtE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAE3E;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAE9D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAE1D;AAED,MAAM,WAAW,qBACf,SAAQ,YAAY,CAAC;IACnB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB,CAAC;CAAG;AAEP,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE;QACP,cAAc;QACd,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;QACvB,2BAA2B;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;KAC1B,EAAE,CAAC;CACL;AAED,eAAO,MAAM,YAAY,UASxB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { arrayTagPattern, buddySchemaId, commentLinePattern, dialogPattern, npcSchemaId, } from './cl2.shared.types.js';
2
+ export function listNpcs(gcData) {
3
+ return gcData.listMotesBySchema(npcSchemaId);
4
+ }
5
+ export function listBuddies(gcData) {
6
+ return gcData.listMotesBySchema(buddySchemaId);
7
+ }
8
+ export function listCharacters(gcData) {
9
+ const characters = listBuddies(gcData);
10
+ return characters.concat(listNpcs(gcData));
11
+ }
12
+ export function isCharacterMote(mote) {
13
+ return [buddySchemaId, npcSchemaId].includes(mote.schema_id);
14
+ }
15
+ export function isBuddyMote(mote) {
16
+ return mote.schema_id === buddySchemaId;
17
+ }
18
+ export function isNpcMote(mote) {
19
+ return mote.schema_id === npcSchemaId;
20
+ }
21
+ export const linePatterns = [
22
+ // Label: Text
23
+ `^(?<labelGroup>(?<label>Name|Stage|Idle Dialogue)\\s*:)\\s*(?<text>.*?)\\s*$`,
24
+ // Topics (Topic#xxxx: The Topic!)
25
+ `^(?<label>Topic)${arrayTagPattern}?(?:\\s*(?<sep>:)\\s*(?<text>.*?)\\s*)?$`,
26
+ // Phrase Group Names
27
+ `^(?<indicator>\\t)(?:${arrayTagPattern}(?<sep>\\s+))?(?<text>.*?)\\s*$`,
28
+ dialogPattern,
29
+ commentLinePattern,
30
+ ];
31
+ //# sourceMappingURL=cl2.character.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cl2.character.types.js","sourceRoot":"","sources":["../src/cl2.character.types.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,WAAW,GAMZ,MAAM,uBAAuB,CAAC;AAG/B,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,OAAO,MAAM,CAAC,iBAAiB,CAAU,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,MAAM,CAAC,iBAAiB,CAAY,aAAa,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,UAAU,GAA4B,WAAW,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAS;IACvC,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAS;IACnC,OAAO,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAS;IACjC,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,CAAC;AACxC,CAAC;AAyBD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,cAAc;IACd,8EAA8E;IAC9E,kCAAkC;IAClC,mBAAmB,eAAe,0CAA0C;IAC5E,qBAAqB;IACrB,wBAAwB,eAAe,iCAAiC;IACxE,aAAa;IACb,kBAAkB;CACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cl2.comfort.parse.d.ts","sourceRoot":"","sources":["../src/cl2.comfort.parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,wBAAwB,CAAC;AAShC,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,mBAAmB,CA4ErB;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
1
+ {"version":3,"file":"cl2.comfort.parse.d.ts","sourceRoot":"","sources":["../src/cl2.comfort.parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,wBAAwB,CAAC;AAShC,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,mBAAmB,CA6ErB;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -15,6 +15,7 @@ export function parseStringifiedComfort(text, packed, options = {}) {
15
15
  };
16
16
  const helpers = prepareParserHelpers(text, packed, {
17
17
  ...options,
18
+ schemaId: comfortSchemaId,
18
19
  globalLabels: new Set([
19
20
  'Name',
20
21
  'Description',
@@ -1 +1 @@
1
- {"version":3,"file":"cl2.comfort.parse.js","sourceRoot":"","sources":["../src/cl2.comfort.parse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cl2.comfort.parse.js","sourceRoot":"","sources":["../src/cl2.comfort.parse.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cl2.quest.parse.d.ts","sourceRoot":"","sources":["../src/cl2.quest.parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAOL,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAuB9B,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,iBAAiB,CAsanB;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAmVf"}
1
+ {"version":3,"file":"cl2.quest.parse.d.ts","sourceRoot":"","sources":["../src/cl2.quest.parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAOL,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAwB9B,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,iBAAiB,CAuanB;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAkVf"}
@@ -2,6 +2,7 @@ import { assert } from './assert.js';
2
2
  import { linePatterns, } from './cl2.quest.types.js';
3
3
  import { getMomentStyleNames, getMoteLists, getRequirementQuestStatuses, getRequirementStyleNames, isEmoteMoment, } from './cl2.quest.utils.js';
4
4
  import { isCommentLine, isStageLine, prepareParserHelpers, updateWipChangesFromParsed, } from './cl2.shared.parse.js';
5
+ import { questSchemaId } from './cl2.shared.types.js';
5
6
  import { bsArrayToArray, changedPosition, updateBsArrayOrder, } from './helpers.js';
6
7
  export function parseStringifiedQuest(text, packed, options = {}) {
7
8
  const motes = getMoteLists(packed.working);
@@ -32,6 +33,7 @@ export function parseStringifiedQuest(text, packed, options = {}) {
32
33
  };
33
34
  const helpers = prepareParserHelpers(text, packed, {
34
35
  ...options,
36
+ schemaId: questSchemaId,
35
37
  globalNonUniqueLabels: new Set(['Clue']),
36
38
  globalLabels: new Set([
37
39
  'Stage',
@@ -646,7 +648,6 @@ export async function updateChangesFromParsedQuest(parsed, moteId, packed) {
646
648
  delete moment?.order;
647
649
  }
648
650
  assert(moment, `Moment ${m.id} not found in base or working mote`);
649
- moment.element.style;
650
651
  const element = moment.element;
651
652
  if (element.style === 'Emote') {
652
653
  assert(m.kind === 'emote', `Expected moment ${m.id} to be an emote`);