// ========================================== // APPLICATION: СБОРКА ДОКУМЕНТА // ========================================== #import "../domain/document.typ": document-context, render-options, validate-profile-contract #import "../domain/company.typ": validate-company #import "../domain/parties.typ": validate-parties #import "../domain/attachments.typ": attachment-set, validate-attachment-set #import "../domain/references.typ": validate-bibliographies #import "../infrastructure/company-assets.typ": load-company #let resolve-company(value) = { if type(value) == str { validate-company(load-company(value)) } else { validate-company(value) } } #let render-document( body, company, profile, options: (:), ) = { let company = resolve-company(company) let profile = validate-profile-contract(profile) let normalized = (profile.normalize)(profile.metadata) let validated = (profile.validate)(normalized) let metadata = if validated == none { normalized } else { validated } let parties = validate-parties(metadata.at("parties", default: ())) let attachments = validate-attachment-set( metadata.at("attachments", default: attachment-set()), ) let bibliographies = validate-bibliographies(metadata.at("bibliographies", default: ())) let ctx = document-context( company, profile, metadata, render-options(options: options), parties: parties, attachments: attachments, bibliographies: bibliographies, ) (profile.render)(body, ctx) }