respond-framework
Version:
create as fast you think
162 lines (160 loc) • 5.81 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _dispatch = require("./methods/dispatch.js");
var _App = require("./methods/App.js");
var _reduce = require("./methods/reduce.js");
var _listen = require("./methods/listen.js");
var _revive = require("./methods/revive.js");
var _onError = require("./methods/onError.js");
var _proxify = require("./methods/proxify.js");
var _fromEvent = require("./methods/fromEvent.js");
var _eventFrom = require("./methods/eventFrom.js");
var _inIs = require("./methods/inIs.js");
var _addToCache = require("./methods/addToCache.js");
var _changeBasename = require("./methods/changeBasename.js");
var _subscribe = require("./methods/subscribe.js");
var _simulateLatency = require("./methods/simulateLatency.js");
var _queueSaveSession = require("./methods/queueSaveSession.js");
var _promisesCompleted = require("./methods/promisesCompleted.js");
var _awaitInReplaysOnly = require("./methods/awaitInReplaysOnly.js");
var _isEqualNavigations = require("./methods/isEqualNavigations.js");
var _render = require("../react/render.js");
var _snapshot = require("../proxy/snapshot.js");
var _queueNotification = require("../proxy/helpers/queueNotification.js");
var _index = require("../history/index.js");
var _index2 = require("../helpers/cookies/index.js");
var _createDb = require("./createDb.js");
var _createDbCache = require("./createDbCache.js");
var _createUrlCache = require("./createUrlCache.js");
var _createBranches = require("./createBranches.js");
var _kinds = require("./kinds.js");
var _constants = require("../helpers/constants.js");
var _assignProto = require("../utils/assignProto.js");
var _createAncestors = require("./helpers/createAncestors.js");
var _reserved = require("./reserved.js");
var _sessionStorage = require("../utils/sessionStorage.js");
const createRespond = (top, system, focusedModule, opts) => {
const {
replayState,
prevUrl = null,
basenames = {}
} = system;
const focusedBranch = replayState.branch ?? '';
const prev = window.state?.respond;
const {
createHistory = _index.default,
createCookies = _index2.default,
...options
} = top.options ?? {};
function Respond(props) {
Object.assign(this, props);
this.listeners = new Set();
this.overriden = new Map();
this.db = (0, _createDb.default)(this, Respond);
this.responds[this.branch] = this;
this.App = _App.default.bind(this);
this.reduce = _reduce.default.bind(this);
this.render = _render.default.bind(this);
this.snapshot = _snapshot.default.bind(this);
this.eventFrom = _eventFrom.default.bind(this);
this.ancestors = (0, _createAncestors.default)(this.branch);
this.isTop = this.mod.branchAbsolute === focusedBranch;
this.dbCache = (0, _createDbCache.default)(this, this.cache.dbCache ??= {});
this.urlCache = (0, _createUrlCache.default)(this, this.cache.urlCache ??= {}, _fromEvent.default);
(0, _assignProto.default)(props.state, {
[_reserved._module]: true,
[_reserved._top]: this.isTop,
db: this.db,
kinds: _kinds.default,
is: _inIs.is,
in: _inIs.thisIn,
refs: {}
});
}
Respond.prototype = {
top,
// core data
prev,
kinds: _kinds.default,
system,
prevUrl,
basenames,
replayState,
focusedBranch,
focusedModule,
App: _App.default,
// methods
reduce: _reduce.default,
render: _render.default,
commit: _queueNotification.commit,
notify: _subscribe.notify,
listen: _listen.default,
revive: _revive.default,
proxify: _proxify.default,
dispatch: _dispatch.default,
trigger: _dispatch.trigger,
onError: _onError.default,
snapshot: _snapshot.default,
subscribe: _subscribe.default,
fromEvent: _fromEvent.default,
eventFrom: _eventFrom.default,
addToCache: _addToCache.default,
changeBasename: _changeBasename.default,
simulateLatency: _simulateLatency.default,
queueSaveSession: _queueSaveSession.default,
promisesCompleted: _promisesCompleted.default,
awaitInReplaysOnly: _awaitInReplaysOnly.default,
isEqualNavigations: _isEqualNavigations.default,
promises: [],
// storage
subscribers: [],
ctx: {},
responds: {},
eventsByType: {},
eventsByPattern: {},
branchLocatorsById: {},
modelsByBranchType: {},
eventsCache: new Map(),
versionNotifiers: new WeakMap(),
proxyCache: new WeakMap(),
snapCache: new WeakMap(),
refIds: _constants.isProd ? new WeakMap() : new Map(),
hmr: replayState.hmr,
reuseEvents: prev?.focusedBranch === focusedBranch,
prevEventsByType: prev?.focusedBranch === focusedBranch ? prev.eventsByType : {},
mem: {
...prev?.mem,
rendered: false
},
cache: system.cache ?? {},
sessionStorage: opts.sessionStorage ?? prev?.sessionStorage ?? _sessionStorage.default,
rememberSession: _constants.isDev || !_constants.isNative || options.rememberSession,
devtools: new Proxy({}, {
get: () => () => {}
}),
// tools
history: createHistory(),
cookies: createCookies(),
branchNames: (0, _createBranches.default)(top, focusedBranch),
// important: create branch names, assign moduleKeys array to each module, etc,
e: replayState.lastEvent,
lastEvents: replayState.lastEvents,
branches: {
get undefined() {
return this[''];
}
},
// important: modules by branch will be stored here when created in addModule.js
get topState() {
return this.branches['']; // escape hatch: any module can access the top if it really needs
},
get events() {
return this.state.events;
}
};
return Respond;
};
var _default = exports.default = createRespond;