109 lines
3.0 KiB
JavaScript
Executable File
109 lines
3.0 KiB
JavaScript
Executable File
'use strict';
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var _tslib = require('./_virtual/_tslib.js');
|
|
var utils = require('./utils.js');
|
|
var serviceScope = require('./serviceScope.js');
|
|
|
|
function createNullActor(id) {
|
|
var _a;
|
|
|
|
return _a = {
|
|
id: id,
|
|
send: function () {
|
|
return void 0;
|
|
},
|
|
subscribe: function () {
|
|
return {
|
|
unsubscribe: function () {
|
|
return void 0;
|
|
}
|
|
};
|
|
},
|
|
getSnapshot: function () {
|
|
return undefined;
|
|
},
|
|
toJSON: function () {
|
|
return {
|
|
id: id
|
|
};
|
|
}
|
|
}, _a[utils.symbolObservable] = function () {
|
|
return this;
|
|
}, _a;
|
|
}
|
|
/**
|
|
* Creates a deferred actor that is able to be invoked given the provided
|
|
* invocation information in its `.meta` value.
|
|
*
|
|
* @param invokeDefinition The meta information needed to invoke the actor.
|
|
*/
|
|
|
|
function createInvocableActor(invokeDefinition, machine, context, _event) {
|
|
var _a;
|
|
|
|
var invokeSrc = utils.toInvokeSource(invokeDefinition.src);
|
|
var serviceCreator = (_a = machine === null || machine === void 0 ? void 0 : machine.options.services) === null || _a === void 0 ? void 0 : _a[invokeSrc.type];
|
|
var resolvedData = invokeDefinition.data ? utils.mapContext(invokeDefinition.data, context, _event) : undefined;
|
|
var tempActor = serviceCreator ? createDeferredActor(serviceCreator, invokeDefinition.id, resolvedData) : createNullActor(invokeDefinition.id); // @ts-ignore
|
|
|
|
tempActor.meta = invokeDefinition;
|
|
return tempActor;
|
|
}
|
|
function createDeferredActor(entity, id, data) {
|
|
var tempActor = createNullActor(id); // @ts-ignore
|
|
|
|
tempActor.deferred = true;
|
|
|
|
if (utils.isMachine(entity)) {
|
|
// "mute" the existing service scope so potential spawned actors within the `.initialState` stay deferred here
|
|
var initialState_1 = tempActor.state = serviceScope.provide(undefined, function () {
|
|
return (data ? entity.withContext(data) : entity).initialState;
|
|
});
|
|
|
|
tempActor.getSnapshot = function () {
|
|
return initialState_1;
|
|
};
|
|
}
|
|
|
|
return tempActor;
|
|
}
|
|
function isActor(item) {
|
|
try {
|
|
return typeof item.send === 'function';
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
function isSpawnedActor(item) {
|
|
return isActor(item) && 'id' in item;
|
|
} // TODO: refactor the return type, this could be written in a better way but it's best to avoid unneccessary breaking changes now
|
|
|
|
function toActorRef(actorRefLike) {
|
|
var _a;
|
|
|
|
return _tslib.__assign((_a = {
|
|
subscribe: function () {
|
|
return {
|
|
unsubscribe: function () {
|
|
return void 0;
|
|
}
|
|
};
|
|
},
|
|
id: 'anonymous',
|
|
getSnapshot: function () {
|
|
return undefined;
|
|
}
|
|
}, _a[utils.symbolObservable] = function () {
|
|
return this;
|
|
}, _a), actorRefLike);
|
|
}
|
|
|
|
exports.createDeferredActor = createDeferredActor;
|
|
exports.createInvocableActor = createInvocableActor;
|
|
exports.createNullActor = createNullActor;
|
|
exports.isActor = isActor;
|
|
exports.isSpawnedActor = isSpawnedActor;
|
|
exports.toActorRef = toActorRef;
|