在上下文中增加briefEnv,更正了locale的一个小bug
This commit is contained in:
parent
b6fcaa83fb
commit
9a2d941432
|
|
@ -2,9 +2,12 @@ import { EntityDict } from 'oak-domain/lib/base-app-domain';
|
|||
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/types/Entity';
|
||||
import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore';
|
||||
import { SerializedData } from './FrontendRuntimeContext';
|
||||
import { BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare abstract class BackendRuntimeContext<ED extends EntityDict & BaseEntityDict> extends AsyncContext<ED> {
|
||||
private subscriberId?;
|
||||
private be?;
|
||||
getSubscriberId(): string | undefined;
|
||||
getBriefEnvironment(): BriefEnv | undefined;
|
||||
protected getSerializedData(): SerializedData;
|
||||
initialize(data?: SerializedData): Promise<void>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,25 @@
|
|||
import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore';
|
||||
export class BackendRuntimeContext extends AsyncContext {
|
||||
subscriberId;
|
||||
be;
|
||||
getSubscriberId() {
|
||||
return this.subscriberId;
|
||||
}
|
||||
getBriefEnvironment() {
|
||||
return this.be;
|
||||
}
|
||||
getSerializedData() {
|
||||
return {
|
||||
sid: this.subscriberId,
|
||||
be: this.be,
|
||||
};
|
||||
}
|
||||
async initialize(data) {
|
||||
if (data?.sid) {
|
||||
this.subscriberId = data.sid;
|
||||
}
|
||||
if (data?.be) {
|
||||
this.be = data.be;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,12 +5,16 @@ import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore';
|
|||
import { CommonAspectDict } from 'oak-common-aspect';
|
||||
import { Aspect } from 'oak-domain/lib/types';
|
||||
import { SubScriber } from '../features/subscriber';
|
||||
import { Environment } from '../features/environment';
|
||||
import { BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { BasicFeatures } from '../features';
|
||||
export type SerializedData = {
|
||||
sid?: string;
|
||||
be?: BriefEnv;
|
||||
};
|
||||
export declare abstract class FrontendRuntimeContext<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>, AD extends CommonAspectDict<ED, Cxt> & Record<string, Aspect<ED, Cxt>>> extends SyncContext<ED> {
|
||||
subscriber: SubScriber<ED, Cxt, FrontendRuntimeContext<ED, Cxt, AD>, AD>;
|
||||
env: Environment;
|
||||
constructor(store: SyncRowStore<ED, FrontendRuntimeContext<ED, Cxt, AD>>, features: BasicFeatures<ED, Cxt, FrontendRuntimeContext<ED, Cxt, AD>, AD>);
|
||||
protected getSerializedData(): SerializedData;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,18 @@
|
|||
import { SyncContext } from 'oak-domain/lib/store/SyncRowStore';
|
||||
export class FrontendRuntimeContext extends SyncContext {
|
||||
subscriber;
|
||||
env;
|
||||
constructor(store, features) {
|
||||
super(store);
|
||||
this.subscriber = features.subscriber;
|
||||
this.env = features.environment;
|
||||
}
|
||||
getSerializedData() {
|
||||
const sid = this.subscriber.getSubscriberId();
|
||||
const be = this.env.getBriefEnv();
|
||||
return {
|
||||
sid,
|
||||
be,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
import { Feature } from "../types/Feature";
|
||||
import { NativeEnv, WebEnv, WechatMpEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { NativeEnv, WebEnv, WechatMpEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare class Environment extends Feature {
|
||||
env?: WebEnv | WechatMpEnv | NativeEnv;
|
||||
fullEnv?: WebEnv | WechatMpEnv | NativeEnv;
|
||||
briefEnv?: BriefEnv;
|
||||
loading: boolean;
|
||||
constructor();
|
||||
private initialize;
|
||||
getEnv(): Promise<WebEnv | WechatMpEnv | NativeEnv>;
|
||||
getBriefEnv(): BriefEnv | undefined;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ import { getEnv } from '../utils/env/env';
|
|||
import { assert } from 'oak-domain/lib/utils/assert';
|
||||
import { OakEnvInitializedFailure } from "../types/Exception";
|
||||
export class Environment extends Feature {
|
||||
env;
|
||||
fullEnv;
|
||||
briefEnv;
|
||||
loading = false;
|
||||
constructor() {
|
||||
super();
|
||||
|
|
@ -12,9 +13,10 @@ export class Environment extends Feature {
|
|||
async initialize() {
|
||||
this.loading = true;
|
||||
try {
|
||||
const env = await getEnv();
|
||||
const { fullEnv, briefEnv } = await getEnv();
|
||||
this.loading = false;
|
||||
this.env = env;
|
||||
this.fullEnv = fullEnv;
|
||||
this.briefEnv = briefEnv;
|
||||
this.publish();
|
||||
}
|
||||
catch (err) {
|
||||
|
|
@ -22,19 +24,22 @@ export class Environment extends Feature {
|
|||
}
|
||||
}
|
||||
async getEnv() {
|
||||
if (this.env) {
|
||||
return this.env;
|
||||
if (this.fullEnv) {
|
||||
return this.fullEnv;
|
||||
}
|
||||
else {
|
||||
assert(this.loading);
|
||||
return new Promise((resolve, reject) => {
|
||||
const fn = this.subscribe(() => {
|
||||
fn();
|
||||
assert(this.env);
|
||||
resolve(this.env);
|
||||
assert(this.fullEnv);
|
||||
resolve(this.fullEnv);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
getBriefEnv() {
|
||||
return this.briefEnv;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ export class Locales extends Feature {
|
|||
async loadData(key) {
|
||||
assert(typeof key === 'string');
|
||||
const [ns] = key.split('.');
|
||||
await this.loadServerData([key]);
|
||||
await this.loadServerData([ns]);
|
||||
if (!this.hasKey(key)) {
|
||||
console.warn(`命名空间${ns}中的${key}缺失且可能请求不到更新的数据`);
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
|
|
|
|||
|
|
@ -1,2 +1,5 @@
|
|||
import { WechatMpEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare function getEnv(): Promise<WechatMpEnv>;
|
||||
import { WechatMpEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare function getEnv(): Promise<{
|
||||
fullEnv: WechatMpEnv;
|
||||
briefEnv: BriefEnv;
|
||||
}>;
|
||||
|
|
|
|||
|
|
@ -1,8 +1,18 @@
|
|||
export async function getEnv() {
|
||||
const env = await wx.getSystemInfo();
|
||||
return Object.assign(env, {
|
||||
const fullEnv = Object.assign(env, {
|
||||
type: 'wechatMp',
|
||||
localStorageEnabled: true,
|
||||
language: env.language.replace('_', '-'), // 全局统一用中连接符
|
||||
});
|
||||
const briefEnv = {
|
||||
system: fullEnv.system,
|
||||
wechat: `${fullEnv.platform}/${fullEnv.version}/${fullEnv.language}`,
|
||||
brand: fullEnv.brand,
|
||||
model: fullEnv.model,
|
||||
};
|
||||
return {
|
||||
fullEnv,
|
||||
briefEnv,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,5 @@
|
|||
import { NativeEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare function getEnv(): Promise<NativeEnv>;
|
||||
import { NativeEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare function getEnv(): Promise<{
|
||||
fullEnv: NativeEnv;
|
||||
briefEnv: BriefEnv;
|
||||
}>;
|
||||
|
|
|
|||
|
|
@ -2,8 +2,17 @@ import { Platform } from 'react-native';
|
|||
import { getLocales } from 'react-native-localize';
|
||||
export async function getEnv() {
|
||||
const language = getLocales()[0].languageTag;
|
||||
return {
|
||||
const fullEnv = {
|
||||
...Platform,
|
||||
language,
|
||||
};
|
||||
const briefEnv = {
|
||||
brand: fullEnv.constants.Brand,
|
||||
model: fullEnv.constants.Model,
|
||||
system: `${fullEnv.OS}/${fullEnv.constants.Version || fullEnv.constants.osVersion}/${language}`,
|
||||
};
|
||||
return {
|
||||
fullEnv,
|
||||
briefEnv,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
import { WebEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { WebEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
/**
|
||||
* fingerprintJs当中的一些敏感项
|
||||
* @returns
|
||||
*/
|
||||
export declare function getEnv(): Promise<WebEnv>;
|
||||
export declare function getEnv(): Promise<{
|
||||
fullEnv: WebEnv;
|
||||
briefEnv: BriefEnv;
|
||||
}>;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ export async function getEnv() {
|
|||
// 有浏览器没有storage
|
||||
const [result /* , localStorageEnabled */] = await Promise.all([fp.get() /* , navigator.storage.persisted() */]);
|
||||
const { visitorId, components } = result;
|
||||
return Object.assign(pick(components, [
|
||||
const fullEnv = Object.assign(pick(components, [
|
||||
'platform',
|
||||
'timezone',
|
||||
'vendor',
|
||||
|
|
@ -20,4 +20,12 @@ export async function getEnv() {
|
|||
// localStorageEnabled,
|
||||
language: navigator.language,
|
||||
});
|
||||
const briefEnv = {
|
||||
system: `${fullEnv.platform.value}`,
|
||||
explorer: `${fullEnv.vendor.value}/${fullEnv.vendorFlavors.value[0]}`,
|
||||
};
|
||||
return {
|
||||
fullEnv,
|
||||
briefEnv,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,12 @@ import { EntityDict } from 'oak-domain/lib/base-app-domain';
|
|||
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/types/Entity';
|
||||
import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore';
|
||||
import { SerializedData } from './FrontendRuntimeContext';
|
||||
import { BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare abstract class BackendRuntimeContext<ED extends EntityDict & BaseEntityDict> extends AsyncContext<ED> {
|
||||
private subscriberId?;
|
||||
private be?;
|
||||
getSubscriberId(): string | undefined;
|
||||
getBriefEnvironment(): BriefEnv | undefined;
|
||||
protected getSerializedData(): SerializedData;
|
||||
initialize(data?: SerializedData): Promise<void>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,18 +4,26 @@ exports.BackendRuntimeContext = void 0;
|
|||
const AsyncRowStore_1 = require("oak-domain/lib/store/AsyncRowStore");
|
||||
class BackendRuntimeContext extends AsyncRowStore_1.AsyncContext {
|
||||
subscriberId;
|
||||
be;
|
||||
getSubscriberId() {
|
||||
return this.subscriberId;
|
||||
}
|
||||
getBriefEnvironment() {
|
||||
return this.be;
|
||||
}
|
||||
getSerializedData() {
|
||||
return {
|
||||
sid: this.subscriberId,
|
||||
be: this.be,
|
||||
};
|
||||
}
|
||||
async initialize(data) {
|
||||
if (data?.sid) {
|
||||
this.subscriberId = data.sid;
|
||||
}
|
||||
if (data?.be) {
|
||||
this.be = data.be;
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.BackendRuntimeContext = BackendRuntimeContext;
|
||||
|
|
|
|||
|
|
@ -5,12 +5,16 @@ import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore';
|
|||
import { CommonAspectDict } from 'oak-common-aspect';
|
||||
import { Aspect } from 'oak-domain/lib/types';
|
||||
import { SubScriber } from '../features/subscriber';
|
||||
import { Environment } from '../features/environment';
|
||||
import { BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { BasicFeatures } from '../features';
|
||||
export type SerializedData = {
|
||||
sid?: string;
|
||||
be?: BriefEnv;
|
||||
};
|
||||
export declare abstract class FrontendRuntimeContext<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>, AD extends CommonAspectDict<ED, Cxt> & Record<string, Aspect<ED, Cxt>>> extends SyncContext<ED> {
|
||||
subscriber: SubScriber<ED, Cxt, FrontendRuntimeContext<ED, Cxt, AD>, AD>;
|
||||
env: Environment;
|
||||
constructor(store: SyncRowStore<ED, FrontendRuntimeContext<ED, Cxt, AD>>, features: BasicFeatures<ED, Cxt, FrontendRuntimeContext<ED, Cxt, AD>, AD>);
|
||||
protected getSerializedData(): SerializedData;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,14 +4,18 @@ exports.FrontendRuntimeContext = void 0;
|
|||
const SyncRowStore_1 = require("oak-domain/lib/store/SyncRowStore");
|
||||
class FrontendRuntimeContext extends SyncRowStore_1.SyncContext {
|
||||
subscriber;
|
||||
env;
|
||||
constructor(store, features) {
|
||||
super(store);
|
||||
this.subscriber = features.subscriber;
|
||||
this.env = features.environment;
|
||||
}
|
||||
getSerializedData() {
|
||||
const sid = this.subscriber.getSubscriberId();
|
||||
const be = this.env.getBriefEnv();
|
||||
return {
|
||||
sid,
|
||||
be,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
import { Feature } from "../types/Feature";
|
||||
import { NativeEnv, WebEnv, WechatMpEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { NativeEnv, WebEnv, WechatMpEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare class Environment extends Feature {
|
||||
env?: WebEnv | WechatMpEnv | NativeEnv;
|
||||
fullEnv?: WebEnv | WechatMpEnv | NativeEnv;
|
||||
briefEnv?: BriefEnv;
|
||||
loading: boolean;
|
||||
constructor();
|
||||
private initialize;
|
||||
getEnv(): Promise<WebEnv | WechatMpEnv | NativeEnv>;
|
||||
getBriefEnv(): BriefEnv | undefined;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ const env_1 = require("../utils/env/env");
|
|||
const assert_1 = require("oak-domain/lib/utils/assert");
|
||||
const Exception_1 = require("../types/Exception");
|
||||
class Environment extends Feature_1.Feature {
|
||||
env;
|
||||
fullEnv;
|
||||
briefEnv;
|
||||
loading = false;
|
||||
constructor() {
|
||||
super();
|
||||
|
|
@ -15,9 +16,10 @@ class Environment extends Feature_1.Feature {
|
|||
async initialize() {
|
||||
this.loading = true;
|
||||
try {
|
||||
const env = await (0, env_1.getEnv)();
|
||||
const { fullEnv, briefEnv } = await (0, env_1.getEnv)();
|
||||
this.loading = false;
|
||||
this.env = env;
|
||||
this.fullEnv = fullEnv;
|
||||
this.briefEnv = briefEnv;
|
||||
this.publish();
|
||||
}
|
||||
catch (err) {
|
||||
|
|
@ -25,20 +27,23 @@ class Environment extends Feature_1.Feature {
|
|||
}
|
||||
}
|
||||
async getEnv() {
|
||||
if (this.env) {
|
||||
return this.env;
|
||||
if (this.fullEnv) {
|
||||
return this.fullEnv;
|
||||
}
|
||||
else {
|
||||
(0, assert_1.assert)(this.loading);
|
||||
return new Promise((resolve, reject) => {
|
||||
const fn = this.subscribe(() => {
|
||||
fn();
|
||||
(0, assert_1.assert)(this.env);
|
||||
resolve(this.env);
|
||||
(0, assert_1.assert)(this.fullEnv);
|
||||
resolve(this.fullEnv);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
getBriefEnv() {
|
||||
return this.briefEnv;
|
||||
}
|
||||
}
|
||||
exports.Environment = Environment;
|
||||
;
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ class Locales extends Feature_1.Feature {
|
|||
async loadData(key) {
|
||||
(0, assert_1.assert)(typeof key === 'string');
|
||||
const [ns] = key.split('.');
|
||||
await this.loadServerData([key]);
|
||||
await this.loadServerData([ns]);
|
||||
if (!this.hasKey(key)) {
|
||||
console.warn(`命名空间${ns}中的${key}缺失且可能请求不到更新的数据`);
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
|
|
|
|||
|
|
@ -1,2 +1,5 @@
|
|||
import { WechatMpEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare function getEnv(): Promise<WechatMpEnv>;
|
||||
import { WechatMpEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare function getEnv(): Promise<{
|
||||
fullEnv: WechatMpEnv;
|
||||
briefEnv: BriefEnv;
|
||||
}>;
|
||||
|
|
|
|||
|
|
@ -3,10 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
exports.getEnv = void 0;
|
||||
async function getEnv() {
|
||||
const env = await wx.getSystemInfo();
|
||||
return Object.assign(env, {
|
||||
const fullEnv = Object.assign(env, {
|
||||
type: 'wechatMp',
|
||||
localStorageEnabled: true,
|
||||
language: env.language.replace('_', '-'), // 全局统一用中连接符
|
||||
});
|
||||
const briefEnv = {
|
||||
system: fullEnv.system,
|
||||
wechat: `${fullEnv.platform}/${fullEnv.version}/${fullEnv.language}`,
|
||||
brand: fullEnv.brand,
|
||||
model: fullEnv.model,
|
||||
};
|
||||
return {
|
||||
fullEnv,
|
||||
briefEnv,
|
||||
};
|
||||
}
|
||||
exports.getEnv = getEnv;
|
||||
|
|
|
|||
|
|
@ -1,2 +1,5 @@
|
|||
import { NativeEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare function getEnv(): Promise<NativeEnv>;
|
||||
import { NativeEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
export declare function getEnv(): Promise<{
|
||||
fullEnv: NativeEnv;
|
||||
briefEnv: BriefEnv;
|
||||
}>;
|
||||
|
|
|
|||
|
|
@ -5,9 +5,18 @@ const react_native_1 = require("react-native");
|
|||
const react_native_localize_1 = require("react-native-localize");
|
||||
async function getEnv() {
|
||||
const language = (0, react_native_localize_1.getLocales)()[0].languageTag;
|
||||
return {
|
||||
const fullEnv = {
|
||||
...react_native_1.Platform,
|
||||
language,
|
||||
};
|
||||
const briefEnv = {
|
||||
brand: fullEnv.constants.Brand,
|
||||
model: fullEnv.constants.Model,
|
||||
system: `${fullEnv.OS}/${fullEnv.constants.Version || fullEnv.constants.osVersion}/${language}`,
|
||||
};
|
||||
return {
|
||||
fullEnv,
|
||||
briefEnv,
|
||||
};
|
||||
}
|
||||
exports.getEnv = getEnv;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
import { WebEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { WebEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
/**
|
||||
* fingerprintJs当中的一些敏感项
|
||||
* @returns
|
||||
*/
|
||||
export declare function getEnv(): Promise<WebEnv>;
|
||||
export declare function getEnv(): Promise<{
|
||||
fullEnv: WebEnv;
|
||||
briefEnv: BriefEnv;
|
||||
}>;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ async function getEnv() {
|
|||
// 有浏览器没有storage
|
||||
const [result /* , localStorageEnabled */] = await Promise.all([fp.get() /* , navigator.storage.persisted() */]);
|
||||
const { visitorId, components } = result;
|
||||
return Object.assign((0, lodash_1.pick)(components, [
|
||||
const fullEnv = Object.assign((0, lodash_1.pick)(components, [
|
||||
'platform',
|
||||
'timezone',
|
||||
'vendor',
|
||||
|
|
@ -24,5 +24,13 @@ async function getEnv() {
|
|||
// localStorageEnabled,
|
||||
language: navigator.language,
|
||||
});
|
||||
const briefEnv = {
|
||||
system: `${fullEnv.platform.value}`,
|
||||
explorer: `${fullEnv.vendor.value}/${fullEnv.vendorFlavors.value[0]}`,
|
||||
};
|
||||
return {
|
||||
fullEnv,
|
||||
briefEnv,
|
||||
};
|
||||
}
|
||||
exports.getEnv = getEnv;
|
||||
|
|
|
|||
|
|
@ -2,17 +2,24 @@ import { EntityDict } from 'oak-domain/lib/base-app-domain';
|
|||
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/types/Entity';
|
||||
import { AsyncContext, AsyncRowStore } from 'oak-domain/lib/store/AsyncRowStore';
|
||||
import { SerializedData } from './FrontendRuntimeContext';
|
||||
import { BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
|
||||
export abstract class BackendRuntimeContext<ED extends EntityDict & BaseEntityDict> extends AsyncContext<ED> {
|
||||
private subscriberId?: string;
|
||||
private be?: BriefEnv;
|
||||
|
||||
getSubscriberId() {
|
||||
return this.subscriberId;
|
||||
}
|
||||
|
||||
getBriefEnvironment() {
|
||||
return this.be;
|
||||
}
|
||||
|
||||
protected getSerializedData(): SerializedData {
|
||||
return {
|
||||
sid: this.subscriberId,
|
||||
be: this.be,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -20,5 +27,8 @@ export abstract class BackendRuntimeContext<ED extends EntityDict & BaseEntityDi
|
|||
if (data?.sid) {
|
||||
this.subscriberId = data.sid;
|
||||
}
|
||||
if (data?.be) {
|
||||
this.be = data.be;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,10 +5,13 @@ import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore';
|
|||
import { CommonAspectDict } from 'oak-common-aspect';
|
||||
import { Aspect } from 'oak-domain/lib/types';
|
||||
import { SubScriber } from '../features/subscriber';
|
||||
import { Environment } from '../features/environment';
|
||||
import { BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { BasicFeatures } from '../features';
|
||||
|
||||
export type SerializedData = {
|
||||
sid?: string;
|
||||
be?: BriefEnv;
|
||||
};
|
||||
|
||||
export abstract class FrontendRuntimeContext<
|
||||
|
|
@ -17,16 +20,20 @@ export abstract class FrontendRuntimeContext<
|
|||
AD extends CommonAspectDict<ED, Cxt> & Record<string, Aspect<ED, Cxt>>
|
||||
> extends SyncContext<ED> {
|
||||
subscriber: SubScriber<ED, Cxt, FrontendRuntimeContext<ED, Cxt, AD>, AD>;
|
||||
env: Environment;
|
||||
|
||||
constructor(store: SyncRowStore<ED, FrontendRuntimeContext<ED, Cxt, AD>>, features: BasicFeatures<ED, Cxt, FrontendRuntimeContext<ED, Cxt, AD>, AD>) {
|
||||
super(store);
|
||||
this.subscriber = features.subscriber;
|
||||
this.env = features.environment;
|
||||
}
|
||||
|
||||
protected getSerializedData(): SerializedData {
|
||||
const sid = this.subscriber.getSubscriberId();
|
||||
const be = this.env.getBriefEnv();
|
||||
return {
|
||||
sid,
|
||||
be,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +1,12 @@
|
|||
import { Feature } from "../types/Feature";
|
||||
import { NativeEnv, WebEnv, WechatMpEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { NativeEnv, WebEnv, WechatMpEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { getEnv } from '../utils/env/env';
|
||||
import { assert } from 'oak-domain/lib/utils/assert';
|
||||
import { OakEnvInitializedFailure } from "../types/Exception";
|
||||
|
||||
export class Environment extends Feature {
|
||||
env?: WebEnv | WechatMpEnv | NativeEnv;
|
||||
fullEnv?: WebEnv | WechatMpEnv | NativeEnv;
|
||||
briefEnv?: BriefEnv;
|
||||
loading = false;
|
||||
|
||||
constructor() {
|
||||
|
|
@ -17,9 +18,10 @@ export class Environment extends Feature {
|
|||
private async initialize() {
|
||||
this.loading = true;
|
||||
try {
|
||||
const env = await getEnv();
|
||||
const { fullEnv, briefEnv } = await getEnv();
|
||||
this.loading = false;
|
||||
this.env = env;
|
||||
this.fullEnv = fullEnv;
|
||||
this.briefEnv = briefEnv;
|
||||
this.publish();
|
||||
}
|
||||
catch (err) {
|
||||
|
|
@ -28,8 +30,8 @@ export class Environment extends Feature {
|
|||
}
|
||||
|
||||
async getEnv(): Promise<WebEnv | WechatMpEnv | NativeEnv> {
|
||||
if (this.env) {
|
||||
return this.env;
|
||||
if (this.fullEnv) {
|
||||
return this.fullEnv;
|
||||
}
|
||||
else {
|
||||
assert(this.loading);
|
||||
|
|
@ -38,12 +40,16 @@ export class Environment extends Feature {
|
|||
const fn = this.subscribe(
|
||||
() => {
|
||||
fn();
|
||||
assert(this.env);
|
||||
resolve(this.env);
|
||||
assert(this.fullEnv);
|
||||
resolve(this.fullEnv);
|
||||
}
|
||||
)
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
getBriefEnv() {
|
||||
return this.briefEnv;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ export class Locales<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncCo
|
|||
assert(typeof key === 'string');
|
||||
const [ ns ] = key.split('.');
|
||||
|
||||
await this.loadServerData([key]);
|
||||
await this.loadServerData([ns]);
|
||||
if (!this.hasKey(key)) {
|
||||
console.warn(`命名空间${ns}中的${key}缺失且可能请求不到更新的数据`);
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { assert } from 'oak-domain/lib/utils/assert';
|
||||
import { cloneDeep, pull, unset, merge, uniq, omit } from "oak-domain/lib/utils/lodash";
|
||||
import { checkFilterContains, combineFilters, contains, repel, same } from "oak-domain/lib/store/filter";
|
||||
import { checkFilterContains, combineFilters } from "oak-domain/lib/store/filter";
|
||||
import { createOperationsFromModies } from 'oak-domain/lib/store/modi';
|
||||
import { judgeRelation } from "oak-domain/lib/store/relation";
|
||||
import { EntityDict, StorageSchema, OpRecord, CreateOpResult, RemoveOpResult, AspectWrapper, AuthDefDict, CascadeRelationItem, CascadeActionItem } from "oak-domain/lib/types";
|
||||
|
|
@ -168,14 +168,6 @@ abstract class Node<
|
|||
const attr2 = attr.split(':')[0]; // 处理attr:prev
|
||||
return judgeRelation(this.schema, this.entity, attr2);
|
||||
}
|
||||
|
||||
/* protected contains(filter: ED[T]['Selection']['filter'], conditionalFilter: ED[T]['Selection']['filter']) {
|
||||
return contains(this.entity, this.schema, filter, conditionalFilter);
|
||||
}
|
||||
|
||||
protected repel(filter1: ED[T]['Selection']['filter'], filter2: ED[T]['Selection']['filter']) {
|
||||
return repel(this.entity, this.schema, filter1, filter2);
|
||||
} */
|
||||
}
|
||||
|
||||
const DEFAULT_PAGINATION: Pagination = {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,21 @@
|
|||
import { WechatMpEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { WechatMpEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
|
||||
export async function getEnv() {
|
||||
const env = await wx.getSystemInfo();
|
||||
return Object.assign(env, {
|
||||
const fullEnv = Object.assign(env, {
|
||||
type: 'wechatMp',
|
||||
localStorageEnabled: true,
|
||||
language: env.language.replace('_', '-'), // 全局统一用中连接符
|
||||
}) as unknown as WechatMpEnv;
|
||||
|
||||
const briefEnv: BriefEnv = {
|
||||
system: fullEnv.system,
|
||||
wechat: `${fullEnv.platform}/${fullEnv.version}/${fullEnv.language}`,
|
||||
brand: fullEnv.brand,
|
||||
model: fullEnv.model,
|
||||
};
|
||||
return {
|
||||
fullEnv,
|
||||
briefEnv,
|
||||
};
|
||||
}
|
||||
|
|
@ -1,11 +1,21 @@
|
|||
import { NativeEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { NativeEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { Platform } from 'react-native';
|
||||
import { getLocales } from 'react-native-localize';
|
||||
|
||||
export async function getEnv() {
|
||||
const language = getLocales()[0].languageTag;
|
||||
return {
|
||||
const fullEnv = {
|
||||
...Platform,
|
||||
language,
|
||||
} as NativeEnv;
|
||||
|
||||
const briefEnv: BriefEnv = {
|
||||
brand: fullEnv.constants.Brand,
|
||||
model: fullEnv.constants.Model,
|
||||
system: `${fullEnv.OS}/${fullEnv.constants.Version || fullEnv.constants.osVersion}/${language}`,
|
||||
};
|
||||
return {
|
||||
fullEnv,
|
||||
briefEnv,
|
||||
};
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import FingerprintJS from '@fingerprintjs/fingerprintjs';
|
||||
import { pick } from 'oak-domain/lib/utils/lodash';
|
||||
import { WebEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { WebEnv, BriefEnv } from 'oak-domain/lib/types/Environment';
|
||||
|
||||
/**
|
||||
* fingerprintJs当中的一些敏感项
|
||||
|
|
@ -12,7 +12,7 @@ export async function getEnv() {
|
|||
const [result/* , localStorageEnabled */] = await Promise.all([fp.get()/* , navigator.storage.persisted() */]);
|
||||
|
||||
const { visitorId, components } = result;
|
||||
return Object.assign(
|
||||
const fullEnv = Object.assign(
|
||||
pick(components, [
|
||||
'platform',
|
||||
'timezone',
|
||||
|
|
@ -24,4 +24,14 @@ export async function getEnv() {
|
|||
// localStorageEnabled,
|
||||
language: navigator.language,
|
||||
}) as unknown as WebEnv;
|
||||
|
||||
const briefEnv: BriefEnv = {
|
||||
system: `${fullEnv.platform.value}`,
|
||||
explorer: `${fullEnv.vendor.value}/${fullEnv.vendorFlavors.value[0]}`,
|
||||
};
|
||||
|
||||
return {
|
||||
fullEnv,
|
||||
briefEnv,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue