@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/loader.cjs CHANGED
@@ -444,6 +444,58 @@ var import_zod = require("zod");
444
444
  var import_zod2 = require("zod");
445
445
  var import_zod3 = require("zod");
446
446
  var import_zod4 = require("zod");
447
+ function preprocessTimestamp(val) {
448
+ if (val === null || val === void 0) return void 0;
449
+ let num;
450
+ if (typeof val === "number") {
451
+ num = val;
452
+ } else if (typeof val === "string") {
453
+ const trimmed = val.trim();
454
+ if (!trimmed) return void 0;
455
+ const parsed = Number(trimmed);
456
+ if (!isNaN(parsed)) {
457
+ num = parsed;
458
+ } else {
459
+ const date = new Date(trimmed);
460
+ if (isNaN(date.getTime())) return void 0;
461
+ num = Math.floor(date.getTime() / 1e3);
462
+ }
463
+ } else {
464
+ return void 0;
465
+ }
466
+ if (num > 1e10) {
467
+ num = Math.floor(num / 1e3);
468
+ }
469
+ if (num < 0) return void 0;
470
+ return num;
471
+ }
472
+ function preprocessNumeric(val) {
473
+ if (val === null || val === void 0) return void 0;
474
+ if (typeof val === "number") {
475
+ return isNaN(val) ? void 0 : val;
476
+ }
477
+ if (typeof val === "string") {
478
+ const trimmed = val.trim();
479
+ if (!trimmed) return void 0;
480
+ const parsed = Number(trimmed);
481
+ return isNaN(parsed) ? void 0 : parsed;
482
+ }
483
+ return void 0;
484
+ }
485
+ var KNOWN_ASSET_TYPES = /* @__PURE__ */ new Set([
486
+ "icon",
487
+ "background",
488
+ "emotion",
489
+ "user_icon",
490
+ "sound",
491
+ "video",
492
+ "custom",
493
+ "x-risu-asset"
494
+ ]);
495
+ function preprocessAssetType(val) {
496
+ if (typeof val !== "string") return "custom";
497
+ return KNOWN_ASSET_TYPES.has(val) ? val : "custom";
498
+ }
447
499
  var ISO8601Schema = import_zod.z.string().datetime();
448
500
  var UUIDSchema = import_zod.z.string().uuid();
449
501
  var SpecSchema = import_zod.z.enum(["v2", "v3"]);
@@ -466,16 +518,19 @@ var SourceFormatSchema = import_zod.z.enum([
466
518
  // VoxPkg format
467
519
  ]);
468
520
  var OriginalShapeSchema = import_zod.z.enum(["wrapped", "unwrapped", "legacy"]);
469
- var AssetTypeSchema = import_zod.z.enum([
470
- "icon",
471
- "background",
472
- "emotion",
473
- "user_icon",
474
- "sound",
475
- "video",
476
- "custom",
477
- "x-risu-asset"
478
- ]);
521
+ var AssetTypeSchema = import_zod.z.preprocess(
522
+ preprocessAssetType,
523
+ import_zod.z.enum([
524
+ "icon",
525
+ "background",
526
+ "emotion",
527
+ "user_icon",
528
+ "sound",
529
+ "video",
530
+ "custom",
531
+ "x-risu-asset"
532
+ ])
533
+ );
479
534
  var AssetDescriptorSchema = import_zod.z.object({
480
535
  type: AssetTypeSchema,
481
536
  uri: import_zod.z.string(),
@@ -509,8 +564,8 @@ var CCv2LorebookEntrySchema = import_zod2.z.object({
509
564
  var CCv2CharacterBookSchema = import_zod2.z.object({
510
565
  name: import_zod2.z.string().optional(),
511
566
  description: import_zod2.z.string().optional(),
512
- scan_depth: import_zod2.z.number().int().nonnegative().optional(),
513
- token_budget: import_zod2.z.number().int().nonnegative().optional(),
567
+ scan_depth: import_zod2.z.preprocess(preprocessNumeric, import_zod2.z.number().int().nonnegative().optional()),
568
+ token_budget: import_zod2.z.preprocess(preprocessNumeric, import_zod2.z.number().int().nonnegative().optional()),
514
569
  recursive_scanning: import_zod2.z.boolean().optional(),
515
570
  extensions: import_zod2.z.record(import_zod2.z.unknown()).optional(),
516
571
  entries: import_zod2.z.array(CCv2LorebookEntrySchema)
@@ -584,8 +639,8 @@ var CCv3LorebookEntrySchema = import_zod3.z.object({
584
639
  var CCv3CharacterBookSchema = import_zod3.z.object({
585
640
  name: import_zod3.z.string().optional(),
586
641
  description: import_zod3.z.string().optional(),
587
- scan_depth: import_zod3.z.number().int().nonnegative().optional(),
588
- token_budget: import_zod3.z.number().int().nonnegative().optional(),
642
+ scan_depth: import_zod3.z.preprocess(preprocessNumeric, import_zod3.z.number().int().nonnegative().optional()),
643
+ token_budget: import_zod3.z.preprocess(preprocessNumeric, import_zod3.z.number().int().nonnegative().optional()),
589
644
  recursive_scanning: import_zod3.z.boolean().optional(),
590
645
  extensions: import_zod3.z.record(import_zod3.z.unknown()).optional(),
591
646
  entries: import_zod3.z.array(CCv3LorebookEntrySchema)
@@ -617,10 +672,9 @@ var CCv3DataInnerSchema = import_zod3.z.object({
617
672
  nickname: import_zod3.z.string().optional(),
618
673
  creator_notes_multilingual: import_zod3.z.record(import_zod3.z.string()).optional(),
619
674
  source: import_zod3.z.array(import_zod3.z.string()).optional(),
620
- creation_date: import_zod3.z.number().int().nonnegative().optional(),
621
- // Unix timestamp in seconds
622
- modification_date: import_zod3.z.number().int().nonnegative().optional()
623
- // Unix timestamp in seconds
675
+ // Unix timestamps - preprocess to handle ISO strings, numeric strings, milliseconds
676
+ creation_date: import_zod3.z.preprocess(preprocessTimestamp, import_zod3.z.number().int().nonnegative().optional()),
677
+ modification_date: import_zod3.z.preprocess(preprocessTimestamp, import_zod3.z.number().int().nonnegative().optional())
624
678
  });
625
679
  var CCv3DataSchema = import_zod3.z.object({
626
680
  spec: import_zod3.z.literal("chara_card_v3"),