@ngxs-labs/entity-state
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.
1,009 lines • 70.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { EntityActionType } from './actions';
import { InvalidIdError, NoSuchEntityError, UpdateFailedError } from './errors';
import { asArray, elvis, getActive, mustGetActive, NGXS_META_KEY, wrapOrClamp } from './internal';
/**
* Returns a new object which serves as the default state.
* No entities, loading is false, error is undefined, active is undefined.
* pageSize is 10 and pageIndex is 0.
* @template T
* @param {?=} defaults
* @return {?}
*/
export function defaultEntityState(defaults) {
if (defaults === void 0) { defaults = {}; }
return tslib_1.__assign({ entities: {}, ids: [], loading: false, error: undefined, active: undefined, pageSize: 10, pageIndex: 0, lastUpdated: Date.now() }, defaults);
}
// @dynamic
/**
* @abstract
* @template T
*/
var
// @dynamic
/**
* @abstract
* @template T
*/
EntityState = /** @class */ (function () {
function EntityState(storeClass, _idKey, idStrategy) {
this.idKey = (/** @type {?} */ (_idKey));
this.storePath = storeClass[NGXS_META_KEY].path;
this.idGenerator = new idStrategy(_idKey);
this.setup(storeClass, Object.values(EntityActionType));
}
Object.defineProperty(EntityState, "staticStorePath", {
get: /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return that[NGXS_META_KEY].path;
},
enumerable: true,
configurable: true
});
/**
* This function is called every time an entity is updated.
* It receives the current entity and a partial entity that was either passed directly or generated with a function.
* The default implementation uses the spread operator to create a new entity.
* You must override this method if your entity type does not support the spread operator.
* @see Updater
* @param current The current entity, readonly
* @param updated The new data as a partial entity
* @example
* // default behavior
* onUpdate(current: Readonly<T updated: Partial<T>): T {
return {...current, ...updated};
}
*/
/**
* This function is called every time an entity is updated.
* It receives the current entity and a partial entity that was either passed directly or generated with a function.
* The default implementation uses the spread operator to create a new entity.
* You must override this method if your entity type does not support the spread operator.
* @see Updater
* \@example
* // default behavior
* onUpdate(current: Readonly<T updated: Partial<T>): T {
* return {...current, ...updated};
* }
* @param {?} current The current entity, readonly
* @param {?} updated The new data as a partial entity
* @return {?}
*/
EntityState.prototype.onUpdate = /**
* This function is called every time an entity is updated.
* It receives the current entity and a partial entity that was either passed directly or generated with a function.
* The default implementation uses the spread operator to create a new entity.
* You must override this method if your entity type does not support the spread operator.
* @see Updater
* \@example
* // default behavior
* onUpdate(current: Readonly<T updated: Partial<T>): T {
* return {...current, ...updated};
* }
* @param {?} current The current entity, readonly
* @param {?} updated The new data as a partial entity
* @return {?}
*/
function (current, updated) {
return (/** @type {?} */ (tslib_1.__assign({}, current, updated)));
};
Object.defineProperty(EntityState, "activeId", {
// ------------------- SELECTORS -------------------
/**
* Returns a selector for the activeId
*/
get:
// ------------------- SELECTORS -------------------
/**
* Returns a selector for the activeId
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
return subState.active;
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "active", {
/**
* Returns a selector for the active entity
*/
get: /**
* Returns a selector for the active entity
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
return getActive(subState);
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "keys", {
/**
* Returns a selector for the keys of all entities
*/
get: /**
* Returns a selector for the keys of all entities
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
return Object.keys(subState.entities);
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "entities", {
/**
* Returns a selector for all entities, sorted by insertion order
*/
get: /**
* Returns a selector for all entities, sorted by insertion order
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
return subState.ids.map((/**
* @param {?} id
* @return {?}
*/
function (id) { return subState.entities[id]; }));
});
},
enumerable: true,
configurable: true
});
/**
* Returns a selector for the nth entity, sorted by insertion order
*/
/**
* Returns a selector for the nth entity, sorted by insertion order
* @param {?} index
* @return {?}
*/
EntityState.nthEntity = /**
* Returns a selector for the nth entity, sorted by insertion order
* @param {?} index
* @return {?}
*/
function (index) {
// tslint:disable-line:member-ordering
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
/** @type {?} */
var id = subState.ids[index];
return subState.entities[id];
});
};
Object.defineProperty(EntityState, "paginatedEntities", {
/**
* Returns a selector for paginated entities, sorted by insertion order
*/
get: /**
* Returns a selector for paginated entities, sorted by insertion order
* @return {?}
*/
function () {
// tslint:disable-line:member-ordering
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
var ids = subState.ids, pageIndex = subState.pageIndex, pageSize = subState.pageSize;
return ids
.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize)
.map((/**
* @param {?} id
* @return {?}
*/
function (id) { return subState.entities[id]; }));
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "entitiesMap", {
/**
* Returns a selector for the map of entities
*/
get: /**
* Returns a selector for the map of entities
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
return subState.entities;
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "size", {
/**
* Returns a selector for the size of the entity map
*/
get: /**
* Returns a selector for the size of the entity map
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
return Object.keys(subState.entities).length;
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "error", {
/**
* Returns a selector for the error
*/
get: /**
* Returns a selector for the error
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var name = that.staticStorePath;
return elvis(state, name).error;
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "loading", {
/**
* Returns a selector for the loading state
*/
get: /**
* Returns a selector for the loading state
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var name = that.staticStorePath;
return elvis(state, name).loading;
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "latest", {
/**
* Returns a selector for the latest added entity
*/
get: /**
* Returns a selector for the latest added entity
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
/** @type {?} */
var latestId = subState.ids[subState.ids.length - 1];
return subState.entities[latestId];
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "latestId", {
/**
* Returns a selector for the latest added entity id
*/
get: /**
* Returns a selector for the latest added entity id
* @return {?}
*/
function () {
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
return subState.ids[subState.ids.length - 1];
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "lastUpdated", {
/**
* Returns a selector for the update timestamp
*/
get: /**
* Returns a selector for the update timestamp
* @return {?}
*/
function () {
// tslint:disable-line:member-ordering
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
return new Date(subState.lastUpdated);
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityState, "age", {
/**
* Returns a selector for age, based on the update timestamp
*/
get: /**
* Returns a selector for age, based on the update timestamp
* @return {?}
*/
function () {
// tslint:disable-line:member-ordering
/** @type {?} */
var that = this;
return (/**
* @param {?} state
* @return {?}
*/
function (state) {
/** @type {?} */
var subState = (/** @type {?} */ (elvis(state, that.staticStorePath)));
return Date.now() - subState.lastUpdated;
});
},
enumerable: true,
configurable: true
});
// ------------------- ACTION HANDLERS -------------------
/**
* The entities given by the payload will be added.
* For certain ID strategies this might fail, if it provides an existing ID.
* In all cases it will overwrite the ID value in the entity with the calculated ID.
*/
// ------------------- ACTION HANDLERS -------------------
/**
* The entities given by the payload will be added.
* For certain ID strategies this might fail, if it provides an existing ID.
* In all cases it will overwrite the ID value in the entity with the calculated ID.
* @param {?} __0
* @param {?} __1
* @return {?}
*/
EntityState.prototype.add =
// ------------------- ACTION HANDLERS -------------------
/**
* The entities given by the payload will be added.
* For certain ID strategies this might fail, if it provides an existing ID.
* In all cases it will overwrite the ID value in the entity with the calculated ID.
* @param {?} __0
* @param {?} __1
* @return {?}
*/
function (_a, _b) {
var _this = this;
var getState = _a.getState, patchState = _a.patchState;
var payload = _b.payload;
/** @type {?} */
var updated = this._addOrReplace(getState(), payload, (
// for automated ID strategies this mostly shouldn't throw an UnableToGenerateIdError error
// for EntityIdGenerator it will throw an error if no ID is present
// for automated ID strategies this mostly shouldn't throw an UnableToGenerateIdError error
// for EntityIdGenerator it will throw an error if no ID is present
/**
* @param {?} p
* @param {?} state
* @return {?}
*/
function (p, state) { return _this.idGenerator.generateId(p, state); }));
patchState(tslib_1.__assign({}, updated, { lastUpdated: Date.now() }));
};
/**
* The entities given by the payload will be added.
* It first checks if the ID provided by each entity does exist.
* If it does the current entity will be replaced.
* In all cases it will overwrite the ID value in the entity with the calculated ID.
*/
/**
* The entities given by the payload will be added.
* It first checks if the ID provided by each entity does exist.
* If it does the current entity will be replaced.
* In all cases it will overwrite the ID value in the entity with the calculated ID.
* @param {?} __0
* @param {?} __1
* @return {?}
*/
EntityState.prototype.createOrReplace = /**
* The entities given by the payload will be added.
* It first checks if the ID provided by each entity does exist.
* If it does the current entity will be replaced.
* In all cases it will overwrite the ID value in the entity with the calculated ID.
* @param {?} __0
* @param {?} __1
* @return {?}
*/
function (_a, _b) {
var _this = this;
var getState = _a.getState, patchState = _a.patchState;
var payload = _b.payload;
/** @type {?} */
var updated = this._addOrReplace(getState(), payload, (/**
* @param {?} p
* @param {?} state
* @return {?}
*/
function (p, state) {
return _this.idGenerator.getPresentIdOrGenerate(p, state);
}));
patchState(tslib_1.__assign({}, updated, { lastUpdated: Date.now() }));
};
/**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
EntityState.prototype.update = /**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
function (_a, _b) {
var _this = this;
var getState = _a.getState, patchState = _a.patchState;
var payload = _b.payload;
/** @type {?} */
var entities = tslib_1.__assign({}, getState().entities);
// create copy
/** @type {?} */
var affected;
if (payload.id === null) {
affected = Object.values(entities);
}
else if (typeof payload.id === 'function') {
affected = Object.values(entities).filter((/**
* @param {?} e
* @return {?}
*/
function (e) { return ((/** @type {?} */ (payload.id)))(e); }));
}
else {
/** @type {?} */
var ids_1 = asArray(payload.id);
affected = Object.values(entities).filter((/**
* @param {?} e
* @return {?}
*/
function (e) { return ids_1.includes(_this.idOf(e)); }));
}
if (typeof payload.data === 'function') {
affected.forEach((/**
* @param {?} e
* @return {?}
*/
function (e) {
entities = _this._update(entities, ((/** @type {?} */ (payload.data)))(e), _this.idOf(e));
}));
}
else {
affected.forEach((/**
* @param {?} e
* @return {?}
*/
function (e) {
entities = _this._update(entities, (/** @type {?} */ (payload.data)), _this.idOf(e));
}));
}
patchState({ entities: entities, lastUpdated: Date.now() });
};
/**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
EntityState.prototype.updateActive = /**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
function (_a, _b) {
var getState = _a.getState, patchState = _a.patchState;
var payload = _b.payload;
/** @type {?} */
var state = getState();
var _c = mustGetActive(state), id = _c.id, active = _c.active;
var entities = state.entities;
if (typeof payload === 'function') {
patchState({
entities: tslib_1.__assign({}, this._update(entities, payload(active), id)),
lastUpdated: Date.now()
});
}
else {
patchState({
entities: tslib_1.__assign({}, this._update(entities, payload, id)),
lastUpdated: Date.now()
});
}
};
/**
* @param {?} __0
* @return {?}
*/
EntityState.prototype.removeActive = /**
* @param {?} __0
* @return {?}
*/
function (_a) {
var getState = _a.getState, patchState = _a.patchState;
var _b = getState(), entities = _b.entities, ids = _b.ids, active = _b.active;
delete entities[active];
patchState({
entities: tslib_1.__assign({}, entities),
ids: ids.filter((/**
* @param {?} id
* @return {?}
*/
function (id) { return id !== active; })),
active: undefined,
lastUpdated: Date.now()
});
};
/**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
EntityState.prototype.remove = /**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
function (_a, _b) {
var _this = this;
var getState = _a.getState, patchState = _a.patchState;
var payload = _b.payload;
var _c = getState(), entities = _c.entities, ids = _c.ids, active = _c.active;
if (payload === null) {
patchState({
entities: {},
ids: [],
active: undefined,
lastUpdated: Date.now()
});
}
else {
/** @type {?} */
var deleteIds_1 = typeof payload === 'function'
? Object.values(entities)
.filter((/**
* @param {?} e
* @return {?}
*/
function (e) { return payload(e); }))
.map((/**
* @param {?} e
* @return {?}
*/
function (e) { return _this.idOf(e); }))
: asArray(payload);
/** @type {?} */
var wasActive = deleteIds_1.includes(active);
deleteIds_1.forEach((/**
* @param {?} id
* @return {?}
*/
function (id) { return delete entities[id]; }));
patchState({
entities: tslib_1.__assign({}, entities),
ids: ids.filter((/**
* @param {?} id
* @return {?}
*/
function (id) { return !deleteIds_1.includes(id); })),
active: wasActive ? undefined : active,
lastUpdated: Date.now()
});
}
};
/**
* @param {?} __0
* @return {?}
*/
EntityState.prototype.reset = /**
* @param {?} __0
* @return {?}
*/
function (_a) {
var setState = _a.setState;
setState(defaultEntityState());
};
/**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
EntityState.prototype.setLoading = /**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
function (_a, _b) {
var patchState = _a.patchState;
var payload = _b.payload;
patchState({ loading: payload });
};
/**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
EntityState.prototype.setActive = /**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
function (_a, _b) {
var patchState = _a.patchState;
var payload = _b.payload;
patchState({ active: payload });
};
/**
* @param {?} __0
* @return {?}
*/
EntityState.prototype.clearActive = /**
* @param {?} __0
* @return {?}
*/
function (_a) {
var patchState = _a.patchState;
patchState({ active: undefined });
};
/**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
EntityState.prototype.setError = /**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
function (_a, _b) {
var patchState = _a.patchState;
var payload = _b.payload;
patchState({ error: payload });
};
/**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
EntityState.prototype.goToPage = /**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
function (_a, _b) {
var getState = _a.getState, patchState = _a.patchState;
var payload = _b.payload;
if ('page' in payload) {
patchState({ pageIndex: payload.page });
return;
}
else if (payload['first']) {
patchState({ pageIndex: 0 });
return;
}
var _c = getState(), pageSize = _c.pageSize, pageIndex = _c.pageIndex, ids = _c.ids;
/** @type {?} */
var totalSize = ids.length;
/** @type {?} */
var maxIndex = Math.floor(totalSize / pageSize);
if ('last' in payload) {
patchState({ pageIndex: maxIndex });
}
else {
/** @type {?} */
var step = payload['prev'] ? -1 : 1;
/** @type {?} */
var index = pageIndex + step;
index = wrapOrClamp(payload.wrap, index, 0, maxIndex);
patchState({ pageIndex: index });
}
};
/**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
EntityState.prototype.setPageSize = /**
* @param {?} __0
* @param {?} __1
* @return {?}
*/
function (_a, _b) {
var patchState = _a.patchState;
var payload = _b.payload;
patchState({ pageSize: payload });
};
// ------------------- UTILITY -------------------
/**
* A utility function to update the given state with the given entities.
* It returns a state model with the new entities map and IDs.
* For each given entity an ID will be generated. The generated ID will overwrite the current value:
* <code>entity[this.idKey] = generatedId(entity, state);</code>
* If the ID wasn't present, it will be added to the state's IDs array.
* @param state The current state to act on
* @param payload One or multiple partial entities
* @param generateId A function to generate an ID for each given entity
*/
// ------------------- UTILITY -------------------
/**
* A utility function to update the given state with the given entities.
* It returns a state model with the new entities map and IDs.
* For each given entity an ID will be generated. The generated ID will overwrite the current value:
* <code>entity[this.idKey] = generatedId(entity, state);</code>
* If the ID wasn't present, it will be added to the state's IDs array.
* @private
* @param {?} state The current state to act on
* @param {?} payload One or multiple partial entities
* @param {?} generateId A function to generate an ID for each given entity
* @return {?}
*/
EntityState.prototype._addOrReplace =
// ------------------- UTILITY -------------------
/**
* A utility function to update the given state with the given entities.
* It returns a state model with the new entities map and IDs.
* For each given entity an ID will be generated. The generated ID will overwrite the current value:
* <code>entity[this.idKey] = generatedId(entity, state);</code>
* If the ID wasn't present, it will be added to the state's IDs array.
* @private
* @param {?} state The current state to act on
* @param {?} payload One or multiple partial entities
* @param {?} generateId A function to generate an ID for each given entity
* @return {?}
*/
function (state, payload, generateId) {
var _this = this;
var entities = state.entities, ids = state.ids;
asArray(payload).forEach((/**
* @param {?} entity
* @return {?}
*/
function (entity) {
/** @type {?} */
var id = generateId(entity, state);
entity[_this.idKey] = id;
entities[id] = entity;
if (!ids.includes(id)) {
ids.push(id);
}
}));
return {
entities: tslib_1.__assign({}, entities),
ids: tslib_1.__spread(ids)
};
};
/**
* A utility function to update the given entities map with the provided partial entity.
* After checking if an entity with the given ID is present, the #onUpdate method is called.
* @param entities The current entity map
* @param entity The partial entity to update with
* @param id The ID to find the current entity in the map
*/
/**
* A utility function to update the given entities map with the provided partial entity.
* After checking if an entity with the given ID is present, the #onUpdate method is called.
* @private
* @param {?} entities The current entity map
* @param {?} entity The partial entity to update with
* @param {?=} id The ID to find the current entity in the map
* @return {?}
*/
EntityState.prototype._update = /**
* A utility function to update the given entities map with the provided partial entity.
* After checking if an entity with the given ID is present, the #onUpdate method is called.
* @private
* @param {?} entities The current entity map
* @param {?} entity The partial entity to update with
* @param {?=} id The ID to find the current entity in the map
* @return {?}
*/
function (entities, entity, id) {
if (id === void 0) { id = this.idOf(entity); }
if (id === undefined) {
throw new UpdateFailedError(new InvalidIdError(id));
}
/** @type {?} */
var current = entities[id];
if (current === undefined) {
throw new UpdateFailedError(new NoSuchEntityError(id));
}
entities[id] = this.onUpdate(current, entity);
return entities;
};
/**
* @private
* @param {?} storeClass
* @param {?} actions
* @return {?}
*/
EntityState.prototype.setup = /**
* @private
* @param {?} storeClass
* @param {?} actions
* @return {?}
*/
function (storeClass, actions) {
var _this = this;
// validation if a matching action handler exists has moved to reflection-validation tests
actions.forEach((/**
* @param {?} fn
* @return {?}
*/
function (fn) {
/** @type {?} */
var actionName = "[" + _this.storePath + "] " + fn;
storeClass[NGXS_META_KEY].actions[actionName] = [
{
fn: fn,
options: {},
type: actionName
}
];
}));
};
/**
* Returns the id of the given entity, based on the defined idKey.
* This methods allows Partial entities and thus might return undefined.
* Other methods calling this one have to handle this case themselves.
* @param data a partial entity
*/
/**
* Returns the id of the given entity, based on the defined idKey.
* This methods allows Partial entities and thus might return undefined.
* Other methods calling this one have to handle this case themselves.
* @protected
* @param {?} data a partial entity
* @return {?}
*/
EntityState.prototype.idOf = /**
* Returns the id of the given entity, based on the defined idKey.
* This methods allows Partial entities and thus might return undefined.
* Other methods calling this one have to handle this case themselves.
* @protected
* @param {?} data a partial entity
* @return {?}
*/
function (data) {
return data[this.idKey];
};
return EntityState;
}());
// @dynamic
/**
* @abstract
* @template T
*/
export { EntityState };
if (false) {
/**
* @type {?}
* @private
*/
EntityState.prototype.idKey;
/**
* @type {?}
* @private
*/
EntityState.prototype.storePath;
/**
* @type {?}
* @protected
*/
EntityState.prototype.idGenerator;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0YXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMtbGFicy9lbnRpdHktc3RhdGUvIiwic291cmNlcyI6WyJsaWIvZW50aXR5LXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUNMLGdCQUFnQixFQVdqQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWhGLE9BQU8sRUFDTCxPQUFPLEVBQ1AsS0FBSyxFQUNMLFNBQVMsRUFFVCxhQUFhLEVBQ2IsYUFBYSxFQUNiLFdBQVcsRUFDWixNQUFNLFlBQVksQ0FBQzs7Ozs7Ozs7O0FBU3BCLE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsUUFBMkM7SUFBM0MseUJBQUEsRUFBQSxhQUEyQztJQUUzQywwQkFDRSxRQUFRLEVBQUUsRUFBRSxFQUNaLEdBQUcsRUFBRSxFQUFFLEVBQ1AsT0FBTyxFQUFFLEtBQUssRUFDZCxLQUFLLEVBQUUsU0FBUyxFQUNoQixNQUFNLEVBQUUsU0FBUyxFQUNqQixRQUFRLEVBQUUsRUFBRSxFQUNaLFNBQVMsRUFBRSxDQUFDLEVBQ1osV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFDcEIsUUFBUSxFQUNYO0FBQ0osQ0FBQzs7Ozs7O0FBR0Q7Ozs7Ozs7SUFLRSxxQkFDRSxVQUFnQyxFQUNoQyxNQUFlLEVBQ2YsVUFBZ0M7UUFFaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxtQkFBQSxNQUFNLEVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFn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RCxDQUFDLEFBN2RELElBNmRDOzs7Ozs7Ozs7Ozs7SUE1ZEMsNEJBQStCOzs7OztJQUMvQixnQ0FBbUM7Ozs7O0lBQ25DLGtDQUErQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0YXRlQ29udGV4dCB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7XG4gIEVudGl0eUFjdGlvblR5cGUsXG4gIEVudGl0eUFkZEFjdGlvbixcbiAgRW50aXR5Q3JlYXRlT3JSZXBsYWNlQWN0aW9uLFxuICBFbnRpdHlHb1RvUGFnZUFjdGlvbixcbiAgRW50aXR5UmVtb3ZlQWN0aW9uLFxuICBFbnRpdHlTZXRBY3RpdmVBY3Rpb24sXG4gIEVudGl0eVNldEVycm9yQWN0aW9uLFxuICBFbnRpdHlTZXRMb2FkaW5nQWN0aW9uLFxuICBFbnRpdHlTZXRQYWdlU2l6ZUFjdGlvbixcbiAgRW50aXR5VXBkYXRlQWN0aW9uLFxuICBFbnRpdHlVcGRhdGVBY3RpdmVBY3Rpb25cbn0gZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCB7IEludmFsaWRJZEVycm9yLCBOb1N1Y2hFbnRpdHlFcnJvciwgVXBkYXRlRmFpbGVkRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBJZFN0cmF0ZWd5IH0gZnJvbSAnLi9pZC1zdHJhdGVneSc7XG5pbXBvcnQge1xuICBhc0FycmF5LFxuICBlbHZpcyxcbiAgZ2V0QWN0aXZlLFxuICBIYXNoTWFwLFxuICBtdXN0R2V0QWN0aXZlLFxuICBOR1hTX01FVEFfS0VZLFxuICB3cmFwT3JDbGFtcFxufSBmcm9tICcuL2ludGVybmFsJztcbmltcG9ydCB7IEVudGl0eVN0YXRlTW9kZWwsIFN0YXRlU2VsZWN0b3IgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgSWRHZW5lcmF0b3IgPSBJZFN0cmF0ZWd5LklkR2VuZXJhdG9yO1xuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgb2JqZWN0IHd