Storage modules
This commit is contained in:
parent
dfc7d48fd4
commit
349835bdb7
@ -12,7 +12,7 @@ import Vue from 'vue';
|
|||||||
import Vuex from 'vuex';
|
import Vuex from 'vuex';
|
||||||
import DashboardApp from './DashboardView/Dashboard.vue';
|
import DashboardApp from './DashboardView/Dashboard.vue';
|
||||||
import { ConsoleLogger, Logger } from './Logger';
|
import { ConsoleLogger, Logger } from './Logger';
|
||||||
import { DataStorage } from './DataStorage';
|
import { DataStorage } from './Storage/DataStorage';
|
||||||
import { getBuildingPageAttributes, isBuildingPage } from './Page/PageDetector';
|
import { getBuildingPageAttributes, isBuildingPage } from './Page/PageDetector';
|
||||||
import { ExecutionStorage } from './Storage/ExecutionStorage';
|
import { ExecutionStorage } from './Storage/ExecutionStorage';
|
||||||
import { VillageState } from './VillageState';
|
import { VillageState } from './VillageState';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { ConsoleLogger, Logger } from '../Logger';
|
import { ConsoleLogger, Logger } from '../Logger';
|
||||||
import { DataStorage } from '../DataStorage';
|
import { DataStorage } from '../Storage/DataStorage';
|
||||||
import { Args } from './Args';
|
import { Args } from './Args';
|
||||||
|
|
||||||
const NAMESPACE = 'actions.v1';
|
const NAMESPACE = 'actions.v1';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DataStorage } from '../DataStorage';
|
import { DataStorage } from '../Storage/DataStorage';
|
||||||
import { Task, TaskList, TaskProvider, uniqTaskId } from './TaskProvider';
|
import { Task, TaskList, TaskProvider, uniqTaskId } from './TaskProvider';
|
||||||
|
|
||||||
const QUEUE_NAME = 'queue';
|
const QUEUE_NAME = 'queue';
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { Logger, NullLogger } from './Logger';
|
import { Logger, NullLogger } from '../Logger';
|
||||||
|
import { createMapper, ObjectMapperOptions } from './Mapper';
|
||||||
|
|
||||||
const NAMESPACE = 'travian:v1';
|
const NAMESPACE = 'travian:v1';
|
||||||
|
|
||||||
@ -8,40 +9,6 @@ function join(...parts: Array<string>) {
|
|||||||
return parts.map(p => p.replace(/[:]+$/g, '').replace(/^[:]+/g, '')).join(':');
|
return parts.map(p => p.replace(/[:]+$/g, '').replace(/^[:]+/g, '')).join(':');
|
||||||
}
|
}
|
||||||
|
|
||||||
interface EmptyObjectFactory<T> {
|
|
||||||
(): T;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ObjectMapper<T> {
|
|
||||||
(item: any): T;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ObjectMapperOptions<T> {
|
|
||||||
factory?: EmptyObjectFactory<T>;
|
|
||||||
mapper?: ObjectMapper<T>;
|
|
||||||
}
|
|
||||||
|
|
||||||
function createMapper<T>(options: ObjectMapperOptions<T>): ObjectMapper<T> {
|
|
||||||
const { mapper, factory } = options;
|
|
||||||
|
|
||||||
if (mapper) {
|
|
||||||
return mapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (factory) {
|
|
||||||
return plain => {
|
|
||||||
let item = factory();
|
|
||||||
if (typeof plain === 'object' && typeof item === 'object') {
|
|
||||||
return Object.assign(item, plain) as T;
|
|
||||||
} else {
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Error('Factory or mapper must be specified');
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DataStorage {
|
export class DataStorage {
|
||||||
private readonly logger: Logger;
|
private readonly logger: Logger;
|
||||||
private readonly name: string;
|
private readonly name: string;
|
@ -1,4 +1,4 @@
|
|||||||
import { DataStorage } from '../DataStorage';
|
import { DataStorage } from './DataStorage';
|
||||||
import { ExecutionSettings } from '../Executor';
|
import { ExecutionSettings } from '../Executor';
|
||||||
|
|
||||||
const NAMESPACE = 'execution.v1';
|
const NAMESPACE = 'execution.v1';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DataStorage } from '../DataStorage';
|
import { DataStorage } from './DataStorage';
|
||||||
import { HeroAttributes } from '../Core/Hero';
|
import { HeroAttributes } from '../Core/Hero';
|
||||||
|
|
||||||
const VILLAGE_ID_KEY = 'village_id';
|
const VILLAGE_ID_KEY = 'village_id';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DataStorage } from '../DataStorage';
|
import { DataStorage } from './DataStorage';
|
||||||
import { LogStorageInterface, StorageLogRecord } from '../Logger';
|
import { LogStorageInterface, StorageLogRecord } from '../Logger';
|
||||||
|
|
||||||
const RECORD_LIST_KEY = 'records';
|
const RECORD_LIST_KEY = 'records';
|
||||||
|
33
src/Storage/Mapper.ts
Normal file
33
src/Storage/Mapper.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
interface EmptyObjectFactory<T> {
|
||||||
|
(): T;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ObjectMapper<T> {
|
||||||
|
(item: any): T;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ObjectMapperOptions<T> {
|
||||||
|
factory?: EmptyObjectFactory<T>;
|
||||||
|
mapper?: ObjectMapper<T>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createMapper<T>(options: ObjectMapperOptions<T>): ObjectMapper<T> {
|
||||||
|
const { mapper, factory } = options;
|
||||||
|
|
||||||
|
if (mapper) {
|
||||||
|
return mapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (factory) {
|
||||||
|
return plain => {
|
||||||
|
let item = factory();
|
||||||
|
if (typeof plain === 'object' && typeof item === 'object') {
|
||||||
|
return Object.assign(item, plain) as T;
|
||||||
|
} else {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error('Factory or mapper must be specified');
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
import { DataStorage } from '../DataStorage';
|
import { DataStorage } from './DataStorage';
|
||||||
import { ResourceTransferReport } from '../ResourceTransfer';
|
import { ResourceTransferReport } from '../ResourceTransfer';
|
||||||
|
|
||||||
const NAMESPACE = 'resource_transfer.v1';
|
const NAMESPACE = 'resource_transfer.v1';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DataStorage } from '../DataStorage';
|
import { DataStorage } from './DataStorage';
|
||||||
import { ActionStatistics, StatisticsStorageInterface } from '../Statistics';
|
import { ActionStatistics, StatisticsStorageInterface } from '../Statistics';
|
||||||
|
|
||||||
const ACTION_STATISTICS_KEY = 'actions';
|
const ACTION_STATISTICS_KEY = 'actions';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { LogStorage } from './LogStorage';
|
import { LogStorage } from './LogStorage';
|
||||||
import { DataStorage } from '../DataStorage';
|
import { DataStorage } from './DataStorage';
|
||||||
import { StatisticsStorage } from './StatisticsStorage';
|
import { StatisticsStorage } from './StatisticsStorage';
|
||||||
|
|
||||||
export class StorageContainer {
|
export class StorageContainer {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DataStorage } from '../DataStorage';
|
import { DataStorage } from './DataStorage';
|
||||||
import { Resources, ResourcesInterface } from '../Core/Resources';
|
import { Resources, ResourcesInterface } from '../Core/Resources';
|
||||||
import { ResourceStorage } from '../Core/ResourceStorage';
|
import { ResourceStorage } from '../Core/ResourceStorage';
|
||||||
import { IncomingMerchant, MerchantsInfo } from '../Core/Market';
|
import { IncomingMerchant, MerchantsInfo } from '../Core/Market';
|
||||||
|
Loading…
Reference in New Issue
Block a user