rebuildjs 0.20.1 → 0.20.2

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/browser/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { file_exists_ } from 'ctx-core/fs'
2
- import { nullish__none_, promise_timeout } from 'ctx-core/function'
2
+ import { nullish__none_, waitfor } from 'ctx-core/function'
3
3
  import { be_lock_memosig_triple_, be_memo_pair_ } from 'ctx-core/rmemo'
4
4
  import { readFile } from 'node:fs/promises'
5
5
  import { join, relative } from 'path'
@@ -11,6 +11,7 @@ export const [
11
11
  ] = be_memo_pair_(ctx=>
12
12
  join(browser_path_(ctx), 'metafile.json'),
13
13
  { ns: 'app', id: 'browser__metafile_path' })
14
+ let browser__metafile__waitfor_promise
14
15
  export const [
15
16
  browser__metafile$_,
16
17
  browser__metafile_,
@@ -18,12 +19,18 @@ export const [
18
19
  ] = be_lock_memosig_triple_(()=>
19
20
  undefined,
20
21
  async (ctx, browser__metafile$)=>{
22
+ browser__metafile$() // ensure the subscriber is run when browser__metafile$ changes
21
23
  let metafile_path
22
- if (
23
- !browser__metafile$.lock
24
- && await promise_timeout(file_exists_(metafile_path = browser__metafile_path_(ctx)), 200)
25
- ) {
26
- browser__metafile$._ = JSON.parse(await readFile(metafile_path).then(buf=>buf.toString()))
24
+ browser__metafile__waitfor_promise?.cancel?.()
25
+ if (!browser__metafile$.lock) {
26
+ metafile_path = browser__metafile_path_(ctx)
27
+ browser__metafile__waitfor_promise = waitfor(
28
+ ()=>file_exists_(browser__metafile_path_(ctx)),
29
+ 200
30
+ ).catch(()=>false)
31
+ if (await browser__metafile__waitfor_promise && metafile_path === browser__metafile_path_(ctx)) {
32
+ browser__metafile$._ = await readFile(metafile_path).then(buf=>JSON.parse(buf + ''))
33
+ }
27
34
  }
28
35
  }, { ns: 'app', id: 'browser__metafile' })
29
36
  export const [
@@ -55,7 +55,7 @@ test('browser__metafile', async ()=>{
55
55
  browser__metafile$_: _browser__metafile$_,
56
56
  browser__metafile_: _browser__metafile_,
57
57
  browser__metafile__set: _browser__metafile__set,
58
- } = await esmock('./index.js', {}, {
58
+ } = await esmock.p('./index.js', import.meta.url, {}, {
59
59
  'ctx-core/rmemo': rmemo,
60
60
  'ctx-core/fs': {
61
61
  file_exists_: async (path:string)=>{
@@ -64,6 +64,8 @@ test('browser__metafile', async ()=>{
64
64
  }
65
65
  },
66
66
  'node:fs/promises': {
67
+ // TODO: use this when https://github.com/iambumblehead/esmock/issues/281 is addressed
68
+ // access: async ()=>{},
67
69
  readFile: async (path:string)=>{
68
70
  readFile_path = path
69
71
  switch (path) {
@@ -78,7 +80,10 @@ test('browser__metafile', async ()=>{
78
80
  }
79
81
  equal(_browser__metafile$_(app_ctx)._, undefined)
80
82
  equal(_browser__metafile_(app_ctx), undefined)
81
- await rmemo__wait(_browser__metafile$_(app_ctx), m=>m, 100)
83
+ await rmemo__wait(
84
+ _browser__metafile$_(app_ctx),
85
+ m=>m,
86
+ 100)
82
87
  equal(_browser__metafile$_(app_ctx)._, browser_metafile0)
83
88
  equal(_browser__metafile_(app_ctx), browser_metafile0)
84
89
  equal(file_exists__path, '/cwd/dist0/browser/metafile.json')
@@ -86,13 +91,19 @@ test('browser__metafile', async ()=>{
86
91
  equal(_browser__metafile$_(app_ctx)._, browser_metafile0)
87
92
  equal(_browser__metafile_(app_ctx), browser_metafile0)
88
93
  dist_path__set(app_ctx, '/cwd/dist1')
89
- await rmemo__wait(_browser__metafile$_(app_ctx), m=>deep_equal(m, browser_metafile1), 100)
94
+ await rmemo__wait(
95
+ _browser__metafile$_(app_ctx),
96
+ m=>deep_equal(m, browser_metafile1),
97
+ 100)
90
98
  equal(_browser__metafile$_(app_ctx)._, browser_metafile1)
91
99
  equal(_browser__metafile_(app_ctx), browser_metafile1)
92
100
  equal(file_exists__path, '/cwd/dist1/browser/metafile.json')
93
101
  equal(readFile_path, '/cwd/dist1/browser/metafile.json')
94
102
  dist_path__set(app_ctx, '/cwd/dist0')
95
- await rmemo__wait(_browser__metafile$_(app_ctx), m=>deep_equal(m, browser_metafile0), 100)
103
+ await rmemo__wait(
104
+ _browser__metafile$_(app_ctx),
105
+ m=>deep_equal(m, browser_metafile0),
106
+ 100)
96
107
  equal(_browser__metafile$_(app_ctx)._, browser_metafile0)
97
108
  equal(_browser__metafile_(app_ctx), browser_metafile0)
98
109
  equal(file_exists__path, '/cwd/dist0/browser/metafile.json')
@@ -103,7 +114,10 @@ test('browser__metafile', async ()=>{
103
114
  dist_path__set(app_ctx, '/cwd/dist1')
104
115
  let error_msg:string|undefined = undefined
105
116
  try {
106
- await rmemo__wait(_browser__metafile$_(app_ctx), m=>deep_equal(m, browser_metafile1), 100)
117
+ await rmemo__wait(
118
+ _browser__metafile$_(app_ctx),
119
+ m=>deep_equal(m, browser_metafile1),
120
+ 100)
107
121
  } catch (e) {
108
122
  error_msg = (e as Error).message
109
123
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rebuildjs",
3
- "version": "0.20.1",
3
+ "version": "0.20.2",
4
4
  "description": "Reactive esbuild...simple hackable alternative to vite for Multi Page Apps",
5
5
  "keywords": [
6
6
  "reactive",
@@ -51,7 +51,7 @@
51
51
  "./package.json": "./package.json"
52
52
  },
53
53
  "dependencies": {
54
- "ctx-core": "^5.3.1",
54
+ "ctx-core": "^5.4.0",
55
55
  "elysia": "^0.7.30",
56
56
  "esbuild": "^0.19.10",
57
57
  "fdir": "^6.1.1",
package/server/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { file_exists_ } from 'ctx-core/fs'
2
- import { nullish__none_, promise_timeout, tup } from 'ctx-core/function'
2
+ import { nullish__none_, tup, waitfor } from 'ctx-core/function'
3
3
  import { be_lock_memosig_triple_, be_memo_pair_, be_sig_triple_ } from 'ctx-core/rmemo'
4
4
  import { readFile } from 'fs/promises'
5
5
  import { join, relative } from 'path'
@@ -10,6 +10,7 @@ export const [
10
10
  ] = be_memo_pair_(ctx=>
11
11
  join(server_path_(ctx), 'metafile.json'),
12
12
  { ns: 'app', id: 'server__metafile_path' })
13
+ let server__metafile__waitfor_promise
13
14
  export const [
14
15
  server__metafile$_,
15
16
  server__metafile_,
@@ -17,12 +18,19 @@ export const [
17
18
  ] = be_lock_memosig_triple_(()=>
18
19
  undefined,
19
20
  async (ctx, server__metafile$)=>{
21
+ server__metafile$() // ensure the subscriber is run when server__metafile$ changes
22
+ server__metafile__waitfor_promise?.cancel?.()
20
23
  let metafile_path
21
- if (
22
- !server__metafile$.lock
23
- && await promise_timeout(file_exists_(metafile_path = server__metafile_path_(ctx)), 200)
24
- ) {
25
- server__metafile$._ = JSON.parse(await readFile(metafile_path).then(buf=>buf.toString()))
24
+ if (!server__metafile$.lock) {
25
+ metafile_path = server__metafile_path_(ctx)
26
+ server__metafile__waitfor_promise = waitfor(
27
+ ()=>file_exists_(server__metafile_path_(ctx)),
28
+ 200
29
+ ).catch(()=>false)
30
+ if (await server__metafile__waitfor_promise && metafile_path === server__metafile_path_(ctx)) {
31
+ // server__metafile$._ = JSON.parse(await readFile(metafile_path).then(buf=>buf.toString()))
32
+ server__metafile$._ = await readFile(metafile_path).then(buf=>JSON.parse(buf+''))
33
+ }
26
34
  }
27
35
  }, { ns: 'app', id: 'server__metafile' })
28
36
  export const [