@retropak/schema 1.0.0-draft3 → 1.0.0-draft6

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/locales/en.json CHANGED
@@ -226,13 +226,18 @@
226
226
  "coverdisk": "Coverdisk",
227
227
  "demo": "Demo",
228
228
  "educational": "Educational",
229
+ "enhanced": "Enhanced Edition",
229
230
  "firmware": "Firmware",
230
231
  "freeware": "Freeware",
231
232
  "game": "Game",
232
233
  "homebrew": "Homebrew",
233
234
  "multimedia": "Multimedia",
235
+ "port": "Port",
234
236
  "promotional": "Promotional",
235
237
  "prototype": "Prototype",
238
+ "remake": "Remake",
239
+ "remaster": "Remaster",
240
+ "rerelease": "Re-release",
236
241
  "scene_demo": "Scene Demo",
237
242
  "shareware": "Shareware",
238
243
  "unlicensed": "Unlicensed",
@@ -341,6 +346,28 @@
341
346
  "unknown": "Unknown",
342
347
  "unlicensed": "Unlicensed"
343
348
  },
349
+ "license": {
350
+ "commercial": "Commercial",
351
+ "freeware": "Freeware",
352
+ "shareware": "Shareware",
353
+ "public_domain": "Public Domain",
354
+ "open_source": "Open Source",
355
+ "gpl": "GNU GPL",
356
+ "gpl2": "GNU GPL v2",
357
+ "gpl3": "GNU GPL v3",
358
+ "lgpl": "GNU LGPL",
359
+ "mit": "MIT License",
360
+ "bsd": "BSD License",
361
+ "apache": "Apache License",
362
+ "creative_commons": "Creative Commons",
363
+ "cc_by": "Creative Commons BY",
364
+ "cc_by_sa": "Creative Commons BY-SA",
365
+ "cc_by_nc": "Creative Commons BY-NC",
366
+ "cc_by_nc_sa": "Creative Commons BY-NC-SA",
367
+ "cc0": "Creative Commons CC0",
368
+ "proprietary": "Proprietary",
369
+ "unknown": "Unknown"
370
+ },
344
371
  "esrb": {
345
372
  "ec": "Early Childhood",
346
373
  "e": "Everyone",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retropak/schema",
3
- "version": "1.0.0-draft3",
3
+ "version": "1.0.0-draft6",
4
4
  "description": "Metadata specification for Retropak software containers",
5
5
  "type": "module",
6
6
  "main": "./schemas/v1/retropak.schema.json",
@@ -13,10 +13,6 @@
13
13
  "schemas",
14
14
  "locales"
15
15
  ],
16
- "scripts": {
17
- "build": "echo 'Schema package has no build step'",
18
- "validate": "node --input-type=module -e \"import Ajv from 'ajv'; const ajv = new Ajv(); const schema = await import('./schemas/v1/retropak.schema.json', { assert: { type: 'json' } }); const valid = ajv.compile(schema.default); console.log('Schema is valid:', valid.schema.$id);\""
19
- },
20
16
  "keywords": [
21
17
  "retropak",
22
18
  "schema",
@@ -243,13 +243,18 @@
243
243
  "coverdisk",
244
244
  "demo",
245
245
  "educational",
246
+ "enhanced",
246
247
  "firmware",
247
248
  "freeware",
248
249
  "game",
249
250
  "homebrew",
250
251
  "multimedia",
252
+ "port",
251
253
  "promotional",
252
254
  "prototype",
255
+ "remake",
256
+ "remaster",
257
+ "rerelease",
253
258
  "scene_demo",
254
259
  "shareware",
255
260
  "unlicensed",
@@ -375,9 +380,36 @@
375
380
  "unlicensed"
376
381
  ]
377
382
  },
383
+ "license": {
384
+ "type": "string",
385
+ "description": "Software license type.",
386
+ "enum": [
387
+ "commercial",
388
+ "freeware",
389
+ "shareware",
390
+ "public_domain",
391
+ "open_source",
392
+ "gpl",
393
+ "gpl2",
394
+ "gpl3",
395
+ "lgpl",
396
+ "mit",
397
+ "bsd",
398
+ "apache",
399
+ "creative_commons",
400
+ "cc_by",
401
+ "cc_by_sa",
402
+ "cc_by_nc",
403
+ "cc_by_nc_sa",
404
+ "cc0",
405
+ "proprietary",
406
+ "unknown"
407
+ ]
408
+ },
378
409
  "ageRating": {
379
410
  "type": "object",
380
411
  "description": "Age/content ratings from various rating boards.",
412
+ "additionalProperties": false,
381
413
  "properties": {
382
414
  "nsfw": {
383
415
  "type": "boolean",
@@ -476,6 +508,7 @@
476
508
  "configFile": {
477
509
  "type": "object",
478
510
  "description": "An external configuration file for emulator or platform-specific settings.",
511
+ "additionalProperties": false,
479
512
  "required": [
480
513
  "file"
481
514
  ],
@@ -498,6 +531,7 @@
498
531
  "image": {
499
532
  "type": "object",
500
533
  "description": "An image file with optional alt text for accessibility.",
534
+ "additionalProperties": false,
501
535
  "required": [
502
536
  "file"
503
537
  ],
@@ -516,6 +550,7 @@
516
550
  "creditEntry": {
517
551
  "type": "object",
518
552
  "description": "A person credited for work on the title.",
553
+ "additionalProperties": false,
519
554
  "required": [
520
555
  "name"
521
556
  ],
@@ -537,6 +572,7 @@
537
572
  "musicTrack": {
538
573
  "type": "object",
539
574
  "description": "A soundtrack or audio file from the title.",
575
+ "additionalProperties": false,
540
576
  "required": [
541
577
  "file"
542
578
  ],
@@ -560,6 +596,7 @@
560
596
  "physicalMediaImage": {
561
597
  "type": "object",
562
598
  "description": "An image of physical media (cartridge, disc, tape, etc.).",
599
+ "additionalProperties": false,
563
600
  "required": [
564
601
  "file"
565
602
  ],
@@ -573,10 +610,6 @@
573
610
  "type": "string",
574
611
  "description": "Alternative text describing the image for accessibility."
575
612
  },
576
- "mediaId": {
577
- "type": "string",
578
- "description": "References the 'id' field of a media item, if specific to one disc/cart."
579
- },
580
613
  "type": {
581
614
  "$ref": "#/$defs/mediaType"
582
615
  }
@@ -585,15 +618,12 @@
585
618
  "mediaItem": {
586
619
  "type": "object",
587
620
  "description": "A media file (ROM, disc image, tape, etc.).",
621
+ "additionalProperties": false,
588
622
  "required": [
589
623
  "filename",
590
624
  "type"
591
625
  ],
592
626
  "properties": {
593
- "id": {
594
- "type": "string",
595
- "description": "Unique identifier for this media item, used for referencing in other fields."
596
- },
597
627
  "filename": {
598
628
  "type": "string",
599
629
  "minLength": 1,
@@ -648,9 +678,9 @@
648
678
  "type": "string",
649
679
  "description": "Source database or group that verified the dump (e.g. 'No-Intro', 'Redump', 'TOSEC')."
650
680
  },
651
- "serial": {
681
+ "productCode": {
652
682
  "type": "string",
653
- "description": "Official product serial/catalog number from the original media."
683
+ "description": "Official product code or catalog number from the original media (e.g. 'SLUS-00594', 'MK-1491', 'DOL-GALE-USA')."
654
684
  },
655
685
  "notes": {
656
686
  "type": "string",
@@ -665,6 +695,7 @@
665
695
  "players": {
666
696
  "type": "object",
667
697
  "description": "Multiplayer capabilities.",
698
+ "additionalProperties": false,
668
699
  "properties": {
669
700
  "min": {
670
701
  "type": "integer",
@@ -684,6 +715,7 @@
684
715
  "features": {
685
716
  "type": "object",
686
717
  "description": "Input devices, peripherals, and capabilities.",
718
+ "additionalProperties": false,
687
719
  "properties": {
688
720
  "required": {
689
721
  "type": "array",
@@ -703,6 +735,7 @@
703
735
  }
704
736
  },
705
737
  "type": "object",
738
+ "additionalProperties": false,
706
739
  "required": [
707
740
  "schemaVersion",
708
741
  "info",
@@ -722,6 +755,7 @@
722
755
  "info": {
723
756
  "type": "object",
724
757
  "description": "Title metadata and information.",
758
+ "additionalProperties": false,
725
759
  "required": [
726
760
  "title",
727
761
  "platform"
@@ -811,6 +845,7 @@
811
845
  "externalIds": {
812
846
  "type": "object",
813
847
  "description": "Identifiers from external databases for cross-referencing.",
848
+ "additionalProperties": false,
814
849
  "properties": {
815
850
  "igdb": {
816
851
  "type": "integer",
@@ -841,6 +876,30 @@
841
876
  "rating": {
842
877
  "$ref": "#/$defs/ageRating"
843
878
  },
879
+ "license": {
880
+ "$ref": "#/$defs/license",
881
+ "description": "The software license (e.g., 'freeware', 'shareware', 'commercial', 'gpl', 'mit')."
882
+ },
883
+ "ean": {
884
+ "type": "string",
885
+ "pattern": "^[0-9]{13}$",
886
+ "description": "European Article Number (EAN-13) barcode from product packaging. Also covers JAN (Japanese Article Number)."
887
+ },
888
+ "upc": {
889
+ "type": "string",
890
+ "pattern": "^[0-9]{12}$",
891
+ "description": "Universal Product Code (UPC-A) barcode from product packaging."
892
+ },
893
+ "isbn": {
894
+ "type": "string",
895
+ "pattern": "^(97[89][0-9]{10}|[0-9]{9}[0-9X])$",
896
+ "description": "International Standard Book Number (ISBN-10 or ISBN-13) if applicable."
897
+ },
898
+ "issn": {
899
+ "type": "string",
900
+ "pattern": "^[0-9]{4}-[0-9]{3}[0-9X]$",
901
+ "description": "International Standard Serial Number (ISSN) for magazine coverdisks."
902
+ },
844
903
  "notes": {
845
904
  "type": "string",
846
905
  "description": "Additional notes, warnings, or information (e.g. access codes, compatibility notes, copy protection details)."
@@ -858,6 +917,7 @@
858
917
  "assets": {
859
918
  "type": "object",
860
919
  "description": "Artwork, documentation, and other supplementary files.",
920
+ "additionalProperties": false,
861
921
  "properties": {
862
922
  "boxFront": {
863
923
  "$ref": "#/$defs/image",