ddex-json-codec 0.3.0 → 0.3.1

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/dist/index.d.mts CHANGED
@@ -12,6 +12,7 @@ interface Title {
12
12
  titleText: string;
13
13
  subTitle?: string;
14
14
  titleType?: string;
15
+ languageAndScriptCode?: string;
15
16
  }
16
17
  interface PLine {
17
18
  year?: string;
@@ -54,7 +55,7 @@ interface ArtistRole {
54
55
  interface Artist {
55
56
  /** 解決済みのデフォルト名(3.8系: FullNameから直接取得、4系: PartyListの最初のFullName) */
56
57
  name: string;
57
- /** 4系のみ: 多言語名(PartyListPartyName[]をそのまま保持) */
58
+ /** 多言語名(4系: PartyListから取得、3.8系: 複数PartyNameから取得) */
58
59
  names?: PartyName[];
59
60
  /** 4系のみ: 元の参照ID(ラウンドトリップ用) */
60
61
  partyReference?: string;
package/dist/index.mjs CHANGED
@@ -427,13 +427,29 @@ var Ern38Converter = class {
427
427
  if (!raw) return void 0;
428
428
  const artists = ensureArray(raw);
429
429
  if (artists.length === 0) return void 0;
430
- return artists.map((a) => ({
431
- artist: {
432
- name: a.PartyName?.FullName ?? "",
433
- roles: a.ArtistRole ? this.parseArtistRoles(a.ArtistRole) : void 0
434
- },
435
- sequenceNumber: a["@_SequenceNumber"] ? Number(a["@_SequenceNumber"]) : void 0
436
- }));
430
+ return artists.map((a) => {
431
+ const partyNames = ensureArray(a.PartyName);
432
+ const firstName = partyNames[0]?.FullName ?? "";
433
+ let names;
434
+ if (partyNames.length > 1) names = partyNames.map((pn) => ({
435
+ fullName: pn.FullName ?? "",
436
+ fullNameIndexed: pn.FullNameIndexed ?? void 0,
437
+ languageAndScriptCode: pn["@_LanguageAndScriptCode"] ?? void 0
438
+ }));
439
+ else if (partyNames.length === 1 && partyNames[0]["@_LanguageAndScriptCode"]) names = [{
440
+ fullName: firstName,
441
+ fullNameIndexed: partyNames[0].FullNameIndexed ?? void 0,
442
+ languageAndScriptCode: partyNames[0]["@_LanguageAndScriptCode"]
443
+ }];
444
+ return {
445
+ artist: {
446
+ name: firstName,
447
+ names,
448
+ roles: a.ArtistRole ? this.parseArtistRoles(a.ArtistRole) : void 0
449
+ },
450
+ sequenceNumber: a["@_SequenceNumber"] ? Number(a["@_SequenceNumber"]) : void 0
451
+ };
452
+ });
437
453
  }
438
454
  parseArtistRoles(raw) {
439
455
  return ensureArray(raw).map((r) => {
@@ -488,7 +504,8 @@ var Ern38Converter = class {
488
504
  return titles.map((t) => ({
489
505
  titleText: t.TitleText ?? "",
490
506
  subTitle: t.SubTitle && t.SubTitle !== "" ? t.SubTitle : void 0,
491
- titleType: t["@_TitleType"] ?? void 0
507
+ titleType: t["@_TitleType"] ?? void 0,
508
+ languageAndScriptCode: t["@_LanguageAndScriptCode"] ?? void 0
492
509
  }));
493
510
  }
494
511
  parsePLine(raw) {
@@ -1140,7 +1157,14 @@ var Ern38Builder = class {
1140
1157
  buildDisplayArtist(da) {
1141
1158
  const result = {};
1142
1159
  if (da.sequenceNumber != null) result["@_SequenceNumber"] = String(da.sequenceNumber);
1143
- result.PartyName = { FullName: da.artist.name };
1160
+ if (da.artist.names?.length) result.PartyName = da.artist.names.map((pn) => {
1161
+ const r = {};
1162
+ if (pn.languageAndScriptCode) r["@_LanguageAndScriptCode"] = pn.languageAndScriptCode;
1163
+ r.FullName = pn.fullName;
1164
+ if (pn.fullNameIndexed) r.FullNameIndexed = pn.fullNameIndexed;
1165
+ return r;
1166
+ });
1167
+ else result.PartyName = { FullName: da.artist.name };
1144
1168
  if (da.artist.roles?.length) {
1145
1169
  const builtRoles = da.artist.roles.map((r) => this.buildArtistRole(r));
1146
1170
  result.ArtistRole = builtRoles.length === 1 ? builtRoles[0] : builtRoles;
@@ -1178,6 +1202,7 @@ var Ern38Builder = class {
1178
1202
  buildTitle(t) {
1179
1203
  const result = {};
1180
1204
  if (t.titleType) result["@_TitleType"] = t.titleType;
1205
+ if (t.languageAndScriptCode) result["@_LanguageAndScriptCode"] = t.languageAndScriptCode;
1181
1206
  result.TitleText = t.titleText;
1182
1207
  if (t.subTitle) result.SubTitle = t.subTitle;
1183
1208
  return result;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ddex-json-codec",
3
3
  "type": "module",
4
- "version": "0.3.0",
4
+ "version": "0.3.1",
5
5
  "description": "DDEX ERN XML ↔ JSON converter for TypeScript",
6
6
  "license": "MIT",
7
7
  "author": "kazhs",