diff --git a/packages/core/src/bundle/bundle.ts b/packages/core/src/bundle/bundle.ts index a8ed798..f7989a0 100644 --- a/packages/core/src/bundle/bundle.ts +++ b/packages/core/src/bundle/bundle.ts @@ -142,8 +142,8 @@ export function makePackageDocument(opf: PackageDocument): string { 'dc:title': opf.title(), 'dc:language': opf.language(), 'dc:creator': { - '@_id': 'creator', - '#text': opf.creator() + '@_id': opf.creator().uid, + '#text': opf.creator().name }, 'dc:date': toISO8601String(opf.metadata().date), 'dc:description': opf.metadata().description, @@ -154,9 +154,9 @@ export function makePackageDocument(opf: PackageDocument): string { '#text': toISO8601String(opf.metadata().lastModified) }, { - '@_refines': '#creator', + '@_refines': '#' + opf.creator().uid, '@_property': 'file-as', - '#text': opf.creator() + '#text': opf.creator()?.fileAs ?? '' } ] }; diff --git a/packages/core/src/epub/opf.ts b/packages/core/src/epub/opf.ts index 078a8a1..eac5d7b 100644 --- a/packages/core/src/epub/opf.ts +++ b/packages/core/src/epub/opf.ts @@ -12,12 +12,22 @@ const defu = createDefu((obj: any, key, value: any) => { } }); +export interface Author { + name: string; + + fileAs?: string; + + role?: string; + + uid?: string; +} + export interface PackageDocumentMeta { title: string; language: string; - contributor: string[]; + contributor: Author[]; coverage: string; - creator: string; + creator: Author; date: Date; description: string; format: string; @@ -42,9 +52,12 @@ export class PackageDocument { private _metadata: PackageDocumentMeta = { title: '', language: 'zh-CN', - contributor: [] as string[], + contributor: [], coverage: '', - creator: 'unknown', + creator: { + name: 'unknown', + uid: 'creator' + }, date: new Date(), description: '', format: '', @@ -151,7 +164,7 @@ export class PackageDocument { return this._identifier; } - public setIdentifier(identifier: string, uniqueIdentifier: string) { + public setIdentifier(identifier: string, uniqueIdentifier: string = 'uuid') { this._identifier = identifier; this._uniqueIdentifier = uniqueIdentifier; } diff --git a/packages/core/test/__snapshots__/bundle.test.ts.snap b/packages/core/test/__snapshots__/bundle.test.ts.snap index 527c990..cf93af3 100644 --- a/packages/core/test/__snapshots__/bundle.test.ts.snap +++ b/packages/core/test/__snapshots__/bundle.test.ts.snap @@ -39,7 +39,11 @@ PackageDocument { "_metadata": { "contributor": [], "coverage": "", - "creator": "XLor", + "creator": { + "fileAs": "XLor", + "name": "XLor", + "uid": "creator", + }, "date": 2023-02-01T11:00:00.000Z, "description": "for test usage", "format": "", diff --git a/packages/core/test/bundle.test.ts b/packages/core/test/bundle.test.ts index 631d6c7..1aca66e 100644 --- a/packages/core/test/bundle.test.ts +++ b/packages/core/test/bundle.test.ts @@ -1,10 +1,10 @@ -import { Html } from './../src/epub/item'; import { describe, it, expect } from 'vitest'; import { Epub } from '../src'; -import { makeContainer, makePackageDocument } from '../src/bundle'; +import { Html } from '../src/epub/item'; import { buildTocNav } from '../src/epub/nav'; import { XHTMLBuilder } from '../src/bundle/xhtml'; +import { makeContainer, makePackageDocument } from '../src/bundle'; describe('Bundle Epub', () => { it('generate container.xml', () => { @@ -30,7 +30,7 @@ describe('Bundle Epub', () => { language: 'zh-CN', date: new Date('2023-02-01T11:00:00.000Z'), lastModified: new Date('2023-02-26T11:00:00.000Z'), - creator: 'XLor', + creator: { name: 'XLor', fileAs: 'XLor' }, description: 'for test usage', source: 'imagine' }); @@ -69,7 +69,7 @@ describe('Bundle Epub', () => { title: 'Test Book', date: new Date('2023-02-01T11:00:00.000Z'), lastModified: new Date('2023-02-26T11:00:00.000Z'), - creator: 'XLor', + creator: { name: 'XLor', fileAs: 'XLor' }, description: 'for test usage', source: 'imagine' }); @@ -105,7 +105,10 @@ describe('Bundle Epub', () => { title: 'Test Book', date: new Date('2023-02-01T11:00:00.000Z'), lastModified: new Date('2023-02-26T11:00:00.000Z'), - creator: 'XLor', + creator: { + name: 'XLor', + fileAs: 'XLor' + }, description: 'for test usage', source: 'imagine' });