@wix/origami-site-express 0.1.4 → 0.1.5
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.
- package/package.json +2 -2
- package/src/server/currentSite.js +12 -2
- package/src/server/dev.js +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/origami-site-express",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Run an exported Wix origami site on Node with Express and Vite.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
]
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
|
-
"falconPackageHash": "
|
|
68
|
+
"falconPackageHash": "6752e2f2177eb2d994c6179584089e00c5367134074ffcb8d5b74572"
|
|
69
69
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Vite's module runner: a linked core (outside node_modules) comes back as a new namespace object after an
|
|
6
6
|
* edit; an installed one loads once. A failed createSite is retried by the next request.
|
|
7
7
|
* @param {{ loadCore: () => Promise<any>, create: (core: any) => Promise<OrigamiSite> }} options
|
|
8
|
-
* @returns {{ currentSite: () => Promise<OrigamiSite>, site: () => OrigamiSite | undefined,
|
|
8
|
+
* @returns {{ currentSite: () => Promise<OrigamiSite>, site: () => OrigamiSite | undefined, fileChanged: (path: string) => void,
|
|
9
9
|
* siteTree: { table: () => ReturnType<OrigamiSite['table']>, onTableChange: OrigamiSite['onTableChange'] } }} */
|
|
10
10
|
export function createCurrentSite({ loadCore, create }) {
|
|
11
11
|
/** @type {{ core?: unknown, site?: OrigamiSite }} */
|
|
@@ -16,6 +16,8 @@ export function createCurrentSite({ loadCore, create }) {
|
|
|
16
16
|
const listeners = new Set()
|
|
17
17
|
/** @type {(() => void) | undefined} */
|
|
18
18
|
let unsubscribe
|
|
19
|
+
/** Files changed while a site is being created: it may have read them already, or not. */
|
|
20
|
+
const changedWhileCreating = new Set()
|
|
19
21
|
async function currentSite() {
|
|
20
22
|
const core = await loadCore()
|
|
21
23
|
if (core === current.core && current.site) return current.site
|
|
@@ -27,6 +29,8 @@ export function createCurrentSite({ loadCore, create }) {
|
|
|
27
29
|
current = {}
|
|
28
30
|
const created = await create(core)
|
|
29
31
|
current = { core, site: created }
|
|
32
|
+
for (const path of changedWhileCreating) created.fileChanged(path)
|
|
33
|
+
changedWhileCreating.clear()
|
|
30
34
|
unsubscribe?.()
|
|
31
35
|
unsubscribe = created.onTableChange(table => { for (const listener of listeners) listener(table) })
|
|
32
36
|
return created
|
|
@@ -37,8 +41,14 @@ export function createCurrentSite({ loadCore, create }) {
|
|
|
37
41
|
}
|
|
38
42
|
return {
|
|
39
43
|
currentSite,
|
|
40
|
-
/** The site already created, if any: for
|
|
44
|
+
/** The site already created, if any: for shutdown, which must not create one. */
|
|
41
45
|
site: () => current.site,
|
|
46
|
+
/** Watcher events: to the current site, or held for the one being created. Never creates one.
|
|
47
|
+
* @param {string} path */
|
|
48
|
+
fileChanged(path) {
|
|
49
|
+
if (creating) changedWhileCreating.add(path)
|
|
50
|
+
else current.site?.fileChanged(path)
|
|
51
|
+
},
|
|
42
52
|
/** What origamiVitePlugins reads. It was given once, at Vite startup, so it follows each new site. */
|
|
43
53
|
siteTree: {
|
|
44
54
|
table: async () => (await currentSite()).table(),
|
package/src/server/dev.js
CHANGED
|
@@ -17,7 +17,7 @@ export async function dev({ root }) {
|
|
|
17
17
|
const { origamiVitePlugins } = await importCoreBuild(root)
|
|
18
18
|
const node = await importCoreNode(root)
|
|
19
19
|
const serverEntry = coreEntry(root, 'server')
|
|
20
|
-
const { currentSite, site, siteTree } = createCurrentSite({
|
|
20
|
+
const { currentSite, site, fileChanged, siteTree } = createCurrentSite({
|
|
21
21
|
loadCore: () => isRunnableDevEnvironment(vite.environments.ssr) ? vite.environments.ssr.runner.import(serverEntry) : vite.ssrLoadModule(serverEntry),
|
|
22
22
|
create: core => core.createSite({ root, mode: 'dev', ...siteOptions(env) }),
|
|
23
23
|
})
|
|
@@ -35,7 +35,7 @@ export async function dev({ root }) {
|
|
|
35
35
|
// where `exports` is not defined. Add any CommonJS package the core starts importing.
|
|
36
36
|
ssr: { external: ['@wix/origami-types'] },
|
|
37
37
|
})
|
|
38
|
-
vite.watcher.on('all', (_event, path) =>
|
|
38
|
+
vite.watcher.on('all', (_event, path) => fileChanged(path))
|
|
39
39
|
const app = express()
|
|
40
40
|
app.disable('x-powered-by')
|
|
41
41
|
app.use(vite.middlewares)
|