import { ICommentsOptions } from "@file/paragraph/run/comment-run"; import { ICompatibilityOptions } from "@file/settings/compatibility"; import { FontOptions } from "@file/fonts/font-table"; import { StringContainer, XmlComponent } from "@file/xml-components"; import { dateTimeValue } from "@util/values"; import { ICustomPropertyOptions } from "../custom-properties"; import { IDocumentBackgroundOptions } from "../document"; import { DocumentAttributes } from "../document/document-attributes"; import { ISectionOptions } from "../file"; import { INumberingOptions } from "../numbering"; import { Paragraph } from "../paragraph"; import { IStylesOptions } from "../styles"; export interface IPropertiesOptions { readonly sections: readonly ISectionOptions[]; readonly title?: string; readonly subject?: string; readonly creator?: string; readonly keywords?: string; readonly description?: string; readonly lastModifiedBy?: string; readonly revision?: number; readonly externalStyles?: string; readonly styles?: IStylesOptions; readonly numbering?: INumberingOptions; readonly comments?: ICommentsOptions; readonly footnotes?: { readonly [key: string]: { readonly children: readonly Paragraph[]; }; }; readonly background?: IDocumentBackgroundOptions; readonly features?: { readonly trackRevisions?: boolean; readonly updateFields?: boolean; }; readonly compatabilityModeVersion?: number; readonly compatibility?: ICompatibilityOptions; readonly customProperties?: readonly ICustomPropertyOptions[]; readonly evenAndOddHeaderAndFooters?: boolean; readonly defaultTabStop?: number; readonly fonts?: readonly FontOptions[]; } // /* cSpell:disable */ // // // // // // // // // // // // // // // // // // // /* cSpell:enable */ export class CoreProperties extends XmlComponent { public constructor(options: Omit) { super("cp:coreProperties"); this.root.push( new DocumentAttributes({ cp: "http://schemas.openxmlformats.org/package/2006/metadata/core-properties", dc: "http://purl.org/dc/elements/1.1/", dcterms: "http://purl.org/dc/terms/", dcmitype: "http://purl.org/dc/dcmitype/", xsi: "http://www.w3.org/2001/XMLSchema-instance", }), ); if (options.title) { this.root.push(new StringContainer("dc:title", options.title)); } if (options.subject) { this.root.push(new StringContainer("dc:subject", options.subject)); } if (options.creator) { this.root.push(new StringContainer("dc:creator", options.creator)); } if (options.keywords) { this.root.push(new StringContainer("cp:keywords", options.keywords)); } if (options.description) { this.root.push(new StringContainer("dc:description", options.description)); } if (options.lastModifiedBy) { this.root.push(new StringContainer("cp:lastModifiedBy", options.lastModifiedBy)); } if (options.revision) { this.root.push(new StringContainer("cp:revision", String(options.revision))); } this.root.push(new TimestampElement("dcterms:created")); this.root.push(new TimestampElement("dcterms:modified")); } } class TimestampElement extends XmlComponent { public constructor(name: string) { super(name); this.root.push( new DocumentAttributes({ type: "dcterms:W3CDTF", }), ); this.root.push(dateTimeValue(new Date())); } }