UNPKG

1.88 kBJavaScriptView Raw
1import env from './utils/env';
2export let global = null;
3export let runtime = null;
4export let settings = null;
5
6class GlobalContext {
7 constructor() {
8 this._user = null;
9 this._state = null;
10 this._language = null;
11 }
12
13 get user() {
14 return this._user;
15 }
16
17 set user(value) {
18 this._user = value;
19 }
20
21 get state() {
22 return this._state;
23 }
24
25 set state(value) {
26 this._state = value;
27 }
28
29 get language() {
30 return this._language;
31 }
32
33 set language(value) {
34 this._language = value;
35 }
36}
37
38class RuntimeContext {
39 constructor(containerNodeId) {
40 this._containerNodeId = containerNodeId;
41 this._serverRenderContainerPattern = new RegExp(`(id=\"${containerNodeId}\"[^\>]*>?)(.*?)(<\/)`);
42 this._middleware = [];
43 if (this.isClient) {
44 this._renderContainerObject = document.getElementById(this.containerNodeId);
45 } else {
46 // the project bundler *MUST* include a __main.html module with the base html source
47 var html = require('__main.html');
48 html = html.replace(/"((?:[^"]*?)\.(?:js|css))"/g, '"/$1"');
49 this._renderContainerObject = html;
50 }
51 for (var mid of settings.MIDDLEWARE) {
52 this._middleware.push(new mid.default()); //eslint-disable-line new-cap
53 }
54 }
55
56 get middleware() {
57 return this._middleware;
58 }
59
60 get containerNodeId() {
61 return this._containerNodeId;
62 }
63
64 get serverRenderContainerPattern() {
65 return this._serverRenderContainerPattern;
66 }
67
68 get renderContainerObject() {
69 return this._renderContainerObject;
70 }
71
72 get isClient() {
73 return typeof window !== 'undefined';
74 }
75
76 get isServer() {
77 return !this.isClient;
78 }
79}
80
81export function _initContexts(settingsClass, containerNodeId) {
82 settings = new settingsClass(); //eslint-disable-line new-cap
83 global = new GlobalContext();
84 runtime = new RuntimeContext(containerNodeId);
85}