@takuhon/core 0.24.0 → 1.0.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takuhon/core",
3
- "version": "0.24.0",
3
+ "version": "1.0.0",
4
4
  "description": "JSON Schema, validation, normalization, locale resolution, and JSON-LD generation for takuhon",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Takuhon contributors",
@@ -1,21 +1,11 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://takuhon.example/schemas/0.7.0/takuhon.schema.json",
3
+ "$id": "https://takuhon.example/schemas/1.0.0/takuhon.schema.json",
4
4
  "title": "Takuhon Profile",
5
5
  "description": "Portable profile data format consumed by @takuhon/core. The canonical contract for profile content authored as takuhon.json.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
- "required": [
9
- "schemaVersion",
10
- "profile",
11
- "links",
12
- "careers",
13
- "projects",
14
- "skills",
15
- "contact",
16
- "settings",
17
- "meta"
18
- ],
8
+ "required": ["schemaVersion", "profile", "contact", "settings", "meta"],
19
9
  "properties": {
20
10
  "schemaVersion": {
21
11
  "type": "string",
@@ -157,9 +147,10 @@
157
147
  "additionalProperties": {
158
148
  "type": "string",
159
149
  "minLength": 1,
160
- "maxLength": 200
150
+ "maxLength": 200,
151
+ "pattern": "\\S"
161
152
  },
162
- "description": "Map of BCP-47 locale tag to short title-like string (max 200 chars per value)."
153
+ "description": "Map of BCP-47 locale tag to short title-like string (max 200 chars per value). Each value must contain at least one non-whitespace character."
163
154
  },
164
155
  "LocalizedBody": {
165
156
  "type": "object",
@@ -171,9 +162,10 @@
171
162
  "additionalProperties": {
172
163
  "type": "string",
173
164
  "minLength": 1,
174
- "maxLength": 5000
165
+ "maxLength": 5000,
166
+ "pattern": "\\S"
175
167
  },
176
- "description": "Map of BCP-47 locale tag to body-length string (max 5000 chars per value)."
168
+ "description": "Map of BCP-47 locale tag to body-length string (max 5000 chars per value). Each value must contain at least one non-whitespace character."
177
169
  },
178
170
  "LinkType": {
179
171
  "type": "string",
@@ -198,7 +190,7 @@
198
190
  },
199
191
  "Profile": {
200
192
  "type": "object",
201
- "additionalProperties": true,
193
+ "additionalProperties": false,
202
194
  "required": ["displayName"],
203
195
  "properties": {
204
196
  "displayName": { "$ref": "#/$defs/LocalizedTitle" },
@@ -210,7 +202,7 @@
210
202
  },
211
203
  "Avatar": {
212
204
  "type": "object",
213
- "additionalProperties": true,
205
+ "additionalProperties": false,
214
206
  "required": ["url"],
215
207
  "properties": {
216
208
  "url": {
@@ -224,7 +216,7 @@
224
216
  },
225
217
  "Address": {
226
218
  "type": "object",
227
- "additionalProperties": true,
219
+ "additionalProperties": false,
228
220
  "properties": {
229
221
  "country": { "$ref": "#/$defs/Iso3166Alpha2" },
230
222
  "region": { "type": "string", "maxLength": 100 },
@@ -261,7 +253,7 @@
261
253
  },
262
254
  "Career": {
263
255
  "type": "object",
264
- "additionalProperties": true,
256
+ "additionalProperties": false,
265
257
  "required": ["id", "organization", "role", "startDate"],
266
258
  "properties": {
267
259
  "id": { "$ref": "#/$defs/Slug" },
@@ -281,7 +273,7 @@
281
273
  },
282
274
  "Project": {
283
275
  "type": "object",
284
- "additionalProperties": true,
276
+ "additionalProperties": false,
285
277
  "required": ["id", "title"],
286
278
  "properties": {
287
279
  "id": { "$ref": "#/$defs/Slug" },
@@ -305,7 +297,7 @@
305
297
  },
306
298
  "Skill": {
307
299
  "type": "object",
308
- "additionalProperties": true,
300
+ "additionalProperties": false,
309
301
  "required": ["id", "label"],
310
302
  "properties": {
311
303
  "id": { "$ref": "#/$defs/Slug" },
@@ -322,7 +314,7 @@
322
314
  },
323
315
  "Contact": {
324
316
  "type": "object",
325
- "additionalProperties": true,
317
+ "additionalProperties": false,
326
318
  "properties": {
327
319
  "email": { "$ref": "#/$defs/Email" },
328
320
  "showEmail": { "type": "boolean", "default": false },
@@ -331,7 +323,7 @@
331
323
  },
332
324
  "Settings": {
333
325
  "type": "object",
334
- "additionalProperties": true,
326
+ "additionalProperties": false,
335
327
  "required": ["defaultLocale", "availableLocales"],
336
328
  "properties": {
337
329
  "defaultLocale": { "$ref": "#/$defs/LocaleTag" },
@@ -498,7 +490,7 @@
498
490
  },
499
491
  "Meta": {
500
492
  "type": "object",
501
- "additionalProperties": true,
493
+ "additionalProperties": false,
502
494
  "required": ["contentLicense"],
503
495
  "properties": {
504
496
  "createdAt": { "$ref": "#/$defs/IsoDateTime" },
@@ -543,7 +535,7 @@
543
535
  },
544
536
  "MetaPrivacy": {
545
537
  "type": "object",
546
- "additionalProperties": true,
538
+ "additionalProperties": false,
547
539
  "description": "Opt-out flags that strip personally identifying fields from public API output (GET /api/profile, /api/jsonld, /takuhon.json). Admin endpoints (PUT /api/admin/*, GET /api/admin/export) ignore these flags. Privacy-by-default: omitting the object or individual flags is equivalent to true.",
548
540
  "properties": {
549
541
  "hideCredentialIds": {
@@ -560,7 +552,7 @@
560
552
  },
561
553
  "Certification": {
562
554
  "type": "object",
563
- "additionalProperties": true,
555
+ "additionalProperties": false,
564
556
  "required": ["id", "title", "issuingOrganization", "issueDate"],
565
557
  "properties": {
566
558
  "id": { "$ref": "#/$defs/Slug" },
@@ -584,7 +576,7 @@
584
576
  },
585
577
  "Membership": {
586
578
  "type": "object",
587
- "additionalProperties": true,
579
+ "additionalProperties": false,
588
580
  "required": ["id", "organization", "startDate"],
589
581
  "properties": {
590
582
  "id": { "$ref": "#/$defs/Slug" },
@@ -604,7 +596,7 @@
604
596
  },
605
597
  "Volunteering": {
606
598
  "type": "object",
607
- "additionalProperties": true,
599
+ "additionalProperties": false,
608
600
  "required": ["id", "organization", "role", "startDate"],
609
601
  "properties": {
610
602
  "id": { "$ref": "#/$defs/Slug" },
@@ -624,7 +616,7 @@
624
616
  },
625
617
  "Honor": {
626
618
  "type": "object",
627
- "additionalProperties": true,
619
+ "additionalProperties": false,
628
620
  "required": ["id", "title", "issuer", "date"],
629
621
  "properties": {
630
622
  "id": { "$ref": "#/$defs/Slug" },
@@ -639,7 +631,7 @@
639
631
  },
640
632
  "Education": {
641
633
  "type": "object",
642
- "additionalProperties": true,
634
+ "additionalProperties": false,
643
635
  "required": ["id", "institution", "startDate"],
644
636
  "properties": {
645
637
  "id": { "$ref": "#/$defs/Slug" },
@@ -666,7 +658,7 @@
666
658
  },
667
659
  "Publication": {
668
660
  "type": "object",
669
- "additionalProperties": true,
661
+ "additionalProperties": false,
670
662
  "required": ["id", "title", "date"],
671
663
  "properties": {
672
664
  "id": { "$ref": "#/$defs/Slug" },
@@ -693,7 +685,7 @@
693
685
  },
694
686
  "Language": {
695
687
  "type": "object",
696
- "additionalProperties": true,
688
+ "additionalProperties": false,
697
689
  "required": ["id", "language", "proficiency"],
698
690
  "properties": {
699
691
  "id": { "$ref": "#/$defs/Slug" },
@@ -710,7 +702,7 @@
710
702
  },
711
703
  "Course": {
712
704
  "type": "object",
713
- "additionalProperties": true,
705
+ "additionalProperties": false,
714
706
  "required": ["id", "title"],
715
707
  "properties": {
716
708
  "id": { "$ref": "#/$defs/Slug" },
@@ -730,7 +722,7 @@
730
722
  },
731
723
  "Patent": {
732
724
  "type": "object",
733
- "additionalProperties": true,
725
+ "additionalProperties": false,
734
726
  "required": ["id", "title", "patentNumber", "status"],
735
727
  "properties": {
736
728
  "id": { "$ref": "#/$defs/Slug" },
@@ -760,7 +752,7 @@
760
752
  },
761
753
  "TestScore": {
762
754
  "type": "object",
763
- "additionalProperties": true,
755
+ "additionalProperties": false,
764
756
  "required": ["id", "title", "score", "date"],
765
757
  "properties": {
766
758
  "id": { "$ref": "#/$defs/Slug" },
@@ -784,7 +776,7 @@
784
776
  },
785
777
  "Recommendation": {
786
778
  "type": "object",
787
- "additionalProperties": true,
779
+ "additionalProperties": false,
788
780
  "required": ["id", "body", "author"],
789
781
  "properties": {
790
782
  "id": { "$ref": "#/$defs/Slug" },
@@ -809,7 +801,7 @@
809
801
  },
810
802
  "RecommendationAuthor": {
811
803
  "type": "object",
812
- "additionalProperties": true,
804
+ "additionalProperties": false,
813
805
  "required": ["name"],
814
806
  "properties": {
815
807
  "name": {