@live-change/server 0.9.120 → 0.9.121

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/Renderer.js +40 -7
  2. package/package.json +7 -7
package/lib/Renderer.js CHANGED
@@ -4,6 +4,8 @@ import * as vite from 'vite'
4
4
  import serialize from 'serialize-javascript'
5
5
  import renderTemplate from './renderTemplate.js'
6
6
  import { SitemapStream } from 'sitemap'
7
+ import vm from 'vm'
8
+ import { createRequire } from 'module'
7
9
 
8
10
  class Renderer {
9
11
  constructor(manifest, settings) {
@@ -16,10 +18,17 @@ class Renderer {
16
18
  if(this.settings.dev) {
17
19
  await this.setupVite()
18
20
  } else {
19
- const serverEntryPath = path.resolve(this.root, this.settings.serverEntry ?? './dist/server/entry-server.js')
20
- this.module = await import(serverEntryPath)
21
- this.renderer = this.module.render
22
- this.sitemap = this.module.sitemap
21
+ const serverEntryPath = path.resolve(this.root, this.settings.serverEntry ?? './dist/server/server.cjs')
22
+ const serverEntryCode = await fs.promises.readFile(serverEntryPath, { encoding: 'utf-8' })
23
+ this.script = new vm.Script(serverEntryCode, {
24
+ filename: serverEntryPath,
25
+ lineOffset: 0,
26
+ columnOffset: 0
27
+ })
28
+ this.baseContext = {
29
+ require: createRequire(serverEntryPath),
30
+ __dirname: path.dirname(serverEntryPath),
31
+ }
23
32
  const templatePath = path.resolve(this.root, this.settings.templatePath ?? './dist/client/index.html')
24
33
  this.template = await fs.promises.readFile(templatePath, { encoding: 'utf-8' })
25
34
  }
@@ -44,7 +53,7 @@ class Renderer {
44
53
  }
45
54
 
46
55
  async renderPage(params) {
47
- const { url, headers, dao, clientIp, credentials, windowId, version, now, domain } = params
56
+ const { url, headers, dao, clientIp, credentials, windowId, version, now, domain } = params
48
57
 
49
58
  const render = await this.getRenderFunction()
50
59
  const { html: appHtml, modules, data, meta, response } = await render(params)
@@ -118,13 +127,36 @@ class Renderer {
118
127
  return template
119
128
  }
120
129
 
130
+ async createRenderContext() {
131
+ const contextObject = {
132
+ //...globalThis,
133
+ ...this.baseContext,
134
+ exports: {},
135
+ //process: process,
136
+ process: {
137
+ env: {
138
+ NODE_ENV: 'production'
139
+ },
140
+ stdout: process.stdout,
141
+ stderr: process.stderr,
142
+ }
143
+ }
144
+ const requestContext = vm.createContext(contextObject, {
145
+ name: 'SSR Render '+(new Date().toISOString()),
146
+ ///microtaskMode: 'afterEvaluate'
147
+ })
148
+ this.script.runInContext(requestContext)
149
+ return contextObject
150
+ }
151
+
121
152
  async getRenderFunction() {
122
153
  if(this.settings.dev) {
123
154
  /// Reload every request
124
155
  const entryPath = path.resolve(this.root, this.settings.serverEntry || 'src/entry-server.js')
125
156
  return (await this.vite.ssrLoadModule(entryPath)).render
126
157
  } else {
127
- return this.renderer
158
+ const context = await this.createRenderContext()
159
+ return context.exports.render
128
160
  }
129
161
  }
130
162
 
@@ -134,7 +166,8 @@ class Renderer {
134
166
  const entryPath = path.resolve(this.root, this.settings.serverEntry || 'src/entry-server.js')
135
167
  return (await this.vite.ssrLoadModule(entryPath)).sitemap
136
168
  } else {
137
- return this.sitemap
169
+ const context = await this.createRenderContext()
170
+ return context.exports.sitemap
138
171
  }
139
172
  }
140
173
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/server",
3
- "version": "0.9.120",
3
+ "version": "0.9.121",
4
4
  "description": "Live Change Framework - server",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -22,12 +22,12 @@
22
22
  "type": "module",
23
23
  "homepage": "https://github.com/live-change/live-change-stack",
24
24
  "dependencies": {
25
- "@live-change/dao": "^0.9.120",
26
- "@live-change/dao-sockjs": "^0.9.120",
27
- "@live-change/db-server": "^0.9.120",
28
- "@live-change/framework": "^0.9.120",
25
+ "@live-change/dao": "^0.9.121",
26
+ "@live-change/dao-sockjs": "^0.9.121",
27
+ "@live-change/db-server": "^0.9.121",
28
+ "@live-change/framework": "^0.9.121",
29
29
  "@live-change/sockjs": "0.4.1",
30
- "@live-change/uid": "^0.9.120",
30
+ "@live-change/uid": "^0.9.121",
31
31
  "dotenv": "^17.2.1",
32
32
  "express": "^4.18.2",
33
33
  "express-static-gzip": "2.1.7",
@@ -39,5 +39,5 @@
39
39
  "websocket": "^1.0.34",
40
40
  "yargs": "^17.7.2"
41
41
  },
42
- "gitHead": "a96651b4ee83892d1224f7a5e3e17681f07a20f2"
42
+ "gitHead": "4052c94c9fcd898af1ed1ef7d497e2fc807b5cb0"
43
43
  }