181 lines
4.2 KiB
JavaScript
181 lines
4.2 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
function _defineProperties(target, props) {
|
|
for (var i = 0; i < props.length; i++) {
|
|
var descriptor = props[i];
|
|
descriptor.enumerable = descriptor.enumerable || false;
|
|
descriptor.configurable = true;
|
|
if ("value" in descriptor) descriptor.writable = true;
|
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
}
|
|
}
|
|
|
|
function _createClass(Constructor, protoProps, staticProps) {
|
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
return Constructor;
|
|
}
|
|
|
|
var getInnerName = function getInnerName(name) {
|
|
return "__" + name;
|
|
};
|
|
|
|
var Context = /*#__PURE__*/function () {
|
|
function Context(_ref, ctxRef) {
|
|
var _init;
|
|
|
|
var use = _ref.use,
|
|
set = _ref.set,
|
|
addQueryableProperties = _ref.addQueryableProperties,
|
|
init = _ref.init;
|
|
this._parentContext = null;
|
|
var ctx = use();
|
|
var usedRef = typeof init === 'function' ? (_init = init(ctxRef, ctx)) !== null && _init !== void 0 ? _init : ctxRef : ctxRef;
|
|
var queryableProperties = addQueryableProperties(usedRef);
|
|
|
|
if (usedRef && typeof usedRef === 'object') {
|
|
for (var key in queryableProperties) {
|
|
if (Object.prototype.hasOwnProperty.call(usedRef, key)) {
|
|
this[getInnerName(key)] = usedRef[key];
|
|
}
|
|
|
|
this.addLookupProperty(key);
|
|
}
|
|
}
|
|
|
|
if (ctx) {
|
|
this.setParentContext(ctx);
|
|
}
|
|
|
|
set(this);
|
|
}
|
|
|
|
Context.is = function is(value) {
|
|
return value instanceof Context;
|
|
};
|
|
|
|
var _proto = Context.prototype;
|
|
|
|
_proto.addLookupProperty = function addLookupProperty(key) {
|
|
var innerName = getInnerName(key);
|
|
Object.defineProperty(this, key, {
|
|
get: function get() {
|
|
return this.lookup(innerName);
|
|
},
|
|
set: function set(value) {
|
|
throw new Error("Context: Unable to set \"" + key + "\" to `" + JSON.stringify(value) + "`. Context properties cannot be set directly. Use context.run() instead.");
|
|
}
|
|
});
|
|
} // @ts-ignore - we actually do use lookup
|
|
;
|
|
|
|
_proto.lookup = function lookup(key) {
|
|
var ctx = this;
|
|
|
|
do {
|
|
if (ctx.hasOwnProperty(key)) {
|
|
return ctx[key];
|
|
}
|
|
|
|
if (Context.is(ctx.parentContext)) {
|
|
ctx = ctx.parentContext;
|
|
} else {
|
|
return;
|
|
}
|
|
} while (ctx);
|
|
};
|
|
|
|
_proto.setParentContext = function setParentContext(parentContext) {
|
|
if (Context.is(this)) {
|
|
this._parentContext = parentContext;
|
|
}
|
|
};
|
|
|
|
_createClass(Context, [{
|
|
key: "parentContext",
|
|
get: function get() {
|
|
return this._parentContext;
|
|
}
|
|
}]);
|
|
|
|
return Context;
|
|
}();
|
|
|
|
function createContext(init) {
|
|
var storage = {
|
|
ctx: undefined
|
|
};
|
|
var queryableProperties = {};
|
|
|
|
function addQueryableProperties(ctxRef) {
|
|
if (!ctxRef || typeof ctxRef !== 'object') {
|
|
return {};
|
|
}
|
|
|
|
for (var key in ctxRef) {
|
|
if (Object.prototype.hasOwnProperty.call(ctxRef, key)) {
|
|
queryableProperties[key] = true;
|
|
}
|
|
}
|
|
|
|
return queryableProperties;
|
|
}
|
|
|
|
function use() {
|
|
return storage.ctx;
|
|
}
|
|
|
|
function set(value) {
|
|
return storage.ctx = value;
|
|
}
|
|
|
|
function clear() {
|
|
var ctx = use();
|
|
|
|
if (!Context.is(ctx)) {
|
|
return;
|
|
}
|
|
|
|
set(ctx.parentContext);
|
|
}
|
|
|
|
function run(ctxRef, fn) {
|
|
var ctx = new Context({
|
|
set: set,
|
|
use: use,
|
|
addQueryableProperties: addQueryableProperties,
|
|
init: init
|
|
}, ctxRef);
|
|
var res = fn(ctx);
|
|
clear();
|
|
return res;
|
|
}
|
|
|
|
function bind(ctxRef, fn) {
|
|
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
args[_key - 2] = arguments[_key];
|
|
}
|
|
|
|
return function () {
|
|
for (var _len2 = arguments.length, runTimeArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
runTimeArgs[_key2] = arguments[_key2];
|
|
}
|
|
|
|
return run(ctxRef, function () {
|
|
return fn.apply(void 0, args.concat(runTimeArgs));
|
|
});
|
|
};
|
|
}
|
|
|
|
return {
|
|
use: use,
|
|
run: run,
|
|
bind: bind
|
|
};
|
|
}
|
|
|
|
exports.default = createContext;
|
|
//# sourceMappingURL=context.cjs.development.js.map
|