@live-change/server 0.9.120 → 0.9.122

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 +41 -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,37 @@ 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
+ nextTick: process.nextTick
143
+ }
144
+ }
145
+ const requestContext = vm.createContext(contextObject, {
146
+ name: 'SSR Render '+(new Date().toISOString()),
147
+ ///microtaskMode: 'afterEvaluate'
148
+ })
149
+ this.script.runInContext(requestContext)
150
+ return contextObject
151
+ }
152
+
121
153
  async getRenderFunction() {
122
154
  if(this.settings.dev) {
123
155
  /// Reload every request
124
156
  const entryPath = path.resolve(this.root, this.settings.serverEntry || 'src/entry-server.js')
125
157
  return (await this.vite.ssrLoadModule(entryPath)).render
126
158
  } else {
127
- return this.renderer
159
+ const context = await this.createRenderContext()
160
+ return context.exports.render
128
161
  }
129
162
  }
130
163
 
@@ -134,7 +167,8 @@ class Renderer {
134
167
  const entryPath = path.resolve(this.root, this.settings.serverEntry || 'src/entry-server.js')
135
168
  return (await this.vite.ssrLoadModule(entryPath)).sitemap
136
169
  } else {
137
- return this.sitemap
170
+ const context = await this.createRenderContext()
171
+ return context.exports.sitemap
138
172
  }
139
173
  }
140
174
 
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.122",
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.122",
26
+ "@live-change/dao-sockjs": "^0.9.122",
27
+ "@live-change/db-server": "^0.9.122",
28
+ "@live-change/framework": "^0.9.122",
29
29
  "@live-change/sockjs": "0.4.1",
30
- "@live-change/uid": "^0.9.120",
30
+ "@live-change/uid": "^0.9.122",
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": "e65f06f76a839f3ddf55a23eb4ff17cafafc2b84"
43
43
  }