rebuildjs 0.50.2 → 0.51.0

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.
@@ -1,9 +1,6 @@
1
1
  import { is_entry_file_ } from 'ctx-core/fs'
2
2
  import { rebuildjs_browser__build, rebuildjs_server__build } from '../../server/build/index.js'
3
- is_entry_file_(import.meta.url, process.argv[1])
4
- .then(async is_entry_file=>{
5
- if (is_entry_file) {
6
- await rebuildjs_server__build()
7
- await rebuildjs_browser__build()
8
- }
9
- })
3
+ if (is_entry_file_(import.meta.url, process.argv[1])) {
4
+ await rebuildjs_server__build()
5
+ await rebuildjs_browser__build()
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rebuildjs",
3
- "version": "0.50.2",
3
+ "version": "0.51.0",
4
4
  "description": "Reactive esbuild...simple hackable alternative to vite for Multi Page Apps",
5
5
  "keywords": [
6
6
  "reactive",
@@ -35,31 +35,27 @@
35
35
  "exports": {
36
36
  ".": {
37
37
  "types": "./index.d.ts",
38
- "default": "./index.js",
39
- "module": "./index.js"
38
+ "default": "./index.js"
40
39
  },
41
40
  "./any": {
42
41
  "types": "./any/index.d.ts",
43
- "default": "./any/index.js",
44
- "module": "./any/index.js"
42
+ "default": "./any/index.js"
45
43
  },
46
44
  "./browser": {
47
45
  "types": "./browser/index.d.ts",
48
- "default": "./browser/index.js",
49
- "module": "./browser/index.js"
46
+ "default": "./browser/index.js"
50
47
  },
51
48
  "./types": {
52
49
  "types": "./types/index.d.ts"
53
50
  },
54
51
  "./server": {
55
52
  "types": "./server/index.d.ts",
56
- "default": "./server/index.js",
57
- "module": "./server/index.js"
53
+ "default": "./server/index.js"
58
54
  },
59
55
  "./package.json": "./package.json"
60
56
  },
61
57
  "dependencies": {
62
- "ctx-core": "^5.32.0",
58
+ "ctx-core": "^5.33.0",
63
59
  "elysia": "^0.8.14",
64
60
  "esbuild": "^0.20.0",
65
61
  "fdir": "^6.1.1",
@@ -1,6 +1,6 @@
1
1
  /// <reference types="../metafile_l0/index.d.ts" />
2
- /// <reference types="./index.d.ts" />
3
2
  import { file_exists__waitfor } from 'ctx-core/fs'
3
+ /// <reference types="./index.d.ts" />
4
4
  import {
5
5
  be,
6
6
  be_memo_pair_,
@@ -9,10 +9,10 @@ import {
9
9
  cancel__period_,
10
10
  memo_,
11
11
  nullish__none_,
12
- off,
12
+ off, promise__cancel,
13
+ promise__cancel__throw,
13
14
  rmemo__wait,
14
- run,
15
- waitfor
15
+ run
16
16
  } from 'ctx-core/rmemo'
17
17
  import { short_uuid_ } from 'ctx-core/uuid'
18
18
  import { context } from 'esbuild'
@@ -28,6 +28,8 @@ import {
28
28
  server__relative_path_,
29
29
  server_path_
30
30
  } from '../app/index.js'
31
+ import { app_ctx } from '../ctx/index.js'
32
+ import { metafile__build_id_ } from '../metafile/index.js'
31
33
  import {
32
34
  browser__metafile_,
33
35
  browser__metafile__persist,
@@ -36,8 +38,6 @@ import {
36
38
  browser__output_,
37
39
  browser__output__relative_path_
38
40
  } from '../rebuildjs_browser/index.js'
39
- import { app_ctx } from '../ctx/index.js'
40
- import { metafile__build_id_ } from '../metafile/index.js'
41
41
  import {
42
42
  server__metafile_,
43
43
  server__metafile__persist,
@@ -70,26 +70,12 @@ export const [
70
70
  const metafile__build_id = metafile__build_id_(ctx)
71
71
  const server__metafile_path = server__metafile_path_(ctx)
72
72
  const browser__metafile_path = browser__metafile_path_(ctx)
73
+ const cancel__period = cancel__period_(0, cancel_)
73
74
  if (metafile__build_id) {
74
- const cancel__period = cancel__period_(0, cancel_)
75
75
  run(async ()=>{
76
76
  try {
77
- await cmd(
78
- file_exists__waitfor(server__metafile_path, 1000, cancel__period))
79
- await cmd(
80
- waitfor(()=>
81
- readFile(server__metafile_path).then(buf=>
82
- JSON.parse('' + buf)?.build_id === build_id),
83
- 1000,
84
- cancel__period))
85
- await cmd(
86
- file_exists__waitfor(browser__metafile_path, 1000, cancel__period))
87
- await cmd(
88
- waitfor(()=>
89
- readFile(browser__metafile_path).then(buf=>
90
- JSON.parse('' + buf)?.build_id === build_id),
91
- 1000,
92
- cancel__period))
77
+ await build_id__match__waitfor(server__metafile_path)
78
+ await build_id__match__waitfor(browser__metafile_path)
93
79
  persist__metafile__build_id$._ = build_id
94
80
  } catch (err) {
95
81
  if (err instanceof Cancel) return
@@ -97,13 +83,23 @@ export const [
97
83
  }
98
84
  })
99
85
  }
86
+ function build_id__match__waitfor(metafile_path) {
87
+ return file_exists__waitfor(async ()=>{
88
+ const buf = await cmd(readFile(metafile_path))
89
+ const json = buf + ''
90
+ try {
91
+ return JSON.parse(json).build_id === build_id
92
+ } catch {
93
+ return undefined
94
+ }
95
+ },
96
+ 1000,
97
+ cancel__period)
98
+ }
100
99
  async function cmd(promise) {
101
- if (cancel_()) throw new Cancel
100
+ if (cancel_()) promise__cancel__throw(promise)
102
101
  const rv = await promise
103
- if (cancel_()) {
104
- promise.cancel?.()
105
- throw new Cancel
106
- }
102
+ if (cancel_()) promise__cancel__throw(promise)
107
103
  return rv
108
104
  }
109
105
  function cancel_() {
@@ -196,6 +192,10 @@ export async function rebuildjs_browser__build(config) {
196
192
  .withFullPaths()
197
193
  .crawl(app_path_(app_ctx))
198
194
  .withPromise()
195
+ .catch(err=>{
196
+ console.error('fdir|browser|catch', { err })
197
+ throw err
198
+ })
199
199
  /** @type {string[]} */
200
200
  const entryPoints = esbuild__config?.entryPoints ?? []
201
201
  for (const path of path_a) {
@@ -247,6 +247,10 @@ export async function rebuildjs_server__build(config) {
247
247
  .withFullPaths()
248
248
  .crawl(app_path_(app_ctx))
249
249
  .withPromise()
250
+ .catch(err=>{
251
+ console.error('fdir|server|catch', { err })
252
+ throw err
253
+ })
250
254
  /** @type {string[]} */
251
255
  const entryPoints = esbuild__config?.entryPoints ?? []
252
256
  for (const path of path_a) {
@@ -381,14 +385,18 @@ export function rebuildjs_plugin_() {
381
385
  if (cssBundle && esbuild_cssBundle) {
382
386
  const cssBundle_path = join(cwd_(ctx), cssBundle)
383
387
  const esbuild_cssBundle_path = join(cwd_(ctx), esbuild_cssBundle)
384
- await cmd(
385
- file_exists__waitfor(cssBundle_path))
386
- await cmd(
387
- cp(cssBundle_path, esbuild_cssBundle_path))
388
- await cmd(
389
- file_exists__waitfor(cssBundle_path + '.map'))
390
- await cmd(
391
- cp(cssBundle_path + '.map', esbuild_cssBundle_path + '.map'))
388
+ await file_exists__waitfor(async ()=>{
389
+ await cmd(
390
+ cp(cssBundle_path, esbuild_cssBundle_path))
391
+ return true
392
+ })
393
+ await file_exists__waitfor(async ()=>{
394
+ await cmd(
395
+ cp(
396
+ cssBundle_path + '.map',
397
+ esbuild_cssBundle_path + '.map'))
398
+ return true
399
+ })
392
400
  }
393
401
  }
394
402
  }
@@ -407,25 +415,26 @@ export function rebuildjs_plugin_() {
407
415
  const browser_asset_path = join(
408
416
  browser_path,
409
417
  relative(server__relative_path, output__relative_path))
410
- await cmd(
411
- rm(browser_asset_path, { force: true }))
412
- await cmd(
413
- file_exists__waitfor(server_asset_path))
414
- await cmd(
415
- link(server_asset_path, browser_asset_path))
418
+ await file_exists__waitfor(async ()=>{
419
+ await cmd(
420
+ rm(browser_asset_path, { force: true }))
421
+ await cmd(
422
+ link(server_asset_path, browser_asset_path))
423
+ return true
424
+ })
416
425
  }
417
426
  }
418
427
  async function cmd(promise) {
419
- if (cancel_()) throw new Cancel()
428
+ if (cancel_()) promise__cancel__throw(promise)
420
429
  promise.rebuildjs_cancel$ = run(memo_(rebuildjs_cancel$=>{
421
430
  if (cancel_()) {
422
- promise.cancel?.()
431
+ promise__cancel(promise)
423
432
  off(rebuildjs_cancel$)
424
433
  }
425
434
  return rebuildjs_cancel$
426
435
  }))
427
436
  const ret = await promise
428
- if (cancel_()) throw new Cancel()
437
+ if (cancel_()) promise__cancel__throw(promise)
429
438
  return ret
430
439
  }
431
440
  function cancel_() {
@@ -7,7 +7,12 @@ import { rm } from 'node:fs/promises'
7
7
  import { basename, dirname, join } from 'node:path'
8
8
  import { test } from 'uvu'
9
9
  import { equal, throws } from 'uvu/assert'
10
- import { browser__metafile0, browser__metafile1, server__metafile0, server__metafile1 } from '../../_fixtures/metafiles.js'
10
+ import {
11
+ browser__metafile0,
12
+ browser__metafile1,
13
+ server__metafile0,
14
+ server__metafile1
15
+ } from '../../_fixtures/metafiles.js'
11
16
  import { cwd_, cwd__set } from '../app/index.js'
12
17
  import { browser__metafile_, browser__metafile__set } from '../rebuildjs_browser/index.js'
13
18
  import { app_ctx } from '../ctx/index.js'
@@ -214,7 +219,8 @@ test('rebuildjs_browser__build|rebuildjs_server__build|rebuildjs_plugin_|css', a
214
219
  true)
215
220
  equal(
216
221
  await readFile(join(cwd_(app_ctx), browser__entryPoint__output.cssBundle + '.map')).then(buf=>buf + '')
217
- === await readFile(join(cwd_(app_ctx), browser__entryPoint__output.esbuild_cssBundle + '.map')).then(buf=>buf + ''),
222
+ === await readFile(join(cwd_(app_ctx), browser__entryPoint__output.esbuild_cssBundle + '.map')).then(
223
+ buf=>buf + ''),
218
224
  true)
219
225
  equal(
220
226
  await readFile(join(cwd_(app_ctx), server__entryPoint__output.cssBundle!)).then(buf=>buf + '')
@@ -222,7 +228,8 @@ test('rebuildjs_browser__build|rebuildjs_server__build|rebuildjs_plugin_|css', a
222
228
  true)
223
229
  equal(
224
230
  await readFile(join(cwd_(app_ctx), browser__entryPoint__output.cssBundle + '.map')).then(buf=>buf + '')
225
- === await readFile(join(cwd_(app_ctx), browser__entryPoint__output.esbuild_cssBundle + '.map')).then(buf=>buf + ''),
231
+ === await readFile(join(cwd_(app_ctx), browser__entryPoint__output.esbuild_cssBundle + '.map')).then(
232
+ buf=>buf + ''),
226
233
  true)
227
234
  } finally {
228
235
  await rebuildjs__ready__wait()
@@ -5,9 +5,9 @@ import {
5
5
  Cancel,
6
6
  memo_,
7
7
  nullish__none_,
8
+ promise__cancel__throw,
8
9
  sleep,
9
- tup,
10
- waitfor
10
+ tup
11
11
  } from 'ctx-core/rmemo'
12
12
  import { mkdir, readFile, writeFile } from 'node:fs/promises'
13
13
  import { join, relative } from 'node:path'
@@ -32,39 +32,29 @@ export const [
32
32
  memo_(browser__metafile__waitfor_promise$=>{
33
33
  browser__metafile__waitfor_promise$.val?.cancel?.()
34
34
  if (browser__metafile$.lock) return
35
- return nullish__none_([browser__metafile_path_(ctx)],
35
+ nullish__none_([browser__metafile_path_(ctx)],
36
36
  browser__metafile_path=>{
37
- const browser__metafile__waitfor_promise =
38
- file_exists__waitfor(
39
- browser__metafile_path,
40
- 1000,
41
- ()=>cmd(sleep(0)))
42
- cmd(browser__metafile__waitfor_promise)
43
- .then(async success=>{
44
- if (success) {
45
- browser__metafile$._ = await cmd(
46
- waitfor(async ()=>{
47
- const buf = await cmd(readFile(browser__metafile_path))
48
- const json = buf + ''
49
- try {
50
- return JSON.parse(json)
51
- } catch {
52
- return undefined
53
- }
54
- }, 1000))
37
+ browser__metafile__waitfor_promise$._ =
38
+ file_exists__waitfor(async ()=>{
39
+ const buf = await cmd(
40
+ readFile(browser__metafile_path))
41
+ const json = buf + ''
42
+ try {
43
+ return browser__metafile$._ = JSON.parse(json)
44
+ } catch {
45
+ return undefined
55
46
  }
56
- }).catch(err=>{
47
+ },
48
+ 1000,
49
+ ()=>cmd(sleep(0))
50
+ ).catch(err=>{
57
51
  if (err instanceof Cancel) return
58
52
  throw err
59
53
  })
60
- return browser__metafile__waitfor_promise
61
54
  async function cmd(promise) {
62
- if (cancel_()) throw new Cancel()
55
+ if (cancel_()) promise__cancel__throw(promise)
63
56
  const rv = await promise
64
- if (cancel_()) {
65
- promise.cancel?.()
66
- throw new Cancel()
67
- }
57
+ if (cancel_()) promise__cancel__throw(promise)
68
58
  return rv
69
59
  }
70
60
  function cancel_() {
@@ -56,7 +56,6 @@ test('browser__metafile_path', ()=>{
56
56
  throws(()=>browser__metafile_path_(ctx_()))
57
57
  })
58
58
  test('browser__metafile', async ()=>{
59
- let file_exists__waitfor__path:string|undefined = undefined
60
59
  let readFile_path:string|undefined = undefined
61
60
  let _browser__metafile$_:typeof browser__metafile$_
62
61
  let _browser__metafile_:typeof browser__metafile_
@@ -70,13 +69,6 @@ test('browser__metafile', async ()=>{
70
69
  browser__metafile__set: _browser__metafile__set,
71
70
  } = await esmock.p('./index.js', import.meta.url, {}, {
72
71
  'ctx-core/rmemo': rmemo,
73
- // TODO: remove with https://github.com/iambumblehead/esmock/issues/281
74
- 'ctx-core/fs': {
75
- file_exists__waitfor: async (path:string)=>{
76
- file_exists__waitfor__path = path
77
- return true
78
- }
79
- },
80
72
  'node:fs/promises': {
81
73
  // TODO: https://github.com/iambumblehead/esmock/issues/281
82
74
  // access: async ()=>{},
@@ -101,7 +93,6 @@ test('browser__metafile', async ()=>{
101
93
  100)
102
94
  equal(_browser__metafile$_(app_ctx)._, browser__metafile0)
103
95
  equal(_browser__metafile_(app_ctx), browser__metafile0)
104
- equal(file_exists__waitfor__path, '/cwd/dist0/browser/metafile.json')
105
96
  equal(readFile_path, '/cwd/dist0/browser/metafile.json')
106
97
  equal(_browser__metafile$_(app_ctx)._, browser__metafile0)
107
98
  equal(_browser__metafile_(app_ctx), browser__metafile0)
@@ -112,7 +103,6 @@ test('browser__metafile', async ()=>{
112
103
  100)
113
104
  equal(_browser__metafile$_(app_ctx)._, browser__metafile1)
114
105
  equal(_browser__metafile_(app_ctx), browser__metafile1)
115
- equal(file_exists__waitfor__path, '/cwd/dist1/browser/metafile.json')
116
106
  equal(readFile_path, '/cwd/dist1/browser/metafile.json')
117
107
  dist_path__set(app_ctx, '/cwd/dist0')
118
108
  await rmemo__wait(
@@ -121,7 +111,6 @@ test('browser__metafile', async ()=>{
121
111
  100)
122
112
  equal(_browser__metafile$_(app_ctx)._, browser__metafile0)
123
113
  equal(_browser__metafile_(app_ctx), browser__metafile0)
124
- equal(file_exists__waitfor__path, '/cwd/dist0/browser/metafile.json')
125
114
  equal(readFile_path, '/cwd/dist0/browser/metafile.json')
126
115
  _browser__metafile__set(app_ctx, browser__metafile2)
127
116
  equal(_browser__metafile$_(app_ctx)._, browser__metafile2)
@@ -5,10 +5,9 @@ import {
5
5
  be_sig_triple_,
6
6
  Cancel,
7
7
  memo_,
8
- nullish__none_,
8
+ nullish__none_, promise__cancel__throw,
9
9
  sleep,
10
- tup,
11
- waitfor
10
+ tup
12
11
  } from 'ctx-core/rmemo'
13
12
  import { mkdir, readFile, writeFile } from 'node:fs/promises'
14
13
  import { join, relative } from 'node:path'
@@ -32,39 +31,29 @@ export const [
32
31
  memo_(server__metafile__waitfor_promise$=>{
33
32
  server__metafile__waitfor_promise$.val?.cancel?.()
34
33
  if (server__metafile$.lock) return
35
- return nullish__none_([server__metafile_path_(ctx)],
34
+ nullish__none_([server__metafile_path_(ctx)],
36
35
  server__metafile_path=>{
37
- const server__metafile__waitfor_promise =
38
- file_exists__waitfor(
39
- server__metafile_path,
40
- 1000,
41
- ()=>cmd(sleep(0)))
42
- cmd(server__metafile__waitfor_promise)
43
- .then(async success=>{
44
- if (success) {
45
- server__metafile$._ = await cmd(
46
- waitfor(async ()=>{
47
- const buf = await cmd(readFile(server__metafile_path))
48
- const json = buf + ''
49
- try {
50
- return JSON.parse(json)
51
- } catch {
52
- return undefined
53
- }
54
- }, 1000))
36
+ server__metafile__waitfor_promise$._ =
37
+ file_exists__waitfor(async ()=>{
38
+ const buf = await cmd(
39
+ readFile(server__metafile_path))
40
+ const json = buf + ''
41
+ try {
42
+ return server__metafile$._ = JSON.parse(json)
43
+ } catch {
44
+ return undefined
55
45
  }
56
- }).catch(err=>{
46
+ },
47
+ 1000,
48
+ ()=>cmd(sleep(0))
49
+ ).catch(err=>{
57
50
  if (err instanceof Cancel) return
58
51
  throw err
59
52
  })
60
- return server__metafile__waitfor_promise
61
53
  async function cmd(promise) {
62
- if (cancel_()) throw new Cancel()
54
+ if (cancel_()) promise__cancel__throw(promise)
63
55
  const rv = await promise
64
- if (cancel_()) {
65
- promise.cancel?.()
66
- throw new Cancel()
67
- }
56
+ if (cancel_()) promise__cancel__throw(promise)
68
57
  return rv
69
58
  }
70
59
  function cancel_() {
@@ -51,7 +51,6 @@ test('server__metafile_path', ()=>{
51
51
  throws(()=>server__metafile_path_(ctx_()))
52
52
  })
53
53
  test('server__metafile', async ()=>{
54
- let file_exists__waitfor__path:string|undefined = undefined
55
54
  let readFile_path:string|undefined = undefined
56
55
  let _server__metafile$_:typeof server__metafile$_
57
56
  let _server__metafile_:typeof server__metafile_
@@ -63,16 +62,8 @@ test('server__metafile', async ()=>{
63
62
  server__metafile__set: _server__metafile__set,
64
63
  } = await esmock('./index.js', {}, {
65
64
  'ctx-core/rmemo': rmemo,
66
- // TODO: remove with https://github.com/iambumblehead/esmock/issues/281
67
- 'ctx-core/fs': {
68
- file_exists__waitfor: async (path:string)=>{
69
- file_exists__waitfor__path = path
70
- return true
71
- }
72
- },
73
65
  'node:fs/promises': {
74
- // TODO: https://github.com/iambumblehead/esmock/issues/281
75
- // access: async ()=>{},
66
+ access: async ()=>{},
76
67
  readFile: async (path:string)=>{
77
68
  readFile_path = path
78
69
  switch (path) {
@@ -98,7 +89,6 @@ test('server__metafile', async ()=>{
98
89
  100)
99
90
  equal(_server__metafile$_(app_ctx)._, server__metafile0)
100
91
  equal(_server__metafile_(app_ctx), server__metafile0)
101
- equal(file_exists__waitfor__path, '/cwd/dist0/server/metafile.json')
102
92
  equal(readFile_path, '/cwd/dist0/server/metafile.json')
103
93
  equal(_server__metafile$_(app_ctx)._, server__metafile0)
104
94
  equal(_server__metafile_(app_ctx), server__metafile0)
@@ -109,7 +99,6 @@ test('server__metafile', async ()=>{
109
99
  100)
110
100
  equal(_server__metafile$_(app_ctx)._, server__metafile1)
111
101
  equal(_server__metafile_(app_ctx), server__metafile1)
112
- equal(file_exists__waitfor__path, '/cwd/dist1/server/metafile.json')
113
102
  equal(readFile_path, '/cwd/dist1/server/metafile.json')
114
103
  dist_path__set(app_ctx, '/cwd/dist0')
115
104
  await rmemo__wait(
@@ -118,7 +107,6 @@ test('server__metafile', async ()=>{
118
107
  100)
119
108
  equal(_server__metafile$_(app_ctx)._, server__metafile0)
120
109
  equal(_server__metafile_(app_ctx), server__metafile0)
121
- equal(file_exists__waitfor__path, '/cwd/dist0/server/metafile.json')
122
110
  equal(readFile_path, '/cwd/dist0/server/metafile.json')
123
111
  _server__metafile__set(app_ctx, server__metafile2)
124
112
  equal(_server__metafile$_(app_ctx)._, server__metafile2)