rebuildjs 0.20.0 → 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_ } 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 file_exists_(metafile_path = browser__metafile_path_(ctx))
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/ctx/index.test.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { Ctx } from 'ctx-core/be'
2
- import { Equal, Expect } from 'ctx-core/test'
1
+ import { type Ctx } from 'ctx-core/be'
2
+ import type { Equal, Expect } from 'ctx-core/test'
3
3
  import { test } from 'uvu'
4
4
  import { app_ctx, middleware_ctx_, route_ctx_ } from './index.js'
5
5
  test.after.each(()=>{
@@ -18,8 +18,8 @@ test('middleware_ctx_', ()=>{
18
18
  })
19
19
  test('route_ctx_', ()=>{
20
20
  const route_ctx = route_ctx_(middleware_ctx_())
21
- /* eslint-disable @typescript-eslint/no-unused-vars */
22
- type test_route_ctx = Expect<Equal<typeof route_ctx, Ctx<''|'app'|'middleware'|'route'>>>
23
- /* eslint-enable @typescript-eslint/no-unused-vars */
21
+ /* eslint-disable @typescript-eslint/no-unused-vars */
22
+ type test_route_ctx = Expect<Equal<typeof route_ctx, Ctx<''|'app'|'middleware'|'route'>>>
23
+ /* eslint-enable @typescript-eslint/no-unused-vars */
24
24
  })
25
25
  test.run()
package/metafile/index.js CHANGED
@@ -8,6 +8,6 @@ export async function metafile__wait(timeout = 5000) {
8
8
  val=>val !== undefined,
9
9
  timeout
10
10
  ).catch(err=>{
11
- throw Error('browser & server metafile timeout', { cause: err })
11
+ throw Error('metafile__wait|browser & server metafile timeout', { cause: err })
12
12
  })
13
13
  }
@@ -31,7 +31,7 @@ test('metafile__wait|failure', async ()=>{
31
31
  } catch (_err) {
32
32
  err = _err as Error
33
33
  }
34
- equal(err?.message, 'browser & server metafile timeout')
34
+ equal(err?.message, 'metafile__wait|browser & server metafile timeout')
35
35
  equal((err?.cause as Error)?.message, 'Timeout 0ms')
36
36
  })
37
37
  test.run()
@@ -1,4 +1,4 @@
1
- import { Equal, Expect } from 'ctx-core/test'
1
+ import type { Equal, Expect } from 'ctx-core/test'
2
2
  import { test } from 'uvu'
3
3
  import { equal } from 'uvu/assert'
4
4
  import { app_ctx, middleware_ctx_T } from '../ctx/index.js'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rebuildjs",
3
- "version": "0.20.0",
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_, 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 file_exists_(metafile_path = server__metafile_path_(ctx))
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 [
@@ -37,8 +45,8 @@ export const [
37
45
  server__output_
38
46
  ] = be_memo_pair_(ctx=>
39
47
  nullish__none_(tup(server__metafile_(ctx), server__output__relative_path_(ctx)),
40
- (server__metafile, output_path)=>
41
- server__metafile.outputs[output_path]),
48
+ (server__metafile, server__output__relative_path)=>
49
+ server__metafile.outputs[server__output__relative_path]),
42
50
  { ns: 'middleware', id: 'server__output' })
43
51
  export const [
44
52
  server__cssBundle__relative_path$_,