@character-foundry/character-foundry 0.4.4 → 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.
Files changed (59) hide show
  1. package/dist/app-framework.cjs +12 -3
  2. package/dist/app-framework.cjs.map +1 -1
  3. package/dist/app-framework.d.cts +9 -1
  4. package/dist/app-framework.d.ts +9 -1
  5. package/dist/app-framework.js +12 -3
  6. package/dist/app-framework.js.map +1 -1
  7. package/dist/charx.cjs +72 -18
  8. package/dist/charx.cjs.map +1 -1
  9. package/dist/charx.d.cts +22 -22
  10. package/dist/charx.d.ts +22 -22
  11. package/dist/charx.js +72 -18
  12. package/dist/charx.js.map +1 -1
  13. package/dist/exporter.cjs +72 -18
  14. package/dist/exporter.cjs.map +1 -1
  15. package/dist/exporter.d.cts +19 -19
  16. package/dist/exporter.d.ts +19 -19
  17. package/dist/exporter.js +72 -18
  18. package/dist/exporter.js.map +1 -1
  19. package/dist/federation.d.cts +19 -19
  20. package/dist/federation.d.ts +19 -19
  21. package/dist/index.cjs +72 -18
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +29 -29
  24. package/dist/index.d.ts +29 -29
  25. package/dist/index.js +72 -18
  26. package/dist/index.js.map +1 -1
  27. package/dist/loader.cjs +72 -18
  28. package/dist/loader.cjs.map +1 -1
  29. package/dist/loader.d.cts +23 -23
  30. package/dist/loader.d.ts +23 -23
  31. package/dist/loader.js +72 -18
  32. package/dist/loader.js.map +1 -1
  33. package/dist/lorebook.d.cts +23 -23
  34. package/dist/lorebook.d.ts +23 -23
  35. package/dist/normalizer.cjs +72 -18
  36. package/dist/normalizer.cjs.map +1 -1
  37. package/dist/normalizer.d.cts +37 -37
  38. package/dist/normalizer.d.ts +37 -37
  39. package/dist/normalizer.js +72 -18
  40. package/dist/normalizer.js.map +1 -1
  41. package/dist/png.cjs +72 -18
  42. package/dist/png.cjs.map +1 -1
  43. package/dist/png.d.cts +25 -25
  44. package/dist/png.d.ts +25 -25
  45. package/dist/png.js +72 -18
  46. package/dist/png.js.map +1 -1
  47. package/dist/schemas.cjs +75 -18
  48. package/dist/schemas.cjs.map +1 -1
  49. package/dist/schemas.d.cts +85 -67
  50. package/dist/schemas.d.ts +85 -67
  51. package/dist/schemas.js +75 -18
  52. package/dist/schemas.js.map +1 -1
  53. package/dist/voxta.cjs +72 -18
  54. package/dist/voxta.cjs.map +1 -1
  55. package/dist/voxta.d.cts +23 -23
  56. package/dist/voxta.d.ts +23 -23
  57. package/dist/voxta.js +72 -18
  58. package/dist/voxta.js.map +1 -1
  59. package/package.json +24 -24
package/dist/png.cjs CHANGED
@@ -172,6 +172,58 @@ var import_zod = require("zod");
172
172
  var import_zod2 = require("zod");
173
173
  var import_zod3 = require("zod");
174
174
  var import_zod4 = require("zod");
175
+ function preprocessTimestamp(val) {
176
+ if (val === null || val === void 0) return void 0;
177
+ let num;
178
+ if (typeof val === "number") {
179
+ num = val;
180
+ } else if (typeof val === "string") {
181
+ const trimmed = val.trim();
182
+ if (!trimmed) return void 0;
183
+ const parsed = Number(trimmed);
184
+ if (!isNaN(parsed)) {
185
+ num = parsed;
186
+ } else {
187
+ const date = new Date(trimmed);
188
+ if (isNaN(date.getTime())) return void 0;
189
+ num = Math.floor(date.getTime() / 1e3);
190
+ }
191
+ } else {
192
+ return void 0;
193
+ }
194
+ if (num > 1e10) {
195
+ num = Math.floor(num / 1e3);
196
+ }
197
+ if (num < 0) return void 0;
198
+ return num;
199
+ }
200
+ function preprocessNumeric(val) {
201
+ if (val === null || val === void 0) return void 0;
202
+ if (typeof val === "number") {
203
+ return isNaN(val) ? void 0 : val;
204
+ }
205
+ if (typeof val === "string") {
206
+ const trimmed = val.trim();
207
+ if (!trimmed) return void 0;
208
+ const parsed = Number(trimmed);
209
+ return isNaN(parsed) ? void 0 : parsed;
210
+ }
211
+ return void 0;
212
+ }
213
+ var KNOWN_ASSET_TYPES = /* @__PURE__ */ new Set([
214
+ "icon",
215
+ "background",
216
+ "emotion",
217
+ "user_icon",
218
+ "sound",
219
+ "video",
220
+ "custom",
221
+ "x-risu-asset"
222
+ ]);
223
+ function preprocessAssetType(val) {
224
+ if (typeof val !== "string") return "custom";
225
+ return KNOWN_ASSET_TYPES.has(val) ? val : "custom";
226
+ }
175
227
  var ISO8601Schema = import_zod.z.string().datetime();
176
228
  var UUIDSchema = import_zod.z.string().uuid();
177
229
  var SpecSchema = import_zod.z.enum(["v2", "v3"]);
@@ -194,16 +246,19 @@ var SourceFormatSchema = import_zod.z.enum([
194
246
  // VoxPkg format
195
247
  ]);
196
248
  var OriginalShapeSchema = import_zod.z.enum(["wrapped", "unwrapped", "legacy"]);
197
- var AssetTypeSchema = import_zod.z.enum([
198
- "icon",
199
- "background",
200
- "emotion",
201
- "user_icon",
202
- "sound",
203
- "video",
204
- "custom",
205
- "x-risu-asset"
206
- ]);
249
+ var AssetTypeSchema = import_zod.z.preprocess(
250
+ preprocessAssetType,
251
+ import_zod.z.enum([
252
+ "icon",
253
+ "background",
254
+ "emotion",
255
+ "user_icon",
256
+ "sound",
257
+ "video",
258
+ "custom",
259
+ "x-risu-asset"
260
+ ])
261
+ );
207
262
  var AssetDescriptorSchema = import_zod.z.object({
208
263
  type: AssetTypeSchema,
209
264
  uri: import_zod.z.string(),
@@ -237,8 +292,8 @@ var CCv2LorebookEntrySchema = import_zod2.z.object({
237
292
  var CCv2CharacterBookSchema = import_zod2.z.object({
238
293
  name: import_zod2.z.string().optional(),
239
294
  description: import_zod2.z.string().optional(),
240
- scan_depth: import_zod2.z.number().int().nonnegative().optional(),
241
- token_budget: import_zod2.z.number().int().nonnegative().optional(),
295
+ scan_depth: import_zod2.z.preprocess(preprocessNumeric, import_zod2.z.number().int().nonnegative().optional()),
296
+ token_budget: import_zod2.z.preprocess(preprocessNumeric, import_zod2.z.number().int().nonnegative().optional()),
242
297
  recursive_scanning: import_zod2.z.boolean().optional(),
243
298
  extensions: import_zod2.z.record(import_zod2.z.unknown()).optional(),
244
299
  entries: import_zod2.z.array(CCv2LorebookEntrySchema)
@@ -301,8 +356,8 @@ var CCv3LorebookEntrySchema = import_zod3.z.object({
301
356
  var CCv3CharacterBookSchema = import_zod3.z.object({
302
357
  name: import_zod3.z.string().optional(),
303
358
  description: import_zod3.z.string().optional(),
304
- scan_depth: import_zod3.z.number().int().nonnegative().optional(),
305
- token_budget: import_zod3.z.number().int().nonnegative().optional(),
359
+ scan_depth: import_zod3.z.preprocess(preprocessNumeric, import_zod3.z.number().int().nonnegative().optional()),
360
+ token_budget: import_zod3.z.preprocess(preprocessNumeric, import_zod3.z.number().int().nonnegative().optional()),
306
361
  recursive_scanning: import_zod3.z.boolean().optional(),
307
362
  extensions: import_zod3.z.record(import_zod3.z.unknown()).optional(),
308
363
  entries: import_zod3.z.array(CCv3LorebookEntrySchema)
@@ -334,10 +389,9 @@ var CCv3DataInnerSchema = import_zod3.z.object({
334
389
  nickname: import_zod3.z.string().optional(),
335
390
  creator_notes_multilingual: import_zod3.z.record(import_zod3.z.string()).optional(),
336
391
  source: import_zod3.z.array(import_zod3.z.string()).optional(),
337
- creation_date: import_zod3.z.number().int().nonnegative().optional(),
338
- // Unix timestamp in seconds
339
- modification_date: import_zod3.z.number().int().nonnegative().optional()
340
- // Unix timestamp in seconds
392
+ // Unix timestamps - preprocess to handle ISO strings, numeric strings, milliseconds
393
+ creation_date: import_zod3.z.preprocess(preprocessTimestamp, import_zod3.z.number().int().nonnegative().optional()),
394
+ modification_date: import_zod3.z.preprocess(preprocessTimestamp, import_zod3.z.number().int().nonnegative().optional())
341
395
  });
342
396
  var CCv3DataSchema = import_zod3.z.object({
343
397
  spec: import_zod3.z.literal("chara_card_v3"),