ddex-json-codec 0.2.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 +46 -28
- package/dist/index.mjs +80 -23
- package/package.json +1 -1
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
|
|
58
|
+
/** 多言語名(4系: PartyListから取得、3.8系: 複数PartyNameから取得) */
|
|
58
59
|
names?: PartyName[];
|
|
59
60
|
/** 4系のみ: 元の参照ID(ラウンドトリップ用) */
|
|
60
61
|
partyReference?: string;
|
|
@@ -69,6 +70,7 @@ interface ResourceContributor {
|
|
|
69
70
|
name: string;
|
|
70
71
|
role: string;
|
|
71
72
|
sequenceNumber?: number;
|
|
73
|
+
instrumentType?: string;
|
|
72
74
|
/** UserDefined時の属性 */
|
|
73
75
|
roleNamespace?: string;
|
|
74
76
|
roleUserDefinedValue?: string;
|
|
@@ -88,16 +90,19 @@ interface Contributor {
|
|
|
88
90
|
}
|
|
89
91
|
//#endregion
|
|
90
92
|
//#region src/types/image.d.ts
|
|
91
|
-
interface
|
|
93
|
+
interface ImageBase {
|
|
92
94
|
resourceReference: string;
|
|
93
95
|
type?: string;
|
|
94
96
|
imageId?: ImageId;
|
|
95
|
-
|
|
97
|
+
}
|
|
98
|
+
interface Image38 extends ImageBase {
|
|
96
99
|
detailsByTerritory?: ImageDetailsByTerritory[];
|
|
97
|
-
|
|
100
|
+
}
|
|
101
|
+
interface Image4 extends ImageBase {
|
|
98
102
|
parentalWarningType?: string;
|
|
99
103
|
technicalDetails?: TechnicalImageDetails;
|
|
100
104
|
}
|
|
105
|
+
type Image = Image38 | Image4;
|
|
101
106
|
interface ImageId {
|
|
102
107
|
proprietaryId?: string;
|
|
103
108
|
proprietaryIdNamespace?: string;
|
|
@@ -125,25 +130,26 @@ interface HashSum {
|
|
|
125
130
|
}
|
|
126
131
|
//#endregion
|
|
127
132
|
//#region src/types/sound-recording.d.ts
|
|
128
|
-
interface
|
|
133
|
+
interface SoundRecordingBase {
|
|
129
134
|
resourceReference: string;
|
|
130
135
|
type?: string;
|
|
131
136
|
soundRecordingId?: SoundRecordingId;
|
|
132
|
-
referenceTitle?: ReferenceTitle$1;
|
|
133
137
|
displayArtists: DisplayArtist[];
|
|
134
138
|
duration?: string;
|
|
135
139
|
creationDate?: string;
|
|
136
140
|
languageOfPerformance?: string;
|
|
137
141
|
pLine?: PLine;
|
|
138
|
-
|
|
142
|
+
}
|
|
143
|
+
interface SoundRecording38 extends SoundRecordingBase {
|
|
144
|
+
referenceTitle?: ReferenceTitle$1;
|
|
139
145
|
detailsByTerritory?: SoundRecordingDetailsByTerritory[];
|
|
140
|
-
|
|
146
|
+
}
|
|
147
|
+
interface SoundRecording4 extends SoundRecordingBase {
|
|
141
148
|
displayTitleText?: string;
|
|
142
|
-
/** 4系: 複数のDisplayTitle(territory+lang属性) */
|
|
143
149
|
displayTitles?: DisplayTitle[];
|
|
144
|
-
/** 4系: PartyReference参照のContributor */
|
|
145
150
|
contributors?: Contributor[];
|
|
146
151
|
}
|
|
152
|
+
type SoundRecording = SoundRecording38 | SoundRecording4;
|
|
147
153
|
interface SoundRecordingId {
|
|
148
154
|
isrc?: string;
|
|
149
155
|
catalogNumber?: string;
|
|
@@ -157,6 +163,7 @@ interface TechnicalSoundRecordingDetails {
|
|
|
157
163
|
audioCodecType?: string;
|
|
158
164
|
bitRate?: number;
|
|
159
165
|
bitRateUnit?: string;
|
|
166
|
+
bitsPerSample?: number;
|
|
160
167
|
numberOfChannels?: number;
|
|
161
168
|
samplingRate?: number;
|
|
162
169
|
samplingRateUnit?: string;
|
|
@@ -179,28 +186,30 @@ interface SoundRecordingDetailsByTerritory {
|
|
|
179
186
|
}
|
|
180
187
|
//#endregion
|
|
181
188
|
//#region src/types/release.d.ts
|
|
182
|
-
interface
|
|
189
|
+
interface ReleaseBase {
|
|
183
190
|
releaseReference: string;
|
|
184
191
|
releaseType?: string;
|
|
185
192
|
releaseId?: ReleaseId;
|
|
186
|
-
referenceTitle?: ReferenceTitle;
|
|
187
193
|
displayArtists: DisplayArtist[];
|
|
188
194
|
releaseResourceReferences?: ReleaseResourceReference[];
|
|
189
|
-
resourceGroup?: ResourceGroup;
|
|
190
195
|
duration?: string;
|
|
191
196
|
pLine?: PLine;
|
|
192
197
|
cLine?: CLine;
|
|
193
|
-
|
|
198
|
+
}
|
|
199
|
+
interface Release38 extends ReleaseBase {
|
|
200
|
+
referenceTitle?: ReferenceTitle;
|
|
194
201
|
detailsByTerritory?: ReleaseDetailsByTerritory[];
|
|
195
|
-
|
|
202
|
+
resourceGroup?: ResourceGroup;
|
|
203
|
+
}
|
|
204
|
+
interface Release4 extends ReleaseBase {
|
|
196
205
|
displayTitleText?: string;
|
|
197
|
-
/** 4系: 複数のDisplayTitle(territory+lang属性) */
|
|
198
206
|
displayTitles?: DisplayTitle[];
|
|
199
|
-
/** 4系: ReleaseLabelReference(PartyRef値) */
|
|
200
207
|
releaseLabelReferences?: string[];
|
|
201
208
|
genre?: Genre;
|
|
202
209
|
parentalWarningType?: string;
|
|
210
|
+
resourceGroup?: ResourceGroup;
|
|
203
211
|
}
|
|
212
|
+
type Release = Release38 | Release4;
|
|
204
213
|
interface ReferenceTitle {
|
|
205
214
|
titleText: string;
|
|
206
215
|
subTitle?: string;
|
|
@@ -211,6 +220,7 @@ interface ReleaseId {
|
|
|
211
220
|
isrc?: string;
|
|
212
221
|
gridOrIcpn?: string;
|
|
213
222
|
catalogNumber?: string;
|
|
223
|
+
catalogNumberNamespace?: string;
|
|
214
224
|
proprietaryId?: string;
|
|
215
225
|
}
|
|
216
226
|
interface ReleaseResourceReference {
|
|
@@ -234,9 +244,7 @@ interface TrackRelease {
|
|
|
234
244
|
referenceTitle?: ReferenceTitle;
|
|
235
245
|
displayArtists?: DisplayArtist[];
|
|
236
246
|
releaseResourceReference: string;
|
|
237
|
-
/** 4系: 複数のDisplayTitle */
|
|
238
247
|
displayTitles?: DisplayTitle[];
|
|
239
|
-
/** 4系: ReleaseLabelReference */
|
|
240
248
|
releaseLabelReferences?: string[];
|
|
241
249
|
genre?: Genre;
|
|
242
250
|
}
|
|
@@ -289,7 +297,9 @@ interface PriceInformation {
|
|
|
289
297
|
/**
|
|
290
298
|
* パッチレベルまでのバージョン(namespace URIから検出)
|
|
291
299
|
*/
|
|
292
|
-
type
|
|
300
|
+
type ErnVersion38 = '3.8' | '3.8.1' | '3.8.2' | '3.8.3';
|
|
301
|
+
type ErnVersion4 = '4.1' | '4.1.1' | '4.2' | '4.3' | '4.3.1' | '4.3.2';
|
|
302
|
+
type ErnVersion = ErnVersion38 | ErnVersion4;
|
|
293
303
|
/**
|
|
294
304
|
* 変換ロジックの分岐用(メジャー系統のみ)
|
|
295
305
|
*/
|
|
@@ -308,19 +318,27 @@ interface MessageHeader {
|
|
|
308
318
|
messageRecipient: MessageParty;
|
|
309
319
|
messageCreatedDateTime: string;
|
|
310
320
|
}
|
|
311
|
-
interface
|
|
312
|
-
ernVersion: ErnVersion;
|
|
321
|
+
interface DdexMessageBase {
|
|
313
322
|
messageHeader: MessageHeader;
|
|
314
323
|
updateIndicator?: string;
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
324
|
+
}
|
|
325
|
+
interface DdexMessage38 extends DdexMessageBase {
|
|
326
|
+
ernVersion: ErnVersion38;
|
|
327
|
+
resourceList: SoundRecording38[];
|
|
328
|
+
imageList?: Image38[];
|
|
329
|
+
releaseList: Release38[];
|
|
330
|
+
dealList: ReleaseDeal[];
|
|
331
|
+
}
|
|
332
|
+
interface DdexMessage4 extends DdexMessageBase {
|
|
333
|
+
ernVersion: ErnVersion4;
|
|
334
|
+
resourceList: SoundRecording4[];
|
|
335
|
+
imageList?: Image4[];
|
|
336
|
+
releaseList: Release4[];
|
|
318
337
|
dealList: ReleaseDeal[];
|
|
319
|
-
/** 4系のみ: PartyList(ラウンドトリップ用に保持) */
|
|
320
338
|
partyList?: Party[];
|
|
321
|
-
/** 4系のみ: TrackRelease */
|
|
322
339
|
trackReleaseList?: TrackRelease[];
|
|
323
340
|
}
|
|
341
|
+
type DdexMessage = DdexMessage38 | DdexMessage4;
|
|
324
342
|
//#endregion
|
|
325
343
|
//#region src/converter/xml-to-json/index.d.ts
|
|
326
344
|
/**
|
|
@@ -346,4 +364,4 @@ declare function jsonToXml(message: DdexMessage, version?: ErnVersion): string;
|
|
|
346
364
|
*/
|
|
347
365
|
declare function detectVersion(xml: string): ErnVersion;
|
|
348
366
|
//#endregion
|
|
349
|
-
export { type Artist, type ArtistRole, type CLine, type Contributor, type DdexMessage, type Deal, type DealTerms, type DisplayArtist, type DisplayTitle, type ErnMajorVersion, type ErnVersion, type FileDetails, type Genre, type HashSum, type Image, type ImageDetailsByTerritory, type ImageId, type IndirectResourceContributor, type MessageHeader, type MessageParty, type PLine, type Party, type Release, type ReleaseDeal, type ReleaseResourceReference, type ResourceContributor, type ResourceGroup, type SoundRecording, type TechnicalImageDetails, type TechnicalSoundRecordingDetails, type TextWithAttribute, type Title, type TrackRelease, type Usage, detectVersion, jsonToXml, xmlToJson };
|
|
367
|
+
export { type Artist, type ArtistRole, type CLine, type Contributor, type DdexMessage, type DdexMessage38, type DdexMessage4, type DdexMessageBase, type Deal, type DealTerms, type DisplayArtist, type DisplayTitle, type ErnMajorVersion, type ErnVersion, type ErnVersion38, type ErnVersion4, type FileDetails, type Genre, type HashSum, type Image, type Image38, type Image4, type ImageBase, type ImageDetailsByTerritory, type ImageId, type IndirectResourceContributor, type MessageHeader, type MessageParty, type PLine, type Party, type PartyName, type Release, type Release38, type Release4, type ReleaseBase, type ReleaseDeal, type ReleaseDetailsByTerritory, type ReleaseId, type ReleaseResourceReference, type ResourceContributor, type ResourceGroup, type SoundRecording, type SoundRecording38, type SoundRecording4, type SoundRecordingBase, type SoundRecordingDetailsByTerritory, type TechnicalImageDetails, type TechnicalSoundRecordingDetails, type TextWithAttribute, type Title, type TrackRelease, type Usage, detectVersion, jsonToXml, xmlToJson };
|
package/dist/index.mjs
CHANGED
|
@@ -230,6 +230,7 @@ var Ern38Converter = class {
|
|
|
230
230
|
audioCodecType: raw.AudioCodecType ?? void 0,
|
|
231
231
|
bitRate: bitRate ? Number(typeof bitRate === "string" ? bitRate : bitRate["#text"]) : void 0,
|
|
232
232
|
bitRateUnit: typeof bitRate === "object" ? bitRate["@_UnitOfMeasure"] ?? void 0 : void 0,
|
|
233
|
+
bitsPerSample: raw.BitsPerSample ? Number(raw.BitsPerSample) : void 0,
|
|
233
234
|
numberOfChannels: raw.NumberOfChannels ? Number(raw.NumberOfChannels) : void 0,
|
|
234
235
|
samplingRate: samplingRate ? Number(typeof samplingRate === "string" ? samplingRate : samplingRate["#text"]) : void 0,
|
|
235
236
|
samplingRateUnit: typeof samplingRate === "object" ? samplingRate["@_UnitOfMeasure"] ?? void 0 : void 0,
|
|
@@ -316,10 +317,19 @@ var Ern38Converter = class {
|
|
|
316
317
|
icpn: typeof icpnRaw === "string" ? icpnRaw : icpnRaw["#text"],
|
|
317
318
|
isEan: typeof icpnRaw === "object" && icpnRaw["@_IsEan"] === "true" ? true : void 0
|
|
318
319
|
};
|
|
320
|
+
const catalogNumberRaw = raw.CatalogNumber;
|
|
321
|
+
let catalogNumber;
|
|
322
|
+
let catalogNumberNamespace;
|
|
323
|
+
if (catalogNumberRaw) if (typeof catalogNumberRaw === "string") catalogNumber = catalogNumberRaw;
|
|
324
|
+
else {
|
|
325
|
+
catalogNumber = catalogNumberRaw["#text"] ?? void 0;
|
|
326
|
+
catalogNumberNamespace = catalogNumberRaw["@_Namespace"] ?? void 0;
|
|
327
|
+
}
|
|
319
328
|
return {
|
|
320
329
|
isrc: raw.ISRC ?? void 0,
|
|
321
330
|
gridOrIcpn: raw.GRid ?? void 0,
|
|
322
|
-
catalogNumber
|
|
331
|
+
catalogNumber,
|
|
332
|
+
catalogNumberNamespace
|
|
323
333
|
};
|
|
324
334
|
}
|
|
325
335
|
parseReleaseResourceReferences(raw) {
|
|
@@ -417,13 +427,29 @@ var Ern38Converter = class {
|
|
|
417
427
|
if (!raw) return void 0;
|
|
418
428
|
const artists = ensureArray(raw);
|
|
419
429
|
if (artists.length === 0) return void 0;
|
|
420
|
-
return artists.map((a) =>
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
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
|
+
});
|
|
427
453
|
}
|
|
428
454
|
parseArtistRoles(raw) {
|
|
429
455
|
return ensureArray(raw).map((r) => {
|
|
@@ -455,6 +481,7 @@ var Ern38Converter = class {
|
|
|
455
481
|
name: c.PartyName?.FullName ?? "",
|
|
456
482
|
role,
|
|
457
483
|
sequenceNumber: c["@_SequenceNumber"] ? Number(c["@_SequenceNumber"]) : void 0,
|
|
484
|
+
instrumentType: c.InstrumentType ?? void 0,
|
|
458
485
|
roleNamespace,
|
|
459
486
|
roleUserDefinedValue
|
|
460
487
|
};
|
|
@@ -477,7 +504,8 @@ var Ern38Converter = class {
|
|
|
477
504
|
return titles.map((t) => ({
|
|
478
505
|
titleText: t.TitleText ?? "",
|
|
479
506
|
subTitle: t.SubTitle && t.SubTitle !== "" ? t.SubTitle : void 0,
|
|
480
|
-
titleType: t["@_TitleType"] ?? void 0
|
|
507
|
+
titleType: t["@_TitleType"] ?? void 0,
|
|
508
|
+
languageAndScriptCode: t["@_LanguageAndScriptCode"] ?? void 0
|
|
481
509
|
}));
|
|
482
510
|
}
|
|
483
511
|
parsePLine(raw) {
|
|
@@ -510,6 +538,7 @@ var Ern4Converter = class {
|
|
|
510
538
|
return {
|
|
511
539
|
ernVersion: version,
|
|
512
540
|
messageHeader: this.parseMessageHeader(root.MessageHeader),
|
|
541
|
+
updateIndicator: root["@_UpdateIndicator"] ?? void 0,
|
|
513
542
|
resourceList: this.parseSoundRecordings(root.ResourceList),
|
|
514
543
|
imageList: this.parseImages(root.ResourceList),
|
|
515
544
|
releaseList: this.parseReleases(root.ReleaseList),
|
|
@@ -694,10 +723,19 @@ var Ern4Converter = class {
|
|
|
694
723
|
const propId = raw.ProprietaryId;
|
|
695
724
|
let proprietaryId;
|
|
696
725
|
if (propId) proprietaryId = typeof propId === "string" ? propId : propId["#text"];
|
|
726
|
+
const catalogNumberRaw = raw.CatalogNumber;
|
|
727
|
+
let catalogNumber;
|
|
728
|
+
let catalogNumberNamespace;
|
|
729
|
+
if (catalogNumberRaw) if (typeof catalogNumberRaw === "string") catalogNumber = catalogNumberRaw;
|
|
730
|
+
else {
|
|
731
|
+
catalogNumber = catalogNumberRaw["#text"] ?? void 0;
|
|
732
|
+
catalogNumberNamespace = catalogNumberRaw["@_Namespace"] ?? void 0;
|
|
733
|
+
}
|
|
697
734
|
return {
|
|
698
735
|
isrc: raw.ISRC ?? void 0,
|
|
699
736
|
gridOrIcpn: raw.GRid ?? void 0,
|
|
700
|
-
catalogNumber
|
|
737
|
+
catalogNumber,
|
|
738
|
+
catalogNumberNamespace,
|
|
701
739
|
proprietaryId
|
|
702
740
|
};
|
|
703
741
|
}
|
|
@@ -874,6 +912,7 @@ var Ern4Converter = class {
|
|
|
874
912
|
//#region src/converter/json-to-xml/ern38-builder.ts
|
|
875
913
|
var Ern38Builder = class {
|
|
876
914
|
build(message, version) {
|
|
915
|
+
const msg = message;
|
|
877
916
|
const nsUri = VERSION_NAMESPACE_MAP.get(version);
|
|
878
917
|
if (!nsUri) throw new Error(`Unknown version: ${version}`);
|
|
879
918
|
const nsPath = new URL(nsUri).pathname.replace(/^\/xml\//, "");
|
|
@@ -882,11 +921,11 @@ var Ern38Builder = class {
|
|
|
882
921
|
"@_xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
|
883
922
|
"@_MessageSchemaVersionId": nsPath,
|
|
884
923
|
"@_xsi:schemaLocation": `${nsUri} ${nsUri}/release-notification.xsd`,
|
|
885
|
-
MessageHeader: this.buildMessageHeader(
|
|
886
|
-
...
|
|
887
|
-
ResourceList: this.buildResourceList(
|
|
888
|
-
ReleaseList: this.buildReleaseList(
|
|
889
|
-
DealList: this.buildDealList(
|
|
924
|
+
MessageHeader: this.buildMessageHeader(msg.messageHeader),
|
|
925
|
+
...msg.updateIndicator ? { UpdateIndicator: msg.updateIndicator } : {},
|
|
926
|
+
ResourceList: this.buildResourceList(msg.resourceList, msg.imageList),
|
|
927
|
+
ReleaseList: this.buildReleaseList(msg.releaseList),
|
|
928
|
+
DealList: this.buildDealList(msg.dealList)
|
|
890
929
|
} };
|
|
891
930
|
return `<?xml version="1.0" encoding="UTF-8"?>\n${new XMLBuilder(BUILDER_OPTIONS).build(root)}`.trimEnd();
|
|
892
931
|
}
|
|
@@ -960,6 +999,7 @@ var Ern38Builder = class {
|
|
|
960
999
|
"#text": String(td.bitRate),
|
|
961
1000
|
"@_UnitOfMeasure": td.bitRateUnit
|
|
962
1001
|
} : String(td.bitRate);
|
|
1002
|
+
if (td.bitsPerSample != null) result.BitsPerSample = String(td.bitsPerSample);
|
|
963
1003
|
if (td.numberOfChannels != null) result.NumberOfChannels = String(td.numberOfChannels);
|
|
964
1004
|
if (td.samplingRate != null) result.SamplingRate = td.samplingRateUnit ? {
|
|
965
1005
|
"#text": String(td.samplingRate),
|
|
@@ -1044,7 +1084,10 @@ var Ern38Builder = class {
|
|
|
1044
1084
|
const result = {};
|
|
1045
1085
|
if (id.isrc) result.ISRC = id.isrc;
|
|
1046
1086
|
if (id.gridOrIcpn) result.GRid = id.gridOrIcpn;
|
|
1047
|
-
if (id.catalogNumber) result.CatalogNumber = id.
|
|
1087
|
+
if (id.catalogNumber) result.CatalogNumber = id.catalogNumberNamespace ? {
|
|
1088
|
+
"#text": id.catalogNumber,
|
|
1089
|
+
"@_Namespace": id.catalogNumberNamespace
|
|
1090
|
+
} : id.catalogNumber;
|
|
1048
1091
|
return result;
|
|
1049
1092
|
}
|
|
1050
1093
|
buildReleaseResourceReference(ref) {
|
|
@@ -1114,7 +1157,14 @@ var Ern38Builder = class {
|
|
|
1114
1157
|
buildDisplayArtist(da) {
|
|
1115
1158
|
const result = {};
|
|
1116
1159
|
if (da.sequenceNumber != null) result["@_SequenceNumber"] = String(da.sequenceNumber);
|
|
1117
|
-
result.PartyName =
|
|
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 };
|
|
1118
1168
|
if (da.artist.roles?.length) {
|
|
1119
1169
|
const builtRoles = da.artist.roles.map((r) => this.buildArtistRole(r));
|
|
1120
1170
|
result.ArtistRole = builtRoles.length === 1 ? builtRoles[0] : builtRoles;
|
|
@@ -1139,6 +1189,7 @@ var Ern38Builder = class {
|
|
|
1139
1189
|
"@_UserDefinedValue": c.roleUserDefinedValue
|
|
1140
1190
|
};
|
|
1141
1191
|
else result.ResourceContributorRole = c.role;
|
|
1192
|
+
if (c.instrumentType) result.InstrumentType = c.instrumentType;
|
|
1142
1193
|
return result;
|
|
1143
1194
|
}
|
|
1144
1195
|
buildIndirectResourceContributor(c) {
|
|
@@ -1151,6 +1202,7 @@ var Ern38Builder = class {
|
|
|
1151
1202
|
buildTitle(t) {
|
|
1152
1203
|
const result = {};
|
|
1153
1204
|
if (t.titleType) result["@_TitleType"] = t.titleType;
|
|
1205
|
+
if (t.languageAndScriptCode) result["@_LanguageAndScriptCode"] = t.languageAndScriptCode;
|
|
1154
1206
|
result.TitleText = t.titleText;
|
|
1155
1207
|
if (t.subTitle) result.SubTitle = t.subTitle;
|
|
1156
1208
|
return result;
|
|
@@ -1178,6 +1230,7 @@ var Ern38Builder = class {
|
|
|
1178
1230
|
//#region src/converter/json-to-xml/ern4-builder.ts
|
|
1179
1231
|
var Ern4Builder = class {
|
|
1180
1232
|
build(message, version) {
|
|
1233
|
+
const msg = message;
|
|
1181
1234
|
const nsUri = VERSION_NAMESPACE_MAP.get(version);
|
|
1182
1235
|
if (!nsUri) throw new Error(`Unknown version: ${version}`);
|
|
1183
1236
|
const root = { "ern:NewReleaseMessage": {
|
|
@@ -1185,11 +1238,12 @@ var Ern4Builder = class {
|
|
|
1185
1238
|
"@_xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
|
1186
1239
|
"@_xsi:schemaLocation": `${nsUri} ${nsUri}/release-notification.xsd`,
|
|
1187
1240
|
"@_LanguageAndScriptCode": "en",
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1241
|
+
...msg.updateIndicator ? { "@_UpdateIndicator": msg.updateIndicator } : {},
|
|
1242
|
+
MessageHeader: this.buildMessageHeader(msg.messageHeader),
|
|
1243
|
+
PartyList: this.buildPartyList(msg.partyList ?? []),
|
|
1244
|
+
ResourceList: this.buildResourceList(msg.resourceList, msg.imageList, version),
|
|
1245
|
+
ReleaseList: this.buildReleaseList(msg.releaseList, msg.trackReleaseList),
|
|
1246
|
+
DealList: this.buildDealList(msg.dealList)
|
|
1193
1247
|
} };
|
|
1194
1248
|
return `<?xml version="1.0" encoding="UTF-8"?>\n${new XMLBuilder(BUILDER_OPTIONS).build(root)}`.trimEnd();
|
|
1195
1249
|
}
|
|
@@ -1312,7 +1366,10 @@ var Ern4Builder = class {
|
|
|
1312
1366
|
if (id.isrc) result.ISRC = id.isrc;
|
|
1313
1367
|
if (id.gridOrIcpn) result.GRid = id.gridOrIcpn;
|
|
1314
1368
|
if (id.proprietaryId) result.ProprietaryId = id.proprietaryId;
|
|
1315
|
-
if (id.catalogNumber) result.CatalogNumber = id.
|
|
1369
|
+
if (id.catalogNumber) result.CatalogNumber = id.catalogNumberNamespace ? {
|
|
1370
|
+
"#text": id.catalogNumber,
|
|
1371
|
+
"@_Namespace": id.catalogNumberNamespace
|
|
1372
|
+
} : id.catalogNumber;
|
|
1316
1373
|
return result;
|
|
1317
1374
|
}
|
|
1318
1375
|
buildTrackRelease(tr) {
|