Files
recap/node_modules/@start9labs/start-sdk/base/lib/inits/setupInit.js
T

47 lines
1.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupInit = setupInit;
exports.setupOnInit = setupOnInit;
const util_1 = require("../util");
/**
* Composes multiple init handlers into a single `ExpectedExports.init`-compatible function.
* Handlers are executed sequentially in the order provided.
*
* @param inits - One or more init handlers to compose
*/
function setupInit(...inits) {
return async (opts) => {
for (const idx in inits) {
const init = inits[idx];
const fn = async () => {
let res = () => { };
const complete = new Promise((resolve) => {
res = resolve;
});
const e = opts.effects.child(`init_${idx}`);
e.constRetry = (0, util_1.once)(() => complete.then(() => fn()).catch(console.error));
try {
if ('init' in init)
await init.init(e, opts.kind);
else
await init(e, opts.kind);
}
finally {
res();
}
};
await fn();
}
};
}
/** Normalizes an {@link InitScriptOrFn} into an {@link InitScript} object. */
function setupOnInit(onInit) {
return 'init' in onInit
? onInit
: {
init: async (effects, kind) => {
await onInit(effects, kind);
},
};
}
//# sourceMappingURL=setupInit.js.map