@usirin/spellbook
Version:
Type-safe API surfaces that work across process boundaries
63 lines (62 loc) • 2.54 kB
JavaScript
var __webpack_require__ = {};
(()=>{
__webpack_require__.d = function(exports1, definition) {
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
enumerable: true,
get: definition[key]
});
};
})();
(()=>{
__webpack_require__.o = function(obj, prop) {
return Object.prototype.hasOwnProperty.call(obj, prop);
};
})();
(()=>{
__webpack_require__.r = function(exports1) {
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
value: 'Module'
});
Object.defineProperty(exports1, '__esModule', {
value: true
});
};
})();
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
createSpell: ()=>createSpell,
createSpellbook: ()=>createSpellbook
});
const external_validate_standard_schema_cjs_namespaceObject = require("./validate-standard-schema.cjs");
function createSpell(spec) {
const spell = async (parameters, context)=>{
const [validatedParams, validatedContext] = await Promise.all([
(0, external_validate_standard_schema_cjs_namespaceObject.standardValidate)(spec.parameters, parameters),
(0, external_validate_standard_schema_cjs_namespaceObject.standardValidate)(spec.context, context)
]);
const result = await spec.execute(validatedParams, validatedContext);
const validatedResult = await (0, external_validate_standard_schema_cjs_namespaceObject.standardValidate)(spec.result, result);
return validatedResult;
};
spell._spec = spec;
spell._tag = "spell";
return spell;
}
function createSpellbook(spells, context) {
const wrappedSpells = {};
for(const spellName in spells){
const originalSpell = spells[spellName];
const wrappedSpell = async (parameters)=>originalSpell(parameters, context);
wrappedSpell._spec = originalSpell._spec;
wrappedSpell._tag = originalSpell._tag;
wrappedSpells[spellName] = wrappedSpell;
}
return wrappedSpells;
}
var __webpack_export_target__ = exports;
for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__];
if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', {
value: true
});
;