@retropak/schema 1.0.0-draft → 1.0.0-draft11
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 +14 -29
- package/locales/en.json +27 -0
- package/package.json +6 -3
- package/schemas/v1/retropak.schema.json +92 -31
package/README.md
CHANGED
|
@@ -1,39 +1,24 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @retropak/schema
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
JSON Schema definition for Retropak manifests.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npm install @retropak/schema
|
|
9
|
+
```
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
- **[Visit the Website](https://retropak.org)**: Documentation and guides
|
|
11
|
-
- **[View the Schema](docs/schemas/v1/retropak.schema.json)**: JSON Schema for validation
|
|
12
|
-
- **[Contributing](CONTRIBUTING.md)**: How to build and contribute to the docs
|
|
11
|
+
## Usage
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
```javascript
|
|
14
|
+
import schema from '@retropak/schema/schema' assert { type: 'json' };
|
|
15
|
+
import locales from '@retropak/schema/locales/en' assert { type: 'json' };
|
|
16
|
+
```
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
## Development
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
- **Metadata**: Title, platform, genre, developer, release date
|
|
20
|
-
- **Artwork**: Box art, screenshots, logos
|
|
21
|
-
- **Documentation**: Manuals, maps, guides
|
|
22
|
-
- **Audio**: Soundtracks and music
|
|
23
|
-
- **Configuration**: Emulator settings
|
|
24
|
-
|
|
25
|
-
Everything needed to preserve and present retro software in one self-contained package.
|
|
26
|
-
|
|
27
|
-
## Features
|
|
28
|
-
|
|
29
|
-
- **92 supported platforms**: From Atari 2600 to Xbox Series X
|
|
30
|
-
- **Rich metadata**: Genre, players, features, ratings, credits
|
|
31
|
-
- **Multi-disc support**: CD swapping, boot disks, compilations
|
|
32
|
-
- **ROM verification**: MD5/SHA1/CRC32 checksums for database/DAT file validation
|
|
33
|
-
- **Cryptographic signing**: GPG and SSH signatures for authenticity
|
|
34
|
-
- **Accessibility**: Alt text support for all images
|
|
35
|
-
- **Preservation-focused**: Version tracking, dump status, source attribution
|
|
20
|
+
This package is part of the Retropak monorepo.
|
|
36
21
|
|
|
37
22
|
## License
|
|
38
23
|
|
|
39
|
-
|
|
24
|
+
CC0-1.0
|
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,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retropak/schema",
|
|
3
|
-
"version": "1.0.0-
|
|
3
|
+
"version": "1.0.0-draft11",
|
|
4
4
|
"description": "Metadata specification for Retropak software containers",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"main": "./schemas/v1/retropak.schema.json",
|
|
6
7
|
"exports": {
|
|
7
8
|
"./schema": "./schemas/v1/retropak.schema.json",
|
|
8
9
|
"./locales/en": "./locales/en.json",
|
|
@@ -14,13 +15,15 @@
|
|
|
14
15
|
],
|
|
15
16
|
"keywords": [
|
|
16
17
|
"retropak",
|
|
17
|
-
"schema"
|
|
18
|
+
"schema",
|
|
19
|
+
"json-schema"
|
|
18
20
|
],
|
|
19
21
|
"author": "piers@retropak.org",
|
|
20
22
|
"license": "CC0-1.0",
|
|
21
23
|
"repository": {
|
|
22
24
|
"type": "git",
|
|
23
|
-
"url": "git+https://github.com/piersroberts/retropak.git"
|
|
25
|
+
"url": "git+https://github.com/piersroberts/retropak.git",
|
|
26
|
+
"directory": "packages/schema"
|
|
24
27
|
},
|
|
25
28
|
"bugs": {
|
|
26
29
|
"url": "https://github.com/piersroberts/retropak/issues"
|
|
@@ -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,12 +508,14 @@
|
|
|
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
|
],
|
|
482
515
|
"properties": {
|
|
483
516
|
"file": {
|
|
484
517
|
"type": "string",
|
|
518
|
+
"minLength": 1,
|
|
485
519
|
"description": "Path to the configuration file."
|
|
486
520
|
},
|
|
487
521
|
"target": {
|
|
@@ -497,12 +531,14 @@
|
|
|
497
531
|
"image": {
|
|
498
532
|
"type": "object",
|
|
499
533
|
"description": "An image file with optional alt text for accessibility.",
|
|
534
|
+
"additionalProperties": false,
|
|
500
535
|
"required": [
|
|
501
536
|
"file"
|
|
502
537
|
],
|
|
503
538
|
"properties": {
|
|
504
539
|
"file": {
|
|
505
540
|
"type": "string",
|
|
541
|
+
"minLength": 1,
|
|
506
542
|
"description": "Path to the image file."
|
|
507
543
|
},
|
|
508
544
|
"alt": {
|
|
@@ -514,12 +550,14 @@
|
|
|
514
550
|
"creditEntry": {
|
|
515
551
|
"type": "object",
|
|
516
552
|
"description": "A person credited for work on the title.",
|
|
553
|
+
"additionalProperties": false,
|
|
517
554
|
"required": [
|
|
518
555
|
"name"
|
|
519
556
|
],
|
|
520
557
|
"properties": {
|
|
521
558
|
"name": {
|
|
522
559
|
"type": "string",
|
|
560
|
+
"minLength": 1,
|
|
523
561
|
"description": "Person's name."
|
|
524
562
|
},
|
|
525
563
|
"roles": {
|
|
@@ -528,12 +566,20 @@
|
|
|
528
566
|
"items": {
|
|
529
567
|
"type": "string"
|
|
530
568
|
}
|
|
569
|
+
},
|
|
570
|
+
"characters": {
|
|
571
|
+
"type": "array",
|
|
572
|
+
"description": "Character names portrayed by this person (for voice actors, motion capture actors, etc.).",
|
|
573
|
+
"items": {
|
|
574
|
+
"type": "string"
|
|
575
|
+
}
|
|
531
576
|
}
|
|
532
577
|
}
|
|
533
578
|
},
|
|
534
579
|
"musicTrack": {
|
|
535
580
|
"type": "object",
|
|
536
581
|
"description": "A soundtrack or audio file from the title.",
|
|
582
|
+
"additionalProperties": false,
|
|
537
583
|
"required": [
|
|
538
584
|
"file"
|
|
539
585
|
],
|
|
@@ -544,6 +590,7 @@
|
|
|
544
590
|
},
|
|
545
591
|
"file": {
|
|
546
592
|
"type": "string",
|
|
593
|
+
"minLength": 1,
|
|
547
594
|
"description": "Path to the audio file."
|
|
548
595
|
},
|
|
549
596
|
"background": {
|
|
@@ -553,44 +600,18 @@
|
|
|
553
600
|
}
|
|
554
601
|
}
|
|
555
602
|
},
|
|
556
|
-
"physicalMediaImage": {
|
|
557
|
-
"type": "object",
|
|
558
|
-
"description": "An image of physical media (cartridge, disc, tape, etc.).",
|
|
559
|
-
"required": [
|
|
560
|
-
"file"
|
|
561
|
-
],
|
|
562
|
-
"properties": {
|
|
563
|
-
"file": {
|
|
564
|
-
"type": "string",
|
|
565
|
-
"description": "Path to the physical media image file."
|
|
566
|
-
},
|
|
567
|
-
"alt": {
|
|
568
|
-
"type": "string",
|
|
569
|
-
"description": "Alternative text describing the image for accessibility."
|
|
570
|
-
},
|
|
571
|
-
"mediaId": {
|
|
572
|
-
"type": "string",
|
|
573
|
-
"description": "References the 'id' field of a media item, if specific to one disc/cart."
|
|
574
|
-
},
|
|
575
|
-
"type": {
|
|
576
|
-
"$ref": "#/$defs/mediaType"
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
},
|
|
580
603
|
"mediaItem": {
|
|
581
604
|
"type": "object",
|
|
582
605
|
"description": "A media file (ROM, disc image, tape, etc.).",
|
|
606
|
+
"additionalProperties": false,
|
|
583
607
|
"required": [
|
|
584
608
|
"filename",
|
|
585
609
|
"type"
|
|
586
610
|
],
|
|
587
611
|
"properties": {
|
|
588
|
-
"id": {
|
|
589
|
-
"type": "string",
|
|
590
|
-
"description": "Unique identifier for this media item, used for referencing in other fields."
|
|
591
|
-
},
|
|
592
612
|
"filename": {
|
|
593
613
|
"type": "string",
|
|
614
|
+
"minLength": 1,
|
|
594
615
|
"description": "Relative path to the media file within the archive."
|
|
595
616
|
},
|
|
596
617
|
"label": {
|
|
@@ -622,6 +643,11 @@
|
|
|
622
643
|
"pattern": "^[a-fA-F0-9]{40}$",
|
|
623
644
|
"description": "SHA-1 checksum of the media file for verification."
|
|
624
645
|
},
|
|
646
|
+
"sha256": {
|
|
647
|
+
"type": "string",
|
|
648
|
+
"pattern": "^[a-fA-F0-9]{64}$",
|
|
649
|
+
"description": "SHA-256 checksum of the media file for verification."
|
|
650
|
+
},
|
|
625
651
|
"crc32": {
|
|
626
652
|
"type": "string",
|
|
627
653
|
"pattern": "^[a-fA-F0-9]{8}$",
|
|
@@ -642,13 +668,17 @@
|
|
|
642
668
|
"type": "string",
|
|
643
669
|
"description": "Source database or group that verified the dump (e.g. 'No-Intro', 'Redump', 'TOSEC')."
|
|
644
670
|
},
|
|
645
|
-
"
|
|
671
|
+
"productCode": {
|
|
646
672
|
"type": "string",
|
|
647
|
-
"description": "Official product
|
|
673
|
+
"description": "Official product code or catalog number from the original media (e.g. 'SLUS-00594', 'MK-1491', 'DOL-GALE-USA')."
|
|
648
674
|
},
|
|
649
675
|
"notes": {
|
|
650
676
|
"type": "string",
|
|
651
677
|
"description": "Additional notes about this specific media file (e.g. distribution method, requirements, known issues)."
|
|
678
|
+
},
|
|
679
|
+
"labelImage": {
|
|
680
|
+
"$ref": "#/$defs/image",
|
|
681
|
+
"description": "Image of the media label (e.g. disc label, cartridge label, cassette label)."
|
|
652
682
|
}
|
|
653
683
|
}
|
|
654
684
|
},
|
|
@@ -659,6 +689,7 @@
|
|
|
659
689
|
"players": {
|
|
660
690
|
"type": "object",
|
|
661
691
|
"description": "Multiplayer capabilities.",
|
|
692
|
+
"additionalProperties": false,
|
|
662
693
|
"properties": {
|
|
663
694
|
"min": {
|
|
664
695
|
"type": "integer",
|
|
@@ -678,6 +709,7 @@
|
|
|
678
709
|
"features": {
|
|
679
710
|
"type": "object",
|
|
680
711
|
"description": "Input devices, peripherals, and capabilities.",
|
|
712
|
+
"additionalProperties": false,
|
|
681
713
|
"properties": {
|
|
682
714
|
"required": {
|
|
683
715
|
"type": "array",
|
|
@@ -697,6 +729,7 @@
|
|
|
697
729
|
}
|
|
698
730
|
},
|
|
699
731
|
"type": "object",
|
|
732
|
+
"additionalProperties": false,
|
|
700
733
|
"required": [
|
|
701
734
|
"schemaVersion",
|
|
702
735
|
"info",
|
|
@@ -716,6 +749,7 @@
|
|
|
716
749
|
"info": {
|
|
717
750
|
"type": "object",
|
|
718
751
|
"description": "Title metadata and information.",
|
|
752
|
+
"additionalProperties": false,
|
|
719
753
|
"required": [
|
|
720
754
|
"title",
|
|
721
755
|
"platform"
|
|
@@ -723,6 +757,7 @@
|
|
|
723
757
|
"properties": {
|
|
724
758
|
"title": {
|
|
725
759
|
"type": "string",
|
|
760
|
+
"minLength": 1,
|
|
726
761
|
"description": "The primary display name of the title."
|
|
727
762
|
},
|
|
728
763
|
"alternativeTitles": {
|
|
@@ -804,6 +839,7 @@
|
|
|
804
839
|
"externalIds": {
|
|
805
840
|
"type": "object",
|
|
806
841
|
"description": "Identifiers from external databases for cross-referencing.",
|
|
842
|
+
"additionalProperties": false,
|
|
807
843
|
"properties": {
|
|
808
844
|
"igdb": {
|
|
809
845
|
"type": "integer",
|
|
@@ -834,6 +870,30 @@
|
|
|
834
870
|
"rating": {
|
|
835
871
|
"$ref": "#/$defs/ageRating"
|
|
836
872
|
},
|
|
873
|
+
"license": {
|
|
874
|
+
"$ref": "#/$defs/license",
|
|
875
|
+
"description": "The software license (e.g., 'freeware', 'shareware', 'commercial', 'gpl', 'mit')."
|
|
876
|
+
},
|
|
877
|
+
"ean": {
|
|
878
|
+
"type": "string",
|
|
879
|
+
"pattern": "^[0-9]{13}$",
|
|
880
|
+
"description": "European Article Number (EAN-13) barcode from product packaging. Also covers JAN (Japanese Article Number)."
|
|
881
|
+
},
|
|
882
|
+
"upc": {
|
|
883
|
+
"type": "string",
|
|
884
|
+
"pattern": "^[0-9]{12}$",
|
|
885
|
+
"description": "Universal Product Code (UPC-A) barcode from product packaging."
|
|
886
|
+
},
|
|
887
|
+
"isbn": {
|
|
888
|
+
"type": "string",
|
|
889
|
+
"pattern": "^(97[89][0-9]{10}|[0-9]{9}[0-9X])$",
|
|
890
|
+
"description": "International Standard Book Number (ISBN-10 or ISBN-13) if applicable."
|
|
891
|
+
},
|
|
892
|
+
"issn": {
|
|
893
|
+
"type": "string",
|
|
894
|
+
"pattern": "^[0-9]{4}-[0-9]{3}[0-9X]$",
|
|
895
|
+
"description": "International Standard Serial Number (ISSN) for magazine coverdisks."
|
|
896
|
+
},
|
|
837
897
|
"notes": {
|
|
838
898
|
"type": "string",
|
|
839
899
|
"description": "Additional notes, warnings, or information (e.g. access codes, compatibility notes, copy protection details)."
|
|
@@ -851,6 +911,7 @@
|
|
|
851
911
|
"assets": {
|
|
852
912
|
"type": "object",
|
|
853
913
|
"description": "Artwork, documentation, and other supplementary files.",
|
|
914
|
+
"additionalProperties": false,
|
|
854
915
|
"properties": {
|
|
855
916
|
"boxFront": {
|
|
856
917
|
"$ref": "#/$defs/image",
|
|
@@ -868,7 +929,7 @@
|
|
|
868
929
|
"type": "array",
|
|
869
930
|
"description": "Images of the physical media (cartridge, disc, tape, floppy, etc.).",
|
|
870
931
|
"items": {
|
|
871
|
-
"$ref": "#/$defs/
|
|
932
|
+
"$ref": "#/$defs/image"
|
|
872
933
|
}
|
|
873
934
|
},
|
|
874
935
|
"logo": {
|