Added createPass support to AbstractModel

This commit is contained in:
Alexander Cerutti
2019-07-25 23:08:48 +02:00
parent 9321ccc4ba
commit b44d8d764f

View File

@@ -1,34 +1,65 @@
import { Pass } from "./pass"; import { Pass } from "./pass";
import { FactoryOptions, BundleUnit } from "./schema"; import { FactoryOptions, BundleUnit, FinalCertificates } from "./schema";
import formatMessage from "./messages"; import formatMessage from "./messages";
import { getModelContents, readCertificatesFromOptions } from "./parser"; import { getModelContents, readCertificatesFromOptions } from "./parser";
import { splitBufferBundle } from "./utils"; import { splitBufferBundle } from "./utils";
import { AbstractModel, AbstractFactoryOptions } from "./abstract";
export type Pass = InstanceType<typeof Pass> export async function createPass(
options: FactoryOptions | AbstractModel,
export async function createPass(options: FactoryOptions, additionalBuffers?: BundleUnit): Promise<Pass> { additionalBuffers?: BundleUnit,
if (!(options && Object.keys(options).length)) { abstractMissingData?: Omit<AbstractFactoryOptions, "model">
): Promise<Pass> {
if (!(options && (options instanceof AbstractModel || Object.keys(options).length))) {
throw new Error(formatMessage("CP_NO_OPTS")); throw new Error(formatMessage("CP_NO_OPTS"));
} }
try { try {
const [bundle, certificates] = await Promise.all([ if (options instanceof AbstractModel) {
getModelContents(options.model), let certificates: FinalCertificates;
readCertificatesFromOptions(options.certificates)
]);
if (additionalBuffers) { if (!(options.certificates && options.certificates.signerCert && options.certificates.signerKey) && abstractMissingData.certificates) {
const [ additionalL10n, additionalBundle ] = splitBufferBundle(additionalBuffers); certificates = Object.assign(
Object.assign(bundle["l10nBundle"], additionalL10n); options.certificates,
Object.assign(bundle["bundle"], additionalBundle); 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) { } catch (err) {
throw new Error(formatMessage("CP_INIT_ERROR", err)); throw new Error(formatMessage("CP_INIT_ERROR", "pass", err));
} }
} }