From b44d8d764fbff4a85557babdf27ad01183cfb804 Mon Sep 17 00:00:00 2001 From: Alexander Cerutti Date: Thu, 25 Jul 2019 23:08:48 +0200 Subject: [PATCH] Added createPass support to AbstractModel --- src/factory.ts | 71 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/src/factory.ts b/src/factory.ts index 2043c54..988b4e9 100644 --- a/src/factory.ts +++ b/src/factory.ts @@ -1,34 +1,65 @@ import { Pass } from "./pass"; -import { FactoryOptions, BundleUnit } from "./schema"; +import { FactoryOptions, BundleUnit, FinalCertificates } from "./schema"; import formatMessage from "./messages"; import { getModelContents, readCertificatesFromOptions } from "./parser"; import { splitBufferBundle } from "./utils"; +import { AbstractModel, AbstractFactoryOptions } from "./abstract"; -export type Pass = InstanceType - -export async function createPass(options: FactoryOptions, additionalBuffers?: BundleUnit): Promise { - if (!(options && Object.keys(options).length)) { +export async function createPass( + options: FactoryOptions | AbstractModel, + additionalBuffers?: BundleUnit, + abstractMissingData?: Omit +): Promise { + if (!(options && (options instanceof AbstractModel || Object.keys(options).length))) { throw new Error(formatMessage("CP_NO_OPTS")); } try { - const [bundle, certificates] = await Promise.all([ - getModelContents(options.model), - readCertificatesFromOptions(options.certificates) - ]); + if (options instanceof AbstractModel) { + let certificates: FinalCertificates; - if (additionalBuffers) { - const [ additionalL10n, additionalBundle ] = splitBufferBundle(additionalBuffers); - Object.assign(bundle["l10nBundle"], additionalL10n); - Object.assign(bundle["bundle"], additionalBundle); + if (!(options.certificates && options.certificates.signerCert && options.certificates.signerKey) && abstractMissingData.certificates) { + certificates = Object.assign( + options.certificates, + await readCertificatesFromOptions(abstractMissingData.certificates) + ); + } else { + certificates = options.certificates; + } + + if (additionalBuffers) { + const [ additionalL10n, additionalBundle ] = splitBufferBundle(additionalBuffers); + Object.assign(options.bundle["l10nBundle"], additionalL10n); + Object.assign(options.bundle["bundle"], additionalBundle); + } + + return new Pass({ + model: options.bundle, + certificates: certificates, + overrides: { + ...(options.overrides || {}), + ...(abstractMissingData && abstractMissingData.overrides || {}) + } + }); + } else { + const [bundle, certificates] = await Promise.all([ + getModelContents(options.model), + readCertificatesFromOptions(options.certificates) + ]); + + if (additionalBuffers) { + const [ additionalL10n, additionalBundle ] = splitBufferBundle(additionalBuffers); + Object.assign(bundle["l10nBundle"], additionalL10n); + Object.assign(bundle["bundle"], additionalBundle); + } + + return new Pass({ + model: bundle, + certificates, + overrides: options.overrides + }); } - - return new Pass({ - model: bundle, - certificates, - overrides: options.overrides - }); } catch (err) { - throw new Error(formatMessage("CP_INIT_ERROR", err)); + throw new Error(formatMessage("CP_INIT_ERROR", "pass", err)); } }